• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

Lautanen's Spell Pack

This bundle is marked as useful / simple. Simplicity is bliss, low effort and/or may contain minor bugs.
12th Dec 2015
IcemanBo: Too long as NeedsFix. Rejected.

Description

Bouncing Fire
scaled.php

Calls forth a wave of explosive fire that deals 200/300/400 damage to a target and bounces to nearby enemies. Each bounce deals less damage. If used on allies, it will heal them.
4/6/8 bounces.
  • Bouncing Fire
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Bouncing Fire
    • Actions
      • -------- Initialize --------
      • Set BF_Caster = (Triggering unit)
      • Set BF_Level = (Level of Bouncing Fire for BF_Caster)
      • Set BF_Target = (Target unit of ability being cast)
      • Set BF_Owner = (Owner of BF_Caster)
      • Set BF_Enemy = (BF_Owner is an enemy of (Owner of BF_Target))
      • Set BF_Point = (Position of BF_Caster)
      • -------- Damage --------
      • Unit - Create 1 Dummy for BF_Owner at BF_Point facing Default building facing degrees
      • Set BF_Dummy = (Last created unit)
      • Unit - Add a 1.00 second Generic expiration timer to BF_Dummy
      • Unit - Set level of Bouncing Fire (Damage, Dummy) for BF_Dummy to BF_Level
      • Unit - Set level of Bouncing Fire (Heal, Dummy) for BF_Dummy to BF_Level
      • If (BF_Enemy Equal to True) then do (Unit - Order BF_Dummy to Orc Far Seer - Chain Lightning BF_Target) else do (Unit - Order BF_Dummy to Orc Shadow Hunter - Healing Wave BF_Target)
      • Custom script: call RemoveLocation(udg_BF_Point)
      • Set BF_Target = No unit
      • Set BF_Dummy = No unit
      • Set BF_Caster = No unit
Shock Stomp
scaled.php

Slams the ground, stunning and damaging nearby enemy land units. Also makes shockwaves to nearby ground.
25/50/75 damage, 3/4/5 second stun, 3/6/9 shockwaves.
  • War Stomp
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Shock Stomp
    • Actions
      • -------- Initialize --------
      • Set WS_Point[1] = (Position of (Triggering unit))
      • Set WS_Owner = (Owner of (Triggering unit))
      • Set WS_Dummies = ((Level of Shock Stomp for (Triggering unit)) x 3)
      • Set WS_AngleIncrement = (360.00 / (Real(WS_Dummies)))
      • -------- Action --------
      • For each (Integer TempInt) from 1 to WS_Dummies, do (Actions)
        • Loop - Actions
          • Set WS_Angle = (WS_AngleIncrement x (Real(TempInt)))
          • Set WS_Point[2] = (WS_Point[1] offset by 256.00 towards WS_Angle degrees)
          • Unit - Create 1 Dummy for WS_Owner at WS_Point[1] facing Default building facing degrees
          • Set WS_Dummy = (Last created unit)
          • Unit - Add a 1.00 second Generic expiration timer to WS_Dummy
          • Unit - Order WS_Dummy to Orc Tauren Chieftain - Shockwave WS_Point[2]
          • Custom script: call RemoveLocation(udg_WS_Point[2])
          • Set WS_Dummy = No unit
      • -------- Else --------
      • Set WS_Angle = 0.00
      • Set WS_CurrentPoint = 1
      • Custom script: call RemoveLocation(udg_WS_Point[1])
Storm Circle
scaled.php

Summons lightning balls from around the enemy those are thrown at it, dealing massive amount of damage.
150/300/450 damage.
  • Storm Circle
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Storm Circle
    • Actions
      • -------- Initialize --------
      • Set SC_Target = (Target unit of ability being cast)
      • Set SC_MotherPoint = (Position of SC_Target)
      • Set SC_Caster = (Triggering unit)
      • Set SC_Player = (Owner of SC_Caster)
      • -------- Action --------
      • Set SC_Points = ((Level of Storm Circle for SC_Caster) x 3)
      • For each (Integer TempInt) from 1 to SC_Points, do (Actions)
        • Loop - Actions
          • Set TempReal = ((360.00 / (Real(SC_Points))) x (Real(TempInt)))
          • Set SC_Point[TempInt] = (SC_MotherPoint offset by 256.00 towards TempReal degrees)
          • Unit - Create 1 Dummy for SC_Player at SC_Point[TempInt] facing Default building facing degrees
          • Set TempUnit = (Last created unit)
          • Unit - Order TempUnit to Human Mountain King - Storm Bolt SC_Target
          • Custom script: call RemoveLocation(udg_SC_Point[udg_TempInt])
          • Unit - Add a 1.00 second Generic expiration timer to TempUnit
      • Custom script: call RemoveLocation(udg_SC_MotherPoint)
      • -------- Make dummies to throw hammers. --------
      • Set SC_Target = No unit
      • Set SC_Caster = No unit
      • Set TempUnit = No unit
