master
a327ex 2021-04-20 23:39:41 -03:00
parent 1008e91531
commit 7e11fd0c0b
7 changed files with 239 additions and 82 deletions

View File

@ -997,3 +997,29 @@ thing, which should make it easier to work with. The rect cutting UI idea does s
| Divine Machine Arrow | all arrows fired by rangers have a 40% chance to seek enemies and pierce 5 times |
| Chronomancy | all mages cast their spells 25% faster |
| Awakening | every round 1 mage is granted +100% cast speed and damage for that round |
# Day 63 - 20/04/21
| Name | Description |
| --- | --- |
| Divine Punishment | periodically deal 10X damage to all enemies, where X is how many mages you have |
| Berserking | all warriors have up to +50% attack speed based on missing HP |
| Unwavering Stance | all warriors gain +5% defense every 5 seconds |
| Ultimatum | projectiles that chain gain +25% damage with each chain |
| Flying Daggers | all knives thrown by rogues chain +2 times |
| Magnify | +25% area size |
| Concentrated Fire | -50% area size and +50% area damage |
| Unleash | +2% area size and damage per second |
| Reinforce | +10% damage, defense and attack speed to all allies if you have at least one enchanter |
| Payback | +5% damage to all allies whenever an enchanter is hit |
| Blessing | +20% healing effectiveness |
| Hex Master | +25% curse duration |
| Whispers of Doom | curses apply doom, when 4 doom instances are reached they deal 200 damage |
| Force Push | +25% knockback force |
| Heavy Impact | when enemies hit walls they take damage according to the knockback force |
| Crucio | taking damage also shares that amount to each enemy |
| Immolation | 3 allies will periodically take damage, all allies gain +8% damage per tick |
| Call of the Void | +25% damage over time |
| Spawning Pool | +1 critter health |
| Hive | +2 critter health |
| Void Rift | attacks by mages, nukers or voiders have a 20% chance to create a void rift on hit |

View File

