Maintenance 2

master
a327ex 2021-07-17 21:01:49 -03:00
parent 39abf59ab3
commit 7a7fe714f8
11 changed files with 102 additions and 22 deletions

View File

@ -362,6 +362,10 @@ function Arena:update(dt)
main_song_instance = _G[random:table{'song1', 'song2', 'song3', 'song4', 'song5'}]:play{volume = 0.5} main_song_instance = _G[random:table{'song1', 'song2', 'song3', 'song4', 'song5'}]:play{volume = 0.5}
end end
if not self.paused and not self.died and not self.won then
run_time = run_time + dt
end
if self.shop_text then self.shop_text:update(dt) end if self.shop_text then self.shop_text:update(dt) end
if input.escape.pressed and not self.transitioning and not self.in_credits and not self.choosing_passives then if input.escape.pressed and not self.transitioning and not self.in_credits and not self.choosing_passives then
@ -381,6 +385,7 @@ function Arena:update(dt)
TransitionEffect{group = main.transitions, x = gw/2, y = gh/2, color = state.dark_transitions and bg[-2] or fg[0], transition_action = function() TransitionEffect{group = main.transitions, x = gw/2, y = gh/2, color = state.dark_transitions and bg[-2] or fg[0], transition_action = function()
slow_amount = 1 slow_amount = 1
music_slow_amount = 1 music_slow_amount = 1
run_time = 0
gold = 3 gold = 3
passives = {} passives = {}
main_song_instance:stop() main_song_instance:stop()
@ -800,8 +805,13 @@ function Arena:draw()
end end
end end
end end
if state.run_timer then
graphics.print_centered(math.round(run_time, 0), fat_font, self.x2 - 12, self.y2 + 16, 0, 0.6, 0.6, nil, nil, fg[0])
end
camera:detach() camera:detach()
if self.level == 20 and self.trailer then graphics.rectangle(gw/2, gh/2, 2*gw, 2*gh, nil, nil, modal_transparent) end if self.level == 20 and self.trailer then graphics.rectangle(gw/2, gh/2, 2*gw, 2*gh, nil, nil, modal_transparent) end
if self.choosing_passives or self.won or self.paused or self.died then graphics.rectangle(gw/2, gh/2, 2*gw, 2*gh, nil, nil, modal_transparent) end if self.choosing_passives or self.won or self.paused or self.died then graphics.rectangle(gw/2, gh/2, 2*gw, 2*gh, nil, nil, modal_transparent) end
self.ui:draw() self.ui:draw()
@ -848,6 +858,7 @@ function Arena:die()
TransitionEffect{group = main.transitions, x = gw/2, y = gh/2, color = state.dark_transitions and bg[-2] or fg[0], transition_action = function() TransitionEffect{group = main.transitions, x = gw/2, y = gh/2, color = state.dark_transitions and bg[-2] or fg[0], transition_action = function()
slow_amount = 1 slow_amount = 1
music_slow_amount = 1 music_slow_amount = 1
run_time = 0
gold = 3 gold = 3
passives = {} passives = {}
main_song_instance:stop() main_song_instance:stop()
@ -875,7 +886,8 @@ end
function Arena:endless() function Arena:endless()
if self.clicked_loop then return end if self.clicked_loop then return end
self.clicked_loop = true self.clicked_loop = true
current_new_game_plus = current_new_game_plus - 1 if current_new_game_plus >= 5 then current_new_game_plus = 5
else current_new_game_plus = current_new_game_plus - 1 end
if current_new_game_plus < 0 then current_new_game_plus = 0 end if current_new_game_plus < 0 then current_new_game_plus = 0 end
self.loop = self.loop + 1 self.loop = self.loop + 1
self:transition() self:transition()

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

View File

@ -136,6 +136,7 @@ function BuyScreen:on_enter(from, level, loop, units, passives, shop_level, shop
TransitionEffect{group = main.transitions, x = gw/2, y = gh/2, color = state.dark_transitions and bg[-2] or fg[0], transition_action = function() TransitionEffect{group = main.transitions, x = gw/2, y = gh/2, color = state.dark_transitions and bg[-2] or fg[0], transition_action = function()
slow_amount = 1 slow_amount = 1
music_slow_amount = 1 music_slow_amount = 1
run_time = 0
gold = 3 gold = 3
passives = {} passives = {}
main_song_instance:stop() main_song_instance:stop()
@ -190,6 +191,10 @@ function BuyScreen:update(dt)
main_song_instance = _G[random:table{'song1', 'song2', 'song3', 'song4', 'song5'}]:play{volume = 0.2} main_song_instance = _G[random:table{'song1', 'song2', 'song3', 'song4', 'song5'}]:play{volume = 0.2}
end end
if not self.paused then
run_time = run_time + dt
end
self:update_game_object(dt*slow_amount) self:update_game_object(dt*slow_amount)
if not self.in_tutorial and not self.paused then if not self.in_tutorial and not self.paused then
@ -543,6 +548,7 @@ function RestartButton:update(dt)
TransitionEffect{group = main.transitions, x = gw/2, y = gh/2, color = state.dark_transitions and bg[-2] or fg[0], transition_action = function() TransitionEffect{group = main.transitions, x = gw/2, y = gh/2, color = state.dark_transitions and bg[-2] or fg[0], transition_action = function()
slow_amount = 1 slow_amount = 1
music_slow_amount = 1 music_slow_amount = 1
run_time = 0
gold = 3 gold = 3
passives = {} passives = {}
main_song_instance:stop() main_song_instance:stop()
@ -850,6 +856,36 @@ function LevelButton:update(dt)
system.save_run(self.parent.level, self.parent.loop, gold, self.parent.units, self.parent.passives, self.parent.shop_level, self.parent.shop_xp, run_passive_pool, locked_state) system.save_run(self.parent.level, self.parent.loop, gold, self.parent.units, self.parent.passives, self.parent.shop_level, self.parent.shop_xp, run_passive_pool, locked_state)
end end
end end
if self.selected and input.m2.pressed then
if self.parent.shop_level <= 1 then return end
if gold < 10 then
self.spring:pull(0.2, 200, 10)
self.selected = true
error1:play{pitch = random:float(0.95, 1.05), volume = 0.5}
if not self.info_text_2 then
self.info_text_2 = InfoText{group = main.current.ui}
self.info_text_2:activate({
{text = '[fg]not enough gold', font = pixul_font, alignment = 'center'},
}, nil, nil, nil, nil, 16, 4, nil, 2)
self.info_text_2.x, self.info_text_2.y = gw/2, gh/2 + 30
end
self.t:after(2, function() self.info_text_2:deactivate(); self.info_text_2.dead = true; self.info_text_2 = nil end, 'info_text_2')
else
ui_switch2:play{pitch = random:float(0.95, 1.05), volume = 0.5}
self.shop_xp = 0
self.parent.shop_level = self.parent.shop_level - 1
self.max_xp = (self.parent.shop_level == 1 and 3) or (self.parent.shop_level == 2 and 4) or (self.parent.shop_level == 3 and 5) or (self.parent.shop_level == 4 and 6) or (self.parent.shop_level == 5 and 0)
self.parent.shop_xp = self.shop_xp
self:create_info_text()
self.selected = true
self.spring:pull(0.2, 200, 10)
gold = gold - 10
self.parent.shop_text:set_text{{text = '[wavy_mid, fg]shop [fg]- [fg, nudge_down]gold: [yellow, nudge_down]' .. gold, font = pixul_font, alignment = 'center'}}
self.text = Text({{text = '[bg10]' .. tostring(self.parent.shop_level), font = pixul_font, alignment = 'center'}}, global_text_tags)
system.save_run(self.parent.level, self.parent.loop, gold, self.parent.units, self.parent.passives, self.parent.shop_level, self.parent.shop_xp, run_passive_pool, locked_state)
end
end
end end

View File

@ -125,6 +125,11 @@ function engine_run(config)
steam.shutdown() steam.shutdown()
return a or 0 return a or 0
end end
elseif name == "focus" then
if main.current:is(Arena) then
if not a then open_options(main.current)
else close_options(main.current) end
end
elseif name == "keypressed" then input.keyboard_state[a] = true; input.last_key_pressed = a elseif name == "keypressed" then input.keyboard_state[a] = true; input.last_key_pressed = a
elseif name == "keyreleased" then input.keyboard_state[a] = false elseif name == "keyreleased" then input.keyboard_state[a] = false
elseif name == "mousepressed" then input.mouse_state[input.mouse_buttons[c]] = true; input.last_key_pressed = input.mouse_buttons[c] elseif name == "mousepressed" then input.mouse_state[input.mouse_buttons[c]] = true; input.last_key_pressed = input.mouse_buttons[c]

View File

@ -139,7 +139,7 @@ end
function system.save_run(level, loop, gold, units, passives, shop_level, shop_xp, run_passive_pool, locked_state) 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} current_new_game_plus = current_new_game_plus, run_time = run_time}
local str = "return " .. table.tostring(run) local str = "return " .. table.tostring(run)
love.filesystem.write("run_v4.txt", str) love.filesystem.write("run_v4.txt", str)
end end

View File

@ -774,7 +774,7 @@ function init()
} }
character_effect_descriptions = { character_effect_descriptions = {
['vagrant'] = function() return '[yellow]+15%[fg] attack speed and damage per active set' end, ['vagrant'] = function() return '[yellow]+15%[fg] attack speed and damage per active class' end,
['swordsman'] = function() return "[fg]the swordsman's damage is [yellow]doubled" end, ['swordsman'] = function() return "[fg]the swordsman's damage is [yellow]doubled" end,
['wizard'] = function() return '[fg]the projectile chains [yellow]2[fg] times' end, ['wizard'] = function() return '[fg]the projectile chains [yellow]2[fg] times' end,
['magician'] = function() return '[fg]the magician becomes invulnerable for [yellow]6[fg] seconds but also cannot attack' end, ['magician'] = function() return '[fg]the magician becomes invulnerable for [yellow]6[fg] seconds but also cannot attack' end,
@ -834,7 +834,7 @@ function init()
} }
character_effect_descriptions_gray = { character_effect_descriptions_gray = {
['vagrant'] = function() return '[light_bg]+15% attack speed and damage per active set' end, ['vagrant'] = function() return '[light_bg]+15% attack speed and damage per active class' end,
['swordsman'] = function() return "[light_bg]the swordsman's damage is doubled" end, ['swordsman'] = function() return "[light_bg]the swordsman's damage is doubled" end,
['wizard'] = function() return '[light_bg]the projectile chains 3 times' end, ['wizard'] = function() return '[light_bg]the projectile chains 3 times' end,
['magician'] = function() return '[light_bg]the magician becomes invulnerable for 6 seconds but also cannot attack' end, ['magician'] = function() return '[light_bg]the magician becomes invulnerable for 6 seconds but also cannot attack' end,
@ -1010,7 +1010,7 @@ function init()
ylb1(lvl) .. ']4[light_bg]/[' .. ylb2(lvl) .. ']3[light_bg]/[' .. ylb3(lvl) .. ']2[fg] attacks' ylb1(lvl) .. ']4[light_bg]/[' .. ylb2(lvl) .. ']3[light_bg]/[' .. ylb3(lvl) .. ']2[fg] attacks'
end, end,
['mercenary'] = function(lvl) return '[' .. ylb1(lvl) .. ']2[light_bg]/[' .. ylb2(lvl) .. ']4 [fg]- [' .. ylb1(lvl) .. ']+8%[light_bg]/[' .. ylb2(lvl) .. ']+16% [fg]chance for enemies to drop gold on death' end, ['mercenary'] = function(lvl) return '[' .. ylb1(lvl) .. ']2[light_bg]/[' .. ylb2(lvl) .. ']4 [fg]- [' .. ylb1(lvl) .. ']+8%[light_bg]/[' .. ylb2(lvl) .. ']+16% [fg]chance for enemies to drop gold on death' end,
['explorer'] = function(lvl) return '[yellow]+15%[fg] attack speed and damage per active set to allied explorers' end, ['explorer'] = function(lvl) return '[yellow]+15%[fg] attack speed and damage per active class to allied explorers' end,
} }
tier_to_characters = { tier_to_characters = {
@ -1731,15 +1731,15 @@ function init()
'silencing_strike', 'culling_strike', 'lightning_strike', 'psycholeak', 'divine_blessing', 'hardening', 'kinetic_strike', 'silencing_strike', 'culling_strike', 'lightning_strike', 'psycholeak', 'divine_blessing', 'hardening', 'kinetic_strike',
} }
main:add(Arena'arena') main:add(Arena'arena')
main:go_to('arena', 16, 0, { main:go_to('arena', 7, 0, {
{character = 'archer', level = 3}, {character = 'arcanist', level = 1},
{character = 'barrager', level = 3}, {character = 'artificer', level = 1},
{character = 'corruptor', level = 3}, {character = 'witch', level = 1},
{character = 'host', level = 3}, {character = 'warden', level = 3},
{character = 'beastmaster', level = 3}, {character = 'psychic', level = 1},
{character = 'infestor', level = 3}, {character = 'vulcanist', level = 1},
}, { }, {
{passive = 'hive', level = 3}, {passive = 'magnify', level = 3},
}) })
]]-- ]]--
@ -1875,6 +1875,7 @@ function open_options(self)
if self.restart_button then self.restart_button.dead = true; self.restart_button = nil end if self.restart_button then self.restart_button.dead = true; self.restart_button = nil end
if self.mouse_button then self.mouse_button.dead = true; self.mouse_button = nil end if self.mouse_button then self.mouse_button.dead = true; self.mouse_button = nil end
if self.dark_transition_button then self.dark_transition_button.dead = true; self.dark_transition_button = nil end if self.dark_transition_button then self.dark_transition_button.dead = true; self.dark_transition_button = nil end
if self.run_timer_button then self.run_timer_button.dead = true; self.run_timer_button = nil end
if self.sfx_button then self.sfx_button.dead = true; self.sfx_button = nil end if self.sfx_button then self.sfx_button.dead = true; self.sfx_button = nil end
if self.music_button then self.music_button.dead = true; self.music_button = nil end if self.music_button then self.music_button.dead = true; self.music_button = nil end
if self.video_button_1 then self.video_button_1.dead = true; self.video_button_1 = nil end if self.video_button_1 then self.video_button_1.dead = true; self.video_button_1 = nil end
@ -1904,6 +1905,7 @@ function open_options(self)
TransitionEffect{group = main.transitions, x = gw/2, y = gh/2, color = state.dark_transitions and bg[-2] or fg[0], transition_action = function() TransitionEffect{group = main.transitions, x = gw/2, y = gh/2, color = state.dark_transitions and bg[-2] or fg[0], transition_action = function()
slow_amount = 1 slow_amount = 1
music_slow_amount = 1 music_slow_amount = 1
run_time = 0
gold = 3 gold = 3
passives = {} passives = {}
main_song_instance:stop() main_song_instance:stop()
@ -1925,20 +1927,27 @@ function open_options(self)
end} end}
end end
self.mouse_button = Button{group = self.ui, x = gw/2 - 57, y = gh - 150, force_update = true, button_text = 'mouse control: ' .. tostring(state.mouse_control and 'yes' or 'no'), fg_color = 'bg10', bg_color = 'bg', self.mouse_button = Button{group = self.ui, x = gw/2 - 113, y = gh - 150, force_update = true, button_text = 'mouse control: ' .. tostring(state.mouse_control and 'yes' or 'no'), fg_color = 'bg10', bg_color = 'bg',
action = function(b) action = function(b)
ui_switch1:play{pitch = random:float(0.95, 1.05), volume = 0.5} ui_switch1:play{pitch = random:float(0.95, 1.05), volume = 0.5}
state.mouse_control = not state.mouse_control state.mouse_control = not state.mouse_control
b:set_text('mouse control: ' .. tostring(state.mouse_control and 'yes' or 'no')) b:set_text('mouse control: ' .. tostring(state.mouse_control and 'yes' or 'no'))
end} end}
self.dark_transition_button = Button{group = self.ui, x = gw/2 + 64, y = gh - 150, force_update = true, button_text = 'dark transitions: ' .. tostring(state.dark_transitions and 'yes' or 'no'), self.dark_transition_button = Button{group = self.ui, x = gw/2 + 13, y = gh - 150, force_update = true, button_text = 'dark transitions: ' .. tostring(state.dark_transitions and 'yes' or 'no'),
fg_color = 'bg10', bg_color = 'bg', action = function(b) fg_color = 'bg10', bg_color = 'bg', action = function(b)
ui_switch1:play{pitch = random:float(0.95, 1.05), volume = 0.5} ui_switch1:play{pitch = random:float(0.95, 1.05), volume = 0.5}
state.dark_transitions = not state.dark_transitions state.dark_transitions = not state.dark_transitions
b:set_text('dark transitions: ' .. tostring(state.dark_transitions and 'yes' or 'no')) b:set_text('dark transitions: ' .. tostring(state.dark_transitions and 'yes' or 'no'))
end} end}
self.run_timer_button = Button{group = self.ui, x = gw/2 + 121, y = gh - 150, force_update = true, button_text = 'run timer: ' .. tostring(state.run_timer and 'yes' or 'no'), fg_color = 'bg10', bg_color = 'bg',
action = function(b)
ui_switch1:play{pitch = random:float(0.95, 1.05), volume = 0.5}
state.run_timer = not state.run_timer
b:set_text('run timer: ' .. tostring(state.run_timer and 'yes' or 'no'))
end}
self.sfx_button = Button{group = self.ui, x = gw/2 - 46, y = gh - 175, force_update = true, button_text = 'sfx volume: ' .. tostring((state.sfx_volume or 0.5)*10), fg_color = 'bg10', bg_color = 'bg', self.sfx_button = Button{group = self.ui, x = gw/2 - 46, y = gh - 175, force_update = true, button_text = 'sfx volume: ' .. tostring((state.sfx_volume or 0.5)*10), fg_color = 'bg10', bg_color = 'bg',
action = function(b) action = function(b)
ui_switch2:play{pitch = random:float(0.95, 1.05), volume = 0.5} ui_switch2:play{pitch = random:float(0.95, 1.05), volume = 0.5}
@ -2113,6 +2122,7 @@ function close_options(self)
if self.restart_button then self.restart_button.dead = true; self.restart_button = nil end if self.restart_button then self.restart_button.dead = true; self.restart_button = nil end
if self.mouse_button then self.mouse_button.dead = true; self.mouse_button = nil end if self.mouse_button then self.mouse_button.dead = true; self.mouse_button = nil end
if self.dark_transition_button then self.dark_transition_button.dead = true; self.dark_transition_button = nil end if self.dark_transition_button then self.dark_transition_button.dead = true; self.dark_transition_button = nil end
if self.run_timer_button then self.run_timer_button.dead = true; self.run_timer_button = nil end
if self.sfx_button then self.sfx_button.dead = true; self.sfx_button = nil end if self.sfx_button then self.sfx_button.dead = true; self.sfx_button = nil end
if self.music_button then self.music_button.dead = true; self.music_button = nil end if self.music_button then self.music_button.dead = true; self.music_button = nil end
if self.video_button_1 then self.video_button_1.dead = true; self.video_button_1 = nil end if self.video_button_1 then self.video_button_1.dead = true; self.video_button_1 = nil end

View File

@ -99,6 +99,7 @@ function MainMenu:on_enter(from)
'intimidation', 'vulnerability', 'temporal_chains', 'ceremonial_dagger', 'homing_barrage', 'critical_strike', 'noxious_strike', 'infesting_strike', 'burning_strike', 'lucky_strike', 'healing_strike', 'stunning_strike', 'intimidation', 'vulnerability', 'temporal_chains', 'ceremonial_dagger', 'homing_barrage', 'critical_strike', 'noxious_strike', 'infesting_strike', 'burning_strike', 'lucky_strike', 'healing_strike', 'stunning_strike',
'silencing_strike', 'culling_strike', 'lightning_strike', 'psycholeak', 'divine_blessing', 'hardening', 'kinetic_strike', 'silencing_strike', 'culling_strike', 'lightning_strike', 'psycholeak', 'divine_blessing', 'hardening', 'kinetic_strike',
} }
run_time = run.time or 0
gold = run.gold or 3 gold = run.gold or 3
passives = run.passives or {} passives = run.passives or {}
locked_state = run.locked_state locked_state = run.locked_state

View File

@ -246,10 +246,10 @@ function Unit:calculate_stats(first_run)
end end
self.base_hp = 100 + (current_new_game_plus*5) + (90 + current_new_game_plus*10)*y[x] 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_dmg = (12 + current_new_game_plus*2) + (2 + current_new_game_plus)*y[x]
self.base_mvspd = 35 + 1.5*y[x] self.base_mvspd = math.min(35 + 1.5*y[x], 35 + 1.5*y[150])
if x % 25 == 0 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_dmg = (12 + current_new_game_plus*2) + (1.25 + current_new_game_plus)*y[x]
self.base_mvspd = 35 + 1.1*y[x] self.base_mvspd = math.min(35 + 1.1*y[x], 35 + 1.1*y[150])
end end
else else
local x = self.level local x = self.level
@ -265,7 +265,7 @@ function Unit:calculate_stats(first_run)
end end
self.base_hp = 25 + 16.5*y[x] self.base_hp = 25 + 16.5*y[x]
self.base_dmg = 4.5 + 2.5*y[x] self.base_dmg = 4.5 + 2.5*y[x]
self.base_mvspd = 70 + 3*y[x] self.base_mvspd = math.min(70 + 3*y[x], 70 + 3*y[150])
end end
else else
if self.boss then if self.boss then
@ -284,10 +284,10 @@ function Unit:calculate_stats(first_run)
end end
self.base_hp = 100 + (current_new_game_plus*5) + (90 + current_new_game_plus*10)*y[x] 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_dmg = (12 + current_new_game_plus*2) + (2 + current_new_game_plus)*y[x]
self.base_mvspd = 35 + 1.5*y[x] self.base_mvspd = math.min(35 + 1.5*y[x], 35 + 1.5*y[150])
if x % 25 == 0 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_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] self.base_mvspd = math.min(35 + 1.2*y[x], 35 + 1.2*y[150])
end end
else else
local x = self.level local x = self.level
@ -303,7 +303,7 @@ function Unit:calculate_stats(first_run)
end end
self.base_hp = 22 + (current_new_game_plus*3) + (15 + current_new_game_plus*2.7)*y[x] 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] 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] self.base_mvspd = math.min(70 + 3*y[x], 70 + 3*y[150])
end end
end end
elseif self:is(Saboteur) then elseif self:is(Saboteur) then

