• Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
  • Read Evilhog's interview with Gregory Alper, the original composer of the music for WarCraft: Orcs & Humans 🔗Click here to read the full interview.

Dimension Blaster v 1.2

Level 1: Sends a green orb to the target point. No matter where the target point is the orb travels the distance in 0.75 second. When it reaches it's destination the orb damages and heals every enemy and friendly unit by 75 and switches their positions. Every unit caught within the Dimension Blaster is slowed or boosted by 20% depending on if it's enemy or not.
Level 2: Sends a green orb to the target point. No matter where the target point is the orb travels the distance in 1 second. When it reaches it's destination the orb damages and heals every enemy and friendly unit by 100 and switches their positions. Every unit caught within the Dimension Blaster is slowed or boosted by 40% depending on if it's enemy or not.
Level 3: Sends a green orb to the target point. No matter where the target point is the orb travels the distance in 1.25 second. When it reaches it's destination the orb damages and heals every enemy and friendly unit by 125 and switches their positions. Every unit caught within the Dimension Blaster is slowed or boosted by 60% depending on if it's enemy or not.

How to import:
  1. First copy the dummy units
  2. then copy the buffs and the abilities
  3. finally copy the triggers and make sure that the auto generate variables option in the WE is on.
  4. After these you should check the copied triggers. After copy it could be changed.

  • Dimension Blaster
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Dimension Blaster
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • DBHas[DBLastRecycled] Equal to True
        • Then - Actions
          • Set DBMax = (DBMax + 1)
          • Set DBIndex = DBMax
        • Else - Actions
          • Set DBIndex = DBLastRecycled
          • Set DBLastRecycled = DBRecycledList[DBLastRecycled]
      • Custom script: set udg_DBDummyGroup[udg_DBMax] = CreateGroup()
      • Set DBCaster[DBIndex] = (Triggering unit)
      • Set DBCasterPoint[DBIndex] = (Position of DBCaster[DBIndex])
      • Set DBTargetPoint[DBIndex] = (Target point of ability being cast)
      • Set DBMaxDistance[DBIndex] = (Distance between DBCasterPoint[DBIndex] and DBTargetPoint[DBIndex])
      • Set DBDistance[DBIndex] = 0.00
      • Set DBLevel[DBIndex] = (Level of Dimension Blaster for DBCaster[DBIndex])
      • Set DBTime[DBIndex] = (0.50 + (0.25 x (Real(DBLevel[DBIndex]))))
      • Set DBMove[DBIndex] = (DBMaxDistance[DBIndex] / (DBTime[DBIndex] / 0.03))
      • Set DBAoE[DBIndex] = (250.00 + (50.00 x (Real(DBLevel[DBIndex]))))
      • Set DBDamage[DBIndex] = (50.00 + (25.00 x (Real(DBLevel[DBIndex]))))
      • Set DBAngle[DBIndex] = (Angle from DBCasterPoint[DBIndex] to DBTargetPoint[DBIndex])
      • Set DBHas[DBIndex] = True
      • Set DBHeight[DBIndex] = 0.00
      • Set DBHeightInc[DBIndex] = 30.00
      • Set DBCount = (DBCount + 1)
      • Unit - Create 1 Orb for (Triggering player) at DBCasterPoint[DBIndex] facing Default building facing degrees
      • Set DBOrb[DBIndex] = (Last created unit)
      • For each (Integer A) from 1 to 5, do (Actions)
        • Loop - Actions
          • Set TempPoint = (DBTargetPoint[DBIndex] offset by DBAoE[DBIndex] towards (72.00 x (Real((Integer A)))) degrees)
          • Unit - Create 1 Target Painter for (Triggering player) at TempPoint facing Default building facing degrees
          • Unit Group - Add (Last created unit) to DBDummyGroup[DBIndex]
          • Custom script: call RemoveLocation (udg_TempPoint)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Dimension Blaster Loop <gen> is on) Equal to False
        • Then - Actions
          • Trigger - Turn on Dimension Blaster Loop <gen>
        • Else - Actions
  • Dimension Blaster Loop
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • For each (Integer DBInteger) from 0 to DBMax, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • DBHas[DBInteger] Equal to True
            • Then - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • DBDistance[DBInteger] Less than DBMaxDistance[DBInteger]
                • Then - Actions
                  • Set DBDistance[DBInteger] = (DBDistance[DBInteger] + DBMove[DBInteger])
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • DBDistance[DBInteger] Less than (DBMaxDistance[DBInteger] / 2.00)
                    • Then - Actions
                      • Set DBHeight[DBIndex] = (DBHeight[DBInteger] + DBHeightInc[DBInteger])
                      • Set DBHeightInc[DBInteger] = (DBHeightInc[DBInteger] - 0.60)
                    • Else - Actions
                      • Set DBHeight[DBIndex] = (DBHeight[DBInteger] - DBHeightInc[DBInteger])
                      • Set DBHeightInc[DBInteger] = (DBHeightInc[DBInteger] + 0.60)
                  • Set TempPoint = (DBCasterPoint[DBInteger] offset by DBDistance[DBInteger] towards DBAngle[DBInteger] degrees)
                  • Unit - Move DBOrb[DBInteger] instantly to TempPoint
                  • Animation - Change DBOrb[DBInteger] flying height to DBHeight[DBInteger] at 0.00
                  • Custom script: call RemoveLocation (udg_TempPoint)
                  • Unit Group - Pick every unit in DBDummyGroup[DBInteger] and do (Actions)
                    • Loop - Actions
                      • Set TempPoint = (Position of (Picked unit))
                      • Set TempPoint2 = (DBTargetPoint[DBInteger] offset by DBAoE[DBInteger] towards ((Angle from DBTargetPoint[DBInteger] to TempPoint) + 7.50) degrees)
                      • Unit - Move (Picked unit) instantly to TempPoint2
                      • Custom script: call RemoveLocation (udg_TempPoint)
                      • Custom script: call RemoveLocation (udg_TempPoint2)
                • Else - Actions
                  • Unit - Create 1 Explosion for (Owner of DBCaster[DBInteger]) at DBTargetPoint[DBInteger] facing Default building facing degrees
                  • Unit - Add a 1.50 second Generic expiration timer to (Last created unit)
                  • Custom script: set bj_wantDestroyGroup = true
                  • Unit Group - Pick every unit in (Units within DBAoE[DBInteger] of DBTargetPoint[DBInteger] matching ((((Matching unit) is A structure) Equal to False) and ((((Matching unit) is Magic Immune) Equal to False) and (((Matching unit) is alive) Equal to True)))) and do (Actions)
                    • Loop - Actions
                      • Set TempPoint = (Position of (Picked unit))
                      • Set DBTempReal[1] = (Distance between DBTargetPoint[DBInteger] and TempPoint)
                      • Set DBTempReal[2] = (Angle from DBTargetPoint[DBInteger] to TempPoint)
                      • Set TempPoint2 = (DBTargetPoint[DBInteger] offset by DBTempReal[1] towards (DBTempReal[2] + 180.00) degrees)
                      • Unit - Create 1 Explosion Mini for (Owner of DBCaster[DBInteger]) at TempPoint facing Default building facing degrees
                      • Unit - Set level of Dimension Blaster (Slow) for (Last created unit) to DBLevel[DBInteger]
                      • Unit - Set level of Dimension Blaster (Speed) for (Last created unit) to DBLevel[DBInteger]
                      • Unit - Add a 1.50 second Generic expiration timer to (Last created unit)
                      • Unit - Move (Picked unit) instantly to TempPoint2
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • ((Picked unit) belongs to an ally of (Owner of DBCaster[DBInteger])) Equal to True
                        • Then - Actions
                          • Unit - Set life of (Picked unit) to ((Life of (Picked unit)) + DBDamage[DBInteger])
                        • Else - Actions
                          • Unit - Cause DBCaster[DBInteger] to damage (Picked unit), dealing DBDamage[DBInteger] damage of attack type Chaos and damage type Normal
                      • Custom script: call RemoveLocation (udg_TempPoint)
                      • Custom script: call RemoveLocation (udg_TempPoint2)
                  • Unit - Kill DBOrb[DBInteger]
                  • Unit Group - Pick every unit in DBDummyGroup[DBInteger] and do (Actions)
                    • Loop - Actions
                      • Unit - Remove (Picked unit) from the game
                  • Custom script: call DestroyGroup (udg_DBDummyGroup[udg_DBInteger])
                  • Set DBHas[DBInteger] = False
                  • Set DBCount = (DBCount - 1)
                  • Custom script: call RemoveLocation (udg_DBTargetPoint[udg_DBInteger])
                  • Custom script: call RemoveLocation (udg_DBCasterPoint[udg_DBInteger])
                  • Set DBRecycledList[DBInteger] = DBLastRecycled
                  • Set DBLastRecycled = DBInteger
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • DBCount Equal to 0
                    • Then - Actions
                      • Set DBRecycledList[DBInteger] = 0
                      • Set DBLastRecycled = 0
                      • Set DBMax = 0
                      • Trigger - Turn off (This trigger)
                    • Else - Actions
            • Else - Actions
