Old School Ops

RF455-066 RF 4.55 : no satellite radar shows the other race, and High-Speed / Ultra show nobody (radarDetect eff_sort[3] check)

Game server RF Online: Dragonborn v0.3.1 low · filed by cybercyber
Fixed

Game: RF 4.55 (Dragonborn), server v0.3.1, Windows build (stock gameserver.exe, SHA-256 c10012f3…f699a). Client: the supported Taiwan build, RF_Online.bin SHA-256 46528aac…2bbc558 (2025-07-16), Language=Taiwan.

Summary

radarDetect returns an empty list unless the radar's eff_sort has '1' in its fourth digit. Of the three radars, only the plain Satellite Radar (1001) has that, and its other-race digits are 0. So:

  • High-Speed (1100) and Ultra Satellite Radar (1110) list nobody at all, not even your own race.
  • Satellite Radar (1001) lists your own race only.
  • No radar ever lists a player of another race.

How each part is known:

  • Server side: read in the stock v0.3.1 gameserver.exe (with a Go symbol disassembler).
  • Item data: read from gamedata_rf455.db.
  • Server log: shows each radar used, with its eff_sort (below).
  • What the radar showed in game: not captured.

1. radarDetect stops at the fourth digit (v0.3.1, read)

  • radarUse (0x1407ed0a0) stores a run {until, effSort, map} (startRadarRun 0x1407ec940).
    • effSort is the item's m_strEffSort; radarUse logs the same value as eff_sort in "radar used".
  • sendRadarCharList (0x1407ee440) passes the run to (*Server).radarDetect (0x1407ee560). There r8/r9 are the effSort string (pointer, length):
1407ee5ae: 49 83 f9 03          cmp  r9, 3
1407ee5b2: 0f 8e fa 00 00 00    jle  0x1407ee6b2           ; len <= 3 -> empty list
1407ee5b8: 41 80 78 03 31       cmp  byte ptr [r8+3], '1'
1407ee5bd: 0f 1f 00             nop
1407ee5c0: 0f 85 ec 00 00 00    jne  0x1407ee6b2           ; effSort[3] != '1' -> empty list
...
1407ee5e6: movzx ecx, byte ptr [r8]     ; digit 0
1407ee5ee: movzx ecx, byte ptr [r8+1]   ; digit 1
1407ee5f7: movzx ecx, byte ptr [r8+2]   ; digit 2

2. After the check, only digits 0–2 decide who is listed (read)

The function walks playersInScope on the run's map. It skips itself and clients with no character, and stops at 50 entries.

  • Another race (raceSex >> 1 differs):
    • type 3 when effSort[2] == '1' and raceBossRankOf gives 0;
    • otherwise type 2 when effSort[1] == '1';
    • otherwise not listed.
  • Own race: listed only when effSort[0] == '1'.
    • Type 1 when raceBossRankOf gives 0.
    • Otherwise type 0, except that party members (membersOf) are skipped.
  • raceBossRankOf (0x140904140) returns 0xFF for a character with no race rank, else the stored rank. We take rank 0 to be the patriarch, from gmRaceBoss's labels in an earlier build; we didn't re-check that on v0.3.1.

So digit 3 is only an on/off switch. Only the radar whose other-race digits are both 0 has it on.

3. Data (read)

radaritem in gamedata_rf455.db (m_strCode, m_strName, m_strEffSort):

CodeNameeff_sort
rdaaa01, rdpvp01Satellite Radar1001
rdaaa02, rdpvp02High-Speed Satellite Radar1100
rdaaa03, rdpvp03Ultra Satellite Radar1110

From our server's history.log (2026-10-11):

radar used {"session": 2, "serial": 93, "code": "rdpvp02", "act_delay_sec": 300, "eff_sort": "1100"}
radar used {"session": 173, "serial": 96, "code": "rdpvp03", "act_delay_sec": 300, "eff_sort": "1110"}
radar used {"session": 173, "serial": 98, "code": "rdaaa01", "act_delay_sec": 300, "eff_sort": "1001"}

Expected

This is inferred from the digit use above; i haven't checked it against the original game.

  • The digits read as own race, other race, other-race patriarch, plus a fourth flag.
  • The stronger radars should show more than the plain one:
    • High-Speed: your own race and enemies;
    • Ultra: the same, with the enemy patriarch marked.

I don't know what the fourth digit means. The check may be a wrong index, an inverted test, or a flag meant for something else. Either way, it shuts off the two stronger radars completely.

Suggested fix

Drop the effSort[3] check, or give it its intended meaning. Keep the length check, since digits 0–2 are read after it.

How to reproduce in game

Expected from the code above; not yet confirmed with the real client.

  1. Stand on a map with players of another race (and of your own race).
  2. Use a High-Speed or Ultra Satellite Radar. Nobody should appear.
  3. Use a plain Satellite Radar. Only your own race should appear.

What we do locally (not a fix)

A server byte patch turns the jne at 0x1407ee5c0 into a 6-byte nop (66 0f 1f 44 00 00).

Where to look

  • Server (v0.3.1):
    • radarUse 0x1407ed0a0, startRadarRun 0x1407ec940, sendRadarCharList 0x1407ee440;
    • radarDetect 0x1407ee560 (the check at 0x1407ee5ae–0x1407ee5c0, the list cap at 0x1407eeb0f);
    • raceBossRankOf 0x140904140.
  • Data: radaritem.m_strEffSort.
Reported on version 0.3.1
👍 DT

Replies 1

OSO AI Staff
59m ago

Reported: No satellite radar ever shows the other race; High-Speed and Ultra show nobody at all, and the plain Satellite Radar shows only your own race.

Found: The fourth digit of a radar's setting was read as an on/off switch for the whole scan. On the original server it means "also show boss monsters", a separate scan alongside the player scan. The three digits that pick which players appear were right.

Fix: in the next RF 4.55 update:

  • High-Speed shows your own race and the other races.
  • Ultra does the same and marks the enemy race leader.
  • Satellite Radar shows your own race and the boss monsters on the map.
  • The list still stops at 50 entries, players first.

Also affected: RF Golden Age, RF 4.15 and RF 1.5 had the same check and are fixed in their next updates.

Sign in to comment.

Top xp sources

How xp works
Loading…

Open the full search page