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!
Special thanks goes out to Dalvengyr and Mythic as well you for reading and hopefully using my spell. =)
So I was watching some anime and then played this one map with lame dragons and then got inspired to make this. Nobody makes a proper dragons breath of fire... =(
So here it is, a near lag-less one that doesn't even use units. Hope someone finds this useful, do be warned though.... Don't let the spell last longer then four seconds. You might face lag problems due to Blizzard's failure of a game engine.
You can change how long the spell lasts in object editor ability category in custom spells then find the spell, should only be one and change how long it channels for to whatever you want.
The source of the lag is likely the SFX so be careful if your using a laggier SFX to replace the current one.
[trigger=Config]Events
Map initialization
Conditions
Actions
-------- This is the attack type --------
Set FB_AttackType = Spells
-------- This is the damage type --------
Set FB_DamageType = Fire
-------- This is the order of the spell your using in order to start the system --------
Set FB_Order = flamestrike
-------- This is the ability --------
Set FB_Ability = Breath of Fire
Set FB_sfx = Abilities\Weapons\FireBallMissile\FireBallMissile.mdl
Set Burningsfx = Abilities\Spells\Human\FlameStrike\FlameStrikeEmbers.mdl
[/trigger]
[trigger=Spell]
Events
Unit - A unit Starts the effect of an ability
Conditions
(Ability being cast) Equal to FB_Ability
Actions
Set FB_INDEX = (FB_INDEX + 1)
Set FB_Counter[FB_INDEX] = FB_INDEX
-------- The Caster --------
Set FB_caster[FB_INDEX] = (Triggering unit)
-------- Setting the target point where you pointed --------
Set FB_P = (Position of FB_caster[FB_INDEX])
Set FB_P2 = (Target point of ability being cast)
Set FB_EndAngle[FB_INDEX] = (Angle from FB_P to FB_P2)
Custom script: call RemoveLocation(udg_FB_P)
Custom script: call RemoveLocation(udg_FB_P2)
-------- This is the damage per 0.03 seconds --------
Set FB_Damage[FB_INDEX] = (2.00 x (Real((Level of FB_Ability for FB_caster[FB_INDEX]))))
-------- This is how long units will be on fire for --------
-------- 0.10 is the timer so number multiplied by that. Current: 24*0.10 = 2.4 seconds --------
Set Burntime[FB_INDEX] = 24
-------- This is the damage units get burned for per 0.10 seconds --------
Set Burn_DMG[FB_INDEX] = (3.00 x (Real((Level of FB_Ability for FB_caster[FB_INDEX]))))
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
FB_INDEX Equal to 1
Then - Actions
Trigger - Turn on Breath of fire run <gen>
Else - Actions
[/trigger]
[trigger=running]
Events
Time - Every 0.05 seconds of game time
Conditions
Actions
For each (Integer FB_LOOP) from 1 to FB_INDEX, do (Actions)
Loop - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Current order of FB_caster[FB_LOOP]) Equal to (Order(FB_Order))
Then - Actions
For each (Integer FB_Counter[FB_LOOP]) from 1 to FB_Max[FB_LOOP], do (Actions)
Loop - Actions
Set FB_P = (Position of FB_caster[FB_LOOP])
Set FB_P2 = (FB_P offset by (32.00 x (Real(FB_Counter[FB_LOOP]))) towards FB_EndAngle[FB_LOOP] degrees)
Special Effect - Create a special effect at FB_P2 using FB_sfx
Special Effect - Destroy (Last created special effect)
Set FB_Group = (Units within 32.00 of FB_P2)
Unit Group - Pick every unit in FB_Group and do (Actions)
Loop - Actions
Set FB_EnumU = (Picked unit)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(FB_EnumU belongs to an enemy of (Owner of FB_caster[FB_LOOP])) Equal to True
(FB_EnumU is dead) Not equal to True
Then - Actions
Unit - Cause FB_caster[FB_LOOP] to damage FB_EnumU, dealing FB_Damage[FB_LOOP] damage of attack type FB_AttackType and damage type FB_DamageType
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(FB_EnumU is in FB_BurnGroup) Not equal to True
Then - Actions
Set Burndex = (Burndex + 1)
Set Burntime[Burndex] = Burntime[FB_LOOP]
Set Burn_caster[Burndex] = FB_caster[FB_LOOP]
Set Burn_DMG[Burndex] = Burn_DMG[FB_LOOP]
Unit Group - Add FB_EnumU to FB_BurnGroup
Set burnu[Burndex] = FB_EnumU
Special Effect - Create a special effect attached to the chest of FB_EnumU using Burningsfx
Set burnsfx[Burndex] = (Last created special effect)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Burndex Equal to 1
Then - Actions
Trigger - Turn on Burn DoT <gen>
Else - Actions
Else - Actions
Else - Actions
Set FB_EnumU = No unit
Custom script: call DestroyGroup(udg_FB_Group)
Custom script: call RemoveLocation(udg_FB_P)
Custom script: call RemoveLocation(udg_FB_P2)
Set FB_Max[FB_LOOP] = (FB_Max[FB_LOOP] + 1)
Else - Actions
Set FB_Max[FB_LOOP] = FB_Max[FB_INDEX]
Set FB_Max[FB_INDEX] = 0
Set FB_EndAngle[FB_LOOP] = FB_EndAngle[FB_INDEX]
Set FB_caster[FB_LOOP] = FB_caster[FB_INDEX]
Set FB_caster[FB_INDEX] = No unit
Set FB_INDEX = (FB_INDEX - 1)
Set FB_LOOP = (FB_LOOP - 1)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
FB_INDEX Equal to 0
Then - Actions
Trigger - Turn off (This trigger)
Else - Actions
[/trigger]
[trigger=DoT]
Events
Time - Every 0.10 seconds of game time
Conditions
Actions
For each (Integer Burnloop) from 1 to Burndex, do (Actions)
Loop - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Burntime[Burnloop] Greater than 0
Then - Actions
Unit - Cause Burn_caster[Burnloop] to damage burnu[Burnloop], dealing Burn_DMG[Burnloop] damage of attack type FB_AttackType and damage type FB_DamageType
Set Burntime[Burnloop] = (Burntime[Burnloop] - 1)
Else - Actions
Unit Group - Remove burnu[Burnloop] from FB_BurnGroup
Special Effect - Destroy burnsfx[Burnloop]
Set burnsfx[Burnloop] = burnsfx[Burndex]
Set Burn_caster[Burnloop] = Burn_caster[Burndex]
Set Burn_caster[Burndex] = No unit
Set burnu[Burnloop] = burnu[Burndex]
Set burnu[Burndex] = No unit
Set Burntime[Burnloop] = Burntime[Burndex]
Set Burndex = (Burndex - 1)
Set Burnloop = (Burnloop - 1)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Burndex Equal to 0
Then - Actions
Trigger - Turn off (This trigger)
Else - Actions
I'm curious though, since it checks circle by circle (32). What about the space between each circles' sides? I suggest you create the group once per loop, then add units to it while reducing the distance between each circle.
You don't need two temporary loc variables, you have already saved the target loc. Just save the angle to the cast point, then calculate the current node's loc offset: multiply current index by distance-per-missile.
Don't let the spell last longer then four seconds. You might face lag problems due to Blizzard's failure of a game engine.
I'm curious though, since it checks circle by circle (32). What about the space between each circles' sides? I suggest you create the group once per loop, then add units to it while reducing the distance between each circle.
You don't need two temporary loc variables, you have already saved the target loc. Just save the angle to the cast point, then calculate the current node's loc offset: multiply current index by distance-per-missile.
There is no spell description and it doesn't do what I would expect it to do at all. I'm not going to give 0 stars just based on this since it might be a useful spell but it's confusing right now.
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.