RF15-136 RF-1.5 cannot enter the game world
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 thegameserver.exebinary. 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
| Item | Value |
|---|---|
| Game | RF Online 1.5 "Defcon1 - Cocked Pistol" |
| Client | Official RF15 client, A013 build |
| Client binary | RF_Online.bin, patched to pass HackShield (SHA1 6273AB054AED26F554FF70B2793DF7175E630B96) |
| Broken server | E:\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 characters | Accretia ARB0 (Lv1), plus newly created Cora and Bellato characters |
| OS | Windows 10 2009, 16 GB RAM, Ryzen 9 7940H + RTX 4060 Laptop |
| Packet capture | Npcap 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
- Start the v0.3.0 server (
GoMMO_Manager→gameserver, listens on0.0.0.0:27810). - Start the client and log in through the launcher (launcher auth succeeds:
15/0C→15/03→15/04→15/06→15/07→15/08handoff). - Reach character select; the character list loads (EnterWorld
01/01, char list01/09, SelChar01/0Eall succeed). - Select any character and press Enter World.
- Result: permanent black screen. Client log stops at
113) animus result; the client never sends03/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 successfully4.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
| Opcode | Direction | Meaning | v0.2.2 (works) | v0.3.0 (black) |
|---|---|---|---|---|
0303 / 0304 | C>S / S>C | base request / response | present | present |
0305 / 0306 | C>S / S>C | inventory req / resp | present | present |
0309 / 030A | C>S / S>C | cum req / resp | present | present |
0307 / 0308 | C>S / S>C | force req / resp | present | present |
030B / 030C | C>S / S>C | quest req / resp | present | present |
0339 | S>C | present | present | |
030D / 030E | C>S / S>C | special / animus req / resp | resp present | resp MISSING |
030D / 030F | C>S / S>C | resp present | resp present | |
0336 / 0337 | C>S / S>C | (client-initiated) | present | absent (client stalled) |
032E / 032D | C>S / S>C | world data | present | absent |
0C08 -> 0C09/0332/0D69 | C>S / S>C | npc / world lists | present | absent |
1B6F / 1B70 | C>S / S>C | present | absent | |
03/01 NewPosStart | C>S | enter world | present | never 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
030Dwork 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.logending at113) animus result. - Server console log showing
recv 030Dthen 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/)
History
-
jasmine1006
-
jasmine1006