Old School Ops

RF455-058 RF 4.55: equip and set effects "damage → HP" (17) and "debuff duration" (31, 22) do nothing

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

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

Summary

Equipment and set items can carry the equip effect codes 17, 22 and 31. The server routes these into combat-stat slots that no server code reads, so they do nothing. The client still shows them in the tooltip.

CodeClient tooltip (0x64c070, original zh-tw / our English)Server routeGear rows (values)Sets
17攻擊傷害值的 %.2f%% 轉換成HP, "converts x% of attack damage into HP"rate[12]4,521 (0.005–0.5)108
31減益效果持續時間 %s, "duration of negative effects"rate[8]3,766 (−0.2 to −0.1)6
22持續損害輔助時間 %s, "duration of continuous harmful effects"rate[8]496 (−0.32 to 0.15)0
  • 45 sets do nothing at all, because code 17 is their only effect: every Ancient accessory set (2 amulets + 2 rings, grades A–O).
  • 69 sets lose one effect: the Vampiric Butcher's / Chilling Butcher and Queen's Ring sets, the 2020 Happy New Year sets, the Ultimate / Legendary Black Dragon sets, and the Empire's / Union's / Decem's armour sets.
  • Worn gear is hit as well. For example, the 吸血 "Vampire Intense" armour (iuaww50 and others, code 17 at 0.04) and the 守護 "Guardian Intense" armour (iuawx50 and others, code 31 at −0.1).

Read statically from gameserver.exe v0.2.0, gamedata_rf455.db and the client. Not measured in game.

How equip and set effects reach combat (v0.2.0)

  • recomputeCombatStats calls applyWornItemEffects (worn gear) and applySetItemEffects (0x1408ddc80, active sets, effects 1..N of the active tier). Both pass each effect to applyEquipEff (0x1407c2b00).
  • applyEquipEff looks the code up in the route table built by gameserver.map.init.4 (map at 0x141429b40): kind 0 → rate[i], 1 → plus[i], 2 → state[i]. The entries in question:
    • code 17: {kind 0, index 12}, at 0x1407430b4–0x1407430e2;
    • code 31: {kind 0, index 8}, at 0x14074374a–0x140743778;
    • code 22: {kind 0, index 8}.
  • setCombatStats stores the result at client+0x208, a 0x368-byte rate/plus/state block. combatEPLocked (0x1407c4da0) starts from a copy of that block and adds the timed buffs to it.

Nothing reads rate[8] or rate[12]

Checked in v0.2.0:

  • Direct field reads. gosyms.py gameserver.exe struct-reads ").combatEP" 0x368 lists every field the combatEP callers read. Struct offsets 0x40 (rate[8]) and 0x60 (rate[12]) aren't among them.
  • Indexed reads in combatEP callers. Each of these has one, and none can reach index 8 or 12:
    • genRateIndex (0x1408a1c60) returns 0, 1 or 29;
    • skillHitPoint uses that index + 2, or 29;
    • weaponGenericAF always returns index 0 (xor eax, eax at 0x1407b8dfd); skillDamage and attackDamage use it;
    • attackFCOf reads rate[2t] / rate[2t+1], and its callers (animusMasterBonus, unitEPBonus) pass t = 0, 1 or 2;
    • elementTol reads plus[15+e] and rate[25+e], with e < 4;
    • effRateBonus is called with 34, 36, 37 and 38.
  • Readers of the gear block itself (client+0x208):
    • gearRate (0x1407c52e0), called only by maxPointsWithGear with 9, 10 and 11;
    • moveSpeedBonus, which reads only plus[20] (block offset 0x290);
    • combatEPLocked (the copy above) and setCombatStats (the writer).
    • No instruction reads client+0x248 or client+0x268.
  • No other mechanism. There's no life-drain or debuff-duration code under any other name. drainDP is the defence-point loss on being hit, and it doesn't read the block.

Relation to RF455-052Review

RF455-052Review (unread buff slots, in Review) listed rate[12..13] for the forces Blood Capture and Absorption, and it called rate[12] "damage → FP". That was my mistake. The client's tooltip for equip code 17, which routes to rate[12], and Blood Capture's original text (轉值HP) both say HP; rate[13] is the FP one.

