Files

94 lines
5.0 KiB
Markdown
Raw Permalink Normal View History

2026-10-28 18:54:43 +07:00
# FFGO CW resource reference, 2026-10-26
The updated reference executable was inspected offline. It was not launched,
and its saves/configuration were not modified. Its SHA256 is
`235f5c3567f281cc99613ed84694ef23f492c15298dc868a8e78e6529f0cda86`.
## Reproducible extraction
`tools/export_ffgo_embedded_resources.py --binary <reference executable>
--output <evidence directory>` extracts bounded gzip members and decodes the
Excel resource through the executable's own generated protobuf descriptors.
It requires Python protobuf and the sibling `dump_embedded_proto.py`.
No executable code from the reference is run.
Evidence is retained under `battle_diagnostics/ffgo-20261026/`:
- `resource-manifest.json`: binary identity, descriptor identities, exact gzip
offsets/lengths, compressed and uncompressed hashes.
- `excel-data.json`: full decoded `excel.ExcelData`, including NPC monsters,
challenge/Peak data, activities, shops and CW tables.
- `gridfight-excel-data.json`: CW-only subset, 72 tables.
- `gridfight-custom-data.json`: 1,253 reference-authored config files and two
action schemas. These are **not original Client level JSON**.
- `resource-inventory.json`: table counts and the exact currently blocked Tea
Break event/options/custom rule.
- `challenge_peak_extra_data.json`: separate embedded JSON supplement,
11 groups/44 Peak entries, file offset `0x114c212`, 9,101 decoded bytes.
- `load-excel.asm`: static loader evidence. `LoadExcel` at RVA `0xb79160`
reads embedded `resources/excel.gz`, creates a gzip reader, reads all bytes,
and unmarshals the protobuf into the global Excel data object.
The Excel gzip member starts at file offset `0x11c9fef`, compressed size
962,600 bytes, uncompressed size 6,008,625. The CW custom JSON gzip member
starts at `0x1153105`, compressed size 25,684, uncompressed size 267,251.
The extractor preserves protobuf int64 values as decimal strings in JSON.
## New usable CW evidence
The extracted tables include 38 Bonfire events, 72 Bonfire options, 3 Bonfire
heal rows, 110 bonus pools, 1,120 basic bonuses, 480 combination bonuses,
532 Orbs, 493 node templates/routes, 629 special avatars and 411 augments.
This supplies the previously missing reference bonus-pool recipes. It does
not by itself establish current Client response bindings or packet order.
For the blocked event `10200601`, the reference Excel row states PetPalID 2
and DialogID `1020060101`. Its option 1 states:
- JsonPath: `Config/Level/GridFight/petpal/bonfire/GridFightBonfire102006011.json`
- DialogID: `1020060102`
- EffectParamList: `[40]`
- OptionShowType: `None`
The corresponding reference-authored custom rule is
`petpal/bonfire/GridFightBonfire102006011.json`: `TeaBreakOption`, immediate
`SetRule` action, rule name `PetPalStarDown`, value `#1` (the parameter 40).
It must not be replaced with a generic healing reward. Separate Bonfire heal
rows specify 20 for each of chapters 1, 2 and 3.
Basic bonus, random pool and combination bonus IDs are separate lookup
namespaces. For example basic BonusID 1 is Gold with amount parameter 1;
there is no random pool row with RandomBonusID 1. The existing captured Orb
197 points to BonusID 1, so trying to resolve every Orb through the random
pool table would fail for this legitimate direct basic bonus.
## Saved state is supporting evidence, not reusable configuration
The reference's external `data-in-game.json` contains an active season 2,
route 1800 run at node 1-2, 23 pregenerated nodes and one completed battle.
Its first two nodes retain per-monster `drop_orb_ids`, and its saved effect
state contains `OrbsOpened = 5`. This shows the reference persists those
concepts, but does not capture the packets that awarded/opened them.
That run must not replace this project's route 2801 run or player save.
No avatar snapshots or player inventory from the reference were imported.
The reference's static route 2801 chapter 1 section 5 points to node template
280115, whose row is `Monster`, StageID 70000008, ParamList `[902]`, penalty
92204 and basic gold 10. The captured live Client run is instead a Tea Break
with event 10200601 at that position. A PetPal/dynamic node override may explain
this; static route data must not overwrite the active run. The reference does
explicitly link PetPal 2 to effect 102006, whose parameter is event 10200601.
## Compatibility and limits
The reference supports multiple Client revision dispatches; a table's presence
in its embedded Excel is not independent proof that it matches the connected
Client's revision. Compare relevant rows with captured Client data and retain
this binary's provenance before importing a compatible subset. Resolve CmdIDs
through the current named command table; never transplant historical numbers.
The custom files label 822 entries `Implemented`, 42 `Partial`, 116
`NotImplemented`, 93 `BattleOnly`, 129 `Code` and 51 `Excel`. These are labels
inside the reference's own authored data, **not verification that those
features work in this project or even a runtime verification of the reference**.
Gameplay integration and Client verification remain separate work.