… | |
… | |
46 | total_experience = 0; |
46 | total_experience = 0; |
47 | failed_placements = 0; |
47 | failed_placements = 0; |
48 | exp_per_sq = 0; |
48 | exp_per_sq = 0; |
49 | while (exp_per_sq <= level_exp (difficulty, 1.0) && failed_placements < 100 && number_monsters < (RP->Xsize * RP->Ysize) / 8) |
49 | while (exp_per_sq <= level_exp (difficulty, 1.0) && failed_placements < 100 && number_monsters < (RP->Xsize * RP->Ysize) / 8) |
50 | { |
50 | { |
51 | object *this_monster = style_map->pick_random_object (); |
51 | object *this_monster = style_map->pick_random_object (rmg_rndm); |
52 | int x, y, freeindex; |
52 | int x, y, freeindex; |
53 | |
53 | |
54 | if (this_monster == NULL) |
54 | if (this_monster == NULL) |
55 | return; /* no monster?? */ |
55 | return; /* no monster?? */ |
56 | |
56 | |
57 | x = rndm (RP->Xsize); |
57 | x = rmg_rndm (RP->Xsize); |
58 | y = rndm (RP->Ysize); |
58 | y = rmg_rndm (RP->Ysize); |
59 | freeindex = find_first_free_spot (this_monster, map, x, y); |
59 | freeindex = find_first_free_spot (this_monster, map, x, y); |
60 | if (freeindex != -1) |
60 | if (freeindex != -1) |
61 | { |
61 | { |
62 | object *new_monster = object_create_clone (this_monster); |
62 | object *new_monster = this_monster->deep_clone (); |
63 | |
|
|
64 | x += freearr_x[freeindex]; |
63 | x += freearr_x[freeindex]; |
65 | y += freearr_y[freeindex]; |
64 | y += freearr_y[freeindex]; |
66 | |
|
|
67 | new_monster->x = x; |
|
|
68 | new_monster->y = y; |
|
|
69 | insert_ob_in_map (new_monster, map, 0, INS_NO_MERGE | INS_NO_WALK_ON); |
65 | map->insert (new_monster, x, y, 0, INS_NO_MERGE | INS_NO_WALK_ON); |
70 | |
66 | |
71 | if (new_monster->is_alive ()) |
67 | if (new_monster->is_alive ()) |
72 | { |
68 | { |
73 | total_experience += this_monster->stats.exp; |
69 | total_experience += this_monster->stats.exp; |
74 | |
70 | |