require("config.util") local mods = {} function mods.fix_6a_parameters(pat) pat:update_frame(302, 0, 6, { proration = 850 }) end function mods.fix_3a_parameters(pat, damage) pat:update_frame(304, 1, 0, { untech = 50 }) pat:update_frame(304, 1, 1, { damage = damage, proration = 850 }) end function mods.set_3a_aub(pat) local function set_aub(frame) unset_aflag(frame, AF_AIR_BLOCKABLE) end pat:update_frame(304, 1, 0, set_aub) pat:update_frame(304, 1, 1, set_aub) end function mods.set_3a_untech(pat, untech) pat:update_frame(304, 1, 0, { untech = untech }) pat:update_frame(304, 1, 1, { untech = untech }) end function mods.recovery_da(pat) pat:update_frame(305, 0, 5, { duration = 6 }) end function mods.startup_db(pat) pat:update_frame(408, 0, 0, { duration = 2 }) pat:update_frame(408, 0, 1, { duration = 2 }) end function mods.ground_bounce_j2a(pat) for idx = 4, 5 do pat:update_frame(308, 0, idx, { hit_ani_air = 88, hit_ani_ground = 88 }) end end function mods.startup_j8a(pat) pat:update_frame(309, 0, 2, { duration = 3 }) end function mods.hurtbox_ja(pat) local function modify(frame) frame.hurtbox = pat:get_frame(306, 2, 0).hurtbox end pat:update_frame(306, 0, 2, modify) for idx = 0, 3 do pat:update_frame(306, 1, idx, modify) end end function mods.m_cancel_b(pat) pat:remove_frame(400, 0, 0) pat:update_frame(400, 0, 2, { duration = 2 }) pat:update_frame(400, 2, 4, function(frame) set_fflag(frame, FF_MOTION_CANCEL) end) end function mods.m_cancel_6b(pat) pat:remove_frame(401, 0, 0) pat:add_frame(401, 0, 1, pat:get_frame(400, 0, 1)) pat:update_frame(401, 2, 4, function(frame) set_fflag(frame, FF_MOTION_CANCEL) end) end function mods.startup_j2c(pat) pat:update_frame(416, 0, 2, { duration = 5 }) end function mods.untech_c_bullets(pat, untech) pat:update_frame(801, 1, 0, { untech = untech }) pat:update_frame(801, 1, 1, { untech = untech }) end function mods.untech_hakurei_amulet(pat, untech) pat:update_frame(810, 1, 0, { untech = untech }) pat:update_frame(810, 1, 1, { untech = untech }) end function mods.asc_kick_b_prepare_for_dp(pat) for idx = 0, 2 do pat:update_frame(560, 1, idx, function(frame) unset_aflag(frame, AF_COUNTER_HIT) frame.untech = 45 end) end end function mods.cautionary_border_untech(pat, untech) for idx = 0, 29 do pat:update_frame(815, 3, idx, { untech = untech }) end end function mods.binding_border_untech(pat, untech) for idx = 0, 29 do pat:update_frame(816, 0, idx, { untech = untech }) pat:update_frame(816, 4, idx, { untech = untech }) end end function mods.permanent_border_untech(pat, untech) for idx = 0, 7 do pat:update_frame(817, 4, idx, { untech = untech }) end end function mods.permanent_border_launch_vector(pat, v_x, v_y) for idx = 0, 7 do pat:update_frame(817, 4, idx, { velocity_x = v_x, velocity_y = v_y }) end end function mods.rain_dance_parameters(pat, damage, proration, limit, v_x) local function update(frame) frame.damage = damage frame.proration = proration frame.limit = limit frame.velocity_x = v_x end for idx = 0, 14 do pat:update_frame(827, 0, idx, update) pat:update_frame(827, 2, idx, update) end end function mods.m_cancel_demon_sealing_dimensional_rift(pat) local function set_motion_cancel(frame) set_fflag(frame, FF_MOTION_CANCEL) end pat:update_frame(545, 4, 3, { duration = 2 }) for idx = 5, 6 do pat:update_frame(545, 4, idx, set_motion_cancel) pat:update_frame(546, 4, idx, set_motion_cancel) end end function mods.instant_dimensional_rift_active_time(pat) for seq = 550, 551 do pat:update_frame(seq, 0, 4, function(frame) frame.fflags = pat:get_frame(seq, 0, 3).fflags end) end end function mods.demon_binding_array_damage(pat, damage, proration, limit) for idx = 0, 9 do pat:update_frame(854, 1, idx, { damage = damage, proration = proration, limit = limit }) end end function mods.demon_binding_circle_startup(pat) pat:update_frame(606, 0, 6, { duration = 39 }) end function mods.expanding_boundary_parameters(pat, values) for idx = 0, 4 do pat:update_frame(857, 3, idx, values) end end return function(pat) mods.fix_6a_parameters(pat) mods.fix_3a_parameters(pat, config:getdef("reimu", "3a", "damage", 750)) config:run(pat, mods.set_3a_aub, "reimu", "3a", "air_unblockable") config:run(pat, mods.set_3a_untech, "reimu", "3a", "untech") config:run(pat, mods.recovery_da, "reimu", "da", "reduce_recovery") config:run(pat, mods.startup_db, "reimu", "db", "reduce_startup") if config:get("reimu", "ja", "reduce_hurtboxes") then mods.hurtbox_ja(pat) end if config:get("reimu", "j2a", "ground_bounce") then mods.ground_bounce_j2a(pat) end -- mods.startup_j8a(pat) if config:get("reimu", "b_series", "b_6b", "faster_motion_cancel") then mods.m_cancel_b(pat) mods.m_cancel_6b(pat) end if config:get("reimu", "c_series", "j2c", "reduce_startup") then mods.startup_j2c(pat) end mods.untech_c_bullets(pat, config:getdef( "reimu", "c_series", "untech", 25 )) mods.untech_hakurei_amulet(pat, config:getdef( "reimu", "hakurei_amulet", "untech", 30 )) if config:getdef("reimu", "ascension_kick", "b_inv_level", 4) <= 1 then mods.asc_kick_b_prepare_for_dp(pat) end mods.cautionary_border_untech(pat, 45) mods.binding_border_untech(pat, 45) mods.permanent_border_untech(pat, 45) mods.permanent_border_launch_vector(pat, 0, 1500) mods.rain_dance_parameters(pat, 350, 960, 10, -1250) mods.m_cancel_demon_sealing_dimensional_rift(pat) mods.instant_dimensional_rift_active_time(pat) mods.demon_binding_array_damage(pat, 666, 930, 20) -- mods.demon_binding_circle_startup(pat) mods.expanding_boundary_parameters(pat, { sp_damage = config:getdef("reimu", "expanding_boundary", "spirit_damage", 30), }) end