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

Fiery Damnation v1.31 Gui and Jass

-Spell is gui, mui, epic
-This one's made by myself and therefore, please give credits if you like it and want to use it.

Fiery Damnation
BTNFireForTheCannon.png
Shoots out three huge firebolts which explode, dealing damage while moving and on impact to all nearby enemy units.
The ground starts to burn for a certain time damaging all enemies who get near the flames

GUI:v1.01:
~Changed the If/Then/Else
~Added deatils to the tooltip

v1.11:
~Due to heavy drama, I deleted two lines of the third trigger

v1.20 Seeing the firetrace as a massive effectspam, I just removed it and modified some tiny bits of the code

JASS: v1.01:
Corrected some stuff

v1.02:
Meeeeeh.. here you got your constant

v1.10:
Rewrote some stuff, merged the two scopes

v1.11:
Rewrote MOAR


JASS:
//==Fiery Damnation v1.31==
//Credits got to: HINDYhat for teaching jass :p
//Needs jngp
//2oo9 by Squiggy

scope FieryDamnation initializer Init                                     //Yea, the first scope handles the dummycreation and the order to move forward
    
    globals                                                                 //I've seperated the globals into two blocks - the first one's important to modify the spell
        private constant integer SPELLID = 'A001'                           //We set up the constants for the spellid, the dummyability, the angle in which the dummies appear
        private constant integer ABILITYID = 'A000'                         //and the dummyid as well as the path to the effect which is done when casting
        private constant integer DUMMYID = 'n000'
        private constant integer DUMMY2ID = 'n001'
        private constant string EFFPATH = "Abilities\\Weapons\\DemolisherFireMissile\\DemolisherFireMissile.mdl"
        private constant string EFFPATH2 = "Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.mdl"
        private constant real LIFEFACTOR = 5
    endglobals
    
    globals
        private player p
    endglobals
    
    private function Conditions takes nothing returns boolean
        return GetSpellAbilityId() == SPELLID                                //First, check which ability is cast
    endfunction
    
    private function Conditions2 takes nothing returns boolean
        return GetUnitTypeId(GetTriggerUnit()) == DUMMYID            //We check which unit dies
    endfunction
    
    private function Actions takes nothing returns nothing
        local unit caster = GetTriggerUnit()
        local real expTime
        local real x = GetUnitX(caster)
        local real y = GetUnitY(caster)
        local real facing = GetUnitFacing(caster)-30                        //Here, we set the angle in which to first dummy should move to the caster's - 30
        local real dx
        local real dy
        local unit u
        local integer I = 0
        local location targloc = GetSpellTargetLoc()        
        set p = GetOwningPlayer(caster)
        set dx = GetLocationX(targloc)-x
        set dy = GetLocationY(targloc)-y
        set expTime = SquareRoot(dx * dx + dy * dy)/425
        loop
            exitwhen I == 3
            set dx = x+700*Cos((facing+I*30)*bj_DEGTORAD)                   //Here we set up the targetpoint
            set dy = y+700*Sin((facing+I*30)*bj_DEGTORAD)
            set u = CreateUnit(p, DUMMYID, x, y, facing+I*30)                //The dummy
            call IssuePointOrder(u, "move", dx, dy)
            call UnitApplyTimedLife(u, 'BTLF', expTime)
            call SetUnitAbilityLevel(u, ABILITYID, GetUnitAbilityLevel(caster, SPELLID))    //Now we align the dummy's immolation ability to the caster's level of the ability
            call DestroyEffect(AddSpecialEffect(EFFPATH,x, y))              //And last, some effect
            set I = I + 1
        endloop
        set caster = null
        call RemoveLocation(targloc)
        set targloc = null
        set u = null
    endfunction
    
    private function Actions2 takes nothing returns nothing                     //Now the second actions-function is to handle everything what happens when the dummy dies
        local unit u = GetTriggerUnit()
        local real x = GetUnitX(u)
        local real y = GetUnitY(u)
        local real exptimer = GetUnitAbilityLevel(u, ABILITYID)                 //We set the timer of the dummy to lvl    
        set u = CreateUnit(GetOwningPlayer(u), DUMMY2ID, x, y, 90)              //We spawn the new dummy
        call UnitApplyTimedLife(u, 'BTLF', exptimer*(LIFEFACTOR))               //And now we attach the timer to it
        call DestroyEffect(AddSpecialEffect(EFFPATH2,x, y))                      //It's ordered to cast 'fan of knives' 
        set u = null
    endfunction
    
    private function Init takes nothing returns nothing
        local trigger t = CreateTrigger()
        local trigger t2 = CreateTrigger()
        call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SPELL_EFFECT)
        call TriggerAddCondition(t, Condition(function Conditions))
        call TriggerAddAction(t, function Actions)
        call TriggerRegisterAnyUnitEventBJ(t2, EVENT_PLAYER_UNIT_DEATH)
        call TriggerAddCondition(t2, Condition(function Conditions2))
        call TriggerAddAction(t2, function Actions2)
    endfunction
endscope

Keywords:
fire, flame, burn, firebolt, hot, heat, explode, aoe, sfx, squiggy, epic, lulz
Contents

