Files
GaCy-GO/docs/comic-dessert-current-contract.md
2026-10-28 18:54:43 +07:00

65 lines
3.3 KiB
Markdown

# ComicDessert current Client contract
## Proven data and preview entry
`ComicDessertCatalog.json` retains all four Cycle rows and fifteen Level rows
captured from the current Client assembly. The catalog preserves 64-bit TextID
hashes, requires a complete two-table capture, rejects duplicate IDs, and checks
that each cycle references existing levels. It includes the ordinary cycle
levels and the Greedy Feast and Long Tail configuration paths; those paths alone
do not prove that their gameplay is implemented.
Current assembly SHA256:
`4aa08a0706f27d2cf9951b61920c179140ece9ea94f7e34422c18e46922939b6`.
The native GetData consumer at `0xd4dbc60` reads response offset `+0x3c` into
`_SetUpProgress` (`0xd4dbcf0`). The protobuf getter for `FNIAAEAFGDE` reads that
same offset (`0x1fc3dcd0`). Progress synchronization at `0x16c8dab0` writes the
cycle ID at `+0x18`; the actual `CurrentCycleId` getter (`0x16c8d980`) reads
`+0x18`. `HNOCFELOAFJ` supplies the completed-level collection.
The root implementation responds to GetData with the resource's first cycle,
without fabricated completed levels, upgrades, currency or rewards. This is
preview state, not a working cooking-run implementation. A zero cycle ID led to
the Date dialog view-model failure observed before this response existed.
## Request family
These are the actual current command-table names, paired from the live concrete
NetworkService method signatures. Numeric IDs are documentation of the current
table, not aliases to register in source.
| Operation | Request | Response | Current IDs |
|---|---|---|---|
| GetData | `MGCJKEEOPEC` | `LPLCFFGANFC` | 10215 → 10208 |
| StartLevel | `MECNLNGKDHA` | `CIDKLLMAIGP` | 10204 → 10220 |
| FinishLevel | `CBMLONMBLNE` | `PEFBGOANFHP` | 10216 → 10209 |
| UpgradeDevice | `DONCOCHMEBC` | `NLJOCMODADF` | 10207 → 10206 |
| ChangeCycle | `JLBJPLGJBFF` | `NBIBDLLLCLH` | 10213 → 10212 |
| StartLongTail | `FHJMEFOOOAB` | `PIGILFCALBA` | 10211 → 10218 |
| FinishLongTail | `CGHKNHAJBGL` | `CMHFBLDNPGB` | 10219 → 10210 |
The concrete NetworkService has `OFHMHPKEECI(UInt32)` returning
`IPromise<CIDKLLMAIGP>` and `<StartLevelAsync>b__2_0(CIDKLLMAIGP)`.
`StartLevel` request carries `level_id` at tag 4. Its response additionally has
`HOGEMAHFFEF` (uint32, tag 1) and `NLMEEEKBPKO` (string, tag 2), plus retcode at
tag 12. The purpose and required values of the uint/string have **not** been
proven. A retcode-only success must not be advertised as working gameplay.
## Next bounded capture
`tools/comic_level_start_metadata.lua` is inactive outside `scripts/`. It reads
the already constructed NetworkService and LevelStartFlowService, plus the
actual Start response type obtained from the NetworkService return type. It
records at most eight methods/properties per non-battle heartbeat and invokes
no gameplay or scene methods.
After capture, resolve current-process MethodHandles through record `+8`, verify
the resulting entry lies inside the current GameAssembly, and disassemble the
StartLevel consumer and response getters. Handles from an exited Client cannot
be reused. Map the string/uint consumers before implementing a successful Start
response or persistent cooking run.
No Start/Finish/Upgrade/ChangeCycle/LongTail implementation, deployment, runtime
draw, save mutation or gameplay confirmation was performed by the entry audit.