summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/initfile.cc
diff options
context:
space:
mode:
authordshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2007-07-12 13:09:04 +0000
committerdshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2007-07-12 13:09:04 +0000
commit6ff74508d47ca09bb7409b99a2d2075c3e8ca8a2 (patch)
treecef3ab6f75ece0b27e27c4d2d370681969dcfdca /crawl-ref/source/initfile.cc
parentd6c7e03e66c85a2236f38a7d0ce9ee71cab3dcbb (diff)
downloadcrawl-ref-6ff74508d47ca09bb7409b99a2d2075c3e8ca8a2.tar.gz
crawl-ref-6ff74508d47ca09bb7409b99a2d2075c3e8ca8a2.zip
[1752536] fire_order is now smarter.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@1847 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/initfile.cc')
-rw-r--r--crawl-ref/source/initfile.cc56
1 files changed, 24 insertions, 32 deletions
diff --git a/crawl-ref/source/initfile.cc b/crawl-ref/source/initfile.cc
index bcf373e371..cf7466b49a 100644
--- a/crawl-ref/source/initfile.cc
+++ b/crawl-ref/source/initfile.cc
@@ -255,37 +255,16 @@ static fire_type str_to_fire_types( const std::string &str )
return (FIRE_DAGGER);
else if (str == "spear")
return (FIRE_SPEAR);
- else if (str == "hand axe" || str == "handaxe")
+ else if (str == "hand axe" || str == "handaxe" || str == "axe")
return (FIRE_HAND_AXE);
else if (str == "club")
return (FIRE_CLUB);
+ else if (str == "javelin")
+ return (FIRE_JAVELIN);
return (FIRE_NONE);
}
-static void str_to_fire_order( const std::string &str,
- FixedVector< fire_type, NUM_FIRE_TYPES > &list )
-{
- int i;
- size_t pos = 0;
- std::string item = "";
-
- for (i = 0; i < NUM_FIRE_TYPES; i++)
- {
- // get next item from comma delimited list
- const size_t end = str.find( ',', pos );
- item = str.substr( pos, end - pos );
- trim_string( item );
-
- list[i] = str_to_fire_types( item );
-
- if (end == std::string::npos)
- break;
- else
- pos = end + 1;
- }
-}
-
static char str_to_race( const std::string &str )
{
int index = -1;
@@ -712,13 +691,7 @@ void game_options::reset_options()
fire_items_start = 0; // start at slot 'a'
// Clear fire_order and set up the defaults.
- for (int i = 0; i < NUM_FIRE_TYPES; i++)
- fire_order[i] = FIRE_NONE;
-
- fire_order[0] = FIRE_LAUNCHER; // fire first from bow...
- fire_order[1] = FIRE_JAVELIN;
- fire_order[2] = FIRE_DART; // then only consider darts
- fire_order[3] = FIRE_STONE; // and then chuck stones
+ set_fire_order("launcher, javelin / dart / stone");
item_stack_summary_minimum = 5;
@@ -838,6 +811,25 @@ static unsigned read_symbol(std::string s)
return (strtoul(s.c_str(), &tail, base));
}
+void game_options::set_fire_order(const std::string &s)
+{
+ fire_order.clear();
+ std::vector<std::string> slots = split_string(",", s);
+ for (int i = 0, size = slots.size(); i < size; ++i)
+ add_fire_order_slot(slots[i]);
+}
+
+void game_options::add_fire_order_slot(const std::string &s)
+{
+ unsigned flags = 0;
+ std::vector<std::string> alts = split_string("/", s);
+ for (int i = 0, size = alts.size(); i < size; ++i)
+ flags |= str_to_fire_types(alts[i]);
+
+ if (flags)
+ fire_order.push_back(flags);
+}
+
void game_options::add_feature_override(const std::string &text)
{
std::string::size_type epos = text.rfind("}");
@@ -1766,7 +1758,7 @@ void game_options::read_option_line(const std::string &str, bool runscript)
}
else if (key == "fire_order")
{
- str_to_fire_order( field, fire_order );
+ set_fire_order(field);
}
else if (key == "random_pick")
{