About this mod
Increase level limit to 40
camping supplies on all levels are capped at 8 (except easiest where cap is left at 99)
Optional: No xp limit to combat
changes shall be compatible to iemod
Class Ability Progression tables are extended till lvl 24 with a little cheese
- Requirements
- Permissions and credits
Increase level limit to 40
camping supplies on all levels are capped at 8 (except easiest where cap is left at 99). I really hated the limit of 2 at POTD.
Optional: No xp limit to combat
Note: Changes shall be compatible to iemod
Class Ability Progression tables are extended till lvl 24 with a little cheese (you can see the progression table in the pictures)
Apart from extending the progression table for all classes to lvl 24, i've added extra slots so you might be considering this as cheat... Below, you can see the article used for the creation of this. If you don't like it, you can adjust it as you want...
Compatible version: 3.7.0.1318 PX1 PX2 PX4 (steam)
WARNING: OPTIONAL FILE is reported as not working. according to code it should have. Do not use "no xp limit" optional file. i will delete it from files part.
Installation:
For level limit increase & camping supply limit increase
Copy Assembly-CSharp.dll to ../Pillars of Eternity\PillarsOfEternity_Data\Managed
if you want to earn talents/abilities/spells after lvl 16,
Copy .unity3d files to ../Pillars of Eternity\PillarsOfEternity_Data\assetbundles\prefabs\objectbundle
if you also want full xp for all your combats, download the optional file and use that one to:
Copy Assembly-CSharp.dll to ../Pillars of Eternity\PillarsOfEternity_Data\Managed (overwrite the .dll from the main mod )
Note: It shall be compatible to use with IEMod if IEMOD becomes compatible (i'm using it at 3.7.0.1318 release without any side affect but can't advice to everyone)
if anybody is interested to replicate the changes:
for Assembly-CSharp.dll changes:
You will need Visual Studio (Download from Microsoft for free)
run ildasm decomplie .dll file into .il and .res open in notepad
1) Camping supplies fixed to 8
Find code
int32 get_StackMaximum() cil managed
// SIG: 00 00 08
{
// Method begins at RVA 0x1459e0
// Code size 119 (0x77)
.maxstack 10
.locals /*110009B1*/ init (int32 V_0,
valuetype GameDifficulty/*0200034B*/ V_1,
valuetype GameDifficulty/*0200034B*/ V_2)
IL_0000: /* 17 | */ ldc.i4.1
IL_0001: /* 0A | */ stloc.0
IL_0002: /* 28 | (06)001F2C */ call class GameState/*02000351*/ GameState/*02000351*/::get_Instance() /* 06001F2C */
IL_0007: /* 6F | (06)001EE0 */ callvirt instance valuetype GameDifficulty/*0200034B*/ GameState/*02000351*/::get_Difficulty() /* 06001EE0 */
IL_000c: /* 0B | */ stloc.1
IL_000d: /* 07 | */ ldloc.1
IL_000e: /* 0C | */ stloc.2
IL_000f: /* 08 | */ ldloc.2
IL_0010: /* 45 | 05000000 */ switch (
/* | 05000000 */ IL_002e,
/* | 0C000000 */ IL_0035,
/* | 13000000 */ IL_003c,
/* | 13000000 */ IL_003c,
/* | 1A000000 */ IL_0043)
IL_0029: /* 38 | 1D000000 */ br IL_004b
IL_002e: /* 1C | */ ldc.i4.8//safak change from ldc.i4.6
IL_002f: /* 0A | */ stloc.0
IL_0030: /* 38 | 40000000 */ br IL_0075
IL_0035: /* 1A | */ ldc.i4.8//safak change from ldc.i4.4
IL_0036: /* 0A | */ stloc.0
IL_0037: /* 38 | 39000000 */ br IL_0075
IL_003c: /* 18 | */ ldc.i4.8//safak change from ldc.i4.2
IL_003d: /* 0A | */ stloc.0
IL_003e: /* 38 | 32000000 */ br IL_0075
IL_0043: /* 1F | 63 */ ldc.i4.s 99
IL_0045: /* 0A | */ stloc.0
IL_0046: /* 38 | 2A000000 */ br IL_0075
2) Playerlevelcap
find code
int32 get_PlayerLevelCap() cil managed
// SIG: 00 00 08
{
// Method begins at RVA 0x2a758
// Code size 39 (0x27)
.maxstack 7
IL_0000: /* 1F | 0C */ ldc.i4.s 12//safak change to 36
IL_0002: /* 28 | (06)001F8A */ call bool GameUtilities/*02000353*/::HasPX1() /* 06001F8A */
IL_0007: /* 39 | 06000000 */ brfalse IL_0012
IL_000c: /* 18 | */ ldc.i4.2
IL_000d: /* 38 | 01000000 */ br IL_0013
3) max_Level_eternity
Find code
.field /*0400041C*/ public static literal int32 MAX_LEVEL_ETERNITY = int32(0x00000010)//safak change 010 to 028 boolean 40
.field /*0400041D*/ public static literal int32 MAX_NPC_LEVEL_ETERNITY = int32(0x00000015)//safak change 015 to 02dboolean 45
4) no limit to combat xp:
Reference: https://github.com/IEMod/IEMod.pw/issues/95
IL_0052: /* 02 | */ ldarg.0
IL_0053: /* 7B | (04)002CAC */ ldfld int32[] BestiaryManager/*02000545*/::m_KillCounts /* 04002CAC */
IL_0058: /* 07 | */ ldloc.1
IL_0059: /* 8F | (01)000021 */ ldelema [mscorlib/*23000002*/]System.Int32/*01000021*/
IL_005e: /* 25 | */ dup
IL_005f: /* 4A | */ ldind.i4
IL_0060: /* 17 | */ ldc.i4.0//safak changed .1 to .0
IL_0061: /* 58 | */ add
Change "IL_0060: ldc.i4.1" to "IL_0060: ldc.i4.0" and save 1.il
5) compile .il and .res file back to dll
ilasm /DLL /32BITPREFERRED /RESOURCE=full-orig-dll-edited.res full-orig-dll-edited.il /OUTPUT=1.dll
6) rename 1.dll to Assembly-CSharp.dll
For level up table changes:
Follow the good guideline :
https://forums.obsidian.net/topic/85466-how-to-extend-class-progression-tables/