Day 58-59

master
a327ex 2021-04-17 00:30:34 -03:00
parent ef194d5476
commit ebda6cd5f0
49 changed files with 387 additions and 57 deletions

View File

@ -249,6 +249,8 @@ function Arena:on_enter(from, level, units)
self.healer_level = class_levels.healer
self.psyker_level = class_levels.psyker
self.conjurer_level = class_levels.conjurer
self.can_quit = true
end
@ -326,9 +328,6 @@ function Arena:update(dt)
self:update_game_object(dt*slow_amount)
-- cascade_instance.pitch = math.clamp(slow_amount*self.main_slow_amount, 0.05, 1)
if self.enchanter_level == 1 then self.enchanter_dmg_m = 1.25
else self.enchanter_dmg_m = 1 end
self.floor:update(dt*slow_amount)
self.main:update(dt*slow_amount*self.main_slow_amount)
self.post_main:update(dt*slow_amount)
@ -360,39 +359,56 @@ function Arena:update(dt)
else
if not self.arena_clear_text then self.arena_clear_text = Text2{group = self.ui, x = gw/2, y = gh/2 - 48, lines = {{text = '[wavy_mid, cbyc]arena clear!', font = fat_font, alignment = 'center'}}} end
self.t:after(3, function()
ui_transition2:play{pitch = random:float(0.95, 1.05), volume = 0.5}
TransitionEffect{group = main.transitions, x = self.player.x, y = self.player.y, color = self.color, transition_action = function(t)
main:add(BuyScreen'buy_screen')
main:go_to('buy_screen', self.level, self.units)
t.t:after(0.1, function()
t.text:set_text({
{text = '[nudge_down, bg]gold gained: ' .. tostring(gold_gained), font = pixul_font, alignment = 'center', height_multiplier = 1.5},
{text = '[wavy_lower, bg]damage taken: 0', font = pixul_font, alignment = 'center', height_multiplier = 1.5},
{text = '[wavy_lower, bg]damage dealt: 0', font = pixul_font, alignment = 'center'}
})
_G[random:table{'coins1', 'coins2', 'coins3'}]:play{pitch = random:float(0.95, 1.05), volume = 0.5}
t.t:after(0.2, function()
if self.level % 3 == 0 then
self.arena_clear_text.dead = true
trigger:tween(1, _G, {slow_amount = 0}, math.linear, function() slow_amount = 0 end)
trigger:tween(4, camera, {x = gw/2, y = gh/2, r = 0}, math.linear, function() camera.x, camera.y, camera.r = gw/2, gh/2, 0 end)
local card_w, card_h = 100, 100
local w = 3*card_w + 2*20
self.choosing_passives = true
self.cards = {}
local passive_1 = random:table(tier_to_passives[random:weighted_pick(unpack(level_to_passive_tier_weights[level or self.level]))])
local passive_2 = random:table(tier_to_passives[random:weighted_pick(unpack(level_to_passive_tier_weights[level or self.level]))])
local passive_3 = random:table(tier_to_passives[random:weighted_pick(unpack(level_to_passive_tier_weights[level or self.level]))])
table.insert(self.cards, PassiveCard{group = main.current.ui, x = gw/2 - w/2 + 0*(card_w + 20) + card_w/2, y = gh/2, w = card_w, h = card_h, arena = self, passive = passive_1, force_update = true})
table.insert(self.cards, PassiveCard{group = main.current.ui, x = gw/2 - w/2 + 1*(card_w + 20) + card_w/2, y = gh/2, w = card_w, h = card_h, arena = self, passive = passive_2, force_update = true})
table.insert(self.cards, PassiveCard{group = main.current.ui, x = gw/2 - w/2 + 2*(card_w + 20) + card_w/2, y = gh/2, w = card_w, h = card_h, arena = self, passive = passive_3, force_update = true})
self.passive_text = Text2{group = self.ui, x = gw/2, y = gh/2 - 65, lines = {{text = '[fg, wavy]choose one', font = fat_font, alignment = 'center'}}}
else
ui_transition2:play{pitch = random:float(0.95, 1.05), volume = 0.5}
TransitionEffect{group = main.transitions, x = self.player.x, y = self.player.y, color = self.color, transition_action = function(t)
main:add(BuyScreen'buy_screen')
main:go_to('buy_screen', self.level, self.units)
t.t:after(0.1, function()
t.text:set_text({
{text = '[wavy_lower, bg]gold gained: ' .. tostring(gold_gained), font = pixul_font, alignment = 'center', height_multiplier = 1.5},
{text = '[nudge_down, bg]damage taken: ' .. tostring(math.round(self.damage_taken, 0)), font = pixul_font, alignment = 'center', height_multiplier = 1.5},
{text = '[nudge_down, bg]gold gained: ' .. tostring(gold_gained), font = pixul_font, alignment = 'center', height_multiplier = 1.5},
{text = '[wavy_lower, bg]damage taken: 0', font = pixul_font, alignment = 'center', height_multiplier = 1.5},
{text = '[wavy_lower, bg]damage dealt: 0', font = pixul_font, alignment = 'center'}
})
_G[random:table{'coins1', 'coins2', 'coins3'}]:play{pitch = random:float(0.95, 1.05), volume = 0.5}
t.t:after(0.2, function()
t.text:set_text({
{text = '[wavy_lower, bg]gold gained: ' .. tostring(gold_gained), font = pixul_font, alignment = 'center', height_multiplier = 1.5},
{text = '[wavy_lower, bg]damage taken: ' .. tostring(math.round(self.damage_taken, 0)), font = pixul_font, alignment = 'center', height_multiplier = 1.5},
{text = '[nudge_down, bg]damage dealt: ' .. tostring(math.round(self.damage_dealt, 0)), font = pixul_font, alignment = 'center'}
{text = '[nudge_down, bg]damage taken: ' .. tostring(math.round(self.damage_taken, 0)), font = pixul_font, alignment = 'center', height_multiplier = 1.5},
{text = '[wavy_lower, bg]damage dealt: 0', font = pixul_font, alignment = 'center'}
})
_G[random:table{'coins1', 'coins2', 'coins3'}]:play{pitch = random:float(0.95, 1.05), volume = 0.5}
t.t:after(0.2, function()
t.text:set_text({
{text = '[wavy_lower, bg]gold gained: ' .. tostring(gold_gained), font = pixul_font, alignment = 'center', height_multiplier = 1.5},
{text = '[wavy_lower, bg]damage taken: ' .. tostring(math.round(self.damage_taken, 0)), font = pixul_font, alignment = 'center', height_multiplier = 1.5},
{text = '[nudge_down, bg]damage dealt: ' .. tostring(math.round(self.damage_dealt, 0)), font = pixul_font, alignment = 'center'}
})
_G[random:table{'coins1', 'coins2', 'coins3'}]:play{pitch = random:float(0.95, 1.05), volume = 0.5}
end)
end)
end)
end)
end, text = Text({
{text = '[wavy_lower, bg]gold gained: 0', font = pixul_font, alignment = 'center', height_multiplier = 1.5},
{text = '[wavy_lower, bg]damage taken: 0', font = pixul_font, alignment = 'center', height_multiplier = 1.5},
{text = '[wavy_lower, bg]damage dealt: 0', font = pixul_font, alignment = 'center'}
}, global_text_tags)}
end, text = Text({
{text = '[wavy_lower, bg]gold gained: 0', font = pixul_font, alignment = 'center', height_multiplier = 1.5},
{text = '[wavy_lower, bg]damage taken: 0', font = pixul_font, alignment = 'center', height_multiplier = 1.5},
{text = '[wavy_lower, bg]damage dealt: 0', font = pixul_font, alignment = 'center'}
}, global_text_tags)}
end
end, 'transition')
end
end
@ -405,10 +421,11 @@ function Arena:draw()
self.post_main:draw()
self.effects:draw()
if self.level == 18 and self.trailer then graphics.rectangle(gw/2, gh/2, 2*gw, 2*gh, nil, nil, modal_transparent) end
if self.choosing_passives then graphics.rectangle(gw/2, gh/2, 2*gw, 2*gh, nil, nil, modal_transparent) end
self.ui:draw()
camera:attach()
if self.start_time and self.start_time > 0 then
if self.start_time and self.start_time > 0 and not self.choosing_passives then
graphics.push(gw/2, gh/2 - 48, 0, self.hfx.condition1.x, self.hfx.condition1.x)
graphics.print_centered(tostring(self.start_time), fat_font, gw/2, gh/2 - 48, 0, 1, 1, nil, nil, self.hfx.condition1.f and fg[0] or red[0])
graphics.pop()
@ -568,3 +585,23 @@ function Arena:spawn_n_enemies(p, j, n)
end}
end, n, nil, 'spawn_enemies_' .. j)
end
Passives = Object:extend()
Passives:implement(GameObject)
function Passives:init(args)
self:init_game_object(args)
end
function Passives:update(dt)
self:update_game_object(dt)
end
function Passives:draw()
end

