RF455-076 RF 4.55: Cora Animus stop at Lv50, use no FP after summoning, and have no Paimon taunt or Hecate stun
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 (wiki) credit to RFDB for https://wiki.rfdatabase.net/ :
- Update 4.151 "Ataraxia Arrival": Animus Lv75, and all four use FP from Lv1. The roles: Paimon a tank (4.15: a stronger passive Provoke), Hecate fast attacks that can stun, Inana heals its owner, Isis the highest ATK.
- 4.55 (January 2025): Animus much stronger, and levelling takes less EXP.
Summary
- An animus can't pass Lv50 (read). The server keeps animus EXP in a uint32, and the level tables run to Lv81. L50 needs 3,200,000,000 EXP in total and L51 needs 7,360,000,000, which doesn't fit.
- After the 60 FP summon, an animus costs no FP (read). The per-second upkeep is the level row's
m_nUseFP, which is 0 up to Lv55 in the data. The cap is 50, so it's never charged. - Paimon has no taunt and Hecate no stun (read). The server's animus code has a branch for Inanna (the heal) and Hecate (an area hit) only. The data column that marks Hecate's attack effect (
m_nAttEffType10) isn't loaded.
The data (read from gamedata_rf455.db, paimoncharacter; the other three and the _s twins have the same EXP
and FP columns):
| Level | m_nForLvUpExp (cumulative) | m_nUseFP | m_nAttFcStd |
|---|---|---|---|
| 1 | 160 | 0 | 855 |
| 50 | 3,200,000,000 | 0 | 17,067 |
| 51 | 7,360,000,000 | 0 | — |
| 55 | 205,962,976,000 | 0 | 28,817 |
| 56 | — | 125 | — |
| 70 | 3,167,993,487,400,950 | 200 | 133,647 |
| 75 | 11,762,538,059,175,600 | 200 | 427,968 |
| 81 | 56,775,524,566,871,400 | 200 | 738,002 |
Server side (all read, v0.3.1)
- The level loader
gamedata.(*Data).AnimusLevels0x140506ca0loads 19 columns:m_dwIndex, m_nLevel, m_nForLvUpExp, m_nUseFP, m_fPenalty, m_nMaxHP, m_nHPRecUnit, m_nMaxFP, m_nFPRecUnit, m_nAttExt, m_nMovSpd, m_nAttack_DP, m_fAttGap, m_nAttSpd, m_nStdDefFc, m_nAttFcStd, m_nMinAFSelProb, m_nMaxAFSelProb, m_nAttSklUnit.- Not loaded:
m_nAttEffType,m_nDefEffType, the tech IDs (m_strAttTechID1,m_strPSecTechID,m_strMSecTechID), the tolerances and the force columns.
- Not loaded:
- The Lv50 cap:
- the animus EXP is a dword at +8 of the live animus (
handleAnimusRecall0x140768af8); animusTopStorableExp0x140764900returns the largestm_nForLvUpExpthat fits in it, which is L50's;animusAlterExp0x14076c860compares the level byte with 0x32 (50) before a level-up (0x14076cc8c-0x14076cca4).
- the animus EXP is a dword at +8 of the live animus (
- FP:
- the summon spends 60 FP from the master:
mov ebx,0x3cat0x140769644, then(*client).spendFP; animusTickOnespendsm_nUseFPevery second (0x14076e6d7) and returns the animus if the master can't pay. For Lv1-50 that's 0.
- the summon spends 60 FP from the master:
- Roles: the class is the level-table index
& 3(0 Paimon, 1 Hecate, 2 Inanna, 3 Isis).animusAttackStep0x14076fb74: class 2 →animusHealStep0x140770180(heals the master).animusSwing0x140773648: class 1 →animusAreaSplash0x140772580. The others hit one target.- There is no class-0 (Paimon) branch anywhere, and no stun is applied.
Suggested fix
- Store animus EXP in 64 bits (the thresholds are already 64-bit in the data), and cap at 75 as 4.151 says, or at whatever the 4.55 level is meant to be.
- Give the data an FP cost from Lv1, or charge a per-attack FP cost, as 4.151 says.
- Load
m_nAttEffTypeand give Hecate's hits their stun chance; give Paimon a taunt (monsters near it target it first).
Local workaround
None