RF455-075 RF 4.55: MAU attacks always hit one target (no Catapult area hit, no Goliath AoE): the part loader drops m_nEffectGroup
New
Game: RF 4.55 (Dragonborn), server v0.3.1, Windows build (stock gameserver.exe).
Client: the supported Taiwan build, RF_Online.bin SHA-256 46528aac…2bbc558 (2025-07-16), Language=Taiwan.
Expected : Update 4.15 "Age of Patron": the Catapult has an area hit. Update 4.151: the Goliath's attack
changed from single target to AoE.
Summary
- The data marks the Catapult arms as area weapons (read from
gamedata_rf455.db):
| Arm | Code | Level | Range | EffectGroup |
|---|---|---|---|---|
| Ice Blaster | unar024 | Lv69 | 240 | 5 |
| Beelzebub Catapult Launcher | unar028 | Lv74 | 240 | 5 |
| (Lv79, no name) | unar029 | Lv79 | 240 | 5 |
| Goliath arms, e.g. Beelzebub Goliath Arm | unar008 | Lv74 | — | 0 |
- By frame: all 20 Catapult arms (
unar021–040), and the 40 arms of the other two frames (unar041–080), have EffectGroup 5. - The 20 Goliath arms (
unar001–020) have 0: the data has no area marker for them, even though 4.151 made the Goliath's attack AoE.
- On the server a MAU attack always hits exactly one target (read). There is no area damage for any frame or part.
Server side (all read, v0.3.1)
- The part loader never loads the area column.
gamedata.(*Data).UnitPartFor0x1405348a0serves all six part tables (unithead,unitupper,unitlower,unitarms,unitshoulder,unitback, from the table at0x1414430c0). It scans 29 columns, with the SELECT prefix at0x140bf2c64:m_dwIndex, m_strCode, m_strName, m_nWPType, m_nDurUnit, m_nLevelLim, m_strDefFrame, m_nNeedBt, m_nStdPrice, m_nDefFc, m_nBstCha, m_fBstSpd, m_nRepPrice, m_nDesrepPrice, m_nGAMinAF, m_nGAMaxAF, m_nBackSlt, m_nUpLevelLim, m_nExpertID1, m_nExpertLim1, m_nExpertID2, m_nExpertLim2, m_nGAMinSelProb, m_nGAMaxSelProb, m_nDefMastery, m_nFireTol, m_nWaterTol, m_nSoilTol, m_nWindTol.m_nEffectGroupisn't among them.- Nor are
m_fAttackRange,m_nAttackDeland the four effect pairs. - The
unitbulletloader (UnitBulletFor0x140534de0) doesn't loadm_strEffectIndex.
- The attack handler is single-target:
handleAttackUnit0x140972280(05/04) parses one target.- For a monster, it does
monsterByIndex,unitSpendBullet,rollUnitDamage0x140972e20, one(*monster).takeDamage, thenAttackUnitResultandbroadcastNearScope. - For a player, it calls
unitAttackPlayer0x140972820, which resolves onepvpTargetand applies onepvpStrike. - There's no loop over nearby targets, and no call to
applyAoEDamage0x1407dca60, which the other area attacks use.
- Related: RF455-051Released. Once area hits exist,
AttackUnitResult0x140665060also packs 10-byte targets where the client reads 14, so a second target would show wrongly. That part is already filed under RF455-051Released.
Suggested fix
- Load
m_nEffectGroup(and the bullet'sm_strEffectIndexif the area comes from the ammo). - For an area part, damage every hostile target within the area radius around the hit target, through
applyAoEDamage, as the other area attacks do. - Give the Goliath its 4.151 AoE as well. The client data doesn't mark it, so it would need a rule or a data change.
Local workaround
None.
👍 DT