diff --git a/fighters/bayonetta/src/acmd/specials.rs b/fighters/bayonetta/src/acmd/specials.rs
index 47260eac40..9670c04a65 100644
--- a/fighters/bayonetta/src/acmd/specials.rs
+++ b/fighters/bayonetta/src/acmd/specials.rs
@@ -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) {
diff --git a/fighters/bayonetta/src/opff.rs b/fighters/bayonetta/src/opff.rs
index 6faa7e7ada..5101532b85 100644
--- a/fighters/bayonetta/src/opff.rs
+++ b/fighters/bayonetta/src/opff.rs
@@ -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) {
diff --git a/fighters/bayonetta/src/status/mod.rs b/fighters/bayonetta/src/status/mod.rs
index 88338f6289..fc5b905023 100644
--- a/fighters/bayonetta/src/status/mod.rs
+++ b/fighters/bayonetta/src/status/mod.rs
@@ -10,6 +10,7 @@ mod specialn;
mod specials;
mod specialhi;
mod jumpaerial;
+mod wait;
pub fn install(agent: &mut Agent) {
attack::install(agent);
@@ -21,4 +22,5 @@ pub fn install(agent: &mut Agent) {
specials::install(agent);
specialhi::install(agent);
jumpaerial::install(agent);
+ wait::install(agent);
}
\ No newline at end of file
diff --git a/fighters/bayonetta/src/status/specialn.rs b/fighters/bayonetta/src/status/specialn.rs
index 67db26e977..c73ba73afc 100644
--- a/fighters/bayonetta/src/status/specialn.rs
+++ b/fighters/bayonetta/src/status/specialn.rs
@@ -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 _))
}
@@ -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"));
@@ -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);
@@ -127,37 +124,49 @@ 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()
}
@@ -165,36 +174,32 @@ 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);
@@ -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) {
diff --git a/fighters/bayonetta/src/status/wait.rs b/fighters/bayonetta/src/status/wait.rs
new file mode 100644
index 0000000000..d305ada3da
--- /dev/null
+++ b/fighters/bayonetta/src/status/wait.rs
@@ -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);
+}
\ No newline at end of file
diff --git a/romfs/source/fighter/bayonetta/param/vl.prcxml b/romfs/source/fighter/bayonetta/param/vl.prcxml
index ca028dce53..e8a65fc3a0 100644
--- a/romfs/source/fighter/bayonetta/param/vl.prcxml
+++ b/romfs/source/fighter/bayonetta/param/vl.prcxml
@@ -24,6 +24,7 @@
150
7
0.35
+ 0.35
dummy
dummy