SlotMachines Framework
SingleSlotReelsSpinSystem settings
SingleSlotReelsSpinSystem extends the base reel system with per-slot timing controls. In addition to the common spin settings, it now supports a slotStopDelay option that waits after each slot in a column actually stops before triggering the next slot in that same column. Column-to-column pacing continues to use reelStopDelay, so the first slot of each column still fires on the familiar cadence while the remaining slots inherit the intra-column delay. This enables sequential stopping visuals without manual timers and keeps the machine symbol map in sync as every slot lands. When a delay is configured the system trims transient filler symbols and collapses each reel to the final landed symbol, so no duplicate entities remain on screen while the column settles. A dedicated slotStopDelay knob is now available in HoldAndWin.stories.ts to preview the staggered stop cadence directly in Storybook, and every numeric control in that story uses fractional steps for precise tuning.
SlotMultipliersSystem
SlotMultipliersSystem renders a configurable overlay entity for every reel cell based on machine.maps.slotMultipliers. The default SlotMultiplierEntity boots a Spine asset with in/out animations, injects a centred red label into the placehoder slot, and automatically hides itself when the outro finishes. The accompanying Storybook story (SlotMultipliersSystem.stories.ts) wires the feature into HoldAndWinMachine, generates random multiplier maps on every spin, and demonstrates how to swap the display entity via the system settings. The machine itself does not create or register the system; consumers should instantiate SlotMultipliersSystem, push it into the relevant state lists, and supply their preferred entity class when wiring machines together.
The system now keeps overlays alive across state transitions so multipliers that remain active do not replay their in animation. Clear slotMultipliers (or unregister the system) when the overlays should disappear entirely.
MaskingSystem
MaskingSystem manages a reusable rectangular mask sized through system settings (defaulting to the machine configuration). When active it walks through every child entity each frame and synchronises their mask property with their isMasked flag: entities opt-in by toggling the flag to true, at which point the system applies its mask if no other mask is present; when the flag returns to false the system restores the entity's original rendering by clearing its mask. The mask graphic is created once, attached to the machine container, tinted red for easy debugging, and automatically refreshed when the system enters or leaves a state. Set the new enabled setting to false to globally disable masking without deregistering the system; the Storybook controls mirror this flag so designers can toggle masks while keeping the state machine intact.
ReelsSpinSystem now toggles isMasked for each symbol while its reel state is Spinning and keeps the flag active through deceleration, clearing it only once the reel enters Bouncing or Stopped. This keeps the mask in place for every symbol that is still visibly moving and ensures it disappears as soon as the reel finishes its bounce or comes to rest.
Storybook now ships focused demos for the masking and blur orchestration helpers:
src/stories/MaskingSystem.stories.tsmirrors the standard spin story boot flow and forwards the enable/size controls straight intoMaskingSystem#setSettings, making it easy to iterate on viewport dimensions while reels spin.src/stories/BlurSymbolsSystem.stories.tsreuses the same template but exposes motion blur velocity, kernel size, and offset knobs that feed intoBlurSymbolsSystem#setSettingsfor rapid strength tuning.