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

Breath of Fire 2.00

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

[/trigger]


Keywords:
dragon,t,a,l,0,n,fire,breath,natsu,fairy,tail,wind,wc3,wc,w,epic,awesome,fun,spell,line,dps,sfx,lag
Contents

BoF 2.00 (Map)

Reviews
10:42, 20th Sep 2014 TriggerHappy: Simple, leakless and MUI.

Moderator

M

Moderator

10:42, 20th Sep 2014
TriggerHappy:

Simple, leakless and MUI.
 
You forgot to put this in a variable

Special Effect - Create a special effect at FB_P2 using Abilities\Weapons\FireBallMissile\FireBallMissile.mdl

Nope didn't forget, an extra variable isn't required for that this time because the spell is all about that one sfx. Might change that later though.

Good idea Mythic, will fix it soon death.
 

Kazeon

Hosted Project: EC
Level 33
Joined
Oct 12, 2011
Messages
3,449
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.
Invalid. ^)^

@NestahHolic

EDIT:
This freezes my PC when I pressed ESC :/
 
Last edited:
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.

It works still in a line like I wanted, I don't know what you meant by the rest of that though.

  • Set FB_DamageType = Fire
Warcraft 3 has no system damage such as Titan Quest or Diablo
Damage type fire,cold,lightning.poison etc. = MAGIC
Absolutely no difference

http://www.wc3c.net/showpost.php?p=1030046&postcount=19

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.


Invalid. ^)^

@NestahHolic

EDIT:
This freezes my PC when I pressed ESC :/

Yeah I can't figure out how to reduce the lag, it is the fireball sfx itself I am presuming.
 
Top