Skip to main content
The Scatter class evaluates wins for games where symbols do not need to be adjacent or on specific paylines. Instead, the total count of each symbol type anywhere on the board determines whether a win occurs.

How scatter wins work

For each non-wild symbol, the engine counts its total appearances on the board. Wild symbols are appended to every symbol’s position list before lookup. If (total_count, symbol) exists in config.paytable, a win is recorded. A minimum of 8 like-symbols is typical to trigger a win, but the minimum is determined entirely by the lowest kind entry for that symbol in config.paytable.

Configuration

Because the count can range from the minimum up to the full board size, range-based paytables are common. Use convert_range_table() on Config to generate config.paytable from a compact pay_group:
dict
required
Maps (count, symbol) tuples to payout multipliers. Generated via config.convert_range_table(pay_group).
Range bounds are inclusive.

Scatter.get_scatterpay_wins()

Config
required
Game configuration with config.paytable and config.special_symbols populated.
list[list[Symbol]]
required
Active game board indexed as board[reel][row].
str
default:"wild"
Symbol attribute key identifying wild symbols. Wilds are added to every symbol’s count.
str
default:"multiplier"
Symbol attribute key for reading per-symbol multiplier values.
int
default:"1"
Scalar multiplier applied to all wins.

Return value

float
Sum of all scatter wins for this board state.
list
One entry per paying symbol type.

Exploding symbols and tumble integration

All winning symbol positions (and wild positions included in wins) have explode = True set during get_scatterpay_wins(). This enables the Tumble class to remove them and cascade new symbols. The typical tumble loop:

Additional methods

Scatter.record_scatter_wins(gamestate)

Writes force-file entries for each scatter win, keyed by kind (total symbol count), symbol, combined totalMult, and gametype.
Scatter pays games typically use a cascading mechanic. Pair get_scatterpay_wins() with tumble_board() from the Tumble class for a complete cascade loop.
Wild symbols are shared across all symbol counts — a wild contributes to the win count of every non-wild symbol simultaneously. This is the key behavioral difference from cluster pays, where wilds contribute to only the adjacent cluster.