Binary file not shown.

After

Width:  |  Height:  |  Size: 400 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 405 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 278 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 355 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 440 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 463 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 451 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 245 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 324 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 298 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 362 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 369 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 417 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 448 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 356 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 326 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 335 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 351 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 241 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 436 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 322 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 369 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 276 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 338 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 391 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 388 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 401 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 279 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 379 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 414 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 335 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 343 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 325 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 372 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 356 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 431 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 337 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 425 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 345 B

View File

@ -484,6 +484,51 @@ end
PassiveCard = Object:extend()
PassiveCard:implement(GameObject)
function PassiveCard:init(args)
self:init_game_object(args)
self.shape = Rectangle(self.x, self.y, self.w, self.h)
self.interact_with_mouse = true
self.passive_name = Text({{text = '[fg, wavy_mid]' .. passive_names[self.passive], font = pixul_font, alignment = 'center'}}, global_text_tags)
self.passive_description = passive_descriptions[self.passive]
end
function PassiveCard:update(dt)
self:update_game_object(dt)
self.passive_name:update(dt)
print(dt)
end
function PassiveCard:draw()
graphics.push(self.x, self.y, 0, self.sx*self.spring.x, self.sy*self.spring.x)
self.passive_name:draw(self.x, self.y - 20)
_G[self.passive]:draw(self.x, self.y + 24, 0, 1, 1, 0, 0, fg[0])
graphics.pop()
end
function PassiveCard:on_mouse_enter()
ui_hover1:play{pitch = random:float(1.3, 1.5), volume = 0.5}
self.spring:pull(0.2, 200, 10)
self.info_text = InfoText{group = main.current.ui, force_update = true}
self.info_text:activate({
{text = self.passive_description, font = pixul_font, alignment = 'center', height_multiplier = 1.25},
}, nil, nil, nil, nil, 16, 4, nil, 2)
self.info_text.x, self.info_text.y = gw/2, gh/2 + gh/4 + 12
end
function PassiveCard:on_mouse_exit()
self.info_text:deactivate()
self.info_text.dead = true
self.info_text = nil
end
ShopCard = Object:extend()
ShopCard:implement(GameObject)
function ShopCard:init(args)

