Jump to content

IEMod fork, new modding framework


Recommended Posts

Possibly silly question:

 

I'm a programming layman, but I'm interested in making a mod for PE dealing with combat mechanics (change some stuff, delete some stuff, make some new stuff...). What tools would I need to do that, besides "learn C#"?

Link to comment
Share on other sites

I would be willing to assist occasionally; I have a day job, but I should be able to find some time on weekends to help out. As a user of the IE mod, I would hate to see updates cease. For reference, I know VB.Net and C#.

That's great :) Just do what you can. 

 

 

Possibly silly question:

 

I'm a programming layman, but I'm interested in making a mod for PE dealing with combat mechanics (change some stuff, delete some stuff, make some new stuff...). What tools would I need to do that, besides "learn C#"?

If you're on Windows, get Visual Studio 2015 Community (a free but full-featured version) and Telerik JustDecompile, which I personally believe to be the best .NET decompiler.

 

If you're on another platform, get MonoDevelop and probably ILSpy (which I suspect is the only professional-level decompiler that works in Mono). 

 

For this kind of modding, those are the only tools you need. Modding consists of decompiling the .NET DLL files of the game (also called 'assemblies'), finding something you want to modify, and then writing special types in C# using Patchwork and its attributes. Your code will be injected or added into the game, possibly replacing the developer's original code.

 

Bear in mind that this isn't easy. C# is a pretty complex language with lots of features, and professional code uses many of those features without much reservation.

 

If you need help, you can tell me what you want to do, and I'll try to point you in the right direction. 

Edited by Springwight
  • Like 3
Link to comment
Share on other sites

This is phenomenal news! Thanks for taking this task up, Springwight.  I think I may hold off on playing PoE for a few days as I wait for your IEMod update release.

 

I can't say I've made extensive use of IEMod, but I love the ability to walk at normal speed while scouting without enemies present, and I like seeing neutral NPCs show up as blue instead of green.

Erik Harris

Link to comment
Share on other sites

Don't. Really. I have no idea how long it will take to update IE mod (I hope it will take only a couple of days, but I expect something more like 2 weeks). When it will be released, there is a good chance that some of it will still be buggy on some systems.

 

To be honest, another patch is going to come out next week, so I may not release anything until then. I really don't know.

 

So just start playing right now :)

Edited by Springwight
Link to comment
Share on other sites

I'm willing to help (lots of experience with C#, not a lot with Unity or GItHub as source control).
 

I was able to get the patcher running on the source libraries that are part of GitHub (had a little trouble with the source files for Mono.Cecil not being present in the repo, but switched to just linking to the NuGet package for Mono.Cecil and it worked fine. It's possible my lack of knowledge with GitHub caused me to fail to get these files, but I can't seem to see them).

 

I was able to get SetupEnvironment() to work, though it has a few bugs (opens the target file for reading instead of writing, opens what looks very much like the WRONG target file).

 

Unfortunately a lot of stuff broke - looks like a good deal related to stealth not being party-only in 2.0, plus a bunch of general refactors. I concur that this is going to take some significant time to fix (and may be best served by doing a handful of mods at a time). I've successfully got it to work by excluding all mods except VersionNumber, but that's not very interesting. I'll see what I can do with Console, at least with the parts that don't depend on other pieces (there's some interaction with the UI and Settings that I'm just going to comment out for this pass).

 

Any suggestions for collaboration mechanism(s)? Does GitHub have something built in for project management?

 

Edit: I've successfully restored most of the Console/CommandLine functionality, though not the stuff that depends on the overall IE Mod framework (Helpers, UI, etc).

Edited by tjayharvey
  • Like 6
Link to comment
Share on other sites

I'm willing to help (lots of experience with C#, not a lot with Unity or GItHub as source control).

 

I was able to get the patcher running on the source libraries that are part of GitHub (had a little trouble with the source files for Mono.Cecil not being present in the repo, but switched to just linking to the NuGet package for Mono.Cecil and it worked fine. It's possible my lack of knowledge with GitHub caused me to fail to get these files, but I can't seem to see them).

 

I was able to get SetupEnvironment() to work, though it has a few bugs (opens the target file for reading instead of writing, opens what looks very much like the WRONG target file).

 

