void attack_object (object ob) living.c Denna funktion bör anropas i början på alla strider, men om en strid börjar med en besvärjelse el dyl som direkt sätter attacker_ob eller anropar hit_player(), anropas INTE denna funktion. Konsekvenserna av detta diskuteras sist. Bäst är om alla föremål som kan skada andra utnyttjar denna funktion. Först kontrolleras om objektet ob är ett spöke. Är ob detta, händer inget. Sedan startas heart_beat. Om nu attacker_ob i varelsen redan är satt till ob (vilket inte ska hända, fallet sorteras bort i kill() i player.c) anropas attack() och funktionen avslutas. Om alt_attacker_ob är satt till ob, byter alt_attacker_ob och attacker_ob plats (detta ska inte heller hända, utan tas om hand av kill()) och attack() anropas. Finns inget alt_attacker_ob sätts alt_attacker_ob till attacker_ob. Sedan anropas set_attacker_ob() i det lokala objektet med ob som parameter, attacked_by anropas i attacker_ob (som nu ska vara satt) med det lokala objektet som parameter och sist anropas attack(). Den bugg som kan uppstå (men som kan undvikas) om attack_object() inte anropas, är att BÅDA spelarna (om två spelare börjar slåss mot varandra) sätts som angripare, och att det inte loggas vem som började slagsmålet. Detta leder till att den försvarande kan drabbas av den fulla effekten i spelarslaktandestraffaktor(). Det enda sättet att undvika detta på är att anropa attack_object() i det angripna objektet under exekveringen av funktionen, eftersom set_attacker_ob inte kan anropas i det anfallande objektet, då den är deklarerad som static.