summaryrefslogtreecommitdiffstats
path: root/crawl-ref
diff options
context:
space:
mode:
authorDavid Lawrence Ramsey <dolorous@users.sourceforge.net>2009-11-05 16:12:18 -0600
committerDavid Lawrence Ramsey <dolorous@users.sourceforge.net>2009-11-05 16:13:54 -0600
commit8906a6bb5c2f1caca99203876ed2657a1e818437 (patch)
treebbe95429bd7a47d42ab6fb5e52537796e8973f17 /crawl-ref
parentb11642c2114307bb2cb26cfdcc09707d5f390fc2 (diff)
downloadcrawl-ref-8906a6bb5c2f1caca99203876ed2657a1e818437.tar.gz
crawl-ref-8906a6bb5c2f1caca99203876ed2657a1e818437.zip
In is_evil(), mark monsters with explicitly evil spells.
Unify checks for monsters with chaotic spells, and do the same for them.
Diffstat (limited to 'crawl-ref')
-rw-r--r--crawl-ref/source/mon-data.h56
-rw-r--r--crawl-ref/source/monster.cc27
-rw-r--r--crawl-ref/source/monster.h2
3 files changed, 48 insertions, 37 deletions
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;