• 🏆 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!

Spirit Bladestorm

  • Like
Reactions: nafre
Causes a bladestorm of destructive force around the Blademaster, rendering him immune to magic .The force of his spinning combined with his spirit's causes enemies to be dragged in and become ripped to shreds if they are dragged too close.
Level 1 - 100 damage, 300 drag range
Level 2 - 200 damage, 600 drag range
Level 3 - 300 damage, 900 drag range
====================================================================
I have gotten the idea of the big spirit effect from DotA's Tauren Chieftain. So i should probably credit them.

Triggers
  • SB Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Spirit Bladestorm
    • Actions
      • -------- Sets Values --------
      • Set SB_Caster = (Triggering unit)
      • Set SB_Location = (Position of SB_Caster)
      • Set SB_Level = (Level of Spirit Bladestorm for SB_Caster)
      • Set SB_Range = ((Real(SB_Level)) x 300.00)
      • Set SB_Time = ((Real(SB_Level)) x 3.00)
      • Set SB_Damage = (SB_Level x 100)
      • Unit - Create 1 Blademaster Spirit for (Owner of SB_Caster) at SB_Location facing (Facing of SB_Caster) degrees
      • Set SB_Spirit = (Last created unit)
      • Unit - Turn collision for SB_Caster Off
      • -------- Plays Spinning Animation --------
      • Animation - Play SB_Spirit's attack walk stand spin animation
      • Animation - Change SB_Spirit's vertex coloring to (100.00%, 100.00%, 100.00%) with 65.00% transparency
      • -------- Stores Values --------
      • Hashtable - Save SB_Range as (Key range) of (Key (Triggering unit)) in SB_Hashtable
      • Hashtable - Save Handle OfSB_Location as (Key location) of (Key (Triggering unit)) in SB_Hashtable
      • Hashtable - Save SB_Time as (Key time) of (Key (Triggering unit)) in SB_Hashtable
      • Hashtable - Save SB_Damage as (Key damage) of (Key (Triggering unit)) in SB_Hashtable
      • Hashtable - Save Handle OfSB_Spirit as (Key spirit) of (Key (Triggering unit)) in SB_Hashtable
      • Hashtable - Save Handle OfSB_Caster as (Key caster) of (Key (Triggering unit)) in SB_Hashtable
      • -------- Adds to Unit Group --------
      • Unit Group - Add SB_Caster to SB_Spinners
  • SB Drag
    • Events
      • Time - Every 0.04 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in SB_Spinners and do (Actions)
        • Loop - Actions
          • -------- Loads Values --------
          • Set SB_Location = (Position of (Picked unit))
          • Set SB_Damage = (Load (Key damage) of (Key (Picked unit)) from SB_Hashtable)
          • Set SB_Range = (Load (Key range) of (Key (Picked unit)) from SB_Hashtable)
          • Set SB_DragUnits = (Units within SB_Range of SB_Location)
          • Set SB_Time = (Load (Key time) of (Key (Picked unit)) from SB_Hashtable)
          • Set SB_DamagedUnits = (Units within 200.00 of SB_Location)
          • Set SB_Spirit = (Load (Key spirit) of (Key (Picked unit)) in SB_Hashtable)
          • Set SB_Caster = (Load (Key caster) of (Key (Picked unit)) in SB_Hashtable)
          • -------- Moves Spirit --------
          • Unit - Move SB_Spirit instantly to (Position of (Picked unit)), facing (Facing of (Picked unit)) degrees
          • -------- Checks for Time Remaning --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • SB_Time Greater than 0.00
            • Then - Actions
              • -------- Sets Time Left --------
              • Hashtable - Save (SB_Time - 0.04) as (Key time) of (Key (Picked unit)) in (Last created hashtable)
              • Unit Group - Pick every unit in SB_DamagedUnits and do (Actions)
                • Loop - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • ((Picked unit) belongs to an enemy of (Owner of SB_Caster)) Equal to True
                      • ((Picked unit) is A structure) Equal to False
                      • ((Picked unit) is Magic Immune) Equal to False
                    • Then - Actions
                      • -------- Damages Units --------
                      • Unit - Cause SB_Caster to damage (Picked unit), dealing ((Real(SB_Damage)) / 25.00) damage of attack type Normal and damage type Normal
                    • Else - Actions
              • Unit Group - Pick every unit in SB_DragUnits and do (Actions)
                • Loop - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • ((Picked unit) belongs to an enemy of (Owner of SB_Caster)) Equal to True
                      • ((Picked unit) is A structure) Equal to False
                      • ((Picked unit) is Magic Immune) Equal to False
                    • Then - Actions
                      • -------- Sets Values --------
                      • Set SB_Angle = (Angle from SB_Location to (Position of (Picked unit)))
                      • Set SB_Distance = (Distance between SB_Location and (Position of (Picked unit)))
                      • -------- Calculates Next Point --------
                      • Set SB_MoveLoc = (SB_Location offset by (SB_Distance - 4.00) towards (SB_Angle + 4.00) degrees)
                      • -------- Moves Unit --------
                      • Unit - Move (Picked unit) instantly to SB_MoveLoc
                      • -------- Creates a Special Effect --------
                      • Special Effect - Create a special effect at SB_MoveLoc using Objects\Spawnmodels\Undead\ImpaleTargetDust\ImpaleTargetDust.mdl
                      • Special Effect - Destroy (Last created special effect)
                    • Else - Actions
            • Else - Actions
              • Unit - Turn collision for SB_Caster On
              • -------- Removes Spirit --------
              • Unit - Remove SB_Spirit from the game
              • Unit Group - Remove SB_Caster from SB_Spinners
              • -------- Clears Hashtable --------
              • Hashtable - Clear all child hashtables of child (Key (Picked unit)) in SB_Hashtable
          • -------- Removes Leaks --------
          • Custom script: call DestroyGroup (udg_SB_DamagedUnits)
          • Custom script: call DestroyGroup (udg_SB_DragUnits)
          • Custom script: call RemoveLocation (udg_SB_Location)
          • Custom script: call RemoveLocation (udg_SB_MoveLoc)
