From f5b8eaf2a3dc8e4883d3632c9c1820a8126ea913 Mon Sep 17 00:00:00 2001 From: a327ex Date: Sat, 5 Jun 2021 22:43:33 -0300 Subject: [PATCH] Bug fixes --- arena.lua | 2 +- assets/media/sorcerer_cover.png | Bin 0 -> 6463 bytes main.lua | 20 +++++++++++-- player.lua | 16 ++++++---- todo | 51 ++------------------------------ 5 files changed, 31 insertions(+), 58 deletions(-) create mode 100644 assets/media/sorcerer_cover.png diff --git a/arena.lua b/arena.lua index 6d88d67..83d1b69 100644 --- a/arena.lua +++ b/arena.lua @@ -1178,7 +1178,7 @@ function Arena:spawn_n_enemies(p, j, n, pass) spawn1:play{pitch = random:float(0.8, 1.2), volume = 0.15} if not pass then check_circle:move_to(x, y) - local objects = self.main:get_objects_in_shape(check_circle, {Seeker, EnemyCritter, Critter, Player}) + local objects = self.main:get_objects_in_shape(check_circle, {Seeker, EnemyCritter, Critter, Player, Illusion, Volcano, Saboteur, Pet, Turret}) if #objects > 0 then self.enemy_spawns_prevented = self.enemy_spawns_prevented + 1; return end end diff --git a/assets/media/sorcerer_cover.png b/assets/media/sorcerer_cover.png new file mode 100644 index 0000000000000000000000000000000000000000..af60fe9edeb8beb64d6d9eec269f6a428bee422a GIT binary patch literal 6463 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 literal 0 HcmV?d00001 diff --git a/main.lua b/main.lua index 5a8abcc..dd4a53a 100644 --- a/main.lua +++ b/main.lua @@ -1317,15 +1317,22 @@ function init() end -- main_song_instance = _G[random:table{'song1', 'song2', 'song3', 'song4', 'song5'}]:play{volume = 0.5} + main:add(BuyScreen'buy_screen') main:go_to('buy_screen', run.level or 0, run.units or {}, passives) -- main:go_to('buy_screen', 2, run.units or {}, passives) --[[ main:add(Arena'arena') - main:go_to('arena', 1, { - {character = 'dual_gunner', level = 1}, - {character = 'scout', level = 1}, + main:go_to('arena', 21, { + {character = 'arcanist', level = 3}, + {character = 'silencer', level = 2}, + {character = 'warden', level = 2}, + {character = 'chronomancer', level = 1}, + {character = 'witch', level = 2}, + {character = 'illusionist', level = 3}, + {character = 'psychic', level = 2}, + {character = 'vulcanist', level = 2}, }, passives) ]]-- @@ -1345,6 +1352,13 @@ function init() end) print(table.tostring(love.graphics.getSupported())) + print(love.graphics.getRendererInfo()) + local formats = love.graphics.getImageFormats() + for f, s in pairs(formats) do print(f, tostring(s)) end + local canvasformats = love.graphics.getCanvasFormats() + for f, s in pairs(canvasformats) do print(f, tostring(s)) end + print(table.tostring(love.graphics.getSystemLimits())) + print(table.tostring(love.graphics.getStats())) end diff --git a/player.lua b/player.lua index a604244..ab680f1 100644 --- a/player.lua +++ b/player.lua @@ -130,7 +130,9 @@ function Player:init(args) self.t:every(0.25, function() SpawnEffect{group = main.current.effects, x = self.x, y = self.y, color = self.color, action = function(x, y) illusion1:play{pitch = random:float(0.95, 1.05), volume = 0.5} - Illusion{group = main.current.main, x = x, y = y, parent = self, level = self.level, conjurer_buff_m = self.conjurer_buff_m or 1, crit = (self.level == 3) and random:bool(50)} + local check_circle = Circle(self.x, self.y, 2) + local objects = main.current.main:get_objects_in_shape(check_circle, {Seeker, EnemyCritter, Critter, Illusion, Volcano, Saboteur, Pet, Turret}) + if #objects == 0 then Illusion{group = main.current.main, x = x, y = y, parent = self, level = self.level, conjurer_buff_m = self.conjurer_buff_m or 1} end end} if main.current.sorcerer_level > 0 then self.sorcerer_count = self.sorcerer_count + 1 @@ -139,7 +141,9 @@ function Player:init(args) self.t:after(0.25, function() SpawnEffect{group = main.current.effects, x = self.x, y = self.y, color = self.color, action = function(x, y) illusion1:play{pitch = random:float(0.95, 1.05), volume = 0.5} - Illusion{group = main.current.main, x = x, y = y, parent = self, level = self.level, conjurer_buff_m = self.conjurer_buff_m or 1, crit = (self.level == 3) and random:bool(50)} + local check_circle = Circle(self.x, self.y, 2) + local objects = main.current.main:get_objects_in_shape(check_circle, {Seeker, EnemyCritter, Critter, Illusion, Volcano, Saboteur, Pet, Turret}) + if #objects == 0 then Illusion{group = main.current.main, x = x, y = y, parent = self, level = self.level, conjurer_buff_m = self.conjurer_buff_m or 1} end end} end) end @@ -1563,7 +1567,9 @@ function Projectile:init(args) local r = self:angle_to_object(enemy) local t = {group = main.current.main, x = self.x + 8*math.cos(r), y = self.y + 8*math.sin(r), v = 250, r = r, color = self.parent.color, dmg = self.parent.dmg, pierce = 1000, character = 'arcanist_projectile', parent = self.parent, level = self.parent.level} - Projectile(table.merge(t, mods or {})) + local check_circle = Circle(t.x, t.y, 2) + local objects = main.current.main:get_objects_in_shape(check_circle, {Player, Seeker, EnemyCritter, Critter, Illusion, Volcano, Saboteur, Pet, Turret}) + if #objects == 0 then Projectile(table.merge(t, mods or {})) end end end) @@ -2716,12 +2722,12 @@ function Illusion:update(dt) self:seek_point(gw/2, gh/2) self:wander(50, 200, 50) self:rotate_towards_velocity(1) - self:steering_separate(32, {Illusion, Seeker}) + self:steering_separate(32, {Seeker}) else self:seek_point(self.target.x, self.target.y) self:wander(50, 200, 50) self:rotate_towards_velocity(1) - self:steering_separate(32, {Illusion, Seeker}) + self:steering_separate(32, {Seeker}) end self.r = self:get_angle() diff --git a/todo b/todo index cb89687..abbf963 100644 --- a/todo +++ b/todo @@ -1,52 +1,5 @@ -Sorcerer update patch notes -Summary: This update adds 1 new class with 8 new units, implements more QoL features, further balance changes and lots of bug fixes. - Added sorcerer class: sorcerers repeat their attacks once every 4/3/2 attacks - Added 8 new units: - Arcanist (tier 1 sorcerer) - launches a slow piercing orb that launches other piercing projectiles, Lv.3 effect - 50% increased attack speed for the orb and 2 projectiles are released per cast - Illusionist (tier 3 sorcerer, conjurer) - launches a projectile that deals X damage and creates copies that do the same, Lv.3 effect - doubles the number of copies created and they release 12 projectiles on death that pierce and ricochet once - Witch (tier 2 sorcerer, voider) - creates an area that ricochets around the arena and deals X damage over time, Lv.3 effect - the area periodically releases projectiles that chain once - Silencer (tier 2 sorcerer, curser) - curses 6 nearby enemies for 6 seconds, preventing them from using special attacks, Lv.3 effect - the curse also deals X damage over time - Vulcanist (tier 4 sorcerer, nuker) - creates a volcano that explodes the nearby area 4 times, Lv.3 effect - the number and speed of explosions is doubled - Warden (tier 4 sorcerer, forcer) - creates a force field around a random unit that prevents enemies from entering, Lv.3 effect - creates the force field around 2 units instead - Psychic (tier 2 sorcerer, psyker) - creates a small area that deals X damage, Lv.3 effect - the attack can happen from any distance and repeats twice - Magician (tier 1 mage) - creates a small area that deals X damage, Lv.3 effect - the magician becomes invulnerable for 6 seconds - Changed cursers to trigger only when near enemies - Decreased projectile speed for the exploder (blue enemy) - Changed shooters (white enemy) to scale with NG+ difficulty - Increased damage and movement speed for enemy swarmers (small purple enemies) - Added tooltips for "restart run" and "guide" buttons on the shop - Fixed text that was going outside the screen for the Priest and the Assassin - Fixed bug where Divine Punishment would continue triggering after death - Removed cooldown visuals on snake for units that don't have cooldowns (Squire, Chronomancer and Psykeeper) - Slightly decreased base game's difficulty - Fixed NG+ difficulty only being able to be lowered, now you can lower or increase it (up to your maximum acquired value) - Buffed swarmer movement speed - Fixed a visual bug with the cleric, its cooldown was showing as faster than it actually was and thus gave the impression of not healing when it should - Changed Corruptor to tier 4 - Changed Host to tier 3 - Changed Wizard to tier 2 - Removed Lich (will come back in future update) - Added Magician (tier 1 mage) - Change Outlaw to tier 2 - Added Forcer class to Sage - Added Nuker class to Wizard - Change Wizard's Lv.3 effect's chain to 2 (from 3) - Fixed Blade's Lv.3 effect's damage text not being rounded - Fixed headbutter (orange enemy) damage buff lasting too long after an attack - Fixed a crash whenever the Fairy would try to select a unit that just died this or last frame - Fixed a crash that would happen when trying to restart the game through the menu on the passive selection screen - Fixed a bug where you could die and win at the same time - Fixed a crash triggered rarely by infested enemies on death - Fixed a bug where quitting on level 1 would automatically jump to level 2 - Fixed a bug where the shop's lock state would carry over after a run death/win/restart - Fixed a bug where items from a previous restarted run would remain after the 1st round of a new run - Fixed a bug where the leader's (snake head) distance was off by 1 or 2 pixels on certain snake speeds - Added item reroll for 15 gold - Buffed tank (yellow enemy) and added a special attack - Buffed boss HP for levels 18, 24 and 25 (again) - Added an option to have an arrow at the head of the snake - Added an option to turn off camera movement - Slightly decreased enemy damage across all difficulties +Unleash does not affect Witch + ---