
Gapshot started its life as a pure high-score game. You tap, you survive, you try to beat your last run. That's the whole loop, and for a long time I was happy with it.
But there was a quiet problem. The only goal was the score, so people would play for a few minutes and put it down. There was nothing pulling them back the next day, and honestly there was no reason there should be. A high score is a ceiling. Once you hit it, you're done.
This update is my attempt to fix that without betraying what the game is.
30 badges, and not all of them are about score
The easy version of a badge system is "score 100, score 500, score 1000." I didn't want that, because rewarding the same thing over and over gets boring fast. So I spread the 30 badges across a bunch of different motivations.
Some are score milestones, sure. Some reward big combos. Some are for collecting golden rings. But the ones I'm happiest with are the odd ones:
- Iron Lungs for surviving three full minutes in a single run
- Bounce Back for scoring 20 more points after you've already lost two of your three lives
- a clean-run badge for playing with zero hits
- and a daily streak badge for showing up three days, then seven days, in a row
That streak badge is doing more for retention than anything else, and it lines up with something I wrote about earlier: I don't want to manufacture engagement with timers and guilt. A streak you choose to keep is different from a life system that punishes you for leaving. One is a goal. The other is a leash.
The hard part wasn't the badges. It was making them feel instant.
I really didn't want badges to appear on some summary screen after you die. I wanted them to fire the moment you earn them, mid-run, while you're still playing and it actually means something.
That sounds trivial until you remember you're now checking unlock conditions inside the game loop, and that code has to be fast or the whole thing stutters.
So I split the work in two:
- A cheap live check that runs during play and only looks at things it can see right now — your score, combo, golden rings, whether you've been hit.
- A full check at the end of the run for everything that can only be known once it's over: how long you survived, lifetime counters, your daily streak.
The live check also bails out the instant you've already earned every in-game badge, so a veteran player who has them all pays almost nothing on every frame.
I lost a whole day on the scrolling
Thirty badges don't fit on a phone screen, so the badges view scrolls. A plain scroll worked, but it felt cheap and a little dead.
So I added the things you don't consciously notice but absolutely feel: momentum, so the list keeps gliding after you flick it, and a rubber-band spring-back when you drag past the top or bottom. It is a genuinely silly amount of effort for something nobody will ever mention. But you notice the absence of it immediately. That polish is a lot of the difference between "indie hobby project" and "this feels like a real app."
Badges are also shareable and they sync to your account in the cloud, so they're tied to you and not stranded in local storage on one device.
What I'd tell myself before I started
Achievements aren't decorative content you bolt on at the end. They're a retention feature, and what you choose to reward matters far more than the code that unlocks them.
The badges that reward showing up, and playing carefully, changed how people play far more than the flashy high-score ones did. That surprised me, and it shouldn't have.
If you want to see them, Gapshot is on the App Store. Go thread the gap, and maybe start a streak while you're at it.
Gapshot is free on the App Store for iPhone.
Download on the App Store