Neon Royale

Slot Mathematical Model: PAR Sheet — How to Read and Build a Probability Table

Neon AdminNeon Admin·Mar 10, 2026
Slot Mathematical Model: PAR Sheet — How to Read and Build a Probability Table

Introduction

In the previous article, we covered the concepts of RTP, volatility, and variance. Now it's time to get practical: how exactly are these figures calculated and documented for a specific slot title?

The PAR Sheet (Probability Accounting Report) is the primary mathematical document of any slot machine. It's not a marketing document, and it's not a design spec. It is a precise analytical report that answers one question: what is the exact mathematics of this game?

A PAR Sheet is a mandatory deliverable for:

Internal development (verifying the math before writing a single line of code)

Certification at an independent testing laboratory (GLI, BMM, iTech Labs)

Providing to operators (they want to know exactly what they're selling)

Regulators (in some jurisdictions the PAR Sheet is submitted directly to the authority)

In this article we'll take a concrete example — a 5×3 slot with 10 symbols, 20 paylines, and a Free Spins bonus round — and walk through the entire process of building a PAR Sheet from scratch: from defining the reels all the way to final RTP and variance.


Part I. Anatomy of a PAR Sheet

1.1 What a PAR Sheet Contains

A classic PAR Sheet consists of several interconnected sections:

PAR Sheet
│
├── 1. Game Configuration
│       Field type, number of reels, paylines
│
├── 2. Symbol Definition
│       List of symbols, their types, visual IDs
│
├── 3. Reel Strips
│       Which symbols appear on each reel, and how many times
│
├── 4. Pay Table
│       Every winning combination → payout in credits
│
├── 5. Combination Probabilities
│       Exact probability of every winning combination
│
├── 6. RTP Calculation
│       Each combination's contribution, total RTP
│
├── 7. Hit Frequency Analysis
│       How often the player wins, how often they don't
│
├── 8. Variance & Standard Deviation
│       Variance calculation per spin
│
├── 9. Bonus Feature Math
│       Trigger probability, EV of the bonus round, contribution to RTP
│
└── 10. Summary
        Total RTP, Volatility class, Max Win, Hit Frequency

1.2 Key Terminology

Before we dive in, let's lock down the terminology we'll use throughout this article:

Term

Definition

Credit

The base unit of a bet. 1 credit = 1 coin = €0.01–€5.00 depending on operator settings

Bet

Total stake per spin = Credits × Lines (or Lines × Coin Value)

Win multiplier

A payout expressed as a multiple of the line bet

Reel Strip

The ordered list of symbols on a reel (the reel's "tape")

Stop

A single position on a reel

Cycle

The complete set of outcomes = R1 × R2 × R3 × R4 × R5


Part II. Game Configuration

2.1 Our Test Slot

For this article, we're designing a slot with the following parameters:

Title:              "My Awesome Slot" (educational example)
Grid:               5 reels × 3 rows (5×3)
Win type:           Left-to-right, minimum 3 matching symbols starting from reel 1
Paylines:           20 fixed paylines
Coin value:         €0.01 to €5.00
Min bet:            €0.20  (20 lines × €0.01)
Max bet:            €100.00 (20 lines × €5.00)
Target RTP:         96.00% ± 0.3%
Target volatility:  Medium-High
Bonus:              Free Spins (triggered by 3+ Scatter)

2.2 Symbol Definitions

ID

Symbol

Type

Notes

1

WILD

Wild

Substitutes for all symbols except Scatter

2

SCATTER

Scatter

Triggers Free Spins; does not participate in paylines

3

DIAMOND

Premium

Top symbol

4

RUBY

Premium

5

EMERALD

Premium

6

GOLD

Mid

7

SILVER

Mid

8

ACE

Low

9

KING

Low

10

QUEEN

Low

11

JACK

Low

2.3 Payline Definitions

20 standard paylines across a 5×3 grid. Each payline is an array of 5 elements, where each element is the row index (0 = top, 1 = middle, 2 = bottom) for the corresponding reel:

Line  1: [1,1,1,1,1]  — middle horizontal
Line  2: [0,0,0,0,0]  — top horizontal
Line  3: [2,2,2,2,2]  — bottom horizontal
Line  4: [0,1,2,1,0]  — V-shape down
Line  5: [2,1,0,1,2]  — V-shape up
Line  6: [0,0,1,2,2]  — diagonal down-right
Line  7: [2,2,1,0,0]  — diagonal up-right
Line  8: [1,0,0,0,1]  — arch up
Line  9: [1,2,2,2,1]  — arch down
Line 10: [0,1,1,1,0]  — W-shape upper
... (10 more lines)

Part III. Reel Strips

3.1 What Is a Reel Strip?

A Reel Strip is the ordered list of symbols on a reel, written in the sequence they appear around the drum. When the reel spins and stops, it displays 3 symbols: the stop position and one symbol above and below it.

The reel size (number of positions) is a critical parameter. The longer the reel:

The more precisely you can tune probabilities

The harder it becomes to reason about the math intuitively

The longer an exhaustive enumeration takes

Typical sizes: 30–50 positions per reel. Megaways slots work differently, with a dynamically changing number of visible rows per reel.

3.2 Designing the Reel Strips

Designing reel strips is an iterative process. You start with target symbol probabilities and work backwards to find how many of each symbol belongs on each reel.

Key principle: high-paying symbols appear rarely; low-paying symbols appear frequently. Wild appears 2–4 times per reel, Scatter 1–2 times.

Here is the full reel strip layout for our test slot (32 positions per reel):

Reel 1 (32 positions):

Position: Symbol
  1: QUEEN   (10)
  2: KING    (9)
  3: ACE     (8)
  4: GOLD    (6)
  5: QUEEN   (10)
  6: SILVER  (7)
  7: JACK    (11)
  8: EMERALD (5)
  9: QUEEN   (10)
 10: KING    (9)
 11: SILVER  (7)
 12: WILD    (1)
 13: JACK    (11)
 14: ACE     (8)
 15: GOLD    (6)
 16: QUEEN   (10)
 17: RUBY    (4)
 18: KING    (9)
 19: JACK    (11)
 20: SILVER  (7)
 21: ACE     (8)
 22: SCATTER (2)
 23: GOLD    (6)
 24: QUEEN   (10)
 25: KING    (9)
 26: JACK    (11)
 27: DIAMOND (3)
 28: ACE     (8)
 29: SILVER  (7)
 30: QUEEN   (10)
 31: GOLD    (6)
 32: EMERALD (5)

Symbol count per reel — summary table:

Symbol

R1

R2

R3

R4

R5

Total

WILD (1)

2

3

4

3

2

14

SCATTER (2)

1

1

1

1

1

5

DIAMOND (3)

1

1

2

1

1

6

RUBY (4)

2

2

2

2

2

10

EMERALD (5)

2

2

3

2

2

11

GOLD (6)

3

3

3

3

3

15

SILVER (7)

3

4

4

4

3

18

ACE (8)

4

4

4

4

4

20

KING (9)

4

4

3

4

4

19

QUEEN (10)

6

5

4

5

6

26

JACK (11)

4

3

2

3

4

16

Total

32

32

32

32

32

160

Note: Reel 3 (the middle reel) contains more Wild and Diamond symbols than the outer reels. This is standard practice — a more "generous" middle reel creates more near-miss visuals and helps maintain player engagement.

3.3 Symbol Probability on a Specific Reel

For any symbol S on reel R:

P(S on R) = count(S, R) / size(R)

Examples:

P(DIAMOND on R1) = 1/32 = 3.125%
P(DIAMOND on R3) = 2/32 = 6.250%
P(WILD on R1)    = 2/32 = 6.250%
P(QUEEN on R1)   = 6/32 = 18.75%

3.4 The Full Reel Cycle

Cycle = R1 × R2 × R3 × R4 × R5
Cycle = 32 × 32 × 32 × 32 × 32 = 32⁵ = 33,554,432

This means there are 33.5 million unique spin outcomes. Each individual outcome has a probability of 1 / 33,554,432 ≈ 0.0000000298.


Part IV. Pay Table

4.1 Pay Table Structure

The pay table defines the payout for every winning combination. Payouts are expressed as line bet multipliers — multiples of the stake placed on that specific payline.

If the line bet is €1.00, a payout of 100× means a win of €100.

Our Pay Table:

Symbol

3 in a row

4 in a row

5 in a row

WILD

1000×

DIAMOND

50×

200×

1000×

RUBY

30×

100×

500×

EMERALD

20×

75×

300×

GOLD

10×

40×

150×

SILVER

25×

100×

ACE

15×

75×

KING

15×

75×

QUEEN

10×

50×

JACK

10×

50×

Wild rules:

WILD substitutes for all symbols except SCATTER

WILD has no payout for 3 or 4 in a row (only 5 in a row pays 1000×)

When a WILD completes a combination, the payout is awarded for the matched symbol (not for Wild itself)

Scatter rules:

SCATTER is not tied to paylines — it pays when 3 or more appear anywhere on the grid

3 SCATTER = 10 Free Spins

4 SCATTER = 15 Free Spins

5 SCATTER = 20 Free Spins

Scatter does not award a direct cash payout — only Free Spins are granted

4.2 Wild Substitution Combinations in Detail

Wild substitutions significantly increase the effective probability of every combination. Let's examine how many ways there are to land "3× DIAMOND" once Wilds are included:

Case 1: D D D _ _    (three Diamonds in positions 1-2-3)
Case 2: D D W _ _    (two Diamonds + Wild in position 3)
Case 3: D W D _ _    (Diamond + Wild + Diamond)
Case 4: W D D _ _    (Wild + two Diamonds)
Case 5: D W W _ _    (Diamond + two Wilds)
Case 6: W D W _ _    (Wild + Diamond + Wild)
Case 7: W W D _ _    (two Wilds + Diamond)
Case 8: W W W _ _    (three Wilds → this is a Wild combo, not a Diamond win)

Cases 1–7 all count as a "3× DIAMOND" win. Case 8 is a "3× WILD" combination, handled separately (or counted as the highest regular symbol, depending on game rules).

This substantially complicates the calculation, but this full enumeration is precisely what an accurate PAR Sheet requires.


Part V. Calculating Combination Probabilities

5.1 Calculation Methodology

For every winning combination, we need to calculate:

The number of ways to achieve that combination (including Wild substitutions)

Probability = Ways / Cycle

RTP contribution = Probability × Payout

Let's walk through the full calculation for a few key combinations.

5.2 Calculating "5× DIAMOND" (with Wild)

We need all 5 reel positions on a payline to show either DIAMOND or WILD, with at least one being a DIAMOND (otherwise it's a Wild-only combo).

Let D = Diamond count on reel i, W = Wild count on reel i:

R1: D=1, W=2  →  (D+W) = 3  valid stops out of 32
R2: D=1, W=3  →  (D+W) = 4  out of 32
R3: D=2, W=4  →  (D+W) = 6  out of 32
R4: D=1, W=3  →  (D+W) = 4  out of 32
R5: D=1, W=2  →  (D+W) = 3  out of 32

Total ways to get Diamond or Wild across all 5 positions:

Ways_total = 3 × 4 × 6 × 4 × 3 = 864

Subtract the "all 5 are Wild" case (that's a separate Wild combo):

Ways_allWild = 2 × 3 × 4 × 3 × 2 = 144

Final count for "5× DIAMOND (with Wild)":

Ways_5Diamond = 864 - 144 = 720

Probability on one payline:

P(5× Diamond on one line) = 720 / 33,554,432 ≈ 0.00002146 ≈ 1 in 46,600

RTP contribution for one payline (payout 1000×):

RTP contribution = 0.00002146 × 1000 = 0.02146 = 2.146%

A 2.146% RTP contribution from the top combination is very reasonable.

5.3 Calculating "3× QUEEN" (with Wild)

R1: Q=6, W=2  →  (Q+W) = 8  out of 32
R2: Q=5, W=3  →  (Q+W) = 8  out of 32
R3: Q=4, W=4  →  (Q+W) = 8  out of 32
R4: must NOT be Queen or Wild (otherwise this is a 4+ combo)
R5: must NOT be Queen or Wild

For "exactly 3× QUEEN" on the first three reels, positions 4 and 5 must be neither Queen nor Wild:

R4: NOT(Q or W) = 32 - 5 - 3 = 24  out of 32
R5: NOT(Q or W) = 32 - 6 - 2 = 24  out of 32

Ways to get Queen/Wild on R1-R2-R3 AND non-Queen/Wild on R4-R5:

All_3Q_with_wild = 8 × 8 × 8 × 24 × 24 = 294,912
Minus "all three are Wild" (Wild combo, not Queen):
All_3W = 2 × 3 × 4 × 24 × 24 = 13,824
Ways_3Queen = 294,912 - 13,824 = 281,088

Probability:

P(3× Queen) = 281,088 / 33,554,432 ≈ 0.008378 ≈ 0.8378%

RTP contribution (payout 4×):

RTP_3Queen = 0.008378 × 4 = 0.033512 = 3.35%

A single combination — "3× Queen" — contributes 3.35% to total RTP. Makes sense: Queen appears frequently, but pays little.

5.4 Full Combination Table and RTP Contributions

Here is the complete table for all combinations (simplified — Wild enumeration detail omitted for brevity, but final figures include Wild):

Combination

Ways

Probability

Payout

RTP Contribution

5× WILD

144

0.00000429

1000×

0.00429 = 0.43%

5× DIAMOND

720

0.00002146

1000×

0.02146 = 2.15%

4× DIAMOND

9,920

0.00029563

200×

0.05913 = 5.91%

3× DIAMOND

86,400

0.00257492

50×

0.12875 = 12.87%

5× RUBY

1,024

0.00003052

500×

0.01526 = 1.53%

4× RUBY

20,480

0.00061035

100×

0.06104 = 6.10%

3× RUBY

163,840

0.00488281

30×

0.14648 = 14.65%

5× EMERALD

1,296

0.00003862

300×

0.01159 = 1.16%

4× EMERALD

24,192

0.00072098

75×

0.05407 = 5.41%

3× EMERALD

193,536

0.00576782

20×

0.11536 = 11.54%

5× GOLD

2,430

0.00007242

150×

0.01086 = 1.09%

4× GOLD

40,500

0.00120699

40×

0.04828 = 4.83%

3× GOLD

283,500

0.00844896

10×

0.08449 = 8.45%

5× SILVER

3,888

0.00011587

100×

0.01159 = 1.16%

4× SILVER

58,320

0.00173807

25×

0.04345 = 4.35%

3× SILVER

388,800

0.01159046

0.09272 = 9.27%

5× ACE

2,048

0.00006104

75×

0.00458 = 0.46%

4× ACE

32,768

0.00097656

15×

0.01465 = 1.47%

3× ACE

245,760

0.00732422

0.03662 = 3.66%

5× KING

1,536

0.00004578

75×

0.00343 = 0.34%

4× KING

24,576

0.00073242

15×

0.01099 = 1.10%

3× KING

184,320

0.00549316

0.02747 = 2.75%

5× QUEEN

7,776

0.00023174

50×

0.01159 = 1.16%

4× QUEEN

92,160

0.00274658

10×

0.02747 = 2.75%

3× QUEEN

281,088

0.00837803

0.03351 = 3.35%

5× JACK

3,072

0.00009155

50×

0.00458 = 0.46%

4× JACK

41,472

0.00123596

10×

0.01236 = 1.24%

3× JACK

221,184

0.00659180

0.02637 = 2.64%

BASE TOTAL

≈ 65.03%

Base game total: ≈ 65.03% RTP. Our target total RTP is 96%, so the bonus feature needs to contribute the remaining ≈ 30.97%.

Important: The figures in this table are calculated with some simplifications (not every Wild-substitution variant is fully enumerated for every combination). In a production PAR Sheet, each row requires a precise combinatorial calculation. The 65.03% base game figure is realistic for a medium-volatility game of this configuration.

Part VI. Scatter and Free Spins Calculations

6.1 Free Spins Trigger Probability

One Scatter appears on each reel. The trigger fires on 3 or more Scatters anywhere on the grid (not restricted to paylines).

Probability of a Scatter landing on a specific reel stop position:

P(Scatter on Ri) = 1/32 = 0.03125

Since the reel window shows 3 rows, the probability that the Scatter is visible in the window is:

P(Scatter visible on Ri) = (count_scatter × visible_rows) / reel_size
                         = (1 × 3) / 32 = 3/32 = 0.09375

Probability of 3 or more Scatters appearing on the grid (any 3 of 5 reels):

P(exactly 3 Scatters) = C(5,3) × (3/32)³ × (29/32)²
                      = 10 × 0.000824 × 0.822266
                      = 0.006776

P(exactly 4 Scatters) = C(5,4) × (3/32)⁴ × (29/32)¹
                      = 5 × 0.0000257 × 0.90625
                      = 0.000116

P(exactly 5 Scatters) = C(5,5) × (3/32)⁵
                      = 0.000000798

P(Free Spins trigger) = 0.006776 + 0.000116 + 0.000000798
                      ≈ 0.006893

Trigger frequency:

1 / 0.006893 ≈ once every 145 spins

This is a solid trigger frequency for medium volatility — players see the bonus often enough to stay engaged.

6.2 Expected Value of the Bonus Round

Free Spins — 10 spins with a ×2 multiplier on all wins (a standard setup).

EV of a single Free Spin:

EV(free spin) = RTP_base × bet × multiplier
              = 0.6503 × 1.0 × 2
              = 1.3006 (in units of bet)

EV of 10 Free Spins (without retriggers):

EV(10 FS) = 10 × 1.3006 = 13.006 bet

Accounting for retriggers (3+ Scatters during Free Spins awards another 10 FS):

P(retrigger over 10 spins) = 1 - (1 - 0.006893)^10
                           ≈ 1 - 0.9327 = 0.0673 ≈ 6.73%

Using the recursive formula to account for all retrigger chains:

EV(FS with retriggers) = EV_base × (1 / (1 - P_retrigger))
                       = 13.006 × (1 / (1 - 0.0673))
                       = 13.006 × 1.0722
                       = 13.945 bet

6.3 Free Spins Contribution to Total RTP

RTP_freespins = P(trigger) × EV(FS) / bet
              = 0.006893 × 13.945 / 1.0
              = 0.09614
              = 9.61%

We need ~30.97% from the bonus, but are only getting 9.61%. This means we need to either:

Increase the number of Free Spins (e.g., 20 instead of 10)

Raise the multiplier (×3 instead of ×2)

Add a progressive cascade multiplier

Use enhanced Free Spins reels with more Wilds and Premiums

This is the iterative nature of slot math design. Adjusting to 25 Free Spins with a ×3 multiplier and enhanced Wild counts on Free Spins reels (Wilds: 4/5/6/5/4 instead of 2/3/4/3/2):

EV(1 FS with ×3 and extra Wilds) ≈ 0.72 × 3 = 2.16 bet
EV(25 FS) = 25 × 2.16 = 54 bet
P(retrigger across 25 spins) ≈ 9.5% → factor = 1/(1-0.095) ≈ 1.105
EV(FS with retriggers) ≈ 54 × 1.105 ≈ 59.7 bet

RTP_freespins = 0.006893 × 59.7 = 0.4115 = 41.15%

Too much — 65% base + 41% FS = 106% total RTP, which is a loss for the casino.

Dropping base RTP to ~58% (by reducing low-symbol payouts):

RTP_base (adjusted) ≈ 58%
RTP_freespins       ≈ 38%  (20 FS, ×2.5 mult, enhanced wilds)
RTP_total           ≈ 96% ✓
This is what a slot math designer actually does — iteratively adjusting dozens of parameters until the target RTP is hit at the target volatility.

Part VII. Hit Frequency Analysis

7.1 Win Probability Per Spin

Hit Frequency is the probability of landing at least one winning combination anywhere on the 20 paylines during a single spin.

Direct approach: 1 − P(no win on any line).

From our combination table, the total probability of a win on a single payline ≈ 0.0621.

P(no win on one line) = 1 - 0.0621 = 0.9379

Since paylines share reel positions they are not fully independent, so raising this to the 20th power is an approximation. An exact answer requires a full enumeration of all 33.5M outcomes. Based on typical games of this configuration, simulation gives:

Hit Frequency (base game) ≈ 28–32%

Roughly one in every three spins produces some kind of win.

7.2 Win Size Distribution

This is one of the most important sections of the PAR Sheet for understanding volatility. All wins are classified by size:

Win size

% of all spins

% of winning spins

0.5× – 1× (return of stake or less)

5.2%

17.3%

1× – 5×

12.8%

42.7%

5× – 20×

7.4%

24.7%

20× – 100×

3.8%

12.7%

100× – 500×

0.8%

2.6%

500× – 2000×

0.04%

0.13%

2000×+

0.001%

0.003%

Total winning spins

≈ 30%

100%

The table shows that over 60% of all wins are 5× or smaller. The player "wins" frequently, but most wins return less than — or just slightly more than — the stake. This is the fingerprint of medium volatility.

7.3 Longest Losing Streak

An important parameter for user experience. At Hit Frequency = 30%:

P(a streak of exactly N losses) = (1 - 0.30)^N = 0.70^N

P(10+ consecutive losses) = 0.70^10 = 2.82%
P(20+ consecutive losses) = 0.70^20 = 0.079%
P(30+ consecutive losses) = 0.70^30 = 0.0022%

Over 1,000 spins, a player can mathematically expect:

At least one run of 10+ consecutive losses with ~98% probability

A run of 15+ consecutive losses with ~70% probability

A run of 25+ consecutive losses with ~10% probability

These are normal figures for medium volatility. For high-volatility games, runs of 30–50 consecutive losses are routine.


Part VIII. Variance Calculation

8.1 The Variance Formula for a Slot

σ² = Σ [P(x_i) × x_i²] − μ²

Where:

x_i = payout of the i-th combination (in units of bet)

P(x_i) = probability of the i-th combination

μ = RTP = 0.96 (the expected value)

8.2 Key Contributors to Variance

Let's compute Σ[P(x) × x²] for the major combinations:

Combination

P(x)

x (payout)

P(x) × x²

5× WILD

0.00000429

1000

1,000,000

4.29

5× DIAMOND

0.00002146

1000

1,000,000

21.46

4× DIAMOND

0.00029563

200

40,000

11.83

3× DIAMOND

0.00257492

50

2,500

6.44

5× RUBY

0.00003052

500

250,000

7.63

4× RUBY

0.00061035

100

10,000

6.10

3× RUBY

0.00488281

30

900

4.39

3× QUEEN

0.00837803

4

16

0.134

... (remaining combinations)

≈ 45

Total Σ[P(x)×x²]

≈ 107.3

σ²_base = 107.3 − (0.96)² = 107.3 − 0.9216 ≈ 106.4

σ_base = √106.4 ≈ 10.31  (in units of bet)

This is the variance for the base game only. The total variance including Free Spins will be substantially higher, because a Free Spins trigger is a rare event with a high EV — which sharply increases the overall spread of results.

σ²_total ≈ σ²_base + σ²_bonus ≈ 106.4 + 250 ≈ 356
σ_total  ≈ √356 ≈ 18.9

A standard deviation of ≈ 18.9× bet per spin is consistent with medium-high volatility — exactly our target.

8.3 Interpreting Standard Deviation

With RTP = 96% and σ = 18.9:

Over 100 spins at €1:

Expected result: −€4.00 (the house edge)
σ of the sum:    18.9 × √100 = 189
95% of players end up in: −€4 ± €378  →  between −€382 and +€374

Over 1,000 spins at €1:

Expected result: −€40.00
σ of the sum:    18.9 × √1000 = 597.7
95% range: −€40 ± €1195  →  between −€1,235 and +€1,155

This illustrates why "winning" is genuinely possible on a short session — the spread is enormous relative to the expected loss.


Part IX. Summary Sheet

9.1 Final PAR Sheet Summary

═══════════════════════════════════════════════════
          My Awesome Slot — PAR SHEET SUMMARY
           Version 1.0 | Date: [DD.MM.YYYY]
═══════════════════════════════════════════════════

CONFIGURATION
  Grid:                  5 × 3
  Reels:                 5 (32 positions each)
  Paylines:              20 (fixed)
  Full cycle:            33,554,432

RTP
  Base Game RTP:         58.00%
  Free Spins RTP:        38.00%
  Total RTP:             96.00%
  House Edge:            4.00%

  Multi-RTP options:
    Config A (low):      94.00%
    Config B (default):  96.00%
    Config C (high):     97.00%

HIT FREQUENCY
  Base Hit Frequency:    30.4%
  (any win, once every)  3.3 spins
  Win Hit Frequency:     24.1%
  (≥ stake returned,     4.1 spins
   once every)

BONUS ROUND
  Trigger:               3+ Scatter anywhere
  Trigger frequency:     1 in 145 spins
  Free Spins awarded:    25
  FS multiplier:         ×2.5
  Bonus round EV:        ≈ 55.2× bet

VARIANCE
  Variance (per spin):   ≈ 356
  Std. Deviation:        ≈ 18.9× bet
  Volatility class:      Medium-High

PAYOUTS
  Theoretical max win:   50,000× (theoretical ceiling)
  Practical max win:     ≈ 5,000–8,000× (99.9% of sessions)
  Top base game win:     1000× (5× Wild or 5× Diamond)
  Top Free Spins win:    1000× × 2.5 = 2,500×

═══════════════════════════════════════════════════

Part X. Tools for Building a PAR Sheet

10.1 Excel / Google Sheets — the Standard Approach

Most developers build their PAR Sheets in Excel. A typical workbook structure:

Sheet 1: "Reel Strips"       — symbol lists for each reel
Sheet 2: "Pay Table"         — all combinations and payouts
Sheet 3: "Combinations"      — probability calculations per combination
Sheet 4: "RTP Calculation"   — summing up RTP contributions
Sheet 5: "Bonus Math"        — bonus EV calculations
Sheet 6: "Variance"          — variance and standard deviation
Sheet 7: "Summary"           — final summary sheet

Combination probabilities in Excel typically use formulas like:

excel

=COUNTIF(Reel1,"DIAMOND")/COUNTA(Reel1) * COUNTIF(Reel2,"DIAMOND")/COUNTA(Reel2) * ...

10.2 Python — Exact Full Enumeration

For a complete enumeration of all 33.5M outcomes, Python is the best tool for the job:

from itertools import product
from collections import defaultdict

# Define reel strips (symbol IDs)
reel_strips = [
    # R1: list of symbol IDs (32 positions)
    [10,9,8,6,10,7,11,5,10,9,7,1,11,8,6,10,4,9,11,7,8,2,6,10,9,11,3,8,7,10,6,5],
    # R2 ... R5 (defined similarly)
    [...],
    [...],
    [...],
    [...],
]

# Paylines — row indices per column (0=top, 1=middle, 2=bottom)
paylines = [
    [1,1,1,1,1],  # line 1
    [0,0,0,0,0],  # line 2
    [2,2,2,2,2],  # line 3
    # ... 17 more lines
]

pay_table = {
    # (symbol_id, count): multiplier
    (3, 5): 1000, (3, 4): 200, (3, 3): 50,   # DIAMOND
    (4, 5): 500,  (4, 4): 100, (4, 3): 30,   # RUBY
    (5, 5): 300,  (5, 4): 75,  (5, 3): 20,   # EMERALD
    # ...
}

WILD_ID    = 1
SCATTER_ID = 2

def evaluate_line(symbols, payline, pay_table):
    """Evaluate a single payline and return the win amount."""
    line_symbols = [symbols[col][row] for col, row in enumerate(payline)]

    win_symbol = None
    count = 0

    for sym in line_symbols:
        if sym == SCATTER_ID:
            break
        if win_symbol is None:
            if sym == WILD_ID:
                count += 1
                continue
            win_symbol = sym
            count += 1
        elif sym == win_symbol or sym == WILD_ID:
            count += 1
        else:
            break

    # If only Wilds were encountered, treat as Wild combo
    if win_symbol is None and count > 0:
        win_symbol = WILD_ID

    if win_symbol and count >= 3:
        return pay_table.get((win_symbol, count), 0)
    return 0

def calculate_par_sheet(reel_strips, paylines, pay_table):
    """Full exhaustive enumeration of all reel combinations."""
    reel_sizes = [len(r) for r in reel_strips]
    total_combinations = 1
    for size in reel_sizes:
        total_combinations *= size

    total_win       = 0
    hit_count       = 0
    sum_x_squared   = 0
    win_distribution = defaultdict(int)

    for stops in product(*[range(size) for size in reel_sizes]):
        # Build the visible 3-row window for each reel
        visible_symbols = []
        for col, stop in enumerate(stops):
            reel = reel_strips[col]
            size = len(reel)
            row0 = reel[(stop - 1) % size]
            row1 = reel[stop]
            row2 = reel[(stop + 1) % size]
            visible_symbols.append([row0, row1, row2])

        # Evaluate all 20 paylines
        spin_win = 0
        for payline in paylines:
            spin_win += evaluate_line(visible_symbols, payline, pay_table)

        total_win     += spin_win
        sum_x_squared += spin_win ** 2
        win_distribution[round(spin_win, 1)] += 1
        if spin_win > 0:
            hit_count += 1

    rtp            = total_win / total_combinations
    hit_frequency  = hit_count / total_combinations
    variance       = (sum_x_squared / total_combinations) - (rtp ** 2)
    std_dev        = variance ** 0.5

    print(f"Total combinations : {total_combinations:,}")
    print(f"RTP (base game)    : {rtp * 100:.4f}%")
    print(f"Hit Frequency      : {hit_frequency * 100:.2f}%")
    print(f"Variance           : {variance:.4f}")
    print(f"Std Deviation      : {std_dev:.4f}× bet")

    return rtp, hit_frequency, variance, win_distribution

rtp, hf, var, dist = calculate_par_sheet(reel_strips, paylines, pay_table)

This script performs an exact full enumeration — no approximations. For 33.5M combinations, expect a runtime of 10–60 seconds on a modern CPU depending on optimisation.

10.3 C# — Embedded Calculation in the Game Server

In the upcoming articles we'll implement the PAR Sheet calculator directly in C#, sharing the same game logic as the live Game Server. This guarantees that the mathematics in the document and the mathematics in the code are identical.

csharp

public class ParSheetCalculator
{
    private readonly GameConfig _config;

    public ParSheetResult Calculate()
    {
        long totalCombinations = 1;
        foreach (var reel in _config.ReelStrips)
            totalCombinations *= reel.Length;

        decimal totalWin      = 0;
        decimal sumXSquared   = 0;
        long    hitCount      = 0;

        foreach (var stops in EnumerateAllStops())
        {
            var     grid     = BuildGrid(stops);
            decimal spinWin  = EvaluateAllLines(grid);

            totalWin      += spinWin;
            sumXSquared   += spinWin * spinWin;
            if (spinWin > 0) hitCount++;
        }

        decimal rtp      = totalWin / totalCombinations;
        decimal variance = (sumXSquared / totalCombinations) - (rtp * rtp);

        return new ParSheetResult(
            RTP:          rtp,
            HitFrequency: hitCount / (decimal)totalCombinations,
            Variance:     variance
        );
    }
}

Part XI. Common PAR Sheet Mistakes

Mistake 1: Ignoring Wild in Probability Calculations

WRONG: P(5×Diamond) = (D1/R1) × (D2/R2) × (D3/R3) × (D4/R4) × (D5/R5)
RIGHT: P(5×Diamond) = [(D1+W1)/R1 × ... × (D5+W5)/R5] − P(5×Wild)

Wild adds additional ways to complete every symbol combination. Leaving Wild out of the calculation will understate RTP, and you'll be baffled when the simulation produces a different number.

Mistake 2: Double-Counting on Overlapping Paylines

In games with overlapping paylines, a single set of symbols can award wins on multiple lines simultaneously. The PAR Sheet must either account for this correctly or explicitly state that wins are cumulative (i.e., all winning lines pay at once).

Mistake 3: Wrong Scatter Visibility Probability

WRONG: P(Scatter on reel) = count_scatter / reel_size
RIGHT: P(Scatter visible in window) = (count_scatter × visible_rows) / reel_size

A Scatter is visible if it lands in any of the 3 visible rows — not just one specific row. This triples the probability relative to "landing on a specific row."

Mistake 4: Forgetting "Exactly N" vs "N or More"

The probability of landing "exactly 3 in a row" is not the same as "3 or more." To calculate "exactly 3," you must multiply by the probability that positions 4 and 5 do NOT show that symbol (and are not Wild either).

Mistake 5: Free Spins RTP Estimated as "Base × Multiplier"

WRONG: RTP_FS = RTP_base × 2  (for a ×2 multiplier)
RIGHT: RTP_FS is calculated separately, using the actual FS reel strips,
       all Wild counts, multipliers, and retrigger probabilities —
       through a dedicated simulation

Free Spins typically use separate, more generous reel strips with elevated Wild and Premium counts. Simply multiplying the base RTP is a rough error that can be off by a factor of two or more.


Part XII. Verifying the PAR Sheet Through Simulation

After the analytical calculations, there is one mandatory step: run a simulation of 10 million+ spins.

Analytical calculation (formulas) → PAR Sheet document
              ↓
Simulation verification: 10M+ spins
              ↓
Acceptable discrepancy: ±0.1% RTP (for 10M spins)
              ↓
If discrepancy > 0.1% → find the bug in the formula or the code
              ↓
Final PAR Sheet with simulation results appended

A typical simulation verification section in a PAR Sheet looks like this:

SIMULATION VERIFICATION
  Spins simulated:             10,000,000

  Analytical base RTP:         58.00%
  Simulated base RTP:          57.96%   ← delta 0.04% ✓

  Analytical Hit Frequency:    30.40%
  Simulated Hit Frequency:     30.38%   ← delta 0.02% ✓

  Analytical trigger freq:     1 in 145
  Simulated trigger freq:      1 in 147  ← delta 1.4%  ✓

  Simulated total RTP:         95.94%   ← within ±0.5% of 96% ✓

  Status: PASSED ✓

Summary

The PAR Sheet is a living mathematical document — it is born before any code is written and accompanies the slot throughout its entire lifecycle. Building it is not bureaucratic overhead; it is an engineering necessity. The PAR Sheet is how you know whether the mathematics works the way you intended.

Key takeaways from this article:

Reel Strips are the heart of slot mathematics. The count of each symbol on each reel directly determines the probability of every combination. Strip design is an iterative process of tuning towards a target RTP and volatility profile.

The Pay Table defines the character of the game. The relationship between payouts for 3/4/5-of-a-kind and their respective probabilities is what sets volatility — even when two games share the same headline RTP.

Full combination enumeration is the only way to obtain an exact RTP. Approximations introduce error; exhaustive enumeration gives the truth.

Free Spins are a world of their own with their own mathematics. They typically carry 30–45% of total RTP and must be calculated through their own simulation using the actual FS reel strips, multipliers, and retrigger model.

Simulation verification is a mandatory final step before submission to a certification laboratory.

Neon Royale use cookies for technical purposes, functionality and measurement.

Policy