Maintenance 1

master
a327ex 2021-07-09 14:26:29 -03:00
parent d916423daa
commit 39abf59ab3
6 changed files with 40 additions and 20 deletions

View File

@ -391,7 +391,7 @@ function Arena:update(dt)
'assassination', 'flying_daggers', 'ultimatum', 'magnify', 'echo_barrage', 'unleash', 'reinforce', 'payback', 'enchanted', 'freezing_field', 'burning_field', 'gravity_field', 'magnetism', 'assassination', 'flying_daggers', 'ultimatum', 'magnify', 'echo_barrage', 'unleash', 'reinforce', 'payback', 'enchanted', 'freezing_field', 'burning_field', 'gravity_field', 'magnetism',
'insurance', 'dividends', 'berserking', 'unwavering_stance', 'unrelenting_stance', 'blessing', 'haste', 'divine_barrage', 'orbitism', 'psyker_orbs', 'psychosink', 'rearm', 'taunt', 'construct_instability', 'insurance', 'dividends', 'berserking', 'unwavering_stance', 'unrelenting_stance', 'blessing', 'haste', 'divine_barrage', 'orbitism', 'psyker_orbs', 'psychosink', 'rearm', 'taunt', 'construct_instability',
'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', 'silencing_strike', 'culling_strike', 'lightning_strike', 'psycholeak', 'divine_blessing', 'hardening', 'kinetic_strike',
} }
max_units = math.clamp(7 + current_new_game_plus + self.loop, 7, 12) max_units = math.clamp(7 + current_new_game_plus + self.loop, 7, 12)
main:add(BuyScreen'buy_screen') main:add(BuyScreen'buy_screen')
@ -858,9 +858,9 @@ function Arena:die()
'assassination', 'flying_daggers', 'ultimatum', 'magnify', 'echo_barrage', 'unleash', 'reinforce', 'payback', 'enchanted', 'freezing_field', 'burning_field', 'gravity_field', 'magnetism', 'assassination', 'flying_daggers', 'ultimatum', 'magnify', 'echo_barrage', 'unleash', 'reinforce', 'payback', 'enchanted', 'freezing_field', 'burning_field', 'gravity_field', 'magnetism',
'insurance', 'dividends', 'berserking', 'unwavering_stance', 'unrelenting_stance', 'blessing', 'haste', 'divine_barrage', 'orbitism', 'psyker_orbs', 'psychosink', 'rearm', 'taunt', 'construct_instability', 'insurance', 'dividends', 'berserking', 'unwavering_stance', 'unrelenting_stance', 'blessing', 'haste', 'divine_barrage', 'orbitism', 'psyker_orbs', 'psychosink', 'rearm', 'taunt', 'construct_instability',
'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', 'silencing_strike', 'culling_strike', 'lightning_strike', 'psycholeak', 'divine_blessing', 'hardening', 'kinetic_strike',
} }
max_units = math.clamp(7 + current_new_game_plus + self.loop, 7, 12) max_units = math.clamp(7 + current_new_game_plus, 7, 12)
main:add(BuyScreen'buy_screen') main:add(BuyScreen'buy_screen')
system.save_run() system.save_run()
main:go_to('buy_screen', 1, 0, {}, passives, 1, 0) main:go_to('buy_screen', 1, 0, {}, passives, 1, 0)
@ -873,7 +873,10 @@ end
function Arena:endless() function Arena:endless()
if self.clicked_loop then return end
self.clicked_loop = true
current_new_game_plus = current_new_game_plus - 1 current_new_game_plus = current_new_game_plus - 1
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()
end end

View File

