RF455-112 RF 4.55: the chip war timer HUD stays blank: no prep countdown (19/10 never sent) and the phase timer (19/2E) only goes out on a scene change, never at login
New
Game: RF 4.55 (Dragonborn), server v0.4.0, Windows build (stock gameserver.exe, SHA-256 0b9c9099…).
Client: the supported Taiwan build, RF_Online.bin SHA-256 46528aac…2bbc558 (2025-07-16), Language=Taiwan.
Expected (wiki): the 4.151 "Ataraxia's Arrival" patch notes list a chip war timer in the radar showing the
phase: preparation → running → neutral keeper → friendly/hostile keeper → mining.
Summary
- The client has the whole display: a battle-scene HUD window with a countdown and the phase labels "Preparation time", "Weakened Keeper", "Friendly Keeper", "Hostile Keeper" and "Mining time".
- It is fed by two messages. The server sends one of them, only at the exact moment of a phase change, and never sends the other:
- 19/2E
show_war_timer_zocl(u8 scene + i64 ms left) is built only bysceneTimer, whose only caller ischipWarStep, and only on a scene-code change. The chip war entry sync at login/world entry (handleNewPosStart→sendChipWarEntrySync→entrySync) sends only 19/2C and 19/2D — no timer. So a player who logs in mid-phase has a blank timer until the next transition, and the keeper/mining phases last 10 minutes to 3 hours. In practice (client started after the server) the HUD is almost always blank. - 19/10
notice_next_quest_inform_zocl(u16 seconds + u8 flag) is what shows the "Preparation time" countdown to the next war. The server has no encoder for it at all, so the preparation phase of the wiki's timer never appears.
- 19/2E
Client side
- The HUD window is
CGUIBattleScene(vtable0xae5ba4, singleton[0x106a4a0], getter0x726610). Its show function0x726700(seconds, phase_code)picks the label: code 1 → NDLanguage 0x18a8 "Weakened Keeper", 2 → 0x18a9 "Friendly Keeper", 3 → 0x18aa "Hostile Keeper", 4 → 0x18ab "Mining time", any other code → 0x18ac "Preparation time". Hide is0x727070. - 19/2E handler
0x5aa080: scene 2 → code 1; scene 3 → code 2 or 3 (friendly/hostile by0x5563f0); scene 4 → code 4 (gated by an avatar flag); ms == 0 or any other scene hides the window. - 19/10 handler
0x5a9170: shows the window with code 0xff ("Preparation time") and the u16 as the seconds, and prints chat line NDLanguage 0x625 with the minutes.
Server side (v0.4.0)
(*chipWarSystem).sceneTimer0x1407ca4a0builds 19/2E:makeslice(0xb), opcode write0x2e19at0x1407ca5af, body = scene byte fromcw+0x80+ (scene timer −nowMS) clamped ≥ 0.- Its only caller is
(*Server).chipWarStep0x1407c3b40(checked with a full-binary caller scan), and the call sits behind a "scene code changed this tick" compare. - The whole gameserver package builds only these type-0x19 opcodes (grep of every
0x..19opcode write over the package disassembly): 19/12, 19/13, 19/1C, 19/2C, 19/2D, 19/2E. The protocol package adds StoneEnter (19/01), KeeperEnter (19/03), RecvHSKQuest, CreateHolyMaster, HSKQuestActCum, HSKQuestSucc, StoneAlterOper, MoveToOwnStoneMapResult and KeepKeeperNotify. Nothing builds 19/10. - Entry sync:
(*Server).handleNewPosStart0x140882640→sendChipWarEntrySync0x1407c2460→(*chipWarSystem).entrySync0x1407c1220, which builds only 19/2C and 19/2D (stone and keeper enters).
Suggested fix
- Send 19/2E with the current scene and remaining time from the entry sync (
entrySyncalready has the chipWarSystem and its timers), so a player arriving mid-phase sees the timer at once. - Send 19/10 with the seconds until the next battle start (
[cw+0x1b8]− now) while the war is idle — on entry and when the next start is scheduled — so the "Preparation time" countdown works.
Local workaround
None yet.