[Contest] Official Christmas Spell Contest

Doom-Angel

Jass User (Just started using NewGen)
Reaction score
167
im too busy in school exams and i don't think i will have enough time to do my spell till then (i had a nice idea...)
 

The Undaddy

Creating with the power of rage
Reaction score
55
A finished product :p

Snowball

Throws a snowball at the target location,which leaves icy particles behind itself.Upon reaching it's limit of 1200 units,the snowball will explode,spraying ice,damaging all units in 450 AoE.

JASS
MUI
If 3 snowballs are cast at once,kind of lags.

Screenshots by darkRae:

6yfm00j.jpg


8alvhw6.jpg


7xui4hu.jpg

Updated to v1.01 (or v1.0000001 if you like :D)

Tooltip improved.Added blood effects and a bit of pushback.
 

Attachments

  • Snowball v1.01.w3x
    51.6 KB · Views: 255

darkRae

Ueki Fan (Ueki is watching you)
Reaction score
173
Wow, cool spell! :eek:

Since there isn't any screenshots at the moment, I'll be kind and provide some ;)

6yfm00j.jpg
8alvhw6.jpg
7xui4hu.jpg

I love how you made that 'final splash' effect :D
I recommend you to improve the tooltip.
Use paragraphs.
 

FroznYoghurt

New Member
Reaction score
37
niiiiice, i really like Snowball. Really eyecandish in on a still pretty modest level, apealing but not epelepsying.
Nice work :D
Id put my bets on Snowball (and maybe cool whip, if it is as good as it seems)

Btw updated my spell \o>
Im considering adding a third option to it; if no units are hit. But that won't fit in the tooltip :(. Wadda i do?
 

Pyrogasm

There are some who would use any excuse to ban me.
Reaction score
134
Well... I should have posted my idea earlier, but my third and final idea is as follows:
Borealis Beam
Condenses moisture in the air into a chilling mass and hurls it at target unit or point. This mass will travel a short distance before expiring,_but should it contact a unit or destructible it will reflect off of that unit, slow it, and continue on in its new direction.

At the end of the mass' path it will disintigrate and freeze all nearby units solid for a duration.​
Imagine a shockwave that bounces off of units, destructibles, and steep terrain.
 

darkRae

Ueki Fan (Ueki is watching you)
Reaction score
173
Why do you have multiple ideas?
First the disease.
Second the graves.
Now a bouncing shockwave.

Is making three spells allowed in this contest?
But only one spell is going to be used right?

EDIT:
Ah, I see.
(I didn't bother to make a reply because emjlr3 would just delete it because it's not so important)
 

Pyrogasm

There are some who would use any excuse to ban me.
Reaction score
134
I have multiple ideas because I've come up with multiple ideas.
Of course I'm only making one, and it's the last one.
 

Rheias

New Helper (I got over 2000 posts)
Reaction score
232
> Is making three spells allowed in this contest?

By all means, no.
 

Bloodydood

New Member
Reaction score
14
Imma enter this. I don't have much time, but I usually work over night so it won't be much of a problem.
 

0zaru

Learning vJASS ;)
Reaction score
60
I have a question, can i use a SimError function ? Because i want to detect a minimun range and display an error >.<
 

Pyrogasm

There are some who would use any excuse to ban me.
Reaction score
134
No, it is not. It's part of CSSafety by Vexorian.
 

R@i_no_Wyrm

New Member
Reaction score
43
I can't think of a good skill; here is mine, got the idea from Tokiya's Tsurara Mai (Flame of Recca)

Ice Spike
Conjures a path of Ice spikes that will create cold atmosphere that slows units around. The ice spikes will chase a target unit even it moves slowly, but as time passes the speed will be faster. Units got hit will be frozen; frozen units are invulnerable but they can't move.

icespikesmk1.jpg
 

0zaru

Learning vJASS ;)
Reaction score
60
Well I will not submit my spell at all, first I need to check my vjass skills. And since I haven't posted a single spell with vjass, I will pass this time to make sure that in the next contest I will have a little more exp with vjass.
 
