Files
GaCy-GO/docs/currency-wars-current-consumer-notes.md
2026-10-28 18:54:43 +07:00

6.3 KiB

CW current consumer evidence — 2026-10-25

Target assembly SHA256: 4aa08a0706f27d2cf9951b61920c179140ece9ea94f7e34422c18e46922939b6. These observations belong to this target; the older base catalog/reference has not thereby been recaptured in full.

Tea Break

The bounded read-only tools/cw_teabreak_runtime.lua capture confirms that the current Client session sees route 2801, chapter 1, section 5 as a Bonfire node. Its BonfireEventIds contains 10200601. The live node parameter itself already contains this list. Thus missing Bonfire flags/event IDs are not the blocker at this particular node. Do not add guessed node data to fix it.

GridFightGameEventData is a set of change collectors, not the Bonfire choice processor. Its captured methods are Reset/Dispatch/GetCollector/RegisterCollector and initialization; no missing game-event protobuf component was established.

Focused native disassembly of _RefreshBonfireEventIds at RVA 0xdc635b0 (AMD64 exception-table bounds) copies the event list from the node parameter into the cached list. It does not resolve event configuration. The direct caller at 0xdc631f0 copies the Bonfire flag from the node parameter. Leaf getters at 0xdc64be0 and 0xdc64c00 independently read the cached flag/list; those two artifacts use explicit ranges because leaf getters have no unique unwind entry.

Artifacts: battle_diagnostics/cw54-teabreak-runtime-20261025.log, cw54-bonfire-refresh.asm, cw54-bonfire-refresh-caller.asm, cw54-is-bonfire.asm, and cw54-bonfire-ids.asm.

The unresolved step is the actual EnterBonfire caller/callback and its expected choice/action/effect state. The reference has no EnterBonfire implementation. The existing retcode-only success does not establish functioning Tea Break.

Entrance and exit

Passive exact-name loadbuffer capture, requested through package loader closures without executing those closures, produced the current S2 entrance and season router chunks under .runtime/named-baked-capture/.

The S2 entrance's _on_btn_start names the actual next module: Ui.GridFight.Division.Start.GridFightDivisionStartPage. Its _on_dispose only stops the CW menu audio state; no blanket camera/Canvas restoration is justified by that function. The button-overlap screenshot belongs to the Division Start screen, so its status/continue/end callbacks are the next required consumer, not a reason to move arbitrary buttons.

The season router selects Legacy/Latest presentation using GridFightModule.Instance.IsCurSessionLatest. It supplies real prefab paths, not a Bonfire event module path. No invented Bonfire page names were loaded.

Orb boundary

Grant/list commands already cover captured Orb IDs, consumables and Forge items. That is separate from dropping/opening Orbs. Current resources retain 529 Orb display rows and 478 combination rows, but lack a complete matching basic bonus pool plus the current open-Orb sender/callback mapping. The older reference's custom basic-Orb rewards are not a complete current-revision reward table.

The current runtime capture now includes MethodHandle values for GridFightOrbServerData. Resolving the native entry at MethodHandle + 8 and disassembling against the assembly hash above establishes the following:

  • GetOrb(List<uint>, bool), RVA 0xdbe3c50, forwards to the network sender at 0xe3ff8f0. That sender puts the list at request offset 0x18, the bool at 0x20, and sends command 0x21af (8623).
  • The current protocol table names 8623 IKMOCJBMGOJ; its current schema is repeated uint32 field 4 plus is_get_all field 9. This agrees with the native argument layout. Historical reference names for its response/notification are leads only: no new response pair is registered from historical IDs.
  • The nested <>c__DisplayClass11_0 is a count/filter closure, not the GetOrb response callback. Its method is <GetOrbCountByType>b__0 and its captured field is GridFightOrbType.
  • The actual nested OrbSummarizer consumes the sync update context. At RVA 0xdbe5370, IsConcernedWith accepts enum value 1. At 0xdbe5520, UpdateBefore requires the same value and uses the first context uint as the Orb UID; it looks up or creates the result for that UID. UpdateRemoveOrb at 0xdbe58a0 records removed UIDs. PreUpdateDone at 0xdbe5bb0 dispatches accumulated results only for UIDs included in the removed set.

Accordingly, an eventual proven Orb payout must use one ABPLALCHNFA group per Orb UID, with grid_update_src enum value 1, OOEOCGLLHFO = [orbUID], and the actual removal/loot updates in JKPJFKCBIEM. Sending ungrouped updates under the default context cannot construct the Client's Orb result through this consumer. This establishes the consumer context, not the missing reward rolls or the response callback.

The live session's Bonus is RPG.Client.GridFightBonusServerData, a bonus distributor with trait/initial-supply results and a distributor queue. It is not evidence for a random bonus-pool config repository. Four previously recorded candidate row names are absent from the inspected current config assembly; this is not proof that the data itself is absent or cannot be resolved under other names.

Artifacts: cw54-get-orb-sender.asm, cw54-get-orb-network-sender.asm, cw54-orb-consumer-rvas-20261025.json, and cw54-orb-context-{filter,before, remove,complete}.asm under battle_diagnostics/. Native resolution was a read-only, bounded Frida attachment, with the current process and module range checked first; no hooks, native gameplay calls, or memory writes were used.

Pending current consumer capture

tools/cw_teabreak_current_consumer.lua is prepared outside scripts/. It exports only three established live Preparation callback functions, their source/upvalue names, and eight fields per heartbeat from the actual session and Stage types. It skips Battle and sends no gameplay requests. It has not yet been staged or captured. This can identify the real loader/service path before attempting any Tea Break pending action implementation.

The captured Division Start _setup_btn_state already uses mutually exclusive start/continue visibility: continue follows _is_in_game, start follows its negation. The settle button uses _should_show_settle_btn. The overlap report therefore requires observing the live visibility/state application; moving buttons arbitrarily would not fix the proven state consumer.