# Findings ## F-STAGE-001 - title: Default bossSpawnRuleValue is the exact Normal-stage floor count - category: reverse_algo - status: validated - evidence_ids: [E-STAGE-CONFIG-001] - location: stageinfo.csv joined to board.csv on EPlayMode=Normal and Stage - impact: Stage 0 is exactly ten stat-bearing loops before boss_0; DiceGauge 50 must not be interpreted as a floor count. - confidence: high - remediation: Drive Default stage length from bossSpawnRuleValue and require a matching board row for every zero-based loop. ## F-REFRESH-001 - title: Board progression is additive and good-tile injection count is not fixed at two - category: reverse_algo - status: validated - evidence_ids: [E-STAGE-NATIVE-001, E-STAGE-WEB-001] - location: InitNewGame/SpawnInitalTiles/AddNextLoopTiles native state machines - impact: The earlier MVP rule of two guaranteed good tiles per floor does not reproduce the original board economy. - confidence: high - remediation: Initialize with AddRandomGoodTiles(8), then call AddRandomGoodTiles(loopIndex+2) and AddRandomEnemyTile(enemyTilesPerLoop,false) at loop transitions. ## F-TILE-001 - title: Player good tiles use a shuffled OutGameTile deck without replacement per deck cycle - category: reverse_algo - status: validated - evidence_ids: [E-STAGE-CONFIG-001, E-STAGE-NATIVE-001] - location: BoardController.GetNextMetadata/GetRandomOutGameTileMetas/AddRandomGoodTiles - impact: Direct equal-weight selection from all GoodEvent rows produces the wrong initial board and ignores player loadout. - confidence: high - remediation: Build the deck from eligible player metas, advance a cached index, and reshuffle only at exhaustion. ## F-GAUGE-001 - title: DiceGauge 50 is a per-settlement increment into a separate 0..100 runtime gauge - category: reverse_algo - status: validated - evidence_ids: [E-STAGE-NATIVE-001] - location: tile processing ExecuteAsync @ 0x553EEEC and MoveTile @ 0x56BF914 - impact: Treating 50 as a threshold or merging it with BossDiceCounter breaks pressure timing and save restoration. - confidence: high - remediation: Keep runtimeBossGauge and BossDiceCounter separate; clamp additions and clear the gauge after the spawn sequence. ## F-GAUGE-002 - title: Original DiceGauge pressure cycle is two-roll buildup plus four-roll countdown and four unique non-blessing conversions - category: design - status: validated - evidence_ids: [E-STAGE-NATIVE-001, E-STAGE-RUNTIME-001] - location: DiceGauge movement and boss tile generation flow - impact: Applying the cycle to Default stages or firing immediately after two rolls changes the original pacing. - confidence: high for observed standard path; partial for insufficient-candidate fallback - remediation: Enable only for DiceGauge stages and keep candidate-shortage behavior configurable until matching footage is captured. ## F-REFRESH-002 - title: The start tile advances floor and hosts a shop every three display floors - category: design - status: corroborated - evidence_ids: [E-STAGE-WEB-001, E-STAGE-NATIVE-001] - location: Start tile behavior and BoardController shopPerLoop branch - impact: Treating the shop as an ordinary random tile changes access cadence. - confidence: medium-high - remediation: Attach shop appearance to the start tile at displayFloor mod 3 == 0. ## F-EVENT-001 - title: The requested six Good Tiles are independent event state machines - category: reverse_algo - status: validated - evidence_ids: [E-TILE-CONFIG-001, E-TILE-NATIVE-001, E-TILE-RUNTIME-001] - location: NewTile IDs 137/141/143/151/164/169 and their ExecuteAsync/UI classes - impact: Reusing a single generic reward popup loses event-specific input, failure and continuation rules. - confidence: high - remediation: Implement each event as a separately persisted state machine with a single completion callback. ## F-EVENT-002 - title: Lucky Scratch is GoodEventSpito 169, not GoodEventLotto 142 - category: reverse_mapping - status: validated - evidence_ids: [E-TILE-CONFIG-001, E-TILE-NATIVE-001, E-TILE-RUNTIME-001] - location: newtile values 30,10,1,10,50,40 and ScratchPainter/SpitoEventView - impact: Mapping it to Lotto imports the wrong five-draw cost and reward rules. - confidence: high - remediation: Use weighted 30/10/1 point prizes at 10/50/40 and scratch-to-reveal input. ## F-EVENT-003 - title: Chest generates three gear items and Dice Battle has no supported entry stake - category: design - status: validated - evidence_ids: [E-TILE-RUNTIME-001, E-TILE-NATIVE-001, E-TILE-WEB-001] - location: GoodEventChest spawn loop and BlackJackView reward flow - impact: The previous one-item chest and three-point stake materially underpay these tiles. - confidence: high for Chest; medium-high for no-stake mapping - remediation: Generate three normal-loot gear instances; interpret Blackjack config as three starting dice and ten-point base reward. ## F-CORNER-001 - title: Core Corner set is 126–129 and has passive, timed and batch-mutation semantics - category: reverse_mapping - status: validated - evidence_ids: [E-TILE-CONFIG-001, E-TILE-NATIVE-001, E-TILE-WEB-001] - location: ingamereward item IDs 126–129 and Corner event classes - impact: Treating every enabled Corner as one of the base four breaks unlocks and board pacing. - confidence: high except Housing Support point scale - remediation: Keep Piggy Bank, Race, Flower Garden and Housing Support as the core four; gate later Corners independently.