SNKRX/main.lua

865 lines
44 KiB
Lua
Raw Normal View History

2021-02-18 05:11:25 +01:00
require 'engine'
require 'shared'
require 'arena'
2021-03-05 08:29:19 +01:00
require 'buy_screen'
2021-02-18 05:11:25 +01:00
require 'objects'
2021-02-20 02:54:54 +01:00
require 'player'
require 'enemies'
2021-02-18 05:11:25 +01:00
function init()
shared_init()
input:bind('move_left', {'a', 'left'})
input:bind('move_right', {'d', 'right'})
input:bind('move_up', {'w', 'up'})
input:bind('move_down', {'s', 'down'})
2021-03-07 03:35:18 +01:00
input:bind('enter', {'space', 'return'})
2021-02-18 05:11:25 +01:00
2021-03-29 20:26:10 +02:00
music.volume = 0
2021-02-27 05:28:00 +01:00
local s = {tags = {sfx}}
2021-04-13 03:23:53 +02:00
bard2 = Sound('376532__womb-affliction__flute-trill.ogg', s)
bard1 = Sound('Magical Impact 12.ogg', s)
2021-04-12 04:51:34 +02:00
frost1 = Sound('Frost Bolt 20.ogg', s)
pyro1 = Sound('Fire bolt 5.ogg', s)
pyro2 = Sound('Explosion Fireworks_01.ogg', s)
2021-04-11 03:37:11 +02:00
dot1 = Sound('Magical Swoosh 18.ogg', s)
gun_kata1 = Sound('Pistol Shot_07.ogg', s)
gun_kata2 = Sound('Pistol Shot_08.ogg', s)
dual_gunner1 = Sound('Revolver Shot_07.ogg', s)
dual_gunner2 = Sound('Revolver Shot_08.ogg', s)
2021-03-14 06:40:12 +01:00
ui_hover1 = Sound('bamboo_hit_by_lord.ogg', s)
2021-03-08 05:33:01 +01:00
ui_switch1 = Sound('Switch.ogg', s)
ui_switch2 = Sound('Switch 3.ogg', s)
ui_transition1 = Sound('Wind Bolt 8.ogg', s)
ui_transition2 = Sound('Wind Bolt 12.ogg', s)
2021-04-02 03:59:26 +02:00
headbutt1 = Sound('Wind Bolt 14.ogg', s)
2021-04-03 04:53:12 +02:00
critter1 = Sound('Critters eating 2.ogg', s)
critter2 = Sound('Crickets Chirping 4.ogg', s)
2021-04-04 05:58:44 +02:00
critter3 = Sound('Popping bloody Sac 1.ogg', s)
2021-04-04 01:49:54 +02:00
force1 = Sound('Magical Impact 18.ogg', s)
2021-03-14 06:40:12 +01:00
error1 = Sound('Error 2.ogg', s)
2021-03-08 05:33:01 +01:00
coins1 = Sound('Coins 7.ogg', s)
coins2 = Sound('Coins 8.ogg', s)
coins3 = Sound('Coins 9.ogg', s)
2021-02-22 03:54:50 +01:00
shoot1 = Sound('Shooting Projectile (Classic) 11.ogg', s)
archer1 = Sound('Releasing Bow String 1.ogg', s)
wizard1 = Sound('Wind Bolt 20.ogg', s)
swordsman1 = Sound('Heavy sword woosh 1.ogg', s)
swordsman2 = Sound('Heavy sword woosh 19.ogg', s)
scout1 = Sound('Throwing Knife (Thrown) 3.ogg', s)
scout2 = Sound('Throwing Knife (Thrown) 4.ogg', s)
arrow_hit_wall1 = Sound('Arrow Impact wood 3.ogg', s)
arrow_hit_wall2 = Sound('Arrow Impact wood 1.ogg', s)
hit1 = Sound('Player Takes Damage 17.ogg', s)
hit2 = Sound('Body Head (Headshot) 1.ogg', s)
2021-03-17 10:30:20 +01:00
hit3 = Sound('Kick 16_1.ogg', s)
hit4 = Sound('Kick 16_2.ogg', s)
2021-02-22 03:54:50 +01:00
proj_hit_wall1 = Sound('Player Takes Damage 2.ogg', s)
enemy_die1 = Sound('Bloody punches 7.ogg', s)
enemy_die2 = Sound('Bloody punches 10.ogg', s)
magic_area1 = Sound('Fire bolt 10.ogg', s)
magic_hit1 = Sound('Shadow Punch 1.ogg', s)
magic_die1 = Sound('Magical Impact 27.ogg', s)
knife_hit_wall1 = Sound('Shield Impacts Sword 1.ogg', s)
2021-02-23 04:47:57 +01:00
blade_hit1 = Sound('Sword impact (Flesh) 2.ogg', s)
2021-02-22 03:54:50 +01:00
player_hit1 = Sound('Body Fall 2.ogg', s)
player_hit2 = Sound('Body Fall 18.ogg', s)
player_hit_wall1 = Sound('Wood Heavy 5.ogg', s)
pop1 = Sound('Pop sounds 10.ogg', s)
2021-03-14 06:40:12 +01:00
pop2 = Sound('467951__benzix2__ui-button-click.ogg', s)
pop3 = Sound('258269__jcallison__mouth-pop.ogg', s)
confirm1 = Sound('80921__justinbw__buttonchime02up.ogg', s)
2021-02-22 03:54:50 +01:00
heal1 = Sound('Buff 3.ogg', s)
spawn1 = Sound('Buff 13.ogg', s)
2021-04-02 03:59:26 +02:00
buff1 = Sound('Buff 14.ogg', s)
2021-03-31 00:46:27 +02:00
spawn_mark1 = Sound('Bonus 2.ogg', s)
spawn_mark2 = Sound('Bonus.ogg', s)
2021-02-24 06:47:22 +01:00
alert1 = Sound('Click.ogg', s)
2021-02-23 04:47:57 +01:00
elementor1 = Sound('Wind Bolt 18.ogg', s)
2021-02-24 06:47:22 +01:00
saboteur_hit1 = Sound('Explosion Flesh_01.ogg', s)
saboteur_hit2 = Sound('Explosion Flesh_02.ogg', s)
saboteur1 = Sound('Male Jump 1.ogg', s)
saboteur2 = Sound('Male Jump 2.ogg', s)
saboteur3 = Sound('Male Jump 3.ogg', s)
spark1 = Sound('Spark 1.ogg', s)
spark2 = Sound('Spark 2.ogg', s)
spark3 = Sound('Spark 3.ogg', s)
stormweaver1 = Sound('Buff 8.ogg', s)
2021-02-26 04:52:28 +01:00
cannoneer1 = Sound('Cannon shots 1.ogg', s)
cannoneer2 = Sound('Cannon shots 7.ogg', s)
cannon_hit_wall1 = Sound('Cannon impact sounds (Hitting ship) 4.ogg', s)
pet1 = Sound('Wolf barks 5.ogg', s)
turret1 = Sound('Sci Fi Machine Gun 7.ogg', s)
turret2 = Sound('Sniper Shot_09.ogg', s)
turret_hit_wall1 = Sound('Concrete 6.ogg', s)
turret_hit_wall2 = Sound('Concrete 7.ogg', s)
turret_deploy = Sound('321215__hybrid-v__sci-fi-weapons-deploy.ogg', s)
2021-02-27 05:28:00 +01:00
rogue_crit1 = Sound('Dagger Stab (Flesh) 4.ogg', s)
rogue_crit2 = Sound('Sword hits another sword 6.ogg', s)
2021-03-17 10:30:20 +01:00
cascade = Sound('Kubbi - Ember - 04 Cascade.ogg', {tags = {music}})
2021-02-22 03:54:50 +01:00
2021-03-05 08:29:19 +01:00
warrior = Image('warrior')
ranger = Image('ranger')
healer = Image('healer')
mage = Image('mage')
rogue = Image('rogue')
nuker = Image('nuker')
conjurer = Image('conjurer')
enchanter = Image('enchanter')
2021-04-07 03:26:59 +02:00
psyker = Image('psyker')
2021-04-12 04:51:34 +02:00
curser = Image('curser')
2021-04-07 03:26:59 +02:00
forcer = Image('forcer')
swarmer = Image('swarmer')
voider = Image('voider')
2021-03-05 08:29:19 +01:00
class_colors = {
['warrior'] = yellow[0],
['ranger'] = green[0],
['healer'] = green[0],
2021-03-12 04:05:20 +01:00
['conjurer'] = orange[0],
2021-03-05 08:29:19 +01:00
['mage'] = blue[0],
2021-04-07 03:26:59 +02:00
['nuker'] = red[0],
2021-03-05 08:29:19 +01:00
['rogue'] = red[0],
2021-03-12 04:05:20 +01:00
['enchanter'] = blue[0],
2021-04-07 03:26:59 +02:00
['psyker'] = fg[0],
2021-04-12 04:51:34 +02:00
['curser'] = purple[0],
2021-04-07 03:26:59 +02:00
['forcer'] = yellow[0],
2021-04-12 04:51:34 +02:00
['swarmer'] = orange[0],
2021-04-07 03:26:59 +02:00
['voider'] = purple[0],
2021-03-05 08:29:19 +01:00
}
2021-03-06 04:53:44 +01:00
class_color_strings = {
['warrior'] = 'yellow',
['ranger'] = 'green',
['healer'] = 'green',
2021-03-12 04:05:20 +01:00
['conjurer'] = 'orange',
2021-03-06 04:53:44 +01:00
['mage'] = 'blue',
2021-04-07 03:26:59 +02:00
['nuker'] = 'red',
2021-03-06 04:53:44 +01:00
['rogue'] = 'red',
2021-03-12 04:05:20 +01:00
['enchanter'] = 'blue',
2021-04-07 03:26:59 +02:00
['psyker'] = 'fg',
2021-04-12 04:51:34 +02:00
['curser'] = 'purple',
2021-04-07 03:26:59 +02:00
['forcer'] = 'yellow',
2021-04-12 04:51:34 +02:00
['swarmer'] = 'orange',
2021-04-07 03:26:59 +02:00
['voider'] = 'purple',
2021-03-06 04:53:44 +01:00
}
2021-03-05 08:29:19 +01:00
character_colors = {
['vagrant'] = fg[0],
['swordsman'] = yellow[0],
['wizard'] = blue[0],
['archer'] = green[0],
['scout'] = red[0],
['cleric'] = green[0],
['outlaw'] = red[0],
['blade'] = yellow[0],
['elementor'] = blue[0],
2021-03-12 04:05:20 +01:00
['saboteur'] = orange[0],
['stormweaver'] = blue[0],
2021-04-11 03:37:11 +02:00
['sage'] = purple[0],
2021-03-05 08:29:19 +01:00
['squire'] = yellow[0],
2021-03-12 04:05:20 +01:00
['cannoneer'] = orange[0],
2021-03-05 08:29:19 +01:00
['dual_gunner'] = green[0],
['hunter'] = green[0],
['chronomancer'] = blue[0],
['spellblade'] = blue[0],
['psykeeper'] = fg[0],
2021-03-12 04:05:20 +01:00
['engineer'] = orange[0],
2021-04-07 03:26:59 +02:00
['plague_doctor'] = purple[0],
2021-04-12 04:51:34 +02:00
['barbarian'] = yellow[0],
2021-04-07 03:26:59 +02:00
['juggernaut'] = yellow[0],
['lich'] = blue[0],
['cryomancer'] = blue[0],
['pyromancer'] = red[0],
2021-04-12 04:51:34 +02:00
['corruptor'] = orange[0],
2021-04-07 03:26:59 +02:00
['beastmaster'] = red[0],
2021-04-13 03:23:53 +02:00
['launcher'] = yellow[0],
2021-04-12 04:51:34 +02:00
['bard'] = red[0],
2021-04-07 03:26:59 +02:00
['assassin'] = purple[0],
2021-04-12 04:51:34 +02:00
['host'] = orange[0],
2021-04-07 03:26:59 +02:00
['carver'] = green[0],
['bane'] = purple[0],
['psykino'] = fg[0],
['arbalester'] = green[0],
2021-04-12 04:51:34 +02:00
['highlander'] = yellow[0],
2021-04-07 03:26:59 +02:00
['sapper'] = blue[0],
['priest'] = green[0],
2021-04-12 04:51:34 +02:00
['infestor'] = orange[0],
2021-04-11 03:37:11 +02:00
['flagellant'] = fg[0],
2021-03-05 08:29:19 +01:00
}
2021-03-06 04:53:44 +01:00
character_color_strings = {
['vagrant'] = 'fg',
['swordsman'] = 'yellow',
['wizard'] = 'blue',
['archer'] = 'green',
['scout'] = 'red',
['cleric'] = 'green',
['outlaw'] = 'red',
['blade'] = 'yellow',
['elementor'] = 'blue',
2021-03-12 04:05:20 +01:00
['saboteur'] = 'orange',
['stormweaver'] = 'blue',
2021-04-11 03:37:11 +02:00
['sage'] = 'purple',
2021-03-06 04:53:44 +01:00
['squire'] = 'yellow',
2021-03-12 04:05:20 +01:00
['cannoneer'] = 'orange',
2021-03-06 04:53:44 +01:00
['dual_gunner'] = 'green',
['hunter'] = 'green',
['chronomancer'] = 'blue',
['spellblade'] = 'blue',
['psykeeper'] = 'fg',
2021-03-12 04:05:20 +01:00
['engineer'] = 'orange',
2021-04-07 03:26:59 +02:00
['plague_doctor'] = 'purple',
2021-04-12 04:51:34 +02:00
['barbarian'] = 'yellow',
2021-04-07 03:26:59 +02:00
['juggernaut'] = 'yellow',
['lich'] = 'blue',
['cryomancer'] = 'blue',
['pyromancer'] = 'red',
2021-04-12 04:51:34 +02:00
['corruptor'] = 'orange',
2021-04-07 03:26:59 +02:00
['beastmaster'] = 'red',
2021-04-13 03:23:53 +02:00
['launcher'] = 'yellow',
2021-04-12 04:51:34 +02:00
['bard'] = 'red',
2021-04-07 03:26:59 +02:00
['assassin'] = 'purple',
2021-04-12 04:51:34 +02:00
['host'] = 'orange',
2021-04-07 03:26:59 +02:00
['carver'] = 'green',
['bane'] = 'purple',
['psykino'] = 'fg',
['arbalester'] = 'green',
2021-04-12 04:51:34 +02:00
['highlander'] = 'yellow',
2021-04-07 03:26:59 +02:00
['sapper'] = 'blue',
['priest'] = 'green',
2021-04-12 04:51:34 +02:00
['infestor'] = 'orange',
2021-04-11 03:37:11 +02:00
['flagellant'] = 'fg',
2021-03-06 04:53:44 +01:00
}
2021-03-05 08:29:19 +01:00
character_classes = {
2021-04-07 03:26:59 +02:00
['vagrant'] = {'psyker', 'ranger', 'warrior'},
2021-03-05 08:29:19 +01:00
['swordsman'] = {'warrior'},
['wizard'] = {'mage'},
['archer'] = {'ranger'},
['scout'] = {'rogue'},
['cleric'] = {'healer'},
['outlaw'] = {'warrior', 'rogue'},
['blade'] = {'warrior', 'nuker'},
['elementor'] = {'mage', 'nuker'},
['saboteur'] = {'rogue', 'conjurer', 'nuker'},
['stormweaver'] = {'enchanter'},
2021-04-07 03:26:59 +02:00
['sage'] = {'nuker'},
['squire'] = {'warrior', 'enchanter'},
2021-03-05 08:29:19 +01:00
['cannoneer'] = {'ranger', 'nuker'},
['dual_gunner'] = {'ranger', 'rogue'},
2021-04-07 03:26:59 +02:00
['hunter'] = {'ranger', 'conjurer', 'forcer'},
2021-03-05 08:29:19 +01:00
['chronomancer'] = {'mage', 'enchanter'},
['spellblade'] = {'mage', 'rogue'},
2021-04-07 03:26:59 +02:00
['psykeeper'] = {'healer', 'psyker'},
2021-03-05 08:29:19 +01:00
['engineer'] = {'conjurer'},
2021-04-07 03:26:59 +02:00
['plague_doctor'] = {'nuker', 'voider'},
2021-04-12 04:51:34 +02:00
['barbarian'] = {'curser', 'warrior'},
2021-04-07 03:26:59 +02:00
['juggernaut'] = {'forcer', 'warrior'},
['lich'] = {'mage'},
['cryomancer'] = {'mage', 'voider'},
['pyromancer'] = {'mage', 'nuker', 'voider'},
['corruptor'] = {'ranger', 'swarmer'},
['beastmaster'] = {'rogue', 'swarmer'},
2021-04-12 04:51:34 +02:00
['launcher'] = {'curser', 'forcer'},
['bard'] = {'curser', 'rogue'},
2021-04-07 03:26:59 +02:00
['assassin'] = {'rogue', 'voider'},
2021-04-13 03:23:53 +02:00
['host'] = {'swarmer'},
2021-04-12 04:51:34 +02:00
['carver'] = {'conjurer', 'curser', 'healer'},
['bane'] = {'curser', 'voider'},
2021-04-07 03:26:59 +02:00
['psykino'] = {'mage', 'psyker', 'forcer'},
['arbalester'] = {'ranger', 'forcer'},
2021-04-12 04:51:34 +02:00
['highlander'] = {'warrior'},
['sapper'] = {'enchanter', 'voider', 'healer'},
2021-04-07 03:26:59 +02:00
['priest'] = {'healer'},
2021-04-12 04:51:34 +02:00
['infestor'] = {'curser', 'swarmer'},
2021-04-07 03:26:59 +02:00
['flagellant'] = {'psyker', 'enchanter'},
2021-03-05 08:29:19 +01:00
}
2021-04-10 00:46:49 +02:00
character_class_strings = {
['vagrant'] = '[fg]Psyker, [green]Ranger, [yellow]Warrior',
['swordsman'] = '[yellow]Warrior',
['wizard'] = '[blue]Mage',
['archer'] = '[green]Ranger',
['scout'] = '[red]Rogue',
['cleric'] = '[green]Healer',
['outlaw'] = '[yellow]Warrior, [red]Rogue',
['blade'] = '[yellow]Warrior, [red]Nuker',
['elementor'] = '[blue]Mage, [red]Nuker',
['saboteur'] = '[red]Rogue, [orange]Conjurer, [red]Nuker',
['stormweaver'] = '[blue]Enchanter',
['sage'] = '[red]Nuker',
['squire'] = '[yellow]Warrior, [blue]Enchanter',
['cannoneer'] = '[green]Ranger, [red]Nuker',
['dual_gunner'] = '[green]Ranger, [red]Rogue',
['hunter'] = '[green]Ranger, [orange]Conjurer, [yellow]Forcer',
['chronomancer'] = '[blue]Mage, Enchanter',
['spellblade'] = '[blue]Mage, [red]Rogue',
['psykeeper'] = '[green]Healer, [fg]Psyker',
['engineer'] = '[orange]Conjurer',
['plague_doctor'] = '[red]Nuker, [purple]Voider',
2021-04-12 04:51:34 +02:00
['barbarian'] = '[purple]Curser, [yellow]Warrior',
2021-04-10 00:46:49 +02:00
['juggernaut'] = '[yellow]Forcer, Warrior',
['lich'] = '[blue]Mage',
['cryomancer'] = '[blue]Mage, [purple]Voider',
['pyromancer'] = '[blue]Mage, [red]Nuker, [purple]Voider',
2021-04-12 04:51:34 +02:00
['corruptor'] = '[green]Ranger, [orange]Swarmer',
['beastmaster'] = '[red]Rogue, [orange]Swarmer',
2021-04-13 03:23:53 +02:00
['launcher'] = '[yellow]Forcer, [purple]Curser',
2021-04-12 04:51:34 +02:00
['bard'] = '[purple]Curser, [red]Rogue',
2021-04-10 00:46:49 +02:00
['assassin'] = '[red]Rogue, [purple]Voider',
2021-04-13 03:23:53 +02:00
['host'] = '[orange]Swarmer',
2021-04-12 04:51:34 +02:00
['carver'] = '[orange]Conjurer, [purple]Curser, [green]Healer',
['bane'] = '[purple]Curser, Voider',
2021-04-10 00:46:49 +02:00
['psykino'] = '[blue]Mage, [fg]Psyker, [yellow]Forcer',
['arbalester'] = '[green]Ranger, [yellow]Forcer',
2021-04-12 04:51:34 +02:00
['highlander'] = '[yellow]Warrior',
['sapper'] = '[blue]Enchanter, [purple]Voider, [green]Healer',
2021-04-10 00:46:49 +02:00
['priest'] = '[green]Healer',
2021-04-12 04:51:34 +02:00
['infestor'] = '[purple]Curser, [orange]Swarmer',
2021-04-10 00:46:49 +02:00
['flagellant'] = '[fg]Psyker, [blue]Enchanter',
}
get_character_stat_string = function(character, level)
local group = Group():set_as_physics_world(32, 0, 0, {'player', 'enemy', 'projectile', 'enemy_projectile'})
2021-04-11 03:37:11 +02:00
local player = Player{group = group, leader = true, character = character, level = level, follower_index = 1}
player:update(0)
return '[red]HP: [red]' .. player.max_hp .. '[fg], [red]DMG: [red]' .. player.dmg .. '[fg], [green]ASPD: [green]' .. math.round(player.aspd_m, 2) .. 'x[fg], [blue]AREA: [blue]' ..
math.round(player.area_dmg_m*player.area_size_m, 2) .. 'x[fg], [yellow]DEF: [yellow]' .. math.round(player.def, 2) .. '[fg], [green]MVSPD: [green]' .. math.round(player.v, 2) .. '[fg]'
2021-04-10 00:46:49 +02:00
end
get_character_stat = function(character, level, stat)
local group = Group():set_as_physics_world(32, 0, 0, {'player', 'enemy', 'projectile', 'enemy_projectile'})
2021-04-11 03:37:11 +02:00
local player = Player{group = group, leader = true, character = character, level = level, follower_index = 1}
player:update(0)
return math.round(player[stat], 2)
2021-04-10 00:46:49 +02:00
end
2021-03-06 04:53:44 +01:00
character_descriptions = {
2021-04-07 03:26:59 +02:00
['vagrant'] = function(lvl) return '[fg]shoots a projectile that deals [yellow]' .. get_character_stat('vagrant', lvl, 'dmg') .. '[fg] damage' end,
2021-04-10 00:46:49 +02:00
['swordsman'] = function(lvl) return '[fg]deals [yellow]' .. get_character_stat('swordsman', lvl, 'dmg') .. '[fg] damage in an area, deals extra [yellow]' ..
2021-04-07 03:26:59 +02:00
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,
2021-04-10 00:46:49 +02:00
['outlaw'] = function(lvl) return '[fg]throws a fan of [yellow]5[fg] knives, each dealing [yellow]' .. get_character_stat('outlaw', lvl, 'dmg') .. '[fg] damage' end,
2021-04-07 03:26:59 +02:00
['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,
2021-04-10 00:46:49 +02:00
['saboteur'] = function(lvl) return '[fg]calls [yellow]2[fg] saboteurs to seek targets and deal [yellow]' .. get_character_stat('saboteur', lvl, 'dmg') .. ' AoE[fg] damage' end,
2021-04-11 03:37:11 +02:00
['stormweaver'] = function(lvl) return '[fg]infuses projectiles with chain lightning that deals [yellow]20%[fg] damage to [yellow]2[fg] enemies' end,
2021-04-07 03:26:59 +02:00
['sage'] = function(lvl) return '[fg]shoots a slow projectile that draws enemies in' end,
2021-04-11 03:37:11 +02:00
['squire'] = function(lvl) return '[yellow]+15%[fg] damage and defense to all allies' end,
['cannoneer'] = function(lvl) return '[fg]shoots a projectile that deals [yellow]' .. 2*get_character_stat('cannoneer', lvl, 'dmg') .. ' AoE[fg] damage' end,
['dual_gunner'] = function(lvl) return '[fg]shoots two parallel projectiles, each dealing [yellow]' .. get_character_stat('dual_gunner', lvl, 'dmg') .. '[fg] damage' end,
2021-04-07 03:26:59 +02:00
['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,
2021-04-10 00:46:49 +02:00
['chronomancer'] = function(lvl) return '[yellow]+20%[fg] attack speed to all allies' end,
2021-04-07 03:26:59 +02:00
['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,
2021-04-10 00:46:49 +02:00
['plague_doctor'] = function(lvl) return '[fg]creates an area that deals [yellow]' .. get_character_stat('plague_doctor', lvl, 'dmg') .. '[fg] damage per second' end,
2021-04-12 04:51:34 +02:00
['barbarian'] = function(lvl) return '[fg]deals [yellow]' .. get_character_stat('barbarian', lvl, 'dmg') .. '[fg] AoE damage and stuns enemies hit for [yellow]4[fg] seconds' end,
['juggernaut'] = function(lvl) return '[fg]deals [yellow]' .. get_character_stat('juggernaut', lvl, 'dmg') .. '[fg] AoE damage and pushes enemies away with a strong force' end,
['lich'] = function(lvl) return '[fg]launches a slow projectile that jumps [yellow]7[fg] times, dealing [yellow]' .. 2*get_character_stat('lich', lvl, 'dmg') .. '[fg] damage per hit' end,
['cryomancer'] = function(lvl) return '[fg]nearby enemies take [yellow]' .. get_character_stat('cryomancer', lvl, 'dmg') .. '[fg] damage per second' end,
['pyromancer'] = function(lvl) return '[fg]nearby enemies take [yellow]' .. get_character_stat('pyromancer', lvl, 'dmg') .. '[fg] damage per second' end,
2021-04-07 03:26:59 +02:00
['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,
2021-04-13 03:23:53 +02:00
['launcher'] = function(lvl) return '[fg]nearby enemies are pushed after [yellow]4[fg] seconds, taking [yellow]' .. 2*get_character_stat('launcher', lvl, 'dmg') .. '[fg] damage on wall hit' end,
['bard'] = function(lvl) return "[fg]throws a knife that deals [yellow]" .. get_character_stat('bard', lvl, 'dmg') .. "[fg] damage and inflicts enemies hit with the bard's curse" end,
2021-04-07 03:26:59 +02:00
['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]' ..
2021-04-13 03:23:53 +02:00
get_character_stat('assassin', lvl, 'dmg')/2 .. '[fg] damage per second for [yellow]3[fg] seconds' end,
['host'] = function(lvl) return '[fg]periodically spawn [yellow]1[fg] small critter' end,
2021-04-07 03:26:59 +02:00
['carver'] = function(lvl) return '[fg]carves a statue that periodically heals for [yellow]20%[fg] max HP in an area around it' end,
2021-04-12 04:51:34 +02:00
['bane'] = function(lvl) return '[fg]creates a large area that curses enemies to take [yellow]50%[fg] increased damage over time' end,
2021-04-07 03:26:59 +02:00
['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,
2021-04-12 04:51:34 +02:00
['highlander'] = function(lvl) return '[fg]deals [yellow]' .. 6*get_character_stat('highlander', lvl, 'dmg') .. '[fg] AoE damage' end,
['sapper'] = function(lvl) return '[fg]periodically steals [yellow]5%[fg] max HP per second from nearby enemies and gain 25% increased movement speed' end,
2021-04-07 03:26:59 +02:00
['priest'] = function(lvl) return '[fg]heals all allies for [yellow]20%[fg] their max HP' end,
2021-04-12 04:51:34 +02:00
['infestor'] = function(lvl) return '[fg]curses enemies in an area for [yellow]6[fg] seconds, they will release multiple critters on death' end,
2021-04-10 00:46:49 +02:00
['flagellant'] = function(lvl) return '[fg]deals damage to self and grants [yellow]+4%[fg] damage to all allies per cast' end,
2021-03-06 04:53:44 +01:00
}
2021-04-10 00:46:49 +02:00
character_effect_names = {
['vagrant'] = '[fg]Champion',
['swordsman'] = '[yellow]Cleave',
['wizard'] = '[blue]Magic Missile',
['archer'] = '[green]Bounce Shot',
['scout'] = '[red]Dagger Resonance',
['cleric'] = '[green]Mass Heal ',
['outlaw'] = '[red]Flying Daggers',
['blade'] = '[yellow]Blade Resonance',
['elementor'] = '[blue]Windfield',
['saboteur'] = '[orange]Demoman',
2021-04-11 03:37:11 +02:00
['stormweaver'] = '[blue]Wide Lightning',
2021-04-10 00:46:49 +02:00
['sage'] = '[purple]Dimension Compression',
['squire'] = '[yellow]Repair',
['cannoneer'] = '[orange]Cannon Barrage',
['dual_gunner'] = '[green]Gun Kata',
['hunter'] = '[green]Feral Pack',
['chronomancer'] = '[blue]Quicken',
['spellblade'] = '[blue]Spiralism',
['psykeeper'] = '[fg]Crucio',
['engineer'] = '[orange]Upgrade',
2021-04-11 03:37:11 +02:00
['plague_doctor'] = '[purple]Black Death Steam',
2021-04-12 04:51:34 +02:00
['barbarian'] = '[yellow]Seism',
2021-04-10 00:46:49 +02:00
['juggernaut'] = '[yellow]Brutal Impact',
2021-04-12 04:51:34 +02:00
['lich'] = '[blue]Chain Frost',
2021-04-10 00:46:49 +02:00
['cryomancer'] = '[blue]Frostbite',
['pyromancer'] = '[red]Ignite',
2021-04-12 04:51:34 +02:00
['corruptor'] = '[orange]Corruption',
2021-04-10 00:46:49 +02:00
['beastmaster'] = '[red]Call of the Wild',
['launcher'] = '[orange]Kineticism',
2021-04-13 03:23:53 +02:00
['bard'] = "[red]The Bard's Song",
2021-04-10 00:46:49 +02:00
['assassin'] = '[purple]Toxic Delivery',
2021-04-12 04:51:34 +02:00
['host'] = '[orange]Invasion',
2021-04-10 00:46:49 +02:00
['carver'] = '[green]World Tree',
2021-04-12 04:51:34 +02:00
['bane'] = '[purple]Nightmare',
2021-04-10 00:46:49 +02:00
['psykino'] = '[fg]Magnetic Force',
['arbalester'] = '[green]Ballista Sinitra',
2021-04-12 04:51:34 +02:00
['highlander'] = '[yellow]Crosscut',
['sapper'] = '[blue]Enduring Sap',
2021-04-10 00:46:49 +02:00
['priest'] = '[green]Divine Intervention',
2021-04-12 04:51:34 +02:00
['infestor'] = '[orange]Infestation',
2021-04-10 00:46:49 +02:00
['flagellant'] = '[red]Zealotry',
}
2021-03-07 03:35:18 +01:00
2021-04-10 00:46:49 +02:00
character_effect_names_gray = {
['vagrant'] = '[light_bg]Champion',
['swordsman'] = '[light_bg]Cleave',
['wizard'] = '[light_bg]Magic Missile',
['archer'] = '[light_bg]Bounce Shot',
2021-04-11 03:37:11 +02:00
['scout'] = '[light_bg]Dagger Resonance',
2021-04-10 00:46:49 +02:00
['cleric'] = '[light_bg]Mass Heal ',
2021-04-11 03:37:11 +02:00
['outlaw'] = '[light_bg]Flying Daggers',
2021-04-10 00:46:49 +02:00
['blade'] = '[light_bg]Blade Resonance',
['elementor'] = '[light_bg]Windfield',
2021-04-11 03:37:11 +02:00
['saboteur'] = '[light_bg]Demoman',
['stormweaver'] = '[light_bg]Wide Lightning',
2021-04-10 00:46:49 +02:00
['sage'] = '[light_bg]Dimension Compression',
['squire'] = '[light_bg]Repair',
['cannoneer'] = '[light_bg]Cannon Barrage',
['dual_gunner'] = '[light_bg]Gun Kata',
['hunter'] = '[light_bg]Feral Pack',
['chronomancer'] = '[light_bg]Quicken',
['spellblade'] = '[light_bg]Spiralism',
['psykeeper'] = '[light_bg]Crucio',
['engineer'] = '[light_bg]Upgrade',
2021-04-11 03:37:11 +02:00
['plague_doctor'] = '[light_bg]Black Death Steam',
2021-04-10 00:46:49 +02:00
['fisherman'] = '[light_bg]Electric Net',
['juggernaut'] = '[light_bg]Brutal Impact',
['lich'] = '[light_bg]Piercing Frost',
['cryomancer'] = '[light_bg]Frostbite',
['pyromancer'] = '[light_bg]Ignite',
2021-04-12 04:51:34 +02:00
['corruptor'] = '[light_bg]Corruption',
2021-04-10 00:46:49 +02:00
['beastmaster'] = '[light_bg]Call of the Wild',
['launcher'] = '[light_bg]Kineticism',
['spiker'] = '[light_bg]Caltrops',
['assassin'] = '[light_bg]Toxic Delivery',
['host'] = '[light_bg]Invasion',
['carver'] = '[light_bg]World Tree',
['bane'] = '[light_bg]Baneling Swarm',
['psykino'] = '[light_bg]Magnetic Force',
['arbalester'] = '[light_bg]Ballista Sinitra',
['barbarian'] = '[light_bg]Berserk',
['sapper'] = '[light_bg]Chain Reaction',
['priest'] = '[light_bg]Divine Intervention',
2021-04-12 04:51:34 +02:00
['infestor'] = '[light_bg]Infestation',
2021-04-10 00:46:49 +02:00
['flagellant'] = '[light_bg]Zealotry',
}
character_effect_descriptions = {
['vagrant'] = function() return '[yellow]+10%[fg] damage and [yellow]+5%[fg] attack speed per active set' end,
['swordsman'] = function() return "[fg]the swordsman's damage is [yellow]doubled" end,
['wizard'] = function() return '[fg]the projectile chains [yellow]5[fg] times' end,
['archer'] = function() return '[fg]the arrow ricochets off walls [yellow]3[fg] times' end,
['scout'] = function() return '[yellow]+25%[fg] damage per chain and [yellow]+3[fg] chains' end,
['cleric'] = function() return '[fg]heals all units' end,
['outlaw'] = function() return "[yellow]+50%[fg] outlaw attack speed and his knives seek enemies" end,
['blade'] = function() return '[fg]deal additional [yellow]' .. get_character_stat('blade', 3, 'dmg')/2 .. '[fg] damage per enemy hit' end,
['elementor'] = function() return '[fg]slows enemies by [yellow]60%[fg] for [yellow]6[fg] seconds on hit' end,
['saboteur'] = function() return '[fg]the explosion has [yellow]50%[fg] chance to crit, increasing in size and dealing [yellow]2x[fg] damage' end,
2021-04-11 03:37:11 +02:00
['stormweaver'] = function() return "[fg]chain lightning's trigger area of effect and number of units hit is [yellow]doubled" end,
['sage'] = function() return '[fg]when the projectile expires deal [yellow]' .. 3*get_character_stat('sage', 3, 'dmg') .. '[fg] damage to all enemies under its influence' end,
2021-04-10 00:46:49 +02:00
['squire'] = function() return '[fg]you can reroll your item choices once, these opportunities stack if unused' end,
2021-04-11 03:37:11 +02:00
['cannoneer'] = function() return '[fg]showers the hit area in [yellow]5[fg] additional cannon shots that deal [yellow]' .. get_character_stat('cannoneer', 3, 'dmg')/2 .. '[fg] AoE damage' end,
['dual_gunner'] = function() return '[fg]every 5th attack shoot in rapid succession for [yellow]2[fg] seconds' end,
['hunter'] = function() return '[fg]summons [yellow]3[fg] pets and the pets ricochet off walls once' end,
2021-04-10 00:46:49 +02:00
['chronomancer'] = function() return '[fg]enemies take damave over time [yellow]50%[fg] faster' end,
['spellblade'] = function() return '[fg]faster projectile speed and tighter turns' end,
2021-04-11 03:37:11 +02:00
['psykeeper'] = function() return '[fg]also redistributes damage taken as damage to all enemies at [yellow]double[fg] value' end,
['engineer'] = function() return '[fg]every 3rd sentry dropped upgrade all sentries with [yellow]+100%[fg] damage and attack speed' end,
['plague_doctor'] = function() return '[fg]nearby enemies take an additional [yellow]' .. get_character_stat('plague_doctor', 3, 'dmg') .. '[fg] damage per second' end,
2021-04-12 04:51:34 +02:00
['barbarian'] = function() return '[fg]stunned enemies also take [yellow]100%[fg] increased damage' end,
['juggernaut'] = function() return '[fg]enemies pushed by the juggernaut take [yellow]' .. 4*get_character_stat('juggernaut', 3, 'dmg') .. '[fg] damage if they hit a wall' end,
['lich'] = function() return '[fg]chain frost slows enemies hit by [yellow]80%[fg] for [yellow]2[fg] seconds and chains [yellow]+7[fg] times' end,
['cryomancer'] = function() return '[fg]enemies are also slowed by [yellow]60%[fg] while in the area' end,
2021-04-10 00:46:49 +02:00
['pyromancer'] = function() return '[fg]enemies killed by the pyromancer explode, dealing [yellow]' .. get_character_stat('pyromancer', 3, 'dmg') .. '[fg] AoE damage' end,
['corruptor'] = function() return '[fg]spawn [yellow]3[fg] small critters if the corruptor hits an enemy' end,
['beastmaster'] = function() return '[fg]spawn [yellow]2[fg] small critters if the beastmaster gets hit' end,
2021-04-13 03:23:53 +02:00
['launcher'] = function() return '[fg]enemies launched take [yellow]300%[fg] more damage when they hit walls' end,
['bard'] = function() return '[fg]every 8th attack consume the curse to deal [yellow]' .. 4*get_character_stat('bard', 3, 'dmg') .. '[fg] damage to affected enemies' end,
2021-04-10 00:46:49 +02:00
['assassin'] = function() return '[fg]poison inflicted from crits deals [yellow]8x[fg] damage' end,
2021-04-13 03:23:53 +02:00
['host'] = function() return '[fg][yellow]+100%[fg] critter spawn rate and spawn [yellow]2[fg] critters instead' end,
2021-04-10 00:46:49 +02:00
['carver'] = function() return '[fg]carves a tree that heals in a bigger area and removes all buffs from enemies' end,
2021-04-12 04:51:34 +02:00
['bane'] = function() return '[fg]the area also deals [yellow]' .. get_character_stat('bane', 3, 'dmg') .. '[fg] damage per second and slows enemies by [yellow]50%[fg]' end,
2021-04-10 00:46:49 +02:00
['psykino'] = function() return '[fg]enemies pulled together are forced to collide with each other multiple times' end,
['arbalester'] = function() return '[fg]enemies hit by the arrow have defense decreased by [yellow]100[fg] for [yellow]4[fg] seconds' end,
2021-04-12 04:51:34 +02:00
['crosscut'] = function() return '[fg]two crosscutting areas of +100% size are created instead' end,
['sapper'] = function() return '[fg]sapped enemies permanently take [yellow]' .. get_character_stat('sapper', 3, 'dmg') .. '[fg] damage per second' end,
2021-04-10 00:46:49 +02:00
['priest'] = function() return '[fg]at the start of the round pick [yellow]3[fg] units at random and grants them a buff that prevents death once' end,
2021-04-12 04:51:34 +02:00
['infestor'] = function() return '[fg][yellow]triples[fg] the number of critters released' end,
['flagellant'] = function() return '[fg]deals damage to all allies instead and grants stacking [yellow]+10%[fg] damage to all allies per cast' end,
2021-04-10 00:46:49 +02:00
}
2021-03-06 04:53:44 +01:00
2021-03-07 03:35:18 +01:00
character_stats = {
['vagrant'] = function(lvl) return get_character_stat_string('vagrant', lvl) end,
['swordsman'] = function(lvl) return get_character_stat_string('swordsman', lvl) end,
['wizard'] = function(lvl) return get_character_stat_string('wizard', lvl) end,
['archer'] = function(lvl) return get_character_stat_string('archer', lvl) end,
['scout'] = function(lvl) return get_character_stat_string('scout', lvl) end,
['cleric'] = function(lvl) return get_character_stat_string('cleric', lvl) end,
['outlaw'] = function(lvl) return get_character_stat_string('outlaw', lvl) end,
['blade'] = function(lvl) return get_character_stat_string('blade', lvl) end,
['elementor'] = function(lvl) return get_character_stat_string('elementor', lvl) end,
['saboteur'] = function(lvl) return get_character_stat_string('saboteur', lvl) end,
['stormweaver'] = function(lvl) return get_character_stat_string('stormweaver', lvl) end,
['sage'] = function(lvl) return get_character_stat_string('sage', lvl) end,
['squire'] = function(lvl) return get_character_stat_string('squire', lvl) end,
['cannoneer'] = function(lvl) return get_character_stat_string('cannoneer', lvl) end,
['dual_gunner'] = function(lvl) return get_character_stat_string('dual_gunner', lvl) end,
['hunter'] = function(lvl) return get_character_stat_string('hunter', lvl) end,
['chronomancer'] = function(lvl) return get_character_stat_string('chronomancer', lvl) end,
['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,
2021-04-07 03:26:59 +02:00
['plague_doctor'] = function(lvl) return get_character_stat_string('plague_doctor', lvl) end,
2021-04-12 04:51:34 +02:00
['barbarian'] = function(lvl) return get_character_stat_string('barbarian', lvl) end,
2021-04-07 03:26:59 +02:00
['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,
2021-04-12 04:51:34 +02:00
['bard'] = function(lvl) return get_character_stat_string('bard', lvl) end,
2021-04-07 03:26:59 +02:00
['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,
2021-04-12 04:51:34 +02:00
['highlander'] = function(lvl) return get_character_stat_string('highlander', lvl) end,
2021-04-07 03:26:59 +02:00
['sapper'] = function(lvl) return get_character_stat_string('sapper', lvl) end,
['priest'] = function(lvl) return get_character_stat_string('priest', lvl) end,
2021-04-12 04:51:34 +02:00
['infestor'] = function(lvl) return get_character_stat_string('infestor', lvl) end,
2021-04-07 03:26:59 +02:00
['flagellant'] = function(lvl) return get_character_stat_string('flagellant', lvl) end,
2021-03-06 04:53:44 +01:00
}
2021-03-08 05:33:01 +01:00
class_stat_multipliers = {
2021-04-10 00:46:49 +02:00
['ranger'] = {hp = 1, dmg = 1.2, aspd = 1.5, area_dmg = 1, area_size = 1, def = 0.9, mvspd = 1.2},
['warrior'] = {hp = 1.4, dmg = 1.1, aspd = 0.9, area_dmg = 1, area_size = 1, def = 1.25, mvspd = 0.9},
['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},
['healer'] = {hp = 1.2, dmg = 1, aspd = 0.5, area_dmg = 1, area_size = 1, def = 1.2, mvspd = 1},
['enchanter'] = {hp = 1.2, dmg = 1, aspd = 1, area_dmg = 1, area_size = 1, def = 1.2, mvspd = 1.2},
['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},
['psyker'] = {hp = 1.5, dmg = 1, aspd = 1, area_dmg = 1, area_size = 1, def = 0.5, mvspd = 1},
2021-04-12 04:51:34 +02:00
['curser'] = {hp = 1, dmg = 1, aspd = 1, area_dmg = 1, area_size = 1, def = 0.75, mvspd = 1},
2021-04-10 00:46:49 +02:00
['forcer'] = {hp = 1.25, dmg = 1.1, aspd = 0.9, area_dmg = 0.75, area_size = 0.75, def = 1.2, mvspd = 1},
['swarmer'] = {hp = 1.2, dmg = 1, aspd = 1.25, area_dmg = 1, area_size = 1, def = 0.75, mvspd = 0.5},
['voider'] = {hp = 0.75, dmg = 1.3, aspd = 1, area_dmg = 0.8, area_size = 0.75, def = 0.6, mvspd = 0.8},
2021-03-08 05:33:01 +01:00
['seeker'] = {hp = 0.5, dmg = 1, aspd = 1, area_dmg = 1, area_size = 1, def = 1, mvspd = 0.3},
2021-04-04 01:49:54 +02:00
['mini_boss'] = {hp = 1, dmg = 1, aspd = 1, area_dmg = 1, area_size = 1, def = 1, mvspd = 0.3},
2021-04-03 04:53:12 +02:00
['enemy_critter'] = {hp = 1, dmg = 1, aspd = 1, area_dmg = 1, area_size = 1, def = 1, mvspd = 0.5},
2021-03-08 05:33:01 +01:00
['saboteur'] = {hp = 1, dmg = 1, aspd = 1, area_dmg = 1, area_size = 1, def = 1, mvspd = 1.4},
2021-04-13 03:23:53 +02:00
['overlord'] = {hp = 1.5, dmg = 1, aspd = 1, area_dmg = 1, area_size = 1, def = 1, mvspd = 0.5},
2021-03-08 05:33:01 +01:00
}
2021-04-07 03:26:59 +02:00
local ylb1 = function(lvl) return lvl >= 2 and 'fg' or (lvl >= 1 and 'yellow' or 'light_bg') end
2021-03-12 04:05:20 +01:00
local ylb2 = function(lvl) return (lvl >= 2 and 'yellow' or 'light_bg') end
2021-03-08 05:33:01 +01:00
class_descriptions = {
2021-04-07 03:26:59 +02:00
['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,
2021-04-12 04:51:34 +02:00
['curser'] = function(lvl) return '[' .. ylb1(lvl) .. ']2[' .. ylb2(lvl) .. ']/4 [fg]- [' .. ylb1(lvl) .. ']+25%[' .. ylb2(lvl) .. ']/+50% [fg]curse effectiveness and duration' end,
2021-04-07 03:26:59 +02:00
['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,
2021-03-11 03:49:16 +01:00
}
tier_to_characters = {
2021-04-07 03:26:59 +02:00
[1] = {'vagrant', 'swordsman', 'wizard', 'archer', 'scout', 'cleric'},
2021-04-12 04:51:34 +02:00
[2] = {'saboteur', 'sage', 'squire', 'dual_gunner', 'hunter', 'chronomancer', 'barbarian', 'cryomancer', 'beastmaster', 'launcher', 'bard', 'carver'},
[3] = {'outlaw', 'elementor', 'stormweaver', 'spellblade', 'psykeeper', 'engineer', 'juggernaut', 'pyromancer', 'corruptor', 'assassin', 'bane', 'arbalester', 'infestor', 'flagellant'},
[4] = {'priest', 'highlander', 'psykino', 'lich', 'host', 'sapper', 'blade', 'plague_doctor', 'cannoneer'},
2021-03-11 03:49:16 +01:00
}
2021-04-02 03:59:26 +02:00
non_attacking_characters = {'cleric', 'stormweaver', 'squire', 'chronomancer', 'sage'}
2021-03-11 03:49:16 +01:00
character_tiers = {
['vagrant'] = 1,
['swordsman'] = 1,
['wizard'] = 1,
['archer'] = 1,
['scout'] = 1,
['cleric'] = 1,
['outlaw'] = 3,
2021-04-07 03:26:59 +02:00
['blade'] = 4,
2021-03-11 03:49:16 +01:00
['elementor'] = 3,
['saboteur'] = 2,
2021-04-07 03:26:59 +02:00
['stormweaver'] = 3,
2021-03-11 03:49:16 +01:00
['sage'] = 2,
['squire'] = 2,
2021-04-07 03:26:59 +02:00
['cannoneer'] = 4,
2021-03-11 03:49:16 +01:00
['dual_gunner'] = 2,
['hunter'] = 2,
['chronomancer'] = 2,
['spellblade'] = 3,
['psykeeper'] = 3,
['engineer'] = 3,
2021-04-07 03:26:59 +02:00
['plague_doctor'] = 4,
2021-04-12 04:51:34 +02:00
['barbarian'] = 2,
2021-04-07 03:26:59 +02:00
['juggernaut'] = 3,
['lich'] = 4,
['cryomancer'] = 2,
['pyromancer'] = 3,
['corruptor'] = 3,
['beastmaster'] = 2,
['launcher'] = 2,
2021-04-12 04:51:34 +02:00
['bard'] = 2,
2021-04-07 03:26:59 +02:00
['assassin'] = 3,
['host'] = 4,
['carver'] = 2,
['bane'] = 3,
['psykino'] = 4,
['arbalester'] = 3,
2021-04-12 04:51:34 +02:00
['highlander'] = 4,
2021-04-07 03:26:59 +02:00
['sapper'] = 4,
['priest'] = 4,
2021-04-12 04:51:34 +02:00
['infestor'] = 3,
2021-04-07 03:26:59 +02:00
['flagellant'] = 3,
2021-03-11 03:49:16 +01:00
}
get_number_of_units_per_class = function(units)
local rangers = 0
local warriors = 0
local healers = 0
local mages = 0
local nukers = 0
local conjurers = 0
local rogues = 0
local enchanters = 0
2021-04-07 03:26:59 +02:00
local psykers = 0
2021-04-12 04:51:34 +02:00
local cursers = 0
2021-04-07 03:26:59 +02:00
local forcers = 0
local swarmers = 0
local voiders = 0
2021-03-11 03:49:16 +01:00
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
if unit_class == 'warrior' then warriors = warriors + 1 end
if unit_class == 'healer' then healers = healers + 1 end
if unit_class == 'mage' then mages = mages + 1 end
if unit_class == 'nuker' then nukers = nukers + 1 end
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
2021-04-07 03:26:59 +02:00
if unit_class == 'psyker' then psykers = psykers + 1 end
2021-04-12 04:51:34 +02:00
if unit_class == 'curser' then cursers = cursers + 1 end
2021-04-07 03:26:59 +02:00
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
2021-03-11 03:49:16 +01:00
end
end
2021-04-07 03:26:59 +02:00
return {ranger = rangers, warrior = warriors, healer = healers, mage = mages, nuker = nukers, conjurer = conjurers, rogue = rogues,
2021-04-12 04:51:34 +02:00
enchanter = enchanters, psyker = psykers, curser = cursers, forcer = forcers, swarmer = swarmers, voider = voiders}
2021-03-11 03:49:16 +01:00
end
2021-04-10 00:46:49 +02:00
get_class_levels = function(units)
local units_per_class = get_number_of_units_per_class(units)
local units_to_class_level = function(number_of_units, class)
if class == 'ranger' or class == 'warrior' or class == 'mage' or class == 'nuker' or class == 'rogue' then
if number_of_units >= 6 then return 2
elseif number_of_units >= 3 then return 1
else return 0 end
2021-04-12 04:51:34 +02:00
elseif class == 'healer' or class == 'conjurer' or class == 'enchanter' or class == 'psyker' or class == 'curser' or class == 'forcer' or class == 'swarmer' or class == 'voider' then
2021-04-10 00:46:49 +02:00
if number_of_units >= 4 then return 2
elseif number_of_units >= 2 then return 1
else return 0 end
end
end
return {
ranger = units_to_class_level(units_per_class.ranger, 'ranger'),
warrior = units_to_class_level(units_per_class.warrior, 'warrior'),
mage = units_to_class_level(units_per_class.mage, 'mage'),
nuker = units_to_class_level(units_per_class.nuker, 'nuker'),
rogue = units_to_class_level(units_per_class.rogue, 'rogue'),
healer = units_to_class_level(units_per_class.healer, 'healer'),
conjurer = units_to_class_level(units_per_class.conjurer, 'conjurer'),
enchanter = units_to_class_level(units_per_class.enchanter, 'enchanter'),
psyker = units_to_class_level(units_per_class.psyker, 'psyker'),
2021-04-12 04:51:34 +02:00
curser = units_to_class_level(units_per_class.curser, 'curser'),
2021-04-10 00:46:49 +02:00
forcer = units_to_class_level(units_per_class.forcer, 'forcer'),
swarmer = units_to_class_level(units_per_class.swarmer, 'swarmer'),
voider = units_to_class_level(units_per_class.voider, 'voider'),
}
end
2021-03-12 04:05:20 +01:00
get_classes = function(units)
local classes = {}
for _, unit in ipairs(units) do
table.insert(classes, table.copy(character_classes[unit.character]))
end
return table.unify(table.flatten(classes))
end
2021-03-11 03:49:16 +01:00
class_set_numbers = {
2021-04-07 03:26:59 +02:00
['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,
2021-04-12 04:51:34 +02:00
['curser'] = function(units) return 2, 4, get_number_of_units_per_class(units).curser end,
2021-04-07 03:26:59 +02:00
['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,
2021-03-08 05:33:01 +01:00
}
2021-03-14 06:40:12 +01:00
level_to_tier_weights = {
2021-04-07 03:26:59 +02:00
[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},
2021-03-14 06:40:12 +01:00
}
2021-03-15 05:01:04 +01:00
level_to_gold_gained = {
2021-03-15 21:54:22 +01:00
[1] = {2, 2},
[2] = {2, 2},
2021-03-17 10:30:20 +01:00
[3] = {4, 6},
2021-03-15 05:01:04 +01:00
[4] = {2, 3},
[5] = {3, 5},
2021-03-17 10:30:20 +01:00
[6] = {6, 10},
2021-03-15 05:01:04 +01:00
[7] = {4, 7},
[8] = {4, 7},
2021-03-17 10:30:20 +01:00
[9] = {10, 16},
2021-03-15 05:01:04 +01:00
[10] = {5, 8},
[11] = {5, 8},
2021-03-17 10:30:20 +01:00
[12] = {12, 20},
2021-03-15 05:01:04 +01:00
[13] = {6, 10},
[14] = {6, 10},
2021-03-17 10:30:20 +01:00
[15] = {14, 22},
2021-03-15 05:01:04 +01:00
[16] = {8, 12},
[17] = {8, 12},
2021-03-17 10:30:20 +01:00
[18] = {16, 24},
2021-03-15 05:01:04 +01:00
[19] = {8, 12},
[20] = {10, 14},
2021-03-17 10:30:20 +01:00
[21] = {20, 28},
2021-03-15 05:01:04 +01:00
[22] = {11, 15},
[23] = {11, 15},
2021-03-17 10:30:20 +01:00
[24] = {24, 36},
[25] = {100, 100},
2021-03-15 05:01:04 +01:00
}
2021-04-10 00:46:49 +02:00
level_to_boss = {
2021-04-04 01:49:54 +02:00
[6] = 'speed_booster',
[12] = 'exploder',
[18] = 'swarmer',
[24] = 'bouncer',
2021-04-07 03:26:59 +02:00
[25] = 'randomizer',
2021-04-04 01:49:54 +02:00
}
2021-03-15 05:01:04 +01:00
gold = 2
2021-03-02 06:27:15 +01:00
2021-02-18 05:11:25 +01:00
main = Main()
2021-03-05 08:29:19 +01:00
main:add(BuyScreen'buy_screen')
2021-04-11 03:37:11 +02:00
main:go_to('buy_screen', 22, {
2021-04-13 03:23:53 +02:00
{character = 'host', level = 3},
2021-04-10 00:46:49 +02:00
})
2021-03-29 20:26:10 +02:00
--[[
main:add(Arena'arena')
main:go_to('arena', 18, {
{character = 'scout', level = 3},
{character = 'engineer', level = 3},
{character = 'wizard', level = 3},
{character = 'swordsman', level = 3},
{character = 'outlaw', level = 3},
{character = 'archer', level = 3},
{character = 'cannoneer', level = 3},
{character = 'spellblade', level = 3},
})
]]--
2021-02-18 05:11:25 +01:00
end
function update(dt)
main:update(dt)
2021-03-17 10:30:20 +01:00
2021-03-29 20:26:10 +02:00
if input.n.pressed then
2021-03-17 10:30:20 +01:00
if sfx.volume == 0.5 then
sfx.volume = 0
elseif sfx.volume == 0 then
sfx.volume = 0.5
end
end
if input.m.pressed then
if music.volume == 0.5 then
music.volume = 0
elseif music.volume == 0 then
music.volume = 0.5
end
end
2021-02-18 05:11:25 +01:00
end
function draw()
shared_draw(function()
main:draw()
end)
end
function love.run()
return engine_run({
2021-03-29 20:26:10 +02:00
game_name = 'SNKRX',
window_width = 480*3,
window_height = 270*3,
2021-02-18 05:11:25 +01:00
})
end