/** * Scans the dungeon for objects */ static void scan_for_objects(void) { int y, x; for (y = 1; y < cave->height - 1; y++) { for (x = 1; x < cave->width - 1; x++) { struct object *obj; while ((obj = square_object(cave, y, x))) { /* Get data on the object */ get_obj_data(obj, y, x, FALSE, FALSE); /* Delete the object */ square_excise_object(cave, y, x, obj); object_delete(&obj); } } } }
/* * A rewrite of monster death that gets rid of some features * That we don't want to deal with. Namely, no notifying the * player and no generation of Morgoth artifacts * * It also replaces drop near with a new function that drops all * the items on the exact square that the monster was on. */ void monster_death_stats(int m_idx) { struct object *obj; struct monster *mon; bool uniq; assert(m_idx > 0); mon = cave_monster(cave, m_idx); /* Check if monster is UNIQUE */ uniq = rf_has(mon->race->flags,RF_UNIQUE); /* Mimicked objects will have already been counted as floor objects */ mon->mimicked_obj = NULL; /* Drop objects being carried */ obj = mon->held_obj; while (obj) { struct object *next = obj->next; /* Object no longer held */ obj->held_m_idx = 0; /* Get data */ get_obj_data(obj, mon->fy, mon->fx, true, uniq); /* Delete the object */ delist_object(cave, obj); object_delete(&obj); /* Next */ obj = next; } /* Forget objects */ mon->held_obj = NULL; }