Made a mess and fixed it (hopefully)

This commit is contained in:
Ogre 2023-09-17 00:30:31 +02:00
parent 42b7627502
commit a2e8586e55
6 changed files with 78 additions and 75 deletions

View File

@ -82,8 +82,8 @@ typedef struct {
ASSERT_SIZE(ClassData, 0x48); ASSERT_SIZE(ClassData, 0x48);
extern ClassData CLASS_DATA[]; extern ClassData obClassData[];
extern EquipmentId (*FP_CLASS_GET_ITEM[4])(u8, u8); extern EquipmentId (*FP_CLASS_GET_ITEM_1[4])(u8, u8);
extern u8 class_get_field_0x2c(u8 portrait, u8 class); extern u8 class_get_field_0x2c(u8 portrait, u8 class);
extern u8 class_get_ability_front(u8 portrait, u8 class); extern u8 class_get_ability_front(u8 portrait, u8 class);

View File

@ -484,6 +484,9 @@ segments:
# - [0x5D5C0, data] # - [0x5D5C0, data]
- [0x5DB10, data] - [0x5DB10, data]
# - [0x5DB5C, data]
- [0x613B0, data] - [0x613B0, data]
- [0x647F0, data] - [0x647F0, data]
- [0x650A0, data] - [0x650A0, data]

View File

@ -41,13 +41,13 @@ INCLUDE_ASM(const s32, "ability", func_8016E50C);
/* 44934 8016EA34 */ /* 44934 8016EA34 */
u8 func_8016EA34(u8 portrait, u8 class, u8 arg2) 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;
portrait = (CLASS_DATA[portrait].field_0x42 != 0xFF && arg2 < CLASS_DATA[portrait].field_0x42) ? portrait = (obClassData[portrait].field_0x42 != 0xFF && arg2 < obClassData[portrait].field_0x42) ?
CLASS_DATA[portrait].field_0x41 : obClassData[portrait].field_0x41 :
(CLASS_DATA[portrait].field_0x44 != 0xFF && arg2 < CLASS_DATA[portrait].field_0x44) ? (obClassData[portrait].field_0x44 != 0xFF && arg2 < obClassData[portrait].field_0x44) ?
CLASS_DATA[portrait].field_0x43 : portrait; obClassData[portrait].field_0x43 : portrait;
return portrait; return portrait;
} }
@ -77,7 +77,7 @@ u16 character_get_item(CharacterSlot* character, u8 slot) {
} }
if (item_id == 0) { 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; return item_id;
} }

View File

