Spellpack Inferno

Magentix

if (OP.statement == false) postCount++;
Reaction score
107
I started working on one spell (Ablaze) to try out if the JASS I just learned could actually help me make something nice. It became so fun, that I created an entire spellpack out of it.
Note that this is my first spellpack ever, as well as my first JASS spells ever, so even though my code seems good/leakless, I'm sure you pros will find some of my coding inefficient.

MUI: Yes
MPI: Yes
Concept: Fire spells
Configuration + Import difficulty: Very easy
Uses: vJASS+Handle System (NewGen) as mentioned in the general config (with instructions on these as well)


Ablaze (E)
ablazetooltipnk1.jpg

ablaze1xy8.jpg

ablaze2nm7.jpg


CONFIG:
JASS:
globals
    constant real AblazeVM_DMG_Addition = 50.00 // Set the Ablaze initial damage increment by Volatile Mind
    constant real AblazeVM_DoT_DMG_Addition = 0.00 // Set the Ablaze DoT damage increment by Volatile Mind
    constant real AblazeVM_DoT_Addition = 2.00 // Set the Ablaze DoT duration increment by Volatile Mind
    constant real AblazeVM_Range_Addition = 0.00 // Set the Ablaze radius increment by Volatile Mind
endglobals

constant function GetSpellRadius takes integer Ablaze_level, integer VM_level returns real
    return (400.00 + (VM_level * AblazeVM_Range_Addition))
endfunction

constant function GetDotDuration takes integer Ablaze_level, integer VM_level returns real
    return (4.00 + (Ablaze_level * 2.00) + (VM_level * AblazeVM_DoT_Addition))
endfunction

constant function GetDotDamage takes integer Ablaze_level, integer VM_level returns real
    return (10.00 + (Ablaze_level * 10.00) + (VM_level * AblazeVM_DoT_DMG_Addition))
endfunction

constant function GetInitialDamage takes integer Ablaze_level, integer VM_level returns real
    return ((((Ablaze_level + 2) * (Ablaze_level + 3) / 2) * 25.00) - 25.00 + (VM_level * AblazeVM_DMG_Addition))
endfunction



Volatile Mind (V)
vmtooltipem2.jpg



Vesuvian Winds (D)
vwtooltipqh8.jpg

vw1rt6.jpg


CONFIG:
JASS:
globals
    constant real VWVM_DMG_Addition = 0.00 // Set the Vesuvian Winds initial damage increment by Volatile Mind
    constant real VWVM_Stun_Addition = 0.50 // Set the Vesuvian Winds stun duration increment by Volatile Mind
    constant real VWVM_Range_Addition = 200.00 // Set the Vesuvian Winds range increment by Volatile Mind
endglobals

constant function GetSpellDamage takes integer VW_level, integer VM_level returns real
    return (100.00 + (VW_level * 100.00) + (VM_level * VWVM_DMG_Addition))
endfunction

constant function GetStunDuration takes integer VW_level, integer VM_level returns real
    return (0.50 + (VW_level * 0.50) + (VM_level * VWVM_Stun_Addition))
endfunction

constant function GetSpellRange takes integer VW_level, integer VM_level returns real
    return (1000.00 + (VM_level * VWVM_Range_Addition))
endfunction



Madman's Inferno (F)
mitooltipeh9.jpg

mify1.jpg


CONFIG:
JASS:
globals
    constant real InfernoVM_DPS_Addition = 10.00 // Set the Madman's Inferno DPS increment by Volatile Mind
    constant real InfernoVM_Range_Addition = 50.00 // Set the Madman's Inferno range increment by Volatile Mind
endglobals

constant function GetInfernoDPS takes integer VM_level returns real
    return (100.00 + (VM_level * InfernoVM_DPS_Addition))
endfunction

constant function GetInfernoRange takes integer VM_level returns real
    return (400.00 + (VM_level * InfernoVM_Range_Addition))
endfunction




