Dawnsweeper

Blog

A press you hesitate on should never reveal a cell

On a phone, Dawnsweeper has two gestures on a covered cell. A tap reveals it. A long-press flags it. Up to version 1.1.1 the line between them was a single threshold, 450 milliseconds. Anything released before 450 ms counted as a tap.

That sounds reasonable until you think about why a player holds a press. You put your thumb on a cell meaning to flag it, and you’re not quite sure it’s a mine. You hold, you hesitate, you lift at 400 ms. The game read that as a tap and revealed the cell. If it was a mine, the ground burst: the crater, the 9 by 9 around it re-covered, the flags in it torn away, and your streak gone.

The bug report called it “absolutely ridiculous and backwards”, and it was. A hesitant press is the one moment the player is telling you they aren’t sure. It was the one moment the game did the most dangerous thing it can do. The same report said the long-press itself was “unreasonably long”.

Three windows instead of one line

We replaced the single threshold with three windows, measured in real time from the moment the finger lands:

  • Up to 220 ms is a tap. A clear, quick tap is the only thing that reveals a cell, chords a green number, flags in Flag mode, or blesses a settler.
  • From 220 to 380 ms does nothing at all. The ring that had started to fill disappears and the board is untouched. This is the hesitation window. If you aren’t sure, lifting your finger costs you nothing.
  • At 380 ms the long-press fires, while your finger is still down. The flag lands at once, a ring bursts out of the cell in gold, and the phone gives a short buzz (14 ms, and only if Vibration is on in Settings). Lifting after that does nothing more.

380 ms is shorter than the old 450, and it fires under the finger instead of waiting. You feel the buzz and see the ring, and you know you can let go. From 120 ms a ring starts filling above your thumb with a flag in it and the held cell gets a frame, so you can see a long-press coming before it lands.

Moving your finger more than 10 dp cancels the press, so a drag never flags and never reveals. Drags pan the board, with momentum: a flick coasts and slows. Touching a coasting board only stops it. Pinch zooms around the point between your fingers. None of those can reveal a cell, and neither can a tap that ends a pan, a pinch or a long-press.

How we checked it

Every press now writes a line to the game’s log. We ran presses of fixed lengths on the same covered cell of the home square on a phone-sized screen and read what came back. A short press revealed the cell. A 250 ms press logged:

held too long for a tap and not long enough for a long-press: no action

and the cell stayed covered. A 600 ms press logged the long-press firing at 385 ms with the finger still down, the flag’s 14 ms buzz, and then, when the finger lifted at about 700 ms, “after the long-press, no action”. The cell ended as a flag.

The same timings apply to settlers. A long-press on a settler standing on open ground opens their card at 380 ms. Wherever the board would flag, the flag wins, so you never open a card by accident when you meant to flag the cell under someone’s feet.

A phone screen showing the home square: a cleared 15 by 15 field of grass ringed by numbers, with a 5 in each corner, covered tiles all around, and one flag just planted on the top edge.
A 600 ms press in the 1.1.2 test: the flag lands at 380 ms, and lifting the finger later does nothing more.

Why it matters more here than in Minesweeper

In classic Minesweeper a misread tap costs you one game, and a game is a few minutes. In Dawnsweeper a mine hit costs your streak, which can run into the thousands. It also bursts the 9 by 9 around it back to covered ground, which may be ground your settlers were living on. A touch control that reveals by accident is a much bigger fault here than in a game that ends.

Fixing it meant giving up a little speed. A tap has to be a real tap now, a fifth of a second or less. In exchange, nothing reveals unless you meant it to.