2021-02-18 05:11:25 +01:00
require ' engine '
require ' shared '
require ' arena '
2021-06-23 05:53:37 +02:00
require ' mainmenu '
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-04-24 05:19:22 +02:00
require ' media '
2021-02-18 05:11:25 +01:00
function init ( )
shared_init ( )
2021-05-17 10:05:48 +02:00
input : bind ( ' move_left ' , { ' a ' , ' left ' , ' dpleft ' , ' m1 ' } )
2021-06-28 06:47:57 +02:00
input : bind ( ' move_right ' , { ' d ' , ' e ' , ' s ' , ' right ' , ' dpright ' , ' m2 ' } )
2021-04-26 03:17:31 +02:00
input : bind ( ' enter ' , { ' space ' , ' return ' , ' fleft ' , ' fdown ' , ' fright ' } )
2021-02-18 05:11:25 +01:00
2021-02-27 05:28:00 +01:00
local s = { tags = { sfx } }
2021-07-03 07:08:35 +02:00
artificer1 = Sound ( ' 458586__inspectorj__ui-mechanical-notification-01-fx.ogg ' , s )
explosion1 = Sound ( ' Explosion Grenade_04.ogg ' , s )
2021-06-18 23:36:00 +02:00
mine1 = Sound ( ' Weapon Swap 2.ogg ' , s )
2021-06-17 07:45:14 +02:00
level_up1 = Sound ( ' Buff 4.ogg ' , s )
unlock1 = Sound ( ' Unlock 3.ogg ' , s )
2021-06-10 19:39:40 +02:00
gambler1 = Sound ( ' Collect 5.ogg ' , s )
usurer1 = Sound ( ' Shadow Punch 2.ogg ' , s )
2021-06-24 17:09:29 +02:00
orb1 = Sound ( ' Collect 2.ogg ' , s )
2021-06-10 19:39:40 +02:00
gold1 = Sound ( ' Collect 5.ogg ' , s )
gold2 = Sound ( ' Coins - Gears - Slot.ogg ' , s )
2021-06-03 22:02:04 +02:00
psychic1 = Sound ( ' Magical Impact 13.ogg ' , s )
fire1 = Sound ( ' Fire bolt 3.ogg ' , s )
fire2 = Sound ( ' Fire bolt 5.ogg ' , s )
fire3 = Sound ( ' Fire bolt 10.ogg ' , s )
earth1 = Sound ( ' Earth Bolt 1.ogg ' , s )
earth2 = Sound ( ' Earth Bolt 14.ogg ' , s )
earth3 = Sound ( ' Earth Bolt 20.ogg ' , s )
2021-06-02 07:43:03 +02:00
illusion1 = Sound ( ' Buff 5.ogg ' , s )
2021-04-21 04:39:41 +02:00
thunder1 = Sound ( ' 399656__bajko__sfx-thunder-blast.ogg ' , s )
2021-04-15 02:02:57 +02:00
flagellant1 = Sound ( ' Whipping Horse 3.ogg ' , s )
2021-04-13 03:23:53 +02:00
bard2 = Sound ( ' 376532__womb-affliction__flute-trill.ogg ' , s )
2021-06-05 08:11:23 +02:00
arcane2 = Sound ( ' Magical Impact 12.ogg ' , s )
2021-04-12 04:51:34 +02:00
frost1 = Sound ( ' Frost Bolt 20.ogg ' , s )
2021-06-02 07:43:03 +02:00
arcane1 = Sound ( ' Magical Impact 26.ogg ' , s )
2021-04-12 04:51:34 +02:00
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-05-17 10:05:48 +02:00
song1 = Sound ( ' Kubbi - Ember - 01 Pathfinder.ogg ' , { tags = { music } } )
song2 = Sound ( ' Kubbi - Ember - 02 Ember.ogg ' , { tags = { music } } )
song3 = Sound ( ' Kubbi - Ember - 03 Firelight.ogg ' , { tags = { music } } )
song4 = Sound ( ' Kubbi - Ember - 04 Cascade.ogg ' , { tags = { music } } )
song5 = Sound ( ' Kubbi - Ember - 05 Compass.ogg ' , { tags = { music } } )
death_song = Sound ( ' Kubbi - Ember - 09 Formed by Glaciers.ogg ' , { tags = { music } } )
2021-02-22 03:54:50 +01:00
2021-06-08 06:21:35 +02:00
lock_image = Image ( ' lock ' )
2021-04-30 01:38:36 +02:00
speed_booster_elite = Image ( ' speed_booster_elite ' )
exploder_elite = Image ( ' exploder_elite ' )
swarmer_elite = Image ( ' swarmer_elite ' )
forcer_elite = Image ( ' forcer_elite ' )
cluster_elite = Image ( ' cluster_elite ' )
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-06-02 07:43:03 +02:00
sorcerer = Image ( ' sorcerer ' )
2021-06-10 19:39:40 +02:00
mercenary = Image ( ' mercenary ' )
2021-06-25 06:21:07 +02:00
explorer = Image ( ' explorer ' )
2021-06-16 07:37:40 +02:00
star = Image ( ' star ' )
arrow = Image ( ' arrow ' )
centipede = Image ( ' centipede ' )
2021-04-17 05:30:34 +02:00
ouroboros_technique_r = Image ( ' ouroboros_technique_r ' )
ouroboros_technique_l = Image ( ' ouroboros_technique_l ' )
amplify = Image ( ' amplify ' )
resonance = Image ( ' resonance ' )
ballista = Image ( ' ballista ' )
2021-06-16 07:37:40 +02:00
call_of_the_void = Image ( ' call_of_the_void ' )
crucio = Image ( ' crucio ' )
speed_3 = Image ( ' speed_3 ' )
damage_4 = Image ( ' damage_4 ' )
2021-06-17 07:45:14 +02:00
shoot_5 = Image ( ' shoot_5 ' )
2021-06-16 07:37:40 +02:00
death_6 = Image ( ' death_6 ' )
lasting_7 = Image ( ' lasting_7 ' )
defensive_stance = Image ( ' defensive_stance ' )
offensive_stance = Image ( ' offensive_stance ' )
kinetic_bomb = Image ( ' kinetic_bomb ' )
porcupine_technique = Image ( ' porcupine_technique ' )
last_stand = Image ( ' last_stand ' )
seeping = Image ( ' seeping ' )
deceleration = Image ( ' deceleration ' )
annihilation = Image ( ' annihilation ' )
malediction = Image ( ' malediction ' )
2021-06-18 07:32:19 +02:00
hextouch = Image ( ' hextouch ' )
2021-06-16 07:37:40 +02:00
whispers_of_doom = Image ( ' whispers_of_doom ' )
tremor = Image ( ' tremor ' )
heavy_impact = Image ( ' heavy_impact ' )
fracture = Image ( ' fracture ' )
meat_shield = Image ( ' meat_shield ' )
hive = Image ( ' hive ' )
baneling_burst = Image ( ' baneling_burst ' )
2021-04-17 05:30:34 +02:00
blunt_arrow = Image ( ' blunt_arrow ' )
explosive_arrow = Image ( ' explosive_arrow ' )
divine_machine_arrow = Image ( ' divine_machine_arrow ' )
chronomancy = Image ( ' chronomancy ' )
awakening = Image ( ' awakening ' )
divine_punishment = Image ( ' divine_punishment ' )
assassination = Image ( ' assassination ' )
2021-06-16 07:37:40 +02:00
flying_daggers = Image ( ' flying_daggers ' )
ultimatum = Image ( ' ultimatum ' )
2021-04-17 05:30:34 +02:00
magnify = Image ( ' magnify ' )
2021-05-21 08:17:31 +02:00
echo_barrage = Image ( ' echo_barrage ' )
2021-04-17 05:30:34 +02:00
unleash = Image ( ' unleash ' )
reinforce = Image ( ' reinforce ' )
payback = Image ( ' payback ' )
2021-06-16 07:37:40 +02:00
enchanted = Image ( ' enchanted ' )
freezing_field = Image ( ' freezing_field ' )
burning_field = Image ( ' burning_field ' )
gravity_field = Image ( ' gravity_field ' )
magnetism = Image ( ' magnetism ' )
insurance = Image ( ' insurance ' )
dividends = Image ( ' dividends ' )
berserking = Image ( ' berserking ' )
unwavering_stance = Image ( ' unwavering_stance ' )
unrelenting_stance = Image ( ' unrelenting_stance ' )
2021-06-25 06:21:07 +02:00
blessing = Image ( ' blessing ' )
haste = Image ( ' haste ' )
divine_barrage = Image ( ' divine_barrage ' )
orbitism = Image ( ' orbitism ' )
psyker_orbs = Image ( ' psyker_orbs ' )
psychosense = Image ( ' psychosense ' )
2021-07-04 06:50:31 +02:00
psychosink = Image ( ' psychosink ' )
2021-06-25 06:21:07 +02:00
rearm = Image ( ' rearm ' )
taunt = Image ( ' taunt ' )
2021-07-03 07:08:35 +02:00
construct_instability = Image ( ' construct_instability ' )
intimidation = Image ( ' intimidation ' )
vulnerability = Image ( ' vulnerability ' )
temporal_chains = Image ( ' temporal_chains ' )
ceremonial_dagger = Image ( ' ceremonial_dagger ' )
homing_barrage = Image ( ' homing_barrage ' )
critical_strike = Image ( ' critical_strike ' )
noxious_strike = Image ( ' noxious_strike ' )
infesting_strike = Image ( ' infesting_strike ' )
kinetic_strike = Image ( ' kinetic_strike ' )
burning_strike = Image ( ' burning_strike ' )
lucky_strike = Image ( ' lucky_strike ' )
healing_strike = Image ( ' healing_strike ' )
stunning_strike = Image ( ' stunning_strike ' )
silencing_strike = Image ( ' silencing_strike ' )
warping_shots = Image ( ' warping_shots ' )
culling_strike = Image ( ' culling_strike ' )
lightning_strike = Image ( ' lightning_strike ' )
psycholeak = Image ( ' psycholeak ' )
divine_blessing = Image ( ' divine_blessing ' )
2021-07-04 06:50:31 +02:00
hardening = Image ( ' hardening ' )
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-06-02 07:43:03 +02:00
[ ' sorcerer ' ] = blue2 [ 0 ] ,
2021-06-10 19:39:40 +02:00
[ ' mercenary ' ] = yellow2 [ 0 ] ,
2021-06-25 06:21:07 +02:00
[ ' explorer ' ] = fg [ 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-06-02 07:43:03 +02:00
[ ' sorcerer ' ] = ' blue2 ' ,
2021-06-10 19:39:40 +02:00
[ ' mercenary ' ] = ' yellow2 ' ,
2021-06-25 06:21:07 +02:00
[ ' explorer ' ] = ' fg ' ,
2021-03-06 04:53:44 +01:00
}
2021-04-17 05:30:34 +02:00
character_names = {
[ ' vagrant ' ] = ' Vagrant ' ,
[ ' swordsman ' ] = ' Swordsman ' ,
[ ' wizard ' ] = ' Wizard ' ,
2021-06-03 22:02:04 +02:00
[ ' magician ' ] = ' Magician ' ,
2021-04-17 05:30:34 +02:00
[ ' archer ' ] = ' Archer ' ,
[ ' scout ' ] = ' Scout ' ,
[ ' cleric ' ] = ' Cleric ' ,
[ ' outlaw ' ] = ' Outlaw ' ,
[ ' blade ' ] = ' Blade ' ,
[ ' elementor ' ] = ' Elementor ' ,
[ ' saboteur ' ] = ' Saboteur ' ,
2021-07-03 07:08:35 +02:00
[ ' bomber ' ] = ' Bomber ' ,
2021-04-17 05:30:34 +02:00
[ ' stormweaver ' ] = ' Stormweaver ' ,
[ ' sage ' ] = ' Sage ' ,
[ ' squire ' ] = ' Squire ' ,
[ ' cannoneer ' ] = ' Cannoneer ' ,
[ ' dual_gunner ' ] = ' Dual Gunner ' ,
[ ' hunter ' ] = ' Hunter ' ,
2021-07-03 07:08:35 +02:00
[ ' sentry ' ] = ' Sentry ' ,
2021-04-17 05:30:34 +02:00
[ ' chronomancer ' ] = ' Chronomancer ' ,
[ ' spellblade ' ] = ' Spellblade ' ,
[ ' psykeeper ' ] = ' Psykeeper ' ,
[ ' engineer ' ] = ' Engineer ' ,
[ ' plague_doctor ' ] = ' Plague Doctor ' ,
[ ' barbarian ' ] = ' Barbarian ' ,
[ ' juggernaut ' ] = ' Juggernaut ' ,
[ ' lich ' ] = ' Lich ' ,
[ ' cryomancer ' ] = ' Cryomancer ' ,
[ ' pyromancer ' ] = ' Pyromancer ' ,
[ ' corruptor ' ] = ' Corruptor ' ,
[ ' beastmaster ' ] = ' Beastmaster ' ,
[ ' launcher ' ] = ' Launcher ' ,
2021-05-29 03:42:16 +02:00
[ ' jester ' ] = ' Jester ' ,
2021-04-17 05:30:34 +02:00
[ ' assassin ' ] = ' Assassin ' ,
[ ' host ' ] = ' Host ' ,
[ ' carver ' ] = ' Carver ' ,
[ ' bane ' ] = ' Bane ' ,
[ ' psykino ' ] = ' Psykino ' ,
[ ' barrager ' ] = ' Barrager ' ,
[ ' highlander ' ] = ' Highlander ' ,
[ ' fairy ' ] = ' Fairy ' ,
[ ' priest ' ] = ' Priest ' ,
[ ' infestor ' ] = ' Infestor ' ,
[ ' flagellant ' ] = ' Flagellant ' ,
2021-06-02 07:43:03 +02:00
[ ' arcanist ' ] = ' Arcanist ' ,
[ ' illusionist ' ] = ' Illusionist ' ,
2021-07-03 07:08:35 +02:00
[ ' artificer ' ] = ' Artificer ' ,
2021-06-02 07:43:03 +02:00
[ ' witch ' ] = ' Witch ' ,
[ ' silencer ' ] = ' Silencer ' ,
[ ' vulcanist ' ] = ' Vulcanist ' ,
[ ' warden ' ] = ' Warden ' ,
[ ' psychic ' ] = ' Psychic ' ,
2021-06-11 06:44:06 +02:00
[ ' miner ' ] = ' Miner ' ,
2021-06-10 19:39:40 +02:00
[ ' merchant ' ] = ' Merchant ' ,
[ ' usurer ' ] = ' Usurer ' ,
[ ' gambler ' ] = ' Gambler ' ,
[ ' thief ' ] = ' Thief ' ,
2021-04-17 05:30:34 +02:00
}
2021-03-05 08:29:19 +01:00
character_colors = {
[ ' vagrant ' ] = fg [ 0 ] ,
[ ' swordsman ' ] = yellow [ 0 ] ,
[ ' wizard ' ] = blue [ 0 ] ,
2021-06-03 22:02:04 +02:00
[ ' magician ' ] = blue [ 0 ] ,
2021-03-05 08:29:19 +01:00
[ ' 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 ] ,
2021-07-03 07:08:35 +02:00
[ ' bomber ' ] = orange [ 0 ] ,
2021-03-12 04:05:20 +01:00
[ ' 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 ] ,
2021-07-03 07:08:35 +02:00
[ ' sentry ' ] = green [ 0 ] ,
2021-03-05 08:29:19 +01:00
[ ' 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-05-29 03:42:16 +02:00
[ ' jester ' ] = 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 ] ,
2021-04-14 03:12:29 +02:00
[ ' barrager ' ] = green [ 0 ] ,
2021-04-12 04:51:34 +02:00
[ ' highlander ' ] = yellow [ 0 ] ,
2021-04-15 02:02:57 +02:00
[ ' fairy ' ] = green [ 0 ] ,
2021-04-07 03:26:59 +02:00
[ ' 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-06-02 07:43:03 +02:00
[ ' arcanist ' ] = blue2 [ 0 ] ,
[ ' illusionist ' ] = blue2 [ 0 ] ,
2021-07-03 07:08:35 +02:00
[ ' artificer ' ] = blue2 [ 0 ] ,
2021-06-02 07:43:03 +02:00
[ ' witch ' ] = purple [ 0 ] ,
[ ' silencer ' ] = blue2 [ 0 ] ,
[ ' vulcanist ' ] = red [ 0 ] ,
[ ' warden ' ] = yellow [ 0 ] ,
[ ' psychic ' ] = fg [ 0 ] ,
2021-06-11 06:44:06 +02:00
[ ' miner ' ] = yellow2 [ 0 ] ,
2021-06-10 19:39:40 +02:00
[ ' merchant ' ] = yellow2 [ 0 ] ,
[ ' usurer ' ] = purple [ 0 ] ,
[ ' gambler ' ] = yellow2 [ 0 ] ,
[ ' thief ' ] = red [ 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 ' ,
2021-06-03 22:02:04 +02:00
[ ' magician ' ] = ' blue ' ,
2021-03-06 04:53:44 +01:00
[ ' archer ' ] = ' green ' ,
[ ' scout ' ] = ' red ' ,
[ ' cleric ' ] = ' green ' ,
[ ' outlaw ' ] = ' red ' ,
[ ' blade ' ] = ' yellow ' ,
[ ' elementor ' ] = ' blue ' ,
2021-03-12 04:05:20 +01:00
[ ' saboteur ' ] = ' orange ' ,
2021-07-03 07:08:35 +02:00
[ ' bomber ' ] = ' orange ' ,
2021-03-12 04:05:20 +01:00
[ ' 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 ' ,
2021-07-03 07:08:35 +02:00
[ ' sentry ' ] = ' green ' ,
2021-03-06 04:53:44 +01:00
[ ' 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-05-29 03:42:16 +02:00
[ ' jester ' ] = ' 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 ' ,
2021-04-14 03:12:29 +02:00
[ ' barrager ' ] = ' green ' ,
2021-04-12 04:51:34 +02:00
[ ' highlander ' ] = ' yellow ' ,
2021-04-15 02:02:57 +02:00
[ ' fairy ' ] = ' green ' ,
2021-04-07 03:26:59 +02:00
[ ' priest ' ] = ' green ' ,
2021-04-12 04:51:34 +02:00
[ ' infestor ' ] = ' orange ' ,
2021-04-11 03:37:11 +02:00
[ ' flagellant ' ] = ' fg ' ,
2021-06-02 07:43:03 +02:00
[ ' arcanist ' ] = ' blue2 ' ,
[ ' illusionist ' ] = ' blue2 ' ,
2021-07-03 07:08:35 +02:00
[ ' artificer ' ] = ' blue2 ' ,
2021-06-02 07:43:03 +02:00
[ ' witch ' ] = ' purple ' ,
[ ' silencer ' ] = ' blue2 ' ,
[ ' vulcanist ' ] = ' red ' ,
[ ' warden ' ] = ' yellow ' ,
[ ' psychic ' ] = ' fg ' ,
2021-06-11 06:44:06 +02:00
[ ' miner ' ] = ' yellow2 ' ,
2021-06-10 19:39:40 +02:00
[ ' merchant ' ] = ' yellow2 ' ,
[ ' usurer ' ] = ' purple ' ,
[ ' gambler ' ] = ' yellow2 ' ,
[ ' thief ' ] = ' red ' ,
2021-03-06 04:53:44 +01:00
}
2021-03-05 08:29:19 +01:00
character_classes = {
2021-06-25 06:21:07 +02:00
[ ' vagrant ' ] = { ' explorer ' , ' psyker ' } ,
2021-03-05 08:29:19 +01:00
[ ' swordsman ' ] = { ' warrior ' } ,
2021-06-03 22:02:04 +02:00
[ ' wizard ' ] = { ' mage ' , ' nuker ' } ,
[ ' magician ' ] = { ' mage ' } ,
2021-03-05 08:29:19 +01:00
[ ' archer ' ] = { ' ranger ' } ,
[ ' scout ' ] = { ' rogue ' } ,
[ ' cleric ' ] = { ' healer ' } ,
[ ' outlaw ' ] = { ' warrior ' , ' rogue ' } ,
[ ' blade ' ] = { ' warrior ' , ' nuker ' } ,
[ ' elementor ' ] = { ' mage ' , ' nuker ' } ,
2021-07-03 07:08:35 +02:00
-- ['saboteur'] = {'rogue', 'conjurer', 'nuker'},
[ ' bomber ' ] = { ' nuker ' , ' conjurer ' } ,
2021-03-05 08:29:19 +01:00
[ ' stormweaver ' ] = { ' enchanter ' } ,
2021-06-05 08:11:23 +02:00
[ ' sage ' ] = { ' nuker ' , ' forcer ' } ,
2021-04-07 03:26:59 +02:00
[ ' squire ' ] = { ' warrior ' , ' enchanter ' } ,
2021-03-05 08:29:19 +01:00
[ ' cannoneer ' ] = { ' ranger ' , ' nuker ' } ,
[ ' dual_gunner ' ] = { ' ranger ' , ' rogue ' } ,
2021-07-03 07:08:35 +02:00
-- ['hunter'] = {'ranger', 'conjurer', 'forcer'},
[ ' sentry ' ] = { ' ranger ' , ' conjurer ' } ,
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 ' } ,
2021-05-29 03:42:16 +02:00
[ ' jester ' ] = { ' 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-14 03:12:29 +02:00
[ ' carver ' ] = { ' conjurer ' , ' healer ' } ,
2021-04-12 04:51:34 +02:00
[ ' bane ' ] = { ' curser ' , ' voider ' } ,
2021-04-07 03:26:59 +02:00
[ ' psykino ' ] = { ' mage ' , ' psyker ' , ' forcer ' } ,
2021-04-14 03:12:29 +02:00
[ ' barrager ' ] = { ' ranger ' , ' forcer ' } ,
2021-04-12 04:51:34 +02:00
[ ' highlander ' ] = { ' warrior ' } ,
2021-04-15 02:02:57 +02:00
[ ' fairy ' ] = { ' enchanter ' , ' 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-06-02 07:43:03 +02:00
[ ' arcanist ' ] = { ' sorcerer ' } ,
2021-07-03 07:08:35 +02:00
-- ['illusionist'] = {'sorcerer', 'conjurer'},
[ ' artificer ' ] = { ' sorcerer ' , ' conjurer ' } ,
2021-06-02 07:43:03 +02:00
[ ' witch ' ] = { ' sorcerer ' , ' voider ' } ,
[ ' silencer ' ] = { ' sorcerer ' , ' curser ' } ,
[ ' vulcanist ' ] = { ' sorcerer ' , ' nuker ' } ,
[ ' warden ' ] = { ' sorcerer ' , ' forcer ' } ,
[ ' psychic ' ] = { ' sorcerer ' , ' psyker ' } ,
2021-06-11 06:44:06 +02:00
[ ' miner ' ] = { ' mercenary ' } ,
2021-06-10 19:39:40 +02:00
[ ' merchant ' ] = { ' mercenary ' } ,
[ ' usurer ' ] = { ' curser ' , ' mercenary ' , ' voider ' } ,
[ ' gambler ' ] = { ' mercenary ' , ' sorcerer ' } ,
[ ' thief ' ] = { ' rogue ' , ' mercenary ' } ,
2021-03-05 08:29:19 +01:00
}
2021-04-10 00:46:49 +02:00
character_class_strings = {
2021-06-25 06:21:07 +02:00
[ ' vagrant ' ] = ' [fg]Explorer, Psyker ' ,
2021-04-10 00:46:49 +02:00
[ ' swordsman ' ] = ' [yellow]Warrior ' ,
2021-06-03 22:02:04 +02:00
[ ' wizard ' ] = ' [blue]Mage, [red]Nuker ' ,
[ ' magician ' ] = ' [blue]Mage ' ,
2021-04-10 00:46:49 +02:00
[ ' archer ' ] = ' [green]Ranger ' ,
[ ' scout ' ] = ' [red]Rogue ' ,
[ ' cleric ' ] = ' [green]Healer ' ,
[ ' outlaw ' ] = ' [yellow]Warrior, [red]Rogue ' ,
[ ' blade ' ] = ' [yellow]Warrior, [red]Nuker ' ,
[ ' elementor ' ] = ' [blue]Mage, [red]Nuker ' ,
2021-07-03 07:08:35 +02:00
-- ['saboteur'] = '[red]Rogue, [orange]Conjurer, [red]Nuker',
[ ' bomber ' ] = ' [red]Nuker, [orange]Builder ' ,
2021-04-10 00:46:49 +02:00
[ ' stormweaver ' ] = ' [blue]Enchanter ' ,
2021-06-05 08:11:23 +02:00
[ ' sage ' ] = ' [red]Nuker, [yellow]Forcer ' ,
2021-04-10 00:46:49 +02:00
[ ' squire ' ] = ' [yellow]Warrior, [blue]Enchanter ' ,
[ ' cannoneer ' ] = ' [green]Ranger, [red]Nuker ' ,
[ ' dual_gunner ' ] = ' [green]Ranger, [red]Rogue ' ,
2021-07-03 07:08:35 +02:00
-- ['hunter'] = '[green]Ranger, [orange]Conjurer, [yellow]Forcer',
[ ' sentry ' ] = ' [green]Ranger, [orange]Builder ' ,
2021-04-10 00:46:49 +02:00
[ ' chronomancer ' ] = ' [blue]Mage, Enchanter ' ,
[ ' spellblade ' ] = ' [blue]Mage, [red]Rogue ' ,
[ ' psykeeper ' ] = ' [green]Healer, [fg]Psyker ' ,
2021-07-03 07:08:35 +02:00
[ ' engineer ' ] = ' [orange]Builder ' ,
2021-04-10 00:46:49 +02:00
[ ' 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-05-29 03:42:16 +02:00
[ ' jester ' ] = ' [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-07-03 07:08:35 +02:00
[ ' carver ' ] = ' [orange]Builder, [green]Healer ' ,
2021-04-12 04:51:34 +02:00
[ ' bane ' ] = ' [purple]Curser, Voider ' ,
2021-04-10 00:46:49 +02:00
[ ' psykino ' ] = ' [blue]Mage, [fg]Psyker, [yellow]Forcer ' ,
2021-04-14 03:12:29 +02:00
[ ' barrager ' ] = ' [green]Ranger, [yellow]Forcer ' ,
2021-04-12 04:51:34 +02:00
[ ' highlander ' ] = ' [yellow]Warrior ' ,
2021-04-15 02:02:57 +02:00
[ ' fairy ' ] = ' [blue]Enchanter, [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 ' ,
2021-06-02 07:43:03 +02:00
[ ' arcanist ' ] = ' [blue2]Sorcerer ' ,
2021-07-03 07:08:35 +02:00
-- ['illusionist'] = '[blue2]Sorcerer, [orange]Conjurer',
[ ' artificer ' ] = ' [blue2]Sorcerer, [orange]Builder ' ,
2021-06-02 07:43:03 +02:00
[ ' witch ' ] = ' [blue2]Sorcerer, [purple]Voider ' ,
[ ' silencer ' ] = ' [blue2]Sorcerer, [purple]Curser ' ,
[ ' vulcanist ' ] = ' [blue2]Sorcerer, [red]Nuker ' ,
[ ' warden ' ] = ' [blue2]Sorcerer, [yellow]Forcer ' ,
[ ' psychic ' ] = ' [blue2]Sorcerer, [fg]Psyker ' ,
2021-06-11 06:44:06 +02:00
[ ' miner ' ] = ' [yellow2]Mercenary ' ,
2021-06-10 19:39:40 +02:00
[ ' merchant ' ] = ' [yellow2]Mercenary ' ,
2021-06-11 12:43:15 +02:00
[ ' usurer ' ] = ' [purple]Curser, [yellow2]Mercenary, [purple]Voider ' ,
2021-06-10 19:39:40 +02:00
[ ' gambler ' ] = ' [yellow2]Mercenary, [blue2]Sorcerer ' ,
[ ' thief ' ] = ' [red]Rogue, [yellow2]Mercenary ' ,
2021-04-10 00:46:49 +02:00
}
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-30 01:38:36 +02:00
math.round ( get_character_stat ( ' swordsman ' , lvl , ' dmg ' ) * 0.15 , 2 ) .. ' [fg] damage per unit hit ' end ,
2021-04-07 03:26:59 +02:00
[ ' wizard ' ] = function ( lvl ) return ' [fg]shoots a projectile that deals [yellow] ' .. get_character_stat ( ' wizard ' , lvl , ' dmg ' ) .. ' AoE[fg] damage ' end ,
2021-06-05 08:11:23 +02:00
[ ' magician ' ] = function ( lvl ) return ' [fg]creates a small area that deals [yellow] ' .. get_character_stat ( ' magician ' , lvl , ' dmg ' ) .. ' AoE[fg] damage ' end ,
2021-04-07 03:26:59 +02:00
[ ' 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 ,
2021-07-04 06:50:31 +02:00
[ ' cleric ' ] = function ( lvl ) return ' [fg]creates [yellow]1[fg] healing orb every [yellow]8[fg] seconds ' 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-07-03 07:08:35 +02:00
[ ' bomber ' ] = function ( lvl ) return ' [fg]plants a bomb, when it explodes it deals [yellow] ' .. 2 * get_character_stat ( ' bomber ' , 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-05-17 10:05:48 +02:00
[ ' squire ' ] = function ( lvl ) return ' [yellow]+20%[fg] damage and defense to all allies ' end ,
2021-04-11 03:37:11 +02:00
[ ' 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-07-03 07:08:35 +02:00
[ ' sentry ' ] = function ( lvl ) return ' [fg]spawns a rotating turret that shoots [yellow]4[fg] projectiles, each dealing [yellow] ' .. get_character_stat ( ' sentry ' , lvl , ' dmg ' ) .. ' [fg] damage ' 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 ,
2021-07-04 06:50:31 +02:00
[ ' psykeeper ' ] = function ( lvl ) return ' [fg]creates [yellow]3[fg] healing orbs every time the psykeeper takes [yellow]25%[fg] of its max HP in damage ' end ,
2021-07-24 23:48:37 +02:00
[ ' engineer ' ] = function ( lvl ) return ' [fg]drops turrets 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-06-18 23:36:00 +02:00
[ ' corruptor ' ] = function ( lvl ) return ' [fg]shoots an arrow that deals [yellow] ' .. get_character_stat ( ' corruptor ' , lvl , ' dmg ' ) .. ' [fg] damage, spawn [yellow]3[fg] critters if it kills ' end ,
[ ' beastmaster ' ] = function ( lvl ) return ' [fg]throws a knife that deals [yellow] ' .. get_character_stat ( ' beastmaster ' , lvl , ' dmg ' ) .. ' [fg] damage, spawn [yellow]2[fg] critters if it crits ' end ,
2021-05-29 03:42:16 +02:00
[ ' launcher ' ] = function ( lvl ) return ' [fg]all nearby enemies are pushed after [yellow]4[fg] seconds, taking [yellow] ' .. 2 * get_character_stat ( ' launcher ' , lvl , ' dmg ' ) .. ' [fg] damage on wall hit ' end ,
2021-06-14 06:59:16 +02:00
[ ' jester ' ] = function ( lvl ) return " [fg]curses [yellow]6[fg] nearby enemies for [yellow]6[fg] seconds, they will explode into [yellow]4[fg] knives on death " end ,
2021-05-17 10:05:48 +02:00
[ ' assassin ' ] = function ( lvl ) return ' [fg]throws a piercing knife that deals [yellow] ' .. get_character_stat ( ' assassin ' , lvl , ' dmg ' ) .. ' [fg] damage + [yellow] ' ..
2021-05-30 03:06:47 +02:00
get_character_stat ( ' assassin ' , lvl , ' dmg ' ) / 2 .. ' [fg] damage per second ' end ,
2021-04-13 03:23:53 +02:00
[ ' host ' ] = function ( lvl ) return ' [fg]periodically spawn [yellow]1[fg] small critter ' end ,
2021-07-03 07:08:35 +02:00
[ ' carver ' ] = function ( lvl ) return ' [fg]carves a statue that creates [yellow]1[fg] healing orb every [yellow]6[fg] seconds ' end ,
2021-06-03 22:02:04 +02:00
[ ' bane ' ] = function ( lvl ) return ' [fg]curses [yellow]6[fg] nearby enemies for [yellow]6[fg] seconds, they will create small void rifts on death ' end ,
2021-04-14 03:12:29 +02:00
[ ' psykino ' ] = function ( lvl ) return ' [fg]pulls enemies together for [yellow]2[fg] seconds ' end ,
2021-05-03 07:04:40 +02:00
[ ' barrager ' ] = function ( lvl ) return ' [fg]shoots a barrage of [yellow]3[fg] arrows, each dealing [yellow] ' .. get_character_stat ( ' barrager ' , lvl , ' dmg ' ) .. ' [fg] damage and pushing enemies ' end ,
2021-04-15 02:02:57 +02:00
[ ' highlander ' ] = function ( lvl ) return ' [fg]deals [yellow] ' .. 5 * get_character_stat ( ' highlander ' , lvl , ' dmg ' ) .. ' [fg] AoE damage ' end ,
2021-06-24 17:09:29 +02:00
[ ' fairy ' ] = function ( lvl ) return ' [fg]creates [yellow]1[fg] healing orb and grants [yellow]1[fg] unit [yellow]+100%[fg] attack speed for [yellow]6[fg] seconds ' end ,
2021-07-04 06:50:31 +02:00
[ ' priest ' ] = function ( lvl ) return ' [fg]creates [yellow]3[fg] healing orbs every [yellow]12[fg] seconds ' end ,
2021-06-03 22:02:04 +02:00
[ ' infestor ' ] = function ( lvl ) return ' [fg]curses [yellow]8[fg] nearby enemies for [yellow]6[fg] seconds, they will release [yellow]2[fg] critters on death ' end ,
2021-04-15 02:02:57 +02:00
[ ' flagellant ' ] = function ( lvl ) return ' [fg]deals [yellow] ' .. 2 * get_character_stat ( ' flagellant ' , lvl , ' dmg ' ) .. ' [fg] damage to self and grants [yellow]+4%[fg] damage to all allies per cast ' end ,
2021-06-02 07:43:03 +02:00
[ ' arcanist ' ] = function ( lvl ) return ' [fg]launches a slow moving orb that launches projectiles, each dealing [yellow] ' .. get_character_stat ( ' arcanist ' , lvl , ' dmg ' ) .. ' [fg] damage ' end ,
[ ' illusionist ' ] = function ( lvl ) return ' [fg]launches a projectile that deals [yellow] ' .. get_character_stat ( ' illusionist ' , lvl , ' dmg ' ) .. ' [fg] damage and creates copies that do the same ' end ,
2021-07-03 07:08:35 +02:00
[ ' artificer ' ] = function ( lvl ) return ' [fg]spawns an automaton that shoots a projectile that deals [yellow] ' .. get_character_stat ( ' artificer ' , lvl , ' dmg ' ) .. ' [fg] damage ' end ,
2021-06-11 12:43:15 +02:00
[ ' witch ' ] = function ( lvl ) return ' [fg]creates an area that ricochets and deals [yellow] ' .. get_character_stat ( ' witch ' , lvl , ' dmg ' ) .. ' [fg] damage per second ' end ,
2021-06-02 07:43:03 +02:00
[ ' silencer ' ] = function ( lvl ) return ' [fg]curses [yellow]5[fg] nearby enemies for [yellow]6[fg] seconds, preventing them from using special attacks ' end ,
2021-06-05 08:11:23 +02:00
[ ' vulcanist ' ] = function ( lvl ) return ' [fg]creates a volcano that explodes the nearby area [yellow]4[fg] times, dealing [yellow] ' .. get_character_stat ( ' vulcanist ' , lvl , ' dmg ' ) .. ' AoE [fg]damage ' end ,
2021-06-02 07:43:03 +02:00
[ ' warden ' ] = function ( lvl ) return ' [fg]creates a force field around a random unit that prevents enemies from entering ' end ,
2021-06-05 08:11:23 +02:00
[ ' psychic ' ] = function ( lvl ) return ' [fg]creates a small area that deals [yellow] ' .. get_character_stat ( ' psychic ' , lvl , ' dmg ' ) .. ' AoE[fg] damage ' end ,
2021-06-11 06:44:06 +02:00
[ ' miner ' ] = function ( lvl ) return ' [fg]picking up gold releases [yellow]4[fg] homing projectiles that each deal [yellow] ' .. get_character_stat ( ' miner ' , lvl , ' dmg ' ) .. ' [fg]damage ' end ,
2021-06-18 23:36:00 +02:00
[ ' merchant ' ] = function ( lvl ) return ' [fg]gain [yellow]+1[fg] interest for every [yellow]10[fg] gold, up to a max of [yellow]+10[fg] from the merchant ' end ,
2021-06-17 07:45:14 +02:00
[ ' usurer ' ] = function ( lvl ) return ' [fg]curses [yellow]3[fg] nearby enemies indefinitely with debt, dealing [yellow] ' .. get_character_stat ( ' usurer ' , lvl , ' dmg ' ) .. ' [fg] damage per second ' end ,
2021-06-10 19:39:40 +02:00
[ ' gambler ' ] = function ( lvl ) return ' [fg]deal [yellow]2X[fg] damage to a single random enemy where X is how much gold you have ' end ,
[ ' thief ' ] = function ( lvl ) return ' [fg]throws a knife that deals [yellow] ' .. 2 * get_character_stat ( ' thief ' , lvl , ' dmg ' ) .. ' [fg] damage and chains [yellow]5[fg] times ' end ,
2021-03-06 04:53:44 +01:00
}
2021-04-10 00:46:49 +02:00
character_effect_names = {
2021-06-25 06:21:07 +02:00
[ ' vagrant ' ] = ' [fg]Experience ' ,
2021-04-10 00:46:49 +02:00
[ ' swordsman ' ] = ' [yellow]Cleave ' ,
[ ' wizard ' ] = ' [blue]Magic Missile ' ,
2021-07-24 23:48:37 +02:00
[ ' magician ' ] = ' [blue]Quick Cast ' ,
2021-04-10 00:46:49 +02:00
[ ' archer ' ] = ' [green]Bounce Shot ' ,
[ ' scout ' ] = ' [red]Dagger Resonance ' ,
2021-07-03 07:08:35 +02:00
[ ' cleric ' ] = ' [green]Mass Heal ' ,
2021-04-10 00:46:49 +02:00
[ ' outlaw ' ] = ' [red]Flying Daggers ' ,
[ ' blade ' ] = ' [yellow]Blade Resonance ' ,
[ ' elementor ' ] = ' [blue]Windfield ' ,
[ ' saboteur ' ] = ' [orange]Demoman ' ,
2021-07-03 07:08:35 +02:00
[ ' bomber ' ] = ' [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 ' ,
2021-05-17 10:05:48 +02:00
[ ' squire ' ] = ' [yellow]Shiny Gear ' ,
2021-04-10 00:46:49 +02:00
[ ' cannoneer ' ] = ' [orange]Cannon Barrage ' ,
[ ' dual_gunner ' ] = ' [green]Gun Kata ' ,
[ ' hunter ' ] = ' [green]Feral Pack ' ,
2021-07-03 07:08:35 +02:00
[ ' sentry ' ] = ' [green]Sentry Barrage ' ,
2021-04-10 00:46:49 +02:00
[ ' chronomancer ' ] = ' [blue]Quicken ' ,
[ ' spellblade ' ] = ' [blue]Spiralism ' ,
[ ' psykeeper ' ] = ' [fg]Crucio ' ,
2021-05-29 03:42:16 +02:00
[ ' 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-05-29 03:42:16 +02:00
[ ' jester ' ] = " [red]Pandemonium " ,
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 ' ,
2021-04-14 03:12:29 +02:00
[ ' barrager ' ] = ' [green]Barrage ' ,
2021-04-15 02:02:57 +02:00
[ ' highlander ' ] = ' [yellow]Moulinet ' ,
[ ' fairy ' ] = ' [green]Whimsy ' ,
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-06-02 07:43:03 +02:00
[ ' arcanist ' ] = ' [blue2]Arcane Orb ' ,
[ ' illusionist ' ] = ' [blue2]Mirror Image ' ,
2021-07-03 07:08:35 +02:00
[ ' artificer ' ] = ' [blue2]Spell Formula Efficiency ' ,
2021-06-02 07:43:03 +02:00
[ ' witch ' ] = ' [purple]Death Pool ' ,
[ ' silencer ' ] = ' [blue2]Arcane Curse ' ,
[ ' vulcanist ' ] = ' [red]Lava Burst ' ,
[ ' warden ' ] = ' [yellow]Magnetic Field ' ,
2021-06-10 19:39:40 +02:00
[ ' psychic ' ] = ' [fg]Mental Strike ' ,
2021-06-11 06:44:06 +02:00
[ ' miner ' ] = ' [yellow2]Golden Bolts ' ,
2021-06-10 19:39:40 +02:00
[ ' merchant ' ] = ' [yellow2]Item Shop ' ,
[ ' usurer ' ] = ' [purple]Bankruptcy ' ,
[ ' gambler ' ] = ' [yellow2]Multicast ' ,
[ ' thief ' ] = ' [red]Ultrakill ' ,
2021-04-10 00:46:49 +02:00
}
2021-03-07 03:35:18 +01:00
2021-04-10 00:46:49 +02:00
character_effect_names_gray = {
2021-06-25 06:21:07 +02:00
[ ' vagrant ' ] = ' [light_bg]Experience ' ,
2021-04-10 00:46:49 +02:00
[ ' swordsman ' ] = ' [light_bg]Cleave ' ,
[ ' wizard ' ] = ' [light_bg]Magic Missile ' ,
2021-07-24 23:48:37 +02:00
[ ' magician ' ] = ' [light_bg]Quick Cast ' ,
2021-04-10 00:46:49 +02:00
[ ' 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 ' ,
2021-07-03 07:08:35 +02:00
[ ' bomber ' ] = ' [light_bg]Demoman ' ,
2021-04-11 03:37:11 +02:00
[ ' stormweaver ' ] = ' [light_bg]Wide Lightning ' ,
2021-04-10 00:46:49 +02:00
[ ' sage ' ] = ' [light_bg]Dimension Compression ' ,
2021-05-17 10:05:48 +02:00
[ ' squire ' ] = ' [light_bg]Shiny Gear ' ,
2021-04-10 00:46:49 +02:00
[ ' cannoneer ' ] = ' [light_bg]Cannon Barrage ' ,
[ ' dual_gunner ' ] = ' [light_bg]Gun Kata ' ,
[ ' hunter ' ] = ' [light_bg]Feral Pack ' ,
2021-07-03 07:08:35 +02:00
[ ' sentry ' ] = ' [light_bg]Sentry Barrage ' ,
2021-04-10 00:46:49 +02:00
[ ' chronomancer ' ] = ' [light_bg]Quicken ' ,
[ ' spellblade ' ] = ' [light_bg]Spiralism ' ,
[ ' psykeeper ' ] = ' [light_bg]Crucio ' ,
2021-05-29 03:42:16 +02:00
[ ' engineer ' ] = ' [light_bg]Upgrade!!! ' ,
2021-04-11 03:37:11 +02:00
[ ' plague_doctor ' ] = ' [light_bg]Black Death Steam ' ,
2021-04-15 02:02:57 +02:00
[ ' barbarian ' ] = ' [light_bg]Seism ' ,
2021-04-10 00:46:49 +02:00
[ ' juggernaut ' ] = ' [light_bg]Brutal Impact ' ,
2021-04-15 02:02:57 +02:00
[ ' lich ' ] = ' [light_bg]Chain Frost ' ,
2021-04-10 00:46:49 +02:00
[ ' 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 ' ,
2021-05-29 03:42:16 +02:00
[ ' jester ' ] = " [light_bg]Pandemonium " ,
2021-04-10 00:46:49 +02:00
[ ' assassin ' ] = ' [light_bg]Toxic Delivery ' ,
[ ' host ' ] = ' [light_bg]Invasion ' ,
[ ' carver ' ] = ' [light_bg]World Tree ' ,
2021-04-15 02:02:57 +02:00
[ ' bane ' ] = ' [light_bg]Nightmare ' ,
2021-04-10 00:46:49 +02:00
[ ' psykino ' ] = ' [light_bg]Magnetic Force ' ,
2021-04-15 02:02:57 +02:00
[ ' barrager ' ] = ' [light_bg]Barrage ' ,
[ ' highlander ' ] = ' [light_bg]Moulinet ' ,
[ ' fairy ' ] = ' [light_bg]Whimsy ' ,
2021-04-10 00:46:49 +02:00
[ ' 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 ' ,
2021-06-02 07:43:03 +02:00
[ ' arcanist ' ] = ' [light_bg]Arcane Orb ' ,
[ ' illusionist ' ] = ' [light_bg]Mirror Image ' ,
2021-07-03 07:08:35 +02:00
[ ' artificer ' ] = ' [light_bg]Spell Formula Efficiency ' ,
2021-06-02 07:43:03 +02:00
[ ' witch ' ] = ' [light_bg]Death Pool ' ,
[ ' silencer ' ] = ' [light_bg]Arcane Curse ' ,
[ ' vulcanist ' ] = ' [light_bg]Lava Burst ' ,
[ ' warden ' ] = ' [light_bg]Magnetic Field ' ,
2021-06-10 19:39:40 +02:00
[ ' psychic ' ] = ' [light_bg]Mental Strike ' ,
2021-06-11 06:44:06 +02:00
[ ' miner ' ] = ' [light_bg]Golden Bolts ' ,
2021-06-10 19:39:40 +02:00
[ ' merchant ' ] = ' [light_bg]Item Shop ' ,
[ ' usurer ' ] = ' [light_bg]Bankruptcy ' ,
[ ' gambler ' ] = ' [light_bg]Multicast ' ,
[ ' thief ' ] = ' [light_bg]Ultrakill ' ,
2021-04-10 00:46:49 +02:00
}
character_effect_descriptions = {
2021-07-18 02:01:49 +02:00
[ ' vagrant ' ] = function ( ) return ' [yellow]+15%[fg] attack speed and damage per active class ' end ,
2021-04-10 00:46:49 +02:00
[ ' swordsman ' ] = function ( ) return " [fg]the swordsman's damage is [yellow]doubled " end ,
2021-06-03 22:02:04 +02:00
[ ' wizard ' ] = function ( ) return ' [fg]the projectile chains [yellow]2[fg] times ' end ,
2021-07-24 23:48:37 +02:00
[ ' magician ' ] = function ( ) return ' [yellow]+50%[[fg] attack speed every [yellow]12[fg] seconds for [yellow]6[fg] seconds ' end ,
2021-04-10 00:46:49 +02:00
[ ' 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 ,
2021-07-04 06:50:31 +02:00
[ ' cleric ' ] = function ( ) return ' [fg]creates [yellow]4[fg] healing orbs every [yellow]8[fg] seconds ' end ,
2021-04-10 00:46:49 +02:00
[ ' outlaw ' ] = function ( ) return " [yellow]+50%[fg] outlaw attack speed and his knives seek enemies " end ,
2021-06-03 22:02:04 +02:00
[ ' blade ' ] = function ( ) return ' [fg]deal additional [yellow] ' .. math.round ( get_character_stat ( ' blade ' , 3 , ' dmg ' ) / 3 , 2 ) .. ' [fg] damage per enemy hit ' end ,
2021-04-10 00:46:49 +02:00
[ ' 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-07-03 07:08:35 +02:00
[ ' bomber ' ] = function ( ) return ' [yellow]+100%[fg] bomb area and 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-05-17 10:05:48 +02:00
[ ' squire ' ] = function ( ) return ' [yellow]+30%[fg] damage, attack speed, movement speed and defense to all allies ' end ,
2021-05-21 08:17:31 +02:00
[ ' cannoneer ' ] = function ( ) return ' [fg]showers the hit area in [yellow]7[fg] additional cannon shots that deal [yellow] ' .. get_character_stat ( ' cannoneer ' , 3 , ' dmg ' ) / 2 .. ' [fg] AoE damage ' end ,
2021-04-11 03:37:11 +02:00
[ ' 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-07-24 23:48:37 +02:00
[ ' sentry ' ] = function ( ) return ' [yellow]+50%[fg] sentry turret attack speed and the projectiles ricochet [yellow]twice[fg] ' end ,
2021-06-17 07:45:14 +02:00
[ ' chronomancer ' ] = function ( ) return ' [fg]enemies take damage over time [yellow]50%[fg] faster ' end ,
2021-04-10 00:46:49 +02:00
[ ' spellblade ' ] = function ( ) return ' [fg]faster projectile speed and tighter turns ' end ,
2021-06-25 06:21:07 +02:00
[ ' psykeeper ' ] = function ( ) return ' [fg]deal [yellow]double[fg] the damage taken by the psykeeper to all enemies ' end ,
2021-05-29 03:42:16 +02:00
[ ' engineer ' ] = function ( ) return ' [fg]drops [yellow]2[fg] additional turrets and grants all turrets [yellow]+50%[fg] damage and attack speed ' end ,
2021-04-11 03:37:11 +02:00
[ ' 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 ,
2021-06-18 23:36:00 +02:00
[ ' corruptor ' ] = function ( ) return ' [fg]spawn [yellow]2[fg] small critters if the corruptor hits an enemy ' end ,
[ ' beastmaster ' ] = function ( ) return ' [fg]spawn [yellow]4[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 ,
2021-05-29 03:42:16 +02:00
[ ' jester ' ] = function ( ) return ' [fg]all knives seek enemies and pierce [yellow]2[fg] times ' 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-07-03 07:08:35 +02:00
[ ' carver ' ] = function ( ) return ' [fg]carves a tree that creates healing orbs [yellow]twice[fg] as fast ' end ,
2021-05-29 03:42:16 +02:00
[ ' bane ' ] = function ( ) return " [yellow]100%[fg] increased area for bane's void rifts " end ,
2021-04-14 03:12:29 +02:00
[ ' psykino ' ] = function ( ) return ' [fg]enemies take [yellow] ' .. 4 * get_character_stat ( ' psykino ' , 3 , ' dmg ' ) .. ' [fg] damage and are pushed away when the area expires ' end ,
[ ' barrager ' ] = function ( ) return ' [fg]every 3rd attack the barrage shoots [yellow]15[fg] projectiles and they push harder ' end ,
2021-04-15 02:02:57 +02:00
[ ' highlander ' ] = function ( ) return ' [fg]quickly repeats the attack [yellow]3[fg] times ' end ,
2021-06-24 17:09:29 +02:00
[ ' fairy ' ] = function ( ) return ' [fg]creates [yellow]2[fg] healing orbs and grants [yellow]2[fg] units [yellow]+100%[fg] attack speed ' end ,
2021-05-30 03:06:47 +02:00
[ ' priest ' ] = function ( ) return ' [fg]picks [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 ,
2021-06-24 17:09:29 +02:00
[ ' flagellant ' ] = function ( ) return ' [yellow]2X[fg] flagellant max HP and grants [yellow]+12%[fg] damage to all allies per cast instead ' end ,
2021-06-05 08:11:23 +02:00
[ ' arcanist ' ] = function ( ) return ' [yellow]+50%[fg] attack speed for the orb and [yellow]2[fg] projectiles are released per cast ' end ,
2021-06-08 06:21:35 +02:00
[ ' illusionist ' ] = function ( ) return ' [yellow]doubles[fg] the number of copies created and they release [yellow]12[fg] projectiles on death ' end ,
2021-07-03 07:08:35 +02:00
[ ' artificer ' ] = function ( ) return ' [fg]automatons shoot and move 50% faster and release [yellow]12[fg] projectiles on death ' end ,
2021-06-11 12:43:15 +02:00
[ ' witch ' ] = function ( ) return ' [fg]the area releases projectiles, each dealing [yellow] ' .. get_character_stat ( ' witch ' , 3 , ' dmg ' ) .. ' [fg] damage and chaining once ' end ,
2021-06-02 07:43:03 +02:00
[ ' silencer ' ] = function ( ) return ' [fg]the curse also deals [yellow] ' .. get_character_stat ( ' silencer ' , 3 , ' dmg ' ) .. ' [fg] damage per second ' end ,
2021-06-03 22:02:04 +02:00
[ ' vulcanist ' ] = function ( ) return ' [fg]the number and speed of explosions is [yellow]doubled[fg] ' end ,
2021-06-05 08:11:23 +02:00
[ ' warden ' ] = function ( ) return ' [fg]creates the force field around [yellow]2[fg] units ' end ,
[ ' psychic ' ] = function ( ) return ' [fg]the attack can happen from any distance and repeats once ' end ,
2021-06-11 06:44:06 +02:00
[ ' miner ' ] = function ( ) return ' [fg]release [yellow]8[fg] homing projectiles instead and they pierce twice ' end ,
2021-06-10 19:39:40 +02:00
[ ' merchant ' ] = function ( ) return ' [fg]your first item reroll is always free ' end ,
[ ' usurer ' ] = function ( ) return ' [fg]if the same enemy is cursed [yellow]3[fg] times it takes [yellow] ' .. 10 * get_character_stat ( ' usurer ' , 3 , ' dmg ' ) .. ' [fg] damage ' end ,
[ ' gambler ' ] = function ( ) return ' [yellow]60/40/20%[fg] chance to cast the attack [yellow]2/3/4[fg] times ' end ,
[ ' thief ' ] = function ( ) return ' [fg]if the knife crits it deals [yellow] ' .. 10 * get_character_stat ( ' thief ' , 3 , ' dmg ' ) .. ' [fg] damage, chains [yellow]10[fg] times and grants [yellow]1[fg] gold ' end ,
2021-04-10 00:46:49 +02:00
}
2021-03-06 04:53:44 +01:00
2021-04-26 03:17:31 +02:00
character_effect_descriptions_gray = {
2021-07-18 02:01:49 +02:00
[ ' vagrant ' ] = function ( ) return ' [light_bg]+15% attack speed and damage per active class ' end ,
2021-04-26 03:17:31 +02:00
[ ' swordsman ' ] = function ( ) return " [light_bg]the swordsman's damage is doubled " end ,
2021-05-21 08:17:31 +02:00
[ ' wizard ' ] = function ( ) return ' [light_bg]the projectile chains 3 times ' end ,
2021-07-24 23:48:37 +02:00
[ ' magician ' ] = function ( ) return ' [light_bg]+50% attack speed every 12 seconds for 6 seconds ' end ,
2021-04-26 03:17:31 +02:00
[ ' archer ' ] = function ( ) return ' [light_bg]the arrow ricochets off walls 3 times ' end ,
[ ' scout ' ] = function ( ) return ' [light_bg]+25% damage per chain and +3 chains ' end ,
2021-06-24 17:09:29 +02:00
[ ' cleric ' ] = function ( ) return ' [light_bg]creates 4 healing orbs ' end ,
2021-04-26 03:17:31 +02:00
[ ' outlaw ' ] = function ( ) return " [light_bg]+50% outlaw attack speed and his knives seek enemies " end ,
2021-06-03 22:02:04 +02:00
[ ' blade ' ] = function ( ) return ' [light_bg]deal additional ' .. math.round ( get_character_stat ( ' blade ' , 3 , ' dmg ' ) / 2 , 2 ) .. ' damage per enemy hit ' end ,
2021-04-26 03:17:31 +02:00
[ ' elementor ' ] = function ( ) return ' [light_bg]slows enemies by 60% for 6 seconds on hit ' end ,
[ ' saboteur ' ] = function ( ) return ' [light_bg]the explosion has 50% chance to crit, increasing in size and dealing 2x damage ' end ,
2021-07-03 07:08:35 +02:00
[ ' bomber ' ] = function ( ) return ' [light_bg]+100% bomb area and damage ' end ,
2021-04-26 03:17:31 +02:00
[ ' stormweaver ' ] = function ( ) return " [light_bg]chain lightning's trigger area of effect and number of units hit is doubled " end ,
[ ' sage ' ] = function ( ) return ' [light_bg]when the projectile expires deal ' .. 3 * get_character_stat ( ' sage ' , 3 , ' dmg ' ) .. ' damage to all enemies under its influence ' end ,
2021-05-17 10:05:48 +02:00
[ ' squire ' ] = function ( ) return ' [light_bg]+30% damage, attack speed, movement speed and defense to all allies ' end ,
2021-05-21 08:17:31 +02:00
[ ' cannoneer ' ] = function ( ) return ' [light_bg]showers the hit area in 7 additional cannon shots that deal ' .. get_character_stat ( ' cannoneer ' , 3 , ' dmg ' ) / 2 .. ' AoE damage ' end ,
2021-04-26 03:17:31 +02:00
[ ' dual_gunner ' ] = function ( ) return ' [light_bg]every 5th attack shoot in rapid succession for 2 seconds ' end ,
[ ' hunter ' ] = function ( ) return ' [light_bg]summons 3 pets and the pets ricochet off walls once ' end ,
2021-07-24 23:48:37 +02:00
[ ' sentry ' ] = function ( ) return ' [light_bg]+50% sentry turret attack speed and the projectiles ricochet twice ' end ,
2021-06-17 07:45:14 +02:00
[ ' chronomancer ' ] = function ( ) return ' [light_bg]enemies take damage over time 50% faster ' end ,
2021-04-26 03:17:31 +02:00
[ ' spellblade ' ] = function ( ) return ' [light_bg]faster projectile speed and tighter turns ' end ,
2021-06-25 06:21:07 +02:00
[ ' psykeeper ' ] = function ( ) return ' [light_bg]deal double the damage taken by the psykeeper to all enemies ' end ,
2021-05-29 10:56:38 +02:00
[ ' engineer ' ] = function ( ) return ' [light_bg]drops 2 additional turrets and grants all turrets +50% damage and attack speed ' end ,
2021-04-26 03:17:31 +02:00
[ ' plague_doctor ' ] = function ( ) return ' [light_bg]nearby enemies take an additional ' .. get_character_stat ( ' plague_doctor ' , 3 , ' dmg ' ) .. ' damage per second ' end ,
[ ' barbarian ' ] = function ( ) return ' [light_bg]stunned enemies also take 100% increased damage ' end ,
[ ' juggernaut ' ] = function ( ) return ' [light_bg]enemies pushed by the juggernaut take ' .. 4 * get_character_stat ( ' juggernaut ' , 3 , ' dmg ' ) .. ' damage if they hit a wall ' end ,
[ ' lich ' ] = function ( ) return ' [light_bg]chain frost slows enemies hit by 80% for 2 seconds and chains +7 times ' end ,
[ ' cryomancer ' ] = function ( ) return ' [light_bg]enemies are also slowed by 60% while in the area ' end ,
[ ' pyromancer ' ] = function ( ) return ' [light_bg]enemies killed by the pyromancer explode, dealing ' .. get_character_stat ( ' pyromancer ' , 3 , ' dmg ' ) .. ' AoE damage ' end ,
2021-06-18 23:36:00 +02:00
[ ' corruptor ' ] = function ( ) return ' [light_bg]spawn 2 small critters if the corruptor hits an enemy ' end ,
[ ' beastmaster ' ] = function ( ) return ' [light_bg]spawn 4 small critters if the beastmaster gets hit ' end ,
2021-04-26 03:17:31 +02:00
[ ' launcher ' ] = function ( ) return ' [light_bg]enemies launched take 300% more damage when they hit walls ' end ,
2021-05-29 03:42:16 +02:00
[ ' jester ' ] = function ( ) return ' [light_bg]curses 6 enemies and all knives seek enemies and pierce 2 times ' end ,
2021-04-26 03:17:31 +02:00
[ ' assassin ' ] = function ( ) return ' [light_bg]poison inflicted from crits deals 8x damage ' end ,
[ ' host ' ] = function ( ) return ' [light_bg]+100% critter spawn rate and spawn 2 critters instead ' end ,
2021-07-04 20:13:19 +02:00
[ ' carver ' ] = function ( ) return ' [light_bg]carves a tree that creates healing orbs twice as fast ' end ,
2021-05-29 03:42:16 +02:00
[ ' bane ' ] = function ( ) return " [light_bg]100% increased area for bane's void rifts " end ,
2021-04-26 03:17:31 +02:00
[ ' psykino ' ] = function ( ) return ' [light_bg]enemies take ' .. 4 * get_character_stat ( ' psykino ' , 3 , ' dmg ' ) .. ' damage and are pushed away when the area expires ' end ,
[ ' barrager ' ] = function ( ) return ' [light_bg]every 3rd attack the barrage shoots 15 projectiles and they push harder ' end ,
[ ' highlander ' ] = function ( ) return ' [light_bg]quickly repeats the attack 3 times ' end ,
2021-06-24 17:09:29 +02:00
[ ' fairy ' ] = function ( ) return ' [light_bg]creates 2 healing orbs and grants 2 units +100% attack speed ' end ,
2021-05-30 03:06:47 +02:00
[ ' priest ' ] = function ( ) return ' [light_bg]picks 3 units at random and grants them a buff that prevents death once ' end ,
2021-05-17 10:05:48 +02:00
[ ' infestor ' ] = function ( ) return ' [light_bg]triples the number of critters released ' end ,
2021-06-24 17:09:29 +02:00
[ ' flagellant ' ] = function ( ) return ' [light_bg]2X flagellant max HP and grants +12% damage to all allies per cast instead ' end ,
2021-06-05 08:11:23 +02:00
[ ' arcanist ' ] = function ( ) return ' [light_bg]+50% attack speed for the orb and 2 projectiles are released per cast ' end ,
2021-06-08 06:21:35 +02:00
[ ' illusionist ' ] = function ( ) return ' [light_bg]doubles the number of copies created and they release 12 projectiles on death ' end ,
2021-07-03 07:08:35 +02:00
[ ' artificer ' ] = function ( ) return ' [light_bg]automatons shoot and move 50% faster and release 12 projectiles on death ' end ,
2021-06-02 07:43:03 +02:00
[ ' 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 ,
2021-06-03 22:02:04 +02:00
[ ' vulcanist ' ] = function ( ) return ' [light_bg]the number and speed of explosions is doubled ' end ,
2021-06-05 08:11:23 +02:00
[ ' warden ' ] = function ( ) return ' [light_bg]creates the force field around 2 units ' end ,
[ ' psychic ' ] = function ( ) return ' [light_bg]the attack can happen from any distance and repeats once ' end ,
2021-06-11 06:44:06 +02:00
[ ' miner ' ] = function ( ) return ' [light_bg]release 8 homing projectiles instead and they pierce twice ' end ,
2021-06-10 19:39:40 +02:00
[ ' merchant ' ] = function ( ) return ' [light_bg]your first item reroll is always free ' end ,
[ ' usurer ' ] = function ( ) return ' [light_bg]if the same enemy is cursed 3 times it takes ' .. 10 * get_character_stat ( ' usurer ' , 3 , ' dmg ' ) .. ' damage ' end ,
[ ' gambler ' ] = function ( ) return ' [light_bg]60/40/20% chance to cast the attack 2/3/4 times ' end ,
2021-06-11 12:43:15 +02:00
[ ' thief ' ] = function ( ) return ' [light_bg]if the knife crits it deals ' .. 10 * get_character_stat ( ' thief ' , 3 , ' dmg ' ) .. ' damage, chains 10 times and grants 1 gold ' end ,
2021-04-26 03:17:31 +02: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 ,
2021-06-03 22:02:04 +02:00
[ ' magician ' ] = function ( lvl ) return get_character_stat_string ( ' magician ' , lvl ) end ,
2021-03-07 03:35:18 +01:00
[ ' 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 ,
2021-07-03 07:08:35 +02:00
[ ' bomber ' ] = function ( lvl ) return get_character_stat_string ( ' bomber ' , lvl ) end ,
2021-03-07 03:35:18 +01:00
[ ' 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 ,
2021-07-03 07:08:35 +02:00
[ ' sentry ' ] = function ( lvl ) return get_character_stat_string ( ' sentry ' , lvl ) end ,
2021-03-07 03:35:18 +01:00
[ ' 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-05-29 03:42:16 +02:00
[ ' jester ' ] = function ( lvl ) return get_character_stat_string ( ' jester ' , 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 ,
2021-04-14 03:12:29 +02:00
[ ' barrager ' ] = function ( lvl ) return get_character_stat_string ( ' barrager ' , lvl ) end ,
2021-04-12 04:51:34 +02:00
[ ' highlander ' ] = function ( lvl ) return get_character_stat_string ( ' highlander ' , lvl ) end ,
2021-04-15 02:02:57 +02:00
[ ' fairy ' ] = function ( lvl ) return get_character_stat_string ( ' fairy ' , lvl ) end ,
2021-04-07 03:26:59 +02:00
[ ' 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-06-02 07:43:03 +02:00
[ ' arcanist ' ] = function ( lvl ) return get_character_stat_string ( ' arcanist ' , lvl ) end ,
[ ' illusionist ' ] = function ( lvl ) return get_character_stat_string ( ' illusionist ' , lvl ) end ,
2021-07-03 07:08:35 +02:00
[ ' artificer ' ] = function ( lvl ) return get_character_stat_string ( ' artificer ' , lvl ) end ,
2021-06-02 07:43:03 +02:00
[ ' witch ' ] = function ( lvl ) return get_character_stat_string ( ' witch ' , lvl ) end ,
[ ' silencer ' ] = function ( lvl ) return get_character_stat_string ( ' silencer ' , lvl ) end ,
[ ' vulcanist ' ] = function ( lvl ) return get_character_stat_string ( ' vulcanist ' , lvl ) end ,
[ ' warden ' ] = function ( lvl ) return get_character_stat_string ( ' warden ' , lvl ) end ,
[ ' psychic ' ] = function ( lvl ) return get_character_stat_string ( ' psychic ' , lvl ) end ,
2021-06-11 06:44:06 +02:00
[ ' miner ' ] = function ( lvl ) return get_character_stat_string ( ' miner ' , lvl ) end ,
2021-06-10 19:39:40 +02:00
[ ' merchant ' ] = function ( lvl ) return get_character_stat_string ( ' merchant ' , lvl ) end ,
[ ' usurer ' ] = function ( lvl ) return get_character_stat_string ( ' usurer ' , lvl ) end ,
[ ' gambler ' ] = function ( lvl ) return get_character_stat_string ( ' gambler ' , lvl ) end ,
[ ' thief ' ] = function ( lvl ) return get_character_stat_string ( ' thief ' , 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 } ,
2021-06-03 22:02:04 +02:00
[ ' swarmer ' ] = { hp = 1.2 , dmg = 1 , aspd = 1.25 , area_dmg = 1 , area_size = 1 , def = 0.75 , mvspd = 0.75 } ,
2021-04-10 00:46:49 +02:00
[ ' voider ' ] = { hp = 0.75 , dmg = 1.3 , aspd = 1 , area_dmg = 0.8 , area_size = 0.75 , def = 0.6 , mvspd = 0.8 } ,
2021-06-02 07:43:03 +02:00
[ ' sorcerer ' ] = { hp = 0.8 , dmg = 1.3 , aspd = 1 , area_dmg = 1.2 , area_size = 1 , def = 0.8 , mvspd = 1 } ,
2021-06-10 19:39:40 +02:00
[ ' mercenary ' ] = { hp = 1 , dmg = 1 , aspd = 1 , area_dmg = 1 , area_size = 1 , def = 1 , mvspd = 1 } ,
2021-06-25 06:21:07 +02:00
[ ' explorer ' ] = { hp = 1 , dmg = 1 , aspd = 1 , area_dmg = 1 , area_size = 1 , def = 1 , mvspd = 1.25 } ,
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-06-02 07:43:03 +02:00
local ylb1 = function ( lvl )
2021-06-17 07:45:14 +02:00
if lvl == 3 then return ' light_bg '
elseif lvl == 2 then return ' light_bg '
2021-06-02 07:43:03 +02:00
elseif lvl == 1 then return ' yellow '
else return ' light_bg ' end
end
local ylb2 = function ( lvl )
2021-06-17 07:45:14 +02:00
if lvl == 3 then return ' light_bg '
2021-06-02 07:43:03 +02:00
elseif lvl == 2 then return ' yellow '
else return ' light_bg ' end
end
local ylb3 = function ( lvl )
if lvl == 3 then return ' yellow '
else return ' light_bg ' end
end
2021-03-08 05:33:01 +01:00
class_descriptions = {
2021-06-16 07:37:40 +02:00
[ ' ranger ' ] = function ( lvl ) return ' [ ' .. ylb1 ( lvl ) .. ' ]3[light_bg]/[ ' .. ylb2 ( lvl ) .. ' ]6 [fg]- [ ' .. ylb1 ( lvl ) .. ' ]8%[light_bg]/[ ' .. ylb2 ( lvl ) .. ' ]16% [fg]chance to release a barrage on attack to allied rangers ' end ,
[ ' warrior ' ] = function ( lvl ) return ' [ ' .. ylb1 ( lvl ) .. ' ]3[light_bg]/[ ' .. ylb2 ( lvl ) .. ' ]6 [fg]- [ ' .. ylb1 ( lvl ) .. ' ]+25[light_bg]/[ ' .. ylb2 ( lvl ) .. ' ]+50 [fg]defense to allied warriors ' end ,
[ ' mage ' ] = function ( lvl ) return ' [ ' .. ylb1 ( lvl ) .. ' ]3[light_bg]/[ ' .. ylb2 ( lvl ) .. ' ]6 [fg]- [ ' .. ylb1 ( lvl ) .. ' ]-15[light_bg]/[ ' .. ylb2 ( lvl ) .. ' ]-30 [fg]enemy defense ' end ,
[ ' rogue ' ] = function ( lvl ) return ' [ ' .. ylb1 ( lvl ) .. ' ]3[light_bg]/[ ' .. ylb2 ( lvl ) .. ' ]6 [fg]- [ ' .. ylb1 ( lvl ) .. ' ]15%[light_bg]/[ ' .. ylb2 ( lvl ) .. ' ]30% [fg]chance to crit to allied rogues, dealing [yellow]4x[] damage ' end ,
2021-07-04 06:50:31 +02:00
[ ' healer ' ] = function ( lvl ) return ' [ ' .. ylb1 ( lvl ) .. ' ]2[light_bg]/[ ' .. ylb2 ( lvl ) .. ' ]4 [fg]- [ ' .. ylb1 ( lvl ) .. ' ]+15%[light_bg]/[ ' .. ylb2 ( lvl ) .. ' ]+30% [fg] chance to create [yellow]+1[fg] healing orb on healing orb creation ' end ,
2021-06-16 07:37:40 +02:00
[ ' enchanter ' ] = function ( lvl ) return ' [ ' .. ylb1 ( lvl ) .. ' ]2[light_bg]/[ ' .. ylb2 ( lvl ) .. ' ]4 [fg]- [ ' .. ylb1 ( lvl ) .. ' ]+15%[light_bg]/[ ' .. ylb2 ( lvl ) .. ' ]+25% [fg]damage to all allies ' end ,
[ ' nuker ' ] = function ( lvl ) return ' [ ' .. ylb1 ( lvl ) .. ' ]3[light_bg]/[ ' .. ylb2 ( lvl ) .. ' ]6 [fg]- [ ' .. ylb1 ( lvl ) .. ' ]+15%[light_bg]/[ ' .. ylb2 ( lvl ) .. ' ]+25% [fg]area damage and size to allied nukers ' end ,
2021-07-03 07:08:35 +02:00
[ ' conjurer ' ] = function ( lvl ) return ' [ ' .. ylb1 ( lvl ) .. ' ]2[light_bg]/[ ' .. ylb2 ( lvl ) .. ' ]4 [fg]- [ ' .. ylb1 ( lvl ) .. ' ]+25%[light_bg]/[ ' .. ylb2 ( lvl ) .. ' ]+50% [fg]construct damage and duration ' end ,
2021-07-04 06:50:31 +02:00
[ ' psyker ' ] = function ( lvl ) return ' [ ' .. ylb1 ( lvl ) .. ' ]2[light_bg]/[ ' .. ylb2 ( lvl ) .. ' ]4 [fg]- [ ' .. ylb1 ( lvl ) .. ' ]+2[light_bg]/[ ' .. ylb2 ( lvl ) .. ' ]+4 [fg]total psyker orbs and [yellow]+1[fg] orb for each psyker ' end ,
2021-06-25 18:25:13 +02:00
[ ' curser ' ] = function ( lvl ) return ' [ ' .. ylb1 ( lvl ) .. ' ]2[light_bg]/[ ' .. ylb2 ( lvl ) .. ' ]4 [fg]- [ ' .. ylb1 ( lvl ) .. ' ]+1[light_bg]/[ ' .. ylb2 ( lvl ) .. ' ]+3 [fg]max curse targets to allied cursers ' end ,
2021-06-16 07:37:40 +02:00
[ ' forcer ' ] = function ( lvl ) return ' [ ' .. ylb1 ( lvl ) .. ' ]2[light_bg]/[ ' .. ylb2 ( lvl ) .. ' ]4 [fg]- [ ' .. ylb1 ( lvl ) .. ' ]+25%[light_bg]/[ ' .. ylb2 ( lvl ) .. ' ]+50% [fg]knockback force to all allies ' end ,
[ ' swarmer ' ] = function ( lvl ) return ' [ ' .. ylb1 ( lvl ) .. ' ]2[light_bg]/[ ' .. ylb2 ( lvl ) .. ' ]4 [fg]- [ ' .. ylb1 ( lvl ) .. ' ]+1[light_bg]/[ ' .. ylb2 ( lvl ) .. ' ]+3 [fg]hits to critters ' end ,
2021-06-17 07:45:14 +02:00
[ ' voider ' ] = function ( lvl ) return ' [ ' .. ylb1 ( lvl ) .. ' ]2[light_bg]/[ ' .. ylb2 ( lvl ) .. ' ]4 [fg]- [ ' .. ylb1 ( lvl ) .. ' ]+20%[light_bg]/[ ' .. ylb2 ( lvl ) .. ' ]+40% [fg]damage over time to allied voiders ' end ,
2021-06-02 07:43:03 +02:00
[ ' sorcerer ' ] = function ( lvl )
2021-06-16 07:37:40 +02:00
return ' [ ' .. ylb1 ( lvl ) .. ' ]2[light_bg]/[ ' .. ylb2 ( lvl ) .. ' ]4[light_bg]/[ ' .. ylb3 ( lvl ) .. ' ]6 [fg]- sorcerers repeat their attacks once every [ ' ..
ylb1 ( lvl ) .. ' ]4[light_bg]/[ ' .. ylb2 ( lvl ) .. ' ]3[light_bg]/[ ' .. ylb3 ( lvl ) .. ' ]2[fg] attacks '
2021-06-02 07:43:03 +02:00
end ,
2021-06-18 23:36:00 +02:00
[ ' mercenary ' ] = function ( lvl ) return ' [ ' .. ylb1 ( lvl ) .. ' ]2[light_bg]/[ ' .. ylb2 ( lvl ) .. ' ]4 [fg]- [ ' .. ylb1 ( lvl ) .. ' ]+8%[light_bg]/[ ' .. ylb2 ( lvl ) .. ' ]+16% [fg]chance for enemies to drop gold on death ' end ,
2021-07-18 02:01:49 +02:00
[ ' explorer ' ] = function ( lvl ) return ' [yellow]+15%[fg] attack speed and damage per active class to allied explorers ' end ,
2021-03-11 03:49:16 +01:00
}
tier_to_characters = {
2021-06-18 23:36:00 +02:00
[ 1 ] = { ' vagrant ' , ' swordsman ' , ' magician ' , ' archer ' , ' scout ' , ' cleric ' , ' arcanist ' , ' merchant ' } ,
2021-07-03 07:08:35 +02:00
[ 2 ] = { ' wizard ' , ' bomber ' , ' sage ' , ' squire ' , ' dual_gunner ' , ' sentry ' , ' chronomancer ' , ' barbarian ' , ' cryomancer ' , ' beastmaster ' , ' jester ' , ' carver ' , ' psychic ' , ' witch ' , ' silencer ' , ' outlaw ' , ' miner ' } ,
[ 3 ] = { ' elementor ' , ' stormweaver ' , ' spellblade ' , ' psykeeper ' , ' engineer ' , ' juggernaut ' , ' pyromancer ' , ' host ' , ' assassin ' , ' bane ' , ' barrager ' , ' infestor ' , ' flagellant ' , ' artificer ' , ' usurer ' , ' gambler ' } ,
2021-06-10 19:39:40 +02:00
[ 4 ] = { ' priest ' , ' highlander ' , ' psykino ' , ' fairy ' , ' blade ' , ' plague_doctor ' , ' cannoneer ' , ' vulcanist ' , ' warden ' , ' corruptor ' , ' thief ' } ,
2021-03-11 03:49:16 +01:00
}
2021-06-11 06:44:06 +02:00
non_attacking_characters = { ' cleric ' , ' stormweaver ' , ' squire ' , ' chronomancer ' , ' sage ' , ' psykeeper ' , ' bane ' , ' carver ' , ' fairy ' , ' priest ' , ' flagellant ' , ' merchant ' , ' miner ' }
non_cooldown_characters = { ' squire ' , ' chronomancer ' , ' psykeeper ' , ' merchant ' , ' miner ' }
2021-04-02 03:59:26 +02:00
2021-03-11 03:49:16 +01:00
character_tiers = {
[ ' vagrant ' ] = 1 ,
[ ' swordsman ' ] = 1 ,
2021-06-03 22:02:04 +02:00
[ ' magician ' ] = 1 ,
2021-03-11 03:49:16 +01:00
[ ' archer ' ] = 1 ,
[ ' scout ' ] = 1 ,
[ ' cleric ' ] = 1 ,
2021-06-03 22:02:04 +02:00
[ ' outlaw ' ] = 2 ,
2021-04-07 03:26:59 +02:00
[ ' blade ' ] = 4 ,
2021-03-11 03:49:16 +01:00
[ ' elementor ' ] = 3 ,
2021-07-03 07:08:35 +02:00
-- ['saboteur'] = 2,
[ ' bomber ' ] = 2 ,
2021-06-03 22:02:04 +02:00
[ ' wizard ' ] = 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 ,
2021-07-03 07:08:35 +02:00
-- ['hunter'] = 2,
[ ' sentry ' ] = 2 ,
2021-03-11 03:49:16 +01:00
[ ' 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 ,
2021-06-03 22:02:04 +02:00
-- ['lich'] = 4,
2021-04-07 03:26:59 +02:00
[ ' cryomancer ' ] = 2 ,
[ ' pyromancer ' ] = 3 ,
2021-06-03 22:02:04 +02:00
[ ' corruptor ' ] = 4 ,
2021-04-07 03:26:59 +02:00
[ ' beastmaster ' ] = 2 ,
2021-06-11 12:43:15 +02:00
-- ['launcher'] = 2,
2021-05-29 03:42:16 +02:00
[ ' jester ' ] = 2 ,
2021-04-07 03:26:59 +02:00
[ ' assassin ' ] = 3 ,
2021-06-03 22:02:04 +02:00
[ ' host ' ] = 3 ,
2021-04-07 03:26:59 +02:00
[ ' carver ' ] = 2 ,
[ ' bane ' ] = 3 ,
[ ' psykino ' ] = 4 ,
2021-04-14 03:12:29 +02:00
[ ' barrager ' ] = 3 ,
2021-04-12 04:51:34 +02:00
[ ' highlander ' ] = 4 ,
2021-04-15 02:02:57 +02:00
[ ' fairy ' ] = 4 ,
2021-04-07 03:26:59 +02:00
[ ' priest ' ] = 4 ,
2021-04-12 04:51:34 +02:00
[ ' infestor ' ] = 3 ,
2021-04-07 03:26:59 +02:00
[ ' flagellant ' ] = 3 ,
2021-06-10 19:39:40 +02:00
[ ' arcanist ' ] = 1 ,
2021-07-03 07:08:35 +02:00
-- ['illusionist'] = 3,
[ ' artificer ' ] = 3 ,
2021-06-03 22:02:04 +02:00
[ ' witch ' ] = 2 ,
[ ' silencer ' ] = 2 ,
[ ' vulcanist ' ] = 4 ,
2021-06-10 19:39:40 +02:00
[ ' warden ' ] = 4 ,
[ ' psychic ' ] = 2 ,
2021-06-18 23:36:00 +02:00
[ ' miner ' ] = 2 ,
[ ' merchant ' ] = 1 ,
2021-06-10 19:39:40 +02:00
[ ' usurer ' ] = 3 ,
[ ' gambler ' ] = 3 ,
[ ' thief ' ] = 4 ,
2021-03-11 03:49:16 +01:00
}
2021-06-17 07:45:14 +02:00
launches_projectiles = function ( character )
local classes = { ' vagrant ' , ' archer ' , ' scout ' , ' outlaw ' , ' blade ' , ' wizard ' , ' cannoneer ' , ' dual_gunner ' , ' hunter ' , ' spellblade ' , ' engineer ' , ' corruptor ' , ' beastmaster ' , ' jester ' , ' assassin ' , ' barrager ' ,
2021-07-03 07:08:35 +02:00
' arcanist ' , ' illusionist ' , ' artificer ' , ' miner ' , ' thief ' , ' sentry ' }
2021-06-17 07:45:14 +02:00
return table.any ( classes , function ( v ) return v == character end )
end
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-06-02 07:43:03 +02:00
local sorcerers = 0
2021-06-10 19:39:40 +02:00
local mercenaries = 0
2021-06-25 06:21:07 +02:00
local explorers = 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-06-02 07:43:03 +02:00
if unit_class == ' sorcerer ' then sorcerers = sorcerers + 1 end
2021-06-10 19:39:40 +02:00
if unit_class == ' mercenary ' then mercenaries = mercenaries + 1 end
2021-06-25 06:21:07 +02:00
if unit_class == ' explorer ' then explorers = explorers + 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-06-25 06:21:07 +02:00
enchanter = enchanters , psyker = psykers , curser = cursers , forcer = forcers , swarmer = swarmers , voider = voiders , sorcerer = sorcerers , mercenary = mercenaries , explorer = explorers }
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-07-04 06:50:31 +02:00
elseif class == ' healer ' or class == ' conjurer ' or class == ' enchanter ' or class == ' curser ' or class == ' forcer ' or class == ' swarmer ' or class == ' voider ' or class == ' mercenary ' or class == ' psyker ' 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
2021-06-02 07:43:03 +02:00
elseif class == ' sorcerer ' then
if number_of_units >= 6 then return 3
elseif number_of_units >= 4 then return 2
elseif number_of_units >= 2 then return 1
else return 0 end
2021-07-04 06:50:31 +02:00
elseif class == ' explorer ' then
2021-06-25 06:21:07 +02:00
if number_of_units >= 1 then return 1
else return 0 end
2021-04-10 00:46:49 +02:00
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 ' ) ,
2021-06-02 07:43:03 +02:00
sorcerer = units_to_class_level ( units_per_class.sorcerer , ' sorcerer ' ) ,
2021-06-10 19:39:40 +02:00
mercenary = units_to_class_level ( units_per_class.mercenary , ' mercenary ' ) ,
2021-06-25 06:21:07 +02:00
explorer = units_to_class_level ( units_per_class.explorer , ' explorer ' ) ,
2021-04-10 00:46:49 +02:00
}
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-06-03 22:02:04 +02:00
[ ' ranger ' ] = function ( units ) return 3 , 6 , nil , get_number_of_units_per_class ( units ) . ranger end ,
[ ' warrior ' ] = function ( units ) return 3 , 6 , nil , get_number_of_units_per_class ( units ) . warrior end ,
[ ' mage ' ] = function ( units ) return 3 , 6 , nil , get_number_of_units_per_class ( units ) . mage end ,
[ ' nuker ' ] = function ( units ) return 3 , 6 , nil , get_number_of_units_per_class ( units ) . nuker end ,
[ ' rogue ' ] = function ( units ) return 3 , 6 , nil , get_number_of_units_per_class ( units ) . rogue end ,
[ ' healer ' ] = function ( units ) return 2 , 4 , nil , get_number_of_units_per_class ( units ) . healer end ,
[ ' conjurer ' ] = function ( units ) return 2 , 4 , nil , get_number_of_units_per_class ( units ) . conjurer end ,
[ ' enchanter ' ] = function ( units ) return 2 , 4 , nil , get_number_of_units_per_class ( units ) . enchanter end ,
2021-07-04 06:50:31 +02:00
[ ' psyker ' ] = function ( units ) return 2 , 4 , nil , get_number_of_units_per_class ( units ) . psyker end ,
2021-06-03 22:02:04 +02:00
[ ' curser ' ] = function ( units ) return 2 , 4 , nil , get_number_of_units_per_class ( units ) . curser end ,
[ ' forcer ' ] = function ( units ) return 2 , 4 , nil , get_number_of_units_per_class ( units ) . forcer end ,
[ ' swarmer ' ] = function ( units ) return 2 , 4 , nil , get_number_of_units_per_class ( units ) . swarmer end ,
[ ' voider ' ] = function ( units ) return 2 , 4 , nil , get_number_of_units_per_class ( units ) . voider end ,
[ ' sorcerer ' ] = function ( units ) return 2 , 4 , 6 , get_number_of_units_per_class ( units ) . sorcerer end ,
2021-06-10 19:39:40 +02:00
[ ' mercenary ' ] = function ( units ) return 2 , 4 , nil , get_number_of_units_per_class ( units ) . mercenary end ,
2021-06-25 06:21:07 +02:00
[ ' explorer ' ] = function ( units ) return 1 , 1 , nil , get_number_of_units_per_class ( units ) . explorer end ,
2021-03-08 05:33:01 +01:00
}
2021-04-17 05:30:34 +02:00
passive_names = {
2021-06-16 07:37:40 +02:00
[ ' centipede ' ] = ' Centipede ' ,
2021-04-17 05:30:34 +02:00
[ ' ouroboros_technique_r ' ] = ' Ouroboros Technique R ' ,
[ ' ouroboros_technique_l ' ] = ' Ouroboros Technique L ' ,
[ ' amplify ' ] = ' Amplify ' ,
[ ' resonance ' ] = ' Resonance ' ,
[ ' ballista ' ] = ' Ballista ' ,
2021-06-16 07:37:40 +02:00
[ ' call_of_the_void ' ] = ' Call of the Void ' ,
[ ' crucio ' ] = ' Crucio ' ,
[ ' speed_3 ' ] = ' Speed 3 ' ,
[ ' damage_4 ' ] = ' Damage 4 ' ,
2021-06-17 07:45:14 +02:00
[ ' shoot_5 ' ] = ' Shoot 5 ' ,
2021-06-16 07:37:40 +02:00
[ ' death_6 ' ] = ' Death 6 ' ,
[ ' lasting_7 ' ] = ' Lasting 7 ' ,
[ ' defensive_stance ' ] = ' Defensive Stance ' ,
[ ' offensive_stance ' ] = ' Offensive Stance ' ,
[ ' kinetic_bomb ' ] = ' Kinetic Bomb ' ,
[ ' porcupine_technique ' ] = ' Porcupine Technique ' ,
[ ' last_stand ' ] = ' Last Stand ' ,
[ ' seeping ' ] = ' Seeping ' ,
[ ' deceleration ' ] = ' Deceleration ' ,
[ ' annihilation ' ] = ' Annihilation ' ,
[ ' malediction ' ] = ' Malediction ' ,
2021-06-18 07:32:19 +02:00
[ ' hextouch ' ] = ' Hextouch ' ,
2021-06-16 07:37:40 +02:00
[ ' whispers_of_doom ' ] = ' Whispers of Doom ' ,
[ ' tremor ' ] = ' Tremor ' ,
[ ' heavy_impact ' ] = ' Heavy Impact ' ,
[ ' fracture ' ] = ' Fracture ' ,
[ ' meat_shield ' ] = ' Meat Shield ' ,
[ ' hive ' ] = ' Hive ' ,
[ ' baneling_burst ' ] = ' Baneling Burst ' ,
2021-04-17 05:30:34 +02:00
[ ' blunt_arrow ' ] = ' Blunt Arrow ' ,
[ ' explosive_arrow ' ] = ' Explosive Arrow ' ,
[ ' divine_machine_arrow ' ] = ' Divine Machine Arrow ' ,
[ ' chronomancy ' ] = ' Chronomancy ' ,
[ ' awakening ' ] = ' Awakening ' ,
[ ' divine_punishment ' ] = ' Divine Punishment ' ,
[ ' assassination ' ] = ' Assassination ' ,
2021-06-16 07:37:40 +02:00
[ ' flying_daggers ' ] = ' Flying Daggers ' ,
[ ' ultimatum ' ] = ' Ultimatum ' ,
2021-04-17 05:30:34 +02:00
[ ' magnify ' ] = ' Magnify ' ,
2021-05-21 08:17:31 +02:00
[ ' echo_barrage ' ] = ' Echo Barrage ' ,
2021-04-17 05:30:34 +02:00
[ ' unleash ' ] = ' Unleash ' ,
[ ' reinforce ' ] = ' Reinforce ' ,
[ ' payback ' ] = ' Payback ' ,
2021-06-16 07:37:40 +02:00
[ ' enchanted ' ] = ' Enchanted ' ,
[ ' freezing_field ' ] = ' Freezing Field ' ,
[ ' burning_field ' ] = ' Burning Field ' ,
[ ' gravity_field ' ] = ' Gravity Field ' ,
[ ' magnetism ' ] = ' Magnetism ' ,
[ ' insurance ' ] = ' Insurance ' ,
[ ' dividends ' ] = ' Dividends ' ,
[ ' berserking ' ] = ' Berserking ' ,
[ ' unwavering_stance ' ] = ' Unwavering Stance ' ,
[ ' unrelenting_stance ' ] = ' Unrelenting Stance ' ,
2021-06-25 06:21:07 +02:00
[ ' blessing ' ] = ' Blessing ' ,
[ ' haste ' ] = ' Haste ' ,
[ ' divine_barrage ' ] = ' Divine Barrage ' ,
[ ' orbitism ' ] = ' Orbitism ' ,
[ ' psyker_orbs ' ] = ' Psyker Orbs ' ,
[ ' psychosense ' ] = ' Psychosense ' ,
2021-07-04 06:50:31 +02:00
[ ' psychosink ' ] = ' Psychosink ' ,
2021-06-25 06:21:07 +02:00
[ ' rearm ' ] = ' Rearm ' ,
[ ' taunt ' ] = ' Taunt ' ,
2021-07-03 07:08:35 +02:00
[ ' construct_instability ' ] = ' Construct Instability ' ,
[ ' intimidation ' ] = ' Intimidation ' ,
[ ' vulnerability ' ] = ' Vulnerability ' ,
[ ' temporal_chains ' ] = ' Temporal Chains ' ,
[ ' ceremonial_dagger ' ] = ' Ceremonial Dagger ' ,
[ ' homing_barrage ' ] = ' Homing Barrage ' ,
[ ' critical_strike ' ] = ' Critical Strike ' ,
[ ' noxious_strike ' ] = ' Noxious Strike ' ,
[ ' infesting_strike ' ] = ' Infesting Strike ' ,
[ ' kinetic_strike ' ] = ' Kinetic Strike ' ,
[ ' burning_strike ' ] = ' Burning Strike ' ,
[ ' lucky_strike ' ] = ' Lucky Strike ' ,
[ ' healing_strike ' ] = ' Healing Strike ' ,
[ ' stunning_strike ' ] = ' Stunning Strike ' ,
[ ' silencing_strike ' ] = ' Silencing Strike ' ,
[ ' warping_shots ' ] = ' Warping Shots ' ,
[ ' culling_strike ' ] = ' Culling Strike ' ,
[ ' lightning_strike ' ] = ' Lightning Strike ' ,
[ ' psycholeak ' ] = ' Psycholeak ' ,
[ ' divine_blessing ' ] = ' Divine Blessing ' ,
2021-07-04 06:50:31 +02:00
[ ' hardening ' ] = ' Hardening ' ,
2021-04-17 05:30:34 +02:00
}
passive_descriptions = {
2021-06-16 07:37:40 +02:00
[ ' centipede ' ] = ' [yellow]+10/20/30%[fg] movement speed ' ,
[ ' ouroboros_technique_r ' ] = ' [fg]rotating around yourself to the right releases [yellow]2/3/4[fg] projectiles per second ' ,
[ ' ouroboros_technique_l ' ] = ' [fg]rotating around yourself to the left grants [yellow]+15/25/35%[fg] defense to all units ' ,
[ ' amplify ' ] = ' [yellow]+20/35/50%[fg] AoE damage ' ,
[ ' resonance ' ] = ' [fg]all AoE attacks deal [yellow]+3/5/7%[fg] damage per unit hit ' ,
[ ' ballista ' ] = ' [yellow]+20/35/50%[fg] projectile damage ' ,
[ ' call_of_the_void ' ] = ' [yellow]+30/60/90%[fg] DoT damage ' ,
[ ' crucio ' ] = ' [fg]taking damage also shares that across all enemies at [yellow]20/30/40%[fg] its value ' ,
[ ' speed_3 ' ] = ' [fg]position [yellow]3[fg] has [yellow]+50%[fg] attack speed ' ,
[ ' damage_4 ' ] = ' [fg]position [yellow]4[fg] has [yellow]+30%[fg] damage ' ,
2021-06-17 07:45:14 +02:00
[ ' shoot_5 ' ] = ' [fg]position [yellow]5[fg] shoots [yellow]3[fg] projectiles per second ' ,
2021-06-16 07:37:40 +02:00
[ ' death_6 ' ] = ' [fg]position [yellow]6[fg] takes [yellow]10%[fg] of its health as damage every [yellow]3[fg] seconds ' ,
[ ' lasting_7 ' ] = ' [fg]position [yellow]7[fg] will stay alive for [yellow]10[fg] seconds after dying ' ,
[ ' defensive_stance ' ] = ' [fg]first and last positions have [yellow]+10/20/30%[fg] defense ' ,
[ ' offensive_stance ' ] = ' [fg]first and last positions have [yellow]+10/20/30%[fg] damage ' ,
2021-06-17 07:45:14 +02:00
[ ' kinetic_bomb ' ] = ' [fg]when an ally dies it explodes, launching enemies away ' ,
[ ' porcupine_technique ' ] = ' [fg]when an ally dies it explodes, releasing piercing and ricocheting projectiles ' ,
2021-06-16 07:37:40 +02:00
[ ' last_stand ' ] = ' [fg]the last unit alive is fully healed and receives a [yellow]+20%[fg] bonus to all stats ' ,
2021-06-18 07:32:19 +02:00
[ ' seeping ' ] = ' [fg]enemies taking DoT damage have [yellow]-15/25/35%[fg] defense ' ,
[ ' deceleration ' ] = ' [fg]enemies taking DoT damage have [yellow]-15/25/35%[fg] movement speed ' ,
2021-06-16 07:37:40 +02:00
[ ' annihilation ' ] = ' [fg]when a voider dies deal its DoT damage to all enemies for [yellow]3[fg] seconds ' ,
2021-06-18 07:32:19 +02:00
[ ' malediction ' ] = ' [yellow]+1/3/5[fg] max curse targets to all allied cursers ' ,
[ ' hextouch ' ] = ' [fg]enemies take [yellow]10/15/20[fg] damage per second for [yellow]3[fg] seconds when cursed ' ,
2021-06-16 07:37:40 +02:00
[ ' whispers_of_doom ' ] = ' [fg]curses apply doom, deal [yellow]100/150/200[fg] damage every [yellow]4/3/2[fg] doom instances ' ,
2021-06-18 07:32:19 +02:00
[ ' tremor ' ] = ' [fg]when enemies hit walls they create an area based on the knockback force ' ,
2021-06-16 07:37:40 +02:00
[ ' heavy_impact ' ] = ' [fg]when enemies hit walls they take damage based on the knockback force ' ,
2021-06-18 07:32:19 +02:00
[ ' fracture ' ] = ' [fg]when enemies hit walls they explode into projectiles ' ,
2021-06-16 07:37:40 +02:00
[ ' meat_shield ' ] = ' [fg]critters [yellow]block[fg] enemy projectiles ' ,
[ ' hive ' ] = ' [fg]critters have [yellow]+1/2/3[fg] HP ' ,
[ ' baneling_burst ' ] = ' [fg]critters die immediately on contact but also deal [yellow]50/100/150[fg] AoE damage ' ,
[ ' blunt_arrow ' ] = ' [fg]ranger arrows have [yellow]+10/20/30%[fg] chance to knockback ' ,
[ ' explosive_arrow ' ] = ' [fg]ranger arrows have [yellow]+10/20/30%[fg] chance to deal [yellow]10/20/30%[fg] AoE damage ' ,
[ ' divine_machine_arrow ' ] = ' [fg]ranger arrows have a [yellow]10/20/30%[fg] chance to seek and pierce [yellow]1/2/3[fg] times ' ,
[ ' chronomancy ' ] = ' [fg]mages cast their spells [yellow]15/25/35%[fg] faster ' ,
[ ' awakening ' ] = ' [yellow]+50/75/100%[fg] attack speed and damage to [yellow]1[fg] mage every round for that round ' ,
[ ' divine_punishment ' ] = ' [fg]deal damage to all enemies based on how many mages you have ' ,
[ ' assassination ' ] = ' [fg]crits from rogues deal [yellow]8/10/12x[fg] damage but normal attacks deal [yellow]half[fg] damage ' ,
[ ' flying_daggers ' ] = ' [fg]all projectiles thrown by rogues chain [yellow]+2/3/4[fg] times ' ,
[ ' ultimatum ' ] = ' [fg]projectiles that chain gain [yellow]+10/20/30%[fg] damage with each chain ' ,
[ ' magnify ' ] = ' [yellow]+20/35/50%[fg] area size ' ,
[ ' echo_barrage ' ] = ' [yellow]10/20/30%[fg] chance to create [yellow]1/2/3[fg] secondary AoEs on AoE hit ' ,
[ ' unleash ' ] = ' [fg]all nukers gain [yellow]+1%[fg] area size and damage every second ' ,
2021-06-25 18:25:13 +02:00
[ ' reinforce ' ] = ' [yellow]+10/20/30%[fg] global damage, defense and aspd if you have one or more enchanters ' ,
2021-06-16 07:37:40 +02:00
[ ' payback ' ] = ' [yellow]+2/5/8%[fg] damage to all allies whenever an enchanter is hit ' ,
2021-06-25 18:25:13 +02:00
[ ' enchanted ' ] = ' [yellow]+33/66/99%[fg] attack speed to a random unit if you have two or more enchanters ' ,
2021-06-16 07:37:40 +02:00
[ ' freezing_field ' ] = ' [fg]creates an area that slows enemies by [yellow]50%[fg] for [yellow]2[fg] seconds on sorcerer spell repeat ' ,
[ ' burning_field ' ] = ' [fg]creates an area that deals [yellow]30[fg] dps for [yellow]2[fg] seconds on sorcerer spell repeat ' ,
2021-06-18 07:32:19 +02:00
[ ' gravity_field ' ] = ' [fg]creates an area that pulls enemies in for [yellow]1[fg] seconds on sorcerer spell repeat ' ,
2021-07-04 06:50:31 +02:00
[ ' magnetism ' ] = ' [fg]gold coins and healing orbs are attracted to the snake from a longer range ' ,
2021-06-16 07:37:40 +02:00
[ ' insurance ' ] = " [fg]heroes have [yellow]4[fg] times the chance of mercenary's bonus to drop [yellow]2[fg] gold on death " ,
[ ' dividends ' ] = ' [fg]mercenaries deal [yellow]+X%[fg] damage, where X is how much gold you have ' ,
[ ' berserking ' ] = ' [fg]all warriors have up to [yellow]+50/75/100%[fg] attack speed based on missing HP ' ,
[ ' unwavering_stance ' ] = ' [fg]all warriors gain [yellow]+4/8/12%[fg] defense every [yellow]5[fg] seconds ' ,
[ ' unrelenting_stance ' ] = ' [yellow]+2/5/8%[fg] defense to all allies whenever a warrior is hit ' ,
2021-06-25 06:21:07 +02:00
[ ' blessing ' ] = ' [yellow]+10/20/30%[fg] healing effectiveness ' ,
[ ' haste ' ] = ' [yellow]+50%[fg] movement speed that decays over [yellow]4[fg] seconds on healing orb pick up ' ,
[ ' divine_barrage ' ] = ' [yellow]20/40/60%[fg] chance to release a ricocheting barrage on healing orb pick up ' ,
2021-07-04 06:50:31 +02:00
[ ' orbitism ' ] = ' [yellow]+25/50/75%[fg] psyker orb movement speed ' ,
[ ' psyker_orbs ' ] = ' [yellow]+1/2/4[fg] total psyker orbs ' ,
2021-06-25 06:21:07 +02:00
[ ' psychosense ' ] = ' [yellow]+33/66/99%[fg] orb range ' ,
2021-07-04 06:50:31 +02:00
[ ' psychosink ' ] = ' [fg]psyker orbs deal [yellow]+40/80/120%[fg] damage ' ,
2021-07-03 07:08:35 +02:00
[ ' rearm ' ] = ' [fg]constructs repeat their attacks once ' ,
[ ' taunt ' ] = ' [yellow]10/20/30%[fg] chance for constructs to taunt nearby enemies on attack ' ,
[ ' construct_instability ' ] = ' [fg]constructs explode when disappearing, dealing [yellow]100/150/200%[fg] damage ' ,
[ ' intimidation ' ] = ' [fg]enemies spawn with [yellow]-10/20/30%[fg] max HP ' ,
[ ' vulnerability ' ] = ' [fg]enemies take [yellow]+10/20/30%[fg] damage ' ,
[ ' temporal_chains ' ] = ' [fg]enemies are [yellow]10/20/30%[fg] slower ' ,
[ ' ceremonial_dagger ' ] = ' [fg]killing an enemy fires a homing dagger ' ,
[ ' homing_barrage ' ] = ' [yellow]8/16/24%[fg] chance to release a homing barrage on enemy kill ' ,
[ ' critical_strike ' ] = ' [yellow]5/10/15%[fg] chance for attacks to critically strike, dealing [yellow]2x[fg] damage ' ,
[ ' noxious_strike ' ] = ' [yellow]8/16/24%[fg] chance for attacks to poison, dealing [yellow]20%[fg] dps for [yellow]3[fg] seconds ' ,
[ ' infesting_strike ' ] = ' [yellow]10/20/30%[fg] chance for attacks to spawn [yellow]2[fg] critters on kill ' ,
[ ' kinetic_strike ' ] = ' [yellow]10/20/30%[fg] chance for attacks to push enemies away with high force ' ,
[ ' burning_strike ' ] = ' [yellow]15%[fg] chance for attacks to burn, dealing [yellow]20%[fg] dps for [yellow]3[fg] seconds ' ,
[ ' lucky_strike ' ] = ' [yellow]8%[fg] chance for attacks to cause enemies to drop gold on death ' ,
[ ' healing_strike ' ] = ' [yellow]8%[fg] chance for attacks to spawn a healing orb on kill ' ,
[ ' stunning_strike ' ] = ' [yellow]8/16/24%[fg] chance for attacks to stun for [yellow]2[fg] seconds ' ,
[ ' silencing_strike ' ] = ' [yellow]8/16/24%[fg] chance for attacks to silence for [yellow]2[fg] seconds on hit ' ,
[ ' warping_shots ' ] = ' projectiles ignore wall collisions and warp around the screen [yellow]1/2/3[fg] times ' ,
[ ' culling_strike ' ] = ' [fg]instantly kill elites below [yellow]10/20/30%[fg] max HP ' ,
[ ' lightning_strike ' ] = ' [yellow]5/10/15%[fg] chance for projectiles to create chain lightning, dealing [yellow]60/80/100%[fg] damage ' ,
[ ' psycholeak ' ] = ' [fg]position [yellow]1[fg] generates [yellow]1[fg] psyker orb every [yellow]10[fg] seconds ' ,
[ ' divine_blessing ' ] = ' [fg]generate [yellow]1[fg] healing orb every [yellow]8[fg] seconds ' ,
2021-07-04 06:50:31 +02:00
[ ' hardening ' ] = ' [yellow]+150%[fg] defense to all allies for [yellow]3[fg] seconds after an ally dies ' ,
2021-04-17 05:30:34 +02:00
}
2021-06-16 07:37:40 +02:00
local ts = function ( lvl , a , b , c ) return ' [ ' .. ylb1 ( lvl ) .. ' ] ' .. tostring ( a ) .. ' [light_bg]/[ ' .. ylb2 ( lvl ) .. ' ] ' .. tostring ( b ) .. ' [light_bg]/[ ' .. ylb3 ( lvl ) .. ' ] ' .. tostring ( c ) .. ' [fg] ' end
passive_descriptions_level = {
[ ' centipede ' ] = function ( lvl ) return ts ( lvl , ' +10% ' , ' 20% ' , ' 30% ' ) .. ' movement speed ' end ,
[ ' ouroboros_technique_r ' ] = function ( lvl ) return ' [fg]rotating around yourself to the right releases ' .. ts ( lvl , ' 2 ' , ' 3 ' , ' 4 ' ) .. ' projectiles per second ' end ,
[ ' ouroboros_technique_l ' ] = function ( lvl ) return ' [fg]rotating around yourself to the left grants ' .. ts ( lvl , ' +15% ' , ' 25% ' , ' 35% ' ) .. ' defense to all units ' end ,
[ ' amplify ' ] = function ( lvl ) return ts ( lvl , ' +20% ' , ' 35% ' , ' 50% ' ) .. ' AoE damage ' end ,
[ ' resonance ' ] = function ( lvl ) return ' [fg]all AoE attacks deal ' .. ts ( lvl , ' +3% ' , ' 5% ' , ' 7% ' ) .. ' damage per unit hit ' end ,
[ ' ballista ' ] = function ( lvl ) return ts ( lvl , ' +20% ' , ' 35% ' , ' 50% ' ) .. ' projectile damage ' end ,
[ ' call_of_the_void ' ] = function ( lvl ) return ts ( lvl , ' +30% ' , ' 60% ' , ' 90% ' ) .. ' DoT damage ' end ,
[ ' crucio ' ] = function ( lvl ) return ' [fg]taking damage also shares that across all enemies at ' .. ts ( lvl , ' 20% ' , ' 30% ' , ' 40% ' ) .. ' its value ' end ,
[ ' speed_3 ' ] = function ( lvl ) return ' [fg]position [yellow]3[fg] has [yellow]+50%[fg] attack speed ' end ,
[ ' damage_4 ' ] = function ( lvl ) return ' [fg]position [yellow]4[fg] has [yellow]+30%[fg] damage ' end ,
2021-06-17 07:45:14 +02:00
[ ' shoot_5 ' ] = function ( lvl ) return ' [fg]position [yellow]5[fg] shoots [yellow]3[fg] projectiles per second ' end ,
2021-06-16 07:37:40 +02:00
[ ' death_6 ' ] = function ( lvl ) return ' [fg]position [yellow]6[fg] takes [yellow]10%[fg] of its health as damage every [yellow]3[fg] seconds ' end ,
[ ' lasting_7 ' ] = function ( lvl ) return ' [fg]position [yellow]7[fg] will stay alive for [yellow]10[fg] seconds after dying ' end ,
[ ' defensive_stance ' ] = function ( lvl ) return ' [fg]first and last positions have ' .. ts ( lvl , ' +10% ' , ' 20% ' , ' 30% ' ) .. ' defense ' end ,
[ ' offensive_stance ' ] = function ( lvl ) return ' [fg]first and last positions have ' .. ts ( lvl , ' +10% ' , ' 20% ' , ' 30% ' ) .. ' damage ' end ,
2021-06-17 07:45:14 +02:00
[ ' kinetic_bomb ' ] = function ( lvl ) return ' [fg]when an ally dies it explodes, launching enemies away ' end ,
[ ' porcupine_technique ' ] = function ( lvl ) return ' [fg]when an ally dies it explodes, releasing piercing projectiles ' end ,
2021-06-16 07:37:40 +02:00
[ ' last_stand ' ] = function ( lvl ) return ' [fg]the last unit alive is fully healed and receives a [yellow]+20%[fg] bonus to all stats ' end ,
2021-06-18 07:32:19 +02:00
[ ' seeping ' ] = function ( lvl ) return ' [fg]enemies taking DoT damage have ' .. ts ( lvl , ' -15% ' , ' 25% ' , ' 35% ' ) .. ' defense ' end ,
[ ' deceleration ' ] = function ( lvl ) return ' [fg]enemies taking DoT damage have ' .. ts ( lvl , ' -15% ' , ' 25% ' , ' 35% ' ) .. ' movement speed ' end ,
2021-06-16 07:37:40 +02:00
[ ' annihilation ' ] = function ( lvl ) return ' [fg]when a voider dies deal its DoT damage to all enemies for [yellow]3[fg] seconds ' end ,
2021-06-18 07:32:19 +02:00
[ ' malediction ' ] = function ( lvl ) return ts ( lvl , ' +1 ' , ' 3 ' , ' 5 ' ) .. ' max curse targets to all allied cursers ' end ,
[ ' hextouch ' ] = function ( lvl ) return ' [fg]enemies take ' .. ts ( lvl , ' 10 ' , ' 15 ' , ' 20 ' ) .. ' damage per second for [yellow]3[fg] seconds when cursed ' end ,
2021-06-16 07:37:40 +02:00
[ ' whispers_of_doom ' ] = function ( lvl ) return ' [fg]curses apply doom, deal ' .. ts ( lvl , ' 100 ' , ' 150 ' , ' 200 ' ) .. ' every ' .. ts ( lvl , ' 4 ' , ' 3 ' , ' 2 ' ) .. ' doom instances ' end ,
2021-06-18 07:32:19 +02:00
[ ' tremor ' ] = function ( lvl ) return ' [fg]when enemies hit walls they create an area based to the knockback force ' end ,
2021-06-16 07:37:40 +02:00
[ ' heavy_impact ' ] = function ( lvl ) return ' [fg]when enemies hit walls they take damage based on the knockback force ' end ,
2021-06-18 07:32:19 +02:00
[ ' fracture ' ] = function ( lvl ) return ' [fg]when enemies hit walls they explode into projectiles ' end ,
2021-06-16 07:37:40 +02:00
[ ' meat_shield ' ] = function ( lvl ) return ' [fg]critters [yellow]block[fg] enemy projectiles ' end ,
[ ' hive ' ] = function ( lvl ) return ' [fg]critters have ' .. ts ( lvl , ' +1 ' , ' 2 ' , ' 3 ' ) .. ' HP ' end ,
[ ' baneling_burst ' ] = function ( lvl ) return ' [fg]critters die immediately on contact but also deal ' .. ts ( lvl , ' 50 ' , ' 100 ' , ' 150 ' ) .. ' AoE damage ' end ,
[ ' blunt_arrow ' ] = function ( lvl ) return ' [fg]ranger arrows have ' .. ts ( lvl , ' +10% ' , ' 20% ' , ' 30% ' ) .. ' chance to knockback ' end ,
[ ' explosive_arrow ' ] = function ( lvl ) return ' [fg]ranger arrows have ' .. ts ( lvl , ' +10% ' , ' 20% ' , ' 30% ' ) .. ' chance to deal ' .. ts ( lvl , ' 10% ' , ' 20% ' , ' 30% ' ) .. ' AoE damage ' end ,
[ ' divine_machine_arrow ' ] = function ( lvl ) return ' [fg]ranger arrows have a ' .. ts ( lvl , ' 10% ' , ' 20% ' , ' 30% ' ) .. ' chance to seek and pierce ' .. ts ( lvl , ' 1 ' , ' 2 ' , ' 3 ' ) .. ' times ' end ,
[ ' chronomancy ' ] = function ( lvl ) return ' [fg]mages cast their spells ' .. ts ( lvl , ' 15% ' , ' 25% ' , ' 35% ' ) .. ' faster ' end ,
[ ' awakening ' ] = function ( lvl ) return ts ( lvl , ' +50% ' , ' 75% ' , ' 100% ' ) .. ' attack speed and damage to [yellow]1[fg] mage every round for that round ' end ,
[ ' divine_punishment ' ] = function ( lvl ) return ' [fg]deal damage to all enemies based on how many mages you have ' end ,
[ ' assassination ' ] = function ( lvl ) return ' [fg]crits from rogues deal ' .. ts ( lvl , ' 8x ' , ' 10x ' , ' 12x ' ) .. ' damage but normal attacks deal [yellow]half[fg] damage ' end ,
[ ' flying_daggers ' ] = function ( lvl ) return ' [fg]all projectiles thrown by rogues chain ' .. ts ( lvl , ' +2 ' , ' 3 ' , ' 4 ' ) .. ' times ' end ,
[ ' ultimatum ' ] = function ( lvl ) return ' [fg]projectiles that chain gain ' .. ts ( lvl , ' +10% ' , ' 20% ' , ' 30% ' ) .. ' damage with each chain ' end ,
[ ' magnify ' ] = function ( lvl ) return ts ( lvl , ' +20% ' , ' 35% ' , ' 50% ' ) .. ' area size ' end ,
[ ' echo_barrage ' ] = function ( lvl ) return ts ( lvl , ' 10% ' , ' 20% ' , ' 30% ' ) .. ' chance to create ' .. ts ( lvl , ' 1 ' , ' 2 ' , ' 3 ' ) .. ' secondary AoEs on AoE hit ' end ,
[ ' unleash ' ] = function ( lvl ) return ' [fg]all nukers gain [yellow]+1%[fg] area size and damage every second ' end ,
2021-06-25 18:25:13 +02:00
[ ' reinforce ' ] = function ( lvl ) return ts ( lvl , ' +10% ' , ' 20% ' , ' 30% ' ) .. ' global damage, defense and aspd if you have one or more enchanters ' end ,
2021-06-16 07:37:40 +02:00
[ ' payback ' ] = function ( lvl ) return ts ( lvl , ' +2% ' , ' 5% ' , ' 8% ' ) .. ' damage to all allies whenever an enchanter is hit ' end ,
2021-06-25 18:25:13 +02:00
[ ' enchanted ' ] = function ( lvl ) return ts ( lvl , ' +33% ' , ' 66% ' , ' 99% ' ) .. ' attack speed to a random unit if you have two or more enchanters ' end ,
2021-06-16 07:37:40 +02:00
[ ' freezing_field ' ] = function ( lvl ) return ' [fg]creates an area that slows enemies by [yellow]50%[fg] for [yellow]2[fg] seconds on sorcerer spell repeat ' end ,
[ ' burning_field ' ] = function ( lvl ) return ' [fg]creates an area that deals [yellow]30[fg] dps for [yellow]2[fg] seconds on sorcerer spell repeat ' end ,
2021-06-18 07:32:19 +02:00
[ ' gravity_field ' ] = function ( lvl ) return ' [fg]creates an area that pulls enemies in for [yellow]1[fg] seconds on sorcerer spell repeat ' end ,
2021-07-04 06:50:31 +02:00
[ ' magnetism ' ] = function ( lvl ) return ' [fg]gold coins and healing orbs are attracted to the snake from a longer range ' end ,
2021-06-16 07:37:40 +02:00
[ ' insurance ' ] = function ( lvl ) return " [fg]heroes have [yellow]4[fg] times the chance of mercenary's bonus to drop [yellow]2[fg] gold on death " end ,
[ ' dividends ' ] = function ( lvl ) return ' [fg]mercenaries deal [yellow]+X%[fg] damage, where X is how much gold you have ' end ,
[ ' berserking ' ] = function ( lvl ) return ' [fg]all warriors have up to ' .. ts ( lvl , ' +50% ' , ' 75% ' , ' 100% ' ) .. ' attack speed based on missing HP ' end ,
[ ' unwavering_stance ' ] = function ( lvl ) return ' [fg]all warriors gain ' .. ts ( lvl , ' +4% ' , ' 8% ' , ' 12% ' ) .. ' defense every [yellow]5[fg] seconds ' end ,
[ ' unrelenting_stance ' ] = function ( lvl ) return ts ( lvl , ' +2% ' , ' 5% ' , ' 8% ' ) .. ' defense to all allies whenever a warrior is hit ' end ,
2021-06-25 06:21:07 +02:00
[ ' blessing ' ] = function ( lvl ) return ts ( lvl , ' +10% ' , ' 20% ' , ' 30% ' ) .. ' healing effectiveness ' end ,
[ ' haste ' ] = function ( lvl ) return ' [yellow]+50%[fg] movement speed that decays over [yellow]4[fg] seconds on healing orb pick up ' end ,
[ ' divine_barrage ' ] = function ( lvl ) return ts ( lvl , ' 20% ' , ' 40% ' , ' 60% ' ) .. ' chance to release a ricocheting barrage on healing orb pick up ' end ,
2021-07-04 06:50:31 +02:00
[ ' orbitism ' ] = function ( lvl ) return ts ( lvl , ' +25% ' , ' 50% ' , ' 75% ' ) .. ' psyker orb movement speed ' end ,
2021-07-09 19:26:29 +02:00
[ ' psyker_orbs ' ] = function ( lvl ) return ts ( lvl , ' +1 ' , ' 2 ' , ' 4 ' ) .. ' psyker orbs ' end ,
2021-06-25 06:21:07 +02:00
[ ' psychosense ' ] = function ( lvl ) return ts ( lvl , ' +33% ' , ' 66% ' , ' 99% ' ) .. ' orb range ' end ,
2021-07-04 06:50:31 +02:00
[ ' psychosink ' ] = function ( lvl ) return ' [fg]psyker orbs deal ' .. ts ( lvl , ' +40% ' , ' 80% ' , ' 120% ' ) .. ' damage ' end ,
2021-07-03 07:08:35 +02:00
[ ' rearm ' ] = function ( lvl ) return ' [fg]constructs repeat their attacks once ' end ,
[ ' taunt ' ] = function ( lvl ) return ts ( lvl , ' 10% ' , ' 20% ' , ' 30% ' ) .. ' chance for constructs to taunt nearby enemies on attack ' end ,
[ ' construct_instability ' ] = function ( lvl ) return ' [fg]constructs explode when disappearing, dealing ' .. ts ( lvl , ' 100 ' , ' 150 ' , ' 200% ' ) .. ' damage ' end ,
[ ' intimidation ' ] = function ( lvl ) return ' [fg]enemies spawn with ' .. ts ( lvl , ' -10 ' , ' 20 ' , ' 30% ' ) .. ' max HP ' end ,
[ ' vulnerability ' ] = function ( lvl ) return ' [fg]enemies take ' .. ts ( lvl , ' +10 ' , ' 20 ' , ' 30% ' ) .. ' damage ' end ,
[ ' temporal_chains ' ] = function ( lvl ) return ' [fg]enemies are ' .. ts ( lvl , ' 10 ' , ' 20 ' , ' 30% ' ) .. ' slower ' end ,
[ ' ceremonial_dagger ' ] = function ( lvl ) return ' [fg]killing an enemy fires a homing dagger ' end ,
[ ' homing_barrage ' ] = function ( lvl ) return ts ( lvl , ' 8 ' , ' 16 ' , ' 24% ' ) .. ' chance to release a homing barrage on enemy kill ' end ,
[ ' critical_strike ' ] = function ( lvl ) return ts ( lvl , ' 5 ' , ' 10 ' , ' 15% ' ) .. ' chance for attacks to critically strike, dealing [yellow]2x[fg] damage ' end ,
[ ' noxious_strike ' ] = function ( lvl ) return ts ( lvl , ' 8 ' , ' 16 ' , ' 24% ' ) .. ' chance for attacks to poison, dealing [yellow]20%[fg] dps for [yellow]3[fg] seconds ' end ,
[ ' infesting_strike ' ] = function ( lvl ) return ts ( lvl , ' 10 ' , ' 20 ' , ' 30% ' ) .. ' chance for attacks to spawn [yellow]2[fg] critters on kill ' end ,
[ ' kinetic_strike ' ] = function ( lvl ) return ts ( lvl , ' 10 ' , ' 20 ' , ' 30% ' ) .. ' chance for attacks to push enemies away with high force ' end ,
[ ' burning_strike ' ] = function ( lvl ) return ' [yellow]15%[fg] chance for attacks to burn, dealing [yellow]20%[fg] dps for [yellow]3[fg] seconds ' end ,
[ ' lucky_strike ' ] = function ( lvl ) return ' [yellow]8%[fg] chance for attacks to cause enemies to drop gold on death ' end ,
[ ' healing_strike ' ] = function ( lvl ) return ' [yellow]8%[fg] chance for attacks to spawn a healing orb on kill ' end ,
[ ' stunning_strike ' ] = function ( lvl ) return ts ( lvl , ' 8 ' , ' 16 ' , ' 24% ' ) .. ' chance for attacks to stun for [yellow]2[fg] seconds ' end ,
[ ' silencing_strike ' ] = function ( lvl ) return ts ( lvl , ' 8 ' , ' 16 ' , ' 24% ' ) .. ' chance for attacks to silence for [yellow]2[fg] seconds on hit ' end ,
[ ' warping_shots ' ] = function ( lvl ) return ' projectiles ignore wall collisions and warp around the screen ' .. ts ( lvl , ' 1 ' , ' 2 ' , ' 3 ' ) .. ' times ' end ,
[ ' culling_strike ' ] = function ( lvl ) return ' [fg]instantly kill elites below ' .. ts ( lvl , ' 10 ' , ' 20 ' , ' 30% ' ) .. ' max HP ' end ,
[ ' lightning_strike ' ] = function ( lvl ) return ts ( lvl , ' 5 ' , ' 10 ' , ' 15% ' ) .. ' chance for projectiles to create chain lightning, dealing ' .. ts ( lvl , ' 60 ' , ' 80 ' , ' 100% ' ) .. ' damage ' end ,
[ ' psycholeak ' ] = function ( lvl ) return ' [fg]position [yellow]1[fg] generates [yellow]1[fg] psyker orb every [yellow]10[fg] seconds ' end ,
[ ' divine_blessing ' ] = function ( lvl ) return ' [fg]generate [yellow]1[fg] healing orb every [yellow]8[fg] seconds ' end ,
2021-07-04 06:50:31 +02:00
[ ' hardening ' ] = function ( lvl ) return ' [yellow]+150%[fg] defense to all allies for [yellow]3[fg] seconds after an ally dies ' end ,
2021-04-17 05:30:34 +02:00
}
2021-04-25 06:09:43 +02:00
level_to_tier_weights = {
[ 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 } ,
2021-05-17 10:05:48 +02:00
[ 12 ] = { 40 , 30 , 20 , 10 } ,
[ 13 ] = { 35 , 30 , 25 , 10 } ,
[ 14 ] = { 30 , 30 , 25 , 15 } ,
[ 15 ] = { 25 , 30 , 30 , 15 } ,
[ 16 ] = { 25 , 25 , 30 , 20 } ,
[ 17 ] = { 20 , 25 , 35 , 20 } ,
[ 18 ] = { 15 , 25 , 35 , 25 } ,
[ 19 ] = { 10 , 25 , 40 , 25 } ,
[ 20 ] = { 5 , 25 , 40 , 30 } ,
[ 21 ] = { 0 , 25 , 40 , 35 } ,
[ 22 ] = { 0 , 20 , 40 , 40 } ,
[ 23 ] = { 0 , 20 , 35 , 45 } ,
[ 24 ] = { 0 , 10 , 30 , 60 } ,
[ 25 ] = { 0 , 0 , 0 , 100 } ,
2021-04-25 06:09:43 +02:00
}
level_to_gold_gained = {
2021-06-25 18:25:13 +02:00
[ 1 ] = { 3 , 3 } ,
[ 2 ] = { 3 , 3 } ,
[ 3 ] = { 5 , 6 } ,
[ 4 ] = { 4 , 5 } ,
[ 5 ] = { 5 , 8 } ,
[ 6 ] = { 8 , 10 } ,
2021-06-11 12:43:15 +02:00
[ 7 ] = { 8 , 10 } ,
2021-06-25 18:25:13 +02:00
[ 8 ] = { 12 , 14 } ,
[ 9 ] = { 14 , 18 } ,
2021-06-11 12:43:15 +02:00
[ 10 ] = { 10 , 13 } ,
[ 11 ] = { 12 , 15 } ,
[ 12 ] = { 18 , 20 } ,
[ 13 ] = { 10 , 14 } ,
[ 14 ] = { 12 , 16 } ,
[ 15 ] = { 14 , 18 } ,
2021-05-03 07:04:40 +02:00
[ 16 ] = { 12 , 12 } ,
[ 17 ] = { 12 , 12 } ,
[ 18 ] = { 20 , 24 } ,
2021-04-25 06:09:43 +02:00
[ 19 ] = { 8 , 12 } ,
[ 20 ] = { 10 , 14 } ,
[ 21 ] = { 20 , 28 } ,
2021-05-03 07:04:40 +02:00
[ 22 ] = { 32 , 32 } ,
[ 23 ] = { 36 , 36 } ,
[ 24 ] = { 48 , 48 } ,
2021-04-25 06:09:43 +02:00
[ 25 ] = { 100 , 100 } ,
}
2021-07-01 03:34:48 +02:00
local k = 1
for i = 26 , 5000 do
local n = i % 25
if n == 0 then
n = 25
k = k + 1
end
level_to_gold_gained [ i ] = { level_to_gold_gained [ n ] [ 1 ] * k , level_to_gold_gained [ n ] [ 2 ] * k }
end
2021-04-25 06:09:43 +02:00
level_to_elite_spawn_weights = {
[ 1 ] = { 0 } ,
[ 2 ] = { 4 , 2 } ,
[ 3 ] = { 10 } ,
[ 4 ] = { 4 , 4 } ,
[ 5 ] = { 4 , 3 , 2 } ,
2021-06-05 08:11:23 +02:00
[ 6 ] = { 12 } ,
2021-04-25 06:09:43 +02:00
[ 7 ] = { 5 , 3 , 2 } ,
[ 8 ] = { 6 , 3 , 3 , 3 } ,
2021-06-05 08:11:23 +02:00
[ 9 ] = { 14 } ,
2021-04-25 06:09:43 +02:00
[ 10 ] = { 8 , 4 } ,
[ 11 ] = { 8 , 6 , 2 } ,
2021-06-05 08:11:23 +02:00
[ 12 ] = { 16 } ,
2021-04-25 06:09:43 +02:00
[ 13 ] = { 8 , 8 } ,
[ 14 ] = { 12 , 6 } ,
[ 15 ] = { 18 } ,
[ 16 ] = { 10 , 6 , 4 } ,
[ 17 ] = { 6 , 5 , 4 , 3 } ,
[ 18 ] = { 18 } ,
[ 19 ] = { 10 , 6 } ,
2021-06-25 18:25:13 +02:00
[ 20 ] = { 8 , 6 , 2 } ,
[ 21 ] = { 22 } ,
[ 22 ] = { 10 , 8 , 4 } ,
2021-04-25 06:09:43 +02:00
[ 23 ] = { 20 , 5 , 5 } ,
2021-06-25 18:25:13 +02:00
[ 24 ] = { 30 } ,
2021-04-25 06:09:43 +02:00
[ 25 ] = { 5 , 5 , 5 , 5 , 5 , 5 } ,
}
2021-07-01 03:34:48 +02:00
local k = 1
local l = 0.2
for i = 26 , 5000 do
local n = i % 25
if n == 0 then
n = 25
k = k + 1
l = l * 2
end
local a , b , c , d , e , f = unpack ( level_to_elite_spawn_weights [ n ] )
a = ( a or 0 ) + ( a or 0 ) * l
b = ( b or 0 ) + ( b or 0 ) * l
c = ( c or 0 ) + ( c or 0 ) * l
d = ( d or 0 ) + ( d or 0 ) * l
e = ( e or 0 ) + ( e or 0 ) * l
f = ( f or 0 ) + ( f or 0 ) * l
level_to_elite_spawn_weights [ i ] = { a , b , c , d , e , f }
end
2021-04-25 06:09:43 +02:00
level_to_boss = {
[ 6 ] = ' speed_booster ' ,
[ 12 ] = ' exploder ' ,
[ 18 ] = ' swarmer ' ,
[ 24 ] = ' forcer ' ,
[ 25 ] = ' randomizer ' ,
}
2021-07-04 20:13:19 +02:00
local bosses = { ' speed_booster ' , ' exploder ' , ' swarmer ' , ' forcer ' , ' randomizer ' }
level_to_boss [ 31 ] = ' speed_booster '
level_to_boss [ 37 ] = ' exploder '
level_to_boss [ 43 ] = ' swarmer '
level_to_boss [ 49 ] = ' forcer '
level_to_boss [ 50 ] = ' randomizer '
local i = 31
2021-07-01 03:34:48 +02:00
local k = 1
2021-07-04 20:13:19 +02:00
while i < 5000 do
2021-07-01 03:34:48 +02:00
level_to_boss [ i ] = bosses [ k ]
k = k + 1
2021-07-04 20:13:19 +02:00
if k == 5 then i = i + 1 else i = i + 6 end
if k == 6 then k = 1 end
2021-07-01 03:34:48 +02:00
end
2021-04-25 06:09:43 +02:00
level_to_elite_spawn_types = {
[ 1 ] = { ' speed_booster ' } ,
[ 2 ] = { ' speed_booster ' , ' shooter ' } ,
[ 3 ] = { ' speed_booster ' } ,
[ 4 ] = { ' speed_booster ' , ' exploder ' } ,
[ 5 ] = { ' speed_booster ' , ' exploder ' , ' shooter ' } ,
[ 6 ] = { ' speed_booster ' } ,
[ 7 ] = { ' speed_booster ' , ' exploder ' , ' headbutter ' } ,
[ 8 ] = { ' speed_booster ' , ' exploder ' , ' headbutter ' , ' shooter ' } ,
[ 9 ] = { ' shooter ' } ,
[ 10 ] = { ' exploder ' , ' headbutter ' } ,
[ 11 ] = { ' exploder ' , ' headbutter ' , ' tank ' } ,
[ 12 ] = { ' exploder ' } ,
[ 13 ] = { ' speed_booster ' , ' shooter ' } ,
[ 14 ] = { ' speed_booster ' , ' spawner ' } ,
[ 15 ] = { ' shooter ' } ,
[ 16 ] = { ' speed_booster ' , ' exploder ' , ' spawner ' } ,
[ 17 ] = { ' speed_booster ' , ' exploder ' , ' spawner ' , ' shooter ' } ,
[ 18 ] = { ' spawner ' } ,
[ 19 ] = { ' headbutter ' , ' tank ' } ,
[ 20 ] = { ' speed_booster ' , ' tank ' , ' spawner ' } ,
[ 21 ] = { ' headbutter ' } ,
[ 22 ] = { ' speed_booster ' , ' headbutter ' , ' tank ' } ,
[ 23 ] = { ' headbutter ' , ' tank ' , ' shooter ' } ,
[ 24 ] = { ' tank ' } ,
[ 25 ] = { ' speed_booster ' , ' exploder ' , ' headbutter ' , ' tank ' , ' shooter ' , ' spawner ' } ,
}
2021-07-01 03:34:48 +02:00
for i = 26 , 5000 do
local n = i % 25
if n == 0 then
n = 25
end
level_to_elite_spawn_types [ i ] = level_to_elite_spawn_types [ n ]
end
2021-06-16 07:37:40 +02:00
level_to_shop_odds = {
[ 1 ] = { 70 , 20 , 10 , 0 } ,
[ 2 ] = { 50 , 30 , 15 , 5 } ,
[ 3 ] = { 25 , 45 , 20 , 10 } ,
[ 4 ] = { 10 , 25 , 45 , 20 } ,
[ 5 ] = { 5 , 15 , 30 , 50 } ,
}
2021-06-11 06:44:06 +02:00
get_shop_odds = function ( lvl , tier )
if lvl == 1 then
if tier == 1 then
return 70
elseif tier == 2 then
return 20
elseif tier == 3 then
return 10
elseif tier == 4 then
return 0
end
elseif lvl == 2 then
if tier == 1 then
return 50
elseif tier == 2 then
return 30
elseif tier == 3 then
return 15
elseif tier == 4 then
return 5
end
elseif lvl == 3 then
if tier == 1 then
2021-06-11 12:43:15 +02:00
return 25
2021-06-11 06:44:06 +02:00
elseif tier == 2 then
2021-06-11 12:43:15 +02:00
return 45
2021-06-11 06:44:06 +02:00
elseif tier == 3 then
return 20
elseif tier == 4 then
return 10
end
elseif lvl == 4 then
if tier == 1 then
2021-06-11 12:43:15 +02:00
return 10
2021-06-11 06:44:06 +02:00
elseif tier == 2 then
return 25
elseif tier == 3 then
2021-06-11 12:43:15 +02:00
return 45
2021-06-11 06:44:06 +02:00
elseif tier == 4 then
return 20
end
elseif lvl == 5 then
if tier == 1 then
2021-06-11 12:43:15 +02:00
return 5
2021-06-11 06:44:06 +02:00
elseif tier == 2 then
2021-06-11 12:43:15 +02:00
return 15
2021-06-11 06:44:06 +02:00
elseif tier == 3 then
2021-06-11 12:43:15 +02:00
return 30
2021-06-11 06:44:06 +02:00
elseif tier == 4 then
2021-06-11 12:43:15 +02:00
return 50
2021-06-11 06:44:06 +02:00
end
end
end
2021-06-18 07:32:19 +02:00
unlevellable_items = {
' speed_3 ' , ' damage_4 ' , ' shoot_5 ' , ' death_6 ' , ' lasting_7 ' , ' kinetic_bomb ' , ' porcupine_technique ' , ' last_stand ' , ' annihilation ' ,
' tremor ' , ' heavy_impact ' , ' fracture ' , ' meat_shield ' , ' divine_punishment ' , ' unleash ' , ' freezing_field ' , ' burning_field ' , ' gravity_field ' ,
2021-07-04 06:50:31 +02:00
' magnetism ' , ' insurance ' , ' dividends ' , ' haste ' , ' rearm ' , ' ceremonial_dagger ' , ' burning_strike ' , ' lucky_strike ' , ' healing_strike ' , ' psycholeak ' , ' divine_blessing ' , ' hardening ' ,
2021-06-18 07:32:19 +02:00
}
2021-05-17 10:05:48 +02:00
steam.userStats . requestCurrentStats ( )
2021-04-30 01:38:36 +02:00
new_game_plus = state.new_game_plus or 0
2021-05-21 08:17:31 +02:00
if not state.new_game_plus then state.new_game_plus = new_game_plus end
2021-06-01 04:58:33 +02:00
current_new_game_plus = state.current_new_game_plus or new_game_plus
if not state.current_new_game_plus then state.current_new_game_plus = current_new_game_plus end
2021-07-01 03:34:48 +02:00
max_units = math.clamp ( 7 + current_new_game_plus , 7 , 12 )
2021-03-02 06:27:15 +01:00
2021-06-18 23:36:00 +02:00
main_song_instance = _G [ random : table { ' song1 ' , ' song2 ' , ' song3 ' , ' song4 ' , ' song5 ' } ] : play { volume = 0.5 }
2021-06-23 05:53:37 +02:00
main = Main ( )
2021-06-24 17:09:29 +02:00
2021-06-23 05:53:37 +02:00
main : add ( MainMenu ' mainmenu ' )
main : go_to ( ' mainmenu ' )
2021-05-17 10:05:48 +02:00
2021-06-23 05:53:37 +02:00
--[[
2021-05-03 07:04:40 +02:00
main : add ( BuyScreen ' buy_screen ' )
2021-06-18 23:36:00 +02:00
main : go_to ( ' buy_screen ' , run.level or 1 , run.units or { } , passives , run.shop_level or 1 , run.shop_xp or 0 )
2021-06-08 06:21:35 +02:00
-- main:go_to('buy_screen', 7, run.units or {}, {'unleash'})
2021-06-29 18:27:04 +02:00
] ] --
2021-05-17 10:05:48 +02:00
2021-07-04 06:50:31 +02:00
--[[
2021-06-29 07:08:51 +02:00
gold = 10
run_passive_pool = {
' centipede ' , ' ouroboros_technique_r ' , ' ouroboros_technique_l ' , ' amplify ' , ' resonance ' , ' ballista ' , ' call_of_the_void ' , ' crucio ' , ' speed_3 ' , ' damage_4 ' , ' shoot_5 ' , ' death_6 ' , ' lasting_7 ' ,
' defensive_stance ' , ' offensive_stance ' , ' kinetic_bomb ' , ' porcupine_technique ' , ' last_stand ' , ' seeping ' , ' deceleration ' , ' annihilation ' , ' malediction ' , ' hextouch ' , ' whispers_of_doom ' ,
' tremor ' , ' heavy_impact ' , ' fracture ' , ' meat_shield ' , ' hive ' , ' baneling_burst ' , ' blunt_arrow ' , ' explosive_arrow ' , ' divine_machine_arrow ' , ' chronomancy ' , ' awakening ' , ' divine_punishment ' ,
' assassination ' , ' flying_daggers ' , ' ultimatum ' , ' magnify ' , ' echo_barrage ' , ' unleash ' , ' reinforce ' , ' payback ' , ' enchanted ' , ' freezing_field ' , ' burning_field ' , ' gravity_field ' , ' magnetism ' ,
2021-07-04 06:50:31 +02:00
' insurance ' , ' dividends ' , ' berserking ' , ' unwavering_stance ' , ' unrelenting_stance ' , ' blessing ' , ' haste ' , ' divine_barrage ' , ' orbitism ' , ' psyker_orbs ' , ' psychosink ' , ' rearm ' , ' taunt ' , ' construct_instability ' ,
2021-07-03 07:08:35 +02:00
' intimidation ' , ' vulnerability ' , ' temporal_chains ' , ' ceremonial_dagger ' , ' homing_barrage ' , ' critical_strike ' , ' noxious_strike ' , ' infesting_strike ' , ' burning_strike ' , ' lucky_strike ' , ' healing_strike ' , ' stunning_strike ' ,
2021-07-09 19:26:29 +02:00
' silencing_strike ' , ' culling_strike ' , ' lightning_strike ' , ' psycholeak ' , ' divine_blessing ' , ' hardening ' , ' kinetic_strike ' ,
2021-06-29 07:08:51 +02:00
}
2021-05-17 10:05:48 +02:00
main : add ( Arena ' arena ' )
2021-07-24 23:48:37 +02:00
main : go_to ( ' arena ' , 21 , 0 , {
{ character = ' magician ' , level = 3 } ,
2021-06-29 07:08:51 +02:00
} , {
2021-07-24 23:48:37 +02:00
{ passive = ' awakening ' , level = 3 } ,
2021-06-29 07:08:51 +02:00
} )
2021-07-04 06:50:31 +02:00
] ] --
2021-05-17 10:05:48 +02:00
2021-06-05 08:11:23 +02:00
--[[
main : add ( Media ' media ' )
main : go_to ( ' media ' )
] ] --
2021-05-17 10:05:48 +02:00
trigger : every ( 2 , function ( )
if debugging_memory then
for k , v in pairs ( system.type_count ( ) ) do
print ( k , v )
end
print ( " -- " .. math.round ( tonumber ( collectgarbage ( " count " ) ) / 1024 , 3 ) .. " MB -- " )
print ( )
end
end )
2021-06-05 08:11:23 +02:00
2021-06-08 06:21:35 +02:00
--[[
2021-06-05 08:11:23 +02:00
print ( table.tostring ( love.graphics . getSupported ( ) ) )
2021-06-06 03:43:33 +02:00
print ( love.graphics . getRendererInfo ( ) )
local formats = love.graphics . getImageFormats ( )
for f , s in pairs ( formats ) do print ( f , tostring ( s ) ) end
local canvasformats = love.graphics . getCanvasFormats ( )
for f , s in pairs ( canvasformats ) do print ( f , tostring ( s ) ) end
print ( table.tostring ( love.graphics . getSystemLimits ( ) ) )
print ( table.tostring ( love.graphics . getStats ( ) ) )
2021-06-08 06:21:35 +02:00
] ] --
2021-02-18 05:11:25 +01:00
end
function update ( dt )
main : update ( dt )
2021-05-17 10:05:48 +02:00
--[[
if input.b . pressed then
-- debugging_memory = not debugging_memory
for k , v in pairs ( system.type_count ( ) ) do
print ( k , v )
end
print ( " -- " .. math.round ( tonumber ( collectgarbage ( " count " ) ) / 1024 , 3 ) .. " MB -- " )
print ( )
end
] ] --
2021-03-17 10:30:20 +01:00
2021-06-23 05:53:37 +02:00
--[[
2021-03-29 20:26:10 +02:00
if input.n . pressed then
2021-06-09 06:35:57 +02:00
if main.current . sfx_button then
main.current . sfx_button : action ( )
main.current . sfx_button.selected = false
else
if sfx.volume == 0.5 then
sfx.volume = 0
state.volume_muted = true
elseif sfx.volume == 0 then
sfx.volume = 0.5
state.volume_muted = false
end
2021-03-17 10:30:20 +01:00
end
end
if input.m . pressed then
2021-06-09 06:35:57 +02:00
if main.current . music_button then
main.current . music_button : action ( )
main.current . music_button.selected = false
else
if music.volume == 0.5 then
state.music_muted = true
music.volume = 0
elseif music.volume == 0 then
music.volume = 0.5
state.music_muted = false
end
2021-03-17 10:30:20 +01:00
end
end
2021-06-23 05:53:37 +02:00
] ] --
2021-04-30 01:38:36 +02:00
2021-05-17 19:27:01 +02:00
if input.k . pressed then
2021-05-18 05:38:51 +02:00
if sx > 1 and sy > 1 then
2021-06-23 05:53:37 +02:00
sx , sy = sx - 0.5 , sy - 0.5
2021-05-18 05:38:51 +02:00
love.window . setMode ( 480 * sx , 270 * sy )
state.sx , state.sy = sx , sy
state.fullscreen = false
end
2021-05-17 19:27:01 +02:00
end
if input.l . pressed then
2021-06-23 05:53:37 +02:00
sx , sy = sx + 0.5 , sy + 0.5
2021-05-17 19:27:01 +02:00
love.window . setMode ( 480 * sx , 270 * sy )
state.sx , state.sy = sx , sy
state.fullscreen = false
end
2021-05-18 05:38:51 +02:00
--[[
2021-06-14 06:59:16 +02:00
if input.f11 . pressed then
2021-04-30 01:38:36 +02:00
steam.userStats . resetAllStats ( true )
steam.userStats . storeStats ( )
end
2021-05-18 05:38:51 +02:00
] ] --
2021-02-18 05:11:25 +01:00
end
function draw ( )
shared_draw ( function ( )
main : draw ( )
end )
end
2021-06-23 05:53:37 +02:00
function open_options ( self )
input : set_mouse_visible ( true )
trigger : tween ( 0.25 , _G , { slow_amount = 0 } , math.linear , function ( )
slow_amount = 0
self.paused = true
if self : is ( Arena ) then
self.paused_t1 = Text2 { group = self.ui , x = gw / 2 , y = gh / 2 - 108 , sx = 0.6 , sy = 0.6 , lines = { { text = ' [bg10]<-, a or m1 ->, d or m2 ' , font = fat_font , alignment = ' center ' } } }
self.paused_t2 = Text2 { group = self.ui , x = gw / 2 , y = gh / 2 - 92 , lines = { { text = ' [bg10]turn left turn right ' , font = pixul_font , alignment = ' center ' } } }
end
if self : is ( MainMenu ) then
self.ng_t = Text2 { group = self.ui , x = gw / 2 + 63 , y = gh - 50 , lines = { { text = ' [bg10]current: ' .. current_new_game_plus , font = pixul_font , alignment = ' center ' } } }
end
2021-06-24 17:09:29 +02:00
self.resume_button = Button { group = self.ui , x = gw / 2 , y = gh - 225 , force_update = true , button_text = self : is ( MainMenu ) and ' main menu (esc) ' or ' resume game (esc) ' , fg_color = ' bg10 ' , bg_color = ' bg ' , action = function ( b )
2021-06-23 05:53:37 +02:00
trigger : tween ( 0.25 , _G , { slow_amount = 1 } , math.linear , function ( )
slow_amount = 1
self.paused = false
if self.paused_t1 then self.paused_t1 . dead = true ; self.paused_t1 = nil end
if self.paused_t2 then self.paused_t2 . dead = true ; self.paused_t2 = nil end
if self.ng_t then self.ng_t . dead = true ; self.ng_t = nil end
if self.resume_button then self.resume_button . dead = true ; self.resume_button = nil end
if self.restart_button then self.restart_button . dead = true ; self.restart_button = nil end
if self.mouse_button then self.mouse_button . dead = true ; self.mouse_button = nil end
if self.dark_transition_button then self.dark_transition_button . dead = true ; self.dark_transition_button = nil end
2021-07-18 02:01:49 +02:00
if self.run_timer_button then self.run_timer_button . dead = true ; self.run_timer_button = nil end
2021-06-23 05:53:37 +02:00
if self.sfx_button then self.sfx_button . dead = true ; self.sfx_button = nil end
if self.music_button then self.music_button . dead = true ; self.music_button = nil end
if self.video_button_1 then self.video_button_1 . dead = true ; self.video_button_1 = nil end
if self.video_button_2 then self.video_button_2 . dead = true ; self.video_button_2 = nil end
if self.video_button_3 then self.video_button_3 . dead = true ; self.video_button_3 = nil end
if self.video_button_4 then self.video_button_4 . dead = true ; self.video_button_4 = nil end
if self.quit_button then self.quit_button . dead = true ; self.quit_button = nil end
if self.screen_shake_button then self.screen_shake_button . dead = true ; self.screen_shake_button = nil end
if self.screen_movement_button then self.screen_movement_button . dead = true ; self.screen_movement_button = nil end
if self.cooldown_snake_button then self.cooldown_snake_button . dead = true ; self.cooldown_snake_button = nil end
if self.arrow_snake_button then self.arrow_snake_button . dead = true ; self.arrow_snake_button = nil end
if self.ng_plus_plus_button then self.ng_plus_plus_button . dead = true ; self.ng_plus_plus_button = nil end
if self.ng_plus_minus_button then self.ng_plus_minus_button . dead = true ; self.ng_plus_minus_button = nil end
2021-06-24 17:09:29 +02:00
if self.main_menu_button then self.main_menu_button . dead = true ; self.main_menu_button = nil end
2021-06-23 05:53:37 +02:00
system.save_state ( )
2021-06-24 17:09:29 +02:00
if self : is ( MainMenu ) or self : is ( BuyScreen ) then input : set_mouse_visible ( true )
elseif self : is ( Arena ) then input : set_mouse_visible ( state.mouse_control or false ) end
2021-06-23 05:53:37 +02:00
end , ' pause ' )
end }
if not self : is ( MainMenu ) then
self.restart_button = Button { group = self.ui , x = gw / 2 , y = gh - 200 , force_update = true , button_text = ' restart run (r) ' , fg_color = ' bg10 ' , bg_color = ' bg ' , action = function ( b )
self.transitioning = true
ui_transition2 : play { pitch = random : float ( 0.95 , 1.05 ) , volume = 0.5 }
ui_switch2 : play { pitch = random : float ( 0.95 , 1.05 ) , volume = 0.5 }
ui_switch1 : play { pitch = random : float ( 0.95 , 1.05 ) , volume = 0.5 }
TransitionEffect { group = main.transitions , x = gw / 2 , y = gh / 2 , color = state.dark_transitions and bg [ - 2 ] or fg [ 0 ] , transition_action = function ( )
slow_amount = 1
2021-07-04 23:24:31 +02:00
music_slow_amount = 1
2021-07-18 02:01:49 +02:00
run_time = 0
2021-06-23 05:53:37 +02:00
gold = 3
passives = { }
main_song_instance : stop ( )
run_passive_pool = {
' centipede ' , ' ouroboros_technique_r ' , ' ouroboros_technique_l ' , ' amplify ' , ' resonance ' , ' ballista ' , ' call_of_the_void ' , ' crucio ' , ' speed_3 ' , ' damage_4 ' , ' shoot_5 ' , ' death_6 ' , ' lasting_7 ' ,
' defensive_stance ' , ' offensive_stance ' , ' kinetic_bomb ' , ' porcupine_technique ' , ' last_stand ' , ' seeping ' , ' deceleration ' , ' annihilation ' , ' malediction ' , ' hextouch ' , ' whispers_of_doom ' ,
' tremor ' , ' heavy_impact ' , ' fracture ' , ' meat_shield ' , ' hive ' , ' baneling_burst ' , ' blunt_arrow ' , ' explosive_arrow ' , ' divine_machine_arrow ' , ' chronomancy ' , ' awakening ' , ' divine_punishment ' ,
' assassination ' , ' flying_daggers ' , ' ultimatum ' , ' magnify ' , ' echo_barrage ' , ' unleash ' , ' reinforce ' , ' payback ' , ' enchanted ' , ' freezing_field ' , ' burning_field ' , ' gravity_field ' , ' magnetism ' ,
2021-07-04 06:50:31 +02:00
' insurance ' , ' dividends ' , ' berserking ' , ' unwavering_stance ' , ' unrelenting_stance ' , ' blessing ' , ' haste ' , ' divine_barrage ' , ' orbitism ' , ' psyker_orbs ' , ' psychosink ' , ' rearm ' , ' taunt ' , ' construct_instability ' ,
2021-07-04 23:24:31 +02:00
' intimidation ' , ' vulnerability ' , ' temporal_chains ' , ' ceremonial_dagger ' , ' homing_barrage ' , ' critical_strike ' , ' noxious_strike ' , ' infesting_strike ' , ' burning_strike ' , ' lucky_strike ' , ' healing_strike ' , ' stunning_strike ' ,
2021-07-09 19:26:29 +02:00
' silencing_strike ' , ' culling_strike ' , ' lightning_strike ' , ' psycholeak ' , ' divine_blessing ' , ' hardening ' , ' kinetic_strike ' ,
2021-06-23 05:53:37 +02:00
}
2021-07-09 19:26:29 +02:00
max_units = math.clamp ( 7 + current_new_game_plus , 7 , 12 )
2021-06-23 05:53:37 +02:00
main : add ( BuyScreen ' buy_screen ' )
locked_state = nil
system.save_run ( )
2021-07-04 23:24:31 +02:00
main : go_to ( ' buy_screen ' , 1 , 0 , { } , passives , 1 , 0 )
2021-06-23 05:53:37 +02:00
end , text = Text ( { { text = ' [wavy, ' .. tostring ( state.dark_transitions and ' fg ' or ' bg ' ) .. ' ]restarting... ' , font = pixul_font , alignment = ' center ' } } , global_text_tags ) }
end }
end
2021-07-18 02:01:49 +02:00
self.mouse_button = Button { group = self.ui , x = gw / 2 - 113 , y = gh - 150 , force_update = true , button_text = ' mouse control: ' .. tostring ( state.mouse_control and ' yes ' or ' no ' ) , fg_color = ' bg10 ' , bg_color = ' bg ' ,
2021-06-23 05:53:37 +02:00
action = function ( b )
ui_switch1 : play { pitch = random : float ( 0.95 , 1.05 ) , volume = 0.5 }
state.mouse_control = not state.mouse_control
b : set_text ( ' mouse control: ' .. tostring ( state.mouse_control and ' yes ' or ' no ' ) )
end }
2021-07-18 02:01:49 +02:00
self.dark_transition_button = Button { group = self.ui , x = gw / 2 + 13 , y = gh - 150 , force_update = true , button_text = ' dark transitions: ' .. tostring ( state.dark_transitions and ' yes ' or ' no ' ) ,
2021-06-23 05:53:37 +02:00
fg_color = ' bg10 ' , bg_color = ' bg ' , action = function ( b )
ui_switch1 : play { pitch = random : float ( 0.95 , 1.05 ) , volume = 0.5 }
state.dark_transitions = not state.dark_transitions
b : set_text ( ' dark transitions: ' .. tostring ( state.dark_transitions and ' yes ' or ' no ' ) )
end }
2021-07-18 02:01:49 +02:00
self.run_timer_button = Button { group = self.ui , x = gw / 2 + 121 , y = gh - 150 , force_update = true , button_text = ' run timer: ' .. tostring ( state.run_timer and ' yes ' or ' no ' ) , fg_color = ' bg10 ' , bg_color = ' bg ' ,
action = function ( b )
ui_switch1 : play { pitch = random : float ( 0.95 , 1.05 ) , volume = 0.5 }
state.run_timer = not state.run_timer
b : set_text ( ' run timer: ' .. tostring ( state.run_timer and ' yes ' or ' no ' ) )
end }
2021-06-23 05:53:37 +02:00
self.sfx_button = Button { group = self.ui , x = gw / 2 - 46 , y = gh - 175 , force_update = true , button_text = ' sfx volume: ' .. tostring ( ( state.sfx_volume or 0.5 ) * 10 ) , fg_color = ' bg10 ' , bg_color = ' bg ' ,
action = function ( b )
ui_switch2 : play { pitch = random : float ( 0.95 , 1.05 ) , volume = 0.5 }
b.spring : pull ( 0.2 , 200 , 10 )
b.selected = true
ui_switch1 : play { pitch = random : float ( 0.95 , 1.05 ) , volume = 0.5 }
sfx.volume = sfx.volume + 0.1
2021-07-09 19:26:29 +02:00
if sfx.volume > 1 then sfx.volume = 0 end
2021-07-04 20:13:19 +02:00
state.sfx_volume = sfx.volume
b : set_text ( ' sfx volume: ' .. tostring ( ( state.sfx_volume or 0.5 ) * 10 ) )
end ,
action_2 = function ( b )
ui_switch2 : play { pitch = random : float ( 0.95 , 1.05 ) , volume = 0.5 }
b.spring : pull ( 0.2 , 200 , 10 )
b.selected = true
ui_switch1 : play { pitch = random : float ( 0.95 , 1.05 ) , volume = 0.5 }
sfx.volume = sfx.volume - 0.1
2021-07-09 19:26:29 +02:00
if math.abs ( sfx.volume ) < 0.001 and sfx.volume > 0 then sfx.volume = 0 end
if sfx.volume < 0 then sfx.volume = 1 end
2021-06-23 05:53:37 +02:00
state.sfx_volume = sfx.volume
b : set_text ( ' sfx volume: ' .. tostring ( ( state.sfx_volume or 0.5 ) * 10 ) )
end }
self.music_button = Button { group = self.ui , x = gw / 2 + 48 , y = gh - 175 , force_update = true , button_text = ' music volume: ' .. tostring ( ( state.music_volume or 0.5 ) * 10 ) , fg_color = ' bg10 ' , bg_color = ' bg ' ,
action = function ( b )
ui_switch2 : play { pitch = random : float ( 0.95 , 1.05 ) , volume = 0.5 }
b.spring : pull ( 0.2 , 200 , 10 )
b.selected = true
ui_switch1 : play { pitch = random : float ( 0.95 , 1.05 ) , volume = 0.5 }
music.volume = music.volume + 0.1
2021-07-09 19:26:29 +02:00
if music.volume > 1 then music.volume = 0 end
2021-07-04 20:13:19 +02:00
state.music_volume = music.volume
b : set_text ( ' music volume: ' .. tostring ( ( state.music_volume or 0.5 ) * 10 ) )
end ,
action_2 = function ( b )
ui_switch2 : play { pitch = random : float ( 0.95 , 1.05 ) , volume = 0.5 }
b.spring : pull ( 0.2 , 200 , 10 )
b.selected = true
ui_switch1 : play { pitch = random : float ( 0.95 , 1.05 ) , volume = 0.5 }
music.volume = music.volume - 0.1
2021-07-09 19:26:29 +02:00
if math.abs ( music.volume ) < 0.001 and music.volume > 0 then music.volume = 0 end
if music.volume < 0 then music.volume = 1 end
2021-06-23 05:53:37 +02:00
state.music_volume = music.volume
b : set_text ( ' music volume: ' .. tostring ( ( state.music_volume or 0.5 ) * 10 ) )
end }
self.video_button_1 = Button { group = self.ui , x = gw / 2 - 136 , y = gh - 125 , force_update = true , button_text = ' window size- ' , fg_color = ' bg10 ' , bg_color = ' bg ' , action = function ( )
if sx > 1 and sy > 1 then
ui_switch1 : play { pitch = random : float ( 0.95 , 1.05 ) , volume = 0.5 }
sx , sy = sx - 0.5 , sy - 0.5
love.window . setMode ( 480 * sx , 270 * sy )
state.sx , state.sy = sx , sy
state.fullscreen = false
end
end }
self.video_button_2 = Button { group = self.ui , x = gw / 2 - 50 , y = gh - 125 , force_update = true , button_text = ' window size+ ' , fg_color = ' bg10 ' , bg_color = ' bg ' , action = function ( )
ui_switch1 : play { pitch = random : float ( 0.95 , 1.05 ) , volume = 0.5 }
sx , sy = sx + 0.5 , sy + 0.5
love.window . setMode ( 480 * sx , 270 * sy )
state.sx , state.sy = sx , sy
state.fullscreen = false
end }
self.video_button_3 = Button { group = self.ui , x = gw / 2 + 29 , y = gh - 125 , force_update = true , button_text = ' fullscreen ' , fg_color = ' bg10 ' , bg_color = ' bg ' , action = function ( )
ui_switch1 : play { pitch = random : float ( 0.95 , 1.05 ) , volume = 0.5 }
local _ , _ , flags = love.window . getMode ( )
local window_width , window_height = love.window . getDesktopDimensions ( flags.display )
sx , sy = window_width / 480 , window_height / 270
state.sx , state.sy = sx , sy
ww , wh = window_width , window_height
love.window . setMode ( window_width , window_height )
end }
self.video_button_4 = Button { group = self.ui , x = gw / 2 + 129 , y = gh - 125 , force_update = true , button_text = ' reset video settings ' , fg_color = ' bg10 ' , bg_color = ' bg ' , action = function ( )
local _ , _ , flags = love.window . getMode ( )
local window_width , window_height = love.window . getDesktopDimensions ( flags.display )
sx , sy = window_width / 480 , window_height / 270
ww , wh = window_width , window_height
state.sx , state.sy = sx , sy
state.fullscreen = false
ww , wh = window_width , window_height
love.window . setMode ( window_width , window_height )
end }
self.screen_shake_button = Button { group = self.ui , x = gw / 2 - 57 , y = gh - 100 , w = 110 , force_update = true , button_text = ' [bg10]screen shake: ' .. tostring ( state.no_screen_shake and ' no ' or ' yes ' ) ,
fg_color = ' bg10 ' , bg_color = ' bg ' , action = function ( b )
ui_switch1 : play { pitch = random : float ( 0.95 , 1.05 ) , volume = 0.5 }
state.no_screen_shake = not state.no_screen_shake
b : set_text ( ' screen shake: ' .. tostring ( state.no_screen_shake and ' no ' or ' yes ' ) )
end }
self.cooldown_snake_button = Button { group = self.ui , x = gw / 2 + 75 , y = gh - 100 , w = 145 , force_update = true , button_text = ' [bg10]cooldowns on snake: ' .. tostring ( state.cooldown_snake and ' yes ' or ' no ' ) ,
fg_color = ' bg10 ' , bg_color = ' bg ' , action = function ( b )
ui_switch1 : play { pitch = random : float ( 0.95 , 1.05 ) , volume = 0.5 }
state.cooldown_snake = not state.cooldown_snake
b : set_text ( ' cooldowns on snake: ' .. tostring ( state.cooldown_snake and ' yes ' or ' no ' ) )
end }
self.arrow_snake_button = Button { group = self.ui , x = gw / 2 + 65 , y = gh - 75 , w = 125 , force_update = true , button_text = ' [bg10]arrow on snake: ' .. tostring ( state.arrow_snake and ' yes ' or ' no ' ) ,
fg_color = ' bg10 ' , bg_color = ' bg ' , action = function ( b )
ui_switch1 : play { pitch = random : float ( 0.95 , 1.05 ) , volume = 0.5 }
state.arrow_snake = not state.arrow_snake
b : set_text ( ' arrow on snake: ' .. tostring ( state.arrow_snake and ' yes ' or ' no ' ) )
end }
self.screen_movement_button = Button { group = self.ui , x = gw / 2 - 69 , y = gh - 75 , w = 135 , force_update = true , button_text = ' [bg10]screen movement: ' .. tostring ( state.no_screen_movement and ' no ' or ' yes ' ) ,
fg_color = ' bg10 ' , bg_color = ' bg ' , action = function ( b )
ui_switch1 : play { pitch = random : float ( 0.95 , 1.05 ) , volume = 0.5 }
state.no_screen_movement = not state.no_screen_movement
if state.no_screen_movement then
camera.x , camera.y = gw / 2 , gh / 2
camera.r = 0
end
b : set_text ( ' screen movement: ' .. tostring ( state.no_screen_movement and ' no ' or ' yes ' ) )
end }
if self : is ( MainMenu ) then
self.ng_plus_minus_button = Button { group = self.ui , x = gw / 2 - 58 , y = gh - 50 , force_update = true , button_text = ' NG+ down ' , fg_color = ' bg10 ' , bg_color = ' bg ' , action = function ( b )
ui_switch1 : play { pitch = random : float ( 0.95 , 1.05 ) , volume = 0.5 }
b.spring : pull ( 0.2 , 200 , 10 )
b.selected = true
current_new_game_plus = math.clamp ( current_new_game_plus - 1 , 0 , 5 )
state.current_new_game_plus = current_new_game_plus
self.ng_t . text : set_text ( { { text = ' [bg10]current: ' .. current_new_game_plus , font = pixul_font , alignment = ' center ' } } )
2021-06-29 07:08:51 +02:00
max_units = 7 + current_new_game_plus
2021-07-01 03:34:48 +02:00
system.save_run ( )
2021-06-23 05:53:37 +02:00
end }
self.ng_plus_plus_button = Button { group = self.ui , x = gw / 2 + 5 , y = gh - 50 , force_update = true , button_text = ' NG+ up ' , fg_color = ' bg10 ' , bg_color = ' bg ' , action = function ( b )
ui_switch1 : play { pitch = random : float ( 0.95 , 1.05 ) , volume = 0.5 }
b.spring : pull ( 0.2 , 200 , 10 )
b.selected = true
current_new_game_plus = math.clamp ( current_new_game_plus + 1 , 0 , new_game_plus )
state.current_new_game_plus = current_new_game_plus
self.ng_t . text : set_text ( { { text = ' [bg10]current: ' .. current_new_game_plus , font = pixul_font , alignment = ' center ' } } )
2021-06-29 07:08:51 +02:00
max_units = 7 + current_new_game_plus
2021-07-01 03:34:48 +02:00
system.save_run ( )
2021-06-23 05:53:37 +02:00
end }
end
if not self : is ( MainMenu ) then
self.main_menu_button = Button { group = self.ui , x = gw / 2 , y = gh - 50 , force_update = true , button_text = ' main menu ' , fg_color = ' bg10 ' , bg_color = ' bg ' , action = function ( b )
self.transitioning = true
ui_transition2 : play { pitch = random : float ( 0.95 , 1.05 ) , volume = 0.5 }
ui_switch2 : play { pitch = random : float ( 0.95 , 1.05 ) , volume = 0.5 }
ui_switch1 : play { pitch = random : float ( 0.95 , 1.05 ) , volume = 0.5 }
TransitionEffect { group = main.transitions , x = gw / 2 , y = gh / 2 , color = state.dark_transitions and bg [ - 2 ] or fg [ 0 ] , transition_action = function ( )
main : add ( MainMenu ' main_menu ' )
main : go_to ( ' main_menu ' )
end , text = Text ( { { text = ' [wavy, ' .. tostring ( state.dark_transitions and ' fg ' or ' bg ' ) .. ' ].. ' , font = pixul_font , alignment = ' center ' } } , global_text_tags ) }
end }
end
self.quit_button = Button { group = self.ui , x = gw / 2 , y = gh - 25 , force_update = true , button_text = ' quit ' , fg_color = ' bg10 ' , bg_color = ' bg ' , action = function ( )
system.save_state ( )
steam.shutdown ( )
love.event . quit ( )
end }
end , ' pause ' )
end
function close_options ( self )
trigger : tween ( 0.25 , _G , { slow_amount = 1 } , math.linear , function ( )
slow_amount = 1
self.paused = false
if self.paused_t1 then self.paused_t1 . dead = true ; self.paused_t1 = nil end
if self.paused_t2 then self.paused_t2 . dead = true ; self.paused_t2 = nil end
if self.ng_t then self.ng_t . dead = true ; self.ng_t = nil end
if self.resume_button then self.resume_button . dead = true ; self.resume_button = nil end
if self.restart_button then self.restart_button . dead = true ; self.restart_button = nil end
if self.mouse_button then self.mouse_button . dead = true ; self.mouse_button = nil end
if self.dark_transition_button then self.dark_transition_button . dead = true ; self.dark_transition_button = nil end
2021-07-18 02:01:49 +02:00
if self.run_timer_button then self.run_timer_button . dead = true ; self.run_timer_button = nil end
2021-06-23 05:53:37 +02:00
if self.sfx_button then self.sfx_button . dead = true ; self.sfx_button = nil end
if self.music_button then self.music_button . dead = true ; self.music_button = nil end
if self.video_button_1 then self.video_button_1 . dead = true ; self.video_button_1 = nil end
if self.video_button_2 then self.video_button_2 . dead = true ; self.video_button_2 = nil end
if self.video_button_3 then self.video_button_3 . dead = true ; self.video_button_3 = nil end
if self.video_button_4 then self.video_button_4 . dead = true ; self.video_button_4 = nil end
if self.screen_shake_button then self.screen_shake_button . dead = true ; self.screen_shake_button = nil end
if self.screen_movement_button then self.screen_movement_button . dead = true ; self.screen_movement_button = nil end
if self.cooldown_snake_button then self.cooldown_snake_button . dead = true ; self.cooldown_snake_button = nil end
if self.arrow_snake_button then self.arrow_snake_button . dead = true ; self.arrow_snake_button = nil end
if self.quit_button then self.quit_button . dead = true ; self.quit_button = nil end
if self.ng_plus_plus_button then self.ng_plus_plus_button . dead = true ; self.ng_plus_plus_button = nil end
if self.ng_plus_minus_button then self.ng_plus_minus_button . dead = true ; self.ng_plus_minus_button = nil end
if self.main_menu_button then self.main_menu_button . dead = true ; self.main_menu_button = nil end
system.save_state ( )
2021-06-24 17:09:29 +02:00
if self : is ( MainMenu ) or self : is ( BuyScreen ) then input : set_mouse_visible ( true )
elseif self : is ( Arena ) then input : set_mouse_visible ( state.mouse_control or false ) end
2021-06-23 05:53:37 +02:00
end , ' pause ' )
end
2021-02-18 05:11:25 +01:00
function love . run ( )
return engine_run ( {
2021-03-29 20:26:10 +02:00
game_name = ' SNKRX ' ,
2021-06-23 05:53:37 +02:00
window_width = ' max ' ,
window_height = ' max ' ,
2021-02-18 05:11:25 +01:00
} )
end