Holy Execution (Map)

Reviews
20:25, 10th Jun 2009 hvo-busterkomo: An impressive effect, with acceptable scripting. A complain of mine is that you don't use the If / Then / Else multiple functions. Because of that, your code is less readable and contains the Do Nothing function...
Level 25
Joined
Jun 5, 2008
Messages
2,572
Note:

  • Unit - Create 1 FD_Dummy2 for (Owner of (Triggering unit)) at FD_tmppt1 facing Default building facing (270.0) degrees
One dummy created, it is automaticaly asigne as Last Created Unit
Then:
  • If (FD_int Equal to (==) 1) then do (Unit - Add a 5.00 second Generic expiration timer to (Last created unit)) else do (If (FD_int Equal to (==) 2) then do (Unit - Add a 10.00 second Generic expiration timer to (Last created unit)) else do (If (FD_int Equal to (==) 3) then do (Unit - Add a 15.00 second Generic expiration timer to (Last created unit)) else do (Do nothing)))
First timer attached and a do nothing function.
  • Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
    • If - Conditions
      • FD_int Equal to (==) 1
    • Then - Actions
      • Unit - Add a 5.00 second Generic expiration timer to (Last created unit)
    • Else - Actions
      • Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • FD_int Equal to (==) 2
        • Then - Actions
          • Unit - Add a 10.00 second Generic expiration timer to (Last created unit)
        • Else - Actions
          • Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • FD_int Equal to (==) 3
            • Then - Actions
              • Unit - Add a 15.00 second Generic expiration timer to (Last created unit)
            • Else - Actions
Third timer attached:
  • Unit - Add a 10.00 second Generic expiration timer to (Last created unit)
So you first give it a one timer, then another and on the end yet another timer for one unit :p

Too much unnecesary actions...
EDIT:
I will continue this discusion tommorow as my computer needs to reboot in order to start fraps and i have to get up early :p
 
Level 28
Joined
Mar 25, 2008
Messages
2,955
I was being sarcastic.
You might know that I'm not a fan of making big posts, same goes for this one but I simply can't stand why you people have such a big deal out of that.

I admit the so-called fail in one of my lines due to the fact that I was not sober when I made the spell (that's my business, I have the right to make spells whenever I like).
But I don't get along with your comment to tell me to grow up.
You hardly know me and you judge over me, well I guess that's really mature..
 
Level 17
Joined
Mar 17, 2009
Messages
1,349
Well,I think I edited the post as you were writing yours...
I noticed it was a bit flaming and disrespectful of me, so yeah... apologies on that :)


EDIT:
@ hvo:
Are you being sarcastic with what you just said? Please tell me you are, otherwise that wouldn't be that smart of you to say :p
 

Ash

Ash

Level 22
Joined
Aug 27, 2005
Messages
1,684
Well, I don't think a moderator should be allowed to rate, personally. It's your job to review and make sure it's of an acceptable standard, not to set precedence.

But that's a topic for site discussion. ;)
 
Level 17
Joined
Mar 17, 2009
Messages
1,349
Well yess thanks to Eccho!! You get our point Sguiggy now? Neither me or Kingz were trying to offend you... :)
Both of us usually really care for maximum efficiency when making our own spells, so we do know whether a spell can be still improved or not.


@ Ash:
Well nope, having a moderator rating allows the downloader to really know how good the spell is... I mean not all users know how to rate, but mods are supposed to know that.
 
Level 15
Joined
Jan 31, 2007
Messages
502
Took a look at it

Quite simple but still not bad, i like it
Thought i got some sugestions , ill comment on the vJass version

- set expTime = SquareRoot(dx * dx + dy * dy)/425
Your setting the "time" according to the units movementspeed due its moving to the target locaions
but i would guess its better to place it in the global block for modifications of the movementspeed
and btw, the units max ms is set in the gameplay constants to 400 and not 425

- You could may add a modification for the number of Missiles, shouldnt be that hard due your already using a loop

- the range the dummies move foreward is set up to 700 in the sript
if the spell got a higher castrange the dummies would stop due you are not checking the distance
add a constant for that

- The spell buggs if its casted on the hero directly (portrait or hero icon) and all missiles will move and stay forever, fix that - cannot image noone noticed that before !

- Some more comments could be good, i can image that not everyone knows whats meant with the "LIFEFACTOR" constant
Also some comments seem to be mixed up
call DestroyEffect(AddSpecialEffect(EFFPATH2,x, y)) //It's ordered to cast 'fan of knives'

does not look like fan of knives for me

All in all not bad but nothing special... [3.75/5]
 
Level 8
Joined
Jul 14, 2010
Messages
235
This spell works perfectly when Im playing from the download map. But when I copy everything over, the special effects never goes away (resulting in major lagg after about 5 casts) and no damage at all. The spell in the test map goes to the target location, but copied over it alwyas goes to same range. I have triple-checked the triggers :(
 
Level 4
Joined
Mar 21, 2014
Messages
79
unfortunately this spell created so many lags in my map that i had to remove it. the more it was casted the slower the game was, until it was that slow that we had to abort it. i tried to find out why it does it, but i couldnt find any leaks...
 
Top