Reaction score
456
The great.. Überplayer.. presents.. nothing too impressive..

ICE BURST
¯¯ ¯¯¯ ¯¯¯¯ ¯¯¯ ¯¯


Winter Beast slams the ground,
causing solid ice to burst out in two curvy lines
towards the target point, freezing, pushing away,
and damaging enemy ground units in the paths.

Level 1: The burst paths have a distance of 600. Units take 75 damage, and get slowed by 25% for 4 seconds.
Level 2: The burst paths have a distance of 800. Units take 125 damage, and get slowed by 50% for 5 seconds.
Level 3: The burst paths have a distance of 1000. Units take 175 damage, and get slowed by 75% for 6 seconds.


Screenshots:
pic1con.png


pic2con.png

Code:
JASS:
scope IceBurst

//Made by: Überplayer
//Credits: Cohadar - for ABC

// INSTRUCTIONS (How to use?)
//
// 1. Copy the &quot;Ice Burst&quot; spell from the Object Editor.

// 2. Copy the &quot;[Dummy Freeze] - Ice Burst&quot; spell from the Object Editor.

// 3. Copy the &quot;[Dummy Caster] - Ice Burst&quot; unit from the Object Editor.

// 4. Copy the &quot;[Dummy &quot;Solid Ice&quot;] - Ice Burst&quot; unit from the Object Editor.

// 5. If you don&#039;t already have ABC v5.1 in your map, then copy the &quot;ABC&quot; trigger.

// 6. If you don&#039;t already have a Knockback System in your map, then copy the
//    &quot;Knockback System&quot; trigger. The version in this map doesn&#039;t use BorderSafety.
//    You can get the correct version from: &quot;http://www.thehelper.net/forums/showthread.php?t=77371&quot;.
//
// 7. Then you can copy this trigger to your map.
//
// 8. Make sure that the rawcodes from this spells CONFIGURATION MENU match the ones
//    in your map. You can also change the other values inside the CONFIGURATION MENU,
//    so you change the spell to your liking. Something can be changed from the Object Editor
//    also.
//
// 9. Have fun!   

// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
//CONFIGURATION MENU
    globals
    //RAWCODE/ORDER SETTINGS
        //Rawcode of the spell
        private constant integer spellId = &#039;A000&#039;
        //Rawcode of the dummy ice
        private constant integer dummyIceId = &#039;h001&#039;
        //Rawcode of the dummy caster
        private constant integer dummyCasterId = &#039;h002&#039;
        //Rawcode of the dummy spell
        private constant integer dummySpellId = &#039;A001&#039;
        //Order string of the dummy spell
        private constant string dummySpellOrder = &quot;slow&quot;
        
    //BURST SETTINGS
        //How often do the bursts happen
        private constant real interval = 0.15
        //How long is the lifetime of a dummyIce
        private constant real iceLifetime = 1.00
        //Model path of the burst effect (remember double slashes &quot;\\&quot;)
        private constant string burstPath = &quot;Abilities\\Spells\\Undead\\FrostNova\\FrostNovaTarget.mdl&quot;
        //ID of the terrain type under the paths (set to 0, if you don&#039;t want the terrain to change)
        private constant integer terrainId = &#039;Iice&#039;
        //How long does the changed terrain last for
        private constant real terrainDuration = 2.25
        //How big is the area where to units are damaged from the paths
        private constant real damageArea = 128.00
        //How much do the paths spread (angle value)
        private constant real pathSpread = 70.00
        
    //KNOCKBACK SETTINGS
        //How far the units are knocked back
        private constant real knockDistance = 256.00
        //Duration of the knockback
        private constant real knockDuration = 0.80
        //Model path of the knockback effect
        private constant string knockPath = &quot;Abilities\\Weapons\\FrostWyrmMissile\\FrostWyrmMissile.mdl&quot;
        //Attach point of the knockback effect
        private constant string attachPoint = &quot;chest&quot;
    endglobals
    
    private constant function PathDistance takes integer level returns real
        //How far will the paths travel
        return 400.00 + (level * 200.00)
    endfunction
    
    private constant function PathDuration takes integer level returns real
        //How long does it last for the paths to travel their distance
        return 1.00 + (level * 0.35)
    endfunction
    
    private constant function DamageDealt takes integer level returns real
        //How much damage does the spell deal
        return 25.00 + (level * 50.00)
    endfunction
    
    private function DamageFilter takes unit caster, unit target returns boolean
        //What kind of units get damaged
        //&quot;caster&quot; is the caster of this spell
        //&quot;target&quot; is the unit which is going to take damage if this function returns true
        return (IsUnitEnemy(target, GetOwningPlayer(caster))) and (IsUnitType(target, UNIT_TYPE_GROUND)) and (GetUnitState(target, UNIT_STATE_LIFE) &gt; 0.00)
    endfunction
