diff options
Diffstat (limited to 'crawl-ref/source')
-rw-r--r-- | crawl-ref/source/abl-show.cc | 4 | ||||
-rw-r--r-- | crawl-ref/source/spells1.cc | 43 | ||||
-rw-r--r-- | crawl-ref/source/spells1.h | 1 | ||||
-rw-r--r-- | crawl-ref/source/spl-cast.cc | 5 | ||||
-rw-r--r-- | crawl-ref/source/spl-data.h | 26 |
5 files changed, 64 insertions, 15 deletions
diff --git a/crawl-ref/source/abl-show.cc b/crawl-ref/source/abl-show.cc index d7704a6aaa..99063d9731 100644 --- a/crawl-ref/source/abl-show.cc +++ b/crawl-ref/source/abl-show.cc @@ -1474,8 +1474,8 @@ static bool _do_ability(const ability_def& abil) break; case ABIL_HELLFIRE: - if (your_spells(SPELL_HELLFIRE, - 20 + you.experience_level, false) == SPRET_ABORT) + if (your_spells(SPELL_HELLFIRE_BURST, + you.experience_level * 5, false) == SPRET_ABORT) return (false); break; diff --git a/crawl-ref/source/spells1.cc b/crawl-ref/source/spells1.cc index 9c0feb4a40..54bf45bd90 100644 --- a/crawl-ref/source/spells1.cc +++ b/crawl-ref/source/spells1.cc @@ -299,6 +299,49 @@ void cast_fire_storm(int pow, bolt &beam) viewwindow(true, false); } +// No setup/cast split here as monster hellfire is completely different. +// Sad, but needed to maintain balance - monster hellfirers get asymmetric +// torment too. +bool cast_hellfire_burst(int pow, bolt &beam) +{ + beam.name = "burst of hellfire"; + beam.aux_source = "burst of hellfire"; + beam.ex_size = 1; + beam.flavour = BEAM_HELLFIRE; + beam.real_flavour = beam.flavour; + beam.type = dchar_glyph(DCHAR_FIRED_BURST); + beam.colour = RED; + beam.beam_source = MHITYOU; + beam.thrower = KILL_YOU; + beam.obvious_effect = false; + beam.is_beam = false; + beam.is_explosion = true; + beam.ench_power = pow; // used for radius + beam.hit = 20 + pow / 10; + beam.damage = calc_dice(6, 30 + pow); + beam.can_see_invis = you.can_see_invisible(); + beam.smart_monster = true; + beam.attitude = ATT_FRIENDLY; + beam.friend_info.count = 0; + beam.is_tracer = true; + + beam.explode(false); + + if (beam.beam_cancelled) + { + canned_msg(MSG_OK); + return (false); + } + + mpr("You call forth a pillar of hellfire!"); + + beam.is_tracer = false; + beam.in_explosion_phase = false; + beam.explode(true); + + return (true); +} + bool _lightning_los(const coord_def& source, const coord_def& target) { // XXX: currently bounded by circular LOS radius; diff --git a/crawl-ref/source/spells1.h b/crawl-ref/source/spells1.h index c3c0e16d6f..b32d719c24 100644 --- a/crawl-ref/source/spells1.h +++ b/crawl-ref/source/spells1.h @@ -40,6 +40,7 @@ int allowed_deaths_door_hp(void); void cast_deaths_door(int pow); void setup_fire_storm(const actor *source, int pow, bolt &beam); void cast_fire_storm(int pow, bolt &beam); +bool cast_hellfire_burst(int pow, bolt &beam); void cast_chain_lightning(int pow); bool cast_revivification(int pow); void cast_berserk(void); diff --git a/crawl-ref/source/spl-cast.cc b/crawl-ref/source/spl-cast.cc index 8b15d1f54b..3794bfcb08 100644 --- a/crawl-ref/source/spl-cast.cc +++ b/crawl-ref/source/spl-cast.cc @@ -1529,6 +1529,11 @@ spret_type your_spells(spell_type spell, int powc, bool allow_fail) cast_fire_storm(powc, beam); break; + case SPELL_HELLFIRE_BURST: + if (!cast_hellfire_burst(powc, beam)) + return (SPRET_ABORT); + break; + case SPELL_ICE_STORM: if (!zapping(ZAP_ICE_STORM, powc, beam, true)) return (SPRET_ABORT); diff --git a/crawl-ref/source/spl-data.h b/crawl-ref/source/spl-data.h index bdb7fd197b..4bdb65bc7c 100644 --- a/crawl-ref/source/spl-data.h +++ b/crawl-ref/source/spl-data.h @@ -699,6 +699,19 @@ }, { + SPELL_HELLFIRE_BURST, "Hellfire Burst", + SPTYP_CONJURATION | SPTYP_FIRE, + SPFLAG_GRID | SPFLAG_AREA | SPFLAG_UNHOLY, + 9, + 200, + LOS_RADIUS, LOS_RADIUS, + 0, + "Where?", + true, + false +}, + +{ SPELL_DETECT_TRAPS, "Detect Traps", SPTYP_DIVINATION, SPFLAG_MAPPING, @@ -2159,19 +2172,6 @@ // From here on, all spells are monster-only spells. { - SPELL_HELLFIRE_BURST, "Hellfire Burst", - SPTYP_CONJURATION | SPTYP_FIRE, - SPFLAG_DIR_OR_TARGET | SPFLAG_UNHOLY | SPFLAG_MONSTER, - 9, - 200, - LOS_RADIUS, LOS_RADIUS, - 0, - NULL, - true, - false -}, - -{ SPELL_VAMPIRE_SUMMON, "Vampire Summon", SPTYP_SUMMONING, SPFLAG_UNHOLY | SPFLAG_MONSTER, |