Fade
scaled.php

Makes target enemy unit invulnerable while making it disappear. When the target is invisible, it will die.
Cannot be used on heroes.
  • Fade Init
    • Events
      • Map initialization
    • Conditions
    • Actions
      • Hashtable - Create a hashtable
      • Set F_Table = (Last created hashtable)
  • Fade
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Fade
    • Actions
      • -------- Initialize --------
      • Set TempInt = (Key (Target unit of ability being cast))
      • Hashtable - Save 100 as 0 of TempInt in F_Table
      • Hashtable - Save 0.00 as 1 of TempInt in F_Table
      • Set F_Unit = (Target unit of ability being cast)
      • -------- Style F_Unit --------
      • Unit - Make F_Unit Invulnerable
      • Unit - Set F_Unit movement speed to ((Default movement speed of F_Unit) - 50.00)
      • Unit - Remove Positive buffs from F_Unit
      • Animation - Change F_Unit's animation speed to 50.00% of its original speed
      • Animation - Change F_Unit turn speed to 0.50
      • -------- Add to group --------
      • Unit Group - Add F_Unit to F_Group
      • -------- Turn on loop --------
      • Trigger - Turn on Fade Do <gen>
  • Fade Do
    • Events
      • Time - Every 0.10 seconds of game time
    • Conditions
    • Actions
      • -------- Check for turn off --------
      • Set TempInt = (Number of units in F_Group)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • TempInt Equal to 0
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions
      • -------- Fade --------
      • Unit Group - Pick every unit in F_Group and do (Actions)
        • Loop - Actions
          • -------- Fade Time --------
          • Set F_FTime = (Load 0 of (Key (Picked unit)) from F_Table)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • F_FTime Greater than 0
            • Then - Actions
              • -------- Initialize --------
              • Set F_Fade = ((Load 1 of (Key (Picked unit)) from F_Table) + 1.00)
              • -------- Fade unit 10% --------
              • Animation - Change (Picked unit)'s vertex coloring to (100.00%, 100.00%, 100.00%) with F_Fade% transparency
              • -------- Save --------
              • Hashtable - Save F_Fade as 1 of (Key (Picked unit)) in F_Table
              • Hashtable - Save (F_FTime - 1) as 0 of (Key (Picked unit)) in F_Table
            • Else - Actions
              • -------- Make unit disappear --------
              • Set F_Point = (Position of (Picked unit))
              • Special Effect - Create a special effect at F_Point using Objects\Spawnmodels\Undead\UndeadDissipate\UndeadDissipate.mdl
              • Special Effect - Destroy (Last created special effect)
              • Custom script: call RemoveLocation(udg_F_Point)
              • Unit Group - Remove (Picked unit) from F_Group
              • Hashtable - Clear all child hashtables of child (Key (Picked unit)) in F_Table
              • Unit - Remove (Picked unit) from the game
Holy Beam
fadem.th.jpg

