PR pixi-reels
All demos
scatter free-spins anticipation

Scatter triggers Free Spins

5×3 · 3+ scatters anywhere → FS · anticipation on near-miss

Why this page exists

The “3 scatters anywhere” rule is the most common FS trigger in the industry. The interesting part isn’t the detection. it’s producing it on demand so you can polish the transition without playing 100 spins.

Setup

1. Register a scatter symbol

builder.symbols((r) => {
  r.register('scatter', BlockSymbol, { colors: { scatter: 0xffd24c } });
});
builder.weights({ scatter: 2 });   // low natural frequency

2. Detect on completion

reelSet.events.on('spin:complete', ({ symbols }) => {
  const count = symbols.flat().filter((s) => s === 'scatter').length;
  if (count >= 3) enterFreeSpins(count * 5);
});

3. Anticipation on near-miss

If the server response says “2 scatters visible and reel 5 is spinning,” call setAnticipation before setResult to slow the last reel.

const promise = reelSet.spin();
setTimeout(() => {
  reelSet.setAnticipation([4]);       // slow reel 5
  reelSet.setResult(response.symbols);
}, 200);

4. Test it

The forceScatters(3, 'scatter') cheat makes this deterministic:

const { reelSet, spinAndLand } = createTestReelSet({
  reels: 5, visibleRows: 3, symbolIds: ['a','b','c','scatter'],
});
const engine = new CheatEngine({ reelCount: 5, visibleRows: 3, symbolIds: ['a','b','c','scatter'], seed: 1 });
engine.register({ id: 's', label: 's', enabled: true, cheat: forceScatters(3, 'scatter') });

await spinAndLand(engine.next().symbols);
expect(countSymbol(reelSet, 'scatter')).toBeGreaterThanOrEqual(3);

Cheats on this page

  • Force 3 scatters (default on). guarantees the trigger.
  • Force 4 scatters. retrigger territory.
  • Near-miss on reel 5. 2 scatters on reels 1–4, reel 5 blanks with anticipation.