From 525ed47151b7129d1346518d6f74effc4e6f79ac Mon Sep 17 00:00:00 2001 From: dolorous Date: Thu, 15 May 2008 17:05:22 +0000 Subject: When placed under penance or excommunicated by Zin, remove divine stamina. Also, consolidate the routines for removing Zin's divine robustness, Zin's divine stamina, and TSO's divine shield. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@5059 c06c8d41-db1a-0410-9941-cceddc491573 --- crawl-ref/source/acr.cc | 17 ++--------------- crawl-ref/source/religion.cc | 37 ++++++++++++------------------------- crawl-ref/source/spells1.cc | 20 ++++++++++++++++++++ crawl-ref/source/spells1.h | 2 ++ crawl-ref/source/spells4.cc | 8 ++++++++ crawl-ref/source/spells4.h | 1 + 6 files changed, 45 insertions(+), 40 deletions(-) diff --git a/crawl-ref/source/acr.cc b/crawl-ref/source/acr.cc index 4170989d79..b322622834 100644 --- a/crawl-ref/source/acr.cc +++ b/crawl-ref/source/acr.cc @@ -3066,23 +3066,10 @@ static void _decrement_durations() reduce_revitalisation_chain(1); if (_decrement_a_duration(DUR_DIVINE_ROBUSTNESS)) - { - mpr("Your divine robustness fades.", MSGCH_DURATION); - you.attribute[ATTR_DIVINE_ROBUSTNESS] = 0; - calc_hp(); - } + remove_divine_robustness(); if (_decrement_a_duration(DUR_DIVINE_STAMINA)) - { - mpr("Your divine stamina fades.", MSGCH_DURATION); - modify_stat(STAT_STRENGTH, -you.attribute[ATTR_DIVINE_STAMINA], - true, "Zin's divine stamina running out"); - modify_stat(STAT_INTELLIGENCE, -you.attribute[ATTR_DIVINE_STAMINA], - true, "Zin's divine stamina running out"); - modify_stat(STAT_DEXTERITY, -you.attribute[ATTR_DIVINE_STAMINA], - true, "Zin's divine stamina running out"); - you.attribute[ATTR_DIVINE_STAMINA] = 0; - } + remove_divine_stamina(); } static void _check_banished() diff --git a/crawl-ref/source/religion.cc b/crawl-ref/source/religion.cc index 2d59611356..054adedde8 100644 --- a/crawl-ref/source/religion.cc +++ b/crawl-ref/source/religion.cc @@ -475,7 +475,8 @@ static void _inc_penance(god_type god, int val) // orcish bonuses don't apply under penance if (god == GOD_BEOGH) you.redraw_armour_class = true; - // neither does Zin's revitalisation chaining or divine robustness + // neither does Zin's revitalisation chaining, divine + // robustness, or divine stamina else if (god == GOD_ZIN) { if (you.duration[DUR_REVITALISATION_CHAIN]) @@ -485,12 +486,10 @@ static void _inc_penance(god_type god, int val) } if (you.duration[DUR_DIVINE_ROBUSTNESS]) - { - mpr("Your divine robustness is withdrawn."); - you.duration[DUR_DIVINE_ROBUSTNESS] = 0; - you.duration[DUR_REVITALISATION_CHAIN] = 0; - calc_hp(); - } + remove_divine_robustness(); + + if (you.duration[DUR_DIVINE_STAMINA]) + remove_divine_stamina(); } // neither does TSO's halo or divine shield else if (god == GOD_SHINING_ONE) @@ -499,12 +498,7 @@ static void _inc_penance(god_type god, int val) mpr("Your divine halo fades away."); if (you.duration[DUR_DIVINE_SHIELD]) - { - mpr("Your divine shield disappears!"); - you.duration[DUR_DIVINE_SHIELD] = 0; - you.attribute[ATTR_DIVINE_SHIELD] = 0; - you.redraw_armour_class = true; - } + remove_divine_shield(); _make_god_gifts_disappear(true); // only on level } @@ -4344,12 +4338,7 @@ void excommunication(god_type new_god) mpr("Your divine halo fades away."); if (you.duration[DUR_DIVINE_SHIELD]) - { - mpr("Your divine shield disappears!"); - you.duration[DUR_DIVINE_SHIELD] = 0; - you.attribute[ATTR_DIVINE_SHIELD] = 0; - you.redraw_armour_class = true; - } + remove_divine_shield(); if (!is_good_god(new_god)) _make_god_gifts_hostile(false); @@ -4367,12 +4356,10 @@ void excommunication(god_type new_god) } if (you.duration[DUR_DIVINE_ROBUSTNESS]) - { - mpr("Your divine robustness is withdrawn."); - you.attribute[ATTR_DIVINE_ROBUSTNESS] = 0; - you.duration[DUR_DIVINE_ROBUSTNESS] = 0; - calc_hp(); - } + remove_divine_robustness(); + + if (you.duration[DUR_DIVINE_STAMINA]) + remove_divine_stamina(); if (env.sanctuary_time) remove_sanctuary(); diff --git a/crawl-ref/source/spells1.cc b/crawl-ref/source/spells1.cc index 08e98a6fd1..312e2a17d6 100644 --- a/crawl-ref/source/spells1.cc +++ b/crawl-ref/source/spells1.cc @@ -789,6 +789,26 @@ void reduce_revitalisation_chain(int amount) } } +void remove_divine_robustness() +{ + mpr("Your divine robustness is withdrawn."); + you.duration[DUR_DIVINE_ROBUSTNESS] = 0; + you.attribute[ATTR_DIVINE_ROBUSTNESS] = 0; + calc_hp(); +} + +void remove_divine_stamina() +{ + mpr("Your divine stamina fades.", MSGCH_DURATION); + modify_stat(STAT_STRENGTH, -you.attribute[ATTR_DIVINE_STAMINA], + true, "Zin's divine stamina running out"); + modify_stat(STAT_INTELLIGENCE, -you.attribute[ATTR_DIVINE_STAMINA], + true, "Zin's divine stamina running out"); + modify_stat(STAT_DEXTERITY, -you.attribute[ATTR_DIVINE_STAMINA], + true, "Zin's divine stamina running out"); + you.attribute[ATTR_DIVINE_STAMINA] = 0; +} + int cast_revitalisation(int pow) { const int step_max_chain = 6; diff --git a/crawl-ref/source/spells1.h b/crawl-ref/source/spells1.h index 0e11e96d30..e95537b97e 100644 --- a/crawl-ref/source/spells1.h +++ b/crawl-ref/source/spells1.h @@ -57,6 +57,8 @@ int cast_healing(int pow, int target_x = -1, int target_y = -1); void revitalisation_chain(int amount); void reduce_revitalisation_chain(int amount); +void remove_divine_robustness(); +void remove_divine_stamina(); int cast_revitalisation(int pow); // last updated 24may2000 {dlb} diff --git a/crawl-ref/source/spells4.cc b/crawl-ref/source/spells4.cc index 3cf98afe3b..9860f45ecf 100644 --- a/crawl-ref/source/spells4.cc +++ b/crawl-ref/source/spells4.cc @@ -2680,6 +2680,14 @@ void cast_condensation_shield(int pow) return; } // end cast_condensation_shield() +void remove_divine_shield() +{ + mpr("Your divine shield disappears!"); + you.duration[DUR_DIVINE_SHIELD] = 0; + you.attribute[ATTR_DIVINE_SHIELD] = 0; + you.redraw_armour_class = true; +} + // shield bonus = attribute for duration turns, then decreasing by 1 // every two out of three turns // overall shield duration = duration + attribute diff --git a/crawl-ref/source/spells4.h b/crawl-ref/source/spells4.h index 937bdabe13..b29418a055 100644 --- a/crawl-ref/source/spells4.h +++ b/crawl-ref/source/spells4.h @@ -25,6 +25,7 @@ int disperse_monsters(int x, int y, int pow, int message); void cast_bend(int pow); void cast_condensation_shield(int pow); +void remove_divine_shield(void); void cast_divine_shield(void); void cast_detect_secret_doors(int pow); void cast_discharge(int pow); -- cgit v1.2.3-54-g00ecf