Spellpack Flame Fury, Snow Storm, and Light Lance

DrinkSlurm

Eat Bachelor Chow!
Reaction score
50
last updated: January 24, 2008
version 1.00: original submission
version 1.01: changed the missile art for Light Lance
version 1.02: changed the missile art for Light Lance; tooltip fixes; added more info in implementation instructions
version 1.03: JASS version; consolidated all 3 spells onto 1 hero
version 1.04: new JASS version with coding optimizations--Snow Storm consolidated into 1 trigger; preloading; configuration


My first Spells submission.

These are three different spells that are really based on the same concept: projectiles continuously fire outward in the direction of the current facing angle of the hero automatically, and the hero is able to move and aim the spell during the duration of the spell. (It may be hard to explain; just try it out and see.)

Flame Fury
Spell type: instant cast
Description: Sprays a constant wide cone of fire to burn enemy units. The flames always shoot in the direction of the facing angle of the Hero. For the duration of the spell, the Hero is able to move and aim the blasts of fire albeit very slowly. [100 mana cost; 10 second cooldown]
Level 1 - up to 80 damage per second for 5 seconds; 250 distance and 150 width AoE cone area; the Hero is slowed by 95%.
Level 2 - up to 100 damage per second for 6 seconds; 300 distance and 200 width AoE cone area; the Hero is slowed by 90%.
Level 3 - up to 120 damage per second for 7 seconds; 350 distance and 250 width AoE cone area; the Hero is slowed by 85%.

Coding: JASS; requires vJASS
Leaks: Leakless
Multi Instanceability: MUI
Lag-susceptibility: low
Import Difficulty: easy (instructions included)

Trigger:
JASS:
//===========================================================================
//========================== Flame Fury v1.04 ===============================
//============================ Instructions =================================
//===========================================================================
// MUI; requires vJASS
//===========================================================================
// 1. Go to the Object Editor, and copy + paste the following:
//    Units
//       * Dummy Caster
//    Abilities
//       * Flame Fury: Add this ability to the Hero; make sure the Base Order ID
//         does not conflict with any other spell on the Hero.
//       * Slow (for Flame Fury): make sure that the buff is set to the custom
//         "Flame Fury (Caster)" buff. This is the buff that will show on the
//         Hero and that is used in this trigger.
//       * Breath of Fire (for Flame Fury)
//    Buffs
//       * Flame Fury (Caster)
// 2. Copy the following triggers:
//       * this trigger: "FlameFury"
// 3. Other options:
//    Custom Gameplay Constants (this is what allows the Hero to move around and
//    aim the spell, albeit very slowly): 
//       * Movement - Unit Speed - Maximum: 522
//       * Movement - Unit Speed - Minimum: 1
//    Hero
//       * Movement - Turn Rate: 0.20 (this is part of the balance of the skill;
//         a slower turning rate makes it harder to aim)
// 4. To adjust the balance of the skill, you can change some of the following
//    values:
//    Abilities
//       * Flame Fury: Cooldown, Mana Cost
//       * Breath of Fire (for Flame Fury): Damages, Distances, Areas, etc.
//       * Slow (for Flame Fury): Attack Speed Factor, Movement Speed Factor
// 5. Make sure that the rawcodes specified below reference the to proper units,
//    abilities, or buffs.
scope FlameFury
globals
    private constant integer FFURY  = 'A003' //Ability ID of "Flame Fury"
    private constant integer DUMMY  = 'h000' //Unit    ID of "Dummy Caster"
    private constant integer SLOW   = 'A009' //Ability ID of "Slow (for Flame Fury)"
    private constant integer BOFIRE = 'A001' //Ability ID of "Breath of Fire (for Flame Fury)"
    private constant integer BUFF   = 'B003' //Buff    ID of "Flame Fury (Caster)"
