LEVEL PENALTY

Other Systems › Level Penalty

Every battle awards experience at the end. This page defines who receives it and how much is kept once the level gap between the recipient and the enemy it defeated is applied.

Who gets XP

The penalty curve

Let diff = enemyLevel − recipientLevel. Positive means the enemy is higher level (you are under-leveled); negative means the enemy is lower (you are over-leveled). The two directions use different, deliberately asymmetric curves.

Enemy higher — forgiving

No penalty at all up to +10. Past that it ramps linearly, reaching the 90% floor at +50 and staying there.

diff ≤ 10 → 0%
10 < diff < 50 → 90% × (diff−10)/40
diff ≥ 50 → 90%

Enemy lower — strict

Half the window, twice as steep. Grace only to −3, then a fast ramp hitting 90% by −25.

d = −diff
d ≤ 3 → 0%
3 < d < 25 → 90% × (d−3)/22
d ≥ 25 → 90%

diff +5 · penalty 0%
XP retained 100%

Reference table

Enemy above youPenaltyXP kept
Enemy below youPenaltyXP kept
Design intent: under-leveling into hard content stays rewarding (push up freely), while grinding trivial enemies is quickly gutted — the over-leveled curve reaches the 90% floor in half the level span of the under-leveled one.

Where the numbers live

The curve’s five parameters (grace +10, full +50, grace −3, full −25, 90% cap) are one table, xp_penalty in dfmc-client src/tables.json, read by the server when it credits class XP for a battle (the server owns XP since the 2026-10-22 server-authority run) and mirrored by the game client’s victory screen. The per-kill base XP comes from XPCurve.csv — see XP.

Changelog