From ebc046db1d81501ea18ee56ad8d1f291d3e706a2 Mon Sep 17 00:00:00 2001 From: sidschingis Date: Fri, 20 Nov 2020 18:48:14 +0100 Subject: [PATCH] Add Save State Damage Toggle (#176) Added toggle to not overwrite the damage when loading a save state --- .../include/taunt_toggles.hpp | 3 ++ TrainingModpackOverlay/source/gui_main.cpp | 4 ++ src/common/consts.rs | 1 + src/common/mod.rs | 1 + src/training/save_states.rs | 41 +++++++++++++------ 5 files changed, 37 insertions(+), 13 deletions(-) diff --git a/TrainingModpackOverlay/include/taunt_toggles.hpp b/TrainingModpackOverlay/include/taunt_toggles.hpp index 4817ef0..c0bd203 100644 --- a/TrainingModpackOverlay/include/taunt_toggles.hpp +++ b/TrainingModpackOverlay/include/taunt_toggles.hpp @@ -347,3 +347,6 @@ DEFINE_ENUM_CLASS(AttackAngleFlag); const std::string attack_angle_help = R""""( Set angleable tilt and smash attacks.)""""; + +const std::string save_damage_help = R""""( +Set if save states should apply to damage.)""""; \ No newline at end of file diff --git a/TrainingModpackOverlay/source/gui_main.cpp b/TrainingModpackOverlay/source/gui_main.cpp index 1f0cc76..12be331 100644 --- a/TrainingModpackOverlay/source/gui_main.cpp +++ b/TrainingModpackOverlay/source/gui_main.cpp @@ -34,6 +34,7 @@ static struct TrainingModpackMenu DelayFlags AERIAL_DELAY = DelayFlags::None; BoolFlags FULL_HOP = BoolFlags::None; int INPUT_DELAY = 0; + OnOffFlags SAVE_DAMAGE = OnOffFlag::On; } menu; static struct TrainingModpackMenu defaultMenu = menu; @@ -401,6 +402,9 @@ tsl::elm::Element* GuiMain::createUI() saveStateItem->setHelpListener([](std::string title, std::string help) { tsl::changeTo(title, help); }); list->addItem(saveStateItem); + list->addItem(new BitFlagToggleListItem( + "Save Damage", OnOffFlag::On, &menu.SAVE_DAMAGE, "Save Damage", save_damage_help)); + ValueListItem* inputDelayItem = new ValueListItem("Input Delay", input_delay_items, &menu.INPUT_DELAY, "inputDelay", input_delay_help); list->addItem(inputDelayItem); diff --git a/src/common/consts.rs b/src/common/consts.rs index 357f214..e05307f 100644 --- a/src/common/consts.rs +++ b/src/common/consts.rs @@ -337,6 +337,7 @@ pub struct TrainingModpackMenu { pub aerial_delay: Delay, pub full_hop: BoolFlag, pub input_delay: i32, + pub save_damage: OnOff, } // Fighter Ids diff --git a/src/common/mod.rs b/src/common/mod.rs index 32c9f24..b762599 100644 --- a/src/common/mod.rs +++ b/src/common/mod.rs @@ -30,6 +30,7 @@ pub static mut MENU_STRUCT: consts::TrainingModpackMenu = consts::TrainingModpac aerial_delay: Delay::empty(), full_hop: BoolFlag::empty(), input_delay: 0, + save_damage: OnOff::On, }; pub static mut MENU: &consts::TrainingModpackMenu = unsafe { &mut MENU_STRUCT }; diff --git a/src/training/save_states.rs b/src/training/save_states.rs index 7e2e2f6..7b99011 100644 --- a/src/training/save_states.rs +++ b/src/training/save_states.rs @@ -1,4 +1,6 @@ use crate::common::consts::FighterId; +use crate::common::consts::OnOff; +use crate::common::MENU; use crate::training::reset; use smash::app::{self, lua_bind::*}; use smash::hash40; @@ -66,10 +68,32 @@ pub unsafe fn get_param_int( None } +fn set_damage(module_accessor: &mut app::BattleObjectModuleAccessor, damage : f32) { + let overwrite_damage; + + unsafe { + overwrite_damage = MENU.save_damage == OnOff::On; + } + + if !overwrite_damage { + return; + } + + unsafe { + DamageModule::heal( + module_accessor, + -1.0 * DamageModule::damage(module_accessor, 0), + 0, + ); + DamageModule::add_damage(module_accessor, damage, 0); + } +} + pub unsafe fn save_states(module_accessor: &mut app::BattleObjectModuleAccessor) { let status = StatusModule::status_kind(module_accessor) as i32; - let save_state = if WorkModule::get_int(module_accessor, *FIGHTER_INSTANCE_WORK_ID_INT_ENTRY_ID) - == FighterId::CPU as i32 { + let save_state = if WorkModule::get_int(module_accessor, *FIGHTER_INSTANCE_WORK_ID_INT_ENTRY_ID) + == FighterId::CPU as i32 + { &mut SAVE_STATE_CPU } else { &mut SAVE_STATE_PLAYER @@ -107,11 +131,7 @@ pub unsafe fn save_states(module_accessor: &mut app::BattleObjectModuleAccessor) ControlModule::stop_rumble(module_accessor, true); SoundModule::stop_all_sound(module_accessor); - StatusModule::change_status_request( - module_accessor, - *FIGHTER_STATUS_KIND_DEAD, - false, - ); + StatusModule::change_status_request(module_accessor, *FIGHTER_STATUS_KIND_DEAD, false); } return; @@ -171,12 +191,7 @@ pub unsafe fn save_states(module_accessor: &mut app::BattleObjectModuleAccessor) // if we're done moving, reset percent if save_state.state == NoAction { - DamageModule::heal( - module_accessor, - -1.0 * DamageModule::damage(module_accessor, 0), - 0, - ); - DamageModule::add_damage(module_accessor, save_state.percent, 0); + set_damage(module_accessor, save_state.percent); } return;