import InfoBox from '../components/InfoBox.astro';
import PullQuote from '../components/PullQuote.astro';

Daily mode gained a visible countdown today: thirty seconds per word, with a bonus for whatever time is left when the word lands, and a shorter overall game meant to make each round feel tighter. The interesting part of the day was not the timer itself, it was how many ways the game had of quietly breaking its own rule.

## A clock that did not know it was being read

The first break showed up before a single word had been typed. The how-to-play tutorial auto-opens on a new player's first visit, and the daily timer had no idea the tutorial was covering the board: it kept counting down behind the dialog, so a player reading the rules for the first time could come back to a game already over at zero points. The very first thing a new player saw was a prompt to submit a score of zero. The fix pauses the game reactively whenever the tutorial is visible, and resumes it only if the tutorial itself caused the pause, so a player who had paused deliberately for some other reason is not resumed by accident.

<PullQuote>The very first thing a new player saw was a prompt to submit a score of zero.</PullQuote>

## The timer that forgot to be strict

The second break was subtler: any rejected submission, a word failing validation, a preflight check, even a dropped network request, reset the thirty-second window back to full, so a player who kept typing invalid words never actually faced a countdown at all. The fix captures the remaining seconds before a rejection and resumes from there instead of restarting, with the same captured value carried through a pause so a modal cannot quietly buy back time either. Initials picked up during an earlier submission are now cached for the rest of the session too, so the score dialog stops asking for the same three letters twice.

## Randomizing what should surprise, fixing what should stay put

The board itself flip-flopped within the same day: shrunk from 15 by 10 to 12 by 7 in the morning's scoring pass, then reverted back to 15 by 10 by the afternoon once the smaller board made the new timer feel cramped rather than brisk. The apples got steadier instead of smaller: a queue of upcoming spawn positions is now generated once, alongside the day's word set, rather than picked fresh each time a fruit needs replacing.

<InfoBox title="Predictable apples, unpredictable bonus fruit">
  Regular apples stay derived from the day's own seed, the same determinism the daily challenge has
  relied on since [its quiet fix](/posts/premature-norwegian#the-quiet-fix-that-mattered-more-than-the-loud-ones)
  months ago. Combo and bonus fruit spawns now deliberately go the other way, drawn from ordinary
  non-deterministic randomness even on the daily challenge, specifically so a bonus fruit's position
  cannot be pre-computed from the same public seed that makes the rest of the board reproducible.
</InfoBox>

## Crashing does not erase what you already ate

A scoring gap closed out the day: a word that crashed the snake used to lose every point it had earned, including fruit it had genuinely already eaten earlier in the same word, so a risky word that grabbed an apple right before a wall lost that apple's points along with everything else. The fix voids only the word's own base score on a collision and keeps whatever fruit was eaten before the crash step, and the [opponent AI](/posts/duel-against-the-machine#a-first-cautious-opponent), scored by the same rule, still will not take the crash over a safe word even when the crash pays better on paper.

## Where this leaves things

By evening the day's tuning had touched the timer, the board, the apples, the fruit, and the AI's own arithmetic, seven pull requests deep, plus a merged end-of-game dialog and loading placeholders folded in along the way. None of it changed what the game is; all of it was about whether thirty seconds and a 15 by 10 board feel like the right amount of pressure, a question a single day of tuning can raise but not really settle.