1
0
Fork 0
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:
jam1garner 2020-05-16 01:12:06 -04:00
parent 798e18a71a
commit 4342f626f8
5 changed files with 109 additions and 63 deletions

View file

@ -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,

View file

@ -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,

View file

@ -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)
}

View file

@ -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,
}
}
}

View file

@ -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