feat(games): the arcade goes from six games to twenty-two - #366
Merged
Conversation
`/games asteroids` and `/games blackjack` (also `21`), sharing the frame, the key decoder and the driver every other game in the cabinet already uses. Asteroids is the real-time one. The 1979 cabinet did not have to care that a terminal cell is twice as tall as it is wide; everything here measures distance in columns and counts a row as two, which is the only reason the rocks come out round and a collision happens where the screen showed it. Rocks break into two of the next size down, small ones pay most, the screen has no edges, and the ship blinks while it cannot be hit. Blackjack deals before the frame lands — no bet prompt, no options screen. Hit, stand, double and split, dealer stands on all 17s, blackjack pays 3:2, and a split 21 is twenty-one rather than a natural, which is the rule most home versions get wrong. Between hands the arrows are the chips; the stack is 100 and the game ends when it is gone. Both are pure the way the rest of the arcade is, so test/games.test.mjs plays them: it wrecks a ship, splits rocks down to nothing, walks a stack to broke and proves the box does not change width between hands. Fixes two things the letter games had been quietly losing to the shared decoder. `h j k l` became arrows for every game, and `r` was always a restart — so hangman could not be told the letters in `refactor`, and `h` could never mean hit. Games that read letters now opt out with `vim: false` and `restartable: false`; arrows are untouched, so blackjack still bets with them. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
ThreatCrush Security Scan95 finding(s) HIGH/CRITICAL: 5 | MEDIUM: 39 | LOW: 51
…and 45 more. Full results in the Security tab. Snippets are redacted; ThreatCrush never prints matched credential material. |
This was referenced Aug 11, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Sixteen new games for
/games, all on the same frame, key decoder and driver the original six already used. Every one of them is pure — create a state, hand it a key, hand it a tick, ask it for rows — sotest/games.test.mjsplays them all without a TTY anywhere near it.invaderscentipedeasteroidsbreakoutpongtankdigdugfroggerkongpitfallchoplifterspyhunteroutrunexcitebikestagediveblackjackEvery game has to be winnable and losable, and both are tested
The pattern throughout: a bot that plays properly has to get somewhere, and a bot that doesn't has to die. That is what caught the real bugs.
Also: two bugs the letter games were losing to the shared decoder
h j k lwere mapped to arrows for every game andrwas always a restart, so hangman could not be told the letters inrefactorandhcould never mean hit. Games that read letters opt out withvim: falseandrestartable: false; arrows are untouched, so blackjack still bets with them.Not built
Donkey Kong's sloped girders and Pole Position's perspective road are the two things a terminal row cannot honestly draw. Kong is here with flat girders — the slope's job is kept, since each girder has a direction and the chute sits at its far end — and Pole Position's road is here as OutRun, which is the same renderer with a clock worth playing against. A second copy of it with a lap counter would have been the same game twice.
189 tests in
test/games.test.mjs; full suite 1546 pass, 0 fail. Played in a real pty as well as in the harness.🤖 Generated with Claude Code