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

102 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.