All extensions

@open-rgs/big-symbols

One symbol across a block of cells.

Repeated cells, no overlay

A big symbol is written as the same symbol across every cell it covers. No marker, no parallel geometry. That is what makes it work with every evaluator for free - and it matches what players are paid.

=4
A 2x2 wild really does act as four wilds.
import { placeBig } from "@open-rgs/big-symbols";

const g = placeBig(grid, { pos: { col: 1, row: 1 }, width: 2, height: 2 }, "WILD");

Fit is not obvious

A 2x2 needs two adjacent columns that are both tall enough at those rows. On a multiways board where one reel drew a height of two, a block that fits everywhere else does not fit there.

A block needs every column it covers to be tall enough.
import { fits, placements } from "@open-rgs/big-symbols";

fits(RAGGED, { col: 1, row: 2 }, 2, 2);
placements(RAGGED, 2, 2);

Refuse rather than clip

A clipped 2x2 is a 2x1 pretending to be one: it pays less than the game promised, and by then it is just symbols, so nothing downstream can tell. Random placement returns the board unchanged when nothing fits, because a feature that cannot place is an outcome to price rather than a crash.

On a ragged board a block that fits elsewhere may not fit here.
import { placeRandomBig, blocksOf } from "@open-rgs/big-symbols";

placeRandomBig(grid, "WILD", 3, 3, host.rng_next);

blocksOf(g, "WILD", [[2, 2], [3, 3]]);