… | |
… | |
578 | object::copy_to (object *dst) |
578 | object::copy_to (object *dst) |
579 | { |
579 | { |
580 | *dst = *this; |
580 | *dst = *this; |
581 | |
581 | |
582 | if (speed < 0) |
582 | if (speed < 0) |
583 | dst->speed_left = speed_left - rndm (); |
583 | dst->speed_left -= rndm (); |
584 | |
584 | |
585 | dst->set_speed (dst->speed); |
585 | dst->set_speed (dst->speed); |
586 | } |
586 | } |
587 | |
587 | |
588 | void |
588 | void |
… | |
… | |
915 | |
915 | |
916 | if (!freed_map) |
916 | if (!freed_map) |
917 | { |
917 | { |
918 | freed_map = new maptile; |
918 | freed_map = new maptile; |
919 | |
919 | |
|
|
920 | freed_map->path = "<freed objects map>"; |
920 | freed_map->name = "/internal/freed_objects_map"; |
921 | freed_map->name = "/internal/freed_objects_map"; |
921 | freed_map->width = 3; |
922 | freed_map->width = 3; |
922 | freed_map->height = 3; |
923 | freed_map->height = 3; |
923 | |
924 | |
924 | freed_map->alloc (); |
925 | freed_map->alloc (); |
… | |
… | |
1230 | |
1231 | |
1231 | object *top, *floor = NULL; |
1232 | object *top, *floor = NULL; |
1232 | |
1233 | |
1233 | op->remove (); |
1234 | op->remove (); |
1234 | |
1235 | |
1235 | if (out_of_map (m, op->x, op->y)) |
|
|
1236 | { |
|
|
1237 | LOG (llevError, "Trying to insert object outside the map.\n%s\n", op->debug_desc ()); |
|
|
1238 | #ifdef MANY_CORES |
|
|
1239 | /* Better to catch this here, as otherwise the next use of this object |
|
|
1240 | * is likely to cause a crash. Better to find out where it is getting |
|
|
1241 | * improperly inserted. |
|
|
1242 | */ |
|
|
1243 | abort (); |
|
|
1244 | #endif |
|
|
1245 | return op; |
|
|
1246 | } |
|
|
1247 | |
|
|
1248 | if (object *more = op->more) |
|
|
1249 | if (!insert_ob_in_map (more, m, originator, flag)) |
|
|
1250 | return 0; |
|
|
1251 | |
|
|
1252 | CLEAR_FLAG (op, FLAG_REMOVED); |
|
|
1253 | |
|
|
1254 | /* Ideally, the caller figures this out. However, it complicates a lot |
1236 | /* Ideally, the caller figures this out. However, it complicates a lot |
1255 | * of areas of callers (eg, anything that uses find_free_spot would now |
1237 | * of areas of callers (eg, anything that uses find_free_spot would now |
1256 | * need extra work |
1238 | * need extra work |
1257 | */ |
1239 | */ |
1258 | if (!xy_normalise (m, op->x, op->y)) |
1240 | if (!xy_normalise (m, op->x, op->y)) |
|
|
1241 | { |
|
|
1242 | op->destroy (); |
1259 | return 0; |
1243 | return 0; |
|
|
1244 | } |
|
|
1245 | |
|
|
1246 | if (object *more = op->more) |
|
|
1247 | if (!insert_ob_in_map (more, m, originator, flag)) |
|
|
1248 | return 0; |
|
|
1249 | |
|
|
1250 | CLEAR_FLAG (op, FLAG_REMOVED); |
1260 | |
1251 | |
1261 | op->map = m; |
1252 | op->map = m; |
1262 | mapspace &ms = op->ms (); |
1253 | mapspace &ms = op->ms (); |
1263 | |
1254 | |
1264 | /* this has to be done after we translate the coordinates. |
1255 | /* this has to be done after we translate the coordinates. |