Tornado
Level: (1–20)
Cost: (15–25) Mana
Cast Time: 0.75 sec
Critical Strike Chance: 5.00%
Effectiveness of Added Damage: 95%
Requires Level (34–70), (50–98) Dex, (35–68) Int
Create a Tornado that hinders and repeatedly damages enemies around it. It will move forward for a duration, during which your projectiles can collide with it to deal damage as though it was an enemy. Then it will chase down enemies for a secondary duration, and reflect a portion of the damage it took from your projectiles to them in addition to its own damage.
Deals (31–414) to (46–620) Physical Damage
Deals Damage every 0.25 seconds
Base duration is 1.5 seconds
Base secondary duration is 4 seconds
During initial Duration, can be hit by your Projectiles up to 20 times
Reflects 10% of Damage Taken to Enemies
Enemies in range are Hindered
Tornado has (0–57)% increased Movement Speed
Maximum 1 Tornado

Additional Effects From Quality:
Tornado has (0–20)% increased Movement Speed
Place into an item socket of the right colour to gain this skill. Right click to remove from a socket.
Level Effect /40
Implicit
Base secondary duration is 4 seconds
Deals Damage every 0.25 seconds
Reflects 10% of Damage Taken to Enemies
Maximum 1 Tornado
During initial Duration, can be hit by your Projectiles up to 20 times
Base duration is 1.5 seconds
Enemies in range are Hindered
(Hinder reduces movement speed by 30%)
LevelRequires LevelIntDexCostDeals 31 to 46 Physical DamageTornado has #% increased Movement SpeedExperience
13435501531, 46252,595
23636531536, 543314,394
33838551642, 636388,734
44040581649, 739477,437
54242601757, 8512583,786
64444631866, 9915710,359
74646661876, 115181,355,511
84848681988, 133211,138,877
950497119102, 153241,368,233
1052517420118, 177271,638,338
1154537620136, 204301,956,648
1256557921157, 235333,655,184
1358578221181, 271363,017,327
1460598422208, 312393,576,232
1562608722239, 358429,164,731
1664629023274, 4114517,861,428
1766649224315, 4724846,032,386
1868669524361, 5415187,248,039
1969679624386, 58054157,972,052
2070689825414, 62057
217225474, 71160
227426542, 81363
237626620, 93066
247827709, 106469
258027810, 121572
268228925, 138875
2784281057, 158578
2886291206, 180881
2988301375, 206384
3090301568, 235287
3191301674, 251188
3292311787, 268090
3393311907, 286191
3494312035, 305393
3595312172, 325894
3696322318, 347796
3797322473, 371097
3898322639, 395899
3999332815, 4222100
40100333003, 4504102
Attribute /9

Tornado

