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',
'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',
'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)
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',
'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',
'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')
system.save_run()
main:go_to('buy_screen', 1, 0, {}, passives, 1, 0)
@ -873,7 +873,10 @@ end
function Arena:endless()
if self.clicked_loop then return end
self.clicked_loop = true
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:transition()
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)
b.info_text.x, b.info_text.y = b.x, b.y + 20
end, mouse_exit = function(b)
if not b.info_text then return end
b.info_text:deactivate()
b.info_text.dead = true
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',
'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',
'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')
system.save_run()
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)
b.info_text.x, b.info_text.y = b.x, b.y + 20
end, mouse_exit = function(b)
if not b.info_text then return end
b.info_text:deactivate()
b.info_text.dead = true
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',
'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',
'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()
main:add(BuyScreen'buy_screen')
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,
['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,
['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,
['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,
@ -1728,7 +1728,7 @@ function init()
'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',
'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: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',
'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',
'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')
locked_state = nil
system.save_run()
@ -1946,7 +1946,7 @@ 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 = 1 end
if sfx.volume > 1 then sfx.volume = 0 end
state.sfx_volume = sfx.volume
b:set_text('sfx volume: ' .. tostring((state.sfx_volume or 0.5)*10))
end,
@ -1956,8 +1956,8 @@ 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 math.abs(sfx.volume) < 0.001 then sfx.volume = 0 end
if sfx.volume <= 0 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 = 1 end
state.sfx_volume = sfx.volume
b:set_text('sfx volume: ' .. tostring((state.sfx_volume or 0.5)*10))
end}
@ -1969,7 +1969,7 @@ 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 = 1 end
if music.volume > 1 then music.volume = 0 end
state.music_volume = music.volume
b:set_text('music volume: ' .. tostring((state.music_volume or 0.5)*10))
end,
@ -1979,8 +1979,8 @@ 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 math.abs(music.volume) < 0.001 then music.volume = 0 end
if music.volume <= 0 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 = 1 end
state.music_volume = music.volume
b:set_text('music volume: ' .. tostring((state.music_volume or 0.5)*10))
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',
'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',
'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
passives = run.passives or {}

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.5)}
gambler1:play{pitch = pitch_a, volume = math.clamp(math.remap(gold, 0, 50, 0, 0.5), 0, 0.75)}
enemy:hit(2*gold)
if main.current.sorcerer_level > 0 then
self.sorcerer_count = self.sorcerer_count + 1
@ -3637,7 +3637,9 @@ Gold:implement(GameObject)
Gold:implement(Physics)
function Gold:init(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 #self.group:get_objects_by_class(Gold) > 30 then self.dead = true; return end
self:set_as_rectangle(3, 3, 'dynamic', 'ghost')
self:set_restitution(0.5)
local r = random:float(0, 2*math.pi)
@ -3742,8 +3744,9 @@ HealingOrb:implement(GameObject)
HealingOrb:implement(Physics)
function HealingOrb: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 #self.group:get_objects_by_class(HealingOrb) > 30 then self.dead = true; return end
self:set_as_rectangle(4, 4, 'dynamic', 'ghost')
self:set_restitution(0.5)
local r = random:float(0, 2*math.pi)

13
todo
View File

@ -1,13 +1,22 @@
Weekly maintenance updates:
#1
* 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 gambler's volume being too loud with high amounts of gold
* Fixed soundtrack button not working on the win screen
* 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 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
Guardians - https://i.imgur.com/Ynu5Cdw.png
Cultists - https://i.imgur.com/GsfoZBd.png
psyker + builder - https://i.imgur.com/VjY6r1d.png
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
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
Go through the labyrinth without hitting any walls
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 can have items attached to them like in Underlords
Unit item ideas: