Loop update 5/5

master
a327ex 2021-07-04 15:13:19 -03:00
parent 868cae93ed
commit 9e8b98a51d
10 changed files with 74 additions and 40 deletions

View File

@ -107,7 +107,7 @@ function Arena:on_enter(from, level, loop, units, passives, shop_level, shop_xp,
-- self.level_1000_text2 = Text2{group = self.ui, x = gw/2, y = gh/2 + 64, lines = {{text = '[fg, wavy_mid]SNKRX', font = pixul_font, alignment = 'center'}}}
-- Wall{group = self.main, vertices = math.to_rectangle_vertices(gw/2 - 0.45*self.level_1000_text.w, gh/2 - 0.3*self.level_1000_text.h, gw/2 + 0.45*self.level_1000_text.w, gh/2 - 3), snkrx = true, color = bg[-1]}
elseif self.level == 6 or self.level == 12 or self.level == 18 or self.level == 24 or self.level == 25 then
elseif (self.level - (25*self.loop)) % 6 == 0 or self.level % 25 == 0 then
self.boss_level = true
self.start_time = 3
self.t:after(1, function()
@ -222,7 +222,7 @@ function Arena:on_enter(from, level, loop, units, passives, shop_level, shop_xp,
self.hfx:pull('condition2', 0.0625)
self.t:after(0.5, function()
if random:bool(self.level_to_distributed_enemies_chance[self.level]) then
local n = math.ceil((8 + (self.wave-1)*2)/7)
local n = math.ceil((8 + (self.wave+math.min(self.loop*6, 60)-1)*2)/7)
for i = 1, n do
self.t:after((i-1)*2, function()
self:spawn_distributed_enemies()
@ -235,7 +235,7 @@ function Arena:on_enter(from, level, loop, units, passives, shop_level, shop_xp,
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(1.125, 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+math.min(self.loop*12, 200)-1)*2) end)
end
end)
end, self.max_waves+1)
@ -982,6 +982,7 @@ function Arena:transition()
self.shop_xp = 0
self.shop_level = self.shop_level + 1
end
if self.shop_level > 5 then self.shop_level = 5 end
end
slow_amount = 1
music_slow_amount = 1

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@ -623,9 +623,16 @@ function Button:update(dt)
end
else
if self.selected and input.m1.pressed then
if self.action then
self:action()
end
end
if self.selected and input.m2.pressed then
if self.action_2 then
self:action_2()
end
end
end
end
@ -1974,7 +1981,7 @@ function ClassIcon:on_mouse_enter()
local i, j, k, owned = class_set_numbers[self.class](self.units)
self.info_text = InfoText{group = main.current.ui}
self.info_text:activate({
{text = '[' .. class_color_strings[self.class] .. ']' .. self.class:capitalize() .. '[fg] - owned: [yellow]' .. owned, font = pixul_font, alignment = 'center', height_multiplier = 1.25},
{text = '[' .. class_color_strings[self.class] .. ']' .. (self.class == 'conjurer' and 'Builder' or self.class:capitalize()) .. '[fg] - owned: [yellow]' .. owned, font = pixul_font, alignment = 'center', height_multiplier = 1.25},
{text = class_descriptions[self.class]((k and (owned >= k and 3)) or (owned >= j and 2) or (owned >= i and 1) or 0), 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

@ -26,7 +26,7 @@ function Seeker:init(args)
HitCircle{group = main.current.effects, x = self.x, y = self.y, rs = 6, color = green[0], duration = 0.1}
for _, enemy in ipairs(enemies) do
LightningLine{group = main.current.effects, src = self, dst = enemy, color = green[0]}
enemy:speed_boost(3 + self.level*0.025 + current_new_game_plus*0.1)
enemy:speed_boost(3 + self.level*0.015 + current_new_game_plus*0.1)
end
end
end, nil, nil, 'boss_attack')
@ -154,7 +154,7 @@ function Seeker:init(args)
HitCircle{group = main.current.effects, x = self.x, y = self.y, rs = 6, color = green[0], duration = 0.1}
for _, enemy in ipairs(enemies) do
LightningLine{group = main.current.effects, src = self, dst = enemy, color = green[0]}
enemy:speed_boost(3 + self.level*0.025 + current_new_game_plus*0.1)
enemy:speed_boost(3 + self.level*0.015 + current_new_game_plus*0.1)
end
end
end
@ -231,12 +231,12 @@ function Seeker:init(args)
self.t:every({4, 6}, function()
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()
self.t:after(math.max(1 - self.level*0.01, 0.25)*0.15*(i-1), function()
shoot1:play{pitch = random:float(0.95, 1.05), volume = 0.1}
self.hfx:use('hit', 0.25, 200, 10, 0.1)
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,
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 = math.min(140 + 3.5*self.level + 2*current_new_game_plus, 300),
dmg = (current_new_game_plus*0.05 + 1)*self.dmg, source = 'shooter'}
end)
end
@ -275,8 +275,8 @@ function Seeker:update(dt)
if self.headbutt_charging or self.headbutting then self.buff_def_m = 3 end
if self.speed_boosting then
local n = math.remap(love.timer.getTime() - self.speed_boosting, 0, (3 + 0.025*self.level + current_new_game_plus*0.1), 1, 0.5)
self.speed_boosting_mvspd_m = (3 + 0.025*self.level + 0.1*current_new_game_plus)*n
local n = math.remap(love.timer.getTime() - self.speed_boosting, 0, (3 + 0.015*self.level + current_new_game_plus*0.1), 1, 0.5)
self.speed_boosting_mvspd_m = (3 + 0.015*self.level + 0.1*current_new_game_plus)*n
if not self.speed_booster and not self.exploder and not self.headbutter and not self.tank and not self.shooter and not self.spawner then
self.color.r = math.remap(n, 1, 0.5, green[0].r, red[0].r)
self.color.g = math.remap(n, 1, 0.5, green[0].g, red[0].g)
@ -295,7 +295,7 @@ function Seeker:update(dt)
self.stun_dmg_m = (self.barbarian_stunned and 2 or 1)
if self.shooter then
self.t:set_every_multiplier('shooter', (1 - self.level*0.02))
self.t:set_every_multiplier('shooter', (1 - math.min(self.level*0.02, 0.25)))
end
if self.being_pushed then
@ -703,7 +703,7 @@ function Seeker:push(f, r, push_invulnerable)
local n = 1
if self.tank then n = 0.7 end
if self.boss then n = 0.2 end
if self.level == 25 and self.boss then n = 0.7 end
if self.level % 25 == 0 and self.boss then n = 0.7 end
self.push_invulnerable = push_invulnerable
self.push_force = n*f
self.being_pushed = true
@ -817,7 +817,7 @@ 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.3*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 + math.min(5*self.parent.level, 300), dmg = 1.3*self.parent.dmg}
end
self.dead = true
end, 'mine_count')

View File

@ -138,7 +138,8 @@ end
function system.save_run(level, loop, gold, units, passives, shop_level, shop_xp, run_passive_pool, locked_state)
local run = {level = level, loop = loop, gold = gold, units = units, passives = passives, shop_level = shop_level, shop_xp = shop_xp, run_passive_pool= run_passive_pool, locked_state = locked_state}
local run = {level = level, loop = loop, gold = gold, units = units, passives = passives, shop_level = shop_level, shop_xp = shop_xp, run_passive_pool = run_passive_pool, locked_state = locked_state,
current_new_game_plus = current_new_game_plus}
local str = "return " .. table.tostring(run)
love.filesystem.write("run_v4.txt", str)
end

View File

@ -869,7 +869,7 @@ function init()
['jester'] = function() return '[light_bg]curses 6 enemies and all knives seek enemies and pierce 2 times' end,
['assassin'] = function() return '[light_bg]poison inflicted from crits deals 8x damage' end,
['host'] = function() return '[light_bg]+100% critter spawn rate and spawn 2 critters instead' end,
['carver'] = function() return '[light_bg]carves a tree that heals twice as fast, in a bigger area, and heals 2 units instead' end,
['carver'] = function() return '[light_bg]carves a tree that creates healing orbs twice as fast' end,
['bane'] = function() return "[light_bg]100% increased area for bane's void rifts" end,
['psykino'] = function() return '[light_bg]enemies take ' .. 4*get_character_stat('psykino', 3, 'dmg') .. ' damage and are pushed away when the area expires' end,
['barrager'] = function() return '[light_bg]every 3rd attack the barrage shoots 15 projectiles and they push harder' end,
@ -1581,15 +1581,19 @@ function init()
[25] = 'randomizer',
}
local bosses = {'speed_booster', 'exploder', 'swarmer', 'forcer'}
local bosses = {'speed_booster', 'exploder', 'swarmer', 'forcer', 'randomizer'}
level_to_boss[31] = 'speed_booster'
level_to_boss[37] = 'exploder'
level_to_boss[43] = 'swarmer'
level_to_boss[49] = 'forcer'
level_to_boss[50] = 'randomizer'
local i = 31
local k = 1
for i = 30, 5000, 6 do
while i < 5000 do
level_to_boss[i] = bosses[k]
k = k + 1
if k > 4 then k = 1 end
end
for i = 50, 5000, 25 do
level_to_boss[i] = 'randomizer'
if k == 5 then i = i + 1 else i = i + 6 end
if k == 6 then k = 1 end
end
level_to_elite_spawn_types = {
@ -1940,7 +1944,17 @@ function open_options(self)
b.selected = true
ui_switch1:play{pitch = random:float(0.95, 1.05), volume = 0.5}
sfx.volume = sfx.volume + 0.1
if sfx.volume > 1 then sfx.volume = 0 end
if sfx.volume > 1 then sfx.volume = 1 end
state.sfx_volume = sfx.volume
b:set_text('sfx volume: ' .. tostring((state.sfx_volume or 0.5)*10))
end,
action_2 = function(b)
ui_switch2:play{pitch = random:float(0.95, 1.05), volume = 0.5}
b.spring:pull(0.2, 200, 10)
b.selected = true
ui_switch1:play{pitch = random:float(0.95, 1.05), volume = 0.5}
sfx.volume = sfx.volume - 0.1
if sfx.volume <= 0 then sfx.volume = 0 end
state.sfx_volume = sfx.volume
b:set_text('sfx volume: ' .. tostring((state.sfx_volume or 0.5)*10))
end}
@ -1952,7 +1966,17 @@ function open_options(self)
b.selected = true
ui_switch1:play{pitch = random:float(0.95, 1.05), volume = 0.5}
music.volume = music.volume + 0.1
if music.volume > 1 then music.volume = 0 end
if music.volume > 1 then music.volume = 1 end
state.music_volume = music.volume
b:set_text('music volume: ' .. tostring((state.music_volume or 0.5)*10))
end,
action_2 = function(b)
ui_switch2:play{pitch = random:float(0.95, 1.05), volume = 0.5}
b.spring:pull(0.2, 200, 10)
b.selected = true
ui_switch1:play{pitch = random:float(0.95, 1.05), volume = 0.5}
music.volume = music.volume - 0.1
if music.volume <= 0 then music.volume = 0 end
state.music_volume = music.volume
b:set_text('music volume: ' .. tostring((state.music_volume or 0.5)*10))
end}