GENERAL CONFIG (Implementation):
JASS:
/////////////////////////////////////////////////////////////////////////////////    
//                                                                             //  
//                      MAGENTIX' INFERNO SPELL PACK                           //
//                                                                             //
//=============================================================================//  
//                                                                             //  
//                                                                             //      
//  1. IMPLEMENTATION                                                          //
//  ==================                                                         //
//                                                                             //  
//  a) Copy everything in here into your map's code header.                    //
//  b) Copy-paste every trigger, no need to create variables.                  //
//  c) Open Object Editor and copy-paste all custom units, spells and buffs.   //
//  d) Open Sound Editor and copy-paste the sound.                             //
//  e) Configure the "Raw Code" part below.                                    //
//  f) Make sure the following spell(book)s are set this way.                  //
//     - Fake Stunned Debuff spellbook contains Fake Stun Debuff               //
//     - Fatigue Spellbook contains Fatigue                                    //
//     - Fatigue Spell has the Fatigue (Slow Aura) set in Stats-Buffs          //
//                                                                             //  
//                                                                             //  
//  2. CONFIGURATION                                                           //
//  =================                                                          //
//                                                                             //  
//  At the top of every spell trigger, you will find a configuration area.     //
//  There, you will find 2 fields of values that can be modified.              //
//                                                                             //  
//  The first field contains globals that describe how Volatile Mind will      //
//  affect the ability for each level of Volatile Mind.                        //
//                                                                             //  
//  The second field contains so-called constant function which determine      //
//  the spell's damage, duration, area of effect, etc.                         //
//                                                                             //  
//  It's Important that you ONLY change globals values and the formulas        //
//  within the constant functions. Changing anything else may cause spell      //
//  malfunctions.                                                              //
//                                                                             //
//                                                                             //
//  Now, I need you to press Ctrl+D in the Object Editor to view the custom    //
//  spells' and units' Raw Data code. If you found all of them, fill them in.  //
    globals                                                                    //
//  Set the ability ID for the Ablaze spell                                    //
    constant integer AblazeAbilityID = 'A000'                                  //
                                                                               //
//  Set the ability ID for the Volatile Mind spell                             //
    constant integer VMAbilityID = 'A001'                                      //
                                                                               //
//  Set the ability ID for the Vesuvian Winds spell                            //
    constant integer VWAbilityID = 'A002'                                      //
                                                                               //
//  Set the ability ID for the Fake Stunned Debuff spellbook                   //
    constant integer FakeStunID = 'A003'                                       //
                                                                               //
//  Set the ability ID for the Fatigue Spellbook                               //
    constant integer FatigueID = 'A007'                                        //
                                                                               //
//  Set the Unit ID for the Circle Fire Dummy                                  //
    constant integer AblazeUnitID = 'n000'                                     //
                                                                               //
//  Set the Unit ID for the Circle Incinerate Dummy                            //
    constant integer AblazeUnitID3 = 'n001'                                    //
                                                                               //
//  Set the Unit ID for the Line Fire Dummy                                    //
    constant integer AblazeUnitID2 = 'n002'                                    //
                                                                               //
//  Set the Unit ID for the Fireball Dummy                                     //
    constant integer VWUnitID = 'n003'                                         //
                                                                               //
//  Set the Buff ID for the Madman's Inferno buff                              //
    constant integer MIBuffID = 'B000'                                         //
    endglobals                                                                 //
//                                                                             //
//                                                                             //
//  3. REQUIREMENTS                                                            //
//  ================                                                           //
//                                                                             //
//  This spellpack requires vJASS/JASSHelper and the Handle System.            //
//                                                                             //
//  vJASS/JASSHelper:                                                          //
//  Some sort of pre-processor that makes this code work, comes standard with  //
//  NewGen Pack. Link can be found at thehelper.net Useful Tools section.      //
// !To test maps with NewGen, save manually first, then press "Test Map"!      //
//                                                                             //
//  Handle System:                                                             //
//  Again, something that makes JASS easier to work with, comes standard with  //
//  this map. No need for user to implement this.                              //
//                                                                             //
//=============================================================================//
//                                                                             //
//                 DO NOT EDIT ANYTHING BEYOND THIS POINT                      //
//                   PLEASE GIVE CREDIT WHEN USING THIS!                       //
//                                                                             //
/////////////////////////////////////////////////////////////////////////////////