Keywords:
blademaster, spirit, bladestorm, drag, suck,
Contents

Just another Warcraft III map (Map)

Reviews
13:56, 31st Dec 2009 TriggerHappy: Seemed fine and leakless.

Moderator

M

Moderator

13:56, 31st Dec 2009
TriggerHappy:

Seemed fine and leakless.
 
Level 4
Joined
Jan 29, 2007
Messages
98
This leaks a little:

SB Cast trigger leaks:
  • Set SB_Location = (Position of SB_Caster)
That point isn't destroyed...

SB Drag trigger leaks:
  • Unit - Move SB_Spirit instantly to (Position of (Picked unit)), facing (Facing of (Picked unit)) degrees
You're not using the variable you just set :p

  • Set SB_MoveLoc = (SB_Location offset by (SB_Distance - 4.00) towards (SB_Angle + 4.00) degrees)
Destroy that leak inside the "Then" block, instead of the last actions...

Otherwise, a quite ok spell ;)
Just, maybe you can try to sync the "ghost" with the real caster, so that they spin at the same speed, and the same point in their animation ;)
 
Level 4
Joined
Apr 23, 2009
Messages
65
This leaks a little:

SB Cast trigger leaks:
  • Set SB_Location = (Position of SB_Caster)
That point isn't destroyed...

SB Drag trigger leaks:
  • Unit - Move SB_Spirit instantly to (Position of (Picked unit)), facing (Facing of (Picked unit)) degrees
You're not using the variable you just set :p

  • Set SB_MoveLoc = (SB_Location offset by (SB_Distance - 4.00) towards (SB_Angle + 4.00) degrees)
Destroy that leak inside the "Then" block, instead of the last actions...

Otherwise, a quite ok spell ;)
Just, maybe you can try to sync the "ghost" with the real caster, so that they spin at the same speed, and the same point in their animation ;)
Thank you for looking over my triggering. The leaks have been fixed and the spirit now is in sync with the caster. Unfortunetly when I move the custom scripts to the "Then" block, the spell doesn't work properly so I have left them unmoved.
 
Level 6
Joined
Mar 26, 2008
Messages
239
It's not a leak since it's removed in 2nd trigger...But still it should be remade because if 2 units cast it at 1 time (it happens sometimes) then the spell won't work for 1 of them or will be cast twice for 1 and not casted for another=)I mean these variables should be removed in first trigger.And make the trigger look like that: first variables,then saving them to hastables and then all other actions.

Well I give it 3/5 because idea isn't new and I saw 1 better spell long time ago (-1 ball of my opinion,if I don't count this then 4/5 :) ),still good work=)
 
Triggering3/5

Eyecandy
3/5

Usefulness
3.5/5

Tooltip
5/5

icon4.gif
Total
3.6/5

Triggering is pretty good, thou I could take some more work, e.g. allowing the user to change certain things more easily.
Just make another variable for your set up, like now you have "damage = level of ability x 100" make it:
"damage = 100"
"total damage = damage x level of ability"