v1.2
fixed system bug
v1.1
added init trigger configurables
  • damage type
  • travel time
  • area of effect
  • damage
fixed target painter orbs bug
rewritten indexing
changed/removed variables
v1.0
Made the spell


Keywords:
orb, wave, send, damage, heal, swap, switch, kill, save, green, magic, pysic,
Contents

Just another Warcraft III map (Map)

Reviews
04:14, 18th Jun 2011 Maker: Approved.
Level 37
Joined
Mar 6, 2006
Messages
9,243
I think the visuals are ok and there's some originality to be found here.

First you set the variable to false, then loop through all indexes and check whether the variable is false.
  • Dimension Blaster
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Dimension Blaster
    • Actions
      • Set DBGet = False
      • For each (Integer A) from 1 to DBMax, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • DBGet Equal to False
At 0 is instant.
  • Animation - Change DBOrb[DBInteger] flying height to DBHeight[DBInteger] at 99999.00
Are the projectiles supposed to give vision? They could be created for neutral passive.

Move this
  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
    • If - Conditions
      • DBCount Equal to 0
    • Then - Actions
      • Trigger - Turn off (This trigger)
    • Else - Actions
to right after this
Set DBCount = (DBCount - 1)
So many less function calls that way.

Do the init triggers settings belong to the spell or not? Without them the spell won't work. Or is that recycling thing in the beginning of the trigger bugged?