Known Bugs: None
Possible improvements:

a) Use a modified curse for the stun debuff and check every 0.1 seconds for it instead of using a no check on a spellbook.
(= Difference between Purge-able and not Purge-able)

b) Extra sound effects

c) Coding? I'm pretty sure I didn't code 200% optimal
 

Attachments

  • Ablaze Spell.w3x
    49.5 KB · Views: 302
Making this spellpack MUI -really- needed me to learn JASS :)
I suppose you could do it in GUI, but that code would cause anyone who layed eye upon it to have terrible nightmares. :x
 
Did you use new gen?

If you did please post that you did

I looked at the screen shots..looks good...checking your code now..
______

I see you have this

This spellpack requires vJASS/JASSHelper and the Handle System.

Then please include it in the post...lol
 
Cool stuff!
Only thing I didn't like was the names of the abilities and the tooltips, but that can be changed so nevermind. :p
Anyways, good stuff. +rep :)
 
Cool stuff!
Only thing I didn't like was the names of the abilities and the tooltips, but that can be changed so nevermind. :p
Anyways, good stuff. +rep :)

Thanks, spellpack turned out better than I expected :x
 
well...ya though me how to use struct
 
Nice spellpack, the only one problem I found, which isn't too huge of an issue, is for Vesuvian Wings, when the fire ball is created, it's facing (default I think), so that when you cast it lets say straight north (towards the clock) it's spaned and then does a quick turn and runs the right direction.

Minor thing really
 
Nice spellpack, the only one problem I found, which isn't too huge of an issue, is for Vesuvian Wings, when the fire ball is created, it's facing (default I think), so that when you cast it lets say straight north (towards the clock) it's spaned and then does a quick turn and runs the right direction.

Minor thing really

Indeed, it's spawned at default building degree (270°?), forgot to set that to the right angle :)

Anyhow, it's updated every 0.0x seconds, so it is indeed a minor thing to fix ^^


well...ya though me how to use struct

Didn't know structs myself neither up untill I started working on this :x

Update:

- Added more preloaders
- Fixed a typo in config
- Fixed Vesuvian Winds dummy spawning angle
- Improved Fatigue to a 40% slow to make it more noticable.
 
Nice spellpack, especially the first one, though what's with Vesuvian Winds?

It's simply a firebolt which stuns the first target encountered >_<
 
>Nice spellpack, especially the first one, though what's with Vesuvian Winds?

It's simply a firebolt which stuns the first target encountered >_<

Agreed. I'd make it more like a breathe of fire type thing that stuns the units that get hit by it :)

Lovely spells though +rep
 
I went for the "stuns one target only" option because people would cry "imba" at the sight of an aoe stun, followed by an aoe nuke+DoT.

Anyhow, thanks for the nice comments everyone, I'm encouraged to make another pack now :)

So... what would one have to do to get a spellpack approved?
 
Well for one Vesuvian Winds shouldn't just be a firebolt that stuns the first target encountered.

Especially that I see no link between "winds" and a "firebolt" :)

Other than that, it's good enough for approval.
 
Fair enough, I'll start thinking of something more "windy".
(Whilst working on my new spell pack as well :eek:)
 
Cool spellpack.

Here, in the "Ablaze" trigger, you should Flush the timer and destroy the struct before you destroy the timer itself:
JASS:
else
    // Clean up the struct
    call DestroyTimer(t)
    call EffectData.destroy(dat)
    call FlushHandleLocals(t)
endif

The same goes for the other 2 triggers.

IMO, there is room for optimization, though it works fine as is so there's not much to say.
Well, there is, but you know...

