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

Fury Darts (GUI) v1j

This spell is MUI in GUI. It sends several homing missiles toward a point or unit. Along its path, it will change its target to the closest enemy. If there are no nearby enemies any longer, the missile will redirect itself toward its original target point (initial target position if used on an enemy).

The spell uses a index-recycling system I usually use. New spell casts will first fill in any inactive slots instead of simply ordering it as the max+1.
Enjoy; credit would be nice if anyone uses this spell.



- smoothened dart movement a bit
- lowered the amount of locations used! 1 per group of darts now rather than 1 per dart
- fixed possible indexing problem
[ overall made my code a lot harder to understand :) ]


- merged finding maximum active cast with the cast actions
- replaced the original target point reference with X, Y coordinates
- limited darts fly time
- darts get destroyed when out of bounds
- some test spell changes: no cooldown, # of darts
- some added notes


-this version makes it much easier for users to quickly change the spell stats: missile turn rate, # of darts, max speed, detection range, and collision range (I personally dislike doing this as players need 4 more variables)
- added/changed some code in an attempt to reduce a minor visual thing where a dart would slow down too much for a semi-second
- updated the code here (didn't for v1c2)


-fixed a missile one-time back-movement sometimes
-synchronized dart initial launch angle with cast angle


-added slight effects (will improve later)
-fixed non-active slots from running actions
-fixed indexing a bit
-increased missile speed and reduced missile turn rate
-fixed possible leak



  • hsCast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Fury Darts
    • Actions
      • -------- --------
      • -------- B O R I N G S P E L L D A T A S E T U P --------
      • -------- --------
      • -------- Index[5] = how many darts you desire --------
      • Set hsIndex[5] = (5 + (2 x ((Level of (Ability being cast) for (Triggering unit)) - 1)))
      • Set hsDamage[0] = (50.00 + (20.00 x (Real(((Level of (Ability being cast) for (Triggering unit)) - 1)))))
      • -------- Turn = the maximum angle difference darts may move --------
      • Set hsTurn[0] = (6.00 + (0.00 x (Real(((Level of (Ability being cast) for (Triggering unit)) - 1)))))
      • -------- Detect = radius at which darts encounter a unit to home into: WARNING: too high may lag the game --------
      • Set hsDetect[0] = (240.00 + (0.00 x (Real(((Level of (Ability being cast) for (Triggering unit)) - 1)))))
      • -------- Collide = radius at which darts reach the target. NOTE: Collide >= Detect will automatically hit the first unit, but too high won't make it look good --------
      • Set hsCollide[0] = (50.00 + (0.00 x (Real(((Level of (Ability being cast) for (Triggering unit)) - 1)))))
      • -------- SpeedMax = maximum speed a dart may reach. The minimum is half this value --------
      • Set hsSpeedMax[0] = (20.00 + (0.00 x (Real(((Level of (Ability being cast) for (Triggering unit)) - 1)))))
      • -------- --------
      • -------- S E T T I N G U P T E M P T H I N G S --------
      • -------- --------
      • Set hstPoint[1] = (Position of (Triggering unit))
      • -------- ( D e t e r m i n e a n i n d e x n u m b e r f o r t a r g e t p o i n t ) --------
      • -------- (used as the target point index number) --------
      • Set hsTargPointIndex[0] = 0
      • -------- (max active point array check) --------
      • Set hsIndex[3] = 0
      • For each (Integer hsIndex[0]) from 1 to hsIndex[6], do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • hsTargPointCounter[hsIndex[0]] Equal to 0
            • Then - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • hsTargPointIndex[0] Equal to 0
                • Then - Actions
                  • -------- (first available unused index) --------
                  • Set hsTargPointIndex[0] = hsIndex[0]
                • Else - Actions
            • Else - Actions
              • -------- (last unavailable used index) --------
              • Set hsIndex[3] = hsIndex[0]
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • hsTargPointIndex[0] Equal to 0
        • Then - Actions
          • -------- ( increase max active indexes and set to-be dart to that value ) --------
          • Set hsIndex[6] = (hsIndex[6] + 1)
          • Set hsTargPointIndex[0] = hsIndex[6]
        • Else - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • hsTargPointIndex[0] Greater than hsIndex[3]
            • Then - Actions
              • -------- ( shorten max Index to last active index including the upcoming one ) --------
              • Set hsIndex[6] = hsTargPointIndex[0]
            • Else - Actions
              • -------- ( shorten max Index to last active index ) --------
              • Set hsIndex[6] = hsIndex[3]
      • -------- ( targeting ground or unit? ) --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Target unit of ability being cast) Equal to No unit
        • Then - Actions
          • -------- ( no target ) --------
          • Set hsTargPoint[hsTargPointIndex[0]] = (Target point of ability being cast)
          • Set hsTarg[0] = No unit
        • Else - Actions
          • -------- ( unit ) --------
          • Set hsTargPoint[hsTargPointIndex[0]] = (Position of (Target unit of ability being cast))
          • -------- Targ[0] = is used to make all darts target the targeted unit [3] --------
          • Set hsTarg[0] = (Target unit of ability being cast)
      • -------- --------
      • -------- N O W T H E F U N --------
      • -------- --------
      • -------- (keeps track of how many darts use the target point) --------
      • Set hsTargPointCounter[hsTargPointIndex[0]] = hsIndex[5]
      • For each (Integer hsIndex[4]) from 1 to hsIndex[5], do (Actions)
        • Loop - Actions
          • -------- --------
          • -------- C H E C K F O R O P E N I N D E X --------
          • -------- --------
          • Set hsIndex[2] = 0
          • Set hsIndex[3] = 0
          • For each (Integer hsIndex[0]) from 1 to hsIndex[1], do (Actions)
            • Loop - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • hsDart[hsIndex[0]] Equal to No unit
                • Then - Actions
                  • -------- ( available slot! but do we already have one selected? ) --------
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • hsIndex[2] Equal to 0
                    • Then - Actions
                      • Set hsIndex[2] = hsIndex[0]
                    • Else - Actions
                • Else - Actions
                  • -------- ( active slot! ) --------
                  • Set hsIndex[3] = hsIndex[0]
          • -------- ( if no open slots are available, make one ) --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • hsIndex[2] Equal to 0
            • Then - Actions
              • -------- ( increase max active indexes and set to-be dart to that value ) --------
              • Set hsIndex[1] = (hsIndex[1] + 1)
              • Set hsIndex[2] = hsIndex[1]
            • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • hsIndex[2] Greater than hsIndex[3]
                • Then - Actions
                  • -------- ( shorten max Index to last active index including the upcoming one ) --------
                  • Set hsIndex[1] = hsIndex[2]
                • Else - Actions
                  • -------- ( shorten max Index to last active index ) --------
                  • Set hsIndex[1] = hsIndex[3]
          • -------- --------
          • -------- S P E L L D A T A F O R E A C H D A R T --------
          • -------- --------
          • Set hsTarg[hsIndex[2]] = hsTarg[0]
          • Set hsDamage[hsIndex[2]] = hsDamage[0]
          • Set hsTurn[hsIndex[2]] = hsTurn[0]
          • -------- (directs the target point index number for all darts) --------
          • Set hsDartPointIndex[hsIndex[2]] = hsTargPointIndex[0]
          • -------- --------
          • -------- S P E L L A C T I O N S --------
          • -------- --------
          • -------- Real[1] = angle darts will be at initially; divide by how many darts you create. --------
          • Set hstReal[3] = (((360.00 / (Real(hsIndex[5]))) x (Real(hsIndex[4]))) + (Angle from hstPoint[1] to hsTargPoint[hsTargPointIndex[0]]))
          • Set hstPoint[2] = (hstPoint[1] offset by 10.00 towards hstReal[3] degrees)
          • Set hsTurn[hsIndex[2]] = hsTurn[0]
          • Set hsDetect[hsIndex[2]] = hsDetect[0]
          • Set hsCollide[hsIndex[2]] = hsCollide[0]
          • Set hsSpeedMax[hsIndex[2]] = hsSpeedMax[0]
          • Unit - Create 1 Fury Dart for (Owner of (Triggering unit)) at hstPoint[2] facing hstReal[3] degrees
          • Set hsDart[hsIndex[2]] = (Last created unit)
          • -------- This limits how long the dart moves for. If you want the dart to keep going until it hits its target, remove the expiration timer --------
          • Unit - Add a 4.00 second Generic expiration timer to hsDart[hsIndex[2]]
          • -------- L E A K --------
          • Custom script: call RemoveLocation(udg_hstPoint[2])
      • -------- --------
      • -------- L E A K S A R E F U N --------
      • -------- --------
      • Custom script: call RemoveLocation(udg_hstPoint[1])
      • -------- --------
      • Trigger - Turn on hsInterval <gen>



  • hsInterval
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • Set hsIndex[3] = 0
      • For each (Integer hsIndex[0]) from 1 to hsIndex[1], do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • hsDart[hsIndex[0]] Not equal to No unit
            • Then - Actions
              • -------- --------
              • -------- S E T U P D A T A F O R C A L C U L A T I O N S --------
              • -------- --------
              • Set hstReal[1] = (Facing of hsDart[hsIndex[0]])
              • Set hstPoint[1] = (Position of hsDart[hsIndex[0]])
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • hsTarg[hsIndex[0]] Not equal to No unit
                • Then - Actions
                  • -------- ( there is a target ) --------
                  • Set hstPoint[2] = (Position of hsTarg[hsIndex[0]])
                  • Set hstReal[2] = (Angle from hstPoint[1] to hstPoint[2])
                • Else - Actions
                  • -------- ( no target ) --------
                  • Set hstReal[2] = (Angle from hstPoint[1] to hsTargPoint[hsDartPointIndex[hsIndex[0]]])
              • -------- ( calculate new angle ) --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (hstReal[2] - hstReal[1]) Greater than or equal to 180.00
                • Then - Actions
                  • Set hstReal[1] = (hstReal[1] + 360.00)
                • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (hstReal[2] - hstReal[1]) Less than or equal to -180.00
                    • Then - Actions
                      • Set hstReal[2] = (hstReal[2] + 360.00)
                    • Else - Actions
              • Set hstReal[3] = ((hstReal[1] + hstReal[2]) / 2.00)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (hstReal[3] - hstReal[1]) Greater than hsTurn[hsIndex[0]]
                • Then - Actions
                  • -------- ( turning too hard to left ) --------
                  • Set hstReal[3] = (hstReal[1] + hsTurn[hsIndex[0]])
                • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (hstReal[3] - hstReal[1]) Less than (-1.00 x hsTurn[hsIndex[0]])
                    • Then - Actions
                      • -------- ( turning too hard to right ) --------
                      • Set hstReal[3] = (hstReal[1] - hsTurn[hsIndex[0]])
                    • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • hstReal[3] Less than 0.00
                • Then - Actions
                  • Set hstReal[3] = (hstReal[3] + 360.00)
                • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • hstReal[3] Greater than 360.00
                • Then - Actions
                  • Set hstReal[3] = (hstReal[3] - 360.00)
                • Else - Actions
              • -------- ( movement of dart, etc. ) --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • hstReal[1] Less than hstReal[3]
                • Then - Actions
                  • -------- [ DEBUGGING: not dividing by 0 ] --------
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • hstReal[3] Equal to 0.00
                    • Then - Actions
                      • Set hstReal[3] = 0.01
                    • Else - Actions
                  • Set hstReal[4] = (hstReal[1] / hstReal[3])
                • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • hstReal[1] Greater than hstReal[3]
                    • Then - Actions
                      • -------- [ DEBUGGING: not dividing by 0 ] --------
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • hstReal[1] Equal to 0.00
                        • Then - Actions
                          • Set hstReal[1] = 0.01
                        • Else - Actions
                      • Set hstReal[4] = (hstReal[3] / hstReal[1])
                    • Else - Actions
                      • -------- ( dart is not turning, goes max speed ) --------
                      • Set hstReal[4] = 1.00
              • -------- ( limit speed factor to be above 0.50 ) --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • hstReal[4] Less than 0.50
                • Then - Actions
                  • Set hstReal[4] = 0.50
                • Else - Actions
              • -------- ( speed: max speed * factor which is dependant on angle difference ) --------
              • Set hstReal[5] = (hsSpeedMax[hsIndex[0]] x hstReal[4])
              • Set hstPoint[3] = (hstPoint[1] offset by hstReal[5] towards hstReal[3] degrees)
              • Unit - Move hsDart[hsIndex[0]] instantly to hstPoint[3], facing hstReal[3] degrees
              • -------- --------
              • -------- D E T E C T U N I T S I N R A N G E --------
              • -------- --------
              • Set hstUGroup = (Units within hsDetect[hsIndex[0]] of hstPoint[3] matching ((((Matching unit) belongs to an enemy of (Owner of hsDart[hsIndex[0]])) Equal to True) and ((((Matching unit) is alive) Equal to True) and (((Matching unit) is A structure) Not equal to True))))
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • Or - Any (Conditions) are true
                    • Conditions
                      • And - All (Conditions) are true
                        • Conditions
                          • (Number of units in hstUGroup) Greater than 0
                          • (hsTarg[hsIndex[0]] is in hstUGroup) Not equal to True
                      • And - All (Conditions) are true
                        • Conditions
                          • (Number of units in hstUGroup) Greater than 1
                          • (hsTarg[hsIndex[0]] is in hstUGroup) Equal to True
                • Then - Actions
                  • -------- ( find closest unit ) --------
                  • Set hstReal[6] = (hsDetect[hsIndex[0]] + 1.00)
                  • Unit Group - Pick every unit in hstUGroup and do (Actions)
                    • Loop - Actions
                      • Set hstPoint[4] = (Position of (Picked unit))
                      • Set hstReal[7] = (Distance between hstPoint[3] and hstPoint[4])
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • hstReal[7] Less than hstReal[6]
                        • Then - Actions
                          • Set hstReal[6] = hstReal[7]
                          • Set hsTarg[hsIndex[0]] = (Picked unit)
                        • Else - Actions
                      • -------- --------
                      • -------- L E A K S B E G O N E --------
                      • -------- --------
                      • Custom script: call RemoveLocation(udg_hstPoint[4])
                • Else - Actions
              • -------- ( collision/reach target point ) --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • hsTarg[hsIndex[0]] Not equal to No unit
                  • (hsTarg[hsIndex[0]] is dead) Equal to True
                • Then - Actions
                  • Set hsTarg[hsIndex[0]] = No unit
                • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • hsTarg[hsIndex[0]] Not equal to No unit
                • Then - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Distance between hstPoint[3] and hstPoint[2]) Less than or equal to hsCollide[hsIndex[0]]
                    • Then - Actions
                      • Unit - Cause hsDart[hsIndex[0]] to damage hsTarg[hsIndex[0]], dealing hsDamage[hsIndex[0]] damage of attack type Chaos and damage type Universal
                      • Special Effect - Create a special effect at hstPoint[2] using Abilities\Weapons\HydraliskImpact\HydraliskImpact.mdl
                      • Special Effect - Destroy (Last created special effect)
                      • Special Effect - Create a special effect at hstPoint[2] using Abilities\Weapons\SpiritOfVengeanceMissile\SpiritOfVengeanceMissile.mdl
                      • Special Effect - Destroy (Last created special effect)
                      • Unit - Remove hsDart[hsIndex[0]] from the game
                      • Set hsTargPointCounter[hsDartPointIndex[hsIndex[0]]] = (hsTargPointCounter[hsDartPointIndex[hsIndex[0]]] - 1)
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • hsTargPointCounter[hsDartPointIndex[hsIndex[0]]] Equal to 0
                        • Then - Actions
                          • -------- (the target point is no longer used by any other dart) --------
                          • Custom script: call RemoveLocation(udg_hsTargPoint[udg_hsDartPointIndex[udg_hsIndex[0]]])
                        • Else - Actions
                      • Set hsDart[hsIndex[0]] = No unit
                      • Set hsTarg[hsIndex[0]] = No unit
                    • Else - Actions
                  • -------- L E A K --------
                  • Custom script: call RemoveLocation(udg_hstPoint[2])
                • Else - Actions
                  • -------- ( reached original target position ) --------
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Distance between hstPoint[3] and hsTargPoint[hsDartPointIndex[hsIndex[0]]]) Less than or equal to hsCollide[hsIndex[0]]
                    • Then - Actions
                      • Special Effect - Create a special effect at hstPoint[3] using Abilities\Weapons\SpiritOfVengeanceMissile\SpiritOfVengeanceMissile.mdl
                      • Special Effect - Destroy (Last created special effect)
                      • Set hsTargPointCounter[hsDartPointIndex[hsIndex[0]]] = (hsTargPointCounter[hsDartPointIndex[hsIndex[0]]] - 1)
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • hsTargPointCounter[hsDartPointIndex[hsIndex[0]]] Equal to 0
                        • Then - Actions
                          • -------- (the target point is no longer used by any other dart) --------
                          • Custom script: call RemoveLocation(udg_hsTargPoint[udg_hsDartPointIndex[udg_hsIndex[0]]])
                        • Else - Actions
                      • Unit - Remove hsDart[hsIndex[0]] from the game
                      • Set hsDart[hsIndex[0]] = No unit
                    • Else - Actions
              • -------- ( dart went out of bounds ) --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • hsDart[hsIndex[0]] Not equal to No unit
                  • Or - Any (Conditions) are true
                    • Conditions
                      • (hsDart[hsIndex[0]] is dead) Equal to True
                      • ((Playable map area) contains hstPoint[3]) Not equal to True
                • Then - Actions
                  • Special Effect - Create a special effect at hstPoint[3] using Abilities\Weapons\SpiritOfVengeanceMissile\SpiritOfVengeanceMissile.mdl
                  • Special Effect - Destroy (Last created special effect)
                  • Set hsTargPointCounter[hsDartPointIndex[hsIndex[0]]] = (hsTargPointCounter[hsDartPointIndex[hsIndex[0]]] - 1)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • hsTargPointCounter[hsDartPointIndex[hsIndex[0]]] Equal to 0
                    • Then - Actions
                      • -------- (the target point is no longer used by any other dart) --------
                      • Custom script: call RemoveLocation(udg_hsTargPoint[udg_hsDartPointIndex[udg_hsIndex[0]]])
                    • Else - Actions
                  • Unit - Remove hsDart[hsIndex[0]] from the game
                  • Set hsDart[hsIndex[0]] = No unit
                • Else - Actions
              • -------- --------
              • -------- L E A K S B E G O N E --------
              • -------- --------
              • Custom script: call RemoveLocation(udg_hstPoint[1])
              • Custom script: call RemoveLocation(udg_hstPoint[3])
              • Custom script: call DestroyGroup(udg_hstUGroup)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • hsDart[hsIndex[0]] Not equal to No unit
                • Then - Actions
                  • -------- ( active slot! ) --------
                  • Set hsIndex[3] = hsIndex[0]
                • Else - Actions
            • Else - Actions
      • -------- --------
      • -------- U P D A T E A R R A Y O F A C T I V E D A R T S --------
      • -------- ( shorten max Index to last active index ) --------
      • Set hsIndex[1] = hsIndex[3]
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • hsIndex[3] Equal to 0
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions


