From 04f5058cac8e12d3b85834bda4589239932f371a Mon Sep 17 00:00:00 2001 From: zelgadis Date: Mon, 1 Dec 2008 04:00:00 +0000 Subject: 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 --- crawl-ref/source/religion.cc | 70 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 56 insertions(+), 14 deletions(-) (limited to 'crawl-ref/source/religion.cc') 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 -- cgit v1.2.3-54-g00ecf