@open-rgs/pay-anywhere
Total count, position irrelevant.
Counted anywhere
The simplest evaluator and the one with the largest effect on a game's shape, because it is almost always what starts the feature - and feature frequency is usually the biggest single term in RTP.
import { evalScatters, countAnywhere } from "@open-rgs/pay-anywhere";
const wins = evalScatters(grid, PAY, { roles });
countAnywhere(grid, "SC"); A wild never counts
Scatter substitution would manufacture triggers, and the trigger rate you balanced would not be the one you shipped. Only literal matches count here.
=2
countAnywhere(grid, "SC"); Triggering is not paying
Plenty of games trigger on three scatters while paying nothing for them, and plenty pay for two without triggering. The two questions stay separate.
≥3
import { triggersOn, shortOfTrigger } from "@open-rgs/pay-anywhere";
triggersOn(grid, "SC", 3);
shortOfTrigger(grid, "SC", 3);