summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/xom.cc
diff options
context:
space:
mode:
Diffstat (limited to 'crawl-ref/source/xom.cc')
-rw-r--r--crawl-ref/source/xom.cc248
1 files changed, 19 insertions, 229 deletions
diff --git a/crawl-ref/source/xom.cc b/crawl-ref/source/xom.cc
index 60b81fe58a..ad494e7dae 100644
--- a/crawl-ref/source/xom.cc
+++ b/crawl-ref/source/xom.cc
@@ -9,7 +9,6 @@
#include "AppHdr.h"
#include "beam.h"
-#include "branch.h"
#include "effects.h"
#include "it_use2.h"
#include "items.h"
@@ -22,26 +21,12 @@
#include "mutation.h"
#include "ouch.h"
#include "player.h"
-#include "randart.h"
#include "religion.h"
#include "spells3.h"
#include "spl-cast.h"
#include "spl-util.h"
-#include "state.h"
#include "stuff.h"
#include "view.h"
-#include "xom.h"
-
-#if DEBUG_RELIGION
-# define DEBUG_DIAGNOSTICS 1
-# define DEBUG_GIFTS 1
-#endif
-
-#if DEBUG_XOM
-# define DEBUG_DIAGNOSTICS 1
-# define DEBUG_RELIGION 1
-# define DEBUG_GIFTS 1
-#endif
// Which spell? First I copied all spells from you_spells(), then I
// filtered some out (especially conjurations). Then I sorted them in
@@ -126,92 +111,32 @@ bool xom_is_nice()
return (you.gift_timeout > 0 && you.piety > 100) || coinflip();
}
-static const char* xom_message_arrays[NUM_XOM_MESSAGE_TYPES][6] =
-{
- // XM_NORMAL
- {
- "Xom roars with laughter!",
- "Xom thinks this is hilarious!",
- "Xom is highly amused!",
- "Xom is amused.",
- "Xom is mildly amused.",
- "Xom is interested."
- },
-
- // XM_INTRIGUED
- {
- "Xom is fascinated!",
- "Xom is very intrigued!",
- "Xom is intrigued!",
- "Xom is extremely interested.",
- "Xom is very interested.",
- "Xom is interested."
- }
-};
-
-static void _xom_is_stimulated(int maxinterestingness,
- const char* message_array[],
- bool force_message)
+void xom_is_stimulated(int maxinterestingness)
{
- if (you.religion != GOD_XOM || maxinterestingness <= 0)
- return;
-
- // Xom is not stimulated by his own acts, at least not directly.
- if (crawl_state.which_god_acting() == GOD_XOM)
+ if (you.religion != GOD_XOM)
return;
-
int interestingness = random2(maxinterestingness);
-
-#if DEBUG_RELIGION || DEBUG_GIFTS || DEBUG_XOM
- mprf(MSGCH_DIAGNOSTICS,
- "Xom: maxinterestingness = %d, interestingness = %d",
- maxinterestingness, interestingness);
-#endif
-
+ if (interestingness < 12)
+ return;
if (interestingness > 255)
interestingness = 255;
-
- bool was_stimulated = false;
- if (interestingness > you.gift_timeout && interestingness >= 12)
+ if (interestingness > you.gift_timeout)
{
you.gift_timeout = interestingness;
- was_stimulated = true;
- }
-
- if (was_stimulated || force_message)
god_speaks(GOD_XOM,
- ((interestingness > 200) ? message_array[5] :
- (interestingness > 100) ? message_array[4] :
- (interestingness > 75) ? message_array[3] :
- (interestingness > 50) ? message_array[2] :
- (interestingness > 25) ? message_array[1] :
- message_array[0]));
-}
-
-void xom_is_stimulated(int maxinterestingness, xom_message_type message_type,
- bool force_message)
-{
- _xom_is_stimulated(maxinterestingness, xom_message_arrays[message_type],
- force_message);
-}
-
-void xom_is_stimulated(int maxinterestingness, const std::string& message,
- bool force_message)
-{
- const char* message_array[6];
-
- for (int i = 0; i < 6; i++)
- message_array[i] = message.c_str();
-
- _xom_is_stimulated(maxinterestingness, message_array, force_message);
+ ((interestingness > 200) ? "Xom roars with laughter!" :
+ (interestingness > 100) ? "Xom thinks this is hilarious!" :
+ (interestingness > 75) ? "Xom is highly amused!" :
+ (interestingness > 50) ? "Xom is amused." :
+ (interestingness > 25) ? "Xom is mildly amused." :
+ "Xom is interested."));
+ }
}
void xom_makes_you_cast_random_spell(int sever)
{
int spellenum = sever;
- god_acting gdact(GOD_XOM);
-
const int nxomspells = ARRAYSIZE(xom_spells);
if (spellenum >= nxomspells)
spellenum = nxomspells - 1;
@@ -220,7 +145,7 @@ void xom_makes_you_cast_random_spell(int sever)
god_speaks(GOD_XOM, "Xom's power flows through you!");
-#if DEBUG_DIAGNOSTICS || DEBUG_RELIGION || DEBUG_XOM
+#if DEBUG_DIAGNOSTICS
mprf(MSGCH_DIAGNOSTICS,
"Xom_acts();spell: %d, spellenum: %d", spell, spellenum);
#endif
@@ -242,8 +167,6 @@ static void xom_make_item(object_class_type base,
return;
}
- god_acting gdact(GOD_XOM);
-
move_item_to_grid( &thing_created, you.x_pos, you.y_pos );
canned_msg(MSG_SOMETHING_APPEARS);
stop_running();
@@ -276,14 +199,11 @@ static object_class_type get_unrelated_wield_class(object_class_type ref)
(temp_rand == 1) ? OBJ_STAVES :
OBJ_MISCELLANY;
}
-
return (objtype);
}
static bool xom_annoyance_gift(int power)
{
- god_acting gdact(GOD_XOM);
-
if (coinflip() && player_in_a_dangerous_place())
{
const item_def *weapon = you.weapon();
@@ -351,7 +271,6 @@ static bool xom_annoyance_gift(int power)
return (true);
}
}
-
return (false);
}
@@ -359,7 +278,7 @@ bool xom_gives_item(int power)
{
if (xom_annoyance_gift(power))
return (true);
-
+
const item_def *cloak = you.slot_item(EQ_CLOAK);
if (coinflip() && cloak && cloak->cursed())
{
@@ -393,8 +312,6 @@ bool xom_gives_item(int power)
(r == 5) ? OBJ_FOOD :
(r == 6) ? OBJ_MISCELLANY :
OBJ_GOLD;
-
- god_acting gdact(GOD_XOM);
acquirement(objtype, GOD_XOM);
}
else
@@ -495,7 +412,6 @@ static bool xom_is_good(int sever)
// Okay, now for the nicer stuff (note: these things are not
// necessarily nice):
- god_acting gdact(GOD_XOM);
if (random2(sever) <= 1)
{
temp_rand = random2(4);
@@ -615,7 +531,7 @@ static bool xom_is_good(int sever)
(temp_rand == 0) ? "\"You need some minor adjustments, mortal!\"" :
(temp_rand == 1) ? "\"Let me alter your pitiful body.\"" :
(temp_rand == 2) ? "Xom's power touches on you for a moment."
- : "You hear Xom's maniacal cackling.");
+ : "You hear Xom's maniacal chuckling.");
mpr("Your body is suffused with distortional energy.");
set_hp(1 + random2(you.hp), false);
@@ -688,9 +604,7 @@ static bool xom_is_bad(int sever)
bool done = false;
bolt beam;
-
- god_acting gdact(GOD_XOM);
-
+
// begin "Bad Things"
while (!done)
{
@@ -733,8 +647,7 @@ static bool xom_is_bad(int sever)
(temp_rand == 2) ? "Xom's power touches on you for a moment."
: "You hear Xom's maniacal laughter.");
- lose_stat(STAT_RANDOM, 1 + random2(3), true,
- "the capriciousness of Xom" );
+ lose_stat(STAT_RANDOM, 1 + random2(3), true);
done = true;
}
@@ -888,37 +801,14 @@ static bool xom_is_bad(int sever)
void xom_acts(bool niceness, int sever)
{
-#if DEBUG_DIAGNOSTICS || DEBUG_RELIGION || DEBUG_XOM
+#if DEBUG_DIAGNOSTICS
mprf(MSGCH_DIAGNOSTICS, "Xom_acts(%u, %d); piety: %u, interest: %u\n",
niceness, sever, you.piety, you.gift_timeout);
#endif
- entry_cause_type old_entry_cause = you.entry_cause;
-
if (sever < 1)
sever = 1;
-
- // Nemelex's deck of punishment drawing the Xom card
- if (crawl_state.is_god_acting()
- && crawl_state.which_god_acting() != GOD_XOM)
- {
- god_type which_god = crawl_state.which_god_acting();
-
- if (crawl_state.is_god_retribution())
- {
- niceness = false;
- mprf(MSGCH_GOD, which_god,
- "%s asks Xom for help in punishing you, and Xom happily "
- "agrees.", god_name(which_god));
- }
- else
- {
- niceness = true;
- mprf(MSGCH_GOD, which_god,
- "%s calls in a favour from Xom.", god_name(which_god));
- }
- }
-
+
if (niceness && !one_chance_in(5))
{
// Good stuff.
@@ -931,107 +821,7 @@ void xom_acts(bool niceness, int sever)
while (!xom_is_bad(sever))
;
}
-
- // Nemelex's deck of punishment drawing the Xom card
- if (crawl_state.is_god_acting()
- && crawl_state.which_god_acting() != GOD_XOM)
- {
- if (old_entry_cause != you.entry_cause
- && you.entry_cause_god == GOD_XOM)
- {
- you.entry_cause_god = crawl_state.which_god_acting();
- }
- }
if (you.religion == GOD_XOM && coinflip())
you.piety = 200 - you.piety;
}
-
-static void xom_check_less_runes(int runes_gones)
-{
- if (player_in_branch(BRANCH_HALL_OF_ZOT) ||
- !(branches[BRANCH_HALL_OF_ZOT].branch_flags & BFLAG_HAS_ORB))
- {
- return;
- }
-
- int runes_avail = you.attribute[ATTR_UNIQUE_RUNES]
- + you.attribute[ATTR_DEMONIC_RUNES]
- + you.attribute[ATTR_ABYSSAL_RUNES]
- - you.attribute[ATTR_RUNES_IN_ZOT];
- int was_avail = runes_avail + runes_gones;
-
- // No longer enough available runes to get into Zot
- if (was_avail >= NUMBER_OF_RUNES_NEEDED &&
- runes_avail < NUMBER_OF_RUNES_NEEDED)
- {
- xom_is_stimulated(128, "Xom snickers.", true);
- }
-}
-
-void xom_check_lost_item(const item_def& item)
-{
- if (item.base_type == OBJ_ORBS)
- xom_is_stimulated(255, "Xom laughs nastily.", true);
- else if (is_fixed_artefact(item))
- xom_is_stimulated(128, "Xom snickers.", true);
- else if (is_rune(item))
- {
- // If you'd dropped it, check if that means you'd dropped your
- // third rune and now don't have enough to get into Zot.
- if (item.flags & ISFLAG_BEEN_IN_INV)
- xom_check_less_runes(item.quantity);
-
- if (is_unique_rune(item))
- xom_is_stimulated(255, "Xom snickers loudly.", true);
- else if (you.entry_cause == EC_SELF_EXPLICIT &&
- !(item.flags & ISFLAG_BEEN_IN_INV))
- {
- // Player voluntarily entered Pan or the Abyss looking for
- // runes, yet never found it.
- if (item.plus == RUNE_ABYSSAL &&
- you.attribute[ATTR_ABYSSAL_RUNES] == 0)
- {
- // Ignore Abyss area shifts.
- if (you.level_type != LEVEL_ABYSS)
- // Abyssal runes are a lot more trouble to find
- // than demonic runes, so it gets twice the
- // stimulation.
- xom_is_stimulated(128, "Xom snickers.", true);
- }
- else if (item.plus == RUNE_DEMONIC &&
- you.attribute[ATTR_DEMONIC_RUNES] == 0)
- {
- xom_is_stimulated(64, "Xom snickers softly.", true);
- }
- }
- }
-}
-
-void xom_check_destroyed_item(const item_def& item, int cause)
-{
- int amusement = 0;
-
- if (item.base_type == OBJ_ORBS)
- {
- xom_is_stimulated(255, "Xom laughs nastily.", true);
- return;
- }
- else if (is_fixed_artefact(item))
- xom_is_stimulated(128, "Xom snickers.", true);
- else if (is_rune(item))
- {
- xom_check_less_runes(item.quantity);
-
- if (is_unique_rune(item) || item.plus == RUNE_ABYSSAL)
- amusement = 255;
- else
- amusement = 64 * item.quantity;
- }
-
- xom_is_stimulated(amusement,
- amusement > 128 ? "Xom snickers loudly." :
- amusement > 64 ? "Xom snickers." :
- "Xom snickers softly.",
- true);
-}