… | |
… | |
224 | for (i = -5; i < 6; i++) |
224 | for (i = -5; i < 6; i++) |
225 | for (j = -5; j < 6; j++) |
225 | for (j = -5; j < 6; j++) |
226 | { |
226 | { |
227 | if (i == 0 && j == 0) |
227 | if (i == 0 && j == 0) |
228 | continue; |
228 | continue; |
|
|
229 | |
229 | /* Perhaps this should be extended to support tiled maps */ |
230 | /* Perhaps this should be extended to support tiled maps */ |
230 | if (OUT_OF_REAL_MAP (teleporter->map, teleporter->x + i, teleporter->y + j)) |
231 | if (OUT_OF_REAL_MAP (teleporter->map, teleporter->x + i, teleporter->y + j)) |
231 | continue; |
232 | continue; |
|
|
233 | |
232 | other_teleporter = GET_MAP_OB (teleporter->map, teleporter->x + i, teleporter->y + j); |
234 | other_teleporter = GET_MAP_OB (teleporter->map, teleporter->x + i, teleporter->y + j); |
233 | |
235 | |
234 | while (other_teleporter) |
236 | while (other_teleporter) |
235 | { |
237 | { |
236 | if (other_teleporter->type == tele_type) |
238 | if (other_teleporter->type == tele_type) |
237 | break; |
239 | break; |
238 | other_teleporter = other_teleporter->above; |
240 | other_teleporter = other_teleporter->above; |
239 | } |
241 | } |
|
|
242 | |
240 | if (other_teleporter && !(RANDOM () % ++nrofalt)) |
243 | if (other_teleporter && !rndm (++nrofalt)) |
241 | altern = other_teleporter; |
244 | altern = other_teleporter; |
242 | } |
245 | } |
243 | |
246 | |
244 | if (!nrofalt) |
247 | if (!nrofalt) |
245 | { |
248 | { |
… | |
… | |
284 | } |
287 | } |
285 | |
288 | |
286 | user->remove (); |
289 | user->remove (); |
287 | |
290 | |
288 | /* Update location for the object */ |
291 | /* Update location for the object */ |
289 | for (tmp = user; tmp != NULL; tmp = tmp->more) |
292 | for (tmp = user; tmp; tmp = tmp->more) |
290 | { |
293 | { |
291 | tmp->x = other_teleporter->x + freearr_x[k] + (tmp->arch == NULL ? 0 : tmp->arch->x); |
294 | tmp->x = other_teleporter->x + freearr_x[k] + (tmp->arch ? tmp->arch->x : 0); |
292 | tmp->y = other_teleporter->y + freearr_y[k] + (tmp->arch == NULL ? 0 : tmp->arch->y); |
295 | tmp->y = other_teleporter->y + freearr_y[k] + (tmp->arch ? tmp->arch->y : 0); |
293 | } |
296 | } |
|
|
297 | |
294 | tmp = insert_ob_in_map (user, other_teleporter->map, NULL, 0); |
298 | tmp = insert_ob_in_map (user, other_teleporter->map, NULL, 0); |
295 | return (tmp == NULL); |
299 | return !tmp; |
296 | } |
300 | } |
297 | |
301 | |
298 | void |
302 | void |
299 | recursive_roll (object *op, int dir, object *pusher) |
303 | recursive_roll (object *op, int dir, object *pusher) |
300 | { |
304 | { |