diff --git a/crawl-ref/source/Makefile.obj b/crawl-ref/source/Makefile.obj index e0166d5b36d..f1db97ec9d4 100644 --- a/crawl-ref/source/Makefile.obj +++ b/crawl-ref/source/Makefile.obj @@ -222,9 +222,9 @@ spl-other.o \ spl-pick.o \ spl-selfench.o \ spl-summoning.o \ -spl-tornado.o \ spl-transloc.o \ spl-util.o \ +spl-vortex.o \ spl-wpnench.o \ spl-zap.o \ sprint.o \ diff --git a/crawl-ref/source/actor.h b/crawl-ref/source/actor.h index 5416b8530dc..5db2c6211cf 100644 --- a/crawl-ref/source/actor.h +++ b/crawl-ref/source/actor.h @@ -303,7 +303,7 @@ class actor virtual int res_holy_energy() const = 0; virtual int res_negative_energy(bool intrinsic_only = false) const = 0; virtual bool res_torment() const = 0; - virtual bool res_tornado() const = 0; + virtual bool res_polar_vortex() const = 0; virtual bool res_petrify(bool temp = true) const = 0; virtual int res_constrict() const = 0; virtual int willpower(bool calc_unid = true) const = 0; diff --git a/crawl-ref/source/book-data.h b/crawl-ref/source/book-data.h index e5061667639..876a735f4e5 100644 --- a/crawl-ref/source/book-data.h +++ b/crawl-ref/source/book-data.h @@ -92,7 +92,7 @@ static const vector spellbook_templates[] = SPELL_DISCHARGE, SPELL_LIGHTNING_BOLT, SPELL_IGNITION, - SPELL_TORNADO, + SPELL_POLAR_VORTEX, SPELL_SHATTER, }, @@ -180,7 +180,6 @@ static const vector spellbook_templates[] = SPELL_SILENCE, SPELL_CONJURE_BALL_LIGHTNING, SPELL_STORM_FORM, - SPELL_TORNADO, }, { // Book of the Warp @@ -328,6 +327,7 @@ static const vector spellbook_templates[] = SPELL_CHAIN_LIGHTNING, SPELL_LEHUDIBS_CRYSTAL_SPEAR, SPELL_ABSOLUTE_ZERO, + SPELL_POLAR_VORTEX, SPELL_FIRE_STORM, }, diff --git a/crawl-ref/source/cloud-type.h b/crawl-ref/source/cloud-type.h index f501b300299..3453c6c21b8 100644 --- a/crawl-ref/source/cloud-type.h +++ b/crawl-ref/source/cloud-type.h @@ -28,7 +28,7 @@ enum cloud_type CLOUD_RAIN, CLOUD_MUTAGENIC, CLOUD_MAGIC_TRAIL, - CLOUD_TORNADO, + CLOUD_VORTEX, CLOUD_DUST, CLOUD_SPECTRAL, CLOUD_ACID, diff --git a/crawl-ref/source/cloud.cc b/crawl-ref/source/cloud.cc index 4870d4fcfda..4fc360c540c 100644 --- a/crawl-ref/source/cloud.cc +++ b/crawl-ref/source/cloud.cc @@ -225,9 +225,9 @@ static const cloud_data clouds[] = { ETC_MAGIC, // colour { TILE_CLOUD_MAGIC_TRAIL, CTVARY_DUR }, // tile }, - // CLOUD_TORNADO, - { "raging winds", nullptr, // terse, verbose name - ETC_TORNADO, // colour + // CLOUD_VORTEX, + { "whirling frost", nullptr, // terse, verbose name + ETC_VORTEX, // colour { TILE_ERROR }, // tile }, // CLOUD_DUST, @@ -751,7 +751,7 @@ static bool _cloud_is_stronger(cloud_type ct, const cloud_struct& cloud) return (is_harmless_cloud(cloud.type) && (!is_opaque_cloud(cloud.type) || is_opaque_cloud(ct))) || cloud.type == CLOUD_STEAM - || ct == CLOUD_TORNADO; // soon gone + || ct == CLOUD_VORTEX; // soon gone } /* @@ -780,7 +780,7 @@ void place_cloud(cloud_type cl_type, const coord_def& ctarget, int cl_range, return; if (env.level_state & LSTATE_STILL_WINDS - && cl_type != CLOUD_TORNADO + && cl_type != CLOUD_VORTEX && cl_type != CLOUD_INK) { return; @@ -978,8 +978,8 @@ bool actor_cloud_immune(const actor &act, cloud_type type) return act.res_elec() >= 3; case CLOUD_NEGATIVE_ENERGY: return act.res_negative_energy() >= 3; - case CLOUD_TORNADO: - return act.res_tornado(); + case CLOUD_VORTEX: + return act.res_polar_vortex(); case CLOUD_RAIN: return !act.is_fiery(); default: @@ -1441,8 +1441,8 @@ bool is_damaging_cloud(cloud_type type, bool accept_temp_resistances, bool yours return false; // A nasty hack; map_knowledge doesn't preserve whom the cloud belongs to. - if (type == CLOUD_TORNADO) - return !you.duration[DUR_TORNADO] && !you.duration[DUR_TORNADO_COOLDOWN]; + if (type == CLOUD_VORTEX) + return !you.duration[DUR_VORTEX] && !you.duration[DUR_VORTEX_COOLDOWN]; if (accept_temp_resistances) { @@ -1587,7 +1587,7 @@ bool is_harmless_cloud(cloud_type type) && clouds[type].damage.base == 0 && clouds[type].damage.random == 0 && !_cloud_has_negative_side_effects(type) - && type != CLOUD_TORNADO; + && type != CLOUD_VORTEX; } string cloud_type_name(cloud_type type, bool terse) @@ -1808,7 +1808,7 @@ coord_def get_cloud_originator(const coord_def& pos) return agent->pos(); } -void remove_tornado_clouds(mid_t whose) +void remove_vortex_clouds(mid_t whose) { // Needed to clean up after the end of tornado cooldown, so we can again // assume all "raging winds" clouds are harmful. This is needed only @@ -1816,15 +1816,16 @@ void remove_tornado_clouds(mid_t whose) // cloud belongs to. If this changes, please remove this function. For // example, this approach doesn't work if we ever make Tornado a monster // spell (excluding immobile and mindless casters). + // XXX: this comment seems impossibly out of date? ^ // We can't iterate over env.cloud directly because delete_cloud // will remove this cloud and invalidate our iterator. - vector tornados; + vector vortices; for (auto& entry : env.cloud) - if (entry.second.type == CLOUD_TORNADO && entry.second.source == whose) - tornados.push_back(entry.first); + if (entry.second.type == CLOUD_VORTEX && entry.second.source == whose) + vortices.push_back(entry.first); - for (auto pos : tornados) + for (auto pos : vortices) delete_cloud(pos); } diff --git a/crawl-ref/source/cloud.h b/crawl-ref/source/cloud.h index 8f58c06a126..102c8857378 100644 --- a/crawl-ref/source/cloud.h +++ b/crawl-ref/source/cloud.h @@ -61,7 +61,7 @@ bool cloud_is_yours_at(const coord_def &pos); void delete_all_clouds(); void delete_cloud(coord_def p); -void remove_tornado_clouds(mid_t whose); +void remove_vortex_clouds(mid_t whose); void move_cloud(coord_def src, coord_def newpos); void swap_clouds(coord_def p1, coord_def p2); diff --git a/crawl-ref/source/colour.cc b/crawl-ref/source/colour.cc index dddbe1abf93..bff03ab1720 100644 --- a/crawl-ref/source/colour.cc +++ b/crawl-ref/source/colour.cc @@ -261,7 +261,7 @@ static int _etc_mangrove(int, const coord_def& loc) return col == LIGHTGREEN ? BROWN : col; } -bool get_tornado_phase(const coord_def& loc) +bool get_vortex_phase(const coord_def& loc) { coord_def center = get_cloud_originator(loc); if (center.origin()) @@ -276,9 +276,9 @@ bool get_tornado_phase(const coord_def& loc) } } -static int _etc_tornado(int, const coord_def& loc) +static int _etc_vortex(int, const coord_def& loc) { - const bool phase = get_tornado_phase(loc); + const bool phase = get_vortex_phase(loc); switch (env.grid(loc)) { case DNGN_LAVA: @@ -589,7 +589,7 @@ void init_element_colours() ETC_MANGROVE, "mangrove", _etc_mangrove )); add_element_colour(new element_colour_calc( - ETC_TORNADO, "tornado", _etc_tornado + ETC_VORTEX, "vortex", _etc_vortex )); add_element_colour(new element_colour_calc( ETC_LIQUEFIED, "liquefied", _etc_liquefied diff --git a/crawl-ref/source/colour.h b/crawl-ref/source/colour.h index 06d2369c73c..bb3c2d481a8 100644 --- a/crawl-ref/source/colour.h +++ b/crawl-ref/source/colour.h @@ -50,7 +50,7 @@ enum element_type ETC_WAVES, // cyan, with regularly occurring lightcyan waves ETC_TREE, // colour of trees on land ETC_RANDOM, // any colour (except BLACK) - ETC_TORNADO, // twisting swirls of grey + ETC_VORTEX, // twisting swirls of grey ETC_LIQUEFIED, // ripples of yellow and brown. ETC_MANGROVE, // colour of trees on water ETC_ORB_GLOW, // halo coming from the Orb of Zot @@ -120,7 +120,7 @@ colour_t make_high_colour(colour_t colour) IMMUTABLE; int element_colour(int element, bool no_random = false, const coord_def& loc = coord_def()); int get_disjunct_phase(const coord_def& loc); -bool get_tornado_phase(const coord_def& loc); +bool get_vortex_phase(const coord_def& loc); bool get_orb_phase(const coord_def& loc); int dam_colour(const monster_info&); colour_t rune_colour(int type); diff --git a/crawl-ref/source/dat/des/sprint/arena_sprint.des b/crawl-ref/source/dat/des/sprint/arena_sprint.des index 2baa455f512..0bf0473f92a 100644 --- a/crawl-ref/source/dat/des/sprint/arena_sprint.des +++ b/crawl-ref/source/dat/des/sprint/arena_sprint.des @@ -578,7 +578,7 @@ function arena_sprint_get_monster_set(round, boss) -- Aaaarggghhhhh! "daeva / w:15 angel", "royal mummy / mummy priest / guardian mummy", - "air elemental name:greater n_adj perm_ench:tornado col:lightcyan / air elemental w:20", + "air elemental name:greater n_adj perm_ench:polar_vortex col:lightcyan / air elemental w:20", "iron golem hd:20 col:magenta name:orb_golem n_rpl n_des n_spe spells:orb_of_destruction.70.natural", "brimstone fiend / ice fiend / tzitzimitl / executioner / hell sentinel", "titan / spriggan air mage / blizzard demon / w:20 sky beast", @@ -648,7 +648,7 @@ function arena_sprint_get_monster_set(round, boss) -- Just die already! "daeva", "royal mummy / mummy priest", - "air elemental name:greater n_adj perm_ench:tornado col:lightcyan", + "air elemental name:greater n_adj perm_ench:polar_vortex col:lightcyan", "iron golem hd:20 col:magenta name:orb_golem n_rpl n_des n_spe spells:orb_of_destruction.70.natural", "brimstone fiend / ice fiend / tzitzimitl w:5 / hell sentinel", "titan / spriggan air mage / blizzard demon", diff --git a/crawl-ref/source/dat/des/variable/ghost.des b/crawl-ref/source/dat/des/variable/ghost.des index 3dce85c544b..35be2083e7c 100644 --- a/crawl-ref/source/dat/des/variable/ghost.des +++ b/crawl-ref/source/dat/des/variable/ghost.des @@ -1137,7 +1137,7 @@ SUBST: - = pt., S : GV A:1 COLOUR: .pO012345689de|*$ = green FTILE: tGVA.pO012345689de|*$ = floor_moss : end -# Don't burn down or tornado down these sacred trees +# Don't burn down or polar vortex down these sacred trees MARKER: t = lua:props_marker { veto_destroy="veto" } : ghost_setup(_G) MAP diff --git a/crawl-ref/source/dat/descript/clouds.txt b/crawl-ref/source/dat/descript/clouds.txt index 6a6507de534..98ed31e0849 100644 --- a/crawl-ref/source/dat/descript/clouds.txt +++ b/crawl-ref/source/dat/descript/clouds.txt @@ -122,9 +122,10 @@ magical condensation cloud The wake of some highly concentrated magical energy, itself entirely harmless. %%%% -raging winds cloud +whirling frost cloud -The winds of a raging tornado. It will deal severe damage to anyone within it. +The winds of a polar vortex. It will deal severe damage to anyone within it, +only partially mitigated by resistance to cold. %%%% sparse dust cloud diff --git a/crawl-ref/source/dat/descript/spells.txt b/crawl-ref/source/dat/descript/spells.txt index 0d4ffa71205..955b1b7f0e9 100644 --- a/crawl-ref/source/dat/descript/spells.txt +++ b/crawl-ref/source/dat/descript/spells.txt @@ -1100,6 +1100,16 @@ Poisonous Vapours spell Turns the air around a targeted creature poisonous. Exceedingly little poison is created, generally just enough to poison the target before dispersing. %%%% +Polar Vortex spell + +Turns the air around the caster into a freezing vortex, doing tremendous damage +to everyone caught in it that can only partially be mitigated by resistance to +cold. Those affected will also be swept up into the air and tossed around. +Only the eye of the storm is a safe place, and it follows the caster. The +vortex is unable to follow the caster through long-distance translocations. +The spell's effectiveness is greatly diminished in closed areas. After the +vortex fades, it cannot be called forth again for a short time. +%%%% Polymorph spell Randomly alters the form of a creature. It is especially effective against @@ -1344,8 +1354,8 @@ for a short time. Still Winds spell Brings the air into unnatural stillness across a huge area, preventing anything -short of a tornado from breaking the calm. The effect takes concentration to -maintain, and only lasts a short time; if the caster is killed, clouds will +short of a polar vortex from breaking the calm. The effect takes concentration +to maintain, and only lasts a short time; if the caster is killed, clouds will begin to form again as normal. %%%% Sting spell @@ -1572,16 +1582,6 @@ Entombs the caster within walls of rock. These walls will push away objects in their way, but their growth is obstructed by the presence of any creature. They are not permanent, and will expire after a period of time. %%%% -Tornado spell - -Turns the air around the caster into a mighty vortex, doing tremendous damage -to everyone caught in it. Those affected will also be swept up into the air and -tossed around. Only the eye of the storm is a safe place, and it follows the -caster. The vortex is unable to follow the caster through long-distance -translocations. The spell's effectiveness is greatly diminished in closed -areas. After the tornado fades, it cannot be called forth again for a short -time. -%%%% Trog's Hand spell diff --git a/crawl-ref/source/dat/descript/status.txt b/crawl-ref/source/dat/descript/status.txt index 40ac469bee7..ddaeabfb6d3 100644 --- a/crawl-ref/source/dat/descript/status.txt +++ b/crawl-ref/source/dat/descript/status.txt @@ -314,14 +314,14 @@ Mirror status You are reflecting any damage taken to your attackers, reducing piety depending on the amount of damage dealt. %%%% -Tornado status +Vortex status -You are in the eye of a mighty hurricane. After the tornado fades, it cannot be +You are in the eye of a mighty ice storm. After the vortex fades, it cannot be called forth again for a short time. %%%% --Tornado status +-Vortex status -You are surrounded by unstable winds, and cannot recast Tornado for a short +You are surrounded by unstable winds, and cannot recast Polar Vortex for a short duration. %%%% Liquid status diff --git a/crawl-ref/source/dat/vim/syntax/levdes.vim b/crawl-ref/source/dat/vim/syntax/levdes.vim index aa0c9e3fcc4..4efd13921a9 100644 --- a/crawl-ref/source/dat/vim/syntax/levdes.vim +++ b/crawl-ref/source/dat/vim/syntax/levdes.vim @@ -154,7 +154,7 @@ syn keyword desColour contained death unholy vehumet beogh crystal blood smoke syn keyword desColour contained slime jewel elven dwarven orcish flash kraken syn keyword desColour contained floor rock mist shimmer_blue decay silver gold syn keyword desColour contained iron bone elven_brick waves tree mangrove -syn keyword desColour contained tornado liquefied orb_glow disjunction random +syn keyword desColour contained vortex liquefied orb_glow disjunction random " TILE syn keyword desOrientation no_random diff --git a/crawl-ref/source/defines.h b/crawl-ref/source/defines.h index 0c1286fe65b..7ece41dced0 100644 --- a/crawl-ref/source/defines.h +++ b/crawl-ref/source/defines.h @@ -185,7 +185,7 @@ const int UNUSABLE_SKILL = -99; const int AGILITY_BONUS = 5; -#define TORNADO_RADIUS 5 +#define POLAR_VORTEX_RADIUS 5 #define VORTEX_RADIUS 3 #define VAULTS_ENTRY_RUNES 1 diff --git a/crawl-ref/source/describe.cc b/crawl-ref/source/describe.cc index 6a0120ef375..489a631ee51 100644 --- a/crawl-ref/source/describe.cc +++ b/crawl-ref/source/describe.cc @@ -3697,8 +3697,8 @@ static const char* _get_resist_name(mon_resist_flags res_type) return "negative energy"; case MR_RES_DAMNATION: return "damnation"; - case MR_RES_TORNADO: - return "tornadoes"; + case MR_RES_VORTEX: + return "polar vortexes"; default: return "buggy resistance"; } @@ -4343,7 +4343,7 @@ static string _monster_stat_description(const monster_info& mi) MR_RES_ELEC, MR_RES_POISON, MR_RES_FIRE, MR_RES_STEAM, MR_RES_COLD, MR_RES_ACID, MR_RES_MIASMA, MR_RES_NEG, MR_RES_DAMNATION, - MR_RES_TORNADO, + MR_RES_VORTEX, }; vector extreme_resists; @@ -4358,7 +4358,7 @@ static string _monster_stat_description(const monster_info& mi) if (level != 0) { const char* attackname = _get_resist_name(rflags); - if (rflags == MR_RES_DAMNATION || rflags == MR_RES_TORNADO) + if (rflags == MR_RES_DAMNATION || rflags == MR_RES_VORTEX) level = 3; // one level is immunity level = max(level, -1); level = min(level, 3); diff --git a/crawl-ref/source/duration-data.h b/crawl-ref/source/duration-data.h index 45e269752cb..60eabc8b690 100644 --- a/crawl-ref/source/duration-data.h +++ b/crawl-ref/source/duration-data.h @@ -318,10 +318,10 @@ static const duration_def duration_data[] = "mirroring injuries", "mirror damage", "You mirror injuries.", D_NO_FLAGS, {{ "Your dark mirror aura disappears." }}}, - { DUR_TORNADO, - LIGHTGREY, "Tornado", - "in a tornado", "tornado", - "You are in the eye of a mighty hurricane.", D_EXPIRES}, + { DUR_VORTEX, + LIGHTGREY, "Vortex", + "in a vortex", "vortex", + "You are in the eye of a polar vortex.", D_EXPIRES}, { DUR_LIQUEFYING, LIGHTBLUE, "Liquid", "liquefying", "", @@ -344,12 +344,12 @@ static const duration_def duration_data[] = "divinely protected", "lifesaving", "You are calling for your life to be saved.", D_EXPIRES, {{ "Your divine protection fades away." }}}, - { DUR_TORNADO_COOLDOWN, - YELLOW, "-Tornado", - "on tornado cooldown", "tornado cooldown", - "You are unable to create a tornado.", D_NO_FLAGS, + { DUR_VORTEX_COOLDOWN, + YELLOW, "-Vortex", + "on vortex cooldown", "vortex cooldown", + "You are unable to create a polar vortex.", D_NO_FLAGS, {{ "The winds around you calm down.", []() { - remove_tornado_clouds(MID_PLAYER); + remove_vortex_clouds(MID_PLAYER); }}}}, { DUR_DISJUNCTION, BLUE, "Disjoin", diff --git a/crawl-ref/source/duration-type.h b/crawl-ref/source/duration-type.h index 9e6d2e39746..f7289b6a1e8 100644 --- a/crawl-ref/source/duration-type.h +++ b/crawl-ref/source/duration-type.h @@ -99,7 +99,7 @@ enum duration_type #if TAG_MAJOR_VERSION == 34 DUR_SCRYING, #endif - DUR_TORNADO, + DUR_VORTEX, DUR_LIQUEFYING, DUR_HEROISM, DUR_FINESSE, @@ -112,7 +112,7 @@ enum duration_type #if TAG_MAJOR_VERSION == 34 DUR_SHROUD_OF_GOLUBRIA, #endif - DUR_TORNADO_COOLDOWN, + DUR_VORTEX_COOLDOWN, #if TAG_MAJOR_VERSION == 34 DUR_NAUSEA, #endif diff --git a/crawl-ref/source/enchant-type.h b/crawl-ref/source/enchant-type.h index cd453efe44d..842e9909fe6 100644 --- a/crawl-ref/source/enchant-type.h +++ b/crawl-ref/source/enchant-type.h @@ -86,7 +86,7 @@ enum enchant_type ENCH_LIFE_TIMER, // Minimum time demonic guardian must exist. ENCH_FLIGHT, ENCH_LIQUEFYING, - ENCH_TORNADO, + ENCH_POLAR_VORTEX, ENCH_FAKE_ABJURATION, ENCH_DAZED, // Dazed - less chance of acting each turn. ENCH_MUTE, // Silenced. @@ -132,7 +132,7 @@ enum enchant_type ENCH_GRASPING_ROOTS, ENCH_SPELL_CHARGED, ENCH_FIRE_VULN, - ENCH_TORNADO_COOLDOWN, + ENCH_POLAR_VORTEX_COOLDOWN, ENCH_MERFOLK_AVATAR_SONG, ENCH_BARBS, #if TAG_MAJOR_VERSION == 34 diff --git a/crawl-ref/source/god-abil.cc b/crawl-ref/source/god-abil.cc index 53b0ddf4afb..44f9ebd30cb 100644 --- a/crawl-ref/source/god-abil.cc +++ b/crawl-ref/source/god-abil.cc @@ -1388,7 +1388,7 @@ bool vehumet_supports_spell(spell_type spell) || spell == SPELL_LRD || spell == SPELL_SANDBLAST || spell == SPELL_AIRSTRIKE - || spell == SPELL_TORNADO + || spell == SPELL_POLAR_VORTEX || spell == SPELL_FREEZE || spell == SPELL_IGNITE_POISON || spell == SPELL_OZOCUBUS_REFRIGERATION @@ -5195,7 +5195,7 @@ bool uskayaw_stomp() }, you.pos()); // XXX: this 'friendlies' wording feels a little odd, but we do use it in a - // a few places already; see spl_tornado.cc, disaster area, etc. + // a few places already; see spl-vortex.cc, disaster area, etc. if (friendlies && !yesno("There are friendlies around, " "are you sure you want to hurt them?", diff --git a/crawl-ref/source/main.cc b/crawl-ref/source/main.cc index 76a9e655d18..a383423b586 100644 --- a/crawl-ref/source/main.cc +++ b/crawl-ref/source/main.cc @@ -1516,7 +1516,7 @@ static void _take_transporter() li->update_transporter(old_pos, you.pos()); explored_tracked_feature(DNGN_TRANSPORTER); } - cancel_tornado(); + cancel_polar_vortex(); mpr("You enter the transporter and appear at another place."); id_floor_items(); } diff --git a/crawl-ref/source/mon-act.cc b/crawl-ref/source/mon-act.cc index c471216b90c..62a0ee463c1 100644 --- a/crawl-ref/source/mon-act.cc +++ b/crawl-ref/source/mon-act.cc @@ -2543,7 +2543,7 @@ static bool _handle_pickup(monster* mons) // Flying over water doesn't let you pick up stuff. This is inexact, as // a merfolk could be flying, but that's currently impossible except for - // being tornadoed, and with *that* low life expectancy let's not care. + // being polar vortex'd, and with *that* low life expectancy let's not care. dungeon_feature_type feat = env.grid(mons->pos()); if ((feat == DNGN_LAVA || feat == DNGN_DEEP_WATER) && mons->airborne()) diff --git a/crawl-ref/source/mon-cast.cc b/crawl-ref/source/mon-cast.cc index 1b733036856..4d404b9ec66 100644 --- a/crawl-ref/source/mon-cast.cc +++ b/crawl-ref/source/mon-cast.cc @@ -1725,7 +1725,7 @@ bool setup_mons_cast(const monster* mons, bolt &pbolt, spell_type spell_cast, case SPELL_WALL_OF_BRAMBLES: case SPELL_WIND_BLAST: case SPELL_SUMMON_VERMIN: - case SPELL_TORNADO: + case SPELL_POLAR_VORTEX: case SPELL_VORTEX: case SPELL_DISCHARGE: case SPELL_IGNITE_POISON: @@ -3245,11 +3245,11 @@ static bool _trace_los(monster* agent, bool (*vulnerable)(const actor*)) return mons_should_fire(tracer); } -static bool _tornado_vulnerable(const actor* victim) +static bool _vortex_vulnerable(const actor* victim) { if (!victim) return false; - return !victim->res_tornado(); + return !victim->res_polar_vortex(); } static bool _torment_vulnerable(const actor* victim) @@ -5396,24 +5396,24 @@ static void _mons_upheaval(monster& mons, actor& /*foe*/, bool randomize) } } -static void _mons_tornado(monster *mons, bool is_vortex = false) +static void _mons_vortex(monster *mons, bool is_vortex = false) { const int dur = is_vortex ? 30 : 60; - const string desc = is_vortex ? "vortex" : "great vortex"; - const string prop = is_vortex ? "vortex_since" : "tornado_since"; - const enchant_type ench = is_vortex ? ENCH_VORTEX : ENCH_TORNADO; + const string desc = is_vortex ? "vortex" : "freezing vortex"; + const string prop = is_vortex ? "vortex_since" : "polar_vortex_since"; + const enchant_type ench = is_vortex ? ENCH_VORTEX : ENCH_POLAR_VORTEX; if (you.can_see(*mons)) { bool flying = mons->airborne(); - mprf("A %s of raging winds appears %s%s%s!", + mprf("A %s appears %s%s%s!", desc.c_str(), flying ? "around " : "and lifts ", mons->name(DESC_THE).c_str(), flying ? "" : " up!"); } else if (you.see_cell(mons->pos())) - mprf("A %s of raging winds appears out of thin air!", desc.c_str()); + mprf("A %s appears out of thin air!", desc.c_str()); mons->props[prop.c_str()].get_int() = you.elapsed_time; mon_enchant me(ench, 0, mons, dur); @@ -5997,15 +5997,15 @@ void mons_cast(monster* mons, bolt pbolt, spell_type spell_cast, cast_battlesphere(mons, min(splpow, 200), mons->god, false); return; - case SPELL_TORNADO: + case SPELL_POLAR_VORTEX: { - _mons_tornado(mons); + _mons_vortex(mons); return; } case SPELL_VORTEX: { - _mons_tornado(mons, true); + _mons_vortex(mons, true); return; } @@ -7488,8 +7488,8 @@ static ai_action::goodness _monster_spell_goodness(monster* mon, mon_spell_slot case SPELL_BLINK_AWAY: if (mon->no_tele(true, false)) return ai_action::impossible(); - else // Prefer to keep a tornado going rather than blink. - return ai_action::good_or_bad(!mon->has_ench(ENCH_TORNADO) + else // Prefer to keep a polar vortex going rather than blink. + return ai_action::good_or_bad(!mon->has_ench(ENCH_POLAR_VORTEX) && !mon->has_ench(ENCH_VORTEX)); case SPELL_BLINK_OTHER: @@ -7713,13 +7713,13 @@ static ai_action::goodness _monster_spell_goodness(monster* mon, mon_spell_slot else return ai_action::good_or_bad(_trace_los(mon, _mutation_vulnerable)); - case SPELL_TORNADO: - if (mon->has_ench(ENCH_TORNADO) || mon->has_ench(ENCH_TORNADO_COOLDOWN)) + case SPELL_POLAR_VORTEX: + if (mon->has_ench(ENCH_POLAR_VORTEX) || mon->has_ench(ENCH_POLAR_VORTEX_COOLDOWN)) return ai_action::impossible(); else if (you.visible_to(mon) && friendly && !(mon->holiness() & MH_DEMONIC)) return ai_action::bad(); // don't zap player (but demons are rude) else - return ai_action::good_or_bad(_trace_los(mon, _tornado_vulnerable)); + return ai_action::good_or_bad(_trace_los(mon, _vortex_vulnerable)); case SPELL_VORTEX: if (mon->has_ench(ENCH_VORTEX) || mon->has_ench(ENCH_VORTEX_COOLDOWN)) @@ -7727,7 +7727,7 @@ static ai_action::goodness _monster_spell_goodness(monster* mon, mon_spell_slot else if (you.visible_to(mon) && friendly && !(mon->holiness() & MH_DEMONIC)) return ai_action::bad(); // don't zap player (but demons are rude) else - return ai_action::good_or_bad(_trace_los(mon, _tornado_vulnerable)); + return ai_action::good_or_bad(_trace_los(mon, _vortex_vulnerable)); case SPELL_ENGLACIATION: return ai_action::good_or_bad(foe && mon->see_cell_no_trans(foe->pos()) diff --git a/crawl-ref/source/mon-data.h b/crawl-ref/source/mon-data.h index dbec24138e5..e276507d3fd 100644 --- a/crawl-ref/source/mon-data.h +++ b/crawl-ref/source/mon-data.h @@ -2304,7 +2304,7 @@ DUMMY(MONS_INSUBSTANTIAL_WISP, 'v', LIGHTGREY, "insubstantial wisp", MONS_TWISTER, 'v', ETC_AIR, "twister", M_CONFUSED | M_INSUBSTANTIAL | M_BATTY | M_NO_EXP_GAIN | M_NO_POLY_TO | M_FLIES, - MR_RES_FIRE | MR_RES_COLD | mrd(MR_RES_ELEC, 3) | MR_RES_TORNADO, + MR_RES_FIRE | MR_RES_COLD | mrd(MR_RES_ELEC, 3) | MR_RES_VORTEX, 5, MONS_FIRE_VORTEX, MONS_TWISTER, MH_NONLIVING, WILL_INVULN, { AT_NO_ATK, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK }, 12, 120000, @@ -3127,7 +3127,7 @@ DUMMY(MONS_ELEMENTAL, 'E', LIGHTGREY, "elemental", TILEP_MONS_WATER_ELEMENTAL) { MONS_AIR_ELEMENTAL, 'E', ETC_AIR, "air elemental", M_SEE_INVIS | M_INSUBSTANTIAL | M_FLIES, - mrd(MR_RES_ELEC, 3) | MR_RES_TORNADO, + mrd(MR_RES_ELEC, 3) | MR_RES_VORTEX, 6, MONS_ELEMENTAL, MONS_AIR_ELEMENTAL, MH_NONLIVING, WILL_INVULN, { {AT_HIT, AF_PLAIN, 15}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK }, 6, 330, @@ -6104,7 +6104,7 @@ DUMMY(MONS_HELL_LORD, '&', COLOUR_UNDEF, "hell lord", TILEP_MONS_PROGRAM_BUG) { MONS_BALL_LIGHTNING, '*', LIGHTCYAN, "ball lightning", M_INSUBSTANTIAL | M_CONJURED | M_FLIES | M_NO_EXP_GAIN, - mrd(MR_RES_ELEC | MR_RES_FIRE | MR_RES_COLD, 3) | MR_RES_TORNADO, + mrd(MR_RES_ELEC | MR_RES_FIRE | MR_RES_COLD, 3), 20, MONS_BALL_LIGHTNING, MONS_BALL_LIGHTNING, MH_NONLIVING, WILL_INVULN, { {AT_HIT, AF_PLAIN, 5}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK }, 1, 10, @@ -6844,7 +6844,7 @@ DUMMY(MONS_HELL_LORD, '&', COLOUR_UNDEF, "hell lord", TILEP_MONS_PROGRAM_BUG) MONS_SOJOBO, 'Q', LIGHTGREEN, "Sojobo", M_FIGHTER | M_SEE_INVIS | M_WARM_BLOOD | M_SPEAKS | M_UNIQUE | M_FEMALE | M_FLIES, - MR_RES_TORNADO, + MR_RES_VORTEX, 20, MONS_TENGU, MONS_TENGU, MH_NATURAL, 140, { {AT_HIT, AF_PLAIN, 28}, {AT_PECK, AF_PLAIN, 14}, {AT_CLAW, AF_PLAIN, 14}, AT_NO_ATK }, diff --git a/crawl-ref/source/mon-ench.cc b/crawl-ref/source/mon-ench.cc index 84fe00293f0..37846960209 100644 --- a/crawl-ref/source/mon-ench.cc +++ b/crawl-ref/source/mon-ench.cc @@ -1693,11 +1693,11 @@ void monster::apply_enchantment(const mon_enchant &me) decay_enchantment(en); break; - case ENCH_TORNADO: - tornado_damage(this, speed_to_duration(speed)); + case ENCH_POLAR_VORTEX: + polar_vortex_damage(this, speed_to_duration(speed)); if (decay_enchantment(en)) { - add_ench(ENCH_TORNADO_COOLDOWN); + add_ench(ENCH_POLAR_VORTEX_COOLDOWN); if (you.can_see(*this)) { mprf("The winds around %s start to calm down.", @@ -1707,7 +1707,7 @@ void monster::apply_enchantment(const mon_enchant &me) break; case ENCH_VORTEX: - tornado_damage(this, speed_to_duration(speed), true); + polar_vortex_damage(this, speed_to_duration(speed), true); if (decay_enchantment(en)) { add_ench(ENCH_VORTEX_COOLDOWN); @@ -1813,11 +1813,11 @@ void monster::apply_enchantment(const mon_enchant &me) decay_enchantment(en); break; - case ENCH_TORNADO_COOLDOWN: + case ENCH_POLAR_VORTEX_COOLDOWN: case ENCH_VORTEX_COOLDOWN: if (decay_enchantment(en)) { - remove_tornado_clouds(mid); + remove_vortex_clouds(mid); if (you.can_see(*this)) mprf("The winds around %s calm down.", name(DESC_THE).c_str()); } @@ -2017,7 +2017,7 @@ static const char *enchant_names[] = #if TAG_MAJOR_VERSION == 34 "withdrawn", "attached", #endif - "guardian_timer", "flight", "liquefying", "tornado", "fake_abjuration", + "guardian_timer", "flight", "liquefying", "polar_vortex", "fake_abjuration", "dazed", "mute", "blind", "dumb", "mad", "silver_corona", "recite timer", "inner_flame", #if TAG_MAJOR_VERSION == 34 @@ -2046,7 +2046,7 @@ static const char *enchant_names[] = "grasping_roots_source", #endif "grasping_roots", - "iood_charged", "fire_vuln", "tornado_cooldown", "merfolk_avatar_song", + "iood_charged", "fire_vuln", "polar_vortex_cooldown", "merfolk_avatar_song", "barbs", #if TAG_MAJOR_VERSION == 34 "building_charge", @@ -2337,7 +2337,7 @@ int mon_enchant::calc_duration(const monster* mons, case ENCH_WRETCHED: cturn = (20 + roll_dice(3, 10)) * 10 / _mod_speed(10, mons->speed); break; - case ENCH_TORNADO_COOLDOWN: + case ENCH_POLAR_VORTEX_COOLDOWN: cturn = random_range(25, 35) * 10 / _mod_speed(10, mons->speed); break; case ENCH_VORTEX_COOLDOWN: diff --git a/crawl-ref/source/mon-enum.h b/crawl-ref/source/mon-enum.h index 779b57ee14d..f7d9d450e4e 100644 --- a/crawl-ref/source/mon-enum.h +++ b/crawl-ref/source/mon-enum.h @@ -218,7 +218,7 @@ enum mon_resist_flags // unused 1 << 25, #endif MR_RES_STICKY_FLAME = 1 << 26, - MR_RES_TORNADO = 1 << 27, + MR_RES_VORTEX = 1 << 27, MR_RES_STEAM = 1 << 28, // vulnerabilities diff --git a/crawl-ref/source/mon-info-flag-name.h b/crawl-ref/source/mon-info-flag-name.h index 9ff01440db9..eb8e67b26fa 100644 --- a/crawl-ref/source/mon-info-flag-name.h +++ b/crawl-ref/source/mon-info-flag-name.h @@ -47,8 +47,8 @@ static const vector monster_info_flag_names = { { MB_SILENCING, "silencing", "radiating silence", "silencing"}, { MB_READY_TO_HOWL, "can howl", "ready to howl", "can howl"}, { MB_BRILLIANCE_AURA, "brilliance aura", "brilliance aura", "brilliance auras"}, - { MB_TORNADO, "tornado", "surrounded by raging winds", "tornadoes"}, - { MB_TORNADO_COOLDOWN, "gusty", "surrounded by restless winds", "gusty"}, + { MB_VORTEX, "vortex", "surrounded by a freezing vortex", "vortexes"}, + { MB_VORTEX_COOLDOWN, "gusty", "surrounded by restless winds", "gusty"}, { MB_INSANE, "insane", "frenzied and insane", "insane"}, { MB_FEAR_INSPIRING, "scary", "inspiring fear", "scary"}, { MB_WORD_OF_RECALL, "chanting recall", "chanting recall", "chanting recall"}, diff --git a/crawl-ref/source/mon-info.cc b/crawl-ref/source/mon-info.cc index 2deca3d6915..fa4ec1662fe 100644 --- a/crawl-ref/source/mon-info.cc +++ b/crawl-ref/source/mon-info.cc @@ -88,8 +88,8 @@ static map trivial_ench_mb_mappings = { { ENCH_TOXIC_RADIANCE, MB_TOXIC_RADIANCE }, { ENCH_GRASPING_ROOTS, MB_GRASPING_ROOTS }, { ENCH_FIRE_VULN, MB_FIRE_VULN }, - { ENCH_TORNADO, MB_TORNADO }, - { ENCH_TORNADO_COOLDOWN, MB_TORNADO_COOLDOWN }, + { ENCH_POLAR_VORTEX, MB_VORTEX }, + { ENCH_POLAR_VORTEX_COOLDOWN, MB_VORTEX_COOLDOWN }, { ENCH_BARBS, MB_BARBS }, { ENCH_POISON_VULN, MB_POISON_VULN }, { ENCH_ICEMAIL, MB_ICEMAIL }, diff --git a/crawl-ref/source/mon-info.h b/crawl-ref/source/mon-info.h index 621c2657087..0da6b87246b 100644 --- a/crawl-ref/source/mon-info.h +++ b/crawl-ref/source/mon-info.h @@ -137,8 +137,8 @@ enum monster_info_flags MB_TOXIC_RADIANCE, MB_GRASPING_ROOTS, MB_FIRE_VULN, - MB_TORNADO, - MB_TORNADO_COOLDOWN, + MB_VORTEX, + MB_VORTEX_COOLDOWN, MB_BARBS, MB_POISON_VULN, MB_ICEMAIL, diff --git a/crawl-ref/source/mon-place.cc b/crawl-ref/source/mon-place.cc index cdf0ef562cc..44e97ee7022 100644 --- a/crawl-ref/source/mon-place.cc +++ b/crawl-ref/source/mon-place.cc @@ -888,7 +888,7 @@ static void _place_twister_clouds(monster *mon) mon->lose_ench_duration(abj, abj.duration / 2); } - tornado_damage(mon, -10); + polar_vortex_damage(mon, -10); } static monster* _place_monster_aux(const mgen_data &mg, const monster *leader, @@ -1225,8 +1225,8 @@ static monster* _place_monster_aux(const mgen_data &mg, const monster *leader, if (mg.cls == MONS_TWISTER || mg.cls == MONS_DIAMOND_OBELISK) { - mon->props["tornado_since"].get_int() = you.elapsed_time; - mon->add_ench(mon_enchant(ENCH_TORNADO, 0, 0, INFINITE_DURATION)); + mon->props["polar_vortex_since"].get_int() = you.elapsed_time; + mon->add_ench(mon_enchant(ENCH_POLAR_VORTEX, 0, 0, INFINITE_DURATION)); } // this MUST follow hd initialization! diff --git a/crawl-ref/source/mon-spell.h b/crawl-ref/source/mon-spell.h index 117d28e7c87..a185e02abad 100644 --- a/crawl-ref/source/mon-spell.h +++ b/crawl-ref/source/mon-spell.h @@ -2001,7 +2001,7 @@ static const mon_spellbook mspell_list[] = { MST_CLOUD_MAGE, { { SPELL_AIRSTRIKE, 25, MON_SPELL_WIZARD }, - { SPELL_TORNADO, 40, MON_SPELL_WIZARD }, + { SPELL_POLAR_VORTEX, 40, MON_SPELL_WIZARD }, } }, @@ -2100,7 +2100,7 @@ static const mon_spellbook mspell_list[] = { { SPELL_CONJURE_BALL_LIGHTNING, 30, MON_SPELL_MAGICAL }, { SPELL_GLACIATE, 30, MON_SPELL_MAGICAL }, - { SPELL_TORNADO, 60, MON_SPELL_MAGICAL }, + { SPELL_POLAR_VORTEX, 60, MON_SPELL_MAGICAL }, { SPELL_MAJOR_HEALING, 30, MON_SPELL_MAGICAL }, { SPELL_BLINK_RANGE, 30, MON_SPELL_MAGICAL }, } diff --git a/crawl-ref/source/mon-util.cc b/crawl-ref/source/mon-util.cc index 90bf3c38e04..a712921442a 100644 --- a/crawl-ref/source/mon-util.cc +++ b/crawl-ref/source/mon-util.cc @@ -2260,9 +2260,9 @@ bool mons_flattens_trees(const monster& mon) return mons_base_type(mon) == MONS_LERNAEAN_HYDRA; } -bool mons_class_res_tornado(monster_type mc) +bool mons_class_res_polar_vortex(monster_type mc) { - return get_resist(get_mons_class_resists(mc), MR_RES_TORNADO); + return get_resist(get_mons_class_resists(mc), MR_RES_VORTEX); } /** @@ -2474,7 +2474,7 @@ int exper_value(const monster& mon, bool real) case SPELL_FIRE_STORM: case SPELL_SHATTER: case SPELL_CHAIN_LIGHTNING: - case SPELL_TORNADO: + case SPELL_POLAR_VORTEX: case SPELL_LEGENDARY_DESTRUCTION: case SPELL_SUMMON_ILLUSION: case SPELL_SPELLFORGED_SERVITOR: @@ -3965,7 +3965,7 @@ static const spell_type smitey_spells[] = { SPELL_CALL_DOWN_DAMNATION, SPELL_FIRE_STORM, SPELL_SHATTER, - SPELL_TORNADO, // dubious + SPELL_POLAR_VORTEX, // dubious SPELL_GLACIATE, // dubious SPELL_OZOCUBUS_REFRIGERATION, SPELL_MASS_CONFUSION, diff --git a/crawl-ref/source/mon-util.h b/crawl-ref/source/mon-util.h index eec0c0b81e1..3276310c0ba 100644 --- a/crawl-ref/source/mon-util.h +++ b/crawl-ref/source/mon-util.h @@ -213,7 +213,7 @@ bool give_monster_proper_name(monster& mon, bool orcs_only = true); bool mons_flattens_trees(const monster& mon); size_type mons_class_body_size(monster_type mc); -bool mons_class_res_tornado(monster_type mc); +bool mons_class_res_polar_vortex(monster_type mc); mon_itemuse_type mons_class_itemuse(monster_type mc); mon_itemuse_type mons_itemuse(const monster& mon); diff --git a/crawl-ref/source/monster.cc b/crawl-ref/source/monster.cc index bc51508b945..77094a50aa3 100644 --- a/crawl-ref/source/monster.cc +++ b/crawl-ref/source/monster.cc @@ -3943,11 +3943,11 @@ bool monster::res_torment() const || get_mons_resist(*this, MR_RES_TORMENT) > 0; } -bool monster::res_tornado() const +bool monster::res_polar_vortex() const { - return has_ench(ENCH_TORNADO) + return has_ench(ENCH_POLAR_VORTEX) || has_ench(ENCH_VORTEX) - || get_mons_resist(*this, MR_RES_TORNADO) > 0; + || get_mons_resist(*this, MR_RES_VORTEX) > 0; } bool monster::res_petrify(bool /*temp*/) const diff --git a/crawl-ref/source/monster.h b/crawl-ref/source/monster.h index 904cbe227de..05762d32843 100644 --- a/crawl-ref/source/monster.h +++ b/crawl-ref/source/monster.h @@ -391,7 +391,7 @@ class monster : public actor int res_negative_energy(bool intrinsic_only = false) const override; bool res_torment() const override; int res_acid(bool calc_unid = true) const override; - bool res_tornado() const override; + bool res_polar_vortex() const override; bool res_petrify(bool /*temp*/ = true) const override; int res_constrict() const override; int willpower(bool calc_unid = true) const override; diff --git a/crawl-ref/source/player-reacts.cc b/crawl-ref/source/player-reacts.cc index 87f79c86c30..152c4f1f329 100644 --- a/crawl-ref/source/player-reacts.cc +++ b/crawl-ref/source/player-reacts.cc @@ -673,13 +673,13 @@ static void _decrement_durations() disjunction_spell(); // Should expire before flight. - if (you.duration[DUR_TORNADO]) + if (you.duration[DUR_VORTEX]) { - tornado_damage(&you, min(delay, you.duration[DUR_TORNADO])); - if (_decrement_a_duration(DUR_TORNADO, delay, + polar_vortex_damage(&you, min(delay, you.duration[DUR_VORTEX])); + if (_decrement_a_duration(DUR_VORTEX, delay, "The winds around you start to calm down.")) { - you.duration[DUR_TORNADO_COOLDOWN] = random_range(35, 45); + you.duration[DUR_VORTEX_COOLDOWN] = random_range(35, 45); } } diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc index cac8d8b3f80..c9696a947c6 100644 --- a/crawl-ref/source/player.cc +++ b/crawl-ref/source/player.cc @@ -5192,7 +5192,7 @@ bool player::airborne() const if (get_form()->forbids_flight()) return false; - return you.duration[DUR_FLIGHT] // potions, tornado + return you.duration[DUR_FLIGHT] // potions, polar vortex || you.props[EMERGENCY_FLIGHT_KEY].get_bool() || permanent_flight(true); } @@ -6165,10 +6165,10 @@ bool player::res_torment() const ; } -bool player::res_tornado() const +bool player::res_polar_vortex() const { - // Full control of the winds around you can negate a hostile tornado. - return duration[DUR_TORNADO] ? 1 : 0; + // Full control of the winds around you can negate a hostile polar vortex. + return duration[DUR_VORTEX] ? 1 : 0; } bool player::res_petrify(bool temp) const diff --git a/crawl-ref/source/player.h b/crawl-ref/source/player.h index 382d21be77a..c0ffd72a4ed 100644 --- a/crawl-ref/source/player.h +++ b/crawl-ref/source/player.h @@ -768,7 +768,7 @@ class player : public actor int res_holy_energy() const override; int res_negative_energy(bool intrinsic_only = false) const override; bool res_torment() const override; - bool res_tornado() const override; + bool res_polar_vortex() const override; bool res_petrify(bool temp = true) const override; int res_constrict() const override; int willpower(bool /*calc_unid*/ = true) const override; diff --git a/crawl-ref/source/rltiles/dc-misc.txt b/crawl-ref/source/rltiles/dc-misc.txt index 114d805020b..719f1730056 100644 --- a/crawl-ref/source/rltiles/dc-misc.txt +++ b/crawl-ref/source/rltiles/dc-misc.txt @@ -175,8 +175,8 @@ cloud_chaos3 cloud_chaos4 cloud_chaos5 -tornado1 CLOUD_RAGING_WINDS_0 -tornado2 CLOUD_RAGING_WINDS_1 +polar_vortex1 CLOUD_FREEZING_WINDS_0 +polar_vortex2 CLOUD_FREEZING_WINDS_1 cloud_calc_dust0 CLOUD_PETRIFY cloud_calc_dust1 diff --git a/crawl-ref/source/rltiles/dc-spells.txt b/crawl-ref/source/rltiles/dc-spells.txt index 5da4aba9e80..dd16781f8f6 100644 --- a/crawl-ref/source/rltiles/dc-spells.txt +++ b/crawl-ref/source/rltiles/dc-spells.txt @@ -8,7 +8,6 @@ shock SHOCK silence SILENCE static_discharge STATIC_DISCHARGE swiftness SWIFTNESS -tornado TORNADO %sdir gui/spells/conjuration iskenderuns_mystic_blast ISKENDERUNS_MYSTIC_BLAST @@ -77,6 +76,7 @@ ozocubus_refrigeration OZOCUBUS_REFRIGERATION throw_frost THROW_FROST frozen_ramparts FROZEN_RAMPARTS hailstorm HAILSTORM +polar_vortex POLAR_VORTEX %sdir gui/spells/necromancy agony AGONY diff --git a/crawl-ref/source/rltiles/effect/tornado1.png b/crawl-ref/source/rltiles/effect/polar_vortex1.png similarity index 100% rename from crawl-ref/source/rltiles/effect/tornado1.png rename to crawl-ref/source/rltiles/effect/polar_vortex1.png diff --git a/crawl-ref/source/rltiles/effect/tornado2.png b/crawl-ref/source/rltiles/effect/polar_vortex2.png similarity index 100% rename from crawl-ref/source/rltiles/effect/tornado2.png rename to crawl-ref/source/rltiles/effect/polar_vortex2.png diff --git a/crawl-ref/source/rltiles/gui/spells/air/tornado.png b/crawl-ref/source/rltiles/gui/spells/ice/polar_vortex.png similarity index 100% rename from crawl-ref/source/rltiles/gui/spells/air/tornado.png rename to crawl-ref/source/rltiles/gui/spells/ice/polar_vortex.png diff --git a/crawl-ref/source/spell-type.h b/crawl-ref/source/spell-type.h index 8ed137ce3c8..bc92cd34a8f 100644 --- a/crawl-ref/source/spell-type.h +++ b/crawl-ref/source/spell-type.h @@ -280,7 +280,7 @@ enum spell_type : int #endif SPELL_MALIGN_GATEWAY, SPELL_NOXIOUS_CLOUD, - SPELL_TORNADO, + SPELL_POLAR_VORTEX, SPELL_STICKY_FLAME_RANGE, SPELL_LEDAS_LIQUEFACTION, #if TAG_MAJOR_VERSION == 34 diff --git a/crawl-ref/source/spl-cast.cc b/crawl-ref/source/spl-cast.cc index f16b7e51fc0..2b510a90350 100644 --- a/crawl-ref/source/spl-cast.cc +++ b/crawl-ref/source/spl-cast.cc @@ -1310,8 +1310,8 @@ unique_ptr find_spell_targeter(spell_type spell, int pow, int range) case SPELL_OZOCUBUS_REFRIGERATION: case SPELL_OLGREBS_TOXIC_RADIANCE: return make_unique(&you, LOS_NO_TRANS); - case SPELL_TORNADO: - return make_unique(&you, LOS_NO_TRANS, TORNADO_RADIUS); + case SPELL_POLAR_VORTEX: + return make_unique(&you, LOS_NO_TRANS, POLAR_VORTEX_RADIUS); case SPELL_SHATTER: return make_unique(&you); // special version that affects walls case SPELL_IGNITE_POISON: // many cases @@ -2106,8 +2106,8 @@ static spret _do_cast(spell_type spell, int powc, const dist& spd, case SPELL_IGNITE_POISON: return cast_ignite_poison(&you, powc, fail); - case SPELL_TORNADO: - return cast_tornado(powc, fail); + case SPELL_POLAR_VORTEX: + return cast_polar_vortex(powc, fail); case SPELL_THUNDERBOLT: return cast_thunderbolt(&you, powc, target, fail); @@ -2534,7 +2534,7 @@ string spell_noise_string(spell_type spell, int chop_wiz_display_width) } // A typical amount of noise. - if (spell == SPELL_TORNADO) + if (spell == SPELL_POLAR_VORTEX) effect_noise = 15; const int noise = max(casting_noise, effect_noise); diff --git a/crawl-ref/source/spl-damage.h b/crawl-ref/source/spl-damage.h index 01ae136bbca..af2bfcbd203 100644 --- a/crawl-ref/source/spl-damage.h +++ b/crawl-ref/source/spl-damage.h @@ -48,9 +48,9 @@ spret cast_fragmentation(int powc, const actor *caster, const coord_def target, bool fail); pair sandblast_find_ammo(); spret cast_sandblast(int powc, bolt &beam, bool fail); -spret cast_tornado(int powc, bool fail); -void tornado_damage(actor *caster, int dur, bool is_vortex = false); -void cancel_tornado(bool tloc = false); +spret cast_polar_vortex(int powc, bool fail); +void polar_vortex_damage(actor *caster, int dur, bool is_vortex = false); +void cancel_polar_vortex(bool tloc = false); coord_def get_thunderbolt_last_aim(actor *caster); spret cast_thunderbolt(actor *caster, int pow, coord_def aim, bool fail); diff --git a/crawl-ref/source/spl-data.h b/crawl-ref/source/spl-data.h index 03e0b0f9d26..9d5c464877b 100644 --- a/crawl-ref/source/spl-data.h +++ b/crawl-ref/source/spl-data.h @@ -401,14 +401,14 @@ static const struct spell_desc spelldata[] = }, { - SPELL_TORNADO, "Tornado", - spschool::air, + SPELL_POLAR_VORTEX, "Polar Vortex", + spschool::ice, spflag::area, 9, 200, - TORNADO_RADIUS, TORNADO_RADIUS, + POLAR_VORTEX_RADIUS, POLAR_VORTEX_RADIUS, 5, 0, - TILEG_TORNADO, + TILEG_POLAR_VORTEX, }, { diff --git a/crawl-ref/source/spl-transloc.cc b/crawl-ref/source/spl-transloc.cc index 3ec302cba82..e0374219fa0 100644 --- a/crawl-ref/source/spl-transloc.cc +++ b/crawl-ref/source/spl-transloc.cc @@ -42,7 +42,7 @@ #include "prompt.h" #include "religion.h" #include "shout.h" -#include "spl-damage.h" // cancel_tornado +#include "spl-damage.h" // cancel_polar_vortex #include "spl-monench.h" #include "spl-util.h" #include "stash.h" @@ -621,7 +621,7 @@ spret palentonga_charge(bool fail, dist *target) for (auto it = target_path.begin(); it != target_path.end() - 2; ++it) _charge_cloud_trail(*it); - if (you.pos() != dest_pos) // tornado and trap nonsense + if (you.pos() != dest_pos) // polar vortex and trap nonsense return spret::success; // of a sort // Maybe we hit a trap and something weird happened. @@ -941,7 +941,7 @@ static bool _teleport_player(bool wizard_tele, bool teleportitis, large_change = true; } - cancel_tornado(true); + cancel_polar_vortex(true); // Leave a purple cloud. _place_tloc_cloud(old_pos); diff --git a/crawl-ref/source/spl-util.cc b/crawl-ref/source/spl-util.cc index 24c73c818ba..b4641ff8b8e 100644 --- a/crawl-ref/source/spl-util.cc +++ b/crawl-ref/source/spl-util.cc @@ -1360,9 +1360,9 @@ string spell_uselessness_reason(spell_type spell, bool temp, bool prevent, return "you have no blood to sublime."; break; - case SPELL_TORNADO: - if (temp && (you.duration[DUR_TORNADO] - || you.duration[DUR_TORNADO_COOLDOWN])) + case SPELL_POLAR_VORTEX: + if (temp && (you.duration[DUR_VORTEX] + || you.duration[DUR_VORTEX_COOLDOWN])) { return "you need to wait for the winds to calm down."; } diff --git a/crawl-ref/source/spl-tornado.cc b/crawl-ref/source/spl-vortex.cc similarity index 81% rename from crawl-ref/source/spl-tornado.cc rename to crawl-ref/source/spl-vortex.cc index 26126ed7276..2098a108d9c 100644 --- a/crawl-ref/source/spl-tornado.cc +++ b/crawl-ref/source/spl-vortex.cc @@ -22,6 +22,7 @@ #include "mon-tentacle.h" #include "ouch.h" #include "prompt.h" +#include "religion.h" #include "shout.h" #include "target.h" #include "terrain.h" @@ -43,8 +44,8 @@ static bool _airtight(coord_def c) class WindSystem { coord_def org; - SquareArray depth; - SquareArray cut, wind; + SquareArray depth; + SquareArray cut, wind; int visit(coord_def c, int d, coord_def parent); void pass_wind(coord_def c); public: @@ -71,7 +72,7 @@ int WindSystem::visit(coord_def c, int d, coord_def parent) for (adjacent_iterator ai(c); ai; ++ai) { - if ((*ai - org).rdist() > TORNADO_RADIUS || _airtight(*ai)) + if ((*ai - org).rdist() > POLAR_VORTEX_RADIUS || _airtight(*ai)) continue; if (depth(*ai - org) == -1) { @@ -101,24 +102,26 @@ void WindSystem::pass_wind(coord_def c) bool WindSystem::has_wind(coord_def c) { - ASSERT(grid_distance(c, org) <= TORNADO_RADIUS); // might say no instead + ASSERT(grid_distance(c, org) <= POLAR_VORTEX_RADIUS); // might say no instead return wind(c - org); } -static void _set_tornado_durations() +static void _set_vortex_durations() { int dur = 60; - you.duration[DUR_TORNADO] = dur; + you.duration[DUR_VORTEX] = dur; if (!get_form()->forbids_flight()) you.duration[DUR_FLIGHT] = max(dur, you.duration[DUR_FLIGHT]); } -spret cast_tornado(int /*powc*/, bool fail) +spret cast_polar_vortex(int /*powc*/, bool fail) { - targeter_radius hitfunc(&you, LOS_NO_TRANS, TORNADO_RADIUS); - if (stop_attack_prompt(hitfunc, "make a tornado", + targeter_radius hitfunc(&you, LOS_NO_TRANS, POLAR_VORTEX_RADIUS); + if (stop_attack_prompt(hitfunc, "make a polar vortex", [](const actor *act) -> bool { - return !act->res_tornado(); + return !act->res_polar_vortex() + && (!act->is_monster() + || !god_protects(&you, act->as_monster(), true)); })) { return spret::abort; @@ -126,15 +129,15 @@ spret cast_tornado(int /*powc*/, bool fail) fail_check(); - mprf("A great vortex of raging winds %s.", + mprf("A great freezing vortex %s.", (you.airborne() || get_form()->forbids_flight()) ? "appears around you" : "appears and lifts you up"); if (you.fishtail) merfolk_stop_swimming(); - you.props["tornado_since"].get_int() = you.elapsed_time; - _set_tornado_durations(); + you.props["polar_vortex_since"].get_int() = you.elapsed_time; + _set_vortex_durations(); if (you.has_mutation(MUT_TENGU_FLIGHT)) you.redraw_evasion = true; @@ -213,16 +216,16 @@ static int _rdam(int rage) return rage * 10 - 50; } -static int _tornado_age(const actor *caster, bool is_vortex = false) +static int _vortex_age(const actor *caster, bool is_vortex = false) { string name; if (is_vortex) name = "vortex_since"; else - name = "tornado_since"; + name = "polar_vortex_since"; if (caster->props.exists(name.c_str())) return you.elapsed_time - caster->props[name.c_str()].get_int(); - return 100; // for permanent tornadoes + return 100; // for permanent vortices } // time needed to reach the given radius @@ -230,12 +233,12 @@ static int _age_needed(int r) { if (r <= 0) return 0; - if (r > TORNADO_RADIUS) + if (r > POLAR_VORTEX_RADIUS) return INT_MAX; return sqr(r) * 7 / 5; } -void tornado_damage(actor *caster, int dur, bool is_vortex) +void polar_vortex_damage(actor *caster, int dur, bool is_vortex) { ASSERT(!(is_vortex && caster->is_player())); @@ -243,11 +246,11 @@ void tornado_damage(actor *caster, int dur, bool is_vortex) return; int pow; - const int max_radius = is_vortex ? VORTEX_RADIUS : TORNADO_RADIUS; + const int max_radius = is_vortex ? VORTEX_RADIUS : POLAR_VORTEX_RADIUS; // Not stored so unwielding that staff will reduce damage. if (caster->is_player()) - pow = calc_spell_power(SPELL_TORNADO, true); + pow = calc_spell_power(SPELL_POLAR_VORTEX, true); else // Note that this spellpower multiplier for Vortex is based on Air // Elementals, which have low HD. @@ -259,12 +262,12 @@ void tornado_damage(actor *caster, int dur, bool is_vortex) const coord_def old_player_pos = you.pos(); coord_def new_player_pos = old_player_pos; - int age = _tornado_age(caster, is_vortex); + int age = _vortex_age(caster, is_vortex); ASSERT(age >= 0); vector move_avail; // legal destinations map move_dest; // chosen destination - int rdurs[TORNADO_RADIUS + 1]; // durations at radii + int rdurs[POLAR_VORTEX_RADIUS + 1]; // durations at radii int cnt_open = 0; int cnt_all = 0; @@ -312,7 +315,7 @@ void tornado_damage(actor *caster, int dur, bool is_vortex) env.grid(*dam_i) = DNGN_FLOOR; set_terrain_changed(*dam_i); if (you.see_cell(*dam_i)) - mpr("A tree falls to the hurricane!"); + mpr("A tree falls to the furious winds!"); if (caster->is_player()) did_god_conduct(DID_KILL_PLANT, 1); } @@ -329,7 +332,7 @@ void tornado_damage(actor *caster, int dur, bool is_vortex) { // A far-fetched case: you're using Fedhas' passthrough // or standing on a submerged air elemental, there are - // no free spots, and a monster tornado rotates you. + // no free spots, and a monster vortex rotates you. // Plants don't get uprooted, so the logic would be // really complex. Let's not go there. continue; @@ -340,7 +343,7 @@ void tornado_damage(actor *caster, int dur, bool is_vortex) leda = victim->liquefied_ground() || victim->is_monster() && _mons_is_unmovable(victim->as_monster()); - if (!victim->res_tornado()) + if (!victim->res_polar_vortex()) { if (victim->is_monster()) { @@ -361,7 +364,7 @@ void tornado_damage(actor *caster, int dur, bool is_vortex) { bool standing = !you.airborne(); if (standing) - mpr("The vortex of raging winds lifts you up."); + mpr("The freezing vortex lifts you up."); you.duration[DUR_FLIGHT] = max(you.duration[DUR_FLIGHT], 20); if (standing) @@ -370,14 +373,21 @@ void tornado_damage(actor *caster, int dur, bool is_vortex) // alive check here in case the annoy event above dismissed // the victim. - if (dur > 0 && victim->alive()) + if (dur > 0 && victim->alive() + && (!caster->is_player() + || !victim->is_monster() + || !god_protects(caster, victim->as_monster(), true))) { - int dmg = victim->apply_ac( - div_rand_round(roll_dice(9, rpow), 15), - 0, ac_type::proportional); - dprf("damage done: %d", dmg); - victim->hurt(caster, dmg, BEAM_AIR, KILLED_BY_BEAM, - "", "tornado"); + const int dice = is_vortex ? 9 : 12; + const int base_dmg = div_rand_round(roll_dice(dice, rpow), 15); + const beam_type typ = is_vortex ? BEAM_AIR : BEAM_ICE; + const int post_res_dmg + = resist_adjust_damage(victim, typ,base_dmg); + const int post_ac_dmg + = victim->apply_ac(post_res_dmg, 0, ac_type::proportional); + dprf("damage done: %d", post_ac_dmg); + victim->hurt(caster, post_ac_dmg, typ, KILLED_BY_BEAM, + "", "vortex"); } } @@ -388,10 +398,10 @@ void tornado_damage(actor *caster, int dur, bool is_vortex) if (cell_is_solid(*dam_i)) continue; - if ((!cloud_at(*dam_i) || cloud_at(*dam_i)->type == CLOUD_TORNADO) + if ((!cloud_at(*dam_i) || cloud_at(*dam_i)->type == CLOUD_VORTEX) && x_chance_in_y(rpow, 20)) { - place_cloud(CLOUD_TORNADO, *dam_i, 2 + random2(2), caster); + place_cloud(CLOUD_VORTEX, *dam_i, 2 + random2(2), caster); } clouds.push_back(*dam_i); swap_clouds(clouds[random2(clouds.size())], *dam_i); @@ -462,13 +472,13 @@ void tornado_damage(actor *caster, int dur, bool is_vortex) } } -void cancel_tornado(bool tloc) +void cancel_polar_vortex(bool tloc) { - if (!you.duration[DUR_TORNADO]) + if (!you.duration[DUR_VORTEX]) return; - dprf("Aborting tornado."); - if (you.duration[DUR_TORNADO] == you.duration[DUR_FLIGHT]) + dprf("Aborting vortex."); + if (you.duration[DUR_VORTEX] == you.duration[DUR_FLIGHT]) { if (tloc) { @@ -480,13 +490,13 @@ void cancel_tornado(bool tloc) } else { - // Tornado ended by using something stairslike, so the destination + // Vortex ended by using something stairslike, so the destination // is safe you.duration[DUR_FLIGHT] = 0; if (you.has_mutation(MUT_TENGU_FLIGHT)) you.redraw_evasion = true; } } - you.duration[DUR_TORNADO] = 0; - you.duration[DUR_TORNADO_COOLDOWN] = random_range(35, 45); + you.duration[DUR_VORTEX] = 0; + you.duration[DUR_VORTEX_COOLDOWN] = random_range(35, 45); } diff --git a/crawl-ref/source/stairs.cc b/crawl-ref/source/stairs.cc index f232e5fb87c..bd5c4bc5d39 100644 --- a/crawl-ref/source/stairs.cc +++ b/crawl-ref/source/stairs.cc @@ -1200,7 +1200,7 @@ void new_level(bool restore) if (restore) return; - cancel_tornado(); + cancel_polar_vortex(); if (player_in_branch(BRANCH_ZIGGURAT)) you.zig_max = max(you.zig_max, you.depth); diff --git a/crawl-ref/source/tags.cc b/crawl-ref/source/tags.cc index 6438eacac21..d6c7fac3500 100644 --- a/crawl-ref/source/tags.cc +++ b/crawl-ref/source/tags.cc @@ -3943,6 +3943,12 @@ static void _tag_read_you(reader &th) wu_jian_end_heavenly_storm(); } + if (you.props.exists("tornado_since")) + { + you.props["polar_vortex_since"] = you.props["tornado_since"].get_int(); + you.props.erase("tornado_since"); + } + #endif } diff --git a/crawl-ref/source/tilepick.cc b/crawl-ref/source/tilepick.cc index 0cf3b80a883..fc235407d44 100644 --- a/crawl-ref/source/tilepick.cc +++ b/crawl-ref/source/tilepick.cc @@ -3000,9 +3000,9 @@ tileidx_t tileidx_cloud(const cloud_info &cl) ch += ui_random(tile_main_count(ch)); break; - case CLOUD_TORNADO: - ch = get_tornado_phase(cl.pos) ? TILE_CLOUD_RAGING_WINDS_0 - : TILE_CLOUD_RAGING_WINDS_1; + case CLOUD_VORTEX: + ch = get_vortex_phase(cl.pos) ? TILE_CLOUD_FREEZING_WINDS_0 + : TILE_CLOUD_FREEZING_WINDS_1; break; default: diff --git a/crawl-ref/source/traps.cc b/crawl-ref/source/traps.cc index 759cdae2e0a..c3f5543515e 100644 --- a/crawl-ref/source/traps.cc +++ b/crawl-ref/source/traps.cc @@ -38,7 +38,7 @@ #include "random.h" #include "religion.h" #include "shout.h" -#include "spl-damage.h" // cancel_tornado +#include "spl-damage.h" // cancel_polar_vortex #include "spl-transloc.h" #include "spl-summoning.h" #include "stash.h" @@ -542,7 +542,7 @@ void trap_def::trigger(actor& triggerer) if (you_trigger) { mpr("You enter the passage of Golubria."); - cancel_tornado(); + cancel_polar_vortex(); } else simple_monster_message(*m, " enters the passage of Golubria.");