XP & Leveling

The XP curve to level 99, the over/under-level multiplier, and how much a kill is really worth.

On this page

Every kill feeds a single XP pool. How fast that pool fills is governed by three things: the exponential XP-to-next curve, a level-gap multiplier that punishes farming weak enemies, and a flat global 0.12 scalar that every reward passes through. This page shows all three exactly as the engine computes them, so you can predict what a kill is really worth.

The level cap

The hero cap is level 99 (HERO_MAX_LEVEL). Once you hit it, XP stops accumulating entirely — the reward routine zeroes your XP bar and returns early, so over-cap kills award nothing. Every attribute point you will ever have is already assigned by that level (5 per level via your archetype), so 99 is a hard ceiling on raw character power.

XP required per level

The XP needed to go from level L to L+1 grows geometrically:

xpForLevel(L) = max(20, round(128 × 1.15^(L − 1)))
  • Base = 128 (XP for the level-1 → 2 step)
  • Growth = ×1.15 per level (a compounding +15%)
  • Floor = 20 (only matters at level 1, where the curve already exceeds it)

Because the growth is multiplicative, the requirement roughly doubles every ~5 levels (1.15^5 ≈ 2.01). The back half of the curve is brutal:

To reach levelXP for that stepNotes
2147128 × 1.15¹
10450128 × 1.15⁹
253,664128 × 1.15²⁴
50120,616128 × 1.15⁴⁹
753,970,545128 × 1.15⁷⁴
99113,657,559128 × 1.15⁹⁸ — the final step

The single step from 98 → 99 costs more than every level from 1 → 90 combined. This is why the level-gap multiplier and XP bonuses below matter so much at the endgame.

The level-gap multiplier

Raw enemy XP is scaled by xpLevelGapMultiplier(playerLevel, enemyLevel), anchored at 1.0 for an equal-level kill. Let gap = playerLevel − enemyLevel:

  • Over-levelled (gap ≥ 0, you are stronger): exp(−0.12 × gap) — smoothly diminishing XP for farming weaklings.
  • Under-levelled (gap < 0, enemy is above you): exp(ln(1.125) × 0.6 × gap) = exp(0.07067 × gap).

The under-level branch is the clever part. Enemy base XP grows as 1.125^(level × 0.6), i.e. by a factor exp(0.07067) per level. The under-level multiplier is the exact inverse of that growth, so a stronger enemy’s higher base XP and the negative-gap penalty cancel perfectly: you never earn more than the equal-level value, no matter how far above you the target is. The cap simply rises as you level.

Gap (player − enemy)MultiplierEffect
−20 (enemy 20 above)1.000 (capped)Same XP as an on-level kill
−51.000 (capped)Same XP as an on-level kill
0 (equal level)1.000Full reward
+10.887−11%
+30.698−30%
+50.549−45%
+100.301−70%
+200.091−91%

Under-level cap in action: a level-40 hero killing a level-60 common enemy takes its base XP of 243 × exp(0.07067 × −20) = 243 × 0.2433 = 59 — identical to killing an on-level level-40 common (base 59). The strong enemy is worth the same XP, never more. Practical takeaway: fighting up gives no XP bonus (only better loot/gold), and fighting down bleeds XP fast — stay near your level.

The global 0.12 scalar and expGain

After the gap multiplier, every reward is multiplied by a flat 0.12 (GLOBAL_XP_REWARD_MULTIPLIER) and your experienceGain bonus. The full pipeline the engine runs on each kill is:

baseAwarded = max(1, round(enemyBaseXp × xpLevelGapMultiplier))
awardedXp   = max(1, round(baseAwarded × (1 + expGain) × 0.12))

The 0.12 is the single global pacing knob — enemy definitions store a “raw” XP value roughly eight times larger than what you actually receive, keeping the tuning numbers readable. It applies uniformly at every level and in every area, so it is the one constant that moves overall levelling speed without changing the shape of any curve. Note the two independent max(1, …) floors: a heavily over-levelled kill can round down to a literal 1 XP (see the worked example).

expGain sources (they stack additively before the ×0.12):

SourceBonusNotes
Scholar exploration skillup to +100%Linear with skill level; at level 100 it doubles all XP
Sage’s Mead (barkeeper drink)+10%Timed buff while active
experienceGain affixvariesRolls on gear

At the endgame these are the only lever against the ~113 M final level step, so a min-maxer maxes Scholar and keeps Sage’s Mead running while grinding 90+.

Worked example: a level-40 enemy at hero level 60

You are level 60 and kill a level-40 common enemy (raw base XP = 59), with no expGain bonus:

  1. Gap = 60 − 40 = +20 → exp(−0.12 × 20) = exp(−2.4) = 0.0907 (~9%).
  2. baseAwarded = round(59 × 0.0907) = round(5.35) = 5.
  3. awardedXp = round(5 × (1 + 0) × 0.12) = round(0.6) = 1 (the floor).

That over-levelled kill is worth a single point of XP — the gap multiplier and the global scalar together crush it into the floor. Contrast a level-60 hero killing a level-55 enemy (gap +5, base 171): 171 × 0.5488 = 94, × 0.12 = 11 XP — eleven times more for a target only five levels higher. Staying within a few levels of your prey is the difference between meaningful progress and grinding for scraps.

See also

  • Attributes — what your 5 auto-assigned points per level actually buy.
  • Combat Formula — hit chance, mitigation, and how the level delta also shifts your chance to land a hit.