#include "common.h" #include "class.h" #include "ability.h" #include "gender.h" INCLUDE_ASM(const s32, "segment_obdata/_ob_fierce_selection", func_8016D200); INCLUDE_ASM(const s32, "segment_obdata/_ob_fierce_selection", func_8016D254); INCLUDE_ASM(const s32, "segment_obdata/_ob_fierce_selection", func_8016D2A8); INCLUDE_ASM(const s32, "segment_obdata/_ob_fierce_selection", func_8016D2FC); INCLUDE_ASM(const s32, "segment_obdata/_ob_fierce_selection", func_8016D350); INCLUDE_ASM(const s32, "segment_obdata/_ob_fierce_selection", func_8016D3A4); INCLUDE_ASM(const s32, "segment_obdata/_ob_fierce_selection", func_8016D3F8); INCLUDE_ASM(const s32, "segment_obdata/_ob_fierce_selection", func_8016D44C); INCLUDE_ASM(const s32, "segment_obdata/_ob_fierce_selection", func_8016D4A0); INCLUDE_ASM(const s32, "segment_obdata/_ob_fierce_selection", func_8016D4F4); INCLUDE_ASM(const s32, "segment_obdata/_ob_fierce_selection", func_8016D548); INCLUDE_ASM(const s32, "segment_obdata/_ob_fierce_selection", func_8016D59C); INCLUDE_ASM(const s32, "segment_obdata/_ob_fierce_selection", func_8016D5F0); INCLUDE_ASM(const s32, "segment_obdata/_ob_fierce_selection", func_8016D644); INCLUDE_ASM(const s32, "segment_obdata/_ob_fierce_selection", func_8016D698); INCLUDE_ASM(const s32, "segment_obdata/_ob_fierce_selection", func_8016D6EC); INCLUDE_ASM(const s32, "segment_obdata/_ob_fierce_selection", func_8016D740); INCLUDE_ASM(const s32, "segment_obdata/_ob_fierce_selection", func_8016D794); INCLUDE_ASM(const s32, "segment_obdata/_ob_fierce_selection", func_8016D7E8); INCLUDE_ASM(const s32, "segment_obdata/_ob_fierce_selection", func_8016D83C); INCLUDE_ASM(const s32, "segment_obdata/_ob_fierce_selection", func_8016D890); INCLUDE_ASM(const s32, "segment_obdata/_ob_fierce_selection", func_8016D8E4); INCLUDE_ASM(const s32, "segment_obdata/_ob_fierce_selection", func_8016D938); INCLUDE_ASM(const s32, "segment_obdata/_ob_fierce_selection", func_8016D98C); INCLUDE_ASM(const s32, "segment_obdata/_ob_fierce_selection", func_8016D9E0); INCLUDE_ASM(const s32, "segment_obdata/_ob_fierce_selection", func_8016DA34); INCLUDE_ASM(const s32, "segment_obdata/_ob_fierce_selection", func_8016DA88); INCLUDE_ASM(const s32, "segment_obdata/_ob_fierce_selection", func_8016DADC); INCLUDE_ASM(const s32, "segment_obdata/_ob_fierce_selection", func_8016DB30); INCLUDE_ASM(const s32, "segment_obdata/_ob_fierce_selection", func_8016DB84); /* 43AD8 8016DBD8 */ u8 class_get_field_0x2c(u8 portrait, u8 class) { if (obClassData[portrait].field_0x45 == class) return obClassData[portrait].field_0x2c; return obClassData[class].field_0x2c; } /* 43B2C 8016DC2C */ u8 obClassGetAbilityFront(u8 portrait, u8 class) { if (obClassData[portrait].field_0x45 == class) return obClassData[portrait].ability_front; return obClassData[class].ability_front; } /* 43B80 8016DC80 */ u8 obClassGetAbilityFrontHits(u8 portrait, u8 class) { if (obClassData[portrait].field_0x45 == class) return obClassData[portrait].ability_front_hitcount; return obClassData[class].ability_front_hitcount; } /* 43BD4 8016DCD4 */ u8 obClassGetAbilityMiddle(u8 portrait, u8 class) { s32 var_v0; if (obClassData[portrait].field_0x45 != class) { var_v0 = class * 9; } else { var_v0 = obClassData[portrait].field_0x45 * 9; } return *(&obClassData->ability_middle + (var_v0 * 8)); } /* 43C20 8016DD20 */ u8 obClassGetAbilityMiddleHits(u8 portrait, u8 class) { if (obClassData[portrait].field_0x45 == class) return obClassData[portrait].ability_middle_hitcount; return obClassData[class].ability_middle_hitcount; } /* 43C74 8016DD74 */ u8 obClassGetAbilityBack(u8 portrait, u8 class) { if (obClassData[portrait].field_0x45 == class) return obClassData[portrait].ability_back; return obClassData[class].ability_back; } /* 43CC8 8016DDC8 */ u8 obClassGetAbilityBackHits(u8 portrait, u8 class) { if (obClassData[portrait].field_0x45 == class) return obClassData[portrait].ability_back_hitcount; return obClassData[class].ability_back_hitcount; } /* 43D1C 8016DE1C */ u8 class_get_field_0x4(u8 portrait, u8 class) { if (obClassData[portrait].field_0x45 == class) return obClassData[portrait].field_0x4; return obClassData[class].field_0x4; } /* 43D70 8016DE70 */ Gender obClassGetGender(u8 portrait, u8 class) { if (obClassData[portrait].field_0x45 == class) return obClassData[portrait].gender; return obClassData[class].gender; } /* 43DC4 8016DEC4 */ u8 obClassGetLeadershipRank(u8 portrait, u8 class) { if (obClassData[portrait].field_0x45 == class) return obClassData[portrait].leadership_rank; return obClassData[class].leadership_rank; } /* 43E18 8016DF18 */ u8 class_get_global_flag(u8 portrait, u8 class) { u8 var_a1; var_a1 = class; if (D_8018ECE4[portrait].field_0x0 & 0x80) { if (obClassData[portrait].field_0x45 == var_a1) { var_a1 = portrait; } } return D_8018ECE4[var_a1].field_0x0 & 0x3F; } /* 43E88 8016DF88 */ EquipmentId obClassGetItemUpperLeft(u8 portrait, u8 class) { if (obClassData[portrait].field_0x45 == class) return obClassData[portrait].item_upper_left; return obClassData[class].item_upper_left; } /* 43EDC 8016DFDC */ EquipmentId obClassGetItemUpperRight(u8 portrait, u8 class) { if (obClassData[portrait].field_0x45 == class) return obClassData[portrait].item_upper_right; return obClassData[class].item_upper_right; } /* 43F30 8016E030 */ EquipmentId obClassGetItemLowerLeft(u8 portrait, u8 class) { if (obClassData[portrait].field_0x45 == class) return obClassData[portrait].item_lower_left; return obClassData[class].item_lower_left; } /* 43F84 8016E084 */ EquipmentId obClassGetItemLowerRight(u8 portrait, u8 class) { if (obClassData[portrait].field_0x45 == class) return obClassData[portrait].item_lower_right; return obClassData[class].item_lower_right; } /* 43FD8 8016E0D8 */ char* obClassGetAbilityFrontName(u8 portrait, u8 class) { u8 var_v0; if (obClassData[portrait].field_0x45 == class) { var_v0 = obClassData[portrait].ability_front; } else { var_v0 = obClassData[class].ability_front; } return obAbilityGetName(var_v0); } /* 44040 8016E140 */ char* obClassGetAbilityMiddleName(u8 portrait, u8 class) { // Possible a C macro wrapping? do { char* ret = obAbilityGetName(obClassData[class].ability_middle); return ret; } while(0); } /* 44074 8016E174 */ char* obClassGetAbilityBackName(u8 portrait, u8 class) { u8 var_v0; if (obClassData[portrait].field_0x45 == class) { var_v0 = obClassData[portrait].ability_back; } else { var_v0 = obClassData[class].ability_back; } return obAbilityGetName(var_v0); } /* 440DC 8016E1DC */ char* obClassGetName(u8 portrait, u8 class) { if (obClassData[portrait].field_0x45 == class) return obClassData[portrait].name; return obClassData[class].name; } /* 44130 8016E230 */ u8 obClassGetAbility(u8 portrait, u8 class, u8 row) { if (obClassData[portrait].field_0x45 != class) portrait = class; if (row == 0) { return obClassData[portrait].ability_front != 0xFF ? obClassData[portrait].ability_front : obClassData[class].ability_front; } else if (row == 1) { return obClassData[portrait].ability_middle != 0xFF ? obClassData[portrait].ability_middle : obClassData[class].ability_middle; } else { return obClassData[portrait].ability_back != 0xFF ? obClassData[portrait].ability_back : obClassData[class].ability_back; } } /* 44238 8016E338 */ u8 obClassGetAbilityHits(u8 portrait, u8 class, u8 row) { if (obClassData[portrait].field_0x45 != class) portrait = class; if (row == 0) { return obClassData[portrait].ability_front_hitcount != 0xFF ? obClassData[portrait].ability_front_hitcount : obClassData[class].ability_front_hitcount; } else if (row == 1) { return obClassData[portrait].ability_middle_hitcount != 0xFF ? obClassData[portrait].ability_middle_hitcount : obClassData[class].ability_middle_hitcount; } else { return obClassData[portrait].ability_back_hitcount != 0xFF ? obClassData[portrait].ability_back_hitcount : obClassData[class].ability_back_hitcount; } } /* 44340 8016E440 */ char* obAbilityGetName(u8 index) { return obAbilityData[index].name; } /* 44358 8016E458 */ u8 ability_get_field_0x4(u8 index) { return obAbilityData[index].field_0x4; } /* 44370 8016E470 */ Element obAbilityGetElement(u8 index, u16 arg1, u16 arg2, s32 arg3, u16 arg4) { u16 item_index; if (obAbilityData[index].element != ELEMENT_INVALID && obAbilityData[index].element != 0xF) return obAbilityData[index].element; if (obAbilityData[index].field_0x4 == 3) { item_index = obEquipmentGetFirstSpellbook(arg1, arg2, arg3, arg4); } else { item_index = obEquipmentGetFirstWeapon(arg1, arg2, arg3, arg4); } if (item_index == 0) return ELEMENT_PHYSICAL; return obEquipmentGetElement(item_index); } INCLUDE_ASM(const s32, "segment_obdata/_ob_fierce_selection", func_8016E50C); /* 44934 8016EA34 */ u8 func_8016EA34(u8 portrait, u8 class, u8 arg2) { if (obClassData[portrait].field_0x45 != class) portrait = class; 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; } /* 449EC 8016EAEC */ u16 character_get_item(CharacterSlot* character, u8 slot) { u16 item_id; item_id = 0; switch(slot) { case 0: item_id = character->item_upper_left; break; case 1: item_id = character->item_upper_right; break; case 2: item_id = character->item_lower_left; break; case 3: item_id = character->item_lower_right; break; } if (item_id == 0) { item_id = FP_CLASS_GET_ITEM_1[slot](character->portrait, character->class); } return item_id; } INCLUDE_ASM(const s32, "segment_obdata/_ob_fierce_selection", __character_handle_levelup); INCLUDE_ASM(const s32, "segment_obdata/_ob_fierce_selection", __character_initialise); /* 453E0 8016F4E0 */ char *obItemGetName(u16 arg0) { return obItemData[arg0].name; } /* 45400 8016F500 */ u8 item_get_field_0x4(u16 arg0) { return obItemData[arg0].field_0x4; } /* 45420 8016F520 */ u8 item_get_field_0x5(u16 arg0) { return obItemData[arg0].field_0x5; } /* 45440 8016F540 */ u8 item_get_field_0x8(u16 arg0) { return obItemData[arg0].field_0x8; } /* 45460 8016F560 */ u8 item_get_field_0x9(u16 arg0) { return obItemData[arg0].field_0x9; } /* 45480 8016F580 */ u8 equipment_get_field_0x1b(EquipmentId index) { return obEquipmentData[index].field_0x1b; } /* 45498 8016F598 */ u8 equipment_get_field_0x1c(EquipmentId index) { return obEquipmentData[index].field_0x1c; } /* 454B0 8016F5B0 */ char* obEquipmentGetName(EquipmentId index) { return obEquipmentData[index].name; } /* 454C8 8016F5C8 */ EquipmentType obEquipmentGetType(EquipmentId index) { return obEquipmentData[index].type; } /* 454E0 8016F5E0 */ Element obEquipmentGetElement(EquipmentId index) { Element element; element = obEquipmentData[index].element; if (element == ELEMENT_UNKNOWN_0x10) { element = CHARACTER_SLOT[0].element; } return element; } /* 45514 8016F614 */ u8 equipment_get_field_0x6(EquipmentId index) { return obEquipmentData[index].field_0x6; } /* 4552C 8016F62C */ u16 obEquipmentGetBuyPrice(EquipmentId index) { return obEquipmentData[index].buy_price; } /* 45544 8016F644 */ s8 equipment_get_field_0x10(EquipmentId index) { return obEquipmentData[index].field_0x10; } /* 4555C 8016F65C */ s8 obEquipmentGetStrength(EquipmentId index) { s8 ret; if (index == EQUIPMENT_ID_GALLANT_DOLL) { ret = CHARACTER_SLOT[0].strength / 20; } else { ret = obEquipmentData[index].strength; } return ret; } /* 455AC 8016F6AC */ s8 obEquipmentGetVitality(EquipmentId index) { s8 ret; if (index == EQUIPMENT_ID_GALLANT_DOLL) { ret = CHARACTER_SLOT[0].vitality / 20; } else { ret = obEquipmentData[index].vitality; } return ret; } /* 455FC 8016F6FC */ s8 obEquipmentGetIntelligence(EquipmentId index) { s8 ret; if (index == EQUIPMENT_ID_GALLANT_DOLL) { ret = CHARACTER_SLOT[0].intelligence / 20; } else { ret = obEquipmentData[index].intelligence; } return ret; } /* 4564C 8016F74C */ s8 obEquipmentGetMentality(EquipmentId index) { s8 ret; if (index == EQUIPMENT_ID_GALLANT_DOLL) { ret = CHARACTER_SLOT[0].mentality / 20; } else { ret = obEquipmentData[index].mentality; } return ret; } /* 4569C 8016F79C */ s8 obEquipmentGetAgility(EquipmentId index) { s8 ret; if (index == EQUIPMENT_ID_GALLANT_DOLL) { ret = CHARACTER_SLOT[0].agility / 20; } else { ret = obEquipmentData[index].agility; } return ret; } /* 456EC 8016F7EC */ s8 obEquipmentGetDexterity(EquipmentId index) { s8 ret; if (index == EQUIPMENT_ID_GALLANT_DOLL) { ret = CHARACTER_SLOT[0].dexterity / 20; } else { ret = obEquipmentData[index].dexterity; } return ret; } /* 4573C 8016F83C */ s8 obEquipmentGetResistanceStrike(EquipmentId index) { return obEquipmentData[index].res_strike; } /* 45754 8016F854 */ s8 obEquipmentGetResistanceWind(EquipmentId index) { return obEquipmentData[index].res_wind; } /* 4576C 8016F86C */ s8 obEquipmentGetResistanceFire(EquipmentId index) { return obEquipmentData[index].res_fire; } /* 45784 8016F884 */ s8 obEquipmentGetResistanceEarth(EquipmentId index) { return obEquipmentData[index].res_earth; } /* 4579C 8016F89C */ s8 obEquipmentGetResistanceWater(EquipmentId index) { return obEquipmentData[index].res_water; } /* 457B4 8016F8B4 */ s8 obEquipmentGetResistanceVirtue(EquipmentId index) { return obEquipmentData[index].res_holy; } /* 457CC 8016F8CC */ s8 obEquipmentGetResistanceBane(EquipmentId index) { return obEquipmentData[index].res_dark; } /* 457E4 8016F8E4 */ u8 equipment_get_field_0x18_b68(EquipmentId index) { return obEquipmentData[index].field_0x18 >> 6; } /* 45800 8016F900 */ u8 equipment_get_field_0x18_b46(EquipmentId index) { return (obEquipmentData[index].field_0x18 >> 4) & 3; } /* 45820 8016F920 */ u8 equipment_get_field_0x18_b24(EquipmentId index) { return (obEquipmentData[index].field_0x18 >> 2) & 3; } /* 45840 8016F940 */ u8 equipment_get_field_0x18_b12(EquipmentId index) { return obEquipmentData[index].field_0x18 & 3; } /* 4585C 8016F95C */ u8 equipment_get_field_0x19_b68(EquipmentId index) { return obEquipmentData[index].field_0x19 >> 6; } /* 45878 8016F978 */ u8 equipment_get_field_0x19_b46(EquipmentId index) { return (obEquipmentData[index].field_0x19 >> 4) & 3; } /* 45898 8016F998 */ u8 equipment_get_field_0x19_b24(EquipmentId index) { return (obEquipmentData[index].field_0x19 >> 2) & 3; } /* 458B8 8016F9B8 */ u8 equipment_get_field_0x19_b12(EquipmentId index) { return obEquipmentData[index].field_0x19 & 3; } /* 458D4 8016F9D4 */ u8 equipment_get_field_0x1a_b7(EquipmentId index) { return obEquipmentData[index].field_0x1a >> 7; } /* 458F0 8016F9F0 */ bool obEquipmentIsWeapon(EquipmentId index) { s32 type = obEquipmentData[index].type; if (type != 0) { if (type < EQUIPMENT_TYPE_SMALL_SHIELD) { return true; } if (type == EQUIPMENT_TYPE_FAN) { return true; } } return false; } INCLUDE_ASM(const s32, "segment_obdata/_ob_fierce_selection", obEquipmentGetFirstWeapon); /* 45A50 8016FB50 */ EquipmentId obEquipmentGetFirstSpellbook(EquipmentId arg0, EquipmentId arg1, EquipmentId arg2, EquipmentId arg3) { if (obEquipmentData[arg0].type == EQUIPMENT_TYPE_SPELLBOOK) return arg0; if (obEquipmentData[arg1].type == EQUIPMENT_TYPE_SPELLBOOK) return arg1; if (obEquipmentData[arg2].type == EQUIPMENT_TYPE_SPELLBOOK) return arg2; if (obEquipmentData[arg3].type == EQUIPMENT_TYPE_SPELLBOOK) return arg3; return 0; } INCLUDE_ASM(const s32, "segment_obdata/_ob_fierce_selection", func_8016FBE0); INCLUDE_ASM(const s32, "segment_obdata/_ob_fierce_selection", func_8016FCEC);