Hold and Win — Presentation Module

Optional module for slot-presentation-flow-template.md. Copy into a game-specific presentation document and replace every [GAME TODO]. Backend feature state, locked cells, values, counters, jackpots and payout are authoritative. Every unique phase below must link to a Visual Ref ID defined by the base template.

1. Feature flow

flowchart TD
    A["Base/FS trigger cells presented"] --> B["Hold and Win intro popup"]
    B --> C["Reveal initial locked cells + values"]
    C --> D["Show respins remaining"]
    D --> E["Request/present one feature step"]
    E --> F["Spin unlocked cells"]
    F --> G{"New locked cells?"}
    G -- "Yes" --> H["Land → value reveal → lock"]
    H --> I["Reset/add counter per contract"]
    G -- "No" --> J["Miss resolve → decrement counter"]
    I --> K{"Feature terminal?"}
    J --> K
    K -- "No" --> E
    K -- "Yes" --> L["Collector/jackpot presentation if awarded"]
    L --> M["Authoritative feature total"]
    M --> N["Outro → restore base/FS presentation"]

2. Game contract placeholders

[GAME TODO] Trigger condition:
[GAME TODO] Initial respins:
[GAME TODO] Grid size:
[GAME TODO] Locked-cell symbol/type:
[GAME TODO] Value source and units:
[GAME TODO] Counter reset/add rule after a hit:
[GAME TODO] Terminal condition:
[GAME TODO] Collector rule:
[GAME TODO] Mini/Minor/Major/Grand or other fixed awards:
[GAME TODO] Can trigger from base, Free Spins, or both:
[GAME TODO] Return destination after feature closes:
[GAME TODO] Visual refs for trigger, lock, respin, reset, collector/jackpot and outro:

3. Phase sheet

PhaseAuthoritative trigger/dataRequired presentationAnimation / audio commentSkippableCompletion/fallback
Trigger handoverFeature appears in round receipts/stateFinish triggering round presentation before changing scene[GAME TODO] Trigger-cell animation + sting:[TODO]Preserve open feature if presentation fails
Intro popupFeature is open and initial state is knownShow feature name, awarded respins and instructions[GAME TODO] Popup IN/idle/OUT:[TODO]Close to initialized feature board, never to paid Ready
Initial lock revealInitial locked cells from backendReveal each locked cell at its exact position and value[GAME TODO] Lock/value reveal order:YesSnap every cell to authoritative locked state
Respin startNext feature step acceptedAnimate only unlocked cells[GAME TODO] Spin start/loop:Optional fast stopNever move locked cells
New coin landingStep reports newly locked cell(s)Land, reveal value, lock, then update counter[GAME TODO] Landing/impact/value animation:YesSnap cell/value and counter to response
MissNo newly locked cellsShort miss resolve; decrement shown counter[GAME TODO] Miss animation/audio:YesSnap counter to response
Counter resetContract resets/adds respins after hitUpdate only after new-lock presentation[GAME TODO] Counter pulse/reset:YesSnap to authoritative remaining count
Collector/jackpotReceipt awards collector/fixed jackpotPresent components once, in declared order[GAME TODO] Collector and tier popup:YesSnap award and continue to total
Feature totalTerminal receipt/stateCount to authoritative total; wallet already settled by server contract[GAME TODO] Total popup/count-up:YesSnap exact total
OutroTotal finalizedClear feature UI and restore correct base/FS state[GAME TODO] Board exit/scene handover:YesRemove all feature listeners/timers/popups

4. Locked-cell rules

  • A locked cell never spins, shifts or receives a different value unless the backend explicitly returns a transformation for that cell.
  • newly_landed/equivalent drives landing animation; the full locked set restores state and supports reconnect. Do not replay every locked-cell landing on each step.
  • Cell position and value are bound by stable coordinates/index, never by array order.
  • Value labels remain visible after landing and through resize/reconnect.
  • Multiple new cells may land together or in the exact game-defined order: [GAME TODO].

5. Counter and terminal rules

  • The displayed respin counter mirrors the backend state; the client does not decrement/reset it speculatively.
  • A hit animation finishes before the reset/add animation unless the game-specific document says they run together.
  • 0 remaining is presented only when the backend closes the feature or sends an explicit terminal state. Do not wait for a state the protocol never emits.
  • A full board, collector award or fixed jackpot may terminate/alter the feature only when present in the authoritative receipt.

6. Popup inventory

PopupRequired contentBlocks progressionClose rule[GAME TODO] animation comment
Feature IntroName, starting respins, concise ruleYesContinue/auto-close after approved hold[GAME TODO]
Jackpot TierTier and authoritative awardYes while required presentation runsAuto/skip after final state[GAME TODO]
Feature TotalAuthoritative totalYes until finalizedContinue/auto-close[GAME TODO]

7. Reconnect, skip and failure

  • Bootstrap/recovery must restore the full locked set, values, remaining respins and accumulated total.
  • A recovered step must not mint a new idempotency key or replay a monetary operation.
  • Skip snaps new cells, values, counter and totals to the authoritative terminal visual state.
  • Required presentation failure parks/reconciles the round; it must not enable another paid wager.
  • Scene cleanup removes timers/listeners/tweens without clearing durable feature state.

8. Deterministic DEV scenarios

  • Trigger with minimum qualifying cells.
  • First respin miss.
  • One new cell resets/adds counter.
  • Multiple cells land in one step.
  • Collector or fixed jackpot award, if supported.
  • Full-board terminal case.
  • Counter-exhaustion terminal case.
  • Reconnect before a step and after a landed cell.
  • Skip during landing, jackpot and total popup.