diff options
author | j-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573> | 2009-03-19 22:28:38 +0000 |
---|---|---|
committer | j-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573> | 2009-03-19 22:28:38 +0000 |
commit | a56eea02ae7ce566af2baff5be396ddc15134735 (patch) | |
tree | a10aefecf614ec03b4c08c7544814e15d4076102 /crawl-ref | |
parent | dbea6550fa584e710e7788b95f1037a9ec344ba5 (diff) | |
download | crawl-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_soup | 7 | ||||
-rw-r--r-- | crawl-ref/source/beam.cc | 7 | ||||
-rw-r--r-- | crawl-ref/source/dat/database/godspeak.txt | 30 | ||||
-rw-r--r-- | crawl-ref/source/delay.cc | 12 | ||||
-rw-r--r-- | crawl-ref/source/hiscores.cc | 20 | ||||
-rw-r--r-- | crawl-ref/source/item_use.cc | 3 | ||||
-rw-r--r-- | crawl-ref/source/mstuff2.cc | 3 | ||||
-rw-r--r-- | crawl-ref/source/ouch.cc | 33 | ||||
-rw-r--r-- | crawl-ref/source/ouch.h | 1 | ||||
-rw-r--r-- | crawl-ref/source/shopping.cc | 2 | ||||
-rw-r--r-- | crawl-ref/source/tutorial.cc | 19 | ||||
-rw-r--r-- | crawl-ref/source/xom.cc | 32 | ||||
-rw-r--r-- | crawl-ref/source/xom.h | 2 |
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 |