Old School Ops

RF15-136 RF-1.5 cannot enter the game world

Game server RF Online 1.5 v0.3.0 blocker · filed by jasmine1006 18h ago
New

RF Online 1.5 Emulator v0.3.0 — Server Bug Report

Client Black Screen on Enter World (missing 030E special/animus response)

Report date: 2026-10-07 Submitter: RF Online 1.5 private-server operator (GoMMO / oldschoolops RF15 emulator) Severity: Critical — no character can enter the game world on v0.3.0

---

1) Summary

GoMMO RF Online 1.5 emulator v0.3.0 gameserver no longer sends the 030E (special / animus) data frame in response to the client's Enter World request 030D. It only sends 030F. The official A013 client requires 030E before it will advance to 03/01 NewPosStart; without it the client hangs at log line 113) animus result, never sends 03/01, and the game shows a permanent black screen on Enter World.

  • Affects all races (verified: Accretia, Cora, Bellato all black-screen).
  • Confirmed not data / config / script related: v0.2.2 and v0.3.0 were run against the same database (gamedata_rf15.db, 639 MB) and the same patched client; the only difference is the gameserver.exe binary. v0.2.2 enters the world correctly, v0.3.0 does not.
  • Determined to be a v0.3.0 program regression, most likely introduced by the animus-logic rework listed in the 0.3.0 changelog (RF15-132 "Class change animus rewards", RF15-133 "Animus movement").

---

2) Environment

ItemValue
GameRF Online 1.5 "Defcon1 - Cocked Pistol"
ClientOfficial RF15 client, A013 build
Client binaryRF_Online.bin, patched to pass HackShield (SHA1 6273AB054AED26F554FF70B2793DF7175E630B96)
Broken serverE:\rf15-v0.3.0 — GoMMO RF15 v0.3.0, Build 2026-10-06 20:46 (UTC)
Working server (reference)E:\rf15-v0.2.2 — banner reports v0.2.3, Build Oct 3 2026
Database (identical in both tests)gamedata_rf15.db 639,619,072 B; gommo_rf15.db; gommo_accounts.db
Test charactersAccretia ARB0 (Lv1), plus newly created Cora and Bellato characters
OSWindows 10 2009, 16 GB RAM, Ryzen 9 7940H + RTX 4060 Laptop
Packet captureNpcap loopback (\Device\NPF_Loopback), TCP port 27810

Both tests used the same database files and the same client. Only the server program version differed.

---

3) Steps to Reproduce

  1. Start the v0.3.0 server (GoMMO_Manager → gameserver, listens on 0.0.0.0:27810).
  2. Start the client and log in through the launcher (launcher auth succeeds: 15/0C → 15/03 → 15/04 → 15/06 → 15/07 → 15/08 handoff).
  3. Reach character select; the character list loads (EnterWorld 01/01, char list 01/09, SelChar 01/0E all succeed).
  4. Select any character and press Enter World.
  5. Result: permanent black screen. Client log stops at 113) animus result; the client never sends 03/01 NewPosStart.

Reproduced with every race/character tested (Accretia, Cora, Bellato).

---

4) Observed Behavior — Packet Capture Comparison

Protocol: 2-byte little-endian length + 2-byte opcode + payload.

4.1 Reference: v0.2.2 server — Enter World WORKS (client reaches the game)
[C>S] req(0303)   -> [S>C] base(0304)      # character base data
[C>S] req(0305)   -> [S>C] inven(0306)      # inventory
[C>S] req(0309)   -> [S>C] cum(030A)
[C>S] req(0307)   -> [S>C] force(0308)
[C>S] req(030B)   -> [S>C] quest(030C)
[S>C] 0339(00)
[C>S] req(030D)   -> [S>C] special(030E)    # <-- special/animus frame PRESENT (all-zero payload)
                   -> [S>C] 030F(all-zero)
