Set Xp Rewards
The worst challenge is the fair average reward definition. There are several ways to gain experience: defeat enemies, accomplish mission, consume items, bonus and so on. It's generally effort with some difficulty, expended time and other things that should be measured using a criterion. How can we simplify it?
We can think about a lot of equivalences between xp farming ways as if all of this were as one. About the question example, it sets a LevelUpEnemies(Lv)
to focus on. This suggests that killed enemy xp may be the unification. Indeed mostly all of it involves defeating a number (and quality) of enemies for xp to up. Even missions and other ways usually come down to that otherwise at least have equivalences with it. In this case the calculated mean xp rewards formula that bases all possible game xp sources can be summed up as the mean/expected balanced level enemy xp (LevelUpEnemies(Lv)
of it to level up) and don't have more experience sources or in the other sources we compare with enemy xp and adapt it with the agreed equivalences.
For example, a quest can be as difficult as kill five wolfs (maybe it's the quest... or not) and long as hunt ten wolfs (maybe the quest is travel and hunt it... or not). Why not rewards it with the "five-ten" wolfs xp? In this case, we need to define reward influences of hardness and delay but we can assume that all comes down to a number of enemies and has some equivalence with expected time.
If we set
- generally
66.7%
xp is from defeat result (x
enemies defeated),
- generally
33.3%
xp is from full defeat procedure time (y
defeat time) and
- in wolfs case
DefeatWolf: XpReward = 30xp
then XpReward = 20*Wolf_Kills + 10*Wolf_Finds
such that
- generally the
finds
is total time to find (can include more actions time),
- generally the
kills
is number of defeated enemies and
- hunt a single wolf (one find time and one kill) makes
Wolf_Finds = Wolf_Kills = 1
.
The example quest xp reward is 20*Wolf_Kills + 10*Wolf_Finds = 20*5 + 10*10 = 200xp
(like hunt ≈6.67
wolfs). If leveled xp reward base formula on wolf level is 25xp
then kill wolf and finish quest is set up to gives 120%
and 800%
of expected xp reward.
In short, the point is made the challenge rewards formula and number of rewards table/formula be adapted and represented by defeating enemies xp reward formula and combine with the table/formula "number of enemies to level up" to solve it all. But... how we define defeating xp reward (fair) base formula?
The Relative Character Power
Of course we expect duplicate reward for duplicate effort and risk after all. Fair enemies reward requires some relative power notions (when some character becomes 2x
, 3x
, 10x
stronger than was or be stronger than other). Let's use proportion with total damage done until fall as power criterion.
If double damage done (with no other data impact), double power. Triple damage done, triple power. Yes, obviously it is proportional. But if double vitality... hm... it doubles suffered hits until the end. Double combat time (yes, time that character can attack), double hits done, double damage, double power. Yeah, health proportion. If halves damage? Double suffered hits, double time... double power. Inverse proportion.
About the example, power Hp
(obviously), but Atk
and Def
are harder. If we calculate it (I used Maplesoft Maple 15)

we see
Atk x 2 ⟹ Dmg x 2.343
every levels (3),
Atk x 3 ⟹ Dmg x 3.804
every levels (5),
Atk x 4 ⟹ Dmg x 5.333
every levels (7),
Def x 2 ⟹ (1/Dmg) x 1.5
every levels (10),
Def x 3 ⟹ (1/Dmg) x 2.0
every levels (13) and
Def x 4 ⟹ (1/Dmg) x 2.5
every levels (16).
A lot of (X) x (fx) ⟹ (y=Y(x)) x (fy)
.
How do we deal with this?
What proportion do we set?
Generally...
How to make T( fx*X ) = fy*T(X)
?
A way to do it is T(X) = X^log_fx(fy)
.
\$T(fx*X)=(fx*X)^{\log_{fx}fy}=fy*X^{\log_{fx}fy}=fy*T(X)\$.
Then we have to choose power Atk^1.23
or power Atk^1.22
or power Atk^1.21
and power Def^0.58
or power Def^0.63
or power Def^0.66
.
But... why fx = 2, 3, 4...
criterion?
Why not fx = 1/2, 1/3, 1/4...
? Or... fx⟶1
?
\$Taylor:\ \ Y(X+ΔX)=Y(X)+\frac{d}{dX}Y(X)*ΔX+O(ΔX^2)\$
\$Defin:\ \ ΔX=(fx-1)*X\$
\$Y(fx*X)=Y(X)+\frac{d}{dX}Y(X)*(fx-1)*X+O((fx-1)^2)\$
\$Defin:\ \ Y(fx*X)=fy*Y(X)\$
\$fy=1+\frac{d}{dX}Y(X)*(fx-1)*\frac{X}{Y(X)}+O((fx-1)^2)\$
\$\lim\limits_{fx\to1}{log_{fx}fy}=\frac{X}{Y(X)}*\frac{d}{dX}Y(X)\$
So we can use pontual formula power x^( x * Y'(x) / Y(x) )
.
Maybe it works even in varying amounts across the levels (but I don't know). If X=Atk & Y=Dmg
then power Atk^1.25
. If X=Def & Y=1/Dmg
then power Def^0.5
. Finally, we can compare characters power with the proportion power Hp * Atk^1.25 * Def^0.5
in the example context and we can call the proportion relative power (RelativePower = Hp * Atk^1.25 * Def^0.5
).
Power and Xp
It's expected that enemy xp reward is proportional to the power (yeah, 2x
difficulty is 2x
reward), but
- enemies can give more/less xp and balanced more/less other things (quality items for example) therefore expected value is only a base,
- the values magnitudes can be greater/lesser than the preferred by design or technical details (means that the final formula can be one of many),
- the amount can be willfully unbalanced as part of challenge and
- some rate of unbalance can be permissible or unnoticed,
so it may be convenient set parameters and find the formula that meets arguments conditions. I propose some data and utility for it.
Ideally XpReward RelativePower
therefore XpReward = SomeConstant * RelativePower
, but can be XpReward = SomeConstant * ( RelativePower ^ SomeExpoent )
. In other words, a manner to keep same reward factor for each same relative power factor results is apply a expoent (better close to one, higher incites stronger enemies and lower induces weaker searching) on relative power.
Back to the example. The average relative power per level is
\$RelativePower ≈ (8+2Lv)^2*(((4+Lv)^2)^{1.25})*\sqrt{4+Lv} \space = \space 4*(4+Lv)^5\$
thus
\$XpReward \space = \space SomeConstant*RelativePower^{SomeExpoent}\$
\$XpReward \space ≈ \space SomeConstant*( 4*(4+Lv)^5 )^{SomeExpoent}\$.
Best is SomeExpoent=1
. If C=SomeConstant*4
and E=5*SomeExpoent
then best is E=5
and
\$XpReward \space ≈ \space C*(4+Lv)^E\$.
If E=5
and C=0.0032
then XpReward = C*(4+Lv)^E ⇒ 10, 24.9, 53.8, 104.9, 189, 320, 515.4, 796.3, 1188.1, 1721}
but if you want rewards from 20 to 3000 uses E≈4.8665
and C≈1/126.0383
(with that approachs the sequency is 20, 48.6, 102.8, 197, 349.4, 583.4, 927.8, 1416.9, 2091.7, 3000.1
).
We has a lot of ways to define the formula. A important data to do it is initial xp reward (to set initial values magnitudes of xp) and new formula can be
\$XpReward=XpReward_{Initial}*(RelativePower/RelativePower_{Initial})^{SomeExpoent}\$
that uses C = InitialXpReward/( InitialRelativePower^SomeExpoent )
and must solve to find expoent. We can set SomeExpoent=1
. We can find value that set a reward condition. We can postpone the solution to set by a total xp condition (or level up xp condition). When solve SomeExpoent
variable we have specific mean leveled xp reward to bases specific rewards in game.
Set Total Xp
We know that
\$LevelUpXp(Lv) = TotalXp(Lv+1) - TotalXp(Lv)\$
\$TotalXp(Lv+1) = TotalXp(Lv) + LevelUpXp(Lv)\$
therefore
\$TotalXp(Lv)=TotalXp(InitialLv)+LevelUpXp(InitialLv)\$
\$+LevelUpXp(InitialLv+1)+...+ LevelUpXp(Lv-1)\$.
The total xp table and progression speed depends on each level up xp. Level up xp depends on data that we have, then the point is the level up xp. Usually it's defined by
\$LevelUpXp = ExpectedTimeToLevelUp * MeanXpGainPerTimeUnit\$.
Since MeanXpGainPerTimeUnit = MeanXpReward / MeanRewardTime
and ExpectedTimeToLevelUp = LevelUpRewards * MeanRewardTime
, it gives us the onus of set
\$LevelUpRewards = ExpectedTimeToLevelUp / MeanRewardTime\$
properly (also consider LevelUpRewards = LevelUpEnemies
and its equivalences with quests, missions, items, equips bonus, performance bonus) and apply to
\$LevelUpXp = LevelUpRewards * MeanXpReward\$
from initial level to final but one level. Yup, we don't need final level data.
If levels are from 1 to 10, initial total xp is zero, mean enemy xp sequence is 10, 24.9, 53.8, 104.9, 189, 320, 515.4, 796.3, 1188.1
(levels from 1 to 9) and level up enemies sequence is 1, 5, 20, 60, 120, 180, 240, 300, 300
(levels from 1 to 9 and values from LevelUpEnemies
question example formula) then level up xp sequence is 10, 124.5, 1076, 6294, 22680, 57600, 123696, 238890, 356430
(levels from 1 to 9) and total xp sequence is 0, 10, 134.5, 1210.5, 7504.5, 30184.5, 87784.5, 211480.5, 450370.5, 806800.5
(levels from 1 to 10).
But if we includes the xp bonus sequence 0%, 0%, 0%, 5%, 10%, 15%, 20%, 25%, 25%
then mean enemy xp sequence is 10, 24.9, 53.8, 110.1, 207.9, 368, 618.5, 995.4, 1485.1
, level up xp sequence is 10, 124.5, 1076, 6606, 24948, 66240, 148440, 298620, 445530
(levels from 1 to 9) and total xp sequence is 0, 10, 134.5, 1210.5, 7816.5, 32764.5, 99004.5, 247444.5, 546064.5, 991594.5
(levels from 1 to 10).
But...
When we don't set E
...
What will we do?
If E
is unset then is because we decided to set using a xp condition, for example TotalXp(10)=1000000
. Yeah, you know, TotalXp(10) = LevelUpRewards(9) * MeanXpReward(9) + LevelUpRewards(8) * MeanXpReward(8) + ... + LevelUpRewards(2) * MeanXpReward(2) + LevelUpRewards(1) * MeanXpReward(1)
(initial level is one) and each MeanXpReward(?)
is (not defined value but) a formula with E
variable as power expoent to solve.
A root finder method (like secants, newton, halley) can find E
that E -> TotalXp(10)-1000000
is zero (E≈5.2457
with no bonus or E≈5.0097
with bonus) and tables building is possible. Using xp bonus example with E=5.0097
(inexact), mean enemy xp sequence is 10, 24.9, 54, 110.6, 209, 370.5, 623.2, 1003.8, 1499
, level up xp sequence is 10, 124.5, 1080, 6636, 25080, 66690, 149568, 301140, 449700
(levels from 1 to 9) and total xp sequence is 0, 10, 134.5, 1214.5, 7850.5, 32930.5, 99620.5, 249188.5, 550328.5, 1000028.5
(levels from 1 to 10).
Rounding Tables Values
You saw not integer values and can simply round each one (digits of your choice) but need caution because it modifies the tables with no previously addressed criteria.
For example, if TotalXp(6) = 32930.5
, TotalXp(7) = 99620.5
and MeanXpReward(6) = 370.5
then LevelUpRewards(6) = (99620.5-32930.5)/370.5 = 180
but if modify TotalXp(6) = 30000
and TotalXp(7) = 100000
then LevelUpRewards(6) = (100000-30000)/370.5 = 188.9
(about 5% difference, can be worse).
A extreme case is TotalXp(59) = 834776.7
, TotalXp(60) = 915416.7
and TotalXp(61) = 1003364.4
. If rounds to nearest integer then TotalXp(59) = 834777
, TotalXp(60) = 915417
and TotalXp(61) = 1003364
thus LevelUpXp(59) = 80640
and LevelUpXp(60) = 87947
. If rounds to nearest multiple of 10000 then TotalXp(59) = 830000
, TotalXp(60) = 920000
and TotalXp(61) = 1000000
thus LevelUpXp(59) = 90000
and LevelUpXp(60) = 80000
(yes, needed xp to level up down from 90000
to 80000
on grow from level 59
to 60
, it's a crescent level up xp breaking).
The xp tables often manifest a air of normality properties like 0 < LevelUpXp(Lv) < LevelUpXp(Lv+1)
(I never saw not manifest this), 2*LevelUpXp(Lv) < LevelUpXp(Lv-1) + LevelUpXp(Lv+1)
(rarely not manifest) and LevelUpXp(Lv)^2 > LevelUpXp(Lv-1) * LevelUpXp(Lv+1)
(not so rarely not manifest). The challenge is to make a algorithm that rounds until can't do it with no property crash (conserve present property).
The unique way that I think that does it is to repetitively
- select a level,
- see the holded properties on it and neighbords,
- does a rounding,
- see if it breaks some property and
- decide to keep rounded or revert it.
All values can start rounded to near integer and get more digits to round when algorithm is running. Selection can be a crescent level loop or decrescent (I don't know what is the best) and a extern loop can continue it until don't find more roundings to do.
Code And Test
I coded in C++ (incomplete) here: https://ideone.com/Vgvh0U. I like the results for now. After that I coded in Maple 15 with more satisfactory features. Maple code shown below. I intend to code in Java with graphic interface but I don't guarantee post here. Did you see that I called hardness the relative power (to simplify)?

As code...
BuildXpTables := proc ({ InLv::posint := 1, InTotalXp::nonnegint := 0, RoundDivisor::posint := 1, RoundOffError%::numeric := 0, InCond::`=` := RewXpFct = 10, FinCond := RewXpExp = 1, ExHardnessSeq::(nonemptylist(positive)) := [seq(32e-5*(4+_tmp)^5, _tmp = 1 .. 9)], ExRewsToLvUpSeq::(nonemptylist(positive)) := [seq(60*(2/factorial(max(1, 6-_tmp))+min(max(_tmp-5, 0), 3)), _tmp = 1 .. nops(ExHardnessSeq)-1)], ExRewXpPosBonAndPen::procedure := ((Lv, ExRewXp) -> ExRewXp) })
local h, c, w, r, n, u, p, v, a, b, e, f, i, l, m, t, d, x;
h, c := sort(ExHardnessSeq), 1-InLv;
w := unapply(ExRewXpPosBonAndPen(l, f*piecewise(cat(``, "nargs") = 1, h[l+c], a)^e), l, a);
r := sort(ExRewsToLvUpSeq); n := nops(r); u := unapply(r[min(i, n)]*w(i-c), i);
p := unapply(InTotalXp+('add')(u(t), t = 1 .. i-1), i);
v := unapply(('eval')(t, fsolve(eval({InCond, FinCond}, {ExRewXp = w, LvUpXp = u, TotalXp = p, 'RewXpExp' = e, 'RewXpFct' = f}))), t);
d := [RoundDivisor];
x := (t -> proc (i, d) t[i] end proc)((proc ()
n := nops(h); 0; [InTotalXp]; while `%%` < n do d := [d[], d[-1]]; `%%%`+1; [`%%%`[], `%%%`[-1]+v(u(%))] end do;
p, r := proc (j) piecewise(i = j, m*d[j], d[j]); round(x(j)/%)*% end proc, proc (i) round(x(i)/d[i])*d[i] end proc;
return `%%` end proc
)());
for m in 10, 5, 2 do b := true; while b do b := false; for i from n+1 by -1 to 1 do if (proc (e, i, m)
local t, a, f, s, u; a := 0; f := i; s := i; u := proc ()
local t;
a, f, s := a+1, min(n, f)+1, max(s-1, 1);
return [seq(t .. t+a, t = s .. f-a)]
end proc;
max(x(i), 1e-999999); abs(p(i)-%); if `not`(% <= `%%`*e or % < abs(r(i)-`%%`)) then return false end if;
u();
if % = [] then return true end if;
for t in % do
p(rhs(t))-p(lhs(t));
if % < 1 then return false end if;
x(rhs(t))-x(lhs(t));
abs(`%%`-%);
if `not`(% <= `%%`*e or % < abs(r(rhs(t))-r(lhs(t))-`%%`)) then
return false
end if
end do;
u();
if % = [] then return true end if;
for t in % do
`~`[p]([seq(t)]);
%[3]-2*%[2]+%[1];
if `not`(0 <= % or r(rhs(t))-2*r(rhs(t)-1)+r(lhs(t)) < %) then
return false
end if
end do;
u();
if % = [] then return true end if;
for t in % do
`~`[p]([seq(t)]);
if `not`(0 <= %[4]-3*%[3]+3*%[2]-%[1] or r(rhs(t))-3*r(rhs(t)-1)+3*r(rhs(t)-2)-r(lhs(t)) < 0) then
return false
end if;
(%[3]-%[2])^2-(%[4]-%[3])*(%[2]-%[1]);
if `not`(0 <= % or (r(rhs(t)-1)-r(rhs(t)-2))^2-(r(rhs(t))-r(rhs(t)-1))*(r(rhs(t)-2)-r(lhs(t))) < 0) then
return false
end if
end do;
return true end proc
)(0.01*RoundOffError%, i, m) then b, d[i] := true, d[i]*m end if end do end do end do;
`~`[r]([seq(1 .. n+1)], d); %[2 .. ()]-%[() .. -2], `~`[v](`~`[w]([seq(InLv .. n-c)]));
Levels = InLv .. InLv+n, Table[TotalXp] = `%%`, Table[LevelUpXp] = %[1];
return unapply(('eval')(cat(``, "args"), [%, Table[ExRewsToLvUp] = `~`[`/`](`%%`[1], `%%`[2]), Table[ExRewXp] = `%%`[2], ExRewXp = v(w(Lv, Hardness))]))
end proc
All parameters have standard arguments.
InLv (1)
= initial character level,
InTotalXp (0)
= initial character total xp,
RoundDivisor (1)
--> all levels character total xp is multiple of it,
RoundOffError% (0%)
--> round divisor only grows if it don't break relative error limit,
InCond (RewXpFct=10)
= first equation to find SomeConstant (RewXpFct)
and SomeExpoent (RewXpExp)
with fsolve procedure (can use RewXpFct
, RewXpExp
, TotalXp(Lv)
, LvUpXp(Lv)
and ExRewXp(Lv)
, recommended RewXpFct
or low Lv
),
FinCond (RewXpExp=1)
= second equation to find SomeConstant
and SomeExpoent
with fsolve procedure (can use RewXpFct
, RewXpExp
, TotalXp(Lv)
, LvUpXp(Lv)
and ExRewXp(Lv)
, recommended RewXpExp
or high Lv
),
ExHardnessSeq ([1.00000, 2.48832, 5.37824, 10.48576, 18.89568, 32.00000, 51.53632, 79.62624, 118.81376])
= challenge relative power sequence (standard is the example sequence),
ExRewsToLvUpSeq ([1, 5, 20, 60, 120, 180, 240, 300, 300])
= number of rewards to level up sequence (standard is the example sequence),
ExRewXpPosBonAndPen ((Lv, ExRewXp) -> ExRewXp)
= final reward xp after calculate bonuses and penalties effects.
The procedure returns other procedure that applies eval on argument with Levels = InLv..FinLv
, rounded Table[TotalXp]
, Table[LevelUpXp]
from rounded total xp, Table[ExRewsToLvUp]
from rounded level up xp and reward xp table, Table[ExRewXp]
and formula ExRewXp
. The rounding process verify if round divisor rising make some present property in some near level be absent on same level. I can make optional specific properties keeping but I haven't done that yet.
Using all standard arguments except RoundOffError = 0.5%
and ExRewXpPosBonAndPen = (Lv, ExRewXp) -> ExRewXp * [1.00, 1.00, 1.00, 1.05, 1.10, 1.15, 1.20, 1.25, 1.25][Lv])
the procedure returns it.

When InCond = (TotalXp(2)=10)
or InCond = (LvUpXp(1)=10)
or InCond = (ExRewXp(1)=10)
replaces standard argument the result is the same thing. Like the examples, if FinCond = (TotalXp(10)=1000000)
then that happens.

Finally a great test. The code

prints it.
Lv 1 | Xp 0 | LvUpXp 5 | LvUpXpGrow x 3.000000 | RewXp 5.6 | LvUpRews 0.891
Lv 2 | Xp 5 | LvUpXp 15 | LvUpXpGrow x 2.333333 | RewXp 6.8 | LvUpRews 2.205
Lv 3 | Xp 20 | LvUpXp 35 | LvUpXpGrow x 2.000000 | RewXp 8.2 | LvUpRews 4.251
Lv 4 | Xp 55 | LvUpXp 70 | LvUpXpGrow x 1.714286 | RewXp 9.9 | LvUpRews 7.038
Lv 5 | Xp 125 | LvUpXp 120 | LvUpXpGrow x 1.541667 | RewXp 12.0 | LvUpRews 10.006
Lv 6 | Xp 245 | LvUpXp 185 | LvUpXpGrow x 1.432432 | RewXp 14.4 | LvUpRews 12.814
Lv 7 | Xp 430 | LvUpXp 265 | LvUpXpGrow x 1.358491 | RewXp 17.4 | LvUpRews 15.273
Lv 8 | Xp 695 | LvUpXp 360 | LvUpXpGrow x 1.333333 | RewXp 20.8 | LvUpRews 17.293
Lv 9 | Xp 1055 | LvUpXp 480 | LvUpXpGrow x 1.239583 | RewXp 24.9 | LvUpRews 19.249
Lv 10 | Xp 1535 | LvUpXp 595 | LvUpXpGrow x 1.201681 | RewXp 29.8 | LvUpRews 19.950
Lv 11 | Xp 2130 | LvUpXp 715 | LvUpXpGrow x 1.188811 | RewXp 35.6 | LvUpRews 20.077
Lv 12 | Xp 2845 | LvUpXp 850 | LvUpXpGrow x 1.188235 | RewXp 42.5 | LvUpRews 20.018
Lv 13 | Xp 3695 | LvUpXp 1010 | LvUpXpGrow x 1.183168 | RewXp 50.5 | LvUpRews 19.980
Lv 14 | Xp 4705 | LvUpXp 1195 | LvUpXpGrow x 1.200837 | RewXp 60.1 | LvUpRews 19.887
Lv 15 | Xp 5900 | LvUpXp 1435 | LvUpXpGrow x 1.177700 | RewXp 71.3 | LvUpRews 20.119
Lv 16 | Xp 7335 | LvUpXp 1690 | LvUpXpGrow x 1.183432 | RewXp 84.5 | LvUpRews 19.990
Lv 17 | Xp 9025 | LvUpXp 2000 | LvUpXpGrow x 1.182500 | RewXp 100.1 | LvUpRews 19.986
Lv 18 | Xp 11025 | LvUpXp 2365 | LvUpXpGrow x 1.181818 | RewXp 118.3 | LvUpRews 19.995
Lv 19 | Xp 13390 | LvUpXp 2795 | LvUpXpGrow x 1.177102 | RewXp 139.6 | LvUpRews 20.019
Lv 20 | Xp 16185 | LvUpXp 3290 | LvUpXpGrow x 1.177812 | RewXp 164.6 | LvUpRews 19.990
Lv 21 | Xp 19475 | LvUpXp 3875 | LvUpXpGrow x 1.175484 | RewXp 193.8 | LvUpRews 20.000
Lv 22 | Xp 23350 | LvUpXp 4555 | LvUpXpGrow x 1.174533 | RewXp 227.8 | LvUpRews 19.995
Lv 23 | Xp 27905 | LvUpXp 5350 | LvUpXpGrow x 1.172897 | RewXp 267.5 | LvUpRews 20.001
Lv 24 | Xp 33255 | LvUpXp 6275 | LvUpXpGrow x 1.171315 | RewXp 313.7 | LvUpRews 20.003
Lv 25 | Xp 39530 | LvUpXp 7350 | LvUpXpGrow x 1.169388 | RewXp 367.4 | LvUpRews 20.003
Lv 26 | Xp 46880 | LvUpXp 8595 | LvUpXpGrow x 1.169284 | RewXp 429.9 | LvUpRews 19.995
Lv 27 | Xp 55475 | LvUpXp 10050 | LvUpXpGrow x 1.166667 | RewXp 502.3 | LvUpRews 20.009
Lv 28 | Xp 65525 | LvUpXp 11725 | LvUpXpGrow x 1.165458 | RewXp 586.2 | LvUpRews 20.002
Lv 29 | Xp 77250 | LvUpXp 13665 | LvUpXpGrow x 1.164288 | RewXp 683.4 | LvUpRews 19.997
Lv 30 | Xp 90915 | LvUpXp 15910 | LvUpXpGrow x 1.163734 | RewXp 795.7 | LvUpRews 19.995
Lv 31 | Xp 106825 | LvUpXp 18515 | LvUpXpGrow x 1.161761 | RewXp 925.5 | LvUpRews 20.006
Lv 32 | Xp 125340 | LvUpXp 21510 | LvUpXpGrow x 1.159926 | RewXp 1075.2 | LvUpRews 20.006
Lv 33 | Xp 146850 | LvUpXp 24950 | LvUpXpGrow x 1.159319 | RewXp 1247.8 | LvUpRews 19.995
Lv 34 | Xp 171800 | LvUpXp 28925 | LvUpXpGrow x 1.158168 | RewXp 1446.5 | LvUpRews 19.996
Lv 35 | Xp 200725 | LvUpXp 33500 | LvUpXpGrow x 1.156716 | RewXp 1675.1 | LvUpRews 19.999
Lv 36 | Xp 234225 | LvUpXp 38750 | LvUpXpGrow x 1.155484 | RewXp 1937.8 | LvUpRews 19.997
Lv 37 | Xp 272975 | LvUpXp 44775 | LvUpXpGrow x 1.155221 | RewXp 2239.4 | LvUpRews 19.995
Lv 38 | Xp 317750 | LvUpXp 51725 | LvUpXpGrow x 1.152731 | RewXp 2585.2 | LvUpRews 20.008
Lv 39 | Xp 369475 | LvUpXp 59625 | LvUpXpGrow x 1.152201 | RewXp 2981.5 | LvUpRews 19.999
Lv 40 | Xp 429100 | LvUpXp 68700 | LvUpXpGrow x 1.151383 | RewXp 3435.1 | LvUpRews 20.000
Lv 41 | Xp 497800 | LvUpXp 79100 | LvUpXpGrow x 1.149178 | RewXp 3953.8 | LvUpRews 20.006
Lv 42 | Xp 576900 | LvUpXp 90900 | LvUpXpGrow x 1.149065 | RewXp 4546.5 | LvUpRews 19.994
Lv 43 | Xp 667800 | LvUpXp 104450 | LvUpXpGrow x 1.147918 | RewXp 5223.0 | LvUpRews 19.998
Lv 44 | Xp 772250 | LvUpXp 119900 | LvUpXpGrow x 1.146372 | RewXp 5994.6 | LvUpRews 20.001
Lv 45 | Xp 892150 | LvUpXp 137450 | LvUpXpGrow x 1.145871 | RewXp 6873.8 | LvUpRews 19.996
Lv 46 | Xp 1029600 | LvUpXp 157500 | LvUpXpGrow x 1.144762 | RewXp 7874.8 | LvUpRews 20.001
Lv 47 | Xp 1187100 | LvUpXp 180300 | LvUpXpGrow x 1.143095 | RewXp 9013.4 | LvUpRews 20.004
Lv 48 | Xp 1367400 | LvUpXp 206100 | LvUpXpGrow x 1.142649 | RewXp 10307.4 | LvUpRews 19.995
Lv 49 | Xp 1573500 | LvUpXp 235500 | LvUpXpGrow x 1.142251 | RewXp 11776.9 | LvUpRews 19.997
Lv 50 | Xp 1809000 | LvUpXp 269000 | LvUpXpGrow x 1.140149 | RewXp 13444.2 | LvUpRews 20.009
Lv 51 | Xp 2078000 | LvUpXp 306700 | LvUpXpGrow x 1.139550 | RewXp 15334.4 | LvUpRews 20.001
Lv 52 | Xp 2384700 | LvUpXp 349500 | LvUpXpGrow x 1.138913 | RewXp 17475.6 | LvUpRews 19.999
Lv 53 | Xp 2734200 | LvUpXp 398050 | LvUpXpGrow x 1.137420 | RewXp 19899.3 | LvUpRews 20.003
Lv 54 | Xp 3132250 | LvUpXp 452750 | LvUpXpGrow x 1.136941 | RewXp 22640.4 | LvUpRews 19.997
Lv 55 | Xp 3585000 | LvUpXp 514750 | LvUpXpGrow x 1.135891 | RewXp 25738.2 | LvUpRews 19.999
Lv 56 | Xp 4099750 | LvUpXp 584700 | LvUpXpGrow x 1.134855 | RewXp 29236.3 | LvUpRews 19.999
Lv 57 | Xp 4684450 | LvUpXp 663550 | LvUpXpGrow x 1.134805 | RewXp 33183.6 | LvUpRews 19.996
Lv 58 | Xp 5348000 | LvUpXp 753000 | LvUpXpGrow x 1.132537 | RewXp 37634.3 | LvUpRews 20.008
Lv 59 | Xp 6101000 | LvUpXp 852800 | LvUpXpGrow x 1.132387 | RewXp 42649.0 | LvUpRews 19.996
Lv 60 | Xp 6953800 | LvUpXp 965700 | LvUpXpGrow x 1.131821 | RewXp 48295.0 | LvUpRews 19.996
Lv 61 | Xp 7919500 | LvUpXp 1093000 | LvUpXpGrow x 1.130375 | RewXp 54647.2 | LvUpRews 20.001
Lv 62 | Xp 9012500 | LvUpXp 1235500 | LvUpXpGrow x 1.130312 | RewXp 61788.8 | LvUpRews 19.996
Lv 63 | Xp 10248000 | LvUpXp 1396500 | LvUpXpGrow x 1.128894 | RewXp 69812.3 | LvUpRews 20.004
Lv 64 | Xp 11644500 | LvUpXp 1576500 | LvUpXpGrow x 1.128449 | RewXp 78820.3 | LvUpRews 20.001
Lv 65 | Xp 13221000 | LvUpXp 1779000 | LvUpXpGrow x 1.127038 | RewXp 88926.6 | LvUpRews 20.005
Lv 66 | Xp 15000000 | LvUpXp 2005000 | LvUpXpGrow x 1.126683 | RewXp 100257.5 | LvUpRews 19.998
Lv 67 | Xp 17005000 | LvUpXp 2259000 | LvUpXpGrow x 1.125719 | RewXp 112952.9 | LvUpRews 19.999
Lv 68 | Xp 19264000 | LvUpXp 2543000 | LvUpXpGrow x 1.124853 | RewXp 127167.5 | LvUpRews 19.997
Lv 69 | Xp 21807000 | LvUpXp 2860500 | LvUpXpGrow x 1.124803 | RewXp 143072.7 | LvUpRews 19.993
Lv 70 | Xp 24667500 | LvUpXp 3217500 | LvUpXpGrow x 1.123543 | RewXp 160858.2 | LvUpRews 20.002
Lv 71 | Xp 27885000 | LvUpXp 3615000 | LvUpXpGrow x 1.122822 | RewXp 180733.4 | LvUpRews 20.002
Lv 72 | Xp 31500000 | LvUpXp 4059000 | LvUpXpGrow x 1.121828 | RewXp 202929.7 | LvUpRews 20.002
Lv 73 | Xp 35559000 | LvUpXp 4553500 | LvUpXpGrow x 1.121665 | RewXp 227702.8 | LvUpRews 19.998
Lv 74 | Xp 40112500 | LvUpXp 5107500 | LvUpXpGrow x 1.120411 | RewXp 255334.7 | LvUpRews 20.003
Lv 75 | Xp 45220000 | LvUpXp 5722500 | LvUpXpGrow x 1.120140 | RewXp 286136.3 | LvUpRews 19.999
Lv 76 | Xp 50942500 | LvUpXp 6410000 | LvUpXpGrow x 1.118955 | RewXp 320450.5 | LvUpRews 20.003
Lv 77 | Xp 57352500 | LvUpXp 7172500 | LvUpXpGrow x 1.118508 | RewXp 358655.1 | LvUpRews 19.998
Lv 78 | Xp 64525000 | LvUpXp 8022500 | LvUpXpGrow x 1.117794 | RewXp 401165.7 | LvUpRews 19.998
Lv 79 | Xp 72547500 | LvUpXp 8967500 | LvUpXpGrow x 1.117647 | RewXp 448440.2 | LvUpRews 19.997
Lv 80 | Xp 81515000 | LvUpXp 10022500 | LvUpXpGrow x 1.116238 | RewXp 500981.9 | LvUpRews 20.006
Lv 81 | Xp 91537500 | LvUpXp 11187500 | LvUpXpGrow x 1.115531 | RewXp 559344.2 | LvUpRews 20.001
Lv 82 | Xp 102725000 | LvUpXp 12480000 | LvUpXpGrow x 1.115385 | RewXp 624135.1 | LvUpRews 19.996
Lv 83 | Xp 115205000 | LvUpXp 13920000 | LvUpXpGrow x 1.114583 | RewXp 696022.4 | LvUpRews 19.999
Lv 84 | Xp 129125000 | LvUpXp 15515000 | LvUpXpGrow x 1.114083 | RewXp 775739.2 | LvUpRews 20.000
Lv 85 | Xp 144640000 | LvUpXp 17285000 | LvUpXpGrow x 1.112815 | RewXp 864089.7 | LvUpRews 20.004
Lv 86 | Xp 161925000 | LvUpXp 19235000 | LvUpXpGrow x 1.112685 | RewXp 961955.7 | LvUpRews 19.996
Lv 87 | Xp 181160000 | LvUpXp 21402500 | LvUpXpGrow x 1.112370 | RewXp 1070303.8 | LvUpRews 19.997
Lv 88 | Xp 202562500 | LvUpXp 23807500 | LvUpXpGrow x 1.111204 | RewXp 1190193.0 | LvUpRews 20.003
Lv 89 | Xp 226370000 | LvUpXp 26455000 | LvUpXpGrow x 1.110754 | RewXp 1322782.8 | LvUpRews 20.000
Lv 90 | Xp 252825000 | LvUpXp 29385000 | LvUpXpGrow x 1.110430 | RewXp 1469342.3 | LvUpRews 19.999
Lv 91 | Xp 282210000 | LvUpXp 32630000 | LvUpXpGrow x 1.109409 | RewXp 1631259.8 | LvUpRews 20.003
Lv 92 | Xp 314840000 | LvUpXp 36200000 | LvUpXpGrow x 1.109116 | RewXp 1810053.4 | LvUpRews 19.999
Lv 93 | Xp 351040000 | LvUpXp 40150000 | LvUpXpGrow x 1.108344 | RewXp 2007382.5 | LvUpRews 20.001
Lv 94 | Xp 391190000 | LvUpXp 44500000 | LvUpXpGrow x 1.108090 | RewXp 2225059.7 | LvUpRews 19.999
Lv 95 | Xp 435690000 | LvUpXp 49310000 | LvUpXpGrow x 1.107280 | RewXp 2465064.5 | LvUpRews 20.004
Lv 96 | Xp 485000000 | LvUpXp 54600000 | LvUpXpGrow x 1.106227 | RewXp 2729557.3 | LvUpRews 20.003
Lv 97 | Xp 539600000 | LvUpXp 60400000 | LvUpXpGrow x 1.655629 | RewXp 3020895.5 | LvUpRews 19.994
Lv 98 | Xp 600000000 | LvUpXp 100000000 | LvUpXpGrow x 3.000000 | RewXp 3341649.8 | LvUpRews 29.925
Lv 99 | Xp 700000000 | LvUpXp 300000000 | LvUpXpGrow x infinity | RewXp 3694622.2 | LvUpRews 81.199
Lv 100 | Xp 1000000000 | LvUpXp infinity | LvUpXpGrow x infinity | RewXp infinity | LvUpRews infinity
(hardness/reward)
is ridiculous when it keep you killing weak enemies. I'll think about details for add. Edit: I don't speak english, sorry about that. – RHER WOLF Sep 29 '20 at 15:54