From 8906a6bb5c2f1caca99203876ed2657a1e818437 Mon Sep 17 00:00:00 2001 From: David Lawrence Ramsey Date: Thu, 5 Nov 2009 16:12:18 -0600 Subject: In is_evil(), mark monsters with explicitly evil spells. Unify checks for monsters with chaotic spells, and do the same for them. --- crawl-ref/source/mon-data.h | 56 +++++++++++++++++++-------------------------- crawl-ref/source/monster.cc | 27 ++++++++++++++++++---- crawl-ref/source/monster.h | 2 ++ 3 files changed, 48 insertions(+), 37 deletions(-) (limited to 'crawl-ref') diff --git a/crawl-ref/source/mon-data.h b/crawl-ref/source/mon-data.h index 8a2e973cee..d207ecff0c 100644 --- a/crawl-ref/source/mon-data.h +++ b/crawl-ref/source/mon-data.h @@ -402,7 +402,7 @@ static monsterentry mondata[] = { { MONS_DRACONIAN_CALLER, 'd', BROWN, "draconian caller", - M_SPELLCASTER | M_ACTUAL_SPELLS | M_COLD_BLOOD | M_EVIL | M_SPEAKS, + M_SPELLCASTER | M_ACTUAL_SPELLS | M_COLD_BLOOD | M_SPEAKS, MR_NO_FLAGS, 900, 10, MONS_DRACONIAN, MONS_DRACONIAN, MH_NATURAL, -3, { {AT_HIT, AF_PLAIN, 20}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK }, @@ -436,7 +436,7 @@ static monsterentry mondata[] = { { MONS_DRACONIAN_SHIFTER, 'd', LIGHTCYAN, "draconian shifter", - M_SPELLCASTER | M_ACTUAL_SPELLS | M_COLD_BLOOD | M_EVIL | M_SPEAKS, + M_SPELLCASTER | M_ACTUAL_SPELLS | M_COLD_BLOOD | M_SPEAKS, MR_NO_FLAGS, 900, 10, MONS_DRACONIAN, MONS_DRACONIAN, MH_NATURAL, -4, { {AT_HIT, AF_PLAIN, 15}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK }, @@ -470,7 +470,7 @@ static monsterentry mondata[] = { { MONS_DRACONIAN_SCORCHER, 'd', LIGHTRED, "draconian scorcher", - M_SPELLCASTER | M_ACTUAL_SPELLS | M_COLD_BLOOD | M_EVIL | M_SPEAKS, + M_SPELLCASTER | M_ACTUAL_SPELLS | M_COLD_BLOOD | M_SPEAKS, MR_RES_FIRE | MR_RES_HELLFIRE, 900, 10, MONS_DRACONIAN, MONS_DRACONIAN, MH_NATURAL, -4, { {AT_HIT, AF_PLAIN, 15}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK }, @@ -561,7 +561,7 @@ static monsterentry mondata[] = { { MONS_DEEP_ELF_SUMMONER, 'e', BROWN, "deep elf summoner", - M_SPELLCASTER | M_ACTUAL_SPELLS | M_WARM_BLOOD | M_EVIL | M_SPEAKS, + M_SPELLCASTER | M_ACTUAL_SPELLS | M_WARM_BLOOD | M_SPEAKS, MR_NO_FLAGS, 450, 10, MONS_ELF, MONS_ELF, MH_NATURAL, -6, { {AT_HIT, AF_PLAIN, 5}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK }, @@ -605,8 +605,7 @@ static monsterentry mondata[] = { { MONS_DEEP_ELF_DEMONOLOGIST, 'e', YELLOW, "deep elf demonologist", - M_SPELLCASTER | M_ACTUAL_SPELLS | M_WARM_BLOOD | M_SEE_INVIS | M_EVIL - | M_SPEAKS, + M_SPELLCASTER | M_ACTUAL_SPELLS | M_WARM_BLOOD | M_SEE_INVIS | M_SPEAKS, MR_NO_FLAGS, 450, 10, MONS_ELF, MONS_ELF, MH_NATURAL, -6, { {AT_HIT, AF_PLAIN, 12}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK }, @@ -628,8 +627,7 @@ static monsterentry mondata[] = { { MONS_DEEP_ELF_SORCERER, 'e', LIGHTMAGENTA, "deep elf sorcerer", - M_SPELLCASTER | M_ACTUAL_SPELLS | M_WARM_BLOOD | M_SEE_INVIS | M_SPEAKS - | M_EVIL, + M_SPELLCASTER | M_ACTUAL_SPELLS | M_WARM_BLOOD | M_SEE_INVIS | M_SPEAKS, MR_NO_FLAGS, 450, 10, MONS_ELF, MONS_ELF, MH_NATURAL, -6, { {AT_HIT, AF_PLAIN, 12}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK }, @@ -640,8 +638,7 @@ static monsterentry mondata[] = { { MONS_DEEP_ELF_DEATH_MAGE, 'e', WHITE, "deep elf death mage", - M_SPELLCASTER | M_ACTUAL_SPELLS | M_WARM_BLOOD | M_SEE_INVIS | M_EVIL - | M_SPEAKS, + M_SPELLCASTER | M_ACTUAL_SPELLS | M_WARM_BLOOD | M_SEE_INVIS | M_SPEAKS, MR_NO_FLAGS, 450, 10, MONS_ELF, MONS_ELF, MH_NATURAL, -6, { {AT_HIT, AF_PLAIN, 12}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK }, @@ -731,7 +728,7 @@ static monsterentry mondata[] = { { MONS_BOGGART, 'g', MAGENTA, "boggart", - M_SPELLCASTER | M_ACTUAL_SPELLS | M_SEE_INVIS | M_EVIL | M_WARM_BLOOD, + M_SPELLCASTER | M_ACTUAL_SPELLS | M_SEE_INVIS | M_WARM_BLOOD, MR_NO_FLAGS, 0, 14, MONS_BOGGART, MONS_BOGGART, MH_NATURAL, -7, { {AT_HIT, AF_PLAIN, 5}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK }, @@ -1146,7 +1143,7 @@ static monsterentry mondata[] = { { MONS_ORC_SORCERER, 'o', LIGHTMAGENTA, "orc sorcerer", - M_SPELLCASTER | M_SEE_INVIS | M_EVIL | M_SPEAKS | M_ACTUAL_SPELLS + M_SPELLCASTER | M_SEE_INVIS | M_SPEAKS | M_ACTUAL_SPELLS | M_WARM_BLOOD, MR_RES_FIRE, 600, 12, MONS_ORC, MONS_ORC, MH_NATURAL, -3, @@ -1489,7 +1486,7 @@ static monsterentry mondata[] = { { MONS_BRAIN_WORM, 'w', LIGHTMAGENTA, "brain worm", - M_NO_SKELETON | M_SPELLCASTER | M_EVIL, + M_NO_SKELETON | M_SPELLCASTER, MR_NO_FLAGS, 150, 10, MONS_WORM, MONS_BRAIN_WORM, MH_NATURAL, -3, { {AT_BITE, AF_PLAIN, 6}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK }, @@ -1961,7 +1958,7 @@ static monsterentry mondata[] = { { MONS_SHADOW_DRAGON, 'D', MAGENTA, "shadow dragon", - M_SPELLCASTER | M_FLIES | M_SEE_INVIS | M_EVIL | M_COLD_BLOOD, + M_SPELLCASTER | M_FLIES | M_SEE_INVIS | M_COLD_BLOOD, MR_RES_POISON | mrd(MR_RES_COLD, 2), 2000, 12, MONS_DRAGON, MONS_SHADOW_DRAGON, MH_NATURAL, -5, { {AT_BITE, AF_DRAIN_XP, 20}, {AT_CLAW, AF_PLAIN, 15}, @@ -2088,8 +2085,7 @@ static monsterentry mondata[] = { { MONS_GIANT_ORANGE_BRAIN, 'G', LIGHTRED, "giant orange brain", - M_NO_SKELETON | M_SPELLCASTER | M_LEVITATE | M_SEE_INVIS - | M_EVIL | M_WARM_BLOOD, + M_NO_SKELETON | M_SPELLCASTER | M_LEVITATE | M_SEE_INVIS | M_WARM_BLOOD, MR_RES_ASPHYX, 1000, 13, MONS_GIANT_ORANGE_BRAIN, MONS_GIANT_ORANGE_BRAIN, MH_NATURAL, -8, { AT_NO_ATK, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK }, @@ -2343,7 +2339,7 @@ static monsterentry mondata[] = { { MONS_KOBOLD_DEMONOLOGIST, 'K', MAGENTA, "kobold demonologist", - M_SPELLCASTER | M_ACTUAL_SPELLS | M_WARM_BLOOD | M_EVIL | M_SPEAKS, + M_SPELLCASTER | M_ACTUAL_SPELLS | M_WARM_BLOOD | M_SPEAKS, MR_NO_FLAGS, 400, 10, MONS_KOBOLD, MONS_KOBOLD, MH_NATURAL, -5, { {AT_HIT, AF_PLAIN, 4}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK }, @@ -3942,8 +3938,7 @@ static monsterentry mondata[] = { // non-human uniques { MONS_NESSOS, 'c', MAGENTA, "Nessos", - M_UNIQUE | M_WARM_BLOOD | M_SPELLCASTER | M_ACTUAL_SPELLS | M_EVIL - | M_SPEAKS, + M_UNIQUE | M_WARM_BLOOD | M_SPELLCASTER | M_ACTUAL_SPELLS | M_SPEAKS, MR_NO_FLAGS, 1500, 12, MONS_CENTAUR, MONS_CENTAUR, MH_NATURAL, -3, { {AT_HIT, AF_PLAIN, 16}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK }, @@ -4151,8 +4146,8 @@ static monsterentry mondata[] = { { MONS_NERGALLE, 'o', WHITE, "Nergalle", - M_UNIQUE | M_SPELLCASTER | M_SEE_INVIS | M_EVIL | M_ACTUAL_SPELLS - | M_WARM_BLOOD | M_SPEAKS, + M_UNIQUE | M_SPELLCASTER | M_SEE_INVIS | M_ACTUAL_SPELLS | M_WARM_BLOOD + | M_SPEAKS, MR_RES_FIRE | MR_RES_COLD, 600, 12, MONS_ORC, MONS_ORC, MH_NATURAL, -5, { {AT_HIT, AF_PLAIN, 6}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK }, @@ -4295,8 +4290,7 @@ static monsterentry mondata[] = { { MONS_JESSICA, '@', LIGHTGREY, "Jessica", - M_UNIQUE | M_SPELLCASTER | M_ACTUAL_SPELLS | M_WARM_BLOOD | M_SPEAKS - | M_EVIL, + M_UNIQUE | M_SPELLCASTER | M_ACTUAL_SPELLS | M_WARM_BLOOD | M_SPEAKS, MR_NO_FLAGS, 550, 20, MONS_HUMAN, MONS_HUMAN, MH_NATURAL, -3, { {AT_HIT, AF_PLAIN, 5}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK }, @@ -4384,8 +4378,7 @@ static monsterentry mondata[] = { { MONS_JOSEPHINE, '@', WHITE, "Josephine", - M_UNIQUE | M_SPELLCASTER | M_ACTUAL_SPELLS | M_WARM_BLOOD | M_EVIL - | M_SPEAKS, + M_UNIQUE | M_SPELLCASTER | M_ACTUAL_SPELLS | M_WARM_BLOOD | M_SPEAKS, MR_NO_FLAGS, 550, 20, MONS_HUMAN, MONS_HUMAN, MH_NATURAL, -5, { {AT_HIT, AF_PLAIN, 11}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK }, @@ -4453,8 +4446,7 @@ static monsterentry mondata[] = { { MONS_LOUISE, '@', BLUE, "Louise", - M_UNIQUE | M_SPELLCASTER | M_ACTUAL_SPELLS | M_WARM_BLOOD | M_EVIL - | M_SPEAKS, + M_UNIQUE | M_SPELLCASTER | M_ACTUAL_SPELLS | M_WARM_BLOOD | M_SPEAKS, MR_NO_FLAGS, 550, 15, MONS_HUMAN, MONS_HUMAN, MH_NATURAL, -5, { {AT_HIT, AF_PLAIN, 17}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK }, @@ -4466,7 +4458,7 @@ static monsterentry mondata[] = { { MONS_FRANCIS, '@', YELLOW, "Francis", M_UNIQUE | M_SPELLCASTER | M_ACTUAL_SPELLS | M_WARM_BLOOD | M_SEE_INVIS - | M_EVIL | M_SPEAKS, + | M_SPEAKS, MR_NO_FLAGS, 550, 15, MONS_HUMAN, MONS_HUMAN, MH_NATURAL, -5, { {AT_HIT, AF_PLAIN, 19}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK }, @@ -4478,7 +4470,7 @@ static monsterentry mondata[] = { { MONS_FRANCES, '@', YELLOW, "Frances", M_UNIQUE | M_SPELLCASTER | M_ACTUAL_SPELLS | M_WARM_BLOOD | M_SEE_INVIS - | M_EVIL | M_SPEAKS, + | M_SPEAKS, MR_NO_FLAGS, 550, 15, MONS_HUMAN, MONS_HUMAN, MH_NATURAL, -5, { {AT_HIT, AF_PLAIN, 29}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK }, @@ -4514,7 +4506,7 @@ static monsterentry mondata[] = { { MONS_WAYNE, '@', YELLOW, "Wayne", M_UNIQUE | M_SPELLCASTER | M_ACTUAL_SPELLS | M_WARM_BLOOD | M_SEE_INVIS - | M_EVIL | M_SPEAKS, + | M_SPEAKS, MR_NO_FLAGS, 550, 12, MONS_HUMAN, MONS_HUMAN, MH_NATURAL, -5, { {AT_HIT, AF_PLAIN, 22}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK }, @@ -4538,7 +4530,7 @@ static monsterentry mondata[] = { { MONS_NORRIS, '@', LIGHTRED, "Norris", M_UNIQUE | M_FIGHTER | M_SPELLCASTER | M_ACTUAL_SPELLS | M_WARM_BLOOD - | M_SEE_INVIS | M_EVIL | M_SPEAKS, + | M_SEE_INVIS | M_SPEAKS, MR_NO_FLAGS, 550, 10, MONS_HUMAN, MONS_HUMAN, MH_NATURAL, -5, { {AT_HIT, AF_PLAIN, 36}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK }, @@ -4550,7 +4542,7 @@ static monsterentry mondata[] = { { MONS_FREDERICK, '@', GREEN, "Frederick", M_UNIQUE | M_SPELLCASTER | M_ACTUAL_SPELLS | M_WARM_BLOOD | M_SEE_INVIS - | M_EVIL | M_SPEAKS, + | M_SPEAKS, MR_NO_FLAGS, 550, 12, MONS_HUMAN, MONS_HUMAN, MH_NATURAL, -5, { {AT_HIT, AF_PLAIN, 27}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK }, diff --git a/crawl-ref/source/monster.cc b/crawl-ref/source/monster.cc index 2bb73f9683..21b8efb4db 100644 --- a/crawl-ref/source/monster.cc +++ b/crawl-ref/source/monster.cc @@ -2702,6 +2702,24 @@ bool monsters::has_spells() const return (false); } +bool monsters::has_evil_spells() const +{ + for (int i = 0; i < NUM_MONSTER_SPELL_SLOTS; ++i) + if (is_evil_spell(spells[i])) + return (true); + + return (false); +} + +bool monsters::has_chaotic_spells() const +{ + for (int i = 0; i < NUM_MONSTER_SPELL_SLOTS; ++i) + if (is_chaotic_spell(spells[i])) + return (true); + + return (false); +} + bool monsters::has_spell(spell_type spell) const { for (int i = 0; i < NUM_MONSTER_SPELL_SLOTS; ++i) @@ -2858,6 +2876,9 @@ bool monsters::is_evil() const if (is_priest() && (is_evil_god(god) || god == GOD_NAMELESS)) return (true); + if (has_evil_spells()) + return (true); + if (mons_class_flag(type, M_EVIL)) return (true); @@ -2883,12 +2904,8 @@ bool monsters::is_chaotic() const if (is_priest() && is_chaotic_god(god)) return (true); - if (has_spell(SPELL_POLYMORPH_OTHER) - || has_spell(SPELL_SUMMON_UGLY_THING) - || has_spell(SPELL_PORKALATOR)) - { + if (has_chaotic_spells()) return (true); - } if (has_attack_flavour(AF_MUTATE) || has_attack_flavour(AF_ROT) diff --git a/crawl-ref/source/monster.h b/crawl-ref/source/monster.h index d749fbfb97..9f7de327ce 100644 --- a/crawl-ref/source/monster.h +++ b/crawl-ref/source/monster.h @@ -333,6 +333,8 @@ public: bool haloed() const; bool has_spells() const; + bool has_evil_spells() const; + bool has_chaotic_spells() const; bool has_spell(spell_type spell) const; bool has_attack_flavour(int flavour) const; -- cgit v1.2.3-54-g00ecf