diff --git a/src/common/consts.rs b/src/common/consts.rs index fd2c762..6e71661 100644 --- a/src/common/consts.rs +++ b/src/common/consts.rs @@ -12,7 +12,6 @@ pub const NONE: i32 = 0; /* DI */ 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"}; /// Mash Attack States #[repr(i32)] @@ -69,8 +68,6 @@ impl Attack { } } -// 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 #[repr(i32)] #[derive(Debug, Copy, Clone, PartialEq)] @@ -99,15 +96,45 @@ impl From<i32> for LedgeOption { } } -// pub const std::vector<std::string> ledge_items{"None", "Random", "Ntrl. Getup", "Roll", "Jump", "Attack"}; +impl LedgeOption { + pub fn into_status(&self) -> Option<i32> { + Some( + match self { + LedgeOption::Neutral => status = *FIGHTER_STATUS_KIND_CLIFF_CLIMB, + LedgeOption::Roll => status = *FIGHTER_STATUS_KIND_CLIFF_ESCAPE, + LedgeOption::Jump => status = *FIGHTER_STATUS_KIND_CLIFF_JUMP1, + LedgeOption::Attack => status = *FIGHTER_STATUS_KIND_CLIFF_ATTACK, + _ => return None, + } + ) + } +} // Tech Option -pub const RANDOM_TECH: i32 = 1; -pub const TECH_IN_PLACE: i32 = 2; -pub const TECH_ROLL: i32 = 3; -#[allow(dead_code)] -pub const TECH_MISS: i32 = 4; -// pub const std::vector<std::string> tech_items{"None", "Random", "In-Place", "Roll", "Miss Tech"}; +#[repr(i32)] +#[derive(Debug, Clone, Copy, PartialEq)] +pub enum TechOption { + None = 0, + Random = 1, + InPlace = 2, + Roll = 3, + Miss = 4 +} + +impl From<i32> for TechOption { + fn from(x: i32) -> Self { + use TechOption::*; + + match x { + 0 => None, + 1 => Random, + 2 => InPlace, + 3 => Roll, + 4 => Miss, + _ => panic!("Invalid tech option {}", x) + } + } +} /// Mash States #[repr(i32)] @@ -135,8 +162,6 @@ impl From<i32> for Mash { } } -// pub const std::vector<std::string> mash_items{"None", "Airdodge", "Jump", "Attack", "Spotdodge", "Random"}; - /// Shield States #[repr(i32)] #[derive(Debug, Clone, Copy, PartialEq)] @@ -146,8 +171,6 @@ pub enum Shield { Hold = 2, } -// pub const std::vector<std::string> shield_items{"None", "Infinite", "Hold"}; - // Defensive States #[repr(i32)] #[derive(Debug, Clone, Copy, PartialEq)] @@ -176,15 +199,13 @@ impl From<i32> for Defensive { } } -// pub const std::vector<std::string> defensive_items{"None", "Random", "Spotdodge", "Roll", "Jab", "Flash Shield"}; - #[repr(C)] pub struct TrainingModpackMenu { pub hitbox_vis: bool, pub di_state: i32, pub mash_attack_state: Attack, pub ledge_state: LedgeOption, - pub tech_state: i32, + pub tech_state: TechOption, pub mash_state: Mash, pub shield_state: Shield, pub defensive_state: Defensive, diff --git a/src/common/mod.rs b/src/common/mod.rs index a6d1ea9..fab2a5a 100644 --- a/src/common/mod.rs +++ b/src/common/mod.rs @@ -10,7 +10,7 @@ pub static mut MENU_STRUCT: consts::TrainingModpackMenu = consts::TrainingModpac di_state: NONE, mash_attack_state: Attack::Nair, ledge_state: LedgeOption::Random, - tech_state: RANDOM_TECH, + tech_state: TechOption::Random, mash_state: Mash::None, shield_state: Shield::None, defensive_state: Defensive::Random, diff --git a/src/training/ledge.rs b/src/training/ledge.rs index 50f5d64..d60e1ac 100644 --- a/src/training/ledge.rs +++ b/src/training/ledge.rs @@ -26,12 +26,8 @@ pub unsafe fn force_option(module_accessor: &mut app::BattleObjectModuleAccessor ledge_case = MENU.ledge_state; } - match ledge_case { - LedgeOption::Neutral => status = *FIGHTER_STATUS_KIND_CLIFF_CLIMB, - LedgeOption::Roll => status = *FIGHTER_STATUS_KIND_CLIFF_ESCAPE, - LedgeOption::Jump => status = *FIGHTER_STATUS_KIND_CLIFF_JUMP1, - LedgeOption::Attack => status = *FIGHTER_STATUS_KIND_CLIFF_ATTACK, - _ => (), + if let Some(new_status) = ledge_case.into_status() { + status = new_status; } StatusModule::change_status_request_from_script(module_accessor, status, true); diff --git a/src/training/tech.rs b/src/training/tech.rs index 1bb402e..dbcd753 100644 --- a/src/training/tech.rs +++ b/src/training/tech.rs @@ -11,7 +11,7 @@ pub unsafe fn init_settings( if is_training_mode() && is_operation_cpu(module_accessor) { if status_kind == FIGHTER_STATUS_KIND_DOWN { match MENU.tech_state { - RANDOM_TECH => { + TechOption::Random => { let random_statuses = vec![ *FIGHTER_STATUS_KIND_DOWN, *FIGHTER_STATUS_KIND_PASSIVE, @@ -30,7 +30,7 @@ pub unsafe fn init_settings( return Some(()); } } - TECH_IN_PLACE => { + TechOption::InPlace => { StatusModule::change_status_request_from_script( module_accessor, *FIGHTER_STATUS_KIND_PASSIVE, @@ -38,7 +38,7 @@ pub unsafe fn init_settings( ); return Some(()); } - TECH_ROLL => { + TechOption::Roll => { StatusModule::change_status_request_from_script( module_accessor, *FIGHTER_STATUS_KIND_PASSIVE_FB, @@ -89,7 +89,7 @@ pub unsafe fn get_command_flag_cat( _category: i32, flag: &mut i32, ) { - if MENU.tech_state != NONE && is_training_mode() && is_operation_cpu(module_accessor) { + if MENU.tech_state != TechOption::None && is_training_mode() && is_operation_cpu(module_accessor) { let prev_status = StatusModule::prev_status_kind(module_accessor, 0) as i32; let status = StatusModule::status_kind(module_accessor) as i32; if [ @@ -140,7 +140,7 @@ pub unsafe fn change_motion( module_accessor: &mut app::BattleObjectModuleAccessor, motion_kind: u64, ) -> Option<u64> { - if MENU.tech_state != NONE && is_training_mode() && is_operation_cpu(module_accessor) { + if MENU.tech_state != TechOption::None && is_training_mode() && is_operation_cpu(module_accessor) { if [hash40("passive_stand_f"), hash40("passive_stand_b")].contains(&motion_kind) { if app::sv_math::rand(hash40("fighter"), 2) != 0 { return Some(hash40("passive_stand_f"));