diff options
author | Matthew Cline <zelgadis@sourceforge.net> | 2009-11-03 18:34:01 -0800 |
---|---|---|
committer | Matthew Cline <zelgadis@sourceforge.net> | 2009-11-03 18:36:53 -0800 |
commit | 1bf203aaf578284d268fdca67c9d334a79a53c0d (patch) | |
tree | fe95bb3876906713ce7ce33c14e7d3778b53324c | |
parent | 20161f77a87bf5ef908369863755304ea011a8bd (diff) | |
download | crawl-ref-1bf203aaf578284d268fdca67c9d334a79a53c0d.tar.gz crawl-ref-1bf203aaf578284d268fdca67c9d334a79a53c0d.zip |
Fixed MONS_NO_MONSTER == NUM_MONSTERS + 1
Fixed MONS_NO_MONSTER == NUM_MONSTERS + 1, which was a problem because
MONS_NO_MONSTER can end up in savefiles, meaning that when NUM_MONSTERS
increased old save files would become broken.
unmarshall_monster() has a temporary hack to preserve compatibility with
old save files, and will fail a COMPILE_CHECK() when NUM_MONSTERS
increases beyond its current value.
-rw-r--r-- | crawl-ref/source/enum.h | 9 | ||||
-rw-r--r-- | crawl-ref/source/tags.cc | 10 |
2 files changed, 16 insertions, 3 deletions
diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h index e675ff2059..a0b94c81c5 100644 --- a/crawl-ref/source/enum.h +++ b/crawl-ref/source/enum.h @@ -2099,10 +2099,13 @@ enum monster_type // (int) menv[].type MONS_TEST_SPAWNER, NUM_MONSTERS, // used for polymorph - MONS_NO_MONSTER, + + // MONS_NO_MONSTER can get put in savefiles, so it shouldn't change + // when NUM_MONSTERS increases. + MONS_NO_MONSTER = 1000, MONS_PLAYER, - RANDOM_MONSTER = 1000, // used to distinguish between a random monster and using program bugs for error trapping {dlb} + RANDOM_MONSTER = 2000, // used to distinguish between a random monster and using program bugs for error trapping {dlb} // A random draconian, either base coloured drac or specialised. RANDOM_DRACONIAN, @@ -2113,7 +2116,7 @@ enum monster_type // (int) menv[].type // Any random specialised draconian, such as a draconian knight. RANDOM_NONBASE_DRACONIAN, - WANDERING_MONSTER = 2500 // only used in monster placement routines - forced limit checks {dlb} + WANDERING_MONSTER = 3500 // only used in monster placement routines - forced limit checks {dlb} }; diff --git a/crawl-ref/source/tags.cc b/crawl-ref/source/tags.cc index 04e6102d32..9300e7329b 100644 --- a/crawl-ref/source/tags.cc +++ b/crawl-ref/source/tags.cc @@ -2217,6 +2217,16 @@ static void unmarshall_monster(reader &th, monsters &m) m.set_ghost(unmarshallGhost(th, _tag_minor_version)); m.check_speed(); + + // XXX: Changed MONS_NO_MONSTER from NUM_MONSTERS + 1 to 1000. + // This is a temporary hack, remove when the following compile + // time assert fails. + COMPILE_CHECK(NUM_MONSTERS == 472, c1); + + if (m.type == (NUM_MONSTERS + 1)) + m.type = MONS_NO_MONSTER; + if (m.base_monster == (NUM_MONSTERS + 1)) + m.base_monster = MONS_NO_MONSTER; } static void tag_read_level_monsters(reader &th, char minorVersion) |