95 lines
5.0 KiB
Markdown
95 lines
5.0 KiB
Markdown
# 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.
|