@ -121,6 +121,7 @@ function BuyScreen:on_enter(from, level, loop, units, passives, shop_level, shop
}, nil, nil, nil, nil, 16, 4, nil, 2) }, nil, nil, nil, nil, 16, 4, nil, 2)
b.info_text.x, b.info_text.y = b.x, b.y + 20 b.info_text.x, b.info_text.y = b.x, b.y + 20
end, mouse_exit = function(b) end, mouse_exit = function(b)
if not b.info_text then return end
b.info_text:deactivate() b.info_text:deactivate()
b.info_text.dead = true b.info_text.dead = true
b.info_text = nil b.info_text = nil
@ -145,9 +146,9 @@ function BuyScreen:on_enter(from, level, loop, units, passives, shop_level, shop
'assassination', 'flying_daggers', 'ultimatum', 'magnify', 'echo_barrage', 'unleash', 'reinforce', 'payback', 'enchanted', 'freezing_field', 'burning_field', 'gravity_field', 'magnetism', 'assassination', 'flying_daggers', 'ultimatum', 'magnify', 'echo_barrage', 'unleash', 'reinforce', 'payback', 'enchanted', 'freezing_field', 'burning_field', 'gravity_field', 'magnetism',
'insurance', 'dividends', 'berserking', 'unwavering_stance', 'unrelenting_stance', 'blessing', 'haste', 'divine_barrage', 'orbitism', 'psyker_orbs', 'psychosink', 'rearm', 'taunt', 'construct_instability', 'insurance', 'dividends', 'berserking', 'unwavering_stance', 'unrelenting_stance', 'blessing', 'haste', 'divine_barrage', 'orbitism', 'psyker_orbs', 'psychosink', 'rearm', 'taunt', 'construct_instability',
'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', 'silencing_strike', 'culling_strike', 'lightning_strike', 'psycholeak', 'divine_blessing', 'hardening', 'kinetic_strike',
} }
max_units = math.clamp(7 + current_new_game_plus + self.loop, 7, 12) max_units = math.clamp(7 + current_new_game_plus, 7, 12)
main:add(BuyScreen'buy_screen') main:add(BuyScreen'buy_screen')
system.save_run() system.save_run()
main:go_to('buy_screen', 1, 0, {}, passives, 1, 0) main:go_to('buy_screen', 1, 0, {}, passives, 1, 0)
@ -159,6 +160,7 @@ function BuyScreen:on_enter(from, level, loop, units, passives, shop_level, shop
}, nil, nil, nil, nil, 16, 4, nil, 2) }, nil, nil, nil, nil, 16, 4, nil, 2)
b.info_text.x, b.info_text.y = b.x, b.y + 20 b.info_text.x, b.info_text.y = b.x, b.y + 20
end, mouse_exit = function(b) end, mouse_exit = function(b)
if not b.info_text then return end
b.info_text:deactivate() b.info_text:deactivate()
b.info_text.dead = true b.info_text.dead = true
b.info_text = nil b.info_text = nil
@ -551,8 +553,9 @@ function RestartButton:update(dt)
'assassination', 'flying_daggers', 'ultimatum', 'magnify', 'echo_barrage', 'unleash', 'reinforce', 'payback', 'enchanted', 'freezing_field', 'burning_field', 'gravity_field', 'magnetism', 'assassination', 'flying_daggers', 'ultimatum', 'magnify', 'echo_barrage', 'unleash', 'reinforce', 'payback', 'enchanted', 'freezing_field', 'burning_field', 'gravity_field', 'magnetism',
'insurance', 'dividends', 'berserking', 'unwavering_stance', 'unrelenting_stance', 'blessing', 'haste', 'divine_barrage', 'orbitism', 'psyker_orbs', 'psychosink', 'rearm', 'taunt', 'construct_instability', 'insurance', 'dividends', 'berserking', 'unwavering_stance', 'unrelenting_stance', 'blessing', 'haste', 'divine_barrage', 'orbitism', 'psyker_orbs', 'psychosink', 'rearm', 'taunt', 'construct_instability',
'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', 'silencing_strike', 'culling_strike', 'lightning_strike', 'psycholeak', 'divine_blessing', 'hardening', 'kinetic_strike',
} }
max_units = math.clamp(7 + current_new_game_plus, 7, 12)
system.save_state() system.save_state()
main:add(BuyScreen'buy_screen') main:add(BuyScreen'buy_screen')
system.save_run() system.save_run()

View File