//END OF CONFIGURATION MENU
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

private struct IBdata
    unit caster
    integer level
    real current1X
    real current1Y
    real current2X
    real current2Y
    real direction
    
    real damage
    
    real periodDistance
    
    timer myTimer = CreateTimer()
    integer ticks
    integer count
    
    group damageGroup = CreateGroup()
    
    static method create takes unit caster, integer level, real distance, real duration, real damage returns IBdata
        local IBdata dat = IBdata.allocate()
        
        set dat.caster = caster
        set dat.level = level
        set dat.current1X = GetUnitX(dat.caster)
        set dat.current1Y = GetUnitY(dat.caster)
        set dat.current2X = dat.current1X
        set dat.current2Y = dat.current1Y
        set dat.direction = GetUnitFacing(dat.caster)
        
        set dat.damage = damage
        
        set dat.periodDistance = (distance / duration * interval) 
        
        set dat.ticks = R2I(duration/interval)
        set dat.count= dat.ticks
        
        call SetTimerStructA(dat.myTimer, dat)
        
        return dat
    endmethod
    
    method onDestroy takes nothing returns nothing
        call ClearTimerStructA(.myTimer)
        call PauseTimer(.myTimer)
        call DestroyTimer(.myTimer)
        call DestroyGroup(.damageGroup)
    endmethod
endstruct

private function ResetTerrain takes real x, real y, integer terrainType, integer terrainVariance returns nothing
    call PolledWait(terrainDuration)
    call SetTerrainType(x, y, terrainType, terrainVariance, 1, 0)
endfunction 

private function FadeDummies takes unit d returns nothing
    local integer index = 0
    call PolledWait(iceLifetime)
    loop
        exitwhen (index == 10)
        call SetUnitVertexColor(d, 255, 255, 255, R2I((100 - (100/10*index)) * I2R(255) * 0.01))
        call TriggerSleepAction(0.00)
        set index = index + 1
    endloop
    call RemoveUnit(d)
endfunction

