summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/initfile.cc
diff options
context:
space:
mode:
authordshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2007-01-02 05:35:36 +0000
committerdshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2007-01-02 05:35:36 +0000
commit0f7006bc57cf51d5438cbe9ca2a1fb63d93a56c6 (patch)
tree3465a1ae3ad8685565283e312a21b99d94a461d0 /crawl-ref/source/initfile.cc
parent027d90af454d11b0085ce276ed48dd0901c4c2d2 (diff)
downloadcrawl-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.cc30
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)
{