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

~GaLs~

† Ғσſ ŧħə ѕαĸε Φƒ ~Ğ䣚~ †
Reaction score
180
I'm in, once the spell contest had finished.
 

N2o)

Retired.
Reaction score
51
Your unstick trigger kills anybody who is stunned, maybe you should change so that any who are stuck move to the next region.
 

rodead

Active Member
Reaction score
42
Sig, i got some problems with my spell since it needs to be MUI. i think?
but thats why it needs some more time for making it MUI...
 

LurkerAspect

Now officially a Super Lurker
Reaction score
118
Er... when the testing takes place... um... do you need to... er... build more than one tower..?

I have this really irritating problem you see... it works fine with just one tower, but anymore, and every single other tower of that type goes and f***s itself up.
 

Ghan

Administrator - Servers are fun
Staff member
Reaction score
889
> I have this really irritating problem you see... it works fine with just one tower, but anymore, and every single other tower of that type goes and f***s itself up.

That would be making your tower's abilities MUI.
So that more than one can use it at the same time.
It's preferable, but not absolutely necessary.
 

C0mput3r

New Member
Reaction score
20
Slightly Off Topic...

That would be making your tower's abilities MUI.
Uh i know what MUI means, but what does it really stand for?
GUI=Graphic User Interface
JASS=Just Another Scripting System
MUI=???

(On topic part) ... kinda

How do you make a spell MUI is it possible w/ GUI or only w/ JASS?

Edit: Thx for Replying so fast :) 1 min off
 

Ghan

Administrator - Servers are fun
Staff member
Reaction score
889
MUI = Multi Unit Instancable

> How do you make a spell MUI is it possible w/ GUI or only w/ JASS?

It depends very much on your specific situation.
It's usually possible with either, but sometimes it can be very difficult to do in GUI.
 

turok255

New Member
Reaction score
30
MUI = Multi Unit Instancable

> How do you make a spell MUI is it possible w/ GUI or only w/ JASS?

It depends very much on your specific situation.
It's usually possible with either, but sometimes it can be very difficult to do in GUI.

o_O MUI didn't dawn on me that it would effect towers :nuts: Hmmm, If you use locals instead of globals that makes it MUI right?
 

Ghan

Administrator - Servers are fun
Staff member
Reaction score
889
> MUI didn't dawn on me that it would effect towers

If you have a triggered ability that can't operate with multiple towers at the same time....

> If you use locals instead of globals that makes it MUI right?

Generally.
 

N2o)

Retired.
Reaction score
51
Well here's my piece guys: Capital Punishment
This tower is indeed morbid as it collects corpses to fire at creeps or to store them up for a rather bloody ultimate. This ultimate requires 10 corpses and the tower has to channel through the sadistic act.

Comments appreciated, they can help me improve the tower and hopefully to give me the edge. Just to note, the 2 Jass triggers, are my 1st ever jass triggers made, they probably suck, but it makes the tower MUI.

To Ghan:
I changed the map slightly changing the Unstick trigger because it was killing stunned units and removing some magic immunities, please tell me if this is a problem.

I hope this sets the standard :rolleyes:

P.S. the importing guide is crap.
and it may require vJass, im not sure.
 

Attachments

  • Capital_Punishment.w3x
    39.4 KB · Views: 213

emjlr3

Change can be a good thing
Reaction score
395
Lasso Tower

Lasso Tower

Throw a lasso around the target, creating a rubber band like effect between the caster and target. The further way the target moves, the stronger the pull becomes, until the lasso snaps, dealing damage, or the duration expires. All lassos from a tower can be released, initiating a snap like effect, at the click of a button


blurg.jpg

JASS:
scope Lasso

//******************************************************************************************
//*
//* Lasso Tower 
//*
//*  A tower which can lasso units, initiating a rubber band like effect between it
//*  and the target.  The lasso snaps at a maximum distance, and all lassoes on a tower
//*  can be released at the click of a button.
//* 
//*  Requires:
//*    - This trigger copied to your map
//*    - Configuration of the given globals
//*
//******************************************************************************************

