Orb update 4/4

master
a327ex 2021-06-25 13:25:13 -03:00
parent 97416c5d78
commit 8acbd6b1ae
9 changed files with 130 additions and 131 deletions

View File

@ -121,7 +121,7 @@ function Arena:on_enter(from, level, units, passives, shop_level, shop_xp, lock)
SpawnEffect{group = self.effects, x = gw/2, y = gh/2, action = function(x, y)
spawn1:play{pitch = random:float(0.8, 1.2), volume = 0.15}
SpawnMarker{group = self.effects, x = x, y = y}
self.t:after(0.75, function()
self.t:after(1.125, function()
self.boss = Seeker{group = self.main, x = x, y = y, character = 'seeker', level = self.level, boss = level_to_boss[self.level]}
end)
end}
@ -141,7 +141,7 @@ function Arena:on_enter(from, level, units, passives, shop_level, shop_xp, lock)
local spawn_points = {left = {x = self.x1 + 32, y = gh/2}, middle = {x = gw/2, y = gh/2}, right = {x = self.x2 - 32, y = gh/2}}
local p = spawn_points[spawn_type]
SpawnMarker{group = self.effects, x = p.x, y = p.y}
self.t:after(0.75, function() self:spawn_n_enemies(p, nil, 8 + math.floor(self.level/2)) end)
self.t:after(1.125, function() self:spawn_n_enemies(p, nil, 8 + math.floor(self.level/2)) end)
end)
end)
end)
@ -182,8 +182,8 @@ function Arena:on_enter(from, level, units, passives, shop_level, shop_xp, lock)
2, 3, 4,
3, 4, 4, 5,
5, 5, 5, 5, 7,
6, 6, 7, 7, 7, 10,
6, 8, 10, 12, 14, 16, 25,
6, 6, 7, 7, 8, 10,
8, 8, 10, 12, 14, 16, 25,
}
self.level_to_distributed_enemies_chance = {
0, 5, 10,
@ -224,7 +224,7 @@ function Arena:on_enter(from, level, units, passives, shop_level, shop_xp, lock)
local spawn_points = {left = {x = self.x1 + 32, y = gh/2}, middle = {x = gw/2, y = gh/2}, right = {x = self.x2 - 32, y = gh/2}}
local p = spawn_points[spawn_type]
SpawnMarker{group = self.effects, x = p.x, y = p.y}
self.t:after(0.75, function() self:spawn_n_enemies(p, nil, 8 + (self.wave-1)*2) end)
self.t:after(1.125, function() self:spawn_n_enemies(p, nil, 8 + (self.wave-1)*2) end)
end
end)
end, self.max_waves+1)
@ -299,24 +299,24 @@ function Arena:on_enter(from, level, units, passives, shop_level, shop_xp, lock)
self.t:after({0, 0.2}, function()
local p = random:table_remove(spawn_points)
SpawnMarker{group = self.effects, x = p.x, y = p.y}
self.t:after(0.75, function() self:spawn_n_enemies(p, 1, math.floor(n/4), true) end)
self.t:after(1.125, function() self:spawn_n_enemies(p, 1, math.floor(n/4), true) end)
end)
self.t:after({0, 0.2}, function()
local p = random:table_remove(spawn_points)
SpawnMarker{group = self.effects, x = p.x, y = p.y}
self.t:after(0.75, function() self:spawn_n_enemies(p, 2, math.floor(n/4), true) end)
self.t:after(1.125, function() self:spawn_n_enemies(p, 2, math.floor(n/4), true) end)
end)
self.t:after({0, 0.2}, function()
local p = random:table_remove(spawn_points)
SpawnMarker{group = self.effects, x = p.x, y = p.y}
self.t:after(0.75, function() self:spawn_n_enemies(p, 3, math.floor(n/4), true) end)
self.t:after(1.125, function() self:spawn_n_enemies(p, 3, math.floor(n/4), true) end)
end)
self.t:after({0, 0.2}, function()
local p = random:table_remove(spawn_points)
SpawnMarker{group = self.effects, x = p.x, y = p.y}
self.t:after(0.75, function() self:spawn_n_enemies(p, 4, math.floor(n/4), true) end)
self.t:after(1.125, function() self:spawn_n_enemies(p, 4, math.floor(n/4), true) end)
end)
self.t:after(0.75 + math.floor(n/4)*0.25, function() self.spawning_enemies = false end, 'spawning_enemies')
self.t:after(1.125 + math.floor(n/4)*0.25, function() self.spawning_enemies = false end, 'spawning_enemies')
self.enemy_spawns_prevented = 0
end)
end
@ -945,22 +945,22 @@ function Arena:spawn_distributed_enemies()
if spawn_type == '4' then
local p = random:table_remove(spawn_points)
SpawnMarker{group = self.effects, x = p.x, y = p.y}
self.t:after(0.75, function()
self.t:after(1.125, function()
self:spawn_n_enemies(p)
end)
self.t:after(1.5, function() self.spawning_enemies = false end, 'spawning_enemies')
self.t:after(2.25, function() self.spawning_enemies = false end, 'spawning_enemies')
elseif spawn_type == '4+4' then
local p = random:table_remove(spawn_points)
SpawnMarker{group = self.effects, x = p.x, y = p.y}
self.t:after(0.75, function()
self.t:after(1.125, function()
self:spawn_n_enemies(p)
self.t:after(2, function() self:spawn_n_enemies(p) end)
end)
self.t:after(3.5, function() self.spawning_enemies = false end, 'spawning_enemies')
self.t:after(4.25, function() self.spawning_enemies = false end, 'spawning_enemies')
elseif spawn_type == '4+4+4' then
local p = random:table_remove(spawn_points)
SpawnMarker{group = self.effects, x = p.x, y = p.y}
self.t:after(0.75, function()
self.t:after(1.125, function()
self:spawn_n_enemies(p)
self.t:after(1, function()
self:spawn_n_enemies(p)
@ -969,58 +969,58 @@ function Arena:spawn_distributed_enemies()
end)
end)
end)
self.t:after(3.5, function() self.spawning_enemies = false end, 'spawning_enemies')
self.t:after(4.25, function() self.spawning_enemies = false end, 'spawning_enemies')
elseif spawn_type == '2x4' then
self.t:after({0, 0.2}, function()
local p = random:table_remove(spawn_points)
SpawnMarker{group = self.effects, x = p.x, y = p.y}
self.t:after(0.75, function() self:spawn_n_enemies(p, 1) end)
self.t:after(1.125, function() self:spawn_n_enemies(p, 1) end)
end)
self.t:after({0, 0.2}, function()
local p = random:table_remove(spawn_points)
SpawnMarker{group = self.effects, x = p.x, y = p.y}
self.t:after(0.75, function() self:spawn_n_enemies(p, 2) end)
self.t:after(1.125, function() self:spawn_n_enemies(p, 2) end)
end)
self.t:after(1.5, function() self.spawning_enemies = false end, 'spawning_enemies')
self.t:after(2.25, function() self.spawning_enemies = false end, 'spawning_enemies')
elseif spawn_type == '3x4' then
self.t:after({0, 0.2}, function()
local p = random:table_remove(spawn_points)
SpawnMarker{group = self.effects, x = p.x, y = p.y}
self.t:after(0.75, function() self:spawn_n_enemies(p, 1) end)
self.t:after(1.125, function() self:spawn_n_enemies(p, 1) end)
end)
self.t:after({0, 0.2}, function()
local p = random:table_remove(spawn_points)
SpawnMarker{group = self.effects, x = p.x, y = p.y}
self.t:after(0.75, function() self:spawn_n_enemies(p, 2) end)
self.t:after(1.125, function() self:spawn_n_enemies(p, 2) end)
end)
self.t:after({0, 0.2}, function()
local p = random:table_remove(spawn_points)
SpawnMarker{group = self.effects, x = p.x, y = p.y}
self.t:after(0.75, function() self:spawn_n_enemies(p, 3) end)
self.t:after(1.125, function() self:spawn_n_enemies(p, 3) end)
end)
self.t:after(1.5, function() self.spawning_enemies = false end, 'spawning_enemies')
self.t:after(2.25, function() self.spawning_enemies = false end, 'spawning_enemies')
elseif spawn_type == '4x2' then
self.t:after({0, 0.2}, function()
local p = random:table_remove(spawn_points)
SpawnMarker{group = self.effects, x = p.x, y = p.y}
self.t:after(0.75, function() self:spawn_n_enemies(p, 1, 2) end)
self.t:after(1.125, function() self:spawn_n_enemies(p, 1, 2) end)
end)
self.t:after({0, 0.2}, function()
local p = random:table_remove(spawn_points)
SpawnMarker{group = self.effects, x = p.x, y = p.y}
self.t:after(0.75, function() self:spawn_n_enemies(p, 2, 2) end)
self.t:after(1.125, function() self:spawn_n_enemies(p, 2, 2) end)
end)
self.t:after({0, 0.2}, function()
local p = random:table_remove(spawn_points)
SpawnMarker{group = self.effects, x = p.x, y = p.y}
self.t:after(0.75, function() self:spawn_n_enemies(p, 3, 2) end)
self.t:after(1.125, function() self:spawn_n_enemies(p, 3, 2) end)
end)
self.t:after({0, 0.2}, function()
local p = random:table_remove(spawn_points)
SpawnMarker{group = self.effects, x = p.x, y = p.y}
self.t:after(0.75, function() self:spawn_n_enemies(p, 4, 2) end)
self.t:after(1.125, function() self:spawn_n_enemies(p, 4, 2) end)
end)
self.t:after(1.5, function() self.spawning_enemies = false end, 'spawning_enemies')
self.t:after(2.25, function() self.spawning_enemies = false end, 'spawning_enemies')
end
end

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@ -67,7 +67,7 @@ function BuyScreen:on_enter(from, level, units, passives, shop_level, shop_xp)
self:set_items()
self.shop_text = Text({{text = '[wavy_mid, fg]shop [fg]- gold: [yellow]' .. gold, font = pixul_font, alignment = 'center'}}, global_text_tags)
self.party_text = Text({{text = '[wavy_mid, fg]party', font = pixul_font, alignment = 'center'}}, global_text_tags)
self.party_text = Text({{text = '[wavy_mid, fg]party ' .. tostring(#units) .. '/' .. tostring(max_units), font = pixul_font, alignment = 'center'}}, global_text_tags)
self.sets_text = Text({{text = '[wavy_mid, fg]classes', font = pixul_font, alignment = 'center'}}, global_text_tags)
self.items_text = Text({{text = '[wavy_mid, fg]items', font = pixul_font, alignment = 'center'}}, global_text_tags)
self.ng_text = Text({{text = '[fg]NG+' .. current_new_game_plus, font = pixul_font, alignment = 'center'}}, global_text_tags)
@ -81,7 +81,7 @@ function BuyScreen:on_enter(from, level, units, passives, shop_level, shop_xp)
RerollButton{group = self.main, x = 150, y = 18, parent = self}
GoButton{group = self.main, x = gw - 90, y = gh - 20, parent = self}
LevelButton{group = self.main, x = gw/2, y = 18, parent = self}
self.tutorial_button = Button{group = self.main, x = gw/2 + 134, y = 18, button_text = '?', fg_color = 'bg10', bg_color = 'bg', action = function()
self.tutorial_button = Button{group = self.main, x = gw/2 + 129, y = 18, button_text = '?', fg_color = 'bg10', bg_color = 'bg', action = function()
self.in_tutorial = true
self.title_text = Text2{group = self.tutorial, x = gw/2, y = 35, lines = {{text = '[fg]WELCOME TO SNKRX!', font = fat_font, alignment = 'center'}}}
self.tutorial_text = Text2{group = self.tutorial, x = 228, y = 160, lines = {
@ -128,7 +128,7 @@ function BuyScreen:on_enter(from, level, units, passives, shop_level, shop_xp)
b.info_text = nil
end}
self.restart_button = Button{group = self.ui, x = gw/2 + 156, y = 18, force_update = true, button_text = 'R', fg_color = 'bg10', bg_color = 'bg', action = function(b)
self.restart_button = Button{group = self.ui, x = gw/2 + 148, y = 18, force_update = true, button_text = 'R', fg_color = 'bg10', bg_color = 'bg', action = function(b)
self.transitioning = true
ui_transition2:play{pitch = random:float(0.95, 1.05), volume = 0.5}
ui_switch2:play{pitch = random:float(0.95, 1.05), volume = 0.5}
@ -933,7 +933,7 @@ function RerollButton:init(args)
self.free_reroll = true
self.text = Text({{text = '[bg10]reroll: [yellow]0', font = pixul_font, alignment = 'center'}}, global_text_tags)
else
self.text = Text({{text = '[bg10]reroll: [yellow]8', font = pixul_font, alignment = 'center'}}, global_text_tags)
self.text = Text({{text = '[bg10]reroll: [yellow]5', font = pixul_font, alignment = 'center'}}, global_text_tags)
end
end
end
@ -966,7 +966,7 @@ function RerollButton:update(dt)
system.save_run(self.parent.level, gold, self.parent.units, self.parent.passives, self.parent.shop_level, self.parent.shop_xp, run_passive_pool, locked_state)
end
elseif self.parent:is(Arena) then
if gold < 8 and not self.free_reroll then
if gold < 5 and not self.free_reroll then
self.spring:pull(0.2, 200, 10)
self.selected = true
error1:play{pitch = random:float(0.95, 1.05), volume = 0.5}
@ -983,10 +983,10 @@ function RerollButton:update(dt)
self.parent:set_passives(true)
self.selected = true
self.spring:pull(0.2, 200, 10)
if not self.free_reroll then gold = gold - 8 end
if not self.free_reroll then gold = gold - 5 end
self.parent.shop_text:set_text{{text = '[fg, nudge_down]gold: [yellow, nudge_down]' .. gold, font = pixul_font, alignment = 'center'}}
self.free_reroll = false
self.text = Text({{text = '[bg10]reroll: [yellow]8', font = pixul_font, alignment = 'center'}}, global_text_tags)
self.text = Text({{text = '[bg10]reroll: [yellow]5', font = pixul_font, alignment = 'center'}}, global_text_tags)
end
end
end
@ -1015,7 +1015,7 @@ function RerollButton:on_mouse_enter()
if self.free_reroll then
self.text:set_text{{text = '[fgm5]reroll: 0', font = pixul_font, alignment = 'center'}}
else
self.text:set_text{{text = '[fgm5]reroll: 8', font = pixul_font, alignment = 'center'}}
self.text:set_text{{text = '[fgm5]reroll: 5', font = pixul_font, alignment = 'center'}}
end
end
self.spring:pull(0.2, 200, 10)
@ -1029,7 +1029,7 @@ function RerollButton:on_mouse_exit()
if self.free_reroll then
self.text:set_text{{text = '[fgm5]reroll: [yellow]0', font = pixul_font, alignment = 'center'}}
else
self.text:set_text{{text = '[fgm5]reroll: [yellow]8', font = pixul_font, alignment = 'center'}}
self.text:set_text{{text = '[fgm5]reroll: [yellow]5', font = pixul_font, alignment = 'center'}}
end
end
self.selected = false
@ -1696,7 +1696,10 @@ function CharacterIcon:on_mouse_enter()
self.info_text:activate({
{text = '[' .. character_color_strings[self.character] .. ']' .. self.character:capitalize() .. '[fg] - cost: [yellow]' .. self.parent.cost, font = pixul_font, alignment = 'center', height_multiplier = 1.25},
{text = '[fg]Classes: ' .. character_class_strings[self.character], font = pixul_font, alignment = 'center', height_multiplier = 1.25},
{text = character_descriptions[self.character](1), font = pixul_font, alignment = 'center'},
{text = character_descriptions[self.character](1), font = pixul_font, alignment = 'center', height_multiplier = 2},
{text = '[' .. (self.level == 3 and 'yellow' or 'light_bg') .. ']Lv.3 [' .. (self.level == 3 and 'fg' or 'light_bg') .. ']Effect - ' ..
(self.level == 3 and character_effect_names[self.character] or character_effect_names_gray[self.character]), font = pixul_font, alignment = 'center', height_multiplier = 1.25},
{text = (self.level == 3 and character_effect_descriptions[self.character]() or character_effect_descriptions_gray[self.character]()), font = pixul_font, alignment = 'center'},
-- {text = character_stats[self.character](1), font = pixul_font, alignment = 'center'},
}, nil, nil, nil, nil, 16, 4, nil, 2)
self.info_text.x, self.info_text.y = gw/2, gh/2 + 10

View File

@ -16,7 +16,7 @@ function Seeker:init(args)
if self.boss == 'speed_booster' then
self.color = green[0]:clone()
self.t:every(8, function()
if self.silenced then return end
if self.silenced or self.barbarian_stunned then return end
local enemies = table.head(self:get_objects_in_shape(Circle(self.x, self.y, 128), main.current.enemies), 4)
if #enemies > 0 then
buff1:play{pitch = random:float(0.95, 1.05), volume = 0.5}
@ -31,7 +31,7 @@ function Seeker:init(args)
elseif self.boss == 'forcer' then
self.color = yellow[0]:clone()
self.t:every(6, function()
if self.silenced then return end
if self.silenced or self.barbarian_stunned then return end
local enemies = main.current.main:get_objects_by_classes(main.current.enemies)
local x, y = 0, 0
if #enemies > 0 then
@ -78,7 +78,7 @@ function Seeker:init(args)
elseif self.boss == 'swarmer' then
self.color = purple[0]:clone()
self.t:every(4, function()
if self.silenced then return end
if self.silenced or self.barbarian_stunned then return end
local enemies = table.select(main.current.main:get_objects_by_classes(main.current.enemies), function(v) return v.id ~= self.id and v:is(Seeker) end)
local enemy = random:table(enemies)
if enemy then
@ -94,23 +94,22 @@ function Seeker:init(args)
elseif self.boss == 'exploder' then
self.color = blue[0]:clone()
self.t:every(4, function()
if self.silenced then return end
if self.silenced or self.barbarian_stunned then return end
local enemies = table.select(main.current.main:get_objects_by_classes(main.current.enemies), function(v) return v.id ~= self.id and v:is(Seeker) end)
local enemy = random:table(enemies)
if enemy then
HitCircle{group = main.current.effects, x = self.x, y = self.y, rs = 6, color = blue[0], duration = 0.1}
LightningLine{group = main.current.effects, src = self, dst = enemy, color = blue[0]}
enemy:hit(10000)
shoot1:play{pitch = random:float(0.95, 1.05), volume = 0.4}
local n = math.floor(8 + current_new_game_plus*1.5)
for i = 1, n do EnemyProjectile{group = main.current.main, x = enemy.x, y = enemy.y, color = blue[0], r = (i-1)*math.pi/(n/2), v = 120 + 5*enemy.level, dmg = (1 + 0.1*current_new_game_plus)*enemy.dmg} end
mine1:play{pitch = random:float(0.95, 1.05), volume = 0.5}
ExploderMine{group = main.current.main, x = enemy.x, y = enemy.y, color = blue[0], parent = enemy}
end
end)
elseif self.boss == 'randomizer' then
self.t:every_immediate(0.07, function() self.color = _G[random:table{'green', 'purple', 'yellow', 'blue'}][0]:clone() end)
self.t:every(6, function()
if self.silenced then return end
if self.silenced or self.barbarian_stunned then return end
local attack = random:table{'explode', 'swarm', 'force', 'speed_boost'}
if attack == 'explode' then
local enemies = self:get_objects_in_shape(Circle(self.x, self.y, 128), {Seeker})
@ -121,7 +120,7 @@ function Seeker:init(args)
enemy:hit(10000)
shoot1:play{pitch = random:float(0.95, 1.05), volume = 0.4}
local n = 8 + current_new_game_plus*2
for i = 1, n do EnemyProjectile{group = main.current.main, x = enemy.x, y = enemy.y, color = blue[0], r = (i-1)*math.pi/(n/2), v = 125 + 5*enemy.level, dmg = (1 + 0.2*current_new_game_plus)*enemy.dmg} end
for i = 1, n do EnemyProjectile{group = main.current.main, x = enemy.x, y = enemy.y, color = blue[0], r = (i-1)*math.pi/(n/2), v = 125 + 5*enemy.level, dmg = (1 + 0.15*current_new_game_plus)*enemy.dmg} end
end
elseif attack == 'swarm' then
local enemies = self:get_objects_in_shape(Circle(self.x, self.y, 128), {Seeker})
@ -189,7 +188,7 @@ function Seeker:init(args)
self.last_headbutt_time = 0
local n = math.remap(current_new_game_plus, 0, 5, 1, 0.5)
self.t:every(function() return math.distance(self.x, self.y, main.current.player.x, main.current.player.y) < 76 and love.timer.getTime() - self.last_headbutt_time > 10*n end, function()
if self.silenced then return end
if self.silenced or self.barbarian_stunned then return end
if self.headbutt_charging or self.headbutting then return end
self.headbutt_charging = true
self.t:tween(2, self.color, {r = fg[0].r, b = fg[0].b, g = fg[0].g}, math.cubic_in_out, function()
@ -212,12 +211,12 @@ function Seeker:init(args)
self.hp = self.max_hp
local n = math.remap(current_new_game_plus, 0, 5, 1, 0.75)
self.t:every({3*n, 5*n}, function()
local enemy = self:get_closest_object_in_shape(Circle(self.x, self.y, 128), main.current.enemies)
local enemy = self:get_closest_object_in_shape(Circle(self.x, self.y, 64), main.current.enemies)
if enemy then
wizard1:play{pitch = random:float(0.95, 1.05), volume = 0.5}
HitCircle{group = main.current.effects, x = self.x, y = self.y, rs = 6, color = yellow[0], duration = 0.1}
LightningLine{group = main.current.effects, src = self, dst = enemy, color = yellow[0]}
enemy:push(random:float(40, 80), enemy:angle_to_object(main.current.player), true)
enemy:push(random:float(30, 50), enemy:angle_to_object(main.current.player), true)
end
end)
elseif self.shooter then
@ -226,7 +225,7 @@ function Seeker:init(args)
self.t:after({2*n, 4*n}, function()
self.shooting = true
self.t:every({4, 6}, function()
if self.silenced then return end
if self.silenced or self.barbarian_stunned then return end
for i = 1, 3 do
self.t:after((1 - self.level*0.01)*0.15*(i-1), function()
shoot1:play{pitch = random:float(0.95, 1.05), volume = 0.1}
@ -234,7 +233,7 @@ function Seeker:init(args)
local r = self.r
HitCircle{group = main.current.effects, x = self.x + 0.8*self.shape.w*math.cos(r), y = self.y + 0.8*self.shape.w*math.sin(r), rs = 6}
EnemyProjectile{group = main.current.main, x = self.x + 1.6*self.shape.w*math.cos(r), y = self.y + 1.6*self.shape.w*math.sin(r), color = fg[0], r = r, v = 140 + 3.5*self.level + 2*current_new_game_plus,
dmg = (current_new_game_plus*0.1 + 1)*self.dmg, source = 'shooter'}
dmg = (current_new_game_plus*0.05 + 1)*self.dmg, source = 'shooter'}
end)
end
end, nil, nil, 'shooter')
@ -498,7 +497,7 @@ function Seeker:hit(damage, projectile, dot)
end
if self.speed_booster then
if self.silenced then return end
if self.silenced or self.barbarian_stunned then return end
local enemies = self:get_objects_in_shape(self.area_sensor, main.current.enemies)
if #enemies > 0 then
buff1:play{pitch = random:float(0.95, 1.05), volume = 0.5}
@ -511,7 +510,7 @@ function Seeker:hit(damage, projectile, dot)
end
if self.exploder then
if self.silenced then return end
if self.silenced or self.barbarian_stunned then return end
mine1:play{pitch = random:float(0.95, 1.05), volume = 0.5}
trigger:after(0.01, function()
ExploderMine{group = main.current.main, x = self.x, y = self.y, color = blue[0], parent = self}
@ -519,7 +518,7 @@ function Seeker:hit(damage, projectile, dot)
end
if self.spawner then
if self.silenced then return end
if self.silenced or self.barbarian_stunned then return end
critter1:play{pitch = random:float(0.95, 1.05), volume = 0.35}
trigger:after(0.01, function()
for i = 1, random:int(5, 8) do
@ -609,11 +608,6 @@ end
function Seeker:curse(curse, duration, arg1, arg2, arg3)
local curse_m = 1
if main.current.curser_level == 2 then curse_m = 1.5
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
@ -633,7 +627,7 @@ function Seeker:curse(curse, duration, arg1, arg2, arg3)
buff1:play{pitch = random:float(0.65, 0.75), volume = 0.25}
if curse == 'launcher' then
self.t:after(duration*curse_m, function()
self.t:after(duration, function()
self.launcher_push = arg1
self.launcher = arg2
self:push(random:float(50, 75)*self.launcher.knockback_m, random:table{0, math.pi, math.pi/2, -math.pi/2})
@ -642,20 +636,20 @@ function Seeker:curse(curse, duration, arg1, arg2, arg3)
self.jester_cursed = true
self.jester_lvl3 = arg1
self.jester_ref = arg2
self.t:after(duration*curse_m, function() self.jester_cursed = false end, 'jester_curse')
self.t:after(duration, function() self.jester_cursed = false end, 'jester_curse')
elseif curse == 'bane' then
self.bane_cursed = true
self.bane_lvl3 = arg1
self.bane_ref = arg2
self.t:after(duration*curse_m, function() self.bane_cursed = false end, 'bane_curse')
self.t:after(duration, function() self.bane_cursed = false end, 'bane_curse')
elseif curse == 'infestor' then
self.infested = arg1
self.infested_dmg = arg2
self.infested_ref = arg3
self.t:after(duration*curse_m, function() self.infested = false end, 'infestor_curse')
self.t:after(duration, function() self.infested = false end, 'infestor_curse')
elseif curse == 'silencer' then
self.silenced = true
self.t:after(duration*curse_m, function() self.silenced = false end, 'silencer_curse')
self.t:after(duration, function() self.silenced = false end, 'silencer_curse')
elseif curse == 'usurer' then
if arg1 then
self.usurer_count = self.usurer_count + 1
@ -703,13 +697,11 @@ function ExploderMine:init(args)
HitCircle{group = main.current.effects, x = self.x, y = self.y}
local n = math.floor(8 + current_new_game_plus*1.5)
for i = 1, n do
EnemyProjectile{group = main.current.main, x = self.x, y = self.y, color = blue[0], r = (i-1)*math.pi/(n/2), v = 120 + 5*self.parent.level, dmg = 1.5*self.parent.dmg}
EnemyProjectile{group = main.current.main, x = self.x, y = self.y, color = blue[0], r = (i-1)*math.pi/(n/2), v = 120 + 5*self.parent.level, dmg = 1.3*self.parent.dmg}
end
self.dead = true
end, 'mine_count')
end)
--[[
]]--
end
@ -856,11 +848,6 @@ end
function EnemyCritter:curse(curse, duration, arg1, arg2, arg3)
local curse_m = 1
if main.current.curser_level == 2 then curse_m = 1.5
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
@ -873,7 +860,7 @@ function EnemyCritter:curse(curse, duration, arg1, arg2, arg3)
end
if curse == 'launcher' then
self.t:after(duration*curse_m, function()
self.t:after(duration, function()
self.launcher_push = arg1
self.launcher = arg2
self:push(random:float(50, 75)*self.launcher.knockback_m, random:table{0, math.pi, math.pi/2, -math.pi/2})
@ -882,20 +869,20 @@ function EnemyCritter:curse(curse, duration, arg1, arg2, arg3)
self.jester_cursed = true
self.jester_lvl3 = arg1
self.jester_ref = arg2
self.t:after(duration*curse_m, function() self.jester_cursed = false end, 'jester_curse')
self.t:after(duration, function() self.jester_cursed = false end, 'jester_curse')
elseif curse == 'bane' then
self.bane_cursed = true
self.bane_lvl3 = arg1
self.bane_ref = arg2
self.t:after(duration*curse_m, function() self.bane_cursed = false end, 'bane_curse')
self.t:after(duration, function() self.bane_cursed = false end, 'bane_curse')
elseif curse == 'infestor' then
self.infested = arg1
self.infested_dmg = arg2
self.infested_ref = arg3
self.t:after(duration*curse_m, function() self.infested = false end, 'infestor_curse')
self.t:after(duration, function() self.infested = false end, 'infestor_curse')
elseif curse == 'silencer' then
self.silenced = true
self.t:after(duration*curse_m, function() self.silenced = false end, 'silencer_curse')
self.t:after(duration, function() self.silenced = false end, 'silencer_curse')
elseif curse == 'usurer' then
if arg1 then
self.usurer_count = self.usurer_count + 1

View File

@ -943,7 +943,7 @@ function init()
['nuker'] = function(lvl) return '[' .. ylb1(lvl) .. ']3[light_bg]/[' .. ylb2(lvl) .. ']6 [fg]- [' .. ylb1(lvl) .. ']+15%[light_bg]/[' .. ylb2(lvl) .. ']+25% [fg]area damage and size to allied nukers' end,
['conjurer'] = function(lvl) return '[' .. ylb1(lvl) .. ']2[light_bg]/[' .. ylb2(lvl) .. ']4 [fg]- [' .. ylb1(lvl) .. ']+25%[light_bg]/[' .. ylb2(lvl) .. ']+50% [fg]summon damage and duration' end,
['psyker'] = function(lvl) return '[fg]create a piercing, damaging orb around each psyker' end,
['curser'] = function(lvl) return '[' .. ylb1(lvl) .. ']2[light_bg]/[' .. ylb2(lvl) .. ']4 [fg]- [' .. ylb1(lvl) .. ']+25%[light_bg]/[' .. ylb2(lvl) .. ']+50% [fg]curse duration' end,
['curser'] = function(lvl) return '[' .. ylb1(lvl) .. ']2[light_bg]/[' .. ylb2(lvl) .. ']4 [fg]- [' .. ylb1(lvl) .. ']+1[light_bg]/[' .. ylb2(lvl) .. ']+3 [fg]max curse targets to allied cursers' end,
['forcer'] = function(lvl) return '[' .. ylb1(lvl) .. ']2[light_bg]/[' .. ylb2(lvl) .. ']4 [fg]- [' .. ylb1(lvl) .. ']+25%[light_bg]/[' .. ylb2(lvl) .. ']+50% [fg]knockback force to all allies' end,
['swarmer'] = function(lvl) return '[' .. ylb1(lvl) .. ']2[light_bg]/[' .. ylb2(lvl) .. ']4 [fg]- [' .. ylb1(lvl) .. ']+1[light_bg]/[' .. ylb2(lvl) .. ']+3 [fg]hits to critters' end,
['voider'] = function(lvl) return '[' .. ylb1(lvl) .. ']2[light_bg]/[' .. ylb2(lvl) .. ']4 [fg]- [' .. ylb1(lvl) .. ']+20%[light_bg]/[' .. ylb2(lvl) .. ']+40% [fg]damage over time to allied voiders' end,
@ -1246,13 +1246,13 @@ function init()
['magnify'] = '[yellow]+20/35/50%[fg] area size',
['echo_barrage'] = '[yellow]10/20/30%[fg] chance to create [yellow]1/2/3[fg] secondary AoEs on AoE hit',
['unleash'] = '[fg]all nukers gain [yellow]+1%[fg] area size and damage every second',
['reinforce'] = '[yellow]+10/20/30%[fg] damage, defense and aspd to all allies if you have >=1 enchanter',
['reinforce'] = '[yellow]+10/20/30%[fg] global damage, defense and aspd if you have one or more enchanters',
['payback'] = '[yellow]+2/5/8%[fg] damage to all allies whenever an enchanter is hit',
['enchanted'] = '[yellow]+33/66/99%[fg] attack speed to a random unit if you have >=2 enchanters',
['enchanted'] = '[yellow]+33/66/99%[fg] attack speed to a random unit if you have two or more enchanters',
['freezing_field'] = '[fg]creates an area that slows enemies by [yellow]50%[fg] for [yellow]2[fg] seconds on sorcerer spell repeat',
['burning_field'] = '[fg]creates an area that deals [yellow]30[fg] dps for [yellow]2[fg] seconds on sorcerer spell repeat',
['gravity_field'] = '[fg]creates an area that pulls enemies in for [yellow]1[fg] seconds on sorcerer spell repeat',
['magnetism'] = '[fg]gold coins are attracted to the snake',
['magnetism'] = '[fg]gold coins and healing orbs are attracted to the snake',
['insurance'] = "[fg]heroes have [yellow]4[fg] times the chance of mercenary's bonus to drop [yellow]2[fg] gold on death",
['dividends'] = '[fg]mercenaries deal [yellow]+X%[fg] damage, where X is how much gold you have',
['berserking'] = '[fg]all warriors have up to [yellow]+50/75/100%[fg] attack speed based on missing HP',
@ -1265,7 +1265,7 @@ function init()
['psyker_orbs'] = '[yellow]+1/2/3[fg] psyker orbs',
['psychosense'] = '[yellow]+33/66/99%[fg] orb range',
['rearm'] = '[fg]summons repeat their attacks once',
['taunt'] = '[yellow]10/20/30% chance for summons to taunt nearby enemies on attack',
['taunt'] = '[yellow]10/20/30%[fg] chance for summons to taunt nearby enemies on attack',
['summon_instability'] = '[fg]summons explode when disappearing, dealing [yellow]100/150/200%[fg] damage',
}
@ -1313,13 +1313,13 @@ function init()
['magnify'] = function(lvl) return ts(lvl, '+20%', '35%', '50%') .. ' area size' end,
['echo_barrage'] = function(lvl) return ts(lvl, '10%', '20%', '30%') .. ' chance to create ' .. ts(lvl, '1', '2', '3') .. ' secondary AoEs on AoE hit' end,
['unleash'] = function(lvl) return '[fg]all nukers gain [yellow]+1%[fg] area size and damage every second' end,
['reinforce'] = function(lvl) return ts(lvl, '+10%', '20%', '30%') .. ' damage, defense and aspd to all allies if you have >=1 enchanter' end,
['reinforce'] = function(lvl) return ts(lvl, '+10%', '20%', '30%') .. ' global damage, defense and aspd if you have one or more enchanters' end,
['payback'] = function(lvl) return ts(lvl, '+2%', '5%', '8%') .. ' damage to all allies whenever an enchanter is hit' end,
['enchanted'] = function(lvl) return ts(lvl, '+33%', '66%', '99%') .. ' attack speed to a random unit if you have >=2 enchanters' end,
['enchanted'] = function(lvl) return ts(lvl, '+33%', '66%', '99%') .. ' attack speed to a random unit if you have two or more enchanters' end,
['freezing_field'] = function(lvl) return '[fg]creates an area that slows enemies by [yellow]50%[fg] for [yellow]2[fg] seconds on sorcerer spell repeat' end,
['burning_field'] = function(lvl) return '[fg]creates an area that deals [yellow]30[fg] dps for [yellow]2[fg] seconds on sorcerer spell repeat' end,
['gravity_field'] = function(lvl) return '[fg]creates an area that pulls enemies in for [yellow]1[fg] seconds on sorcerer spell repeat' end,
['magnetism'] = function(lvl) return '[fg]gold coins are attracted to the snake' end,
['magnetism'] = function(lvl) return '[fg]gold coins and healing orbs are attracted to the snake' end,
['insurance'] = function(lvl) return "[fg]heroes have [yellow]4[fg] times the chance of mercenary's bonus to drop [yellow]2[fg] gold on death" end,
['dividends'] = function(lvl) return '[fg]mercenaries deal [yellow]+X%[fg] damage, where X is how much gold you have' end,
['berserking'] = function(lvl) return '[fg]all warriors have up to ' .. ts(lvl, '+50%', '75%', '100%') .. ' attack speed based on missing HP' end,
@ -1365,15 +1365,15 @@ function init()
}
level_to_gold_gained = {
[1] = {2, 2},
[2] = {2, 2},
[3] = {4, 6},
[4] = {3, 5},
[5] = {4, 7},
[6] = {6, 10},
[1] = {3, 3},
[2] = {3, 3},
[3] = {5, 6},
[4] = {4, 5},
[5] = {5, 8},
[6] = {8, 10},
[7] = {8, 10},
[8] = {10, 12},
[9] = {12, 15},
[8] = {12, 14},
[9] = {14, 18},
[10] = {10, 13},
[11] = {12, 15},
[12] = {18, 20},
@ -1412,11 +1412,11 @@ function init()
[17] = {6, 5, 4, 3},
[18] = {18},
[19] = {10, 6},
[20] = {10, 6, 2},
[21] = {28},
[22] = {10, 10, 5},
[20] = {8, 6, 2},
[21] = {22},
[22] = {10, 8, 4},
[23] = {20, 5, 5},
[24] = {35},
[24] = {30},
[25] = {5, 5, 5, 5, 5, 5},
}

View File

@ -14,7 +14,7 @@ function Media:on_enter(from)
graphics.set_background_color(blue[0])
Text2{group = self.ui, x = gw/2, y = gh/2, lines = {
{text = '[fg]SNKRX', font = fat_font, alignment = 'center', height_offset = -15},
{text = '[fg]item update', font = pixul_font, alignment = 'center'},
{text = '[fg]orb update', font = pixul_font, alignment = 'center'},
}}
end

View File

@ -5,11 +5,11 @@ function SpawnMarker:init(args)
self.color = red[0]
self.r = random:float(0, 2*math.pi)
self.spring:pull(random:float(0.4, 0.6), 200, 10)
self.t:after(0.75, function() self.dead = true end)
self.t:after(1.125, function() self.dead = true end)
self.m = 1
self.n = 0
pop3:play{pitch = 1, volume = 0.15}
self.t:every({0.13, 0.16}, function()
self.t:every({0.195, 0.24}, function()
self.hidden = not self.hidden
self.m = self.m*random:float(0.84, 0.87)
end, nil, nil, 'blink')
@ -262,7 +262,7 @@ function Unit:calculate_stats(first_run)
local x = self.level
local y = {0, 1, 3, 3, 4, 6, 5, 6, 9, 7, 8, 12, 10, 11, 15, 12, 13, 18, 16, 17, 21, 17, 20, 24, 25}
self.base_hp = 22 + (current_new_game_plus*3) + (15 + current_new_game_plus*2.7)*y[x]
self.base_dmg = (4 + current_new_game_plus*1.15) + (2 + current_new_game_plus*1)*y[x]
self.base_dmg = (4 + current_new_game_plus*1.15) + (2 + current_new_game_plus*0.83)*y[x]
self.base_mvspd = 70 + 3*y[x]
end
end

View File

@ -59,7 +59,7 @@ function Player:init(args)
local cast = function(pitch_a)
local enemy = table.shuffle(main.current.main:get_objects_by_classes(main.current.enemies))[1]
if enemy then
gambler1:play{pitch = pitch_a, volume = math.remap(gold, 0, 50, 0, 0.8)}
gambler1:play{pitch = pitch_a, volume = math.remap(gold, 0, 50, 0, 0.5)}
enemy:hit(2*gold)
if main.current.sorcerer_level > 0 then
self.sorcerer_count = self.sorcerer_count + 1
@ -69,7 +69,7 @@ function Player:init(args)
self.t:after(0.25, function()
local enemy = table.shuffle(main.current.main:get_objects_by_classes(main.current.enemies))[1]
if enemy then
gambler1:play{pitch = pitch_a + 0.05, volume = math.remap(gold, 0, 50, 0, 0.8)}
gambler1:play{pitch = pitch_a + 0.05, volume = math.remap(gold, 0, 50, 0, 0.5)}
enemy:hit(2*gold)
end
end)
@ -536,7 +536,8 @@ function Player:init(args)
self.wide_attack_sensor = Circle(self.x, self.y, 128)
self.t:cooldown(6, function() local enemies = self:get_objects_in_shape(self.attack_sensor, main.current.enemies); return enemies and #enemies > 0 end, function()
buff1:play{pitch = random:float(0.9, 1.1), volume = 0.5}
local enemies = table.first2(table.shuffle(self:get_objects_in_shape(self.wide_attack_sensor, main.current.enemies)), 6 + ((self.malediction == 1 and 1) or (self.malediction == 2 and 3) or (self.malediction == 3 and 5) or 0))
local enemies = table.first2(table.shuffle(self:get_objects_in_shape(self.wide_attack_sensor, main.current.enemies)),
6 + ((self.malediction == 1 and 1) or (self.malediction == 2 and 3) or (self.malediction == 3 and 5) or 0) + ((main.current.curser_level == 2 and 3) or (main.current.curser_level == 1 and 1) or 0))
for _, enemy in ipairs(enemies) do
if self:distance_to_object(enemy) < 128 then
enemy:curse('jester', 6*(self.hex_duration_m or 1), self.level == 3, self)
@ -551,7 +552,8 @@ function Player:init(args)
self.wide_attack_sensor = Circle(self.x, self.y, 128)
self.t:cooldown(6, function() local enemies = self:get_objects_in_shape(self.attack_sensor, main.current.enemies); return enemies and #enemies > 0 end, function()
buff1:play{pitch = random:float(0.9, 1.1), volume = 0.5}
local enemies = table.first2(table.shuffle(self:get_objects_in_shape(self.wide_attack_sensor, main.current.enemies)), 3 + ((self.malediction == 1 and 1) or (self.malediction == 2 and 3) or (self.malediction == 3 and 5) or 0))
local enemies = table.first2(table.shuffle(self:get_objects_in_shape(self.wide_attack_sensor, main.current.enemies)),
3 + ((self.malediction == 1 and 1) or (self.malediction == 2 and 3) or (self.malediction == 3 and 5) or 0) + ((main.current.curser_level == 2 and 3) or (main.current.curser_level == 1 and 1) or 0))
for _, enemy in ipairs(enemies) do
enemy:curse('usurer', 10000, self.level == 3, self)
enemy:apply_dot(self.dmg*(self.dot_dmg_m or 1)*(main.current.chronomancer_dot or 1), 10000)
@ -567,15 +569,12 @@ function Player:init(args)
self.t:cooldown(6, function() local enemies = self:get_objects_in_shape(self.attack_sensor, main.current.enemies); return enemies and #enemies > 0 end, function()
local curse = function()
buff1:play{pitch = random:float(0.9, 1.1), volume = 0.5}
local enemies = table.first2(table.shuffle(self:get_objects_in_shape(self.wide_attack_sensor, main.current.enemies)), 6 + ((self.malediction == 1 and 1) or (self.malediction == 2 and 3) or (self.malediction == 3 and 5) or 0))
local enemies = table.first2(table.shuffle(self:get_objects_in_shape(self.wide_attack_sensor, main.current.enemies)),
6 + ((self.malediction == 1 and 1) or (self.malediction == 2 and 3) or (self.malediction == 3 and 5) or 0) + ((main.current.curser_level == 2 and 3) or (main.current.curser_level == 1 and 1) or 0))
for _, enemy in ipairs(enemies) do
enemy:curse('silencer', 6*(self.hex_duration_m or 1), self.level == 3, self)
if self.level == 3 then
local curse_m = 1
if main.current.curser_level == 2 then curse_m = 1.5
elseif main.current.curser_level == 1 then curse_m = 1.25
else curse_m = 1 end
enemy:apply_dot(self.dmg*(self.dot_dmg_m or 1)*(main.current.chronomancer_dot or 1), 6*(self.hex_duration_m or 1)*(curse_m or 1))
enemy:apply_dot(self.dmg*(self.dot_dmg_m or 1)*(main.current.chronomancer_dot or 1), 6*(self.hex_duration_m or 1))
end
HitCircle{group = main.current.effects, x = self.x, y = self.y, rs = 6, color = blue2[0], duration = 0.1}
LightningLine{group = main.current.effects, src = self, dst = enemy, color = blue2[0]}
@ -628,7 +627,8 @@ function Player:init(args)
self.wide_attack_sensor = Circle(self.x, self.y, 128)
self.t:cooldown(6, function() local enemies = self:get_objects_in_shape(self.attack_sensor, main.current.enemies); return enemies and #enemies > 0 end, function()
buff1:play{pitch = random:float(0.9, 1.1), volume = 0.5}
local enemies = table.first2(table.shuffle(self:get_objects_in_shape(self.wide_attack_sensor, main.current.enemies)), 6 + ((self.malediction == 1 and 1) or (self.malediction == 2 and 3) or (self.malediction == 3 and 5) or 0))
local enemies = table.first2(table.shuffle(self:get_objects_in_shape(self.wide_attack_sensor, main.current.enemies)),
6 + ((self.malediction == 1 and 1) or (self.malediction == 2 and 3) or (self.malediction == 3 and 5) or 0) + ((main.current.curser_level == 2 and 3) or (main.current.curser_level == 1 and 1) or 0))
for _, enemy in ipairs(enemies) do
enemy:curse('bane', 6*(self.hex_duration_m or 1), self.level == 3, self)
HitCircle{group = main.current.effects, x = self.x, y = self.y, rs = 6, color = purple[0], duration = 0.1}
@ -828,7 +828,8 @@ function Player:init(args)
self.wide_attack_sensor = Circle(self.x, self.y, 128)
self.t:cooldown(6, function() local enemies = self:get_objects_in_shape(self.attack_sensor, main.current.enemies); return enemies and #enemies > 0 end, function()
buff1:play{pitch = random:float(0.9, 1.1), volume = 0.5}
local enemies = table.first2(table.shuffle(self:get_objects_in_shape(self.wide_attack_sensor, main.current.enemies)), 8 + ((self.malediction == 1 and 1) or (self.malediction == 2 and 3) or (self.malediction == 3 and 5) or 0))
local enemies = table.first2(table.shuffle(self:get_objects_in_shape(self.wide_attack_sensor, main.current.enemies)),
8 + ((self.malediction == 1 and 1) or (self.malediction == 2 and 3) or (self.malediction == 3 and 5) or 0) + ((main.current.curser_level == 2 and 3) or (main.current.curser_level == 1 and 1) or 0))
for _, enemy in ipairs(enemies) do
enemy:curse('infestor', 6*(self.hex_duration_m or 1), (self.level == 3 and 6 or 2), self.dmg, self)
HitCircle{group = main.current.effects, x = self.x, y = self.y, rs = 6, color = orange[0], duration = 0.1}
@ -1215,6 +1216,7 @@ function Player:update(dt)
else self.knockback_m = 1 end
if self.force_push then self.knockback_m = self.knockback_m*1.25 end
self.dot_dmg_m = 1
if table.any(self.classes, function(v) return v == 'voider' end) then
if main.current.voider_level == 2 then self.dot_dmg_m = 1.4
elseif main.current.voider_level == 1 then self.dot_dmg_m = 1.2
@ -1453,6 +1455,7 @@ function Player:on_collision_enter(other, contact)
else other:hit(self.dmg) end
if other.headbutting then
self:hit((4 + math.floor(other.level/3))*other.dmg)
other.headbutting = false
else self:hit(other.dmg) end
HitCircle{group = main.current.effects, x = x, y = y, rs = 6, color = fg[0], duration = 0.1}
for i = 1, 2 do HitParticle{group = main.current.effects, x = x, y = y, color = self.color} end
@ -2031,7 +2034,8 @@ function Projectile:update(dt)
if self.character == 'psyker' then
if self.parent.dead then self.dead = true; self.parent = nil; return end
self:set_position(self.parent.x + self.orbit_distance*math.cos(self.orbit_speed*time + self.orbit_offset), self.parent.y + self.orbit_distance*math.sin(self.orbit_speed*time + self.orbit_offset))
self:set_position(self.parent.x + self.orbit_distance*math.cos(self.orbit_speed*time + self.orbit_offset),
self.parent.y + self.orbit_distance*math.sin(self.orbit_speed*time + self.orbit_offset))
local dx, dy = self.x - (self.previous_x or 0), self.y - (self.previous_y or 0)
self.r = Vector(dx, dy):angle()
self:set_angle(self.r)

37
todo
View File

@ -27,18 +27,19 @@ Orb Update
* Flagellant - Lv.3: 2X flagellant max HP and +12% damage to all allies per cast
* Psykeeper - creates a healing orb every time the psykeeper takes 20% of its max HP in damage, Lv.3: deal double the damage taken by the psykeeper to all enemies
Balance
Change cursers to add more curse targets as set bonuses
Decrease reroll cost to 5
* Changed cursers to add more curse targets as set bonuses
* Decreased item reroll cost to 5
* Increased sage's attack speed
Increase spawn marker time
Decrease range and thrown speed for forcers
Decrease damage for blue and white on higher NG
Increase gold rewards at higher NG
Prevent orange from killing multiple units at once
Slightly decrease probability of special spawn at levels above 20
* Increased spawn marker time by 50%
* Decreased range and throw speed for tanks
* Decreased damage for blue and white enemies
* Increased gold rewards at levels 1-9
* Prevent orange from killing multiple units at once
* Slightly decrease probability of special spawn at levels above 20
* Exploder elite spawns mines instead of exploding enemies directly
* Decreased overall enemy damage at higher difficulties
QoL
Lowered sound effect for gambler
Show cooldown on elite attack
* Lowered sound effect for gambler
* Options menu from buy screen
* Add main menu
* Title
@ -48,10 +49,14 @@ Orb Update
* Quit button
* Soundtrack button
* Volume slider
https://i.imgur.com/4hOt5uX.png "party 7/9"
https://i.imgur.com/dlGbx0k.png lvl 3 effect on shop card
Add visuals divine intervention, fairy buff
Change text for enchanted to "if you have >= 2 enchanters" and change text for reinforce to "if you have >= 1 enchanter"
* Party x/y
* Lv.3 effect on shop card
* Changed text saying "with at least n enchanters" to "if you have >=n enchanters" for 2 enchanter items
Bug fixes
* Fixed fullscreen button and general resolution issues
* Fixed barbarian stun just slowing and not stunning
* Fixed a bug with Call of the Void that caused its DoT damage bonus to become infinite
Loop Update
New items:
@ -83,9 +88,9 @@ Loop Update
Selling items
Your party + items on end, death and passive screens - https://i.imgur.com/JJUddT3.png
Add option for mouse cursor to always be visible
Show cooldown on elite attack
Add visuals divine intervention, fairy buff
Bug fixes
* Fixed fullscreen button and general resolution issues
Fix barbarian stun just slowing and not stunning
Fixed a series of crashes that happened rarely right before changing from the arena back to the shop
https://i.imgur.com/Rk6qbDD.png - merchant doesnt give reroll if dies
https://i.imgur.com/1soUUdk.png - 5th position stops shooting when 1-4 die