@ -1432,7 +1432,7 @@ function init()
['haste'] = function(lvl) return '[yellow]+50%[fg] movement speed that decays over [yellow]4[fg] seconds on healing orb pick up' end, ['haste'] = function(lvl) return '[yellow]+50%[fg] movement speed that decays over [yellow]4[fg] seconds on healing orb pick up' end,
['divine_barrage'] = function(lvl) return ts(lvl, '20%', '40%', '60%') .. ' chance to release a ricocheting barrage on healing orb pick up' end, ['divine_barrage'] = function(lvl) return ts(lvl, '20%', '40%', '60%') .. ' chance to release a ricocheting barrage on healing orb pick up' end,
['orbitism'] = function(lvl) return ts(lvl, '+25%', '50%', '75%') .. ' psyker orb movement speed' end, ['orbitism'] = function(lvl) return ts(lvl, '+25%', '50%', '75%') .. ' psyker orb movement speed' end,
['psyker_orbs'] = function(lvl) return ts(lvl, '+1', '2', '3') .. ' psyker orbs' end, ['psyker_orbs'] = function(lvl) return ts(lvl, '+1', '2', '4') .. ' psyker orbs' end,
['psychosense'] = function(lvl) return ts(lvl, '+33%', '66%', '99%') .. ' orb range' end, ['psychosense'] = function(lvl) return ts(lvl, '+33%', '66%', '99%') .. ' orb range' end,
['psychosink'] = function(lvl) return '[fg]psyker orbs deal ' .. ts(lvl, '+40%', '80%', '120%') .. ' damage' end, ['psychosink'] = function(lvl) return '[fg]psyker orbs deal ' .. ts(lvl, '+40%', '80%', '120%') .. ' damage' end,
['rearm'] = function(lvl) return '[fg]constructs repeat their attacks once' end, ['rearm'] = function(lvl) return '[fg]constructs repeat their attacks once' end,
@ -1728,7 +1728,7 @@ function init()
'assassination', 'flying_daggers', 'ultimatum', 'magnify', 'echo_barrage', 'unleash', 'reinforce', 'payback', 'enchanted', 'freezing_field', 'burning_field', 'gravity_field', 'magnetism', 'assassination', 'flying_daggers', 'ultimatum', 'magnify', 'echo_barrage', 'unleash', 'reinforce', 'payback', 'enchanted', 'freezing_field', 'burning_field', 'gravity_field', 'magnetism',
'insurance', 'dividends', 'berserking', 'unwavering_stance', 'unrelenting_stance', 'blessing', 'haste', 'divine_barrage', 'orbitism', 'psyker_orbs', 'psychosink', 'rearm', 'taunt', 'construct_instability', 'insurance', 'dividends', 'berserking', 'unwavering_stance', 'unrelenting_stance', 'blessing', 'haste', 'divine_barrage', 'orbitism', 'psyker_orbs', 'psychosink', 'rearm', 'taunt', 'construct_instability',
'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', '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', 16, 0, {
@ -1914,9 +1914,9 @@ function open_options(self)
'assassination', 'flying_daggers', 'ultimatum', 'magnify', 'echo_barrage', 'unleash', 'reinforce', 'payback', 'enchanted', 'freezing_field', 'burning_field', 'gravity_field', 'magnetism', 'assassination', 'flying_daggers', 'ultimatum', 'magnify', 'echo_barrage', 'unleash', 'reinforce', 'payback', 'enchanted', 'freezing_field', 'burning_field', 'gravity_field', 'magnetism',
'insurance', 'dividends', 'berserking', 'unwavering_stance', 'unrelenting_stance', 'blessing', 'haste', 'divine_barrage', 'orbitism', 'psyker_orbs', 'psychosink', 'rearm', 'taunt', 'construct_instability', 'insurance', 'dividends', 'berserking', 'unwavering_stance', 'unrelenting_stance', 'blessing', 'haste', 'divine_barrage', 'orbitism', 'psyker_orbs', 'psychosink', 'rearm', 'taunt', 'construct_instability',
'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', 'silencing_strike', 'culling_strike', 'lightning_strike', 'psycholeak', 'divine_blessing', 'hardening', 'kinetic_strike',
} }
max_units = math.clamp(7 + current_new_game_plus + self.loop, 7, 12) max_units = math.clamp(7 + current_new_game_plus, 7, 12)
main:add(BuyScreen'buy_screen') main:add(BuyScreen'buy_screen')
locked_state = nil locked_state = nil
system.save_run() system.save_run()
@ -1946,7 +1946,7 @@ function open_options(self)
b.selected = true b.selected = true
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}
sfx.volume = sfx.volume + 0.1 sfx.volume = sfx.volume + 0.1
if sfx.volume > 1 then sfx.volume = 1 end if sfx.volume > 1 then sfx.volume = 0 end
state.sfx_volume = sfx.volume state.sfx_volume = sfx.volume
b:set_text('sfx volume: ' .. tostring((state.sfx_volume or 0.5)*10)) b:set_text('sfx volume: ' .. tostring((state.sfx_volume or 0.5)*10))
end, end,
@ -1956,8 +1956,8 @@ function open_options(self)
b.selected = true b.selected = true
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}
sfx.volume = sfx.volume - 0.1 sfx.volume = sfx.volume - 0.1
if math.abs(sfx.volume) < 0.001 then sfx.volume = 0 end if math.abs(sfx.volume) < 0.001 and sfx.volume > 0 then sfx.volume = 0 end
if sfx.volume <= 0 then sfx.volume = 0 end if sfx.volume < 0 then sfx.volume = 1 end
state.sfx_volume = sfx.volume state.sfx_volume = sfx.volume
b:set_text('sfx volume: ' .. tostring((state.sfx_volume or 0.5)*10)) b:set_text('sfx volume: ' .. tostring((state.sfx_volume or 0.5)*10))
end} end}
@ -1969,7 +1969,7 @@ function open_options(self)
b.selected = true b.selected = true
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}
music.volume = music.volume + 0.1 music.volume = music.volume + 0.1
if music.volume > 1 then music.volume = 1 end if music.volume > 1 then music.volume = 0 end
state.music_volume = music.volume state.music_volume = music.volume
b:set_text('music volume: ' .. tostring((state.music_volume or 0.5)*10)) b:set_text('music volume: ' .. tostring((state.music_volume or 0.5)*10))
end, end,
@ -1979,8 +1979,8 @@ function open_options(self)
b.selected = true b.selected = true
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}
music.volume = music.volume - 0.1 music.volume = music.volume - 0.1
if math.abs(music.volume) < 0.001 then music.volume = 0 end if math.abs(music.volume) < 0.001 and music.volume > 0 then music.volume = 0 end
if music.volume <= 0 then music.volume = 0 end if music.volume < 0 then music.volume = 1 end
state.music_volume = music.volume state.music_volume = music.volume
b:set_text('music volume: ' .. tostring((state.music_volume or 0.5)*10)) b:set_text('music volume: ' .. tostring((state.music_volume or 0.5)*10))
end} end}

