From 4bbff323c4aa6e89915c2a14275383728663914b Mon Sep 17 00:00:00 2001 From: Brandon Cook Date: Tue, 30 Jun 2026 17:35:50 +1000 Subject: [PATCH] blackjack: label the P touch chip for its betting (pairs) use too MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Every game input already has a touch button: canonical arrows/Confirm drive betting (stake, backed seat, place) and the eight declared rune chips cover the turn actions, insurance, and the P/B side-bet keys — so the game is fully playable on the touch deck (kit check passes). The one gap was presentation: the P chip read "SPLIT" (its turn meaning) even though P also loops the Perfect Pairs side bet during betting, so a touch player had no clearly labelled pairs button. A rune carries one static label, so the shared chip now reads "SPLIT/PAIRS". Comments updated to document which inputs are canonical vs declared. Co-Authored-By: Claude Opus 4.8 --- games/bcook/blackjack/game.go | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/games/bcook/blackjack/game.go b/games/bcook/blackjack/game.go index 6de4df3..8412a46 100644 --- a/games/bcook/blackjack/game.go +++ b/games/bcook/blackjack/game.go @@ -42,20 +42,24 @@ func (Game) Meta() kit.GameMeta { Format: kit.Integer, }, - // Touch deck chips (kit v2.10.0): the turn actions and the insurance - // answers are all letter commands (CtxCommand), so every one needs a - // chip. Betting stays on the canonical Up/Down + Confirm. + // Touch deck chips (kit v2.10.0): every input beyond the canonical + // vocabulary (arrows/Confirm/Back, which the deck always provides) needs + // a chip so it is reachable on touch. The turn actions, the insurance + // answers, and the betting side-bet keys are all letter commands. Betting + // itself drives stake (Up/Down), the backed seat (Left/Right), and place + // (Confirm) off the canonical arrows; only P/B need declaring. Controls: []kit.ControlDecl{ kit.RuneControl('h', "HIT"), kit.RuneControl('s', "STAND"), kit.RuneControl('d', "DOUBLE"), - kit.RuneControl('p', "SPLIT"), + // P splits a pair on a turn AND loops the Perfect Pairs side bet + // during betting — one rune, so the chip carries both meanings. + kit.RuneControl('p', "SPLIT/PAIRS"), kit.RuneControl('r', "SURRENDER"), kit.RuneControl('y', "YES"), kit.RuneControl('n', "NO"), - // Betting: P loops the Perfect Pairs side bet and B loops the behind - // bet for the focused seat (Left/Right pick the seat, including other - // players to back). P doubles as SPLIT during a turn; B is betting-only. + // Betting only: B loops the behind bet on the focused seat (Left/Right + // pick the seat); P (above) loops that seat's Perfect Pairs. kit.RuneControl('b', "BEHIND"), }, }