Special effect seems to be good, but to big, scale the "spirit down" and replace dust model with ancient protector missile.

Spell could be useful for many maps.

Tooltip seems to be OK and easy to understand.

Have fun!

~Berz
 
Level 19
Joined
Feb 25, 2009
Messages
2,004
Well it has something to do with spirits, no need always to use ancient protector missle model for the drag

I suggest you to use this "Abilities\Spells\Orc\TrollBerserk\TrollBeserkerTarget.mdl" attached to the chest of the dragged targets. That will make them look a little bit red which will indicates that they are in range of the Spirit Bladestorm.
 
Level 4
Joined
Apr 23, 2009
Messages
65
It's not a leak since it's removed in 2nd trigger...But still it should be remade because if 2 units cast it at 1 time (it happens sometimes) then the spell won't work for 1 of them or will be cast twice for 1 and not casted for another=)I mean these variables should be removed in first trigger.And make the trigger look like that: first variables,then saving them to hastables and then all other actions.

Well I give it 3/5 because idea isn't new and I saw 1 better spell long time ago (-1 ball of my opinion,if I don't count this then 4/5 :) ),still good work=)
Thanks. Im not sure what you mean by "first variables,then saving them to hastables and then all other actions." Maybe you could give me a brief example? :]
Triggering3/5

Eyecandy
3/5

Usefulness
3.5/5

Tooltip
5/5

icon4.gif
Total
3.6/5

Triggering is pretty good, thou I could take some more work, e.g. allowing the user to change certain things more easily.
Just make another variable for your set up, like now you have "damage = level of ability x 100" make it:
"damage = 100"
"total damage = damage x level of ability"

Special effect seems to be good, but to big, scale the "spirit down" and replace dust model with ancient protector missile.

Spell could be useful for many maps.

Tooltip seems to be OK and easy to understand.

Have fun!

~Berz
Thanks alot for reviewing my spell. I have now made the spell user friendly. The spirit has been scaled down and dust model has been replaced.
Well it has something to do with spirits, no need always to use ancient protector missle model for the drag

I suggest you to use this "Abilities\Spells\Orc\TrollBerserk\TrollBeserkerTarget.mdl" attached to the chest of the dragged targets. That will make them look a little bit red which will indicates that they are in range of the Spirit Bladestorm.
Thank you for your suggestion. I havent used "Abilities\Spells\Orc\TrollBerserk\TrollBeserkerTarget.mdl" because it is very hard to see. Again thank you for this suggestion. I appreciate it.
 
Level 6
Joined
Mar 26, 2008
Messages
239
Thanks. Im not sure what you mean by "first variables,then saving them to hastables and then all other actions." Maybe you could give me a brief example? :]
Well,in your 1st trigger you first make variables,then create a unit and set it as variable too,then make some things about the unit and only then save everything in hastables...And I tell you first to make values for variables,then save them in hastables and only after that make things about unit...It's not a mistake,but it'll be a bit more safe=)
 
Level 19
Joined
Feb 25, 2009
Messages
2,004
Ok, I like you appreciated my suggestion, but now the spell doesn't look good.. this special effect destroy its completly, try to search for something else

And you can add passive ability to the blademaster that has 2 attachments on hes hands, adding something red again (maybe the missle from the Phoenix Fire ability?)

That will make it look awesome.

For now my rate will be 3/5 just because of the clear triggering.
 
Level 4
Joined
Apr 23, 2009
Messages
65
I have updated this spell. I rearranged the triggers but i think its still not what you mean.

I have added the passive ability and i have also changed the drag special effect. Check it out and tell me what you think. :D
 
Level 4
Joined
Jan 29, 2007
Messages
98
This thread as not about asking how to use something,it's for rating the spell...

He's asking about the spell...
He means the "Hashtable" actions:
  • Hashtable - Save SB_Range as (Key range) of (Key (Triggering unit)) in SB_Hashtable
how do you set those "keys" cause I cannot seem to get them right...
They get it by using the line "Hashtable - Get String ID" and then instead of the red "String you type, for example, "range" as it says in the first of those actions ;)

Btw, back to the spell, I don't see you using this hashtable anywhere in the other trigger:
  • Hashtable - Save Handle OfSB_Location as (Key location) of (Key (Triggering unit)) in SB_Hashtable
Or am I missing something ? :S

And also, this leaks:
  • Set SB_Angle = (Angle from SB_Location to (Position of (Picked unit)))
 
