[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
889
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
889
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
889
> 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
889
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
889
> 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
889
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.
  • WildTurkey WildTurkey:
    is there a stephen green in the house?
    +1
  • The Helper The Helper:
    What is up WildTurkey?
  • The Helper The Helper:
    Looks like Google fixed whatever mistake that made the recipes on the site go crazy and we are no longer trending towards a recipe site lol - I don't care though because it motivated me to spend alot of time on the site improving it and at least now the content people are looking at is not stupid and embarrassing like it was when I first got back into this like 5 years ago.
  • The Helper The Helper:
    Plus - I have a pretty bad ass recipe collection now! That section of the site is 10 thousand times better than it was before
  • The Helper The Helper:
    We now have a web designer at my job. A legit talented professional! I am going to get him to redesign the site theme. It is time.
  • Varine Varine:
    I got one more day of community service and then I'm free from this nonsense! I polished a cop car today for a funeral or something I guess
  • Varine Varine:
    They also were digging threw old shit at the sheriff's office and I tried to get them to give me the old electronic stuff, but they said no. They can't give it to people because they might use it to impersonate a cop or break into their network or some shit? idk but it was a shame to see them take a whole bunch of radios and shit to get shredded and landfilled
  • The Helper The Helper:
    whatever at least you are free
  • Monovertex Monovertex:
    How are you all? :D
    +1
  • 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 Discord

      Staff online

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top