View File

@ -959,3 +959,8 @@ Finished remaining 5 characters and revised all class bonuses. So 40/40 characte
| Forcer | yellow | 2/4 | 5 | +25/50% knockback force to all allies |
| Swarmer | orange | 2/4 | 4 | +1/3 health to critters |
| Voider | purple | 2/4 | 5 | +15/25% DoT to allied voiders |
# Day 58-59 - 15-16/04/21
Had to ideaguy all 40 passives. Managed to do it and also get the passive selection screen working partly. Tomorrow I should finish it and start working through the 40 passives, which should go significantly faster
than the characters since I made sure to pick types of passives that were already implemented one way or another in the game.

View File

@ -51,7 +51,13 @@ end
function Group:update(dt)
self.t:update(dt)
for _, object in ipairs(self.objects) do object:update(dt) end
for _, object in ipairs(self.objects) do
if object.force_update then
object:update(1/refresh_rate)
else
object:update(dt)
end
end
if self.world then self.world:update(dt) end
self.cells = {}

267
main.lua
View File

@ -114,6 +114,48 @@ function init()
forcer = Image('forcer')
swarmer = Image('swarmer')
voider = Image('voider')
ouroboros_technique_r = Image('ouroboros_technique_r')
ouroboros_technique_l = Image('ouroboros_technique_l')
wall_echo = Image('wall_echo')
wall_rider = Image('wall_rider')
centipede = Image('centipede')
intimidation = Image('intimidation')
vulnerability = Image('vulnerability')
temporal_chains = Image('temporal_chains')
amplify = Image('amplify')
amplify_x = Image('amplify_x')
resonance = Image('resonance')
ballista = Image('ballista')
ballista_x = Image('ballista_x')
point_blank = Image('point_blank')
longshot = Image('longshot')
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')
berserking = Image('berserking')
unwavering_stance = Image('unwavering_stance')
ultimatum = Image('ultimatum')
flying_daggers = Image('flying_daggers')
assassination = Image('assassination')
magnify = Image('magnify')
concentrated_fire = Image('concentrated_fire')
unleash = Image('unleash')
reinforce = Image('reinforce')
payback = Image('payback')
blessing = Image('blessing')
hex_master = Image('hex_master')
whispers_of_doom = Image('whispers_of_doom')
force_push = Image('force_push')
heavy_impact = Image('heavy_impact')
crucio = Image('crucio')
immolation = Image('immolation')
call_of_the_void = Image('call_of_the_void')
spawning_pool = Image('spawning_pool')
hive = Image('hive')
void_rift = Image('void_rift')
class_colors = {
['warrior'] = yellow[0],
@ -147,6 +189,50 @@ function init()
['voider'] = 'purple',
}
character_names = {
['vagrant'] = 'Vagrant',
['swordsman'] = 'Swordsman',
['wizard'] = 'Wizard',
['archer'] = 'Archer',
['scout'] = 'Scout',
['cleric'] = 'Cleric',
['outlaw'] = 'Outlaw',
['blade'] = 'Blade',
['elementor'] = 'Elementor',
['saboteur'] = 'Saboteur',
['stormweaver'] = 'Stormweaver',
['sage'] = 'Sage',
['squire'] = 'Squire',
['cannoneer'] = 'Cannoneer',
['dual_gunner'] = 'Dual Gunner',
['hunter'] = 'Hunter',
['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',
['bard'] = 'Bard',
['assassin'] = 'Assassin',
['host'] = 'Host',
['carver'] = 'Carver',
['bane'] = 'Bane',
['psykino'] = 'Psykino',
['barrager'] = 'Barrager',
['highlander'] = 'Highlander',
['fairy'] = 'Fairy',
['priest'] = 'Priest',
['infestor'] = 'Infestor',
['flagellant'] = 'Flagellant',
}
character_colors = {
['vagrant'] = fg[0],
['swordsman'] = yellow[0],
@ -800,32 +886,183 @@ function init()
[6] = 'speed_booster',
[12] = 'exploder',
[18] = 'swarmer',
[24] = 'bouncer',
[24] = 'forcer',
[25] = 'randomizer',
}
passive_names = {
['ouroboros_technique_r'] = 'Ouroboros Technique R',
['ouroboros_technique_l'] = 'Ouroboros Technique L',
['wall_echo'] = 'Wall Echo',
['wall_rider'] = 'Wall Rider',
['centipede'] = 'Centipede',
['intimidation'] = 'Intimidation',
['vulnerability'] = 'Vulnerability',
['temporal_chains'] = 'Temporal Chains',
['amplify'] = 'Amplify',
['amplify_x'] = 'Amplify X',
['resonance'] = 'Resonance',
['ballista'] = 'Ballista',
['ballista_x'] = 'Ballista X',
['point_blank'] = 'Point Blank',
['longshot'] = 'Longshot',
['blunt_arrow'] = 'Blunt Arrow',
['explosive_arrow'] = 'Explosive Arrow',
['divine_machine_arrow'] = 'Divine Machine Arrow',
['chronomancy'] = 'Chronomancy',
['awakening'] = 'Awakening',
['divine_punishment'] = 'Divine Punishment',
['berserking'] = 'Berserking',
['unwavering_stance'] = 'Unwavering Stance',
['ultimatum'] = 'Ultimatum',
['flying_daggers'] = 'Flying Daggers',
['assassination'] = 'Assassination',
['magnify'] = 'Magnify',
['concentrated_fire'] = 'Concentrated Fire',
['unleash'] = 'Unleash',
['reinforce'] = 'Reinforce',
['payback'] = 'Payback',
['blessing'] = 'Blessing',
['hex_master'] = 'Hex Master',
['whispers_of_doom'] = 'Whispers of Doom',
['force_push'] = 'Force Push',
['heavy_impact'] = 'Heavy Impact',
['crucio'] = 'Crucio',
['immolation'] = 'Immolation',
['call_of_the_void'] = 'Call of the Void',
['spawning_pool'] = 'Spawning Pool',
['hive'] = 'Hive',
['void_rift'] = 'Void Rift',
}
passive_descriptions = {
['ouroboros_technique_r'] = '[fg]rotating around yourself to the right makes every unit periodically release projectiles',
['ouroboros_technique_l'] = '[fg]rotating around yourself to the left grants +25% defense to all units',
['wall_echo'] = '[fg]hitting walls has a [yellow]25%[fg] chance of releasing [yellow]2[fg] projectiles',
['wall_rider'] = '[fg]hitting walls grants a [yellow]25%[fg] movement speed buff to your snake for [yellow]1[fg] second',
['centipede'] = '[yellow]+20%[fg] movement speed',
['intimidation'] = '[fg]enemies spawn with [yellow]-20%[fg] max HP',
['vulnerability'] = '[fg]all enemies take [yellow]+20%[fg] damage',
['temporal_chains'] = '[fg]all enemies move [yellow]20%[fg] slower',
['amplify'] = '[fg]all units that deal AoE damage gain [yellow]+25%[fg] AoE damage',
['amplify_x'] = '[yellow]+25%[fg] AoE damage if all your units only deal AoE damage',
['resonance'] = '[fg]all AoE attacks deal [yellow]+5%[fg] damage per unit hit',
['ballista'] = "[fg]all units that release projectiles and don't deal AoE damage gain [yellow]+25%[fg] damage",
['ballista_x'] = "[yellow]+25%[fg] damage if all your units only release projectiles and don't deal AoE damage",
['point_blank'] = '[fg]projectiles deal up to [yellow]+100%[fg] damage up close and down to [yellow]-50%[fg] damage far away',
['longshot'] = '[fg]projectiles deal up to [yellow]+100%[fg] damage far away and down to [yellow]-50%[fg] up close',
['blunt_arrow'] = '[fg]all arrows fired by rangers have a [yellow]20%[fg] chance to knockback',
['explosive_arrow'] = '[fg]all arrows fired by rangers have a [yellow]20%[fg] chance to explode, dealing [yellow]+20%[fg] damage in a small area',
['divine_machine_arrow'] = '[fg]all arrows fired by rangers have a [yellow]20%[fg] chance to seek enemies and pierce [yellow]5[fg] times',
['chronomancy'] = '[fg]all mages cast their spells [yellow]25%[fg] faster',
['awakening'] = '[fg]at the start of the round [yellow]1[fg] mage is chosen at random and is granted [yellow]+100%[fg] attack speed and damage for that round',
['divine_punishment'] = '[fg]periodically deal [yellow]10X[fg] damage to all enemies, where [yellow]X[fg] is the number of mages you have',
['berserking'] = '[fg]all warriors have up to [yellow]+50%[fg]attack speed based on missing HP',
['unwavering_stance'] = '[fg]all warriors gain [yellow]+5%[fg] defense every [yellow]5[fg] seconds, up to [yellow]+50%[fg]',
['ultimatum'] = '[fg]projectiles that chain gain [yellow]+25%[fg] damage with each chain',
['flying_daggers'] = '[fg]all knives thrown by rogues chain [yellow]+2[fg] times',
['assassination'] = '[fg]your crits deal [yellow]8x[fg] damage (up from [yellow]4x[fg]) but normal attacks deal [yellow]half[fg] damage',
['magnify'] = '[yellow]+25%[fg] area size',
['concentrated_fire'] = '[yellow]-50%[fg] area size and [yellow]+50%[fg] area damage',
['unleash'] = '[fg]gain [yellow]+5%[fg] area size and damage per second, this resets when an AoE attack happens',
['reinforce'] = '[yellow]+10%[fg] damage, defense and attack speed to all allies if you have at least one enchanter',
['payback'] = '[yellow]+5%[fg] damage to all allies whenever an enchanter is hit',
['blessing'] = '[yellow]+20%[fg] healing effectiveness',
['hex_master'] = '[yellow]+25%[fg] curse duration',
['whispers_of_doom'] = '[fg]curses apply doom, when [yellow]3[fg] doom instances are applied they are consumed, dealing [yellow]100[fg] damage',
['force_push'] = '[yellow]+25%[fg] knockback force',
['heavy_impact'] = '[fg]if knockbacked enemies hit walls they take damage according to the knockback force',
['crucio'] = '[fg]taking damage shares [yellow]2X[fg] the amount across all enemies',
['immolation'] = '[yellow]3[fg] units chosen at random will periodically take damage, all your allies gain [yellow]+8%[fg] damage per tick',
['call_of_the_void'] = '[yellow]+25%[fg] damage over time',
['spawning_pool'] = '[yellow]+1[fg] critter health',
['hive'] = '[yellow]+2[fg] critter health',
['void_rift'] = '[fg]all AoE attacks by mages, nukers or voiders have a [yellow]20%[fg] chance to create an area that deals [yellow]50%[fg] damage per second for [yellow]2[fg] seconds',
}
passive_tiers = {
['ouroboros_technique_r'] = 2,
['ouroboros_technique_l'] = 2,
['wall_echo'] = 1,
['wall_rider'] = 1,
['centipede'] = 1,
['intimidation'] = 2,
['vulnerability'] = 2,
['temporal_chains'] = 1,
['amplify'] = 1,
['amplify_x'] = 1,
['resonance'] = 2,
['ballista'] = 1,
['ballista_x'] = 1,
['point_blank'] = 2,
['longshot'] = 2,
['blunt_arrow'] = 1,
['explosive_arrow'] = 2,
['divine_machine_arrow'] = 3,
['chronomancy'] = 2,
['awakening'] = 2,
['divine_punishment'] = 3,
['berserking'] = 1,
['unwavering_stance'] = 1,
['ultimatum'] = 2,
['flying_daggers'] = 3,
['assassination'] = 1,
['magnify'] = 1,
['concentrated_fire'] = 2,
['unleash'] = 1,
['reinforce'] = 2,
['payback'] = 2,
['blessing'] = 1,
['hex_master'] = 1,
['whispers_of_doom'] = 2,
['force_push'] = 1,
['heavy_impact'] = 2,
['crucio'] = 3,
['immolation'] = 2,
['call_of_the_void'] = 2,
['spawning_pool'] = 1,
['hive'] = 3,
['void_rift'] = 3,
}
tier_to_passives = {
[1] = {'wall_echo', 'wall_rider', 'centipede', 'temporal_chains', 'amplify', 'amplify_x', 'ballista', 'ballista_x', 'blunt_arrow', 'berserking', 'unwavering_stance', 'assassination', 'unleash', 'blessing',
'hex_master', 'force_push', 'spawning_pool'},
[2] = {'ouroboros_technique_r', 'ouroboros_technique_l', 'intimidation', 'vulnerability', 'resonance', 'point_blank', 'longshot', 'explosive_arrow', 'chronomancy', 'awakening', 'ultimatum', 'concentrated_fire',
'reinforce', 'payback', 'whispers_of_doom', 'heavy_impact', 'immolation', 'call_of_the_void'},
[3] = {'divine_machine_arrow', 'divine_punishment', 'flying_daggers', 'crucio', 'hive', 'void_rift'},
}
level_to_passive_tier_weights = {
[3] = {70, 20, 10},
[6] = {60, 25, 15},
[9] = {50, 30, 20},
[12] = {40, 40, 20},
[15] = {30, 45, 25},
[18] = {20, 50, 30},
[21] = {20, 40, 40},
[24] = {20, 30, 50},
}
gold = 2
main = Main()
main:add(BuyScreen'buy_screen')
main:go_to('buy_screen', 22, {
{character = 'flagellant', level = 3},
{character = 'scout', level = 3},
{character = 'archer', level = 3},
})
--[[
main:add(Arena'arena')
main:go_to('arena', 18, {
{character = 'scout', level = 3},
{character = 'engineer', level = 3},
{character = 'wizard', level = 3},
main:add(BuyScreen'buy_screen')
main:go_to('buy_screen', 3, {
{character = 'swordsman', level = 3},
{character = 'outlaw', level = 3},
{character = 'wizard', level = 3},
{character = 'scout', level = 3},
{character = 'archer', level = 3},
{character = 'cannoneer', level = 3},
{character = 'spellblade', level = 3},
})
]]--
main:add(Arena'arena')
main:go_to('arena', 3, {
{character = 'swordsman', level = 3},
{character = 'wizard', level = 3},
{character = 'scout', level = 3},
{character = 'archer', level = 3},
})
end

View File

@ -572,7 +572,7 @@ function Player:update(dt)
if input.move_right.down then self.r = self.r + 1.66*math.pi*dt end
self:set_velocity(self.v*math.cos(self.r), self.v*math.sin(self.r))
if not main.current.won then
if not main.current.won and not main.current.choosing_passives then
local vx, vy = self:get_velocity()
local hd = math.remap(math.abs(self.x - gw/2), 0, 192, 1, 0)
local vd = math.remap(math.abs(self.y - gh/2), 0, 108, 1, 0)

28
todo
View File

@ -82,19 +82,19 @@
* Infestor [curser, swarmer]: curses nearby enemies for 6 seconds, they will release multiple critters on death - Lv.3: Infestation - triples the number of critters released
* Flagellant [psyker, enchanter]: periodically deals damage to self and grants a damage buff to all allies - Lv.3: Zealotry - deals damage to all allies instead and also grants a massive damage buff
* Sets
Ranger = 8/8
Warrior = 8/8
Mage = 8/8
Rogue = 8/8
Nuker = 7/7
Conjurer = 5/5
Forcer = 5/5
Voider = 5/5
Psyker = 4/4
Healer = 5/5
Enchanter = 5/5
Curser = 5/5
Swarmer = 4/4
* Ranger = 7/7
* Warrior = 8/8
* Mage = 8/8
* Rogue = 8/8
* Nuker = 7/7
* Conjurer = 5/5
* Forcer = 5/5
* Voider = 5/5
* Psyker = 4/4
* Healer = 5/5
* Enchanter = 5/5
* Curser = 5/5
* Swarmer = 4/4
10. Items
Ouroboros Technique R: rotating around yourself to the right makes every unit periodically release projectiles
@ -122,7 +122,7 @@
11. Steam integration: achievements, etc
12. Hovering over a party member should show which set they belong to and vice-versa
13. Show a unit DPS list like Underlord's to the right side of the screen
14. Warriors that deal AoE damage should deal extra damage based on number of enemies hit
* 14. Warriors that deal AoE damage should deal extra damage based on number of enemies hit
15. GO button is grayed out and thus doesn't say it's meant to be clicked on
16. 28/20 enemies or 4/3 wave confuses players and makes them think the level goals are bugged
17. Music for first 9-15 levels should be calm rather than upbeat