Skip to content

Commit

Permalink
Merge pull request #2488 from jaccob101/bayo-3-leaks
Browse files Browse the repository at this point in the history
Bayonetta Fixes / Neutral B Slowdown Adj
  • Loading branch information
WuBoytH authored Aug 2, 2024
2 parents 284ab34 + f8e23c1 commit e32de16
Show file tree
Hide file tree
Showing 6 changed files with 109 additions and 62 deletions.
6 changes: 5 additions & 1 deletion fighters/bayonetta/src/acmd/specials.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,12 @@ unsafe extern "C" fn game_specialnstarth(agent: &mut L2CAgentBase) {
unsafe extern "C" fn game_specialnendh(agent: &mut L2CAgentBase) {
let lua_state = agent.lua_state_agent;
let boma = agent.boma();
let cancel_frame_param = agent.get_param_int("param_special_n", "cancel_frame") as f32;
let special_lag = agent.get_float(*FIGHTER_BAYONETTA_INSTANCE_WORK_ID_FLOAT_SPECIAL_LANDING_FRAME);
frame(lua_state, 1.0);
MotionModule::set_rate(boma, (58.0 - 1.0)/25.0);//32 > 26
if !agent.is_status(statuses::bayonetta::SPECIAL_N_CANCEL) || special_lag < cancel_frame_param {
MotionModule::set_rate(boma, (58.0 - 1.0)/25.0);//32 > 26
}//do not change motion rate on special lag cancel anim
}

unsafe extern "C" fn game_specialnendf(agent: &mut L2CAgentBase) {
Expand Down
2 changes: 2 additions & 0 deletions fighters/bayonetta/src/opff.rs
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,9 @@ unsafe fn fastfall_specials(fighter: &mut L2CFighterCommon) {
*FIGHTER_BAYONETTA_STATUS_KIND_SPECIAL_N_CHARGE,
*FIGHTER_BAYONETTA_STATUS_KIND_SPECIAL_N_FIRE,
*FIGHTER_BAYONETTA_STATUS_KIND_SPECIAL_N_END,
statuses::bayonetta::SPECIAL_N_CANCEL,
*FIGHTER_BAYONETTA_STATUS_KIND_SPECIAL_HI_JUMP,
*FIGHTER_STATUS_KIND_SPECIAL_S,
*FIGHTER_BAYONETTA_STATUS_KIND_SPECIAL_AIR_S_D_HIT,
*FIGHTER_BAYONETTA_STATUS_KIND_SPECIAL_AIR_S_WALL_END])
&& fighter.is_situation(*SITUATION_KIND_AIR) {
Expand Down
2 changes: 2 additions & 0 deletions fighters/bayonetta/src/status/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ mod specialn;
mod specials;
mod specialhi;
mod jumpaerial;
mod wait;

pub fn install(agent: &mut Agent) {
attack::install(agent);
Expand All @@ -21,4 +22,5 @@ pub fn install(agent: &mut Agent) {
specials::install(agent);
specialhi::install(agent);
jumpaerial::install(agent);
wait::install(agent);
}
144 changes: 83 additions & 61 deletions fighters/bayonetta/src/status/specialn.rs
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,8 @@ unsafe extern "C" fn special_n_charge_main(fighter: &mut L2CFighterCommon) -> L2
} else {
fighter.sub_change_motion_by_situation(Hash40::new("special_n_charge_h").into(), Hash40::new("special_air_n_charge_h").into(), false.into());
}
//let cancel_frame = fighter.get_param_int("param_special_n", "cancel_frame");
//fighter.set_int(cancel_frame, *FIGHTER_BAYONETTA_STATUS_WORK_ID_SPECIAL_N_INT_CANCEL_FRAME);
fighter.set_float(1.0, *FIGHTER_BAYONETTA_STATUS_WORK_ID_SPECIAL_N_FLOAT_MOTION_RATE);
//fighter.sub_change_motion_by_situation(Hash40::new("special_n_charge_f").into(), Hash40::new("special_air_n_charge_h").into(), true.into());
motion_handling(fighter);
//fighter.main_shift(special_n_charge_main_loop)
fighter.sub_shift_status_main(L2CValue::Ptr(special_n_charge_main_loop as *const () as _))
}

Expand All @@ -57,12 +53,8 @@ unsafe extern "C" fn special_n_charge_main_loop(fighter: &mut L2CFighterCommon)
if MotionModule::is_end(fighter.module_accessor) {
if fighter.is_flag(*FIGHTER_BAYONETTA_STATUS_WORK_ID_SPECIAL_N_FLAG_SPECIAL_N_FOOT) {
fighter.sub_change_motion_by_situation(Hash40::new("special_n_loop_f").into(), Hash40::new("special_air_n_loop_f").into(), true.into());
//fighter.set_int64(Hash40::new("special_n_loop_h"), *FIGHTER_BAYONETTA_STATUS_WORK_ID_SPECIAL_N_INT_MOTION_KIND_G);
//fighter.set_int64(Hash40::new("special_air_n_loop_h"), *FIGHTER_BAYONETTA_STATUS_WORK_ID_SPECIAL_N_INT_MOTION_KIND_A);
} else {
fighter.sub_change_motion_by_situation(Hash40::new("special_n_loop_h").into(), Hash40::new("special_air_n_loop_h").into(), true.into());
//fighter.set_int64(Hash40::new("special_n_loop_f"), *FIGHTER_BAYONETTA_STATUS_WORK_ID_SPECIAL_N_INT_MOTION_KIND_G);
//fighter.set_int64(Hash40::new("special_air_n_loop_f"), *FIGHTER_BAYONETTA_STATUS_WORK_ID_SPECIAL_N_INT_MOTION_KIND_A);
}
app::FighterUtil::flash_eye_info(fighter.module_accessor);
PLAY_SE(fighter, Hash40::new("se_bayonetta_special_n05"));
Expand Down Expand Up @@ -107,15 +99,20 @@ unsafe extern "C" fn special_n_cancel_pre(fighter: &mut L2CFighterCommon) -> L2C
}

unsafe extern "C" fn special_n_cancel_main(fighter: &mut L2CFighterCommon) -> L2CValue {
let cancel_frame_param = fighter.get_param_int("param_special_n", "cancel_frame");
let special_lag = fighter.get_float(*FIGHTER_BAYONETTA_INSTANCE_WORK_ID_FLOAT_SPECIAL_LANDING_FRAME) as i32;
//cancel frame = iasa
fighter.set_int(cancel_frame_param, *FIGHTER_BAYONETTA_STATUS_WORK_ID_SPECIAL_N_INT_CANCEL_FRAME);
if fighter.is_flag(*FIGHTER_BAYONETTA_STATUS_WORK_ID_SPECIAL_N_FLAG_SPECIAL_N_FOOT) {
fighter.sub_change_motion_by_situation(Hash40::new("special_n_end_f").into(), Hash40::new("special_air_n_end_f").into(), false.into());
} else {
} else {//cancel lag is the greatest of the param or special lag total
fighter.sub_change_motion_by_situation(Hash40::new("special_n_end_h").into(), Hash40::new("special_air_n_end_h").into(), false.into());
if fighter.is_situation(*SITUATION_KIND_GROUND) {
if special_lag > cancel_frame_param {fighter.set_int(special_lag, *FIGHTER_BAYONETTA_STATUS_WORK_ID_SPECIAL_N_INT_CANCEL_FRAME); }
} //if grounded with stored special lag convert to cancel lag
}
let cancel_frame = fighter.get_param_int("param_special_n", "cancel_frame");
fighter.set_int(cancel_frame, *FIGHTER_BAYONETTA_STATUS_WORK_ID_SPECIAL_N_INT_CANCEL_FRAME);
//fighter.set_float(1.0, *FIGHTER_BAYONETTA_STATUS_WORK_ID_SPECIAL_N_FLOAT_MOTION_RATE);
motion_handling(fighter);
cancel_motion(fighter);
fighter.clear_lua_stack();
lua_args!(fighter, MA_MSC_CMD_EFFECT_EFFECT_OFF_KIND, Hash40::new("bayonetta_bulletclimax_circle"), true, true);
sv_module_access::effect(fighter.lua_state_agent);
Expand All @@ -127,74 +124,82 @@ unsafe extern "C" fn special_n_cancel_main(fighter: &mut L2CFighterCommon) -> L2
}

unsafe extern "C" fn special_n_cancel_main_loop(fighter: &mut L2CFighterCommon) -> L2CValue {
if StatusModule::is_situation_changed(fighter.module_accessor) {motion_handling(fighter); }
//set anims and kinetic stuff
if StatusModule::is_situation_changed(fighter.module_accessor) {cancel_motion(fighter); }
//frame counter
WorkModule::dec_int(fighter.module_accessor, *FIGHTER_BAYONETTA_STATUS_WORK_ID_SPECIAL_N_INT_CANCEL_FRAME);
let cancel_frame_param = fighter.get_param_int("param_special_n", "cancel_frame");
let cancel_frame = fighter.get_int(*FIGHTER_BAYONETTA_STATUS_WORK_ID_SPECIAL_N_INT_CANCEL_FRAME);
if cancel_frame == 0 { //check cancel frame
//forces a cancel on the ground
let special_lag = fighter.get_float(*FIGHTER_BAYONETTA_INSTANCE_WORK_ID_FLOAT_SPECIAL_LANDING_FRAME);
//pause if special lag
if fighter.get_int(*FIGHTER_BAYONETTA_STATUS_WORK_ID_SPECIAL_N_INT_CANCEL_FRAME) > cancel_frame_param && MotionModule::rate(fighter.module_accessor) >= 0.0 {
let cancel_min_frame = fighter.get_param_int("param_special_n", "cancel_frame") as f32;
MotionModule::set_rate(fighter.module_accessor, (14.0 - 1.0)/cancel_min_frame.max(special_lag - cancel_min_frame as f32));
} //slow down
//unpause motion if lag frame is over
if cancel_frame == cancel_frame_param && !StatusModule::is_changing(fighter.module_accessor) {
MotionModule::set_rate(fighter.module_accessor, (58.0 - 14.0)/(18.0 + special_lag * 0.2));
var_reset(fighter);//clears lag and resources after lag has been experienced
}
//cancel frame check
if cancel_frame == 0 {
let status = VarModule::get_int(fighter.battle_object, vars::bayonetta::instance::SPECIAL_N_CANCEL_TYPE);
if status != 0 {
StatusModule::change_status_force(fighter.module_accessor, status, false);
return 1.into();
} else {CancelModule::enable_cancel(fighter.module_accessor); }
} else {
CancelModule::enable_cancel(fighter.module_accessor);
if !fighter.is_situation(*SITUATION_KIND_GROUND) {drift_limits(fighter);}
} //drift when cancel
}
if CancelModule::is_enable_cancel(fighter.module_accessor) {
if fighter.sub_wait_ground_check_common(false.into()).get_bool()
|| fighter.sub_air_check_fall_common().get_bool() {
return 1.into();
}
//enables normal aerial movement once cancellable
if KineticModule::get_kinetic_type(fighter.module_accessor) != *FIGHTER_KINETIC_TYPE_MOTION_FALL {KineticModule::change_kinetic(fighter.module_accessor, *FIGHTER_KINETIC_TYPE_MOTION_FALL); }
}
if MotionModule::is_end(fighter.module_accessor) {
if fighter.is_situation(*SITUATION_KIND_GROUND) {fighter.change_status(FIGHTER_STATUS_KIND_WAIT.into(), false.into()); }
else {fighter.change_status(FIGHTER_STATUS_KIND_FALL.into(), false.into()); }
}
if cancel_frame > fighter.get_param_int("param_special_n", "cancel_frame") { //if in special lag
let motion_frame = MotionModule::frame(fighter.module_accessor);
MotionModule::set_rate(fighter.module_accessor, (58.0 - motion_frame.min(58.0))/cancel_frame as f32);
}//speed/slow anim to end same frame special lag does
return 0.into();
0.into()
}

unsafe extern "C" fn special_n_cancel_end(fighter: &mut L2CFighterCommon) -> L2CValue {
if fighter.is_situation(*SITUATION_KIND_GROUND) {var_reset(fighter); }
0.into()
}

unsafe extern "C" fn motion_handling(fighter: &mut L2CFighterCommon) -> L2CValue {
if fighter.is_situation(*SITUATION_KIND_GROUND) {
KineticModule::change_kinetic(fighter.module_accessor, *FIGHTER_KINETIC_TYPE_GROUND_STOP);
GroundModule::set_correct(fighter.module_accessor, GroundCorrectKind(*GROUND_CORRECT_KIND_GROUND_CLIFF_STOP_ATTACK));
var_reset(fighter);
//motion
//air -> gr
if fighter.is_motion(Hash40::new("special_air_n_charge_h")) {MotionModule::change_motion_inherit_frame(fighter.module_accessor, Hash40::new("special_n_charge_h"), -1.0, 1.0, 0.0, true, true); }
else if fighter.is_motion(Hash40::new("special_air_n_start_h")) {MotionModule::change_motion_inherit_frame(fighter.module_accessor, Hash40::new("special_n_start_h"), -1.0, 1.0, 0.0, true, true); }
else if fighter.is_motion(Hash40::new("special_air_n_loop_h")) {MotionModule::change_motion_inherit_frame(fighter.module_accessor, Hash40::new("special_n_loop_h"), -1.0, 1.0, 0.0, true, true); }
else if fighter.is_motion(Hash40::new("special_air_n_end_h")) {MotionModule::change_motion_inherit_frame(fighter.module_accessor, Hash40::new("special_n_end_h"), -1.0, 1.0, 0.0, true, true); }
} else {
let start_y = fighter.get_param_float("param_special_n", "air_start_speed_mul_y");
let air_accel_y = fighter.get_param_float("param_special_n", "air_start_accel_y");
let air_stable_y = fighter.get_param_float("param_special_n", "air_start_max_speed_y");
if fighter.global_table[STATUS_KIND].get_i32() == statuses::bayonetta::SPECIAL_N_CANCEL && StatusModule::is_changing(fighter.module_accessor) {
sv_kinetic_energy!(set_speed_mul, fighter, FIGHTER_KINETIC_ENERGY_ID_GRAVITY, start_y);
KineticModule::change_kinetic(fighter.module_accessor, *FIGHTER_KINETIC_TYPE_AIR_STOP);
}
if KineticModule::get_kinetic_type(fighter.module_accessor) != *FIGHTER_KINETIC_TYPE_AIR_STOP {
KineticModule::change_kinetic(fighter.module_accessor, *FIGHTER_KINETIC_TYPE_MOTION_FALL);
sv_kinetic_energy!(controller_set_accel_x_mul, fighter, 0.04);
sv_kinetic_energy!(controller_set_accel_x_add, fighter, 0.009);
sv_kinetic_energy!(set_stable_speed, fighter, FIGHTER_KINETIC_ENERGY_ID_CONTROL, 0.4, 0.0);
}
GroundModule::set_correct(fighter.module_accessor, GroundCorrectKind(*GROUND_CORRECT_KIND_AIR));
sv_kinetic_energy!(set_accel, fighter, FIGHTER_KINETIC_ENERGY_ID_GRAVITY, -air_accel_y);
sv_kinetic_energy!(set_stable_speed, fighter, FIGHTER_KINETIC_ENERGY_ID_GRAVITY, air_stable_y);
drift_limits(fighter);
}
return 0.into();
}

unsafe extern "C" fn drift_limits(fighter: &mut L2CFighterCommon) -> L2CValue {
let start_y = fighter.get_param_float("param_special_n", "air_start_speed_mul_y");
let air_accel_y = fighter.get_param_float("param_special_n", "air_start_accel_y");
let air_stable_y = fighter.get_param_float("param_special_n", "air_start_max_speed_y");
KineticModule::change_kinetic(fighter.module_accessor, *FIGHTER_KINETIC_TYPE_MOTION_FALL);
sv_kinetic_energy!(controller_set_accel_x_mul, fighter, 0.04);
sv_kinetic_energy!(controller_set_accel_x_add, fighter, 0.009);
sv_kinetic_energy!(set_stable_speed, fighter, FIGHTER_KINETIC_ENERGY_ID_CONTROL, 0.4, 0.0);
GroundModule::set_correct(fighter.module_accessor, GroundCorrectKind(*GROUND_CORRECT_KIND_AIR));
sv_kinetic_energy!(set_accel, fighter, FIGHTER_KINETIC_ENERGY_ID_GRAVITY, -air_accel_y);
sv_kinetic_energy!(set_stable_speed, fighter, FIGHTER_KINETIC_ENERGY_ID_GRAVITY, air_stable_y);
0.into()
}

unsafe extern "C" fn cancel_check(fighter: &mut L2CFighterCommon) -> L2CValue {
if fighter.is_button_off(Buttons::Special) {fighter.change_status(FIGHTER_BAYONETTA_STATUS_KIND_SPECIAL_N_FIRE.into(), false.into()); }
//if fighter.get_int(*FIGHTER_BAYONETTA_STATUS_WORK_ID_SPECIAL_N_INT_CANCEL_FRAME) == 0 {
if fighter.is_situation(*SITUATION_KIND_GROUND) {
if fighter.is_cat_flag(Cat2::StickEscapeF) {
VarModule::set_int(fighter.battle_object, vars::bayonetta::instance::SPECIAL_N_CANCEL_TYPE, *FIGHTER_STATUS_KIND_ESCAPE_F);
Expand All @@ -218,30 +223,47 @@ unsafe extern "C" fn cancel_check(fighter: &mut L2CFighterCommon) -> L2CValue {
return true.into()
}
}
//} else {WorkModule::dec_int(fighter.module_accessor, *FIGHTER_BAYONETTA_STATUS_WORK_ID_SPECIAL_N_INT_CANCEL_FRAME); }
return false.into();
}

unsafe extern "C" fn var_reset(fighter: &mut L2CFighterCommon) -> L2CValue {
let special_lag = fighter.get_float(*FIGHTER_BAYONETTA_INSTANCE_WORK_ID_FLOAT_SPECIAL_LANDING_FRAME);
let cancel_frame = fighter.get_int(*FIGHTER_BAYONETTA_STATUS_WORK_ID_SPECIAL_N_INT_CANCEL_FRAME);
if special_lag > 0.0 { //if you cancel always set special lag as the cancel frame
if fighter.global_table[STATUS_KIND].get_i32() == statuses::bayonetta::SPECIAL_N_CANCEL {
// applies special lag if applicable
let frames_to_cancel = cancel_frame.max(special_lag as i32 - fighter.status_frame()); //frames left before cancel
fighter.set_int(frames_to_cancel, *FIGHTER_BAYONETTA_STATUS_WORK_ID_SPECIAL_N_INT_CANCEL_FRAME);
fighter.set_float(0.0, *FIGHTER_BAYONETTA_INSTANCE_WORK_ID_FLOAT_SPECIAL_LANDING_FRAME);
lua_args!(fighter, MA_MSC_CMD_CANCEL_UNABLE_CANCEL);
smash::app::sv_module_access::cancel(fighter.lua_state_agent);
fighter.set_float(0.0, *FIGHTER_BAYONETTA_INSTANCE_WORK_ID_FLOAT_SPECIAL_LANDING_FRAME);
fighter.set_int(0, *FIGHTER_BAYONETTA_INSTANCE_WORK_ID_INT_SPECIAL_AIR_S_USED_COUNT);
fighter.set_int(0, *FIGHTER_BAYONETTA_INSTANCE_WORK_ID_INT_SPECIAL_AIR_S_REUSE_FRAME);
fighter.off_flag(*FIGHTER_BAYONETTA_INSTANCE_WORK_ID_FLAG_DISABLE_AIR_SPECIAL_S);
fighter.set_int(0, *FIGHTER_BAYONETTA_INSTANCE_WORK_ID_INT_SPECIAL_HI_USED_COUNT);
fighter.off_flag(*FIGHTER_BAYONETTA_INSTANCE_WORK_ID_FLAG_DISABLE_AIR_SPECIAL_HI);
fighter.off_flag(*FIGHTER_BAYONETTA_INSTANCE_WORK_ID_FLAG_SPECIAL_HI_AFTER_ACTION);
return 0.into();
}

unsafe extern "C" fn cancel_motion(fighter: &mut L2CFighterCommon) -> L2CValue {
if fighter.is_situation(*SITUATION_KIND_GROUND) {
let special_lag = fighter.get_float(*FIGHTER_BAYONETTA_INSTANCE_WORK_ID_FLOAT_SPECIAL_LANDING_FRAME);
let act_frame_param = fighter.get_param_int("param_special_n", "cancel_frame");
let cancel_frame = fighter.get_int(*FIGHTER_BAYONETTA_STATUS_WORK_ID_SPECIAL_N_INT_CANCEL_FRAME);
KineticModule::change_kinetic(fighter.module_accessor, *FIGHTER_KINETIC_TYPE_GROUND_STOP);
GroundModule::set_correct(fighter.module_accessor, GroundCorrectKind(*GROUND_CORRECT_KIND_GROUND_CLIFF_STOP_ATTACK));
if StatusModule::is_situation_changed(fighter.module_accessor) {
if special_lag > 1.0 {
let remaining_lag = (act_frame_param + cancel_frame) as f32;
fighter.set_float(special_lag - remaining_lag, *FIGHTER_BAYONETTA_INSTANCE_WORK_ID_FLOAT_SPECIAL_LANDING_FRAME);
fighter.change_status(FIGHTER_STATUS_KIND_LANDING_FALL_SPECIAL.into(), false.into());
} else { //landing during cancel goes into either special lag anim or normal land cancel anim
fighter.change_status(FIGHTER_STATUS_KIND_LANDING.into(), false.into());
}
}
fighter.set_int(0, *FIGHTER_BAYONETTA_INSTANCE_WORK_ID_INT_SPECIAL_AIR_S_USED_COUNT);
fighter.set_int(0, *FIGHTER_BAYONETTA_INSTANCE_WORK_ID_INT_SPECIAL_AIR_S_REUSE_FRAME);
fighter.off_flag(*FIGHTER_BAYONETTA_INSTANCE_WORK_ID_FLAG_DISABLE_AIR_SPECIAL_S);
fighter.set_int(0, *FIGHTER_BAYONETTA_INSTANCE_WORK_ID_INT_SPECIAL_HI_USED_COUNT);
fighter.off_flag(*FIGHTER_BAYONETTA_INSTANCE_WORK_ID_FLAG_DISABLE_AIR_SPECIAL_HI);
fighter.off_flag(*FIGHTER_BAYONETTA_INSTANCE_WORK_ID_FLAG_SPECIAL_HI_AFTER_ACTION);
} else if StatusModule::is_changing(fighter.module_accessor) {
let start_y = fighter.get_param_float("param_special_n", "air_start_speed_mul_y");
let air_accel_y = fighter.get_param_float("param_special_n", "air_start_accel_y");
let air_stable_y = fighter.get_param_float("param_special_n", "air_start_max_speed_y");
KineticModule::change_kinetic(fighter.module_accessor, *FIGHTER_KINETIC_TYPE_AIR_STOP);
GroundModule::set_correct(fighter.module_accessor, GroundCorrectKind(*GROUND_CORRECT_KIND_AIR));
sv_kinetic_energy!(set_speed_mul, fighter, FIGHTER_KINETIC_ENERGY_ID_GRAVITY, start_y);
sv_kinetic_energy!(set_accel, fighter, FIGHTER_KINETIC_ENERGY_ID_GRAVITY, -air_accel_y);
sv_kinetic_energy!(set_stable_speed, fighter, FIGHTER_KINETIC_ENERGY_ID_GRAVITY, air_stable_y);
}
return 0.into();
0.into()
}

pub fn install(agent: &mut Agent) {
Expand Down
16 changes: 16 additions & 0 deletions fighters/bayonetta/src/status/wait.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
use super::*;

// FIGHTER_STATUS_KIND_WAIT
unsafe extern "C" fn wait_main(fighter: &mut L2CFighterCommon) -> L2CValue {
let status = fighter.global_table[PREV_STATUS_KIND].get_i32();
if status == statuses::bayonetta::SPECIAL_S_KICK {
fighter.global_table[PREV_STATUS_KIND].assign(&L2CValue::I32(*FIGHTER_BAYONETTA_STATUS_KIND_SPECIAL_S_HOLD_END));
} else if status == statuses::bayonetta::SPECIAL_N_CANCEL {
fighter.global_table[PREV_STATUS_KIND].assign(&L2CValue::I32(*FIGHTER_BAYONETTA_STATUS_KIND_SPECIAL_N_END));
} //fixes glitched idle without having to rewrite EVERYTHING
smashline::original_status(Main, fighter, *FIGHTER_STATUS_KIND_WAIT)(fighter)
}

pub fn install(agent: &mut Agent) {
agent.status(Main, *FIGHTER_STATUS_KIND_WAIT, wait_main);
}
1 change: 1 addition & 0 deletions romfs/source/fighter/bayonetta/param/vl.prcxml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
<int hash="charge_frame_max">150</int>
<int hash="cancel_frame">7</int>
<float hash="air_start_speed_mul_x">0.35</float>
<float hash="air_start_speed_mul_y">0.35</float>
</struct>
<hash40 index="1">dummy</hash40>
<hash40 index="2">dummy</hash40>
Expand Down

0 comments on commit e32de16

Please sign in to comment.