Level 37
Joined
Mar 6, 2006
Messages
9,240
Are you actually using this for something? Maybe I'm just not seeing it?

  • Hashtable - Save Handle OfSB_Location as (Key location) of (Key (Triggering unit)) in SB_Hashtable
Has this been pointed out already?

  • Hashtable - Save (SB_Time - 0.04) as (Key time) of (Key (Picked unit)) in (Last created hashtable)
 
Level 4
Joined
Apr 23, 2009
Messages
65
He's asking about the spell...
He means the "Hashtable" actions:
  • Hashtable - Save SB_Range as (Key range) of (Key (Triggering unit)) in SB_Hashtable

They get it by using the line "Hashtable - Get String ID" and then instead of the red "String you type, for example, "range" as it says in the first of those actions ;)

Btw, back to the spell, I don't see you using this hashtable anywhere in the other trigger:
  • Hashtable - Save Handle OfSB_Location as (Key location) of (Key (Triggering unit)) in SB_Hashtable
Or am I missing something ? :S

And also, this leaks:
  • Set SB_Angle = (Angle from SB_Location to (Position of (Picked unit)))
Hashtable removed and teh leak is now fixed. Sorry for all the triggering problems but i didn't really plan on uploading this spell when i made it. After I was done I just thought i would upload it to see what you guys thought.
Thats something, now its looks very nice. Now its definetily deserves a 5/5.
Thank you so much. :)
Are you actually using this for something? Maybe I'm just not seeing it?

  • Hashtable - Save Handle OfSB_Location as (Key location) of (Key (Triggering unit)) in SB_Hashtable
Has this been pointed out already?

  • Hashtable - Save (SB_Time - 0.04) as (Key time) of (Key (Picked unit)) in (Last created hashtable)
Ah yes, I must of went through that trigger too quickly. Fixed.
 
Level 15
Joined
Jul 6, 2009
Messages
889
-Perhaps you should remove collision of targets so they don't have weird movement. Like crashing each other.
-What if you Blink with this active? Targets go with you o_O
-Why can you attack while spinning? Perhaps make an option to allow attacking or not. Cargo Hold ability.

This spell kind of reminds me of my Whirlpool ;) Except with different SFX concept.
 
Level 1
Joined
Oct 11, 2009
Messages
2
I love this one sooo much. It looks cool also and i would rate this maybe a nice 0/5. Keep up your good work
 
He's asking about the spell...
He means the "Hashtable" actions:
  • Hashtable - Save SB_Range as (Key range) of (Key (Triggering unit)) in SB_Hashtable

They get it by using the line "Hashtable - Get String ID" and then instead of the red "String you type, for example, "range" as it says in the first of those actions ;)

Btw, back to the spell, I don't see you using this hashtable anywhere in the other trigger:
  • Hashtable - Save Handle OfSB_Location as (Key location) of (Key (Triggering unit)) in SB_Hashtable
Or am I missing something ? :S

And also, this leaks:
  • Set SB_Angle = (Angle from SB_Location to (Position of (Picked unit)))

okay thanks... so I can type whatever string there?
 
Level 4
Joined
Jan 29, 2007
Messages
98
okay thanks... so I can type whatever string there?

Yeah, but then you'd have to change the string it uses when it loads that value, like if you change this:
  • Hashtable - Save SB_Range as (Key range) of (Key (Triggering unit)) in SB_Hashtable
Into this:
  • Hashtable - Save SB_Range as (Key distance) of (Key (Triggering unit)) in SB_Hashtable
Then you'd have to change this (In the seconds trigger):
  • Set SB_Range = (Load (Key range) of (Key (Picked unit)) from SB_Hashtable)
To this:
  • Set SB_Range = (Load (Key distance) of (Key (Picked unit)) from SB_Hashtable)
 
Yeah, but then you'd have to change the string it uses when it loads that value, like if you change this:
  • Hashtable - Save SB_Range as (Key range) of (Key (Triggering unit)) in SB_Hashtable
Into this:
  • Hashtable - Save SB_Range as (Key distance) of (Key (Triggering unit)) in SB_Hashtable
Then you'd have to change this (In the seconds trigger):
  • Set SB_Range = (Load (Key range) of (Key (Picked unit)) from SB_Hashtable)
To this:
  • Set SB_Range = (Load (Key distance) of (Key (Picked unit)) from SB_Hashtable)

I cannot use Picked unit and any other units as a key in the hastable in GUI but in JASS in works okay, is there a problem with my WE? Also is there a new version of TESH that has a list of hashtable functions?
 
Top