… | |
… | |
792 | case KW_sky: thawer.get (sky); break; |
792 | case KW_sky: thawer.get (sky); break; |
793 | |
793 | |
794 | case KW_per_player: thawer.get (per_player); break; |
794 | case KW_per_player: thawer.get (per_player); break; |
795 | case KW_per_party: thawer.get (per_party); break; |
795 | case KW_per_party: thawer.get (per_party); break; |
796 | |
796 | |
797 | case KW_region: get_region_by_name (thawer.get_str ()); break; |
797 | case KW_region: default_region = region::find (thawer.get_str ()); break; |
798 | case KW_shopitems: shopitems = parse_shop_string (thawer.get_str ()); break; |
798 | case KW_shopitems: shopitems = parse_shop_string (thawer.get_str ()); break; |
799 | |
799 | |
800 | // old names new names |
800 | // old names new names |
801 | case KW_hp: case KW_enter_x: thawer.get (enter_x); break; |
801 | case KW_hp: case KW_enter_x: thawer.get (enter_x); break; |
802 | case KW_sp: case KW_enter_y: thawer.get (enter_y); break; |
802 | case KW_sp: case KW_enter_y: thawer.get (enter_y); break; |
… | |
… | |
871 | MAP_OUT (reset_time); |
871 | MAP_OUT (reset_time); |
872 | MAP_OUT (reset_timeout); |
872 | MAP_OUT (reset_timeout); |
873 | MAP_OUT (fixed_resettime); |
873 | MAP_OUT (fixed_resettime); |
874 | MAP_OUT (difficulty); |
874 | MAP_OUT (difficulty); |
875 | |
875 | |
876 | if (region) MAP_OUT2 (region, region->name); |
876 | if (default_region) MAP_OUT2 (region, default_region->name); |
877 | |
877 | |
878 | if (shopitems) |
878 | if (shopitems) |
879 | { |
879 | { |
880 | char shop[MAX_BUF]; |
880 | char shop[MAX_BUF]; |
881 | print_shop_string (this, shop); |
881 | print_shop_string (this, shop); |
… | |
… | |
932 | * Remove and free all objects in the given map. |
932 | * Remove and free all objects in the given map. |
933 | */ |
933 | */ |
934 | void |
934 | void |
935 | maptile::clear () |
935 | maptile::clear () |
936 | { |
936 | { |
|
|
937 | sfree (regions, size ()), regions = 0; |
|
|
938 | free (regionmap), regionmap = 0; |
|
|
939 | |
937 | if (!spaces) |
940 | if (spaces) |
938 | return; |
941 | { |
939 | |
|
|
940 | for (mapspace *ms = spaces + size (); ms-- > spaces; ) |
942 | for (mapspace *ms = spaces + size (); ms-- > spaces; ) |
941 | while (object *op = ms->bot) |
943 | while (object *op = ms->bot) |
942 | { |
944 | { |
943 | if (op->head) |
945 | if (op->head) |
944 | op = op->head; |
946 | op = op->head; |
945 | |
947 | |
946 | op->destroy_inv (false); |
948 | op->destroy_inv (false); |
947 | op->destroy (); |
949 | op->destroy (); |
948 | } |
950 | } |
949 | |
951 | |
950 | sfree (spaces, size ()), spaces = 0; |
952 | sfree (spaces, size ()), spaces = 0; |
|
|
953 | } |
951 | |
954 | |
952 | if (buttons) |
955 | if (buttons) |
953 | free_objectlinkpt (buttons), buttons = 0; |
956 | free_objectlinkpt (buttons), buttons = 0; |
954 | } |
957 | } |
955 | |
958 | |
… | |
… | |
1449 | |
1452 | |
1450 | /** |
1453 | /** |
1451 | * Return whether map2 is adjacent to map1. If so, store the distance from |
1454 | * Return whether map2 is adjacent to map1. If so, store the distance from |
1452 | * map1 to map2 in dx/dy. |
1455 | * map1 to map2 in dx/dy. |
1453 | */ |
1456 | */ |
1454 | static int |
1457 | int |
1455 | adjacent_map (const maptile *map1, const maptile *map2, int *dx, int *dy) |
1458 | adjacent_map (const maptile *map1, const maptile *map2, int *dx, int *dy) |
1456 | { |
1459 | { |
1457 | if (!map1 || !map2) |
1460 | if (!map1 || !map2) |
1458 | return 0; |
1461 | return 0; |
1459 | |
1462 | |
… | |
… | |
1631 | * flags has no meaning for this function at this time - I kept it in to |
1634 | * flags has no meaning for this function at this time - I kept it in to |
1632 | * be more consistant with the above function and also in case they are needed |
1635 | * be more consistant with the above function and also in case they are needed |
1633 | * for something in the future. Also, since no object is pasted, the best |
1636 | * for something in the future. Also, since no object is pasted, the best |
1634 | * field of the rv_vector is set to NULL. |
1637 | * field of the rv_vector is set to NULL. |
1635 | */ |
1638 | */ |
1636 | |
|
|
1637 | void |
1639 | void |
1638 | get_rangevector_from_mapcoord (const maptile *m, int x, int y, const object *op2, rv_vector * retval, int flags) |
1640 | get_rangevector_from_mapcoord (const maptile *m, int x, int y, const object *op2, rv_vector *retval, int flags) |
1639 | { |
1641 | { |
1640 | if (!adjacent_map (m, op2->map, &retval->distance_x, &retval->distance_y)) |
1642 | if (!adjacent_map (m, op2->map, &retval->distance_x, &retval->distance_y)) |
1641 | { |
1643 | { |
1642 | /* be conservative and fill in _some_ data */ |
1644 | /* be conservative and fill in _some_ data */ |
1643 | retval->distance = 100000; |
1645 | retval->distance = 100000; |
… | |
… | |
1680 | op->remove (); |
1682 | op->remove (); |
1681 | |
1683 | |
1682 | return insert_ob_in_map_at (op, this, originator, flags, x, y); |
1684 | return insert_ob_in_map_at (op, this, originator, flags, x, y); |
1683 | } |
1685 | } |
1684 | |
1686 | |
|
|
1687 | region * |
|
|
1688 | maptile::region (int x, int y) const |
|
|
1689 | { |
|
|
1690 | if (regions |
|
|
1691 | && regionmap |
|
|
1692 | && !OUT_OF_REAL_MAP (this, x, y)) |
|
|
1693 | if (struct region *reg = regionmap [regions [y * width + x]]) |
|
|
1694 | return reg; |
|
|
1695 | |
|
|
1696 | if (default_region) |
|
|
1697 | return default_region; |
|
|
1698 | |
|
|
1699 | return ::region::default_region (); |
|
|
1700 | } |
|
|
1701 | |