View File

@ -2965,7 +2965,7 @@ ForceField:implement(GameObject)
ForceField:implement(Physics) ForceField:implement(Physics)
function ForceField:init(args) function ForceField:init(args)
self:init_game_object(args) self:init_game_object(args)
self:set_as_circle(12, 'static', 'force_field') self:set_as_circle((self.parent and self.parent.magnify and (self.parent.magnify == 1 and 14) or (self.parent.magnify == 2 and 17) or (self.parent.magnify == 3 and 20)) or 12, 'static', 'force_field')
self.hfx:add('hit', 1) self.hfx:add('hit', 1)
self.color = fg[0] self.color = fg[0]

16
todo
View File

@ -1,5 +1,15 @@
Weekly maintenance updates: Weekly maintenance updates:
#2
* Fixed a bug where NG+5 difficulty would go down to NG+4 after looping
* Capped enemy movement speed after level 150
* Warden's bubble is now affected by magnify
* Changed all text instances of "active set" to "active class" to avoid confusion
* Added a run timer option - note that the timer will be off for saved runs that started before the patch
* Alt tabbing now automatically pauses the game while in the arena
* Shop level can now be reduced
#1 #1
* Fixed several blue screen crashes due to broken looping state * Fixed several blue screen crashes due to broken looping state
@ -20,6 +30,8 @@ Weekly maintenance updates:
--- ---
30Hz
Invoker - casts attacks and spells from other units Invoker - casts attacks and spells from other units
having a unit like this from the start will help ensure that attacks are behind function calls that can be accessed by another unit easily rather than mostly hidden like they are now having a unit like this from the start will help ensure that attacks are behind function calls that can be accessed by another unit easily rather than mostly hidden like they are now
@ -69,6 +81,8 @@ Unit ideas - https://i.imgur.com/VNMS2YV.png
Unit ideas - https://steamcommunity.com/app/915310/discussions/0/3069747783693969554/ Unit ideas - https://steamcommunity.com/app/915310/discussions/0/3069747783693969554/
Unit ideas - https://steamcommunity.com/app/915310/discussions/0/3046104336668792953/ Unit ideas - https://steamcommunity.com/app/915310/discussions/0/3046104336668792953/
Achievement ideas - https://i.imgur.com/Q7jHWB2.png, https://i.imgur.com/2l5eist.png Achievement ideas - https://i.imgur.com/Q7jHWB2.png, https://i.imgur.com/2l5eist.png
general ideas - https://i.imgur.com/W8EYUU1.png
room types - https://i.imgur.com/u2AY1ea.png
Draft system Draft system
Ban system Ban system
@ -112,6 +126,8 @@ Roguelite update:
i.e. 3 attack speed means the same internal attack rate value (like say 6 seconds) for the entire game i.e. 3 attack speed means the same internal attack rate value (like say 6 seconds) for the entire game
In general it's better if units don't have hidden internal multipliers on these stats, although sometimes that may be inevitable In general it's better if units don't have hidden internal multipliers on these stats, although sometimes that may be inevitable
Damage: Damage:
Hit:
Everything hits except DoT
Damage type: Damage type:
Attack - physical attacks, decreased by the enemy's armor Attack - physical attacks, decreased by the enemy's armor
Spell - magical attacks, decreased by the enemy's magic resistance Spell - magical attacks, decreased by the enemy's magic resistance