@ -65,86 +65,86 @@ INCLUDE_ASM(const s32, "class", func_8016DB84);
/* 43AD8 8016DBD8 */ /* 43AD8 8016DBD8 */
u8 class_get_field_0x2c(u8 portrait, u8 class) { u8 class_get_field_0x2c(u8 portrait, u8 class) {
if (CLASS_DATA[portrait].field_0x45 == class) if (obClassData[portrait].field_0x45 == class)
return CLASS_DATA[portrait].field_0x2c; return obClassData[portrait].field_0x2c;
return CLASS_DATA[class].field_0x2c; return obClassData[class].field_0x2c;
} }
/* 43B2C 8016DC2C */ /* 43B2C 8016DC2C */
u8 class_get_ability_front(u8 portrait, u8 class) { u8 class_get_ability_front(u8 portrait, u8 class) {
if (CLASS_DATA[portrait].field_0x45 == class) if (obClassData[portrait].field_0x45 == class)
return CLASS_DATA[portrait].ability_front; return obClassData[portrait].ability_front;
return CLASS_DATA[class].ability_front; return obClassData[class].ability_front;
} }
/* 43B80 8016DC80 */ /* 43B80 8016DC80 */
u8 class_get_ability_front_hitcount(u8 portrait, u8 class) { u8 class_get_ability_front_hitcount(u8 portrait, u8 class) {
if (CLASS_DATA[portrait].field_0x45 == class) if (obClassData[portrait].field_0x45 == class)
return CLASS_DATA[portrait].ability_front_hitcount; return obClassData[portrait].ability_front_hitcount;
return CLASS_DATA[class].ability_front_hitcount; return obClassData[class].ability_front_hitcount;
} }
/* 43BD4 8016DCD4 */ /* 43BD4 8016DCD4 */
u8 class_get_ability_middle(u8 portrait, u8 class) { u8 class_get_ability_middle(u8 portrait, u8 class) {
s32 var_v0; s32 var_v0;
if (CLASS_DATA[portrait].field_0x45 != class) { if (obClassData[portrait].field_0x45 != class) {
var_v0 = class * 9; var_v0 = class * 9;
} else { } 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 */ /* 43C20 8016DD20 */
u8 class_get_ability_middle_hitcount(u8 portrait, u8 class) { u8 class_get_ability_middle_hitcount(u8 portrait, u8 class) {
if (CLASS_DATA[portrait].field_0x45 == class) if (obClassData[portrait].field_0x45 == class)
return CLASS_DATA[portrait].ability_middle_hitcount; return obClassData[portrait].ability_middle_hitcount;
return CLASS_DATA[class].ability_middle_hitcount; return obClassData[class].ability_middle_hitcount;
} }
/* 43C74 8016DD74 */ /* 43C74 8016DD74 */
u8 class_get_ability_back(u8 portrait, u8 class) { u8 class_get_ability_back(u8 portrait, u8 class) {
if (CLASS_DATA[portrait].field_0x45 == class) if (obClassData[portrait].field_0x45 == class)
return CLASS_DATA[portrait].ability_back; return obClassData[portrait].ability_back;
return CLASS_DATA[class].ability_back; return obClassData[class].ability_back;
} }
/* 43CC8 8016DDC8 */ /* 43CC8 8016DDC8 */
u8 class_get_ability_back_hitcount(u8 portrait, u8 class) { u8 class_get_ability_back_hitcount(u8 portrait, u8 class) {
if (CLASS_DATA[portrait].field_0x45 == class) if (obClassData[portrait].field_0x45 == class)
return CLASS_DATA[portrait].ability_back_hitcount; return obClassData[portrait].ability_back_hitcount;
return CLASS_DATA[class].ability_back_hitcount; return obClassData[class].ability_back_hitcount;
} }
/* 43D1C 8016DE1C */ /* 43D1C 8016DE1C */
u8 class_get_field_0x4(u8 portrait, u8 class) { u8 class_get_field_0x4(u8 portrait, u8 class) {
if (CLASS_DATA[portrait].field_0x45 == class) if (obClassData[portrait].field_0x45 == class)
return CLASS_DATA[portrait].field_0x4; return obClassData[portrait].field_0x4;
return CLASS_DATA[class].field_0x4; return obClassData[class].field_0x4;
} }
/* 43D70 8016DE70 */ /* 43D70 8016DE70 */
u8 class_get_gender(u8 portrait, u8 class) { u8 class_get_gender(u8 portrait, u8 class) {
if (CLASS_DATA[portrait].field_0x45 == class) if (obClassData[portrait].field_0x45 == class)
return CLASS_DATA[portrait].gender; return obClassData[portrait].gender;
return CLASS_DATA[class].gender; return obClassData[class].gender;
} }
/* 43DC4 8016DEC4 */ /* 43DC4 8016DEC4 */
u8 class_get_leadership_rank(u8 portrait, u8 class) { u8 class_get_leadership_rank(u8 portrait, u8 class) {
if (CLASS_DATA[portrait].field_0x45 == class) if (obClassData[portrait].field_0x45 == class)
return CLASS_DATA[portrait].leadership_rank; return obClassData[portrait].leadership_rank;
return CLASS_DATA[class].leadership_rank; return obClassData[class].leadership_rank;
} }
/* 43E18 8016DF18 */ /* 43E18 8016DF18 */
@ -153,7 +153,7 @@ u8 class_get_global_flag(u8 portrait, u8 class) {
var_a1 = class; var_a1 = class;
if (D_8018ECE4[portrait].field_0x0 & 0x80) { 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; var_a1 = portrait;
} }
} }
@ -162,44 +162,44 @@ u8 class_get_global_flag(u8 portrait, u8 class) {
/* 43E88 8016DF88 */ /* 43E88 8016DF88 */
EquipmentId class_get_item_upper_left(u8 portrait, u8 class) { EquipmentId class_get_item_upper_left(u8 portrait, u8 class) {
if (CLASS_DATA[portrait].field_0x45 == class) if (obClassData[portrait].field_0x45 == class)
return CLASS_DATA[portrait].item_upper_left; return obClassData[portrait].item_upper_left;
return CLASS_DATA[class].item_upper_left; return obClassData[class].item_upper_left;
} }
/* 43EDC 8016DFDC */ /* 43EDC 8016DFDC */
EquipmentId class_get_item_upper_right(u8 portrait, u8 class) { EquipmentId class_get_item_upper_right(u8 portrait, u8 class) {
if (CLASS_DATA[portrait].field_0x45 == class) if (obClassData[portrait].field_0x45 == class)
return CLASS_DATA[portrait].item_upper_right; return obClassData[portrait].item_upper_right;
return CLASS_DATA[class].item_upper_right; return obClassData[class].item_upper_right;
} }
/* 43F30 8016E030 */ /* 43F30 8016E030 */
EquipmentId class_get_item_lower_left(u8 portrait, u8 class) { EquipmentId class_get_item_lower_left(u8 portrait, u8 class) {
if (CLASS_DATA[portrait].field_0x45 == class) if (obClassData[portrait].field_0x45 == class)
return CLASS_DATA[portrait].item_lower_left; return obClassData[portrait].item_lower_left;
return CLASS_DATA[class].item_lower_left; return obClassData[class].item_lower_left;
} }
/* 43F84 8016E084 */ /* 43F84 8016E084 */
EquipmentId class_get_item_lower_right(u8 portrait, u8 class) { EquipmentId class_get_item_lower_right(u8 portrait, u8 class) {
if (CLASS_DATA[portrait].field_0x45 == class) if (obClassData[portrait].field_0x45 == class)
return CLASS_DATA[portrait].item_lower_right; return obClassData[portrait].item_lower_right;
return CLASS_DATA[class].item_lower_right; return obClassData[class].item_lower_right;
} }
/* 43FD8 8016E0D8 */ /* 43FD8 8016E0D8 */
char* class_get_ability_front_name(u8 portrait, u8 class) { char* class_get_ability_front_name(u8 portrait, u8 class) {
u8 var_v0; u8 var_v0;
if (CLASS_DATA[portrait].field_0x45 == class) { if (obClassData[portrait].field_0x45 == class) {
var_v0 = CLASS_DATA[portrait].ability_front; var_v0 = obClassData[portrait].ability_front;
} else { } else {
var_v0 = CLASS_DATA[class].ability_front; var_v0 = obClassData[class].ability_front;
} }
return obAbilityGetName(var_v0); 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) { char* class_get_ability_middle_name(u8 portrait, u8 class) {
// Possible a C macro wrapping? // Possible a C macro wrapping?
do { do {
char* ret = obAbilityGetName(CLASS_DATA[class].ability_middle); char* ret = obAbilityGetName(obClassData[class].ability_middle);
return ret; return ret;
} while(0); } 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) { char* class_get_ability_back_name(u8 portrait, u8 class) {
u8 var_v0; u8 var_v0;
if (CLASS_DATA[portrait].field_0x45 == class) { if (obClassData[portrait].field_0x45 == class) {
var_v0 = CLASS_DATA[portrait].ability_back; var_v0 = obClassData[portrait].ability_back;
} else { } else {
var_v0 = CLASS_DATA[class].ability_back; var_v0 = obClassData[class].ability_back;
} }
return obAbilityGetName(var_v0); return obAbilityGetName(var_v0);
@ -229,37 +229,37 @@ char* class_get_ability_back_name(u8 portrait, u8 class) {
/* 440DC 8016E1DC */ /* 440DC 8016E1DC */
char* class_get_name(u8 portrait, u8 class) { char* class_get_name(u8 portrait, u8 class) {
if (CLASS_DATA[portrait].field_0x45 == class) if (obClassData[portrait].field_0x45 == class)
return CLASS_DATA[portrait].name; return obClassData[portrait].name;
return CLASS_DATA[class].name; return obClassData[class].name;
} }
/* 44130 8016E230 */ /* 44130 8016E230 */
u8 class_get_ability(u8 portrait, u8 class, u8 row) 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; portrait = class;
if (row == 0) { 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) { } 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 { } 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 */ /* 44238 8016E338 */
u8 class_get_ability_hitcount(u8 portrait, u8 class, u8 row) { 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; portrait = class;
if (row == 0) { 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) { } 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 { } 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;
} }
} }

View File

@ -27,7 +27,7 @@ char* obStrategyName[] = {
}; };
/* 5CED4 80186FD4 */ /* 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_left,
class_get_item_upper_right, class_get_item_upper_right,
class_get_item_lower_left, class_get_item_lower_left,

View File

@ -101,8 +101,6 @@ __SOMETHING_WITH_GFX = 0x800E9BE0; // size:0x18
__MAYBE_DISPLAY_LIST = 0x801B8430; // rom:0x1EE930 __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 __restore_zombie_hp_to_max = 0x80219EEC; // rom:0x1B75DC
D_800AEDB0 = 0x800AEDB0; // size:0xC D_800AEDB0 = 0x800AEDB0; // size:0xC
@ -280,9 +278,11 @@ obAbilityNameFatalDance = 0x80187BC8; // type:asciz rom:0x5DAC8 size:12
D_80187BD4 = 0x80187BD4; // rom:0x5DAD4 type:u32 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_field_0x2c = 0x8016DBD8; // rom:0x43AD8
class_get_ability_front = 0x8016DC2C; // rom:0x43B2C class_get_ability_front = 0x8016DC2C; // rom:0x43B2C
class_get_ability_front_hitcount = 0x8016DC80; // rom:0x43B80 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* FORMATION_COMMAND_NAMES = 0x8021315C; // rom:0x1642CC type:char*
obAbilityData = 0x8018AA7C; // rom:0x6097C size:0xA20 obAbilityData = 0x8018AA7C; // rom:0x6097C size:0xA18
obAbilityGetName = 0x8016E440; obAbilityGetName = 0x8016E440;
ability_get_field_0x4 = 0x8016E458; // rom:0x44358 ability_get_field_0x4 = 0x8016E458; // rom:0x44358
obAbilityGetElement = 0x8016E470; obAbilityGetElement = 0x8016E470;