If the RF455-052Review fix reads rate[12] from the summed combatEP, worn gear and sets will work too, because that struct starts from the gear block. Please check that the fix also covers:

  • gear and sets, not only timed buffs;
  • rate[8] (codes 31 and 22), which RF455-052Review didn't list. No skill, force or potion writes rate[8], so only gear and sets would use it.

Questions

  • Code 17: should it heal the attacker by x% of the damage dealt? That's how the client's text and the "Vampire" item names read.
  • Codes 31 and 22: does a negative value shorten debuffs received? Gear with code 31 carries −0.1 to −0.2 (the "Guardian Intense" armour is −0.1), and code 22 is on rings, amulets and cloaks at −0.32 to +0.15. And what should the +0.5 on the Accretia Empire's sets (setfa06/09/12/15, setwa19, setfa32) do?

How to reproduce

Expected from the code above; not yet tried live.

  • Equip "Vampire Intense" armour (for example iuaww50, which has code 17 at 0.04) and hit a monster: your HP shouldn't rise with the hits.
  • Or wear a full Ancient accessory set (for example Ancient Mind Appendix A iadab03 ×2 + Ancient Mind Wristlet A iidab03 ×2, set setaa02, +6% damage → HP). The set turns on (07/2E result 0), but nothing heals.

Affected sets (server item codes)

  • Every effect dead (45 sets): each set is two amulets and two rings of one grade. Grades A–O use the codes …03, …08 … …73, a step of 5.
    • Ancient Mind Appendix iadab03–iadab73 + Ancient Mind Wristlet iidab03–iidab73;
    • Ancient Cursed Earring iadac03–iadac73 + Ancient Cursed Armlet iidac03–iidac73;
    • Ancient Hue Headset iadaa03–iadaa73 + Ancient Hue Bracer iidaa03–iidaa73.
  • One dead effect, code 17 (63 sets):
    • Vampiric Butcher's Necklace iaahb / iabhb / iachb 01–05 + DarkHall Queen's Ring iiahq / iibhq / iichq 01–05;
    • Chilling Butcher Necklace iahal17–21, 37–41, 57–61 + Chilling Queen Ring iihal (the same numbers);
    • 2020 Happy New Year Charm and Ring iaetw11–13 / iietw11–13;
    • Ultimate / Legendary Black Dragon armour (?ht??10–16) + Wing (ikt?020–025);
    • Empire's Executor / Will / Unity / Mission / Blessing (suffix ac[rf]50–70);
    • Bellato Victory Leader, Union's (bcf50–70) and Decem's (ccf50–70) armour;
    • the Holy Soul Scream Mask [Event] sets (?avr55, ?avf55, ?bvf55, ?cvf55).
  • One dead effect, code 31 (6 sets): Empire's Executor / Will / Unity / Mission / Blessing with suffix acw50–70, and Holy Soul Scream Mask ihavw55.
Reported on version 0.2.0

Replies 1

OSO AI Staff
13h ago

Reported: gear and set effects "converts x% of attack damage into HP" (code 17) and "duration of negative effects" (codes 31 and 22) do nothing in RF 4.55 0.2.0, which leaves 45 Ancient accessory sets with no working effect.

Found: both readings in the report are right, and so is the correction to RF455-052: code 17's slot returns damage as HP, and the next one along returns it as FP.

Code 17 is fixed by the change made for RF455-052. The HP return after a hit reads the combined total of worn gear, active sets and timed buffs, so a "Vampire" piece or a full Ancient set heals you by its percentage of the damage you deal.

Codes 31 and 22 were read by nothing on the server. In the original game this value changes how long a harmful force effect lasts on the wearer when it lands: a negative value shortens it, a positive one lengthens it, up to double its normal length. Skill debuffs are not affected. Under that rule the +0.5 on the Accretia Empire's sets makes harmful forces on the wearer last half as long again.

Fix: harmful forces that land on you now last shorter or longer by the total from your worn gear and active sets, up to double their normal duration and never below one second, as in the original. Skills and helpful forces are unchanged. Both parts ship in the next RF 4.55 update.

Also affected: the Golden Age, Age of Patron and RF 1.5 servers had the same gap for codes 31 and 22 and get the same fix.

Sign in to comment.

Top xp sources

How xp works
Loading…

Open the full search page