applyJoulesDamage(class Joules& joules, class Player*) ;
class MobileSpawnSTO : public ServerTrackedObject
applyJoulesDamage(class Joules& joules, class Client*) ;
The second applyJoulesDamage is supposed to override the former. But the compiler has no way of knowing that so it blissfully continues without so much as a warning.
There needs to be an operator that indicates you want to overload an earlier virtual function, e.g.
overloaded virtual bool applyJoulesDamage(…) ;
So that the compiler can say “Hey, there isn’t an existing vtable entry for this… Dammit.