From a2e8586e557f8786ffce099150d95058ef3d1ac5 Mon Sep 17 00:00:00 2001 From: Ogre Date: Sun, 17 Sep 2023 00:30:31 +0200 Subject: [PATCH] Made a mess and fixed it (hopefully) --- include/class.h | 4 +- splat.yaml | 3 ++ src/ability.c | 12 ++--- src/class.c | 122 ++++++++++++++++++++++---------------------- src/strategy.data.c | 2 +- symbol_addrs.txt | 10 ++-- 6 files changed, 78 insertions(+), 75 deletions(-) diff --git a/include/class.h b/include/class.h index eb1b663..45e32d5 100644 --- a/include/class.h +++ b/include/class.h @@ -82,8 +82,8 @@ typedef struct { ASSERT_SIZE(ClassData, 0x48); -extern ClassData CLASS_DATA[]; -extern EquipmentId (*FP_CLASS_GET_ITEM[4])(u8, u8); +extern ClassData obClassData[]; +extern EquipmentId (*FP_CLASS_GET_ITEM_1[4])(u8, u8); extern u8 class_get_field_0x2c(u8 portrait, u8 class); extern u8 class_get_ability_front(u8 portrait, u8 class); diff --git a/splat.yaml b/splat.yaml index 7dbd0cf..56ebc58 100644 --- a/splat.yaml +++ b/splat.yaml @@ -484,6 +484,9 @@ segments: # - [0x5D5C0, data] - [0x5DB10, data] + + # - [0x5DB5C, data] + - [0x613B0, data] - [0x647F0, data] - [0x650A0, data] diff --git a/src/ability.c b/src/ability.c index e6a2c3b..773ea54 100644 --- a/src/ability.c +++ b/src/ability.c @@ -41,13 +41,13 @@ INCLUDE_ASM(const s32, "ability", func_8016E50C); /* 44934 8016EA34 */ u8 func_8016EA34(u8 portrait, u8 class, u8 arg2) { - if (CLASS_DATA[portrait].field_0x45 != class) + if (obClassData[portrait].field_0x45 != class) portrait = class; - portrait = (CLASS_DATA[portrait].field_0x42 != 0xFF && arg2 < CLASS_DATA[portrait].field_0x42) ? - CLASS_DATA[portrait].field_0x41 : - (CLASS_DATA[portrait].field_0x44 != 0xFF && arg2 < CLASS_DATA[portrait].field_0x44) ? - CLASS_DATA[portrait].field_0x43 : portrait; + portrait = (obClassData[portrait].field_0x42 != 0xFF && arg2 < obClassData[portrait].field_0x42) ? + obClassData[portrait].field_0x41 : + (obClassData[portrait].field_0x44 != 0xFF && arg2 < obClassData[portrait].field_0x44) ? + obClassData[portrait].field_0x43 : portrait; return portrait; } @@ -77,7 +77,7 @@ u16 character_get_item(CharacterSlot* character, u8 slot) { } if (item_id == 0) { - item_id = FP_CLASS_GET_ITEM[slot](character->portrait, character->class); + item_id = FP_CLASS_GET_ITEM_1[slot](character->portrait, character->class); } return item_id; } diff --git a/src/class.c b/src/class.c index 3eb4f70..40f3713 100644 --- a/src/class.c +++ b/src/class.c @@ -65,86 +65,86 @@ INCLUDE_ASM(const s32, "class", func_8016DB84); /* 43AD8 8016DBD8 */ u8 class_get_field_0x2c(u8 portrait, u8 class) { - if (CLASS_DATA[portrait].field_0x45 == class) - return CLASS_DATA[portrait].field_0x2c; + if (obClassData[portrait].field_0x45 == class) + return obClassData[portrait].field_0x2c; - return CLASS_DATA[class].field_0x2c; + return obClassData[class].field_0x2c; } /* 43B2C 8016DC2C */ u8 class_get_ability_front(u8 portrait, u8 class) { - if (CLASS_DATA[portrait].field_0x45 == class) - return CLASS_DATA[portrait].ability_front; + if (obClassData[portrait].field_0x45 == class) + return obClassData[portrait].ability_front; - return CLASS_DATA[class].ability_front; + return obClassData[class].ability_front; } /* 43B80 8016DC80 */ u8 class_get_ability_front_hitcount(u8 portrait, u8 class) { - if (CLASS_DATA[portrait].field_0x45 == class) - return CLASS_DATA[portrait].ability_front_hitcount; + if (obClassData[portrait].field_0x45 == class) + return obClassData[portrait].ability_front_hitcount; - return CLASS_DATA[class].ability_front_hitcount; + return obClassData[class].ability_front_hitcount; } /* 43BD4 8016DCD4 */ u8 class_get_ability_middle(u8 portrait, u8 class) { s32 var_v0; - if (CLASS_DATA[portrait].field_0x45 != class) { + if (obClassData[portrait].field_0x45 != class) { var_v0 = class * 9; } else { - var_v0 = CLASS_DATA[portrait].field_0x45 * 9; + var_v0 = obClassData[portrait].field_0x45 * 9; } - return *(&CLASS_DATA->ability_middle + (var_v0 * 8)); + return *(&obClassData->ability_middle + (var_v0 * 8)); } /* 43C20 8016DD20 */ u8 class_get_ability_middle_hitcount(u8 portrait, u8 class) { - if (CLASS_DATA[portrait].field_0x45 == class) - return CLASS_DATA[portrait].ability_middle_hitcount; + if (obClassData[portrait].field_0x45 == class) + return obClassData[portrait].ability_middle_hitcount; - return CLASS_DATA[class].ability_middle_hitcount; + return obClassData[class].ability_middle_hitcount; } /* 43C74 8016DD74 */ u8 class_get_ability_back(u8 portrait, u8 class) { - if (CLASS_DATA[portrait].field_0x45 == class) - return CLASS_DATA[portrait].ability_back; + if (obClassData[portrait].field_0x45 == class) + return obClassData[portrait].ability_back; - return CLASS_DATA[class].ability_back; + return obClassData[class].ability_back; } /* 43CC8 8016DDC8 */ u8 class_get_ability_back_hitcount(u8 portrait, u8 class) { - if (CLASS_DATA[portrait].field_0x45 == class) - return CLASS_DATA[portrait].ability_back_hitcount; + if (obClassData[portrait].field_0x45 == class) + return obClassData[portrait].ability_back_hitcount; - return CLASS_DATA[class].ability_back_hitcount; + return obClassData[class].ability_back_hitcount; } /* 43D1C 8016DE1C */ u8 class_get_field_0x4(u8 portrait, u8 class) { - if (CLASS_DATA[portrait].field_0x45 == class) - return CLASS_DATA[portrait].field_0x4; + if (obClassData[portrait].field_0x45 == class) + return obClassData[portrait].field_0x4; - return CLASS_DATA[class].field_0x4; + return obClassData[class].field_0x4; } /* 43D70 8016DE70 */ u8 class_get_gender(u8 portrait, u8 class) { - if (CLASS_DATA[portrait].field_0x45 == class) - return CLASS_DATA[portrait].gender; + if (obClassData[portrait].field_0x45 == class) + return obClassData[portrait].gender; - return CLASS_DATA[class].gender; + return obClassData[class].gender; } /* 43DC4 8016DEC4 */ u8 class_get_leadership_rank(u8 portrait, u8 class) { - if (CLASS_DATA[portrait].field_0x45 == class) - return CLASS_DATA[portrait].leadership_rank; + if (obClassData[portrait].field_0x45 == class) + return obClassData[portrait].leadership_rank; - return CLASS_DATA[class].leadership_rank; + return obClassData[class].leadership_rank; } /* 43E18 8016DF18 */ @@ -153,7 +153,7 @@ u8 class_get_global_flag(u8 portrait, u8 class) { var_a1 = class; if (D_8018ECE4[portrait].field_0x0 & 0x80) { - if (CLASS_DATA[portrait].field_0x45 == var_a1) { + if (obClassData[portrait].field_0x45 == var_a1) { var_a1 = portrait; } } @@ -162,44 +162,44 @@ u8 class_get_global_flag(u8 portrait, u8 class) { /* 43E88 8016DF88 */ EquipmentId class_get_item_upper_left(u8 portrait, u8 class) { - if (CLASS_DATA[portrait].field_0x45 == class) - return CLASS_DATA[portrait].item_upper_left; + if (obClassData[portrait].field_0x45 == class) + return obClassData[portrait].item_upper_left; - return CLASS_DATA[class].item_upper_left; + return obClassData[class].item_upper_left; } /* 43EDC 8016DFDC */ EquipmentId class_get_item_upper_right(u8 portrait, u8 class) { - if (CLASS_DATA[portrait].field_0x45 == class) - return CLASS_DATA[portrait].item_upper_right; + if (obClassData[portrait].field_0x45 == class) + return obClassData[portrait].item_upper_right; - return CLASS_DATA[class].item_upper_right; + return obClassData[class].item_upper_right; } /* 43F30 8016E030 */ EquipmentId class_get_item_lower_left(u8 portrait, u8 class) { - if (CLASS_DATA[portrait].field_0x45 == class) - return CLASS_DATA[portrait].item_lower_left; + if (obClassData[portrait].field_0x45 == class) + return obClassData[portrait].item_lower_left; - return CLASS_DATA[class].item_lower_left; + return obClassData[class].item_lower_left; } /* 43F84 8016E084 */ EquipmentId class_get_item_lower_right(u8 portrait, u8 class) { - if (CLASS_DATA[portrait].field_0x45 == class) - return CLASS_DATA[portrait].item_lower_right; + if (obClassData[portrait].field_0x45 == class) + return obClassData[portrait].item_lower_right; - return CLASS_DATA[class].item_lower_right; + return obClassData[class].item_lower_right; } /* 43FD8 8016E0D8 */ char* class_get_ability_front_name(u8 portrait, u8 class) { u8 var_v0; - if (CLASS_DATA[portrait].field_0x45 == class) { - var_v0 = CLASS_DATA[portrait].ability_front; + if (obClassData[portrait].field_0x45 == class) { + var_v0 = obClassData[portrait].ability_front; } else { - var_v0 = CLASS_DATA[class].ability_front; + var_v0 = obClassData[class].ability_front; } return obAbilityGetName(var_v0); @@ -209,7 +209,7 @@ char* class_get_ability_front_name(u8 portrait, u8 class) { char* class_get_ability_middle_name(u8 portrait, u8 class) { // Possible a C macro wrapping? do { - char* ret = obAbilityGetName(CLASS_DATA[class].ability_middle); + char* ret = obAbilityGetName(obClassData[class].ability_middle); return ret; } while(0); } @@ -218,10 +218,10 @@ char* class_get_ability_middle_name(u8 portrait, u8 class) { char* class_get_ability_back_name(u8 portrait, u8 class) { u8 var_v0; - if (CLASS_DATA[portrait].field_0x45 == class) { - var_v0 = CLASS_DATA[portrait].ability_back; + if (obClassData[portrait].field_0x45 == class) { + var_v0 = obClassData[portrait].ability_back; } else { - var_v0 = CLASS_DATA[class].ability_back; + var_v0 = obClassData[class].ability_back; } return obAbilityGetName(var_v0); @@ -229,37 +229,37 @@ char* class_get_ability_back_name(u8 portrait, u8 class) { /* 440DC 8016E1DC */ char* class_get_name(u8 portrait, u8 class) { - if (CLASS_DATA[portrait].field_0x45 == class) - return CLASS_DATA[portrait].name; + if (obClassData[portrait].field_0x45 == class) + return obClassData[portrait].name; - return CLASS_DATA[class].name; + return obClassData[class].name; } /* 44130 8016E230 */ u8 class_get_ability(u8 portrait, u8 class, u8 row) { - if (CLASS_DATA[portrait].field_0x45 != class) + if (obClassData[portrait].field_0x45 != class) portrait = class; if (row == 0) { - return CLASS_DATA[portrait].ability_front != 0xFF ? CLASS_DATA[portrait].ability_front : CLASS_DATA[class].ability_front; + return obClassData[portrait].ability_front != 0xFF ? obClassData[portrait].ability_front : obClassData[class].ability_front; } else if (row == 1) { - return CLASS_DATA[portrait].ability_middle != 0xFF ? CLASS_DATA[portrait].ability_middle : CLASS_DATA[class].ability_middle; + return obClassData[portrait].ability_middle != 0xFF ? obClassData[portrait].ability_middle : obClassData[class].ability_middle; } else { - return CLASS_DATA[portrait].ability_back != 0xFF ? CLASS_DATA[portrait].ability_back : CLASS_DATA[class].ability_back; + return obClassData[portrait].ability_back != 0xFF ? obClassData[portrait].ability_back : obClassData[class].ability_back; } } /* 44238 8016E338 */ u8 class_get_ability_hitcount(u8 portrait, u8 class, u8 row) { - if (CLASS_DATA[portrait].field_0x45 != class) + if (obClassData[portrait].field_0x45 != class) portrait = class; if (row == 0) { - return CLASS_DATA[portrait].ability_front_hitcount != 0xFF ? CLASS_DATA[portrait].ability_front_hitcount : CLASS_DATA[class].ability_front_hitcount; + return obClassData[portrait].ability_front_hitcount != 0xFF ? obClassData[portrait].ability_front_hitcount : obClassData[class].ability_front_hitcount; } else if (row == 1) { - return CLASS_DATA[portrait].ability_middle_hitcount != 0xFF ? CLASS_DATA[portrait].ability_middle_hitcount : CLASS_DATA[class].ability_middle_hitcount; + return obClassData[portrait].ability_middle_hitcount != 0xFF ? obClassData[portrait].ability_middle_hitcount : obClassData[class].ability_middle_hitcount; } else { - return CLASS_DATA[portrait].ability_back_hitcount != 0xFF ? CLASS_DATA[portrait].ability_back_hitcount : CLASS_DATA[class].ability_back_hitcount; + return obClassData[portrait].ability_back_hitcount != 0xFF ? obClassData[portrait].ability_back_hitcount : obClassData[class].ability_back_hitcount; } } diff --git a/src/strategy.data.c b/src/strategy.data.c index 5265e38..5f66138 100644 --- a/src/strategy.data.c +++ b/src/strategy.data.c @@ -27,7 +27,7 @@ char* obStrategyName[] = { }; /* 5CED4 80186FD4 */ -u16 (*obClassGetItem[])(u8 portrait, u8 class) = { +u16 (*FP_CLASS_GET_ITEM_0[])(u8 portrait, u8 class) = { class_get_item_upper_left, class_get_item_upper_right, class_get_item_lower_left, diff --git a/symbol_addrs.txt b/symbol_addrs.txt index 6370d70..90233b8 100644 --- a/symbol_addrs.txt +++ b/symbol_addrs.txt @@ -101,8 +101,6 @@ __SOMETHING_WITH_GFX = 0x800E9BE0; // size:0x18 __MAYBE_DISPLAY_LIST = 0x801B8430; // rom:0x1EE930 -FP_CLASS_GET_ITEM = 0x8018B494; // rom:0x61394 size:0x10 type:u32 - __restore_zombie_hp_to_max = 0x80219EEC; // rom:0x1B75DC D_800AEDB0 = 0x800AEDB0; // size:0xC @@ -280,9 +278,11 @@ obAbilityNameFatalDance = 0x80187BC8; // type:asciz rom:0x5DAC8 size:12 D_80187BD4 = 0x80187BD4; // rom:0x5DAD4 type:u32 -obClassGetItem = 0x80186FD4; // rom:0x5CED4 size:16 +// TODO: Figure this out +FP_CLASS_GET_ITEM_0 = 0x80186FD4; // rom:0x5CED4 size:16 type:u32 +FP_CLASS_GET_ITEM_1 = 0x8018B494; // rom:0x61394 size:16 type:u32 -CLASS_DATA = 0x80187C14; // rom:0x5DB14 size:0x2E68 type:u32 +obClassData = 0x80187C14; // rom:0x5DB14 size:0x2E68 type:u32 class_get_field_0x2c = 0x8016DBD8; // rom:0x43AD8 class_get_ability_front = 0x8016DC2C; // rom:0x43B2C class_get_ability_front_hitcount = 0x8016DC80; // rom:0x43B80 @@ -307,7 +307,7 @@ class_get_ability_hitcount = 0x8016E338; // rom:0x44238 FORMATION_COMMAND_NAMES = 0x8021315C; // rom:0x1642CC type:char* -obAbilityData = 0x8018AA7C; // rom:0x6097C size:0xA20 +obAbilityData = 0x8018AA7C; // rom:0x6097C size:0xA18 obAbilityGetName = 0x8016E440; ability_get_field_0x4 = 0x8016E458; // rom:0x44358 obAbilityGetElement = 0x8016E470;