Old School Ops

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

Game server RF Online: Dragonborn v0.4.0 low · filed by cybercyber
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 by sceneTimer, whose only caller is chipWarStep, 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.

Client side

  • The HUD window is CGUIBattleScene (vtable 0xae5ba4, singleton [0x106a4a0], getter 0x726610). Its show function 0x726700(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 is 0x727070.
  • 19/2E handler 0x5aa080: scene 2 → code 1; scene 3 → code 2 or 3 (friendly/hostile by 0x5563f0); 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).sceneTimer 0x1407ca4a0 builds 19/2E: makeslice(0xb), opcode write 0x2e19 at 0x1407ca5af, body = scene byte from cw+0x80 + (scene timer − nowMS) clamped ≥ 0.
  • Its only caller is (*Server).chipWarStep 0x1407c3b40 (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..19 opcode 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).handleNewPosStart 0x140882640 → sendChipWarEntrySync 0x1407c2460 → (*chipWarSystem).entrySync 0x1407c1220, 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 (entrySync already 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.

Reported on version 0.4.0

Replies

Nobody has replied yet.

Sign in to comment.

Top xp sources

How xp works
Loading…

Open the full search page