require("config.util") local mods = {} local function remove_last_hurtbox(frame) table.remove(frame.hurtbox) end local function hurtbox_a_da(pat, seq, base) local ref_box = pat:get_frame(seq, 0, base).hurtbox[2] local ref_height = math.abs(ref_box.y2 - ref_box.y1) for idx = base + 1, base + 2 do pat:update_frame(seq, 0, idx, function(frame) local box = frame.hurtbox[2] box.x1 = ref_box.x1 box.x2 = ref_box.x2 box.y2 = box.y1 + ref_height if idx == base + 2 then box.x2 = box.x2 - 15 end end) end end function mods.hurtbox_a(pat) hurtbox_a_da(pat, 300, 6) hurtbox_a_da(pat, 330, 6) end function mods.hurtbox_fa(pat) pat:update_frame(301, 0, 8, function(frame) frame.hurtbox[2] = pat:get_frame(301, 0, 9).hurtbox[2] end) pat:update_frame(301, 0, 6, remove_last_hurtbox) pat:update_frame(301, 0, 7, remove_last_hurtbox) pat:update_frame(301, 0, 9, remove_last_hurtbox) for _, spec in ipairs {{6, 40}, {7, 40}, {8, 15}} do local idx, clip = table.unpack(spec) pat:update_frame(301, 0, idx, function(frame) frame.hurtbox[2].x2 = frame.hurtbox[2].x2 - clip end) end end function mods.hurtbox_fa_based_on_aa(pat) for idx = 6, 9 do pat:update_frame(301, 0, idx, function(frame) frame.hurtbox = pat:get_frame(320, 0, idx).hurtbox end) end end function mods.hurtbox_da(pat) pat:update_frame(305, 0, 4, function(frame) table.remove(frame.hurtbox) table.remove(frame.hurtbox) end) hurtbox_a_da(pat, 305, 4) end function mods.damage_parameters_j2a(pat, damage, proration, limit) for _, off in ipairs({1, 4, 5}) do for idx = 5, 8 do pat:update_frame(308, 0, idx, { damage = damage, proration = proration, limit = limit }) end end end function mods.sphere_bloom_object_parameters(pat) for idx = 0, 1 do pat:update_frame(812, 1, idx, { sp_damage = 60, damage = 250, chip_damage = 50, }) end end function mods.sense_of_elegance_b_startup_1(pat) for off = 0, 2 do pat:update_frame(570, off, 0, { duration = 2 }) pat:update_frame(570, off, 1, { duration = 2 }) pat:update_frame(570, off, 8, { duration = 2 }) end end function mods.sense_of_elegance_b_startup_2(pat) for off = 0, 2 do pat:update_frame(570, off, 8, { duration = 2 }) pat:remove_frame(570, off, 0) pat:remove_frame(570, off, 0) end end function mods.sense_of_elegance_c_startup_1(pat) for idx = 0, 5 do pat:remove_frame(571, 1, 0) end for off = 2, 4 do pat:update_frame(571, off, 1, { duration = 2 }) end end function mods.sense_of_elegance_c_startup_2(pat) pat:update_frame(571, 0, 0, { duration = 4 }) pat:update_frame(571, 0, 1, { duration = 3 }) for idx = 5, 15 do pat:remove_frame(571, 1, 5) end end function mods.land_of_death_startup_1(pat) pat:update_frame(530, 0, 4, { duration = 3 }) pat:update_frame(531, 0, 4, { duration = 4 }) end function mods.land_of_death_startup_2(pat) for idx = 0, 7 do pat:update_frame(531, 0, idx, function(frame) frame.duration = pat:get_frame(530, 0, idx).duration end) end for idx = 0, 3 do pat:update_frame(530, 0, idx, { duration = 2 }) end pat:update_frame(530, 0, 4, { duration = 4 }) pat:update_frame(531, 0, 4, { duration = 4 }) end function mods.land_of_death_motion_cancel(pat) pat:update_frame(530, 0, 10, set_motion_cancel) pat:update_frame(531, 0, 11, set_motion_cancel) pat:update_frame(531, 0, 12, set_motion_cancel) end function mods.land_of_death_object_parameters(pat) for idx = 0, 1 do pat:update_frame(817, 1, idx, { untech = 50, proration = 950, launch_vector_y = 1500, }) end end function mods.endless_nap_startup(pat) pat:update_frame(603, 0, 2, { duration = 40 }) end return function(pat) if config:get("yuyuko", "a", "reduce_hurtboxes") then mods.hurtbox_a(pat) end if config:get("yuyuko", "fa", "reduce_hurtboxes") == 1 then mods.hurtbox_fa(pat) elseif config:get("yuyuko", "fa", "reduce_hurtboxes") == 2 then mods.hurtbox_fa_based_on_aa(pat) end if config:get("yuyuko", "da", "reduce_hurtboxes") then mods.hurtbox_da(pat) end if config:get("yuyuko", "j2a", "modify_parameters") then -- mods.damage_parameters_j2a(pat, 350, 950, 10) mods.damage_parameters_j2a(pat, 300, 960, 10) end if config:get("yuyuko", "sphere_bloom", "adjust_parameters") then mods.sphere_bloom_object_parameters(pat) end if config:get("yuyuko", "land_of_death", "faster_motion_cancel") then mods.land_of_death_motion_cancel(pat) end if config:get("yuyuko", "land_of_death", "modify_parameters") then mods.land_of_death_object_parameters(pat) end if config:get("yuyuko", "land_of_death", "reduce_startup") == 1 then mods.land_of_death_startup_1(pat) elseif config:get("yuyuko", "land_of_death", "reduce_startup") == 2 then mods.land_of_death_startup_2(pat) end if config:get("yuyuko", "sense_of_elegance", "reduce_startup") == 1 then mods.sense_of_elegance_b_startup_1(pat) mods.sense_of_elegance_c_startup_1(pat) elseif config:get("yuyuko", "sense_of_elegance", "reduce_startup") == 2 then mods.sense_of_elegance_b_startup_2(pat) mods.sense_of_elegance_c_startup_2(pat) end if config:get("yuyuko", "endless_nap", "increase_startup") then mods.endless_nap_startup(pat) end end