AI Game Dev Search

Why levelling feels like a grind: XP curve formulas, fast early levels and three more tricks

Five XP curve tricks with formulas you can copy: curve shape, fast early levels, a real level-up moment, catch-up XP and milestone rewards, each shown side by side.

Tested with Claude Code 2.1.296 · Opus 5.5

Two charts of minutes per level: a flat-then-steep grind curve on the left and a fast-start, smoothly rising curve with milestone marks on the right, above five coloured trick labels.
What we asked“Make a web page that demonstrates the five XP curve and level-up tricks one at a time, so anyone can see and feel each one within a few seconds. For each one, show the same short moment side by side: without it on the left, with it on the right, playing in a loop, with a caption that says what just happened and a replay button. Where it helps, let me play the moment myself. It will sit inside a blog post about 720 pixels wide, so it has to look good at that width and on a phone. Also make each one viewable alone with ?trick=<id>&solo, using these ids: curve-shape, fast-early, level-up-moment, catch-up-xp, milestone-rewards. Speed up time so a whole session fits in a few seconds, show the XP bar and a small minutes-per-level chart on each side, and print the formula used under it. Use the internet freely for better results: free CC0 art, fonts or small libraries (for example Kenney's CC0 assets) are welcome; download anything you use into this folder so the page works without outside links, and list each item with its licence and source in CREDITS.md.”

What happened

  • Loaded the xp-curve skill
  • Downloaded Kenney's CC0 Tiny Dungeon sprites, particle effects, interface sounds and a pixel font
  • Wrote the XP model first, with all five tricks as switches in one settings object, and a measuring script to tune the numbers before drawing anything
Claude
The numbers are tuned: with fast early levels, the first level-up moves from 3:02 to 0:36. Now I'm picking sprites and drawing the scenes.
  • Dropped Kenney's heading font, because "MAKE" read as "MaHE"
  • Fixed a hero that sometimes looked washed-out white: the first frame could arrive with a negative time step, so the flash grew instead of fading
  • Added Play it yourself, with the same kill on both sides, and checked the page at 720 px and in a 375 px phone frame
Claude
With every trick on, a 2-hour session has its first level-up at 0:36 and no gap between rewards longer than 12.8 minutes. Catch-up is gentle with this formula: the gap shrinks from 5 levels to 1.3, but doesn't close within the 2 hours.

Levelling feels like a grind when the time between levels doesn’t make sense. One level takes three minutes, the next takes twenty-five, and the rewards are “+5 HP” again. The fix is mostly planning: a formula for the curve, and a few rules for the moments around it. Each demo below plays a whole session in a few seconds, without the trick on the left and with it on the right. Under each side you see the XP bar, a small chart of minutes per level (dashed outline: what the formula says; solid bar: what it really took) and the formula itself. Play it yourself lets you tap to attack, and both sides get the same kill, so the only difference is the trick.

1. Plan the curve with one formula

An XP table typed by feel has flat stretches and sudden walls. One formula for the XP from level L to L+1 makes every level a little longer than the last. Ours is a power curve, round(90 · L^1.55). Old School RuneScape uses a curve that doubles about every 7 levels, so level 92 needs 6,517,253 XP, almost exactly half of the 13,034,431 needed for 99 (OSRS Wiki). In our demo, the hand-typed table on the left makes level 12 take 25 minutes right after levels of 3 to 12. On the right, the longest level is 12 minutes, and it comes last.

2. Make the first levels fast

The first level-up teaches the player that levels exist and feel good. Aim for level 2 in the first minute or two and level 5 within about ten, then let the curve take over. RuneScape’s level 2 needs only 83 XP (OSRS Wiki). In our demo, a discount on the first few levels moves the first level-up from 3:02 to 0:36, and level 5 from “not in 15 minutes” to 10:00. After that, both curves are the same.

3. Make the level-up an event

If the only sign of a level-up is a number changing, players miss it. Give it a moment: a slow-down of 0.3 to 0.5 seconds, a burst, a sound, a full heal, and a card that says what got better. Vampire Survivors makes every level-up a choice of three or four weapons and power-ups (Wikipedia). In our demo, both heroes reach level 4 at the same moment, hurt. On the left, the number changes and the hero stays hurt. On the right: 0.4 s of slow motion, a burst, a full heal and “+5 HP, new skill: Dash”. When you play it, you pick the skill yourself.

4. Give catch-up XP to players who fall behind

A player who took a week off, or joined late, shouldn’t stay behind their friends forever. Give a bonus that grows with the gap and turns itself off when they’re level: xp × clamp(1 + 0.1 × (expected level − level), 1, 2). World of Warcraft does a version of this with rested XP: while rested, kills give double XP, and it builds up while you’re logged out, up to 150% of a level (Warcraft Wiki). In our demo, you start 5 levels behind a friend. Without the bonus you end 3.2 behind; with it, kills start at +50% and you end 1.3 behind.

5. Put a bigger reward every few levels

Stat bumps alone blur together. Every five levels or so, give something you can feel: a new skill, a weapon, a pet, a new area. And show it on the bar ahead of time, so there’s always something to aim for. In Pokémon, Charmander evolves at level 16 and again at 36 (Bulbapedia). In our demo, both sides get 13 level-ups in two hours. The left gets “+5 HP” thirteen times. The right gets the same, plus a Dash, a Battle axe, a Ghost pet and a new area, each marked above the chart before it arrives.

Measure minutes, not XP

XP numbers are hard to feel. Minutes are easy. Before you tune by feel, print how long each level takes:

  • Minutes per level is XP needed divided by XP per minute. Plot it. It should rise smoothly, with no sudden walls.
  • First level-up under 2 minutes, and no gap between rewards longer than about 15 minutes. With all five tricks on, our demo’s 2-hour session has its first level-up at 0:36 and its longest gap at 12.8 minutes.
  • Don’t overdo catch-up. Our gentle formula shrinks a 5-level gap to 1.3 in two hours without closing it. If you want it to close, raise the 0.1 or the cap, but keep it switching off at zero, or it stops being a bonus and becomes the normal speed.

Once levels come at a good pace, the next question is what each level-up offers. See roguelike upgrade systems.

Add it to your game

  1. Copy the skill at the end of this page into your project.
  2. Ask your agent: “Levelling in my game feels like a grind. Fix the XP curve.”
  3. Play it, then tune in plain words: “Level 10 still takes too long.”

Art and sound in the demos: Tiny Dungeon, Particle Pack, Interface Sounds and Kenney Mini Square by Kenney (CC0).

The skill that made it work

This is the whole skill we gave Claude Code. Copy it into your project and ask your agent to fix your XP curve. Every trick sits behind its own switch, and the last step makes it print minutes per level instead of guessing.

xp-curve
  1. Find where XP is given, how much, and the XP-per-level table or formula.
  2. Put every trick behind one named switch in a single settings object, all on by default, so each can be tested on its own.
  3. curve-shape. Use one formula for XP needed to go from level L to L+1 and plot it. Power curve: xpToNext(L) = round(base * L^p), base 50 to 100, p 1.5 to 2.2. Exponential: xpToNext(L) = round(base * g^(L-1)), g 1.08 to 1.15 (gets steep fast). Pokémon's Medium Fast group needs L^3 total XP to reach level L. RuneScape: total(L) = floor(sum over l=1..L-1 of floor(l + 300 * 2^(l/7)) / 4).
  4. fast-early. Reach level 2 in the first minute or two and level 5 within about 10 minutes, then slow down. RuneScape's level 2 needs only 83 XP.
  5. level-up-moment. Make the level-up an event: a 0.3 to 0.5 s pause or slow-down, a burst, a sound, a full heal, and a card that says what got better ("+5 HP, new skill: Dash"). Vampire Survivors makes every level-up a choice of three or four weapons and power-ups.
  6. catch-up-xp. Help players who fall behind: xp *= clamp(1 + 0.1 * (expectedLevel - playerLevel), 1, 2), or bank bonus XP while away. World of Warcraft's rested XP doubles kill XP and builds up while logged out, up to 150% of a level.
  7. milestone-rewards. Every 5 levels or so give something bigger than stats: a new ability, slot or area, marked on the XP bar ahead of time. Charmander evolves at level 16 and again at 36.
  8. Measure it. Simulate two hours of play and print minutes per level (xpToNext(L) / xpPerMinute(L)), time to the first level-up, the longest gap between rewards, and how long a player one level behind takes to catch up. With the tricks on: first level-up under 2 minutes, no reward gap over about 15 minutes.

Save it as .claude/skills/xp-curve/SKILL.md in your project. Or connect your agent and type /aigamedev: it loads this skill with its reference files and the results from this post.