Gatcha Gauntlet

Category: Systems Architecture & Lottery Mechanics
Context: Gatcha Gauntlet features a fully realized virtual scratch-off ticket system. It is heavily systems-driven, simulating probability, grid evaluation, and payout multiplier logic often found in real-world gacha or casino mechanics. The core of this system resides in ScratchEvaluator.cs, the live ScratchRules.asset, and the runtime ScratchArtLibrary.asset.

Unscratched ticket cover texture used in Gatcha Gauntlet.

Ticket Cover
The cover texture referenced by ScratchArtLibrary.asset before the scratch surface reveals the board.

Berries symbol used in Gatcha Gauntlet.

Berries
Frequent pair symbol with lower payouts, useful for keeping the board visibly active.

Gold symbol used in Gatcha Gauntlet.

Gold
Mid-tier symbol that helps the grid feel materially different from pure dud churn.

Sigil symbol used in Gatcha Gauntlet.

Sigil
Rare symbol with sharper payout leverage and stronger near-miss value.

Chalice symbol used in Gatcha Gauntlet.

Chalice
High-value standard symbol used by the evaluator before full-house logic is applied.

Dud symbol used in Gatcha Gauntlet.

Dud
The dud texture is the dominant symbol in the live rules asset, which is why the rescue logic exists at all.

Ticket Lifecycle

The full loop from generation to outcome follows a strict pipeline. TicketManager orchestrates the state, ScratchEvaluator handles the math, and TicketResolver watches the physical scratch progress to trigger resolution.

Gatcha Gauntlet Game Loop

The survival payout (baseSurvivalPayout * (1 + growth)^dayIndex) scales with session progression, displayed at ticket creation so the player knows the stakes before scratching. Jackpot growth on losses creates an escalating tension curve — the longer a losing streak runs, the larger the eventual jackpot becomes.

Grid Generation & Anti-Clustering

When a new virtual ticket is generated, ScratchEvaluator.GenerateGrid() creates a 2x4 grid evaluated row-major.

  1. Weighted Symbol Drops: The live ScratchRules.asset assigns relative weights of Berries (3), Gold (2), Sigils (1), Chalice (1), and Duds (14). Using ErisRandom.NextInt (backed by the same Kairos entropy pipeline used in Numbers), the evaluator drops these symbols into the 8 spaces.
  2. Anti-Clustering Logic: The live board is dud-heavy by design. With those weights, there is roughly a 7.7% chance of generating a board that is entirely duds. The evaluator intercepts this case and promotes two random positions into non-dud symbols. This is not a pity timer — it is a structural guarantee that every ticket has near-miss psychological tension. The player should always feel like they almost had something.

The Payout Cascade

Once the player clears the ScratchSurface past the 95% reveal threshold, TicketResolver fires and ScratchEvaluator.EvaluatePayout() runs the full cascade. The rules interlock in a specific order:

Payout Cascade Grid Evaluation

The cascade is deliberately layered so that small wins (column pairs) are common enough to sustain engagement, while the explosive outcomes (full house, row multipliers stacking with column multipliers) are mathematically rare but structurally possible. The column multiplier cap (2) prevents the economy from breaking when multiple columns hit simultaneously.

Win Damage

Winning is not free. When a ticket resolves as a win, PlayerManager.CalculateWinDamage(payout, jackpot) applies HP damage to the player proportional to the payout size. A Sigil full house that hits the jackpot is the best possible outcome — but it also hits the hardest. This creates a risk-reward tension where the player is simultaneously hoping for and dreading a big win.

Why The Symbols Matter

ScratchArtLibrary.asset maps each ScratchSymbol enum directly to a texture. The evaluator is not acting on abstract enums alone — it is acting on the exact icon language the player reads while scratching. The visual distinction between symbols (warm Berries, metallic Gold, arcane Sigils, ornate Chalice, flat Dud) is part of the near-miss psychology: the player needs to instantly recognize what they have and what they almost had.