summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--crawl-ref/source/mapdef.cc14
-rw-r--r--crawl-ref/source/mapdef.h1
2 files changed, 14 insertions, 1 deletions
diff --git a/crawl-ref/source/mapdef.cc b/crawl-ref/source/mapdef.cc
index c46b6a58cf..0ef583e43a 100644
--- a/crawl-ref/source/mapdef.cc
+++ b/crawl-ref/source/mapdef.cc
@@ -5792,6 +5792,18 @@ void map_flags::clear()
flags_set = flags_unset = 0;
}
+map_flags &map_flags::operator |= (const map_flags &o)
+{
+ flags_set |= o.flags_set;
+ flags_unset |= o.flags_unset;
+
+ // In the event of conflict, the later flag set (o here) wins.
+ flags_set &= ~o.flags_unset;
+ flags_unset &= ~o.flags_set;
+
+ return *this;
+}
+
typedef map<string, unsigned long> flag_map;
map_flags map_flags::parse(const string flag_list[],
@@ -6059,7 +6071,7 @@ string keyed_mapspec::set_mask(const string &s, bool garbage)
{"vault", "no_item_gen", "no_monster_gen", "no_pool_fixup",
"UNUSED",
"no_wall_fixup", "opaque", "no_trap_gen", ""};
- map_mask = map_flags::parse(flag_list, s);
+ map_mask |= map_flags::parse(flag_list, s);
}
catch (const string &error)
{
diff --git a/crawl-ref/source/mapdef.h b/crawl-ref/source/mapdef.h
index c48e59671b..d005cd5dff 100644
--- a/crawl-ref/source/mapdef.h
+++ b/crawl-ref/source/mapdef.h
@@ -842,6 +842,7 @@ struct map_flags
map_flags();
void clear();
+ map_flags &operator |= (const map_flags &o);
static map_flags parse(const string flag_list[],
const string &s) throw(string);