Keywords:
Homing, missile, arrow, awesome, Fury Darts, fury, dart
Contents

Fury Darts (Map)

Reviews
15:02, 9th Oct 2009 The_Reborn_Devil: I really liked the effects and the motion of the darts in this spell! The triggering looked also good. It started to lag a little when I had 60 darts, but I don't think there's much you could do about that...

Moderator

M

Moderator

15:02, 9th Oct 2009
The_Reborn_Devil:

I really liked the effects and the motion of the darts in this spell!
The triggering looked also good.
It started to lag a little when I had 60 darts, but I don't think there's much you could do about that unless you make it in vJass.
Approved.
I give this spell the rating Recommended.

It would be nice if you made it easier for people to change the amount of darts though. Make a global or something.
 
Level 11
Joined
Jul 2, 2008
Messages
601
Absolutely clean coding, accompanied with useful custom comments, leakles and MUI.
The spell description is good also, the only thing I'd like to suggest is increasing the speed of the projectiles a bit and adding some effect on collising with units. E.g. Dark Arrow death or smth like that. You got it ;)
 
Level 13
Joined
Mar 6, 2008
Messages
525
Absolutely clean coding, accompanied with useful custom comments, leakles and MUI.
The spell description is good also, the only thing I'd like to suggest is increasing the speed of the projectiles a bit and adding some effect on collising with units. E.g. Dark Arrow death or smth like that. You got it ;)

