Split The code is public; the app answers only to the crew.
The flashbang: the grenade that opens a site, and the blindness rule behind it #159
Pushed. `bun run check` is green (708 tests, types clean), the app boots and `/` answers.
stopped closed without shipping deploy 7428468
commented
Closed in the owner's sweep of 2026-10-12: a week old and in conflict with main now; the branch stays if anyone wants it back.
Sign in to join this conversation.
Pushed.
bun run checkis green (708 tests, types clean), the app boots and/answers.A flashbang, $200 in the buy menu, in the same pocket as the HE and on the same key.
src/client/flash.tsis the whole rule and knows nothing about the game: it takes the flash's position, an eye, a view direction and the answer of one trace, and returns seconds — 3.4 at most, square in the face inside 300 units, falling with distance to nothing at 1400 and with how far off your view it went off (a fraction behind you, zero through a wall), with anything under 0.3 s rounded away so a flicker is never a white screen. A player carries one number for it,blindUntil;hud.tsturns it into white (0.9 alpha at the very worst, decaying linearly, drawn under the scoreboard and the damage report so information you asked for is not taken away) andbots.tsturns it into hands.flash.test.tscovers the three cases and the boundary at the edge of the view, where one degree costs a hundredth of a second rather than everything.grenades.tsgrew a secondkindand one constant — the arc, the gravity, the bounce and the fuse mechanism are untouched; onlyFUSE[kind](1.4 s for a flash) and whatworld.tsdoes at detonation differ.world.tsgained five small things: the field, its reset instartRound, the"flash"sound name,kindOfon the throw, and aflashbang()besidedetonate(). Friendly fire applies — your own flash blinds your own side and you with them. The bot handicap went in where a bot already reads its skill: every reader ofaimErrorandreactionnow goes throughhands(), which adds up to 30° of aim error and 0.8 s of reaction in proportion to how blind the bot is, so there is no new branch in the shooting code andobserve.ts's 32 numbers are untouched.Worth looking at in the preview: buy a flashbang in the freeze time, press <kbd>4</kbd> twice to cycle to it, and throw one at your own feet to see the white and hear the crack panned where it went off; then throw one into a site and walk in. A CT's buy list is ten rows long now, so the tenth row answers to <kbd>0</kbd> — without that the defuse kit would have lost its digit.
I did not touch the HE's numbers, did not give the bots a reason to buy or throw either grenade (#58's shape), and did not go near smoke (#37). Measured: a detonation is one trace per living player in range — ten at the worst — which costs 3 µs on top of a 68 µs tick, once, on the tick the fuse ends.
🤖 Generated with Claude Code
Closes #110