The Fire Lord v1
2750
|
ID: 554
Family ID:
Author: Boekie
Rarity: unique
Element: fire
Attack Type: Decay
Attack Range: 900
Attack CD: 2.5
Damage: 4107-4126
Status: Approved
|
Hellfire
When the Fire Lord attacks there is a 25% chance that it gains a 5 target multishot and 25% bonus attackspeed for 7.5 seconds. Cannot retrigger! Level Bonus: +0.2 seconds duration +0.4% attackspeed +0.2% chance +1 target at level 15 and 25
Liquid Fire
When the Fire Lord damages a creep it will be set on fire, dealing 500 spelldamage per second and increasing the damage it takes from fire towers by 10%. The liquid fire lasts 5 seconds. Level Bonus: +50 spelldamage per second +0.1 seconds duration +0.4% bonus damage from fire |
Download
Toggle Triggers Header globals
BuffType boekie_fireMulti_buff1
BuffType boekie_fireMulti_buff2
BuffType boekie_fireMulti_buff3
BuffType boekie_liquidFire_buff
endglobals
function boekie_liquidFire takes Buff b returns nothing
local Unit target = b.getBuffedUnit()
local Tower tower = b.getCaster()
call tower.doSpellDamage(target,500+b.getLevel()*50,tower.calcSpellCritNoBonus())
endfunction
//Do not remove or rename this function!
//Put your initialization tasks here, this function will be called on map init
private function init takes nothing returns nothing
local Modifier m = Modifier.create()
local Modifier n = Modifier.create()
call m.addModification( MOD_ATTACKSPEED, 0.25, 0.004 )
call n.addModification( MOD_DMG_FROM_FIRE , 0.10, 0.004 )
set boekie_fireMulti_buff1 = BuffType.create( 7.5, 0.2, true )
call boekie_fireMulti_buff1.setBuffIcon( '@@3@@' )
call boekie_fireMulti_buff1.setBuffModifier( m )
call boekie_fireMulti_buff1.setStackingGroup("fireMulti")
call boekie_fireMulti_buff1.addAbility('@@2@@',false)
set boekie_fireMulti_buff2 = BuffType.create( 7.5, 0.2, true )
call boekie_fireMulti_buff2.setBuffIcon( '@@3@@' )
call boekie_fireMulti_buff2.setBuffModifier( m )
call boekie_fireMulti_buff2.setStackingGroup("fireMulti")
call boekie_fireMulti_buff2.addAbility('@@1@@',false)
set boekie_fireMulti_buff3 = BuffType.create( 7.5, 0.2, true )
call boekie_fireMulti_buff3.setBuffIcon( '@@3@@' )
call boekie_fireMulti_buff3.setBuffModifier( m )
call boekie_fireMulti_buff3.setStackingGroup("fireMulti")
call boekie_fireMulti_buff3.addAbility('@@0@@',false)
set boekie_liquidFire_buff = BuffType.create(5,0.1,false)
call boekie_liquidFire_buff.setBuffIcon('@@4@@')
call boekie_liquidFire_buff.setBuffModifier( n )
call boekie_liquidFire_buff.setStackingGroup("boekie_liquidFire")
call boekie_liquidFire_buff.addPeriodicEvent(EventHandler.boekie_liquidFire,1)
endfunction
On Attack
ONATTACK_chance: 0.25
ONATTACK_chanceLevelAdd: 0.002
function onAttack takes Tower tower returns nothing
local integer level = tower.getLevel()
if tower.getBuffOfGroup("fireMulti") == 0 then
if level < 15 then
call boekie_fireMulti_buff1.apply(tower,tower,tower.getLevel())
elseif level <25 then
call boekie_fireMulti_buff2.apply(tower,tower,tower.getLevel())
else
call boekie_fireMulti_buff3.apply(tower,tower,tower.getLevel())
endif
endif
endfunction
On Damage
ONDAMAGE_chance: 1.0
ONDAMAGE_chanceLevelAdd: 0.0
function onDamage takes Tower tower returns nothing
local Unit creep = Event.getTarget()
call boekie_liquidFire_buff.apply(tower,creep,tower.getLevel())
endfunction
|
Deep Frozen Igloo v1
2800
|
ID: 79
Family ID:
Author: Boekie
Rarity: rare
Element: ice
Attack Type: Energy
Attack Range: 1000
Attack CD: 2.5
Damage: 2785-2785
Status: Approved
|
Description: This igloo emits an extreme amount of cold, slowing and stunning creeps around it.
Specials:
-50% dmg to masses
Extreme Cold
Creeps that come within 900 AoE of this tower will be affected by extreme cold, suffering 2800 spelldamage, and becoming slowed by 30% for 4 seconds. When the slow expires they will get stunned for 1.2 seconds. Level Bonus: +140 damage +0.4% slow |
Download
Toggle Triggers Header globals
//@import
BuffType boekie_igloo_buff
endglobals
//Do not remove or rename this function!
//Put your initialization tasks here, this function will be called on map init
private function init takes nothing returns nothing
endfunction
On Unit Comes In Range
UNITINRANGE_targetType: TARGET_TYPE_CREEPS
UNITINRANGE_range: 900
function onUnitInRange takes Tower tower returns nothing
local Unit creep = Event.getTarget()
local integer lvl = tower.getLevel()
call tower.doSpellDamage(creep,2800.0+(lvl*140.0),tower.calcSpellCritNoBonus())
set boekie_igloo_buff.applyCustomTimed(tower,creep,300+lvl*4,4).userReal = 1.2
call Effect.createScaled("Abilities\\Spells\\Undead\\FrostArmor\\FrostArmorDamage.mdl", creep.getX(), creep.getY(), 30.0, 0, 1.5).destroy()
endfunction
|
Mythic Serpent Ward v1
2800
|
ID: 97
Family ID:
Author: SirCoqaLot.
Rarity: uncommon
Element: astral
Attack Type: Elemental
Attack Range: 1050
Attack CD: 1.35
Damage: 2727-2727
Mana: 12
Mana regen: 1
Status: Approved
|
Description: Lesser astral tower that buffs a nearby tower, increasing its mana regeneration, maximum mana and spell damage dealt.
Snake Charm
Increases the target's maximum mana by 40%, its mana regeneration by 40% and its spell damage by 20%. The buff lasts 5 seconds. Level Bonus: +2.4% mana regeneration +2.4% mana +1.2% spell damage +5 seconds duration at level 25 AC_TYPE_ALWAYS_BUFF 10, 200 range, 5s cooldown |
Download
Toggle Triggers Autocast
caster_art:
AUTOCAST_cooldown: 5
AUTOCAST_numBuffsBeforeIdle: 1
AUTOCAST_isExtended: false
AUTOCAST_autocastType: AC_TYPE_ALWAYS_BUFF
AUTOCAST_manacost: 10
AUTOCAST_range: 200
AUTOCAST_buffType: 0
AUTOCAST_targetSelf: false
AUTOCAST_targetType: TARGET_TYPE_TOWERS
target_art:
AUTOCAST_autoRange: 200
private function onAutocast takes Tower tower returns nothing
if tower.getLevel() < 25 then
call sir_serpent_buff.applyAdvanced(tower,Event.getTarget(),90+tower.getLevel(),400+tower.getLevel()*24,5)
else
call sir_serpent_buff.applyAdvanced(tower,Event.getTarget(),90+tower.getLevel(),400+tower.getLevel()*24,10)
endif
endfunction
Header globals
//@import
BuffType sir_serpent_buff
endglobals
//Do not remove or rename this function!
//Put your initialization tasks here, this function will be called on map init
private function init takes nothing returns nothing
endfunction
|
Volcanic Geyser v1
2800
|
ID: 122
Family ID:
Author: drol
Rarity: uncommon
Element: fire
Attack Type: Elemental
Attack Range: 1100
Attack CD: 1.8
Damage: 2348-2447
Status: Approved
|
Description: A sleeping geyser that only sprouts fire now and then.
Specials:
Splash attack: 175 AoE: 30% damage +20% dmg to normals (+0.4%/lvl)
Ignite
The geyser has a 30% chance on damaging a creep to ignite the target, dealing 15% of the tower's attack damage as spell damage per second and reducing the target's health regeneration by 25% for 8 seconds. Level Bonus: +0.6% attack damage +0.5% health regeneration reduction |
Download
Toggle Triggers Header globals
//@import
BuffType drol_fireDot
endglobals
private function init takes nothing returns nothing
endfunction
On Damage
ONDAMAGE_chance: 0.30
ONDAMAGE_chanceLevelAdd: 0.0
function onDamage takes Tower tower returns nothing
set drol_fireDot.apply(tower,Event.getTarget(),tower.getLevel()*5 + 200).userReal = tower.getCurrentAttackDamageWithBonus() * (0.15 + tower.getLevel() * 0.006)
endfunction
|
Storm Focus v1
2800
|
ID: 130
Family ID:
Author: SirCoqalot.
Rarity: unique
Element: storm
Attack Type: Energy
Attack Range: 1600
Attack CD: 3
Damage: 9222-14222
Mana: 20
Mana regen: 1.5
Status: Approved
|
Description: Advanced storm tower that emphasizes the use of anti air towers.
Specials:
Attacks AIR only +10% dmg to air
Freezing Gust
Casts a buff on a tower in 800 range, doubling the effect of 'Gust' and increasing that tower's damage against air units by 10% for 5 seconds. Level Bonus: +0.05 seconds duration +0.8% damage against air AC_TYPE_ALWAYS_BUFF 15, 800 range, 0s cooldown
Gust - Aura
Towers in 800 range around the Storm Focus gain additional attackdamage equal to 50% of the bonus damage against air they have. Level Bonus: +0.8% of bonus damage against air as additional attackdamage |
Download
Toggle Triggers Autocast
caster_art: Abilities\Spells\Human\Polymorph\PolyMorphDoneGround.mdl
AUTOCAST_cooldown: 0
AUTOCAST_numBuffsBeforeIdle: 0
AUTOCAST_isExtended: true
AUTOCAST_autocastType: AC_TYPE_ALWAYS_BUFF
AUTOCAST_manacost: 15
AUTOCAST_range: 800
AUTOCAST_buffType: sir_focus_buff
AUTOCAST_targetSelf: false
AUTOCAST_targetType: TARGET_TYPE_TOWERS
target_art:
AUTOCAST_autoRange: 800
private function onAutocast takes Tower tower returns nothing
endfunction
Header globals
BuffType sir_focus_aura
BuffType sir_focus_buff
endglobals
function auraOnCreate takes Buff b returns nothing
set b.userReal = 0 //Will store tower's bonus damage
endfunction
function auraPeriodic takes Buff b returns nothing
local Tower tower = b.getCaster()
local Tower buffee = b.getBuffedUnit()
local real multiplier = 0.5 + 0.008 * tower.getLevel()
local real bonusDamage = 1.0
if buffee.getBuffOfType(sir_focus_buff) != 0 then
set bonusDamage = 2.0
endif
//Calculate and set new damage bonus
set bonusDamage = bonusDamage * (buffee.getDamageToSize(SIZE_AIR) - 1) * multiplier
call buffee.modifyProperty(MOD_DAMAGE_ADD_PERC, bonusDamage - b.userReal)
set b.userReal = bonusDamage
endfunction
function auraOnCleanup takes Buff b returns nothing
call b.getBuffedUnit().modifyProperty(MOD_DAMAGE_ADD_PERC, -b.userReal)
endfunction
//Do not remove or rename this function!
//Put your initialization tasks here, this function will be called on map init
private function init takes nothing returns nothing
local Modifier m = Modifier.create()
set sir_focus_aura = BuffType.createAuraEffectType(false)
set sir_focus_buff = BuffType.create(5,0.05,true)
call m.addModification(MOD_DMG_TO_AIR,0.1,0.008)
call sir_focus_aura.setBuffIcon('@@0@@')
call sir_focus_aura.addEventOnCreate(auraOnCreate)
call sir_focus_aura.addPeriodicEvent(auraPeriodic, 1.0)
call sir_focus_aura.addEventOnCleanup(auraOnCleanup)
call sir_focus_buff.setBuffIcon('@@1@@')
call sir_focus_buff.setBuffModifier(m)
endfunction
Tower Aura
AURA_auraEffect: sir_focus_aura
AURA_power: 0
AURA_level: 0
AURA_auraRange: 800
AURA_targetType: TARGET_TYPE_TOWERS
AURA_levelAdd: 1
AURA_powerAdd: 1
AURA_targetSelf: true
|
Eredar Warlock v1
2800
|
ID: 132
Family ID:
Author: SirCoqaLot.
Rarity: unique
Element: darkness
Attack Type: Essence
Attack Range: 890
Attack CD: 3
Damage: 1753-1752
Status: Approved
|
Description: Daemonic entity that will stun allied towers and temporarily steal their damage for itself and will threaten nearby units by occasionally releasing shadowboltwaves.
Siphon Essence
Casts a buff on a nearby tower, if that tower tries to attack in the next 5 seconds it will be stunned for 2.5 seconds and this tower will deal [stunned tower's DPS x 3] as essence damage to the target of the buffed tower. Level Bonus: -0.02 seconds stun duration AC_TYPE_ALWAYS_BUFF 0, 400 range, 2.5s cooldown
Shadowbolt Wave
Every autocast of this tower has a 20% chance to release 10 shadowbolts. Every shadowbolt flies towards a random target in 1000 range and deals 1050 spell damage. This Spell has a 40% chance to trigger if the last autocast released a shadowboltwave. Level Bonus: +21 spell damage |
Download
Toggle Triggers Autocast
AUTOCAST_cooldown: 2.5
AUTOCAST_autoRange: 400
AUTOCAST_manacost: 0
AUTOCAST_range: 400
AUTOCAST_targetType: TARGET_TYPE_TOWERS
AUTOCAST_numBuffsBeforeIdle: 1
caster_art:
target_art:
AUTOCAST_autocastType: AC_TYPE_ALWAYS_BUFF
AUTOCAST_buffType: 0
AUTOCAST_isExtended: true
AUTOCAST_targetSelf: false
private function onAutocast takes Tower tower returns nothing
local Tower target = Event.getTarget()
call sir_eredar_buff.apply(tower,target,1)
call rollForShadowWave(tower)
endfunction
Header globals
//@export
ProjectileType sir_eredar_attackProj
//@export
ProjectileType sir_eredar_waveProj
//@export
BuffType sir_eredar_buff
endglobals
//@export
function rollForShadowWave takes Tower t returns nothing
local Projectile p
local integer counter = 0
local integer projCount
local real angle
local real x
local real y
local real z
local Iterate it
if (t.userInt == 0 and t.calcChance(0.20)) or (t.userInt == 1 and t.calcChance(0.40)) then
set t.userInt = 1
// Check whether there's anything to shoot at before creating any projectiles.
set it = Iterate.overUnitsInRangeOfCaster(t, TARGET_CREEPS, 1000)
if it.count() == 0 then
return
endif
call it.destroy()
set projCount = t.userInt2
set angle = 0
set x = t.getX()
set y = t.getY()
set z = t.getZ()
loop
exitwhen projCount == 0
set p = Projectile.createFromUnitToPoint(sir_eredar_waveProj, t, 1, 1, t, x+300*Cos(angle), y+300*Sin(angle), z, false, false)
set angle = angle + 36 * bj_DEGTORAD
set projCount = projCount - 1
endloop
else
set t.userInt = 0
endif
endfunction
public function sir_eredar_launch takes Projectile p returns nothing
local Tower t = p.getCaster()
local Iterate it
if t != 0 then
set it = Iterate.overUnitsInRangeOfCaster(t, TARGET_CREEPS, 1000)
if it.count() != 0 then
set p.explode = false // projectile will only explode if there are no targets around.
call Projectile.createFromPointToUnit(sir_eredar_attackProj, t, 1, 1, p.x, p.y, p.z, it.nextRandom(), true, false, false)
if it.count() != 0 then
call it.destroy()
endif
endif
endif
endfunction
public function sir_eredar_hit takes Projectile p, Unit creep returns nothing
local Tower tower = p.getCaster()
call tower.doSpellDamage(creep, tower.userReal * (1+tower.getLevel()*0.02), tower.calcSpellCritNoBonus())
endfunction
public function sir_towerstun takes Buff b returns nothing
local Tower eredar = b.getCaster()
local Tower attacker = b.getBuffedUnit()
local Unit target = Event.getTarget()
local real dmg = attacker.getCurrentAttackDamageWithBonus()/attacker.getCurrentAttackspeed() * 3
call cb_stun.applyOnlyTimed(eredar,attacker,2.5-eredar.getLevel()*0.02)
call eredar.doAttackDamage(target,dmg,eredar.calcSpellCritNoBonus())
call Effect.createSimple("Abilities\\Spells\\Undead\\Impale\\ImpaleHitTarget.mdl",attacker.getX(),attacker.getY()).destroy()
call eredar.getOwner().displayFloatingTextX(I2S(R2I(dmg)), target, 255, 0, 150, 255, 0.05, 0.0, 2.0)
call Effect.createSimple("Abilities\\Spells\\Undead\\Impale\\ImpaleHitTarget.mdl",target.getX(),target.getY()).destroy()
endfunction
//Do not remove or rename this function!
//Put your initialization tasks here, this function will be called on map init
private function init takes nothing returns nothing
set sir_eredar_buff = BuffType.create(5,0,true)
call sir_eredar_buff.setBuffIcon('@@0@@')
set sir_eredar_waveProj = ProjectileType.createRanged("Abilities\\Spells\\Other\\BlackArrow\\BlackArrowMissile.mdl", 300, 600)
call sir_eredar_waveProj.setEventOnExpiration(ProjectileEvent.sir_eredar_launch)
set sir_eredar_attackProj = ProjectileType.create("Abilities\\Spells\\Other\\BlackArrow\\BlackArrowMissile.mdl", 4, 1000)
call sir_eredar_attackProj.enableHoming(ProjectileTargetEvent.sir_eredar_hit,0)
call sir_eredar_buff.addEventOnAttack(sir_towerstun,1,0)
endfunction
On Tower Creation function onCreate takes Tower tower returns nothing
set tower.userInt = 0 // stores whether last autocast triggered shadowbolts
set tower.userInt2 = 10 // stores num shadowbolts to release
set tower.userReal = 1050 // stores base shadowbolt damage
endfunction
|
Mighty Phoenix v1
2800
|
ID: 149
Family ID:
Author: Der_kleine_Tomy
Rarity: rare
Element: fire
Attack Type: Elemental
Attack Range: 850
Attack CD: 2.5
Damage: 1659-1659
Status: Approved
|
Description: A mighty phoenix which can burn more than 1 target with its attacks.
Specials:
+20% dmg to nature (+1%/lvl)
Eruption
When Phoenixfire expires, it erupts and deals 440 elemental damage per armor point the creep is missing in 200 range around its target. Additionally the target regains only 50% of its armor. Creeps further away recieve less damage. This ability can be cast to make Phoenixfire expire immediately. Level Bonus: -2% armor regain AC_TYPE_NOAC_IMMEDIATE 0, 0.0 range, 1s cooldown
Phoenixfire
The Mighty Phoenix attacks up to 4 targets at once. If there are less creeps than attacks, the remaining attacks will hit the main target. The armor of attacked creeps melts, reducing it by 0.7 for 5 seconds. This buff is stackable. Level Bonus: +0.02 armor reduction +1 target at level 15 |
Download
Toggle Triggers Autocast
caster_art:
AUTOCAST_cooldown: 1
AUTOCAST_numBuffsBeforeIdle: 0
AUTOCAST_isExtended: false
AUTOCAST_autocastType: AC_TYPE_NOAC_IMMEDIATE
AUTOCAST_manacost: 0
AUTOCAST_range: 0.0
AUTOCAST_buffType: 0
AUTOCAST_targetSelf: true
AUTOCAST_targetType: 0
target_art:
AUTOCAST_autoRange: 0.0
private function onAutocast takes Tower tower returns nothing
local Buff b
local Iterate it = Iterate.overUnitsInRangeOfCaster(tower, TARGET_TYPE_CREEPS, 3000.0)
local Unit u
loop
set u = it.next()
exitwhen u == 0
set b = u.getBuffOfType(tomy_PhoenixFireBuff)
if b != 0 then
call b.removeBuff()
endif
endloop
endfunction
Header globals
//@import
ProjectileType tomy_PhoenixPT
//@import
BuffType tomy_PhoenixFireBuff
endglobals
//Do not remove or rename this function!
//Put your initialization tasks here, this function will be called on map init
private function init takes nothing returns nothing
endfunction
On Attack
ONATTACK_chance: 1.0
ONATTACK_chanceLevelAdd: 0.0
function onAttack takes Tower tower returns nothing
local integer attacks = 3
local boolean add = false
local Unit maintarget = Event.getTarget()
local Unit target
local Iterate it = Iterate.overUnitsInRangeOfUnit(tower,TARGET_TYPE_CREEPS,maintarget,450)
local real sidearc = 0.20
local boolean itDestroyed = false
if tower.getLevel() >= 15 then
set attacks = attacks + 1
endif
loop
exitwhen attacks == 0 // Exit when all attacks are fired
// If the Iterate is not destroyed, get the next target
if not itDestroyed then
set target = it.next()
// If there are no more targets
if target == 0 then
set itDestroyed = true // Iterate is destroyed (auto destroy)
set target = maintarget // target is the maintarget now
endif
endif
// If there are no more units, shoot at the maintarget (itDestroyed). If there are units then don't shoot at the maintarget
if itDestroyed or target != maintarget then
call Projectile.createBezierInterpolationFromUnitToUnit(tomy_PhoenixPT,tower,0,0,tower,target,0,sidearc,0,true).setScale(0.40)
set attacks = attacks - 1
set sidearc = -sidearc
if add then
set sidearc = sidearc + 0.20
endif
set add = not add
endif
endloop
// If the Iterate is not destroyed yet, destroy it
if not itDestroyed then
call it.destroy()
endif
endfunction
On Damage
ONDAMAGE_chance: 1.0
ONDAMAGE_chanceLevelAdd: 0.0
function onDamage takes Tower tower returns nothing
local Unit target = Event.getTarget()
local Buff b = target.getBuffOfType(tomy_PhoenixFireBuff)
local integer level = tower.getLevel()
local real armorLoss = 0.70 + 0.02 * level
if b != 0 then
call tomy_PhoenixFireBuff.apply(tower, target, b.getPower() + R2I(armorLoss * 100.0))
else
call tomy_PhoenixFireBuff.apply(tower, target, R2I(armorLoss * 100.0))
endif
endfunction
On Tower Creation function onCreate takes Tower tower returns nothing
set tower.userInt = 3 // Save the family member (1 = first member)
set tower.userInt2 = 0 // Used to save the buff (double linked list)
call AddUnitAnimationProperties(tower.getUnit(), "stand alternate", false)
endfunction
|
Description: