diff options
Diffstat (limited to 'crawl-ref/source/files.cc')
-rw-r--r-- | crawl-ref/source/files.cc | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/crawl-ref/source/files.cc b/crawl-ref/source/files.cc index 2e69a145c1..190d75cb9c 100644 --- a/crawl-ref/source/files.cc +++ b/crawl-ref/source/files.cc @@ -90,6 +90,7 @@ #include "travel.h" #include "tutorial.h" #include "view.h" +#include "xom.h" void save_level(int level_saved, level_area_type lt, branch_type where_were_you); @@ -823,6 +824,29 @@ static void grab_followers() } } +// Should be called afetr grab_followers(), so that items carried by +// followers won't be considered lost. +static void _xom_check_lost_items(level_area_type old_level_type) +{ + if (old_level_type == LEVEL_DUNGEON) + return; + + int amusement = 0; + + for (int i = 0; i < MAX_ITEMS; i++) + { + item_def& item(mitm[i]); + + if (!is_valid_item(item)) + continue; + + // Item is in player intentory, so it's not lost. + if (item.x == -1 && item.y == -1) + continue; + + xom_check_lost_item(item); + } +} bool load( dungeon_feature_type stair_taken, int load_mode, level_area_type old_level_type, char old_level, @@ -872,6 +896,8 @@ bool load( dungeon_feature_type stair_taken, int load_mode, save_level( old_level, LEVEL_DUNGEON, where_were_you2 ); } + _xom_check_lost_items(old_level_type); + // Try to open level savefile. FILE *levelFile = fopen(cha_fil.c_str(), "rb"); @@ -1027,6 +1053,9 @@ bool load( dungeon_feature_type stair_taken, int load_mode, curr_PlaceInfo.assert_validity(); } + if (just_created_level) + you.attribute[ATTR_ABYSS_ENTOURAGE] = 0; + return just_created_level; } // end load() |