View File

@ -97,7 +97,7 @@ function MainMenu:on_enter(from)
'assassination', 'flying_daggers', 'ultimatum', 'magnify', 'echo_barrage', 'unleash', 'reinforce', 'payback', 'enchanted', 'freezing_field', 'burning_field', 'gravity_field', 'magnetism', 'assassination', 'flying_daggers', 'ultimatum', 'magnify', 'echo_barrage', 'unleash', 'reinforce', 'payback', 'enchanted', 'freezing_field', 'burning_field', 'gravity_field', 'magnetism',
'insurance', 'dividends', 'berserking', 'unwavering_stance', 'unrelenting_stance', 'blessing', 'haste', 'divine_barrage', 'orbitism', 'psyker_orbs', 'psychosink', 'rearm', 'taunt', 'construct_instability', 'insurance', 'dividends', 'berserking', 'unwavering_stance', 'unrelenting_stance', 'blessing', 'haste', 'divine_barrage', 'orbitism', 'psyker_orbs', 'psychosink', 'rearm', 'taunt', 'construct_instability',
'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', 'silencing_strike', 'culling_strike', 'lightning_strike', 'psycholeak', 'divine_blessing', 'hardening', 'kinetic_strike',
} }
gold = run.gold or 3 gold = run.gold or 3
passives = run.passives or {} passives = run.passives or {}

View File

@ -59,7 +59,7 @@ function Player:init(args)
local cast = function(pitch_a) local cast = function(pitch_a)
local enemy = table.shuffle(main.current.main:get_objects_by_classes(main.current.enemies))[1] local enemy = table.shuffle(main.current.main:get_objects_by_classes(main.current.enemies))[1]
if enemy then if enemy then
gambler1:play{pitch = pitch_a, volume = math.remap(gold, 0, 50, 0, 0.5)} gambler1:play{pitch = pitch_a, volume = math.clamp(math.remap(gold, 0, 50, 0, 0.5), 0, 0.75)}
enemy:hit(2*gold) enemy:hit(2*gold)
if main.current.sorcerer_level > 0 then if main.current.sorcerer_level > 0 then
self.sorcerer_count = self.sorcerer_count + 1 self.sorcerer_count = self.sorcerer_count + 1
@ -3637,7 +3637,9 @@ Gold:implement(GameObject)
Gold:implement(Physics) Gold:implement(Physics)
function Gold:init(args) function Gold:init(args)
self:init_game_object(args) self:init_game_object(args)
if not self.group.world then self.dead = true; return end
if tostring(self.x) == tostring(0/0) or tostring(self.y) == tostring(0/0) then self.dead = true; return end if tostring(self.x) == tostring(0/0) or tostring(self.y) == tostring(0/0) then self.dead = true; return end
if #self.group:get_objects_by_class(Gold) > 30 then self.dead = true; return end
self:set_as_rectangle(3, 3, 'dynamic', 'ghost') self:set_as_rectangle(3, 3, 'dynamic', 'ghost')
self:set_restitution(0.5) self:set_restitution(0.5)
local r = random:float(0, 2*math.pi) local r = random:float(0, 2*math.pi)
@ -3742,8 +3744,9 @@ HealingOrb:implement(GameObject)
HealingOrb:implement(Physics) HealingOrb:implement(Physics)
function HealingOrb:init(args) function HealingOrb:init(args)
self:init_game_object(args) self:init_game_object(args)
self:init_game_object(args) if not self.group.world then self.dead = true; return end
if tostring(self.x) == tostring(0/0) or tostring(self.y) == tostring(0/0) then self.dead = true; return end if tostring(self.x) == tostring(0/0) or tostring(self.y) == tostring(0/0) then self.dead = true; return end
if #self.group:get_objects_by_class(HealingOrb) > 30 then self.dead = true; return end
self:set_as_rectangle(4, 4, 'dynamic', 'ghost') self:set_as_rectangle(4, 4, 'dynamic', 'ghost')
self:set_restitution(0.5) self:set_restitution(0.5)
local r = random:float(0, 2*math.pi) local r = random:float(0, 2*math.pi)

