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: 298

Magentix

if (OP.statement == false) postCount++;
Reaction score
107
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
 

Hero

─║╣ero─
Reaction score
250
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
 

Exide

I am amazingly focused right now!
Reaction score
448
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 :)
 

Magentix

if (OP.statement == false) postCount++;
Reaction score
107
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
 

~GaLs~

† Ғσſ ŧħə ѕαĸε Φƒ ~Ğ䣚~ †
Reaction score
180
well...ya though me how to use struct
 

Pigger

New Member
Reaction score
13
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
 

Magentix

if (OP.statement == false) postCount++;
Reaction score
107
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.
 

Sim

Forum Administrator
Staff member
Reaction score
534
Nice spellpack, especially the first one, though what's with Vesuvian Winds?

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

Demonwrath

Happy[ExtremelyOverCommercializ ed]HolidaysEveryon
Reaction score
47
>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
 

Magentix

if (OP.statement == false) postCount++;
Reaction score
107
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?
 

Sim

Forum Administrator
Staff member
Reaction score
534
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.
 

Magentix

if (OP.statement == false) postCount++;
Reaction score
107
Fair enough, I'll start thinking of something more "windy".
(Whilst working on my new spell pack as well :eek:)
 

Tinki3

Special Member
Reaction score
418
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:

;)
 

Magentix

if (OP.statement == false) postCount++;
Reaction score
107
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
 

Tinki3

Special Member
Reaction score
418
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...
 

Magentix

if (OP.statement == false) postCount++;
Reaction score
107
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.

      The Helper Discord

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top