[Contest] Official Tower Contest - 3rd Edition (Now With Award Freshness)

emjlr3

Change can be a good thing
Reaction score
395
room for another?

though ideas are my short coming, atleast I got a few weeks to try and come up with one
 

N2o)

Retired.
Reaction score
51
sign me up, i'm sure i probably won't even make a good tower or i won't complete it but oh wells, just a bit of fun for meh.
 

Ghan

Administrator - Servers are fun
Staff member
Reaction score
888
Both added, and I'm confident you can come up with an idea by January, emjlr3. :D
 

N2o)

Retired.
Reaction score
51
----WIP---- (assumed they're allowed)

I sort of messed around with some effects for a bit and came up with this tower called Capital Punishment. Basically when a unit dies near it, it collects the corpse. You can then tell the tower to save up corpses or fire them off as they're received. Much improvement to come, Couple of Piccies:
Collecting Corpses:

Firing a single Corpse:


edit - the screenshots are kinda bad, looks alot better in game.
 

denmax

You can change this now in User CP.
Reaction score
155
I'll give it a try, but I possibly can't submit it in time for I have many things to do (example, my map)

I'm making a fresh skill for this contest only and will not be added to my map (I dun' really give a damn if I loose my ideas)

~

Yours Truly,

Thy FuKiN n0oB
 

Ghan

Administrator - Servers are fun
Staff member
Reaction score
888
Both added.

> Im in if you ever get that map finished

Yes, well.
Sigh.
I will probably have it up by tomorrow. That is to say, in the next 15-ish hours.
Nothing fancy.
Just used as a standard.
 

T3rm1nat0r

New Member
Reaction score
23
Ghan 04, for the towers, do all of the abilites have to be triggered?

or can 1 ability be normal and the other triggered?
 

Ghan

Administrator - Servers are fun
Staff member
Reaction score
888
> can 1 ability be normal and the other triggered?

Sure. That's fine.

I don't want to see NO triggering, though.
If you don't have any triggered abilities, I can guarantee you that you won't win. :p
 

T3rm1nat0r

New Member
Reaction score
23
ok thanx, i will be joining then :D

seem so the deadline is on the 2 jan, i have quite a bit of time :D
 

Ghan

Administrator - Servers are fun
Staff member
Reaction score
888
Added.

> i have quite a bit of time

Don't get complacent, though.

You should at least get started on an idea right away.
 

Demonwrath

Happy[ExtremelyOverCommercializ ed]HolidaysEveryon
Reaction score
47
We are allowed to ask for help right? On the basis at least that people don't right our code for us I would assume...Correct?
 

Ghan

Administrator - Servers are fun
Staff member
Reaction score
888
> We are allowed to ask for help right?

General help is fine.
But make sure you have tried some things yourself and don't just hand your map over to someone to finish.
 

LurkerAspect

Now officially a Super Lurker
Reaction score
118
If there's still space, I'd like to sign up as well :D

Is there more priority on how well the tower abilities work? Or is there more priority on the coding of the abilities/abilities themselves?
 

emjlr3

Change can be a good thing
Reaction score
395
Count me in, I am in a tower mode right now, so to speak :)

rofl

//====================================================

here is a tower idea that I had thought up, and took a few minutes to code up

JASS:
scope Tower

globals
    //Config. Options:
    private integer tower_id = 'XXXX' // Tower rawcode
    private integer lasso_id = 'XXXX' // Lasso ability rawcode
    private integer release_id = 'XXXX' // Release ability rawcode
    private string lasso_sfx = "XXXX" // String for desired lightning effect
    private string release_sfx = "" // Effect to create when a lasso breaks or is released
    private real damage = 150. // Damage done when a lasso breaks or is released
    private real interval = .03 // Speed of periodic timer
    private real max_dist = 1000. // Maximum distance a creep can be away before the lasso snaps
    private real min_dist = 200. // Targets closer then this distance will not be pulled at all
    private real max_duration = 15. // Maximum length of time a lasso will remain
    private real pull = .04 // Percent of distance targets are pulled back
    private real cast_height = 200. // Height to create lasso lightning on caster
    private real targ_height = 35. // Height to create lasso lightning on target 
   
    //Needed Globals:
    private dat array Data
    private integer Count = 0
    private timer T = CreateTimer()
