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

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.
  • Ghan Ghan:
    Howdy
  • Ghan Ghan:
    Still lurking
    +3
  • The Helper The Helper:
    I am great and it is fantastic to see you my friend!
    +1
  • The Helper The Helper:
    If you are new to the site please check out the Recipe and Food Forum https://www.thehelper.net/forums/recipes-and-food.220/
  • Monovertex Monovertex:
    How come you're so into recipes lately? Never saw this much interest in this topic in the old days of TH.net
  • Monovertex Monovertex:
    Hmm, how do I change my signature?
  • tom_mai78101 tom_mai78101:
    Signatures can be edit in your account profile. As for the old stuffs, I'm thinking it's because Blizzard is now under Microsoft, and because of Microsoft Xbox going the way it is, it's dreadful.
  • The Helper The Helper:
    I am not big on the recipes I am just promoting them - I use the site as a practice place promoting stuff
    +2
  • Monovertex Monovertex:
    @tom_mai78101 I must be blind. If I go on my profile I don't see any area to edit the signature; If I go to account details (settings) I don't see any signature area either.
  • The Helper The Helper:
    You can get there if you click the bell icon (alerts) and choose preferences from the bottom, signature will be in the menu on the left there https://www.thehelper.net/account/preferences
  • The Helper The Helper:
    I think I need to split the Sci/Tech news forum into 2 one for Science and one for Tech but I am hating all the moving of posts I would have to do
  • The Helper The Helper:
    What is up Old Mountain Shadow?
  • The Helper The Helper:
    Happy Thursday!
    +1
  • Varine Varine:
    Crazy how much 3d printing has come in the last few years. Sad that it's not as easily modifiable though
  • Varine Varine:
    I bought an Ender 3 during the pandemic and tinkered with it all the time. Just bought a Sovol, not as easy. I'm trying to make it use a different nozzle because I have a fuck ton of Volcanos, and they use what is basically a modified volcano that is just a smidge longer, and almost every part on this thing needs to be redone to make it work
  • Varine Varine:
    Luckily I have a 3d printer for that, I guess. But it's ridiculous. The regular volcanos are 21mm, these Sovol versions are about 23.5mm
  • Varine Varine:
    So, 2.5mm longer. But the thing that measures the bed is about 1.5mm above the nozzle, so if I swap it with a volcano then I'm 1mm behind it. So cool, new bracket to swap that, but THEN the fan shroud to direct air at the part is ALSO going to be .5mm to low, and so I need to redo that, but by doing that it is a little bit off where it should be blowing and it's throwing it at the heating block instead of the part, and fuck man
  • Varine Varine:
    I didn't realize they designed this entire thing to NOT be modded. I would have just got a fucking Bambu if I knew that, the whole point was I could fuck with this. And no one else makes shit for Sovol so I have to go through them, and they have... interesting pricing models. So I have a new extruder altogether that I'm taking apart and going to just design a whole new one to use my nozzles. Dumb design.
  • Varine Varine:
    Can't just buy a new heatblock, you need to get a whole hotend - so block, heater cartridge, thermistor, heatbreak, and nozzle. And they put this fucking paste in there so I can't take the thermistor or cartridge out with any ease, that's 30 dollars. Or you can get the whole extrudor with the direct driver AND that heatblock for like 50, but you still can't get any of it to come apart
  • Varine Varine:
    Partsbuilt has individual parts I found but they're expensive. I think I can get bits swapped around and make this work with generic shit though
  • Ghan Ghan:
    Heard Houston got hit pretty bad by storms last night. Hope all is well with TH.
  • The Helper The Helper:
    Power back on finally - all is good here no damage
    +2
  • V-SNES V-SNES:
    Happy Friday!
    +1

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top