Bug fixes
parent
0867468dc3
commit
959bd601f4
|
@ -511,7 +511,7 @@ function Arena:quit()
|
||||||
}}
|
}}
|
||||||
]]--
|
]]--
|
||||||
SteamFollowButton{group = self.ui, x = gw/2 + 40, y = gh/2 - 10, force_update = true}
|
SteamFollowButton{group = self.ui, x = gw/2 + 40, y = gh/2 - 10, force_update = true}
|
||||||
Button{group = self.ui, x = gw/2 + 40, y = gh/2 + 33, force_update = true, button_text = 'buy the soundtrack!', fg_color = 'greenm5', bg_color = 'green', action = function() open_url(b, 'https://kubbimusic.com/album/ember') end}
|
Button{group = self.ui, x = gw/2 + 40, y = gh/2 + 33, force_update = true, button_text = 'buy the soundtrack!', fg_color = 'greenm5', bg_color = 'green', action = function(b) open_url(b, 'https://kubbimusic.com/album/ember') end}
|
||||||
Button{group = self.ui, x = gw - 40, y = gh - 44, force_update = true, button_text = ' loop ', fg_color = 'bg10', bg_color = 'bg', action = function() self:endless() end}
|
Button{group = self.ui, x = gw - 40, y = gh - 44, force_update = true, button_text = ' loop ', fg_color = 'bg10', bg_color = 'bg', action = function() self:endless() end}
|
||||||
RestartButton{group = self.ui, x = gw - 40, y = gh - 20, force_update = true}
|
RestartButton{group = self.ui, x = gw - 40, y = gh - 20, force_update = true}
|
||||||
self.try_loop_text = Text2{group = self.ui, x = gw - 200, y = gh - 44, force_update = true, lines = {
|
self.try_loop_text = Text2{group = self.ui, x = gw - 200, y = gh - 44, force_update = true, lines = {
|
||||||
|
|
|
@ -1450,6 +1450,7 @@ function ItemCard:update(dt)
|
||||||
if self.selected and input.m2.pressed then
|
if self.selected and input.m2.pressed then
|
||||||
_G[random:table{'coins1', 'coins2', 'coins3'}]:play{pitch = random:float(0.95, 1.05), volume = 0.5}
|
_G[random:table{'coins1', 'coins2', 'coins3'}]:play{pitch = random:float(0.95, 1.05), volume = 0.5}
|
||||||
self.parent:gain_gold((self.level == 1 and 10) or (self.level == 2 and 20) or (self.level == 3 and 30))
|
self.parent:gain_gold((self.level == 1 and 10) or (self.level == 2 and 20) or (self.level == 3 and 30))
|
||||||
|
table.insert(run_passive_pool, self.passive)
|
||||||
table.remove(self.parent.passives, self.i)
|
table.remove(self.parent.passives, self.i)
|
||||||
input.m2.pressed = false
|
input.m2.pressed = false
|
||||||
self.parent:set_items()
|
self.parent:set_items()
|
||||||
|
|
17
main.lua
17
main.lua
|
@ -1731,16 +1731,15 @@ function init()
|
||||||
'silencing_strike', 'culling_strike', 'lightning_strike', 'psycholeak', 'divine_blessing', 'hardening',
|
'silencing_strike', 'culling_strike', 'lightning_strike', 'psycholeak', 'divine_blessing', 'hardening',
|
||||||
}
|
}
|
||||||
main:add(Arena'arena')
|
main:add(Arena'arena')
|
||||||
main:go_to('arena', 6, 0, {
|
main:go_to('arena', 16, 0, {
|
||||||
{character = 'cleric', level = 1},
|
{character = 'archer', level = 3},
|
||||||
{character = 'priest', level = 3},
|
{character = 'barrager', level = 3},
|
||||||
{character = 'carver', level = 1},
|
{character = 'corruptor', level = 3},
|
||||||
{character = 'psykeeper', level = 1},
|
{character = 'host', level = 3},
|
||||||
{character = 'fairy', level = 3},
|
{character = 'beastmaster', level = 3},
|
||||||
|
{character = 'infestor', level = 3},
|
||||||
}, {
|
}, {
|
||||||
{passive = 'psychosink', level = 3},
|
{passive = 'hive', level = 3},
|
||||||
{passive = 'psyker_orbs', level = 3},
|
|
||||||
{passive = 'awakening', level = 3},
|
|
||||||
})
|
})
|
||||||
]]--
|
]]--
|
||||||
|
|
||||||
|
|
|
@ -95,7 +95,9 @@ function MainMenu:on_enter(from)
|
||||||
'defensive_stance', 'offensive_stance', 'kinetic_bomb', 'porcupine_technique', 'last_stand', 'seeping', 'deceleration', 'annihilation', 'malediction', 'hextouch', 'whispers_of_doom',
|
'defensive_stance', 'offensive_stance', 'kinetic_bomb', 'porcupine_technique', 'last_stand', 'seeping', 'deceleration', 'annihilation', 'malediction', 'hextouch', 'whispers_of_doom',
|
||||||
'tremor', 'heavy_impact', 'fracture', 'meat_shield', 'hive', 'baneling_burst', 'blunt_arrow', 'explosive_arrow', 'divine_machine_arrow', 'chronomancy', 'awakening', 'divine_punishment',
|
'tremor', 'heavy_impact', 'fracture', 'meat_shield', 'hive', 'baneling_burst', 'blunt_arrow', 'explosive_arrow', 'divine_machine_arrow', 'chronomancy', 'awakening', 'divine_punishment',
|
||||||
'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'
|
'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',
|
||||||
}
|
}
|
||||||
gold = run.gold or 3
|
gold = run.gold or 3
|
||||||
passives = run.passives or {}
|
passives = run.passives or {}
|
||||||
|
|
|
@ -69,7 +69,7 @@ function Player:init(args)
|
||||||
self.t:after(0.25, function()
|
self.t:after(0.25, function()
|
||||||
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 + 0.05, volume = math.remap(gold, 0, 50, 0, 0.5)}
|
gambler1:play{pitch = pitch_a + 0.05, volume = math.clamp(math.remap(gold, 0, 50, 0, 0.5), 0, 0.75)}
|
||||||
enemy:hit(2*gold)
|
enemy:hit(2*gold)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
@ -1955,6 +1955,8 @@ Projectile:implement(GameObject)
|
||||||
Projectile:implement(Physics)
|
Projectile:implement(Physics)
|
||||||
function Projectile:init(args)
|
function Projectile: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
|
||||||
self.hfx:add('hit', 1)
|
self.hfx:add('hit', 1)
|
||||||
self:set_as_rectangle(10, 4, 'dynamic', 'projectile')
|
self:set_as_rectangle(10, 4, 'dynamic', 'projectile')
|
||||||
self.pierce = args.pierce or 0
|
self.pierce = args.pierce or 0
|
||||||
|
@ -3852,6 +3854,7 @@ Critter:implement(Unit)
|
||||||
function Critter:init(args)
|
function Critter:init(args)
|
||||||
self:init_game_object(args)
|
self:init_game_object(args)
|
||||||
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(Critter) > 100 then self.dead = true; return end
|
||||||
self:init_unit()
|
self:init_unit()
|
||||||
self:set_as_rectangle(7, 4, 'dynamic', 'player')
|
self:set_as_rectangle(7, 4, 'dynamic', 'player')
|
||||||
self:set_restitution(0.5)
|
self:set_restitution(0.5)
|
||||||
|
|
86
todo
86
todo
|
@ -1,81 +1,13 @@
|
||||||
Loop Update
|
|
||||||
New items:
|
|
||||||
General:
|
|
||||||
* Intimidation - enemies spawn with -10/20/30% max HP
|
|
||||||
* Vulnerability - enemies take +10/20/30% damage
|
|
||||||
* Temporal Chains - enemies are 10/20/30% slower
|
|
||||||
* Ceremonial Dagger - killing an enemy fires a homing dagger
|
|
||||||
* Homing Barrage - 8/16/24% chance to release a homing barrage on enemy kill
|
|
||||||
* Critical Strike - 5/10/15% chance for attacks to critically strike, dealing 2x damage
|
|
||||||
* Noxious Strike - 8/16/24% chance for attacks to poison enemies, dealing 20% dps for 3 seconds
|
|
||||||
* Infesting Strike - 10/20/30% chance for attacks to spawn 2 critters on kill
|
|
||||||
* Kinetic Strike - 10/20/30% chance for attacks to push enemies away with high force
|
|
||||||
* Burning Strike - 15% chance for attacks to ignite, dealing 20% dps for 3 seconds
|
|
||||||
* Lucky Strike - 8% chance for attacks to cause enemies to drop gold on death
|
|
||||||
* Healing Strike - 8% chance for attacks to spawn a healing orb on kill
|
|
||||||
* Stunning Strike - 8/16/24% chance for attacks to stun for 2 seconds
|
|
||||||
* Silencing Strike - 8/16/24% chance for attacks to silence for 4 seconds on hit
|
|
||||||
* Culling Strike - instantly kill elites below 10/20/30% max HP
|
|
||||||
* Lightning Strike - 5/10/15% chance for projectiles to create chain lightning, dealing 60/80/100% damage
|
|
||||||
* Psycholeak - position 1 generates 1 psyker orb every 10 seconds
|
|
||||||
* Divine Blessing - generate 1 healing orb every 8 seconds
|
|
||||||
* Hardening - +150% defense for 3 seconds after an ally dies
|
|
||||||
Psyker
|
|
||||||
* Orb speed scales with the unit's attack speed
|
|
||||||
* Increased default orb range
|
|
||||||
* Decreased default orb speed
|
|
||||||
* Additional psyker orbs will prefer to be assigned to psykers, if there are no psykers then they will be assigned to units randomly
|
|
||||||
* Changed psyker class bonus: +2/4 total orbs
|
|
||||||
* Removed Psychosense
|
|
||||||
* Added Psychosink - psyker orbs deal +40/80/120% damage
|
|
||||||
Healer
|
|
||||||
* Double healing per orb
|
|
||||||
* Fixed heal targetting, now it should always target the lowest HP unit
|
|
||||||
* Healing orbs and gold coins are now slightly attracted to the snake with a weak magnetism effect
|
|
||||||
* Changed healer class bonus: +15/30% chance to create an additional healing orb on healing orb creation
|
|
||||||
* Psykeeper: spawn 3 healing orbs every time the psykeeper takes 25% of max HP in damage
|
|
||||||
Warriors
|
|
||||||
* Decreased sensor range for all warriors, this will make them attack only when enemies are closer and consequently make it so that they hit more enemies in general
|
|
||||||
* Juggernaut and barbarian now only attack when there are enemies nearby
|
|
||||||
Builders
|
|
||||||
* Carver (builder, healer) - creates a tree that creates 1 healing orb every 6 seconds, Lv.3 effect: healing orbs are created twice as fast
|
|
||||||
* Engineer (builder): unchanged
|
|
||||||
* Illusionist -> Artificer (builder, sorcerer): unchanged
|
|
||||||
* Saboteur -> Bomber (builder, nuker): plants a bomb, when it explodes it deals 2X AoE damage, Lv.3 effect: +100% bomb area and damage
|
|
||||||
* Hunter -> Sentry (builder, ranger): spawns a turret that shoots projectiles, each dealing X damage, Lv.3 effect: +50% attack speed and the projectiles ricochet twice
|
|
||||||
Looping
|
|
||||||
* Change end screen
|
|
||||||
* Loop button on end screen
|
|
||||||
* Looping lets you continue with the current snake until you die
|
|
||||||
* Difficulty is increased according to the formula for levels 25+
|
|
||||||
* Snake size goes up by 1 every loop, up to 12
|
|
||||||
* Don't offer items if at maximum items
|
|
||||||
QoL
|
|
||||||
* 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
|
|
||||||
* Party + items on death screen
|
|
||||||
* Silenced units are now gray
|
|
||||||
* Items on end screen
|
|
||||||
* Items on passive screen
|
|
||||||
* Selling items
|
|
||||||
* Decreased sound effect volume for shoot 5
|
|
||||||
Bug fixes
|
|
||||||
* Fixed a series of crashes that happened sometimes right before changing from the arena back to the shop
|
|
||||||
* Fixed merchant not giving interest or free reroll if it died in combat
|
|
||||||
* Fixed shoot 5 and death 6 not working if a unit placed before it on the snake died
|
|
||||||
* Fixed undying unit from lasting 7 being able to become immortal if it was healed during the 10 seconds before it truly died
|
|
||||||
* Fixed a bug where max units wouldn't be properly changed when changing NG difficulty in the menu
|
|
||||||
* Fixed Whispers of Doom applying before curses, now it applies after and triggers their effect when enemies are killed due to it
|
|
||||||
* Fixed mobile users not being able to close the credits screen due to there being no close button
|
|
||||||
* Fixed shop party numbers not being updated when units are bought or sold
|
|
||||||
* Fixed a bug where movement speed would become zero if the game was paused while under the effects of decaying haste
|
|
||||||
* Fixed baneling burst not dealing the correct amount of damage
|
|
||||||
|
|
||||||
|
|
||||||
Weekly maintenance updates:
|
Weekly maintenance updates:
|
||||||
|
|
||||||
|
#1
|
||||||
|
* Fixed several blue screen crashes due to broken looping state
|
||||||
|
* Limited critters to 100 due to performance issues
|
||||||
|
* 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 a bug where the first run would not have certain items in the item pool
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -106,7 +38,7 @@ Assists (2/4) -
|
||||||
Pardoner (tier 3 assist, mercenary) -
|
Pardoner (tier 3 assist, mercenary) -
|
||||||
Oracle (tier 1 assist) - +10% dodge chance to adjacent units, Lv.3 effect - +20% dodge chance to adjacent units
|
Oracle (tier 1 assist) - +10% dodge chance to adjacent units, Lv.3 effect - +20% dodge chance to adjacent units
|
||||||
Seraph (tier 2 assist, healer) - periodically chooses 1 random unit and gives it +100% defense for 6 seconds, Lv.3 - choose 2 units instead
|
Seraph (tier 2 assist, healer) - periodically chooses 1 random unit and gives it +100% defense for 6 seconds, Lv.3 - choose 2 units instead
|
||||||
Passive that makes critters and summons block enemy projectiles
|
Add a few builder units that create walls/solids the player can hide behind (https://www.youtube.com/watch?v=KqwBZ_2f7QU&t=2331s)
|
||||||
Hexblaster? - curser that consumes curses to deal damage
|
Hexblaster? - curser that consumes curses to deal damage
|
||||||
Bench? - https://i.imgur.com/B1gNVKk.png
|
Bench? - https://i.imgur.com/B1gNVKk.png
|
||||||
Balance option for when there are more sets - https://i.imgur.com/JMynwbL.png
|
Balance option for when there are more sets - https://i.imgur.com/JMynwbL.png
|
||||||
|
|
Loading…
Reference in New Issue