Unfortunately a lot of stuff broke - looks like a good deal related to stealth not being party-only in 2.0, plus a bunch of general refactors. I concur that this is going to take some significant time to fix (and may be best served by doing a handful of mods at a time). I've successfully got it to work by excluding all mods except VersionNumber, but that's not very interesting. I'll see what I can do with Console, at least with the parts that don't depend on other pieces (there's some interaction with the UI and Settings that I'm just going to comment out for this pass).

 

Any suggestions for collaboration mechanism(s)? Does GitHub have something built in for project management?

 

Edit: I've successfully restored most of the Console/CommandLine functionality, though not the stuff that depends on the overall IE Mod framework (Helpers, UI, etc).

Sweet :) I'm glad to have you on board.

 

It's okay about the experience. I had very little experience with GitHub and none at all with Unity when I started out (I wanted to write a small mod and ended up working on the whole project). The actual programming is just C#.

 

I'm really sorry and rather embarrassed about SetupEnvironment. I have no idea how it became like that. I hadn't used it for ages, and at some point I must have changed it by accident or something. Thank you for correcting the issue :)

 

GitHub uses Git, which is a distributed version control thing. Basically, you Fork the repository and work on it. When you're done, you Commit and then Push the changes to your fork of the repository. Then you initiate a Pull request (this option is available on most VCS clients) to tell the owner of the repo (in this case me) that you've changed some stuff, and then I merge those changes into the main. And you can also see a spiffy graph of this process later on, revert the changes to any previous state, etc, though that's a bit more technical.

 

You can try this out by committing the changes you've made to SetupEnvironment, pushing, and sending a pull request. 

 

There should be explanations about this process on the web.

 

Obviously, we need to coordinate so that we work on different code, otherwise we'll just do the same work twice, though Git's merging algorithms are surprisingly accurate, even if we work on code that's in the same file. There's a chat thingy on the GitHub page for real-time chat, and also the Issues section, which can be used as a forum for technical matters.

 

