From 36b8a6a9a2ad5aca2e5d59a1293222819d987aa6 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 13 Oct 2018 23:23:33 +0200 Subject: More apprentice work --- src/apprentice.c | 947 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 947 insertions(+) create mode 100644 src/apprentice.c (limited to 'src/apprentice.c') diff --git a/src/apprentice.c b/src/apprentice.c new file mode 100644 index 000000000..a0237706c --- /dev/null +++ b/src/apprentice.c @@ -0,0 +1,947 @@ +#include "global.h" +#include "apprentice.h" +#include "string_util.h" +#include "script.h" +#include "text.h" +#include "random.h" +#include "main.h" +#include "malloc.h" +#include "strings.h" +#include "menu.h" +#include "script_menu.h" +#include "party_menu.h" +#include "data2.h" +#include "task.h" +#include "sound.h" +#include "event_data.h" +#include "field_player_avatar.h" +#include "event_object_movement.h" +#include "constants/items.h" +#include "constants/songs.h" + +struct Unk030062ECStruct +{ + u8 unk0; + u16 unk2[3][5]; + u8 unk20[3][5]; +}; + +struct Unk030062F0Struct +{ + u16 unk0; + u16 unk2; + u16 unk4; + u16 unk6; +}; + +extern struct Unk030062ECStruct *gUnknown_030062EC; +extern struct Unk030062F0Struct *gUnknown_030062F0; + +extern const u8 *const gUnknown_08611330[]; +extern const u8 *const gUnknown_08610FF0[][2]; +extern const u8 *const gUnknown_086112B0[][2]; +extern const u8 *const gUnknown_08611230[][2]; +extern const u8 *const gUnknown_086111B0[][2]; +extern const u8 *const gUnknown_08610EF0[][4]; +extern const u8 *const gUnknown_08611070[][5]; +extern const u8 gUnknown_08611548[8]; +extern const u8 gUnknown_086114D3[]; +extern const bool8 gUnknown_08611370[]; +extern void (* const gUnknown_086114E0[])(void); + +// text +extern const u8 gText_Give[]; +extern const u8 gText_NoNeed[]; +extern const u8 gText_Yes[]; +extern const u8 gText_No[]; + +// This file's functions. +void sub_81A087C(void); +u16 sub_819FF98(u8 arg0); +bool8 sub_81A0194(u8 arg0, u16 moveId); +void sub_81A0804(bool8 noBButton, u8 itemsCount, u8 windowId); +u8 sub_81A0784(u8 left, u8 top, u8 width, u8 height); +void sub_81A07E8(u8 windowId); +void sub_81A172C(void (*func)(void)); + +void sub_819F99C(u8 id) +{ + u8 i, var; + const u8 *str; + + var = gSaveBlock2Ptr->field_DC[id].field_2; + for (i = 0; var != 0 && i < 4; i++) + { + var /= 10; + } + + StringCopy7(gStringVar1, gSaveBlock2Ptr->field_DC[id].playerName); + ConvertInternationalString(gStringVar1, gSaveBlock2Ptr->field_DC[id].language); + ConvertIntToDecimalStringN(gStringVar2, gSaveBlock2Ptr->field_DC[id].field_2, STR_CONV_MODE_RIGHT_ALIGN, i); + str = gUnknown_08611330[gSaveBlock2Ptr->field_DC[id].field_0_0]; + StringExpandPlaceholders(gStringVar4, str); +} + +void sub_819FA50(void) +{ + EnableBothScriptContexts(); +} + +void sub_819FA5C(struct Apprentice *apprentice) +{ + u8 i; + + for (i = 0; i < 6; i++) + apprentice->easyChatWords[i] |= 0xFFFF; + + apprentice->playerName[0] = EOS; + apprentice->field_0_0 = 16; +} + +void sub_819FAA0(void) +{ + u8 i, j; + + gSaveBlock2Ptr->field_B2_1 = 0; + for (i = 0; i < 4; i++) + { + for (j = 0; j < 6; j++) + gSaveBlock2Ptr->field_DC[i].easyChatWords[j] |= 0xFFFF; + gSaveBlock2Ptr->field_DC[i].field_0_0 = 16; + gSaveBlock2Ptr->field_DC[i].playerName[0] = EOS; + gSaveBlock2Ptr->field_DC[i].field_0_1 = 0; + gSaveBlock2Ptr->field_DC[i].field_2 = 0; + gSaveBlock2Ptr->field_DC[i].field_1 = 0; + for (j = 0; j < 4; j++) + gSaveBlock2Ptr->field_DC[i].playerId[j] = 0; + gSaveBlock2Ptr->field_DC[i].language = gGameLanguage; + gSaveBlock2Ptr->field_DC[i].unk40 = 0; + } + + sub_81A087C(); +} + +bool8 sub_819FBB0(void) +{ + return (gSaveBlock2Ptr->field_B1_0 != 0); +} + +void sub_819FBC8(void) +{ + if (gSaveBlock2Ptr->field_DC[0].field_2 == 0) + { + do + { + gSaveBlock2Ptr->field_B0 = gUnknown_08611548[Random() % ARRAY_COUNT(gUnknown_08611548)]; + } while (gSaveBlock2Ptr->field_B0 == gSaveBlock2Ptr->field_DC[0].field_0_0); + } + else + { + do + { + gSaveBlock2Ptr->field_B0 = Random() % 16; + } while (gSaveBlock2Ptr->field_B0 == gSaveBlock2Ptr->field_DC[0].field_0_0); + } +} + +void sub_819FC40(u8 value) +{ + gSaveBlock2Ptr->field_B1_0 = value; +} + +void sub_819FC60(void) +{ + u8 array[10]; + u8 i; + + for (i = 0; i < ARRAY_COUNT(array); i++) + array[i] = i; + + for (i = 0; i < 50; i++) + { + u8 temp; + u8 var1 = Random() % ARRAY_COUNT(array); + u8 var2 = Random() % ARRAY_COUNT(array); + SWAP(array[var1], array[var2], temp); + } + + for (i = 0; i < 3; i++) + gSaveBlock2Ptr->field_B4[i] = ((array[i * 2] & 0xF) << 4) | ((array[i * 2 + 1]) & 0xF); +} + +u8 sub_819FCF8(u8 val, u8 *arg1, u8 *arg2) +{ + u8 i, count; + u8 ret = 0; + + if (val == 2) + { + do + { + ret = Random() % 3; + for (count = 0, i = 0; i < 5; i++) + { + if (gUnknown_030062EC->unk2[ret][i] != 0) + count++; + } + } while (count > 3); + } + else if (val == 1) + { + ret = arg1[*arg2]; + (*arg2)++; + } + + return ret; +} + +void sub_819FD64(void) +{ + u8 sp_0[10]; + u8 sp_C[3]; + u8 sp_10; + u8 i, j; + u8 rand1, rand2; + u8 id; + + for (i = 0; i < 3; i++) + sp_C[i] = i; + for (i = 0; i < 10; i++) + { + u8 temp; + rand1 = Random() % ARRAY_COUNT(sp_C); + rand2 = Random() % ARRAY_COUNT(sp_C); + SWAP(sp_C[rand1], sp_C[rand2], temp); + } + + for (i = 0; i < 10; i++) + sp_0[i] = gUnknown_086114D3[i]; + for (i = 0; i < 50; i++) + { + u8 temp; + rand1 = Random() % ARRAY_COUNT(sp_0); + rand2 = Random() % ARRAY_COUNT(sp_0); + SWAP(sp_0[rand1], sp_0[rand2], temp); + } + + gUnknown_030062EC = AllocZeroed(sizeof(*gUnknown_030062EC)); + gUnknown_030062EC->unk0 = 0; + for (i = 0; i < 5; i++) + { + for (j = 0; j < 3; j++) + gUnknown_030062EC->unk20[j][i] = 4; + } + + sp_10 = 0; + for (i = 0; i < 9; i++) + { + gSaveBlock2Ptr->field_B8[i].unk0_0 = sp_0[i]; + if (sp_0[i] != 3) + { + gSaveBlock2Ptr->field_B8[i].unk0_1 = sub_819FCF8(sp_0[i], sp_C, &sp_10); + id = gSaveBlock2Ptr->field_B8[i].unk0_1; + if (sp_0[i] == 2) + { + do + { + rand1 = Random() % 4; + for (j = 0; j < gUnknown_030062EC->unk0 + 1; j++) + { + if (gUnknown_030062EC->unk20[id][j] == rand1) + break; + } + } while (j != gUnknown_030062EC->unk0 + 1); + + gUnknown_030062EC->unk20[id][gUnknown_030062EC->unk0] = rand1; + gSaveBlock2Ptr->field_B8[i].unk0_2 = rand1; + gSaveBlock2Ptr->field_B8[i].unk2 = sub_819FF98(gSaveBlock2Ptr->field_B8[i].unk0_1); + } + } + } + + FREE_AND_SET_NULL(gUnknown_030062EC); +} + +// No idea why a do-while loop is needed, but it will not match without it. + +#define APPRENTICE_SPECIES_ID(speciesArrId, monId) speciesArrId = (gSaveBlock2Ptr->field_B4[monId] >> \ + (((gSaveBlock2Ptr->field_B2_0 >> monId) & 1) << 2)) & 0xF; \ + do {} while (0) + +// Why the need to have two macros do the exact thing differently? +#define APPRENTICE_SPECIES_ID_2(speciesArrId, monId) { u8 a0 = ((gSaveBlock2Ptr->field_B2_0 >> monId) & 1);\ + speciesArrId = gSaveBlock2Ptr->field_B4[monId]; \ + speciesArrId = ((speciesArrId) >> (a0 << 2)) & 0xF; \ + } + +u16 sub_819FF98(u8 arg0) +{ + u8 i, j; + u8 id; + u8 knownMovesCount; + u16 species; + const u16 *learnset; + bool32 var_24 = FALSE; + u16 moveId = 0; + bool32 valid; + u8 level; + + if (arg0 < 3) + { + APPRENTICE_SPECIES_ID(id, arg0); + } + else + { + id = 0; + } + + species = gApprentices[gSaveBlock2Ptr->field_B0].species[id]; + learnset = gLevelUpLearnsets[species]; + j = 0; + if (gSaveBlock2Ptr->field_B1_0 == 1) + level = 50; + else + level = 60; + + for (j = 0; learnset[j] != 0xFFFF; j++) + { + if ((learnset[j] & 0xFE00) > (level << 9)) + break; + } + + knownMovesCount = j; + i = 0; + while (i < 5) + { + if (Random() % 2 == 0 || var_24 == TRUE) + { + do + { + do + { + id = Random() % (NUM_TECHNICAL_MACHINES + NUM_HIDDEN_MACHINES); + valid = CanSpeciesLearnTMHM(species, id); + } + while (!valid); + + moveId = ItemIdToBattleMoveId(ITEM_TM01 + id); + valid = TRUE; + + if (knownMovesCount < 5) + j = 0; + else + j = knownMovesCount - 4; + + for (; j < knownMovesCount; j++) + { + if ((learnset[j] & 0x1FF) == moveId) + { + valid = FALSE; + break; + } + } + } while (valid != TRUE); + } + else + { + if (knownMovesCount < 5) + { + var_24 = TRUE; + continue; + } + else + { + do + { + u8 learnsetId = Random() % (knownMovesCount - 4); + moveId = learnset[learnsetId] & 0x1FF; + valid = TRUE; + for (j = knownMovesCount - 4; j < knownMovesCount; j++) + { + if ((learnset[j] & 0x1FF) == moveId) + { + valid = FALSE; + break; + } + } + } while (valid != TRUE); + } + } + + if (sub_81A0194(arg0, moveId)) + { + if (gUnknown_08611370[moveId]) + break; + i++; + } + } + + gUnknown_030062EC->unk0++; + return moveId; +} + +bool8 sub_81A0194(u8 arg0, u16 moveId) +{ + u8 i; + + for (i = 0; i < 5; i++) + { + if (gUnknown_030062EC->unk2[arg0][i] == moveId) + return FALSE; + } + + gUnknown_030062EC->unk2[arg0][gUnknown_030062EC->unk0] = moveId; + return TRUE; +} + +void GetLatestLearnedMoves(u16 species, u16 *moves) +{ + u8 i, j; + u8 level, knownMovesCount; + const u16 *learnset; + + if (gSaveBlock2Ptr->field_B1_0 == 1) + level = 50; + else + level = 60; + + learnset = gLevelUpLearnsets[species]; + for (i = 0; learnset[i] != 0xFFFF; i++) + { + if ((learnset[i] & 0xFE00) > (level << 9)) + break; + } + + knownMovesCount = i; + if (knownMovesCount > 4) + knownMovesCount = 4; + + for (j = 0; j < knownMovesCount; j++) + moves[j] = learnset[(i - 1) - j] & 0x1FF; +} + +u16 sub_81A0284(u8 arg0, u8 speciesTableId, u8 arg2) +{ + u16 moves[4]; + u8 i, count; + + if (gSaveBlock2Ptr->field_B1_1 < 3) + return 0; + + count = 0; + for (i = 0; i < 9; i++) + { + if (gSaveBlock2Ptr->field_B8[i].unk0_0 == 0) + break; + count++; + } + + GetLatestLearnedMoves(gApprentices[gSaveBlock2Ptr->field_B0].species[speciesTableId], moves); + for (i = 0; i < count && i < gSaveBlock2Ptr->field_B1_1 - 3; i++) + { + if (gSaveBlock2Ptr->field_B8[i].unk0_0 == 2 + && gSaveBlock2Ptr->field_B8[i].unk0_1 == arg0 + && gSaveBlock2Ptr->field_B8[i].unk0_3 != 0) + { + moves[gSaveBlock2Ptr->field_B8[i].unk0_2] = gSaveBlock2Ptr->field_B8[i].unk2; + } + } + + return moves[arg2]; +} + +void sub_81A0390(u8 arg0) +{ + struct ApprenticeMon *apprenticeMons[3]; + u8 i, j; + u32 speciesTableId; + + for (i = 0; i < 3; i++) + { + gSaveBlock2Ptr->field_DC[0].monData[i].species = 0; + gSaveBlock2Ptr->field_DC[0].monData[i].item = 0; + for (j = 0; j < 4; j++) + gSaveBlock2Ptr->field_DC[0].monData[i].moves[j] = 0; + } + + j = gSaveBlock2Ptr->field_B1_2; + for (i = 0; i < 3; i++) + { + apprenticeMons[j] = &gSaveBlock2Ptr->field_DC[0].monData[i]; + j = (j + 1) % 3; + } + + for (i = 0; i < 3; i++) + { + APPRENTICE_SPECIES_ID(speciesTableId, i); + apprenticeMons[i]->species = gApprentices[gSaveBlock2Ptr->field_B0].species[speciesTableId]; + GetLatestLearnedMoves(apprenticeMons[i]->species, apprenticeMons[i]->moves); + } + + for (i = 0; i < arg0; i++) + { + u8 var1 = gSaveBlock2Ptr->field_B8[i].unk0_0; + u8 monId = gSaveBlock2Ptr->field_B8[i].unk0_1; + if (var1 == 1) + { + if (gSaveBlock2Ptr->field_B8[i].unk0_3 != 0) + apprenticeMons[monId]->item = gSaveBlock2Ptr->field_B8[i].unk2; + } + else if (var1 == 2) + { + if (gSaveBlock2Ptr->field_B8[i].unk0_3 != 0) + { + u32 moveSlot = gSaveBlock2Ptr->field_B8[i].unk0_2; + apprenticeMons[monId]->moves[moveSlot] = gSaveBlock2Ptr->field_B8[i].unk2; + } + } + } +} + +void sub_81A04E4(u8 arg0) +{ + u8 i; + u8 windowId; + const u8 *strings[3]; + u8 count = 2; + u8 width; + u8 left; + u8 top; + s32 pixelWidth; + + switch (arg0) + { + case 0: + left = 0x12; + top = 8; + strings[0] = gText_Lv50; + strings[1] = gText_OpenLevel; + break; + case 1: + count = 3; + left = 0x12; + top = 6; + for (i = 0; i < 3; i++) + { + u16 species; + u32 speciesTableId; + + APPRENTICE_SPECIES_ID(speciesTableId, i); + species = gApprentices[gSaveBlock2Ptr->field_B0].species[speciesTableId]; + strings[i] = gSpeciesNames[species]; + } + break; + case 2: + left = 0x12; + top = 8; + if (gSaveBlock2Ptr->field_B1_1 > 2) + return; + strings[1] = gSpeciesNames[gUnknown_030062F0->unk2]; + strings[0] = gSpeciesNames[gUnknown_030062F0->unk0]; + break; + case 3: + left = 0x11; + top = 8; + strings[0] = gMoveNames[gUnknown_030062F0->unk4]; + strings[1] = gMoveNames[gUnknown_030062F0->unk6]; + break; + case 4: + left = 0x12; + top = 8; + strings[0] = gText_Give; + strings[1] = gText_NoNeed; + break; + case 6: + left = 0x14; + top = 8; + strings[0] = gText_Yes; + strings[1] = gText_No; + break; + default: + left = 0; + top = 0; + break; + } + + pixelWidth = 0; + for (i = 0; i < count; i++) + { + s32 width = GetStringWidth(1, strings[i], 0); + if (width > pixelWidth) + pixelWidth = width; + } + + width = convert_pixel_width_to_tile_width(pixelWidth); + left = sub_80E2D5C(left, width); + windowId = sub_81A0784(left, top, width, count * 2); + SetStandardWindowBorderStyle(windowId, 0); + + for (i = 0; i < count; i++) + AddTextPrinterParameterized(windowId, 1, strings[i], 8, (i * 16) + 1, TEXT_SPEED_FF, NULL); + + InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, count, 0); + sub_81A0804(TRUE, count, windowId); +} + +#define tNoBButton data[4] +#define tWrapAround data[5] +#define tWindowId data[6] + +void sub_81A070C(u8 taskId) +{ + s8 input; + s16 *data = gTasks[taskId].data; + + if (!tWrapAround) + input = Menu_ProcessInputNoWrapAround(); + else + input = ProcessMenuInput(); + + switch (input) + { + case MENU_NOTHING_CHOSEN: + return; + case MENU_B_PRESSED: + if (tNoBButton) + return; + + PlaySE(SE_SELECT); + gSpecialVar_Result = 0x7F; + break; + default: + gSpecialVar_Result = input; + break; + } + + sub_81A07E8(tWindowId); + DestroyTask(taskId); + EnableBothScriptContexts(); +} + +u8 sub_81A0784(u8 left, u8 top, u8 width, u8 height) +{ + u8 windowId; + struct WindowTemplate winTemplate = CreateWindowTemplate(0, left + 1, top + 1, width, height, 15, 100); + + windowId = AddWindow(&winTemplate); + PutWindowTilemap(windowId); + CopyWindowToVram(windowId, 3); + return windowId; +} + +void sub_81A07E8(u8 windowId) +{ + sub_8198070(windowId, TRUE); + RemoveWindow(windowId); +} + +void sub_81A0804(bool8 noBButton, u8 itemsCount, u8 windowId) +{ + u8 taskId = CreateTask(sub_81A070C, 80); + gTasks[taskId].tNoBButton = noBButton; + + if (itemsCount > 3) + gTasks[taskId].tWrapAround = TRUE; + else + gTasks[taskId].tWrapAround = FALSE; + + gTasks[taskId].tWindowId = windowId; +} + +#undef tNoBButton +#undef tWrapAround +#undef tWindowId + +void sub_81A085C(void) +{ + gUnknown_086114E0[gSpecialVar_0x8004](); +} + +void sub_81A087C(void) +{ + u8 i; + + sub_819FBC8(); + gSaveBlock2Ptr->field_B1_0 = 0; + gSaveBlock2Ptr->field_B1_1 = 0; + gSaveBlock2Ptr->field_B1_2 = 0; + gSaveBlock2Ptr->field_B2_0 = 0; + + for (i = 0; i < 3; i++) + gSaveBlock2Ptr->field_B4[i] = 0; + + for (i = 0; i < 9; i++) + { + gSaveBlock2Ptr->field_B8[i].unk0_0 = 0; + gSaveBlock2Ptr->field_B8[i].unk0_1 = 0; + gSaveBlock2Ptr->field_B8[i].unk0_2 = 0; + gSaveBlock2Ptr->field_B8[i].unk0_3 = 0; + gSaveBlock2Ptr->field_B8[i].unk2 = 0; + } +} + +void sub_81A093C(void) +{ + if (!sub_819FBB0()) + gSpecialVar_Result = FALSE; + else + gSpecialVar_Result = TRUE; +} + +void sub_81A0964(void) +{ + sub_819FC40(gSpecialVar_0x8005); +} + +void sub_81A0978(void) +{ + sub_819FBC8(); +} + +void sub_81A0984(void) +{ + sub_819FD64(); +} + +void sub_81A0990(void) +{ + gSaveBlock2Ptr->field_B1_1++; +} + +void sub_81A09B4(void) +{ + gSpecialVar_Result = gSaveBlock2Ptr->field_B1_1; +} + +void sub_81A09D0(void) +{ + s32 var = gSaveBlock2Ptr->field_B1_1 - 3; + if (var < 0) + { + gSpecialVar_Result = FALSE; + } + else + { + if (var > 8) + gSpecialVar_Result = TRUE; + + if (!gSaveBlock2Ptr->field_B8[var].unk0_0) + gSpecialVar_Result = TRUE; + else + gSpecialVar_Result = FALSE; + } +} + +void sub_81A0A20(void) +{ + sub_81A04E4(gSpecialVar_0x8005); +} + +void sub_81A0A34(u8 taskId) +{ + if (!RunTextPrintersAndIsPrinter0Active()) + { + DestroyTask(taskId); + if (gSpecialVar_0x8005) + sub_81A172C(EnableBothScriptContexts); + else + EnableBothScriptContexts(); + } +} + +void sub_81A0A70(void) +{ + const u8 *string; + + if (gSpecialVar_0x8006 == 6) + { + string = gUnknown_08610FF0[gSaveBlock2Ptr->field_B0][0]; + } + else if (gSpecialVar_0x8006 == 7) + { + string = gUnknown_08610FF0[gSaveBlock2Ptr->field_B0][1]; + } + else if (gSpecialVar_0x8006 == 8) + { + string = gUnknown_086111B0[gSaveBlock2Ptr->field_B0][0]; + } + else if (gSpecialVar_0x8006 == 9) + { + string = gUnknown_086111B0[gSaveBlock2Ptr->field_B0][1]; + } + else if (gSpecialVar_0x8006 == 4) + { + string = gUnknown_08611230[gSaveBlock2Ptr->field_B0][0]; + } + else if (gSpecialVar_0x8006 == 5) + { + string = gUnknown_08611230[gSaveBlock2Ptr->field_B0][1]; + } + else if (gSpecialVar_0x8006 == 10) + { + string = gUnknown_08611070[gSaveBlock2Ptr->field_B0][0]; + } + else if (gSpecialVar_0x8006 == 11) + { + string = gUnknown_086112B0[gSaveBlock2Ptr->field_B0][0]; + } + else if (gSpecialVar_0x8006 == 12) + { + string = gUnknown_08611070[gSaveBlock2Ptr->field_B0][3]; + } + else if (gSpecialVar_0x8006 == 13) + { + string = gUnknown_08611070[gSaveBlock2Ptr->field_B0][1]; + } + else if (gSpecialVar_0x8006 == 16) + { + string = gUnknown_08611070[gSaveBlock2Ptr->field_B0][4]; + } + else if (gSpecialVar_0x8006 == 14) + { + string = gUnknown_08611070[gSaveBlock2Ptr->field_B0][2]; + } + else if (gSpecialVar_0x8006 == 15) + { + string = gUnknown_086112B0[gSaveBlock2Ptr->field_B0][1]; + } + else if (gSpecialVar_0x8006 == 0) + { + string = gUnknown_08610EF0[gSaveBlock2Ptr->field_B0][0]; + } + else if (gSpecialVar_0x8006 == 1) + { + string = gUnknown_08610EF0[gSaveBlock2Ptr->field_B0][1]; + } + else if (gSpecialVar_0x8006 == 2) + { + string = gUnknown_08610EF0[gSaveBlock2Ptr->field_B0][2]; + } + else if (gSpecialVar_0x8006 == 3) + { + string = gUnknown_08610EF0[gSaveBlock2Ptr->field_B0][3]; + } + else + { + EnableBothScriptContexts(); + return; + } + + StringExpandPlaceholders(gStringVar4, string); + AddTextPrinterForMessage(TRUE); + CreateTask(sub_81A0A34, 1); +} + +void sub_81A0C9C(void) +{ + ScriptContext2_Enable(); + FreezeEventObjects(); + sub_808B864(); + sub_808BCF4(); + NewMenuHelpers_DrawDialogueFrame(0, 1); + sub_81A0A70(); +} + +void sub_81A0CC0(void) +{ + if (gSaveBlock2Ptr->field_B1_1 < 3) + { + gSpecialVar_Result = 2; + } + else if (gSaveBlock2Ptr->field_B1_1 > 11) + { + gSpecialVar_Result = 5; + } + else + { + s32 id = gSaveBlock2Ptr->field_B1_1 - 3; + switch (gSaveBlock2Ptr->field_B8[id].unk0_0) + { + case 1: + gSpecialVar_Result = 4; + break; + case 2: + gSpecialVar_Result = 3; + break; + case 3: + gSpecialVar_Result = 1; + break; + default: + gSpecialVar_Result = 5; + break; + } + } +} + +void sub_81A0D40(void) +{ + if (gSpecialVar_0x8005) + { + u8 bitNo = gSpecialVar_0x8006; + gSaveBlock2Ptr->field_B2_0 |= 1 << bitNo; + } +} + +void sub_81A0D80(void) +{ + if (gSaveBlock2Ptr->field_B1_1 >= 3) + { + u8 id = gSaveBlock2Ptr->field_B1_1 - 3; + if (gSpecialVar_0x8005) + gSaveBlock2Ptr->field_B8[id].unk0_3 = 1; + else + gSaveBlock2Ptr->field_B8[id].unk0_3 = 0; + } +} + +void sub_81A0DD4(void) +{ + u8 i; + u8 count = 0; + u8 id1, id2; + + for (i = 0; i < 9 && gSaveBlock2Ptr->field_B8[i].unk0_0; count++, i++) + ; + + gUnknown_030062F0 = AllocZeroed(sizeof(*gUnknown_030062F0)); + if (gSpecialVar_0x8005 == 2) + { + if (gSaveBlock2Ptr->field_B1_1 < 3) + { + id1 = gSaveBlock2Ptr->field_B4[gSaveBlock2Ptr->field_B1_1] >> 4; + gUnknown_030062F0->unk2 = gApprentices[gSaveBlock2Ptr->field_B0].species[id1]; + + id2 = gSaveBlock2Ptr->field_B4[gSaveBlock2Ptr->field_B1_1] & 0xF; + gUnknown_030062F0->unk0 = gApprentices[gSaveBlock2Ptr->field_B0].species[id2]; + } + } + else if (gSpecialVar_0x8005 == 3) + { + if (gSaveBlock2Ptr->field_B1_1 >= 3 + && gSaveBlock2Ptr->field_B1_1 < count + 3 + && gSaveBlock2Ptr->field_B8[gSaveBlock2Ptr->field_B1_1 - 3].unk0_0 == 2) + { + count = gSaveBlock2Ptr->field_B8[gSaveBlock2Ptr->field_B1_1 - 3].unk0_1; + APPRENTICE_SPECIES_ID_2(id1, count); + gUnknown_030062F0->unk0 = gApprentices[gSaveBlock2Ptr->field_B0].species[id1]; + gUnknown_030062F0->unk4 = sub_81A0284(count, id1, gSaveBlock2Ptr->field_B8[gSaveBlock2Ptr->field_B1_1 - 3].unk0_2); + gUnknown_030062F0->unk6 = gSaveBlock2Ptr->field_B8[gSaveBlock2Ptr->field_B1_1 - 3].unk2; + } + } + else if (gSpecialVar_0x8005 == 4) + { + if (gSaveBlock2Ptr->field_B1_1 >= 3 + && gSaveBlock2Ptr->field_B1_1 < count + 3 + && gSaveBlock2Ptr->field_B8[gSaveBlock2Ptr->field_B1_1 - 3].unk0_0 == 1) + { + count = gSaveBlock2Ptr->field_B8[gSaveBlock2Ptr->field_B1_1 - 3].unk0_1; + APPRENTICE_SPECIES_ID_2(id2, count); + gUnknown_030062F0->unk0 = gApprentices[gSaveBlock2Ptr->field_B0].species[id2]; + } + } +} + +void sub_81A0FE4(void) +{ + FREE_AND_SET_NULL(gUnknown_030062F0); +} -- cgit v1.2.3 From b4a42a6832e851f457636da61fceb530b77962f9 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 14 Oct 2018 11:37:44 +0200 Subject: Decompile apprentice --- src/apprentice.c | 528 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 499 insertions(+), 29 deletions(-) (limited to 'src/apprentice.c') diff --git a/src/apprentice.c b/src/apprentice.c index a0237706c..9f26b561c 100644 --- a/src/apprentice.c +++ b/src/apprentice.c @@ -1,5 +1,6 @@ #include "global.h" #include "apprentice.h" +#include "constants/apprentice.h" #include "string_util.h" #include "script.h" #include "text.h" @@ -10,11 +11,16 @@ #include "menu.h" #include "script_menu.h" #include "party_menu.h" +#include "item_menu.h" #include "data2.h" #include "task.h" +#include "item.h" #include "sound.h" +#include "battle_tower.h" #include "event_data.h" +#include "international_string_util.h" #include "field_player_avatar.h" +#include "new_game.h" #include "event_object_movement.h" #include "constants/items.h" #include "constants/songs.h" @@ -36,6 +42,9 @@ struct Unk030062F0Struct extern struct Unk030062ECStruct *gUnknown_030062EC; extern struct Unk030062F0Struct *gUnknown_030062F0; +extern void (*gUnknown_030062F4)(void); + +extern void sub_8165AE8(struct Apprentice *); extern const u8 *const gUnknown_08611330[]; extern const u8 *const gUnknown_08610FF0[][2]; @@ -49,6 +58,11 @@ extern const u8 gUnknown_086114D3[]; extern const bool8 gUnknown_08611370[]; extern void (* const gUnknown_086114E0[])(void); +extern const u8 gUnknown_085DCEDC[]; +extern const u8 gUnknown_085DCF0E[]; +extern const u8 gUnknown_085DCEFA[]; +extern const u8 gUnknown_085DCF2C[]; + // text extern const u8 gText_Give[]; extern const u8 gText_NoNeed[]; @@ -57,12 +71,12 @@ extern const u8 gText_No[]; // This file's functions. void sub_81A087C(void); -u16 sub_819FF98(u8 arg0); -bool8 sub_81A0194(u8 arg0, u16 moveId); -void sub_81A0804(bool8 noBButton, u8 itemsCount, u8 windowId); -u8 sub_81A0784(u8 left, u8 top, u8 width, u8 height); -void sub_81A07E8(u8 windowId); -void sub_81A172C(void (*func)(void)); +static u16 sub_819FF98(u8 arg0); +static bool8 sub_81A0194(u8 arg0, u16 moveId); +static void CreateChooseAnswerTask(bool8 noBButton, u8 itemsCount, u8 windowId); +static u8 CreateAndShowWindow(u8 left, u8 top, u8 width, u8 height); +static void RemoveAndHideWindow(u8 windowId); +static void ExecuteFuncAfterButtonPress(void (*func)(void)); void sub_819F99C(u8 id) { @@ -274,7 +288,7 @@ void sub_819FD64(void) speciesArrId = ((speciesArrId) >> (a0 << 2)) & 0xF; \ } -u16 sub_819FF98(u8 arg0) +static u16 sub_819FF98(u8 arg0) { u8 i, j; u8 id; @@ -380,7 +394,7 @@ u16 sub_819FF98(u8 arg0) return moveId; } -bool8 sub_81A0194(u8 arg0, u16 moveId) +static bool8 sub_81A0194(u8 arg0, u16 moveId) { u8 i; @@ -498,7 +512,7 @@ void sub_81A0390(u8 arg0) } } -void sub_81A04E4(u8 arg0) +static void CreateMenuWithAnswers(u8 arg0) { u8 i; u8 windowId; @@ -511,13 +525,13 @@ void sub_81A04E4(u8 arg0) switch (arg0) { - case 0: + case APPRENTICE_ASK_WHICH_LEVEL: left = 0x12; top = 8; strings[0] = gText_Lv50; strings[1] = gText_OpenLevel; break; - case 1: + case APPRENTICE_ASK_3SPECIES: count = 3; left = 0x12; top = 6; @@ -531,7 +545,7 @@ void sub_81A04E4(u8 arg0) strings[i] = gSpeciesNames[species]; } break; - case 2: + case APPRENTICE_ASK_2SPECIES: left = 0x12; top = 8; if (gSaveBlock2Ptr->field_B1_1 > 2) @@ -539,19 +553,19 @@ void sub_81A04E4(u8 arg0) strings[1] = gSpeciesNames[gUnknown_030062F0->unk2]; strings[0] = gSpeciesNames[gUnknown_030062F0->unk0]; break; - case 3: + case APPRENTICE_ASK_MOVES: left = 0x11; top = 8; strings[0] = gMoveNames[gUnknown_030062F0->unk4]; strings[1] = gMoveNames[gUnknown_030062F0->unk6]; break; - case 4: + case APPRENTICE_ASK_GIVE: left = 0x12; top = 8; strings[0] = gText_Give; strings[1] = gText_NoNeed; break; - case 6: + case APPRENTICE_ASK_YES_NO: left = 0x14; top = 8; strings[0] = gText_Yes; @@ -573,21 +587,21 @@ void sub_81A04E4(u8 arg0) width = convert_pixel_width_to_tile_width(pixelWidth); left = sub_80E2D5C(left, width); - windowId = sub_81A0784(left, top, width, count * 2); + windowId = CreateAndShowWindow(left, top, width, count * 2); SetStandardWindowBorderStyle(windowId, 0); for (i = 0; i < count; i++) AddTextPrinterParameterized(windowId, 1, strings[i], 8, (i * 16) + 1, TEXT_SPEED_FF, NULL); InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, count, 0); - sub_81A0804(TRUE, count, windowId); + CreateChooseAnswerTask(TRUE, count, windowId); } #define tNoBButton data[4] #define tWrapAround data[5] #define tWindowId data[6] -void sub_81A070C(u8 taskId) +void Task_ChooseAnswer(u8 taskId) { s8 input; s16 *data = gTasks[taskId].data; @@ -613,12 +627,12 @@ void sub_81A070C(u8 taskId) break; } - sub_81A07E8(tWindowId); + RemoveAndHideWindow(tWindowId); DestroyTask(taskId); EnableBothScriptContexts(); } -u8 sub_81A0784(u8 left, u8 top, u8 width, u8 height) +static u8 CreateAndShowWindow(u8 left, u8 top, u8 width, u8 height) { u8 windowId; struct WindowTemplate winTemplate = CreateWindowTemplate(0, left + 1, top + 1, width, height, 15, 100); @@ -629,15 +643,15 @@ u8 sub_81A0784(u8 left, u8 top, u8 width, u8 height) return windowId; } -void sub_81A07E8(u8 windowId) +static void RemoveAndHideWindow(u8 windowId) { sub_8198070(windowId, TRUE); RemoveWindow(windowId); } -void sub_81A0804(bool8 noBButton, u8 itemsCount, u8 windowId) +static void CreateChooseAnswerTask(bool8 noBButton, u8 itemsCount, u8 windowId) { - u8 taskId = CreateTask(sub_81A070C, 80); + u8 taskId = CreateTask(Task_ChooseAnswer, 80); gTasks[taskId].tNoBButton = noBButton; if (itemsCount > 3) @@ -734,22 +748,22 @@ void sub_81A09D0(void) void sub_81A0A20(void) { - sub_81A04E4(gSpecialVar_0x8005); + CreateMenuWithAnswers(gSpecialVar_0x8005); } -void sub_81A0A34(u8 taskId) +static void Task_WaitForPrintingMessage(u8 taskId) { if (!RunTextPrintersAndIsPrinter0Active()) { DestroyTask(taskId); if (gSpecialVar_0x8005) - sub_81A172C(EnableBothScriptContexts); + ExecuteFuncAfterButtonPress(EnableBothScriptContexts); else EnableBothScriptContexts(); } } -void sub_81A0A70(void) +static void PrintMessage(void) { const u8 *string; @@ -829,7 +843,7 @@ void sub_81A0A70(void) StringExpandPlaceholders(gStringVar4, string); AddTextPrinterForMessage(TRUE); - CreateTask(sub_81A0A34, 1); + CreateTask(Task_WaitForPrintingMessage, 1); } void sub_81A0C9C(void) @@ -839,7 +853,7 @@ void sub_81A0C9C(void) sub_808B864(); sub_808BCF4(); NewMenuHelpers_DrawDialogueFrame(0, 1); - sub_81A0A70(); + PrintMessage(); } void sub_81A0CC0(void) @@ -945,3 +959,459 @@ void sub_81A0FE4(void) { FREE_AND_SET_NULL(gUnknown_030062F0); } + +void sub_81A0FFC(void) +{ + u8 *stringDst; + u8 text[16]; + u32 speciesArrayId; + + switch (gSpecialVar_0x8005) + { + case 0: + stringDst = gStringVar1; + break; + case 1: + stringDst = gStringVar2; + break; + case 2: + stringDst = gStringVar3; + break; + default: + return; + } + + switch (gSpecialVar_0x8006) + { + case 0: + StringCopy(stringDst, gSpeciesNames[gUnknown_030062F0->unk0]); + break; + case 1: + StringCopy(stringDst, gSpeciesNames[gUnknown_030062F0->unk2]); + break; + case 2: + StringCopy(stringDst, gSpeciesNames[gUnknown_030062F0->unk0]); + break; + case 3: + StringCopy(stringDst, gMoveNames[gUnknown_030062F0->unk4]); + break; + case 4: + StringCopy(stringDst, gMoveNames[gUnknown_030062F0->unk6]); + break; + case 5: + StringCopy(stringDst, ItemId_GetName(gSaveBlock2Ptr->field_B8[gSaveBlock2Ptr->field_B1_1 - 3].unk2)); + break; + case 6: + TVShowConvertInternationalString(text, GetApprenticeNameInLanguage(gSaveBlock2Ptr->field_B0, LANGUAGE_ENGLISH), LANGUAGE_ENGLISH); + StringCopy(stringDst, text); + break; + case 8: + if (gSaveBlock2Ptr->field_B1_0 == 1) + StringCopy(stringDst, gText_Lv50); + else + StringCopy(stringDst, gText_OpenLevel); + break; + case 7: + ConvertBattleFrontierTrainerSpeechToString(gSaveBlock2Ptr->field_DC[0].easyChatWords); + StringCopy(stringDst, gStringVar4); + break; + case 9: + if (gSaveBlock2Ptr->field_B1_2 < 3) + { + APPRENTICE_SPECIES_ID(speciesArrayId, gSaveBlock2Ptr->field_B1_2); + } + else + { + speciesArrayId = 0; + } + StringCopy(stringDst, gSpeciesNames[gApprentices[gSaveBlock2Ptr->field_B0].species[speciesArrayId]]); + break; + } +} + +void sub_81A11F8(void) +{ + gSaveBlock2Ptr->field_B1_2 = gSpecialVar_0x8005; +} + +void sub_81A1218(void) +{ + sub_81AAC28(); +} + +#ifdef NONMATCHING +void sub_81A1224(void) +{ + u8 count; + u8 i, j; + + if (gSaveBlock2Ptr->field_B1_1 < 3) + return; + + count = 0; + for (j = 0; j < 9 && gSaveBlock2Ptr->field_B8[j].unk0_0; count++, j++) + ; + + for (i = 0; i < count && i < gSaveBlock2Ptr->field_B1_1 - 3; i++) + { + if (gSaveBlock2Ptr->field_B8[i].unk0_0 == 1 + && gSaveBlock2Ptr->field_B8[i].unk0_3 + && gSaveBlock2Ptr->field_B8[i].unk2 == gSpecialVar_0x8005) + { + gSaveBlock2Ptr->field_B8[gSaveBlock2Ptr->field_B1_1 - 3].unk0_3 = 0; + gSaveBlock2Ptr->field_B8[gSaveBlock2Ptr->field_B1_1 - 3].unk2 = gSpecialVar_0x8005; + gSpecialVar_Result = i; + return; + } + } + + gSaveBlock2Ptr->field_B8[gSaveBlock2Ptr->field_B1_1 - 3].unk0_3 = 1; + gSaveBlock2Ptr->field_B8[gSaveBlock2Ptr->field_B1_1 - 3].unk2 = gSpecialVar_0x8005; + gSpecialVar_Result = 1; +} +#else +NAKED +void sub_81A1224(void) +{ + asm_unified("\n\ + push {r4-r7,lr}\n\ + mov r7, r9\n\ + mov r6, r8\n\ + push {r6,r7}\n\ + ldr r1, =gSaveBlock2Ptr\n\ + ldr r3, [r1]\n\ + adds r0, r3, 0\n\ + adds r0, 0xB1\n\ + ldrb r0, [r0]\n\ + lsls r0, 26\n\ + lsrs r0, 28\n\ + adds r7, r1, 0\n\ + cmp r0, 0x2\n\ + bhi _081A1242\n\ + b _081A1362\n\ +_081A1242:\n\ + movs r5, 0\n\ + movs r2, 0\n\ + adds r0, r3, 0\n\ + adds r0, 0xB8\n\ + ldrb r0, [r0]\n\ + lsls r0, 30\n\ + ldr r1, =gSpecialVar_0x8005\n\ + mov r12, r1\n\ + ldr r1, =gSpecialVar_Result\n\ + mov r8, r1\n\ + cmp r0, 0\n\ + beq _081A127C\n\ + adds r3, r7, 0\n\ +_081A125C:\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + adds r0, r2, 0x1\n\ + lsls r0, 24\n\ + lsrs r2, r0, 24\n\ + cmp r2, 0x8\n\ + bhi _081A127C\n\ + ldr r0, [r3]\n\ + lsls r1, r2, 2\n\ + adds r0, r1\n\ + adds r0, 0xB8\n\ + ldrb r0, [r0]\n\ + lsls r0, 30\n\ + cmp r0, 0\n\ + bne _081A125C\n\ +_081A127C:\n\ + movs r4, 0\n\ + cmp r4, r5\n\ + bcs _081A1322\n\ + ldr r0, [r7]\n\ + adds r0, 0xB1\n\ + ldrb r0, [r0]\n\ + lsls r0, 26\n\ + lsrs r0, 28\n\ + subs r0, 0x3\n\ + cmp r4, r0\n\ + bge _081A1322\n\ + adds r6, r7, 0\n\ + mov r9, r4\n\ +_081A1296:\n\ + ldr r3, [r6]\n\ + lsls r0, r4, 2\n\ + adds r2, r3, r0\n\ + adds r0, r2, 0\n\ + adds r0, 0xB8\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 30\n\ + lsrs r0, 30\n\ + cmp r0, 0x1\n\ + bne _081A1308\n\ + lsrs r0, r1, 6\n\ + cmp r0, 0\n\ + beq _081A1308\n\ + adds r0, r2, 0\n\ + adds r0, 0xBA\n\ + ldrh r0, [r0]\n\ + mov r2, r12\n\ + ldrh r2, [r2]\n\ + cmp r0, r2\n\ + bne _081A1308\n\ + adds r0, r3, 0\n\ + adds r0, 0xB1\n\ + ldrb r0, [r0]\n\ + lsls r0, 26\n\ + lsrs r0, 28\n\ + subs r0, 0x3\n\ + lsls r0, 2\n\ + adds r0, r3, r0\n\ + adds r0, 0xB8\n\ + ldrb r2, [r0]\n\ + movs r1, 0x3F\n\ + ands r1, r2\n\ + strb r1, [r0]\n\ + ldr r1, [r6]\n\ + adds r0, r1, 0\n\ + adds r0, 0xB1\n\ + ldrb r0, [r0]\n\ + lsls r0, 26\n\ + lsrs r0, 28\n\ + subs r0, 0x3\n\ + lsls r0, 2\n\ + adds r1, r0\n\ + mov r2, r12\n\ + ldrh r0, [r2]\n\ + adds r1, 0xBA\n\ + strh r0, [r1]\n\ + mov r1, r9\n\ + mov r0, r8\n\ + strh r1, [r0]\n\ + b _081A1362\n\ + .pool\n\ +_081A1308:\n\ + adds r0, r4, 0x1\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + cmp r4, r5\n\ + bcs _081A1322\n\ + ldr r0, [r6]\n\ + adds r0, 0xB1\n\ + ldrb r0, [r0]\n\ + lsls r0, 26\n\ + lsrs r0, 28\n\ + subs r0, 0x3\n\ + cmp r4, r0\n\ + blt _081A1296\n\ +_081A1322:\n\ + ldr r2, [r7]\n\ + adds r0, r2, 0\n\ + adds r0, 0xB1\n\ + ldrb r0, [r0]\n\ + lsls r0, 26\n\ + lsrs r0, 28\n\ + subs r0, 0x3\n\ + lsls r0, 2\n\ + adds r2, r0\n\ + adds r2, 0xB8\n\ + ldrb r1, [r2]\n\ + movs r0, 0x3F\n\ + ands r0, r1\n\ + movs r1, 0x40\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + ldr r1, [r7]\n\ + adds r0, r1, 0\n\ + adds r0, 0xB1\n\ + ldrb r0, [r0]\n\ + lsls r0, 26\n\ + lsrs r0, 28\n\ + subs r0, 0x3\n\ + lsls r0, 2\n\ + adds r1, r0\n\ + mov r2, r12\n\ + ldrh r0, [r2]\n\ + adds r1, 0xBA\n\ + strh r0, [r1]\n\ + movs r0, 0x1\n\ + mov r1, r8\n\ + strh r0, [r1]\n\ +_081A1362:\n\ + pop {r3,r4}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ +"); +} +#endif // NONMATCHING + +void sub_81A1370(void) +{ + s32 i; + s32 r10; + s32 r9; + + if (gSaveBlock2Ptr->field_DC[0].playerName[0] == EOS) + return; + + for (i = 0; i < 3; i++) + { + if (gSaveBlock2Ptr->field_DC[i + 1].playerName[0] == EOS) + { + gSaveBlock2Ptr->field_DC[i + 1] = gSaveBlock2Ptr->field_DC[0]; + return; + } + } + + r10 = 0xFFFF; + r9 = -1; + for (i = 1; i < 4; i++) + { + if (ReadUnalignedWord(gSaveBlock2Ptr->field_DC[i].playerId) == ReadUnalignedWord(gSaveBlock2Ptr->playerTrainerId) + && gSaveBlock2Ptr->field_DC[i].field_2 < r10) + { + r10 = gSaveBlock2Ptr->field_DC[i].field_2; + r9 = i; + } + } + + if (r9 > 0) + gSaveBlock2Ptr->field_DC[r9] = gSaveBlock2Ptr->field_DC[0]; +} + +void sub_81A1438(void) +{ + u8 i; + + gSaveBlock2Ptr->field_DC[0].field_0_0 = gSaveBlock2Ptr->field_B0; + gSaveBlock2Ptr->field_DC[0].field_0_1 = gSaveBlock2Ptr->field_B1_0; + + for (i = 0; i < 9 && gSaveBlock2Ptr->field_B8[i].unk0_0; i++) + ; + + gSaveBlock2Ptr->field_DC[0].field_1 = i; + if (gSaveBlock2Ptr->field_DC[0].field_2 < 255) + gSaveBlock2Ptr->field_DC[0].field_2++; + + sub_81A0390(gSaveBlock2Ptr->field_DC[0].field_1); + for (i = 0; i < 4; i++) + gSaveBlock2Ptr->field_DC[0].playerId[i] = gSaveBlock2Ptr->playerTrainerId[i]; + + StringCopy(gSaveBlock2Ptr->field_DC[0].playerName, gSaveBlock2Ptr->playerName); + gSaveBlock2Ptr->field_DC[0].language = gGameLanguage; + sub_8165AE8(&gSaveBlock2Ptr->field_DC[0]); +} + +void sub_81A150C(void) +{ + u8 i; + u8 mapObjectGfxId; + u8 class = gApprentices[gSaveBlock2Ptr->field_DC[0].field_0_0].facilityClass; + + for (i = 0; i < 30 && gUnknown_085DCEDC[i] != class; i++) + ; + + if (i != 30) + { + mapObjectGfxId = gUnknown_085DCF0E[i]; + VarSet(VAR_OBJ_GFX_ID_0, mapObjectGfxId); + } + else + { + for (i = 0; i < 20 && gUnknown_085DCEFA[i] != class; i++) + ; + + if (i != 20) + { + mapObjectGfxId = gUnknown_085DCF2C[i]; + VarSet(VAR_OBJ_GFX_ID_0, mapObjectGfxId); + } + } +} + +void sub_81A15A4(void) +{ + u8 i; + u8 mapObjectGfxId; + u8 class = gApprentices[gSaveBlock2Ptr->field_B0].facilityClass; + + for (i = 0; i < 30 && gUnknown_085DCEDC[i] != class; i++) + ; + + if (i != 30) + { + mapObjectGfxId = gUnknown_085DCF0E[i]; + VarSet(VAR_OBJ_GFX_ID_0, mapObjectGfxId); + } + else + { + for (i = 0; i < 20 && gUnknown_085DCEFA[i] != class; i++) + ; + + if (i != 20) + { + mapObjectGfxId = gUnknown_085DCF2C[i]; + VarSet(VAR_OBJ_GFX_ID_0, mapObjectGfxId); + } + } +} + +void sub_81A1638(void) +{ + gSpecialVar_0x8004 = 1; +} + +void sub_81A1644(void) +{ + gSpecialVar_0x8004 = 1; +} + +const u8 *GetApprenticeNameInLanguage(u32 apprenticeId, s32 language) +{ + const struct ApprenticeTrainer *apprentice = &gApprentices[apprenticeId]; + + switch (language) + { + case LANGUAGE_JAPANESE: + return apprentice->name[0]; + case LANGUAGE_ENGLISH: + return apprentice->name[1]; + case LANGUAGE_FRENCH: + return apprentice->name[2]; + case LANGUAGE_ITALIAN: + return apprentice->name[3]; + case LANGUAGE_GERMAN: + return apprentice->name[4]; + case LANGUAGE_SPANISH: + default: + return apprentice->name[5]; + } +} + +void sub_81A16B4(u8 taskId) +{ + if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) + SwitchTaskToFollowupFunc(taskId); +} + +static void Task_ExecuteFuncAfterButtonPress(u8 taskId) +{ + if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) + { + gUnknown_030062F4 = (void*)(u32)(((u16)gTasks[taskId].data[0] | (gTasks[taskId].data[1] << 0x10))); + gUnknown_030062F4(); + DestroyTask(taskId); + } +} + +static void ExecuteFuncAfterButtonPress(void (*func)(void)) +{ + u8 taskId = CreateTask(Task_ExecuteFuncAfterButtonPress, 1); + gTasks[taskId].data[0] = (u32)(func); + gTasks[taskId].data[1] = (u32)(func) >> 16; +} + +void sub_81A175C(TaskFunc taskFunc) +{ + u8 taskId = CreateTask(sub_81A16B4, 1); + SetTaskFuncWithFollowupFunc(taskId, sub_81A16B4, taskFunc); +} -- cgit v1.2.3 From 145df4906326488874b3f75ef96f99e85b18f2a0 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 14 Oct 2018 14:35:51 +0200 Subject: Document more of apprentice --- src/apprentice.c | 110 +++++++++++++++++++++++++++---------------------------- 1 file changed, 54 insertions(+), 56 deletions(-) (limited to 'src/apprentice.c') diff --git a/src/apprentice.c b/src/apprentice.c index 9f26b561c..b4b20f672 100644 --- a/src/apprentice.c +++ b/src/apprentice.c @@ -78,21 +78,19 @@ static u8 CreateAndShowWindow(u8 left, u8 top, u8 width, u8 height); static void RemoveAndHideWindow(u8 windowId); static void ExecuteFuncAfterButtonPress(void (*func)(void)); -void sub_819F99C(u8 id) +void CopyFriendsApprenticeChallengeText(u8 saveblockApprenticeId) { u8 i, var; const u8 *str; - var = gSaveBlock2Ptr->field_DC[id].field_2; - for (i = 0; var != 0 && i < 4; i++) - { - var /= 10; - } + var = gSaveBlock2Ptr->apprentices[saveblockApprenticeId].number; + for (i = 0; var != 0 && i < 4; var /= 10, i++) + ; - StringCopy7(gStringVar1, gSaveBlock2Ptr->field_DC[id].playerName); - ConvertInternationalString(gStringVar1, gSaveBlock2Ptr->field_DC[id].language); - ConvertIntToDecimalStringN(gStringVar2, gSaveBlock2Ptr->field_DC[id].field_2, STR_CONV_MODE_RIGHT_ALIGN, i); - str = gUnknown_08611330[gSaveBlock2Ptr->field_DC[id].field_0_0]; + StringCopy7(gStringVar1, gSaveBlock2Ptr->apprentices[saveblockApprenticeId].playerName); + ConvertInternationalString(gStringVar1, gSaveBlock2Ptr->apprentices[saveblockApprenticeId].language); + ConvertIntToDecimalStringN(gStringVar2, gSaveBlock2Ptr->apprentices[saveblockApprenticeId].number, STR_CONV_MODE_RIGHT_ALIGN, i); + str = gUnknown_08611330[gSaveBlock2Ptr->apprentices[saveblockApprenticeId].id]; StringExpandPlaceholders(gStringVar4, str); } @@ -109,7 +107,7 @@ void sub_819FA5C(struct Apprentice *apprentice) apprentice->easyChatWords[i] |= 0xFFFF; apprentice->playerName[0] = EOS; - apprentice->field_0_0 = 16; + apprentice->id = 16; } void sub_819FAA0(void) @@ -120,16 +118,16 @@ void sub_819FAA0(void) for (i = 0; i < 4; i++) { for (j = 0; j < 6; j++) - gSaveBlock2Ptr->field_DC[i].easyChatWords[j] |= 0xFFFF; - gSaveBlock2Ptr->field_DC[i].field_0_0 = 16; - gSaveBlock2Ptr->field_DC[i].playerName[0] = EOS; - gSaveBlock2Ptr->field_DC[i].field_0_1 = 0; - gSaveBlock2Ptr->field_DC[i].field_2 = 0; - gSaveBlock2Ptr->field_DC[i].field_1 = 0; + gSaveBlock2Ptr->apprentices[i].easyChatWords[j] |= 0xFFFF; + gSaveBlock2Ptr->apprentices[i].id = 16; + gSaveBlock2Ptr->apprentices[i].playerName[0] = EOS; + gSaveBlock2Ptr->apprentices[i].lvlMode = 0; + gSaveBlock2Ptr->apprentices[i].number = 0; + gSaveBlock2Ptr->apprentices[i].field_1 = 0; for (j = 0; j < 4; j++) - gSaveBlock2Ptr->field_DC[i].playerId[j] = 0; - gSaveBlock2Ptr->field_DC[i].language = gGameLanguage; - gSaveBlock2Ptr->field_DC[i].unk40 = 0; + gSaveBlock2Ptr->apprentices[i].playerId[j] = 0; + gSaveBlock2Ptr->apprentices[i].language = gGameLanguage; + gSaveBlock2Ptr->apprentices[i].unk40 = 0; } sub_81A087C(); @@ -142,19 +140,19 @@ bool8 sub_819FBB0(void) void sub_819FBC8(void) { - if (gSaveBlock2Ptr->field_DC[0].field_2 == 0) + if (gSaveBlock2Ptr->apprentices[0].number == 0) { do { gSaveBlock2Ptr->field_B0 = gUnknown_08611548[Random() % ARRAY_COUNT(gUnknown_08611548)]; - } while (gSaveBlock2Ptr->field_B0 == gSaveBlock2Ptr->field_DC[0].field_0_0); + } while (gSaveBlock2Ptr->field_B0 == gSaveBlock2Ptr->apprentices[0].id); } else { do { gSaveBlock2Ptr->field_B0 = Random() % 16; - } while (gSaveBlock2Ptr->field_B0 == gSaveBlock2Ptr->field_DC[0].field_0_0); + } while (gSaveBlock2Ptr->field_B0 == gSaveBlock2Ptr->apprentices[0].id); } } @@ -472,16 +470,16 @@ void sub_81A0390(u8 arg0) for (i = 0; i < 3; i++) { - gSaveBlock2Ptr->field_DC[0].monData[i].species = 0; - gSaveBlock2Ptr->field_DC[0].monData[i].item = 0; + gSaveBlock2Ptr->apprentices[0].monData[i].species = 0; + gSaveBlock2Ptr->apprentices[0].monData[i].item = 0; for (j = 0; j < 4; j++) - gSaveBlock2Ptr->field_DC[0].monData[i].moves[j] = 0; + gSaveBlock2Ptr->apprentices[0].monData[i].moves[j] = 0; } j = gSaveBlock2Ptr->field_B1_2; for (i = 0; i < 3; i++) { - apprenticeMons[j] = &gSaveBlock2Ptr->field_DC[0].monData[i]; + apprenticeMons[j] = &gSaveBlock2Ptr->apprentices[0].monData[i]; j = (j + 1) % 3; } @@ -983,39 +981,39 @@ void sub_81A0FFC(void) switch (gSpecialVar_0x8006) { - case 0: + case APPRENTICE_BUFF_SPECIES1: StringCopy(stringDst, gSpeciesNames[gUnknown_030062F0->unk0]); break; - case 1: + case APPRENTICE_BUFF_SPECIES2: StringCopy(stringDst, gSpeciesNames[gUnknown_030062F0->unk2]); break; - case 2: + case APPRENTICE_BUFF_SPECIES3: StringCopy(stringDst, gSpeciesNames[gUnknown_030062F0->unk0]); break; - case 3: + case APPRENTICE_BUFF_MOVE1: StringCopy(stringDst, gMoveNames[gUnknown_030062F0->unk4]); break; - case 4: + case APPRENTICE_BUFF_MOVE2: StringCopy(stringDst, gMoveNames[gUnknown_030062F0->unk6]); break; - case 5: + case APPRENTICE_BUFF_ITEM: StringCopy(stringDst, ItemId_GetName(gSaveBlock2Ptr->field_B8[gSaveBlock2Ptr->field_B1_1 - 3].unk2)); break; - case 6: + case APPRENTICE_BUFF_NAME: TVShowConvertInternationalString(text, GetApprenticeNameInLanguage(gSaveBlock2Ptr->field_B0, LANGUAGE_ENGLISH), LANGUAGE_ENGLISH); StringCopy(stringDst, text); break; - case 8: + case APPRENTICE_BUFF_LEVEL: if (gSaveBlock2Ptr->field_B1_0 == 1) StringCopy(stringDst, gText_Lv50); else StringCopy(stringDst, gText_OpenLevel); break; - case 7: - ConvertBattleFrontierTrainerSpeechToString(gSaveBlock2Ptr->field_DC[0].easyChatWords); + case APPRENTICE_BUFF_EASY_CHAT: + ConvertBattleFrontierTrainerSpeechToString(gSaveBlock2Ptr->apprentices[0].easyChatWords); StringCopy(stringDst, gStringVar4); break; - case 9: + case APPRENTICE_BUFF_SPECIES4: if (gSaveBlock2Ptr->field_B1_2 < 3) { APPRENTICE_SPECIES_ID(speciesArrayId, gSaveBlock2Ptr->field_B1_2); @@ -1250,14 +1248,14 @@ void sub_81A1370(void) s32 r10; s32 r9; - if (gSaveBlock2Ptr->field_DC[0].playerName[0] == EOS) + if (gSaveBlock2Ptr->apprentices[0].playerName[0] == EOS) return; for (i = 0; i < 3; i++) { - if (gSaveBlock2Ptr->field_DC[i + 1].playerName[0] == EOS) + if (gSaveBlock2Ptr->apprentices[i + 1].playerName[0] == EOS) { - gSaveBlock2Ptr->field_DC[i + 1] = gSaveBlock2Ptr->field_DC[0]; + gSaveBlock2Ptr->apprentices[i + 1] = gSaveBlock2Ptr->apprentices[0]; return; } } @@ -1266,46 +1264,46 @@ void sub_81A1370(void) r9 = -1; for (i = 1; i < 4; i++) { - if (ReadUnalignedWord(gSaveBlock2Ptr->field_DC[i].playerId) == ReadUnalignedWord(gSaveBlock2Ptr->playerTrainerId) - && gSaveBlock2Ptr->field_DC[i].field_2 < r10) + if (ReadUnalignedWord(gSaveBlock2Ptr->apprentices[i].playerId) == ReadUnalignedWord(gSaveBlock2Ptr->playerTrainerId) + && gSaveBlock2Ptr->apprentices[i].number < r10) { - r10 = gSaveBlock2Ptr->field_DC[i].field_2; + r10 = gSaveBlock2Ptr->apprentices[i].number; r9 = i; } } if (r9 > 0) - gSaveBlock2Ptr->field_DC[r9] = gSaveBlock2Ptr->field_DC[0]; + gSaveBlock2Ptr->apprentices[r9] = gSaveBlock2Ptr->apprentices[0]; } void sub_81A1438(void) { u8 i; - gSaveBlock2Ptr->field_DC[0].field_0_0 = gSaveBlock2Ptr->field_B0; - gSaveBlock2Ptr->field_DC[0].field_0_1 = gSaveBlock2Ptr->field_B1_0; + gSaveBlock2Ptr->apprentices[0].id = gSaveBlock2Ptr->field_B0; + gSaveBlock2Ptr->apprentices[0].lvlMode = gSaveBlock2Ptr->field_B1_0; for (i = 0; i < 9 && gSaveBlock2Ptr->field_B8[i].unk0_0; i++) ; - gSaveBlock2Ptr->field_DC[0].field_1 = i; - if (gSaveBlock2Ptr->field_DC[0].field_2 < 255) - gSaveBlock2Ptr->field_DC[0].field_2++; + gSaveBlock2Ptr->apprentices[0].field_1 = i; + if (gSaveBlock2Ptr->apprentices[0].number < 255) + gSaveBlock2Ptr->apprentices[0].number++; - sub_81A0390(gSaveBlock2Ptr->field_DC[0].field_1); + sub_81A0390(gSaveBlock2Ptr->apprentices[0].field_1); for (i = 0; i < 4; i++) - gSaveBlock2Ptr->field_DC[0].playerId[i] = gSaveBlock2Ptr->playerTrainerId[i]; + gSaveBlock2Ptr->apprentices[0].playerId[i] = gSaveBlock2Ptr->playerTrainerId[i]; - StringCopy(gSaveBlock2Ptr->field_DC[0].playerName, gSaveBlock2Ptr->playerName); - gSaveBlock2Ptr->field_DC[0].language = gGameLanguage; - sub_8165AE8(&gSaveBlock2Ptr->field_DC[0]); + StringCopy(gSaveBlock2Ptr->apprentices[0].playerName, gSaveBlock2Ptr->playerName); + gSaveBlock2Ptr->apprentices[0].language = gGameLanguage; + sub_8165AE8(&gSaveBlock2Ptr->apprentices[0]); } void sub_81A150C(void) { u8 i; u8 mapObjectGfxId; - u8 class = gApprentices[gSaveBlock2Ptr->field_DC[0].field_0_0].facilityClass; + u8 class = gApprentices[gSaveBlock2Ptr->apprentices[0].id].facilityClass; for (i = 0; i < 30 && gUnknown_085DCEDC[i] != class; i++) ; -- cgit v1.2.3 From f08b56d645b2958c9c27a1da446a5dff423ee5cf Mon Sep 17 00:00:00 2001 From: Slawter666 <38655737+Slawter666@users.noreply.github.com> Date: Sun, 14 Oct 2018 15:26:13 +0100 Subject: Move apprentice data to C --- src/apprentice.c | 678 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 649 insertions(+), 29 deletions(-) (limited to 'src/apprentice.c') diff --git a/src/apprentice.c b/src/apprentice.c index b4b20f672..0694c2e41 100644 --- a/src/apprentice.c +++ b/src/apprentice.c @@ -1,29 +1,30 @@ #include "global.h" #include "apprentice.h" -#include "constants/apprentice.h" -#include "string_util.h" -#include "script.h" -#include "text.h" -#include "random.h" +#include "battle_tower.h" +#include "data2.h" +#include "event_data.h" +#include "event_object_movement.h" +#include "field_player_avatar.h" +#include "international_string_util.h" +#include "item.h" +#include "item_menu.h" #include "main.h" #include "malloc.h" -#include "strings.h" #include "menu.h" -#include "script_menu.h" +#include "new_game.h" #include "party_menu.h" -#include "item_menu.h" -#include "data2.h" -#include "task.h" -#include "item.h" +#include "random.h" +#include "script.h" +#include "script_menu.h" #include "sound.h" -#include "battle_tower.h" -#include "event_data.h" -#include "international_string_util.h" -#include "field_player_avatar.h" -#include "new_game.h" -#include "event_object_movement.h" +#include "string_util.h" +#include "strings.h" +#include "task.h" +#include "text.h" +#include "constants/apprentice.h" #include "constants/items.h" #include "constants/songs.h" +#include "constants/species.h" struct Unk030062ECStruct { @@ -40,29 +41,648 @@ struct Unk030062F0Struct u16 unk6; }; +// data/scripts/apprentice.inc +extern const u8 gText_082B7229[]; +extern const u8 gText_082B731C[]; +extern const u8 gText_082B735B[]; +extern const u8 gText_082B7423[]; +extern const u8 gText_082B74C1[]; +extern const u8 gText_082B756F[]; +extern const u8 gText_082B75B2[]; +extern const u8 gText_082B763F[]; +extern const u8 gText_082B76AC[]; +extern const u8 gText_082B7772[]; +extern const u8 gText_082B77CE[]; +extern const u8 gText_082B7871[]; +extern const u8 gText_082B78D4[]; +extern const u8 gText_082B7B1A[]; +extern const u8 gText_082B7C13[]; +extern const u8 gText_082B7D18[]; +extern const u8 gText_082B7DD4[]; +extern const u8 gText_082B7EE5[]; +extern const u8 gText_082B7F35[]; +extern const u8 gText_082B7FE8[]; +extern const u8 gText_082B8087[]; +extern const u8 gText_082B822B[]; +extern const u8 gText_082B8286[]; +extern const u8 gText_082B8356[]; +extern const u8 gText_082B83CE[]; +extern const u8 gText_082B84FC[]; +extern const u8 gText_082B8559[]; +extern const u8 gText_082B8656[]; +extern const u8 gText_082B86EA[]; +extern const u8 gText_082B87DA[]; +extern const u8 gText_082B887C[]; +extern const u8 gText_082B8957[]; +extern const u8 gText_082B89C6[]; +extern const u8 gText_082B8ACF[]; +extern const u8 gText_082B8B66[]; +extern const u8 gText_082B8C20[]; +extern const u8 gText_082B8CAA[]; +extern const u8 gText_082B8DD3[]; +extern const u8 gText_082B8E24[]; +extern const u8 gText_082B8ED5[]; +extern const u8 gText_082B8F45[]; +extern const u8 gText_082B905F[]; +extern const u8 gText_082B910E[]; +extern const u8 gText_082B9204[]; +extern const u8 gText_082B929C[]; +extern const u8 gText_082B9438[]; +extern const u8 gText_082B9488[]; +extern const u8 gText_082B9564[]; +extern const u8 gText_082B95D8[]; +extern const u8 gText_082B9763[]; +extern const u8 gText_082B97E5[]; +extern const u8 gText_082B989A[]; +extern const u8 gText_082B992D[]; +extern const u8 gText_082B9A84[]; +extern const u8 gText_082B9AB9[]; +extern const u8 gText_082B9B76[]; +extern const u8 gText_082B9BF2[]; +extern const u8 gText_082B9D83[]; +extern const u8 gText_082B9DF9[]; +extern const u8 gText_082B9EAA[]; +extern const u8 gText_082B9F55[]; +extern const u8 gText_082BA084[]; +extern const u8 gText_082BA11D[]; +extern const u8 gText_082BA1F3[]; + +extern const u8 gText_082BE50D[]; +extern const u8 gText_082BE5F5[]; +extern const u8 gText_082BE679[]; +extern const u8 gText_082BE71E[]; +extern const u8 gText_082BE762[]; +extern const u8 gText_082BE7F8[]; +extern const u8 gText_082BE850[]; +extern const u8 gText_082BE99C[]; +extern const u8 gText_082BEA1B[]; +extern const u8 gText_082BEAE9[]; +extern const u8 gText_082BEB72[]; +extern const u8 gText_082BEC8E[]; +extern const u8 gText_082BED16[]; +extern const u8 gText_082BEE29[]; +extern const u8 gText_082BEEB4[]; +extern const u8 gText_082BEFE2[]; +extern const u8 gText_082BF04E[]; +extern const u8 gText_082BF11D[]; +extern const u8 gText_082BF1A8[]; +extern const u8 gText_082BF268[]; +extern const u8 gText_082BF2D1[]; +extern const u8 gText_082BF3CF[]; +extern const u8 gText_082BF46A[]; +extern const u8 gText_082BF551[]; +extern const u8 gText_082BF5C3[]; +extern const u8 gText_082BF6E5[]; +extern const u8 gText_082BF773[]; +extern const u8 gText_082BF869[]; +extern const u8 gText_082BF8DD[]; +extern const u8 gText_082BF9BA[]; +extern const u8 gText_082BFA5A[]; +extern const u8 gText_082BFB4E[]; + +extern const u8 gText_082BA2A3[]; +extern const u8 gText_082BA34E[]; +extern const u8 gText_082BA380[]; +extern const u8 gText_082BA3D2[]; +extern const u8 gText_082BA448[]; +extern const u8 gText_082BA4D3[]; +extern const u8 gText_082BA58C[]; +extern const u8 gText_082BA5BF[]; +extern const u8 gText_082BA5F3[]; +extern const u8 gText_082BA635[]; +extern const u8 gText_082BA6E6[]; +extern const u8 gText_082BA742[]; +extern const u8 gText_082BA770[]; +extern const u8 gText_082BA78F[]; +extern const u8 gText_082BA7D8[]; +extern const u8 gText_082BA867[]; +extern const u8 gText_082BA96B[]; +extern const u8 gText_082BA9B7[]; +extern const u8 gText_082BAA1B[]; +extern const u8 gText_082BAA81[]; +extern const u8 gText_082BAB22[]; +extern const u8 gText_082BAC43[]; +extern const u8 gText_082BAC78[]; +extern const u8 gText_082BAD17[]; +extern const u8 gText_082BADB6[]; +extern const u8 gText_082BAE36[]; +extern const u8 gText_082BAF4E[]; +extern const u8 gText_082BAF8F[]; +extern const u8 gText_082BAFDB[]; +extern const u8 gText_082BB05F[]; +extern const u8 gText_082BB0D4[]; +extern const u8 gText_082BB18C[]; +extern const u8 gText_082BB1CE[]; +extern const u8 gText_082BB242[]; +extern const u8 gText_082BB2D9[]; +extern const u8 gText_082BB370[]; +extern const u8 gText_082BB4C3[]; +extern const u8 gText_082BB4FB[]; +extern const u8 gText_082BB575[]; +extern const u8 gText_082BB5E1[]; +extern const u8 gText_082BB656[]; +extern const u8 gText_082BB6E5[]; +extern const u8 gText_082BB72C[]; +extern const u8 gText_082BB7A2[]; +extern const u8 gText_082BB84A[]; +extern const u8 gText_082BB8CD[]; +extern const u8 gText_082BB970[]; +extern const u8 gText_082BB9AE[]; +extern const u8 gText_082BBA05[]; +extern const u8 gText_082BBA6C[]; +extern const u8 gText_082BBB01[]; +extern const u8 gText_082BBC1C[]; +extern const u8 gText_082BBC4B[]; +extern const u8 gText_082BBCF6[]; +extern const u8 gText_082BBD90[]; +extern const u8 gText_082BBE0B[]; +extern const u8 gText_082BBEE5[]; +extern const u8 gText_082BBF25[]; +extern const u8 gText_082BBFA4[]; +extern const u8 gText_082BC024[]; +extern const u8 gText_082BC0C8[]; +extern const u8 gText_082BC213[]; +extern const u8 gText_082BC247[]; +extern const u8 gText_082BC2DD[]; +extern const u8 gText_082BC373[]; +extern const u8 gText_082BC40E[]; +extern const u8 gText_082BC514[]; +extern const u8 gText_082BC555[]; +extern const u8 gText_082BC5CE[]; +extern const u8 gText_082BC666[]; +extern const u8 gText_082BC714[]; +extern const u8 gText_082BC808[]; +extern const u8 gText_082BC84D[]; +extern const u8 gText_082BC8EA[]; +extern const u8 gText_082BC984[]; +extern const u8 gText_082BCA4D[]; +extern const u8 gText_082BCB75[]; +extern const u8 gText_082BCBA6[]; +extern const u8 gText_082BCBFC[]; +extern const u8 gText_082BCCA4[]; + +extern const u8 gText_082BFBF2[]; +extern const u8 gText_082BFCAE[]; +extern const u8 gText_082BFD26[]; +extern const u8 gText_082BFDB1[]; +extern const u8 gText_082BFE24[]; +extern const u8 gText_082BFEAD[]; +extern const u8 gText_082BFF0A[]; +extern const u8 gText_082C0032[]; +extern const u8 gText_082C0090[]; +extern const u8 gText_082C016E[]; +extern const u8 gText_082C01F7[]; +extern const u8 gText_082C034C[]; +extern const u8 gText_082C03CA[]; +extern const u8 gText_082C046E[]; +extern const u8 gText_082C04F9[]; +extern const u8 gText_082C0598[]; +extern const u8 gText_082C0602[]; +extern const u8 gText_082C06D8[]; +extern const u8 gText_082C074A[]; +extern const u8 gText_082C0809[]; +extern const u8 gText_082C086E[]; +extern const u8 gText_082C0982[]; +extern const u8 gText_082C0A1D[]; +extern const u8 gText_082C0AFD[]; +extern const u8 gText_082C0B6F[]; +extern const u8 gText_082C0C7D[]; +extern const u8 gText_082C0D0B[]; +extern const u8 gText_082C0DFE[]; +extern const u8 gText_082C0E71[]; +extern const u8 gText_082C0F6D[]; +extern const u8 gText_082C1003[]; +extern const u8 gText_082C1122[]; + +extern const u8 gText_082BCD68[]; +extern const u8 gText_082BCE64[]; +extern const u8 gText_082BCEF2[]; +extern const u8 gText_082BCF61[]; +extern const u8 gText_082BCFA1[]; +extern const u8 gText_082BD03C[]; +extern const u8 gText_082BD06D[]; +extern const u8 gText_082BD18A[]; +extern const u8 gText_082BD222[]; +extern const u8 gText_082BD325[]; +extern const u8 gText_082BD3B1[]; +extern const u8 gText_082BD493[]; +extern const u8 gText_082BD51C[]; +extern const u8 gText_082BD609[]; +extern const u8 gText_082BD697[]; +extern const u8 gText_082BD797[]; +extern const u8 gText_082BD806[]; +extern const u8 gText_082BD8F5[]; +extern const u8 gText_082BD9BE[]; +extern const u8 gText_082BDAE1[]; +extern const u8 gText_082BDB4E[]; +extern const u8 gText_082BDC6B[]; +extern const u8 gText_082BDD0D[]; +extern const u8 gText_082BDDEC[]; +extern const u8 gText_082BDE68[]; +extern const u8 gText_082BDF4D[]; +extern const u8 gText_082BDFD8[]; +extern const u8 gText_082BE0FD[]; +extern const u8 gText_082BE189[]; +extern const u8 gText_082BE2A5[]; +extern const u8 gText_082BE33E[]; +extern const u8 gText_082BE46C[]; + +extern const u8 gText_082C11D1[]; +extern const u8 gText_082C12D5[]; +extern const u8 gText_082C13AB[]; +extern const u8 gText_082C1444[]; +extern const u8 gText_082C1501[]; +extern const u8 gText_082C15B6[]; +extern const u8 gText_082C165E[]; +extern const u8 gText_082C174F[]; +extern const u8 gText_082C1862[]; +extern const u8 gText_082C19A0[]; +extern const u8 gText_082C1A76[]; +extern const u8 gText_082C1C16[]; +extern const u8 gText_082C1CF5[]; +extern const u8 gText_082C1DC1[]; +extern const u8 gText_082C1EDC[]; +extern const u8 gText_082C1FEC[]; +extern const u8 gText_082C20D1[]; +extern const u8 gText_082C21FF[]; +extern const u8 gText_082C231C[]; +extern const u8 gText_082C2407[]; +extern const u8 gText_082C24B5[]; +extern const u8 gText_082C25B1[]; +extern const u8 gText_082C2707[]; +extern const u8 gText_082C27D4[]; +extern const u8 gText_082C28D6[]; +extern const u8 gText_082C2A0B[]; +extern const u8 gText_082C2B50[]; +extern const u8 gText_082C2C77[]; +extern const u8 gText_082C2D67[]; +extern const u8 gText_082C2E41[]; +extern const u8 gText_082C2EF5[]; +extern const u8 gText_082C3023[]; + +extern const u8 gText_082B6EA5[]; +extern const u8 gText_082B6EEC[]; +extern const u8 gText_082B6F16[]; +extern const u8 gText_082B6F4C[]; +extern const u8 gText_082B6F92[]; +extern const u8 gText_082B6FC9[]; +extern const u8 gText_082B700C[]; +extern const u8 gText_082B703A[]; +extern const u8 gText_082B706A[]; +extern const u8 gText_082B709C[]; +extern const u8 gText_082B70CC[]; +extern const u8 gText_082B710A[]; +extern const u8 gText_082B714D[]; +extern const u8 gText_082B7185[]; +extern const u8 gText_082B71C1[]; +extern const u8 gText_082B71F9[]; + extern struct Unk030062ECStruct *gUnknown_030062EC; extern struct Unk030062F0Struct *gUnknown_030062F0; extern void (*gUnknown_030062F4)(void); extern void sub_8165AE8(struct Apprentice *); -extern const u8 *const gUnknown_08611330[]; -extern const u8 *const gUnknown_08610FF0[][2]; -extern const u8 *const gUnknown_086112B0[][2]; -extern const u8 *const gUnknown_08611230[][2]; -extern const u8 *const gUnknown_086111B0[][2]; -extern const u8 *const gUnknown_08610EF0[][4]; -extern const u8 *const gUnknown_08611070[][5]; -extern const u8 gUnknown_08611548[8]; -extern const u8 gUnknown_086114D3[]; -extern const bool8 gUnknown_08611370[]; -extern void (* const gUnknown_086114E0[])(void); - extern const u8 gUnknown_085DCEDC[]; extern const u8 gUnknown_085DCF0E[]; extern const u8 gUnknown_085DCEFA[]; extern const u8 gUnknown_085DCF2C[]; +void sub_81A093C(void); +void sub_81A0964(void); +void sub_81A0978(void); +void sub_819FC60(void); +void sub_81A0984(void); +void sub_81A0990(void); +void sub_81A09D0(void); +void sub_81A0A20(void); +void sub_81A0C9C(void); +void sub_81A087C(void); +void sub_81A1638(void); +void sub_81A0CC0(void); +void sub_81A09B4(void); +void sub_81A0D40(void); +void sub_81A0DD4(void); +void sub_81A0FE4(void); +void sub_81A0FFC(void); +void sub_81A0D80(void); +void sub_81A11F8(void); +void sub_81A1218(void); +void sub_81A1224(void); +void sub_81A1438(void); +void sub_81A150C(void); +void sub_81A15A4(void); +void sub_81A1644(void); +void sub_81A1370(void); + +// rodata + +const struct ApprenticeTrainer gApprentices[] = +{ + { + .name = {_("サダヒロ"), _("ALANN"), _("ALAIN"), _("ADELFO"), _("CLAUS"), _("TEO")}, + .otId = 0xBDC9, + .facilityClass = 0x43, + .species = {SPECIES_BEAUTIFLY, SPECIES_DUSTOX, SPECIES_ILLUMISE, SPECIES_SHIFTRY, SPECIES_BRELOOM, SPECIES_NINJASK, SPECIES_SHEDINJA, SPECIES_PINSIR, SPECIES_HERACROSS, SPECIES_VOLBEAT}, + .rest = {0, 0, 0x1D, 8, 0x3e, 20, 0, 12, 1, 10, 0x30, 6, 0x44, 20}, + }, + { + .name = {_("ヒロオ"), _("LIONEL"), _("LIONEL"), _("CAIO"), _("LUDWIG"), _("LEO")}, + .otId = 0xCF09, + .facilityClass = 0x2B, + .species = {SPECIES_SWELLOW, SPECIES_SWALOT, SPECIES_SHUCKLE, SPECIES_MANECTRIC, SPECIES_TORKOAL, SPECIES_HARIYAMA, SPECIES_MIGHTYENA, SPECIES_LUDICOLO, SPECIES_CRAWDAUNT, SPECIES_WHISCASH}, + .rest = {1, 0, 0x38, 12, 1, 10, 0x30, 6, 6, 10, 0x20, 0x10, 0x13, 0x22}, + }, + { + .name = {_("ケイジ"), _("SONNY"), _("HERVE"), _("FEDRO"), _("WENZEL"), _("SANTI")}, + .otId = 0x2E34, + .facilityClass = 0x26, + .species = {SPECIES_LINOONE, SPECIES_MIGHTYENA, SPECIES_WHISCASH, SPECIES_ZANGOOSE, SPECIES_SEVIPER, SPECIES_NINETALES, SPECIES_KECLEON, SPECIES_SHUCKLE, SPECIES_MANECTRIC, SPECIES_MACHAMP}, + .rest = {2, 0, 1, 10, 10, 0x16, 0x15, 14, 0x30, 6, 0x3b, 12, 0x4, 12}, + }, + { + .name = {_("ユラ"), _("LAYLA"), _("LAYLA"), _("ASTRID"), _("SONJA"), _("LOLA")}, + .otId = 0x84EF, + .facilityClass = 0x47, + .species = {SPECIES_SWALOT, SPECIES_XATU, SPECIES_ALTARIA, SPECIES_GOLDUCK, SPECIES_FLYGON, SPECIES_ALAKAZAM, SPECIES_GARDEVOIR, SPECIES_WAILORD, SPECIES_GRUMPIG, SPECIES_MIGHTYENA}, + .rest = {3, 0, 11, 16, 15, 0x1e, 0x39, 16, 0x21, 0x14, 0x3, 12, 0xff, 0xff}, + }, + { + .name = {_("ヨウカ"), _("MACY"), _("AMELIE"), _("CLEO"), _("MARIA"), _("ELISA")}, + .otId = 0x1E43, + .facilityClass = 0x27, + .species = {SPECIES_WIGGLYTUFF, SPECIES_LINOONE, SPECIES_KINGDRA, SPECIES_DELCATTY, SPECIES_RAICHU, SPECIES_FEAROW, SPECIES_STARMIE, SPECIES_MEDICHAM, SPECIES_SHIFTRY, SPECIES_BEAUTIFLY}, + .rest = {4, 0, 15, 0x1e, 0x14, 16, 6, 16, 15, 0x28, 0x1c, 0x1c, 0x13, 0x1c}, + }, + { + .name = {_("ヤスシ"), _("DONTE"), _("BRAHIM"), _("GLAUCO"), _("JOSEF"), _("ROQUE")}, + .otId = 0x379F, + .facilityClass = 0x30, + .species = {SPECIES_STARMIE, SPECIES_DODRIO, SPECIES_AGGRON, SPECIES_MAGNETON, SPECIES_MACHAMP, SPECIES_ARMALDO, SPECIES_HERACROSS, SPECIES_NOSEPASS, SPECIES_EXPLOUD, SPECIES_MIGHTYENA}, + .rest = {5, 0, 0x29, 0x0A, 0x08, 0x14, 0x2F, 0x10, 0x38, 0x16, 0x20, 0x08, 0x00, 0x0C}, + }, + { + .name = {_("ミサオ"), _("AMIRA"), _("LAURE"), _("DAFNE"), _("AMELIE"), _("LARA")}, + .otId = 0xF555, + .facilityClass = 0x31, + .species = {SPECIES_STARMIE, SPECIES_DODRIO, SPECIES_MAGNETON, SPECIES_MEDICHAM, SPECIES_MIGHTYENA, SPECIES_GLALIE, SPECIES_GOLEM, SPECIES_ELECTRODE, SPECIES_PELIPPER, SPECIES_SHARPEDO}, + .rest = {6, 0, 0x0B, 0x0C, 0x3E, 0x12, 0x00, 0x0C, 0x31, 0x0A, 0x30, 0x14, 0x00, 0x0C}, + }, + { + .name = {_("カズサ"), _("KALI"), _("JODIE"), _("ILENIA"), _("KARO"), _("ELSA")}, + .otId = 0x8D26, + .facilityClass = 0x14, + .species = {SPECIES_NINETALES, SPECIES_ALAKAZAM, SPECIES_SCEPTILE, SPECIES_SALAMENCE, SPECIES_GOLDUCK, SPECIES_MAWILE, SPECIES_WEEZING, SPECIES_LANTURN, SPECIES_GARDEVOIR, SPECIES_MILOTIC}, + .rest = {7, 0, 0x06, 0x0A, 0x20, 0x06, 0x1F, 0x0A, 0x02, 0x0A, 0x03, 0x0C, 0xFF, 0xFF}, + }, + { + .name = {_("スミレ"), _("ANNIE"), _("ANNIE"), _("IMELDA"), _("INES"), _("ROSA")}, + .otId = 0x800C, + .facilityClass = 0xD, + .species = {SPECIES_SCEPTILE, SPECIES_VILEPLUME, SPECIES_BELLOSSOM, SPECIES_ROSELIA, SPECIES_CORSOLA, SPECIES_FLYGON, SPECIES_BRELOOM, SPECIES_MILOTIC, SPECIES_ALTARIA, SPECIES_CRADILY}, + .rest = {8, 0, 0x22, 0x1E, 0x33, 0x04, 0x0E, 0x02, 0x02, 0x0A, 0x1E, 0x10, 0x00, 0x0C}, + }, + { + .name = {_("アキノリ"), _("DILLEN"), _("RENE"), _("INDRO"), _("DETLEF"), _("PEDRO")}, + .otId = 0x469f, + .facilityClass = 0, + .species = {SPECIES_SKARMORY, SPECIES_GOLEM, SPECIES_BLAZIKEN, SPECIES_CAMERUPT, SPECIES_DONPHAN, SPECIES_MUK, SPECIES_SALAMENCE, SPECIES_TROPIUS, SPECIES_SOLROCK, SPECIES_RHYDON}, + .rest = {9, 0, 0x3D, 0x0A, 0x11, 0x10, 0x1E, 0x0E, 0x1C, 0x20, 0x04, 0x0C, 0xFF, 0xFF}, + }, + { + .name = {_("トウゾウ"), _("DALLAS"), _("BRUNO"), _("LEARCO"), _("ANSGAR"), _("MANOLO")}, + .otId = 0x71FC, + .facilityClass = 0x2D, + .species = {SPECIES_SEAKING, SPECIES_STARMIE, SPECIES_GOLDUCK, SPECIES_TENTACRUEL, SPECIES_OCTILLERY, SPECIES_GOREBYSS, SPECIES_GLALIE, SPECIES_WAILORD, SPECIES_SHARPEDO, SPECIES_KINGDRA}, + .rest = {10, 0, 0x05, 0x0A, 0x06, 0x06, 0x0E, 0x16, 0x14, 0x0A, 0x00, 0x0C, 0xFF, 0xFF}, + }, + { + .name = {_("セイヤ"), _("FRANK"), _("FRANK"), _("OLINDO"), _("FRANK"), _("MAURO")}, + .otId = 0xA39E, + .facilityClass = 0x3A, + .species = {SPECIES_QUAGSIRE, SPECIES_STARMIE, SPECIES_PELIPPER, SPECIES_CRAWDAUNT, SPECIES_WAILORD, SPECIES_GYARADOS, SPECIES_SWAMPERT, SPECIES_LANTURN, SPECIES_WHISCASH, SPECIES_SHUCKLE}, + .rest = {11, 0, 0x0E, 0x28, 0x3D, 0x10, 0x0F, 0x24, 0x14, 0x0A, 0x23, 0x1E, 0x24, 0x10}, + }, + { + .name = {_("リュウジ"), _("LAMONT"), _("XAV"), _("ORFEO"), _("JÜRGEN"), _("JORGE")}, + .otId = 0xE590, + .facilityClass = 0x19, + .species = {SPECIES_ABSOL, SPECIES_CROBAT, SPECIES_EXPLOUD, SPECIES_MAGNETON, SPECIES_SHARPEDO, SPECIES_MANECTRIC, SPECIES_METAGROSS, SPECIES_ELECTRODE, SPECIES_NOSEPASS, SPECIES_WEEZING}, + .rest = {12, 0, 0x20, 0x10, 0x2E, 0x06, 0x0B, 0x10, 0x22, 0x1E, 0x0F, 0x1E, 0x0B, 0x10}, + }, + { + .name = {_("カツアキ"), _("TYRESE"), _("ANDY"), _("PARIDE"), _("DAVID"), _("CHICHO")}, + .otId = 0xD018, + .facilityClass = 10, + .species = {SPECIES_BLAZIKEN, SPECIES_GOLEM, SPECIES_MACHAMP, SPECIES_RHYDON, SPECIES_HARIYAMA, SPECIES_AGGRON, SPECIES_MEDICHAM, SPECIES_ZANGOOSE, SPECIES_VIGOROTH, SPECIES_SLAKING}, + .rest = {13, 0, 0x29, 0x0A, 0x3A, 0x06, 0x15, 0x0E, 0x35, 0x14, 0x34, 0x10, 0x1E, 0x06}, + }, + { + .name = {_("トシミツ"), _("DANTE"), _("DANTE"), _("RAOUL"), _("LOTHAR"), _("PABLO")}, + .otId = 0xBC75, + .facilityClass = 14, + .species = {SPECIES_SCEPTILE, SPECIES_SANDSLASH, SPECIES_FLYGON, SPECIES_CLAYDOL, SPECIES_ARMALDO, SPECIES_CROBAT, SPECIES_CRADILY, SPECIES_SOLROCK, SPECIES_LUNATONE, SPECIES_GOLEM}, + .rest = {14, 0, 0x01, 0x0A, 0x17, 0x10, 0x43, 0x12, 0x22, 0x1E, 0x0B, 0x10, 0x0F, 0x28}, + }, + { + .name = {_("ローウェン"), _("ARTURO"), _("ARTURO"), _("ROMOLO"), _("BRIAN"), _("ARTURO")}, + .otId = 0xFA02, + .facilityClass = 0x20, + .species = {SPECIES_ABSOL, SPECIES_MIGHTYENA, SPECIES_ALAKAZAM, SPECIES_BANETTE, SPECIES_NINETALES, SPECIES_CLAYDOL, SPECIES_MUK, SPECIES_SALAMENCE, SPECIES_WALREIN, SPECIES_DUSCLOPS}, + .rest = {15, 0, 0x0F, 0x1E, 0x04, 0x14, 0x2F, 0x10, 0x06, 0x10, 0x20, 0x10, 0x03, 0x0E}, + }, +}; + +const u8 *const gUnknown_08610EF0[][4] = +{ + {gText_082B7229, gText_082B731C, gText_082B735B, gText_082B7423}, + {gText_082B74C1, gText_082B756F, gText_082B75B2, gText_082B763F}, + {gText_082B76AC, gText_082B7772, gText_082B77CE, gText_082B7871}, + {gText_082B78D4, gText_082B7B1A, gText_082B7C13, gText_082B7D18}, + {gText_082B7DD4, gText_082B7EE5, gText_082B7F35, gText_082B7FE8}, + {gText_082B8087, gText_082B822B, gText_082B8286, gText_082B8356}, + {gText_082B83CE, gText_082B84FC, gText_082B8559, gText_082B8656}, + {gText_082B86EA, gText_082B87DA, gText_082B887C, gText_082B8957}, + {gText_082B89C6, gText_082B8ACF, gText_082B8B66, gText_082B8C20}, + {gText_082B8CAA, gText_082B8DD3, gText_082B8E24, gText_082B8ED5}, + {gText_082B8F45, gText_082B905F, gText_082B910E, gText_082B9204}, + {gText_082B929C, gText_082B9438, gText_082B9488, gText_082B9564}, + {gText_082B95D8, gText_082B9763, gText_082B97E5, gText_082B989A}, + {gText_082B992D, gText_082B9A84, gText_082B9AB9, gText_082B9B76}, + {gText_082B9BF2, gText_082B9D83, gText_082B9DF9, gText_082B9EAA}, + {gText_082B9F55, gText_082BA084, gText_082BA11D, gText_082BA1F3}, +}; + +const u8 *const gUnknown_08610FF0[][2] = +{ + {gText_082BE50D, gText_082BE5F5}, + {gText_082BE679, gText_082BE71E}, + {gText_082BE762, gText_082BE7F8}, + {gText_082BE850, gText_082BE99C}, + {gText_082BEA1B, gText_082BEAE9}, + {gText_082BEB72, gText_082BEC8E}, + {gText_082BED16, gText_082BEE29}, + {gText_082BEEB4, gText_082BEFE2}, + {gText_082BF04E, gText_082BF11D}, + {gText_082BF1A8, gText_082BF268}, + {gText_082BF2D1, gText_082BF3CF}, + {gText_082BF46A, gText_082BF551}, + {gText_082BF5C3, gText_082BF6E5}, + {gText_082BF773, gText_082BF869}, + {gText_082BF8DD, gText_082BF9BA}, + {gText_082BFA5A, gText_082BFB4E}, +}; + +const u8 *const gUnknown_08611070[][5] = +{ + {gText_082BA2A3, gText_082BA34E, gText_082BA380, gText_082BA3D2, gText_082BA448}, + {gText_082BA4D3, gText_082BA58C, gText_082BA5BF, gText_082BA5F3, gText_082BA635}, + {gText_082BA6E6, gText_082BA742, gText_082BA770, gText_082BA78F, gText_082BA7D8}, + {gText_082BA867, gText_082BA96B, gText_082BA9B7, gText_082BAA1B, gText_082BAA81}, + {gText_082BAB22, gText_082BAC43, gText_082BAC78, gText_082BAD17, gText_082BADB6}, + {gText_082BAE36, gText_082BAF4E, gText_082BAF8F, gText_082BAFDB, gText_082BB05F}, + {gText_082BB0D4, gText_082BB18C, gText_082BB1CE, gText_082BB242, gText_082BB2D9}, + {gText_082BB370, gText_082BB4C3, gText_082BB4FB, gText_082BB575, gText_082BB5E1}, + {gText_082BB656, gText_082BB6E5, gText_082BB72C, gText_082BB7A2, gText_082BB84A}, + {gText_082BB8CD, gText_082BB970, gText_082BB9AE, gText_082BBA05, gText_082BBA6C}, + {gText_082BBB01, gText_082BBC1C, gText_082BBC4B, gText_082BBCF6, gText_082BBD90}, + {gText_082BBE0B, gText_082BBEE5, gText_082BBF25, gText_082BBFA4, gText_082BC024}, + {gText_082BC0C8, gText_082BC213, gText_082BC247, gText_082BC2DD, gText_082BC373}, + {gText_082BC40E, gText_082BC514, gText_082BC555, gText_082BC5CE, gText_082BC666}, + {gText_082BC714, gText_082BC808, gText_082BC84D, gText_082BC8EA, gText_082BC984}, + {gText_082BCA4D, gText_082BCB75, gText_082BCBA6, gText_082BCBFC, gText_082BCCA4}, +}; + +const u8 *const gUnknown_086111B0[][2] = +{ + {gText_082BFBF2, gText_082BFCAE}, + {gText_082BFD26, gText_082BFDB1}, + {gText_082BFE24, gText_082BFEAD}, + {gText_082BFF0A, gText_082C0032}, + {gText_082C0090, gText_082C016E}, + {gText_082C01F7, gText_082C034C}, + {gText_082C03CA, gText_082C046E}, + {gText_082C04F9, gText_082C0598}, + {gText_082C0602, gText_082C06D8}, + {gText_082C074A, gText_082C0809}, + {gText_082C086E, gText_082C0982}, + {gText_082C0A1D, gText_082C0AFD}, + {gText_082C0B6F, gText_082C0C7D}, + {gText_082C0D0B, gText_082C0DFE}, + {gText_082C0E71, gText_082C0F6D}, + {gText_082C1003, gText_082C1122}, +}; + +const u8 *const gUnknown_08611230[][2] = +{ + {gText_082BCD68, gText_082BCE64}, + {gText_082BCEF2, gText_082BCF61}, + {gText_082BCFA1, gText_082BD03C}, + {gText_082BD06D, gText_082BD18A}, + {gText_082BD222, gText_082BD325}, + {gText_082BD3B1, gText_082BD493}, + {gText_082BD51C, gText_082BD609}, + {gText_082BD697, gText_082BD797}, + {gText_082BD806, gText_082BD8F5}, + {gText_082BD9BE, gText_082BDAE1}, + {gText_082BDB4E, gText_082BDC6B}, + {gText_082BDD0D, gText_082BDDEC}, + {gText_082BDE68, gText_082BDF4D}, + {gText_082BDFD8, gText_082BE0FD}, + {gText_082BE189, gText_082BE2A5}, + {gText_082BE33E, gText_082BE46C}, +}; + +const u8 *const gUnknown_086112B0[][2] = +{ + {gText_082C11D1, gText_082C12D5}, + {gText_082C13AB, gText_082C1444}, + {gText_082C1501, gText_082C15B6}, + {gText_082C165E, gText_082C174F}, + {gText_082C1862, gText_082C19A0}, + {gText_082C1A76, gText_082C1C16}, + {gText_082C1CF5, gText_082C1DC1}, + {gText_082C1EDC, gText_082C1FEC}, + {gText_082C20D1, gText_082C21FF}, + {gText_082C231C, gText_082C2407}, + {gText_082C24B5, gText_082C25B1}, + {gText_082C2707, gText_082C27D4}, + {gText_082C28D6, gText_082C2A0B}, + {gText_082C2B50, gText_082C2C77}, + {gText_082C2D67, gText_082C2E41}, + {gText_082C2EF5, gText_082C3023}, +}; + +const u8 *const gUnknown_08611330[] = +{ + gText_082B6EA5, + gText_082B6EEC, + gText_082B6F16, + gText_082B6F4C, + gText_082B6F92, + gText_082B6FC9, + gText_082B700C, + gText_082B703A, + gText_082B706A, + gText_082B709C, + gText_082B70CC, + gText_082B710A, + gText_082B714D, + gText_082B7185, + gText_082B71C1, + gText_082B71F9, +}; + +const bool8 gUnknown_08611370[] = +{ + 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, + 0x01, 0x01, 0x01, +}; + +const u8 gUnknown_086114D3[] = {0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00}; + +void (* const gUnknown_086114E0[])(void) = +{ + sub_81A093C, + sub_81A0964, + sub_81A0978, + sub_819FC60, + sub_81A0984, + sub_81A0990, + sub_81A09D0, + sub_81A0A20, + sub_81A0C9C, + sub_81A087C, + sub_81A1638, + sub_81A0CC0, + sub_81A09B4, + sub_81A0D40, + sub_81A0DD4, + sub_81A0FE4, + sub_81A0FFC, + sub_81A0D80, + sub_81A11F8, + sub_81A1218, + sub_81A1224, + sub_81A1438, + sub_81A150C, + sub_81A15A4, + sub_81A1644, + sub_81A1370, +}; + +const u8 gUnknown_08611548[8] = {0x00, 0x01, 0x02, 0x03, 0x06, 0x07, 0x08, 0x09}; + // text extern const u8 gText_Give[]; extern const u8 gText_NoNeed[]; -- cgit v1.2.3 From 7952cfeba5c9eaed2cd58a7f49dea8d676a56840 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 14 Oct 2018 16:27:48 +0200 Subject: document more of apprentice --- src/apprentice.c | 248 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 125 insertions(+), 123 deletions(-) (limited to 'src/apprentice.c') diff --git a/src/apprentice.c b/src/apprentice.c index b4b20f672..ca94dab39 100644 --- a/src/apprentice.c +++ b/src/apprentice.c @@ -25,6 +25,8 @@ #include "constants/items.h" #include "constants/songs.h" +#define PLAYER_APPRENTICE gSaveBlock2Ptr->playerApprentice + struct Unk030062ECStruct { u8 unk0; @@ -114,7 +116,7 @@ void sub_819FAA0(void) { u8 i, j; - gSaveBlock2Ptr->field_B2_1 = 0; + PLAYER_APPRENTICE.field_B2_1 = 0; for (i = 0; i < 4; i++) { for (j = 0; j < 6; j++) @@ -133,9 +135,9 @@ void sub_819FAA0(void) sub_81A087C(); } -bool8 sub_819FBB0(void) +static bool8 IsPlayersApprenticeActive(void) { - return (gSaveBlock2Ptr->field_B1_0 != 0); + return (PLAYER_APPRENTICE.activeLvlMode != 0); } void sub_819FBC8(void) @@ -144,26 +146,26 @@ void sub_819FBC8(void) { do { - gSaveBlock2Ptr->field_B0 = gUnknown_08611548[Random() % ARRAY_COUNT(gUnknown_08611548)]; - } while (gSaveBlock2Ptr->field_B0 == gSaveBlock2Ptr->apprentices[0].id); + PLAYER_APPRENTICE.id = gUnknown_08611548[Random() % ARRAY_COUNT(gUnknown_08611548)]; + } while (PLAYER_APPRENTICE.id == gSaveBlock2Ptr->apprentices[0].id); } else { do { - gSaveBlock2Ptr->field_B0 = Random() % 16; - } while (gSaveBlock2Ptr->field_B0 == gSaveBlock2Ptr->apprentices[0].id); + PLAYER_APPRENTICE.id = Random() % 16; + } while (PLAYER_APPRENTICE.id == gSaveBlock2Ptr->apprentices[0].id); } } -void sub_819FC40(u8 value) +static void SetPlayersApprenticeLvlMode(u8 mode) { - gSaveBlock2Ptr->field_B1_0 = value; + PLAYER_APPRENTICE.activeLvlMode = mode; } void sub_819FC60(void) { - u8 array[10]; + u8 array[APPRENTICE_SPECIES_COUNT]; u8 i; for (i = 0; i < ARRAY_COUNT(array); i++) @@ -178,7 +180,7 @@ void sub_819FC60(void) } for (i = 0; i < 3; i++) - gSaveBlock2Ptr->field_B4[i] = ((array[i * 2] & 0xF) << 4) | ((array[i * 2 + 1]) & 0xF); + PLAYER_APPRENTICE.monIds[i] = ((array[i * 2] & 0xF) << 4) | ((array[i * 2 + 1]) & 0xF); } u8 sub_819FCF8(u8 val, u8 *arg1, u8 *arg2) @@ -247,11 +249,11 @@ void sub_819FD64(void) sp_10 = 0; for (i = 0; i < 9; i++) { - gSaveBlock2Ptr->field_B8[i].unk0_0 = sp_0[i]; + PLAYER_APPRENTICE.field_B8[i].unk0_0 = sp_0[i]; if (sp_0[i] != 3) { - gSaveBlock2Ptr->field_B8[i].unk0_1 = sub_819FCF8(sp_0[i], sp_C, &sp_10); - id = gSaveBlock2Ptr->field_B8[i].unk0_1; + PLAYER_APPRENTICE.field_B8[i].unk0_1 = sub_819FCF8(sp_0[i], sp_C, &sp_10); + id = PLAYER_APPRENTICE.field_B8[i].unk0_1; if (sp_0[i] == 2) { do @@ -265,8 +267,8 @@ void sub_819FD64(void) } while (j != gUnknown_030062EC->unk0 + 1); gUnknown_030062EC->unk20[id][gUnknown_030062EC->unk0] = rand1; - gSaveBlock2Ptr->field_B8[i].unk0_2 = rand1; - gSaveBlock2Ptr->field_B8[i].unk2 = sub_819FF98(gSaveBlock2Ptr->field_B8[i].unk0_1); + PLAYER_APPRENTICE.field_B8[i].unk0_2 = rand1; + PLAYER_APPRENTICE.field_B8[i].unk2 = sub_819FF98(PLAYER_APPRENTICE.field_B8[i].unk0_1); } } } @@ -276,13 +278,13 @@ void sub_819FD64(void) // No idea why a do-while loop is needed, but it will not match without it. -#define APPRENTICE_SPECIES_ID(speciesArrId, monId) speciesArrId = (gSaveBlock2Ptr->field_B4[monId] >> \ - (((gSaveBlock2Ptr->field_B2_0 >> monId) & 1) << 2)) & 0xF; \ +#define APPRENTICE_SPECIES_ID(speciesArrId, monId) speciesArrId = (PLAYER_APPRENTICE.monIds[monId] >> \ + (((PLAYER_APPRENTICE.field_B2_0 >> monId) & 1) << 2)) & 0xF; \ do {} while (0) // Why the need to have two macros do the exact thing differently? -#define APPRENTICE_SPECIES_ID_2(speciesArrId, monId) { u8 a0 = ((gSaveBlock2Ptr->field_B2_0 >> monId) & 1);\ - speciesArrId = gSaveBlock2Ptr->field_B4[monId]; \ +#define APPRENTICE_SPECIES_ID_2(speciesArrId, monId) { u8 a0 = ((PLAYER_APPRENTICE.field_B2_0 >> monId) & 1);\ + speciesArrId = PLAYER_APPRENTICE.monIds[monId]; \ speciesArrId = ((speciesArrId) >> (a0 << 2)) & 0xF; \ } @@ -307,10 +309,10 @@ static u16 sub_819FF98(u8 arg0) id = 0; } - species = gApprentices[gSaveBlock2Ptr->field_B0].species[id]; + species = gApprentices[PLAYER_APPRENTICE.id].species[id]; learnset = gLevelUpLearnsets[species]; j = 0; - if (gSaveBlock2Ptr->field_B1_0 == 1) + if (PLAYER_APPRENTICE.activeLvlMode == 1) level = 50; else level = 60; @@ -412,7 +414,7 @@ void GetLatestLearnedMoves(u16 species, u16 *moves) u8 level, knownMovesCount; const u16 *learnset; - if (gSaveBlock2Ptr->field_B1_0 == 1) + if (PLAYER_APPRENTICE.activeLvlMode == 1) level = 50; else level = 60; @@ -437,25 +439,25 @@ u16 sub_81A0284(u8 arg0, u8 speciesTableId, u8 arg2) u16 moves[4]; u8 i, count; - if (gSaveBlock2Ptr->field_B1_1 < 3) + if (PLAYER_APPRENTICE.field_B1_1 < 3) return 0; count = 0; for (i = 0; i < 9; i++) { - if (gSaveBlock2Ptr->field_B8[i].unk0_0 == 0) + if (PLAYER_APPRENTICE.field_B8[i].unk0_0 == 0) break; count++; } - GetLatestLearnedMoves(gApprentices[gSaveBlock2Ptr->field_B0].species[speciesTableId], moves); - for (i = 0; i < count && i < gSaveBlock2Ptr->field_B1_1 - 3; i++) + GetLatestLearnedMoves(gApprentices[PLAYER_APPRENTICE.id].species[speciesTableId], moves); + for (i = 0; i < count && i < PLAYER_APPRENTICE.field_B1_1 - 3; i++) { - if (gSaveBlock2Ptr->field_B8[i].unk0_0 == 2 - && gSaveBlock2Ptr->field_B8[i].unk0_1 == arg0 - && gSaveBlock2Ptr->field_B8[i].unk0_3 != 0) + if (PLAYER_APPRENTICE.field_B8[i].unk0_0 == 2 + && PLAYER_APPRENTICE.field_B8[i].unk0_1 == arg0 + && PLAYER_APPRENTICE.field_B8[i].unk0_3 != 0) { - moves[gSaveBlock2Ptr->field_B8[i].unk0_2] = gSaveBlock2Ptr->field_B8[i].unk2; + moves[PLAYER_APPRENTICE.field_B8[i].unk0_2] = PLAYER_APPRENTICE.field_B8[i].unk2; } } @@ -476,7 +478,7 @@ void sub_81A0390(u8 arg0) gSaveBlock2Ptr->apprentices[0].monData[i].moves[j] = 0; } - j = gSaveBlock2Ptr->field_B1_2; + j = PLAYER_APPRENTICE.field_B1_2; for (i = 0; i < 3; i++) { apprenticeMons[j] = &gSaveBlock2Ptr->apprentices[0].monData[i]; @@ -486,25 +488,25 @@ void sub_81A0390(u8 arg0) for (i = 0; i < 3; i++) { APPRENTICE_SPECIES_ID(speciesTableId, i); - apprenticeMons[i]->species = gApprentices[gSaveBlock2Ptr->field_B0].species[speciesTableId]; + apprenticeMons[i]->species = gApprentices[PLAYER_APPRENTICE.id].species[speciesTableId]; GetLatestLearnedMoves(apprenticeMons[i]->species, apprenticeMons[i]->moves); } for (i = 0; i < arg0; i++) { - u8 var1 = gSaveBlock2Ptr->field_B8[i].unk0_0; - u8 monId = gSaveBlock2Ptr->field_B8[i].unk0_1; + u8 var1 = PLAYER_APPRENTICE.field_B8[i].unk0_0; + u8 monId = PLAYER_APPRENTICE.field_B8[i].unk0_1; if (var1 == 1) { - if (gSaveBlock2Ptr->field_B8[i].unk0_3 != 0) - apprenticeMons[monId]->item = gSaveBlock2Ptr->field_B8[i].unk2; + if (PLAYER_APPRENTICE.field_B8[i].unk0_3 != 0) + apprenticeMons[monId]->item = PLAYER_APPRENTICE.field_B8[i].unk2; } else if (var1 == 2) { - if (gSaveBlock2Ptr->field_B8[i].unk0_3 != 0) + if (PLAYER_APPRENTICE.field_B8[i].unk0_3 != 0) { - u32 moveSlot = gSaveBlock2Ptr->field_B8[i].unk0_2; - apprenticeMons[monId]->moves[moveSlot] = gSaveBlock2Ptr->field_B8[i].unk2; + u32 moveSlot = PLAYER_APPRENTICE.field_B8[i].unk0_2; + apprenticeMons[monId]->moves[moveSlot] = PLAYER_APPRENTICE.field_B8[i].unk2; } } } @@ -539,14 +541,14 @@ static void CreateMenuWithAnswers(u8 arg0) u32 speciesTableId; APPRENTICE_SPECIES_ID(speciesTableId, i); - species = gApprentices[gSaveBlock2Ptr->field_B0].species[speciesTableId]; + species = gApprentices[PLAYER_APPRENTICE.id].species[speciesTableId]; strings[i] = gSpeciesNames[species]; } break; case APPRENTICE_ASK_2SPECIES: left = 0x12; top = 8; - if (gSaveBlock2Ptr->field_B1_1 > 2) + if (PLAYER_APPRENTICE.field_B1_1 > 2) return; strings[1] = gSpeciesNames[gUnknown_030062F0->unk2]; strings[0] = gSpeciesNames[gUnknown_030062F0->unk0]; @@ -674,27 +676,27 @@ void sub_81A087C(void) u8 i; sub_819FBC8(); - gSaveBlock2Ptr->field_B1_0 = 0; - gSaveBlock2Ptr->field_B1_1 = 0; - gSaveBlock2Ptr->field_B1_2 = 0; - gSaveBlock2Ptr->field_B2_0 = 0; + PLAYER_APPRENTICE.activeLvlMode = 0; + PLAYER_APPRENTICE.field_B1_1 = 0; + PLAYER_APPRENTICE.field_B1_2 = 0; + PLAYER_APPRENTICE.field_B2_0 = 0; for (i = 0; i < 3; i++) - gSaveBlock2Ptr->field_B4[i] = 0; + PLAYER_APPRENTICE.monIds[i] = 0; for (i = 0; i < 9; i++) { - gSaveBlock2Ptr->field_B8[i].unk0_0 = 0; - gSaveBlock2Ptr->field_B8[i].unk0_1 = 0; - gSaveBlock2Ptr->field_B8[i].unk0_2 = 0; - gSaveBlock2Ptr->field_B8[i].unk0_3 = 0; - gSaveBlock2Ptr->field_B8[i].unk2 = 0; + PLAYER_APPRENTICE.field_B8[i].unk0_0 = 0; + PLAYER_APPRENTICE.field_B8[i].unk0_1 = 0; + PLAYER_APPRENTICE.field_B8[i].unk0_2 = 0; + PLAYER_APPRENTICE.field_B8[i].unk0_3 = 0; + PLAYER_APPRENTICE.field_B8[i].unk2 = 0; } } void sub_81A093C(void) { - if (!sub_819FBB0()) + if (!IsPlayersApprenticeActive()) gSpecialVar_Result = FALSE; else gSpecialVar_Result = TRUE; @@ -702,7 +704,7 @@ void sub_81A093C(void) void sub_81A0964(void) { - sub_819FC40(gSpecialVar_0x8005); + SetPlayersApprenticeLvlMode(gSpecialVar_0x8005); } void sub_81A0978(void) @@ -717,17 +719,17 @@ void sub_81A0984(void) void sub_81A0990(void) { - gSaveBlock2Ptr->field_B1_1++; + PLAYER_APPRENTICE.field_B1_1++; } void sub_81A09B4(void) { - gSpecialVar_Result = gSaveBlock2Ptr->field_B1_1; + gSpecialVar_Result = PLAYER_APPRENTICE.field_B1_1; } void sub_81A09D0(void) { - s32 var = gSaveBlock2Ptr->field_B1_1 - 3; + s32 var = PLAYER_APPRENTICE.field_B1_1 - 3; if (var < 0) { gSpecialVar_Result = FALSE; @@ -737,7 +739,7 @@ void sub_81A09D0(void) if (var > 8) gSpecialVar_Result = TRUE; - if (!gSaveBlock2Ptr->field_B8[var].unk0_0) + if (!PLAYER_APPRENTICE.field_B8[var].unk0_0) gSpecialVar_Result = TRUE; else gSpecialVar_Result = FALSE; @@ -767,71 +769,71 @@ static void PrintMessage(void) if (gSpecialVar_0x8006 == 6) { - string = gUnknown_08610FF0[gSaveBlock2Ptr->field_B0][0]; + string = gUnknown_08610FF0[PLAYER_APPRENTICE.id][0]; } else if (gSpecialVar_0x8006 == 7) { - string = gUnknown_08610FF0[gSaveBlock2Ptr->field_B0][1]; + string = gUnknown_08610FF0[PLAYER_APPRENTICE.id][1]; } else if (gSpecialVar_0x8006 == 8) { - string = gUnknown_086111B0[gSaveBlock2Ptr->field_B0][0]; + string = gUnknown_086111B0[PLAYER_APPRENTICE.id][0]; } else if (gSpecialVar_0x8006 == 9) { - string = gUnknown_086111B0[gSaveBlock2Ptr->field_B0][1]; + string = gUnknown_086111B0[PLAYER_APPRENTICE.id][1]; } else if (gSpecialVar_0x8006 == 4) { - string = gUnknown_08611230[gSaveBlock2Ptr->field_B0][0]; + string = gUnknown_08611230[PLAYER_APPRENTICE.id][0]; } else if (gSpecialVar_0x8006 == 5) { - string = gUnknown_08611230[gSaveBlock2Ptr->field_B0][1]; + string = gUnknown_08611230[PLAYER_APPRENTICE.id][1]; } else if (gSpecialVar_0x8006 == 10) { - string = gUnknown_08611070[gSaveBlock2Ptr->field_B0][0]; + string = gUnknown_08611070[PLAYER_APPRENTICE.id][0]; } else if (gSpecialVar_0x8006 == 11) { - string = gUnknown_086112B0[gSaveBlock2Ptr->field_B0][0]; + string = gUnknown_086112B0[PLAYER_APPRENTICE.id][0]; } else if (gSpecialVar_0x8006 == 12) { - string = gUnknown_08611070[gSaveBlock2Ptr->field_B0][3]; + string = gUnknown_08611070[PLAYER_APPRENTICE.id][3]; } else if (gSpecialVar_0x8006 == 13) { - string = gUnknown_08611070[gSaveBlock2Ptr->field_B0][1]; + string = gUnknown_08611070[PLAYER_APPRENTICE.id][1]; } else if (gSpecialVar_0x8006 == 16) { - string = gUnknown_08611070[gSaveBlock2Ptr->field_B0][4]; + string = gUnknown_08611070[PLAYER_APPRENTICE.id][4]; } else if (gSpecialVar_0x8006 == 14) { - string = gUnknown_08611070[gSaveBlock2Ptr->field_B0][2]; + string = gUnknown_08611070[PLAYER_APPRENTICE.id][2]; } else if (gSpecialVar_0x8006 == 15) { - string = gUnknown_086112B0[gSaveBlock2Ptr->field_B0][1]; + string = gUnknown_086112B0[PLAYER_APPRENTICE.id][1]; } else if (gSpecialVar_0x8006 == 0) { - string = gUnknown_08610EF0[gSaveBlock2Ptr->field_B0][0]; + string = gUnknown_08610EF0[PLAYER_APPRENTICE.id][0]; } else if (gSpecialVar_0x8006 == 1) { - string = gUnknown_08610EF0[gSaveBlock2Ptr->field_B0][1]; + string = gUnknown_08610EF0[PLAYER_APPRENTICE.id][1]; } else if (gSpecialVar_0x8006 == 2) { - string = gUnknown_08610EF0[gSaveBlock2Ptr->field_B0][2]; + string = gUnknown_08610EF0[PLAYER_APPRENTICE.id][2]; } else if (gSpecialVar_0x8006 == 3) { - string = gUnknown_08610EF0[gSaveBlock2Ptr->field_B0][3]; + string = gUnknown_08610EF0[PLAYER_APPRENTICE.id][3]; } else { @@ -856,18 +858,18 @@ void sub_81A0C9C(void) void sub_81A0CC0(void) { - if (gSaveBlock2Ptr->field_B1_1 < 3) + if (PLAYER_APPRENTICE.field_B1_1 < 3) { gSpecialVar_Result = 2; } - else if (gSaveBlock2Ptr->field_B1_1 > 11) + else if (PLAYER_APPRENTICE.field_B1_1 > 11) { gSpecialVar_Result = 5; } else { - s32 id = gSaveBlock2Ptr->field_B1_1 - 3; - switch (gSaveBlock2Ptr->field_B8[id].unk0_0) + s32 id = PLAYER_APPRENTICE.field_B1_1 - 3; + switch (PLAYER_APPRENTICE.field_B8[id].unk0_0) { case 1: gSpecialVar_Result = 4; @@ -890,19 +892,19 @@ void sub_81A0D40(void) if (gSpecialVar_0x8005) { u8 bitNo = gSpecialVar_0x8006; - gSaveBlock2Ptr->field_B2_0 |= 1 << bitNo; + PLAYER_APPRENTICE.field_B2_0 |= 1 << bitNo; } } void sub_81A0D80(void) { - if (gSaveBlock2Ptr->field_B1_1 >= 3) + if (PLAYER_APPRENTICE.field_B1_1 >= 3) { - u8 id = gSaveBlock2Ptr->field_B1_1 - 3; + u8 id = PLAYER_APPRENTICE.field_B1_1 - 3; if (gSpecialVar_0x8005) - gSaveBlock2Ptr->field_B8[id].unk0_3 = 1; + PLAYER_APPRENTICE.field_B8[id].unk0_3 = 1; else - gSaveBlock2Ptr->field_B8[id].unk0_3 = 0; + PLAYER_APPRENTICE.field_B8[id].unk0_3 = 0; } } @@ -912,43 +914,43 @@ void sub_81A0DD4(void) u8 count = 0; u8 id1, id2; - for (i = 0; i < 9 && gSaveBlock2Ptr->field_B8[i].unk0_0; count++, i++) + for (i = 0; i < 9 && PLAYER_APPRENTICE.field_B8[i].unk0_0; count++, i++) ; gUnknown_030062F0 = AllocZeroed(sizeof(*gUnknown_030062F0)); if (gSpecialVar_0x8005 == 2) { - if (gSaveBlock2Ptr->field_B1_1 < 3) + if (PLAYER_APPRENTICE.field_B1_1 < 3) { - id1 = gSaveBlock2Ptr->field_B4[gSaveBlock2Ptr->field_B1_1] >> 4; - gUnknown_030062F0->unk2 = gApprentices[gSaveBlock2Ptr->field_B0].species[id1]; + id1 = PLAYER_APPRENTICE.monIds[PLAYER_APPRENTICE.field_B1_1] >> 4; + gUnknown_030062F0->unk2 = gApprentices[PLAYER_APPRENTICE.id].species[id1]; - id2 = gSaveBlock2Ptr->field_B4[gSaveBlock2Ptr->field_B1_1] & 0xF; - gUnknown_030062F0->unk0 = gApprentices[gSaveBlock2Ptr->field_B0].species[id2]; + id2 = PLAYER_APPRENTICE.monIds[PLAYER_APPRENTICE.field_B1_1] & 0xF; + gUnknown_030062F0->unk0 = gApprentices[PLAYER_APPRENTICE.id].species[id2]; } } else if (gSpecialVar_0x8005 == 3) { - if (gSaveBlock2Ptr->field_B1_1 >= 3 - && gSaveBlock2Ptr->field_B1_1 < count + 3 - && gSaveBlock2Ptr->field_B8[gSaveBlock2Ptr->field_B1_1 - 3].unk0_0 == 2) + if (PLAYER_APPRENTICE.field_B1_1 >= 3 + && PLAYER_APPRENTICE.field_B1_1 < count + 3 + && PLAYER_APPRENTICE.field_B8[PLAYER_APPRENTICE.field_B1_1 - 3].unk0_0 == 2) { - count = gSaveBlock2Ptr->field_B8[gSaveBlock2Ptr->field_B1_1 - 3].unk0_1; + count = PLAYER_APPRENTICE.field_B8[PLAYER_APPRENTICE.field_B1_1 - 3].unk0_1; APPRENTICE_SPECIES_ID_2(id1, count); - gUnknown_030062F0->unk0 = gApprentices[gSaveBlock2Ptr->field_B0].species[id1]; - gUnknown_030062F0->unk4 = sub_81A0284(count, id1, gSaveBlock2Ptr->field_B8[gSaveBlock2Ptr->field_B1_1 - 3].unk0_2); - gUnknown_030062F0->unk6 = gSaveBlock2Ptr->field_B8[gSaveBlock2Ptr->field_B1_1 - 3].unk2; + gUnknown_030062F0->unk0 = gApprentices[PLAYER_APPRENTICE.id].species[id1]; + gUnknown_030062F0->unk4 = sub_81A0284(count, id1, PLAYER_APPRENTICE.field_B8[PLAYER_APPRENTICE.field_B1_1 - 3].unk0_2); + gUnknown_030062F0->unk6 = PLAYER_APPRENTICE.field_B8[PLAYER_APPRENTICE.field_B1_1 - 3].unk2; } } else if (gSpecialVar_0x8005 == 4) { - if (gSaveBlock2Ptr->field_B1_1 >= 3 - && gSaveBlock2Ptr->field_B1_1 < count + 3 - && gSaveBlock2Ptr->field_B8[gSaveBlock2Ptr->field_B1_1 - 3].unk0_0 == 1) + if (PLAYER_APPRENTICE.field_B1_1 >= 3 + && PLAYER_APPRENTICE.field_B1_1 < count + 3 + && PLAYER_APPRENTICE.field_B8[PLAYER_APPRENTICE.field_B1_1 - 3].unk0_0 == 1) { - count = gSaveBlock2Ptr->field_B8[gSaveBlock2Ptr->field_B1_1 - 3].unk0_1; + count = PLAYER_APPRENTICE.field_B8[PLAYER_APPRENTICE.field_B1_1 - 3].unk0_1; APPRENTICE_SPECIES_ID_2(id2, count); - gUnknown_030062F0->unk0 = gApprentices[gSaveBlock2Ptr->field_B0].species[id2]; + gUnknown_030062F0->unk0 = gApprentices[PLAYER_APPRENTICE.id].species[id2]; } } } @@ -997,14 +999,14 @@ void sub_81A0FFC(void) StringCopy(stringDst, gMoveNames[gUnknown_030062F0->unk6]); break; case APPRENTICE_BUFF_ITEM: - StringCopy(stringDst, ItemId_GetName(gSaveBlock2Ptr->field_B8[gSaveBlock2Ptr->field_B1_1 - 3].unk2)); + StringCopy(stringDst, ItemId_GetName(PLAYER_APPRENTICE.field_B8[PLAYER_APPRENTICE.field_B1_1 - 3].unk2)); break; case APPRENTICE_BUFF_NAME: - TVShowConvertInternationalString(text, GetApprenticeNameInLanguage(gSaveBlock2Ptr->field_B0, LANGUAGE_ENGLISH), LANGUAGE_ENGLISH); + TVShowConvertInternationalString(text, GetApprenticeNameInLanguage(PLAYER_APPRENTICE.id, LANGUAGE_ENGLISH), LANGUAGE_ENGLISH); StringCopy(stringDst, text); break; case APPRENTICE_BUFF_LEVEL: - if (gSaveBlock2Ptr->field_B1_0 == 1) + if (PLAYER_APPRENTICE.activeLvlMode == 1) StringCopy(stringDst, gText_Lv50); else StringCopy(stringDst, gText_OpenLevel); @@ -1014,22 +1016,22 @@ void sub_81A0FFC(void) StringCopy(stringDst, gStringVar4); break; case APPRENTICE_BUFF_SPECIES4: - if (gSaveBlock2Ptr->field_B1_2 < 3) + if (PLAYER_APPRENTICE.field_B1_2 < 3) { - APPRENTICE_SPECIES_ID(speciesArrayId, gSaveBlock2Ptr->field_B1_2); + APPRENTICE_SPECIES_ID(speciesArrayId, PLAYER_APPRENTICE.field_B1_2); } else { speciesArrayId = 0; } - StringCopy(stringDst, gSpeciesNames[gApprentices[gSaveBlock2Ptr->field_B0].species[speciesArrayId]]); + StringCopy(stringDst, gSpeciesNames[gApprentices[PLAYER_APPRENTICE.id].species[speciesArrayId]]); break; } } void sub_81A11F8(void) { - gSaveBlock2Ptr->field_B1_2 = gSpecialVar_0x8005; + PLAYER_APPRENTICE.field_B1_2 = gSpecialVar_0x8005; } void sub_81A1218(void) @@ -1043,28 +1045,28 @@ void sub_81A1224(void) u8 count; u8 i, j; - if (gSaveBlock2Ptr->field_B1_1 < 3) + if (PLAYER_APPRENTICE.field_B1_1 < 3) return; count = 0; - for (j = 0; j < 9 && gSaveBlock2Ptr->field_B8[j].unk0_0; count++, j++) + for (j = 0; j < 9 && PLAYER_APPRENTICE.field_B8[j].unk0_0; count++, j++) ; - for (i = 0; i < count && i < gSaveBlock2Ptr->field_B1_1 - 3; i++) + for (i = 0; i < count && i < PLAYER_APPRENTICE.field_B1_1 - 3; i++) { - if (gSaveBlock2Ptr->field_B8[i].unk0_0 == 1 - && gSaveBlock2Ptr->field_B8[i].unk0_3 - && gSaveBlock2Ptr->field_B8[i].unk2 == gSpecialVar_0x8005) + if (PLAYER_APPRENTICE.field_B8[i].unk0_0 == 1 + && PLAYER_APPRENTICE.field_B8[i].unk0_3 + && PLAYER_APPRENTICE.field_B8[i].unk2 == gSpecialVar_0x8005) { - gSaveBlock2Ptr->field_B8[gSaveBlock2Ptr->field_B1_1 - 3].unk0_3 = 0; - gSaveBlock2Ptr->field_B8[gSaveBlock2Ptr->field_B1_1 - 3].unk2 = gSpecialVar_0x8005; + PLAYER_APPRENTICE.field_B8[PLAYER_APPRENTICE.field_B1_1 - 3].unk0_3 = 0; + PLAYER_APPRENTICE.field_B8[PLAYER_APPRENTICE.field_B1_1 - 3].unk2 = gSpecialVar_0x8005; gSpecialVar_Result = i; return; } } - gSaveBlock2Ptr->field_B8[gSaveBlock2Ptr->field_B1_1 - 3].unk0_3 = 1; - gSaveBlock2Ptr->field_B8[gSaveBlock2Ptr->field_B1_1 - 3].unk2 = gSpecialVar_0x8005; + PLAYER_APPRENTICE.field_B8[PLAYER_APPRENTICE.field_B1_1 - 3].unk0_3 = 1; + PLAYER_APPRENTICE.field_B8[PLAYER_APPRENTICE.field_B1_1 - 3].unk2 = gSpecialVar_0x8005; gSpecialVar_Result = 1; } #else @@ -1280,10 +1282,10 @@ void sub_81A1438(void) { u8 i; - gSaveBlock2Ptr->apprentices[0].id = gSaveBlock2Ptr->field_B0; - gSaveBlock2Ptr->apprentices[0].lvlMode = gSaveBlock2Ptr->field_B1_0; + gSaveBlock2Ptr->apprentices[0].id = PLAYER_APPRENTICE.id; + gSaveBlock2Ptr->apprentices[0].lvlMode = PLAYER_APPRENTICE.activeLvlMode; - for (i = 0; i < 9 && gSaveBlock2Ptr->field_B8[i].unk0_0; i++) + for (i = 0; i < 9 && PLAYER_APPRENTICE.field_B8[i].unk0_0; i++) ; gSaveBlock2Ptr->apprentices[0].field_1 = i; @@ -1330,7 +1332,7 @@ void sub_81A15A4(void) { u8 i; u8 mapObjectGfxId; - u8 class = gApprentices[gSaveBlock2Ptr->field_B0].facilityClass; + u8 class = gApprentices[PLAYER_APPRENTICE.id].facilityClass; for (i = 0; i < 30 && gUnknown_085DCEDC[i] != class; i++) ; -- cgit v1.2.3 From f47ed3268c76b43db4bce0a60f355b18d0edc875 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 14 Oct 2018 17:00:41 +0200 Subject: Finish documenting apprentice for now --- src/apprentice.c | 557 ++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 450 insertions(+), 107 deletions(-) (limited to 'src/apprentice.c') diff --git a/src/apprentice.c b/src/apprentice.c index 6e341a27d..f2a8aa9c0 100644 --- a/src/apprentice.c +++ b/src/apprentice.c @@ -25,6 +25,7 @@ #include "constants/items.h" #include "constants/songs.h" #include "constants/species.h" +#include "constants/moves.h" #define PLAYER_APPRENTICE gSaveBlock2Ptr->playerApprentice @@ -350,32 +351,40 @@ extern const u8 gUnknown_085DCF0E[]; extern const u8 gUnknown_085DCEFA[]; extern const u8 gUnknown_085DCF2C[]; -void sub_81A093C(void); -void sub_81A0964(void); -void sub_81A0978(void); -void sub_819FC60(void); -void sub_81A0984(void); -void sub_81A0990(void); -void sub_81A09D0(void); -void sub_81A0A20(void); -void sub_81A0C9C(void); -void sub_81A087C(void); -void sub_81A1638(void); -void sub_81A0CC0(void); -void sub_81A09B4(void); -void sub_81A0D40(void); -void sub_81A0DD4(void); -void sub_81A0FE4(void); -void sub_81A0FFC(void); -void sub_81A0D80(void); -void sub_81A11F8(void); -void sub_81A1218(void); -void sub_81A1224(void); -void sub_81A1438(void); -void sub_81A150C(void); -void sub_81A15A4(void); -void sub_81A1644(void); -void sub_81A1370(void); +// This file's functions. +static u16 sub_819FF98(u8 arg0); +static bool8 sub_81A0194(u8 arg0, u16 moveId); +static void CreateChooseAnswerTask(bool8 noBButton, u8 itemsCount, u8 windowId); +static u8 CreateAndShowWindow(u8 left, u8 top, u8 width, u8 height); +static void RemoveAndHideWindow(u8 windowId); +static void ExecuteFuncAfterButtonPress(void (*func)(void)); + +static void Script_IsPlayersApprenticeActive(void); +static void Script_SetPlayersApprenticeLvlMode(void); +static void sub_81A0978(void); +static void sub_819FC60(void); +static void sub_81A0984(void); +static void sub_81A0990(void); +static void sub_81A09D0(void); +static void Script_CreateApprenticeMenu(void); +static void Script_PrintMessage(void); +static void Script_ResetPlayerApprentice(void); +static void sub_81A1638(void); +static void sub_81A0CC0(void); +static void sub_81A09B4(void); +static void sub_81A0D40(void); +static void sub_81A0DD4(void); +static void sub_81A0FE4(void); +static void sub_81A0FFC(void); +static void sub_81A0D80(void); +static void sub_81A11F8(void); +static void sub_81A1218(void); +static void sub_81A1224(void); +static void sub_81A1438(void); +static void sub_81A150C(void); +static void sub_81A15A4(void); +static void sub_81A1644(void); +static void sub_81A1370(void); // rodata @@ -428,7 +437,7 @@ const struct ApprenticeTrainer gApprentices[] = .otId = 0xF555, .facilityClass = 0x31, .species = {SPECIES_STARMIE, SPECIES_DODRIO, SPECIES_MAGNETON, SPECIES_MEDICHAM, SPECIES_MIGHTYENA, SPECIES_GLALIE, SPECIES_GOLEM, SPECIES_ELECTRODE, SPECIES_PELIPPER, SPECIES_SHARPEDO}, - .rest = {6, 0, 0x0B, 0x0C, 0x3E, 0x12, 0x00, 0x0C, 0x31, 0x0A, 0x30, 0x14, 0x00, 0x0C}, + .rest = {6, 0, 0x0B, 0x0C, 0x3E, 0x12, 0x00, 0x0C, 0x31, 0x0A, 0x30, 0x14, 0x00, 0x0C}, }, { .name = {_("カズサ"), _("KALI"), _("JODIE"), _("ILENIA"), _("KARO"), _("ELSA")}, @@ -495,7 +504,7 @@ const struct ApprenticeTrainer gApprentices[] = }, }; -const u8 *const gUnknown_08610EF0[][4] = +static const u8 *const gUnknown_08610EF0[][4] = { {gText_082B7229, gText_082B731C, gText_082B735B, gText_082B7423}, {gText_082B74C1, gText_082B756F, gText_082B75B2, gText_082B763F}, @@ -515,7 +524,7 @@ const u8 *const gUnknown_08610EF0[][4] = {gText_082B9F55, gText_082BA084, gText_082BA11D, gText_082BA1F3}, }; -const u8 *const gUnknown_08610FF0[][2] = +static const u8 *const gUnknown_08610FF0[][2] = { {gText_082BE50D, gText_082BE5F5}, {gText_082BE679, gText_082BE71E}, @@ -535,7 +544,7 @@ const u8 *const gUnknown_08610FF0[][2] = {gText_082BFA5A, gText_082BFB4E}, }; -const u8 *const gUnknown_08611070[][5] = +static const u8 *const gUnknown_08611070[][5] = { {gText_082BA2A3, gText_082BA34E, gText_082BA380, gText_082BA3D2, gText_082BA448}, {gText_082BA4D3, gText_082BA58C, gText_082BA5BF, gText_082BA5F3, gText_082BA635}, @@ -555,7 +564,7 @@ const u8 *const gUnknown_08611070[][5] = {gText_082BCA4D, gText_082BCB75, gText_082BCBA6, gText_082BCBFC, gText_082BCCA4}, }; -const u8 *const gUnknown_086111B0[][2] = +static const u8 *const gUnknown_086111B0[][2] = { {gText_082BFBF2, gText_082BFCAE}, {gText_082BFD26, gText_082BFDB1}, @@ -575,7 +584,7 @@ const u8 *const gUnknown_086111B0[][2] = {gText_082C1003, gText_082C1122}, }; -const u8 *const gUnknown_08611230[][2] = +static const u8 *const gUnknown_08611230[][2] = { {gText_082BCD68, gText_082BCE64}, {gText_082BCEF2, gText_082BCF61}, @@ -595,7 +604,7 @@ const u8 *const gUnknown_08611230[][2] = {gText_082BE33E, gText_082BE46C}, }; -const u8 *const gUnknown_086112B0[][2] = +static const u8 *const gUnknown_086112B0[][2] = { {gText_082C11D1, gText_082C12D5}, {gText_082C13AB, gText_082C1444}, @@ -615,7 +624,7 @@ const u8 *const gUnknown_086112B0[][2] = {gText_082C2EF5, gText_082C3023}, }; -const u8 *const gUnknown_08611330[] = +static const u8 *const gUnknown_08611330[] = { gText_082B6EA5, gText_082B6EEC, @@ -635,36 +644,379 @@ const u8 *const gUnknown_08611330[] = gText_082B71F9, }; -const bool8 gUnknown_08611370[] = -{ - 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, - 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, - 0x01, 0x01, 0x01, +static const bool8 gUnknown_08611370[MOVES_COUNT] = +{ + [MOVE_NONE] = FALSE, + [MOVE_POUND] = FALSE, + [MOVE_KARATE_CHOP] = TRUE, + [MOVE_DOUBLE_SLAP] = TRUE, + [MOVE_COMET_PUNCH] = FALSE, + [MOVE_MEGA_PUNCH] = TRUE, + [MOVE_PAY_DAY] = FALSE, + [MOVE_FIRE_PUNCH] = TRUE, + [MOVE_ICE_PUNCH] = TRUE, + [MOVE_THUNDER_PUNCH] = TRUE, + [MOVE_SCRATCH] = FALSE, + [MOVE_VICE_GRIP] = FALSE, + [MOVE_GUILLOTINE] = TRUE, + [MOVE_RAZOR_WIND] = FALSE, + [MOVE_SWORDS_DANCE] = TRUE, + [MOVE_CUT] = FALSE, + [MOVE_GUST] = FALSE, + [MOVE_WING_ATTACK] = FALSE, + [MOVE_WHIRLWIND] = TRUE, + [MOVE_FLY] = TRUE, + [MOVE_BIND] = TRUE, + [MOVE_SLAM] = TRUE, + [MOVE_VINE_WHIP] = FALSE, + [MOVE_STOMP] = TRUE, + [MOVE_DOUBLE_KICK] = TRUE, + [MOVE_MEGA_KICK] = TRUE, + [MOVE_JUMP_KICK] = TRUE, + [MOVE_ROLLING_KICK] = TRUE, + [MOVE_SAND_ATTACK] = TRUE, + [MOVE_HEADBUTT] = TRUE, + [MOVE_HORN_ATTACK] = FALSE, + [MOVE_FURY_ATTACK] = FALSE, + [MOVE_HORN_DRILL] = TRUE, + [MOVE_TACKLE] = FALSE, + [MOVE_BODY_SLAM] = TRUE, + [MOVE_WRAP] = TRUE, + [MOVE_TAKE_DOWN] = TRUE, + [MOVE_THRASH] = TRUE, + [MOVE_DOUBLE_EDGE] = TRUE, + [MOVE_TAIL_WHIP] = FALSE, + [MOVE_POISON_STING] = FALSE, + [MOVE_TWINEEDLE] = TRUE, + [MOVE_PIN_MISSILE] = FALSE, + [MOVE_LEER] = FALSE, + [MOVE_BITE] = TRUE, + [MOVE_GROWL] = FALSE, + [MOVE_ROAR] = TRUE, + [MOVE_SING] = TRUE, + [MOVE_SUPERSONIC] = TRUE, + [MOVE_SONIC_BOOM] = TRUE, + [MOVE_DISABLE] = TRUE, + [MOVE_ACID] = FALSE, + [MOVE_EMBER] = FALSE, + [MOVE_FLAMETHROWER] = TRUE, + [MOVE_MIST] = TRUE, + [MOVE_WATER_GUN] = FALSE, + [MOVE_HYDRO_PUMP] = TRUE, + [MOVE_SURF] = TRUE, + [MOVE_ICE_BEAM] = TRUE, + [MOVE_BLIZZARD] = TRUE, + [MOVE_PSYBEAM] = TRUE, + [MOVE_BUBBLE_BEAM] = FALSE, + [MOVE_AURORA_BEAM] = FALSE, + [MOVE_HYPER_BEAM] = TRUE, + [MOVE_PECK] = FALSE, + [MOVE_DRILL_PECK] = TRUE, + [MOVE_SUBMISSION] = TRUE, + [MOVE_LOW_KICK] = TRUE, + [MOVE_COUNTER] = TRUE, + [MOVE_SEISMIC_TOSS] = TRUE, + [MOVE_STRENGTH] = TRUE, + [MOVE_ABSORB] = FALSE, + [MOVE_MEGA_DRAIN] = FALSE, + [MOVE_LEECH_SEED] = TRUE, + [MOVE_GROWTH] = TRUE, + [MOVE_RAZOR_LEAF] = TRUE, + [MOVE_SOLAR_BEAM] = TRUE, + [MOVE_POISON_POWDER] = TRUE, + [MOVE_STUN_SPORE] = TRUE, + [MOVE_SLEEP_POWDER] = TRUE, + [MOVE_PETAL_DANCE] = TRUE, + [MOVE_STRING_SHOT] = FALSE, + [MOVE_DRAGON_RAGE] = TRUE, + [MOVE_FIRE_SPIN] = TRUE, + [MOVE_THUNDER_SHOCK] = FALSE, + [MOVE_THUNDERBOLT] = TRUE, + [MOVE_THUNDER_WAVE] = TRUE, + [MOVE_THUNDER] = TRUE, + [MOVE_ROCK_THROW] = FALSE, + [MOVE_EARTHQUAKE] = TRUE, + [MOVE_FISSURE] = TRUE, + [MOVE_DIG] = TRUE, + [MOVE_TOXIC] = TRUE, + [MOVE_CONFUSION] = FALSE, + [MOVE_PSYCHIC] = TRUE, + [MOVE_HYPNOSIS] = TRUE, + [MOVE_MEDITATE] = TRUE, + [MOVE_AGILITY] = TRUE, + [MOVE_QUICK_ATTACK] = TRUE, + [MOVE_RAGE] = FALSE, + [MOVE_TELEPORT] = FALSE, + [MOVE_NIGHT_SHADE] = TRUE, + [MOVE_MIMIC] = TRUE, + [MOVE_SCREECH] = TRUE, + [MOVE_DOUBLE_TEAM] = TRUE, + [MOVE_RECOVER] = TRUE, + [MOVE_HARDEN] = TRUE, + [MOVE_MINIMIZE] = TRUE, + [MOVE_SMOKESCREEN] = TRUE, + [MOVE_CONFUSE_RAY] = TRUE, + [MOVE_WITHDRAW] = TRUE, + [MOVE_DEFENSE_CURL] = TRUE, + [MOVE_BARRIER] = TRUE, + [MOVE_LIGHT_SCREEN] = TRUE, + [MOVE_HAZE] = TRUE, + [MOVE_REFLECT] = TRUE, + [MOVE_FOCUS_ENERGY] = TRUE, + [MOVE_BIDE] = FALSE, + [MOVE_METRONOME] = TRUE, + [MOVE_MIRROR_MOVE] = TRUE, + [MOVE_SELF_DESTRUCT] = TRUE, + [MOVE_EGG_BOMB] = TRUE, + [MOVE_LICK] = TRUE, + [MOVE_SMOG] = FALSE, + [MOVE_SLUDGE] = FALSE, + [MOVE_BONE_CLUB] = FALSE, + [MOVE_FIRE_BLAST] = TRUE, + [MOVE_WATERFALL] = TRUE, + [MOVE_CLAMP] = TRUE, + [MOVE_SWIFT] = TRUE, + [MOVE_SKULL_BASH] = TRUE, + [MOVE_SPIKE_CANNON] = FALSE, + [MOVE_CONSTRICT] = FALSE, + [MOVE_AMNESIA] = TRUE, + [MOVE_KINESIS] = TRUE, + [MOVE_SOFT_BOILED] = TRUE, + [MOVE_HI_JUMP_KICK] = TRUE, + [MOVE_GLARE] = TRUE, + [MOVE_DREAM_EATER] = TRUE, + [MOVE_POISON_GAS] = FALSE, + [MOVE_BARRAGE] = FALSE, + [MOVE_LEECH_LIFE] = FALSE, + [MOVE_LOVELY_KISS] = TRUE, + [MOVE_SKY_ATTACK] = TRUE, + [MOVE_TRANSFORM] = TRUE, + [MOVE_BUBBLE] = FALSE, + [MOVE_DIZZY_PUNCH] = TRUE, + [MOVE_SPORE] = TRUE, + [MOVE_FLASH] = TRUE, + [MOVE_PSYWAVE] = TRUE, + [MOVE_SPLASH] = FALSE, + [MOVE_ACID_ARMOR] = TRUE, + [MOVE_CRABHAMMER] = TRUE, + [MOVE_EXPLOSION] = TRUE, + [MOVE_FURY_SWIPES] = FALSE, + [MOVE_BONEMERANG] = TRUE, + [MOVE_REST] = TRUE, + [MOVE_ROCK_SLIDE] = TRUE, + [MOVE_HYPER_FANG] = TRUE, + [MOVE_SHARPEN] = TRUE, + [MOVE_CONVERSION] = TRUE, + [MOVE_TRI_ATTACK] = TRUE, + [MOVE_SUPER_FANG] = TRUE, + [MOVE_SLASH] = TRUE, + [MOVE_SUBSTITUTE] = TRUE, + [MOVE_STRUGGLE] = TRUE, + [MOVE_SKETCH] = TRUE, + [MOVE_TRIPLE_KICK] = TRUE, + [MOVE_THIEF] = TRUE, + [MOVE_SPIDER_WEB] = TRUE, + [MOVE_MIND_READER] = TRUE, + [MOVE_NIGHTMARE] = TRUE, + [MOVE_FLAME_WHEEL] = FALSE, + [MOVE_SNORE] = TRUE, + [MOVE_CURSE] = TRUE, + [MOVE_FLAIL] = TRUE, + [MOVE_CONVERSION_2] = TRUE, + [MOVE_AEROBLAST] = TRUE, + [MOVE_COTTON_SPORE] = TRUE, + [MOVE_REVERSAL] = TRUE, + [MOVE_SPITE] = TRUE, + [MOVE_POWDER_SNOW] = FALSE, + [MOVE_PROTECT] = TRUE, + [MOVE_MACH_PUNCH] = TRUE, + [MOVE_SCARY_FACE] = TRUE, + [MOVE_FAINT_ATTACK] = TRUE, + [MOVE_SWEET_KISS] = TRUE, + [MOVE_BELLY_DRUM] = TRUE, + [MOVE_SLUDGE_BOMB] = TRUE, + [MOVE_MUD_SLAP] = TRUE, + [MOVE_OCTAZOOKA] = TRUE, + [MOVE_SPIKES] = TRUE, + [MOVE_ZAP_CANNON] = TRUE, + [MOVE_FORESIGHT] = TRUE, + [MOVE_DESTINY_BOND] = TRUE, + [MOVE_PERISH_SONG] = TRUE, + [MOVE_ICY_WIND] = TRUE, + [MOVE_DETECT] = TRUE, + [MOVE_BONE_RUSH] = FALSE, + [MOVE_LOCK_ON] = TRUE, + [MOVE_OUTRAGE] = TRUE, + [MOVE_SANDSTORM] = TRUE, + [MOVE_GIGA_DRAIN] = TRUE, + [MOVE_ENDURE] = TRUE, + [MOVE_CHARM] = TRUE, + [MOVE_ROLLOUT] = TRUE, + [MOVE_FALSE_SWIPE] = TRUE, + [MOVE_SWAGGER] = TRUE, + [MOVE_MILK_DRINK] = TRUE, + [MOVE_SPARK] = FALSE, + [MOVE_FURY_CUTTER] = TRUE, + [MOVE_STEEL_WING] = TRUE, + [MOVE_MEAN_LOOK] = TRUE, + [MOVE_ATTRACT] = TRUE, + [MOVE_SLEEP_TALK] = TRUE, + [MOVE_HEAL_BELL] = TRUE, + [MOVE_RETURN] = TRUE, + [MOVE_PRESENT] = TRUE, + [MOVE_FRUSTRATION] = TRUE, + [MOVE_SAFEGUARD] = TRUE, + [MOVE_PAIN_SPLIT] = TRUE, + [MOVE_SACRED_FIRE] = TRUE, + [MOVE_MAGNITUDE] = FALSE, + [MOVE_DYNAMIC_PUNCH] = TRUE, + [MOVE_MEGAHORN] = TRUE, + [MOVE_DRAGON_BREATH] = TRUE, + [MOVE_BATON_PASS] = TRUE, + [MOVE_ENCORE] = TRUE, + [MOVE_PURSUIT] = TRUE, + [MOVE_RAPID_SPIN] = TRUE, + [MOVE_SWEET_SCENT] = TRUE, + [MOVE_IRON_TAIL] = TRUE, + [MOVE_METAL_CLAW] = TRUE, + [MOVE_VITAL_THROW] = TRUE, + [MOVE_MORNING_SUN] = TRUE, + [MOVE_SYNTHESIS] = TRUE, + [MOVE_MOONLIGHT] = TRUE, + [MOVE_HIDDEN_POWER] = TRUE, + [MOVE_CROSS_CHOP] = TRUE, + [MOVE_TWISTER] = FALSE, + [MOVE_RAIN_DANCE] = TRUE, + [MOVE_SUNNY_DAY] = TRUE, + [MOVE_CRUNCH] = TRUE, + [MOVE_MIRROR_COAT] = TRUE, + [MOVE_PSYCH_UP] = TRUE, + [MOVE_EXTREME_SPEED] = TRUE, + [MOVE_ANCIENT_POWER] = TRUE, + [MOVE_SHADOW_BALL] = TRUE, + [MOVE_FUTURE_SIGHT] = TRUE, + [MOVE_ROCK_SMASH] = TRUE, + [MOVE_WHIRLPOOL] = TRUE, + [MOVE_BEAT_UP] = TRUE, + [MOVE_FAKE_OUT] = TRUE, + [MOVE_UPROAR] = TRUE, + [MOVE_STOCKPILE] = TRUE, + [MOVE_SPIT_UP] = TRUE, + [MOVE_SWALLOW] = TRUE, + [MOVE_HEAT_WAVE] = TRUE, + [MOVE_HAIL] = TRUE, + [MOVE_TORMENT] = TRUE, + [MOVE_FLATTER] = TRUE, + [MOVE_WILL_O_WISP] = TRUE, + [MOVE_MEMENTO] = TRUE, + [MOVE_FACADE] = TRUE, + [MOVE_FOCUS_PUNCH] = TRUE, + [MOVE_SMELLING_SALT] = TRUE, + [MOVE_FOLLOW_ME] = TRUE, + [MOVE_NATURE_POWER] = TRUE, + [MOVE_CHARGE] = TRUE, + [MOVE_TAUNT] = TRUE, + [MOVE_HELPING_HAND] = TRUE, + [MOVE_TRICK] = TRUE, + [MOVE_ROLE_PLAY] = TRUE, + [MOVE_WISH] = TRUE, + [MOVE_ASSIST] = TRUE, + [MOVE_INGRAIN] = TRUE, + [MOVE_SUPERPOWER] = TRUE, + [MOVE_MAGIC_COAT] = TRUE, + [MOVE_RECYCLE] = TRUE, + [MOVE_REVENGE] = TRUE, + [MOVE_BRICK_BREAK] = TRUE, + [MOVE_YAWN] = TRUE, + [MOVE_KNOCK_OFF] = TRUE, + [MOVE_ENDEAVOR] = TRUE, + [MOVE_ERUPTION] = TRUE, + [MOVE_SKILL_SWAP] = TRUE, + [MOVE_IMPRISON] = TRUE, + [MOVE_REFRESH] = TRUE, + [MOVE_GRUDGE] = TRUE, + [MOVE_SNATCH] = TRUE, + [MOVE_SECRET_POWER] = TRUE, + [MOVE_DIVE] = TRUE, + [MOVE_ARM_THRUST] = FALSE, + [MOVE_CAMOUFLAGE] = TRUE, + [MOVE_TAIL_GLOW] = TRUE, + [MOVE_LUSTER_PURGE] = TRUE, + [MOVE_MIST_BALL] = TRUE, + [MOVE_FEATHER_DANCE] = TRUE, + [MOVE_TEETER_DANCE] = TRUE, + [MOVE_BLAZE_KICK] = TRUE, + [MOVE_MUD_SPORT] = TRUE, + [MOVE_ICE_BALL] = FALSE, + [MOVE_NEEDLE_ARM] = TRUE, + [MOVE_SLACK_OFF] = TRUE, + [MOVE_HYPER_VOICE] = TRUE, + [MOVE_POISON_FANG] = FALSE, + [MOVE_CRUSH_CLAW] = TRUE, + [MOVE_BLAST_BURN] = TRUE, + [MOVE_HYDRO_CANNON] = TRUE, + [MOVE_METEOR_MASH] = TRUE, + [MOVE_ASTONISH] = TRUE, + [MOVE_WEATHER_BALL] = TRUE, + [MOVE_AROMATHERAPY] = TRUE, + [MOVE_FAKE_TEARS] = TRUE, + [MOVE_AIR_CUTTER] = TRUE, + [MOVE_OVERHEAT] = TRUE, + [MOVE_ODOR_SLEUTH] = TRUE, + [MOVE_ROCK_TOMB] = TRUE, + [MOVE_SILVER_WIND] = TRUE, + [MOVE_METAL_SOUND] = TRUE, + [MOVE_GRASS_WHISTLE] = TRUE, + [MOVE_TICKLE] = TRUE, + [MOVE_COSMIC_POWER] = TRUE, + [MOVE_WATER_SPOUT] = TRUE, + [MOVE_SIGNAL_BEAM] = TRUE, + [MOVE_SHADOW_PUNCH] = TRUE, + [MOVE_EXTRASENSORY] = TRUE, + [MOVE_SKY_UPPERCUT] = TRUE, + [MOVE_SAND_TOMB] = TRUE, + [MOVE_SHEER_COLD] = TRUE, + [MOVE_MUDDY_WATER] = TRUE, + [MOVE_BULLET_SEED] = FALSE, + [MOVE_AERIAL_ACE] = TRUE, + [MOVE_ICICLE_SPEAR] = FALSE, + [MOVE_IRON_DEFENSE] = TRUE, + [MOVE_BLOCK] = TRUE, + [MOVE_HOWL] = TRUE, + [MOVE_DRAGON_CLAW] = TRUE, + [MOVE_FRENZY_PLANT] = TRUE, + [MOVE_BULK_UP] = TRUE, + [MOVE_BOUNCE] = TRUE, + [MOVE_MUD_SHOT] = FALSE, + [MOVE_POISON_TAIL] = TRUE, + [MOVE_COVET] = TRUE, + [MOVE_VOLT_TACKLE] = TRUE, + [MOVE_MAGICAL_LEAF] = TRUE, + [MOVE_WATER_SPORT] = TRUE, + [MOVE_CALM_MIND] = TRUE, + [MOVE_LEAF_BLADE] = TRUE, + [MOVE_DRAGON_DANCE] = TRUE, + [MOVE_ROCK_BLAST] = FALSE, + [MOVE_SHOCK_WAVE] = TRUE, + [MOVE_WATER_PULSE] = TRUE, + [MOVE_DOOM_DESIRE] = TRUE, + [MOVE_PSYCHO_BOOST] = TRUE, }; -const u8 gUnknown_086114D3[] = {0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00}; +static const u8 gUnknown_086114D3[] = {0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00}; -void (* const gUnknown_086114E0[])(void) = +static void (* const sApprenticeFunctions[])(void) = { - sub_81A093C, - sub_81A0964, + Script_IsPlayersApprenticeActive, + Script_SetPlayersApprenticeLvlMode, sub_81A0978, sub_819FC60, sub_81A0984, sub_81A0990, sub_81A09D0, - sub_81A0A20, - sub_81A0C9C, - sub_81A087C, + Script_CreateApprenticeMenu, + Script_PrintMessage, + Script_ResetPlayerApprentice, sub_81A1638, sub_81A0CC0, sub_81A09B4, @@ -683,7 +1035,7 @@ void (* const gUnknown_086114E0[])(void) = sub_81A1370, }; -const u8 gUnknown_08611548[8] = {0x00, 0x01, 0x02, 0x03, 0x06, 0x07, 0x08, 0x09}; +static const u8 gUnknown_08611548[8] = {0x00, 0x01, 0x02, 0x03, 0x06, 0x07, 0x08, 0x09}; // text extern const u8 gText_Give[]; @@ -691,15 +1043,6 @@ extern const u8 gText_NoNeed[]; extern const u8 gText_Yes[]; extern const u8 gText_No[]; -// This file's functions. -void sub_81A087C(void); -static u16 sub_819FF98(u8 arg0); -static bool8 sub_81A0194(u8 arg0, u16 moveId); -static void CreateChooseAnswerTask(bool8 noBButton, u8 itemsCount, u8 windowId); -static u8 CreateAndShowWindow(u8 left, u8 top, u8 width, u8 height); -static void RemoveAndHideWindow(u8 windowId); -static void ExecuteFuncAfterButtonPress(void (*func)(void)); - void CopyFriendsApprenticeChallengeText(u8 saveblockApprenticeId) { u8 i, var; @@ -716,12 +1059,12 @@ void CopyFriendsApprenticeChallengeText(u8 saveblockApprenticeId) StringExpandPlaceholders(gStringVar4, str); } -void sub_819FA50(void) +void Apprentice_EnableBothScriptContexts(void) { EnableBothScriptContexts(); } -void sub_819FA5C(struct Apprentice *apprentice) +void ResetApprenticeStruct(struct Apprentice *apprentice) { u8 i; @@ -732,7 +1075,7 @@ void sub_819FA5C(struct Apprentice *apprentice) apprentice->id = 16; } -void sub_819FAA0(void) +void ResetAllApprenticeData(void) { u8 i, j; @@ -752,7 +1095,7 @@ void sub_819FAA0(void) gSaveBlock2Ptr->apprentices[i].unk40 = 0; } - sub_81A087C(); + Script_ResetPlayerApprentice(); } static bool8 IsPlayersApprenticeActive(void) @@ -760,7 +1103,7 @@ static bool8 IsPlayersApprenticeActive(void) return (PLAYER_APPRENTICE.activeLvlMode != 0); } -void sub_819FBC8(void) +static void sub_819FBC8(void) { if (gSaveBlock2Ptr->apprentices[0].number == 0) { @@ -783,7 +1126,7 @@ static void SetPlayersApprenticeLvlMode(u8 mode) PLAYER_APPRENTICE.activeLvlMode = mode; } -void sub_819FC60(void) +static void sub_819FC60(void) { u8 array[APPRENTICE_SPECIES_COUNT]; u8 i; @@ -803,7 +1146,7 @@ void sub_819FC60(void) PLAYER_APPRENTICE.monIds[i] = ((array[i * 2] & 0xF) << 4) | ((array[i * 2 + 1]) & 0xF); } -u8 sub_819FCF8(u8 val, u8 *arg1, u8 *arg2) +static u8 sub_819FCF8(u8 val, u8 *arg1, u8 *arg2) { u8 i, count; u8 ret = 0; @@ -829,7 +1172,7 @@ u8 sub_819FCF8(u8 val, u8 *arg1, u8 *arg2) return ret; } -void sub_819FD64(void) +static void sub_819FD64(void) { u8 sp_0[10]; u8 sp_C[3]; @@ -1028,7 +1371,7 @@ static bool8 sub_81A0194(u8 arg0, u16 moveId) return TRUE; } -void GetLatestLearnedMoves(u16 species, u16 *moves) +static void GetLatestLearnedMoves(u16 species, u16 *moves) { u8 i, j; u8 level, knownMovesCount; @@ -1054,7 +1397,7 @@ void GetLatestLearnedMoves(u16 species, u16 *moves) moves[j] = learnset[(i - 1) - j] & 0x1FF; } -u16 sub_81A0284(u8 arg0, u8 speciesTableId, u8 arg2) +static u16 sub_81A0284(u8 arg0, u8 speciesTableId, u8 arg2) { u16 moves[4]; u8 i, count; @@ -1084,7 +1427,7 @@ u16 sub_81A0284(u8 arg0, u8 speciesTableId, u8 arg2) return moves[arg2]; } -void sub_81A0390(u8 arg0) +static void sub_81A0390(u8 arg0) { struct ApprenticeMon *apprenticeMons[3]; u8 i, j; @@ -1221,7 +1564,7 @@ static void CreateMenuWithAnswers(u8 arg0) #define tWrapAround data[5] #define tWindowId data[6] -void Task_ChooseAnswer(u8 taskId) +static void Task_ChooseAnswer(u8 taskId) { s8 input; s16 *data = gTasks[taskId].data; @@ -1286,12 +1629,12 @@ static void CreateChooseAnswerTask(bool8 noBButton, u8 itemsCount, u8 windowId) #undef tWrapAround #undef tWindowId -void sub_81A085C(void) +void CallApprenticeFunction(void) { - gUnknown_086114E0[gSpecialVar_0x8004](); + sApprenticeFunctions[gSpecialVar_0x8004](); } -void sub_81A087C(void) +static void Script_ResetPlayerApprentice(void) { u8 i; @@ -1314,7 +1657,7 @@ void sub_81A087C(void) } } -void sub_81A093C(void) +static void Script_IsPlayersApprenticeActive(void) { if (!IsPlayersApprenticeActive()) gSpecialVar_Result = FALSE; @@ -1322,32 +1665,32 @@ void sub_81A093C(void) gSpecialVar_Result = TRUE; } -void sub_81A0964(void) +static void Script_SetPlayersApprenticeLvlMode(void) { SetPlayersApprenticeLvlMode(gSpecialVar_0x8005); } -void sub_81A0978(void) +static void sub_81A0978(void) { sub_819FBC8(); } -void sub_81A0984(void) +static void sub_81A0984(void) { sub_819FD64(); } -void sub_81A0990(void) +static void sub_81A0990(void) { PLAYER_APPRENTICE.field_B1_1++; } -void sub_81A09B4(void) +static void sub_81A09B4(void) { gSpecialVar_Result = PLAYER_APPRENTICE.field_B1_1; } -void sub_81A09D0(void) +static void sub_81A09D0(void) { s32 var = PLAYER_APPRENTICE.field_B1_1 - 3; if (var < 0) @@ -1366,7 +1709,7 @@ void sub_81A09D0(void) } } -void sub_81A0A20(void) +static void Script_CreateApprenticeMenu(void) { CreateMenuWithAnswers(gSpecialVar_0x8005); } @@ -1466,7 +1809,7 @@ static void PrintMessage(void) CreateTask(Task_WaitForPrintingMessage, 1); } -void sub_81A0C9C(void) +static void Script_PrintMessage(void) { ScriptContext2_Enable(); FreezeEventObjects(); @@ -1476,7 +1819,7 @@ void sub_81A0C9C(void) PrintMessage(); } -void sub_81A0CC0(void) +static void sub_81A0CC0(void) { if (PLAYER_APPRENTICE.field_B1_1 < 3) { @@ -1507,7 +1850,7 @@ void sub_81A0CC0(void) } } -void sub_81A0D40(void) +static void sub_81A0D40(void) { if (gSpecialVar_0x8005) { @@ -1516,7 +1859,7 @@ void sub_81A0D40(void) } } -void sub_81A0D80(void) +static void sub_81A0D80(void) { if (PLAYER_APPRENTICE.field_B1_1 >= 3) { @@ -1528,7 +1871,7 @@ void sub_81A0D80(void) } } -void sub_81A0DD4(void) +static void sub_81A0DD4(void) { u8 i; u8 count = 0; @@ -1575,12 +1918,12 @@ void sub_81A0DD4(void) } } -void sub_81A0FE4(void) +static void sub_81A0FE4(void) { FREE_AND_SET_NULL(gUnknown_030062F0); } -void sub_81A0FFC(void) +static void sub_81A0FFC(void) { u8 *stringDst; u8 text[16]; @@ -1649,18 +1992,18 @@ void sub_81A0FFC(void) } } -void sub_81A11F8(void) +static void sub_81A11F8(void) { PLAYER_APPRENTICE.field_B1_2 = gSpecialVar_0x8005; } -void sub_81A1218(void) +static void sub_81A1218(void) { sub_81AAC28(); } #ifdef NONMATCHING -void sub_81A1224(void) +static void sub_81A1224(void) { u8 count; u8 i, j; @@ -1691,7 +2034,7 @@ void sub_81A1224(void) } #else NAKED -void sub_81A1224(void) +static void sub_81A1224(void) { asm_unified("\n\ push {r4-r7,lr}\n\ @@ -1864,7 +2207,7 @@ _081A1362:\n\ } #endif // NONMATCHING -void sub_81A1370(void) +static void sub_81A1370(void) { s32 i; s32 r10; @@ -1898,7 +2241,7 @@ void sub_81A1370(void) gSaveBlock2Ptr->apprentices[r9] = gSaveBlock2Ptr->apprentices[0]; } -void sub_81A1438(void) +static void sub_81A1438(void) { u8 i; @@ -1921,7 +2264,7 @@ void sub_81A1438(void) sub_8165AE8(&gSaveBlock2Ptr->apprentices[0]); } -void sub_81A150C(void) +static void sub_81A150C(void) { u8 i; u8 mapObjectGfxId; @@ -1948,7 +2291,7 @@ void sub_81A150C(void) } } -void sub_81A15A4(void) +static void sub_81A15A4(void) { u8 i; u8 mapObjectGfxId; @@ -1975,12 +2318,12 @@ void sub_81A15A4(void) } } -void sub_81A1638(void) +static void sub_81A1638(void) { gSpecialVar_0x8004 = 1; } -void sub_81A1644(void) +static void sub_81A1644(void) { gSpecialVar_0x8004 = 1; } @@ -2007,7 +2350,7 @@ const u8 *GetApprenticeNameInLanguage(u32 apprenticeId, s32 language) } } -void sub_81A16B4(u8 taskId) +static void sub_81A16B4(u8 taskId) { if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) SwitchTaskToFollowupFunc(taskId); @@ -2030,7 +2373,7 @@ static void ExecuteFuncAfterButtonPress(void (*func)(void)) gTasks[taskId].data[1] = (u32)(func) >> 16; } -void sub_81A175C(TaskFunc taskFunc) +static void sub_81A175C(TaskFunc taskFunc) { u8 taskId = CreateTask(sub_81A16B4, 1); SetTaskFuncWithFollowupFunc(taskId, sub_81A16B4, taskFunc); -- cgit v1.2.3