// 6. More configuration options:
    private constant real INTERVAL   =   0.10 //timer interval; default 0.10 seconds
    private constant real ATKDIST    = 100.00 //attack distance; adjust only if necessary--if distance specified in Object Editor is less than 100.00
    private constant real DURFACTOR  =   1.00 //this and DURBASE determine the duration of the spell; default 1.00
    private constant real DURBASE    =   4.00 //this and DURFACTOR determine the duration of the spell; default 4.00
    private constant real SIZEFACTOR =   0.15 //this and SIZEBASE determine the size (graphical only) of the Breath of Fire projectile; default 0.15
    private constant real SIZEBASE   =   0.30 //this and SIZEFACTOR determine the size (graphical only) of the Breath of Fire projectile; default 0.30
endglobals
//=========================== End of Instructions ===========================
//===========================================================================
private struct FF
    unit hero
    integer lvl
    integer ticks
endstruct
globals
    private FF array ALLDATA
    private timer ALLTIMER = CreateTimer()
    private integer TOTAL = 0
endglobals
//===========================================================================
private function Cond takes nothing returns boolean
    return GetSpellAbilityId() == FFURY
endfunction
//===========================================================================
private function TimerActions takes nothing returns nothing
    local FF data
    local real face_rad
    local real x1
    local real y1
    local real x2
    local real y2
    local real size
    local unit u
    local integer i = 1
    loop
        exitwhen i > TOTAL
        set data = ALLDATA<i>
        set face_rad = GetUnitFacing(data.hero) * bj_PI/180
        set x1 = GetUnitX(data.hero)
        set y1 = GetUnitY(data.hero)
        set x2 = x1 + ATKDIST * Cos(face_rad)
        set y2 = y1 + ATKDIST * Sin(face_rad)
        set size = data.lvl * SIZEFACTOR + SIZEBASE
        set u = CreateUnit(GetOwningPlayer(data.hero), DUMMY, x1, y1, face_rad)
        call SetUnitScale(u, size, size, size)
        call UnitApplyTimedLife(u, &#039;BTLF&#039;, 1.00)
        call UnitAddAbility(u, BOFIRE)
        call SetUnitAbilityLevel(u, BOFIRE, data.lvl)
        call IssuePointOrder(u, &quot;breathoffire&quot;, x2, y2)
        set data.ticks = data.ticks - 1
        if data.ticks &lt;= 0 or GetWidgetLife(data.hero) &lt; 0.406 then
            call UnitRemoveAbility(data.hero, BUFF)
            call data.destroy()
            set ALLDATA<i> = ALLDATA[TOTAL]
            set TOTAL = TOTAL - 1
            set i = i - 1
            if TOTAL == 0 then
                call PauseTimer(ALLTIMER)
            endif
        endif
        set i = i + 1
    endloop
    set u = null
endfunction

private function Actions takes nothing returns nothing
    local FF data = FF.create()
    local unit u
    set data.hero = GetTriggerUnit()
    set data.lvl = GetUnitAbilityLevel(data.hero, FFURY)
    set data.ticks = R2I((data.lvl * DURFACTOR + DURBASE) / INTERVAL)
    set u = CreateUnit(GetOwningPlayer(data.hero), DUMMY, GetUnitX(data.hero), GetUnitY(data.hero), 0)
    call UnitApplyTimedLife(u, &#039;BTLF&#039;, 1.00)
    call UnitAddAbility(u, SLOW)
    call SetUnitAbilityLevel(u, SLOW, data.lvl)
    call IssueTargetOrder(u, &quot;slow&quot;, data.hero)
    set TOTAL = TOTAL + 1
    set ALLDATA[TOTAL] = data
    if TOTAL == 1 then
        call TimerStart(ALLTIMER, INTERVAL, true, function TimerActions)
    endif
    set u = null
endfunction
//===========================================================================
public function InitTrig takes nothing returns nothing
    local unit u = CreateUnit(Player(0), DUMMY, 0, 0, 0)
    call UnitAddAbility(u, SLOW)
    call UnitAddAbility(u, BOFIRE)
    call RemoveUnit(u)
    set gg_trg_FlameFury = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(gg_trg_FlameFury, EVENT_PLAYER_UNIT_SPELL_EFFECT)
    call TriggerAddCondition(gg_trg_FlameFury, Condition(function Cond))
    call TriggerAddAction(gg_trg_FlameFury, function Actions)
    set u = null
endfunction
endscope</i></i>



Snow Storm
Spell type: instant cast
Description: Launches a constant barrage of ice to damage and slow enemy units. The snow storm always shoots in the direction of the facing angle of the Hero. For the duration of the spell, the Hero is able to move and aim the blasts of fire albeit very slowly. [75 mana cost; 10 second cooldown]
Level 1 - up to 60 damage per second for 5 seconds; 200 area of effect; the Hero is slowed by 95%.
Level 2 - up to 90 damage per second for 6 seconds; 250 area of effect; the Hero is slowed by 90%.
Level 3 - up to 120 damage per second for 7 seconds; 300 area of effect; the Hero is slowed by 85%.

Coding: JASS; requires vJASS
Leaks: Leakless
Multi Instanceability: MUI
Lag-susceptibility: low
Import Difficulty: easy (instructions included)

Trigger:
JASS:
//===========================================================================
//========================== Snow Storm v1.04 ===============================
//============================ Instructions =================================
//===========================================================================
// MUI; requires vJASS
//===========================================================================
// 1. Go to the Object Editor, and copy + paste the following:
//    Units
//       * Dummy Caster
//       * Dummy Attacker 1
//       * Dummy Attacker 2
//       * Dummy Attacker 3
//    Abilities
//       * Snow Storm: Add this ability to the Hero; make sure the Base Order ID
//         does not conflict with any other spell on the Hero.
//       * Slow (for Snow Storm): make sure that the buff is set to the custom
//         &quot;Snow Storm (Caster)&quot; buff. This is the buff that will show on the
//         Hero and that is used in this trigger.
//       * Frost Attack (no missile art)
//    Buffs
//       * Snow Storm (Caster)
// 2. Copy the following triggers:
//       * this trigger: &quot;SnowStorm&quot;
// 3. Other options:
//    Custom Gameplay Constants (this is what allows the Hero to move around and aim the spell, albeit very slowly: 
//       * Movement - Unit Speed - Maximum: 522
//       * Movement - Unit Speed - Minimum: 1
//    Hero
//       * Movement - Turn Rate: 0.20 (this is part of the balance of the skill; a slower turning rate makes it harder to aim)
// 4. To adjust the balance of the skill, you can change some of the following values:
//    Units
//       * Dummy Attacker 1/2/3: Damages, Range, Area of Effect
//    Abilities
//       * Snow Storm: Cooldown, Mana Cost
//       * Slow (for Snow Storm): Attack Speed Factor, Movement Speed Factor
// 5. Make sure that the rawcodes specified here reference the to proper units,
//    abilities, or buffs.
scope SnowStorm
globals
    private constant integer SSTORM  = &#039;A005&#039; //Ability ID of &quot;Snow Storm&quot;
    private constant integer DUMMY   = &#039;h000&#039; //Unit    ID of &quot;Dummy Caster&quot;
    private constant integer SLOW    = &#039;A000&#039; //Ability ID of &quot;Slow (for Snow Storm)&quot;
    private constant integer DUMATK1 = &#039;h001&#039; //Unit    ID of &quot;Dummy Attacker 1&quot;
    private constant integer DUMATK2 = &#039;h002&#039; //Unit    ID of &quot;Dummy Attacker 2&quot;
    private constant integer DUMATK3 = &#039;h003&#039; //Unit    ID of &quot;Dummy Attacker 3&quot;
    private constant integer FROST   = &#039;A007&#039; //Ability ID of &quot;Frost Attack (no missile art)&quot;
    private constant integer BUFF    = &#039;B000&#039; //Buff    ID of &quot;Snow Storm (Caster)&quot;
// 6. More configuration options:
    private constant real INTERVAL   =   0.33 //timer interval; default 0.33
    private constant real ATKDIST    = 400.00 //attack distance; default 400.00
    private constant real DURFACTOR  =   1.00 //this and DURBASE determine the duration of the spell; default 1.00
    private constant real DURBASE    =   4.00 //this and DURFACTOR determine the duration of the spell; default 4.00
    private constant real SIZEFACTOR =   0.50 //this and SIZEBASE determine the size (graphical only) of the Snow Storm projectile; default 0.50
    private constant real SIZEBASE   =   0.00 //this and SIZEFACTOR determine the size (graphical only) of the Snow Storm projectile; default 0.00
endglobals
//=========================== End of Instructions ===========================
//===========================================================================
private struct SS
    unit hero
    integer lvl
    integer ticks
endstruct
globals
    private SS array ALLDATA
    private timer ALLTIMER = CreateTimer()
    private integer TOTAL = 0
    private integer array DUMATK
endglobals
//===========================================================================
private function Cond takes nothing returns boolean
    return GetSpellAbilityId() == SSTORM
endfunction
//===========================================================================
private function TimerActions takes nothing returns nothing
    local SS data
    local real face_rad
    local real x1
    local real y1
    local real x2
    local real y2
    local real size
    local unit u
    local integer i = 1
    loop
        exitwhen i &gt; TOTAL
        set data = ALLDATA<i>
        set face_rad = GetUnitFacing(data.hero) * bj_PI/180
        set x1 = GetUnitX(data.hero)
        set y1 = GetUnitY(data.hero)
        set x2 = x1 + ATKDIST * Cos(face_rad)
        set y2 = y1 + ATKDIST * Sin(face_rad)
        set size = data.lvl * SIZEFACTOR + SIZEBASE
        set u = CreateUnit(GetOwningPlayer(data.hero), DUMATK[data.lvl], x1, y1, face_rad)
        call SetUnitScale(u, size, size, size)
        call UnitApplyTimedLife(u, &#039;BTLF&#039;, 1.00)
        call UnitAddAbility(u, FROST)
        call IssuePointOrder(u, &quot;attackground&quot;, x2, y2)
        set data.ticks = data.ticks - 1
        if data.ticks &lt;= 0 or GetWidgetLife(data.hero) &lt; 0.406 then
            call UnitRemoveAbility(data.hero, BUFF)
            call data.destroy()
            set ALLDATA<i> = ALLDATA[TOTAL]
            set TOTAL = TOTAL - 1
            set i = i - 1
            if TOTAL == 0 then
                call PauseTimer(ALLTIMER)
            endif
        endif
        set i = i + 1
    endloop
    set u = null
endfunction

private function Actions takes nothing returns nothing
    local SS data = SS.create()
    local unit u
    set data.hero = GetTriggerUnit()
    set data.lvl = GetUnitAbilityLevel(data.hero, SSTORM)
    set data.ticks = R2I((data.lvl * DURFACTOR + DURBASE) / INTERVAL)
    set u = CreateUnit(GetOwningPlayer(data.hero), DUMMY, GetUnitX(data.hero), GetUnitY(data.hero), 0)
    call UnitApplyTimedLife(u, &#039;BTLF&#039;, 1.00)
    call UnitAddAbility(u, SLOW)
    call SetUnitAbilityLevel(u, SLOW, data.lvl)
    call IssueTargetOrder(u, &quot;slow&quot;, data.hero)
    set TOTAL = TOTAL + 1
    set ALLDATA[TOTAL] = data
    if TOTAL == 1 then
        call TimerStart(ALLTIMER, INTERVAL, true, function TimerActions)
    endif
    set u = null
endfunction
//===========================================================================
public function InitTrig takes nothing returns nothing
    local unit u = CreateUnit(Player(0), DUMMY, 0, 0, 0)
    call UnitAddAbility(u, SLOW)
    call UnitAddAbility(u, FROST)
    call RemoveUnit(u)
    call RemoveUnit(CreateUnit(Player(0), DUMATK1, 0, 0, 0))
    call RemoveUnit(CreateUnit(Player(0), DUMATK2, 0, 0, 0))
    call RemoveUnit(CreateUnit(Player(0), DUMATK3, 0, 0, 0))
    set gg_trg_SnowStorm = CreateTrigger()
    set DUMATK[1] = DUMATK1
    set DUMATK[2] = DUMATK2
    set DUMATK[3] = DUMATK3
    call TriggerRegisterAnyUnitEventBJ(gg_trg_SnowStorm, EVENT_PLAYER_UNIT_SPELL_EFFECT)
    call TriggerAddCondition(gg_trg_SnowStorm, Condition(function Cond))
    call TriggerAddAction(gg_trg_SnowStorm, function Actions)
    set u = null
endfunction
endscope</i></i>



Light Lance
Spell type: instant cast
Description: Emits a constant narrow stream of light to damage enemy units. The light lance always shoots in the direction of the facing angle of the Hero. For the duration of the spell, the Hero is able to move and aim the light albeit very slowly. [100 mana cost; 10 second cooldown]
Level 1 - up to 120 damage per second for 5 seconds; 300 distance line damage; the Hero is slowed by 95%.
Level 2 - up to 160 damage per second for 6 seconds; 450 distance line damage; the Hero is slowed by 90%.
Level 3 - up to 200 damage per second for 7 seconds; 600 distance line damage; the Hero is slowed by 85%.

Coding: JASS; requires vJASS
Leaks: Leakless
Multi Instanceability: MUI
Lag-susceptibility: low
Import Difficulty: easy (instructions included)

Trigger:
JASS:
//===========================================================================
//========================== Light Lance v1.04 ==============================
//============================ Instructions =================================
//===========================================================================
// MUI; requires vJASS
//===========================================================================
// 1. Go to the Object Editor, and copy + paste the following:
//   Units
//       * Dummy Caster
//   Abilities
//       * Light Lance: Add this ability to the Hero; make sure the Base Order ID
//         does not conflict with any other spell on the Hero.
//       * Slow (for Light Lance): make sure that the buff is set to the custom
//         &quot;Light Lance (Caster)&quot; buff. This is the buff that will show on the
//         Hero and that is used in this trigger.
//       * Carrion Swarm (for Light Lance)
//    Buffs
//       * Light Lance (Caster)
// 2. Copy the following triggers:
//       * this trigger: &quot;LightLance&quot;
// 3. Other options:
//    Custom Imports: created by th15 (<a href="http://www.hiveworkshop.com/resources_new/models/907/" target="_blank" class="link link--external" rel="nofollow ugc noopener">http://www.hiveworkshop.com/resources_new/models/907/</a>)
//       * laseryellow.mdx
//       * laseryellow.blp
//    Custom Gameplay Constants (this is what allows the Hero to move around and
//    aim the spell, albeit very slowly: 
//       * Movement - Unit Speed - Maximum: 522
//       * Movement - Unit Speed - Minimum: 1
//    Hero
//       * Movement - Turn Rate: 0.20 (this is part of the balance of the skill;
//         a slower turning rate makes it harder to aim)
// 4. To adjust the balance of the skill, you can change some of the following values:
//    Abilities
//       * Light Lance: Cooldown, Mana Cost
//       * Carrion Swarm (for Light Lance): Damages, Distances, Areas, etc.
//       * Slow (for Light Lance): Attack Speed Factor, Movement Speed Factor
// 5. Make sure that the rawcodes specified here reference the to proper units,
//    abilities, or buffs.
scope LightLance
globals
    private constant integer LLIGHT = &#039;A004&#039; //Ability ID of &quot;Flame Fury&quot;
    private constant integer DUMMY  = &#039;h000&#039; //Unit    ID of &quot;Dummy Caster&quot;
    private constant integer SLOW   = &#039;A002&#039; //Ability ID of &quot;Slow (for Flame Fury)&quot;
    private constant integer CSWARM = &#039;A008&#039; //Ability ID of &quot;Carrion Swarm (for Light Lance)&quot;
    private constant integer BUFF   = &#039;B001&#039; //Buff    ID of &quot;Flame Fury (Caster)&quot;
// 6. More configuration options:
    private constant real INTERVAL   =   0.10 //timer interval; default 0.10 seconds
    private constant real ATKDIST    = 100.00 //attack distance; adjust only if necessary--if distance specified in Object Editor is less than 100.00
    private constant real DURFACTOR  =   1.00 //this and DURBASE determine the duration of the spell; default 1.00
    private constant real DURBASE    =   4.00 //this and DURFACTOR determine the duration of the spell; default 4.00
    private constant real SIZEFACTOR =   0.10 //this and SIZEBASE determine the size (graphical only) of the Breath of Fire projectile; default 0.10
    private constant real SIZEBASE   =   0.30 //this and SIZEFACTOR determine the size (graphical only) of the Breath of Fire projectile; default 0.30
endglobals
//=========================== End of Instructions ===========================
//===========================================================================
private struct LL
    unit hero
    integer lvl
    integer ticks
endstruct
globals
    private LL array ALLDATA
    private timer ALLTIMER = CreateTimer()
    private integer TOTAL = 0
endglobals
//===========================================================================
private function Cond takes nothing returns boolean
    return GetSpellAbilityId() == LLIGHT
endfunction
//===========================================================================
private function TimerActions takes nothing returns nothing
    local LL data
    local real face_rad
    local real x1
    local real y1
    local real x2
    local real y2
    local real size
    local unit u
    local integer i = 1
    loop
        exitwhen i &gt; TOTAL
        set data = ALLDATA<i>
        set face_rad = GetUnitFacing(data.hero) * bj_PI/180
        set x1 = GetUnitX(data.hero)
        set y1 = GetUnitY(data.hero)
        set x2 = x1 + ATKDIST * Cos(face_rad)
        set y2 = y1 + ATKDIST * Sin(face_rad)
        set size = data.lvl * SIZEFACTOR + SIZEBASE
        set u = CreateUnit(GetOwningPlayer(data.hero), DUMMY, x1, y1, face_rad)
        call SetUnitScale(u, size, size, size)
        call UnitApplyTimedLife(u, &#039;BTLF&#039;, 1.00)
        call UnitAddAbility(u, CSWARM)
        call SetUnitAbilityLevel(u, CSWARM, data.lvl)
        call IssuePointOrder(u, &quot;carrionswarm&quot;, x2, y2)
        set data.ticks = data.ticks - 1
        if data.ticks &lt;= 0 or GetWidgetLife(data.hero) &lt; 0.406 then
            call UnitRemoveAbility(data.hero, BUFF)
            call data.destroy()
            set ALLDATA<i> = ALLDATA[TOTAL]
            set TOTAL = TOTAL - 1
            set i = i - 1
            if TOTAL == 0 then
                call PauseTimer(ALLTIMER)
            endif
        endif
        set i = i + 1
    endloop
    set u = null
endfunction

private function Actions takes nothing returns nothing
    local LL data = LL.create()
    local unit u
    set data.hero = GetTriggerUnit()
    set data.lvl = GetUnitAbilityLevel(data.hero, LLIGHT)
    set data.ticks = R2I((data.lvl * DURFACTOR + DURBASE) / INTERVAL)
    set u = CreateUnit(GetOwningPlayer(data.hero), DUMMY, GetUnitX(data.hero), GetUnitY(data.hero), 0)
    call UnitApplyTimedLife(u, &#039;BTLF&#039;, 1.00)
    call UnitAddAbility(u, SLOW)
    call SetUnitAbilityLevel(u, SLOW, data.lvl)
    call IssueTargetOrder(u, &quot;slow&quot;, data.hero)
    set TOTAL = TOTAL + 1
    set ALLDATA[TOTAL] = data
    if TOTAL == 1 then
        call TimerStart(ALLTIMER, INTERVAL, true, function TimerActions)
    endif
    set u = null
endfunction
//===========================================================================
public function InitTrig takes nothing returns nothing
    local unit u = CreateUnit(Player(0), DUMMY, 0, 0, 0)
    call UnitAddAbility(u, SLOW)
    call UnitAddAbility(u, CSWARM)
    call RemoveUnit(u)
    set gg_trg_LightLance = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(gg_trg_LightLance, EVENT_PLAYER_UNIT_SPELL_EFFECT)
    call TriggerAddCondition(gg_trg_LightLance, Condition(function Cond))
    call TriggerAddAction(gg_trg_LightLance, function Actions)
    set u = null
endfunction
endscope</i></i>


Obsolete
Improvements
  • I'm not completely satisfied with the look of Light Lance because...sometimes it looks like the Hero is urinating. But out of all the different Missile Arts I tried, this was the closest thing I could find to what I had in mind. (I was looking for something that looks like a thin continuous laser beam shooting outwards at high speed.)
  • The triggers "Flame Fury Cast," "Snow Storm Cast," and "Light Lance Cast" all have a Wait 0.00 in them. I'd like to get rid of those Waits, but I couldn't figure out how to debug a certain thing without using the Waits. (The bug is that sometimes the periodic triggers would not detect the casting unit with the buff, and the periodic trigger would turn itself off too soon. Presumably, this is because it takes a certain amount of time for a buff to appear on a unit before it can be reliably detected.)

One screenshot for all three spells:
 

Attachments

  • [Spellpack] FFury, SStorm, LLance v1.04.w3x
    64.7 KB · Views: 491

Squll2

je'ne sais pas
Reaction score
76
*Agrees with the Spoiler*

neat ideas, but could be improved with more effects :p
 

Doomhammer

Bob Kotick - Gamers' corporate spoilsport No. 1
Reaction score
67
the yellow art looks a bit like releasing ones pressured bladder :D

either way,

+rep for well-made spells!
 

DrinkSlurm

Eat Bachelor Chow!
Reaction score
50
version 1.01

Thanks!

a nice Holy Beam Thing
Not exactly what I was picturing, but it turned out looking very cool nonetheless.

*Agrees with the Spoiler*
I'm glad I could get rid of that unintended imagery:)

+rep for well-made spells!
Thanks. Glad you liked them!

So, what's the procedure if I wanted to edit my submission after it's been approved? Should I go ahead and edit the first post and replace the file attachments?

Edit: updated attachments are now included in the first post.
 

DrinkSlurm

Eat Bachelor Chow!
Reaction score
50
Thanks. Done.

Updated with version 1.02.
-changed the missile art for Light Lance
-fixed some text tooltips
-added more info in implementation instructions
 

Knocksious

Sweet, I got 2 little green bars!
Reaction score
46
yea I like that better than the holy spiral

do ya think you could raise the height that the lance fires from?
Right now it looks like it shoots out of his feet
 

DrinkSlurm

Eat Bachelor Chow!
Reaction score
50
do ya think you could raise the height that the lance fires from?
Right now it looks like it shoots out of his feet

Yeah, I noticed that from the very beginning. But no matter what I tried (messing around with the dummy caster's "Art - Projectile Launch - Z," "Movement - Height Minimum," and "Movement - Height") it didn't seem to make a difference. Apparently, as far as I can tell, you can't change the projectile launch height of cone/line spells like Carrion Swarm and Breath of Fire.

The only alternative that I can see is to change it so that the damage come from dummy attackers with "Artillery (Line)" instead of dummy casters using cone/line spells. Maybe I'll play around with that later on.
 

DrinkSlurm

Eat Bachelor Chow!
Reaction score
50
mind if I change it so that the caster slams instead of casts?

You mean have the caster play the Slam animation instead of Spell? Sure, you can change whatever you want for your map.

Updated to version 1.03, redone in JASS. Consolidated all 3 spells onto 1 hero.
 

denmax

You can change this now in User CP.
Reaction score
155
I recommend increasing the height of Light Cane?

Also, why can't you just make a unit cast the spell instead of the hero (with the waits)

example is like this:

Hero casts a spell, which does nothing but trigger a unit to cast the spell that does the effect..
 

DrinkSlurm

Eat Bachelor Chow!
Reaction score
50
I recommend increasing the height of Light Cane?
Yeah, I noticed that from the very beginning. But no matter what I tried (messing around with the dummy caster's "Art - Projectile Launch - Z," "Movement - Height Minimum," and "Movement - Height") it didn't seem to make a difference. Apparently, as far as I can tell, you can't change the projectile launch height of cone/line spells like Carrion Swarm and Breath of Fire.
Also, why can't you just make a unit cast the spell instead of the hero (with the waits)

example is like this:

Hero casts a spell, which does nothing but trigger a unit to cast the spell that does the effect..
Either you're confused about how the spell works, or I'm confused about you're post.

When the Hero casts the spell, a dummy is created that casts a modified Slow on the Hero to slow it and give it a buff. Then (after a short wait) a repeating timer is started that checks for Heroes in the map that have a particular buff. If any matching units are found, then a dummy unit is created there and casts (or attacks) the effects of the spell. (And if no valid matching units with the buff are found, the timer is shut off.)
 
General chit-chat
Help Users
  • No one is chatting at the moment.
  • The Helper The Helper:
    Actually I was just playing with having some kind of mention of the food forum and recipes on the main page to test and see if it would engage some of those people to post something. It is just weird to get so much traffic and no engagement
  • The Helper The Helper:
    So what it really is me trying to implement some kind of better site navigation not change the whole theme of the site
  • Varine Varine:
    How can you tell the difference between real traffic and indexing or AI generation bots?
  • The Helper The Helper:
    The bots will show up as users online in the forum software but they do not show up in my stats tracking. I am sure there are bots in the stats but the way alot of the bots treat the site do not show up on the stats
  • Varine Varine:
    I want to build a filtration system for my 3d printer, and that shit is so much more complicated than I thought it would be
  • Varine Varine:
    Apparently ABS emits styrene particulates which can be like .2 micrometers, which idk if the VOC detectors I have can even catch that
  • Varine Varine:
    Anyway I need to get some of those sensors and two air pressure sensors installed before an after the filters, which I need to figure out how to calculate the necessary pressure for and I have yet to find anything that tells me how to actually do that, just the cfm ratings
  • Varine Varine:
    And then I have to set up an arduino board to read those sensors, which I also don't know very much about but I have a whole bunch of crash course things for that
  • Varine Varine:
    These sensors are also a lot more than I thought they would be. Like 5 to 10 each, idk why but I assumed they would be like 2 dollars
  • Varine Varine:
    Another issue I'm learning is that a lot of the air quality sensors don't work at very high ambient temperatures. I'm planning on heating this enclosure to like 60C or so, and that's the upper limit of their functionality
  • Varine Varine:
    Although I don't know if I need to actually actively heat it or just let the plate and hotend bring the ambient temp to whatever it will, but even then I need to figure out an exfiltration for hot air. I think I kind of know what to do but it's still fucking confusing
  • The Helper The Helper:
    Maybe you could find some of that information from AC tech - like how they detect freon and such
  • Varine Varine:
    That's mostly what I've been looking at
  • Varine Varine:
    I don't think I'm dealing with quite the same pressures though, at the very least its a significantly smaller system. For the time being I'm just going to put together a quick scrubby box though and hope it works good enough to not make my house toxic
  • Varine Varine:
    I mean I don't use this enough to pose any significant danger I don't think, but I would still rather not be throwing styrene all over the air
  • The Helper The Helper:
    New dessert added to recipes Southern Pecan Praline Cake https://www.thehelper.net/threads/recipe-southern-pecan-praline-cake.193555/
  • The Helper The Helper:
    Another bot invasion 493 members online most of them bots that do not show up on stats
  • Varine Varine:
    I'm looking at a solid 378 guests, but 3 members. Of which two are me and VSNES. The third is unlisted, which makes me think its a ghost.
    +1
  • The Helper The Helper:
    Some members choose invisibility mode
    +1
  • The Helper The Helper:
    I bitch about Xenforo sometimes but it really is full featured you just have to really know what you are doing to get the most out of it.
  • The Helper The Helper:
    It is just not easy to fix styles and customize but it definitely can be done
  • The Helper The Helper:
    I do know this - xenforo dropped the ball by not keeping the vbulletin reputation comments as a feature. The loss of the Reputation comments data when we switched to Xenforo really was the death knell for the site when it came to all the users that left. I know I missed it so much and I got way less interested in the site when that feature was gone and I run the site.
  • Blackveiled Blackveiled:
    People love rep, lol
    +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