Hero releases mana to air, causing it to transform into wave of holy light. The wave deals 50/100/150 damage and bursts holy mana 1/2/3 times before disappearing.
One burst deals 60/80/100 damage and slows enemies by 50% in 60/80/100 AoE for 2 seconds.
  • Holy Beam Init
    • Events
      • Map initialization
    • Conditions
    • Actions
      • Hashtable - Create a hashtable
      • Set HB_Hashtable = (Last created hashtable)
  • Holy Beam
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Holy Beam
    • Actions
      • -------- Initialize --------
      • Set HB_TargetPoint = (Target point of ability being cast)
      • Set HB_CastPoint = (Position of (Triggering unit))
      • Set HB_Facing = (Angle from HB_CastPoint to HB_TargetPoint)
      • Set HB_Owner = (Triggering player)
      • -------- Action --------
      • Unit - Create 1 Holy Beam (Dummy) for HB_Owner at HB_CastPoint facing HB_Facing degrees
      • Set TempInt = (Key (Last created unit))
      • Hashtable - Save 5 as 0 of TempInt in HB_Hashtable
      • Set HB_Level[1] = (Level of Holy Beam for (Triggering unit))
      • Hashtable - Save HB_Level[1] as 1 of TempInt in HB_Hashtable
      • Hashtable - Save 0 as 2 of TempInt in HB_Hashtable
      • Hashtable - Save HB_Facing as 3 of TempInt in HB_Hashtable
      • Set HB_Dummy = (Last created unit)
      • Unit Group - Add HB_Dummy to HB_Group
      • Unit - Add a 2.00 second Generic expiration timer to HB_Dummy
      • Custom script: call RemoveLocation(udg_HB_CastPoint)
      • Custom script: call RemoveLocation(udg_HB_TargetPoint)
      • -------- Turn on loop --------
      • Trigger - Turn on Holy Beam Loop <gen>
  • Holy Beam Loop
    • Events
      • Time - Every 0.05 seconds of game time
    • Conditions
    • Actions
      • -------- Holy Beam --------
      • Unit Group - Pick every unit in HB_Group and do (Actions)
        • Loop - Actions
          • -------- Time --------
          • Set TempUnit = (Picked unit)
          • Set TempInt = (Key (Picked unit))
          • Set HB_Level[1] = (Load 1 of TempInt from HB_Hashtable)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • HB_Level[1] Greater than 0
            • Then - Actions
              • -------- Action --------
              • Set HB_Time = ((Load 0 of TempInt from HB_Hashtable) - 1)
              • Hashtable - Save HB_Time as 0 of TempInt in HB_Hashtable
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • HB_Time Equal to 0
                • Then - Actions
                  • Set HB_Facing = (Load 3 of TempInt from HB_Hashtable)
                  • Set HB_Level[2] = ((Load 2 of TempInt from HB_Hashtable) + 1)
                  • Hashtable - Save HB_Level[2] as 2 of TempInt in HB_Hashtable
                  • Set HB_Distance = ((Real(HB_Level[2])) x 200.00)
                  • Set TempPoint = ((Position of TempUnit) offset by HB_Distance towards HB_Facing degrees)
                  • Unit - Create 1 Holy Beam (Dummy 2) for HB_Owner at TempPoint facing HB_Facing degrees
                  • Set TempUnit = (Last created unit)
                  • Unit - Set level of Holy Beam (Dummy) for TempUnit to HB_Level[2]
                  • Unit - Order TempUnit to Human Mountain King - Thunder Clap
                  • Unit - Add a 1.00 second Generic expiration timer to TempUnit
                  • -------- ----------- --------
                  • Set HB_Time = 5
                  • Hashtable - Save HB_Time as 0 of TempInt in HB_Hashtable
                  • Set HB_Level[1] = (HB_Level[1] - 1)
                  • Hashtable - Save HB_Level[1] as 1 of TempInt in HB_Hashtable
                  • Custom script: call RemoveLocation(udg_TempPoint)
                • Else - Actions
            • Else - Actions
              • -------- Remove --------
              • Unit Group - Remove TempUnit from HB_Group
              • Hashtable - Clear all child hashtables of child TempInt in HB_Hashtable
              • -------- Check for turn off --------
              • Set TempInt = (Number of units in HB_Group)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • TempInt Equal to 0
                • Then - Actions
                  • Trigger - Turn off (This trigger)
                • Else - Actions

Fade icon by 4eNNightmareStorm
Knockback by Paladon
Storm Circle icon by Golden-Drake


Keywords:
Bouncing Fire, Lightning Strike, Storm Circle, Storm, Fire, Flame, Fade, Disappear, War Stomp, Stomp, Healing Fire, Healing, Pack, Lautanen's, Holy, B
Contents

Lautanen's Spell Pack (Map)

Reviews
19:35, 15th Oct 2010 The_Reborn_Devil: You need to use a proper in-game screenshot that shows your spells. You also have a lot of "Do Nothing" and you should use Triggering Unit instead of Casting Unit (more efficient). There are also some things...

Moderator

M

Moderator