endglobals

//============================================================================
private struct dat
    unit cast
    real Xcast
    real Ycast
    unit targ
    lightning lasso
    real time = 0.
   
    // Lasso is done for the target
    method End takes integer i return integer
        // Destroy lasso
        call DestroyLightning(.lasso)
        // Update stored structs and counting of them
        set Data<i> = Data[Count]
        set Count = Count - 1
        // Destroy struct
        call .destroy()
        // Subtract 1 from current loop, so we run through the newly updated Data<i>
        return i - 1
    endmethod
endstruct

//============================================================================
// Checks to see if a location is pathable or not
private function CheckPathabilityTrickGet takes nothing returns nothing
    set bj_rescueChangeColorUnit = bj_rescueChangeColorUnit or (GetEnumItem()!=bj_itemRandomCurrentPick)
endfunction 
private function CheckPathabilityTrick takes item p, real x, real y returns boolean
    local integer i = 30
    local rect r
   
    call SetItemPosition(p,x,y)
    if Pow(GetItemX(p)-x,2)+Pow(GetItemY(p)-y,2)&lt;=100 then
        return true
    endif
    set r = Rect(x-i,y-i,x+i,y+i)
    set bj_itemRandomCurrentPick = p
    set bj_rescueChangeColorUnit = false
    call EnumItemsInRect(r,null,function CheckPathabilityTrickGet)
   
    call RemoveRect(r)
    set r = null
    return bj_rescueChangeColorUnit
endfunction  
private function CheckPathability takes real x, real y returns boolean
    local item it = CreateItem(&#039;ciri&#039;,x,y)
    local boolean b = CheckPathabilityTrick(it,x,y)
   
    call SetItemVisible(it,false)
    call RemoveItem(it)
   
    set it = null
    return b
endfunction

// Distance and angle between coordinates
private function DBPXY takes real x1, real y1, real x2, real y2 returns real
    return SquareRoot((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2))
endfunction
private function ABPXY takes real x1, real y1, real x2, real y2 returns real
    return Atan2(y2-y1, x2-x1)
endfunction

private function Movement takes nothing returns nothing
    local integer i = 1
    local dat d
    local real x
    local real y
    local real ang
    local real dist
   
    // Loop through current instances
    loop
        exitwhen i&gt;Count
        set d = Data[Count]
       
        // Store targets current coordinates and distance from caster
        set x = GetUnitX(d.targ)
        set y = GetUnitY( d.targ)
        set dist = DBPXY(d.Xcast,d.Ycast,x,y)
       
        if dist&gt;max_dist then
            // Lasso is past its max length, create neat effect, damage target, end instance
            call DestroyEffect(AddSpecialEffectTarget(release_sfx, d.targ,&quot;chest&quot;))
            call UnitDamageTarget(d.cast,d.targ,damage,false,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,null)
            set i = d.End(i)
        elseif d.time&gt;max_duration or GetWidgetLife( d.cast)&lt;.405 or GetWidgetLife(d.targ)&lt;.405 then
            // Lasso duration is up or the caster or target is dead, end instance, deal no damage and create no effect
            set i = d.End(i)
        else
            // Lasso is still in progress, update targets location and lassos location, if possible
            set ang = ABPXY(d.Xcast,d.Ycast,x,y)
            // Check if there is slack left in the lasso
            if dist&gt;min_dist then
                // There isn&#039;t, woot!
                set dist = pull * dist
                set x = x + dist * Cos(ang)
                set y = y + dist * Sin(ang)
                // See if coordiantes to move to are pathable, if so, move the target there
                if CheckPathability(x,y) then
                    call SetUnitX(d.targ,x)
                    call SetUnitY(d.targ,y)
                    call MoveLightningEx(d.lasso,true,d.Xcast,d.Ycast,cast_height,x,y,targ_height)
                else
                    // Not pathable, update lightning to targets current position
                    call MoveLightningEx(d.lasso,true,d.Xcast,d.Ycast,cast_height,GetUnitX(d.targ),GetUnitY( d.targ),targ_height)
                endif
            endif  
        endif
       
        set i = i + 1
    endloop
   
    // If there are no more instances, pause the timer
    if Count==0 then
        call PauseTimer(T)
    endif
endfunction
private function Lasso takes nothing returns nothing
    local dat d = dat.create()
   
    // Store needed data
    set d.cast = GetTriggerUnit()
    set d.Xcast = GetUnitX(d.cast)
    set d.Ycast = GetUnitY(d.cast)
    set d.targ = GetSpellTargetUnit()
    // Create our lasso
    set d.lasso = AddLightningEx(lasso_sfx,true,d.Xcast,d.Ycast,cast_height,GetUnitX( d.targ),GetUnitY(d.targ),targ_height)
   
    // Increase struct count by 1
    set Count = Count + 1
    // Store our new struct
    set Data[Count] = d
    // Start timer if this is the first new struct stored
    if Count==1 then
        call TimerStart(T,interval,true,function Movement)
    endif
endfunction

//============================================================================
private function Release takes nothing returns nothing
    local unit u = GetTriggerUnit()
    local dat d
    local integer i = 1
   
    // Loop through current instances
    loop
        exitwhen i&gt;Count
        set d = Data[Count]
       
        if u==d.cast then
            // This instance was started by this tower, end it, deal damage and create the neat effect
            call DestroyEffect(AddSpecialEffectTarget(release_sfx,d.targ,&quot;chest&quot;))
            call UnitDamageTarget(u,d.targ,damage,false,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,null)
            set i = d.End(i)
        endif
       
        set i = i + 1
    endloop
   
    set u = null
endfunction

//============================================================================
// What to do after this cast?
private function Conds takes nothing returns boolean
    if GetUnitTypeId(GetTriggerUnit())!=tower_id then
        // Incorrect tower type
        return false
    elseif GetSpellAbilityId()==lasso_id then
        // Lets lasso that target!
        call Lasso()
    else
        // Release em up!
        call Release()
    endif
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 Conds))

    set trig = null
