mirror of
https://github.com/jugeeya/UltimateTrainingModpack.git
synced 2024-11-28 04:44:06 +00:00
Fix DI in/away errors
This commit is contained in:
parent
a892cf8326
commit
716300b01c
5 changed files with 35 additions and 25 deletions
|
@ -54,8 +54,6 @@ impl From<i32> for Direction {
|
|||
}
|
||||
}
|
||||
|
||||
//pub static FIGHTER_FACING_LEFT: f32 = 1.0;
|
||||
pub static FIGHTER_FACING_RIGHT: f32 = -1.0;
|
||||
pub static ANGLE_NONE: f64 = -69.0;
|
||||
pub fn direction_to_angle(direction: Direction) -> f64 {
|
||||
match direction {
|
||||
|
|
|
@ -41,6 +41,15 @@ pub fn get_category(module_accessor: &mut app::BattleObjectModuleAccessor) -> i3
|
|||
return (module_accessor.info >> 28) as u8 as i32;
|
||||
}
|
||||
|
||||
pub unsafe fn get_module_accessor(fighter_id: FighterId) -> *mut app::BattleObjectModuleAccessor {
|
||||
let entry_id_int = fighter_id as i32;
|
||||
let entry_id = app::FighterEntryID(entry_id_int);
|
||||
let mgr = *(FIGHTER_MANAGER_ADDR as *mut *mut app::FighterManager);
|
||||
let fighter_entry = FighterManager::get_fighter_entry(mgr, entry_id) as *mut app::FighterEntry;
|
||||
let current_fighter_id = FighterEntry::current_fighter_id(fighter_entry);
|
||||
app::sv_battle_object::module_accessor(current_fighter_id as u32)
|
||||
}
|
||||
|
||||
pub unsafe fn is_fighter(module_accessor: &mut app::BattleObjectModuleAccessor) -> bool {
|
||||
get_category(module_accessor) == BATTLE_OBJECT_CATEGORY_FIGHTER
|
||||
}
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
use crate::common::consts::FighterId;
|
||||
use crate::common::FIGHTER_MANAGER_ADDR;
|
||||
use crate::common::*;
|
||||
use crate::training::*;
|
||||
|
||||
|
@ -28,15 +27,6 @@ unsafe fn was_in_shieldstun(module_accessor: *mut app::BattleObjectModuleAccesso
|
|||
prev_status == FIGHTER_STATUS_KIND_GUARD_DAMAGE
|
||||
}
|
||||
|
||||
unsafe fn get_module_accessor(fighter_id: FighterId) -> *mut app::BattleObjectModuleAccessor {
|
||||
let entry_id_int = fighter_id as i32;
|
||||
let entry_id = app::FighterEntryID(entry_id_int);
|
||||
let mgr = *(FIGHTER_MANAGER_ADDR as *mut *mut app::FighterManager);
|
||||
let fighter_entry = FighterManager::get_fighter_entry(mgr, entry_id) as *mut app::FighterEntry;
|
||||
let current_fighter_id = FighterEntry::current_fighter_id(fighter_entry);
|
||||
app::sv_battle_object::module_accessor(current_fighter_id as u32)
|
||||
}
|
||||
|
||||
macro_rules! actionable_statuses {
|
||||
() => {
|
||||
vec![
|
||||
|
|
|
@ -7,8 +7,6 @@ use smash::lib::lua_const::*;
|
|||
use smash::lib::L2CValue;
|
||||
use smash::lua2cpp::L2CFighterCommon;
|
||||
|
||||
pub static mut DI_ANGLE: f64 = 0.0;
|
||||
|
||||
#[skyline::hook(replace = smash::lua2cpp::L2CFighterCommon_FighterStatusDamage__correctDamageVectorCommon)]
|
||||
pub unsafe fn handle_correct_damage_vector_common(
|
||||
fighter: &mut L2CFighterCommon,
|
||||
|
@ -33,25 +31,31 @@ unsafe fn mod_handle_di(fighter: &mut L2CFighterCommon, _arg1: L2CValue) {
|
|||
}
|
||||
|
||||
// Either left, right, or none
|
||||
DI_ANGLE = get_angle(MENU.di_state);
|
||||
// Nothig to do on no DI
|
||||
if DI_ANGLE == ANGLE_NONE {
|
||||
let mut angle = get_angle(MENU.di_state);
|
||||
// Nothing to do on no DI
|
||||
if angle == ANGLE_NONE {
|
||||
return;
|
||||
}
|
||||
|
||||
// If facing left, reverse angle
|
||||
if PostureModule::lr(module_accessor) != FIGHTER_FACING_RIGHT {
|
||||
DI_ANGLE -= PI;
|
||||
let launch_speed_x = KineticEnergy::get_speed_x(
|
||||
KineticModule::get_energy(
|
||||
module_accessor,
|
||||
*FIGHTER_KINETIC_ENERGY_ID_DAMAGE
|
||||
) as *mut smash::app::KineticEnergy);
|
||||
|
||||
// If we're launched left, reverse stick X
|
||||
if launch_speed_x < 0.0 {
|
||||
angle = PI - angle;
|
||||
}
|
||||
|
||||
WorkModule::set_float(
|
||||
module_accessor,
|
||||
DI_ANGLE.cos() as f32,
|
||||
angle.cos() as f32,
|
||||
*FIGHTER_STATUS_DAMAGE_WORK_FLOAT_VECOR_CORRECT_STICK_X,
|
||||
);
|
||||
WorkModule::set_float(
|
||||
module_accessor,
|
||||
DI_ANGLE.sin() as f32,
|
||||
angle.sin() as f32,
|
||||
*FIGHTER_STATUS_DAMAGE_WORK_FLOAT_VECOR_CORRECT_STICK_Y,
|
||||
);
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ use crate::common::consts::*;
|
|||
use crate::common::*;
|
||||
use core::f64::consts::PI;
|
||||
use smash::app::{self, lua_bind::*};
|
||||
use smash::lib::lua_const::*;
|
||||
use smash::hash40;
|
||||
|
||||
static mut STICK_DIRECTION: Direction = Direction::None;
|
||||
|
@ -51,9 +52,17 @@ unsafe fn get_angle(module_accessor: &mut app::BattleObjectModuleAccessor) -> f6
|
|||
return ANGLE_NONE;
|
||||
}
|
||||
|
||||
// If facing left, reverse angle
|
||||
if PostureModule::lr(module_accessor) != FIGHTER_FACING_RIGHT {
|
||||
angle -= PI;
|
||||
// TODO: if left_stick is used for something other than
|
||||
// directional airdodge, this may not make sense.
|
||||
let launch_speed_x = KineticEnergy::get_speed_x(
|
||||
KineticModule::get_energy(
|
||||
module_accessor,
|
||||
*FIGHTER_KINETIC_ENERGY_ID_DAMAGE
|
||||
) as *mut smash::app::KineticEnergy);
|
||||
|
||||
// If we're launched left, reverse stick X
|
||||
if launch_speed_x < 0.0 {
|
||||
angle = PI - angle;
|
||||
}
|
||||
|
||||
angle
|
||||
|
|
Loading…
Reference in a new issue