Shop update 1/5
|
@ -634,6 +634,7 @@ function Arena:quit()
|
||||||
self.credits_button = Button{group = self.ui, x = gw - 40, y = gh - 44, force_update = true, button_text = 'credits', fg_color = 'bg10', bg_color = 'bg', action = function()
|
self.credits_button = Button{group = self.ui, x = gw - 40, y = gh - 44, force_update = true, button_text = 'credits', fg_color = 'bg10', bg_color = 'bg', action = function()
|
||||||
self:create_credits()
|
self:create_credits()
|
||||||
end}
|
end}
|
||||||
|
--[[
|
||||||
self.restart_button = Button{group = self.ui, x = gw - 40, y = gh - 68, force_update = true, button_text = 'restart', fg_color = 'bg10', bg_color = 'bg', action = function(b)
|
self.restart_button = Button{group = self.ui, x = gw - 40, y = gh - 68, force_update = true, button_text = 'restart', fg_color = 'bg10', bg_color = 'bg', action = function(b)
|
||||||
self.transitioning = true
|
self.transitioning = true
|
||||||
ui_transition2:play{pitch = random:float(0.95, 1.05), volume = 0.5}
|
ui_transition2:play{pitch = random:float(0.95, 1.05), volume = 0.5}
|
||||||
|
@ -657,6 +658,7 @@ function Arena:quit()
|
||||||
main:go_to('buy_screen', 0, {}, passives)
|
main:go_to('buy_screen', 0, {}, passives)
|
||||||
end, text = Text({{text = '[wavy, bg]restarting...', font = pixul_font, alignment = 'center'}}, global_text_tags)}
|
end, text = Text({{text = '[wavy, bg]restarting...', font = pixul_font, alignment = 'center'}}, global_text_tags)}
|
||||||
end}
|
end}
|
||||||
|
]]--
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|
After Width: | Height: | Size: 500 B |
Before Width: | Height: | Size: 911 B |
Before Width: | Height: | Size: 961 B |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 826 B |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 944 B |
After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 875 B |
|
@ -779,9 +779,14 @@ function RerollButton:init(args)
|
||||||
self.text = Text({{text = '[bg10]reroll: [yellow]2', font = pixul_font, alignment = 'center'}}, global_text_tags)
|
self.text = Text({{text = '[bg10]reroll: [yellow]2', font = pixul_font, alignment = 'center'}}, global_text_tags)
|
||||||
elseif self.parent:is(Arena) then
|
elseif self.parent:is(Arena) then
|
||||||
self.shape = Rectangle(self.x, self.y, 60, 16)
|
self.shape = Rectangle(self.x, self.y, 60, 16)
|
||||||
|
if self.parent.level == 3 then
|
||||||
|
self.free_reroll = true
|
||||||
|
self.text = Text({{text = '[bg10]reroll: [yellow]0', font = pixul_font, alignment = 'center'}}, global_text_tags)
|
||||||
|
else
|
||||||
self.text = Text({{text = '[bg10]reroll: [yellow]15', font = pixul_font, alignment = 'center'}}, global_text_tags)
|
self.text = Text({{text = '[bg10]reroll: [yellow]15', font = pixul_font, alignment = 'center'}}, global_text_tags)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
function RerollButton:update(dt)
|
function RerollButton:update(dt)
|
||||||
|
@ -811,7 +816,7 @@ function RerollButton:update(dt)
|
||||||
system.save_run(self.parent.level == 1 and 0 or self.parent.level, gold, self.parent.units, passives, run_passive_pool_by_tiers, locked_state)
|
system.save_run(self.parent.level == 1 and 0 or self.parent.level, gold, self.parent.units, passives, run_passive_pool_by_tiers, locked_state)
|
||||||
end
|
end
|
||||||
elseif self.parent:is(Arena) then
|
elseif self.parent:is(Arena) then
|
||||||
if gold < 15 then
|
if gold < 15 and not self.free_reroll then
|
||||||
self.spring:pull(0.2, 200, 10)
|
self.spring:pull(0.2, 200, 10)
|
||||||
self.selected = true
|
self.selected = true
|
||||||
error1:play{pitch = random:float(0.95, 1.05), volume = 0.5}
|
error1:play{pitch = random:float(0.95, 1.05), volume = 0.5}
|
||||||
|
@ -828,8 +833,10 @@ function RerollButton:update(dt)
|
||||||
self.parent:set_passives(true)
|
self.parent:set_passives(true)
|
||||||
self.selected = true
|
self.selected = true
|
||||||
self.spring:pull(0.2, 200, 10)
|
self.spring:pull(0.2, 200, 10)
|
||||||
gold = gold - 15
|
if not self.free_reroll then gold = gold - 15 end
|
||||||
self.parent.shop_text:set_text{{text = '[fg, nudge_down]gold: [yellow, nudge_down]' .. gold, font = pixul_font, alignment = 'center'}}
|
self.parent.shop_text:set_text{{text = '[fg, nudge_down]gold: [yellow, nudge_down]' .. gold, font = pixul_font, alignment = 'center'}}
|
||||||
|
self.free_reroll = false
|
||||||
|
self.text = Text({{text = '[bg10]reroll: [yellow]15', font = pixul_font, alignment = 'center'}}, global_text_tags)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -851,8 +858,12 @@ function RerollButton:on_mouse_enter()
|
||||||
if self.parent:is(BuyScreen) then
|
if self.parent:is(BuyScreen) then
|
||||||
self.text:set_text{{text = '[fgm5]reroll: 2', font = pixul_font, alignment = 'center'}}
|
self.text:set_text{{text = '[fgm5]reroll: 2', font = pixul_font, alignment = 'center'}}
|
||||||
elseif self.parent:is(Arena) then
|
elseif self.parent:is(Arena) then
|
||||||
|
if self.free_reroll then
|
||||||
|
self.text:set_text{{text = '[fgm5]reroll: 0', font = pixul_font, alignment = 'center'}}
|
||||||
|
else
|
||||||
self.text:set_text{{text = '[fgm5]reroll: 15', font = pixul_font, alignment = 'center'}}
|
self.text:set_text{{text = '[fgm5]reroll: 15', font = pixul_font, alignment = 'center'}}
|
||||||
end
|
end
|
||||||
|
end
|
||||||
self.spring:pull(0.2, 200, 10)
|
self.spring:pull(0.2, 200, 10)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -861,8 +872,12 @@ function RerollButton:on_mouse_exit()
|
||||||
if self.parent:is(BuyScreen) then
|
if self.parent:is(BuyScreen) then
|
||||||
self.text:set_text{{text = '[bg10]reroll: [yellow]2', font = pixul_font, alignment = 'center'}}
|
self.text:set_text{{text = '[bg10]reroll: [yellow]2', font = pixul_font, alignment = 'center'}}
|
||||||
elseif self.parent:is(Arena) then
|
elseif self.parent:is(Arena) then
|
||||||
|
if self.free_reroll then
|
||||||
|
self.text:set_text{{text = '[fgm5]reroll: [yellow]0', font = pixul_font, alignment = 'center'}}
|
||||||
|
else
|
||||||
self.text:set_text{{text = '[fgm5]reroll: [yellow]15', font = pixul_font, alignment = 'center'}}
|
self.text:set_text{{text = '[fgm5]reroll: [yellow]15', font = pixul_font, alignment = 'center'}}
|
||||||
end
|
end
|
||||||
|
end
|
||||||
self.selected = false
|
self.selected = false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1061,7 +1076,7 @@ end
|
||||||
|
|
||||||
function CharacterPart:get_sale_price()
|
function CharacterPart:get_sale_price()
|
||||||
local total = 0
|
local total = 0
|
||||||
total = total + ((self.level == 1 and character_tiers[self.character]) or (self.level == 2 and 2*character_tiers[self.character]) or (self.level == 3 and 6*character_tiers[self.character]))
|
total = total + ((self.level == 1 and character_tiers[self.character]) or (self.level == 2 and 2*character_tiers[self.character]) or (self.level == 3 and 6*character_tiers[self.character]) or 0)
|
||||||
if self.reserve then
|
if self.reserve then
|
||||||
if self.reserve[2] then total = total + self.reserve[2]*character_tiers[self.character]*2 end
|
if self.reserve[2] then total = total + self.reserve[2]*character_tiers[self.character]*2 end
|
||||||
if self.reserve[1] then total = total + self.reserve[1]*character_tiers[self.character] end
|
if self.reserve[1] then total = total + self.reserve[1]*character_tiers[self.character] end
|
||||||
|
|
|
@ -670,7 +670,7 @@ function EnemyCritter:hit(damage, projectile)
|
||||||
-- print(projectile == self.invulnerable_to)
|
-- print(projectile == self.invulnerable_to)
|
||||||
if projectile == self.invulnerable_to then return end
|
if projectile == self.invulnerable_to then return end
|
||||||
self.hfx:use('hit', 0.25, 200, 10)
|
self.hfx:use('hit', 0.25, 200, 10)
|
||||||
self.hp = self.hp - damage
|
self.hp = self.hp - math.max(damage, 0)
|
||||||
self:show_hp()
|
self:show_hp()
|
||||||
if self.hp <= 0 then self:die() end
|
if self.hp <= 0 then self:die() end
|
||||||
end
|
end
|
||||||
|
|
9
main.lua
|
@ -116,6 +116,7 @@ function init()
|
||||||
song5 = Sound('Kubbi - Ember - 05 Compass.ogg', {tags = {music}})
|
song5 = Sound('Kubbi - Ember - 05 Compass.ogg', {tags = {music}})
|
||||||
death_song = Sound('Kubbi - Ember - 09 Formed by Glaciers.ogg', {tags = {music}})
|
death_song = Sound('Kubbi - Ember - 09 Formed by Glaciers.ogg', {tags = {music}})
|
||||||
|
|
||||||
|
lock_image = Image('lock')
|
||||||
speed_booster_elite = Image('speed_booster_elite')
|
speed_booster_elite = Image('speed_booster_elite')
|
||||||
exploder_elite = Image('exploder_elite')
|
exploder_elite = Image('exploder_elite')
|
||||||
swarmer_elite = Image('swarmer_elite')
|
swarmer_elite = Image('swarmer_elite')
|
||||||
|
@ -691,7 +692,7 @@ function init()
|
||||||
['infestor'] = function() return '[fg][yellow]triples[fg] the number of critters released' end,
|
['infestor'] = function() return '[fg][yellow]triples[fg] the number of critters released' end,
|
||||||
['flagellant'] = function() return '[fg]deals [yellow]' .. 2*get_character_stat('flagellant', 3, 'dmg') .. '[fg] damage to all allies and grants [yellow]+12%[fg] damage to all allies per cast' end,
|
['flagellant'] = function() return '[fg]deals [yellow]' .. 2*get_character_stat('flagellant', 3, 'dmg') .. '[fg] damage to all allies and grants [yellow]+12%[fg] damage to all allies per cast' end,
|
||||||
['arcanist'] = function() return '[yellow]+50%[fg] attack speed for the orb and [yellow]2[fg] projectiles are released per cast' end,
|
['arcanist'] = function() return '[yellow]+50%[fg] attack speed for the orb and [yellow]2[fg] projectiles are released per cast' end,
|
||||||
['illusionist'] = function() return '[yellow]doubles[fg] the number of copies created and they release [yellow]12[fg] projectiles on death that pierce and ricochet once' end,
|
['illusionist'] = function() return '[yellow]doubles[fg] the number of copies created and they release [yellow]12[fg] projectiles on death' end,
|
||||||
['witch'] = function() return '[fg]the area periodically releases projectiles, each dealing [yellow]' .. get_character_stat('witch', 3, 'dmg') .. '[fg] damage and chaining once' end,
|
['witch'] = function() return '[fg]the area periodically releases projectiles, each dealing [yellow]' .. get_character_stat('witch', 3, 'dmg') .. '[fg] damage and chaining once' end,
|
||||||
['silencer'] = function() return '[fg]the curse also deals [yellow]' .. get_character_stat('silencer', 3, 'dmg') .. '[fg] damage per second' end,
|
['silencer'] = function() return '[fg]the curse also deals [yellow]' .. get_character_stat('silencer', 3, 'dmg') .. '[fg] damage per second' end,
|
||||||
['vulcanist'] = function() return '[fg]the number and speed of explosions is [yellow]doubled[fg]' end,
|
['vulcanist'] = function() return '[fg]the number and speed of explosions is [yellow]doubled[fg]' end,
|
||||||
|
@ -743,7 +744,7 @@ function init()
|
||||||
['infestor'] = function() return '[light_bg]triples the number of critters released' end,
|
['infestor'] = function() return '[light_bg]triples the number of critters released' end,
|
||||||
['flagellant'] = function() return '[light_bg]deals ' .. 2*get_character_stat('flagellant', 3, 'dmg') .. ' damage to all allies and grants +12% damage to all allies per cast' end,
|
['flagellant'] = function() return '[light_bg]deals ' .. 2*get_character_stat('flagellant', 3, 'dmg') .. ' damage to all allies and grants +12% damage to all allies per cast' end,
|
||||||
['arcanist'] = function() return '[light_bg]+50% attack speed for the orb and 2 projectiles are released per cast' end,
|
['arcanist'] = function() return '[light_bg]+50% attack speed for the orb and 2 projectiles are released per cast' end,
|
||||||
['illusionist'] = function() return '[light_bg]doubles the number of copies created and they release 12 projectiles on death that pierce and ricochet once' end,
|
['illusionist'] = function() return '[light_bg]doubles the number of copies created and they release 12 projectiles on death' end,
|
||||||
['witch'] = function() return '[light_bg]the area periodically releases projectiles, each dealing ' .. get_character_stat('witch', 3, 'dmg') .. ' damage and chaining once' end,
|
['witch'] = function() return '[light_bg]the area periodically releases projectiles, each dealing ' .. get_character_stat('witch', 3, 'dmg') .. ' damage and chaining once' end,
|
||||||
['silencer'] = function() return '[light_bg]the curse also deals ' .. get_character_stat('silencer', 3, 'dmg') .. ' damage per second' end,
|
['silencer'] = function() return '[light_bg]the curse also deals ' .. get_character_stat('silencer', 3, 'dmg') .. ' damage per second' end,
|
||||||
['vulcanist'] = function() return '[light_bg]the number and speed of explosions is doubled' end,
|
['vulcanist'] = function() return '[light_bg]the number and speed of explosions is doubled' end,
|
||||||
|
@ -1320,7 +1321,7 @@ function init()
|
||||||
|
|
||||||
main:add(BuyScreen'buy_screen')
|
main:add(BuyScreen'buy_screen')
|
||||||
main:go_to('buy_screen', run.level or 0, run.units or {}, passives)
|
main:go_to('buy_screen', run.level or 0, run.units or {}, passives)
|
||||||
-- main:go_to('buy_screen', 2, run.units or {}, passives)
|
-- main:go_to('buy_screen', 7, run.units or {}, {'unleash'})
|
||||||
|
|
||||||
--[[
|
--[[
|
||||||
main:add(Arena'arena')
|
main:add(Arena'arena')
|
||||||
|
@ -1351,6 +1352,7 @@ function init()
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
--[[
|
||||||
print(table.tostring(love.graphics.getSupported()))
|
print(table.tostring(love.graphics.getSupported()))
|
||||||
print(love.graphics.getRendererInfo())
|
print(love.graphics.getRendererInfo())
|
||||||
local formats = love.graphics.getImageFormats()
|
local formats = love.graphics.getImageFormats()
|
||||||
|
@ -1359,6 +1361,7 @@ function init()
|
||||||
for f, s in pairs(canvasformats) do print(f, tostring(s)) end
|
for f, s in pairs(canvasformats) do print(f, tostring(s)) end
|
||||||
print(table.tostring(love.graphics.getSystemLimits()))
|
print(table.tostring(love.graphics.getSystemLimits()))
|
||||||
print(table.tostring(love.graphics.getStats()))
|
print(table.tostring(love.graphics.getStats()))
|
||||||
|
]]--
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ function Media:on_enter(from)
|
||||||
self.effects = Group()
|
self.effects = Group()
|
||||||
self.ui = Group()
|
self.ui = Group()
|
||||||
|
|
||||||
graphics.set_background_color(blue2[0])
|
graphics.set_background_color(bg[0])
|
||||||
Text2{group = self.ui, x = gw/2, y = gh/2, lines = {
|
Text2{group = self.ui, x = gw/2, y = gh/2, lines = {
|
||||||
{text = '[fg]SNKRX', font = fat_font, alignment = 'center', height_offset = -15},
|
{text = '[fg]SNKRX', font = fat_font, alignment = 'center', height_offset = -15},
|
||||||
{text = '[fg]sorcerer update', font = pixul_font, alignment = 'center'},
|
{text = '[fg]sorcerer update', font = pixul_font, alignment = 'center'},
|
||||||
|
@ -30,4 +30,6 @@ function Media:draw()
|
||||||
self.main:draw()
|
self.main:draw()
|
||||||
self.effects:draw()
|
self.effects:draw()
|
||||||
self.ui:draw()
|
self.ui:draw()
|
||||||
|
|
||||||
|
lock_image:draw(30, 30, 0, 1, 1, 0, 0, bg[4])
|
||||||
end
|
end
|
||||||
|
|
|
@ -236,6 +236,9 @@ function Unit:calculate_stats(first_run)
|
||||||
self.base_hp = 100 + (current_new_game_plus*5) + (90 + current_new_game_plus*10)*y[x]
|
self.base_hp = 100 + (current_new_game_plus*5) + (90 + current_new_game_plus*10)*y[x]
|
||||||
self.base_dmg = (12 + current_new_game_plus*2) + (2 + current_new_game_plus)*y[x]
|
self.base_dmg = (12 + current_new_game_plus*2) + (2 + current_new_game_plus)*y[x]
|
||||||
self.base_mvspd = 35 + 1.5*y[x]
|
self.base_mvspd = 35 + 1.5*y[x]
|
||||||
|
if x == 25 then
|
||||||
|
self.base_mvspd = 35 + 1.2*y[x]
|
||||||
|
end
|
||||||
else
|
else
|
||||||
local x = self.level
|
local x = self.level
|
||||||
local y = {0, 1, 3, 3, 4, 6, 5, 6, 9, 7, 8, 12, 10, 11, 15, 12, 13, 18, 16, 17, 21, 17, 20, 24, 25}
|
local y = {0, 1, 3, 3, 4, 6, 5, 6, 9, 7, 8, 12, 10, 11, 15, 12, 13, 18, 16, 17, 21, 17, 20, 24, 25}
|
||||||
|
@ -250,6 +253,9 @@ function Unit:calculate_stats(first_run)
|
||||||
self.base_hp = 100 + (current_new_game_plus*5) + (90 + current_new_game_plus*10)*y[x]
|
self.base_hp = 100 + (current_new_game_plus*5) + (90 + current_new_game_plus*10)*y[x]
|
||||||
self.base_dmg = (12 + current_new_game_plus*2) + (2 + current_new_game_plus)*y[x]
|
self.base_dmg = (12 + current_new_game_plus*2) + (2 + current_new_game_plus)*y[x]
|
||||||
self.base_mvspd = 35 + 1.5*y[x]
|
self.base_mvspd = 35 + 1.5*y[x]
|
||||||
|
if x == 25 then
|
||||||
|
self.base_mvspd = 35 + 1.2*y[x]
|
||||||
|
end
|
||||||
else
|
else
|
||||||
local x = self.level
|
local x = self.level
|
||||||
local y = {0, 1, 3, 3, 4, 6, 5, 6, 9, 7, 8, 12, 10, 11, 15, 12, 13, 18, 16, 17, 21, 17, 20, 24, 25}
|
local y = {0, 1, 3, 3, 4, 6, 5, 6, 9, 7, 8, 12, 10, 11, 15, 12, 13, 18, 16, 17, 21, 17, 20, 24, 25}
|
||||||
|
|
95
todo
|
@ -1,4 +1,69 @@
|
||||||
Unleash does not affect Witch
|
Shop Update
|
||||||
|
New units
|
||||||
|
Assists (2/4) - +25/50% assist buff effectiveness
|
||||||
|
Ringmaster (tier 4 assist, nuker)
|
||||||
|
Absorber (tier 2 assist, warrior)
|
||||||
|
Pardoner (tier 3 assist, mercenary)
|
||||||
|
Oracle (tier 1 assist)
|
||||||
|
Seraph (tier 2 assist, healer)
|
||||||
|
Mercenaries (3/3) - enemies occasionally drop pieces of gold
|
||||||
|
Treasure Hunter (tier 1 mercenary)
|
||||||
|
Merchant (tier 2 mercenary)
|
||||||
|
Pardoner (tier 3 assist, mercenary)
|
||||||
|
Gambler (tier 4 mercenary, rogue)
|
||||||
|
|
||||||
|
Shop changes
|
||||||
|
Owned units highlighted in shop
|
||||||
|
Fix highlight colors and highlight reserve
|
||||||
|
Shop level up
|
||||||
|
|
||||||
|
QoL
|
||||||
|
* Added sorcerer achievement
|
||||||
|
* Removed restart button from end screen
|
||||||
|
* First item reroll is now free
|
||||||
|
Gold is given right after the round ends in the arena rather than on the shop for easier item rerolls
|
||||||
|
Show hero HP
|
||||||
|
Endless mode
|
||||||
|
Remove level 3 units from rotation
|
||||||
|
Hide cursor during waves
|
||||||
|
Mouse follow control
|
||||||
|
Volume slider
|
||||||
|
Options menu from buy screen
|
||||||
|
Add visuals for defensive ouroboros, divine intervention, fairy buff
|
||||||
|
|
||||||
|
Balance
|
||||||
|
* Decreased level 25 boss movement speed
|
||||||
|
|
||||||
|
Bug fixes
|
||||||
|
* Fixed a crash when too many illusions would be spawned in short succession
|
||||||
|
* Fixed a bug where enemy critters would sometimes be unkillable
|
||||||
|
* Fixed text for the illusionist's Lv.3 effect going outside the screen
|
||||||
|
* Fixed a rare crash when hovering over your owned in the shop
|
||||||
|
Fix a crash when warden's force field would spawn on top of enemies
|
||||||
|
Fix enemies still spawning after arena clear (this happens with the extra enemy spawns that were blocked earlier)
|
||||||
|
Fix fullscreen with different resolutions that don't scale properly
|
||||||
|
https://i.imgur.com/Lxu8skX.png
|
||||||
|
https://i.imgur.com/mnivI4d.png
|
||||||
|
|
||||||
|
Sacrifice Update
|
||||||
|
New mechanics
|
||||||
|
Sacrifice units to level items up
|
||||||
|
New items
|
||||||
|
Reworked items
|
||||||
|
Items shouldn't just be more powerful versions of other items
|
||||||
|
Items should have drawbacks
|
||||||
|
Items that apply to a position on the snake (a good middle step between applying them to individual units like in Underlords)
|
||||||
|
New units
|
||||||
|
Nocturnals/Darks/??? (3/6)
|
||||||
|
Shadowmancer
|
||||||
|
Necromancer
|
||||||
|
Demonologist
|
||||||
|
Demon
|
||||||
|
Lich
|
||||||
|
Lifestealer
|
||||||
|
Zombie
|
||||||
|
QoL
|
||||||
|
Current items visible on item selection screen
|
||||||
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
@ -17,20 +82,24 @@ 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
|
||||||
Negative effect: colliding with yourself kills one of your units
|
Negative effect: colliding with yourself kills one of your units
|
||||||
Go through this later https://i.imgur.com/4t7NA32.png <- lots of good improvements
|
Go through this later https://i.imgur.com/4t7NA32.png <- lots of good improvements
|
||||||
Remove level 3 units from rotation
|
|
||||||
Hide cursor during waves
|
|
||||||
Mouse follow control?
|
|
||||||
Visuals for divine intervertion, fairy buff
|
|
||||||
Fix enemies still spawning after arena clear (this happens with the extra enemy spawns that were blocked earlier)
|
|
||||||
Fix highlight colors and highlight reserve
|
|
||||||
Add visuals for defensive ouroboros
|
|
||||||
Options menu from buy screen
|
|
||||||
Volume slider
|
|
||||||
Fix fullscreen with different resolutions that don't scale properly
|
|
||||||
|
|
||||||
Roguelite update:
|
Roguelite update:
|
||||||
Hades-like no map system, this is more elegant and requires way less work than something like Isaac or StS
|
Technical improvements:
|
||||||
Units die permanently when they die
|
Spawn tech: spawn every entity in a grid, before spawning check to see if grid position is clear, this will prevent any issues due to entities spawning inside one another
|
||||||
|
Battle stats: DPS, damage taken, etc
|
||||||
|
Key rebinding (for non-QWERTY keyboards)
|
||||||
|
StS-like map with nodes, node types:
|
||||||
|
Arena
|
||||||
|
Elite
|
||||||
|
Boss
|
||||||
|
Map (map of bigger size than arena with fixed spawns)
|
||||||
|
Unit shop
|
||||||
|
Item shop
|
||||||
|
Text + reward
|
||||||
|
Training grounds (upgrade unit)
|
||||||
|
Tavern (heal units)
|
||||||
|
|
||||||
|
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
|
Units can have items attached to them like in Underlords
|
||||||
Unit item ideas:
|
Unit item ideas:
|
||||||
This unit's projectiles pierce/chain/fork/seek/split/stun/etc
|
This unit's projectiles pierce/chain/fork/seek/split/stun/etc
|
||||||
|
|