endscope</i></i>


not sure if I will use this, it hasn't seen anything but JASSCraft thus far

basically the idea was:

Tower can cast a Lasso ability, which connects an Aerial Shackle like lightning between the target and caster. This lasts for up to X seconds, with the cd being a good bit lower then the duration. This lasso acts like a rubber band, if the target is within a small range of the tower, it is unaffected, however, the farther the target moves, the tighter the lasso becomes, and the stronger the pull on the target back towards the caster. If the lasso reaches some limit X, is snaps, created neat effects and damaging the target. The caster can alternatively cast a Release ability, which releases all current lassoed units as though the lassoes had snapped, dealing damage and creating neat effects.

The idea, its a different take on a slow ability for a tower, which as the potential to deal damage. The tower would most likely keep an attack, so it can slow many nearby units, and still attack, while dealing damage as units lasssos snap.
 

rodead

Active Member
Reaction score
42
rofl

//====================================================

here is a tower idea that I had thought up, and took a few minutes to code up

JASS:
scope Tower

globals
    //Config. Options:
    private integer tower_id = &#039;XXXX&#039; // Tower rawcode
    private integer lasso_id = &#039;XXXX&#039; // Lasso ability rawcode
    private integer release_id = &#039;XXXX&#039; // Release ability rawcode
    private string lasso_sfx = &quot;XXXX&quot; // String for desired lightning effect
    private string release_sfx = &quot;&quot; // Effect to create when a lasso breaks or is released
    private real damage = 150. // Damage done when a lasso breaks or is released
    private real interval = .03 // Speed of periodic timer
    private real max_dist = 1000. // Maximum distance a creep can be away before the lasso snaps
    private real min_dist = 200. // Targets closer then this distance will not be pulled at all
    private real max_duration = 15. // Maximum length of time a lasso will remain
    private real pull = .04 // Percent of distance targets are pulled back
    private real cast_height = 200. // Height to create lasso lightning on caster
    private real targ_height = 35. // Height to create lasso lightning on target 
   
    //Needed Globals:
    private dat array Data
    private integer Count = 0
    private timer T = CreateTimer()
