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 0000000..af60fe9 Binary files /dev/null and b/assets/media/sorcerer_cover.png differ 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 + ---