View File

@ -100,6 +100,7 @@ function MainMenu:on_enter(from)
gold = run.gold or 3
passives = run.passives or {}
locked_state = run.locked_state
current_new_game_plus = run.current_new_game_plus or current_new_game_plus or 0
system.save_state()
main:add(BuyScreen'buy_screen')
main:go_to('buy_screen', run.level or 1, run.loop or 0, run.units or {}, passives, run.shop_level or 1, run.shop_xp or 0)

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]orb update', font = pixul_font, alignment = 'center'},
{text = '[fg]loop update', font = pixul_font, alignment = 'center'},
}}
end

View File

@ -234,34 +234,34 @@ function Unit:calculate_stats(first_run)
local x = self.level
local y = {0, 0, 3, 0, 0, 6, 0, 0, 9, 0, 0, 12, 0, 0, 18, 0, 0, 40, 0, 0, 32, 0, 0, 64, 90}
local y2 = {0, 0, 24, 0, 0, 28, 0, 0, 32, 0, 0, 36, 0, 0, 44, 0, 0, 64, 0, 0, 48, 0, 0, 80, 100}
local k = 1.1
for i = 26, 50 do y[i] = y2[i] end
local k = 1.07
for i = 26, 50 do y[i] = y2[i-25] end
for i = 51, 5000 do
local n = i % 25
if n == 0 then
n = 25
k = k + 0.1
k = k + 0.07
end
y[i] = y2[n]*k
end
self.base_hp = 100 + (current_new_game_plus*5) + (90 + current_new_game_plus*10)*y[x]
self.base_dmg = (12 + current_new_game_plus*2) + (2 + current_new_game_plus)*y[x]
self.base_mvspd = 35 + 1.5*y[x]
if x == 25 then
if x % 25 == 0 then
self.base_dmg = (12 + current_new_game_plus*2) + (1.25 + current_new_game_plus)*y[x]
self.base_mvspd = 35 + 1.1*y[x]
end
else
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}
local k = 1.2
local k = 1.07
for i = 26, 5000 do
local n = i % 25
if n == 0 then
n = 25
k = k + 0.2
k = k + 0.07
end
y[i] = y[n]*k
y[i] = y[i-10]*k
end
self.base_hp = 25 + 16.5*y[x]
self.base_dmg = 4.5 + 2.5*y[x]
@ -272,34 +272,34 @@ function Unit:calculate_stats(first_run)
local x = self.level
local y = {0, 0, 3, 0, 0, 6, 0, 0, 9, 0, 0, 12, 0, 0, 18, 0, 0, 40, 0, 0, 32, 0, 0, 64, 90}
local y2 = {0, 0, 24, 0, 0, 28, 0, 0, 32, 0, 0, 36, 0, 0, 44, 0, 0, 64, 0, 0, 48, 0, 0, 80, 100}
local k = 1.1
for i = 26, 50 do y[i] = y2[i] end
local k = 1.07
for i = 26, 50 do y[i] = y2[i-25] end
for i = 51, 5000 do
local n = i % 25
if n == 0 then
n = 25
k = k + 0.1
k = k + 0.07
end
y[i] = y2[n]*k
end
self.base_hp = 100 + (current_new_game_plus*5) + (90 + current_new_game_plus*10)*y[x]
self.base_dmg = (12 + current_new_game_plus*2) + (2 + current_new_game_plus)*y[x]
self.base_mvspd = 35 + 1.5*y[x]
if x == 25 then
if x % 25 == 0 then
self.base_dmg = (12 + current_new_game_plus*2) + (1.75 + 0.5*current_new_game_plus)*y[x]
self.base_mvspd = 35 + 1.2*y[x]
end
else
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}
local k = 1.2
local k = 1.07
for i = 26, 5000 do
local n = i % 25
if n == 0 then
n = 25
k = k + 0.2
k = k + 0.07
end
y[i] = y[n]*k
y[i] = y[i-10]*k
end
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*0.83)*y[x]

2
todo
View File

@ -51,7 +51,7 @@ Loop Update
* Snake size goes up by 1 every loop, up to 12
* Don't offer items if at maximum items
QoL
Default to mouse controls
* Right click goes down on volume buttons
* Show cooldown on elite attack
* Added visuals for divine intervention and fairy buffs
* Increased item choice slots to 4