mirror of
https://github.com/jugeeya/UltimateTrainingModpack.git
synced 2025-03-14 18:36:11 +00:00
Move mash_attack_state from constants to an enum
This commit is contained in:
parent
798e18a71a
commit
4342f626f8
5 changed files with 109 additions and 63 deletions
|
@ -1,3 +1,5 @@
|
|||
use smash::lib::lua_const::*;
|
||||
|
||||
pub const NONE: i32 = 0;
|
||||
|
||||
// Side Taunt
|
||||
|
@ -12,18 +14,60 @@ pub const NONE: i32 = 0;
|
|||
pub const DI_RANDOM_IN_AWAY: i32 = 9;
|
||||
// const std::vector<std::string> di_items{"None", "Out", "Up Out", "Up", "Up In", "In", "Down In", "Down", "Down Out", "Random"};
|
||||
|
||||
// Attack Option
|
||||
pub const MASH_NAIR: i32 = 0;
|
||||
pub const MASH_FAIR: i32 = 1;
|
||||
pub const MASH_BAIR: i32 = 2;
|
||||
pub const MASH_UPAIR: i32 = 3;
|
||||
pub const MASH_DAIR: i32 = 4;
|
||||
pub const MASH_NEUTRAL_B: i32 = 5;
|
||||
pub const MASH_SIDE_B: i32 = 6;
|
||||
pub const MASH_UP_B: i32 = 7;
|
||||
pub const MASH_DOWN_B: i32 = 8;
|
||||
pub const MASH_UP_SMASH: i32 = 9;
|
||||
pub const MASH_GRAB: i32 = 10;
|
||||
#[repr(i32)]
|
||||
#[derive(PartialEq, Debug, Copy, Clone)]
|
||||
pub enum Attack {
|
||||
Nair = 0,
|
||||
Fair = 1,
|
||||
Bair = 2,
|
||||
UpAir = 3,
|
||||
Dair = 4,
|
||||
NeutralB = 5,
|
||||
SideB = 6,
|
||||
UpB = 7,
|
||||
DownB = 8,
|
||||
UpSmash = 9,
|
||||
Grab = 10
|
||||
}
|
||||
|
||||
impl From<i32> for Attack {
|
||||
fn from(x: i32) -> Self {
|
||||
use Attack::*;
|
||||
|
||||
match x {
|
||||
0 => Nair,
|
||||
1 => Fair,
|
||||
2 => Bair,
|
||||
3 => UpAir,
|
||||
4 => Dair,
|
||||
5 => NeutralB,
|
||||
6 => SideB,
|
||||
7 => UpB,
|
||||
8 => DownB,
|
||||
9 => UpSmash,
|
||||
10 => Grab,
|
||||
_ => panic!("Invalid mash state {}", x)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Attack {
|
||||
pub fn into_attack_air_kind(&self) -> Option<i32> {
|
||||
use Attack::*;
|
||||
|
||||
Some(
|
||||
match self {
|
||||
Nair => *FIGHTER_COMMAND_ATTACK_AIR_KIND_N,
|
||||
Fair => *FIGHTER_COMMAND_ATTACK_AIR_KIND_F,
|
||||
Bair => *FIGHTER_COMMAND_ATTACK_AIR_KIND_B,
|
||||
Dair => *FIGHTER_COMMAND_ATTACK_AIR_KIND_LW,
|
||||
UpAir => *FIGHTER_COMMAND_ATTACK_AIR_KIND_HI,
|
||||
_ => return None,
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// pub const std::vector<std::string> attack_items{"Neutral Air", "Forward Air", "Back Air", "Up Air", "Down Air", "Neutral B", "Side B", "Up B", "Down B", "Up Smash", "Grab"};
|
||||
|
||||
// Ledge Option
|
||||
|
@ -67,7 +111,7 @@ pub const DEFENSIVE_SHIELD: i32 = 5;
|
|||
pub struct TrainingModpackMenu {
|
||||
pub hitbox_vis: bool,
|
||||
pub di_state: i32,
|
||||
pub attack_state: i32,
|
||||
pub mash_attack_state: Attack,
|
||||
pub ledge_state: i32,
|
||||
pub tech_state: i32,
|
||||
pub mash_state: i32,
|
||||
|
|
|
@ -8,7 +8,7 @@ use smash::hash40;
|
|||
pub static mut MENU_STRUCT: consts::TrainingModpackMenu = consts::TrainingModpackMenu {
|
||||
hitbox_vis: true,
|
||||
di_state: NONE,
|
||||
attack_state: MASH_NAIR,
|
||||
mash_attack_state: Attack::Nair,
|
||||
ledge_state: RANDOM_LEDGE,
|
||||
tech_state: RANDOM_TECH,
|
||||
mash_state: NONE,
|
||||
|
|
52
src/lib.rs
52
src/lib.rs
|
@ -22,7 +22,7 @@ use smash::lua2cpp::L2CFighterCommon;
|
|||
pub unsafe fn handle_sub_guard_cont(fighter: &mut L2CFighterCommon) -> L2CValue {
|
||||
let module_accessor = sv_system::battle_object_module_accessor(fighter.lua_state_agent);
|
||||
if is_training_mode() && is_operation_cpu(module_accessor) {
|
||||
if MENU.mash_state == MASH_ATTACK && MENU.attack_state == MASH_GRAB {
|
||||
if MENU.mash_state == MASH_ATTACK && MENU.mash_attack_state == Attack::Grab {
|
||||
if StatusModule::prev_status_kind(module_accessor, 0) == FIGHTER_STATUS_KIND_GUARD_DAMAGE {
|
||||
if WorkModule::get_int(
|
||||
module_accessor,
|
||||
|
@ -54,33 +54,37 @@ pub unsafe fn handle_sub_guard_cont(fighter: &mut L2CFighterCommon) -> L2CValue
|
|||
}
|
||||
}
|
||||
}
|
||||
if MENU.mash_state == MASH_UP_B {
|
||||
if StatusModule::prev_status_kind(module_accessor, 0) == FIGHTER_STATUS_KIND_GUARD_DAMAGE {
|
||||
// if WorkModule::is_enable_transition_term(
|
||||
// module_accessor,
|
||||
// *FIGHTER_STATUS_TRANSITION_TERM_ID_CONT_JUMP_SQUAT_BUTTON,
|
||||
// ) {
|
||||
fighter.fighter_base.change_status(
|
||||
L2CValue::new_int(*FIGHTER_STATUS_KIND_SPECIAL_HI as u64),
|
||||
L2CValue::new_bool(false),
|
||||
);
|
||||
// }
|
||||
|
||||
if MENU.mash_state == MASH_ATTACK {
|
||||
if MENU.mash_attack_state == Attack::UpB {
|
||||
if StatusModule::prev_status_kind(module_accessor, 0) == FIGHTER_STATUS_KIND_GUARD_DAMAGE {
|
||||
// if WorkModule::is_enable_transition_term(
|
||||
// module_accessor,
|
||||
// *FIGHTER_STATUS_TRANSITION_TERM_ID_CONT_JUMP_SQUAT_BUTTON,
|
||||
// ) {
|
||||
fighter.fighter_base.change_status(
|
||||
L2CValue::new_int(*FIGHTER_STATUS_KIND_SPECIAL_HI as u64),
|
||||
L2CValue::new_bool(false),
|
||||
);
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
||||
if MENU.mash_state == MASH_UP_SMASH {
|
||||
if StatusModule::prev_status_kind(module_accessor, 0) == FIGHTER_STATUS_KIND_GUARD_DAMAGE {
|
||||
// if WorkModule::is_enable_transition_term(
|
||||
// module_accessor,
|
||||
// *FIGHTER_STATUS_TRANSITION_TERM_ID_CONT_JUMP_SQUAT_BUTTON,
|
||||
// ) {
|
||||
fighter.fighter_base.change_status(
|
||||
L2CValue::new_int(*FIGHTER_STATUS_KIND_ATTACK_HI4_START as u64),
|
||||
L2CValue::new_bool(false),
|
||||
);
|
||||
// }
|
||||
if MENU.mash_attack_state == Attack::UpSmash {
|
||||
if StatusModule::prev_status_kind(module_accessor, 0) == FIGHTER_STATUS_KIND_GUARD_DAMAGE {
|
||||
// if WorkModule::is_enable_transition_term(
|
||||
// module_accessor,
|
||||
// *FIGHTER_STATUS_TRANSITION_TERM_ID_CONT_JUMP_SQUAT_BUTTON,
|
||||
// ) {
|
||||
fighter.fighter_base.change_status(
|
||||
L2CValue::new_int(*FIGHTER_STATUS_KIND_ATTACK_HI4_START as u64),
|
||||
L2CValue::new_bool(false),
|
||||
);
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
original!()(fighter)
|
||||
}
|
||||
|
||||
|
|
|
@ -9,22 +9,15 @@ pub unsafe fn get_attack_air_kind(
|
|||
) -> Option<i32> {
|
||||
if is_training_mode() && is_operation_cpu(module_accessor) {
|
||||
if MENU.mash_state == MASH_ATTACK {
|
||||
match MENU.attack_state {
|
||||
MASH_NAIR => return Some(*FIGHTER_COMMAND_ATTACK_AIR_KIND_N),
|
||||
MASH_FAIR => return Some(*FIGHTER_COMMAND_ATTACK_AIR_KIND_F),
|
||||
MASH_BAIR => return Some(*FIGHTER_COMMAND_ATTACK_AIR_KIND_B),
|
||||
MASH_UPAIR => return Some(*FIGHTER_COMMAND_ATTACK_AIR_KIND_HI),
|
||||
MASH_DAIR => return Some(*FIGHTER_COMMAND_ATTACK_AIR_KIND_LW),
|
||||
_ => (),
|
||||
}
|
||||
}
|
||||
|
||||
if MENU.mash_state == MASH_RANDOM {
|
||||
return Some(app::sv_math::rand(hash40("fighter"), 5) + 1);
|
||||
MENU.mash_attack_state.into_attack_air_kind()
|
||||
} else if MENU.mash_state == MASH_RANDOM {
|
||||
Some(app::sv_math::rand(hash40("fighter"), 5) + 1)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
} else {
|
||||
None
|
||||
}
|
||||
|
||||
None
|
||||
}
|
||||
|
||||
pub unsafe fn get_command_flag_cat(
|
||||
|
@ -56,21 +49,22 @@ pub unsafe fn get_command_flag_cat(
|
|||
}
|
||||
MASH_ATTACK => {
|
||||
if category == FIGHTER_PAD_COMMAND_CATEGORY1 {
|
||||
match MENU.attack_state {
|
||||
MASH_NAIR | MASH_FAIR | MASH_BAIR | MASH_UPAIR | MASH_DAIR => {
|
||||
use Attack::*;
|
||||
|
||||
match MENU.mash_attack_state {
|
||||
Nair | Fair | Bair | UpAir | Dair => {
|
||||
*flag |= *FIGHTER_PAD_CMD_CAT1_FLAG_ATTACK_N;
|
||||
// If we are performing the attack OOS we also need to jump
|
||||
if is_in_shieldstun(module_accessor) {
|
||||
*flag |= *FIGHTER_PAD_CMD_CAT1_FLAG_JUMP_BUTTON;
|
||||
}
|
||||
}
|
||||
MASH_NEUTRAL_B => *flag |= *FIGHTER_PAD_CMD_CAT1_FLAG_SPECIAL_N,
|
||||
MASH_SIDE_B => *flag |= *FIGHTER_PAD_CMD_CAT1_FLAG_SPECIAL_S,
|
||||
MASH_UP_B => *flag |= *FIGHTER_PAD_CMD_CAT1_FLAG_SPECIAL_HI,
|
||||
MASH_DOWN_B => *flag |= *FIGHTER_PAD_CMD_CAT1_FLAG_SPECIAL_LW,
|
||||
MASH_UP_SMASH => *flag |= *FIGHTER_PAD_CMD_CAT1_FLAG_ATTACK_HI4,
|
||||
MASH_GRAB => *flag |= *FIGHTER_PAD_CMD_CAT1_FLAG_CATCH,
|
||||
_ => (),
|
||||
NeutralB => *flag |= *FIGHTER_PAD_CMD_CAT1_FLAG_SPECIAL_N,
|
||||
SideB => *flag |= *FIGHTER_PAD_CMD_CAT1_FLAG_SPECIAL_S,
|
||||
UpB => *flag |= *FIGHTER_PAD_CMD_CAT1_FLAG_SPECIAL_HI,
|
||||
DownB => *flag |= *FIGHTER_PAD_CMD_CAT1_FLAG_SPECIAL_LW,
|
||||
UpSmash => *flag |= *FIGHTER_PAD_CMD_CAT1_FLAG_ATTACK_HI4,
|
||||
Grab => *flag |= *FIGHTER_PAD_CMD_CAT1_FLAG_CATCH,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -43,14 +43,18 @@ pub unsafe fn should_hold_shield(module_accessor: &mut app::BattleObjectModuleAc
|
|||
|
||||
// We will only drop shield if we are in shieldstun and our attack can be performed OOS
|
||||
if MENU.mash_state == MASH_ATTACK {
|
||||
if [MASH_NEUTRAL_B, MASH_SIDE_B, MASH_DOWN_B].contains(&MENU.attack_state) {
|
||||
if [Attack::NeutralB, Attack::SideB, Attack::DownB].contains(&MENU.mash_attack_state) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if [MASH_SPOTDODGE, MASH_GRAB].contains(&MENU.attack_state) {
|
||||
if MENU.mash_attack_state == Attack::Grab {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if MENU.mash_state == MASH_SPOTDODGE {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
false
|
||||
|
|
Loading…
Add table
Reference in a new issue