Files
HEROLL/HEROLL_RULES_v0.2.8/99-审计与证据追溯/findings.md
T

5.3 KiB
Raw Blame History

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.