Maintenance 1
parent
d916423daa
commit
39abf59ab3
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
|
|
20
main.lua
20
main.lua
|
@ -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}
|
||||
|
|
|
@ -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 {}
|
||||
|
|
|
@ -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
13
todo
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue