diff options
| author | salmonik <salmonik@tuta.io> | 2026-10-28 23:45:43 +0100 |
|---|---|---|
| committer | salmonik <salmonik@tuta.io> | 2026-10-28 23:45:43 +0100 |
| commit | 9951e2d5afbcabb4bd8016b6d160653c1ec5ed8e (patch) | |
| tree | e1179b0523356dfb5d43f3d6d4614203f6fa8dec /docs | |
| parent | v1.2.1: track wrapped board lines and split the paytable (diff) | |
| download | zagan-bet-9951e2d5afbcabb4bd8016b6d160653c1ec5ed8e.tar.gz zagan-bet-9951e2d5afbcabb4bd8016b6d160653c1ec5ed8e.zip | |
v1.3.0: simplify payouts to bet x symbol x shape
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/SLOTS.md | 92 | ||||
| -rw-r--r-- | docs/TESTING.md | 7 |
2 files changed, 70 insertions, 29 deletions
diff --git a/docs/SLOTS.md b/docs/SLOTS.md index b8c670b..1dbaba5 100644 --- a/docs/SLOTS.md +++ b/docs/SLOTS.md | |||
| @@ -20,19 +20,33 @@ line 5: bottom, middle, top, middle, bottom | |||
| 20 | 20 | ||
| 21 | ## Paytable | 21 | ## Paytable |
| 22 | 22 | ||
| 23 | Multipliers are applied to the total bet. | 23 | ``` |
| 24 | 24 | payout = total bet x symbol multiplier x shape multiplier | |
| 25 | | Symbol | 3 of a kind | 4 of a kind | 5 of a kind | | 25 | ``` |
| 26 | | --- | ---: | ---: | ---: | | 26 | |
| 27 | | C | 2x | 5x | 15x | | 27 | Symbol multipliers: |
| 28 | | L | 3x | 7x | 20x | | 28 | |
| 29 | | O | 3x | 8x | 25x | | 29 | | Symbol | Multiplier | |
| 30 | | G | 4x | 12x | 40x | | 30 | | --- | ---: | |
| 31 | | D | 6x | 18x | 70x | | 31 | | C | 1 | |
| 32 | | S | 9x | 30x | 150x | | 32 | | L | 2 | |
| 33 | 33 | | O | 3 | | |
| 34 | - Exact RTP: **425/432 = 0.983796...** (1.62% house edge). | 34 | | G | 4 | |
| 35 | - Maximum win: 5 lines x 150x = **750x total bet**. | 35 | | D | 6 | |
| 36 | | S | 10 | | ||
| 37 | |||
| 38 | Shape multipliers (how many matching symbols on the line): | ||
| 39 | |||
| 40 | | Shape | Multiplier | | ||
| 41 | | --- | ---: | | ||
| 42 | | 3 of a kind | 1 | | ||
| 43 | | 4 of a kind | 3 | | ||
| 44 | | 5 of a kind | 14 | | ||
| 45 | |||
| 46 | Every winning payline is added together. | ||
| 47 | |||
| 48 | - Exact RTP: **3835/3888 = 0.986368...** (1.36% house edge). | ||
| 49 | - Maximum win: 5 lines x S(10) x 5-shape(14) = **700x total bet**. | ||
| 36 | - Chance of any win on a spin: about **13%**. | 50 | - Chance of any win on a spin: about **13%**. |
| 37 | - The RTP is checked by `SlotsGame::theoretical_rtp()` and `tests/slots.rs`. | 51 | - The RTP is checked by `SlotsGame::theoretical_rtp()` and `tests/slots.rs`. |
| 38 | 52 | ||
| @@ -67,19 +81,45 @@ The board is ten lines: | |||
| 67 | ``` | 81 | ``` |
| 68 | === SLOTS === | 82 | === SLOTS === |
| 69 | Bet: 10 PLN Balance: 1000 PLN | 83 | Bet: 10 PLN Balance: 1000 PLN |
| 70 | [ C ] [ L ] [ O ] [ G ] [ D ] | 84 | { G } [ L ] [ S ] [ O ] [ G ] |
| 71 | [ S ] { C } { C } [ O ] [ G ] | 85 | [ D ] { G } [ L ] [ S ] [ C ] |
| 72 | [ D ] [ S ] { C } [ L ] [ O ] | 86 | [ O ] [ O ] { G } [ L ] [ O ] |
| 73 | Pays 3/4/5 x bet: C 2/5/15 L 3/7/20 O 3/8/25 | 87 | Pays bet x symbol x shape |
| 74 | G 4/12/40 D 6/18/70 S 9/30/150 | 88 | Symbol C1 L2 O3 G4 D6 S10 Shape 3:1 4:3 5:14 |
| 75 | Won 20 PLN | 89 | Won 40 PLN |
| 76 | Winning lines: 2 | 90 | Winning lines: 4 (V) |
| 77 | [+/-] Bet [SPACE] Spin [Q] Quit | 91 | [+/-] Bet [SPACE] Spin [Q] Quit |
| 78 | ``` | 92 | ``` |
| 79 | 93 | ||
| 80 | The two lines above the status are the compact paytable: for each symbol, the | 94 | The two lines above the status show the payout formula and the two multiplier |
| 81 | multipliers of the total bet for 3, 4 and 5 of a kind. It is split so it does | 95 | tables. Winning cells use braces and are rendered yellow/bold in the terminal. |
| 82 | not wrap on a narrow terminal. Winning cells use braces and are rendered | 96 | The line list below the status names the paylines that won. Both come from the |
| 83 | yellow/bold in the terminal. The line list below the status names the paylines | 97 | server's `win_lines` and `win_cells`, which are already carried through the |
| 84 | that won. Both come from the server's `win_lines` and `win_cells`, which are | 98 | client state for the animation pass. Multiple winning lines are summed; the |
| 85 | already carried through the client state for the animation pass. | 99 | board lists all of them and highlights the union of their matched cells. |
| 100 | |||
| 101 | ## Reading a win | ||
| 102 | |||
| 103 | A payline is one of five fixed paths across the five reels: | ||
| 104 | |||
| 105 | | Line | Name | Rows on reels 1-5 | | ||
| 106 | | ---: | --- | --- | | ||
| 107 | | 1 | top | top, top, top, top, top | | ||
| 108 | | 2 | middle | middle, middle, middle, middle, middle | | ||
| 109 | | 3 | bottom | bottom, bottom, bottom, bottom, bottom | | ||
| 110 | | 4 | V | top, middle, bottom, middle, top | | ||
| 111 | | 5 | inverted V | bottom, middle, top, middle, bottom | | ||
| 112 | |||
| 113 | A line pays only when the first **3, 4 or 5** symbols on that line match, | ||
| 114 | reading from the leftmost reel. | ||
| 115 | |||
| 116 | In the example above, line 4 (V) contains `G G G S G`: | ||
| 117 | |||
| 118 | - reels 1-3 are `G`, so three `G` symbols pay; | ||
| 119 | - reel 4 is `S`, which breaks the run, so the `G` on reel 5 does not count; | ||
| 120 | - `G` has symbol multiplier 4 and 3-of-a-kind has shape multiplier 1, so the | ||
| 121 | win is `10 x 4 x 1 = 40 PLN`. | ||
| 122 | |||
| 123 | A diagonal of `L` symbols that is not one of the five paylines does not win, | ||
| 124 | and a run must start on reel 1. That is why only the three `G` cells are | ||
| 125 | marked in the example. | ||
diff --git a/docs/TESTING.md b/docs/TESTING.md index 84d98e7..acdcdd4 100644 --- a/docs/TESTING.md +++ b/docs/TESTING.md | |||
| @@ -36,12 +36,13 @@ Use an 80-column terminal because several output lines are width-sensitive. | |||
| 36 | prompt, Ctrl+C exits and restores the terminal. | 36 | prompt, Ctrl+C exits and restores the terminal. |
| 37 | 4. `help` fits 80 columns. Tab completion wraps within 76 columns and the | 37 | 4. `help` fits 80 columns. Tab completion wraps within 76 columns and the |
| 38 | cursor stays visible. | 38 | cursor stays visible. |
| 39 | 5. `play slots 50` shows a 5x3 grid, the `Pays 3/4/5 x bet:` paytable line, and | 39 | 5. `play slots 50` shows a 5x3 grid, the `Pays bet x symbol x shape` lines, and |
| 40 | the fetched balance. | 40 | the fetched balance. |
| 41 | 6. Space shows `Spinning...`, then the 3 rows, win text, winning-line list, and | 41 | 6. Space shows `Spinning...`, then the 3 rows, win text, winning-line list, and |
| 42 | new balance inside the same 10-line board. Winning symbols appear as | 42 | new balance inside the same 10-line board. Winning symbols appear as |
| 43 | yellow/bold `{ X }` cells; the `Winning lines:` list matches. The controls | 43 | yellow/bold `{ X }` cells; the `Winning lines:` list names the payline |
| 44 | line is never overwritten. Slots rules and RTP: `docs/SLOTS.md`. | 44 | (e.g. `4 (V)`). The controls line is never overwritten. Slots rules and RTP: |
| 45 | `docs/SLOTS.md`. | ||
| 45 | 7. `+` / `-` after a spin changes only the bet; no stale grid or result lines | 46 | 7. `+` / `-` after a spin changes only the bet; no stale grid or result lines |
| 46 | appear. | 47 | appear. |
| 47 | 8. `q` clears the board. Ctrl+C in a game clears the board and exits. | 48 | 8. `q` clears the board. Ctrl+C in a game clears the board and exits. |
