From 49df948de25d28601469e9ca993f33530989ebd0 Mon Sep 17 00:00:00 2001 From: salmonik Date: Thu, 29 Oct 2026 22:55:49 +0100 Subject: v3.0.0: cursor-driven roulette felt with splits and corners; drop schema migrations; require 80x24 --- docs/GAMES.md | 43 ++++++++++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 11 deletions(-) (limited to 'docs/GAMES.md') diff --git a/docs/GAMES.md b/docs/GAMES.md index 2b8adf5..364cfef 100644 --- a/docs/GAMES.md +++ b/docs/GAMES.md @@ -79,19 +79,32 @@ Q forfeit an active hand (bet is lost), or leave when no hand is active ## Roulette - European wheel: 0-36, one green zero. -- Bets: red, black, even, odd, and straight numbers. -- Bets can be split across all of those; every winning bet is added together. -- Straight pays 35:1 (36x returned), outside bets pay 1:1 (2x returned). -- 0 loses all outside bets. RTP is 36/37 = 97.30%. -- Numbers are color-coded in the TUI: red numbers are red, 0 is green, and - black numbers stay at the default terminal color. Bet amounts and balances - are not colored. +- The felt is drawn in full and bet with a cursor. Over the numbers the cursor + sits on a *lattice point*, the way a chip sits between numbers on a real + felt: an inner point covers four numbers (corner), an edge point covers two + (split), and an outer corner is a straight. +- Bet types and returns (per unit staked, stake included): + + | Bet | Covers | Return | + | --- | --- | --- | + | Straight | one number | 36x | + | Split | two adjacent numbers | 18x | + | Corner | four numbers | 9x | + | Dozen | 1-12, 13-24, 25-36 | 3x | + | Column | 1,4,...,34 / 2,5,...,35 / 3,6,...,36 | 3x | + | Outside | 1-18, 19-36, EVEN, ODD, RED, BLACK | 2x | + +- 0 loses every outside bet, both dozens and every column. It pays a straight, + and split/corner bets containing 0 are not offered. +- Every chip is settled independently and added together. RTP is 36/37 = + 97.30% because every bet uses the same European odds. +- Bet amounts and balances are not colored in the TUI. Client controls inside roulette: ``` -R / B / E / O add the current chip to red/black/even/odd -digits + Enter add the current chip to that number +arrows move the cursor over the felt, including between numbers +ENTER place the current chip on the cursor C clear all bets + or = / - change the chip size SPACE spin @@ -125,7 +138,7 @@ plays ( {"reels":"CCCCLLCLODGSDGS","win_type":"win","win_lines":"1","win_cells":"0,3,6"} // roulette -{"number":"17","color":"black","bets":"{\"red\":10,\"black\":10,\"even\":10,\"odd\":10,\"numbers\":[{\"number\":17,\"amount\":5}]}"} +{"number":"17","color":"black","bets":"{\"chips\":[{\"target\":{\"bet\":\"outside\",\"kind\":\"red\"},\"amount\":10}]}"} // blackjack {"player":["10S","6H","5D"],"dealer":["9D","8C"],"player_total":21,"dealer_total":17,"bet":10,"result":"win","winnings":20} @@ -174,13 +187,21 @@ PLAY_START slots GAME_RESULT ``` -Roulette adds a compact bets payload and a roulette-specific result: +Roulette sends the chips and gets a roulette-specific result: ``` PLAY_START roulette ROULETTE_RESULT ``` +`bets-json` is `{"chips":[{"target":{...},"amount":N}]}`. A target is one of +`{"bet":"straight","number":17}`, `{"bet":"split","a":1,"b":2}`, +`{"bet":"corner","numbers":[1,2,4,5]}`, `{"bet":"dozen","index":1}`, +`{"bet":"column","index":0}` or +`{"bet":"outside","kind":"red"}` (`low`, `high`, `even`, `odd`, `red`, +`black`). The server rejects unknown, out-of-range or duplicate-number +targets, and requires the total to equal the sum of the chips. + Blackjack is a multi-step session: ``` -- cgit v1.2.3