globals
    // Config. Options:
    private integer tower_id = 'hgtw' // Tower rawcode
    private integer lasso_id = 'A000' // Lasso ability rawcode
    private integer release_id = 'A001' // Release ability rawcode
    private string lasso_sfx = "LEAS" // String for desired lightning effect
    private string release_sfx = "Abilities\\Spells\\Demon\\DarkPortal\\DarkPortalTarget.mdl" // 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 = 750. // 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 = .03 // Percent of distance targets are pulled back
    private real cast_height = 200. // Height to create lasso lightning on caster
    private real targ_height = 45. // Height to create lasso lightning on target
    private boolean stacking = false // Whether multiple towers can lasso the same creep at once
   
    // Needed Globals:
    private Lasso_data array Data
    private integer Count = 0
    private timer T = CreateTimer()
endglobals

//============================================================================
struct Lasso_data
    unit cast
    real Xcast
    real Ycast
    unit targ
    lightning lasso
    real time = 0.
   
    // Lasso is done for the target
    method End takes integer i returns 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 Lasso_data 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<i>
       
        // Update duration
        set d.time = d.time + interval
        // 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 coordinates 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 Lasso_data d = Lasso_data.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 Lasso_data d
    local integer i = 1
   
    // Loop through current instances
    loop
        exitwhen i&gt;Count
        set d = Data<i>
       
        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

//============================================================================
private function SimError takes player ForPlayer, string msg returns nothing
    local sound error = CreateSoundFromLabel( &quot;InterfaceError&quot;,false,false,false,10,10)
   
    if GetLocalPlayer() == ForPlayer then
        call ClearTextMessages()
        call DisplayTimedTextToPlayer( ForPlayer, 0.52, -1.00, 2.00, &quot;|cffffcc00&quot;+msg+&quot;|r&quot; )
        call StartSound( error )
    endif
 
    call KillSoundWhenDone( error)
    set error = 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()
    elseif GetSpellAbilityId()==release_id then
        // Release em up!
        call Release()
    endif
    return false
endfunction
// What if a tower tries to cast on the same creep twice?
// Or two towers try and cast on the same creep at the same time?
private function Stop takes nothing returns boolean
    local unit u = GetTriggerUnit()
    local unit targ = GetSpellTargetUnit()
    local Lasso_data d
    local integer i = 1
   
    // Loop through current instances
    loop
        exitwhen i&gt;Count
        set d = Data<i>
        
        if d.cast==u and d.targ==targ then
            set i = Count
            call UnitRemoveAbility(u,lasso_id)
            call UnitAddAbility(u,lasso_id)
            call SimError(GetOwningPlayer(u),&quot;This tower already has a lasso attached to that creep.&quot;)
        elseif not stacking and d.targ==targ then
            set i = Count
            call UnitRemoveAbility(u,lasso_id)
            call UnitAddAbility(u,lasso_id)
            call SimError(GetOwningPlayer(u),&quot;This creep has already been lassoed&quot;)
        endif
        set i = i + 1
    endloop
    
    set u = null
    set targ = null
    return false
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 = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(trig,EVENT_PLAYER_UNIT_SPELL_CAST)
    call TriggerAddCondition(trig,Condition(function Stop))

    set trig = null
endfunction

endscope</i></i></i></i></i>


This did not exactly turn out how I wanted it to, not nearly as cool (but then neither am I), and their is some mega pathing botches. O well, I may try something else, and hopefully it comes out better, however, until then, here is my submission, as it were.
 

Attachments

  • Tower Contest Test Map.w3x
    36.6 KB · Views: 234

Cohadar

master of fugue
Reaction score
209
Maybe add something like minimum lasso length to prevent it from sticking creeps to the wall.

Because it is funny until the point when they stop fighting...
 

denmax

You can change this now in User CP.
Reaction score
155
Remove me from the list, I'm officially out of fresh ideas to use it here.

Sorry for my stupidity and waste of your time

~

Yours Truly,

Thy FuKiN n0oB
 

Insane!

Shh I didn't edit this, go away.
Reaction score
122
i belive me joining would be to submit 2 towers that help each other
 

Ghan

Administrator - Servers are fun
Staff member
Reaction score
889
> i belive me joining would be to submit 2 towers that help each other

What exactly do you mean by "help each other"?
If both towers are required to make the effect work, that's fine, but I don't really want to see a second tower just to increase the damage of the first, or something similar.
 

Insane!

Shh I didn't edit this, go away.
Reaction score
122
but I don't really want to see a second tower just to increase the damage of the first, or something similar.

im not doing that
i have had this idea for a 2 towers who help each other

example

first tower shoots real slow projectiles and has low cool down,

second one has pathetic damage and highish cool down but slows creeps





so the more of the second one you have the more damage the first one can do
 
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

      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