… | |
… | |
243 | for (mapspace *ms = spaces + size (); ms-- > spaces; ) |
243 | for (mapspace *ms = spaces + size (); ms-- > spaces; ) |
244 | for (object *tmp = ms->bot; tmp; tmp = tmp->above) |
244 | for (object *tmp = ms->bot; tmp; tmp = tmp->above) |
245 | INVOKE_OBJECT (RESET, tmp); |
245 | INVOKE_OBJECT (RESET, tmp); |
246 | } |
246 | } |
247 | |
247 | |
|
|
248 | void |
|
|
249 | maptile::post_load () |
|
|
250 | { |
|
|
251 | #if 0 |
|
|
252 | if (!spaces) |
|
|
253 | return; |
|
|
254 | |
|
|
255 | for (mapspace *ms = spaces + size (); ms-- > spaces; ) |
|
|
256 | for (object *tmp = ms->bot; tmp; tmp = tmp->above) |
|
|
257 | ; // nop |
|
|
258 | #endif |
|
|
259 | } |
|
|
260 | |
248 | //+GPL |
261 | //+GPL |
249 | |
262 | |
250 | /* link_multipart_objects go through all the objects on the map looking |
263 | /* link_multipart_objects go through all the objects on the map looking |
251 | * for objects whose arch says they are multipart yet according to the |
264 | * for objects whose arch says they are multipart yet according to the |
252 | * info we have, they only have the head (as would be expected when |
265 | * info we have, they only have the head (as would be expected when |
… | |
… | |
617 | case KW_shopgreed: thawer.get (shopgreed); break; |
630 | case KW_shopgreed: thawer.get (shopgreed); break; |
618 | case KW_shopmin: thawer.get (shopmin); break; |
631 | case KW_shopmin: thawer.get (shopmin); break; |
619 | case KW_shopmax: thawer.get (shopmax); break; |
632 | case KW_shopmax: thawer.get (shopmax); break; |
620 | case KW_shoprace: thawer.get (shoprace); break; |
633 | case KW_shoprace: thawer.get (shoprace); break; |
621 | case KW_outdoor: thawer.get (outdoor); break; |
634 | case KW_outdoor: thawer.get (outdoor); break; |
622 | case KW_temp: thawer.get (temp); break; |
|
|
623 | case KW_pressure: thawer.get (pressure); break; |
|
|
624 | case KW_humid: thawer.get (humid); break; |
|
|
625 | case KW_windspeed: thawer.get (windspeed); break; |
|
|
626 | case KW_winddir: thawer.get (winddir); break; |
|
|
627 | case KW_sky: thawer.get (sky); break; |
|
|
628 | |
635 | |
629 | case KW_per_player: thawer.get (per_player); break; |
636 | case KW_per_player: thawer.get (per_player); break; |
630 | case KW_per_party: thawer.get (per_party); break; |
637 | case KW_per_party: thawer.get (per_party); break; |
631 | case KW_no_reset: thawer.get (no_reset); break; |
638 | case KW_no_reset: thawer.get (no_reset); break; |
632 | case KW_no_drop: thawer.get (no_drop); break; |
639 | case KW_no_drop: thawer.get (no_drop); break; |
… | |
… | |
701 | //-GPL |
708 | //-GPL |
702 | |
709 | |
703 | bool |
710 | bool |
704 | maptile::_save_header (object_freezer &freezer) |
711 | maptile::_save_header (object_freezer &freezer) |
705 | { |
712 | { |
706 | #define MAP_OUT(k) freezer.put (KW_ ## k, k) |
713 | #define MAP_OUT(k) freezer.put (KW(k), k) |
707 | #define MAP_OUT2(k,v) freezer.put (KW_ ## k, v) |
714 | #define MAP_OUT2(k,v) freezer.put (KW(k), v) |
708 | |
715 | |
709 | MAP_OUT2 (arch, "map"); |
716 | MAP_OUT2 (arch, CS(map)); |
710 | |
717 | |
711 | if (name) MAP_OUT (name); |
718 | if (name) MAP_OUT (name); |
712 | MAP_OUT (swap_time); |
719 | MAP_OUT (swap_time); |
713 | MAP_OUT (reset_time); |
720 | MAP_OUT (reset_time); |
714 | MAP_OUT (reset_timeout); |
721 | MAP_OUT (reset_timeout); |
… | |
… | |
722 | MAP_OUT (shopgreed); |
729 | MAP_OUT (shopgreed); |
723 | MAP_OUT (shopmin); |
730 | MAP_OUT (shopmin); |
724 | MAP_OUT (shopmax); |
731 | MAP_OUT (shopmax); |
725 | if (shoprace) MAP_OUT (shoprace); |
732 | if (shoprace) MAP_OUT (shoprace); |
726 | |
733 | |
727 | MAP_OUT (darkness); |
|
|
728 | MAP_OUT (width); |
734 | MAP_OUT (width); |
729 | MAP_OUT (height); |
735 | MAP_OUT (height); |
730 | MAP_OUT (enter_x); |
736 | MAP_OUT (enter_x); |
731 | MAP_OUT (enter_y); |
737 | MAP_OUT (enter_y); |
732 | |
738 | MAP_OUT (darkness); |
733 | if (msg) freezer.put (KW_msg , KW_endmsg , msg); |
|
|
734 | if (maplore) freezer.put (KW_maplore, KW_endmaplore, maplore); |
|
|
735 | |
|
|
736 | MAP_OUT (outdoor); |
739 | MAP_OUT (outdoor); |
737 | MAP_OUT (temp); |
740 | |
738 | MAP_OUT (pressure); |
741 | if (msg) freezer.put (KW(msg) , KW(endmsg) , msg); |
739 | MAP_OUT (humid); |
742 | if (maplore) freezer.put (KW(maplore), KW(endmaplore), maplore); |
740 | MAP_OUT (windspeed); |
|
|
741 | MAP_OUT (winddir); |
|
|
742 | MAP_OUT (sky); |
|
|
743 | |
743 | |
744 | MAP_OUT (per_player); |
744 | MAP_OUT (per_player); |
745 | MAP_OUT (per_party); |
745 | MAP_OUT (per_party); |
746 | |
746 | |
747 | if (tile_path [0]) MAP_OUT2 (tile_path_1, tile_path [0]); |
747 | if (tile_path [0]) MAP_OUT2 (tile_path_1, tile_path [0]); |
748 | if (tile_path [1]) MAP_OUT2 (tile_path_2, tile_path [1]); |
748 | if (tile_path [1]) MAP_OUT2 (tile_path_2, tile_path [1]); |
749 | if (tile_path [2]) MAP_OUT2 (tile_path_3, tile_path [2]); |
749 | if (tile_path [2]) MAP_OUT2 (tile_path_3, tile_path [2]); |
750 | if (tile_path [3]) MAP_OUT2 (tile_path_4, tile_path [3]); |
750 | if (tile_path [3]) MAP_OUT2 (tile_path_4, tile_path [3]); |
751 | |
751 | |
752 | freezer.put (this); |
752 | freezer.put (this); |
753 | freezer.put (KW_end); |
753 | freezer.put (KW(end)); |
754 | |
754 | |
755 | return true; |
755 | return true; |
756 | } |
756 | } |
757 | |
757 | |
758 | bool |
758 | bool |
… | |
… | |
843 | |
843 | |
844 | clear (); |
844 | clear (); |
845 | } |
845 | } |
846 | |
846 | |
847 | /* decay and destroy perishable items in a map */ |
847 | /* decay and destroy perishable items in a map */ |
|
|
848 | // TODO: should be done regularly, not on map load? |
848 | void |
849 | void |
849 | maptile::do_decay_objects () |
850 | maptile::do_decay_objects () |
850 | { |
851 | { |
851 | if (!spaces) |
852 | if (!spaces) |
852 | return; |
853 | return; |
… | |
… | |
899 | || mat & M_LIQUID |
900 | || mat & M_LIQUID |
900 | || (mat & M_IRON && rndm (1, 5) == 1) |
901 | || (mat & M_IRON && rndm (1, 5) == 1) |
901 | || (mat & M_GLASS && rndm (1, 2) == 1) |
902 | || (mat & M_GLASS && rndm (1, 2) == 1) |
902 | || ((mat & M_STONE || mat & M_ADAMANT) && rndm (1, 10) == 1) |
903 | || ((mat & M_STONE || mat & M_ADAMANT) && rndm (1, 10) == 1) |
903 | || ((mat & M_SOFT_METAL || mat & M_BONE) && rndm (1, 3) == 1) |
904 | || ((mat & M_SOFT_METAL || mat & M_BONE) && rndm (1, 3) == 1) |
904 | || (mat & M_ICE && temp > 32)) |
905 | //|| (mat & M_ICE && temp > 32) |
|
|
906 | ) |
905 | destroy = 1; |
907 | destroy = 1; |
906 | } |
908 | } |
907 | |
909 | |
908 | /* adjust overall chance below */ |
910 | /* adjust overall chance below */ |
909 | if (destroy && rndm (0, 1)) |
911 | if (destroy && rndm (0, 1)) |