Roguelike Scaling
Keeps roguelike runs consistent from level 1 to 25. Vanilla weapon damage grows about 5x while enemies grow about 214x, stretching turns-to-kill from 2 to 11. Weapon damage now compounds to track the enemy curve, plus mild health and armor top-ups.Roguelike Scaling
Stolen Realm's roguelike mode scales player stats with flat linear rules while enemies scale through multiplier tables. The two drift apart, and by the late levels your character is doing a fraction of the damage it did at the start of the run.
This mod rebalances the curves from measured in-game data so a run stays consistent end to end.
The problem, measured
Every number below was read out of the live game with a headless probe that enters a real roguelike run, force-levels a hero, and records the actual stat values. The enemy column is the game's own curve for a baseline-100 enemy.
Vanilla, level 1 to level 25:
| L1 | L10 | L20 | L25 | Growth | |
|---|---|---|---|---|---|
| Player MaxHealth | 225 | 2954 | 16843 | 32724 | 145x |
| Enemy MaxHealth | 56 | 907 | 6400 | 12000 | 214x |
| Player weapon damage | 25 | 62 | 109 | 132 | 5.3x |
| Player ability power | 19 | 171 | 492 | 713 | 37x |
| Enemy spell power | 42 | 364 | 1092 | 1736 | 41x |
Health and ability power track the enemy curve closely because attribute points feed them multiplicatively. Weapon damage does not. As a share of enemy health it collapses roughly 34x over a run, and the effect on play is a turns-to-kill that stretches like this:
| Level | 1 | 5 | 10 | 15 | 20 | 25 |
|---|---|---|---|---|---|---|
| Turns to kill (vanilla) | 2.2 | 3.8 | 5.4 | 6.8 | 9.9 | 11.2 |
| Turns to kill (with this mod) | 2.0 | 2.9 | 3.0 | 2.6 | 2.6 | 2.1 |