The spell is not easily configurable, and all spells should be according to spell rules. Make a configuration trigger or something.

You don't destroy the DBTempGroup.

It seems that DBMax is never subtracted from. So if there once has been 3 instances of the spell running, the loop will always loop from 1 to 3, even if there's only one instance running.
 
Level 22
Joined
Nov 14, 2008
Messages
3,256
  • (Owner of DBCaster[DBIndex])
Should be Triggering Player. In the cast trigger.

Why are the temporary point variables arrayed? And why are they prefixed? Use something common like TempPoint or TempLoc and make as many as you need. No need for the variable to be arrayed.

TempReal variables? That was something new. Same as above.

I think the attacktype and damagetype should be configurable too.
 
Level 16
Joined
Jun 24, 2009
Messages
1,409
I think the visuals are ok and there's some originality to be found here.

First you set the variable to false, then loop through all indexes and check whether the variable is false.
  • Dimension Blaster
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Dimension Blaster
    • Actions
      • Set DBGet = False
      • For each (Integer A) from 1 to DBMax, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • DBGet Equal to False
At 0 is instant.
  • Animation - Change DBOrb[DBInteger] flying height to DBHeight[DBInteger] at 99999.00
Are the projectiles supposed to give vision? They could be created for neutral passive.

Move this
  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
    • If - Conditions
      • DBCount Equal to 0
    • Then - Actions
      • Trigger - Turn off (This trigger)
    • Else - Actions
