1
0
Fork 0
mirror of https://github.com/jugeeya/UltimateTrainingModpack.git synced 2025-01-20 09:20:13 +00:00

fix tech options

This commit is contained in:
jugeeya 2020-05-23 11:16:15 -07:00
parent 6644fcf9ec
commit e7f661b10a
5 changed files with 37 additions and 73 deletions

View file

@ -330,6 +330,6 @@ pub unsafe fn handle_set_rebound(
}
pub fn hitbox_visualization() {
println!("Applying hitbox visualization mods.");
println!("[Training Modpack] Applying hitbox visualization mods.");
skyline::install_hooks!(handle_attack, handle_catch, handle_set_rebound);
}

View file

@ -18,6 +18,7 @@ fn nro_main(nro: &NroInfo<'_>) {
skyline::install_hooks!(
training::shield::handle_sub_guard_cont,
training::directional_influence::handle_correct_damage_vector_common,
training::tech::handle_change_status
);
}
_ => (),

View file

@ -4,11 +4,12 @@ use skyline::nn::ro::LookupSymbol;
use smash::app::{self, lua_bind::*};
pub mod directional_influence;
pub mod shield;
pub mod tech;
mod ledge;
mod mash;
mod save_states;
pub mod shield;
mod tech;
#[skyline::hook(replace = WorkModule::get_param_float)]
pub unsafe fn handle_get_param_float(
@ -112,36 +113,6 @@ pub unsafe fn handle_check_button_off(
.unwrap_or_else(|| original!()(module_accessor, button))
}
#[skyline::hook(replace = StatusModule::init_settings)]
pub unsafe fn handle_init_settings(
module_accessor: &mut app::BattleObjectModuleAccessor,
situation_kind: i32,
unk1: i32,
unk2: u32,
ground_cliff_check_kind: i32,
unk3: bool,
unk4: i32,
unk5: i32,
unk6: i32,
unk7: i32,
) {
let status_kind = StatusModule::status_kind(module_accessor);
tech::init_settings(module_accessor, status_kind).unwrap_or_else(|| {
original!()(
module_accessor,
situation_kind,
unk1,
unk2,
ground_cliff_check_kind,
unk3,
unk4,
unk5,
unk6,
unk7,
)
})
}
#[skyline::hook(replace = MotionModule::change_motion)]
pub unsafe fn handle_change_motion(
module_accessor: &mut app::BattleObjectModuleAccessor,
@ -153,18 +124,18 @@ pub unsafe fn handle_change_motion(
unk5: bool,
unk6: bool,
) -> u64 {
tech::change_motion(module_accessor, motion_kind).unwrap_or_else(|| {
original!()(
module_accessor,
motion_kind,
unk1,
unk2,
unk3,
unk4,
unk5,
unk6,
)
})
let motion_kind = tech::change_motion(module_accessor, motion_kind).unwrap_or(motion_kind);
original!()(
module_accessor,
motion_kind,
unk1,
unk2,
unk3,
unk4,
unk5,
unk6,
)
}
pub fn training_mods() {
@ -190,7 +161,6 @@ pub fn training_mods() {
handle_get_attack_air_kind,
// Tech options
handle_init_settings,
handle_change_motion,
);

View file

@ -69,8 +69,8 @@ pub unsafe fn save_states(module_accessor: &mut app::BattleObjectModuleAccessor)
*save_state = PosMove;
let left_right =
(*save_state_x > 0.0) as i32 as f32 - (*save_state_x < 0.0) as i32 as f32;
let y_pos = 0.0;
(PostureModule::pos_x(module_accessor) > 0.0) as i32 as f32 - (PostureModule::pos_x(module_accessor) < 0.0) as i32 as f32;
let y_pos = 20.0;
let pos = Vector3f {
x: left_right * 50.0,

View file

@ -3,13 +3,18 @@ use crate::common::*;
use smash::app::{self, lua_bind::*};
use smash::hash40;
use smash::lib::lua_const::*;
use smash::app::sv_system;
use smash::lib::L2CValue;
use smash::lua2cpp::L2CFighterBase;
pub unsafe fn init_settings(
module_accessor: &mut app::BattleObjectModuleAccessor,
status_kind: i32,
) -> Option<()> {
#[skyline::hook(replace = smash::lua2cpp::L2CFighterBase_change_status)]
pub unsafe fn handle_change_status(fighter: &mut L2CFighterBase, status_kind: L2CValue, unk: L2CValue) -> L2CValue {
let mut status_kind = status_kind;
let mut unk = unk;
let module_accessor = sv_system::battle_object_module_accessor(fighter.lua_state_agent);
if is_training_mode() && is_operation_cpu(module_accessor) {
if status_kind == FIGHTER_STATUS_KIND_DOWN {
let status_kind_int = status_kind.try_get_int().unwrap_or(*FIGHTER_STATUS_KIND_WAIT as u64) as i32;
if status_kind_int == FIGHTER_STATUS_KIND_DOWN {
match MENU.tech_state {
TechOption::Random => {
let random_statuses = vec![
@ -22,36 +27,24 @@ pub unsafe fn init_settings(
app::sv_math::rand(hash40("fighter"), random_statuses.len() as i32)
as usize;
if random_statuses[random_status_index] != FIGHTER_STATUS_KIND_DOWN {
StatusModule::change_status_request_from_script(
module_accessor,
random_statuses[random_status_index],
true,
);
return Some(());
status_kind = L2CValue::new_int(random_statuses[random_status_index] as u64);
unk = L2CValue::new_bool(true);
}
}
TechOption::InPlace => {
StatusModule::change_status_request_from_script(
module_accessor,
*FIGHTER_STATUS_KIND_PASSIVE,
true,
);
return Some(());
status_kind = L2CValue::new_int(*FIGHTER_STATUS_KIND_PASSIVE as u64);
unk = L2CValue::new_bool(true);
}
TechOption::Roll => {
StatusModule::change_status_request_from_script(
module_accessor,
*FIGHTER_STATUS_KIND_PASSIVE_FB,
true,
);
return Some(());
status_kind = L2CValue::new_int(*FIGHTER_STATUS_KIND_PASSIVE_FB as u64);
unk = L2CValue::new_bool(true);
}
_ => (),
}
}
}
None
original!()(fighter, status_kind, unk)
}
pub unsafe fn should_perform_defensive_option(
@ -109,7 +102,7 @@ pub unsafe fn get_command_flag_cat(
StatusModule::change_status_request_from_script(
module_accessor,
random_statuses[random_status_index],
true,
false,
);
} else if should_perform_defensive_option(module_accessor, prev_status, status) {
perform_defensive_option(module_accessor, flag);