@ -348,6 +348,12 @@ function Seeker:on_collision_enter(other, contact)
hit2:play{pitch = random:float(0.95, 1.05), volume = 0.35}
end
if main.current.player.heavy_impact then
if self.being_pushed then
self:hit(self.push_force)
end
end
elseif table.any(main.current.enemies, function(v) return other:is(v) end) then
if self.being_pushed and math.length(self:get_velocity()) > 60 then
other:hit(math.floor(self.push_force/4))
@ -383,7 +389,6 @@ function Seeker:hit(damage, projectile)
local actual_damage = self:calculate_damage(damage)*self.stun_dmg_m*self.bane_dmg_m
if self.vulnerable then actual_damage = actual_damage*1.2 end
self.hp = self.hp - actual_damage
print(actual_damage)
main.current.damage_dealt = main.current.damage_dealt + actual_damage
if projectile and projectile.spawn_critters_on_hit then
@ -493,6 +498,17 @@ function Seeker:curse(curse, duration, arg1, arg2)
elseif main.current.curser_level == 1 then curse_m = 1.25
else curse_m = 1 end
if main.current.player.whispers_of_doom then
if not self.doom then self.doom = 0 end
self.doom = self.doom + 1
if self.doom == 4 then
self.doom = 0
self:hit(200)
buff1:play{pitch = random:float(0.95, 1.05), volume = 0.5}
ui_switch1:play{pitch = random:float(0.95, 1.05), volume = 0.5}
end
end
if curse == 'launcher' then
self.t:after(duration*curse_m, function()
self.launcher_push = arg1

View File

@ -43,6 +43,7 @@ end
function HitFX:use(name, x, k, d, flash_duration)
if not self.parent then return end
self.parent.flashes[name]:flash(flash_duration)
self.parent.springs[name]:pull(x, k, d)
end

View File

@ -19,6 +19,7 @@ function init()
music.volume = 0
local s = {tags = {sfx}}
thunder1 = Sound('399656__bajko__sfx-thunder-blast.ogg', s)
flagellant1 = Sound('Whipping Horse 3.ogg', s)
bard2 = Sound('376532__womb-affliction__flute-trill.ogg', s)
bard1 = Sound('Magical Impact 12.ogg', s)
@ -958,26 +959,26 @@ function init()
['awakening'] = '[fg]every round [yellow]1[fg] mage is granted [yellow]+100%[fg] attack speed and damage for that round',
['divine_punishment'] = '[fg]periodically deal [yellow]10X[fg] damage to all enemies, where [yellow]X[fg] is how many mages you have',
['berserking'] = '[fg]all warriors have up to [yellow]+50%[fg] attack speed based on missing HP',
['unwavering_stance'] = '[fg]all warriors gain [yellow]+5%[fg] defense every [yellow]5[fg] seconds, up to [yellow]+50%[fg]',
['unwavering_stance'] = '[fg]all warriors gain [yellow]+5%[fg] defense every [yellow]5[fg] seconds',
['ultimatum'] = '[fg]projectiles that chain gain [yellow]+25%[fg] damage with each chain',
['flying_daggers'] = '[fg]all knives thrown by rogues chain [yellow]+2[fg] times',
['assassination'] = '[fg]your crits deal [yellow]8x[fg] damage (up from [yellow]4x[fg]) but normal attacks deal [yellow]half[fg] damage',
['assassination'] = '[fg]crits from rogues deal [yellow]8x[fg] damage but normal attacks deal [yellow]half[fg] damage',
['magnify'] = '[yellow]+25%[fg] area size',
['concentrated_fire'] = '[yellow]-50%[fg] area size and [yellow]+50%[fg] area damage',
['unleash'] = '[yellow]+5%[fg] area size and damage per second, this resets when any AoE attack happens',
['unleash'] = '[yellow]+2%[fg] area size and damage per second',
['reinforce'] = '[yellow]+10%[fg] damage, defense and attack speed to all allies if you have at least one enchanter',
['payback'] = '[yellow]+5%[fg] damage to all allies whenever an enchanter is hit',
['blessing'] = '[yellow]+20%[fg] healing effectiveness',
['hex_master'] = '[yellow]+25%[fg] curse duration',
['whispers_of_doom'] = '[fg]curses apply doom, when [yellow]3[fg] doom instances are applied they are consumed, dealing [yellow]100[fg] damage',
['whispers_of_doom'] = '[fg]curses apply doom, when [yellow]4[fg] doom instances are reached they deal [yellow]200[fg] damage',
['force_push'] = '[yellow]+25%[fg] knockback force',
['heavy_impact'] = '[fg]if knockbacked enemies hit walls they take damage according to the knockback force',
['crucio'] = '[fg]taking damage shares [yellow]2X[fg] the amount across all enemies',
['immolation'] = '[yellow]3[fg] units chosen at random will periodically take damage, all your allies gain [yellow]+8%[fg] damage per tick',
['heavy_impact'] = '[fg]when enemies hit walls they take damage according to the knockback force',
['crucio'] = '[fg]taking damage also shares that amount across all enemies',
['immolation'] = '[yellow]3[fg] units will periodically take damage, all your allies gain [yellow]+8%[fg] damage per tick',
['call_of_the_void'] = '[yellow]+25%[fg] damage over time',
['spawning_pool'] = '[yellow]+1[fg] critter health',
['hive'] = '[yellow]+2[fg] critter health',
['void_rift'] = '[fg]AoE attacks by mages, nukers or voiders have a [yellow]20%[fg] chance to create a void rift',
['void_rift'] = '[fg]attacks by mages, nukers or voiders have a [yellow]20%[fg] chance to create a void rift on hit',
}
passive_tiers = {
@ -1044,58 +1045,13 @@ function init()
[24] = {20, 30, 50},
}
--[[
* ['ouroboros_technique_r'] = 2,
* ['ouroboros_technique_l'] = 2,
* ['wall_echo'] = 1,
* ['wall_rider'] = 1,
* ['centipede'] = 1,
* ['intimidation'] = 2,
* ['vulnerability'] = 2,
* ['temporal_chains'] = 1,
* ['amplify'] = 1,
* ['amplify_x'] = 1,
* ['resonance'] = 2,
* ['ballista'] = 1,
* ['ballista_x'] = 1,
* ['point_blank'] = 2,
* ['longshot'] = 2,
* ['blunt_arrow'] = 1,
* ['explosive_arrow'] = 2,
* ['divine_machine_arrow'] = 3,
* ['chronomancy'] = 2,
* ['awakening'] = 2,
['divine_punishment'] = 3,
['berserking'] = 1,
['unwavering_stance'] = 1,
['ultimatum'] = 2,
['flying_daggers'] = 3,
['assassination'] = 1,
['magnify'] = 1,
['concentrated_fire'] = 2,
['unleash'] = 1,
['reinforce'] = 2,
['payback'] = 2,
['blessing'] = 1,
['hex_master'] = 1,
['whispers_of_doom'] = 2,
['force_push'] = 1,
['heavy_impact'] = 2,
['crucio'] = 3,
['immolation'] = 2,
['call_of_the_void'] = 2,
['spawning_pool'] = 1,
['hive'] = 3,
]]--
gold = 2
passives = {'awakening'}
passives = {'void_rift'}
main = Main()
main:add(BuyScreen'buy_screen')
main:go_to('buy_screen', 2, {
{character = 'wizard', level = 1},
{character = 'spellblade', level = 1},
main:go_to('buy_screen', 20, {
{character = 'spellblade', level = 3},
--[[
{character = 'swordsman', level = 3},
{character = 'wizard', level = 3},

View File

@ -44,14 +44,14 @@ function LightningLine:init(args)
self.lines = {}
table.insert(self.lines, {x1 = self.src.x, y1 = self.src.y, x2 = self.dst.x, y2 = self.dst.y})
self.w = 3
self.generations = 3
self.max_offset = 8
self.generations = args.generations or 3
self.max_offset = args.max_offset or 8
self:generate()
self.t:tween(0.1, self, {w = 1}, math.linear, function() self.dead = true end)
self.t:tween(self.duration or 0.1, self, {w = 1}, math.linear, function() self.dead = true end)
self.color = args.color or blue[0]
HitCircle{group = main.current.effects, x = self.src.x, y = self.src.y, rs = 6, color = fg[0], duration = 0.1}
HitCircle{group = main.current.effects, x = self.src.x, y = self.src.y, rs = 6, color = fg[0], duration = self.duration or 0.1}
for i = 1, 2 do HitParticle{group = main.current.effects, x = self.src.x, y = self.src.y, color = self.color} end
HitCircle{group = main.current.effects, x = self.dst.x, y = self.dst.y, rs = 6, color = fg[0], duration = 0.1}
HitCircle{group = main.current.effects, x = self.dst.x, y = self.dst.y, rs = 6, color = fg[0], duration = self.duration or 0.1}
HitParticle{group = main.current.effects, x = self.dst.x, y = self.dst.y, color = self.color}
end

View File

@ -384,7 +384,7 @@ function Player:init(args)
local enemies = main.current.main:get_objects_by_classes(main.current.enemies)
for _, enemy in ipairs(enemies) do
if self:distance_to_object(enemy) < 128 then
enemy:curse('infestor', 6, (self.level == 3 and 6 or 2), self.dmg)
enemy:curse('infestor', 6*(self.hex_duration_m or 1), (self.level == 3 and 6 or 2), self.dmg)
HitCircle{group = main.current.effects, x = self.x, y = self.y, rs = 6, color = orange[0], duration = 0.1}
LightningLine{group = main.current.effects, src = self, dst = enemy, color = orange[0]}
end
@ -483,6 +483,7 @@ function Player:init(args)
end
if self.leader and self.awakening then
main.current.t:after(0.1, function()
local units = self:get_all_units()
local mages = {}
for _, unit in ipairs(units) do
@ -493,7 +494,99 @@ function Player:init(args)
local mage = random:table(mages)
mage.awakening_aspd_m = 2
mage.awakening_dmg_m = 2
end)
end
if self.leader and self.divine_punishment then
main.current.t:every(5, function()
local units = self:get_all_units()
local mages = {}
for _, unit in ipairs(units) do
if table.any(unit.classes, function(v) return v == 'mage' end) then
table.insert(mages, unit)
end
end
local leader = main.current.player:get_leader()
local enemies = main.current.main:get_objects_by_classes(main.current.enemies)
if #enemies > 0 then
thunder1:play{volume = 0.5}
camera:shake(4, 0.5)
end
for _, enemy in ipairs(enemies) do
enemy:hit(10*#mages)
LightningLine{group = main.current.effects, src = {x = enemy.x, y = enemy.y - 32}, dst = enemy, color = blue[0], duration = 0.2}
_G[random:table{'spark1', 'spark2', 'spark3'}]:play{pitch = random:float(0.9, 1.1), volume = 0.3}
end
end)
end
if self.unwavering_stance and table.any(self.classes, function(v) return v == 'warrior' end) then
self.unwavering_stance_def_m = 1
self.t:every(5, function()
self.unwavering_stance_def_m = self.unwavering_stance_def_m + 0.05
end)
end
if self.magnify then
self.magnify_area_size_m = 1.25
end
if self.concentrated_fire then
self.concentrated_fire_area_size_m = 0.66
self.concentrated_fire_area_dmg_m = 1.5
end
if self.unleash then
self.unleash_area_dmg_m = 1
self.unleash_area_size_m = 1
self.t:every(1, function()
self.unleash_area_dmg_m = self.unleash_area_dmg_m + 0.02
self.unleash_area_size_m = self.unleash_area_size_m + 0.02
end)
end
if self.reinforce then
local units = self:get_all_units()
local any_enchanter = false
for _, unit in ipairs(units) do
if table.any(unit.classes, function(v) return v == 'enchanter' end) then
any_enchanter = true
break
end
end
if any_enchanter then
self.reinforce_dmg_m = 1.1
self.reinforce_def_m = 1.1
self.reinforce_aspd_m = 1.1
end
end
if self.payback then
self.payback_dmg_m = 1
end
if self.hex_master then
self.hex_duration_m = 1.25
end
if self.leader and self.immolation then
main.current.t:after(0.1, function()
local units = self:get_all_units()
local unit_1 = random:table_remove(units)
local unit_2 = random:table_remove(units)
local unit_3 = random:table_remove(units)
print(unit_1, unit_2, unit_3)
if unit_1 then unit_1.t:every(2, function() unit_1:hit(0.05*unit_1.max_hp) end) end
if unit_2 then unit_2.t:every(2, function() unit_2:hit(0.05*unit_2.max_hp) end) end
if unit_3 then unit_3.t:every(2, function() unit_3:hit(0.05*unit_3.max_hp) end) end
local units = self:get_all_units()
for _, unit in ipairs(units) do
unit.immolation_dmg_m = 1
unit.t:every(2, function() unit.immolation_dmg_m = unit.immolation_dmg_m + 0.08 end)
end
end)
end
end
@ -555,6 +648,7 @@ function Player:update(dt)
if main.current.healer_level == 2 then self.heal_effect_m = 1.3
elseif main.current.healer_level == 1 then self.heal_effect_m = 1.15
else self.heal_effect_m = 1 end
if self.blessing then self.heal_effect_m = self.heal_effect_m*1.2 end
if table.any(self.classes, function(v) return v == 'nuker' end) then
if main.current.nuker_level == 2 then self.nuker_area_size_m = 1.25; self.nuker_area_dmg_m = 1.25
@ -606,12 +700,14 @@ function Player:update(dt)
if main.current.forcer_level == 2 then self.knockback_m = 1.5
elseif main.current.forcer_level == 1 then self.knockback_m = 1.25
else self.knockback_m = 1 end
if self.force_push then self.knockback_m = self.knockback_m*1.25 end
if table.any(self.classes, function(v) return v == 'voider' end) then
if main.current.voider_level == 2 then self.dot_dmg_m = 1.25
elseif main.current.voider_level == 1 then self.dot_dmg_m = 1.15
else self.dot_dmg_m = 1 end
end
if self.call_of_the_void then self.dot_dmg_m = self.dot_dmg_m*1.25 end
if self.ouroboros_technique_l and self.leader then
local units = self:get_all_units()
@ -626,12 +722,16 @@ function Player:update(dt)
end
end
if self.berserking and table.any(self.classes, function(v) return v == 'warrior' end) then
self.berserking_aspd_m = math.remap(self.hp/self.max_hp, 0, 1, 1.5, 1)
end
self.buff_def_a = (self.warrior_def_a or 0)
self.buff_aspd_m = (self.chronomancer_aspd_m or 1)*(self.vagrant_aspd_m or 1)*(self.outlaw_aspd_m or 1)*(self.fairy_aspd_m or 1)*(self.psyker_aspd_m or 1)*(self.chronomancy_aspd_m or 1)*(self.awakening_aspd_m or 1)
self.buff_dmg_m = (self.squire_dmg_m or 1)*(self.vagrant_dmg_m or 1)*(self.enchanter_dmg_m or 1)*(self.swordsman_dmg_m or 1)*(self.flagellant_dmg_m or 1)*(self.psyker_dmg_m or 1)*(self.ballista_dmg_m or 1)*(self.ballista_x_dmg_m or 1)*(self.awakening_dmg_m or 1)
self.buff_def_m = (self.squire_def_m or 1)*(self.ouroboros_def_m or 1)
self.buff_area_size_m = (self.nuker_area_size_m or 1)
self.buff_area_dmg_m = (self.nuker_area_dmg_m or 1)*(self.amplify_area_dmg_m or 1)*(self.amplify_x_area_dmg_m or 1)
self.buff_aspd_m = (self.chronomancer_aspd_m or 1)*(self.vagrant_aspd_m or 1)*(self.outlaw_aspd_m or 1)*(self.fairy_aspd_m or 1)*(self.psyker_aspd_m or 1)*(self.chronomancy_aspd_m or 1)*(self.awakening_aspd_m or 1)*(self.berserking_aspd_m or 1)*(self.reinforce_aspd_m or 1)
self.buff_dmg_m = (self.squire_dmg_m or 1)*(self.vagrant_dmg_m or 1)*(self.enchanter_dmg_m or 1)*(self.swordsman_dmg_m or 1)*(self.flagellant_dmg_m or 1)*(self.psyker_dmg_m or 1)*(self.ballista_dmg_m or 1)*(self.ballista_x_dmg_m or 1)*(self.awakening_dmg_m or 1)*(self.reinforce_dmg_m or 1)*(self.payback_dmg_m or 1)*(self.immolation_dmg_m or 1)
self.buff_def_m = (self.squire_def_m or 1)*(self.ouroboros_def_m or 1)*(self.unwavering_stance_def_m or 1)*(self.reinforce_def_m or 1)
self.buff_area_size_m = (self.nuker_area_size_m or 1)*(self.magnify_area_size_m or 1)*(self.concentrated_fire_area_size_m or 1)*(self.unleash_area_size_m or 1)
self.buff_area_dmg_m = (self.nuker_area_dmg_m or 1)*(self.amplify_area_dmg_m or 1)*(self.amplify_x_area_dmg_m or 1)*(self.concentrated_fire_area_dmg_m or 1)*(self.unleash_area_dmg_m or 1)
self.buff_mvspd_m = (self.wall_rider_mvspd_m or 1)*(self.centipede_mvspd_m or 1)
self:calculate_stats()
@ -781,6 +881,10 @@ function Player:hit(damage)
camera:shake(4, 0.5)
main.current.damage_taken = main.current.damage_taken + actual_damage
if self.payback and table.any(self.classes, function(v) return v == 'enchanter' end) then
self.payback_dmg_m = self.payback_dmg_m + 0.05
end
if self.character == 'beastmaster' and self.level == 3 then
critter1:play{pitch = random:float(0.95, 1.05), volume = 0.5}
trigger:after(0.01, function()
@ -790,6 +894,14 @@ function Player:hit(damage)
end)
end
if self.crucio then
local enemies = main.current.main:get_objects_by_classes(main.current.enemies)
for _, enemy in ipairs(enemies) do
enemy:hit(actual_damage)
HitCircle{group = main.current.effects, x = self.x, y = self.y, rs = 6, color = fg[0], duration = 0.1}
end
end
local psykeeper = self:get_unit'psykeeper'
if psykeeper then
psykeeper.stored_heal = psykeeper.stored_heal + actual_damage
@ -866,6 +978,11 @@ function Player:get_all_units()
end
function Player:get_leader()
return (self.leader and self) or self.parent
end
function Player:get_unit(character)
local all_units = self:get_all_units()
for _, unit in ipairs(all_units) do
@ -917,7 +1034,12 @@ function Player:shoot(r, mods)
local dmg_m = 1
local crit = false
if self.chance_to_crit and random:bool(self.chance_to_crit) then dmg_m = 4; crit = true end
if self.chance_to_crit and random:bool(self.chance_to_crit) then dmg_m = (self.assassination and 8 or 4); crit = true end
if self.assassination and table.any(self.classes, function(v) return v == 'rogue' end) then
if not crit then
dmg_m = 0.5
end
end
if crit and mods.spawn_critters_on_crit then
critter1:play{pitch = random:float(0.95, 1.05), volume = 0.5}
@ -1170,6 +1292,10 @@ function Projectile:init(args)
self.knockback = 10
end
end
if self.parent.flying_daggers and table.any(self.parent.classes, function(v) return v == 'rogue' end) then
self.chain = self.chain + 2
end
end
@ -1342,6 +1468,9 @@ function Projectile:on_trigger_enter(other, contact)
if self.level == 3 and self.character == 'scout' then
self.dmg = self.dmg*1.25
end
if self.parent.ultimatum then
self.dmg = self.dmg*1.25
end
end
end
HitCircle{group = main.current.effects, x = self.x, y = self.y, rs = 6, color = fg[0], duration = 0.1}
@ -1389,7 +1518,7 @@ function Projectile:on_trigger_enter(other, contact)
end
if self.character == 'assassin' then
other:apply_dot((self.crit and 4*self.dmg or self.dmg/2)*self.dot_dmg_m*(main.current.chronomancer_dot), 3)
other:apply_dot((self.crit and 4*self.dmg or self.dmg/2)*(self.dot_dmg_m or 1)*(main.current.chronomancer_dot), 3)
end
if self.parent.chain_infused then
@ -1434,6 +1563,12 @@ function Projectile:on_trigger_enter(other, contact)
dmg = 0.2*self.parent.area_dmg_m*self.dmg, character = self.character, level = self.level, parent = self}
end
end
if self.parent.void_rift and table.any(self.parent.classes, function(v) return v == 'mage' or v == 'nuker' or v == 'voider' end) then
if random:bool(20) then
DotArea{group = main.current.effects, x = self.x, y = self.y, rs = self.parent.area_size_m*24, color = self.color, dmg = self.parent.area_dmg_m*self.dmg*(self.parent.dot_dmg_m or 1), void_rift = true, duration = 1}
end
end
end
end
@ -1465,7 +1600,7 @@ function Area:init(args)
enemy:hit(6*self.dmg + resonance_dmg)
elseif self.character == 'launcher' then
if self.parent.resonance then resonance_dmg = (self.level == 3 and 6*self.dmg*0.05*#enemies or 2*self.dmg*0.05*#enemies) end
enemy:curse('launcher', 4, (self.level == 3 and 6*self.dmg or 2*self.dmg) + resonance_dmg, self.parent)
enemy:curse('launcher', 4*(self.hex_duration_m or 1), (self.level == 3 and 6*self.dmg or 2*self.dmg) + resonance_dmg, self.parent)
else
if self.parent.resonance then resonance_dmg = self.dmg*0.05*#enemies end
enemy:hit(self.dmg + resonance_dmg)
@ -1500,6 +1635,12 @@ function Area:init(args)
end
end
if self.parent.void_rift and table.any(self.parent.classes, function(v) return v == 'mage' or v == 'nuker' or v == 'voider' end) then
if random:bool(20) then
DotArea{group = main.current.effects, x = self.x, y = self.y, rs = self.parent.area_size_m*24, color = self.color, dmg = self.parent.area_dmg_m*self.dmg*(self.parent.dot_dmg_m or 1), void_rift = true, duration = 1}
end
end
self.color = fg[0]
self.color_transparent = Color(args.color.r, args.color.g, args.color.b, 0.08)
self.w = 0
@ -1552,7 +1693,7 @@ function DotArea:init(args)
pyro1:play{pitch = random:float(1.5, 1.8), volume = 0.1}
enemy.pyrod = self
end
enemy:hit(self.dot_dmg_m*self.dmg/5)
enemy:hit((self.dot_dmg_m or 1)*self.dmg/5)
HitCircle{group = main.current.effects, x = enemy.x, y = enemy.y, rs = 6, color = fg[0], duration = 0.1}
for i = 1, 1 do HitParticle{group = main.current.effects, x = enemy.x, y = enemy.y, color = self.color} end
for i = 1, 1 do HitParticle{group = main.current.effects, x = enemy.x, y = enemy.y, color = enemy.color} end
@ -1570,7 +1711,7 @@ function DotArea:init(args)
if self.level == 3 then
enemy:slow(0.4, 4)
end
enemy:hit(self.dot_dmg_m*2*self.dmg)
enemy:hit((self.dot_dmg_m or 1)*2*self.dmg)
HitCircle{group = main.current.effects, x = enemy.x, y = enemy.y, rs = 6, color = fg[0], duration = 0.1}
for i = 1, 1 do HitParticle{group = main.current.effects, x = enemy.x, y = enemy.y, color = self.color} end
for i = 1, 1 do HitParticle{group = main.current.effects, x = enemy.x, y = enemy.y, color = enemy.color} end
@ -1586,10 +1727,10 @@ function DotArea:init(args)
buff1:play{pitch = random:float(0.8, 1.2), volume = 0.1}
end
for _, enemy in ipairs(enemies) do
enemy:curse('bane', 0.5)
enemy:curse('bane', 0.5*(self.hex_duration_m or 1))
if self.level == 3 then
enemy:slow(0.5, 0.5)
enemy:hit(self.dot_dmg_m*self.dmg/2)
enemy:hit((self.dot_dmg_m or 1)*self.dmg/2)
HitCircle{group = main.current.effects, x = enemy.x, y = enemy.y, rs = 6, color = fg[0], duration = 0.1}
for i = 1, 1 do HitParticle{group = main.current.effects, x = enemy.x, y = enemy.y, color = self.color} end
for i = 1, 1 do HitParticle{group = main.current.effects, x = enemy.x, y = enemy.y, color = enemy.color} end
@ -1597,6 +1738,19 @@ function DotArea:init(args)
end
end, nil, nil, 'dot')
end
elseif self.void_rift then
self.t:every(0.2, function()
local enemies = main.current.main:get_objects_in_shape(self.shape, main.current.enemies)
if #enemies > 0 then self.spring:pull(0.05, 200, 10) end
for _, enemy in ipairs(enemies) do
hit2:play{pitch = random:float(0.8, 1.2), volume = 0.2}
enemy:hit((self.dot_dmg_m or 1)*self.dmg/5)
HitCircle{group = main.current.effects, x = enemy.x, y = enemy.y, rs = 6, color = fg[0], duration = 0.1}
for i = 1, 1 do HitParticle{group = main.current.effects, x = enemy.x, y = enemy.y, color = self.color} end
for i = 1, 1 do HitParticle{group = main.current.effects, x = enemy.x, y = enemy.y, color = enemy.color} end
end
end, nil, nil, 'dot')
end
self.color = fg[0]
@ -1613,6 +1767,10 @@ function DotArea:init(args)
self.vr = 0
self.dvr = random:float(-math.pi/4, math.pi/4)
if self.void_rift then
self.dvr = random:table{random:float(-4*math.pi, -2*math.pi), random:float(2*math.pi, 4*math.pi)}
end
end
@ -2014,7 +2172,7 @@ function Critter:init(args)
self.t:after(0.5, function() self.invulnerable = false end)
self.dmg = args.dmg or self.parent.dmg
self.hp = 1 + ((main.current.swarmer_level == 2 and 3) or (main.current.swarmer_level == 1 and 1) or 0)
self.hp = 1 + ((main.current.swarmer_level == 2 and 3) or (main.current.swarmer_level == 1 and 1) or 0) + (self.parent.spawning_pool and 1 or 0) + (self.parent.hive and 2 or 0)
end