Initial import of HEROLL source and design documents

This commit is contained in:
toshiocn
2026-10-26 16:05:39 +08:00
commit fdb55672c1
1846 changed files with 290692 additions and 0 deletions
@@ -0,0 +1,101 @@
# 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.