diff options
-rw-r--r-- | crawl-ref/source/dat/database/godspeak.txt | 151 | ||||
-rw-r--r-- | crawl-ref/source/delay.cc | 29 | ||||
-rw-r--r-- | crawl-ref/source/describe.cc | 42 | ||||
-rw-r--r-- | crawl-ref/source/monstuff.cc | 19 |
4 files changed, 199 insertions, 42 deletions
diff --git a/crawl-ref/source/dat/database/godspeak.txt b/crawl-ref/source/dat/database/godspeak.txt index 4abab6d5c8..f3e548243b 100644 --- a/crawl-ref/source/dat/database/godspeak.txt +++ b/crawl-ref/source/dat/database/godspeak.txt @@ -368,22 +368,55 @@ Beogh seems highly displeased. ########################################################## # Messages for the *player* using Zin's Recite invocation ########################################################## +recite_start + +begin + +launch into + +embark on + +%%%% +recite_what + +a poem about + +the sacred texts on + +the word of Zin on + +sonorously on + +loudly on + +%%%% zin_recite_speech_start w:40 -reciting @subject@ +begin reciting @axioms_of_law@ + +begin reciting @recite_what@ @recite_subject@ + +begin preaching about @recite_subject@ + +@recite_start@ a @lecture_modifier@ lecture about @recite_subject@ -reciting a poem about @subject@ +begin explaining in detail about @recite_subject@ -preaching about @subject@ +begin explaining the importance of @important_subject@ -a @lecture_modifier@ lecture about @subject@ +@recite_start@ a @lecture_modifier@ sermon about @recite_subject@ + +@recite_start@ a @lecture_modifier@ speech about @recite_subject@ + +w:5 +begin speaking about @recite_subject@ -explaining in detail about @subject@ %%%% # the short form of the above, for continuing/stopping/finishing -# reciting - order and weights must be the same as above! -zin_recite_speech_ +# reciting -- order and weights must be the same as above! +# doesn't need finishing interpunction +zin_recite_speech_other w:50 reciting @@ -392,7 +425,14 @@ preaching your lecture +w:20 your explanations + +your sermon + +w:15 +your speech + %%%% lecture_modifier @@ -401,12 +441,101 @@ lengthy passionate stern + %%%% -subject +axioms_of_law + +Zin's Axioms of Law. + +the Axioms of Law. + +the books of the Law. + +the sacred Law of Zin. + +%%%% +# used for "explaining the importance of ..." +important_subject + +# law +w:50 +@axioms_of_law@ + +the eternal Law. + +obedience to the Law. + +the one true way. + +# purity +purity of body and mind. + +preserving your bodily integrity. + +keeping your body clean and pure. + +proper care of body and soul. + +# mutations +avoiding mutations. + +just saying no to mutations. + +# respecting intelligent beings +proper burial practice. + +# demons +not dealing with demons. + +rejecting the service of demons. + +%%%% +# the subject of your recital/lecture/whatever +# needs the full dot or exclamation mark +recite_subject + +w:120 +@important_subject@ + +# first, law and order +w:80 +@axioms_of_law@ + +the Law and the prophets. + +the importance of the Law. + +# anti-mutation +mutations, and how to avoid them. + +potions of Mutation - the devil's brew! + +Neqoxecs and Cacodemons -- may they all be destroyed! + +# respecting intelligent beings +a proper diet respecting intelligent beings. + +# necromancy and evil +the evils of necromancy. + +undead, and why they are evil. + +# the gods +the fall of Lugonu. + +the alliance of Zin and the Shining One. + +the evilness of @evil_god@. +%%%% +evil_god + +Kikubaaqudgha + +Makhleb -Zin's Axioms of Law +Yredelmnul -the Axioms of Law +Beogh -the importance of the Law +Lugonu %%%% diff --git a/crawl-ref/source/delay.cc b/crawl-ref/source/delay.cc index adfdad2bbf..d54fcdfe41 100644 --- a/crawl-ref/source/delay.cc +++ b/crawl-ref/source/delay.cc @@ -195,14 +195,17 @@ static int recite_to_monsters(int x, int y, int pow, int unused) static const char* _get_recite_speech(const std::string key, int weight) { - const std::string str - = getWeightedSpeechString("zin_recite_speech_", key, - weight + you.x_pos + you.y_pos); - + seed_rng( weight + you.x_pos + you.y_pos); + const std::string str = getSpeakString("zin_recite_speech_" + key); + if (!str.empty()) return (str.c_str()); - - return ("reciting the Axioms of Law"); + + // in case nothing is found + if (key == "start") + return ("begin reciting the Axioms of Law."); + + return ("reciting"); } // Returns true if this delay can act as a parent to other delays, i.e. if @@ -352,7 +355,7 @@ void stop_delay( bool stop_stair_travel ) case DELAY_RECITE: mprf(MSGCH_PLAIN, "You stop %s.", - _get_recite_speech("stop", delay.parm1 + delay.parm2)); + _get_recite_speech("other", you.num_turns + delay.duration)); pop_delay(); break; @@ -484,8 +487,8 @@ int check_recital_audience() continue; mons = &menv[mid]; - if (!found_monsters) - found_monsters = true; + if (!found_monsters) + found_monsters = true; // can not be affected in these states if (recite_mons_useless(mons)) @@ -550,8 +553,8 @@ void handle_delay( void ) mpr("You begin to meditate on the wall.", MSGCH_MULTITURN_ACTION); break; case DELAY_RECITE: - mprf(MSGCH_PLAIN, "You begin %s.", - _get_recite_speech("start", delay.parm1 + delay.parm2)); + mprf(MSGCH_PLAIN, "You %s", + _get_recite_speech("start", you.num_turns + delay.duration)); apply_area_visible(recite_to_monsters, delay.parm1); break; default: @@ -701,7 +704,7 @@ void handle_delay( void ) break; case DELAY_RECITE: mprf(MSGCH_MULTITURN_ACTION, "You continue %s.", - _get_recite_speech("continue", delay.parm1 + delay.parm2)); + _get_recite_speech("other", you.num_turns + delay.duration+1)); apply_area_visible(recite_to_monsters, delay.parm1); break; case DELAY_MULTIDROP: @@ -808,7 +811,7 @@ static void finish_delay(const delay_queue_item &delay) case DELAY_RECITE: mprf(MSGCH_PLAIN, "You finish %s.", - _get_recite_speech("finish", delay.parm1 + delay.parm2)); + _get_recite_speech("other", you.num_turns + delay.duration)); break; case DELAY_PASSWALL: diff --git a/crawl-ref/source/describe.cc b/crawl-ref/source/describe.cc index 71af3e2b9a..7fa4f9b43e 100644 --- a/crawl-ref/source/describe.cc +++ b/crawl-ref/source/describe.cc @@ -2304,9 +2304,9 @@ std::string describe_favour(god_type which_god) { const int penance = you.penance[which_god]; return (penance >= 50) ? "Godly wrath is upon you!" : - (penance >= 20) ? "You've transgressed heavily! Be penitent!" : - (penance >= 5 ) ? "You are under penance." - : "You should show more discipline."; + (penance >= 20) ? "You've transgressed heavily! Be penitent!" : + (penance >= 5 ) ? "You are under penance." + : "You should show more discipline."; } return (which_god == GOD_XOM)? @@ -2367,6 +2367,19 @@ static std::string religion_help( god_type god ) return result; } +static bool _god_hates_your_god( god_type which_god ) +{ + // non-good gods always hate your current god + if (!is_good_god(which_god)) + return (true); + + // Zin hates Xom and Makhleb + if (which_god == GOD_ZIN && is_chaotic_god(you.religion)) + return (true); + + return (is_evil_god(you.religion)); +} + void describe_god( god_type which_god, bool give_title ) { int colour; // mv: colour used for some messages @@ -2501,12 +2514,23 @@ void describe_god( god_type which_god, bool give_title ) if (you.religion != which_god) { textcolor (colour); - cprintf( (you.penance[which_god] >= 50) ? "%s's wrath is upon you!" : - (you.penance[which_god] >= 20) ? "%s is annoyed with you." : - (you.penance[which_god] >= 5) ? "%s well remembers your sins." : - (you.penance[which_god] > 0) ? "%s is ready to forgive your sins." : - (you.worshipped[which_god]) ? "%s is ambivalent towards you." - : "%s is neutral towards you.", + int which_god_penance = you.penance[which_god]; + + // give more appropriate for the good gods + if (which_god_penance > 0 && is_good_god(which_god)) + { + if (is_good_god(you.religion)) + which_god_penance = 0; + else if (!_god_hates_your_god(which_god) && which_god_penance >= 5) + which_god_penance = 2; // == "Come back to the one true church!" + } + + cprintf( (which_god_penance >= 50) ? "%s's wrath is upon you!" : + (which_god_penance >= 20) ? "%s is annoyed with you." : + (which_god_penance >= 5) ? "%s well remembers your sins." : + (which_god_penance > 0) ? "%s is ready to forgive your sins." : + (you.worshipped[which_god]) ? "%s is ambivalent towards you." + : "%s is neutral towards you.", god_name(which_god).c_str() ); } else diff --git a/crawl-ref/source/monstuff.cc b/crawl-ref/source/monstuff.cc index e415c688ad..d31395218e 100644 --- a/crawl-ref/source/monstuff.cc +++ b/crawl-ref/source/monstuff.cc @@ -487,21 +487,21 @@ static bool _ely_protects_ally(monsters *monster) ASSERT(you.religion == GOD_ELYVILON); if (mons_holiness(monster) != MH_NATURAL + && mons_holiness(monster) != MH_HOLY || !mons_friendly(monster) + || !mons_near(monster) + || !player_monster_visible(monster) // for simplicity || !one_chance_in(20)) { return (false); } - if (player_monster_visible(monster) && mons_near(monster)) - { - monster->hit_points = 1; - snprintf(info, INFO_SIZE, " protects %s%s from harm!%s", - mons_is_unique(monster->type) ? "" : "your ", - monster->name(DESC_PLAIN).c_str(), - coinflip() ? "" : " You feel responsible."); - simple_god_message(info); - } + monster->hit_points = 1; + snprintf(info, INFO_SIZE, " protects %s%s from harm!%s", + mons_is_unique(monster->type) ? "" : "your ", + monster->name(DESC_PLAIN).c_str(), + coinflip() ? "" : " You feel responsible."); + simple_god_message(info); lose_piety(1); return (true); @@ -520,6 +520,7 @@ static bool _ely_heals_monster(monsters *monster, killer_type killer, int i) const int ely_penance = you.penance[god]; if (mons_holiness(monster) != MH_NATURAL + && mons_holiness(monster) != MH_HOLY || mons_friendly(monster) || !one_chance_in(10)) { |