summaryrefslogtreecommitdiffstats
path: root/crawl-ref
diff options
context:
space:
mode:
authorj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2009-03-19 22:28:38 +0000
committerj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2009-03-19 22:28:38 +0000
commita56eea02ae7ce566af2baff5be396ddc15134735 (patch)
treea10aefecf614ec03b4c08c7544814e15d4076102 /crawl-ref
parentdbea6550fa584e710e7788b95f1037a9ec344ba5 (diff)
downloadcrawl-ref-a56eea02ae7ce566af2baff5be396ddc15134735.tar.gz
crawl-ref-a56eea02ae7ce566af2baff5be396ddc15134735.zip
* For flavour, let Xom laugh himself silly whenever a follower dies.
* Fix Xom being amused about rotten corpses being butchered. (As opposed to clean corpses becoming rotten while butchered, which is how it was originally intended.) * Xom no longer is amused if you deliberately hit yourself with a missile/wand/spell in safe surroundings. (Identifying wands that way or zapping /random effects is still considered amusing.) git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@9519 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref')
-rw-r--r--crawl-ref/docs/changes.stone_soup7
-rw-r--r--crawl-ref/source/beam.cc7
-rw-r--r--crawl-ref/source/dat/database/godspeak.txt30
-rw-r--r--crawl-ref/source/delay.cc12
-rw-r--r--crawl-ref/source/hiscores.cc20
-rw-r--r--crawl-ref/source/item_use.cc3
-rw-r--r--crawl-ref/source/mstuff2.cc3
-rw-r--r--crawl-ref/source/ouch.cc33
-rw-r--r--crawl-ref/source/ouch.h1
-rw-r--r--crawl-ref/source/shopping.cc2
-rw-r--r--crawl-ref/source/tutorial.cc19
-rw-r--r--crawl-ref/source/xom.cc32
-rw-r--r--crawl-ref/source/xom.h2
13 files changed, 125 insertions, 46 deletions
diff --git a/crawl-ref/docs/changes.stone_soup b/crawl-ref/docs/changes.stone_soup
index d49d2a1717..843bc7d77b 100644
--- a/crawl-ref/docs/changes.stone_soup
+++ b/crawl-ref/docs/changes.stone_soup
@@ -38,8 +38,8 @@ Characters
* Added non-healing species: Deep Dwarves.
* Added Artificer class.
* Transformations now cause worn equipment to be melded rather than removed.
-* Vampires can no longer heal via potions of blood or non-fresh corpses.
* Overhaul nutrition values and duration for Vampires feeding on corpses.
+* Vampires can no longer heal via potions of blood or non-fresh corpses.
* Vampires recover lost attributes depending on blood level.
* Draining of the experience pool is now reduced by life protection.
* Player and monster nagas no longer flounder or lose stealth in shallow water.
@@ -86,11 +86,12 @@ Interface
* Added an option to make menu colours apply to shops.
* Added stat_colour option to highlight dangerously low stats.
* Pressing Esc at -More- automatically clears all queued -More- prompts.
-* Greatly improved the monster view command ('V').
+* Greatly improved the monster view command ('V'), allowing travel to items.
* Add FAQ to help screen ('?Q').
* Purchases and donations are now noted.
* The database search now also prints armour base AC/EV and weapon plusses.
* Add spells and books to book/spell descriptions when searching the database.
+* Card descriptions are now searchable in the database ('?/c').
* Allow wishing for specific fixed and randarts in wizard mode ('o' command).
* Add food item based hunger descriptions to spells.
@@ -126,7 +127,7 @@ Gods
* Move Divine Robustness from Zin to Elyvilon, replacing Incredible Healing.
* Make Zin's retribution-summoned plagues permanent.
* Allow Trog to accept kills of demons.
-* Sif Muna no longer gifts Kiku/Vehumet specific books.
+* Sif Muna no longer gifts Kiku/Vehumet specific books, spells still possible.
* Vehumet accepts undead killing for you.
* Disallow shapeshifters in orc form to become Beoghites' followers.
* Beogh no longer accepts butcher but likes prayer over orcish remains.
diff --git a/crawl-ref/source/beam.cc b/crawl-ref/source/beam.cc
index 8606225b22..8fd7839844 100644
--- a/crawl-ref/source/beam.cc
+++ b/crawl-ref/source/beam.cc
@@ -3136,7 +3136,12 @@ void bolt::internal_ouch(int dam)
else if (bounces > 0)
ouch(dam, NON_MONSTER, KILLED_BY_BOUNCE, name.c_str());
else
- ouch(dam, NON_MONSTER, KILLED_BY_TARGETTING);
+ {
+ if (aimed_at_feet && effect_known)
+ ouch(dam, NON_MONSTER, KILLED_BY_SELF_AIMED, name.c_str());
+ else
+ ouch(dam, NON_MONSTER, KILLED_BY_TARGETTING);
+ }
}
else if (MON_KILL(thrower))
ouch(dam, beam_source, KILLED_BY_BEAM, aux_source.c_str());
diff --git a/crawl-ref/source/dat/database/godspeak.txt b/crawl-ref/source/dat/database/godspeak.txt
index 2cb758c334..084067c6a0 100644
--- a/crawl-ref/source/dat/database/godspeak.txt
+++ b/crawl-ref/source/dat/database/godspeak.txt
@@ -360,6 +360,36 @@ Xom resurrection
Xom brings you back to life.
%%%%
+# Xom laughing
+# (Currently only used post-game in response to "You die...")
+Xom laughter
+
+Xom guffaws!
+
+Xom roars with laughter!
+
+Xom thinks this is hilarious!
+
+Xom is highly amused!
+
+Xom cackles wildly!
+
+Xom snickers!
+
+Xom laughs nastily!
+
+Xom howls with laughter!
+
+Xom bursts into laughter!
+
+Xom giggles madly!
+
+Xom titters!
+
+Xom chuckles heartily!
+
+Xom chortles!
+%%%%
############################################
# Beogh rants on destroying an orcish idol #
############################################
diff --git a/crawl-ref/source/delay.cc b/crawl-ref/source/delay.cc
index 11ce010c47..d1f9f04bc1 100644
--- a/crawl-ref/source/delay.cc
+++ b/crawl-ref/source/delay.cc
@@ -861,7 +861,14 @@ void handle_delay( void )
// Only give the rotting message if the corpse wasn't
// previously rotten. (special < 100 is the rottenness check).
if (delay.parm2 >= 100)
+ {
mpr("The corpse rots.", MSGCH_ROTTEN_MEAT);
+ if (you.is_undead != US_UNDEAD
+ && player_mutation_level(MUT_SAPROVOROUS) < 3)
+ {
+ _xom_check_corpse_waste();
+ }
+ }
if (delay.type == DELAY_OFFER_CORPSE)
{
@@ -875,11 +882,6 @@ void handle_delay( void )
delay.parm2 = 99; // Don't give the message twice.
- if (you.is_undead != US_UNDEAD
- && player_mutation_level(MUT_SAPROVOROUS) < 3)
- {
- _xom_check_corpse_waste();
- }
// Vampires won't continue bottling rotting corpses.
if (delay.type == DELAY_BOTTLE_BLOOD)
{
diff --git a/crawl-ref/source/hiscores.cc b/crawl-ref/source/hiscores.cc
index 587b48741a..1b5eb95249 100644
--- a/crawl-ref/source/hiscores.cc
+++ b/crawl-ref/source/hiscores.cc
@@ -307,8 +307,8 @@ static const char *const _range_type_verb( const char *const aux )
if (strncmp( aux, "Shot ", 5 ) == 0) // launched
return ("shot");
else if (aux[0] == 0 // unknown
- || strncmp( aux, "Hit ", 4 ) == 0 // thrown
- || strncmp( aux, "volley ", 7 ) == 0) // manticore spikes
+ || strncmp( aux, "Hit ", 4 ) == 0 // thrown
+ || strncmp( aux, "volley ", 7 ) == 0) // manticore spikes
{
return ("hit from afar");
}
@@ -427,7 +427,7 @@ static const char *kill_method_names[] =
"wild_magic", "xom", "statue", "rotting", "targeting", "spore",
"tso_smiting", "petrification", "unknown", "something",
"falling_down_stairs", "acid", "curare", "melting", "bleeding",
- "beogh_smiting", "divine_wrath", "bounce", "reflect"
+ "beogh_smiting", "divine_wrath", "bounce", "reflect", "self_aimed"
};
const char *kill_method_name(kill_method_type kmt)
@@ -1676,6 +1676,20 @@ std::string scorefile_entry::death_description(death_desc_verbosity verbosity)
needs_damage = true;
break;
+ case KILLED_BY_SELF_AIMED:
+ if (terse)
+ desc += "suicidal targeting";
+ else
+ {
+ desc += "Shot themselves with a ";
+ if (auxkilldata.empty())
+ desc += "beam";
+ else
+ desc += auxkilldata;
+ }
+ needs_damage = true;
+ break;
+
case KILLED_BY_SPORE:
if (terse)
{
diff --git a/crawl-ref/source/item_use.cc b/crawl-ref/source/item_use.cc
index 5edbe9ee99..4e815f5214 100644
--- a/crawl-ref/source/item_use.cc
+++ b/crawl-ref/source/item_use.cc
@@ -1774,9 +1774,10 @@ static bool _item_penetrates_victim(const bolt &beam, const actor *victim,
used = 0;
if (!beam.is_tracer && you.can_see(victim))
+ {
mprf("The %s passes through %s!", beam.name.c_str(),
victim->name(DESC_NOCAP_THE).c_str());
-
+ }
return (true);
}
diff --git a/crawl-ref/source/mstuff2.cc b/crawl-ref/source/mstuff2.cc
index 50ad416e36..42f7f05407 100644
--- a/crawl-ref/source/mstuff2.cc
+++ b/crawl-ref/source/mstuff2.cc
@@ -509,9 +509,10 @@ void mons_cast(monsters *monster, bolt &pbolt, spell_type spell_cast,
}
case SPELL_BLINK_OTHER:
{
+ // Allow the caster to comment on moving the foe.
std::string msg = getSpeakString(monster->name(DESC_PLAIN)
+ " blink_other");
- if (!msg.empty())
+ if (!msg.empty() && msg != "__NONE")
{
mons_speaks_msg(monster, msg, MSGCH_TALK,
silenced(you.pos()) || silenced(monster->pos()));
diff --git a/crawl-ref/source/ouch.cc b/crawl-ref/source/ouch.cc
index 748c4c4443..c1338b0960 100644
--- a/crawl-ref/source/ouch.cc
+++ b/crawl-ref/source/ouch.cc
@@ -94,7 +94,10 @@ int check_your_resists(int hurted, beam_type flavour)
if (hurted < original)
canned_msg(MSG_YOU_RESIST);
else if (hurted > original)
+ {
mpr("It scalds you terribly!");
+ xom_is_stimulated(200);
+ }
break;
case BEAM_FIRE:
@@ -725,10 +728,16 @@ static void _xom_checks_damage(kill_method_type death_type,
{
if (death_type == KILLED_BY_TARGETTING
|| death_type == KILLED_BY_BOUNCE
- || death_type == KILLED_BY_REFLECTION)
+ || death_type == KILLED_BY_REFLECTION
+ || death_type == KILLED_BY_SELF_AIMED
+ && player_in_a_dangerous_place())
{
- // Xom thinks the player hurting him/herself is funny.
- xom_is_stimulated(255 * dam / (dam + you.hp));
+ // Xom thinks the player accidentally hurting him/herself is funny.
+ // Deliberate damage is only amusing if it's dangerous.
+ int amusement = 255 * dam / (dam + you.hp);
+ if (death_type == KILLED_BY_SELF_AIMED)
+ amusement /= 5;
+ xom_is_stimulated(amusement);
return;
}
else if (death_type == KILLED_BY_FALLING_DOWN_STAIRS)
@@ -738,8 +747,8 @@ static void _xom_checks_damage(kill_method_type death_type,
return;
}
else if (death_type != KILLED_BY_MONSTER
- && death_type != KILLED_BY_BEAM
- || invalid_monster_index(death_source))
+ && death_type != KILLED_BY_BEAM
+ || invalid_monster_index(death_source))
{
return;
}
@@ -1083,9 +1092,9 @@ void end_game( scorefile_entry &se )
clrscr();
}
- if (se.death_type == KILLED_BY_LEAVING ||
- se.death_type == KILLED_BY_QUITTING ||
- se.death_type == KILLED_BY_WINNING)
+ if (se.death_type == KILLED_BY_LEAVING
+ || se.death_type == KILLED_BY_QUITTING
+ || se.death_type == KILLED_BY_WINNING)
{
dead = false;
}
@@ -1138,6 +1147,8 @@ void end_game( scorefile_entry &se )
if (dead)
{
mpr("You die..."); // insert player name here? {dlb}
+ xom_death_message();
+ flush_prev_message();
viewwindow(true, false); // don't do for leaving/winning characters
if (Options.tutorial_left)
@@ -1146,9 +1157,9 @@ void end_game( scorefile_entry &se )
#ifdef DGL_WHEREIS
whereis_record( se.death_type == KILLED_BY_QUITTING? "quit" :
- se.death_type == KILLED_BY_WINNING? "won" :
- se.death_type == KILLED_BY_LEAVING? "bailed out" :
- "dead" );
+ se.death_type == KILLED_BY_WINNING ? "won" :
+ se.death_type == KILLED_BY_LEAVING ? "bailed out"
+ : "dead" );
#endif
if (!crawl_state.seen_hups)
diff --git a/crawl-ref/source/ouch.h b/crawl-ref/source/ouch.h
index ed9376b4a7..2dca2bdda4 100644
--- a/crawl-ref/source/ouch.h
+++ b/crawl-ref/source/ouch.h
@@ -55,6 +55,7 @@ enum kill_method_type
KILLED_BY_DIVINE_WRATH,
KILLED_BY_BOUNCE, // 35
KILLED_BY_REFLECTION,
+ KILLED_BY_SELF_AIMED,
NUM_KILLBY
};
diff --git a/crawl-ref/source/shopping.cc b/crawl-ref/source/shopping.cc
index 982cbb910c..0129554888 100644
--- a/crawl-ref/source/shopping.cc
+++ b/crawl-ref/source/shopping.cc
@@ -109,7 +109,7 @@ static void _list_shop_keys(const std::string &purchasable, bool viewing)
#ifdef USE_TILE
"/<w>R-Click</w>"
#endif
- "] exit [<w>!</w>] %s %s",
+ "] exit [<w>!</w>] %s %s",
(viewing ? "to select items " : "to examine items"),
pkeys.c_str());
diff --git a/crawl-ref/source/tutorial.cc b/crawl-ref/source/tutorial.cc
index 7cb022f58a..b29e16d3f9 100644
--- a/crawl-ref/source/tutorial.cc
+++ b/crawl-ref/source/tutorial.cc
@@ -135,8 +135,8 @@ bool pick_tutorial()
formatted_string::parse_string(
EOL
- "<brown>SPACE - Back to class selection; "
- "Bksp - Back to race selection; X - Quit"
+ "<brown>SPACE - Back to job selection; "
+ "Bksp - Back to species selection; X - Quit"
EOL "* - Random tutorial"
"</brown>" EOL).display();
@@ -308,7 +308,7 @@ static formatted_string _tut_starting_info(unsigned int width)
" <lightblue>quickstart.txt</lightblue> - "
"A very short guide to Crawl." EOL
" <lightblue>crawl_manual.txt</lightblue> - "
- "This contains all details on races, magic, skills, etc." EOL
+ "This contains all details on species, magic, skills, etc." EOL
" <lightblue>options_guide.txt</lightblue> - "
"Crawl's interface is highly configurable. This document " EOL
" explains all the options." EOL
@@ -807,7 +807,7 @@ void tutorial_finished()
Options.tutorial_left = 0;
text = "Congrats! You survived until the end of this tutorial - be sure "
- "to try the other ones as well. Note that the help screen "
+ "to try the other ones as well. Note that the command help screen "
"(<w>?\?</w>) will look very different from now on. Here's a last "
"playing hint:";
@@ -817,9 +817,8 @@ void tutorial_finished()
if (Options.tut_explored)
{
text = "Walking around and exploring levels gets easier by using "
- "auto-explore (<w>o</w>). You can even make Crawl "
- "automatically pick up interesting items by setting the "
- "option <w>explore_greedy=true</w> in the init file.";
+ "auto-explore (<w>o</w>). Crawl will let you automatically "
+ "move to and pick up interesting items.";
}
else if (Options.tut_travel)
{
@@ -2231,7 +2230,7 @@ void learned_something_new(tutorial_event_type seen_what, coord_def gc)
case TUT_ROTTEN_FOOD:
text << "One or more of the chunks or corpses you carry has started "
- "to rot. Few races can digest these safely, so you might "
+ "to rot. Few species can digest these safely, so you might "
"just as well <w>d</w>rop them now.";
break;
@@ -2771,8 +2770,8 @@ void learned_something_new(tutorial_event_type seen_what, coord_def gc)
if (Options.tutorial_type == TUT_BERSERK_CHAR)
text << ", especially if you're berserking while doing so";
- text << ". Small races may also wriggle out of a net, only damaging it "
- "a bit, so as to then <w>f</w>ire it at a monster.";
+ text << ". Small species may also wriggle out of a net, only damaging "
+ "it a bit, so as to then <w>f</w>ire it at a monster.";
if (Options.tutorial_type == TUT_MAGIC_CHAR)
text << " Note that casting spells is still very much possible.";
diff --git a/crawl-ref/source/xom.cc b/crawl-ref/source/xom.cc
index 8b2ace2adc..cf485d99b9 100644
--- a/crawl-ref/source/xom.cc
+++ b/crawl-ref/source/xom.cc
@@ -104,15 +104,15 @@ const char *describe_xom_favour()
return "A BORING thing.";
else
return (you.piety > 180) ? "A beloved toy of Xom." :
- (you.piety > 160) ? "A favourite toy of Xom." :
- (you.piety > 140) ? "A very special toy of Xom." :
- (you.piety > 120) ? "A special toy of Xom." :
- (you.piety > 100) ? "A toy of Xom." :
- (you.piety > 80) ? "A plaything of Xom." :
- (you.piety > 60) ? "A special plaything of Xom." :
- (you.piety > 40) ? "A very special plaything of Xom." :
- (you.piety > 20) ? "A favourite plaything of Xom."
- : "A beloved plaything of Xom.";
+ (you.piety > 160) ? "A favourite toy of Xom." :
+ (you.piety > 140) ? "A very special toy of Xom." :
+ (you.piety > 120) ? "A special toy of Xom." :
+ (you.piety > 100) ? "A toy of Xom." :
+ (you.piety > 80) ? "A plaything of Xom." :
+ (you.piety > 60) ? "A special plaything of Xom." :
+ (you.piety > 40) ? "A very special plaything of Xom." :
+ (you.piety > 20) ? "A favourite plaything of Xom."
+ : "A beloved plaything of Xom.";
}
static std::string _get_xom_speech(const std::string key)
@@ -169,6 +169,7 @@ static void _xom_is_stimulated(int maxinterestingness,
}
if (was_stimulated || force_message)
+ {
god_speaks(GOD_XOM,
((interestingness > 200) ? message_array[5] :
(interestingness > 100) ? message_array[4] :
@@ -176,6 +177,7 @@ static void _xom_is_stimulated(int maxinterestingness,
(interestingness > 50) ? message_array[2] :
(interestingness > 25) ? message_array[1]
: message_array[0]));
+ }
}
void xom_is_stimulated(int maxinterestingness, xom_message_type message_type,
@@ -223,6 +225,9 @@ void xom_tick()
void xom_is_stimulated(int maxinterestingness, const std::string& message,
bool force_message)
{
+ if (you.religion != GOD_XOM)
+ return;
+
const char *message_array[6];
for (int i = 0; i < 6; ++i)
@@ -1995,11 +2000,15 @@ void xom_acts(bool niceness, int sever)
// mode to escape death from deep water or lava.
ASSERT(you.wizard && !you.did_escape_death());
if (_feat_is_deadly(grd(you.pos())))
+ {
mpr("Player is standing in deadly terrain, skipping Xom act.",
MSGCH_DIAGNOSTICS);
+ }
else
+ {
mpr("Player is already dead, skipping Xom act.",
MSGCH_DIAGNOSTICS);
+ }
return;
}
#else
@@ -2171,3 +2180,8 @@ void xom_check_destroyed_item(const item_def& item, int cause)
: "Xom snickers softly.",
true);
}
+
+void xom_death_message()
+{
+ god_speaks(GOD_XOM, _get_xom_speech("laughter").c_str());
+}
diff --git a/crawl-ref/source/xom.h b/crawl-ref/source/xom.h
index 5b19a6e83d..0ecba36714 100644
--- a/crawl-ref/source/xom.h
+++ b/crawl-ref/source/xom.h
@@ -35,5 +35,5 @@ inline void xom_acts(int sever)
void xom_check_lost_item(const item_def& item);
void xom_check_destroyed_item(const item_def& item, int cause = -1);
-
+void xom_death_message();
#endif