local mods = {} function mods.add_j6a_knockdown(pat) pat:update_frame(307, 0, 5, { untech = 6000, damage = 700 }) end function mods.combobreaker(pat) for idx = 50, 53 do pat:get_sequence(idx, 0):set_priority(9999, 0) pat:update_frame(idx, 0, 0, function(frame) frame.duration = 10 set_fflag(frame, FF_CANCEL) end) end for idx = 56, 58 do pat:get_sequence(idx, 0):set_priority(9999, 0) pat:update_frame(idx, 0, 0, function(frame) frame.duration = 10 set_fflag(frame, FF_CANCEL) end) end for idx = 62, 64 do pat:get_sequence(idx, 0):set_priority(9999, 0) pat:update_frame(idx, 0, 0, function(frame) frame.duration = 10 set_fflag(frame, FF_CANCEL) end) end for idx = 70, 71 do pat:get_sequence(idx, 0):set_priority(9999, 0) pat:update_frame(idx, 0, 0, function(frame) frame.duration = 10 set_fflag(frame, FF_CANCEL) end) end for idx = 76, 78 do pat:get_sequence(idx, 0):set_priority(9999, 0) pat:update_frame(idx, 0, 0, function(frame) frame.duration = 10 set_fflag(frame, FF_CANCEL) end) end pat:get_sequence(73, 0):set_priority(9999, 0) pat:update_frame(73, 0, 0, function(frame) frame.duration = 10 set_fflag(frame, FF_CANCEL) end) end function mods.add_236_knockdown(pat) table.map({1,2,3,4,5,6,7,8,9}, function(off) pat:update_frame(811, 0, off, { untech = 9000, damage = 600 }) pat:update_frame(811, 0, off, { hit_ani_air = 71, }) end) table.map({1,2,3,4,5,6,7,8,9}, function(off) pat:update_frame(811, 2, off, { untech = 9000, damage = 600 }) pat:update_frame(811, 2, off, { hit_ani_air = 71, }) end) table.map({2,3,4,5,6,7,8,9}, function(off) pat:update_frame(811, 3, off, { untech = 9000, damage = 600 }) pat:update_frame(811, 3, off, { hit_ani_air = 71, }) end) table.map({1,2,3,4,5,6,7,8,9}, function(off) pat:update_frame(811, 5, off, { untech = 9000, damage = 600 }) pat:update_frame(811, 5, off, { hit_ani_air = 71, }) end) end function mods.change_boat_startup(pat) table.map({0,1,2,3,4,5,6,7,8,9,10}, function(off) pat:update_frame(530, 0, off, { duration = 1 }) pat:update_frame(531, 0, off, { duration = 1 }) end) for seq = 530, 531 do for frame = 0, 1 do pat:update_frame(seq, 1, frame, { untech = 50 , hit_ani_ground = 71, launch_vector_x = -100, launch_vector_y = 1500 }) end for frame = 1, 14 do pat:remove_frame(seq, 3, 1) end for frame = 1, 14 do pat:remove_frame(seq, 8, 1) end for frame = 1, 16 do pat:remove_frame(seq, 6, 0) end table.map({3,6,8}, function(idx) pat:update_frame(seq, idx, 0, function(frame) frame.duration = 5 set_fflag(frame, FF_CANCEL) end) end) end end function mods.more_wind_hitstun(pat) for seq = 525, 526 do for idx = 0, 1 do pat:update_frame(seq, 1, idx, function(frame) set_fflag(frame, FF_BULLET_INV) set_fflag(frame, FF_REFLECT_BULLET) frame.untech = 9999 end) pat:update_frame(seq, 3, idx, function(frame) set_fflag(frame, FF_BULLET_INV) set_fflag(frame, FF_REFLECT_BULLET) frame.untech = 9999 end) end for seq = 525, 526 do for frame = 0, 2 do pat:update_frame(seq, 2, frame, function(frame) set_fflag(frame, FF_BULLET_INV) set_fflag(frame, FF_REFLECT_BULLET) frame.attackbox[1] = pat:get_frame(seq, 1, 0).attackbox[1] end) end end end end function mods.buff_1cardboat(pat) for seq = 0, 1 do pat:update_frame(600, 1, seq, { proration = 970, hit_ani_ground = 74 }) pat:update_frame(600, 2, 0, { damage = 800, duration = 10, hit_ani_ground = 74, hit_ani_air = 74, proration = 900, launch_vector_x = 3000, launch_vector_y = 1500, hitstop_enemy = 20, hitstop_self = 0 }) end pat:update_frame(600, 4, 0, { duration = 1 }) --recovery 26 -> 17 pat:update_frame(600, 4, 1, { duration = 1 }) -- recovery 17 -> 14 pat:update_frame(600, 4, 2, { duration = 1 }) -- recovery 14 -> 11 end function mods.buff_3cardpillar(pat) pat:update_frame(611, 0, 9, { hit_ani_ground = 88, hit_ani_air = 88 }) for frame = 0, 1 do pat:update_frame(861, 1, frame, { hit_ani_air = 71, hit_ani_air = 71, launch_vector_y = -1000 }) end end function mods.buff_4cardslam(pat) for frame = 0, 8 do pat:update_frame(856, 0, frame, { damage = 3500, launch_velocity_y = -5000, hit_ani_ground = 88, hit_ani_air = 88 }) end pat:update_frame(606, 0, 13, { duration = 10 }) end function mods.buff_2c(pat) for frame = 0, 4 do pat:update_frame(412, 0, frame, { duration = 3 }) end end function mods.crazybuff(pat) pat:update_frame(601, 0, 8, { damage = 1000 }) end function mods.buff3cardboat(pat) for frame = 0, 9 do pat:update_frame(603, 0, frame, { duration = 2}) end for frame = 0, 1 do pat:update_frame(853, 0, frame, { untech = 9999 }) end end function mods.add4cardreversal(pat) local function set_graze(frame) set_fflag(frame, FF_GRAZE) end local function set_invinc(frame) set_fflag(frame, FF_MELEE_INV) end for frame = 0, 3 do pat:update_frame(607, 0, frame, set_graze) pat:update_frame(607, 0, frame, set_invinc) end for frame = 0, 5 do pat:update_frame(607, 2, frame, set_graze) pat:update_frame(607, 2, frame, set_invinc) end for frame = 1, 5 do pat:update_frame(857, 0, frame, { damage = 700 }) end end function mods.add1cardHJC(pat) for frame = 10, 14 do pat:update_frame(602, 0, frame, set_attack_and_motion_cancel) end end function mods.cancel(pat) -- pat:get_sequence(204, 0):set_priority(0, 15) pat:get_sequence(300, 0):set_priority(10, 15) -- 5A pat:get_sequence(320, 0):set_priority(10, 20) -- 5AA pat:get_sequence(303, 0):set_priority(15, 20) -- 2A pat:get_sequence(330, 0):set_priority(10, 15) -- 4A pat:get_sequence(322, 0):set_priority(20, 30) pat:get_sequence(321, 0):set_priority(20, 20) end function mods.high4a(pat) pat:update_frame(300, 0, 3, function(frame) unset_aflag(frame, AF_LOWBLOCK_OK) end) pat:update_frame(330, 0, 3, function(frame) unset_aflag(frame, AF_LOWBLOCK_OK) end) end function mods.dialAhitsop(pat) pat:update_frame(322, 0, 9, { hitstop_enemy = 18 }) end function mods.modify_C_untech(pat) pat:update_frame(801, 2, 0, { untech = 60, damage = 400 }) pat:update_frame(801, 2, 1, { untech = 60, damage = 400 }) pat:update_frame(801, 0, 0, { untech = 60 }) pat:update_frame(801, 0, 1, { untech = 60 }) pat:update_frame(852, 0, 0, { untech = 6000 }) pat:update_frame(852, 0, 1, { untech = 6000 }) end function mods.modify5aaarecovery(pat) for frame = 0, pat:get_frame_count(321, 0) - 1 do pat:update_frame(321, 0, frame, { untech = 6000 }) end pat:update_frame(321, 0, 6, { duration = 2 }) pat:update_frame(321, 0, 7, { duration = 7 }) pat:update_frame(321, 0, 8, { duration = 3 }) pat:update_frame(321, 0, 9, { duration = 3 }) pat:update_frame(321, 0, 10, { duration = 2 }) pat:update_frame(321, 0, 11, { duration = 2 }) pat:update_frame(321, 0, 12, { duration = 1 }) end function mods.modify66c_untech(pat) pat:update_frame(418, 0, 9, { untech = 6000 }) end function mods.modify_endlessway(pat) for frame = 0, 1 do pat:update_frame(821, 1, 0, { untech = 6000, launch_vector_y = -2000 }) end -- b startup = 16 for frame = 0, 11 do pat:update_frame(545, 0, frame, { duration = 1 }) pat:update_frame(545, 0, 6, { duration = 6 }) pat:update_frame(546, 0, frame, { duration = 2 }) pat:update_frame(546, 0, 6, { duration = 7 }) end -- c startup = 28 end function mods.modify_exorscythe(pat) for frame = 1, 3 do pat:update_frame(830, 0, frame, { launch_vector_y = 2000, proration = 920, untech = 60 }) pat:update_frame(830, 4, frame, { launch_vector_y = 2000, proration = 920, untech = 60 }) pat:update_frame(830, 5, frame, { launch_vector_y = 2000, proration = 920, untech = 60 }) end for frame = 0, 1 do pat:update_frame(830, 6, frame, { damage = 600, sp_damage = 100, untech = 60, hitstop_enemy = 10, blockstop_enemy = 10, hit_ani_ground = 74, hit_ani_ground = 74, launch_vector_x = 2450, launch_vector_y = 1500, proration = 960, combo_correction = 2 }) end for frame = 0, 5 do pat:update_frame(570, 0, 7, { duration = 1 }) pat:update_frame(570, 0, 5, { duration = 1 }) pat:update_frame(571, 0, 11, { duration = 1 }) pat:update_frame(571, 0, 9, { duration = 1 }) end pat:update_frame(571, 0, 15, { duration = 24 }) pat:update_frame(570, 0, 11, { duration = 24 }) pat:remove_frame(570, 0, 10) pat:remove_frame(571, 0, 14) end function mods.modify3auntech(pat) pat:update_frame(304, 1, 2, { untech = 6000 }) pat:update_frame(304, 0, 4, { proration = 850, untech = 60 }) end function mods.add22reversal(pat) pat:get_sequence(540, 2):set_priority(50, 9999) local function set_graze(frame) set_fflag(frame, FF_GRAZE) end local function set_invinc(frame) set_fflag(frame, FF_MELEE_INV) end for frame = 0, 7 do pat:update_frame(540, 0, frame, set_invinc) pat:update_frame(541, 0, frame, set_graze) pat:update_frame(540, 1, 0, set_invinc) pat:update_frame(541, 1, 0, set_graze) end pat:update_frame(540, 2, 1, { duration = 10 }) pat:update_frame(541, 1, 0, { duration = 10 }) pat:update_frame(542, 2, 1, { duration = 10 }) pat:update_frame(543, 1, 0, { duration = 10 }) end function mods.modifytasteofdeath(pat) pat:update_frame(550, 2, 3, { untech = 6000 }) pat:update_frame(550, 1 , 0, function(frame) set_fflag(frame, FF_SUPER_ARMOR) end) end function mods.modifyj8auntech(pat) pat:update_frame(309, 0, 6, { untech = 60 }) end function mods.modifyhurtbox(pat) for frame = 50, 52 do for st = 0, 1 do pat:update_frame(frame, 0, st, function(frame) frame.hurtbox[1] = pat:get_frame(50, 0, 2).hurtbox[1] frame.hurtbox[2] = pat:get_frame(50, 0, 2).hurtbox[2] frame.hurtbox[3] = pat:get_frame(50, 0, 2).hurtbox[3] end) end end end function mods.modifyd236(pat) for frame = 0, 8 do pat:update_frame(810, 0, frame, { launch_vector_x = 0, launch_vector_y = 1500, hit_ani_ground = 71 }) end pat:update_frame(500, 0, 4, { duration = 1}) end function mods.modifyC(pat) for frame = 0, 1 do pat:update_frame(801, 0, frame, { untech = 50}) pat:update_frame(826, 1, frame, { untech = 6000, damage = 700 }) pat:update_frame(827, 2, frame, { untech = 6000, damage = 700 }) pat:update_frame(827, 3, frame, { untech = 6000, damage = 700 }) pat:update_frame(855, 2, frame, { untech = 6000, damage = 700 }) end end function mods.modifyweathercard(pat) for frame = 0, 11 do pat:update_frame(691, 1, frame, function(frame) set_fflag(frame, FF_CANCEL) frame.duration = 1 end) end for frame = 0, 4 do pat:update_frame(691, 0, frame, function(frame) set_fflag(frame, FF_CANCEL) end) end pat:get_sequence(691, 1):set_priority(0, 0) pat:get_sequence(691, 0):set_priority(0, 0) for frame = 0, 11 do pat:update_frame(690, 1, frame, function(frame) set_fflag(frame, FF_CANCEL) frame.duration = 1 end) end for frame = 0, 4 do pat:update_frame(690, 0, frame, function(frame) set_fflag(frame, FF_CANCEL) end) end pat:get_sequence(690, 1):set_priority(0, 0) pat:get_sequence(690, 0):set_priority(0, 0) end function mods.modifynew5aaa(pat) local function remove_last_hurtbox(frame) table.remove(frame.hurtbox) end -- for frame = 10, 12 do -- pat:remove_frame(304, 0, 10) -- end -- for frame = 6, 8 do -- pat:remove_frame(304, 1, 6) -- end for idx = 0, 13 do local src = pat:get_frame(570, 0, ( idx + 2) ) local boxes = pat:get_frame(570, 0, ( idx + 2) ).hurtbox pat:update_frame(321, 0, idx, function(frame) -- frame.attackbox[2] = { x1= 30, y1= 30, x2= 40, y2= 50 } -- frame.attackbox[3] = { x1= 10, y1= 10, x2= 60, y2= 90 } copy_sprite(frame, src) frame.hurtbox = table.map(boxes, table.shallow_copy) end) end for idx = 14, 15 do local src = pat:get_frame(570, 0, 15) local boxes = pat:get_frame(570, 0, 15).hurtbox pat:update_frame(321, 0, idx, function(frame) -- frame.attackbox[2] = { x1= 30, y1= 30, x2= 40, y2= 50 } -- frame.attackbox[3] = { x1= 10, y1= 10, x2= 60, y2= 90 } copy_sprite(frame, src) frame.hurtbox = table.map(boxes, table.shallow_copy) end) end end function mods.modifynewdash(pat) local function remove_last_hurtbox(frame) table.remove(frame.hurtbox) end -- for frame = 10, 12 do -- pat:remove_frame(304, 0, 10) -- end pat:remove_frame(200, 1, 1) pat:remove_frame(200, 1, 1) for idx = 0, 1 do local src = pat:get_frame(530, 1, idx) pat:update_frame(200, 0, idx, function(frame) copy_sprite(frame, src) set_fflag(frame, FF_REFLECT_BULLET) unset_fflag(frame, FF_GRAZE) frame.attackbox[1] = pat:get_frame(525, 1, 0).attackbox[1] end) end for idx = 0, 1 do local src = pat:get_frame(530, 1, idx) pat:update_frame(200, 1, idx, function(frame) copy_sprite(frame, src) set_fflag(frame, FF_REFLECT_BULLET) unset_fflag(frame, FF_GRAZE) frame.attackbox[1] = pat:get_frame(525, 1, 0).attackbox[1] end) end end function mods.nerf(pat) for move = 300, 310 do for idx = 0, pat:get_frame_count(move, 0) - 1 do local src = pat:get_frame(move, 0, idx) local dmg = (src.damage - 50) pat:update_frame(move, 0, idx, function(frame) frame.damage = dmg end) end end for move = 320, 322 do for idx = 0, pat:get_frame_count(move, 0) - 1 do local src = pat:get_frame(move, 0, idx) local dmg = (src.damage - 50) pat:update_frame(move, 0, idx, function(frame) frame.damage = dmg end) end end for idx = 0, pat:get_frame_count(330, 0) - 1 do local src = pat:get_frame(330, 0, idx) local dmg = (src.damage - 50) pat:update_frame(330, 0, idx, function(frame) frame.damage = dmg end) end end function mods.modifybehindwisp(pat) for frame = 0, 8 do pat:update_frame(812, 0, frame, { untech = 9000 }) pat:update_frame(812, 2, frame, { untech = 9000 }) end end function mods.f5auntech(pat) for frame = 6, 7 do pat:update_frame(301, 0, frame, { untech = 6000 }) end end function mods.modifyd623(pat) for frame = 0, 1 do pat:update_frame(815, 0, frame, { damage = 150, launch_vector_y = 1200, untech = 50, launch_vector_x = 0 }) end for frame = 0, 1 do pat:update_frame(815, 1, frame, { damage = 150, launch_vector_y = 1200, untech = 50, launch_vector_x = 0 }) end for frame = 0, 1 do pat:update_frame(815, 2, 0, { damage = 150, launch_vector_y = 1200, untech = 50, launch_vector_x = 0 }) end for frame = 0, 1 do pat:update_frame(815, 3, frame, { damage = 150, launch_vector_y = 1200, untech = 50, launch_vector_x = 0 }) end end function mods.maketaunt(pat) local onum = pat:get_frame_count(0, 0) local src = pat:get_frame(0, 0, pat:get_frame_count(0, 0) - 1) local oframe = src.duration for loop = 0, 1 do for count = 0, onum - 1 do pat:split_frame(0, 0, (onum*(loop + 1)) - 1, oframe, 1) end for idx = 0, onum - 1 do local src = pat:get_frame(0, 0, idx) pat:update_frame(0, 0, (onum*(loop + 1) + idx) , function(frame) copy_sprite(frame, src) frame.duration = src.duration end) end end local num = pat:get_frame_count(0, 0) local src = pat:get_frame(0, 0, pat:get_frame_count(0, 0) - 1) local oframe = src.duration for count = 0, 11 do pat:split_frame(0, 0, num - 1, oframe, 1) end for idx = 0, 4 do local src = pat:get_frame(302, 0, 13 - idx) pat:update_frame(0, 0, num + idx, function(frame) copy_sprite(frame, src) frame.duration = src.duration + 2 end) end local src = pat:get_frame(302, 0, 8) pat:update_frame(0, 0, num + 5, function(frame) copy_sprite(frame, src) frame.duration = 25 end) for idx = 6, 11 do local src = pat:get_frame(302, 0, idx + 2) pat:update_frame(0, 0, num + idx, function(frame) copy_sprite(frame, src) frame.duration = src.duration end) end end return function(pat) mods.maketaunt(pat) mods.modifyd623(pat) mods.f5auntech(pat) mods.modifybehindwisp(pat) mods.nerf(pat) -- mods.modifynewdash(pat) mods.modifynew5aaa(pat) mods.modifyC(pat) -- mods.modifyOTG(pat) -- mods.modifyweathercard(pat) mods.modifyd236(pat) mods.modifyhurtbox(pat) mods.modifyj8auntech(pat) mods.modifytasteofdeath(pat) mods.add22reversal(pat) mods.modify3auntech(pat) mods.modify_endlessway(pat) mods.modify_exorscythe(pat) mods.modify66c_untech(pat) -- mods.modify5aaarecovery(pat) mods.high4a(pat) mods.modify_C_untech(pat) mods.dialAhitsop(pat) -- mods.buff_2c(pat) mods.add1cardHJC(pat) if config:get("global", "4A/2A", "melty-style jabs") then mods.cancel(pat) end mods.crazybuff(pat) mods.add_j6a_knockdown(pat) mods.add4cardreversal(pat) mods.buff3cardboat(pat) mods.buff_4cardslam(pat) mods.buff_3cardpillar(pat) mods.buff_1cardboat(pat) -- mods.global(pat) mods.add_236_knockdown(pat) mods.change_boat_startup(pat) mods.more_wind_hitstun(pat) -- mods.combobreaker(pat) end