
Last time I wrote about giving Gapshot's combo a voice — a rising scale, named milestones, a shield that forgives one mistake. It worked. People chase Supernova now.
But the combo has a blind spot I couldn't fix by making it louder, and it took me a while to say it plainly: the combo doesn't measure skill. It measures survival.
Every ring you thread cleanly bumps it, regardless of how you threaded it. Scrape through the very edge of the gap with a frame to spare and the combo treats that exactly like a thread straight through the middle. At level 1, where the rings are wide and slow, keeping a chain alive is close to free. The number climbs, and it isn't really telling you anything you earned.
That's fine for a while. Then you get good, surviving stops being the challenge, and the game runs out of things to say to you.
A second chain, not a longer one
The obvious move is to make the combo harder to hold. I didn't want that — the tap difficulty in Gapshot is well tuned and I'd rather not touch it, and punishing people for surviving is a strange thing to do in a game about surviving.
So PERFECT is a second chain, tracked completely apart from the combo. Thread anywhere through the gap and your combo continues as normal. Thread close to dead centre and you also extend a perfect streak, which pays a bonus on top. Any imprecise thread resets it — and only it. Your combo doesn't care.
That separation is the whole design. The combo is easy at level 1 speeds and hard at level 30. A perfect chain is hard at any speed, because centre is centre no matter how wide the gap is. It's a skill ceiling that sits above the difficulty curve rather than on it.
The flat bonus that punished the players it was built for
The first version paid a flat +1 for every perfect thread. That sounds neutral. It is not, and it took me embarrassingly long to see why.
The combo is a multiplier, and it grows all run. So a flat point is worth wildly different amounts depending on when you earn it:
- At combo 3, +1 is about +33% of a ring's value
- At combo 15, +1 is about +6.7%
Read that again, because it's backwards. Precision was worth the most early, when the rings are wide and slow and being accurate is nearly free. It was worth the least deep into a run, when the gaps are tight and fast and a perfect thread is genuinely hard. I had built a reward that quietly shrank exactly as the thing it rewarded got more difficult.
The fix is to let the perfect chain compound the way the combo does. The bonus now scales with the streak:
| Perfect streak | Bonus |
|---|---|
| 1–3 | +1 |
| 4–7 | +2 |
| 8–11 | +3 |
| 12+ | +4 |
Capped at +4, so it stays a bonus rather than becoming the whole score. A precision run now grows in value as it goes, which is the only reason for it to exist alongside a multiplier that already does.
I was grading the ring, not the player
The second mistake was worse, and it's the one I'd tell other people to check for in their own games.
The perfect window was originally defined as a fraction of the gap — 0.35 of the gap's usable half-angle. It seemed obviously right: a bigger gap gets a proportionally bigger centre.
Here's what that actually produced. On a wide level-1 ring the real tolerance was about 26.8 points. On a tight late-game breathing gap it was about 11 points. A 2.4× spread, and the generous end landed exactly where the median player spends their time.
Early rings are the widest and the slowest. So PERFECT was close to automatic through the opening of every run, the streak bonus compounded through the easiest stretch of the game, and by the time you reached rings where precision meant something, the window had quietly shrunk to less than half its starting size. The mechanic was hardest precisely where it paid least — the same inversion as the flat bonus, arrived at from a different direction.
The mistake underneath both: I was measuring the ring instead of measuring the player.
Your error doesn't come from the gap. It comes from your thumb. A timing jitter of Δt produces a vertical error of roughly |vy|·Δt — a distance in points, determined by how fast the comet is moving, with nothing whatsoever to do with how wide that particular ring's gap happens to be. Grading against gap width measures the obstacle. Grading against distance from centre measures the input the player actually controls.
So the window is an absolute margin now: 16 points either side of dead centre, just over one comet radius, converted to an angle at the contact distance. In timing terms that's roughly 35–50ms depending on contact velocity — tight, but honestly reachable.
One guard rail: it's capped at half the gap's usable half-angle, so a very narrow late-game gap can't end up being entirely perfect. Without the cap, the tightest rings in the game would hand out perfects for any successful thread at all, which would be the original bug wearing a different hat.
Loud enough to find
None of this matters if nobody notices it.
The thing I've learned watching how people actually play Gapshot is that a mechanic players don't discover in the first minute may as well not exist. The combo taught me that — it was the most important system in the game and also the quietest, and it stayed invisible until I gave it a sound.
So PERFECT is loud from the first one. Every perfect thread fires its own callout, its own sound, and once the chain reaches two it stops saying PERFECT and starts saying PERFECT ×2, PERFECT ×3, climbing with you. You don't have to be told that precision chains. The game tells you the second time it happens.
That was deliberate. A tutorial explaining the perfect window would be read by almost nobody. A callout that changes shape in front of you as you get better is read by everybody, because it happens while you're already looking at the thing it's describing.
What I took away
Two bugs, one root cause. Both times I had built the reward around the obstacle — the gap's width, the ring's difficulty — rather than around what the player was doing. And both times the result was the same inversion: the mechanic paid best where it was easiest and worst where it was hard.
The fix in both cases was to find the thing the player actually controls and measure that instead. Distance from centre, not fraction of the gap. Length of your own chain, not a flat point.
Gapshot's combo will still tell you that you survived. PERFECT is there for the runs where you want it on record that you meant it.
It's free on the App Store and Google Play. See how long you can hold a perfect chain — I'd genuinely like to know whether the window feels fair or fussy.
Gapshot is free on the App Store and Google Play.