summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source
diff options
context:
space:
mode:
authorDavid Lawrence Ramsey <dolorous@users.sourceforge.net>2009-10-29 20:11:34 -0500
committerDavid Lawrence Ramsey <dolorous@users.sourceforge.net>2009-10-29 20:11:34 -0500
commite87d3c47813d6c9f61e23cedf7f17774b17e15f4 (patch)
tree72d93cec3ee652f269865faeb0846673cda844b7 /crawl-ref/source
parent33606730c0524490181d3c9d63ee947e9179e511 (diff)
downloadcrawl-ref-e87d3c47813d6c9f61e23cedf7f17774b17e15f4.tar.gz
crawl-ref-e87d3c47813d6c9f61e23cedf7f17774b17e15f4.zip
Fix check for good gods' and Feawn's disliking weapons of chaos so that
it actually works. Note that the first of these is no longer in good_god_hates_item_handling(), as weapons of chaos are only potentially evil. Also, add wands of random effects to the list of potentially evil items, as they might as well be wands of chaos.
Diffstat (limited to 'crawl-ref/source')
-rw-r--r--crawl-ref/source/goditem.cc70
-rw-r--r--crawl-ref/source/goditem.h1
2 files changed, 53 insertions, 18 deletions
diff --git a/crawl-ref/source/goditem.cc b/crawl-ref/source/goditem.cc
index 8d33879408..1438f388dc 100644
--- a/crawl-ref/source/goditem.cc
+++ b/crawl-ref/source/goditem.cc
@@ -17,7 +17,6 @@
#include "externs.h"
-
bool is_holy_item(const item_def& item)
{
bool retval = false;
@@ -52,6 +51,35 @@ bool is_holy_item(const item_def& item)
return (retval);
}
+bool is_potentially_evil_item(const item_def& item)
+{
+ switch (item.base_type)
+ {
+ case OBJ_WEAPONS:
+ {
+ const int item_brand = get_weapon_brand(item);
+ if (item_brand == SPWPN_CHAOS)
+ return (true);
+ }
+ break;
+ case OBJ_MISSILES:
+ {
+ const int item_brand = get_ammo_brand(item);
+ if (item_brand == SPMSL_CHAOS)
+ return (true);
+ }
+ break;
+ case OBJ_WANDS:
+ if (item.sub_type == WAND_RANDOM_EFFECTS)
+ return (true);
+ break;
+ default:
+ break;
+ }
+
+ return (false);
+}
+
bool is_evil_item(const item_def& item)
{
bool retval = false;
@@ -69,7 +97,6 @@ bool is_evil_item(const item_def& item)
case OBJ_WEAPONS:
{
const int item_brand = get_weapon_brand(item);
-
retval = (is_demonic(item)
|| item_brand == SPWPN_DRAINING
|| item_brand == SPWPN_PAIN
@@ -80,7 +107,7 @@ bool is_evil_item(const item_def& item)
case OBJ_MISSILES:
{
const int item_brand = get_ammo_brand(item);
- retval = is_demonic(item) || item_brand == SPMSL_REAPING;
+ retval = (item_brand == SPMSL_REAPING);
break;
}
case OBJ_WANDS:
@@ -193,6 +220,7 @@ bool is_hasty_item(const item_def& item)
default:
break;
}
+
return (false);
}
@@ -335,12 +363,8 @@ conduct_type good_god_hates_item_handling(const item_def &item)
if (is_demonic(item))
return (DID_UNHOLY);
- if (item_type_known(item)
- || item.base_type == OBJ_WEAPONS
- && get_weapon_brand(item) == SPWPN_CHAOS)
- {
+ if (item_type_known(item))
return (DID_NECROMANCY);
- }
return (DID_NOTHING);
}
@@ -350,20 +374,14 @@ conduct_type god_hates_item_handling(const item_def &item)
switch (you.religion)
{
case GOD_ZIN:
- if (item_type_known(item) && is_chaotic_item(item))
- return (DID_CHAOS);
- break;
-
- case GOD_FEAWN:
if (!item_type_known(item))
return (DID_NOTHING);
- if (is_evil_item(item)
- || item.base_type == OBJ_WEAPONS
- && get_weapon_brand(item) == SPWPN_CHAOS)
- {
+ if (is_chaotic_item(item))
+ return (DID_CHAOS);
+
+ if (is_potentially_evil_item(item))
return (DID_NECROMANCY);
- }
break;
case GOD_SHINING_ONE:
@@ -397,9 +415,17 @@ conduct_type god_hates_item_handling(const item_def &item)
default:
break;
}
+
+ if (is_potentially_evil_item(item))
+ return (DID_NECROMANCY);
break;
}
+ case GOD_ELYVILON:
+ if (item_type_known(item) && is_potentially_evil_item(item))
+ return (DID_NECROMANCY);
+ break;
+
case GOD_YREDELEMNUL:
if (item_type_known(item) && is_holy_item(item))
return (DID_HOLY);
@@ -414,6 +440,14 @@ conduct_type god_hates_item_handling(const item_def &item)
}
break;
+ case GOD_FEAWN:
+ if (item_type_known(item)
+ && is_potentially_evil_item(item) || is_evil_item(item))
+ {
+ return (DID_NECROMANCY);
+ }
+ break;
+
case GOD_CHEIBRIADOS:
if (item_type_known(item) && is_hasty_item(item))
return (DID_HASTY);
diff --git a/crawl-ref/source/goditem.h b/crawl-ref/source/goditem.h
index 2fe6916bd5..5c30390c39 100644
--- a/crawl-ref/source/goditem.h
+++ b/crawl-ref/source/goditem.h
@@ -11,6 +11,7 @@
#include "spl-util.h"
bool is_holy_item(const item_def& item);
+bool is_potentially_evil_item(const item_def& item);
bool is_evil_item(const item_def& item);
bool is_chaotic_item(const item_def& item);
bool is_holy_discipline(int discipline);