private function IceBurstHandler_actions takes nothing returns nothing
    local timer exprTimer = GetExpiredTimer()
    local IBdata dat = GetTimerStructA(exprTimer)
    local real tempX
    local real tempY
    local group g = CreateGroup()
    local group g2 = CreateGroup()
    local unit f
    local real angle
    local unit d
    local unit a
    
    if (dat.ticks &lt;= 0) then
        call dat.destroy()
    else
        set dat.ticks = dat.ticks - 1
        
        set dat.current1X = dat.current1X + dat.periodDistance * Cos((dat.direction + (((pathSpread / 2) / dat.count) * (dat.count - dat.ticks))) * bj_DEGTORAD)
        set dat.current1Y = dat.current1Y + dat.periodDistance * Sin((dat.direction + (((pathSpread / 2) / dat.count) * (dat.count - dat.ticks))) * bj_DEGTORAD)
        set dat.current2X = dat.current2X + dat.periodDistance * Cos((dat.direction - (((pathSpread / 2) / dat.count) * (dat.count - dat.ticks))) * bj_DEGTORAD)
        set dat.current2Y = dat.current2Y + dat.periodDistance * Sin((dat.direction - (((pathSpread / 2) / dat.count) * (dat.count - dat.ticks))) * bj_DEGTORAD)
        
        call DestroyEffect(AddSpecialEffect(burstPath, dat.current1X, dat.current1Y))
        set d = CreateUnit(GetOwningPlayer(dat.caster), dummyIceId, dat.current1X, dat.current1Y, GetRandomReal(0.00, 359.00))
        call SetUnitPosition(d, dat.current1X, dat.current1Y)
        call FadeDummies.execute(d)
        call GroupEnumUnitsInRange(g, dat.current1X, dat.current1Y, damageArea, null)
        if ((terrainId != 0) and (GetTerrainType(dat.current1X, dat.current1Y) != terrainId)) then
            call ResetTerrain.execute(dat.current1X, dat.current1Y, GetTerrainType(dat.current1X, dat.current1Y), GetTerrainVariance(dat.current1X, dat.current1Y))
            call SetTerrainType(dat.current1X, dat.current1Y, terrainId, -1, 1, 0)
        endif
        
        call DestroyEffect(AddSpecialEffect(burstPath, dat.current2X, dat.current2Y))
        set d = CreateUnit(GetOwningPlayer(dat.caster), dummyIceId, dat.current2X, dat.current2Y, GetRandomReal(0.00, 359.00))
        call SetUnitPosition(d, dat.current2X, dat.current2Y)
        call FadeDummies.execute(d)
        call GroupEnumUnitsInRange(g2, dat.current2X, dat.current2Y, damageArea, null)
        if ((terrainId != 0) and (GetTerrainType(dat.current2X, dat.current2Y) != terrainId)) then
            call ResetTerrain.execute(dat.current2X, dat.current2Y, GetTerrainType(dat.current2X, dat.current2Y), GetTerrainVariance(dat.current2X, dat.current2Y))
            call SetTerrainType(dat.current2X, dat.current2Y, terrainId, -1, 1, 0)
        endif

        call GroupAddGroup(g2, g)
        loop
            set f = FirstOfGroup(g)
            exitwhen (f == null)
            call GroupRemoveUnit(g, f)
            if ((DamageFilter(dat.caster, f)) and (IsUnitInGroup(f, dat.damageGroup) == false)) then
                set a = CreateUnit(GetOwningPlayer(dat.caster), dummyCasterId, dat.current1X, dat.current1Y, 0.00)
                set angle = bj_RADTODEG * Atan2(GetUnitY(f) - GetUnitY(a), GetUnitX(f) - GetUnitX(a))
                call UnitKnockTargetEx(a, f, angle, knockDistance, dat.damage, knockDuration, knockPath, attachPoint)
                call UnitAddAbility(a, dummySpellId)
                call SetUnitAbilityLevel(a, dummySpellId, dat.level)
                call IssueTargetOrder(a, dummySpellOrder, f)
                call UnitApplyTimedLife(a, 0, 2.00)
                call GroupAddUnit(dat.damageGroup, f)
            endif
        endloop
        
        set d = null
        set f = null
        set a = null
    endif
    
    set exprTimer = null
    call DestroyGroup(g)
    set g = null
    call DestroyGroup(g2)
    set g2 = null
endfunction
    
private function IceBurstMain_conditions takes nothing returns boolean
    return GetSpellAbilityId() == spellId
endfunction

private function IceBurstMain_actions takes nothing returns nothing
    local unit caster = GetTriggerUnit()
    local integer level = GetUnitAbilityLevel(caster, spellId)
    local IBdata dat = IBdata.create(caster, level, PathDistance(level), PathDuration(level), DamageDealt(level))

    call TimerStart(dat.myTimer, interval, true, function IceBurstHandler_actions)
    
    set caster = null
endfunction
    
function InitTrig_Ice_Burst takes nothing returns nothing
    local trigger trig = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(trig, EVENT_PLAYER_UNIT_SPELL_EFFECT)
    call TriggerAddAction(trig, function IceBurstMain_actions)
    call TriggerAddCondition(trig, Condition(function IceBurstMain_conditions))
    call Preload(burstPath)
    call Preload(knockPath)
    set trig = null
endfunction

endscope


Map:
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      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