"No reason to play again": add replay value with star ratings, par times and three more mastery goals
Five tricks that add replay value side by side: a star rating, a par time, a saved personal best, the gap to the next target and a ghost of your best run.

What we asked“Make a web page that demonstrates the five mastery tricks that give players a reason to play a level again 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: star-rating, par-time, personal-best, next-target, ghost-run. Use one tiny original race-to-the-flag level for all five, where the left side ends on a plain "Level complete" with nothing to beat. 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 mastery-goals skill
- Downloaded Kenney's CC0 Pixel Platformer tiles, a Kenney font and five sounds from the Digital Audio pack
- Wrote the game core, then tuned the scripted runs with a quick Node simulation before drawing anything
- Made the text larger, because it was too small at blog width, and rebuilt the HUD and end screen to fit
- Fixed a star line that overflowed, then checked the phone layout
- Tested play mode with real key presses and the ?trick=…&solo links, and removed a heavy focus ring
A level that ends on a plain “Level complete” gives players nothing to come back for. They finished, and that’s it. Players replay when they can see that they could do better, and by how much. Angry Birds rates every stage out of three stars, and as Wired’s Jonathan Liu put it, “going for the maximum number of stars certainly adds a lot of replay value” (Wikipedia).
All five demos use the same tiny level: the runner moves right on its own, past a crate, a spike pit and a two-block brick wall, to a flag. Hitting an obstacle stops you, so your time depends on how cleanly you jump. A clean run takes 3.11 s. The demo run hits the wall once and finishes in 3.70 s, on both sides. The left ends on “Level complete”; the right adds one trick. Play it yourself lets you jump with a tap, a click, Space or ↑ (hold for a higher jump), and your input drives both sides at once. Your best time and your ghost are saved in your browser, so the last three tricks use your real runs.
1. Star rating
Give 1 to 3 stars: one for finishing, two for a solid run, three for a near-best one. Use one or two measures, set the thresholds from your own play, and show what the missing star needs. In our demo the run gets 2 of 3 stars, and the empty star tells you the bar: “3 stars: under 3.30 s · this run: 3.70 s”. The left side finished the same run and got no number at all.
2. Par time
Show a designer’s target time before the level and next to the player’s result after it. Doom shows par on the intermission screen next to your time, which “allows the player to gauge their skill”; John Romero set the original par times from his fastest run, rounded, plus 30 seconds (Doom Wiki). In our demo, par is 3.50 s, shown before the start and beside the clock, which turns red once you’re over. The run ends “+0.20 s over par”: close enough to feel beatable.
3. Personal best
Save the best result for each level and show it: on the level select, during the run and on the end screen. When it’s beaten, say by how much and keep the old value on screen for a moment, so the player sees the step they made. Mario Kart’s Time Trials save ghost data so players can race “against their own best times” (Super Mario Wiki). In our demo, “Best 4.28” shows during the run, and at the end: “New best! −0.58 s”, with 4.28 struck through as it fades.
4. Next target
Always show one goal just above the player’s current best (the next star, or par) and the gap to it. A specific, close goal pulls harder than “do your best”. In Locke and Latham’s goal-setting research, “difficult specific goals lead to significantly higher performance than easy goals” and than “do your best” goals (Wikipedia). In our demo, the right side shows “Goal: under 3.30” during the run and ends with “0.40 s to your next goal” and a bar showing the gap.
5. Ghost run
Play back the player’s best run as a see-through copy while they play, so they can see where they lose time. In Mario Kart a ghost is “the recording of a player’s driving performance”, and staff ghosts, recorded by Nintendo staff, give a baseline time to beat (Super Mario Wiki). In our demo the ghost is the 3.11 s clean run. It pulls ahead at the brick wall, and the end screen points there: “−0.59 s here”. Now you know which jump to practise. When you play, the ghost starts as that clean run, labelled “DEV”, until you set a best of your own.
Keep the goals reachable
A goal nobody can reach is worse than no goal. Rules for tuning:
- Three stars must be reachable on a clean run. Set the thresholds and par from your own runs, then check that you, or a bot, can hit them. In our demo, three stars (under 3.30 s) and par (3.50 s) both come from the 3.11 s clean run.
- Pick one or two measures, like time or moves taken. Five scores at once and the player can’t tell what to improve.
- Keep the next target close. “0.40 s to go” invites one more try; “12 s to go” says this isn’t for you. And while players are still learning the basics, a learning goal can work better than a hard number; the goal-setting research notes this for complex tasks.
- Count replays. Let testers play the same few levels with the tricks off and on, and stop whenever they like. Voluntary replays, and replays that beat the personal best, should both go up.
Mastery goals reward getting better at one level. For rewards that grow across the whole game, see XP curve formulas.
Add it to your game
- Copy the skill at the end of this page into your project.
- Ask your agent: “There’s no reason to replay my levels. Add mastery goals.”
- Play it, then tune in plain words: “Three stars is too hard on level 4.”
Art and sound in the demos: Pixel Platformer, Kenney Future and Digital Audio 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 give players a reason to replay. Every trick sits behind its own switch, and the last step makes it count voluntary replays.
- Find where a level or run ends and what can be measured there: time, moves, damage taken, score.
- Put every trick behind one named switch in a single settings object, all on by default, so each can be tested on its own.
- star-rating. Give 1 to 3 stars: one for finishing, two for a solid run, three for a near-best one. Pick one or two measures, set thresholds from your own play, and show which star was missed and why ("3 stars: under 40 s").
- par-time. Show a designer's target time or move count before and after the level, next to the player's result. Doom shows par beside your time after each level; John Romero set it from his fastest run, rounded, plus 30 seconds.
- personal-best. Save the best result per level and show it on the level select, the pause menu and the end screen. When it is beaten, mark it ("New best! -2.4 s") and keep the old value visible for a moment.
- next-target. Always show one goal just above the current best: the next star or the par, with the gap ("1.8 s to 3 stars"). Specific, hard goals beat "do your best" (Locke and Latham's goal-setting research).
- ghost-run. Replay the player's best run as a see-through copy while they play, so they can see where they lose time. Mario Kart's Time Trials let you race your own ghost and Nintendo staff ghosts.
- Measure it. Have testers play the same 3 levels with tricks on and off and let them stop when they like. Count voluntary replays per level and how many replays beat the personal best. Both should rise with tricks on. Also check that the three-star threshold is reachable: you or a bot should hit it on a clean run.
Save it as .claude/skills/mastery-goals/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.

