From a4c09c2d38d1f3bc1d3ad4bdb0234bdea7c37e73 Mon Sep 17 00:00:00 2001 From: historia <[not public]> Date: Wed, 30 Sep 2026 16:16:17 -0400 Subject: feat: additional craps variants added, standardizard casino command hints --- building_guide/craps.md | 100 ------------------------------------------------ building_guide/rooms.md | 3 +- 2 files changed, 2 insertions(+), 101 deletions(-) delete mode 100644 building_guide/craps.md (limited to 'building_guide') diff --git a/building_guide/craps.md b/building_guide/craps.md deleted file mode 100644 index 92a4a7f..0000000 --- a/building_guide/craps.md +++ /dev/null @@ -1,100 +0,0 @@ -# Bank craps - -The playable bank-craps table is in room 6185, west of single-zero roulette. -`play craps`, `watch craps`, `table`, `table rules`, and `help craps` use the -existing casino interfaces. `roll`, `autoroll` and `unbet ` are table actions; -`down` remains the movement command. - -```yaml -casino_tables: - - id: bank_craps - game: craps - max_players: 12 - min_bet: 1 - max_bet: 10000 - craps: - variant: bank - odds: 0 - field_12: 3 -``` - -`odds: 0` (default) means 3x on 4/10, 4x on 5/9, and 5x on 6/8. -Don't-side odds permit 6x the underlying wager **laid**, producing the same -3/4/5x maximum win. A positive integer selects uniform Nx **stake** limits -on both sides; supported values are 1 through 1,000,000. Odds are free of -commission. `field_12` is 2 (default) or 3. Field 2 always pays 2:1. -Only omitted/`bank` variants are accepted; unavailable variants fail validation. -Shared min/max limits apply to each individual wager, including odds. - -## Engine policy - -- Pass, don't pass (bar 12), come, don't come, true odds; place, buy, lay; - hardways; field; individual propositions, horn, and unordered hop bets. -- Multiple wagers have independent durable stake handles. Wins return the - stake and remove the wager; no automatic renewal, pressing or parlaying. -- Place/buy/hardways and come odds are off on come-out. Established come - contracts still work. Lay bets and don't-side odds always work. -- Exact payout units are required. Buy commission is 5% of the stake; lay - commission is 5% of profit. Commission is rounded up and charged only on - wins. No commission is charged for removing a wager. -- Fire pays 24/249/999:1 on 4/5/6 distinct made points, settled at seven-out. - Repeated made points do not advance it. Come-out sevens do not end Fire. -- Small (2–6) and Tall (8–12) pay 34:1; All pays 175:1. Each pays immediately - when complete. **Any** seven loses unresolved ATS and resets its tracker. - All bonus wagers must be made before the first roll of a shooter hand; - they cannot be removed or added midway, even following a come-out seven. -- Solo play has no betting delay or forced rolls. In multiplayer, every - round gives players 10 seconds before the shooter may roll, with a public - last call at 3 seconds remaining. **Bets and removals remain open until - the actual roll.** Once eligible, the shooter has 60 seconds before the - dealer rolls for them. Only connected, non-sitting-out seats count. - Without live bets the table pauses. A second active player joining gives - the table a fresh 10-second window; additional wagers never extend it. -- `autoroll` opts the player into a roll every 3 seconds while it is their - turn and they still have live bets. It respects multiplayer's 10-second - minimum and stops automatically once their bets finish. `stop` cancels - autoroll atomically and keeps them seated with their bets unchanged; a - second stop in manual mode uses the normal leave behavior. -- These durations use the configured engine cadence through - `Manager.TickElapsed`; there are no independent timers or goroutines. - `betting_ticks` is not used by craps (other games retain their rules). -- New arrivals enter at the tail of the queue. A made point retains the - shooter; seven-out rotates them to the tail. Sit-outs are skipped. - If a shooter departs, the next player completes the existing table hand; - points and bonus progress are not reset to grant free options. -- Pass/come and bonus bets are contracts. Other bets and odds may be removed - with `unbet` (or all at once with `unbet all`) before the dice roll. - In manual mode `stop`/`sitout` wait for the player's - last live bet, not merely the next roll. -- Disconnect forfeits live bets; shutdown/room eviction refunds outstanding - stakes. Failed settlements are reported as pending recovery, never as paid. - Like other casino games, table state is not persisted across restart: - the pending-stake wallet ledger provides recovery. - -## Implementation and verification - -`internal/casino/craps_rules.go` contains configuration, payout rules and the -pure per-bet outcome function. `craps.go` handles phases, shooter order, -bonus tracking, wallets and detached snapshots. Registration uses the existing -`tableGame`/`tableCore` seam. `internal/game/render_craps.go` draws a dark-green boxed half-table, ON/OFF -puck, and filled Fire/ATS number trackers. Pip dice honor `card_style` dark/light, -ASCII/Unicode, and terminal color preferences. Command reminders follow the art. -Each player gets a numbered-target wager summary after bets and rolls, and one -consolidated, colored settlement (not a balance repeated after every wager). - -Tests cover all 36 line/come outcomes, payout examples, configurable odds, -come-out working rules, bonus sequences, shooter rotation, deadlines, removal, -queued departures, disconnect/shutdown, payout failure recovery, command target -parsing, and rendering. Run `go test ./...` and -`go test -race ./internal/casino ./internal/game ./internal/admin ./internal/validate`. - -## Follow-on variants (not implemented) - -Simplified, High Point, Crapless, New York, Die Rich and Diceless Craps require -separate, explicit rules and acceptance tests; names alone are not adequate -specifications because regional versions differ. Do not map them onto bank -craps silently. Before adding each, pin its come-out/point rules, supported -bets, payouts, commissions, odds limits and bonus eligibility. Diceless also -needs an explicit card model (replacement vs. finite shoe, card mapping, -shuffle policy, and card visuals). Preserve the shared wallet and queue -lifecycle while isolating these outcome and random-source differences. diff --git a/building_guide/rooms.md b/building_guide/rooms.md index 8d4e8de..2ed6195 100644 --- a/building_guide/rooms.md +++ b/building_guide/rooms.md @@ -449,7 +449,8 @@ casino configurations. Raw file editing is not a validated save endpoint. - IDs must be nonempty, have no surrounding whitespace, and be unique across the room's tables and machines. - Supported table games are `blackjack`, `baccarat`, `roulette`, and `craps` - (see [Bank craps](craps.md) for rules and configuration); slots are machines only + (craps rules and house editions are listed in-game via `help craps` and + `table rules`); slots are machines only and must be declared under `casino_machines`. A `slots` entry under `casino_tables` is rejected. Machines use `slots` with the optional variant `huff_and_even_more_puff`. A machine variant is -- cgit v1.2.3