… | |
… | |
175 | i = find_first_free_spot (op, op->map, x, y); |
175 | i = find_first_free_spot (op, op->map, x, y); |
176 | |
176 | |
177 | if (i == -1) |
177 | if (i == -1) |
178 | return 0; /* No free spot */ |
178 | return 0; /* No free spot */ |
179 | |
179 | |
180 | if (op->head != NULL) |
|
|
181 | op = op->head; |
180 | op = op->head_ (); |
182 | op->remove (); |
181 | op->remove (); |
|
|
182 | |
183 | for (tmp = op; tmp != NULL; tmp = tmp->more) |
183 | for (object *tmp = op; tmp; tmp = tmp->more) |
|
|
184 | { |
184 | tmp->x = x + freearr_x[i] + (tmp->arch == NULL ? 0 : tmp->arch->x), |
185 | tmp->x = x + freearr_x[i] + (!tmp->arch ? 0 : tmp->arch->x); |
185 | tmp->y = y + freearr_y[i] + (tmp->arch == NULL ? 0 : tmp->arch->y); |
186 | tmp->y = y + freearr_y[i] + (!tmp->arch ? 0 : tmp->arch->y); |
|
|
187 | } |
186 | |
188 | |
187 | tmp = insert_ob_in_map (op, op->map, originator, 0); |
189 | op = insert_ob_in_map (op, op->map, originator, 0); |
188 | if (tmp) |
190 | |
189 | return 0; |
191 | return !op; |
190 | else |
|
|
191 | return 1; |
|
|
192 | } |
192 | } |
193 | |
193 | |
194 | /* |
194 | /* |
195 | * Return value: 1 if object was destroyed, 0 otherwise. |
195 | * Return value: 1 if object was destroyed, 0 otherwise. |
196 | * Modified so that instead of passing the 'originator' that had no |
196 | * Modified so that instead of passing the 'originator' that had no |
… | |
… | |
284 | } |
284 | } |
285 | |
285 | |
286 | user->remove (); |
286 | user->remove (); |
287 | |
287 | |
288 | /* Update location for the object */ |
288 | /* Update location for the object */ |
289 | for (tmp = user; tmp != NULL; tmp = tmp->more) |
289 | for (tmp = user; tmp; tmp = tmp->more) |
290 | { |
290 | { |
291 | tmp->x = other_teleporter->x + freearr_x[k] + (tmp->arch == NULL ? 0 : tmp->arch->x); |
291 | 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); |
292 | tmp->y = other_teleporter->y + freearr_y[k] + (tmp->arch ? tmp->arch->y : 0); |
293 | } |
293 | } |
|
|
294 | |
294 | tmp = insert_ob_in_map (user, other_teleporter->map, NULL, 0); |
295 | tmp = insert_ob_in_map (user, other_teleporter->map, NULL, 0); |
295 | return (tmp == NULL); |
296 | return !tmp; |
296 | } |
297 | } |
297 | |
298 | |
298 | void |
299 | void |
299 | recursive_roll (object *op, int dir, object *pusher) |
300 | recursive_roll (object *op, int dir, object *pusher) |
300 | { |
301 | { |