We deleted the achievement badges bad play would have earned
Achievement badge thresholds are easy to guess and hard to defend, so we did not guess: I ran a hundred simulated rounds of Pebble Merge to work out which ones were worth shipping, and the first thing the run told me was that the longest merge chains in the game belong to the worst player in it. Not the best. The worst.
The layer above the score
The score is the game. When a round ends the number is the answer, and it is a decent one, and what it does not do is survive: two rounds do not add up to anything, a good night is invisible tomorrow, and nothing you did in March is still true in April. What we wanted was a thin layer above individual rounds that holds on to things instead of resetting every time. Three pieces: a gem album, a streak that counts the days you showed up, where a missed day resets the number and costs you nothing you have already earned, and ten achievement badges, each with a test.
I should be honest about the motive. It was not noble. A streak is a reason to open the game tomorrow that does not require us to send a notification. The badges are the part I care about more, because they are the only place in the game where we get to say what good play looks like, and writing them forced us to find out whether we knew. On chain length we did not.
How we set the badge thresholds
The direct answer is: run bots at several skill levels against the real game rules and read each candidate number as a clear rate. The right threshold clears often for an expert and rarely for a beginner. If it clears more often for the worse player, it is measuring neglect, and that is what the numbers said about chain length.
Guessing thresholds is how you end up with a badge everybody earns in the first hour and nobody remembers. The probe runs bots against the real Matter.js world and the real merge rules, the same split that lets us play thousands of games with no screen at all, because a simplified model of the board would have smuggled in our own assumptions, and our assumptions were the thing under test.
One hundred rounds. Five skill levels. Twenty seeds each.
Skill is not a multiplier. It is the same policy with more aim error and more lapses of attention, which is closer to how a beginner plays than a bot that is worse at arithmetic. The levels are called expert, seasoned, mid, rookie and flailing. Then I read every candidate threshold as a clear rate, taking expert as a good player and rookie as somebody on their first evening.
The number that came back inverted
Here is the one that did the damage. A chain of eight or more merges clears in 35% of expert rounds, and in 90% of flailing ones. Median chain length runs the same way: six for expert, ten for flailing. Push the threshold to twelve and expert rounds clear 0% of the time, while flailing rounds clear 40%.
Everything we had drafted around chain length would have paid the player who let the board get away from them.
It makes sense once you sit with it. I did not see it coming, which is the part I am least proud of, because the explanation is not subtle. A long chain means the board is crowded with things that want to merge, and a board gets crowded when you drop without looking, while a player who is on top of it merges as they go, so their chains stay short, because the neighbours that would have fed a cascade have already been consumed. The counter was measuring neglect. We were about to put a name on that, hand it to the wrong person, and ring a bell when we did. We had already asked this question of the cascade bonus, where the answer was that a big multiplier rewards luck.
The test suite pins it: a round whose only strong number is a chain of 25, with a score of zero and no drops recorded, earns exactly one badge, the one for merging two pebbles. Nothing else.
The gem nobody reached
The tier ladder runs Sand, Clay, Moss, Jade, Celestite, Sapphire, Amethyst, Garnet, Topaz, Aquamarine, Sunstone. Only the first five are ever dropped, and a stone at tier n needs two at tier n-1.
Sunstone is tier ten. Across a hundred rounds at five skill levels, nobody reached it, and annihilations did not happen either. So there is no Sunstone badge and no annihilation badge: a badge nobody can earn is worse than no badge, because it tells players the game has a top that it does not have.
The two rungs below it did survive. Reaching Topaz clears 100% of expert rounds and 60% of rookie ones; reaching Aquamarine clears 45% of expert rounds and 5% of rookie ones. That is the shape I wanted: one badge most people get, one that separates people.
What survived, and the one I argue with myself about
Ten badges shipped. First merge, at 100% for everybody. Topaz and Aquamarine. Two score badges: 2,000 in one round clears 100% of expert rounds and 60% of rookie rounds, and 3,000 in one round clears 70% of expert rounds against 5% of rookie ones. Two survival badges: 200 drops clears 95% of expert rounds and 75% of rookie ones, while 300 drops clears 45% of expert rounds and none of the rookie ones. Posting to the daily board. Three days running. Seven days running.
The one I go back and forth on is the 300-drop badge. I genuinely do not know how to feel about that. Zero is a wall rather than a difficulty curve, and a badge a first-timer cannot imagine reaching is either an ambition or a taunt depending on how it is presented. I kept it. I am still not certain that was right. What decided me is that the run to 300 is legible: you can watch the counter climb, and you know what you did wrong at the moment it stops.
The percentages in the source comments come from an earlier 24-round probe, and my 20-per-skill run reproduced them closely.
Zen, and the day that is not a day
Zen mode has no game over. No round to judge, so nothing to grant: no badges, no streak days. The album still records what you made there. The test for it is the one I would show first: a zen round with 2,000 drops and a Sunstone on the board earns zero badges, records played=0 and rounds=0, and adds ten entries to the album. I like that asymmetry more than I can justify.
The day string behind the streak is derived from UTC, and so is the seed behind the daily board, which is not the conclusion we reached in the post about seeding a daily board. The streak has to use the same calendar, or the two counters on the same screen will disagree, and a player who watches the board flip while the streak does not will assume the game is broken. We have argued elsewhere on this site that a daily reset keyed to local dates is kinder to the player, and that argument is not settled. What UTC does buy is boundary arithmetic you can test: 2026-03-01 back to 2026-02-28, 2024-03-01 back to 2024-02-29, 2026-01-01 back to 2025-12-31.
The day is also the idempotency key. Play twice on 2026-01-01 and you get played=1, rounds=2, and a best score that takes the higher of the two. Several rounds in one day cannot inflate a streak, because a streak inflated by grinding is a lie with a number on it. In Same Seed a counter was stored as a plain number and read through a helper that only understood objects, so it was written correctly forever and read back as zero forever.
The streak is also the part of this I have argued against in print. We have written that a calm game should not hand you an obligation, and I still believe it, so I want to be exact about what ships here. The counter counts. That is all it does. Nothing decays when you miss a day, no content sits behind it, and the longest streak you ever had stays on the record after the current one resets to one. You lose ground on those two badges. You keep every gem you have ever made, and the best streak you ever had. The moment it starts costing you something it becomes a leash, and I would have to take the whole thing out again. That boundary is the one we drew in Why we build cozy games.
What I do not trust
The score distributions overlap badly. A flailing round at its ninetieth percentile scores 3,127, and an expert round at its tenth percentile scores 2,745, so the worse player's good day beats the better player's bad one. One round is a noisy sample of either. Twenty seeds per skill is a small sample on top of that. And the bots are not people. Skill here is aim error plus lapses of attention, which models inattention rather than learning.
The score is also recomputed from the stored merge log, so any change to the maths silently re-values every saved log. A ruleset constant makes that failure loud.
So the thresholds are pinned by 51 assertions. The first thing I intend to do with real player data is throw these numbers out and re-derive them.