At this point, we have to look over the source to see what even needs doing etc, get a big picture (what you've been doing), and then we can decide on who will work on what. 

 

If you're up to the task, try to sort stuff out and see what can be fixed, which types (if any) have disappeared, etc. I won't be able to look at the code today due to real life issues.

 

About the missing files: Really sorry, totally forgot about that too :(. This IE Mod project consists of two things: Patchwork, which is a library for patching .NET assemblies (I originally wrote it for Pillars of Eternity, but now it can be used separately), and IEMod.pw itself. Patchwork is linked to it in a submodule. 

 

If you're forking the repo, you need to pull the submodule as well. If you're downloading a zip, you'll need to download the zip for Patchwork separately.

 

 

Link to comment
Share on other sites

For the record, my preferred git client is SmartGit, though the above are also good.

 

It looks like Git integrates directly into Visual Studio. I was playing with it on my work machine between meetings and it seems fine. (Hey, I'm "evaluating" it for future use at our company, right?) I may grab another client for things the basic interface can't handle, but I imagine most of what I'm going to want to do are covered. Unfortunately I can't evaluate the actual code here, as I don't have the patch dlls and IEMod doesn't compile anyway since it uses C# 6.0 and I'm stuck on Visual Studio 2013 until we finish upgrading our Team Foundation Server.

 

One of the major things I noticed is that the "UICustomization" mod is broken. There's a very large dependency chain on that as a lot of the generic stuff ("Helpers", "Quick Controls") shared between mods require classes from UICustomization.  I'd suggest that be an early target for fixing since so much won't compile without it functional. 

 

For the Console mod, the old CommandLine class was refactored into two classes. Both classes were also made abstract with private constructors, so I had to change the mod classes not to inherit from them, and to pass the type being modded to Patchwork as an argument to the attribute (but you already had support for that, so this was easy). I still have somewhere between 5-10 commands commented out because they depend on the broken UICustomization stuff. Do you want me to go ahead and send a pull request for the intermediate changes or wait until UICustomization is fixed so these commands can be reinstated?

Link to comment
Share on other sites

 

For the record, my preferred git client is SmartGit, though the above are also good.

 

It looks like Git integrates directly into Visual Studio. I was playing with it on my work machine between meetings and it seems fine. (Hey, I'm "evaluating" it for future use at our company, right?) I may grab another client for things the basic interface can't handle, but I imagine most of what I'm going to want to do are covered. Unfortunately I can't evaluate the actual code here, as I don't have the patch dlls and IEMod doesn't compile anyway since it uses C# 6.0 and I'm stuck on Visual Studio 2013 until we finish upgrading our Team Foundation Server.

 

One of the major things I noticed is that the "UICustomization" mod is broken. There's a very large dependency chain on that as a lot of the generic stuff ("Helpers", "Quick Controls") shared between mods require classes from UICustomization.  I'd suggest that be an early target for fixing since so much won't compile without it functional. 

 

For the Console mod, the old CommandLine class was refactored into two classes. Both classes were also made abstract with private constructors, so I had to change the mod classes not to inherit from them, and to pass the type being modded to Patchwork as an argument to the attribute (but you already had support for that, so this was easy). I still have somewhere between 5-10 commands commented out because they depend on the broken UICustomization stuff. Do you want me to go ahead and send a pull request for the intermediate changes or wait until UICustomization is fixed so these commands can be reinstated?

Oh crap :( This is like literally a few days after I gave in and decided to use C# 6's awesome convenience features. Up till then I was doggedly sticking to C# 5 for compatibility

 

I think you should go ahead and send the pull request. It's progress. Refactoring is also good

 

What you say about UICustomization is a bit confusing. It depends on QuickControls etc, not the other way around. The only dependency that section has on the rest of the code, is when you set the Prefab objects are set (basically examples of Unity controls that we find from the game to clone and use for ourselves), and IIRC that's in the Options part. There is also dependency on StringTable. I also haven't found a using directive for that namespace anywhere in Helpers or Quick Controls.

 

Maybe those parts depend on game components that no longer exist, such as UIDropdownMenu?

Edited by Springwight
Link to comment
Share on other sites

 

 

For the record, my preferred git client is SmartGit, though the above are also good.

 

It looks like Git integrates directly into Visual Studio. I was playing with it on my work machine between meetings and it seems fine. (Hey, I'm "evaluating" it for future use at our company, right?) I may grab another client for things the basic interface can't handle, but I imagine most of what I'm going to want to do are covered. Unfortunately I can't evaluate the actual code here, as I don't have the patch dlls and IEMod doesn't compile anyway since it uses C# 6.0 and I'm stuck on Visual Studio 2013 until we finish upgrading our Team Foundation Server.

 

One of the major things I noticed is that the "UICustomization" mod is broken. There's a very large dependency chain on that as a lot of the generic stuff ("Helpers", "Quick Controls") shared between mods require classes from UICustomization.  I'd suggest that be an early target for fixing since so much won't compile without it functional. 

 

For the Console mod, the old CommandLine class was refactored into two classes. Both classes were also made abstract with private constructors, so I had to change the mod classes not to inherit from them, and to pass the type being modded to Patchwork as an argument to the attribute (but you already had support for that, so this was easy). I still have somewhere between 5-10 commands commented out because they depend on the broken UICustomization stuff. Do you want me to go ahead and send a pull request for the intermediate changes or wait until UICustomization is fixed so these commands can be reinstated?

Oh crap :( This is like literally a few days after I gave in and decided to use C# 6's awesome convenience features. Up till then I was doggedly sticking to C# 5 for compatibility

 

I think you should go ahead and send the pull request. It's progress. Refactoring is also good

 

What you say about UICustomization is a bit confusing. It depends on QuickControls etc, not the other way around. The only dependency that section has on the rest of the code, is when you set the Prefab objects are set (basically examples of Unity controls that we find from the game to clone and use for ourselves), and IIRC that's in the Options part. There is also dependency on StringTable. I also haven't found a using directive for that namespace anywhere in Helpers or Quick Controls.

 

Maybe those parts depend on game components that no longer exist, such as UIDropdownMenu?

 

 

It turned out I was mostly confused. I was excluding UICustomization and trying to resolve the resulting compile errors, and ended up commenting out/excluding more than I needed to. However, there are at least two mods that depend on UICustomization - the DropButtonMod and the Console. The former looks like a stray using (commenting it out lets it compile, and there are no problems when patching, but I haven't attempted to test it yet). The latter is only two commands.

 

However, saving the preferences in Options is definitely malfunctioning. It prompts me to save options and won't respond to either choice, and appears in lots of situations that don't appear correct - it will block you from saving your game, for instance. It somehow seems to work fine if you select the "Autosave on changes" checkbox.  Since this is used to save changes to the settings the other mods used, it also looks like a good early fix candidate.

 

I've sent the pull request for the initial fix to Program. I had to restart from scratch (because of how I created the initial repo), and when I copied the changes back in it somehow decided I changed the entire file, so it looks a little weird. Hopefully the changes to the Console mod won't look so ugly and will be easier for you to parse.

 

Here's a list of definitely broken mods:

CombatLooting (signature change in source, compiles fine but fails patching)

FastSneak (sneaking-related)

NoEngagement (sneaking-related)

OnLevelLoad (looks like AI change, also depends on UICustomization)

SaveXML (change in PersistanceManager source)

SelectionCircles (source object was generally refactored)

Targeting (same)

UICustomization (party bar stuff, looks like the source UIPartyPortrait and UIMapTooltip were changed)

 

Of course, that doesn't mean everything else is working right, just that it doesn't immediately break. Will require some testing.

Edited by tjayharvey
  • Like 1
Link to comment
Share on other sites

ETA on the beta version? Could you make a version/separate download with something that allows the IE Mod console commands? Just until you're finished with the full version. Some of these commands are pretty vital to fix bugs.

 

Don't think we've gotten as far as an ETA, but it seems to be going well. Most mods are either functional or look like they should be fixable. The console is definitely fixed. We still have to do a pass through all of the mods to make sure their code is fully up to date. We're also trying to get the mod set up so that it's easier to see what has to be changed/fixed the next time there's a patch.

  • Like 8
Link to comment
Share on other sites

 

 

ETA on the beta version? Could you make a version/separate download with something that allows the IE Mod console commands? Just until you're finished with the full version. Some of these commands are pretty vital to fix bugs.

Don't think we've gotten as far as an ETA, but it seems to be going well. Most mods are either functional or look like they should be fixable. The console is definitely fixed. We still have to do a pass through all of the mods to make sure their code is fully up to date. We're also trying to get the mod set up so that it's easier to see what has to be changed/fixed the next time there's a patch.

Wow :). That sure is quick progress in my eyes. Wonderful work!

  • Like 1
Link to comment
Share on other sites

 

ETA on the beta version? Could you make a version/separate download with something that allows the IE Mod console commands? Just until you're finished with the full version. Some of these commands are pretty vital to fix bugs.

 

Don't think we've gotten as far as an ETA, but it seems to be going well. Most mods are either functional or look like they should be fixable. The console is definitely fixed. We still have to do a pass through all of the mods to make sure their code is fully up to date. We're also trying to get the mod set up so that it's easier to see what has to be changed/fixed the next time there's a patch.

 

Great news! Would it be possible to mod the game with only some of the files in the repository to make the console work? I got stuck in the main quest after talking to Maerwald and that can only be fixed with the mod.

Link to comment
Share on other sites

 

 

ETA on the beta version? Could you make a version/separate download with something that allows the IE Mod console commands? Just until you're finished with the full version. Some of these commands are pretty vital to fix bugs.

 

Don't think we've gotten as far as an ETA, but it seems to be going well. Most mods are either functional or look like they should be fixable. The console is definitely fixed. We still have to do a pass through all of the mods to make sure their code is fully up to date. We're also trying to get the mod set up so that it's easier to see what has to be changed/fixed the next time there's a patch.

 

Great news! Would it be possible to mod the game with only some of the files in the repository to make the console work? I got stuck in the main quest after talking to Maerwald and that can only be fixed with the mod.

 

 

It would be possible. However, we're close enough to a stable build at the moment that we'll probably just put out a beta version of what we have soonish. Stay tuned.

  • Like 5
Link to comment
Share on other sites

I got another mod suggestion. Is it possible to turn off spells becoming encounter spells when spellcasters become high level? It kills high level power balance between casters and non casters as well as balance between low and high levels spells. Once you get lvl 1 and lvl 2 spells as encounter you very rarely need to cast lvl 3 or stronger spells.

For something called IEMod being able to turn off whole spell levels becoming encounter spells seems fitting (so casters have same limits like in IE games)?!

Edited by archangel979
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...