diff options
author | dshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573> | 2007-01-02 05:35:36 +0000 |
---|---|---|
committer | dshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573> | 2007-01-02 05:35:36 +0000 |
commit | 0f7006bc57cf51d5438cbe9ca2a1fb63d93a56c6 (patch) | |
tree | 3465a1ae3ad8685565283e312a21b99d94a461d0 /crawl-ref/source/initfile.cc | |
parent | 027d90af454d11b0085ce276ed48dd0901c4c2d2 (diff) | |
download | crawl-ref-0f7006bc57cf51d5438cbe9ca2a1fb63d93a56c6.tar.gz crawl-ref-0f7006bc57cf51d5438cbe9ca2a1fb63d93a56c6.zip |
stop_travel messages now also apply to shift-run and rest (under the default
conditions this is irrelevant because al messages stop shift-run and rest).
Allow individual interrupts to be disabled for an activity using -=. For
instance, interrupt_rest -= message will disable the
stop-resting-for-any-silly-message behaviour (and also make stop_travel
relevant to resting).
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@761 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/initfile.cc')
-rw-r--r-- | crawl-ref/source/initfile.cc | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/crawl-ref/source/initfile.cc b/crawl-ref/source/initfile.cc index 0b3c032e6d..0054550a91 100644 --- a/crawl-ref/source/initfile.cc +++ b/crawl-ref/source/initfile.cc @@ -493,7 +493,8 @@ void game_options::set_activity_interrupt( void game_options::set_activity_interrupt(const std::string &activity_name, const std::string &interrupt_names, - bool append_interrupts) + bool append_interrupts, + bool remove_interrupts) { const delay_type delay = get_delay(activity_name); if (delay == NUM_DELAYS) @@ -502,14 +503,28 @@ void game_options::set_activity_interrupt(const std::string &activity_name, return; } + std::vector<std::string> interrupts = split_string(",", interrupt_names); FixedVector<bool, NUM_AINTERRUPTS> &eints = activity_interrupts[ delay ]; - if (!append_interrupts) - clear_activity_interrupts(eints); + if (remove_interrupts) + { + FixedVector<bool, NUM_AINTERRUPTS> refints; + clear_activity_interrupts(refints); + for (int i = 0, size = interrupts.size(); i < size; ++i) + set_activity_interrupt(refints, interrupts[i]); - std::vector<std::string> interrupts = split_string(",", interrupt_names); - for (int i = 0, size = interrupts.size(); i < size; ++i) - set_activity_interrupt(eints, interrupts[i]); + for (int i = 0; i < NUM_AINTERRUPTS; ++i) + if (refints[i]) + eints[i] = false; + } + else + { + if (!append_interrupts) + clear_activity_interrupts(eints); + + for (int i = 0, size = interrupts.size(); i < size; ++i) + set_activity_interrupt(eints, interrupts[i]); + } eints[AI_FORCE_INTERRUPT] = true; } @@ -1484,7 +1499,8 @@ void game_options::read_option_line(const std::string &str, bool runscript) { set_activity_interrupt(key.substr(interrupt_prefix.length()), field, - plus_equal); + plus_equal, + minus_equal); } else if (key.find("cset") == 0) { |