diff options
| author | salmonik <salmonik@tuta.io> | 2026-10-28 23:13:24 +0100 |
|---|---|---|
| committer | salmonik <salmonik@tuta.io> | 2026-10-28 23:13:24 +0100 |
| commit | fc59ef77cda14d97d854dfcaa848307cfa512b69 (patch) | |
| tree | b0fc97390b96078e0a0538e76d7c76f7c04135f1 /docs/SLOTS.md | |
| parent | v0.4.0: add first-time TLS setup and server help (diff) | |
| download | zagan-bet-fc59ef77cda14d97d854dfcaa848307cfa512b69.tar.gz zagan-bet-fc59ef77cda14d97d854dfcaa848307cfa512b69.zip | |
v1.0.0: replace slots with 5x3 reels and five paylines
Diffstat (limited to '')
| -rw-r--r-- | docs/SLOTS.md | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/docs/SLOTS.md b/docs/SLOTS.md new file mode 100644 index 0000000..ccc3b60 --- /dev/null +++ b/docs/SLOTS.md | |||
| @@ -0,0 +1,74 @@ | |||
| 1 | # Slots: 5 reels x 3 rows | ||
| 2 | |||
| 3 | ## Grid | ||
| 4 | |||
| 5 | - 5 reels (columns) x 3 rows = 15 visible symbols. | ||
| 6 | - Six symbols, uniform: `C` cherry, `L` lemon, `O` orange, `G` grapes, | ||
| 7 | `D` diamond, `S` seven. | ||
| 8 | - The bet is the **total** bet, not a per-line bet. | ||
| 9 | - Five paylines: top, middle, bottom, V, inverted V. | ||
| 10 | - A line pays for 3, 4 or 5 matching symbols starting on reel 1 and reading | ||
| 11 | left to right. | ||
| 12 | |||
| 13 | ``` | ||
| 14 | line 1: top row across all five reels | ||
| 15 | line 2: middle row across all five reels | ||
| 16 | line 3: bottom row across all five reels | ||
| 17 | line 4: top, middle, bottom, middle, top | ||
| 18 | line 5: bottom, middle, top, middle, bottom | ||
| 19 | ``` | ||
| 20 | |||
| 21 | ## Paytable | ||
| 22 | |||
| 23 | Multipliers are applied to the total bet. | ||
| 24 | |||
| 25 | | Symbol | 3 of a kind | 4 of a kind | 5 of a kind | | ||
| 26 | | --- | ---: | ---: | ---: | | ||
| 27 | | C | 2x | 5x | 15x | | ||
| 28 | | L | 3x | 7x | 20x | | ||
| 29 | | O | 3x | 8x | 25x | | ||
| 30 | | G | 4x | 12x | 40x | | ||
| 31 | | D | 6x | 18x | 70x | | ||
| 32 | | S | 9x | 30x | 150x | | ||
| 33 | |||
| 34 | - Exact RTP: **425/432 = 0.983796...** (1.62% house edge). | ||
| 35 | - Maximum win: 5 lines x 150x = **750x total bet**. | ||
| 36 | - Chance of any win on a spin: about **13%**. | ||
| 37 | - The RTP is checked by `SlotsGame::theoretical_rtp()` and `tests/slots.rs`. | ||
| 38 | |||
| 39 | ## Wire format | ||
| 40 | |||
| 41 | `GAME_RESULT` keeps its existing fields and appends the winning lines: | ||
| 42 | |||
| 43 | ``` | ||
| 44 | GAME_RESULT <session> <winnings> <bet> <balance> <reels> <win_type> <win_lines> | ||
| 45 | ``` | ||
| 46 | |||
| 47 | - `reels`: 15 characters, **column-major**: reel 0 top/middle/bottom, then | ||
| 48 | reel 1, and so on. | ||
| 49 | - `win_type`: `none`, `win`, `big` (>= 10x total bet) or `mega` (>= 50x). | ||
| 50 | - `win_lines`: 1-based comma-separated line numbers, or `-` for no win. | ||
| 51 | - Older servers may still send a 3-character `reels` string; the client | ||
| 52 | degrades it to the first row. | ||
| 53 | |||
| 54 | The extra `win_lines` field is additive, but the 5x3 `reels` payload is a | ||
| 55 | breaking change for pre-5x3 clients. That is why the release is `1.0.0`. | ||
| 56 | |||
| 57 | ## Client board | ||
| 58 | |||
| 59 | The board is nine lines: | ||
| 60 | |||
| 61 | ``` | ||
| 62 | === SLOTS === | ||
| 63 | Bet: 10 PLN Lines: 5 Balance: 1000 PLN | ||
| 64 | [ C ] [ L ] [ O ] [ G ] [ D ] | ||
| 65 | [ S ] [ C ] [ L ] [ O ] [ G ] | ||
| 66 | [ D ] [ S ] [ C ] [ L ] [ O ] | ||
| 67 | |||
| 68 | Won 20 PLN | ||
| 69 | Winning lines: 1, 3 | ||
| 70 | [+/-] Bet [SPACE] Spin [Q] Quit | ||
| 71 | ``` | ||
| 72 | |||
| 73 | `win_lines` is already carried through the client state so the next animation | ||
| 74 | pass can highlight the winning rows without recomputing the payout. | ||
