boolean mon_damage(object *monster, short damage) { const char *mn; short row, col; monster->hp_to_kill -= damage; if (monster->hp_to_kill <= 0) { row = monster->row; col = monster->col; dungeon[row][col] &= ~MONSTER; mvaddch(row, col, (int)get_dungeon_char(row, col)); fight_monster = NULL; cough_up(monster); mn = mon_name(monster); sprintf(hit_message+strlen(hit_message), "defeated the %s", mn); message(hit_message, 1); hit_message[0] = 0; add_exp(monster->kill_exp, 1); take_from_pack(monster, &level_monsters); if (monster->m_flags & HOLDS) { being_held = 0; } free_object(monster); return(0); } return(1); }
void disappear(object *monster) { short row, col; row = monster->row; col = monster->col; dungeon[row][col] &= ~MONSTER; if (rogue_can_see(row, col)) { mvaddch_rogue(row, col, get_dungeon_char(row, col)); } take_from_pack(monster, &level_monsters); free_object(monster); mon_disappeared = 1; }
void vanish(object *obj, short rm, object *pack) { if (obj->quantity > 1) { obj->quantity--; } else { if (obj->in_use_flags & BEING_WIELDED) { unwield(obj); } else if (obj->in_use_flags & BEING_WORN) { unwear(obj); } else if (obj->in_use_flags & ON_EITHER_HAND) { un_put_on(obj); } take_from_pack(obj, pack); free_object(obj); } if (rm) { reg_move(); } }