RF455-042 # RF 4.55: party window shows a squashed icon sheet for every member (10/07 and 10/08 send no class)
Game: RF 4.55 (Dragonborn), server v0.2.0, Windows build (gameserver.exe SHA-256 96452fbd…d70cec7).
Client: the supported Taiwan build, RF_Online.bin SHA-256 46528aac…2bbc558 (8,430,808 bytes, 2025-07-16),
Language=Taiwan
Symptom
- Form a party.
- Every member's row in the party window shows, left of the name, a squashed sheet of class icons with a white box under it, where the member's class logo should be.
It's the same for every member, whatever their race or class.
Cause
The last u32 of each party-member entry is the member's class index:
- in 10/07
party_join_joiner_result_zoclit's at +0x19 of each 28-byte member entry; - in 10/08
party_join_member_result_zoclit's at +0x18.
The server always writes 0xFFFFFFFF there:
protocol.PartyJoinerResult(0x1406538a0, the store at0x140653be5);protocol.PartyMemberResult(0x140653d20, the store at0x140653f5a);- both called from
(*Server).completeJoin(0x14089aae0).
What the client does with it (RF_Online.bin addresses):
- The 10/07 and 10/08 handlers (
0x57f210,0x57f2e0) pass the value to the party window's add-member (0x6edb50). - Unless it's -1, the window looks the value up in the client's class table (
Character.edf, record +4). That's the same lookup it does for your own class from the base download (03/04). It then shows that class's icon fromclass.sprand the class name. - For -1 it skips that whole branch (
0x6edd8c cmp [ebp+0xc],-1; je 0x6ede7d). The picture is left on the bareclass.sprpage, drawn squashed into the 45×45 slot.
Nothing else tells the client another player's class. 03/1F (another player's look) carries none.
Suggested fix
Send the member's class index in that u32. It's the same value the base download (03/04) gives for the character's
own class, class.m_dwIndex, which equals the client's Character.edf record +4 for all 165 classes (BWB0 = 0,
BRB0 = 15).
If there's no class to send, use a value that matches no class (for example 0xFFFFFFFE) rather than -1. The client
then shows its own "no class" picture ({EtcUI.spr, 0, 2}) instead of the raw sheet.
Related, client-side: the four base classes share one logo
Once the server sends the class, members in a job class (grade 1 and up) get their own icon. Members still in a base class (Warrior, Ranger, Spiritualist, Specialist, grade 0) all get the same orange logo.
- In
0x6edb50, after the lookup, the client reads the class grade (Character.edfrecord byte 1, gamedatam_nGrade):0x6eddb5 call 0x41ea70; test; jne 0x6eddf9. - Grade 1+ gets the class's own icon (record +0x4c, gamedata
m_nIconIDX). - Grade 0 gets {
EtcUI.spr, 0, 2} regardless.
The base classes do have their own icons in class.spr (m_nIconIDX: Bellato Warrior 1, Ranger 8, Spiritualist 15,
Specialist 22; Cora 29, 36, 43, …).
History
-
cybercyber
-
cybercyber