19:35, 15th Oct 2010
The_Reborn_Devil:

You need to use a proper in-game screenshot that shows your spells. You also have a lot of "Do Nothing" and you should use Triggering Unit instead of Casting Unit (more efficient). There are also some things you could optimize, for example the trigger "War Stomp". There's no point in running another loop after the first to remove the locations. Just remove them inside the first loop.


Status: Rejected until updated
Rating: N/A

PM me or another mod once you've updated this to get it reviewed again. Have a nice day!


Pharaoh_: Three of these spells are really easy to produce, while one is not even working as intended (since it is under progress). I will not approve of it in its current state, unless they become a bit more complex.
 
Level 12
Joined
Apr 16, 2010
Messages
584
Gonna check, if I'll use it, I'll give you credits.
Edit: make Bouncing Fire trigger ability, you can make targetable on allies but it will heal them.
You use a lot of
  • Do nothing
actions, they aren't needed.
War Stomp ability looks interesting but too simple, i mean you can add some knockback, but to shokwaves.
And you never destroy SC_MotherPoint and SC_Target.
So i could use only Bouncing Fire if you'd change it (i need now only fire spells :D).
Anyway spells are simple but usefull, i guess.

Please use Edit button instead of double posting. (i forget to use it sometimes too...)
 
Level 6
Joined
Dec 8, 2009
Messages
165
Fixed description.

Okay, I saw 2 leaks in triggers and fixed them.
:fp: If you see any leaks, please say about that for me.
Thank you! :infl_thumbs_up:

Gonna check, if I'll use it, I'll give you credits.
Edit: make Bouncing Fire trigger ability, you can make targetable on allies but it will heal them.
You use a lot of
  • Do nothing
actions, they aren't needed.
War Stomp ability looks interesting but too simple, i mean you can add some knockback, but to shokwaves.
And you never destroy SC_MotherPoint and SC_Target.
So i could use only Bouncing Fire if you'd change it (i need now only fire spells :D).
Anyway spells are simple but usefull, i guess.
Thank you, I´m on it!

Edit: I´m updated it now. Bouncing fire will heal when used on allies, but I like war stomp how it is now, so I will not change it, sorry.

Edit2: Updated the spell pack. Spells are now having better triggering... I think.

Edit3: Fixed the bug with map reviving dummies and moving camera.
 
Last edited:
Level 12
Joined
Apr 16, 2010
Messages
584
Level 6
Joined
Dec 8, 2009
Messages
165
I like War Stomp too, but it's more usefull to add knockback. Try using this http://www.hiveworkshop.com/forums/spells-569/advanced-shockwave-paladon-documentation-110588/?prev=search%3Dknockback%26d%3Dlist%26r%3D20 system made by Paladon.
I think with knockback more users will use it, i mean just stomp and shokwaves to simple.

Edit: But if you don't want to do that, please let me edit it in my map (i'll use it), +rep.
Knockback added, thank you for idea. :ogre_haosis:

Edit: Shock Stomp can now have as many levels as you want on version 1.5a!
 
Last edited:
Level 37
Joined
Mar 6, 2006
Messages
9,240
All the periodic triggers shouldbe turned on/off so they're not running all the time.
The spells are not easily configurable.
You could use the same variables for all spells, instead of having F_Point, BF_Point etc. you could just use one variable.
Create the hashtable in separate trigger (map initialization or some other), no sence to check if it's created every time you use the ability.

Sorm circle should use loop, it only supports 3 levels.
  • Storm Circle
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Storm Circle
    • Actions
      • -------- Initialize --------
      • Set SC_Target = (Target unit of ability being cast)
      • Set SC_MotherPoint = (Position of SC_Target)
      • Set SC_Caster = (Casting unit)
      • Set SC_Player = (Owner of SC_Caster)
      • Set i1 = (Level of Storm Circle for SC_Caster) * 3
      • For each (Integer loopA) from 1 to i1, do (Actions)
        • Loop - Actions
          • Set SC_Point[udg_loopA] = (SC_MotherPoint offset by 256.00 towards (((Real(loopA)) - 1.00) x (360.00 / (Real(i1)))) degrees)
      • -------- Run Do Trigger --------
      • Trigger - Run Storm Circle Do <gen> (ignoring conditions)