endglobals

//============================================================================
private struct dat
    unit cast
    real Xcast
    real Ycast
    unit targ
    lightning lasso
    real time = 0.
   
    // Lasso is done for the target
    method End takes integer i return integer
        // Destroy lasso
        call DestroyLightning(.lasso)
        // Update stored structs and counting of them
        set Data<i> = Data[Count]
        set Count = Count - 1
        // Destroy struct
        call .destroy()
        // Subtract 1 from current loop, so we run through the newly updated Data<i>
        return i - 1
    endmethod
endstruct

//============================================================================
// Checks to see if a location is pathable or not
private function CheckPathabilityTrickGet takes nothing returns nothing
    set bj_rescueChangeColorUnit = bj_rescueChangeColorUnit or (GetEnumItem()!=bj_itemRandomCurrentPick)
endfunction 
private function CheckPathabilityTrick takes item p, real x, real y returns boolean
    local integer i = 30
    local rect r
   
    call SetItemPosition(p,x,y)
    if Pow(GetItemX(p)-x,2)+Pow(GetItemY(p)-y,2)&lt;=100 then
        return true
    endif
    set r = Rect(x-i,y-i,x+i,y+i)
    set bj_itemRandomCurrentPick = p
    set bj_rescueChangeColorUnit = false
    call EnumItemsInRect(r,null,function CheckPathabilityTrickGet)
   
    call RemoveRect(r)
    set r = null
    return bj_rescueChangeColorUnit
endfunction  
private function CheckPathability takes real x, real y returns boolean
    local item it = CreateItem(&#039;ciri&#039;,x,y)
    local boolean b = CheckPathabilityTrick(it,x,y)
   
    call SetItemVisible(it,false)
    call RemoveItem(it)
   
    set it = null
    return b
endfunction

// Distance and angle between coordinates
private function DBPXY takes real x1, real y1, real x2, real y2 returns real
    return SquareRoot((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2))
endfunction
private function ABPXY takes real x1, real y1, real x2, real y2 returns real
    return Atan2(y2-y1, x2-x1)
endfunction

private function Movement takes nothing returns nothing
    local integer i = 1
    local dat d
    local real x
    local real y
    local real ang
    local real dist
   
    // Loop through current instances
    loop
        exitwhen i&gt;Count
        set d = Data[Count]
       
        // Store targets current coordinates and distance from caster
        set x = GetUnitX(d.targ)
        set y = GetUnitY( d.targ)
        set dist = DBPXY(d.Xcast,d.Ycast,x,y)
       
        if dist&gt;max_dist then
            // Lasso is past its max length, create neat effect, damage target, end instance
            call DestroyEffect(AddSpecialEffectTarget(release_sfx, d.targ,&quot;chest&quot;))
            call UnitDamageTarget(d.cast,d.targ,damage,false,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,null)
            set i = d.End(i)
        elseif d.time&gt;max_duration or GetWidgetLife( d.cast)&lt;.405 or GetWidgetLife(d.targ)&lt;.405 then
            // Lasso duration is up or the caster or target is dead, end instance, deal no damage and create no effect
            set i = d.End(i)
        else
            // Lasso is still in progress, update targets location and lassos location, if possible
            set ang = ABPXY(d.Xcast,d.Ycast,x,y)
            // Check if there is slack left in the lasso
            if dist&gt;min_dist then
                // There isn&#039;t, woot!
                set dist = pull * dist
                set x = x + dist * Cos(ang)
                set y = y + dist * Sin(ang)
                // See if coordiantes to move to are pathable, if so, move the target there
                if CheckPathability(x,y) then
                    call SetUnitX(d.targ,x)
                    call SetUnitY(d.targ,y)
                    call MoveLightningEx(d.lasso,true,d.Xcast,d.Ycast,cast_height,x,y,targ_height)
                else
                    // Not pathable, update lightning to targets current position
                    call MoveLightningEx(d.lasso,true,d.Xcast,d.Ycast,cast_height,GetUnitX(d.targ),GetUnitY( d.targ),targ_height)
                endif
            endif  
        endif
       
        set i = i + 1
    endloop
   
    // If there are no more instances, pause the timer
    if Count==0 then
        call PauseTimer(T)
    endif
endfunction
private function Lasso takes nothing returns nothing
    local dat d = dat.create()
   
    // Store needed data
    set d.cast = GetTriggerUnit()
    set d.Xcast = GetUnitX(d.cast)
    set d.Ycast = GetUnitY(d.cast)
    set d.targ = GetSpellTargetUnit()
    // Create our lasso
    set d.lasso = AddLightningEx(lasso_sfx,true,d.Xcast,d.Ycast,cast_height,GetUnitX( d.targ),GetUnitY(d.targ),targ_height)
   
    // Increase struct count by 1
    set Count = Count + 1
    // Store our new struct
    set Data[Count] = d
    // Start timer if this is the first new struct stored
    if Count==1 then
        call TimerStart(T,interval,true,function Movement)
    endif
endfunction

//============================================================================
private function Release takes nothing returns nothing
    local unit u = GetTriggerUnit()
    local dat d
    local integer i = 1
   
    // Loop through current instances
    loop
        exitwhen i&gt;Count
        set d = Data[Count]
       
        if u==d.cast then
            // This instance was started by this tower, end it, deal damage and create the neat effect
            call DestroyEffect(AddSpecialEffectTarget(release_sfx,d.targ,&quot;chest&quot;))
            call UnitDamageTarget(u,d.targ,damage,false,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,null)
            set i = d.End(i)
        endif
       
        set i = i + 1
    endloop
   
    set u = null
endfunction

//============================================================================
// What to do after this cast?
private function Conds takes nothing returns boolean
    if GetUnitTypeId(GetTriggerUnit())!=tower_id then
        // Incorrect tower type
        return false
    elseif GetSpellAbilityId()==lasso_id then
        // Lets lasso that target!
        call Lasso()
    else
        // Release em up!
        call Release()
    endif
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 Conds))

    set trig = null
