Files
GaCy-GO/docs/peak-cycle-investigation.md

62 lines
3.3 KiB
Markdown

# AA cycle / star settlement investigation
The reported King in Check win displayed zero consumed cycles and no completed
star conditions. This is not yet a verified complete fix.
## Confirmed evidence
- The original win report has 36 battle turns, `RoundCnt=0` and stage 30501021.
The cached native PVEGameStatistics had `totalBattleRounds=0`,
`challengeTurnCount=0`, `challengeTurnLeft=7`. A battle turn is not a cycle;
the meaning and wire mapping of the additional counters remain unverified.
- `finishChallengeBattle` copies `RoundCnt` into Peak `CyclesUsed` and never
supplies `FinishedTargetList`. This accounts for the displayed values, but
does not prove that the battle used zero cycles or earned no stars.
- The original start packet had `RoundsLimit=40`: Peak 104 was configured
through the separate ChallengeMaze table with the same numeric ID.
- Read-only captures from the running Client's ConstValueClientExcelTable
contain `ChallengePeak_Mob_Turn_Limit=6`,
`ChallengePeak_Boss_Turn_Limit=6`, and
`ChallengePeak_HardBoss_Turn_Limit=2`.
- Native BattleTargetConfigExcelTable rows referenced by the installed Peak
tables are preserved in `resources/PeakBattleConfig.json`, together with
Client version, GameAssembly SHA-256 and capture SHA-256. Boss targets
3003/3004/3005 have thresholds 6/4/2; 3000 is a death-count condition.
These are BattleTargetConfig rows, not ChallengeTargetConfig rows.
The ignored evidence directory is `battle_diagnostics/peak-cycle-20261019`.
`Player.native-tables.log` is the source for the new resource. Temporary
probes inspect named types/tables with bounded work per heartbeat. A missing
BattleTargetExcelTable was corrected to the observed
BattleTargetConfigExcelTable; no assembly-wide reflection is used.
## Changes made
- Peak start and restart use an explicit AA battle type and the native
normal/boss/hard limit, independent of the ChallengeMaze ID namespace.
- Rules reject a mismatching Client version, missing provenance, unknown
event or missing native limit. No guessed fallback is installed.
- Full PVEBattleResult requests are archived under `battle_diagnostics`,
including obfuscated and unknown protobuf fields that the aggregate damage
report does not retain. JSON is for inspection; binary preserves unknowns.
- `tools/peak_result_snapshot.lua` reads the six named native counters and
target lists for comparison with the next server packet. Its temporary
copy in scripts must be removed after reproduction.
Focused Peak configuration and battle capture tests pass; a game-server build
passes. This does not verify Client battle loading, cycle display, stars,
medals or persistence. The existing unconditional unlock/medal response in
GetChallengePeakData has not been rewritten in this patch.
## Pending Client reproduction
The user agreed to complete another AA battle and leave the result screen
open. Compare its full result packet with native counters before assigning
semantic names to obfuscated fields or calculating FinishedTargetList. Do not
derive cycles from TotalBattleTurns, subtract from a guessed initial counter,
or grant every target merely because EndStatus is WIN.
The Main chat is concurrently repairing login in the same workspace and
restarting the shared servers. Stop additional restarts from this chat while
that deployment is in progress; both builds included the Peak source changes.