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
In the chip war each race guards its own Control Chip (holy stone) and tries to destroy another race's. The server
lets players hit their own race's stone, and the player who lands the last hit becomes the holy master even when
the stone is their own. The race is announced as the winner (19/0B) and gets the keeper phase. SetResult then sees
winner == loser and records chaos, so no buffs are given.
1. A stone takes damage from anyone (read)
- The stones are ordinary monsters on map 2 (
04B00, 04B01, 04B02 for race 0, 1, 2; chipWarSpawn 0x1407bc100). - A hit goes
handleAttack 0x1407d3440 → attackTarget 0x1407d4040 → engageMonsterFrom 0x1408b03c0 (setAggro, then the 0B/99 broadcast) → (*monster).takeDamage 0x1407d6000. Skills, forces, splash, towers, traps and units reach takeDamage the same way (8 callers). - None of these compares the attacker's race with the stone's race.
chipWarSyncStoneLocked 0x1407bf060 turns the stone's HP drop into war damage (damageStone 0x1407b5620).
2. The destroyer's race isn't checked (read)
- The destroyer is the stone monster's aggro target (character serial at monster
+0x200), looked up in the online roster. checkHolyMasterLocked 0x1407b4460 is entered with bl = the stone index and [rsp+0x34c] = the destroyer's race. It checks only that the scene is 1 and there is no master yet (0x1407b4485–0x1407b44a0). It then stores the destroyer's race as the holy master ([cw+0xe0], 0x1407b44ae), sends 19/0B with that race (0x1407b500f), and moves to scene 2.raceBuff.SetResult 0x1409061e0: cmp cl, bl; je → the chaos branch (0x140906290 clears the result).
Expected
A race can't damage, or at least can't destroy, its own Control Chip (the stone is friendly to its race). A
destroyer of their own race's stone never becomes the holy master.
Suggested fix
- In the attack paths, refuse damage to a holy stone whose race equals the attacker's race (as for any friendly target).
- At least: in
checkHolyMasterLocked, ignore a destroyer whose race equals the stone index.
How to reproduce in game
- Wait for a chip war battle (or start one), and go to your own race's stone in Crag Mine.
- Attack it until it breaks (it has 100M HP, so this needs time or a GM damage boost).
- 19/0B names your race as the holy master, and the keeper phase follows for your race. The server log then shows
chip war race buff result {"chaos": true}.
What I do locally (not a fix)
A server patch (chipwar-own-stone): at 0x1407b449a a cave also takes the existing reject path (0x1407b4869)
when [rsp+0x34c] == bl. The stone is still destroyed, but nobody wins from it.