my review:
-LeakLESS :fp:5/5
-Fully MUI :fp:5/5
-Index is great :fp:5/5
-Good description :fp:5/5
-Cool spell :fp:5/5

Ofc it is 5/5!:thumbs_up:
 
Level 7
Joined
Nov 4, 2006
Messages
153
Thanks everyone. I've increased the dart speeds and added code here.

Note: There is a pretty rare occurance where a dart would get moved to the center of the map (or somewhere like that). So far, I have only seen it when I mass cast like 40 darts. I'll fix it if I find the problem. -- FIXED hopefully
 
Last edited:
Level 2
Joined
Oct 5, 2009
Messages
30
there is a slight bugg in this spell, and i was wondering if its fixable :p

whenever i cast the darts by a boundary wall .. it never dis appears, even in this test map.

it would be appreciated if this could be fixed cause wanna use this spell on my map :D .. i will give credit
 
Level 25
Joined
Jun 5, 2008
Messages
2,572
Adding blood effects to unit's hit by the darts would be nice(some subtle ones, not to much blood).

EDIT:

By far one of the best GUI spells in a long time, now this is a spell that deserves 5/5, idea is a pure win and fresh, not just a normal one :)

[offtop]

The arcing is smooth and eyeapealing, to bad most people don't use it in spells since it looks damn good.
 
Top