--- deliantra/server/random_maps/monster.C 2008/04/11 21:09:53 1.21 +++ deliantra/server/random_maps/monster.C 2008/05/02 21:22:22 1.22 @@ -25,42 +25,6 @@ #include #include -/* some monsters are multisquare, and these guys require special - handling. */ - -void -insert_multisquare_ob_in_map (object *new_obj, maptile *map) -{ - int x, y; - object *old_seg; - object *head; - - /* first insert the head */ - insert_ob_in_map (new_obj, map, new_obj, INS_NO_MERGE | INS_NO_WALK_ON); - - x = new_obj->x; - y = new_obj->y; - old_seg = new_obj; - head = new_obj; - - //TODO: use expand_tail + insert instead - for (archetype *at = (archetype *)new_obj->arch->more; at; at = (archetype *)at->more) - { - object *new_seg; - - new_seg = arch_to_object (at); - new_seg->x = x + at->x; - new_seg->y = y + at->y; - new_seg->map = old_seg->map; - insert_ob_in_map (new_seg, new_seg->map, new_seg, INS_NO_MERGE | INS_NO_WALK_ON); - new_seg->head = head; - old_seg->more = new_seg; - old_seg = new_seg; - } - - old_seg->more = 0; -} - /* place some monsters into the map. */ void place_monsters (maptile *map, char *monsterstyle, int difficulty, random_map_params *RP) @@ -95,14 +59,14 @@ freeindex = find_first_free_spot (this_monster, map, x, y); if (freeindex != -1) { - object *new_monster = arch_to_object (this_monster->arch); + object *new_monster = object_create_clone (this_monster); x += freearr_x[freeindex]; y += freearr_y[freeindex]; - copy_object_with_inv (this_monster, new_monster); + new_monster->x = x; new_monster->y = y; - insert_multisquare_ob_in_map (new_monster, map); + insert_ob_in_map (new_monster, map, 0, INS_NO_MERGE | INS_NO_WALK_ON); if (new_monster->is_alive ()) {