# client continues the enter-world sequence:
[C>S] 0336 -> [S>C] 0337(0000)
[C>S] 032E -> [S>C] 032D(world data)
[C>S] 0C08 / 0331(02) / 0D68(02) -> [S>C] 0C09(npc list) / 0332 / 0D69
[C>S] 1B6F(ff) -> [S>C] 1B70(00ff)
[C>S] NewPosStart(0301)   # <-- client enters the world successfully
4.2 Broken: v0.3.0 server — Enter World BLACK SCREEN (client hangs)
[C>S] req(0303)   -> [S>C] base(0304)
[C>S] req(0305)   -> [S>C] inven(0306)
[C>S] req(0309)   -> [S>C] cum(030A)
[C>S] req(0307)   -> [S>C] force(0308)
[C>S] req(030B)   -> [S>C] quest(030C)
[S>C] 0339(00)
[C>S] req(030D)   -> [S>C] 030F(all-zero)     # <-- special(030E) MISSING!
# nothing else follows: only 6501/6502 keepalives
# client never sends 0336 / 032E / 0C08 / 03/01 NewPosStart
4.3 Opcode presence matrix
OpcodeDirectionMeaningv0.2.2 (works)v0.3.0 (black)
0303 / 0304C>S / S>Cbase request / responsepresentpresent
0305 / 0306C>S / S>Cinventory req / resppresentpresent
0309 / 030AC>S / S>Ccum req / resppresentpresent
0307 / 0308C>S / S>Cforce req / resppresentpresent
030B / 030CC>S / S>Cquest req / resppresentpresent
0339S>Cpresentpresent
030D / 030EC>S / S>Cspecial / animus req / respresp presentresp MISSING
030D / 030FC>S / S>Cresp presentresp present
0336 / 0337C>S / S>C(client-initiated)presentabsent (client stalled)
032E / 032DC>S / S>Cworld datapresentabsent
0C08 -> 0C09/0332/0D69C>S / S>Cnpc / world listspresentabsent
1B6F / 1B70C>S / S>Cpresentabsent
03/01 NewPosStartC>Senter worldpresentnever sent
4.4 Client log (v0.3.0, last lines — where it hangs)
[147] 10/07/26 11:49:52: 109 ) quest req
[148] 10/07/26 11:49:52: 110 ) quest result ( 0 )
[149] 10/07/26 11:49:52: 111 ) special req
[150] 10/07/26 11:49:52: 113 ) animus result
# (no further lines; client stuck here)
4.5 Server log (v0.3.0, DEBUG=2 — receives 030D then only keepalives)
[2026-10-07T11:49:52] INFO  recv {"op": "03/09", "body": ""}
[2026-10-07T11:49:52] INFO  recv {"op": "03/07", "body": ""}
[2026-10-07T11:49:52] INFO  recv {"op": "03/0B", "body": ""}
[2026-10-07T11:49:52] INFO  recv {"op": "03/0D", "body": ""}
# ... only 65/02 keepalives afterwards, no further client requests

---

5) Root Cause

The v0.3.0 gameserver does not emit the 030E (special / animus) data frame in response to the client's Enter World request 030D. In v0.2.2 the server unconditionally replies to 030D with special(030E) (an all-zero payload for a fresh character) plus 030F. In v0.3.0 only 030F is sent; 030E is dropped.

The A013 client treats 030E as a required step in the Enter World handshake. It sends 030D and waits for 030E; only after receiving it does it proceed to 0336 / 032E / ... / 03/01 NewPosStart. Because 030E never arrives, the client stops after processing the last received data (log line 113) animus result), never sends 03/01, and the screen stays black.

Since both servers read the same database and served the same client, this is purely a server-binary behavior difference introduced in v0.3.0 — not a data, script, or configuration issue.

---

6) Scope / Impact

  • All races and characters cannot enter the world on v0.3.0 (Accretia, Cora, and Bellato all tested).
  • Login, launcher auth, character select, and all Enter World data requests before 030D work normally.
  • v0.2.2 is unaffected and enters the world normally with the identical database and client.

---

7) Likely Related Change

The 0.3.0 changelog (https://oldschoolops.com/changelog/rf/15/0.3.0/) includes animus-related fixes:

  • RF15-132 — Class change animus rewards
  • RF15-133 — Animus movement
  • (also RF15-134 Accretia max FP growth, RF15-135 shop durability, etc.)

The rework of the special/animus response logic is the most probable origin of this regression (dropping the 030E reply to 030D).

---

8) Expected Behavior

When the client sends the Enter World request 030D, the server should reply with 030E (special / animus frame) — even with an empty / all-zero payload for a fresh character — and 030F, exactly as v0.2.2 does, so that the client can continue to 03/01 NewPosStart and enter the world.

---

9) Suggested Fix

Restore the unconditional special(030E) response to the Enter World 030D request in the v0.3.0 gameserver (matching v0.2.2 behavior), or otherwise ensure the client is not left waiting on 030E during the Enter World handshake.

---

10) Reproduction Artifacts Included

  • Full loopback packet capture of both a working (v0.2.2) and a broken (v0.3.0) Enter World session.
  • Client rfclient.log ending at 113) animus result.
  • Server console log showing recv 030D then only keepalives.

Additional captures / raw frame dumps available on request.

---

Contact / Submitter
  • Emulator: GoMMO RF Online 1.5, oldschoolops build
  • Reporting channel: this report may be forwarded to the project Discord (https://discord.gg/F67a4ahWPZ) or the website (https://oldschoolops.com/games/rf/15/)
Reported on version 0.3.0

History

  • jasmine1006 filed it · 18h ago
  • jasmine1006 edited: the severity from low to blocker · 18h ago

Replies

Nobody has replied yet.

Sign in to comment.

Loading…
Open the full search page