Jump to content


  • Content Count

  • Joined

  • Last visited

Community Reputation

13 Good

About Staehrminator

  • Rank
    (1) Prestidigitator
  1. Thank you very much for the effects list, this is a godsend. Looking up all these values is very tedious.
  2. The tooltip will not change I believe, you'll need to edit the text files for that. But the ability itself should be changed. Do your stats on the C screen change accordingly when you're using the chant?
  3. You need to follow the recipe very carefully. I haven't done this myself in a long while, but as long as you do it exactly the way I've outlined it should work fine. Remember to have the correct index on your added effect, and to increase the array's size to 2.
  4. Good job on buffing Rogues and Barbarians in the last patch! This was very much needed and thank you for doing it! Below is my wishlist for the next one. I second the idea that combat should not end if you've charmed all enemies. It does make the Ringleader ability very useless. The Druid has similar problems with his animal-taming skills. For that same reason, a solo Chanter cannot let his enemies lose focus on him by kiting them outside their aggro range (which is normally the only way to get through PotD solo), because that will make him lose all his Phrases. I wish that combat would last a few seconds longer than it normally does, or alternatively, that Ciphers and Chanters retain their Focus and Phrases for a few seconds after combat has ended. The dialogue popup in the main hall of Caed Nua, where the Steward greets you, will immediately break your stealth. This makes it impossible to sneak past the lethal Phantoms that spawn there, and makes that area a nightmare for solo characters, requiring use of the the Bronze Horn, exploiting dodgy enemy pathfinding, having a ranged weapon and an incredible amount of luck. Could you make it so that dialogue does not break your stealth? Alternatively, could you reduce the trigger zone for that dialogue so that it does not appear unless you approach the throne? Similarly, the dialogue popup with Tenfrith where he drops his spoon will appear as soon as you enter combat with his captors, and break your Stealth. This will whiff any Backstabs you would normally have got on them as a Rogue, even if you managed to sneak up on them undetected. Could you make the dialogue only pop up if you approach them in an unstealthy manner? When you first come to the Valewood, if you aggro the Outlaw and subsequently Tenfrith's captors, and then kill them all, Tenfrith will greet you as usual. But, when you later visit Pasca in the Black Hound inn, she will never thank you for rescuing Tenfrith. You do get the quest experience though. This does not happen if you get the pop-up dialogue where Tenfrith drops his spoon, in that case Pasca will recognize that you saved him. Please let us place more than one trap at a time, or make traps stronger based on your Mechanics skill. Traps are currently vendor trash, and have practically no effect in PotD. Let us drink Beer in combat, and drink potions out of combat. I understand that letting you cast spells and read scrolls out of combat makes the enemies too easy to kite, but I really don't see the harm in letting you drink, say, a potion of Bulwark against the Elements to survive a trap-infested corridor. Currently that's not possible unless you're in combat. The two villagers in Anslög's Compass are not marked as Allies, so for example Aloth will happily skewer them with his Ghost Blades, whereupon they will aggro you. Usually in these cases (Tenfrith, the villager who gets attacked by wolves in Magran's Fork, etc) the innocents are Allies and the aggressors are Enemies, and there is nothing in their dialogue that would indicate they are not friendly to you. Make Bloody Slaughter activate when enemies are <20% health (when their tooltip says "Almost Dead"), up from the current <10% health.
  5. 3. Probably it's the animations then. Good luck changing those. Try opening the Gunner talent and see what stat it modifies. Find the corresponding stat in CharacterStats, then look where it's used. ModifiedStat won't show any usages, probably because it's an enum, so you have to look at CharacterStats.
  6. 1. These values are overwritten by game assets. Look for an asset for the one-handed bonus. 2. This is an enum, I believe it is in StatusEffect or StatusEffectParams. They correspond to a stat in CharacterStats. 3. These are probably saved in the asset files for each weapon, including fists. Or try checking the AttackBase class.
  7. Read this: https://forums.obsidian.net/topic/86074-tutorial-editing-abilities-talents-and-items/ There should be a value in the ability that says what level this skill becomes available.
  8. In my other tutorial (https://forums.obsidian.net/topic/86034-tutorial-making-potions-usable-outside-of-combat/) I explained how to edit the game files by using UABE and a hex editor. But, a hex editor will only get us so far. It will work fine for just changing values and setting properties, but if we want to do more advanced stuff we need a better way to edit these files. Let's say we want to edit the Rogue's Dirty Fighting ability to give it a bonus to Interrupt as well as hit-to-crit conversion. How do we do that? Read on. Step 1: The file Read my other tutorial to figure out how to find Dirty Fighting's .unity3d file and open it with UABE (Disunity will not work). Again, find the biggest MonoBehaviour and look at it. This is a GeneralAbility, and it has a StatusEffects array which is interesting. Open it, and you'll see a StatusEffect that modifies one stat by 1.1. This is the 10% extra hit-to-crit chance. Ideally, we would have a second StatusEffect in this array, for the extra Interrupt. But since this is too tedious to do with a hex editor, let's do it the proper way! Step 2: Exporting Close down all the UABE windows except the first one, where it says CAB-xxxxetc. Click the Export button. It will prompt you for a location and a file name, let's call it Export.assets (the file type doesn't matter). Use UABE to open the file you just exported. It will take you straight to the assets info screen, with one important difference that we'll come back to later. For now, just highlight the largest MonoBehaviour and click Export Dump. Save it as Dump.txt. Step 3: Editing Now, open the Dump.txt you just saved. Here is our ability, in a nice readable format. And, what's more, we can now edit this text file, import it back into the asset and our changes will be applied! So, scroll down and find the StatusEffects array. Inside it is an item, starting with a [0] line. Now, we could just copy that whole item (from [0] down to and including m_deserializeInitiated), then go in and change the extra stat, but then we would need to figure out what value represents Interrupt in the ModifiedStat property, which requires opening up the game code in ILSpy. A much easier way is to find the Interrupting Blows' .unity3d file, export it to a dump in the same way we did earlier, and copy that item's StatusEffect into this file, changing the Value for the interrupt bonus from 15 to whatever you like. Whichever way you do it, remember to change the second [0] to [1], and set the array's Size to 2. Now you're done editing, so let's reimport the file. Step 4: Importing Open up Export.assets again, and select the largest MonoBehaviour. Now, click the Import Dump button (this one only appears when you open assets files, hence why I mentioned that it's an important difference) and select your dump.txt. Nothing much will happen, but it has now imported your changes. In the current window, press File->Save. It won't let you save as the file you have opened, so call it Import.assets. All right, now open the Dirty Fighting .unity3d, and choose Import. Select Import.assets. Again, no confirmation, but it has imported the asset file back into the bundle. Save this file (from the window where it says CAB-xxxxx), as DirtyFighting2.unity3d. If you want, you can open the file you just saved, go in and look at the info, and the StatusEffects array should now have a second item which modifies Interrupt. You're done! Rename the edited .unity3d file to the same name as the one in the game's directory, and put it there (back up the old one first). Then enjoy your new ability in-game.
  9. It is not difficult at all. All Unity games have the code wide open, you can go right in and and edit it. I've mentioned some important parameters in this post: https://forums.obsidian.net/topic/85315-modifying-soulbound-weapons/?do=findComment&comment=1800466 Use a program called ILSpy to look at the code to figure out where in the disassembly you need to make changes. You can export the C# code with ILSpy too, but it won't compile, you need to use IL(D)ASM. Or, you could try to hex edit the .unity3d file for the monk's Transcendent Suffering ability and add the +DR there, but that *is* actually difficult.
  10. Cool! Skills I feel is a bit too much, but I would love to have scrolls and potions usable outside combat. Any chance it will also let you place more than one trap?
  11. Okay guys, listen. OP almost had the correct approach with the IL(D)ASM routine, you just need to remember a few things: ILDASM must be called with the /quo parameter: ildasm.exe assembly-csharp.dll /out="code.il" /quo /typ The /quo is very important, as it will ensure that variable names are 'quoted', if they are not then the assembly code will not recompile. You should also add a /typ parameter after /quo to preserve type list and sorting. This will let your mod work with other mods, and is just a generally nice thing to do. If you're planning on making a program that edits the assembly automatically then you can add a /utf parameter so you know what encoding to use. Now, as for ILASM you need these parameters: ilasm.exe "code.il" /dll /res="code.res" /out="Assembly-CSharp.dll" As for editing the disassembled code, well, sorry to burst your bathtub bubbles, but you'll have to learn the CIL language. I don't know of any tool that can convert disassembled CIL to C#. Fear not - it's easy once you get the hang of it, and is much better to work with than actual assembly code, as we had to do in the past. Here is a good starting point: http://www.codeproject.com/Articles/362076/Understanding-Common-Intermediate-Language-CIL If you want you can also "cheat" by writing code in C# that looks like what you see in ILSpy when you open the game code, then make whatever changes you want in that code, and decompile your DLL and study the CIL to figure out how to make those changes in the actual code. Best to stick to simple stuff, like changing constants and possibly adding breaks to skip if-checks.
  12. I've made a mod that improves the Rogue's abilities, you can get it here! https://reddit.com/r/projecteternity/comments/4ex36c/eternity1_balance_mod_alpha_testers_wanted/
  13. Yesterday I managed to sneak through the Temple of Eothas, but was stumped at the last bit with the slimes around the pool. I couldn't get past them and I sure as hell couldn't defeat them (Solo PotD), so I devised a plan: Lure the nearby Skuldr family to the pool, run like hell (had the Fast Runner talent) and watch the carnage. I quickly discovered that this was nearly impossible, because they shoot corrosive gunk at you. Well, then I'll just craft a potion of Bulwark against the Elements and drink that before I run! What. Long story short, someone thought it made sense to have potions undrinkable outside of combat. You can chug all the beer you want, but drink from a vial, nope. Well, I've had enough of that. I refuse to jump through their hoops. I will bend the game to my will, using the power of applied computer science. Here's how you do that. Step 1: The file. Download a program called UABE, short for Unity Asset Bundle Extractor. You need that to edit .unity3d files (well, not edit directly, but look through them). You can also use Disunity version 4, if you find that easier, but for this guide I will assume you are using UABE. Go to the PillarsOfEternity_Data\assetbundles\prefabs\objectbundle folder. Boy, that's a lot of files. This is where most of the game's items, spells, abilities and such are stored. We need to edit one of these files, specifically the one for the Bulwark potion. Find the "potion_of_bulwark_against_the_elements_l2.unity3d" file, start UABE and open that file with it. It should say "CAB" followed by a lot of gobbledygook in the text field. Click the "Info" button. Step 2: The value we want to change. In the window that just popped up you'll see a bunch of different assets, representing all the various info the game uses for that potion. We're not interested in the Textures and particle effects and such, what we want to do is modify the potion variable that designates it as unusable outside of combat. That means we need to look at the MonoBehaviour types, scroll all the way down to see those. Well, that's not very helpful. They all look identical, apart from the byte size. But intuitively enough, the biggest one is the one that handles the potion ability itself, and that's where our value hides. Click on that MonoBehaviour, and then "View Data" Doubleclick the Monobehaviour Base thing to expand it. Hurray, variables! See an interesting one? That's right, "CombatOnly", and it's set to 1. Now we know what variable to change... but how do we do that? Read on. Step 3: The hex editor Download a program called XVI32. Copy the potion .unity3d file to a new location, and open it there with XVI32. You may think you just stepped into the Matrix, but what you're seeing is really just the bits and bytes of the file, and you now have full access to those, which makes you very 1337 indeed. Each block in the grid represents a byte. A number is stored as four bytes in hexadecimal format, for example the number 9 is stored as 09 00 00 00, the number 10 is stored as 0A 00 00 00, 12 is stored as 0C 00 00 00 and 20 is stored as 14 00 00 00. Easy! Now, you may be tempted to search for "CombatOnly" and edit the value next to it, but unfortunately it's a little more complicated than that. The variable names are stored at a completely different location than the values that they represent, so if you want to change the values you need to find out where they are stored. That's not an easy task, but one thing that's helpful to know is that they are stored contiguously, i.e. the values appear in the file in the same order that they appear in UABE. Speaking of which, go back to the UABE and look at the variables surrounding CombatOnly. You should see a Duration of 60.0, then a bunch of variables set to 0, then the CombatOnly at 1, another bunch of zeroes, a 7, a 1, a 0 and then another 60.0. If we can find this pattern in the file, we will know where CombatOnly hides, and then we can change it! But if we just search for 7, 1 or 0 we will end up with thousands of results. We need to search for the number 60.0, as it stands out a bit more. Specifically, the floating point representation of it. Step 4: Finding the value 60.0 is a floating point value, which means it can have decimals (integers cannot), But, where integers in the file are stored as 01 00 00 00, 02 00 00 00 and so on, floating point values are stored in a completely different way that is not intuitive at all. We need to find the hexadecimal representation of 60.0, and luckily this website will do just that: http://www.h-schmidt.net/FloatConverter/IEEE754.html If you input 60.0 in the decimal box there, it outputs 42 70 00 00. However, this is what is known as "big-endian" format. In the .unity3d file integers are stored big-endian, but floating point values are little-endian! So what we need to do is to swap the bytes, resulting in 00 00 70 42. This is the number we're looking for. Step 5: The magic moment Go back in XVI32 and open the Search -> Find dialog. Select "Hex string" and enable Case Sensitive. Remember that the MonoBehaviours in UABE were all the way at the bottom in the list? That means you should start your search a fair bit down, by putting the cursor somewhere roughly at 25% from the bottom of the scrollbar. Input 00 00 70 42 in the hex field, and press Search. It should take you to the next occurrence of that value in the file, down from where you started. Look at the hex values where you ended up, going from left to right and then to the next line. Does it look like the 60.0-zeroes-1-zeroes-7-1-0-60.0 pattern we found earlier? If not, press F3 on your keyboard to search again. If it does - congratulations. You are a master hacker. Put your cursor at the 01 that represents CombatOnly, and type 00. Do not use backspace, this will delete bytes and you do not want that. Just type 00. Then save the file, put it back in the folder where you found it (maybe backup the original one first), and launch Pillars of Eternity. You can load a saved game or start a new one, but the important thing is that you can now do this: http://i.imgur.com/rYfBZhH.jpg And that's something to be proud of.
  • Create New...