#include "global.h" #include "constants/species.h" #include "malloc.h" #include "main.h" #include "task.h" #include "palette.h" #include "menu.h" #include "window.h" #include "text_window.h" #include "event_data.h" #include "string_util.h" #include "script.h" #include "overworld.h" #include "field_fadetransition.h" #include "item.h" #include "wild_encounter.h" #include "help_system.h" #include "unk_8159F40.h" #include "pokemon_storage_system.h" #include "quest_log.h" u8 gUnknown_3005E88; struct UnkStruct_203AE94 { u8 unk_0_0:4; u8 unk_0_4:2; u8 unk_0_6:2; u8 unk_1; }; struct UnkStruct_203AE98 { u8 filler_0[6]; u8 unk_6; }; EWRAM_DATA u8 gUnknown_203ADF8 = 0; EWRAM_DATA u8 gUnknown_203ADF9 = 0; EWRAM_DATA u8 gUnknown_203ADFA = 0; EWRAM_DATA u16 gUnknown_203ADFC = 0; EWRAM_DATA u8 gUnknown_203ADFE[3]; EWRAM_DATA void * gUnknown_203AE04 = NULL; EWRAM_DATA u16 * gUnknown_203AE08 = NULL; EWRAM_DATA void * gUnknown_203AE0C[32] = {NULL}; EWRAM_DATA void (* gUnknown_203AE8C)(void) = 0; EWRAM_DATA struct UnkStruct_203AE94 gUnknown_203AE94 = {0}; EWRAM_DATA struct UnkStruct_203AE98 gUnknown_203AE98[32] = {0}; EWRAM_DATA u16 gUnknown_203AF98 = 0; void sub_8110A00(void); void sub_8110A3C(void); void sub_8110BB0(u8); void sub_8110BE8(u8); void sub_8110E3C(void); void sub_8110D94(void); void sub_8110E20(void); void sub_8110D48(u8); u8 sub_8110E68(struct UnkStruct_203AE98 *); void sub_8110F90(u8); void sub_8111150(u8); void sub_8111368(void); void sub_81115E8(void); u16 sub_8111618(void); u16 sub_811164C(void); void sub_8111688(void); void sub_811175C(u8, struct UnkStruct_203AE98 *); void * sub_8113D08(void *, struct UnkStruct_203AE98 *); void * sub_8113D94(void *, struct UnkStruct_203AE98 *); void * sub_8113C20(void *, struct UnkStruct_203AE98 *); void * sub_8113C8C(void *, struct UnkStruct_203AE98 *); void * sub_8113A78(void *, void **); void sub_8113ABC(void *); void sub_81138F8(void); void sub_8111AD8(void); void sub_8112940(u8, struct UnkStruct_203AE98 *, u16); void sub_811381C(void); void sub_8113B88(void); void sub_8113BD8(void); void * sub_8113BF4(void *); void * sub_8113D48(void *, struct UnkStruct_203AE98 *); void * sub_8113CC8(void *, struct UnkStruct_203AE98 *); void sub_81118F4(s8); extern const u8 gUnknown_841A155[]; const struct WindowTemplate gUnknown_845661C[3] = { { 0, 0, 0, 30, 2, 15, 0x0e9 }, { 0, 0, 18, 30, 2, 15, 0x0ad }, { 0, 0, 14, 30, 6, 15, 0x14c } }; const struct TextColor gUnknown_8456634 = {15, 1, 12}; void sub_8110840(void * a0) { size_t r1 = (void *)gSaveBlock1Ptr - a0; if (gUnknown_203AE04) gUnknown_203AE04 += r1; if (gUnknown_203ADFA != 0) { if (gUnknown_203AE08) gUnknown_203AE08 = (void *)gUnknown_203AE08 + r1; if (gUnknown_203ADFA == 2) { int r3; for (r3 = 0; r3 < 0x20; r3++) if (gUnknown_203AE0C[r3]) gUnknown_203AE0C[r3] += r1; } } } void sub_811089C(void) { memset(gSaveBlock1Ptr->questLog, 0, sizeof(gSaveBlock1Ptr->questLog)); gUnknown_203ADF8 = 0; gUnknown_203ADFA = 0; gUnknown_203AE8C = 0; gUnknown_203AE08 = NULL; gUnknown_203AE04 = 0; sub_8113BD8(); sub_81138F8(); } void sub_81108F0(u8 a0) { memset(gSaveBlock1Ptr->questLog + a0, 0, sizeof(struct QuestLog)); gUnknown_203AE04 = NULL; } void sub_8110920(void) { gUnknown_203AE04 = NULL; } void sub_811092C(void) { if (gUnknown_203AE8C) gUnknown_203AE8C(); } bool8 sub_8110944(void * a0, size_t a1) { void * r2 = gSaveBlock1Ptr->questLog[gUnknown_203ADF8].unk_568; void * r0 = gSaveBlock1Ptr->questLog[gUnknown_203ADF8].end; r0 -= a1; if (a0 < r2 || a0 > r0) return FALSE; return TRUE; } bool8 sub_8110988(void * a0, size_t a1) { void * r2 = gSaveBlock1Ptr->questLog[gUnknown_203ADF8].unk_568; void * r0 = gSaveBlock1Ptr->questLog[gUnknown_203ADF8].end; r0 -= a1; if (a0 < r2 || a0 > r0) return FALSE; return TRUE; } void sub_81109CC(u8 a0) { gUnknown_203ADFA = a0; if (a0 == 1) gUnknown_203AE8C = sub_8110A00; else gUnknown_203AE8C = sub_8110A3C; } void sub_8110A00(void) { if (sub_8110E68(gUnknown_203AE98) != 1) { gUnknown_3005E88 = 0; sub_8110E3C(); gUnknown_203ADFA = 0; gUnknown_203AE8C = NULL; } } void sub_8110A3C(void) { if (gUnknown_203AE94.unk_0_0 == 2) gUnknown_203AE94.unk_0_0 = 0; if (gUnknown_203AE94.unk_0_6 == 0) { if (gUnknown_3005E88 || gUnknown_203AE94.unk_0_0 == 1 || (gUnknown_203AE94.unk_1 < 32 && gUnknown_203AE0C[gUnknown_203AE94.unk_1])) sub_8111AD8(); else { gUnknown_203AE94.unk_0_6 = 2; ScriptContext2_Enable(); sub_81118F4(0); } } } void sub_8110AB4(void) { gUnknown_20370D0 = gUnknown_203ADFA; } u8 sub_8110AC8(void) { return gSaveBlock1Ptr->questLog[gUnknown_203ADF8].unk_000; } void sub_8110AEC(u16 a0) { if (gUnknown_203ADF8 > 3) gUnknown_203ADF8 = 0; sub_81108F0(gUnknown_203ADF8); sub_8113B88(); gUnknown_203AE08 = gSaveBlock1Ptr->questLog[gUnknown_203ADF8].unk_568; if ((a0 >= 12 && a0 < 20) || a0 == 35) gSaveBlock1Ptr->questLog[gUnknown_203ADF8].unk_000 = 2; else gSaveBlock1Ptr->questLog[gUnknown_203ADF8].unk_000 = 1; sub_81115E8(); sub_8110BB0(gUnknown_203ADF8); sub_8110BE8(gUnknown_203ADF8); sub_8110D94(); sub_8110E20(); sub_8110D48(gUnknown_203ADF8); gUnknown_203ADFC = 0; sub_8112940(2, gUnknown_203AE98, 0x100); sub_8110E68(gUnknown_203AE98); sub_81109CC(1); } void sub_8110BB0(u8 a0) { struct QuestLog * questLog = &gSaveBlock1Ptr->questLog[a0]; questLog->unk_001 = gSaveBlock1Ptr->location.mapGroup; questLog->unk_002 = gSaveBlock1Ptr->location.mapNum; questLog->unk_003 = gSaveBlock1Ptr->location.warpId; questLog->unk_004 = gSaveBlock1Ptr->pos.x; questLog->unk_006 = gSaveBlock1Ptr->pos.y; } #ifdef NONMATCHING void sub_8110BE8(u8 a0) { struct QuestLog * questLog = &gSaveBlock1Ptr->questLog[a0]; u16 i; // r6 sub_815A008(questLog); for (i = 0; i < ARRAY_COUNT(gSaveBlock1Ptr->mapObjectTemplates); i++) { if (gSaveBlock1Ptr->mapObjectTemplates[i].x < 0) { questLog->npcData[i].x = (u8)-gSaveBlock1Ptr->mapObjectTemplates[i].x; questLog->npcData[i].negx = TRUE; } else { questLog->npcData[i].x = (u8)gSaveBlock1Ptr->mapObjectTemplates[i].x; questLog->npcData[i].negx = FALSE; } if (gSaveBlock1Ptr->mapObjectTemplates[i].y < 0) { questLog->npcData[i].y = (u8)-gSaveBlock1Ptr->mapObjectTemplates[i].y; questLog->npcData[i].negy = TRUE; } else { questLog->npcData[i].y = (u8)gSaveBlock1Ptr->mapObjectTemplates[i].y; questLog->npcData[i].negy = FALSE; } questLog->npcData[i].elevation = gSaveBlock1Ptr->mapObjectTemplates[i].elevation; questLog->npcData[i].movementType = gSaveBlock1Ptr->mapObjectTemplates[i].movementType; } } #else NAKED void sub_8110BE8(u8 a0) { asm_unified("\tpush {r4-r7,lr}\n" "\tmov r7, r10\n" "\tmov r6, r9\n" "\tmov r5, r8\n" "\tpush {r5-r7}\n" "\tlsls r0, 24\n" "\tlsrs r0, 24\n" "\tldr r4, =gSaveBlock1Ptr\n" "\tmovs r1, 0xCD\n" "\tlsls r1, 3\n" "\tmuls r0, r1\n" "\tmovs r1, 0x98\n" "\tlsls r1, 5\n" "\tadds r0, r1\n" "\tldr r1, [r4]\n" "\tadds r7, r1, r0\n" "\tadds r0, r7, 0\n" "\tbl sub_815A008\n" "\tmovs r6, 0\n" "\tmov r9, r4\n" "\tmovs r2, 0x8D\n" "\tlsls r2, 3\n" "\tmov r8, r2\n" "\tldr r3, =0x0000046a\n" "\tmov r10, r3\n" "_08110C1C:\n" "\tmov r4, r9\n" "\tldr r1, [r4]\n" "\tlsls r2, r6, 1\n" "\tadds r0, r2, r6\n" "\tlsls r0, 3\n" "\tadds r1, r0\n" "\tldr r0, =0x000008e4\n" "\tadds r1, r0\n" "\tldrh r4, [r1]\n" "\tmovs r3, 0\n" "\tldrsh r0, [r1, r3]\n" "\tmov r12, r2\n" "\tcmp r0, 0\n" "\tbge _08110C64\n" "\tlsls r3, r6, 2\n" "\tadds r2, r7, r3\n" "\tnegs r0, r0\n" "\tmov r4, r8\n" "\tadds r1, r2, r4\n" "\tstrb r0, [r1]\n" "\tldr r0, =0x00000469\n" "\tadds r2, r0\n" "\tldrb r0, [r2]\n" "\tmovs r1, 0x1\n" "\torrs r0, r1\n" "\tstrb r0, [r2]\n" "\tb _08110C7C\n" "\t.pool\n" "_08110C64:\n" "\tlsls r3, r6, 2\n" "\tadds r1, r7, r3\n" "\tmov r2, r8\n" "\tadds r0, r1, r2\n" "\tstrb r4, [r0]\n" "\tldr r4, =0x00000469\n" "\tadds r1, r4\n" "\tldrb r2, [r1]\n" "\tmovs r0, 0x2\n" "\tnegs r0, r0\n" "\tands r0, r2\n" "\tstrb r0, [r1]\n" "_08110C7C:\n" "\tadds r5, r3, 0\n" "\tmov r1, r9\n" "\tldr r0, [r1]\n" "\tmov r2, r12\n" "\tadds r1, r2, r6\n" "\tlsls r1, 3\n" "\tadds r0, r1\n" "\tldr r3, =0x000008e6\n" "\tadds r1, r0, r3\n" "\tldrh r2, [r1]\n" "\tmovs r4, 0\n" "\tldrsh r0, [r1, r4]\n" "\tcmp r0, 0\n" "\tbge _08110CC8\n" "\tadds r3, r7, r5\n" "\tadds r1, r0, 0\n" "\tnegs r1, r1\n" "\tlsls r1, 24\n" "\tmov r2, r8\n" "\tadds r4, r3, r2\n" "\tlsrs r1, 15\n" "\tldr r0, [r4]\n" "\tldr r2, =0xfffe01ff\n" "\tands r0, r2\n" "\torrs r0, r1\n" "\tstr r0, [r4]\n" "\tadd r3, r10\n" "\tldrb r0, [r3]\n" "\tmovs r1, 0x2\n" "\torrs r0, r1\n" "\tb _08110CE6\n" "\t.pool\n" "_08110CC8:\n" "\tadds r3, r7, r5\n" "\tlsls r2, 24\n" "\tmov r0, r8\n" "\tadds r4, r3, r0\n" "\tlsrs r2, 15\n" "\tldr r0, [r4]\n" "\tldr r1, =0xfffe01ff\n" "\tands r0, r1\n" "\torrs r0, r2\n" "\tstr r0, [r4]\n" "\tadd r3, r10\n" "\tldrb r1, [r3]\n" "\tmovs r0, 0x3\n" "\tnegs r0, r0\n" "\tands r0, r1\n" "_08110CE6:\n" "\tstrb r0, [r3]\n" "\tadds r5, r7, r5\n" "\tmov r1, r9\n" "\tldr r0, [r1]\n" "\tmov r2, r12\n" "\tadds r3, r2, r6\n" "\tlsls r3, 3\n" "\tadds r0, r3\n" "\tldr r4, =0x000008e8\n" "\tadds r0, r4\n" "\tldrb r1, [r0]\n" "\tmov r0, r10\n" "\tadds r4, r5, r0\n" "\tlsls r1, 2\n" "\tldrb r2, [r4]\n" "\tmovs r0, 0x3\n" "\tands r0, r2\n" "\torrs r0, r1\n" "\tstrb r0, [r4]\n" "\tmov r1, r9\n" "\tldr r0, [r1]\n" "\tadds r0, r3\n" "\tldr r2, =0x000008e9\n" "\tadds r0, r2\n" "\tldrb r0, [r0]\n" "\tldr r3, =0x0000046b\n" "\tadds r5, r3\n" "\tstrb r0, [r5]\n" "\tadds r0, r6, 0x1\n" "\tlsls r0, 16\n" "\tlsrs r6, r0, 16\n" "\tcmp r6, 0x3F\n" "\tbhi _08110D2A\n" "\tb _08110C1C\n" "_08110D2A:\n" "\tpop {r3-r5}\n" "\tmov r8, r3\n" "\tmov r9, r4\n" "\tmov r10, r5\n" "\tpop {r4-r7}\n" "\tpop {r0}\n" "\tbx r0\n" "\t.pool"); } #endif // NONMATCHING void sub_8110D48(u8 a0) { struct QuestLog * questLog = &gSaveBlock1Ptr->questLog[a0]; CpuCopy16(gSaveBlock1Ptr->flags, questLog->unk_148, FLAGS_COUNT * sizeof(u8)); CpuCopy16(gSaveBlock1Ptr->vars, questLog->unk_268, VARS_COUNT * sizeof(u16)); } void sub_8110D94(void) { u16 i, j; u16 sp0[4]; for (i = 0; i < 4; i++) { sp0[i] = 0; for (j = 0; j < 16; j++) { if (gSaveBlock1Ptr->trainerRematches[16 * i + j]) { sp0[i] += (1 << j); } } VarSet(VAR_0x40AA + i, sp0[i]); } } void sub_8110E20(void) { VarSet(VAR_0x40AE, gSaveBlock1Ptr->mapDataId); } void sub_8110E3C(void) { sub_8113BF4(gUnknown_203AE08); if (++gUnknown_203ADF8 > 3) gUnknown_203ADF8 = 0; } bool8 sub_8110E68(struct UnkStruct_203AE98 * a0) { u16 i; for (i = gUnknown_203ADFC; i < gUnknown_203AF98; i++) { if (gUnknown_203AE08 == NULL) return FALSE; switch (a0[i].unk_6) { case 0: case 1: gUnknown_203AE08 = sub_8113D48(gUnknown_203AE08, &a0[i]); break; default: gUnknown_203AE08 = sub_8113CC8(gUnknown_203AE08, &a0[i]); break; } if (gUnknown_203AE08 == NULL) { gUnknown_3005E88 = 0; return FALSE; } } if (gUnknown_3005E88 == 0) { gUnknown_203AE08 = sub_8113BF4(gUnknown_203AE08); return FALSE; } gUnknown_203ADFC = gUnknown_203AF98; return TRUE; } void sub_8110F14(u8 taskId) { u8 i; sub_811381C(); gUnknown_203ADF9 = 0; for (i = 0; i < 4; i++) { if (gSaveBlock1Ptr->questLog[i].unk_000) gUnknown_203ADF9++; } if (gUnknown_203ADF9 != 0) { gUnknown_3005ECC = FALSE; sub_8110F90(taskId); DestroyTask(taskId); } else { SetMainCallback2(sub_8056938); DestroyTask(taskId); } } void sub_8110F90(u8 unused) { gSaveBlock1Ptr->location.mapGroup = 3; gSaveBlock1Ptr->location.mapNum = 19; gSaveBlock1Ptr->location.warpId = -1; gUnknown_203ADF8 = 0; gUnknown_2031DD8 = 1; sub_8082740(1); sub_8111368(); } void sub_8110FCC(void) { sub_811175C(gUnknown_203ADF8, gUnknown_203AE98); sub_8113B88(); sub_8112940(1, gUnknown_203AE98, 0x100); sub_8111150(gUnknown_203ADF8); } bool8 sub_8111000(void) { LoadPalette(stdpal_get(4), 0xF0, 0x20); sub_81109CC(2); sub_807DF64(); gUnknown_203AE94 = (struct UnkStruct_203AE94){}; gUnknown_203AE94.unk_0_0 = 2; return 1; } bool8 sub_8111038(void) { LoadPalette(stdpal_get(4), 0xF0, 0x20); sub_81109CC(2); sub_807DF7C(); gUnknown_203AE94 = (struct UnkStruct_203AE94){}; gUnknown_203AE94.unk_0_0 = 2; return 1; } void sub_8111070(u8 a0) { u8 i; for (i = 0; i < 3; i++) { gUnknown_203ADFE[i] = AddWindow(&gUnknown_845661C[i]); FillWindowPixelRect(gUnknown_203ADFE[i], 15, 0, 0, gUnknown_845661C[i].width * 8, gUnknown_845661C[i].height * 8); } // _("Previously on your quest…$") StringExpandPlaceholders(gStringVar4, gUnknown_841A155); if (a0) { ConvertIntToDecimalStringN(gStringVar1, a0, STR_CONV_MODE_LEFT_ALIGN, 1); StringAppend(gStringVar4, gStringVar1); } AddTextPrinterParametrized2(gUnknown_203ADFE[0], 2, 2, 2, 1, 2, &gUnknown_8456634, 0, gStringVar4); PutWindowTilemap(gUnknown_203ADFE[0]); PutWindowTilemap(gUnknown_203ADFE[1]); CopyWindowToVram(gUnknown_203ADFE[0], 2); CopyWindowToVram(gUnknown_203ADFE[2], 2); CopyWindowToVram(gUnknown_203ADFE[1], 3); } void sub_8111134(void) { PutWindowTilemap(gUnknown_203ADFE[1]); CopyWindowToVram(gUnknown_203ADFE[1], 1); } void sub_8111150(u8 a0) { struct QuestLog *questLog = &gSaveBlock1Ptr->questLog[a0]; u16 i; for (i = 0; i < 64; i++) { if (questLog->npcData[i].negx) gSaveBlock1Ptr->mapObjectTemplates[i].x = -questLog->npcData[i].x; else gSaveBlock1Ptr->mapObjectTemplates[i].x = questLog->npcData[i].x; if (questLog->npcData[i].negy) gSaveBlock1Ptr->mapObjectTemplates[i].y = -(u8)questLog->npcData[i].y; else gSaveBlock1Ptr->mapObjectTemplates[i].y = questLog->npcData[i].y; gSaveBlock1Ptr->mapObjectTemplates[i].elevation = questLog->npcData[i].elevation; gSaveBlock1Ptr->mapObjectTemplates[i].movementType = questLog->npcData[i].movementType; } sub_815A1F8(questLog, gSaveBlock1Ptr->mapObjectTemplates); } void sub_8111274(u8 a0, u8 a1) { struct WarpData sp0; if (!a1) { gSaveBlock1Ptr->location.mapGroup = gSaveBlock1Ptr->questLog[a0].unk_001; gSaveBlock1Ptr->location.mapNum = gSaveBlock1Ptr->questLog[a0].unk_002; gSaveBlock1Ptr->location.warpId = gSaveBlock1Ptr->questLog[a0].unk_003; gSaveBlock1Ptr->pos.x = gSaveBlock1Ptr->questLog[a0].unk_004; gSaveBlock1Ptr->pos.y = gSaveBlock1Ptr->questLog[a0].unk_006; } else { sp0.mapGroup = gSaveBlock1Ptr->questLog[a0].unk_001; sp0.mapNum = gSaveBlock1Ptr->questLog[a0].unk_002; sp0.warpId = gSaveBlock1Ptr->questLog[a0].unk_003; sp0.x = gSaveBlock1Ptr->questLog[a0].unk_004; sp0.y = gSaveBlock1Ptr->questLog[a0].unk_006; sub_8055D5C(&sp0); } } void sub_8111368(void) { gUnknown_203ADFA = 2; sub_806E6FC(); sub_809A2DC(); sub_809A2A4(); if (sub_8110AC8() == 1) { sub_8111274(gUnknown_203ADF8, 0); gUnknown_3005024 = sub_8111038; SetMainCallback2(sub_80572A8); } else { sub_8111274(gUnknown_203ADF8, 1); warp_in(); gUnknown_3005024 = sub_8111000; SetMainCallback2(sub_805726C); } } void sub_81113E4(void) { struct QuestLog * questLog = &gSaveBlock1Ptr->questLog[gUnknown_203ADF8]; CpuCopy16(questLog->unk_148, gSaveBlock1Ptr->flags, FLAGS_COUNT * sizeof(u8)); CpuCopy16(questLog->unk_268, gSaveBlock1Ptr->vars, VARS_COUNT * sizeof(u16)); sub_8111688(); } struct PokemonAndSomethingElse { struct Pokemon mon; u16 unk_64; u16 unk_66; }; void sub_8111438(void) { struct PokemonAndSomethingElse *r9 = AllocZeroed(sizeof(struct PokemonAndSomethingElse)); u16 r0, r3, r5, r6; CreateMon(&r9->mon, SPECIES_RATTATA, 1, 0x20, FALSE, 0, 0, 0); r0 = VarGet(VAR_0x4027); r9->unk_64 = r0 >> 12; r9->unk_66 = r0 % 0x1000; r5 = sub_8111618(); if (r5 > r9->unk_64) { for (r3 = 0; r3 < r5 - r9->unk_64; r3++) { ZeroMonData(&gPlayerParty[5 - r3]); } } else if (r5 < r9->unk_64) { for (r3 = 0; r3 < 5; r3++) { sub_808BCB4(0, r3); } for (r3 = r5; r3 < r9->unk_64; r3++) { CopyMon(&gPlayerParty[r3], &r9->mon, sizeof(struct Pokemon)); } } r5 = sub_811164C(); if (r5 > r9->unk_66) { for (r3 = 0; r3 < 14; r3++) { for (r6 = 0; r6 < 30; r6++) { if (GetBoxMonDataFromAnyBox(r3, r6, MON_DATA_SANITY_BIT2)) { sub_808BCB4(r3, r6); r5--; if (r5 == r9->unk_66) break; } } if (r5 == r9->unk_66) break; } } else if (r5 < r9->unk_66) { for (r3 = 0; r3 < TOTAL_BOXES_COUNT; r3++) { for (r6 = 0; r6 < IN_BOX_COUNT; r6++) { struct BoxPokemon * boxMon = GetBoxedMonPtr(r3, r6); if (!GetBoxMonData(boxMon, MON_DATA_SANITY_BIT2)) { CopyMon(boxMon, &r9->mon.box, sizeof(struct BoxPokemon)); r5++; if (r5 == r9->unk_66) break; } } if (r5 == r9->unk_66) break; } } Free(r9); } void sub_81115E8(void) { u16 r4 = sub_8111618(); u16 r1 = sub_811164C(); VarSet(VAR_0x4027, (r4 << 12) + r1); } u16 sub_8111618(void) { u16 count = 0; u16 i; for (i = 0; i < PARTY_SIZE; i++) { if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_BIT2)) count++; } return count; } u16 sub_811164C(void) { u16 count = 0; u16 i, j; for (i = 0; i < TOTAL_BOXES_COUNT; i++) { for (j = 0; j < IN_BOX_COUNT; j++) { if (GetBoxMonDataFromAnyBox(i, j, MON_DATA_SANITY_BIT2)) count++; } } return count; } void sub_8111688(void) { u16 i, j; u16 sp0[4]; for (i = 0; i < 4; i++) { sp0[i] = VarGet(VAR_0x40AA + i); for (j = 0; j < 16; j++) { if (sp0[i] & 1) gSaveBlock1Ptr->trainerRematches[16 * i + j] = 30; else gSaveBlock1Ptr->trainerRematches[16 * i + j] = 0; sp0[i] >>= 1; } } } void sub_8111708(void) { struct MapHeader sp0; gSaveBlock1Ptr->mapDataId = VarGet(VAR_0x40AE); if (gSaveBlock1Ptr->mapDataId == 0) { sp0 = *get_mapheader_by_bank_and_number(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum); gSaveBlock1Ptr->mapDataId = sp0.mapDataId; } } void sub_811175C(u8 a0, struct UnkStruct_203AE98 * a1) { u16 i; u16 *r4; u16 r6 = 0; u16 r9 = 0; memset(a1, 0, 32 * sizeof(struct UnkStruct_203AE98)); for (i = 0; i < 32; i++) { gUnknown_203AE0C[i] = NULL; } r4 = gSaveBlock1Ptr->questLog[a0].unk_568; for (i = 0; i < 32; i++) { switch (*r4 & 0xFFF) { case 0: r4 = sub_8113D08(r4, &a1[r6]); r6++; break; case 1: case 2: r4 = sub_8113D94(r4, &a1[r6]); r6++; break; case 39: r4 = sub_8113C20(r4, &a1[r6]); r6++; break; case 41: r4 = sub_8113C8C(r4, &a1[r6]); r6++; break; default: r4 = sub_8113A78(r4, &gUnknown_203AE0C[r9]); if (r9 == 0) sub_8113ABC(gUnknown_203AE0C[0]); r9++; break; } if (r4 == NULL) break; } }