Daskunk
SC2 Forum MVP - TheSkunk #386
- Reaction score
- 186
You can do 4 active, sure.Also, what I meant was that could you make 4 active spells (or 4 passive spells for that matter) or do you require something like 3 active, 1 passive?
You can do 4 active, sure.Also, what I meant was that could you make 4 active spells (or 4 passive spells for that matter) or do you require something like 3 active, 1 passive?
Why? What does it add that you need? The other allowed systems are simply different versions of attachment systems. TimerTicker is not an attachment system, and anything you can do with it you could do with any of the allowed attachment systems.Trollvottel said:Is the Timer Ticker system allowed too? please....
I believe Daskunk has decided to decide "winners" in the fashion I suggested on the 2nd page. This method synthesizes both a public poll (which he did mention, though vaguely) and a nitpicky judge score (which he didn't mention).emootootoo said:When I saw that quote and a few other things, I realised that this contest would be kind of different to the usual (which is nice), where it is completely based off creativity and execution isn't as important.
Then I saw this
and it explained it all!
The challenge is on! Who can make the laggiest spells?
They arent EXACTLY alike. Both of them are none-target spells wich shoot things out, just one does AOE waves and the other shoots at acuall units.
YES I HAVE DOWLOADED IT. I know they are differnt, I just think you should have a target spell or somthing. They are both just click and deal damage, and cool they make water elementals...Did you even dl the map ffs? 1 deals area damage to whoever is nearby, the other seeks out targets, and with ultimate they are even more different.
Stat or ability? Becuas stats should be pretty balanced. (Not 0 agility and 200 intelligence or anything) but abilitys are more important to balance.I wanna be in contest but i am not sure of myself. And i have a quetsion: is the stat balance important?
PS: Trollvottel, make 6 archers and highest level your hero, vs a other night elf hero with 6 archers, and see who wins. (Make both sides use abilities)
Ok, added.Daskunk, if you elaborate an extensive list of what happens with the public vote I will approve this contest.
I guess so.so, is Timer Ticker allowed or not?
Those are exactly my feelings on the subject; I really dislike the usage of custom models. The thing is, emootootoo, that people giving votes in the thread are not going to say "Oh, I'll give that spell more points because it used WC3 models."; there are no "points" involved in the public poll and the only time points are factored in is in Judges grading coding. And coding does not include SFX usage.emootootoo said:I'd just like to add something:
Since custom models are allowed I personally feel that creative use of default wc3 models to make original effects for spells should be given a lot more points than custom models.
So if you were to have some sort of marking criteria there would be something like Effect Creativity where if they just imported custom models and didn't use them creatively theyd get 0 (unless they made it), but if they used them creatively they could get a higher score. However creative use of default models would allow for a greater score.
This is entirely based on Pyro's post, where he says there will be marking after the public poll, which I agree is the best way.
Like personally I don't see why custom models are even needed considering you can make any effect you can imagine with normal Wc3 models.
So yeah, consider the idea in some shape or form.
//Cohadar's example spell using TimerTicker
//===========================================================================
// Example spell for using TT
//===========================================================================
scope Glide
globals
constant integer SID_GLIDE = 039;A000039;
private constant real SLIDE_MAX_DISTANCE = 1200.
private constant real SLIDE_SPEED = 400.
private constant real PERIOD = 0.04
endglobals
//==============================================================================
private struct SpellData
unit hero
real dx
real dy
integer ticks
endstruct
//==============================================================================
private function PeriodicFunc takes nothing returns boolean
local SpellData data = TT_GetData() // TT
local real x = GetUnitX(data.hero)+data.dx
local real y = GetUnitY(data.hero)+data.dy
call SetUnitPosition(data.hero,x,y)
set data.ticks = data.ticks - 1
if data.ticks <= 0 then
call SetUnitPathing( data.hero, true )
call PauseUnit( data.hero, false )
call data.destroy()
call SetUnitUserData(data.hero, 0)
return true // stop ticking
endif
return false
endfunction
//==============================================================================
private function Actions takes nothing returns nothing
local SpellData data = SpellData.create()
local location target = GetSpellTargetLoc()
local real Dx
local real Dy
local real distance
local real angle
set data.hero = GetTriggerUnit()
set Dx = GetLocationX(target) - GetUnitX(data.hero)
set Dy = GetLocationY(target) - GetUnitY(data.hero)
call RemoveLocation(target)
set target = null
set distance = RMinBJ(SLIDE_MAX_DISTANCE, SquareRoot(Dx * Dx + Dy * Dy))
set data.ticks = R2I(distance / (SLIDE_SPEED*PERIOD))
set angle = Atan2(Dy, Dx)
set data.dx = (SLIDE_SPEED*PERIOD) * Cos(angle)
set data.dy = (SLIDE_SPEED*PERIOD) * Sin(angle)
call SetUnitPathing( data.hero, false )
call PauseUnit( data.hero, true )
call TT_Start(function PeriodicFunc, data) // TT
endfunction
//==============================================================================
private function Conditions takes nothing returns boolean
return GetSpellAbilityId() == SID_GLIDE
endfunction
//===========================================================================
public function InitTrig takes nothing returns nothing
local trigger trig = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ( trig, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( trig, Condition( function Conditions ) )
call TriggerAddAction( trig, function Actions)
endfunction
endscope
//The spell without using TimerTicker
//===========================================================================
// Example spell for using TT
//===========================================================================
scope Glide
globals
constant integer SID_GLIDE = 039;A000039;
private constant real SLIDE_MAX_DISTANCE = 1200.
private constant real SLIDE_SPEED = 400.
private constant real PERIOD = 0.04
endglobals
//==============================================================================
private struct SpellData
unit hero
real dx
real dy
integer ticks
endstruct
//==============================================================================
private function PeriodicFunc takes nothing returns nothing
local timer T = GetExpiredTimer()
local SpellData data = SpellData(GetCSData(T))
local real x = GetUnitX(data.hero)+data.dx
local real y = GetUnitY(data.hero)+data.dy
call SetUnitPosition(data.hero,x,y)
set data.ticks = data.ticks - 1
if data.ticks <= 0 then
call SetUnitPathing( data.hero, true )
call PauseUnit( data.hero, false )
call data.destroy()
call SetUnitUserData(data.hero, 0)
call PauseTimer(T)
call DestroyTimer(T)
endif
set T = null
endfunction
//==============================================================================
private function Actions takes nothing returns nothing
local SpellData data = SpellData.create()
local location target = GetSpellTargetLoc()
local real Dx
local real Dy
local real distance
local real angle
local timer T = CreateTimer()
set data.hero = GetTriggerUnit()
set Dx = GetLocationX(target) - GetUnitX(data.hero)
set Dy = GetLocationY(target) - GetUnitY(data.hero)
call RemoveLocation(target)
set target = null
set distance = RMinBJ(SLIDE_MAX_DISTANCE, SquareRoot(Dx * Dx + Dy * Dy))
set data.ticks = R2I(distance / (SLIDE_SPEED*PERIOD))
set angle = Atan2(Dy, Dx)
set data.dx = (SLIDE_SPEED*PERIOD) * Cos(angle)
set data.dy = (SLIDE_SPEED*PERIOD) * Sin(angle)
call SetUnitPathing( data.hero, false )
call PauseUnit( data.hero, true )
call SetCSData(T, data) //I use CSCache
call TimerStart(T, PERIOD, true, PeriodicFunc)
endfunction
//==============================================================================
private function Conditions takes nothing returns boolean
return GetSpellAbilityId() == SID_GLIDE
endfunction
//===========================================================================
public function InitTrig takes nothing returns nothing
local trigger trig = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ( trig, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( trig, Condition( function Conditions ) )
call TriggerAddAction( trig, function Actions)
endfunction
endscope
But if he wants to use it I dont care.I still don't know why you need TimerTicker. It really doesn't take that much effort to change the spell code to not use it: