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!
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:
First copy the dummy units
then copy the buffs and the abilities
finally copy the triggers and make sure that the auto generate variables option in the WE is on.
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]
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
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.
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.
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.
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
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.
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
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
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.
I often see that the TempPoint variable is already there but sometimes it's arrayed and sometimes not. So yes I just don't want to cause any problem if someone use tha spell.
looks cool... and the idea is really nice... just do what Maker said...
the tooltip on the description is a bit long... maybe combine the similar things and just enumerate what changes every level, just like how they do it on the default wc3 abilities?
just use Base Damage and damage per level... coz the normal things that people use... I don't think its good to sacrifice performance (talking about getting rid of those arrays) for this matter...
just use Base Damage and damage per level... coz the normal things that people use... I don't think its good to sacrifice performance (talking about getting rid of those arrays) for this matter...
This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
By continuing to use this site, you are consenting to our use of cookies.