You have unneeded call RemoveLoactions there, some of them don't need to get called if the ability level is low.
Make Bouncing Fire support unlimited amount of levels, not just 3.
Use triggering unit, not casting unit.
 
Level 6
Joined
Dec 8, 2009
Messages
165
You have unneeded call RemoveLoactions there, some of them don't need to get called if the ability level is low.
I will fix that!

Make Bouncing Fire support unlimited amount of levels, not just 3.
Well, I designed them to be only 3 leveled spells...

Use triggering unit, not casting unit.
Why? :vw_wtf:

I see that you are very advanced in triggers, thank you for commenting! :goblin_yeah:
 
Level 11
Joined
Sep 12, 2008
Messages
657
nothing is wrong about it, its just slightly faster to use triggering unit,

actually.. i just looked in the jass code in newgen editor, this is how CastingUnit looks like.
(or, GetSpellAbilityUnit())

JASS:
constant native GetSpellAbilityUnit takes nothing returns unit

its a constant.. i dont see anything wrong about it o.o
 
its a constant.. i dont see anything wrong about it o.o

Absolutely no difference.

GetTriggerUnit and GetSpellAbilityUnit are exactly the same inside Warcraft
(educated guess :p), but GetTriggerUnit is faster by about 1.28 times.
I got that number by taking into account name lengths and hashes per
4 characters ;D (According to Dr Super Good, who spent hours with an
assembler reading machine code)

  • Set BF_Target = No unit
  • Set BF_Dummy = No unit
  • Set BF_Caster = No unit
You don't need to null global variables. They're not like local ones.
Global variables are static and can only be overwritten.
They are not automatic like local variables (They aren't created,
used and destroyed at the end of a function/trigger/whatever.)
 
Level 6
Joined
Dec 8, 2009
Messages
165
Only count the number of units in the group after removing a unit from the group. It's a logical improvement.
Done

When you reference variables by actual index Point[1] Point[2] just divide them into multiple variables. It's a readability improvement.
What is the spell ur talking 'bout and do you mean to coordinates x and y?
GetLocationX()
GetLocationY()
 
Level 6
Joined
Dec 8, 2009
Messages
165
No no I mean instead of doing

Set Point[1] = (Position of (Casting unit))
Set Point[2] = (Position of (Target unit of ability being cast))

Do:

Set CenterPoint = (Target point of ability being cast)
Set TargetPoint = (Position of (Target unit of ability being cast))

The dummies wont do anything now.
Could you explain that? The old trigger worked well.
  • Storm Circle
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Storm Circle
    • Actions
      • -------- Initialize --------
      • Set SC_Target = (Target unit of ability being cast)
      • Set SC_MotherPoint = (Position of SC_Target)
      • Set SC_Caster = (Triggering unit)
      • Set SC_Player = (Owner of SC_Caster)
      • Set SC_Points = ((Level of Storm Circle for SC_Caster) x 3)
      • Set SC_AngleIncrement = (360.00 / (Real(SC_Points)))
      • -------- Action --------
      • For each (Integer TempInt) from 1 to SC_Points, do (Actions)
        • Loop - Actions
          • Set TempReal = (SC_AngleIncrement x (Real(TempInt)))
          • Set SC_CastPoint = (SC_MotherPoint offset by 250.00 towards TempReal degrees)
          • Unit - Create 1 Dummy for SC_Player at WS_CastPoint facing Default building facing degrees
          • Set TempUnit = (Last created unit)
          • Unit - Order TempUnit to Human Mountain King - Storm Bolt SC_Target
          • Custom script: call RemoveLocation(udg_SC_CastPoint)
          • Unit - Add a 1.00 second Generic expiration timer to TempUnit
      • Custom script: call RemoveLocation(udg_SC_MotherPoint)
Edit: Used WS_CastPoint in accident, lol. Spellpack is updated.
 
Last edited:
Level 6
Joined
Apr 16, 2011
Messages
158
Someone correct me if I'm wrong.
-Holy Beam
  • Set HB_Dummy = (Last created unit)
  • Unit Group - Add HB_Dummy to HB_Group
  • Unit - Add a 2.00 second Generic expiration timer to HB_Dummy
It is better to use "Last created unit" ?:
  • Unit Group - Add (Last created unit) to HB_Group
  • Unit - Add a 2.00 second Generic expiration timer to (Last created unit)
I do not know if I'm right
 
Top