From: <gi...@cr...> - 2012-12-24 09:24:16
|
via 34ed474be02b63e6781e0a0f29cd305de5cb3c80 (commit) from 72bdf47f1a616ee387e13279cd2d2c15cfaa77c5 (commit) ----------------------------------------------------------------------- commit 34ed474be02b63e6781e0a0f29cd305de5cb3c80 Author: elliptic <hyp...@gm...> Date: Mon Dec 24 04:02:04 2012 -0500 Fix several things involving cold damage. Some of them were a byproduct of 609867cb. * Monsters with freezing weapons no longer destroy potions (there isn't anything intrinsically wrong with them doing so, but it was added accidentally and inconsistently with other item destruction). * Cold bolts no longer slow player draconians (this type of slowing is reserved for refrigeration, freeze, and freezing weapons, not general cold attacks). * Monsters can no longer bypass rC+ when using refrigeration to slow other monsters. * The strength value of the slowness effect from cold attacks is a bit more consistent. However, this value doesn't actually affect anything for monsters yet because the strength argument in monster::slow_down doesn't get used. ----------------------------------------------------------------------- Summary of changes: crawl-ref/source/actor.h | 4 +++- crawl-ref/source/beam.cc | 2 +- crawl-ref/source/melee_attack.cc | 2 +- crawl-ref/source/mon-cast.cc | 3 +-- crawl-ref/source/monster.cc | 7 ++++--- crawl-ref/source/monster.h | 4 +++- crawl-ref/source/player.cc | 5 +++-- crawl-ref/source/player.h | 4 +++- crawl-ref/source/spl-damage.cc | 5 ++--- crawl-ref/source/spl-miscast.cc | 2 +- 10 files changed, 22 insertions(+), 16 deletions(-) diff --git a/crawl-ref/source/actor.h b/crawl-ref/source/actor.h index 023bd10..a435044 100644 --- a/crawl-ref/source/actor.h +++ b/crawl-ref/source/actor.h @@ -217,7 +217,9 @@ public: virtual void slow_down(actor *attacker, int strength) = 0; virtual void confuse(actor *attacker, int strength) = 0; virtual void put_to_sleep(actor *attacker, int strength) = 0; - virtual void expose_to_element(beam_type element, int strength = 0) = 0; + virtual void expose_to_element(beam_type element, int strength = 0, + bool damage_inventory = true, + bool slow_cold_blood = true) = 0; virtual void drain_stat(stat_type stat, int amount, actor* attacker) { } virtual bool can_hibernate(bool holi_only = false) const; virtual bool can_sleep() const; diff --git a/crawl-ref/source/beam.cc b/crawl-ref/source/beam.cc index 7ab324d..c68a51c 100644 --- a/crawl-ref/source/beam.cc +++ b/crawl-ref/source/beam.cc @@ -3712,7 +3712,7 @@ void bolt::affect_player() // Potions exploding. if (flavour == BEAM_COLD) - expose_player_to_element(BEAM_COLD, burn_power); + expose_player_to_element(BEAM_COLD, burn_power, true, false); // Spore pops. if (in_explosion_phase && flavour == BEAM_SPORE) diff --git a/crawl-ref/source/melee_attack.cc b/crawl-ref/source/melee_attack.cc index 64ebc2f..5f4ef17 100644 --- a/crawl-ref/source/melee_attack.cc +++ b/crawl-ref/source/melee_attack.cc @@ -2967,7 +2967,7 @@ bool melee_attack::apply_damage_brand() case SPWPN_FREEZING: calc_elemental_brand_damage(BEAM_COLD, defender->res_cold(), "freeze"); - defender->expose_to_element(BEAM_COLD, damage_done); + defender->expose_to_element(BEAM_COLD, 2, false); break; case SPWPN_HOLY_WRATH: diff --git a/crawl-ref/source/mon-cast.cc b/crawl-ref/source/mon-cast.cc index a1c7d7a..b5b1794 100644 --- a/crawl-ref/source/mon-cast.cc +++ b/crawl-ref/source/mon-cast.cc @@ -2923,8 +2923,7 @@ static bool _mons_ozocubus_refrigeration(monster* mons, bool actual) if (m->alive()) { print_wounds(m); - if (mons_class_flag(m->type, M_COLD_BLOOD) && coinflip()) - m->add_ench(ENCH_SLOW); + m->expose_to_element(BEAM_COLD, 5); } } diff --git a/crawl-ref/source/monster.cc b/crawl-ref/source/monster.cc index 1966451..cfa14de 100644 --- a/crawl-ref/source/monster.cc +++ b/crawl-ref/source/monster.cc @@ -3025,13 +3025,14 @@ void monster::go_berserk(bool /* intentional */, bool /* potion */) xom_is_stimulated(friendly() ? 25 : 100); } -void monster::expose_to_element(beam_type flavour, int strength) +void monster::expose_to_element(beam_type flavour, int strength, + bool damage_inventory, bool slow_cold_blood) { switch (flavour) { case BEAM_COLD: - if (mons_class_flag(type, M_COLD_BLOOD) && res_cold() <= 0 - && coinflip()) + if (slow_cold_blood && mons_class_flag(type, M_COLD_BLOOD) + && res_cold() <= 0 && coinflip()) { slow_down(this, strength); } diff --git a/crawl-ref/source/monster.h b/crawl-ref/source/monster.h index 4ede8a5..fc401e6 100644 --- a/crawl-ref/source/monster.h +++ b/crawl-ref/source/monster.h @@ -304,7 +304,9 @@ public: bool can_bleed(bool allow_tran = true) const; bool mutate(const string &reason); void banish(actor *agent, const string &who = ""); - void expose_to_element(beam_type element, int strength = 0); + void expose_to_element(beam_type element, int strength = 0, + bool damage_inventory = true, + bool slow_cold_blood = true); monster_type mons_species(bool zombie_base = false) const; diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc index 21806b1..9228f4e 100644 --- a/crawl-ref/source/player.cc +++ b/crawl-ref/source/player.cc @@ -6463,9 +6463,10 @@ bool player::poison(actor *agent, int amount, bool force) force); } -void player::expose_to_element(beam_type element, int st) +void player::expose_to_element(beam_type element, int strength, + bool damage_inventory, bool slow_cold_blood) { - ::expose_player_to_element(element, st); + ::expose_player_to_element(element, strength, damage_inventory, slow_cold_blood); } void player::blink(bool allow_partial_control) diff --git a/crawl-ref/source/player.h b/crawl-ref/source/player.h index f638e0d..8955664 100644 --- a/crawl-ref/source/player.h +++ b/crawl-ref/source/player.h @@ -567,7 +567,9 @@ public: bool wizard_tele = false); void drain_stat(stat_type stat, int amount, actor* attacker); - void expose_to_element(beam_type element, int strength = 0); + void expose_to_element(beam_type element, int strength = 0, + bool damage_inventory = true, + bool slow_cold_blood = true); void god_conduct(conduct_type thing_done, int level); void make_hungry(int nutrition, bool silent = true); diff --git a/crawl-ref/source/spl-damage.cc b/crawl-ref/source/spl-damage.cc index 3847a6b..908e24f 100644 --- a/crawl-ref/source/spl-damage.cc +++ b/crawl-ref/source/spl-damage.cc @@ -479,8 +479,7 @@ spret_type cast_refrigeration(int pow, bool non_player, bool freeze_potions, // Note: this used to be 12!... and it was also applied even if // the player didn't take damage from the cold, so we're being // a lot nicer now. -- bwr - if (freeze_potions) - expose_player_to_element(BEAM_COLD, 5); + expose_player_to_element(BEAM_COLD, 5, freeze_potions); } // Now do the monsters. @@ -547,7 +546,7 @@ spret_type cast_refrigeration(int pow, bool non_player, bool freeze_potions, // Cold-blooded creatures can be slowed. if (mi->alive()) - mi->expose_to_element(BEAM_COLD, hurt); + mi->expose_to_element(BEAM_COLD, 5); } return SPRET_SUCCESS; } diff --git a/crawl-ref/source/spl-miscast.cc b/crawl-ref/source/spl-miscast.cc index c99ef82..8b3daa9 100644 --- a/crawl-ref/source/spl-miscast.cc +++ b/crawl-ref/source/spl-miscast.cc @@ -2275,7 +2275,7 @@ void MiscastEffect::_ice(int severity) else do_msg(); if (target->alive()) - target->expose_to_element(BEAM_COLD, 2); + target->expose_to_element(BEAM_COLD, 2, true, false); break; } break; -- Dungeon Crawl Stone Soup |