summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/religion.cc
diff options
context:
space:
mode:
authorzelgadis <zelgadis@c06c8d41-db1a-0410-9941-cceddc491573>2008-12-01 04:00:00 +0000
committerzelgadis <zelgadis@c06c8d41-db1a-0410-9941-cceddc491573>2008-12-01 04:00:00 +0000
commit04f5058cac8e12d3b85834bda4589239932f371a (patch)
tree20863dfb1b0a87c9643f0ca98ce2cb43cf195416 /crawl-ref/source/religion.cc
parent6e3985b473d0b26c028820b3d0a3808d3f3dd7ee (diff)
downloadcrawl-ref-04f5058cac8e12d3b85834bda4589239932f371a.tar.gz
crawl-ref-04f5058cac8e12d3b85834bda4589239932f371a.zip
Add some chaos attacks/weapons. Missiles and launchers of chaos fire a bolt of
a random type (including enchantments, which isn't so good since they don't have a visible beam). Might want to add BEAM_CHAOS and make it a beam of that. Weapons of chaos either does a random brand effect (fire, poison, etc) or a random chaos effect (which includes cloning the attack victim). The AF_CHAOS monster attack flavour either does a random monster flavour or chaos effect (same chaos effects as for weapons). The relative frequency of all the different effects/brands/flavours no doubt needs adjustment. All of this is currently only available via Xom. 10% of all common-type demons sent in by Xom will be chaos spawn (the only kind that use AF_CHAOS, and never randomly generated otherwise). All item gifts from Xom which are generated with a brand will have their brand switched to chaos (this should probably be made to happen less than 100% of the time). And finally one of Xom's bad acts is to upgrade a non-branded weapon of a nearby hostile monster to a chaos brand (this might need to be made less (or more) common). Oh, and if a randart has a brand which would be identified if it were merely an ego weapon, it now identifies the RAP_BRAND property of the randart. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@7704 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/religion.cc')
-rw-r--r--crawl-ref/source/religion.cc70
1 files changed, 56 insertions, 14 deletions
diff --git a/crawl-ref/source/religion.cc b/crawl-ref/source/religion.cc
index a949d74a73..96f45320d3 100644
--- a/crawl-ref/source/religion.cc
+++ b/crawl-ref/source/religion.cc
@@ -742,6 +742,7 @@ std::string get_god_dislikes(god_type which_god, bool /*verbose*/)
"have been avoided");
dislikes.push_back("you polymorph monsters");
dislikes.push_back("you eat the flesh of sentient beings");
+ dislikes.push_back("you use weapons or missiles of chaos");
break;
case GOD_SHINING_ONE:
@@ -2952,6 +2953,21 @@ bool did_god_conduct(conduct_type thing_done, int level, bool known,
}
break;
+ case DID_CHAOS:
+ if (you.religion == GOD_ZIN)
+ {
+ retval = true;
+ if (!known)
+ {
+ simple_god_message(" forgives your inadvertent chaotic "
+ "act, just this once.");
+ break;
+ }
+ piety_change = -level;
+ penance = level;
+ }
+ break;
+
case DID_DESTROY_ORCISH_IDOL:
if (you.religion == GOD_BEOGH)
{
@@ -2975,6 +2991,7 @@ bool did_god_conduct(conduct_type thing_done, int level, bool known,
else
_dock_piety(-piety_change, penance);
+#define DEBUG_DIAGNOSTICS 1
#if DEBUG_DIAGNOSTICS
if (retval)
{
@@ -2992,7 +3009,7 @@ bool did_god_conduct(conduct_type thing_done, int level, bool known,
"Servant Kill Holy", "Spell Memorise", "Spell Cast",
"Spell Practise", "Spell Nonutility", "Cards", "Stimulants",
"Drink Blood", "Cannibalism", "Eat Meat", "Eat Souled Being",
- "Deliberate Mutation", "Cause Glowing",
+ "Deliberate Mutation", "Cause Glowing", "Use Chaos",
"Destroy Orcish Idol", "Create Life"
};
@@ -3261,7 +3278,7 @@ bool is_holy_item(const item_def& item)
{
const int item_brand = get_weapon_brand(item);
- retval = (item_brand == SPWPN_HOLY_WRATH);
+ retval = (item_brand == SPWPN_HOLY_WRATH || is_blessed_blade(item));
break;
}
case OBJ_SCROLLS:
@@ -3329,6 +3346,40 @@ bool is_evil_item(const item_def& item)
return (retval);
}
+bool is_chaotic_item(const item_def& item)
+{
+ bool retval = false;
+
+ switch (item.base_type)
+ {
+ case OBJ_WEAPONS:
+ {
+ const int item_brand = get_weapon_brand(item);
+ retval = (item_brand == SPWPN_CHAOS);
+ }
+ break;
+ case OBJ_MISSILES:
+ {
+ const int item_brand = get_ammo_brand(item);
+ retval = (item_brand == SPMSL_CHAOS);
+ }
+ break;
+ case OBJ_WANDS:
+ retval = (item.sub_type == WAND_POLYMORPH_OTHER);
+ break;
+ case OBJ_POTIONS:
+ retval = (item.sub_type == POT_MUTATION);
+ break;
+ default:
+ break;
+ }
+
+ if (is_random_artefact(item) && randart_wpn_property(item, RAP_MUTAGENIC))
+ retval = true;
+
+ return (retval);
+}
+
bool good_god_dislikes_item_handling(const item_def &item)
{
return (is_good_god(you.religion) && is_evil_item(item)
@@ -3346,19 +3397,8 @@ bool god_dislikes_item_handling(const item_def &item)
if (you.religion == GOD_ZIN)
{
- if (((item.base_type == OBJ_POTIONS && item.sub_type == POT_MUTATION)
- || (item.base_type == OBJ_WANDS
- && item.sub_type == WAND_POLYMORPH_OTHER))
- && item_type_known(item))
- {
+ if (item_type_known(item) && is_chaotic_item(item))
return (true);
- }
-
- if (is_random_artefact(item)
- && randart_known_wpn_property(item, RAP_MUTAGENIC))
- {
- return (true);
- }
}
if (you.religion == GOD_SHINING_ONE)
@@ -3378,7 +3418,9 @@ bool god_dislikes_item_handling(const item_def &item)
const int item_brand = get_ammo_brand(item);
if (item_brand == SPMSL_POISONED || item_brand == SPMSL_CURARE)
+ {
return (true);
+ }
}
else if (item.base_type == OBJ_STAVES
&& (item.sub_type == STAFF_POISON