One thing that really bugged me was the fact that you were
starting the timer all over again per function execution in some places.
...why?

Also, this:
JASS:
local effect e
set e = AddSpecialEffectTarget(...)
call DestroyEffect(e)
set e = null

Can simply be:

;)
 
One thing that really bugged me was the fact that you were
starting the timer all over again per function execution in some places.
...why?

Also, this:
JASS:
local effect e
set e = AddSpecialEffectTarget(...)
call DestroyEffect(e)
set e = null

Can simply be:

;)

Well, the timers is because I'm farily new to them and don't know the specifics on repeating timers and how to stop them that well :x
(Same goes for flushing the handles thingy)

Thanks for the effect optimisation
 
Well if you're wanting to create a periodic-effect spell, you should start a timer like so:

call TimerStart(timer, #, true, function callback)

The 'true' tells us that we want the timer to be repetitive until it's stopped.
'False' would mean a single execution of the timer.

What you were doing is you were starting the timer with a 'false',
and just starting it all over again/execution in the callback function which is
inefficient compared to starting with 'true'.

As for destroying them, you should first flush, then pause, then destroy (FPD).
I know I said to destroy the struct data before destroying the timer, but I don't
think that matters too much.

Keep in mind that timers can, but quite rarely keep running if they aren't paused.
Never happened to me, but there are rumours...
 
Got some time on my hands now, will try to update the Vesuvian Winds to be an AoE Damage strike which stuns units in the very center (where the heat is the highest), but only damages units on the sides.

Will optimize timers where possible

Will change the way of "stunning" into casting a modified stormbolt with huge range, no missle art and a very high speed.
(1 stormbolt with 12 levels actually, three levels for each level of VM (0,1,2,3))
Damage, range etc will remain triggered, only the stun duration will be a fixed value in the 12 stormbolt levels then.

This is what seems best to me, if there is a better way to use stuns in custom spells, please tell me before I go about doing all this work :x
 
General chit-chat
Help Users
  • No one is chatting at the moment.
  • V-SNES V-SNES:
    Happy Friday!
    +1
  • The Helper The Helper:
    News portal has been retired. Main page of site goes to Headline News forum now
  • The Helper The Helper:
    I am working on getting access to the old news portal under a different URL for those that would rather use that for news before we get a different news view.
  • Ghan Ghan:
    Easily done
    +1
  • The Helper The Helper:
    https://www.thehelper.net/pages/news/ is a link to the old news portal - i will integrate it into the interface somewhere when i figure it out
  • Ghan Ghan:
    Need to try something
  • Ghan Ghan:
    Hopefully this won't cause problems.
  • Ghan Ghan:
    Hmm
  • Ghan Ghan:
    I have converted the Headline News forum to an Article type forum. It will now show the top 20 threads with more detail of each thread.
  • Ghan Ghan:
    See how we like that.
  • The Helper The Helper:
    I do not see a way to go past the 1st page of posts on the forum though
  • The Helper The Helper:
    It is OK though for the main page to open up on the forum in the view it was before. As long as the portal has its own URL so it can be viewed that way I do want to try it as a regular forum view for a while
  • Ghan Ghan:
    Yeah I'm not sure what the deal is with the pagination.
  • Ghan Ghan:
    It SHOULD be there so I think it might just be an artifact of having an older style.
  • Ghan Ghan:
    I switched it to a "Standard" article forum. This will show the thread list like normal, but the threads themselves will have the first post set up above the rest of the "comments"
  • The Helper The Helper:
    I don't really get that article forum but I think it is because I have never really seen it used on a multi post thread
  • Ghan Ghan:
    RpNation makes more use of it right now as an example: https://www.rpnation.com/news/
  • The Helper The Helper:
  • The Helper The Helper:
    What do you think Tom?
  • tom_mai78101 tom_mai78101:
    I will have to get used to this.
  • tom_mai78101 tom_mai78101:
    The latest news feed looks good

      The Helper Discord

      Staff online

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top