1
0
Fork 0
mirror of https://github.com/jugeeya/UltimateTrainingModpack.git synced 2025-04-01 11:12:42 +00:00
This commit is contained in:
asimon-1 2024-11-13 22:52:10 -05:00
parent 6fc5097d1c
commit 301916024d

View file

@ -1,3 +1,4 @@
// TODO!() There's some crazy pointer magic happening in this file, we should try to refactor to avoid that
use smash::app;
use smash::app::lua_bind::*;
use smash::app::ItemKind;
@ -8,9 +9,11 @@ use smash::lib::lua_const::*;
use crate::common::consts::*;
use crate::common::*;
use crate::offsets::OFFSET_GENERATE_ARTICLE_FOR_TARGET;
use training_mod_sync::*;
use crate::training::mash;
use training_mod_sync::*;
pub static TURNIP_CHOSEN: RwLock<Option<u32>> = RwLock::new(None);
pub static TARGET_PLAYER: RwLock<Option<BattleObjectModuleAccessor>> = RwLock::new(None);
pub struct CharItem {
pub fighter_kind: LuaConst,
pub item_kind: Option<LuaConst>,
@ -327,9 +330,6 @@ pub const ALL_CHAR_ITEMS: [CharItem; 45] = [
},
];
pub static mut TURNIP_CHOSEN: Option<u32> = None;
pub static mut TARGET_PLAYER: Option<*mut BattleObjectModuleAccessor> = None;
unsafe fn apply_single_item(player_fighter_kind: i32, item: &CharItem) {
let player_module_accessor = get_module_accessor(FighterId::Player);
let cpu_module_accessor = get_module_accessor(FighterId::CPU);
@ -378,25 +378,26 @@ unsafe fn apply_single_item(player_fighter_kind: i32, item: &CharItem) {
});
item.article_kind.as_ref().map(|article_kind| {
TURNIP_CHOSEN = if [*ITEM_VARIATION_PEACHDAIKON_8, *ITEM_VARIATION_DAISYDAIKON_8]
.contains(&variation)
{
Some(8)
} else if [*ITEM_VARIATION_PEACHDAIKON_7, *ITEM_VARIATION_DAISYDAIKON_7]
.contains(&variation)
{
Some(7)
} else if [*ITEM_VARIATION_PEACHDAIKON_6, *ITEM_VARIATION_DAISYDAIKON_6]
.contains(&variation)
{
Some(6)
} else if [*ITEM_VARIATION_PEACHDAIKON_1, *ITEM_VARIATION_DAISYDAIKON_1]
.contains(&variation)
{
Some(1)
} else {
None
};
assign_rwlock(
&TURNIP_CHOSEN,
if [*ITEM_VARIATION_PEACHDAIKON_8, *ITEM_VARIATION_DAISYDAIKON_8].contains(&variation) {
Some(8)
} else if [*ITEM_VARIATION_PEACHDAIKON_7, *ITEM_VARIATION_DAISYDAIKON_7]
.contains(&variation)
{
Some(7)
} else if [*ITEM_VARIATION_PEACHDAIKON_6, *ITEM_VARIATION_DAISYDAIKON_6]
.contains(&variation)
{
Some(6)
} else if [*ITEM_VARIATION_PEACHDAIKON_1, *ITEM_VARIATION_DAISYDAIKON_1]
.contains(&variation)
{
Some(1)
} else {
None
},
);
let article_kind = **article_kind;
if article_kind == FIGHTER_DIDDY_GENERATE_ARTICLE_ITEM_BANANA {
@ -429,16 +430,18 @@ unsafe fn apply_single_item(player_fighter_kind: i32, item: &CharItem) {
false,
);
} else {
TARGET_PLAYER = Some(player_module_accessor); // set so we generate CPU article on the player (in dittos, items always belong to player, even if cpu item is chosen)
// Set the target player so we generate CPU article on the player during handle_generate_article_for_target
// (in dittos, items always belong to player, even if cpu item is chosen)
assign_rwlock(&TARGET_PLAYER, Some(*player_module_accessor));
ArticleModule::generate_article(
generator_module_accessor, // we want CPU's article
article_kind,
false,
0,
);
TARGET_PLAYER = None;
assign_rwlock(&TARGET_PLAYER, None);
}
TURNIP_CHOSEN = None;
assign_rwlock(&TURNIP_CHOSEN, None);
});
}
@ -480,9 +483,10 @@ macro_rules! daikon_replace {
pub unsafe fn [<handle_ $char daikon_ $num _prob>]() -> f32 {
let orig = original!()();
if is_training_mode() {
if TURNIP_CHOSEN == Some($num) {
let turnip_chosen = read_rwlock(&TURNIP_CHOSEN);
if turnip_chosen == Some($num) {
return 58.0;
} else if TURNIP_CHOSEN != None {
} else if turnip_chosen != None {
return 0.0;
}
}
@ -513,14 +517,14 @@ daikon_replace!(DAISY, daisy, 1);
// GenerateArticleForTarget for Peach/Diddy(/Link?) item creation
#[skyline::hook(offset = *OFFSET_GENERATE_ARTICLE_FOR_TARGET)]
pub unsafe fn handle_generate_article_for_target(
article_module_accessor: *mut BattleObjectModuleAccessor,
article_module_accessor: BattleObjectModuleAccessor,
int_1: i32,
module_accessor: *mut BattleObjectModuleAccessor, // this is always 0x0 normally
module_accessor: BattleObjectModuleAccessor, // this is always 0x0 normally
bool_1: bool,
int_2: i32,
) -> u64 {
// unknown return value, gets cast to an (Article *)
let target_module_accessor = TARGET_PLAYER.unwrap_or(module_accessor);
let target_module_accessor = read_rwlock(&TARGET_PLAYER).unwrap_or(module_accessor);
original!()(
article_module_accessor,