to right after this
Set DBCount = (DBCount - 1)
So many less function calls that way.

Do the init triggers settings belong to the spell or not? Without them the spell won't work. Or is that recycling thing in the beginning of the trigger bugged?

The spell is not easily configurable, and all spells should be according to spell rules. Make a configuration trigger or something.

You don't destroy the DBTempGroup.

It seems that DBMax is never subtracted from. So if there once has been 3 instances of the spell running, the loop will always loop from 1 to 3, even if there's only one instance running.

well glad to hear this :)

At the loop trigger this part sets it true if it found a free index slot so it won't use the last free slot
  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
    • If - Conditions
      • DBGet Equal to False
    • Then - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • DBRecycle[(Integer A)] Equal to True
        • Then - Actions
          • Set DBIndex = (Integer A)
          • Set DBGet = True
        • Else - Actions
the projectiles are to show the current AoE but the vision isn't necesseary

well it's not important because at the variables you can change the boolean's default value to True and the Integers are default 0 and you can insert the custom script next to the index recycling at the spell trigger ~.~

what do you mean about "The spell is not easily configurable, and all spells should be according to spell rules." ? you just have to modify the values given

heh i forgot to clear that leak ~.~

i know that my index recycling system isn't the best but it's mine and unique ~.~ don't worry, i'll improve my sys. soon

  • (Owner of DBCaster[DBIndex])
Should be Triggering Player. In the cast trigger.

Why are the temporary point variables arrayed? And why are they prefixed? Use something common like TempPoint or TempLoc and make as many as you need. No need for the variable to be arrayed.

TempReal variables? That was something new. Same as above.

I think the attacktype and damagetype should be configurable too.

what's the problem with arrays? ~.~

they are prefixed because some people use the spells in their map and sometimes the same named variables can cause problems
example: if i use the point variable just as TempPoint with an array and the map already have this variable but without array it can cause errors

i just wanted to use as less variable as possible
 
they are prefixed because some people use the spells in their map and sometimes the same named variables can cause problems
example: if i use the point variable just as TempPoint with an array and the map already have this variable but without array it can cause errors

You're like one of the few people who actually get me :D

I agree. I always prefix my variables because i don't wanna cause problems with other variables in maps that might have the same name.

All you other hivers except him are unable to perceive that.

You've made my day man! Your spell is MUI and leakless (i think ;p), so...

5/5
 
Level 22
Joined
Nov 14, 2008
Messages
3,256
I agree. I always prefix my variables because i don't wanna cause problems with other variables in maps that might have the same name.

All you other hivers except him are unable to perceive that.

They won't as WC3 is one threaded and as long as you destroy the location within the current function (and not passes it on the next interval or waits) it will not bug. And we all do get it. It's not that we're stupid, we're just making the maps your using with these spells perform better. If that's bad, please report this post.
 
  • -------- Configurables on each level --------
  • -------- Level 1 --------
  • Set AoE[1] = 300.00
  • Set DamageType[1] = Chaos
  • Set Damage_and_Heal[1] = 75.00
  • Set TravelTime[1] = 0.75
  • -------- Level 2 --------
  • Set AoE[2] = 350.00
  • Set DamageType[2] = Chaos
  • Set Damage_and_Heal[2] = 100.00
  • Set TravelTime[2] = 1.00
  • -------- Level 3 --------
  • Set AoE[3] = 400.00
  • Set DamageType[3] = Chaos
  • Set Damage_and_Heal[3] = 125.00
  • Set TravelTime[3] = 1.25
It may be good to make the spell configurable on each level,
but I think it would be better if you use formulas to calculate
damage and AoE

For Damage: 50.00 + (Level * 25.00)
For AoE: 250.00 + (Level * 50.00)

For Damage type, don't use an array since damage type
rarely changes per level :p

For Travel time: 0.50 + (Level * 0.25)
 
Top