13
todo
View File

@ -1,13 +1,22 @@
Weekly maintenance updates: Weekly maintenance updates:
#1 #1
* Fixed several blue screen crashes due to broken looping state * Fixed several blue screen crashes due to broken looping state
* Limited critters to 100 due to performance issues * Fixed several blue screen crashes due to broken physics state
* Fixed a bug where double clicking the loop button would lead to broken looping state and crashes
* Fixed sold items not being restored to the passive pool * Fixed sold items not being restored to the passive pool
* Fixed gambler's volume being too loud with high amounts of gold * Fixed gambler's volume being too loud with high amounts of gold
* Fixed soundtrack button not working on the win screen * Fixed soundtrack button not working on the win screen
* Fixed volume text bug when decreasing it from 1 to 0 * Fixed volume text bug when decreasing it from 1 to 0
* Fixed volume buttons not looping
* Fixed a bug where the first run would not have certain items in the item pool * Fixed a bug where the first run would not have certain items in the item pool
* Fixed psyker orbs item saying "+1/2/3" in the shop when it is "+1/2/4"
* Fixed kinetic strike not being in the passive pool
* Fixed a bug where sometimes restarting the game from a looped run would let you have more units than normal on the next run
* Limited critters to 100 due to performance issues
* Limited health orbs on the arena to 30 due to performance issues
* Limited gold coins on the arena to 30 due to performance issues
--- ---
@ -32,6 +41,7 @@ Bodyguard - https://i.imgur.com/Y2pP20v.png
Conjurer unit that creates an unit that actively protects you from enemy projectiles Conjurer unit that creates an unit that actively protects you from enemy projectiles
Guardians - https://i.imgur.com/Ynu5Cdw.png Guardians - https://i.imgur.com/Ynu5Cdw.png
Cultists - https://i.imgur.com/GsfoZBd.png Cultists - https://i.imgur.com/GsfoZBd.png
psyker + builder - https://i.imgur.com/VjY6r1d.png
Assists (2/4) - Assists (2/4) -
Ringmaster (tier 4 assist, nuker) - +15% to all stats to adjacent units, Lv.3 effect - create a cross that deals AoE damage 5 times for 10 seconds Ringmaster (tier 4 assist, nuker) - +15% to all stats to adjacent units, Lv.3 effect - create a cross that deals AoE damage 5 times for 10 seconds
Absorber (tier 2 assist, warrior) - absorbs 50% damage from adjacent units, Lv.3 effect - absorbs 75% damage from adjacent units and gives the absorber +25% defense Absorber (tier 2 assist, warrior) - absorbs 50% damage from adjacent units, Lv.3 effect - absorbs 75% damage from adjacent units and gives the absorber +25% defense
@ -91,6 +101,7 @@ Roguelite update:
Challenge + reward Challenge + reward
Go through the labyrinth without hitting any walls Go through the labyrinth without hitting any walls
Go through the traps without getting hit Go through the traps without getting hit
Room ideas - https://i.imgur.com/ajqtTOc.png
Units die permanently when they die (dead units can be stored in bench to be revived later) Units die permanently when they die (dead units can be stored in bench to be revived later)
Units can have items attached to them like in Underlords Units can have items attached to them like in Underlords
Unit item ideas: Unit item ideas: