75 lines
3.9 KiB
Markdown
75 lines
3.9 KiB
Markdown
# AA scene NPC recovery
|
||
|
||
## Observed loading failure
|
||
|
||
The current Client reports `CreateNPCMonster Invalid ID 4015011` while entering
|
||
Peak 204 from selected group 2. The source resource row supplies entrance
|
||
3013501, maze group 8, event 30502021 and NPC 4015011. This is a scene actor
|
||
creation failure, separate from refreshing the selected AA group.
|
||
|
||
`loadPeakResources` in `handlers_challenge.go` copies `NpcMonsterIDList` into
|
||
`PeakStageData.MonsterID`. `loadChallengeScene` in
|
||
`handlers_challenge_scene.go` forwards that value directly into
|
||
`SceneNpcMonsterInfo.MonsterId`; no current Client config lookup validates it.
|
||
The battle wave monster is a different identifier namespace and cannot be
|
||
converted into an adventure NPC by truncating digits.
|
||
|
||
## Evidence boundary
|
||
|
||
The existing `WorldBattleConfig.json` NPC catalog is a partial capture of 153
|
||
NPCs, from assembly SHA-256
|
||
`c5e02e6e984f7e5577c78b995a8efeee2d06ee22e67d484ad5e859c8bf21e144`.
|
||
An offline comparison finds that 42 of the 44 Peak rows refer to at least one
|
||
NPC outside that partial catalog. Absence from it is therefore insufficient
|
||
to declare an AA room invalid. Using it as a mandatory allow-list would disable
|
||
most AA rooms, including ones not demonstrated to fail.
|
||
|
||
The reported Client error establishes that this particular NPC failed in the
|
||
actual session. It does not establish a replacement NPC or prove that all
|
||
other Peak rows are invalid. No replacement ID, arbitrary fallback monster,
|
||
save migration was justified by the old partial catalog alone.
|
||
|
||
## Reference-backed correction prepared
|
||
|
||
The FFGO update inspected on 2026-10-26 contains an explicit
|
||
`challenge_peak_extra_data` JSON object at binary file offset `0x114c212`,
|
||
decoded length 9101 bytes, binary SHA-256
|
||
`235f5c3567f281cc99613ed84694ef23f492c15298dc868a8e78e6529f0cda86`.
|
||
Its Peak 204 mapping is NPC **4015010**, entrance **3013701**, maze group
|
||
**10**. These values come from the reference object, not ID arithmetic.
|
||
The full reference extraction is retained in
|
||
`battle_diagnostics/ffgo-20261026/challenge_peak_extra_data.json`.
|
||
|
||
`resources/ChallengePeakSceneOverrides.json` retains all 44 explicit mappings
|
||
and their provenance. `peak_scene_overrides.go` applies only the scene NPC,
|
||
entrance and maze group after loading canonical Peak group memberships.
|
||
Battle event IDs, waves, buffs, targets and saved/active runs are unchanged.
|
||
The loader validates provenance, duplicate/unknown IDs, group membership and
|
||
merged resource scene placements. A missing mapping or unusable placement
|
||
is stored as a configuration error. `StartChallengePeak` rejects it before
|
||
creating battle/run state or sending EnterScene; unknown Peak IDs also now
|
||
return the existing typed challenge-not-exist error instead of empty success.
|
||
|
||
The first 36 reference mappings have monster placements in raw `res.json`.
|
||
The last eight (Peak 1001–1104) require supplementary placements or further
|
||
capture; no placement is invented when the merged loader cannot supply one.
|
||
The resource is labeled reference evidence, not a captured Client table.
|
||
`go build ./internal/gameserver` succeeded; no tests were run, no deployment
|
||
was performed by this subtask, and actual Client NPC/scene acceptance remains
|
||
unverified.
|
||
|
||
## Next bounded capture
|
||
|
||
`tools/aa_npc_config_metadata.lua` is prepared outside `scripts/` and passes
|
||
Lua syntax parsing. It inspects only six named candidate types, at eight
|
||
members per heartbeat, to locate `NPCManager.CreateNPCMonster` and the
|
||
NPC/Peak flat config entry points. Missing candidate types are logged rather
|
||
than treated as proof that config is absent. It does not enumerate assembly
|
||
types, call getters, create actors, load scene graphs or send gameplay packets.
|
||
|
||
The Client process was not open during this offline inspection, so this probe
|
||
has not been staged or run. Once current native/config lookup evidence is
|
||
available, capture the relevant Peak row and each referenced NPC config to
|
||
verify or supersede the reference mapping. Client battle/scene success remains
|
||
unverified.
|