endscope</i></i>


not sure if I will use this, it hasn't seen anything but JASSCraft thus far

basically the idea was:

Tower can cast a Lasso ability, which connects an Aerial Shackle like lightning between the target and caster. This lasts for up to X seconds, with the cd being a good bit lower then the duration. This lasso acts like a rubber band, if the target is within a small range of the tower, it is unaffected, however, the farther the target moves, the tighter the lasso becomes, and the stronger the pull on the target back towards the caster. If the lasso reaches some limit X, is snaps, created neat effects and damaging the target. The caster can alternatively cast a Release ability, which releases all current lassoed units as though the lassoes had snapped, dealing damage and creating neat effects.

The idea, its a different take on a slow ability for a tower, which as the potential to deal damage. The tower would most likely keep an attack, so it can slow many nearby units, and still attack, while dealing damage as units lasssos snap.




it is a good idea but hard to make for me hope you get it done i am curious on how it is going to look like ;)
 

Cohadar

master of fugue
Reaction score
209
I already saw a laso ability somewhere, (maybe even you were the author)

Anyways make it a cowboy tower.
It laso'es the creps and then whips them with whip attack :D
 

Ghan

Administrator - Servers are fun
Staff member
Reaction score
888
Both new entrants added.

I "finished" the test map.
All it is is a track around which a bunch of creeps run. All the time.

Download here:
 

Attachments

  • Tower Contest Test Map.w3x
    27.6 KB · Views: 569

Miz

Administrator
Reaction score
424
Hmmm... I like to see what these will look like when finished, XD

I don't want to see NO triggering, though.
If you don't have any triggered abilities, I can guarantee you that you won't win.

Well you ruined my fun
I may chip in extra rep if you want :rolleyes:

(I still smell the freshness of febreze (Title Joke))
 
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