Day 49
parent
310a960fea
commit
2e51b7b9fb
Binary file not shown.
After Width: | Height: | Size: 436 B |
Before Width: | Height: | Size: 367 B After Width: | Height: | Size: 367 B |
Binary file not shown.
After Width: | Height: | Size: 453 B |
Binary file not shown.
After Width: | Height: | Size: 397 B |
Binary file not shown.
After Width: | Height: | Size: 362 B |
|
@ -442,7 +442,7 @@ function CharacterPart:on_mouse_enter()
|
|||
self.info_text:activate({
|
||||
{text = '[' .. character_color_strings[self.character] .. ']' .. self.character:capitalize() .. '[fg] - [yellow]Lv.' .. self.level .. '[fg] - sells for [yellow]' .. self:get_sale_price(),
|
||||
font = pixul_font, alignment = 'center', height_multiplier = 1.25},
|
||||
{text = character_descriptions[self.character](get_character_stat(self.character, self.level, 'dmg')), font = pixul_font, alignment = 'center'},
|
||||
{text = character_descriptions[self.character](self.level), font = pixul_font, alignment = 'center'},
|
||||
}, nil, nil, nil, nil, 16, 4, nil, 2)
|
||||
self.info_text.x, self.info_text.y = gw/2, gh/2 + 10
|
||||
end
|
||||
|
|
11
devlog.md
11
devlog.md
|
@ -588,8 +588,6 @@ Whatever way it goes, here's my plan for what to do until release:
|
|||
|
||||
## Formatted Class/Character Data
|
||||
|
||||
The game reflects this data and not the other way around.
|
||||
|
||||
### Character Classes and Descriptions
|
||||
|
||||
| Character | Classes | Description |
|
||||
|
@ -789,3 +787,12 @@ Added a spawn marker so that it's easier for the player to tell where enemies ar
|
|||
* Exploder - explodes enemies into projectiles
|
||||
* Forcer - pulls enemies together into a point and pushes them out
|
||||
* Randomizer - randomly does the 4 ones above
|
||||
|
||||
# Day 47-48 - 04-05/04/21
|
||||
|
||||
Nothing.
|
||||
|
||||
# Day 49 - 06/04/21
|
||||
|
||||
Updated all tables with text descriptions as well as stats and overall gameplay numbers for all classes and characters.
|
||||
Tomorrow I start implementing the remaining 4 classes and 20 characters as well as revising the existing ones.
|
||||
|
|
355
main.lua
355
main.lua
|
@ -98,7 +98,11 @@ function init()
|
|||
nuker = Image('nuker')
|
||||
conjurer = Image('conjurer')
|
||||
enchanter = Image('enchanter')
|
||||
psy = Image('psy')
|
||||
psyker = Image('psyker')
|
||||
trapper = Image('trapper')
|
||||
forcer = Image('forcer')
|
||||
swarmer = Image('swarmer')
|
||||
voider = Image('voider')
|
||||
|
||||
class_colors = {
|
||||
['warrior'] = yellow[0],
|
||||
|
@ -106,10 +110,14 @@ function init()
|
|||
['healer'] = green[0],
|
||||
['conjurer'] = orange[0],
|
||||
['mage'] = blue[0],
|
||||
['nuker'] = purple[0],
|
||||
['nuker'] = red[0],
|
||||
['rogue'] = red[0],
|
||||
['enchanter'] = blue[0],
|
||||
['psy'] = fg[0],
|
||||
['psyker'] = fg[0],
|
||||
['trapper'] = orange[0],
|
||||
['forcer'] = yellow[0],
|
||||
['swarmer'] = purple[0],
|
||||
['voider'] = purple[0],
|
||||
}
|
||||
|
||||
class_color_strings = {
|
||||
|
@ -118,10 +126,14 @@ function init()
|
|||
['healer'] = 'green',
|
||||
['conjurer'] = 'orange',
|
||||
['mage'] = 'blue',
|
||||
['nuker'] = 'purple',
|
||||
['nuker'] = 'red',
|
||||
['rogue'] = 'red',
|
||||
['enchanter'] = 'blue',
|
||||
['psy'] = 'fg',
|
||||
['psyker'] = 'fg',
|
||||
['trapper'] = 'orange',
|
||||
['forcer'] = 'yellow',
|
||||
['swarmer'] = 'purple',
|
||||
['voider'] = 'purple',
|
||||
}
|
||||
|
||||
character_colors = {
|
||||
|
@ -136,7 +148,7 @@ function init()
|
|||
['elementor'] = blue[0],
|
||||
['saboteur'] = orange[0],
|
||||
['stormweaver'] = blue[0],
|
||||
['sage'] = purple[0],
|
||||
['sage'] = red[0],
|
||||
['squire'] = yellow[0],
|
||||
['cannoneer'] = orange[0],
|
||||
['dual_gunner'] = green[0],
|
||||
|
@ -145,6 +157,27 @@ function init()
|
|||
['spellblade'] = blue[0],
|
||||
['psykeeper'] = fg[0],
|
||||
['engineer'] = orange[0],
|
||||
['plague_doctor'] = purple[0],
|
||||
['fisherman'] = yellow[0],
|
||||
['juggernaut'] = yellow[0],
|
||||
['lich'] = blue[0],
|
||||
['cryomancer'] = blue[0],
|
||||
['pyromancer'] = red[0],
|
||||
['corruptor'] = purple[0],
|
||||
['beastmaster'] = red[0],
|
||||
['launcher'] = orange[0],
|
||||
['spiker'] = orange[0],
|
||||
['assassin'] = purple[0],
|
||||
['host'] = purple[0],
|
||||
['carver'] = green[0],
|
||||
['bane'] = purple[0],
|
||||
['psykino'] = fg[0],
|
||||
['arbalester'] = green[0],
|
||||
['barbarian'] = yellow[0],
|
||||
['sapper'] = blue[0],
|
||||
['priest'] = green[0],
|
||||
['burrower'] = orange[0],
|
||||
['flagellant'] = red[0],
|
||||
}
|
||||
|
||||
character_color_strings = {
|
||||
|
@ -159,7 +192,7 @@ function init()
|
|||
['elementor'] = 'blue',
|
||||
['saboteur'] = 'orange',
|
||||
['stormweaver'] = 'blue',
|
||||
['sage'] = 'purple',
|
||||
['sage'] = 'red',
|
||||
['squire'] = 'yellow',
|
||||
['cannoneer'] = 'orange',
|
||||
['dual_gunner'] = 'green',
|
||||
|
@ -168,10 +201,31 @@ function init()
|
|||
['spellblade'] = 'blue',
|
||||
['psykeeper'] = 'fg',
|
||||
['engineer'] = 'orange',
|
||||
['plague_doctor'] = 'purple',
|
||||
['fisherman'] = 'yellow',
|
||||
['juggernaut'] = 'yellow',
|
||||
['lich'] = 'blue',
|
||||
['cryomancer'] = 'blue',
|
||||
['pyromancer'] = 'red',
|
||||
['corruptor'] = 'purple',
|
||||
['beastmaster'] = 'red',
|
||||
['launcher'] = 'orange',
|
||||
['spiker'] = 'orange',
|
||||
['assassin'] = 'purple',
|
||||
['host'] = 'purple',
|
||||
['carver'] = 'green',
|
||||
['bane'] = 'purple',
|
||||
['psykino'] = 'fg',
|
||||
['arbalester'] = 'green',
|
||||
['barbarian'] = 'yellow',
|
||||
['sapper'] = 'blue',
|
||||
['priest'] = 'green',
|
||||
['burrower'] = 'orange',
|
||||
['flagellant'] = 'red',
|
||||
}
|
||||
|
||||
character_classes = {
|
||||
['vagrant'] = {'ranger', 'warrior', 'psy'},
|
||||
['vagrant'] = {'psyker', 'ranger', 'warrior'},
|
||||
['swordsman'] = {'warrior'},
|
||||
['wizard'] = {'mage'},
|
||||
['archer'] = {'ranger'},
|
||||
|
@ -182,45 +236,90 @@ function init()
|
|||
['elementor'] = {'mage', 'nuker'},
|
||||
['saboteur'] = {'rogue', 'conjurer', 'nuker'},
|
||||
['stormweaver'] = {'enchanter'},
|
||||
['sage'] = {'mage', 'nuker'},
|
||||
['squire'] = {'warrior', 'healer', 'enchanter'},
|
||||
['sage'] = {'nuker'},
|
||||
['squire'] = {'warrior', 'enchanter'},
|
||||
['cannoneer'] = {'ranger', 'nuker'},
|
||||
['dual_gunner'] = {'ranger', 'rogue'},
|
||||
['hunter'] = {'ranger', 'conjurer'},
|
||||
['hunter'] = {'ranger', 'conjurer', 'forcer'},
|
||||
['chronomancer'] = {'mage', 'enchanter'},
|
||||
['spellblade'] = {'mage', 'rogue'},
|
||||
['psykeeper'] = {'healer', 'psy'},
|
||||
['psykeeper'] = {'healer', 'psyker'},
|
||||
['engineer'] = {'conjurer'},
|
||||
['plague_doctor'] = {'nuker', 'voider'},
|
||||
['fisherman'] = {'trapper', 'warrior'},
|
||||
['juggernaut'] = {'forcer', 'warrior'},
|
||||
['lich'] = {'mage'},
|
||||
['cryomancer'] = {'mage', 'voider'},
|
||||
['pyromancer'] = {'mage', 'nuker', 'voider'},
|
||||
['corruptor'] = {'ranger', 'swarmer'},
|
||||
['beastmaster'] = {'rogue', 'swarmer'},
|
||||
['launcher'] = {'trapper', 'forcer'},
|
||||
['spiker'] = {'trapper', 'rogue'},
|
||||
['assassin'] = {'rogue', 'voider'},
|
||||
['host'] = {'conjurer', 'swarmer'},
|
||||
['carver'] = {'conjurer', 'healer'},
|
||||
['bane'] = {'swarmer', 'voider'},
|
||||
['psykino'] = {'mage', 'psyker', 'forcer'},
|
||||
['arbalester'] = {'ranger', 'forcer'},
|
||||
['barbarian'] = {'warrior'},
|
||||
['sapper'] = {'trapper', 'enchanter', 'healer'},
|
||||
['priest'] = {'healer'},
|
||||
['burrower'] = {'trapper', 'swarmer'},
|
||||
['flagellant'] = {'psyker', 'enchanter'},
|
||||
}
|
||||
|
||||
character_descriptions = {
|
||||
['vagrant'] = function(dmg) return '[fg]shoots a projectile that deals [yellow]' .. dmg .. '[fg] damage' end,
|
||||
['swordsman'] = function(dmg) return '[fg]deals [yellow]' .. dmg .. '[fg] damage in an area around the unit' end,
|
||||
['wizard'] = function(dmg) return '[fg]shoots a projectile that deals [yellow]' .. dmg .. ' AoE[fg] damage' end,
|
||||
['archer'] = function(dmg) return '[fg]shoots an arrow that deals [yellow]' .. dmg .. '[fg] damage and pierces' end,
|
||||
['scout'] = function(dmg) return '[fg]throws a knife that deals [yellow]' .. dmg .. '[fg] damage and chains [yellow]3[fg] times' end,
|
||||
['cleric'] = function() return '[fg]heals every unit for [yellow]10%[fg] max hp when any one drops below [yellow]50%[fg] max hp' end,
|
||||
['outlaw'] = function(dmg) return '[fg]throws a fan of [yellow]5[] knives, each dealing [yellow]' .. dmg .. '[fg] damage' end,
|
||||
['blade'] = function(dmg) return '[fg]throws multiple blades that deal [yellow]' .. dmg .. ' AoE[fg] damage' end,
|
||||
['elementor'] = function(dmg) return '[fg]deals [yellow]' .. dmg .. ' AoE[fg] damage to a random target' end,
|
||||
['saboteur'] = function(dmg) return '[fg]calls [yellow]2[] saboteurs to seek targets and deal [yellow]' .. dmg .. ' AoE[fg] damage' end,
|
||||
['stormweaver'] = function(dmg) return '[fg]infuses all allied projectiles with chain lightning that deals [yellow]+' .. dmg .. '[fg] damage on hit' end,
|
||||
['sage'] = function(dmg) return '[fg]shoots a slow projectile that draws enemies in' end,
|
||||
['squire'] = function(dmg) return '[yellow]+10 dmg[fg] & [yellow]+25 def[fg] to adjacent units, heal them for [yellow]10%[fg] max hp every 8 seconds' end,
|
||||
['cannoneer'] = function(dmg) return '[fg]shoots a projectile that deals [yellow]' .. dmg .. ' AoE[fg] damage' end,
|
||||
['dual_gunner'] = function() return '[fg]shoots two parallel projectiles' end,
|
||||
['hunter'] = function(dmg) return '[fg]shoots an arrow that deals [yellow]' .. dmg .. '[fg] damage and has a [yellow]20%[fg] chance to summon a pet' end,
|
||||
['chronomancer'] = function() return '[yellow]+25% aspd[fg] to adjacent units' end,
|
||||
['spellblade'] = function(dmg) return '[fg]throws knives that deal [yellow]' .. dmg .. '[fg] damage, pierce and spiral outwards' end,
|
||||
['psykeeper'] = function() return '[fg]all damage taken is stored and distributed as healing to all allies' end,
|
||||
['engineer'] = function(dmg) return '[fg]drops sentries that shoot bursts of projectiles, each dealing [yellow]' .. dmg .. '[fg] damage' end,
|
||||
['vagrant'] = function(lvl) return '[fg]shoots a projectile that deals [yellow]' .. get_character_stat('vagrant', lvl, 'dmg') .. '[fg] damage' end,
|
||||
['swordsman'] = function(lvl) return '[fg]deals [yellow]' .. get_character_stat('swordsman', lvl, 'dmg') .. '[fg] damage in an area around the unit, deals extra [yellow]' ..
|
||||
math.round(get_character_stat('swordsman', lvl, 'dmg')/3, 2) .. '[fg] damage per unit hit' end,
|
||||
['wizard'] = function(lvl) return '[fg]shoots a projectile that deals [yellow]' .. get_character_stat('wizard', lvl, 'dmg') .. ' AoE[fg] damage' end,
|
||||
['archer'] = function(lvl) return '[fg]shoots an arrow that deals [yellow]' .. get_character_stat('archer', lvl, 'dmg') .. '[fg] damage and pierces' end,
|
||||
['scout'] = function(lvl) return '[fg]throws a knife that deals [yellow]' .. get_character_stat('scout', lvl, 'dmg') .. '[fg] damage and chains [yellow]3[fg] times' end,
|
||||
['cleric'] = function(lvl) return '[fg]heals a unit for [yellow]20%[fg] of its max hp when it drops below [yellow]50%[fg] max hp' end,
|
||||
['outlaw'] = function(lvl) return '[fg]throws a fan of [yellow]5[] knives, each dealing [yellow]' .. get_character_stat('outlaw', lvl, 'dmg') .. '[fg] damage' end,
|
||||
['blade'] = function(lvl) return '[fg]throws multiple blades that deal [yellow]' .. get_character_stat('blade', lvl, 'dmg') .. ' AoE[fg] damage' end,
|
||||
['elementor'] = function(lvl) return '[fg]deals [yellow]' .. get_character_stat('elementor', lvl, 'dmg') .. ' AoE[fg] damage in a large area centered on a random target' end,
|
||||
['saboteur'] = function(lvl) return '[fg]calls [yellow]2[] saboteurs to seek targets and deal [yellow]' .. get_character_stat('saboteur', lvl, 'dmg') .. ' AoE[fg] damage' end,
|
||||
['stormweaver'] = function(lvl) return '[fg]infuses all allied projectiles with chain lightning that deals [yellow]+20%[fg] damage on hit' end,
|
||||
['sage'] = function(lvl) return '[fg]shoots a slow projectile that draws enemies in' end,
|
||||
['squire'] = function(lvl) return '[yellow]+10% damage and defense to all allies' end,
|
||||
['cannoneer'] = function(lvl) return '[fg]shoots a projectile that deals [yellow]' .. get_character_stat('cannoneer', lvl, 'dmg') .. ' AoE[fg] damage' end,
|
||||
['dual_gunner'] = function(lvl) return '[fg]shoots two parallel projectiles' end,
|
||||
['hunter'] = function(lvl) return '[fg]shoots an arrow that deals [yellow]' .. get_character_stat('hunter', lvl, 'dmg') .. '[fg] damage and has a [yellow]20%[fg] chance to summon a pet' end,
|
||||
['chronomancer'] = function(lvl) return '[yellow]+20% attack speed[fg] to all allies' end,
|
||||
['spellblade'] = function(lvl) return '[fg]throws knives that deal [yellow]' .. get_character_stat('spellblade', lvl, 'dmg') .. '[fg] damage, pierce and spiral outwards' end,
|
||||
['psykeeper'] = function(lvl) return '[fg]all damage taken is stored up to [yellow]50%[fg] max HP and distributed as healing to all allies' end,
|
||||
['engineer'] = function(lvl) return '[fg]drops sentries that shoot bursts of projectiles, each dealing [yellow]' .. get_character_stat('engineer', lvl, 'dmg') .. '[fg] damage' end,
|
||||
['plague_doctor'] = function(lvl) return '[fg]creates an area that deals [yellow]' .. get_character_stat('plague_doctor', lvl, 'dot_dmg') .. '[fg] damage per second' end,
|
||||
['fisherman'] = function(lvl) return '[fg]throws a net that entangles enemies and prevents them from moving for [yellow]2[fg] seconds' end,
|
||||
['juggernaut'] = function(lvl) return '[fg]creates a small area that deals [yellow]' .. get_character_stat('juggernaut', lvl, 'dmg') .. '[fg] damage and pushes enemies away with a strong force' end,
|
||||
['lich'] = function(lvl) return '[fg]launches a chain frost that jumps [yellow]7[fg] times, dealing [yellow]' ..
|
||||
get_character_stat('lich', lvl, 'dmg') .. '[fg] damage and slowing enemies by [yellow]50%[fg] for [yellow]2[fg] seconds on hit' end,
|
||||
['cryomancer'] = function(lvl) return '[fg]nearby enemies take [yellow]' .. get_character_stat('cryomancer', lvl, 'dmg') .. '[fg] damage per second and have [yellow]25%[fg] decreased movement speed' end,
|
||||
['pyromancer'] = function(lvl) return '[fg]nearby enemies take [yellow]' .. get_character_stat('pyromancer', lvl, 'dmg') .. '[fg] damage per second and deal [yellow]25%[fg] decreased damage' end,
|
||||
['corruptor'] = function(lvl) return '[fg]spawn [yellow]3[fg] small critters if the corruptor kills an enemy' end,
|
||||
['beastmaster'] = function(lvl) return '[fg]spawn [yellow]2[fg] small critters if the beastmaster crits' end,
|
||||
['launcher'] = function(lvl) return '[fg]creates a trap that launches enemies that trigger it' end,
|
||||
['spiker'] = function(lvl) return '[fg]creates a trap that crits when triggered, dealing [yellow]' .. 4*get_character_stat('spiker', lvl, 'dmg') .. '[fg] damage' end,
|
||||
['assassin'] = function(lvl) return '[fg]throws a piercing knife that deals [yellow]' .. get_character_stat('assassin', lvl, 'dmg') .. '[fg] damage and inflicts poison that deals [yellow]' ..
|
||||
get_character_stat('assassin', lvl, 'dot_dmg') .. '[fg] damage per second for [yellow]2[fg] seconds' end,
|
||||
['host'] = function(lvl) return '[fg]creates [yellow]2[fg] overlords that periodically spawn small critters' end,
|
||||
['carver'] = function(lvl) return '[fg]carves a statue that periodically heals for [yellow]20%[fg] max HP in an area around it' end,
|
||||
['bane'] = function(lvl) return '[fg]spawn a small critter that explodes and deals [yellow]' .. get_character_stat('bane', lvl, 'dot_dmg') .. '[fg] damage per second in an area' end,
|
||||
['psykino'] = function(lvl) return '[fg]quickly pulls enemies together and then release them with a force' end,
|
||||
['arbalester'] = function(lvl) return '[fg]launches a massive arrow that deals [yellow]' .. get_character_stat('arbalester', lvl, 'dmg') .. '[fg] damage and pushes enemies back, ignoring knockback resistances' end,
|
||||
['barbarian'] = function(lvl) return '[fg]creates a small area that deals [yellow]' .. 4*get_character_stat('barbarian', lvl, 'dmg') .. '[fg] damage and stuns for [yellow]2[fg] seconds' end,
|
||||
['sapper'] = function(lvl) return '[fg]creates a trap that steals [yellow]10%[fg] enemy HP and grants you [yellow]+25%[fg] movement speed' end,
|
||||
['priest'] = function(lvl) return '[fg]heals all allies for [yellow]20%[fg] their max HP' end,
|
||||
['burrower'] = function(lvl) return '[fg]creates a trap that contains [yellow]6[fg] small critters' end,
|
||||
['flagellant'] = function(lvl) return '[fg]deals damage to self and grants +20% damage to all allies' end,
|
||||
}
|
||||
|
||||
get_character_stat_string = function(character, level)
|
||||
local group = Group():set_as_physics_world(32, 0, 0, {'player', 'enemy', 'projectile', 'enemy_projectile'})
|
||||
local mock = Player{group = group, leader = true, character = character, level = level, follower_index = 1}
|
||||
mock:update(0)
|
||||
return '[red]HP: [red]' .. mock.max_hp .. '[fg], [red]DMG: [red]' .. mock.dmg .. '[fg], [green]ASPD: [green]' .. math.round(mock.aspd_m, 2) .. 'x[fg], [blue]AREA: [blue]' ..
|
||||
return '[red]HP: [red]' .. mock.max_hp .. '[fg], [red]DMG: [red]' .. mock.dmg .. '[fg], [purple]DOT DMG: [purple]' .. mock.dot_dmg .. '[fg], [green]ASPD: [green]' .. math.round(mock.aspd_m, 2) .. 'x[fg], [blue]AREA: [blue]' ..
|
||||
math.round(mock.area_dmg_m*mock.area_size_m, 2) .. 'x[fg], [yellow]DEF: [yellow]' .. math.round(mock.def, 2) .. '[fg], [green]MVSPD: [green]' .. math.round(mock.v, 2) .. '[fg]'
|
||||
end
|
||||
|
||||
|
@ -252,42 +351,72 @@ function init()
|
|||
['spellblade'] = function(lvl) return get_character_stat_string('spellblade', lvl) end,
|
||||
['psykeeper'] = function(lvl) return get_character_stat_string('psykeeper', lvl) end,
|
||||
['engineer'] = function(lvl) return get_character_stat_string('engineer', lvl) end,
|
||||
['plague_doctor'] = function(lvl) return get_character_stat_string('plague_doctor', lvl) end,
|
||||
['fisherman'] = function(lvl) return get_character_stat_string('fisherman', lvl) end,
|
||||
['juggernaut'] = function(lvl) return get_character_stat_string('juggernaut', lvl) end,
|
||||
['lich'] = function(lvl) return get_character_stat_string('lich', lvl) end,
|
||||
['cryomancer'] = function(lvl) return get_character_stat_string('cryomancer', lvl) end,
|
||||
['pyromancer'] = function(lvl) return get_character_stat_string('pyromancer', lvl) end,
|
||||
['corruptor'] = function(lvl) return get_character_stat_string('corruptor', lvl) end,
|
||||
['beastmaster'] = function(lvl) return get_character_stat_string('beastmaster', lvl) end,
|
||||
['launcher'] = function(lvl) return get_character_stat_string('launcher', lvl) end,
|
||||
['spiker'] = function(lvl) return get_character_stat_string('spiker', lvl) end,
|
||||
['assassin'] = function(lvl) return get_character_stat_string('assassin', lvl) end,
|
||||
['host'] = function(lvl) return get_character_stat_string('host', lvl) end,
|
||||
['carver'] = function(lvl) return get_character_stat_string('carver', lvl) end,
|
||||
['bane'] = function(lvl) return get_character_stat_string('bane', lvl) end,
|
||||
['psykino'] = function(lvl) return get_character_stat_string('psykino', lvl) end,
|
||||
['arbalester'] = function(lvl) return get_character_stat_string('arbalester', lvl) end,
|
||||
['barbarian'] = function(lvl) return get_character_stat_string('barbarian', lvl) end,
|
||||
['sapper'] = function(lvl) return get_character_stat_string('sapper', lvl) end,
|
||||
['priest'] = function(lvl) return get_character_stat_string('priest', lvl) end,
|
||||
['burrower'] = function(lvl) return get_character_stat_string('burrower', lvl) end,
|
||||
['flagellant'] = function(lvl) return get_character_stat_string('flagellant', lvl) end,
|
||||
}
|
||||
|
||||
class_stat_multipliers = {
|
||||
['warrior'] = {hp = 1.4, dmg = 1.1, aspd = 0.9, area_dmg = 1, area_size = 1, def = 1.25, mvspd = 0.9},
|
||||
['ranger'] = {hp = 1, dmg = 1.2, aspd = 1.5, area_dmg = 1, area_size = 1, def = 0.9, mvspd = 1.2},
|
||||
['healer'] = {hp = 1.2, dmg = 1, aspd = 0.5, area_dmg = 1, area_size = 1, def = 1.2, mvspd = 1},
|
||||
['mage'] = {hp = 0.6, dmg = 1.4, aspd = 1, area_dmg = 1.25, area_size = 1.2, def = 0.75, mvspd = 1},
|
||||
['rogue'] = {hp = 0.8, dmg = 1.3, aspd = 1.1, area_dmg = 0.6, area_size = 0.6, def = 0.8, mvspd = 1.4},
|
||||
['nuker'] = {hp = 0.9, dmg = 1, aspd = 0.75, area_dmg = 1.5, area_size = 1.5, def = 1, mvspd = 1},
|
||||
['conjurer'] = {hp = 1, dmg = 1, aspd = 1, area_dmg = 1, area_size = 1, def = 1, mvspd = 1},
|
||||
['enchanter'] = {hp = 1.2, dmg = 1, aspd = 1, area_dmg = 1, area_size = 1, def = 1.2, mvspd = 1.2},
|
||||
['psy'] = {hp = 1.5, dmg = 1, aspd = 1, area_dmg = 1, area_size = 1, def = 0.5, mvspd = 1},
|
||||
['ranger'] = {hp = 1, dmg = 1.2, aspd = 1.5, area_dmg = 1, area_size = 1, dot_dmg = 1.1, def = 0.9, mvspd = 1.2},
|
||||
['warrior'] = {hp = 1.4, dmg = 1.1, aspd = 0.9, area_dmg = 1, area_size = 1, dot_dmg = 1, def = 1.25, mvspd = 0.9},
|
||||
['mage'] = {hp = 0.6, dmg = 1.4, aspd = 1, area_dmg = 1.25, area_size = 1.2, dot_dmg = 1.25, def = 0.75, mvspd = 1},
|
||||
['rogue'] = {hp = 0.8, dmg = 1.3, aspd = 1.1, area_dmg = 0.6, area_size = 0.6, dot_dmg = 1.4, def = 0.8, mvspd = 1.4},
|
||||
['healer'] = {hp = 1.2, dmg = 1, aspd = 0.5, area_dmg = 1, area_size = 1, dot_dmg = 1, def = 1.2, mvspd = 1},
|
||||
['enchanter'] = {hp = 1.2, dmg = 1, aspd = 1, area_dmg = 1, area_size = 1, dot_dmg = 1, def = 1.2, mvspd = 1.2},
|
||||
['nuker'] = {hp = 0.9, dmg = 1, aspd = 0.75, area_dmg = 1.5, area_size = 1.5, dot_dmg = 0.75, def = 1, mvspd = 1},
|
||||
['conjurer'] = {hp = 1, dmg = 1, aspd = 1, area_dmg = 1, area_size = 1, dot_dmg = 1, def = 1, mvspd = 1},
|
||||
['psyker'] = {hp = 1.5, dmg = 1, aspd = 1, area_dmg = 1, area_size = 1, dot_dmg = 1, def = 0.5, mvspd = 1},
|
||||
['trapper'] = {hp = 1, dmg = 1, aspd = 1, area_dmg = 1, area_size = 1, dot_dmg = 1.1, def = 0.75, mvspd = 1},
|
||||
['forcer'] = {hp = 1.25, dmg = 1.1, aspd = 0.9, area_dmg = 0.75, area_size = 0.75, dot_dmg = 1, def = 1.2, mvspd = 1},
|
||||
['swarmer'] = {hp = 1.2, dmg = 1, aspd = 1.25, area_dmg = 1, area_size = 1, dot_dmg = 1, def = 0.75, mvspd = 0.5},
|
||||
['voider'] = {hp = 0.75, dmg = 1.3, aspd = 1, area_dmg = 0.8, area_size = 0.75, dot_dmg = 2, def = 0.6, mvspd = 0.8},
|
||||
['seeker'] = {hp = 0.5, dmg = 1, aspd = 1, area_dmg = 1, area_size = 1, def = 1, mvspd = 0.3},
|
||||
['mini_boss'] = {hp = 1, dmg = 1, aspd = 1, area_dmg = 1, area_size = 1, def = 1, mvspd = 0.3},
|
||||
['enemy_critter'] = {hp = 1, dmg = 1, aspd = 1, area_dmg = 1, area_size = 1, def = 1, mvspd = 0.5},
|
||||
['saboteur'] = {hp = 1, dmg = 1, aspd = 1, area_dmg = 1, area_size = 1, def = 1, mvspd = 1.4},
|
||||
}
|
||||
|
||||
local ylb1 = function(lvl) return (lvl >= 1 and 'yellow' or 'light_bg') end
|
||||
local ylb1 = function(lvl) return lvl >= 2 and 'fg' or (lvl >= 1 and 'yellow' or 'light_bg') end
|
||||
local ylb2 = function(lvl) return (lvl >= 2 and 'yellow' or 'light_bg') end
|
||||
class_descriptions = {
|
||||
['ranger'] = function(lvl) return '[' .. ylb1(lvl) .. ']2[' .. ylb2(lvl) .. ']/4 [fg]- [' .. ylb1(lvl) .. ']10%[' .. ylb2(lvl) .. ']/20% [fg]chance to release a barrage on attack to allied rangers' end,
|
||||
['warrior'] = function(lvl) return '[' .. ylb1(lvl) .. ']2[' .. ylb2(lvl) .. ']/4 [fg]- [' .. ylb1(lvl) .. ']+25[' .. ylb2(lvl) .. ']/+50 [fg]defense to allied warriors' end,
|
||||
['mage'] = function(lvl) return '[' .. ylb1(lvl) .. ']2[' .. ylb2(lvl) .. ']/4 [fg]- [' .. ylb1(lvl) .. ']-15[' .. ylb2(lvl) .. ']/-30 [fg]enemy defense' end,
|
||||
['nuker'] = function(lvl) return '[' .. ylb1(lvl) .. ']2[' .. ylb2(lvl) .. ']/4 [fg]- [' .. ylb1(lvl) .. ']+15%[' .. ylb2(lvl) .. ']/+25% [fg]area damage and size to allied nukers' end,
|
||||
['rogue'] = function(lvl) return '[' .. ylb1(lvl) .. ']2[' .. ylb2(lvl) .. ']/4 [fg]- [' .. ylb1(lvl) .. ']10%[' .. ylb2(lvl) .. ']/20% [fg]chance to crit to allied rogues, dealing [yellow]4x[] damage' end,
|
||||
['healer'] = function(lvl) return '[' .. ylb1(lvl) .. ']3 [fg]- [' .. ylb1(lvl) .. ']+25% [fg]healing effectiveness' end,
|
||||
['conjurer'] = function(lvl) return '[' .. ylb1(lvl) .. ']2 [fg]- [' .. ylb1(lvl) .. ']+25% [fg]construct damage and duration' end,
|
||||
['enchanter'] = function(lvl) return '[' .. ylb1(lvl) .. ']3 [fg]- [' .. ylb1(lvl) .. ']+25% [fg]damage to all allies' end,
|
||||
['psy'] = function(lvl) return '[fg]damage taken by psy units is reflected to enemies at [yellow]2x[fg] its value' end,
|
||||
['ranger'] = function(lvl) return '[' .. ylb1(lvl) .. ']3[' .. ylb2(lvl) .. ']/6 [fg]- [' .. ylb1(lvl) .. ']10%[' .. ylb2(lvl) .. ']/20% [fg]chance to release a barrage on attack to allied rangers' end,
|
||||
['warrior'] = function(lvl) return '[' .. ylb1(lvl) .. ']3[' .. ylb2(lvl) .. ']/6 [fg]- [' .. ylb1(lvl) .. ']+25[' .. ylb2(lvl) .. ']/+50 [fg]defense to allied warriors' end,
|
||||
['mage'] = function(lvl) return '[' .. ylb1(lvl) .. ']3[' .. ylb2(lvl) .. ']/6 [fg]- [' .. ylb1(lvl) .. ']-15[' .. ylb2(lvl) .. ']/-30 [fg]enemy defense' end,
|
||||
['rogue'] = function(lvl) return '[' .. ylb1(lvl) .. ']3[' .. ylb2(lvl) .. ']/6 [fg]- [' .. ylb1(lvl) .. ']10%[' .. ylb2(lvl) .. ']/20% [fg]chance to crit to allied rogues, dealing [yellow]4x[] damage' end,
|
||||
['healer'] = function(lvl) return '[' .. ylb1(lvl) .. ']2[' .. ylb2(lvl) .. ']/4 [fg]- [' .. ylb1(lvl) .. ']+15%[' .. ylb2(lvl) .. ']/+30% [fg]healing effectiveness' end,
|
||||
['enchanter'] = function(lvl) return '[' .. ylb1(lvl) .. ']2[' .. ylb2(lvl) .. ']/4 [fg]- [' .. ylb1(lvl) .. ']+15%[' .. ylb2(lvl) .. ']/+25% [fg]damage to all allies' end,
|
||||
['nuker'] = function(lvl) return '[' .. ylb1(lvl) .. ']3[' .. ylb2(lvl) .. ']/6 [fg]- [' .. ylb1(lvl) .. ']+15%[' .. ylb2(lvl) .. ']/+25% [fg]area damage and size to allied nukers' end,
|
||||
['conjurer'] = function(lvl) return '[' .. ylb1(lvl) .. ']2[' .. ylb2(lvl) .. ']/4 [fg]- [' .. ylb1(lvl) .. ']+25%[' .. ylb2(lvl) .. ']/+50% [fg]summon damage and duration' end,
|
||||
['psyker'] = function(lvl) return '[' .. ylb1(lvl) .. ']2[' .. ylb2(lvl) .. ']/4 [fg]- [' .. ylb1(lvl) .. ']+5%[' .. ylb2(lvl) .. ']/+10% [fg]damage and health per active set to allied psykers' end,
|
||||
['trapper'] = function(lvl) return '[' .. ylb1(lvl) .. ']2[' .. ylb2(lvl) .. ']/4 [fg]- [' .. ylb1(lvl) .. ']+1[' .. ylb2(lvl) .. ']/+2 [fg]extra traps released' end,
|
||||
['forcer'] = function(lvl) return '[' .. ylb1(lvl) .. ']2[' .. ylb2(lvl) .. ']/4 [fg]- [' .. ylb1(lvl) .. ']+25%[' .. ylb2(lvl) .. ']/+50% [fg]knockback force to all allies' end,
|
||||
['swarmer'] = function(lvl) return '[' .. ylb1(lvl) .. ']2[' .. ylb2(lvl) .. ']/4 [fg]- [' .. ylb1(lvl) .. ']+1[' .. ylb2(lvl) .. ']/+3 [fg]hits to critters' end,
|
||||
['voider'] = function(lvl) return '[' .. ylb1(lvl) .. ']2[' .. ylb2(lvl) .. ']/4 [fg]- [' .. ylb1(lvl) .. ']+15%[' .. ylb2(lvl) .. ']/+25% [fg]damage over time to allied voiders' end,
|
||||
}
|
||||
|
||||
tier_to_characters = {
|
||||
[1] = {'vagrant', 'swordsman', 'wizard', 'archer', 'cleric', 'scout'},
|
||||
[2] = {'saboteur', 'hunter', 'cannoneer', 'stormweaver', 'squire', 'dual_gunner', 'chronomancer', 'sage', 'cannoneer'},
|
||||
[3] = {'blade', 'outlaw', 'elementor', 'psykeeper', 'spellblade', 'engineer'},
|
||||
[1] = {'vagrant', 'swordsman', 'wizard', 'archer', 'scout', 'cleric'},
|
||||
[2] = {'saboteur', 'sage', 'squire', 'dual_gunner', 'hunter', 'chronomancer', 'fisherman', 'cryomancer', 'beastmaster', 'launcher', 'spiker', 'carver'}
|
||||
[3] = {'outlaw', 'elementor', 'stormweaver', 'spellblade', 'psykeeper', 'engineer', 'juggernaut', 'pyromancer', 'corruptor', 'assassin', 'bane', 'arbalester', 'burrower', 'flagellant'}
|
||||
[4] = {'priest', 'barbarian', 'psykino', 'lich', 'host', 'sapper', 'blade', 'plague_doctor', 'cannoneer'}
|
||||
}
|
||||
|
||||
non_attacking_characters = {'cleric', 'stormweaver', 'squire', 'chronomancer', 'sage'}
|
||||
|
@ -300,19 +429,40 @@ function init()
|
|||
['scout'] = 1,
|
||||
['cleric'] = 1,
|
||||
['outlaw'] = 3,
|
||||
['blade'] = 3,
|
||||
['blade'] = 4,
|
||||
['elementor'] = 3,
|
||||
['saboteur'] = 2,
|
||||
['stormweaver'] = 2,
|
||||
['stormweaver'] = 3,
|
||||
['sage'] = 2,
|
||||
['squire'] = 2,
|
||||
['cannoneer'] = 2,
|
||||
['cannoneer'] = 4,
|
||||
['dual_gunner'] = 2,
|
||||
['hunter'] = 2,
|
||||
['chronomancer'] = 2,
|
||||
['spellblade'] = 3,
|
||||
['psykeeper'] = 3,
|
||||
['engineer'] = 3,
|
||||
['plague_doctor'] = 4,
|
||||
['fisherman'] = 2,
|
||||
['juggernaut'] = 3,
|
||||
['lich'] = 4,
|
||||
['cryomancer'] = 2,
|
||||
['pyromancer'] = 3,
|
||||
['corruptor'] = 3,
|
||||
['beastmaster'] = 2,
|
||||
['launcher'] = 2,
|
||||
['spiker'] = 2,
|
||||
['assassin'] = 3,
|
||||
['host'] = 4,
|
||||
['carver'] = 2,
|
||||
['bane'] = 3,
|
||||
['psykino'] = 4,
|
||||
['arbalester'] = 3,
|
||||
['barbarian'] = 4,
|
||||
['sapper'] = 4,
|
||||
['priest'] = 4,
|
||||
['burrower'] = 3,
|
||||
['flagellant'] = 3,
|
||||
}
|
||||
|
||||
get_number_of_units_per_class = function(units)
|
||||
|
@ -324,7 +474,11 @@ function init()
|
|||
local conjurers = 0
|
||||
local rogues = 0
|
||||
local enchanters = 0
|
||||
local psys = 0
|
||||
local psykers = 0
|
||||
local trappers = 0
|
||||
local forcers = 0
|
||||
local swarmers = 0
|
||||
local voiders = 0
|
||||
for _, unit in ipairs(units) do
|
||||
for _, unit_class in ipairs(character_classes[unit.character]) do
|
||||
if unit_class == 'ranger' then rangers = rangers + 1 end
|
||||
|
@ -335,10 +489,15 @@ function init()
|
|||
if unit_class == 'conjurer' then conjurers = conjurers + 1 end
|
||||
if unit_class == 'rogue' then rogues = rogues + 1 end
|
||||
if unit_class == 'enchanter' then enchanters = enchanters + 1 end
|
||||
if unit_class == 'psy' then psys = psys + 1 end
|
||||
if unit_class == 'psyker' then psykers = psykers + 1 end
|
||||
if unit_class == 'trapper' then trappers = trappers + 1 end
|
||||
if unit_class == 'forcer' then forcers = forcers + 1 end
|
||||
if unit_class == 'swarmer' then swarmers = swarmers + 1 end
|
||||
if unit_class == 'voider' then voiders = voiders + 1 end
|
||||
end
|
||||
end
|
||||
return {ranger = rangers, warrior = warriors, healer = healers, mage = mages, nuker = nukers, conjurer = conjurers, rogue = rogues, enchanter = enchanters, psy = psys}
|
||||
return {ranger = rangers, warrior = warriors, healer = healers, mage = mages, nuker = nukers, conjurer = conjurers, rogue = rogues,
|
||||
enchanter = enchanters, psyker = psykers, trapper = trappers, forcer = forcers, swarmer = swarmers, voider = voiders}
|
||||
end
|
||||
|
||||
get_classes = function(units)
|
||||
|
@ -350,43 +509,47 @@ function init()
|
|||
end
|
||||
|
||||
class_set_numbers = {
|
||||
['ranger'] = function(units) return 2, 4, get_number_of_units_per_class(units).ranger end,
|
||||
['warrior'] = function(units) return 2, 4, get_number_of_units_per_class(units).warrior end,
|
||||
['mage'] = function(units) return 2, 4, get_number_of_units_per_class(units).mage end,
|
||||
['nuker'] = function(units) return 2, 4, get_number_of_units_per_class(units).nuker end,
|
||||
['rogue'] = function(units) return 2, 4, get_number_of_units_per_class(units).rogue end,
|
||||
['healer'] = function(units) return 3, 3, get_number_of_units_per_class(units).healer end,
|
||||
['conjurer'] = function(units) return 2, 2, get_number_of_units_per_class(units).conjurer end,
|
||||
['enchanter'] = function(units) return 3, 3, get_number_of_units_per_class(units).enchanter end,
|
||||
['psy'] = function(units) return 1, 2, get_number_of_units_per_class(units).psy end,
|
||||
['ranger'] = function(units) return 3, 6, get_number_of_units_per_class(units).ranger end,
|
||||
['warrior'] = function(units) return 3, 6, get_number_of_units_per_class(units).warrior end,
|
||||
['mage'] = function(units) return 3, 6, get_number_of_units_per_class(units).mage end,
|
||||
['nuker'] = function(units) return 3, 6, get_number_of_units_per_class(units).nuker end,
|
||||
['rogue'] = function(units) return 3, 6, get_number_of_units_per_class(units).rogue end,
|
||||
['healer'] = function(units) return 2, 4, get_number_of_units_per_class(units).healer end,
|
||||
['conjurer'] = function(units) return 2, 4, get_number_of_units_per_class(units).conjurer end,
|
||||
['enchanter'] = function(units) return 2, 4, get_number_of_units_per_class(units).enchanter end,
|
||||
['psyker'] = function(units) return 2, 4, get_number_of_units_per_class(units).psyker end,
|
||||
['trapper'] = function(units) return 2, 4, get_number_of_units_per_class(units).trapper end,
|
||||
['forcer'] = function(units) return 2, 4, get_number_of_units_per_class(units).forcer end,
|
||||
['swarmer'] = function(units) return 2, 4, get_number_of_units_per_class(units).swarmer end,
|
||||
['voider'] = function(units) return 2, 4, get_number_of_units_per_class(units).voider end,
|
||||
}
|
||||
|
||||
level_to_tier_weights = {
|
||||
[1] = {90, 10, 0},
|
||||
[2] = {80, 15, 5},
|
||||
[3] = {75, 20, 5},
|
||||
[4] = {70, 20, 10},
|
||||
[5] = {70, 20, 10},
|
||||
[6] = {65, 25, 10},
|
||||
[7] = {60, 25, 15},
|
||||
[8] = {60, 25, 15},
|
||||
[9] = {55, 30, 15},
|
||||
[10] = {50, 30, 20},
|
||||
[11] = {50, 30, 20},
|
||||
[12] = {50, 30, 20},
|
||||
[13] = {45, 30, 25},
|
||||
[14] = {40, 35, 25},
|
||||
[15] = {35, 40, 25},
|
||||
[16] = {30, 40, 30},
|
||||
[17] = {25, 45, 30},
|
||||
[18] = {20, 50, 30},
|
||||
[19] = {15, 50, 35},
|
||||
[20] = {10, 55, 35},
|
||||
[21] = {5, 60, 35},
|
||||
[22] = {5, 55, 40},
|
||||
[23] = {5, 55, 40},
|
||||
[24] = {0, 55, 45},
|
||||
[25] = {0, 50, 50},
|
||||
[1] = {90, 10, 0, 0},
|
||||
[2] = {80, 15, 5, 0},
|
||||
[3] = {75, 20, 5, 0},
|
||||
[4] = {70, 20, 10, 0},
|
||||
[5] = {70, 20, 10, 0},
|
||||
[6] = {65, 25, 10, 0},
|
||||
[7] = {60, 25, 15, 0},
|
||||
[8] = {55, 25, 15, 5},
|
||||
[9] = {50, 30, 15, 5},
|
||||
[10] = {50, 30, 15, 5},
|
||||
[11] = {45, 30, 20, 5},
|
||||
[12] = {45, 30, 20, 5},
|
||||
[13] = {40, 30, 20, 10},
|
||||
[14] = {40, 30, 20, 10},
|
||||
[15] = {35, 35, 20, 10},
|
||||
[16] = {30, 40, 20, 10},
|
||||
[17] = {20, 40, 25, 15},
|
||||
[18] = {20, 40, 25, 15},
|
||||
[19] = {15, 40, 30, 15},
|
||||
[20] = {10, 40, 30, 20},
|
||||
[21] = {5, 40, 35, 20},
|
||||
[22] = {5, 35, 35, 25},
|
||||
[23] = {5, 35, 35, 25},
|
||||
[24] = {0, 30, 40, 30},
|
||||
[25] = {0, 25, 40, 35},
|
||||
}
|
||||
|
||||
level_to_gold_gained = {
|
||||
|
@ -422,7 +585,7 @@ function init()
|
|||
[12] = 'exploder',
|
||||
[18] = 'swarmer',
|
||||
[24] = 'bouncer',
|
||||
[25] = 'orbitter',
|
||||
[25] = 'randomizer',
|
||||
}
|
||||
|
||||
gold = 2
|
||||
|
|
|
@ -1,13 +0,0 @@
|
|||
Release Patch Notes
|
||||
|
||||
Added a spawn marker before enemies spawn to help with avoiding enemies spawning on top of the player
|
||||
Prevent spawning of units that cost 3 or more gold on the first level
|
||||
Prevent spawning of only units that don't attack on the first level
|
||||
Reworked position based units so that position in the snake doesn't matter anymore
|
||||
Chronomancer now gives +10/20/30% attack speed to all allies
|
||||
Psykeeper now stores damage taken by all allies up to 10/20/30% its max HP and redistributes it as healing
|
||||
Squire now gives +5/10/15% damage and defense to all allies
|
||||
Added enemy modifiers
|
||||
green - Grant nearby enemies a speed boost on death
|
||||
blue - Explode into projectiles on death
|
||||
orange - Charge up and headbutt towards the player at increased speed and damage
|
18
player.lua
18
player.lua
|
@ -276,13 +276,13 @@ function Player:update(dt)
|
|||
if self.character == 'squire' then
|
||||
local all_units = self:get_all_units()
|
||||
for _, unit in ipairs(all_units) do
|
||||
unit.squire_dmg_m = 1 + 0.05*self.level
|
||||
unit.squire_def_m = 1 + 0.05*self.level
|
||||
unit.squire_dmg_m = 1.1
|
||||
unit.squire_def_m = 1.1
|
||||
end
|
||||
elseif self.character == 'chronomancer' then
|
||||
local all_units = self:get_all_units()
|
||||
for _, unit in ipairs(all_units) do
|
||||
unit.chronomancer_aspd_m = 1 + 0.10*self.level
|
||||
unit.chronomancer_aspd_m = 1.2
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -834,13 +834,23 @@ function Projectile:on_trigger_enter(other, contact)
|
|||
end
|
||||
|
||||
if self.parent.chain_infused then
|
||||
--[[
|
||||
local units = self.parent:get_all_units()
|
||||
local stormweaver_level = 0
|
||||
for _, unit in ipairs(units) do
|
||||
if unit.character == 'stormweaver' then
|
||||
stormweaver_level = unit.level
|
||||
break
|
||||
end
|
||||
end
|
||||
]]--
|
||||
local src = other
|
||||
for i = 1, 2 do
|
||||
_G[random:table{'spark1', 'spark2', 'spark3'}]:play{pitch = random:float(0.9, 1.1), volume = 0.3}
|
||||
table.insert(self.infused_enemies_hit, src)
|
||||
local dst = src:get_random_object_in_shape(Circle(src.x, src.y, 64), main.current.enemies, self.infused_enemies_hit)
|
||||
if dst then
|
||||
dst:hit(self.dmg/(i+1))
|
||||
dst:hit(0.2*self.dmg)
|
||||
LightningLine{group = main.current.effects, src = src, dst = dst}
|
||||
src = dst
|
||||
end
|
||||
|
|
18
todo
18
todo
|
@ -3,9 +3,9 @@
|
|||
* 3. Prevent spawning of units that don't attack on first level
|
||||
|
||||
* 4. Rework position based units so that position in the snake doesn't matter
|
||||
* Chronomancer: +10%/20%/30% attack speed to all allies
|
||||
* Chronomancer: +20% attack speed to all allies
|
||||
* Psykeeper: stores damage taken by all allies up to 50% its max HP and redistributes it as healing
|
||||
* Squire: +5%/10%/15% damage and defense to all allies
|
||||
* Squire: +10% damage and defense to all allies
|
||||
|
||||
* 7. Enemy modifiers
|
||||
* green - Grant nearby enemies a speed boost on death
|
||||
|
@ -15,7 +15,7 @@
|
|||
* white - Remain static and shoot projectiles
|
||||
* purple - Explodes into critters on death
|
||||
|
||||
6. Mini boss every 3rd level
|
||||
* 6. Mini boss every 3rd level
|
||||
* Speed Booster - grants speed boost to nearby enemies
|
||||
* Swarmer - explodes enemies into a swarm of critters
|
||||
* Exploder - explodes enemies into projectiles
|
||||
|
@ -126,14 +126,10 @@
|
|||
15. GO button is grayed out and thus doesn't say it's meant to be clicked on
|
||||
16. 28/20 enemies or 4/3 wave confuses players and makes them think the level goals are bugged
|
||||
17. Music for first 9-15 levels should be calm rather than upbeat
|
||||
18. Crash: Error: engine/game/hitfx.lua:46: attempt to index field 'parent', engine/game/hitfx.lua:46: in function 'use' love.js:9:40605, enemies.lua:56: in function 'on_collision_enter' love.js:9:40605
|
||||
19. Sage's pull force doesn't increase with unit level
|
||||
20. Cleric's healing amount doesn't increase with unit level
|
||||
21. Squire and Chronomancer's buffs don't increase with unit level
|
||||
|
||||
Boss ideas
|
||||
Pretends to be dead, grants speed buffs to enemies after death, especially if the round has gone on for too long which means the player is surviving with 1 unit
|
||||
Uses Psykino's tech to pull enemies together into a point and have that point move around and bounce on edges, thus having a ball of enemies moving around that occasionally explodes
|
||||
* 18. Crash: Error: engine/game/hitfx.lua:46: attempt to index field 'parent', engine/game/hitfx.lua:46: in function 'use' love.js:9:40605, enemies.lua:56: in function 'on_collision_enter' love.js:9:40605
|
||||
* 19. Sage's pull force doesn't increase with unit level
|
||||
* 20. Cleric's healing amount doesn't increase with unit level
|
||||
* 21. Squire and Chronomancer's buffs don't increase with unit level
|
||||
|
||||
Engine improvements for after SNKRX release
|
||||
Node refactor: described partly somewhere in the devlog
|
||||
|
|
Loading…
Reference in New Issue