diff options
author | Adam Borowski <kilobyte@angband.pl> | 2013-07-14 22:27:13 +0200 |
---|---|---|
committer | Adam Borowski <kilobyte@angband.pl> | 2013-07-15 01:55:52 +0200 |
commit | c50a79afaf218f9c9ea27920dbc5fc0356d7c54e (patch) | |
tree | e2a6e1801f7fd252d5821f67ee5da955d2e968f6 /crawl-ref/source/viewmap.cc | |
parent | 620b36ed2e9e745560c0b93f23b272ac2bb0098f (diff) | |
download | crawl-ref-c50a79afaf218f9c9ea27920dbc5fc0356d7c54e.tar.gz crawl-ref-c50a79afaf218f9c9ea27920dbc5fc0356d7c54e.zip |
Allow map forgotten via X^F to be restored with X^U.
Diffstat (limited to 'crawl-ref/source/viewmap.cc')
-rw-r--r-- | crawl-ref/source/viewmap.cc | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/crawl-ref/source/viewmap.cc b/crawl-ref/source/viewmap.cc index 2bf694590b..eaf3cfc65a 100644 --- a/crawl-ref/source/viewmap.cc +++ b/crawl-ref/source/viewmap.cc @@ -698,6 +698,21 @@ static level_pos _stair_dest(const coord_def& p, command_type dir) return sinf->destination; } +static void _unforget_map() +{ + ASSERT(env.map_forgotten.get()); + MapKnowledge &old(*env.map_forgotten.get()); + + for (rectangle_iterator ri(0); ri; ++ri) + if (!env.map_knowledge(*ri).known() + && (!env.map_knowledge(*ri).mapped() || old(*ri).known())) + { + // Don't overwrite known squares, nor magic-mapped with + // magic-mapped data -- what was forgotten is less up to date. + env.map_knowledge(*ri) = old(*ri); + } +} + // show_map() now centers the known map along x or y. This prevents // the player from getting "artificial" location clues by using the // map to see how close to the end they are. They'll need to explore @@ -955,13 +970,26 @@ bool show_map(level_pos &lpos, break; case CMD_MAP_FORGET: - if (yesno("Really forget level map?", true, 'n')) { + // Merge it with already forgotten data first. + if (env.map_forgotten.get()) + _unforget_map(); + MapKnowledge *old = new MapKnowledge(env.map_knowledge); forget_map(); + env.map_forgotten.reset(old); mpr("Level map cleared."); } + break; + + case CMD_MAP_UNFORGET: + if (env.map_forgotten.get()) + { + _unforget_map(); + env.map_forgotten.reset(); + mpr("Remembered map restored."); + } else - canned_msg(MSG_OK); + mpr("No remembered map."); break; case CMD_MAP_ADD_WAYPOINT: |