KeyValue
CostiLvl 1: Normal: 1xOrb of Chance
AcronymDuration, Projectile, Hinder
DropLevel 34
BaseType Tornado
Class Skill Gems
TargetTypesGround, Enemy
TypeSpell, Duration, Trappable, Totemable, Mineable, Triggerable, Damage, Physical, Area, Orb, AreaSpell
ItemTypeMetadata/Items/Gems/SkillGemTornado
Referencepoe.ninja, Community Wiki
Crucible Weapon /1
WeightDesc
1000 (T5)Trigger Level 20 Tornado when you Attack with Split Arrow or Tornado Shot
Microtransactions /1 ⍟
Shark Tornado Effect
Your Tornado becomes a Shark Effect.
Labyrinth Enchantment helmet /12 ⍟
LevelNameModWeight
The Merciless LabyrinthEnchantment Tornado Damage 125% increased Tornado Damage100
The Eternal LabyrinthEnchantment Tornado Damage 240% increased Tornado Damage100
The Merciless LabyrinthEnchantment Tornado Shot Damage 125% increased Tornado Shot Damage100
The Eternal LabyrinthEnchantment Tornado Shot Damage 240% increased Tornado Shot Damage100
The Merciless LabyrinthEnchantment Tornado Area Of Effect 116% increased Tornado Area of Effect100
The Eternal LabyrinthEnchantment Tornado Area Of Effect 224% increased Tornado Area of Effect100
The Merciless LabyrinthEnchantment Tornado Movement Speed 1Tornado has 20% increased Movement Speed100
The Eternal LabyrinthEnchantment Tornado Movement Speed 2Tornado has 30% increased Movement Speed100
The Merciless LabyrinthEnchantment Tornado Shot Critical Strike Chance 160% increased Tornado Shot Critical Strike Chance100
The Eternal LabyrinthEnchantment Tornado Shot Critical Strike Chance 290% increased Tornado Shot Critical Strike Chance100
The Merciless LabyrinthEnchantment Tornado Shot Num Of Secondary Projectiles 1Tornado Shot fires an additional secondary Projectile
The Eternal LabyrinthEnchantment Tornado Shot Num Of Secondary Projectiles 2Tornado Shot fires an additional secondary Projectile100
Supported By /82 ⍟
  • Active Type: Spell, Duration, Trappable, Totemable, Mineable, Triggerable, Damage, Physical, Area, Orb, AreaSpell
  • IconName
    Added Fire Damage Support
    Supports any skill that hits enemies.
    Added Cold Damage Support
    Supports any skill that hits enemies.
    Increased Area of Effect Support
    Supports any skill with an area of effect.
    Added Lightning Damage Support
    Supports any skill that hits enemies.
    Increased Critical Strikes Support
    Supports any skill that hits enemies.
    Increased Critical Damage Support
    Supports any skill that hits enemies.
    Knockback Support
    Supports any skill that hits enemies.
    Life Leech Support
    Supports any skill that hits enemies, causing those hits to leech life based on damage dealt.
    Added Chaos Damage Support
    Supports any skill that hits enemies.
    Stun Support
    Supports any skill that hits enemies, making it easier to stun enemies with those skills.
    Trap Support
    Supports spells, or attacks that use bows or wands. Instead of using that skill, you will throw a trap that will use the skill for you when an enemy walks near it. Traps cannot use channelling skills.
    Item Rarity Support
    Supports any skill that can kill enemies.
    Faster Casting Support
    Supports non-instant spell skills.
    Concentrated Effect Support
    Supports any skill with an area of effect, regardless of whether that skill deals damage.
    Increased Duration Support
    Supports any skill with a duration.
    Cold to Fire Support
    Supports any skill that hits enemies.
    Combustion Support
    Supports any skill that hits enemies.
    Elemental Proliferation Support
    Supports any skill that hits enemies, or could otherwise apply elemental ailments.
    Culling Strike Support
    Supports any skill that hits enemies. If enemies are left below 10% of maximum life after being hit by these skills, they will be killed.
    Iron Will Support
    Supports spell skills, making the increase to physical melee damage from strength also increase their spell damage.
    Spell Totem Support
    Supports spell skills that are not triggered. Instead of casting that spell, you will summon a totem that casts the spell for you.
    Blastchain Mine Support
    Supports spells, or attacks that use bows or wands. Instead of using that skill, you will throw a mine that will use the skill for you when you detonate it. Mines cannot use channelling skills.
    Chance to Flee Support
    Supports any skill that hits enemies.
    Blind Support
    Supports any skill that hits enemies.
    Fire Penetration Support
    Supports any skill that hits enemies, making those hits penetrate enemy fire resistance.
    Cold Penetration Support
    Supports any skill that hits enemies, making those hits penetrate enemy cold resistance.
    Lightning Penetration Support
    Supports any skill that hits enemies, making those hits penetrate enemy lightning resistance.
    Elemental Penetration Support
    Supports any skill that hits enemies, making those hits penetrate enemy elemental resistances.
    Power Charge On Critical Support
    Supports any skill that hits enemies.
    Burning Damage Support
    Supports any skill that hits enemies, or can deal burning damage directly.
    Hextouch Support
    Must support both a skill that hits enemies, and a hex curse skill to work. The hex will be applied when enemies are hit by the other skill. Cannot support totems, traps, or mines. Minions cannot apply hexes this way.
    Less Duration Support
    Supports any skill that has a duration.
    Cast on Death Support
    Each supported spell skill will be triggered when you die. Cannot support skills used by totems, traps, or mines. Vaal skills, channelling skills, and skills with a reservation cannot be triggered.
    Cast when Damage Taken Support
    Each supported spell skill will track damage you take, and be triggered when the total damage taken reaches a threshold. Cannot support skills used by totems, traps, or mines. Vaal skills, channelling skills, and skills with a reservation cannot be triggered.
    Cast when Stunned Support
    Each supported spell skill will have a chance to be triggered when you are stunned. Cannot support skills used by totems, traps, or mines. Vaal skills, channelling skills, and skills with a reservation cannot be triggered.
    Block Chance Reduction Support
    Supports any skill that hits enemies.
    Physical to Lightning Support
    Supports any skill that hits enemies.
    Ice Bite Support
    Supports any skill you use to hit enemies yourself. Cannot support skills used by totems, traps, or mines.
    Hypothermia Support
    Supports any skill that deals damage.
    Innervate Support
    Supports any skill you use to hit enemies yourself. Cannot support skills used by totems, traps, or mines.
    Critical Strike Affliction Support
    Supports any skill that hits enemies.
    Void Manipulation Support
    Supports any skill that deals damage.
    Controlled Destruction Support
    Supports attack skills, or spell skills that deal damage.
    Swift Affliction Support
    Supports any skill that has a duration, or can hit enemies to inflict ailments on them.
    Elemental Focus Support
    Supports any skill that hits or burns enemies, or inflicts elemental ailments.
    Ignite Proliferation Support
    Supports any skill that hits enemies.
    Chance to Poison Support
    Supports any skill that hits enemies.
    Deadly Ailments Support
    Supports any skill that hits enemies.
    Decay Support
    Supports any skill that hits enemies.
    Efficacy Support
    Supports any skill that deals damage or has a duration.
    Vile Toxins Support
    Supports any skill that hits enemies.
    Immolate Support
    Supports any skill that hits enemies.
    Unbound Ailments Support
    Supports any skill that hits enemies or inflicts ailments
    Brutality Support
    Supports any skill that deals damage.
    Arcane Surge Support
    Each supported spell will track how much mana you spend on it, granting a buff when the total mana spent reaches a threshold. Cannot support skills used by totems, traps, mines or skills with a reservation.
    Summon Phantasm Support
    Supports skills that can hit enemies, or create minions. When those skills or minions kill enemies, or hit rare or unique enemies they will have a chance to summon a Phantasm minion, which uses a piercing projectile spell that deals physical damage.
    Bonechill Support
    Supports any skill that can chill enemies or create chilling areas.
    Energy Leech Support
    Supports any skill that hits enemies, causing those hits to leech energy shield based on damage dealt.
    Intensify Support
    Supports spell skills that you cast yourself. Cannot support triggered skills, Vaal skills, instant skills, channelling skills, skills with a reservation or which create minions, or skills used by totems, traps, or mines.
    High-Impact Mine Support
    Supports spells, or attacks that use bows or wands. Instead of using that skill, you will throw a mine that will use the skill for you when you detonate it. Mines cannot use channelling skills.
    Awakened Added Fire Damage Support
    Supports any skill that hits enemies.
    Awakened Brutality Support
    Supports any skill that deals damage.
    Awakened Burning Damage Support
    Supports any skill that hits enemies, or can deal burning damage directly.
    Awakened Fire Penetration Support
    Supports any skill that hits enemies, making those hits penetrate enemy fire resistance.
    Awakened Added Cold Damage Support
    Supports any skill that hits enemies.
    Awakened Cold Penetration Support
    Supports any skill that hits enemies, making those hits penetrate enemy cold resistance.
    Awakened Deadly Ailments Support
    Supports any skill that hits enemies.
    Awakened Swift Affliction Support
    Supports any skill that has a duration, or can hit enemies to inflict ailments on them.
    Awakened Void Manipulation Support
    Supports any skill that deals damage.
    Awakened Added Chaos Damage Support
    Supports any skill that hits enemies.
    Awakened Added Lightning Damage Support
    Supports any skill that hits enemies.
    Awakened Controlled Destruction Support
    Supports attack skills, or spell skills that deal damage.
    Awakened Hextouch Support
    Must support both a skill that hits enemies, and a hex curse skill to work. The hex will be applied when enemies are hit by the other skill. Cannot support totems, traps, or mines. Minions cannot apply hexes this way.
    Awakened Elemental Focus Support
    Supports any skill that hits or burns enemies, or inflicts elemental ailments.
    Awakened Increased Area of Effect Support
    Supports any skill with an area of effect.
    Awakened Lightning Penetration Support
    Supports any skill that hits enemies, making those hits penetrate enemy lightning resistance.
    Awakened Unbound Ailments Support
    Supports any skill that hits enemies or inflicts ailments
    Cruelty Support
    Supports any skill that hits enemies. Minions cannot gain Cruelty.
    Overcharge Support
    Supports any skill that hits enemies.
    Spellblade Support
    Supports spells that hit enemies. Cannot modify the skills of minions.
    Devour Support
    Supports any skill that hits enemies.
    Sadism Support
    Supports any skill that hits enemies.
    Tornado
    Construct
    monster no drops or experience [1]
    SpectreN
    Tagsconstruct, ghost_armour, is_unarmed, large_model, non_attacking, very_slow_movement
    Life
    100%
    Ailment Threshold
    100%
    Resistance
    0 0 0 0
    Damage
    100%
    Accuracy
    100%
    Critical Strike Chance
    +5%
    Critical Strike Multiplier
    +130%
    Attack Distance
    6 ~ 6
    Attack Time
    1 Second
    Damage Spread
    ±0%
    Experience
    100%
    Model Size
    100%
    Type
    Tornado
    Metadata
    Tornado
    IsSummoned
    Y

    Object Type

    version 2
    extends "Metadata/Monsters/Monster"
    
    BaseEvents
    {
    	on_construction_complete = "this.immune_to_hellscape = true;"
    }
    
    Animated
    {
    	animated_object = "Metadata/Monsters/Daemon/Daemon.ao"
    }
    
    Positioned
    {
    	trigger_blocking = true
    }
    
    Stats
    {
    	immune_to_curses = 1
    	immune_to_auras_from_other_entities = 1
    	set_item_drop_slots = 0
    	set_monster_no_drops_or_experience = 1
    	set_monster_do_not_fracture = 1
    	set_max_frenzy_charges = 0
    	set_max_endurance_charges = 0
    	set_max_power_charges = 0
    	base_cannot_be_stunned = 1
    	cannot_be_knocked_back = 1
    	set_phase_through_objects = 1
    	set_monster_grants_no_flask_charges = 1
    	set_maximum_life_is_one = 1
    	set_cannot_die = 1
    	set_hidden_monster_can_have_auras = 1
    	set_hide_mini_life_bar = 1
    	does_not_count_as_monster = 1
    }
    
    Life
    {
    	corpse_usable = false
    	ignore_on_life_changed_stats = true
    }
    
    Pathfinding
    {
    	base_speed = 8
    }
    
    DiesAfterTime
    {
    
    }
    
    StateMachine
    {
    	define_shared_state =
    	"
    		tornado_radius;
    		tornado_state;
    
    		tornado_physical;
    		tornado_fire;
    		tornado_cold;
    		tornado_lightning;
    		tornado_chaos;
    		tornado_main_element;
    	"
    }

    Object Type Codes

    version 2
    extends "Metadata/Monsters/Monster"
    
    Targetable
    {
    	no_highlight = true
    	targetable = false
    }
    
    Render
    {
    	allow_attached_arrows = false
    }
    
    BaseEvents
    {
    	on_construction_complete =
    	"
    		this.animated_object.is_high_priority_effect = true;
    		this.tornado_aoe = AddAttached( Metadata/Effects/Spells/tornado_spell/tornado_aoe.ao, , ScaleMiscAnimated( TornadoAoe, GetState( tornado_radius ) ), 5 );
    		IfState( tornado_state, <2,
    		{
    			this.tornado = AddAttached( Metadata/Effects/Spells/tornado_spell/tornado.ao,  );
    			QueueAnimationAttached( Metadata/Effects/Spells/tornado_spell/tornado.ao, tornado_idle_01 );
    			this.tornado.AddEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/default_Start.epk );
    		} );
    		IfState( tornado_state, 0,
    		{
    			this.tornado.AddEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/can_Target.epk );
    		} );
    
    		IfState( tornado_main_element, >0,
    		{
    			TriggerStateBracket( changed_main_element, tornado_main_element );
    		} );
    	"
    }
    
    StateMachine
    {
    	define_state = "tornado_last_element"
    
    	on_exit_state_tornado_state_0 =
    	"
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/can_Target.epk );
    	"
    
    	on_change_state_tornado_radius =
    	"
    		IfState( tornado_state, <2,
    		{
    			ScaleAttached( Metadata/Effects/Spells/tornado_spell/tornado_aoe.ao, ScaleMiscAnimated( TornadoAoe, GetState( tornado_radius ) ) );
    		} );
    	"
    
    	// Finished
    	on_state_tornado_state_2 =
    	"
    		PlayAnimationAttached( Metadata/Effects/Spells/tornado_spell/tornado.ao, tornado_end_01, 1, false, true );
    		Delay( 1.4, { PlayAnimationAttached( Metadata/Effects/Spells/tornado_spell/tornado_aoe.ao, tornado_AoE_end_01 ); } );
    		QueueAnimationAttachedByIndex( Metadata/Effects/Spells/tornado_spell/tornado.ao, -1 );
    
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Physical.epk);
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Cold.epk);
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Fire.epk);
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Lightning.epk);
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Chaos.epk);
    	"
    	
    	// Replaced
    	on_state_tornado_state_3 =
    	"
    		this.tornado.AddEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/recast_Fade.epk );
    		PlayAnimationAttached( Metadata/Effects/Spells/tornado_spell/tornado_aoe.ao, tornado_AoE_end_01 );
    		
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Cold_transform.epk );
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Fire_transform.epk );
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Lightning_transform.epk );
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Chaos_transform.epk );
    
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Physical.epk);
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Cold.epk);
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Fire.epk);
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Lightning.epk);
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Chaos.epk);
    	"
    
    	on_change_state_tornado_main_element =
    	"
    		TriggerStateBracket( remove_element, tornado_last_element );
    
    		IfState( tornado_main_element, 1,
    		{
    			TriggerStateBracket( element_to_phys, tornado_last_element );
    			PlayAnimationAttached( Metadata/Effects/Spells/tornado_spell/tornado_aoe.ao, tornado_AoE_idle_01 );
    			QueueAnimationAttached( Metadata/Effects/Spells/tornado_spell/tornado.ao, tornado_idle_01 );
    			this.tornado.AddEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Physical.epk);
    		},
    		{
    			QueueAnimationAttached( Metadata/Effects/Spells/tornado_spell/tornado.ao, tornado_idle_elements_01 );
    			this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/default_Start.epk );
    			this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Physical.epk);
    		} );
    
    		SetStateTo( tornado_last_element, GetState( tornado_main_element ) );
    
    		TriggerStateBracket( changed_main_element, tornado_main_element );
    	"
    }
    
    Brackets
    {
    	define_bracket = "remove_element; element_to_phys; changed_main_element"
    
    	remove_element_2 = "
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Cold_transform.epk );
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Cold.epk );
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Cold.epk);
    	"
    
    	remove_element_3 = "
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Fire_transform.epk );
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Fire.epk );
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Fire.epk);
    	"
    
    	remove_element_4 = "
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Lightning_transform.epk );
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Lightning.epk );
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Lightning.epk);
    	"
    
    	remove_element_5 = "
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Chaos_transform.epk );
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Chaos.epk );
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Chaos.epk);
    	"
    
    	element_to_phys_2 = "this.tornado.AddEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Cold_off.epk, 1.0 );"
    	element_to_phys_3 = "this.tornado.AddEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Fire_off.epk, 1.0 );"
    	element_to_phys_4 = "this.tornado.AddEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Lightning_off.epk, 1.0 );"
    	element_to_phys_5 = "this.tornado.AddEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Chaos_off.epk, 1.0 );"
    
    	// Cold
    	changed_main_element_2 =
    	"
    		this.tornado.AddEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Cold_transform.epk, 1.0 );
    		this.tornado.AddEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Cold.epk);
    		PlayAnimationAttached( Metadata/Effects/Spells/tornado_spell/tornado_aoe.ao, tornado_AoE_idle_cold_01 );
    	"
    
    	// Fire
    	changed_main_element_3 =
    	"
    		this.tornado.AddEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Fire_transform.epk, 1.0 );
    		this.tornado.AddEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Fire.epk);
    		PlayAnimationAttached( Metadata/Effects/Spells/tornado_spell/tornado_aoe.ao, tornado_AoE_idle_fire_01 );
    	"
    
    	// Lightning
    	changed_main_element_4 =
    	"
    		this.tornado.AddEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Lightning_transform.epk, 1.0 );
    		this.tornado.AddEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Lightning.epk);
    		PlayAnimationAttached( Metadata/Effects/Spells/tornado_spell/tornado_aoe.ao, tornado_AoE_idle_light_01 );
    	"
    
    	// Chaos
    	changed_main_element_5 =
    	"
    		this.tornado.AddEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Chaos_transform.epk, 1.0 );
    		this.tornado.AddEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Chaos.epk);
    		PlayAnimationAttached( Metadata/Effects/Spells/tornado_spell/tornado_aoe.ao, tornado_AoE_idle_chaos_01 );
    	"
    }
    
    -- src\Data\Spectres.lua
    minions["Metadata/Monsters/Tornado/Tornado"] = {
        name = "Tornado",
        life = 1,
        fireResist = 0,
        coldResist = 0,
        lightningResist = 0,
        chaosResist = 0,
        damage = 1,
        damageSpread = 0,
        attackTime = 1,
        attackRange = 6,
        accuracy = 1,
        skillList = {
        },
        modList = {
        },
    }
    
    monster no drops or experience [1]
    IdMonsterNoDropsOrExperience
    FamilyMonsterNoDropsOrExperience
    DomainsMonster (3)
    GenerationTypeUnique (3)
    Req. level1
    Stats
  • monster no drops or experience Min: 1 Max: 1 Global
  • Tornado
    Construct
    monster no drops or experience [1]
    SpectreN
    Tagsconstruct, ghost_armour, is_unarmed, large_model, non_attacking, very_slow_movement
    Life
    100%
    Ailment Threshold
    100%
    Resistance
    0 0 0 0
    Damage
    100%
    Accuracy
    100%
    Critical Strike Chance
    +5%
    Critical Strike Multiplier
    +130%
    Attack Distance
    6 ~ 6
    Attack Time
    1 Second
    Damage Spread
    ±0%
    Experience
    100%
    Model Size
    100%
    Type
    Tornado
    Metadata
    TornadoShark
    IsSummoned
    Y

    Object Type

    version 2
    extends "Metadata/Monsters/Monster"
    
    BaseEvents
    {
    	on_construction_complete = "this.immune_to_hellscape = true;"
    }
    
    Animated
    {
    	animated_object = "Metadata/Monsters/Daemon/Daemon.ao"
    }
    
    Positioned
    {
    	trigger_blocking = true
    }
    
    Stats
    {
    	immune_to_curses = 1
    	immune_to_auras_from_other_entities = 1
    	set_item_drop_slots = 0
    	set_monster_no_drops_or_experience = 1
    	set_monster_do_not_fracture = 1
    	set_max_frenzy_charges = 0
    	set_max_endurance_charges = 0
    	set_max_power_charges = 0
    	base_cannot_be_stunned = 1
    	cannot_be_knocked_back = 1
    	set_phase_through_objects = 1
    	set_monster_grants_no_flask_charges = 1
    	set_maximum_life_is_one = 1
    	set_cannot_die = 1
    	set_hidden_monster_can_have_auras = 1
    	set_hide_mini_life_bar = 1
    	does_not_count_as_monster = 1
    }
    
    Life
    {
    	corpse_usable = false
    	ignore_on_life_changed_stats = true
    }
    
    Pathfinding
    {
    	base_speed = 8
    }
    
    DiesAfterTime
    {
    
    }
    
    StateMachine
    {
    	define_shared_state =
    	"
    		tornado_radius;
    		tornado_state;
    
    		tornado_physical;
    		tornado_fire;
    		tornado_cold;
    		tornado_lightning;
    		tornado_chaos;
    		tornado_main_element;
    	"
    }

    Object Type Codes

    version 2
    extends "Metadata/Monsters/Monster"
    
    Targetable
    {
    	no_highlight = true
    	targetable = false
    }
    
    Render
    {
    	allow_attached_arrows = false
    }
    
    BaseEvents
    {
    	on_construction_complete =
    	"
    		this.animated_object.is_high_priority_effect = true;
    		this.tornado_aoe = AddAttached( Metadata/Effects/Spells/tornado_spell/tornado_aoe.ao, , ScaleMiscAnimated( TornadoAoe, GetState( tornado_radius ) ), 5 );
    		IfState( tornado_state, <2,
    		{
    			this.tornado = AddAttached( Metadata/Effects/Spells/tornado_spell/tornado.ao,  );
    			QueueAnimationAttached( Metadata/Effects/Spells/tornado_spell/tornado.ao, tornado_idle_01 );
    			this.tornado.AddEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/default_Start.epk );
    		} );
    		IfState( tornado_state, 0,
    		{
    			this.tornado.AddEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/can_Target.epk );
    		} );
    
    		IfState( tornado_main_element, >0,
    		{
    			TriggerStateBracket( changed_main_element, tornado_main_element );
    		} );
    	"
    }
    
    StateMachine
    {
    	define_state = "tornado_last_element"
    
    	on_exit_state_tornado_state_0 =
    	"
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/can_Target.epk );
    	"
    
    	on_change_state_tornado_radius =
    	"
    		IfState( tornado_state, <2,
    		{
    			ScaleAttached( Metadata/Effects/Spells/tornado_spell/tornado_aoe.ao, ScaleMiscAnimated( TornadoAoe, GetState( tornado_radius ) ) );
    		} );
    	"
    
    	// Finished
    	on_state_tornado_state_2 =
    	"
    		PlayAnimationAttached( Metadata/Effects/Spells/tornado_spell/tornado.ao, tornado_end_01, 1, false, true );
    		Delay( 1.4, { PlayAnimationAttached( Metadata/Effects/Spells/tornado_spell/tornado_aoe.ao, tornado_AoE_end_01 ); } );
    		QueueAnimationAttachedByIndex( Metadata/Effects/Spells/tornado_spell/tornado.ao, -1 );
    
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Physical.epk);
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Cold.epk);
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Fire.epk);
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Lightning.epk);
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Chaos.epk);
    	"
    	
    	// Replaced
    	on_state_tornado_state_3 =
    	"
    		this.tornado.AddEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/recast_Fade.epk );
    		PlayAnimationAttached( Metadata/Effects/Spells/tornado_spell/tornado_aoe.ao, tornado_AoE_end_01 );
    		
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Cold_transform.epk );
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Fire_transform.epk );
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Lightning_transform.epk );
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Chaos_transform.epk );
    
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Physical.epk);
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Cold.epk);
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Fire.epk);
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Lightning.epk);
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Chaos.epk);
    	"
    
    	on_change_state_tornado_main_element =
    	"
    		TriggerStateBracket( remove_element, tornado_last_element );
    
    		IfState( tornado_main_element, 1,
    		{
    			TriggerStateBracket( element_to_phys, tornado_last_element );
    			PlayAnimationAttached( Metadata/Effects/Spells/tornado_spell/tornado_aoe.ao, tornado_AoE_idle_01 );
    			QueueAnimationAttached( Metadata/Effects/Spells/tornado_spell/tornado.ao, tornado_idle_01 );
    			this.tornado.AddEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Physical.epk);
    		},
    		{
    			QueueAnimationAttached( Metadata/Effects/Spells/tornado_spell/tornado.ao, tornado_idle_elements_01 );
    			this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/default_Start.epk );
    			this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Physical.epk);
    		} );
    
    		SetStateTo( tornado_last_element, GetState( tornado_main_element ) );
    
    		TriggerStateBracket( changed_main_element, tornado_main_element );
    	"
    }
    
    Brackets
    {
    	define_bracket = "remove_element; element_to_phys; changed_main_element"
    
    	remove_element_2 = "
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Cold_transform.epk );
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Cold.epk );
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Cold.epk);
    	"
    
    	remove_element_3 = "
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Fire_transform.epk );
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Fire.epk );
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Fire.epk);
    	"
    
    	remove_element_4 = "
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Lightning_transform.epk );
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Lightning.epk );
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Lightning.epk);
    	"
    
    	remove_element_5 = "
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Chaos_transform.epk );
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Chaos.epk );
    		this.tornado.RemoveEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Chaos.epk);
    	"
    
    	element_to_phys_2 = "this.tornado.AddEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Cold_off.epk, 1.0 );"
    	element_to_phys_3 = "this.tornado.AddEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Fire_off.epk, 1.0 );"
    	element_to_phys_4 = "this.tornado.AddEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Lightning_off.epk, 1.0 );"
    	element_to_phys_5 = "this.tornado.AddEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Chaos_off.epk, 1.0 );"
    
    	// Cold
    	changed_main_element_2 =
    	"
    		this.tornado.AddEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Cold_transform.epk, 1.0 );
    		this.tornado.AddEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Cold.epk);
    		PlayAnimationAttached( Metadata/Effects/Spells/tornado_spell/tornado_aoe.ao, tornado_AoE_idle_cold_01 );
    	"
    
    	// Fire
    	changed_main_element_3 =
    	"
    		this.tornado.AddEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Fire_transform.epk, 1.0 );
    		this.tornado.AddEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Fire.epk);
    		PlayAnimationAttached( Metadata/Effects/Spells/tornado_spell/tornado_aoe.ao, tornado_AoE_idle_fire_01 );
    	"
    
    	// Lightning
    	changed_main_element_4 =
    	"
    		this.tornado.AddEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Lightning_transform.epk, 1.0 );
    		this.tornado.AddEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Lightning.epk);
    		PlayAnimationAttached( Metadata/Effects/Spells/tornado_spell/tornado_aoe.ao, tornado_AoE_idle_light_01 );
    	"
    
    	// Chaos
    	changed_main_element_5 =
    	"
    		this.tornado.AddEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/skin_Chaos_transform.epk, 1.0 );
    		this.tornado.AddEffectPack( Metadata/Effects/Spells/tornado_spell/EPKs/fx_Chaos.epk);
    		PlayAnimationAttached( Metadata/Effects/Spells/tornado_spell/tornado_aoe.ao, tornado_AoE_idle_chaos_01 );
    	"
    }
    
    -- src\Data\Spectres.lua
    minions["Metadata/Monsters/Tornado/TornadoShark"] = {
        name = "Tornado",
        life = 1,
        fireResist = 0,
        coldResist = 0,
        lightningResist = 0,
        chaosResist = 0,
        damage = 1,
        damageSpread = 0,
        attackTime = 1,
        attackRange = 6,
        accuracy = 1,
        skillList = {
        },
        modList = {
        },
    }
    
    monster no drops or experience [1]
    IdMonsterNoDropsOrExperience
    FamilyMonsterNoDropsOrExperience
    DomainsMonster (3)
    GenerationTypeUnique (3)
    Req. level1
    Stats
  • monster no drops or experience Min: 1 Max: 1 Global
  • Community Wiki

    Edit

    Tornado

    Tornado is a skill that launches a tornado that repeatedly damages enemies around it. It will move forward for a duration, during which your projectiles can collide with it to deal damage as though it was an enemy. Then it will chase down enemies for a secondary duration, and reflect a portion of the damage it took from your projectiles to them in addition to its own damage. Note only projectiles that can collide with enemies contribute to Tornado's damage, so skills like Rolling Magma and Cremation cannot contribute.

    Version history

    VersionChanges
    3.17.0
  • Tornado now deals 31 to 46 Physical Damage at gem level 1 (previously 31 to 47) up to 414 to 620 at gem level 20 (previously 290 to 435).
  • Now has 95% Effectiveness of Added Damage at all gem levels (previously 65%).
  • 3.16.0
  • Tornado has been added to the game.

  • Wikis Content is available under CC BY-NC-SA 3.0 unless otherwise noted.