mirror of
https://github.com/jugeeya/UltimateTrainingModpack.git
synced 2024-11-27 20:34:03 +00:00
Update infinite shield logic to work for modded gameplay (#460)
* update infinite shield logic uses the originally loaded shield mul param rather than a hardcoded vanilla param that may be different than what the game (read: mods) had loaded initially. * use option instead of a magic float
This commit is contained in:
parent
37360c787a
commit
1a9dea2f52
2 changed files with 24 additions and 1 deletions
|
@ -86,6 +86,9 @@ pub unsafe fn handle_get_command_flag_cat(
|
|||
) -> i32 {
|
||||
let mut flag = original!()(module_accessor, category);
|
||||
|
||||
// this must be run even outside of training mode
|
||||
// because otherwise it won't reset the shield_damage_mul
|
||||
// back to "normal" once you leave training mode.
|
||||
if category == FIGHTER_PAD_COMMAND_CATEGORY1 {
|
||||
shield::param_installer();
|
||||
}
|
||||
|
|
|
@ -145,13 +145,33 @@ fn handle_shield_decay(param_type: u64, param_hash: u64) -> Option<f32> {
|
|||
None
|
||||
}
|
||||
|
||||
/// This is the cached shield damage multiplier.
|
||||
/// Vanilla is 1.19, but mods can change this.
|
||||
static mut CACHED_SHIELD_DAMAGE_MUL: Option<f32> = None;
|
||||
|
||||
|
||||
/// sets/resets the shield_damage_mul within
|
||||
/// the game's internal structure.
|
||||
///
|
||||
/// `common_params` is effectively a mutable reference
|
||||
/// to the game's own internal data structure for params.
|
||||
pub unsafe fn param_installer() {
|
||||
if crate::training::COMMON_PARAMS as usize != 0 {
|
||||
let common_params = &mut *crate::training::COMMON_PARAMS;
|
||||
|
||||
// cache the original shield damage multiplier once
|
||||
if CACHED_SHIELD_DAMAGE_MUL.is_none() {
|
||||
CACHED_SHIELD_DAMAGE_MUL = Some(common_params.shield_damage_mul);
|
||||
}
|
||||
|
||||
if is_training_mode() && (MENU.shield_state == Shield::Infinite) {
|
||||
// if you are in training mode and have infinite shield enabled,
|
||||
// set the game's shield_damage_mul to 0.0
|
||||
common_params.shield_damage_mul = 0.0;
|
||||
} else {
|
||||
common_params.shield_damage_mul = 1.19;
|
||||
// reset the game's shield_damage_mul back to what
|
||||
// it originally was at game boot.
|
||||
common_params.shield_damage_mul = CACHED_SHIELD_DAMAGE_MUL.unwrap();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue