proc kill(word valres reg bufptr; word reg monster): extern SERCOM, SYSTEM; word reg p; int reg pos; word temp; int i; bool dropped; if monster$.mn_viciousness = 0#byte then Experience := Experience - 10; elif monster$.mn_viciousness >= 2 then Experience := Experience + (monster$.mn_attack + monster$.mn_defense) / 4; fi; monster$.mn_defense := DEAD_MONSTER; pos := CARRYING_POS + Carry_Count * 80 + 80; dropped := false; temp := -((monster - Monsters) / Monster + 1); i := 0; while if i >= Object_Count then false else p := @(Objects$)(i * Object); if p$.ob_room = temp then /* the monster dropped this when he died */ dropped := true; pos := pos - 80; p$.ob_room := Current_Room; p$.ob_position_x := monster$.mn_position_x; p$.ob_position_y := monster$.mn_position_y; temp := struct(nil, p); p := @(Room$)(Current_Room * Room :: Room).rm_objects; while p$.next ~= nil do p := p$.next; od; p$.next := temp; false else true fi fi do i := i + 1; od; [Lots deleted - the routine is about 130 lines long.] corp;