The same drift shows up defensively: player health stays at 4.0x a baseline enemy at level 1 but only 2.7x by level 25.
The fix
The mod multiplies the game's own values; it never replaces a formula. Nothing is hardcoded from the game's balance numbers, so it cannot desync from a future balance pass, item modifiers, rogue powerups and skill bonuses all keep composing normally, and switching the mod off restores vanilla exactly.
multiplier(level) = (1 + rate) ^ max(0, level - pivot)
Weapon damage and attributes use separate rates and pivots, because they are not the same problem.
With the shipped defaults:
| L1 | L5 | L10 | L15 | L20 | L25 | |
|---|---|---|---|---|---|---|
| Turns to kill | 2.0 | 2.9 | 3.0 | 2.6 | 2.6 | 2.1 |
| Player MaxHealth : enemy MaxHealth | 4.0x | 3.5x | 3.6x | 3.9x | 3.5x | 4.1x |
| Weapon damage growth | 1.06x | 1.31x | 1.71x | 2.23x | 2.92x | 3.81x |
Turns to kill stays in a 2.0-3.0 band for the whole run instead of stretching five-fold.
WeaponGrowthPerLevel was tuned by measurement, not by feel. The obvious guess of 0.16 was tried
first and rejected: it pushed turns-to-kill down to about 0.2 by level 25, so every fight ended in a
single hit. 0.055 was the rate that holds the band above.
Installing and removing is safe
The mod never writes to your save files. Every change is applied at read time: the game's own numbers are read, multiplied by the curve, and handed back. Nothing is baked into a character, an item, or a quest record.
- Install it and your existing characters and in-progress runs are untouched. Scaling appears the moment you load in.
- Remove it and every number returns to exactly what the game would have given you. There is nothing to migrate, repair or undo, because nothing was ever persisted.
- Turn it off (
Enabled = false) and you get the same result as removing it, without a restart. - Item drops, rogue powerups, skill bonuses and future balance changes all keep composing normally, because the mod multiplies rather than replaces.
What the mod does not touch: the campaign mode by default (RoguelikeOnly = true), AI characters
(so enemy stats are unchanged unless you enable enemy scaling), and save data of any kind.
Scaling follows the run, not the character sheet
In a roguelike run the curves are evaluated against the run's level, not each character's own level. These are not always the same thing: a character who has levelled less often than the run has advanced, or a party member recruited part-way through, sits below the run level. Scaling off the character sheet in that case leaves them weaker than the enemies they are fighting, which is the exact problem the mod exists to fix.
The run level is RoguelikeManager.RoguelikeBattleLevel, which is what the enemy curve is driven by
too, so the player and enemy sides stay on the same footing at every point in a run. Outside a
roguelike run there is no run level, so your character's own level is used unchanged.
Multiplayer
Every player in a session needs this mod installed, with the same curve settings.
That is not optional and it is not a nice-to-have. Each client computes its own multiplier from its own copy of the game, so a player without the mod has genuinely different stats from a player with it. Nothing will warn you mid-fight that this is the problem, so agree on it before you start.
With that in place the session is stable. Combat in this game is host-authoritative — damage, deaths and movement are decided on the host — and the mod only ever multiplies a value at read time. It writes nothing the network replicates, and the character data it does send is the game's own unscaled attributes. So all players running the mod see the same numbers and the same outcomes.
What to watch for:
- Host has it, clients don't — the host's characters are stronger than clients' characters appear to be. Health bars on the client will also be wrong, because current and maximum health are scaled together.
- Keep Enemy Scaling off for co-op. Enemy health and damage are host decisions. If the host has it enabled and a client does not, that client sees enemy numbers that do not match what it is fighting. It ships off by default; leave it off unless every player has matched settings.
- The mod logs a
[multiplayer]warning toBepInEx\LogOutput.logthe first time it detects a networked session, so you can confirm everyone is actually running it.
Configuration
Everything lives in BepInEx\config\com.stolenrealm.roguelikescaling.cfg. Close the game, edit,
relaunch.
| Section | Key | Default | What it does |
|---|---|---|---|
| General | Enabled |
true |
Master switch. false restores vanilla exactly. |
| General | RoguelikeOnly |
true |
Leave campaign characters untouched. |
| Curves | GrowthPerLevel |
0.02 |
Compounding rate for health, mana, armor, ability power. |
| Curves | PivotLevel |
5 |
Levels at or below this are untouched for attributes. |
| Curves | WeaponGrowthPerLevel |
0.055 |
Compounding rate for weapon damage. The main lever. |
| Curves | WeaponPivotLevel |
0 |
Weapon damage compounds from level 1, because the deficit exists across the whole run. |
| Attribute Weights | MaxHealth |
1 |
Weight on GrowthPerLevel for health. 0 disables. |
| Attribute Weights | MaxMana |
1 |
Weight for mana. |
| Attribute Weights | ArmorAndMagicArmor |
1 |
Weight for armor. |
| Attribute Weights | AbilityPower |
1 |
Weight for ability power. |
| Attribute Weights | WeaponDamage |
1 |
Weight on WeaponGrowthPerLevel. |
| Attribute Weights | BonusStatPointsPerLevel |
0 |
Extra attribute points per level past the pivot. |
| Enemy Scaling | Enabled |
false |
Also extend enemy curves past the game's table. |
| Enemy Scaling | PivotLevel |
30 |
Where the enemy tail starts. |
| Enemy Scaling | HealthGrowthPerLevel |
0.03 |
Enemy health compounding rate. |
| Enemy Scaling | DamageGrowthPerLevel |
0.02 |
Enemy damage compounding rate. |
| Diagnostics | LogLevelUps |
true |
Log a per-level stat line to BepInEx\LogOutput.log. |
| Diagnostics | ShowScalingInStatScreen |
true |
Show the multiplier next to each scaled stat. |
| Diagnostics | ShowVanillaValues |
false |
Also show the un-scaled value, e.g. x1.35 (6087). |
Seeing the scaling in game
Press C for the character screen and the multiplier appears next to every stat the mod is actually touching, so you never have to open the config to know why a number is what it is:

Nothing is annotated at levels where the curve is still 1, and stats the mod does not scale are left alone. The roguelike level-up panel shows both curves for the same reason: the attributes you are buying there compound at a different rate from the weapon damage shown on the character screen.
Weights are relative: 1 follows the curve rate, 0.5 halves it, 0 turns that stat off.
Enemy scaling is off by default, and there is a reason
The roguelike branch of the game's enemy curve has no extrapolation tail. The campaign path adds
1.05^(L-30) + 24(L-30) past level 30, but roguelike just lerps the final two table nodes forever,
so enemy health and damage flatten out at depth. The tail is implemented here, but ships disabled
so the player curves are what you are evaluating first. Turn it on if you want enemies to keep
compounding past level 30.
Tuning
Set Diagnostics/LogLevelUps = true and play. Every level-up writes a line to
BepInEx\LogOutput.log with the curve multiplier and your real stats, so you can tune against
numbers rather than guesses.
If late-game damage still feels short, raise WeaponGrowthPerLevel before touching anything else.
If enemies outgrow your mitigation, raise the ArmorAndMagicArmor weight or turn enemy scaling on.
Reach for BonusStatPointsPerLevel last: it feeds health, ability power, armor and dodge at once,
so it quietly amplifies every other curve.
Notes
- Requires BepInEx 5.x (x64). Not BepInEx 6.
- Built and measured against
Assembly-CSharp.dlldated 2026-09-16. - The mod does not scale characters that are
IsAI, so enemy stats are untouched unless you enable enemy scaling. - If a game update renames anything the mod touches, that patch becomes a no-op and logs a warning at startup instead of throwing.
Credits
Measured and built with the Stolen Realm modding pile. Thanks to Burst2Flame Entertainment for Stolen Realm.
