Jump to content
EleTD.com

Karawasa

Administrators
  • Content Count

    3,886
  • Joined

  • Last visited

Everything posted by Karawasa

  1. You will notice that the support buff does not increase the bonus part of the damage. They can be on at the same time, but they don't help each other at all.
  2. Cisz's Build Explorer displayed the DPSG of the builds as 60/65/70, as opposed to 30/50/130 in the PB. Even with the imbalances you mentioned, it still sounds a lot better than what we had with the PB. You expect too much too fast, if we got it right the first time we would be at 4.0 release now . That being said, if we are at least on the right path then future updates can tweak this until it works. /summon Cisz
  3. Want to clarify here. Level 1/2/3 all use the same "don't touch me" effect. The clones themselves though should last 15/30/120 seconds. What specifically is the problem?
  4. It'd be great if you guys could post your performance difference for each tower specifically. I'd like to see how much Gunpowder, Ice, and Flame reduce FPS by themselves. Add to that list any other tower you find is killing FPS.
  5. Because Fire Up buff does not help Magic Tower as much as Spring Forward, it also acts to reduce the CD on the ability. The vice versa of this is true for Mushroom Tower. By reducing CD we can increase the DPS of the tower to make up for the difference between the "good support" buff and the "bad support" buff. Did you experience this? Fire Up adds 4/8/30 mana for levels 1/2/3.
  6. The main use for the damage counter that I saw was in combination with a clock. You could calculate your builds DPS, useful in comparing different strategies to see which does more damage faster. By resetting every wave it makes doing this easier. You don't have to figure out in your head the difference between start and end for a massive number. Since it resets it should keep this task manageable to endgame.
  7. That is a feature of the damage counter. Resetting the counter every wave makes it easier to use in my opinion.
  8. Aha I forgot about putting that in. It is an easy fix for 11b.
  9. Is it giving you 30 seconds like Short Mode does (as opposed to standard 20)?
  10. I'm happy to finally present to you guys the eleventh beta. This long awaited beta sees major changes to global balance, bug fixes, remaking of towers with flawed concepts, and additional features/modes. This is the first beta of the next private beta cycle, a cycle which will end with the 4.0 release. Get the beta here: http://www.eletd.com/beta You must use the following info: Username: tester Password: carleton 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. Make sure to put to good use the -level, -gold, and -lumber commands. Second: The following things are no cause for concern: -Jinx/Hex Tower are incomplete and thus not functional -Flesh Golem/Abomination Tower are incomplete and thus not functional Beta 11b should be out early next week with these two towers completed. Third: Things to test: -How do the 4/5/6 element builds do in relation to each other? Does the game feel more balanced overall? -Give some focus to towers types that have changed the most, specifically: Single element towers(including Pures), Periodics, Dual 3, and support Dual/Triples. -How does the increase in creep HP feel? Healing at 2%? Fast at +75 instead of +50? -Try out the towers that got remade, what do you think of the new concepts? -If you can recreate a situation in private where you would lag badly with undead creeps in the PB, try to do the same with Beta11 and tell me what happens. -How does performance overall feel? The game should be mostly free/free of the occasional "stuttering" that occurred for some people in more full games (6+ players). If you never experienced this, has there been an increase in your overall FPS? -Do the element bosses feel more balanced now? -What do you guys think about the 6000 gold for Extra Short Mode? -Try out the new Super Weapons mode (remake of Competitive Mode), is it fun? -Test out anything else on the changelog that catches your attention. Fourth: Here is the changelog: -Massive rebalancing of towers (more on this below) -Creep hp level factor from 1.17 to 1.175 (more on this below) -Changed fast to 375 speed from 350 (base is 300), and changed extreme from +100 to +75 movespeed -Healing creeps buffed to heal 2% up from 1% -Elemental Boss HP growth lowered -Builder movespeed increased from 400 to 450 -Increased time between Evil Child and Ronald to 60 seconds up from 20 seconds, no interest is gained during this period or after -Fixed the bug where you could get more than 2 interest in SR/TR -Drastically optimized undead reincarnation processes, most likely eliminated any lag related to reincarnation -Overall performance should be at least slightly improved due to optimization of periodic trigger functions (i.e. that periodic slight stuttering should be gone) -Title of multiboard changed from Element TD Level: X to Element TD Level: X Interest: X, thus you can manage interest with multiboard closed now -Added a range finder command. Simply select a tower, and type -range xxxx (where xxxx is between 250 and 1500) -Tower Query and also tower lists in quests now displays damage type instead of ability type -Added a damage counter that resets after each wave (beta only, should prove useful for balance testing) -Passive ability icons changed to active ones (now all icons are active) -Changed Nature/Light icons on multiboard to active ones (was bugging me for a long time) -Added custom builder for beta leaders -Added website/forum advertisement to endgame messages -Added Extra Short Mode (Level 30 /w 6000 gold and insta kill of lvl 1 & 2 elementals) -Renamed Tournament Random to Vote Random. Added a periodic reminder message above builder -Replaced Competitive Mode with Super Weapons Mode -Shared vision is back, meaning you can see people's gold again -Changed Disease Tower ability to Corpse Explosion -Changed Gunpowder Tower ability to Shrapnade -Changed Quark Tower ability to Quantum Beam -Changed Ice Tower ability to Frost Helix -Remade Sunburn(Flame Tower) -Reworked Conjure(Trickery Tower) -Magic Tower reworked, can now be buffed from well/blacksmith -Electricity Tower changed to attack based for spell cast, can now be buffed from well/blacksmith -Poison Tower changed to attack based for spell cast, can now be buffed from well/blacksmith -Changed Drowning Tower from 3000/HP to Damage Dealt/HP, and buffed damage to 4000 up from 3000 -Maledict was erroneously composite damage, changed to darkness and now ignores armor amount -Flamethrower buffed to 450 damage up from 350, can now cause chain reactions -Erupt (Hydro Tower) no longer pauses units resulting in movement while in air, chance buffed to 33% from 20%, was erroneously composite damage changed to earth -PTOTE changed to 75% sell, damage down to 75000 (52500 after build rebalance) from 100000, AoE down to 250 from 300 -Reduced CD on Hail/Comet Storm ability by 5 seconds (15 down from 20) -Impulse damage factor increased from 3300 to 3600, projectile speed increased as well -Muck damage down to 2000 from 2500, AoE down from 300 to 250, range down from 900 to 700, unable to be buffed now, earth damage -Roots range down to 700 from 900 -Polar/Enchantment unable to be buffed by smith/well now -Kindle damage up to 200 from 150, now fire instead of composite damage -Poison damage up to 333 from 300, now water instead of darkness damage -Gold Tower buffed to 5000 damage up from 4000 -Changed Magic/Shroom from 10 sec duration, 15 cd to 3 sec duration, 6 sec cd. Well now decreases CD on Shroom and Smith now decreases CD on Magic -Minions(Oblivion/Necromancy) come into play with the support buff(s) the summoning tower has -Fixed Sludge ability tooltip to reflect actual AoE of 500 instead of 300 -Fixed Windstorm tooltip to reflect actual range of 700 instead of 900 -Removed Kindle SFX -Laser's Diffusion renamed to Focus, icon changed -Nature/Amplified Nature projectile changed to have a sound ++Tower Rebalance++ -Support Duals from 25/50/100% to 25/50/200% -Support Triples from 25/50% to 10/30% -Singles now significantly cheaper but do less damage (overall a buff), Pures/Periodics are the most blatant ($20503>$7503) -Level 2 and 3 Duals cost less, with 3 being significantly cheaper ($5544>$3125) -Level 2 Triples cost reduced ($6068>$5052) ++Creep HP++ -Each level has 1.XXX the HP of the previous level. It has gone from 1.17 to 1.175. -Level 15 from 676 to 717 -Level 30 from 7120 to 8057 -Level 45 from 75031 to 90516 -Level 60 from 790728 to 1016940 -Ronald base HP is double that of level 60, so Ronald buffed by this change too
  11. OF NEXT YEAR?!?!?! That sucks...so much wait.
  12. Anyone mind compiling a list of those towers?
  13. Ghan_04 is working on this one, so I'll move it to completed.
  14. So I worked off of something I had made(with your help) for another spell and was able finish this.
  15. The additional concern part can be summed up as follows: This should not be a perpetual effect spell. Instead, when a tower with this ability attacks it will create the two orbs and they will do their full orbit and then disappear. By having it like this, an attack speed buff will be viable on this tower (as opposed to being useless). Edit: The damage the orb does should be a function of how spread/contract it is (more contract = more damage). The tower would have 3 abilities, a passive, and 2 actives. The 2 actives would be expand and contract, the passive is there for information and the trigger. Thus in the code we could use level of ability for passive to determine radius of orbit and damage. It would go from 250 to 750 radius in increments of 50. Thus the two actives would either increase or decrease level of passive depending on which you use. PS: Hope I explained it better, please let me know if you have any questions.
  16. I would definitely prefer your old prism. I have a few ideas, hopefully one will end up in a workable spell. 1. You can use unit custom value with Cohadar's PUI if you attach it to a variable (i.e. TowerValue[unitUserData()]. If using custom values would help, then this is a solution. 2. We can change the dynamics of the spell while still keeping the principle of it. A Prism Tower should have an ability that toggles what mode it is in. One mode allows it to attack(normal mode), the other doesn't(link mode). If in normal mode, every time it attacks it would search for other Prism Towers in a certain area that are in link mode(aren't attacking) and receive a damage bonus for each one it finds. The damage this tower would deal would be all triggered (i.e. 1-1 atk damage), with perhaps a floating text saying how much it did (like with Impetus spell). The other thing to note would be that when a tower is drawing from others for damage bonus, some lightning effect should be applied between the two so you can see how many towers it drew power from.
  17. In 4.0 LDWF will continue to be a strong build. This build has a legendary status in the map because of its past, even though it will not be imbalanced in 4.0. I have tried contacting him several times on different mediums. He has disappeared off of the internet far as I can tell. As such, need takes precedent over formality. The most recent one I posted(purple darkness) will be the loading screen used for 4.0. One of the reasons I want to keep the order as is, is that Water and Fire are the best designed pillars(imo). Having them together in the middle is a powerful draw of your attention. Also as DDRKirby(ISQ) said, changing darkness to purplish hue solved the color problems.
  18. Adding more content is not the way to balance current content. More picks or more tiers simply results in more to balance, and we have our hands full already. As jolin012 hinted at, the data suggests that we will be able to tackle this problem within the current system.
  19. The original duplicate spell made the casting tower actually become the target tower. For balance reasons, one tower with this ability needs to be able to create multiple "clones." Thus, it cannot become the tower but rather must remain unchanged and instead create a clone (placement unknown, perhaps closest available slot to target). Here is the old duplicate: //Implementation: *Create a unit target ability, add it to towers you wish // *Paste this code into a trigger named Duplicate // *Configure options and enjoy! //Documentation: Tested working. // Anyhow, this trigger takes care of everything for you, after your configure her ofcourse. scope Duplicate globals private constant integer abil_id = 'A003' //abil id private constant integer remove1 = '9998' //remove ability 1 private constant integer remove2 = '9999' //remove ability 2 endglobals private constant function duration takes integer lvl returns real return 5.*lvl //duration given level of ability lvl endfunction //======================================================================= private function Conds takes nothing returns boolean return GetSpellAbilityId()==abil_id endfunction private function Acts takes nothing returns nothing local unit cast = GetTriggerUnit() local integer id = GetUnitTypeId(cast) local real face = GetUnitFacing(cast) local real x = GetUnitX(cast) local real y = GetUnitY(cast) local integer lvl = GetUnitAbilityLevel(cast,abil_id) local player p = GetOwningPlayer(cast) local unit targ = GetSpellTargetUnit() local real new_face = GetUnitFacing(targ) local unit new call ExplodeUnitBJ(cast) set new = CreateUnit(p,GetUnitTypeId(targ),x,y,new_face) call UnitRemoveAbility(new,remove1) call UnitRemoveAbility(new,remove2) call PolledWait2(duration(lvl)) call ExplodeUnitBJ(new) set cast = CreateUnit(p,id,x,y,face) set cast = null set targ = null set new = null endfunction private function SimError takes player ForPlayer, string msg returns nothing local sound error = CreateSoundFromLabel( "InterfaceError",false,false,false,10,10) if GetLocalPlayer() == ForPlayer then call ClearTextMessages() call DisplayTimedTextToPlayer( ForPlayer, 0.52, -1.00, 2.00, "|cffffcc00"+msg+"|r" ) call StartSound( error ) endif call KillSoundWhenDone( error) set error = null endfunction private function Pre_Acts takes nothing returns nothing local unit u = GetTriggerUnit() if GetWidgetLife(u)<GetWidgetLife(GetSpellTargetUnit()) then call PauseUnit(u,true) call IssueImmediateOrder(u,"stop") call PauseUnit(u,false) call UnitRemoveAbility(u,abil_id) call UnitAddAbility(u,abil_id) call SimError(GetOwningPlayer(u),"You cannot cast Duplicate on that tower.") endif set u = null 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)) call TriggerAddAction(trig,function Acts) set trig = CreateTrigger() call TriggerRegisterAnyUnitEventBJ(trig,EVENT_PLAYER_UNIT_SPELL_CAST) call TriggerAddCondition(trig,Condition(function Conds)) call TriggerAddAction(trig,function Pre_Acts) set trig = null endfunction endscope
  20. A tower with this passive would cast "lightning shield" onto the creep upon each attack. It would work like the ladder spell, basically an AoE DoT. I need it triggered to control damage type and physical damage too. But more than that (as I can do that part easily), it needs to utilize a unit attached to struct. The reason for this is that the casting tower may have one of 3 buffs (3 levels of ability that increases damage), and so the damage this spell does needs to be increased if it has one of those buffs (1.25x, 1.5x, 3x). Thus my method of detecting units with the lightning shield buff and damaging them doesn't work because it won't consider the bonus damage. Edit: Forgot to say that the ability should not be stackable on the same creep. Just like Maledict, a second cast will not do anything until the first one has played out.
  21. I know the first Prism spell never worked out. Ghan_04 got interested in it after hearing about it, and here is what he came up with: //====================================================================== // Prism Tower //====================================================================== scope PrismTower initializer Initialize //======================= // Configuration Header //======================= globals private constant integer TOWERID = 'h000' //This is the id of the actual Prism Tower. private constant integer PWRUPID = 'A000' //This is the id of the power up ability in the object editor. private constant real RANGE = 1000.0 //This is the range of the tower - it will be used to determine how far the towers will look for support towers. private constant real DAMAGE = 50.0 //This is how much damage a tower does. private constant real EXPONENT = 1.25 //This determines the factor that each tower adds to the damage of the shot. private constant real COOLDOWN = 2.0 //This is the cooldown of the Prism Tower's attack. endglobals //======================= // End Config Header //======================= globals unit CurrentTower integer array TowerValues group EmptyGroup = CreateGroup() unit NextTower = null endglobals type TowerChainArray extends unit array[100] private struct CleanupData TowerChainArray data integer size endstruct private function CleanUp takes integer tag returns boolean local TowerChainArray towerChain = CleanupData(tag).data local integer i = CleanupData(tag).size call CleanupData.destroy(CleanupData(tag)) loop exitwhen i < 0 call UnitRemoveAbility(towerChain[i], PWRUPID) set TowerValues[GetUnitIndex(towerChain[i])] = 0 set towerChain[i] = null set i = i - 1 endloop return false endfunction private function TowerFilter takes nothing returns boolean if NextTower == null and GetOwningPlayer(GetFilterUnit()) == GetOwningPlayer(GetAttacker()) and GetUnitTypeId(GetFilterUnit()) == TOWERID and TowerValues[GetUnitIndex(GetFilterUnit())] != 1 and GetUnitCurrentOrder(GetFilterUnit()) == OrderId("none") and GetFilterUnit() != CurrentTower and GetWidgetLife(GetFilterUnit()) > 0.405 then set NextTower = GetFilterUnit() endif return false endfunction private function Conditions takes nothing returns boolean local real x = GetUnitX(GetAttacker()) - GetUnitX(GetTriggerUnit()) local real y = GetUnitY(GetAttacker()) - GetUnitY(GetTriggerUnit()) return GetUnitTypeId(GetAttacker()) == TOWERID and SquareRoot(x*x + y*y) <= RANGE and TowerValues[GetUnitIndex(GetAttacker())] != 1 endfunction private function Actions takes nothing returns nothing local real x = GetUnitX(GetAttacker()) local real y = GetUnitY(GetAttacker()) local real x1 local real y1 local real power = EXPONENT local integer towerChainCount = 0 local TowerChainArray towerChain = TowerChainArray.create() local integer i local unit attacker = GetAttacker() local CleanupData cleanupData call PauseUnit(attacker, true) //Get available towers and add them to the array. set CurrentTower = attacker set TowerValues[GetUnitIndex(CurrentTower)] = 1 set towerChain[0] = CurrentTower loop set x = GetUnitX(CurrentTower) set y = GetUnitY(CurrentTower) call GroupEnumUnitsInRange(EmptyGroup, x, y, RANGE, Condition(function TowerFilter)) exitwhen NextTower == null or GetWidgetLife(GetTriggerUnit()) < DAMAGE * power set CurrentTower = NextTower set NextTower = null set power = power * power set towerChainCount = towerChainCount + 1 set towerChain[towerChainCount] = CurrentTower set TowerValues[GetUnitIndex(CurrentTower)] = 1 //call SetUnitUserData(CurrentTower, 1) endloop //Go through each tower, starting at the end, add the power up ability and order it to fire. set i = towerChainCount loop exitwhen i == 0 call UnitAddAbility(towerChain[i], PWRUPID) call IssueTargetOrder(towerChain[i], "chainlightning", towerChain[i - 1]) set i = i - 1 endloop //Have the final tower attack. call IssueImmediateOrder(attacker, "stop") call PauseUnit(attacker, false) call TriggerSleepAction(.1) call IssueTargetOrder(attacker, "chainlightning", GetTriggerUnit()) //Add the power up damage, checking for additional towers and making sure the unit is not out of range. if towerChainCount > 0 then call UnitDamageTarget(attacker, GetTriggerUnit(), DAMAGE * Pow(power, I2R(towerChainCount - 1)), true, false, ATTACK_TYPE_PIERCE, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS) endif set cleanupData = CleanupData.create() set cleanupData.data = towerChain set cleanupData.size = towerChainCount call TimedEvent(COOLDOWN - .1, integer(cleanupData), Callback.CleanUp) endfunction //=========================================================================== private function Initialize takes nothing returns nothing local trigger t = CreateTrigger() call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_ATTACKED) call TriggerAddAction(t, function Actions) call TriggerAddCondition(t, Condition(function Conditions)) endfunction endscope //============================== // Credit to grim001 for TimedEvent library. //============================== library TimedEvent initializer Init globals //*** Configuration *** private integer NumberOfTimers = 100 //*** End Configuration *** private integer array TAGS private Callback array CALLBACKS private timer array TIMERS private integer N = 0 endglobals function interface Callback takes integer tag returns boolean private function H2I takes handle h returns integer return h return 0 endfunction private function TimedEventExpires takes nothing returns nothing local timer t = GetExpiredTimer() local integer i = H2I(t)-0x100000 if not CALLBACKS[i].evaluate(TAGS[i]) then call PauseTimer(t) set N = N + 1 set TIMERS[N] = t endif endfunction function TimedEvent takes real delay, integer tag, Callback callback returns nothing local timer t local integer i if N == 0 then call BJDebugMsg("TimedEvent Error: Maximum numbers of timers ("+I2S(NumberOfTimers)+") exceeded") return else set t = TIMERS[N] set N = N-1 endif set i = H2I(t)-0x100000 set TAGS[i] = tag set CALLBACKS[i] = callback call TimerStart(t, delay, true, function TimedEventExpires) endfunction private function Init takes nothing returns nothing loop set TIMERS[N] = CreateTimer() exitwhen N == NumberOfTimers-1 set N = N + 1 endloop endfunction endlibrary What do you think?
×
×
  • Create New...