… | |
… | |
96 | |
96 | |
97 | if (GENERATE_SPEED (gen) && rndm (0, GENERATE_SPEED (gen) - 1)) |
97 | if (GENERATE_SPEED (gen) && rndm (0, GENERATE_SPEED (gen) - 1)) |
98 | return; |
98 | return; |
99 | |
99 | |
100 | object *op; |
100 | object *op; |
|
|
101 | int i; |
101 | |
102 | |
102 | if (QUERY_FLAG (gen, FLAG_CONTENT_ON_GEN)) |
103 | if (QUERY_FLAG (gen, FLAG_CONTENT_ON_GEN)) |
103 | { |
104 | { |
104 | // either copy one item from the inventory... |
105 | // either copy one item from the inventory... |
105 | if (!gen->inv) |
106 | if (!gen->inv) |
… | |
… | |
109 | int index = 0; |
110 | int index = 0; |
110 | for (object *tmp = gen->inv; tmp; tmp = tmp->below) |
111 | for (object *tmp = gen->inv; tmp; tmp = tmp->below) |
111 | if (!rndm (++index)) |
112 | if (!rndm (++index)) |
112 | op = tmp; |
113 | op = tmp; |
113 | |
114 | |
|
|
115 | i = find_free_spot (op, gen->map, gen->x, gen->y, 1, 9); |
|
|
116 | if (i < 0) |
|
|
117 | return; |
|
|
118 | |
114 | op = object_create_clone (op); |
119 | op = object_create_clone (op); |
115 | |
120 | |
116 | CLEAR_FLAG (op, FLAG_IS_A_TEMPLATE); |
121 | CLEAR_FLAG (op, FLAG_IS_A_TEMPLATE); |
117 | unflag_inv (op, FLAG_IS_A_TEMPLATE); |
122 | unflag_inv (op, FLAG_IS_A_TEMPLATE); |
118 | } |
123 | } |
119 | else if (gen->other_arch) |
124 | else if (gen->other_arch) |
120 | { |
125 | { |
121 | // ...or use other_arch |
126 | // ...or use other_arch |
|
|
127 | i = find_free_spot (gen->other_arch, gen->map, gen->x, gen->y, 1, 9); |
|
|
128 | if (i < 0) |
|
|
129 | return; |
|
|
130 | |
122 | op = arch_to_object (gen->other_arch); |
131 | op = arch_to_object (gen->other_arch); |
123 | } |
132 | } |
124 | else |
133 | else |
125 | return; |
134 | return; |
126 | |
135 | |
127 | op->expand_tail (); |
136 | op->expand_tail (); |
128 | |
137 | |
129 | int i = find_free_spot (op, gen->map, gen->x, gen->y, 1, 9); |
|
|
130 | if (i >= 0) |
|
|
131 | { |
|
|
132 | if (insert_ob_in_map_at (op, gen->map, gen, 0, gen->x + freearr_x[i], gen->y + freearr_y[i])) |
138 | if (insert_ob_in_map_at (op, gen->map, gen, 0, gen->x + freearr_x[i], gen->y + freearr_y[i])) |
133 | { |
139 | { |
134 | if (rndm (0, 9)) |
140 | if (rndm (0, 9)) |
135 | generate_artifact (op, gen->map->difficulty); |
141 | generate_artifact (op, gen->map->difficulty); |
136 | |
142 | |
137 | if (op->has_random_items ()) |
143 | if (op->has_random_items ()) |
138 | create_treasure (op->randomitems, op, GT_APPLY, gen->map->difficulty); |
144 | create_treasure (op->randomitems, op, GT_APPLY, gen->map->difficulty); |
139 | |
145 | |
140 | return; |
146 | return; |
141 | } |
|
|
142 | } |
147 | } |
143 | |
148 | |
144 | op->destroy (); |
149 | op->destroy (); |
145 | } |
150 | } |
146 | |
151 | |