Scriptname _00E_Func_ComputeNeededExp Hidden import Math float Function Run(int CurrentLevel, float Slope, float Mult, float fExpAcc = 1.0, float fExpAcc_Level20 = 1.2, float fExpAcc_Level30 = 1.5, float fExpAcc_Level40 = 2.0) Global {Computes the total Experience (EP) needed by the player to reach the level CurrentLevel + 1. This includes the experience needed for the previous level.} if SKSE.GetVersion() return EnderalFunctions.ComputeNeededExp(CurrentLevel, Slope, Mult, fExpAcc, fExpAcc_Level20, fExpAcc_Level30, fExpAcc_Level40); endif ; This can be used as a quick way to scale the leveling process ; for all levels: ;float fExpAcc = 1.0 ;float fExpAcc_Level20 = 1.2 ;float fExpAcc_Level30 = 1.5 ;float fExpAcc_Level40 = 2.0 Mult *= fExpAcc If CurrentLevel <= 20 ; no changes to the old formula until level 20. return pow(CurrentLevel, Slope) * Mult Else ; no changes to the old formula for the first 20 levels. float result = pow(20, Slope) * Mult ; Progressive taxation: if CurrentLevel <= 30 result += (pow(CurrentLevel, Slope) - pow(20, Slope)) * Mult * fExpAcc_Level20 return result elseif CurrentLevel <= 40 result += (pow(30, Slope) - pow(20, Slope)) * Mult * fExpAcc_Level20 result += (pow(CurrentLevel, Slope) - pow(30, Slope)) * Mult * fExpAcc_Level30 return result else result += (pow(30, Slope) - pow(20, Slope)) * Mult * fExpAcc_Level20 result += (pow(40, Slope) - pow(30, Slope)) * Mult * fExpAcc_Level30 result += (pow(CurrentLevel, Slope) - pow(40, Slope)) * Mult * fExpAcc_Level40 return result endif EndIf EndFunction ; A debugging function: ;function DumpLevelCurve() ;{Dump a table of required EP for each level from 0 to 100 to the Papyrus log} ; string aua = "" ; int iIndex = 0 ; while iIndex < 100 ; aua += "To get to level " + (iIndex + 1) + ", you need " + ComputeNeededExp(iIndex, EXPMultSlope.GetValue(), EXPMult.GetValue()) + "EP. \n " ; iIndex += 1 ; endwhile ; Debug.Trace(aua) ;Endfunction