-
Content Count
3,886 -
Joined
-
Last visited
Everything posted by Karawasa
-
I think this has been taken care of. Now that the Beta is out, if you have a suggestion for a model/icon/name do so in a beta report. Thanks MrChak and Cisz for your contributions.
-
I hate and love this spell. It will probably be one of the coolest spells in the game, but also has presented us the most problems .
-
These points are on purpose and carefully designed. There are 4 aoe slow towers, and ice is no longer one of them. And the price change comes with a power boost. This is a suggestion to reballance mech waves, right?
-
I'm glad to present to you guys the second beta. I know this has been in the making for a long time, thanks for waiting. Onto it then: http://www.eletd.com/beta/Element%20TD% ... 0Beta2.w3x First: In order to play the beta, you must type -carleton before the first round spawns. If you do not do so, the game will end. Second: Here is a list of things that are NOT completed: -Laser/Phasor Tower -Magic/Sorcery/Wizard Tower -Tournament Random Mode Edit: -Hero Mode Third: Here is what to test: -Play the game, try all the different towers. I'm looking to see if any of the new towers bug, and how balanced the towers are overall. Try different builds, see if any one build is too bad or too good. -The new Ronald system. The game should keep 30 Ronalds in play at all times. Each leaked Ronald should count as 3 lives. Ronalds should be a little tougher than 10 level 60 creeps. There should be a counter that keeps track of how many Ronalds each player KILLED (as opposed to spawned). -The new extreme mode. Creeps should move faster, and upon taking LETHAL damage, should have a 20% chance to prevent that damage, and become invuln for 1.5 seconds. -The new undead/mechanical creeps. Undead creeps should respawn after 5 seconds, with half the health they normally would have. Mechanical creeps should become invulnerable at different times, it is when their mana reaches 12, and it should last for 3 seconds. -The elemental bosses, they are no longer immune to spells, but they should be much harder to kill now as the game progresses. -The new voting system, try and see if you can bug it in anyway. Whether it be the host allowing players to vote on a certain option, or just trying to do player votes throughout. -The new hotkeys. All towers should have the first letter of their name as the hotkey to BUILD. To upgrade to level 2 or 3 of any tower, U should be the hotkey. To get flamethrower, you could do F,U,M,F (fire, amplified, magic, flamethrower). -I increased the creep HP globally by a small amount. Let me know if you think the game is too hard, too easy, or just right. Fourth: Here is the list of major changes: -Removed initial lag bug -Removed small lag before each creep wave starts -Buffed periodic tower, removed alternate forms -Fixed interest bug -Buffed HP growth on Elemental Bosses, removed immune -Made Undead/Mechanical classifications unique -Played around with Unit Sounds -Reworked damage/gold ratios for towers (specifically, tower costs and power) -Reworked Creep Order, changed a few units -Redesigned voting system -Tweaked between level times -New hotkey system implemented -Revised Ronald System -Complete redesign of over half the towers -Reworked the element makeup of every tower -Reworked Extreme mode -Buffed creep hp globally
-
Confirmed does not stack, great work.
-
Works like a charm, hot.
-
Yes, that is correct.
-
Edited per your recommendations, thanks. scope Explode globals private constant integer abil_id = 'A01X' //abil rawcode private constant integer dum1_id = 'A01W' //dummy ability rawcode private constant integer dum2_id = 'A01V' //dummy ability rawcode private constant string sfx = "Objects\\Spawnmodels\\NightElf\\NEDeathSmall\\NEDeathSmall.mdl" //sfx created private group Etemp = CreateGroup() private player E = null private unit N = null endglobals private function get_abil takes integer lvl returns integer if lvl==1 then return dum1_id else return dum2_id endif endfunction private function get_dam takes integer lvl returns integer if lvl==1 then return 500 else return 2500 endif endfunction function Trig_Explode_Conditions takes nothing returns boolean return GetSpellAbilityId()==abil_id endfunction function Explode_Filter takes nothing returns boolean return IsUnitEnemy(GetFilterUnit(),E)==true and GetWidgetLife(GetFilterUnit())>.405 endfunction function Explode_Effects takes nothing returns nothing local unit u = GetEnumUnit() local integer abil = get_abil(GetUnitAbilityLevel(N,abil_id)) local unit cast = GetCaster(bj_groupEnumOwningPlayer,GetUnitX(u),GetUnitY(u),abil) call UnitDamageTarget(N,GetEnumUnit(),get_dam(GetUnitAbilityLevel(N,abil_id)),false,f alse,ATTACK_TYPE_PIERCE,DAMAGE_TYPE_NORMAL,null) call IssueTargetOrder(cast,"cripple",u) call EndCasterTimed(cast,abil,2.) set u = null set cast = null endfunction function Trig_Explode_Actions takes nothing returns nothing local unit atkr = GetTriggerUnit() local integer lvl = GetUnitAbilityLevel(atkr,abil_id) local location l = GetUnitLoc(atkr) if lvl>0 then call GroupClear(Etemp) set E = GetOwningPlayer(atkr) set N = atkr call DestroyEffect(AddSpecialEffectLoc(sfx,l)) call GroupEnumUnitsInRange(Etemp,GetUnitX(atkr),GetUnitY(atkr),768.,Condition(functio n Explode_Filter)) call ForGroup(Etemp,function Explode_Effects) endif set atkr = null set l = null endfunction endscope function InitTrig_Explode takes nothing returns nothing set gg_trg_Explode = CreateTrigger() call TriggerRegisterAnyUnitEventBJ(gg_trg_Explode,EVENT_PLAYER_UNIT_SPELL_EFFECT) call TriggerAddCondition(gg_trg_Explode,Condition(function Trig_Explode_Conditions)) call TriggerAddAction(gg_trg_Explode,function Trig_Explode_Actions) endfunction
-
Hey Guys, I know there is already a Hero Ability Wishlist thread in the suggestions forum. But, I'd like a place for more focused ideas. No abilities that do damage, unless it is percentage based. No abilities that stun/disable creeps. I know I've said this before, but don't limit your imagination. JASS coding can do a lot of things, so it is better to suggest then to not. It doesn't matter where you get your ideas or inspiration from (DotA suggestions forum, other custom maps, other games etc.), so don't be limited in that respect. Looking forward to some great hero mode abilities. Refer to the Potential Hero Ability thread to make sure there isn't overlap.
-
Now that the towers have finally been taken care of (we hope), it is time to start considering what we are going to do with hero mode. -Removed AoE disables, removed Entwined Spirits (Spirit Link)
-
Nevermind, I got it working. Here is the final trigger in case you are curious: scope Explode globals private constant integer abil_id = 'A01X' //abil rawcode private constant integer dum1_id = 'A01W' //dummy ability rawcode private constant integer dum2_id = 'A01V' //dummy ability rawcode private constant string sfx = "Objects\\Spawnmodels\\NightElf\\NEDeathSmall\\NEDeathSmall.mdl" //sfx created private group Etemp = CreateGroup() private player E = null private unit N = null endglobals function Explode_Filter takes nothing returns boolean return IsUnitEnemy(GetFilterUnit(),E)==true and GetWidgetLife(GetFilterUnit())>.405 endfunction private function get_abil takes integer lvl returns integer if lvl==1 then return dum1_id else return dum2_id endif endfunction private function get_dam takes integer lvl returns integer if lvl==1 then return 500 else return 2500 endif endfunction function Trig_Explode_Conditions takes nothing returns boolean return GetSpellAbilityId()==abil_id endfunction function Explode_Effects takes nothing returns nothing local unit u = GetEnumUnit() local integer abil = get_abil(GetUnitAbilityLevel(N,abil_id)) local unit cast = GetCaster(bj_groupEnumOwningPlayer,GetUnitX(u),GetUnitY(u),abil) call UnitDamageTarget(N,GetEnumUnit(),get_dam(GetUnitAbilityLevel(N,abil_id)),false,f alse,ATTACK_TYPE_PIERCE,DAMAGE_TYPE_MAGIC,null) call IssueTargetOrder(cast,"cripple",u) call EndCasterTimed(cast,abil,2.) set u = null set cast = null endfunction function Trig_Explode_Actions takes nothing returns nothing local unit atkr = GetTriggerUnit() local integer lvl = GetUnitAbilityLevel(atkr,abil_id) local location l = GetUnitLoc(atkr) if lvl>0 then call GroupClear(Etemp) set E = GetOwningPlayer(atkr) set N = atkr call DestroyEffect(AddSpecialEffectLoc(sfx,l)) call GroupEnumUnitsInRange(Etemp,GetUnitX(atkr),GetUnitY(atkr),512.,Condition(functio n Explode_Filter)) call ForGroup(Etemp,function Explode_Effects) endif set atkr = null endfunction endscope function InitTrig_Explode takes nothing returns nothing set gg_trg_Explode = CreateTrigger() call TriggerRegisterAnyUnitEventBJ(gg_trg_Explode,EVENT_PLAYER_UNIT_SPELL_EFFECT) call TriggerAddCondition(gg_trg_Explode,Condition(function Trig_Explode_Conditions)) call TriggerAddAction(gg_trg_Explode,function Trig_Explode_Actions) endfunction
-
What about this, basing it off of attack? Everytime one of these two towers attack, call the appropriate meteor down? That way, you don't have to add units to group, and we can forget this whole unit finishes upgrade and crash bug. It also has the benefit of preventing the meteors from coming down when there is nothing to hit...
-
Basically, I took parts of the dinosaur attack trigger and combined it with parts of the penitence trigger to create this: scope Explode globals private constant integer abil_id = 'A003' //abil rawcode private constant integer dum_id = 'A01W' //dummy ability rawcode private group G = CreateGroup() private player P = null private unit U = null private unit N = null endglobals function E_Filter takes nothing returns boolean return IsUnitEnemy(GetFilterUnit(),P)==true and GetWidgetLife(GetFilterUnit())>.405 endfunction function E_ForGroup takes nothing returns nothing if GetUnitAbilityLevel(N,dum_id)==1 then call UnitDamageTarget(U,GetEnumUnit(),500.,false,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE _MAGIC,null) call IssueTargetOrder(N,"cripple",GetEnumUnit()) else call UnitDamageTarget(U,GetEnumUnit(),2500.,false,false,ATTACK_TYPE_NORMAL,DAMAGE_TYP E_MAGIC,null) call IssueTargetOrder(N,"cripple",GetEnumUnit()) endif endfunction function Explode_Actions takes nothing returns nothing local unit atkr = GetEventDamageSource() local unit dum local integer lvl = GetUnitAbilityLevel(atkr,abil_id) if lvl>0 then set dum = GetCaster(GetOwningPlayer(atkr),GetUnitX(atkr),GetUnitY(atkr),dum_id) call SetUnitAbilityLevel(dum,dum_id,lvl) call GroupClear(G) set P = GetOwningPlayer(atkr) call GroupEnumUnitsInRange(G,GetUnitX(atkr),GetUnitY(atkr),512.,Condition(function E_Filter)) set U = atkr set N = dum call ForGroup(G,function E_ForGroup) call EndCasterTimed(dum,dum_id,2.) set dum = null endif set atkr = null endfunction endscope //==== Init Trigger Attack ==== function InitTrig_Explode takes nothing returns nothing call DamDetect_Attacks("Explode_Actions") endfunction First, does it matter if this trigger uses the same private variables as dinosaur attacks (i.e. player P, unit U, Group G etc.)? Second, when fired it only does it to one unit, not all the units within 500 AoE... Why did I make this trigger? Because Blizzard sucks (as usual) and doesn't have a Thunder Clap like spell without a terrain deformation (the deformation causes lag and fucks up some other triggers for some unknown reason).
-
Here is the code I am using: //Implementation: *Create a unit target ability, add it to towers you wish // *Paste this code into a trigger named Frostbite // *Configure options and enjoy! //Documentation: Tested working. // Anyhow, this trigger takes care of everything for you, after your configure her ofcourse. scope Frostbite globals //config options: private integer fb_id = 'A00A' //ability id private string fb_sfx = "Abilities\\Spells\\Undead\\FreezingBreath\\FreezingBreathTargetArt.mdl" //effect created on target while frozen private string fb_spot = "origin" //attachment location for effect endglobals private function fb_duration takes integer lvl returns real return 5. //duration of spell/lvl endfunction private function fb_EXdam takes integer lvl returns real //return ((lvl-1.)*2.)+1. //will do double dam at lvl 1, triple at lvl 2, etc., atm if lvl==1 then return 1. else return 3. endif endfunction //needed struct private struct data effect sfx unit u real ms endstruct //get re-order loc, if it is ever needed again private function get_move_loc takes unit u returns location return GetRectCenter(udg_Region_Leak[GetUnitUserData(u)-1]) //this orders the unit to the leak region again, check this and make sure it is correct by // ordering a unit to the leak region in GUI and converting it //return GetRectCenter(gg_rct_End) endfunction function Trig_Frostbite_Conditions takes nothing returns boolean return GetSpellAbilityId()==fb_id endfunction //lose effect if unit is damaged private function Frostbite_Effects takes nothing returns boolean local trigger trig = GetTriggeringTrigger() //local location l local data dat = GetData(trig) if GetEventDamage()>0. then call DisableTrigger(trig) call UnitDamageTarget(GetEventDamageSource(),GetTriggerUnit(),GetEventDamage()*fb_EXd am(GetUnitAbilityLevel(dat.u,fb_id)),false,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_M AGIC,null) //call PauseUnit(dat.u,false) //set l = get_move_loc(dat.u) //call IssuePointOrderLoc(dat.u,"move",l) call SetUnitMoveSpeed(GetTriggerUnit(),dat.ms) call DestroyEffect(dat.sfx) //call RemoveLocation(l) endif set trig = null //set l = null return false endfunction //create effects/ remove if no damage ever taken function Trig_Frostbite_Actions takes nothing returns nothing local unit u = GetSpellTargetUnit() local effect sfx = AddSpecialEffectTarget(fb_sfx,u,fb_spot) local trigger trig = CreateTrigger() local data dat = data.create() //local location l //call PauseUnit(u,true) call TriggerSleepAction(0.0) call TriggerRegisterUnitEvent(trig,u,EVENT_UNIT_DAMAGED) call TriggerAddCondition(trig,Condition(function Frostbite_Effects)) set dat.sfx = sfx set dat.u = GetTriggerUnit() set dat.ms = GetUnitMoveSpeed(u) call SetUnitMoveSpeed(u,100.) call SetData(trig,dat) call PolledWait2(fb_duration(GetUnitAbilityLevel(GetTriggerUnit(),fb_id))) if GetTriggerExecCount(trig)<1 then //call PauseUnit(u,false) //set l = get_move_loc(u) //call IssuePointOrderLoc(u,"move",l) call SetUnitMoveSpeed(u,dat.ms) call DestroyEffect(sfx) //call RemoveLocation(l) //set l = null endif call dat.destroy() call DestroyTrigger(trig) set u = null set sfx = null set trig = null endfunction endscope function InitTrig_Frostbite takes nothing returns nothing set gg_trg_Frostbite = CreateTrigger() call TriggerRegisterAnyUnitEventBJ(gg_trg_Frostbite,EVENT_PLAYER_UNIT_SPELL_EFFECT) call TriggerAddCondition(gg_trg_Frostbite, Condition(function Trig_Frostbite_Conditions)) call TriggerAddAction(gg_trg_Frostbite, function Trig_Frostbite_Actions) endfunction Can you make it not activate if the unit is dead (i.e. life less than .405)? I'm using your penitence trigger to make a dummy cast this on target unit everytime the tower attacks. If the damage from the tower kills the unit, this still activates.
-
I lied, here is the code I am using: //Implementation: *create unit target ability // *copy this trigger over // *config! //Documentation: Texttag colors are setup like those in DotA, and the current damage is similar in formula. scope Maledict globals private constant integer abil_id = 'A014' //abil rawcode private constant string sfx = "Abilities\\Spells\\Other\\HowlOfTerror\\HowlTarget.mdl" //sfx created overhead the target endglobals private function get_duration takes nothing returns real return 10.5 //length for effect given the level of the ablity cast endfunction private function get_time takes nothing returns real return 5.0 //time between damages given the level of the ability cast endfunction private function get_damage takes integer lvl, real diff returns real //return lvl*10.*R2I(diff/5.) //damage done to target, given the level and the difference between its starting hp and its current hp if lvl==1 then return diff/5. else return diff/2.5 endif endfunction function Trig_Maledict_Conditions takes nothing returns boolean return GetSpellAbilityId()==abil_id endfunction function Trig_Maledict_Actions takes nothing returns nothing local unit cast = GetTriggerUnit() local unit targ = GetSpellTargetUnit() local integer lvl = GetUnitAbilityLevel(cast,abil_id) local effect e = AddSpecialEffectTarget(sfx,targ,"overhead") local timer t = GetTimer() local real life = GetWidgetLife(targ) local real dam call TimerStart(t,get_duration(),false,null) loop exitwhen GetWidgetLife(targ)<.405 or TimerGetRemaining(t)<.01 if GetWidgetLife(targ)<life then set dam = get_damage(lvl,life-GetWidgetLife(targ)) call UnitDamageTarget(cast,targ,dam,false,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC, null) call TextTagUnit(I2S(R2I(dam)),targ,218,165,32,255,.01,2.) endif call PolledWait2(get_time()) endloop call EndTimer(t) call DestroyEffect(e) set cast = null set targ = null endfunction endscope //==== Init Trigger Maledict ==== function InitTrig_Maledict takes nothing returns nothing set gg_trg_Maledict = CreateTrigger() call TriggerRegisterAnyUnitEventBJ(gg_trg_Maledict,EVENT_PLAYER_UNIT_SPELL_EFFECT ) call TriggerAddCondition(gg_trg_Maledict, Condition(function Trig_Maledict_Conditions)) call TriggerAddAction(gg_trg_Maledict, function Trig_Maledict_Actions) endfunction This trigger is giving me several problems. First, it sometimes damages units a lot more often than every 5 seconds, sometimes only a second apart. Second, it sometimes never ends. Third, when it ends, the effect doesn't go away for awhile. If it is easy to make this accurate, I think that is the solution here.
-
Yes, that would be a bug. Thanks for reporting, although note that hero mode is going through an extensive redesign, so Frostbolt will cease to exist.
-
That is really nice picture. Too bad it doesn't have the other two elements .
-
Doesn't work at all. The first hit a creep takes is full damage, then after that it is impossible to hurt. The persistence code worked fine, why not base it off that but instead make it all the time and a % instead of all the damage? It successfully prevented lethal damage...
-
Tested working, nice way of doing it. I'm happy that the unit can get a buff in attack speed and benefit from it.
-
Looking for an ability to put onto Magic Towers (DF). Anything is welcome, except for anything movement stopping (like a stun, or making creep walk backwards etc.). Preferably not something super complex. This would allow me to code it and make a release by Sunday possible.