# FFGO CW reference inspection — 2026-10-26 ## Artifact identity and scope The explicitly selected updated FFGO executable was inspected as a local, read-only reference. It was not started, connected to the game, or allowed to modify a player save. - SHA-256: `235f5c3567f281cc99613ed84694ef23f492c15298dc868a8e78e6529f0cda86`. - Embedded revision: `440df54730ba64935e9ad7ecae9147e55ad279a9`. - Embedded build time: `2026-10-26T02:49:04Z`; Go build metadata: `go1.27.3`. - Embedded metadata is reference evidence, not proof of official Client data or runtime feature completeness. ## Reproducible dumps All paths below are relative to the repository. Machine-specific installation paths are supplied to tools as arguments and are not built into source. `battle_diagnostics/ffgo-20261026/` contains: | Artifact | Contents | |---|---| | `cmdids.json` | 2,860 named command enum entries extracted from the complete embedded protocol descriptor | | `starrail.descriptor.pb` / `.json` | 4,939 top-level messages and 472 enums, including field numbers, types and oneofs | | `gridfight_excel.descriptor.pb` / `.json` | 75 generated Excel schema messages | | `functions.json` | 78,891 compiled Go function names, addresses and sizes recovered from pclntab | | `gridfight-workflow.json` | Selected compiled functions, disassembly and direct-call references; includes generated protobuf/resource functions | | `cw-handlers.json` | 37 named CW entry handlers and their direct calls; the service contains 1,469 compiled functions | | `cw-command-comparison.json` | 109 CW commands compared with the repository command-name table and compiled message schemas | | `cw-message-mapping.json` | Exact recursive wire-shape matches, with explicit limitations | | `gridfight-excel-data.json` | Complete extracted CW tables; reward pools, basic bonuses, bonfire events/options, routes and Orbs | | `gridfight-custom-data.json` | FFGO-authored declarative rules; these are implementation recipes, not original Client JSON | | `resource-manifest.json` | Embedded blob offsets, compressed/uncompressed hashes and extraction provenance | | `challenge_peak_extra_data.json` | Explicit adventure NPC/entrance/group mappings for 44 AA stages | Tools: ```powershell python tools/dump_go_workflow.py --binary --output python tools/dump_embedded_proto.py --binary --descriptor proto/starrail.proto --output python tools/dump_embedded_proto.py --binary --descriptor proto/gridfight_excel.proto --output python tools/export_ffgo_embedded_resources.py --binary --output protoc --proto_path=. --descriptor_set_out= protocol/proto/StarRail.proto protocol/proto/current_handlers.proto python tools/compare_cw_reference_protocol.py --reference --current --commands protocol/proto/upstream_cmdids.go --output ``` ## Protocol compatibility Of the 109 CW command entries, 60 have the same current name. The remaining 49 include renamed and obfuscated messages; numerical agreement alone does not establish compatibility. Recursive comparison finds 83 exact message wire shapes and 26 differences. In particular, large GetData, PendingAction, SyncUpdate and battle messages must not be copied wholesale from FFGO. Matching checks field numbers, scalar/message types, repeated cardinality and oneof partitions recursively. It does not establish enum meanings, business semantics or Client success. No numeric aliases or extra response IDs are registered by these dump tools. Confirmed Orb comparison leads: - FFGO `GridFightUseOrbCsReq` corresponds to current `IKMOCJBMGOJ`, with repeated UID field 4 and `is_get_all` field 9. - FFGO `GridFightUseOrbScRsp` corresponds to current `PNHDGCBLPGD`, uint32 retcode field 3. - The notification's nested drop structure differs. Do not forward the FFGO notification bytes to the current Client without translating that structure. ## Workflow findings The updated reference contains real EnterBonfire implementation, unlike the previously inspected reference. `OnGridFightEnterBonfireCsReq` at RVA `0xc697e0` calls `gfBonfireEnter` (`0xc69940`), sends the state update before acknowledgement, and saves the changed state. The pending queue can resend an existing bonfire action or construct a type-11 action from the node's event list. Event options, reward resolution and subsequent selection are separate operations; retcode-only success cannot create the menu by itself. Current route 2801's event `10200601` has an FFGO custom option involving the `PetPalStarDown` rule. A working implementation must retain and apply the effect; consuming the choice as a no-op would be incorrect. The extracted reference player is on route 1800. Its node list, positions, inventory and progress are not imported into this server's route-2801 save. ## AA recovery The embedded mapping identifies Peak 204 as NPC `4015010`, entrance `3013701`, maze group `10`. Our old configuration used NPC `4015011`, entrance `3013501`, group `8`, and the actual Client rejected that NPC during scene creation. The explicit mapping is now preserved in an editable resource with reference provenance. See `aa-scene-npc-recovery.md` for validation and Client acceptance status. Battle wave IDs and buffs are not replaced with adventure NPC IDs. ## Completion boundary Extraction and source compilation do not prove CW, AA or a newly ported rule works in the Client. FFGO itself declares partial/unimplemented/battle-only recipes. Newly extracted schemas and recipes are leads to implement and verify, not a claim that all modes are now complete.