#include "global.h" #include "globaldata.h" #include "constants/dungeon.h" #include "structs/str_3001B64.h" #include "code_800558C.h" #include "code_800D090.h" #include "code_80118A4.h" #include "code_801D014.h" #include "code_8099360.h" #include "credits2.h" #include "event_flag.h" #include "felicity_bank.h" #include "flash.h" #include "friend_list_menu.h" #include "ground_lives.h" #include "ground_main.h" #include "ground_script.h" #include "gulpin_shop_801FB50.h" #include "input.h" #include "kangaskhan_storage1.h" #include "kangaskhan_storage2.h" #include "kecleon_bros1.h" #include "kecleon_bros4.h" #include "main_loops.h" #include "memory.h" #include "personality_test1.h" #include "pokemon.h" #include "string_format.h" #include "text_1.h" #include "text_2.h" #include "wigglytuff_shop1.h" #include "wigglytuff_shop3.h" #include "wonder_mail.h" #include "naming_screen.h" IWRAM_INIT struct unkStruct_3001B64 *gUnknown_3001B64 = { NULL }; extern bool8 sub_802FCF0(void); u8 ScriptPrintText_809B2B8(struct unkStruct_3001B64_unkC *, s32, s32, const char *); bool8 IsTextboxOpen_809B40C(struct unkStruct_3001B64_unkC *); extern void ResetTextbox_809B294(void); extern s32 sub_803B168(void); extern void sub_803B1BC(void); u32 xxx_script_textboxes_809A680(u32 param_1, u32 param_2); void sub_809A62C(void); void sub_809A7EC(void); void sub_809A83C(s16 index); extern void sub_80A8EC0(u8 *, u32); PokemonStruct1 *sub_808D3BC(void); PokemonStruct1 *sub_808D3F8(void); PokemonStruct1 *sub_80A8D54(s16); void sub_80A7DDC(s16 *, s16*); u8 IsStarterMonster(s16); s16 sub_80A8BFC(s32); struct Unk8116040Struct { s16 x; s16 y; bool8 flip; }; static const struct Unk8116040Struct gUnknown_8116040[] = { {2, 8, FALSE}, {12, 5, FALSE}, {2, 8, FALSE}, {23, 8, TRUE}, {7, 8, FALSE}, {18, 8, TRUE}, {13, 5, TRUE}, {2, 8, TRUE}, {23, 8, FALSE}, {7, 8, TRUE}, {18, 8, FALSE}, {12, 1, FALSE}, {2, 2, FALSE}, {23, 2, TRUE}, {7, 1, FALSE}, {18, 1, TRUE}, {13, 1, TRUE}, {2, 2, TRUE}, {23, 2, FALSE}, {7, 1, TRUE}, {18, 1, FALSE}, }; static const MenuItem gUnknown_81160E8[] = { {"*Yes", 1}, {"No", 0}, {NULL, 0}, }; static const MenuItem gUnknown_811610C[] = { {"Yes", 1}, {"*No", 0}, {NULL, 0}, }; static const MenuItem gUnknown_811612C[] = { {NULL, 0}, }; static const u32 gUnknown_8116134[] = { 1, 1, 1, 1, 1 }; static const u16 gUnknown_8116148[] = { 226, 194, 450, 706, 1, 289, 257, 269, 261, 0 }; ALIGNED(4) static const u8 sInvalidText[] = _("{COLOR RED_W}invalidity{RESET}"); ALIGNED(4) static const u8 sUndefineText[] = _("{COLOR RED_W}undefine{RESET}"); ALIGNED(4) static const u8 sSpeechBubbleText[] = _("{SPEECH_BUBBLE}"); ALIGNED(4) static const u8 sYellowSpeechBubbleText[] = _("{COLOR YELLOW_N}{SPEECH_BUBBLE}{RESET}"); ALIGNED(4) static const u8 sYellowStringText[] = _("{COLOR YELLOW_N}%s{RESET}"); // TODO: Convert to actual string ALIGNED(4) static const u8 gUnknown_8116190[] = {0x25, 0x73, 0x23, 0x5b, 0x49, 0x5d, 0x23, 0x7e, 0x20, 0x81, 0x40, 0x23, 0x57, 0x0a, 0x23, 0x5b, 0x4f, 0x5d, 0x23, 0x7e, 0x20, 0x81, 0x40, 0x00}; EWRAM_DATA u16 gUnknown_20399DC = 0; EWRAM_DATA u16 gUnknown_20399DE = 0; void sub_809A560(void) { sub_8014144(); gUnknown_3001B64 = MemoryAlloc(sizeof(struct unkStruct_3001B64), 6); gUnknown_3001B64->unk0 = 0; gUnknown_3001B64->unk4 = -1; gUnknown_3001B64->unk8 = -1; gUnknown_20399DC = 0; gUnknown_20399DE = 0; sub_80095CC(0,0x14); ShowWindows(0,1,1); sub_8009408(0,0x14); ResetTextbox_809B294(); gUnknown_3001B64->unk414 = 0; gUnknown_3001B64->unk418 = NULL; gUnknown_3001B64->unk41C = 0; gUnknown_3001B64->unk420 = 0; gUnknown_3001B64->unk424 = 0; gUnknown_3001B64->unk428 = 0; gUnknown_3001B64->unk42C = NULL; gUnknown_3001B64->unk430 = -1; gUnknown_3001B64->unk434 = -1; sub_809A7EC(); gUnknown_3001B64->unk5A4 = -1; } void sub_809A610(void) { sub_809A62C(); MemoryFree(gUnknown_3001B64); gUnknown_3001B64 = NULL; } void sub_809A62C(void) { s32 index; gUnknown_3001B64->unk0 = 0; gUnknown_3001B64->unk4 = -1; gUnknown_3001B64->unk8 = -1; gUnknown_20399DC = 0; gUnknown_20399DE = 0; for(index = 0; index < 10; index++) { sub_809A83C(index); } gUnknown_3001B64->unk414 = 0; xxx_script_textboxes_809A680(0, 1); } u32 xxx_script_textboxes_809A680(u32 param_1, u32 param_2) { switch(param_1) { case 0: ResetTextbox_809B294(); ShowWindows(0,1,1); break; case 1: ResetTextbox_809B294(); break; case 2: ResetTextbox_809B294(); break; case 3: ResetTextbox_809B294(); break; case 4: ResetTextbox_809B294(); break; default: ResetTextbox_809B294(); ShowWindows(0,1,1); } gUnknown_3001B64->unk0 = param_1; return 1; } void sub_809A6E4(u16 r0) { gUnknown_20399DC |= r0; } void sub_809A6F8(u16 r0) { gUnknown_20399DC &= ~r0; } u16 sub_809A70C(u16 r0) { return gUnknown_20399DC; } void nullsub_209(void) {} void sub_809A71C(s32 param_1) { gUnknown_3001B64->unk4 = param_1; gUnknown_3001B64->unk8 = param_1; sub_801416C(param_1, param_1); } void sub_809A738(s32 param_1, s32 param_2) { gUnknown_3001B64->unk4 = param_1; gUnknown_3001B64->unk8 = param_2; sub_801416C(param_1, param_2); } u8 IsTextboxOpen_809A750(void) { return IsTextboxOpen_809B40C(&gUnknown_3001B64->unkC); } u32 sub_809A768(void) { return 0; } u8 ScriptPrintNullTextbox(void) { switch(gUnknown_3001B64->unk0) { case 3: return ScriptPrintText_809B2B8(&gUnknown_3001B64->unkC,4,-1,0); case 1: case 2: return ScriptPrintText_809B2B8(&gUnknown_3001B64->unkC,0x84,-1,0); default: xxx_script_textboxes_809A680(0, 1); return 0; } } u8 ScriptPrintEmptyTextbox(void) { switch(gUnknown_3001B64->unk0) { case 3: case 1: case 2: return ScriptPrintText_809B2B8(&gUnknown_3001B64->unkC,4,-1,0); default: xxx_script_textboxes_809A680(0, 1); return 0; } } void sub_809A7EC(void) { s32 counter; struct unkStruct_3001B64_sub *temp; temp = &gUnknown_3001B64->unk43C[0]; for(counter = 0; counter < 10; counter++, temp++) { temp->unk0 |= -1; temp->speciesID = MONSTER_NONE; temp->unk4 = 0; temp->unk5 = 0; temp->unk6 |= -1; temp->unk7 = 0; temp->unk8.a0 = 0; temp->unk8.a4 = 0; temp->monPortrait.faceFile = NULL; temp->monPortrait.faceData = NULL; temp->monPortrait.spriteId = 0; temp->faceFile = NULL; } } void sub_809A83C(s16 param_1) { s32 param1 = param_1; struct unkStruct_3001B64_sub *temp = &gUnknown_3001B64->unk43C[param1]; temp->unk0 = -1; temp->speciesID = 0; temp->unk4 = 0; temp->unk5 = 0; temp->unk6 = -1; temp->unk7 = 0; temp->unk8.a0 = 0; temp->unk8.a4 = 0; temp->monPortrait.faceFile = NULL; temp->monPortrait.faceData = NULL; temp->monPortrait.spriteId = 0; strcpy(gFormatBuffer_Monsters[param_1], sInvalidText); strcpy(gFormatBuffer_Names[param_1], sInvalidText); TRY_CLOSE_FILE_AND_SET_NULL(temp->faceFile); } bool8 sub_809A8B8(s32 param_1, s32 param_2) { bool8 ret; s16 local_26; s32 iVar5 = (s16) param_1; s16 local_28 = (s16) param_2; struct unkStruct_3001B64_sub *unkPtr = &gUnknown_3001B64->unk43C[iVar5]; u8 uVar9 = 1; u8 byte1 = 0; TRY_CLOSE_FILE_AND_SET_NULL(unkPtr->faceFile); sub_80A7DDC(&local_28,&local_26); if (local_28 >= 10 && local_28 <= 29) { PokemonStruct1 *pPVar6 = sub_80A8D54(local_28); if (pPVar6 == NULL) { uVar9 = '\0'; } else if (pPVar6 == sub_808D3BC()) { local_28 = 0x21; } else if (pPVar6 == sub_808D3F8()) { local_28 = 0x22; } else if (pPVar6->dungeonLocation.id == DUNGEON_FROSTY_GROTTO_2 || pPVar6->dungeonLocation.id == DUNGEON_HOWLING_FOREST_2 || pPVar6->dungeonLocation.id == DUNGEON_POKEMON_SQUARE || pPVar6->dungeonLocation.id == DUNGEON_POKEMON_SQUARE_2) { switch (local_26) { case 0x104: case 0x133: case 0x183: case 0x198: case 0x199: break; default: uVar9 = 0; break; } } else { switch (local_26) { case 0x90: case 0x91: case 0x92: case 0x96: case 0x10C: case 0x10D: case 0x10E: case 0x112: case 0x113: case 0x19A: case 0x19B: case 0x19C: case 0x19D: case 0x19E: case 0x1A7: break; default: uVar9 = 0; break; } } } switch(local_28) { case 1: case 2: case 6: case 7: case 0x21: case 0x22: if (IsStarterMonster(local_26)) { byte1 = 0x1; } else { uVar9 = 0; } break; } if (local_28 != -1) { s32 sVar3 = (s16) sub_80A7AE8(local_28); if (sVar3 >= 0) { unkPtr->unk0 = local_28; unkPtr->speciesID = sub_80A8BFC(sVar3); strcpy(gFormatBuffer_Monsters[iVar5], sUndefineText); strcpy(gFormatBuffer_Names[iVar5], sUndefineText); unkPtr->unk4 = uVar9; unkPtr->unk5 = byte1; unkPtr->unk6 = 0xff; unkPtr->unk7 = 0; unkPtr->unk8.a0 = 0; unkPtr->unk8.a4 = 0; unkPtr->monPortrait.faceFile = NULL; unkPtr->monPortrait.faceData = NULL; unkPtr->monPortrait.spriteId = 0; ret = TRUE; } else if (local_26 != 0) { unkPtr->unk0 = local_28; unkPtr->speciesID = local_26; strcpy(gFormatBuffer_Monsters[iVar5], sUndefineText); strcpy(gFormatBuffer_Names[iVar5], sUndefineText); unkPtr->unk4 = uVar9; unkPtr->unk5 = byte1; unkPtr->unk6 = 0xff; unkPtr->unk7 = 0; unkPtr->unk8.a0 = 0; unkPtr->unk8.a4 = 0; unkPtr->monPortrait.faceFile = NULL; unkPtr->monPortrait.faceData = NULL; unkPtr->monPortrait.spriteId = 0; ret = TRUE; } else { sub_809A83C(iVar5); ret = FALSE; } } else { sub_809A83C(iVar5); ret = FALSE; } return ret; } bool8 sub_809AB4C(s32 a0_, s32 a1_) { s32 a0 = (s16) a0_; s32 a1 = (s16) a1_; struct unkStruct_3001B64_sub *unkPtr = &gUnknown_3001B64->unk43C[a0]; if (sub_809A8B8(a0, a1)) { CopyCyanMonsterNametoBuffer(gFormatBuffer_Monsters[a0], unkPtr->speciesID); strcpy(gFormatBuffer_Names[a0], sSpeechBubbleText); return TRUE; } else { return FALSE; } } bool8 sub_809ABB4(s32 a0_, s32 a1_) { s32 a0 = (s16) a0_; s32 a1 = (s16) a1_; struct unkStruct_3001B64_sub *unkPtr = &gUnknown_3001B64->unk43C[a0]; if (sub_809A8B8(a0, a1)) { CopyCyanMonsterNametoBuffer(gFormatBuffer_Monsters[a0], unkPtr->speciesID); strcpy(gFormatBuffer_Names[a0], gFormatBuffer_Monsters[a0]); return TRUE; } else { return FALSE; } } bool8 sub_809AC18(s32 a0_, s32 a1_) { s32 a0 = (s16) a0_; s32 a1 = (s16) a1_; struct unkStruct_3001B64_sub *unkPtr = &gUnknown_3001B64->unk43C[a0]; if (sub_809A8B8(a0, a1)) { CopyCyanMonsterNametoBuffer(gFormatBuffer_Monsters[a0], unkPtr->speciesID); sub_80A8EC0(gFormatBuffer_Names[a0], unkPtr->unk0); return TRUE; } else { return FALSE; } } bool8 sub_809AC7C(s32 a0_, s32 a1_, s32 a2_) { s32 a0 = (s16) a0_; s32 r5 = (s8) a1_; u8 a2 = (u8) a2_; struct unkStruct_3001B64_sub *unkPtr = &gUnknown_3001B64->unk43C[a0]; TRY_CLOSE_FILE_AND_SET_NULL(unkPtr->faceFile); if (unkPtr->speciesID >= 0 && r5 != -1 && unkPtr->speciesID != 0) { if (a2 != 0x15) { unkPtr->unk7 = a2; unkPtr->unk8.a0 = 0; unkPtr->unk8.a4 = 0; } unkPtr->monPortrait.pos.x = gUnknown_8116040[unkPtr->unk7].x + unkPtr->unk8.a0; unkPtr->monPortrait.pos.y = gUnknown_8116040[unkPtr->unk7].y + unkPtr->unk8.a4; unkPtr->monPortrait.flip = gUnknown_8116040[unkPtr->unk7].flip; unkPtr->monPortrait.unkE = 0; if (r5 == -2) { unkPtr->unk6 = r5; unkPtr->monPortrait.faceFile = NULL; unkPtr->monPortrait.faceData = NULL; unkPtr->monPortrait.spriteId = 0; return FALSE; } if (unkPtr->unk4) { unkPtr->faceFile = OpenPokemonDialogueSpriteFile(unkPtr->speciesID); if (unkPtr->faceFile != NULL) { unkPtr->unk6 = r5; unkPtr->monPortrait.faceFile = unkPtr->faceFile; GetFileDataPtr(unkPtr->faceFile, 0); switch (unkPtr->unk0) { case 0x47: if ((r5 & 0xF) < 6) { r5 = (s8) (r5 + 6); r5 = (s8) (r5 | 0x40); } break; case 0x4D: if (unkPtr->monPortrait.flip && (r5 & 0xF) < 4) { unkPtr->monPortrait.flip = FALSE; r5 = (s8) (r5 + 4); r5 = (s8) (r5 | 0x40); } break; case 0x53: if (unkPtr->monPortrait.flip && (r5 & 0xF) < 1) { unkPtr->monPortrait.flip = FALSE; r5 = (s8) (r5 + 1); r5 = (s8) (r5 | 0x40); } break; case 0x73: if (unkPtr->monPortrait.flip && (r5 & 0xF) < 2) { unkPtr->monPortrait.flip = FALSE; r5 = (s8) (r5 + 2); r5 = (s8) (r5 | 0x40); } break; } unkPtr->monPortrait.faceData = (void *) unkPtr->faceFile->data; unkPtr->monPortrait.spriteId = r5 & 0xF; } else { unkPtr->monPortrait.faceFile = NULL; unkPtr->monPortrait.faceData = NULL; unkPtr->monPortrait.spriteId = 0; } return TRUE; } } unkPtr->unk6 = 0xFF; unkPtr->unk7 = 0; unkPtr->unk8.a0 = 0; unkPtr->unk8.a4 = 0; unkPtr->monPortrait.faceFile = NULL; unkPtr->monPortrait.faceData = NULL; unkPtr->monPortrait.spriteId = 0; return FALSE; } bool8 sub_809ADD8(s32 a0_, struct unkStruct_3001B64_sub_sub *a1) { s32 a0 = (s16) a0_; struct unkStruct_3001B64_sub *unkPtr = &gUnknown_3001B64->unk43C[a0]; if (unkPtr->speciesID < 0) return FALSE; if (unkPtr->speciesID == MONSTER_NONE) return FALSE; unkPtr->unk8 = *a1; unkPtr->monPortrait.pos.x = gUnknown_8116040[unkPtr->unk7].x + unkPtr->unk8.a0; unkPtr->monPortrait.pos.y = gUnknown_8116040[unkPtr->unk7].y + unkPtr->unk8.a4; return TRUE; } MonPortraitMsg *sub_809AE3C(s32 a0_) { s32 a0 = (s16) a0_; if (a0 >= 0) { struct unkStruct_3001B64_sub *unkPtr = &gUnknown_3001B64->unk43C[a0]; if (unkPtr->speciesID != MONSTER_NONE && unkPtr->unk6 == -1) { sub_809AC7C(a0, 0, 0); } if (unkPtr->monPortrait.faceFile != NULL) { return &unkPtr->monPortrait; } } return NULL; } bool8 ScriptPrintText(s32 a0, s32 a1_, const char *text) { s32 a1 = (s16) a1_; if (text == NULL) { return ScriptPrintNullTextbox(); } else if (text[0] == '\0') { return ScriptPrintEmptyTextbox(); } else { xxx_script_textboxes_809A680(gUnknown_8116134[a0], 0); return ScriptPrintText_809B2B8(&gUnknown_3001B64->unkC, gUnknown_8116148[a0], a1, text); } } bool8 sub_809AEEC(const char *text) { if (text == NULL) { return ScriptPrintNullTextbox(); } else if (text[0] == '\0') { return ScriptPrintNullTextbox(); } else { xxx_script_textboxes_809A680(2, 1); return ScriptPrintText_809B2B8(&gUnknown_3001B64->unkC, 0xC2, -1, text); } } bool8 sub_809AF2C(const char *text) { if (text == NULL) { return ScriptPrintNullTextbox(); } else if (text[0] == '\0') { return ScriptPrintNullTextbox(); } else { xxx_script_textboxes_809A680(2, 1); return ScriptPrintText_809B2B8(&gUnknown_3001B64->unkC, 0xC2, -1, text); } } bool8 sub_809AF6C(s32 unused, const char *text) { if (text == NULL) { return ScriptPrintNullTextbox(); } else if (text[0] == '\0') { return ScriptPrintNullTextbox(); } else { xxx_script_textboxes_809A680(3, 1); return ScriptPrintText_809B2B8(&gUnknown_3001B64->unkC, 0x65, -1, text); } } bool8 sub_809AFAC(void) { return (gUnknown_3001B64->unk0 == 4); } struct unkStruct_8096AF8 { bool8 unk0; /* 0x2 */ s16 clientSpecies; /* 0x4 */ s16 targetSpecies; }; void sub_809B028(const MenuItem *, s32 a1_, s32 a2, s32 a3, s32 a4_, const char *text); bool8 sub_809B18C(s32 *sp); extern void sub_8099A34(s32 a0); extern void sub_8099A48(s32 a0); extern void GroundScriptLock(s16 index, s32 r1); extern void GroundScriptLockJumpZero(s16 index); extern u8 sub_802B2D4(void); extern void sub_802B3B8(void); extern u32 sub_802B358(void); void sub_8096AF8(struct unkStruct_8096AF8 *, u8 slotIndex, u8 dungeon); u8 sub_802DB28(u8, u8); void sub_8096BD0(); void ScenarioCalc(s16 varId, s32 main, s32 sub); void MakuhitaDojo_Delete(); u32 HandleMakuhitaDojoState(); s16 sub_802FED0(); u8 sub_801FB50(); void NamingScreen_Free(); s32 sub_80160D8(); void ResetTextbox_809B294(); s32 sub_801A8AC(); void sub_801A928(); s32 sub_8016080(); void CleanConfirmNameMenu(); u32 CreateConfirmNameMenu(u32 mode, u8 *name); bool8 DrawCredits(s32 creditsCategoryIndex, s32); u32 sub_8035574(); void sub_803565C(); u8 sub_8094D14(); void sub_802465C(); s32 sub_80246F0(); s32 GetScriptVarValue(u8 *localVarBuf, s32 varId); bool8 HasEvolutionCompleted(); void GroundMap_ExecuteEvent(); void SetScriptVarValue(u8 *localVarBuf, s32 varId, s32 val); void CleanLuminousCave(); u8 sub_80023E4(); u8 CreateFriendListMenu(); void PlayMenuSoundEffect(); bool8 sub_8015080(u8 *buffer, const MenuItem *menuItems); s32 sub_801516C(); void sub_80151A4(); s32 sub_8015198(); u8 sub_80211AC(); void sub_80213A0(); u8 sub_802132C(); u8 MakuhitaDojo_New(); u8 sub_803B050(); void sub_803B100(); s32 sub_809CCDC(); u8 sub_801B60C(); u8 CreateKecleonBros(); s16 sub_80A2654(s16); u8 sub_802F73C(); u8 sub_802F848(); s32 sub_802F8A0(); void sub_802F974(); s16 sub_802F90C(); s16 sub_80A26B8(); u8 sub_80302E8(); s32 sub_80303AC(); void sub_8030480(); s16 sub_8030418(); void PrepareSavePakWrite(); u8 WriteSavePak(); void FinishWriteSavePak(); u8 CreateKangaskhanStorage(); void sub_8011C28(); u8 CreateHelperPelipperMenu(); u8 CreateWigglytuffShop(); u8 sub_8099328(); void GetScriptVarScenario(s32 varId,u32 *outMain,u32 *outSub); u32 sub_802E90C(); void sub_802E918(); u32 sub_80282DC(u8 *r0); void sub_809927C(u8); void sub_80282FC(void); extern u8 CreateThankYouMailPelipper(void); extern u8 sub_802E864(void); extern u8 sub_802DFB0(void); extern void CleanThankYouMailPelipper(void); extern void CleanHelperPelipper(void); extern void sub_802E06C(void); extern void sub_802DC00(void); extern void sub_801B72C(void); extern u32 ThankYouMailPelipperCallback(void); extern u32 HelperPelipperCallback(void); extern u32 sub_802E890(void); extern u32 sub_802DFD8(void); extern u32 sub_802DBD4(void); extern u32 sub_803B120(void); extern u32 sub_809CD48(void); extern u32 sub_801B6AC(void); void sub_809AFC8(s32 a0_, s32 a1, s32 a2_, const char *text) { s32 a0 = (u8) a0_; s32 a2 = (s16) a2_; sub_809B028(gUnknown_81160E8, 0, (a0 != 0), a1, a2, text); } bool8 sub_809AFFC(u8 *a0) { s32 sp; bool8 ret = sub_809B18C(&sp); if (a0 != NULL) { *a0 = (sp == 1); } return ret; } u8 *sub_809B428(u8 *a0, s32 a1, u8 *a2); bool8 sub_809B648(void); void sub_809B57C(void); bool8 sub_809B1D4(s32 a0, u32 kind, s32 a2, u8 *a3); void sub_809C39C(void); void sub_809C3D8(void); void sub_809C504(void); void sub_809C464(void); void sub_809C478(void); void sub_809C414(void); void sub_809C4B0(void); void sub_809C550(void); void sub_809B028(const MenuItem * menuItems, s32 a1_, s32 a2, s32 a3, s32 a4_, const char *text) { s32 a1 = (u8) a1_; s32 a4 = (s16) a4_; xxx_script_textboxes_809A680(gUnknown_8116134[a3], 0); gUnknown_3001B64->unk414 = 1; gUnknown_3001B64->unk418 = NULL; gUnknown_3001B64->unk41C = menuItems; gUnknown_3001B64->unk420 = 2; gUnknown_3001B64->unk424 = (a1 != 0) ? 2 : 0; gUnknown_3001B64->unk428 = 0; gUnknown_3001B64->unk430 = a2; if (gUnknown_8116148[a3] & 0x100) { if (a4 < 0) { strcpy(gSpeakerNameBuffer, sYellowSpeechBubbleText); } else { sprintfStatic(gSpeakerNameBuffer, sYellowStringText, gFormatBuffer_Names[a4]); } } CreateMenuDialogueBoxAndPortrait(text, sub_809B428, a2, menuItems, 0, 4, 0, sub_809AE3C(a4), ((gUnknown_8116148[a3] & 0x100) ? 0xC : 0) | ((gUnknown_8116148[a3] & 0x200) ? 0x4 : 0) | ((gUnknown_8116148[a3] & 0x20) ? 0x21 : 1)); // What an ugly way to get flags lol if (gUnknown_3001B64->unk424 & 2) { sub_809A6E4(1); } } bool8 sub_809B18C(s32 *sp) { if (sp != NULL) { *sp = gUnknown_3001B64->unk430; } return (gUnknown_3001B64->unk420 == 3); } bool8 sub_809B1C0(s32 a0, u32 kind, u8 *a2) { return sub_809B1D4(a0, kind, 0, a2); } bool8 sub_809B1D4(s32 a0, u32 kind, s32 a2, u8 *a3) { switch (a0) { case 0xB: if (sub_8021700(kind)) { return FALSE; } break; case 0xC: sub_8001D88(); if (sub_802FCF0()) { return FALSE; } break; } xxx_script_textboxes_809A680(4, 0); gUnknown_3001B64->unk414 = a0; gUnknown_3001B64->unk418 = NULL; gUnknown_3001B64->unk41C = NULL; gUnknown_3001B64->unk420 = 1; gUnknown_3001B64->unk424 = kind; gUnknown_3001B64->unk428 = a2; gUnknown_3001B64->unk42C = a3; gUnknown_3001B64->unk430 = -1; return TRUE; } // The same as sub_809B18C bool8 sub_809B260(s32 *a0) { if (a0 != NULL) { *a0 = gUnknown_3001B64->unk430; } return (gUnknown_3001B64->unk420 == 3); } void ResetTextbox_809B294(void) { SetCharacterMask(3); ScriptPrintText_809B2B8(&gUnknown_3001B64->unkC, 0, -1, NULL); } u8 ScriptPrintText_809B2B8(struct unkStruct_3001B64_unkC *ptr, s32 a1_, s32 a2_, const char *text) { u16 a1 = (u16) a1_; s32 a2 = (s16) a2_; ptr->unk0 = a1; if (text == NULL) { if (a1 == 0) { ptr->unk4 = 0; return FALSE; } if (a1 & 4) { sub_8014490(); xxx_script_textboxes_809A680(0, 1); } return TRUE; } ptr->unk4 = 1; if (a1 & 0x100) { if (a2 < 0) { strcpy(gSpeakerNameBuffer, sYellowSpeechBubbleText); } else { sprintfStatic(gSpeakerNameBuffer, sYellowStringText, gFormatBuffer_Names[a2]); } } if (gUnknown_3001B64->unk0 == 3) { sprintfStatic(ptr->buffer, gUnknown_8116190, text); text = ptr->buffer; } CreateMenuDialogueBoxAndPortrait(text, sub_809B428, -1, NULL, 0, 3, 0, sub_809AE3C(a2), ((a1 & 0x100) ? 0xC : 0) | ((a1 & 0x200) ? 0x4 : 0) | ((gUnknown_3001B64->unk0 == 3) ? 0x10 : 0) | ((gUnknown_3001B64->unk0 == 2) ? 0x10 : 0) | ((a1 & 0x20) ? 0x20 : 0) | ((a1 & 0x40) ? 0x1 : 0) | ((a1 & 0x80) ? 0x100 : 0) | ((a1 & 0x4) ? 0x200 : 0) | ((gUnknown_3001B64->unk4 != -1) ? 0x2 : 0) ); return TRUE; } bool8 IsTextboxOpen_809B40C(struct unkStruct_3001B64_unkC *a0) { switch (a0->unk4) { case 0: case 2: case 3: return FALSE; } return TRUE; } // It seems this function is effectively unused. It could be different in Blue however. The u8 * arguments most likely are pointers to some text drawing structures. u8 *sub_809B428(u8 *a0, s32 a1, u8 *a2) { switch (a0[2]) { case 0x49: sub_8099A34(0x1E); a2[0x21] = 1; return NULL; case 0x4F: sub_8099A48(0x1E); a2[0x21] = 1; return NULL; case 0x57: if (sub_8099B94()) { return a0; } a2[0x21] = 1; return NULL; default: return NULL; } } void sub_809B474(void) { const struct unkStruct_3001B64_unk418 *unkStructPtr; switch (gUnknown_3001B64->unk0) { case 0: case 1: case 2: case 3: default: break; case 4: switch (gUnknown_3001B64->unk420) { case 1: if (!sub_809B648()) { gUnknown_3001B64->unk420 = 3; xxx_script_textboxes_809A680(0, 1); break; } unkStructPtr = gUnknown_3001B64->unk418; if (unkStructPtr != NULL) { if (unkStructPtr->unk4 != NULL) { ResetTextbox_809B294(); if (!unkStructPtr->unk4()) { gUnknown_3001B64->unk430 = -1; gUnknown_3001B64->unk420 = 3; xxx_script_textboxes_809A680(0, 1); break; } } sub_809A6E4(unkStructPtr->unk0); } gUnknown_3001B64->unk420 = 2; // Fallthrough case 2: unkStructPtr = gUnknown_3001B64->unk418; if (unkStructPtr != NULL) { s32 retVal = unkStructPtr->unkC(); if (retVal == 0 || retVal == 1) break; gUnknown_3001B64->unk430 = (retVal == 2) ? -1 : 0; if (unkStructPtr->unk8 != NULL) { unkStructPtr->unk8(); } sub_809A6F8(unkStructPtr->unk0); } else if (sub_809B648()) { break; } gUnknown_3001B64->unk420 = 3; xxx_script_textboxes_809A680(0, 1); break; } break; } sub_809B57C(); } void sub_809B57C(void) { DrawDialogueBoxString(); switch (gUnknown_3001B64->unk0) { case 1: case 2: case 3: switch (gUnknown_3001B64->unk420) { default: { s32 sp; if (sub_80144A4(&sp) == 0) { GroundScriptLock(1, sp); gUnknown_3001B64->unk420 = 3; gUnknown_3001B64->unk430 = sp; } break; } case 0: case 3: { s32 sp; if (sub_80144A4(&sp) == 0) { GroundScriptLockJumpZero(0); gUnknown_3001B64->unk0 = 0; } break; } } break; } if (gUnknown_3001B64->unk434 < 0) { sub_8005838(0, 0); } else { sub_8005838(0, 5); } } void sub_809B614(void) { sub_80060EC(); gUnknown_20399DE = gUnknown_20399DC; gUnknown_20399DC &= 0xFFFD; } void sub_809B638(void) { xxx_call_update_bg_vram(); } void nullsub_210(void) { } static const struct unkStruct_3001B64_unk418 gUnknown_81161A8 = { .unk0 = 1, .unk4 = NULL, .unk8 = sub_809C39C, .unkC = sub_801D0DC, }; static const struct unkStruct_3001B64_unk418 gUnknown_81161B8 = { .unk0 = 1, .unk4 = NULL, .unk8 = sub_809C3D8, .unkC = sub_801D0DC, }; static const struct unkStruct_3001B64_unk418 gUnknown_81161C8 = { .unk0 = 1, .unk4 = NULL, .unk8 = DeleteKangaskhanStorage, .unkC = KangaskhanStorageCallback, }; static const struct unkStruct_3001B64_unk418 gUnknown_81161D8 = { .unk0 = 1, .unk4 = sub_8017E1C, .unk8 = sub_8017EF4, .unkC = sub_8017E54, }; static const struct unkStruct_3001B64_unk418 gUnknown_81161E8 = { .unk0 = 1, .unk4 = NULL, .unk8 = DestroyFelicityBank, .unkC = FelicityBankCallback, }; static const struct unkStruct_3001B64_unk418 gUnknown_81161F8 = { .unk0 = 1, .unk4 = NULL, .unk8 = DeleteKecleonBros, .unkC = KecleonBrosCallback, }; static const struct unkStruct_3001B64_unk418 gUnknown_8116208 = { .unk0 = 1, .unk4 = NULL, .unk8 = sub_801FD7C, .unkC = sub_801FC40, }; static const struct unkStruct_3001B64_unk418 gUnknown_8116218 = { .unk0 = 1, .unk4 = NULL, .unk8 = CleanWigglytuffShop, .unkC = sub_8021C5C, }; static const struct unkStruct_3001B64_unk418 gUnknown_8116228 = { .unk0 = 1, .unk4 = sub_8027F88, .unk8 = sub_809C504, .unkC = sub_8028078, }; static const struct unkStruct_3001B64_unk418 gUnknown_8116238 = { .unk0 = 1, .unk4 = sub_802B2D4, .unk8 = sub_802B3B8, .unkC = sub_802B358, }; static const struct unkStruct_3001B64_unk418 gUnknown_8116248 = { .unk0 = 1, .unk4 = CreateThankYouMailPelipper, .unk8 = CleanThankYouMailPelipper, .unkC = ThankYouMailPelipperCallback, }; static const struct unkStruct_3001B64_unk418 gUnknown_8116258 = { .unk0 = 1, .unk4 = NULL, .unk8 = CleanHelperPelipper, .unkC = HelperPelipperCallback, }; static const struct unkStruct_3001B64_unk418 gUnknown_8116268 = { .unk0 = 1, .unk4 = sub_802E864, .unk8 = sub_809C550, .unkC = sub_802E890, }; static const struct unkStruct_3001B64_unk418 gUnknown_8116278 = { .unk0 = 1, .unk4 = sub_802DFB0, .unk8 = sub_802E06C, .unkC = sub_802DFD8, }; static const struct unkStruct_3001B64_unk418 gUnknown_8116288 = { .unk0 = 1, .unk4 = NULL, .unk8 = sub_802DC00, .unkC = sub_802DBD4, }; // These 3 are identical static const struct unkStruct_3001B64_unk418 gUnknown_8116298 = { .unk0 = 1, .unk4 = NULL, .unk8 = MakuhitaDojo_Delete, .unkC = HandleMakuhitaDojoState, }; static const struct unkStruct_3001B64_unk418 gUnknown_81162A8 = { .unk0 = 1, .unk4 = NULL, .unk8 = MakuhitaDojo_Delete, .unkC = HandleMakuhitaDojoState, }; static const struct unkStruct_3001B64_unk418 gUnknown_81162B8 = { .unk0 = 1, .unk4 = NULL, .unk8 = MakuhitaDojo_Delete, .unkC = HandleMakuhitaDojoState, }; static const struct unkStruct_3001B64_unk418 gUnknown_81162C8 = { .unk0 = 0, .unk4 = CreateTestTracker, .unk8 = sub_809C464, .unkC = HandleTestTrackerState, }; static const struct unkStruct_3001B64_unk418 gUnknown_81162D8 = { .unk0 = 0, .unk4 = sub_8035678, .unk8 = sub_809C478, .unkC = sub_80356A0, }; static const struct unkStruct_3001B64_unk418 gUnknown_81162E8 = { .unk0 = 0, .unk4 = NULL, .unk8 = sub_809C4B0, .unkC = sub_803B120, }; static const struct unkStruct_3001B64_unk418 gUnknown_81162F8 = { .unk0 = 1, .unk4 = NULL, .unk8 = sub_809C414, .unkC = sub_8025354, }; static const struct unkStruct_3001B64_unk418 gUnknown_8116308 = { .unk0 = 0, .unk4 = NULL, .unk8 = NULL, .unkC = sub_809CD48, }; static const struct unkStruct_3001B64_unk418 gUnknown_8116318 = { .unk0 = 1, .unk4 = NULL, .unk8 = sub_801B72C, .unkC = sub_801B6AC, }; bool8 sub_809B648(void) { switch (gUnknown_3001B64->unk414) { case 2: if (gUnknown_3001B64->unk420 != 1) { u32 pressed = gRealInputs.pressed; if ((pressed & AB_BUTTONS) != 0) { gUnknown_3001B64->unk430 = 1; return 0; } if (sub_8094D14()) { gUnknown_3001B64->unk430 = 2; return 0; } else { return 1; } } ResetTextbox_809B294(); return 1; case 3: if (gUnknown_3001B64->unk420 == 1) { ResetTextbox_809B294(); return 1; } else { u32 held = gRealInputs.held; u32 pressed = gRealInputs.pressed; if ((!(pressed & B_BUTTON)) && ((held & B_BUTTON))) { return 1; } return 0; } break; case 4: if (gUnknown_3001B64->unk420 == 1) { ResetTextbox_809B294(); if (gUnknown_3001B64->unk424 == 0) { CreateConfirmNameMenu(0, gUnknown_3001B64->unk42C); } else { CreateConfirmNameMenu(2, gUnknown_3001B64->unk42C); } return 1; } else { s32 var = sub_8016080(); if (var == 3) { CleanConfirmNameMenu(); gUnknown_3001B64->unk430 = 1; } else if (var == 2) { if (gUnknown_3001B64->unk424 == 0) { return 1; } CleanConfirmNameMenu(); gUnknown_3001B64->unk430 = 0; return 0; } else { return 1; } } break; case 5: if (gUnknown_3001B64->unk420 == 1) { ResetTextbox_809B294(); CreateConfirmNameMenu(1, gUnknown_3001B64->unk42C); } else { s32 var = sub_8016080(); if (var == 3) { CleanConfirmNameMenu(); gUnknown_3001B64->unk430 = 1; return 0; } else if (var == 2) { if (gUnknown_3001B64->unk424 == 0) { return 1; } CleanConfirmNameMenu(); gUnknown_3001B64->unk430 = 0; return 0; } } return 1; case 6: if (gUnknown_3001B64->unk420 == 1) { ResetTextbox_809B294(); NamingScreen_Init(4,gUnknown_3001B64->unk42C); } else { s32 var = NamingScreen_HandleInput(); if (var == 3) { NamingScreen_Free(); gUnknown_3001B64->unk430 = 1; return 0; } else if (var == 2) { if (gUnknown_3001B64->unk424 == 0) { return 1; } NamingScreen_Free(); gUnknown_3001B64->unk430 = 0; return 0; } } return 1; case 7: sub_801D014((void *) gUnknown_3001B64->unk42C); gUnknown_3001B64->unk418 = &gUnknown_81161A8; PlayMenuSoundEffect(4); return 1; case 8: sub_801D014((void *) gUnknown_3001B64->unk42C); gUnknown_3001B64->unk418 = &gUnknown_81161B8; PlayMenuSoundEffect(4); return 1; case 9: ResetTextbox_809B294(); if (gUnknown_3001B64->unk420 == 1) { ResetTextbox_809B294(); if (!sub_8015080(gUnknown_3001B64->unk42C, gUnknown_811610C)) { gUnknown_3001B64->unk430 = -1; return 0; } PlayMenuSoundEffect(4); } else { switch( sub_801516C()) { case 3: gUnknown_3001B64->unk430 = sub_8015198(); sub_80151A4(); return 0; case 2: gUnknown_3001B64->unk430 = -1; sub_80151A4(); return 0; } } return 1; case 10: ResetTextbox_809B294(); if (gUnknown_3001B64->unk420 == 1) { ResetTextbox_809B294(); if (!sub_8015080(gUnknown_3001B64->unk42C, gUnknown_811612C)) { gUnknown_3001B64->unk430 = -1; return 0; } PlayMenuSoundEffect(4); } else { switch( sub_801516C()) { case 3: gUnknown_3001B64->unk430 = sub_8015198(); sub_80151A4(); return 0; case 2: gUnknown_3001B64->unk430 = -1; sub_80151A4(); return 0; } } return 1; case 11: if (gUnknown_3001B64->unk420 == 1) { ResetTextbox_809B294(); if (!sub_80211AC(gUnknown_3001B64->unk424,3)) { gUnknown_3001B64->unk430 = -1; return 0; } PlayMenuSoundEffect(4); } else { switch(sub_8021274(1)) { case 3: gUnknown_3001B64->unk430 = sub_802132C(); sub_80213A0(); return 0; case 2: gUnknown_3001B64->unk430 = -1; sub_80213A0(); return 0; } } return 1; case 0xc: if (gUnknown_3001B64->unk420 == 1) { s32 var = sub_80A2654(GetScriptVarValue(0,0x12)); ResetTextbox_809B294(); if (!sub_802F73C(3,0,10,1)) { gUnknown_3001B64->unk430 = -1; return 0; } if ((var != -1) && (!sub_802F848(var))) { SetScriptVarValue(0,0x12,-1); } PlayMenuSoundEffect(4); } else { switch (sub_802F8A0(1)) { case 3: { s32 var = sub_802F90C(); SetScriptVarValue(0, 0x12, sub_80A26B8(var)); gUnknown_3001B64->unk430 = var; sub_802F974(); return 0; } case 2: gUnknown_3001B64->unk430 = -1; sub_802F974(); return 0; } } return 1; case 0xd: if (gUnknown_3001B64->unk420 == 1) { ResetTextbox_809B294(); if (!sub_80302E8(3,0,10)) { gUnknown_3001B64->unk430 = -1; return 0; } PlayMenuSoundEffect(4); } else { switch(sub_80303AC(1)) { case 3: gUnknown_3001B64->unk430 = sub_8030418(); sub_8030480(); return 0; case 2: gUnknown_3001B64->unk430 = -1; sub_8030480(); return 0; } } return 1; case 0xe: case 0xf: if (gUnknown_3001B64->unk420 == 1) { ResetTextbox_809B294(); if (gUnknown_3001B64->unk414 == 0xe) { SetScriptVarValue(0,0x18,1); } sub_8011C28(1); PrepareSavePakWrite(0); return 1; } if (WriteSavePak()) { return 1; } FinishWriteSavePak(); return 0; case 0x10: { bool8 unkBool = (sub_80023E4(4) != 0); ResetTextbox_809B294(); if (CreateKangaskhanStorage(unkBool)) { gUnknown_3001B64->unk418 = &gUnknown_81161C8; return 1; } gUnknown_3001B64->unk430 = -1; return 0; } case 0x11: gUnknown_3001B64->unk418 = &gUnknown_81161D8; return 1; case 0x13: { bool8 unkBool = (sub_80023E4(4) != 0); ResetTextbox_809B294(); if (CreateFelicityBank(unkBool)) { gUnknown_3001B64->unk418 = &gUnknown_81161E8; return 1; } else { gUnknown_3001B64->unk430 = -1; return 0; } } case 0x17: case 0x18: { u8 var; bool8 unkBool = sub_80023E4(4); ResetTextbox_809B294(); if (gUnknown_3001B64->unk414 == 0x17) { var = (unkBool == 0) ? 0 : 1; } else { var = 2; if (unkBool) { var = 3; } } if (CreateKecleonBros(var)) { gUnknown_3001B64->unk418 = &gUnknown_81161F8; return 1; } else { gUnknown_3001B64->unk430 = -1; return 0; } } case 0x19: { bool8 unkBool = (sub_80023E4(4) != 0); ResetTextbox_809B294(); if (sub_801FB50(unkBool)) { gUnknown_3001B64->unk418 = &gUnknown_8116208; return 1; } else { gUnknown_3001B64->unk430 = -1; return 0; } } case 0x1a: if (gUnknown_3001B64->unk420 == 1) { ResetTextbox_809B294(); ClearScriptVarArray(0,0x39); sub_802465C(); return 1; } else { s32 iVar10 = sub_80246F0(); if (GetScriptVarValue(0,0x39) == 0 && HasEvolutionCompleted()) { SetScriptVarValue(0,0x39,1); GroundMap_ExecuteEvent(0x46,0); } if (iVar10 == 3) { CleanLuminousCave(); gUnknown_3001B64->unk430 = 1; return 0; } else if (iVar10 == 2) { CleanLuminousCave(); gUnknown_3001B64->unk430 = 0; return 0; } else { return 1; } } return 0; case 0x1b: { bool8 unk = (sub_80023E4(4) != 0); ResetTextbox_809B294(); if (CreateWigglytuffShop(unk)) { gUnknown_3001B64->unk418 = &gUnknown_8116218; return 1; } gUnknown_3001B64->unk430 = -1; return 0; } case 0x1c: gUnknown_3001B64->unk418 = &gUnknown_8116228; return 1; case 0x1d: gUnknown_3001B64->unk418 = &gUnknown_8116238; return 1; case 0x1e: gUnknown_3001B64->unk418 = &gUnknown_8116248; return 1; case 0x1f: ResetTextbox_809B294(); if (!CreateHelperPelipperMenu(0x130)) { gUnknown_3001B64->unk430 = -1; return 0; } gUnknown_3001B64->unk418 = &gUnknown_8116258; return 1; case 0x20: PlayMenuSoundEffect(4); gUnknown_3001B64->unk418 = &gUnknown_8116268; return 1; case 0x21: PlayMenuSoundEffect(4); gUnknown_3001B64->unk418 = &gUnknown_8116278; return 1; case 0x22: { u8 local_34; u32 local_30; s32 local_2c; struct unkStruct_8096AF8 local_28; if (sub_8099328(&local_34)) { GetScriptVarScenario(2,&local_30,&local_2c); while (local_2c < 8) { sub_8096AF8(&local_28,local_2c,local_34); if (local_28.unk0) { ScenarioCalc(2,local_30,local_2c); gUnknown_3001B64->unk430 = (local_28.clientSpecies == 0 ? 0 : 1) + ((local_28.targetSpecies != 0) ? 2 : 0); if (gUnknown_3001B64->unk430 != 0) { return 0; } else { gUnknown_3001B64->unk430 = 3; return 0; } } local_2c++; } } gUnknown_3001B64->unk430 = 0; sub_8096BD0(); ScenarioCalc(2,0,0); return 0; } case 0x23: { u32 local_20; u32 local_1c; struct unkStruct_8096AF8 local_18; u8 local_33; if (!sub_8099328(&local_33)) { return 0; } GetScriptVarScenario(2,&local_20,&local_1c); sub_8096AF8(&local_18,local_1c,local_33); if (!local_18.unk0) { return 0; } else if (!sub_802DB28(local_1c,local_33)) { return 0; } else { s32 iVar14 = GetScriptVarValue(0,0x19); if (iVar14 < 100) { SetScriptVarValue(0,0x19,iVar14 + 1); } SetScriptVarValue(0,0x39,1); ScenarioCalc(2,local_20,local_1c + 1); gUnknown_3001B64->unk418 = &gUnknown_8116288; return 1; } } case 0x24: if (gUnknown_3001B64->unk420 == 1) { u32 uVar19 = sub_80023E4(4) == 0 ? 0 : 4; ResetTextbox_809B294(); if (MakuhitaDojo_New(uVar19)) { return 1; } else { gUnknown_3001B64->unk430 = -1; return 0; } } else { switch(HandleMakuhitaDojoState()) { default: return 1; case 3: gUnknown_3001B64->unk430 = sub_802FED0(); MakuhitaDojo_Delete(); return 0; case 2: gUnknown_3001B64->unk430 = -1; MakuhitaDojo_Delete(); return 0; } } return 0; case 0x25: { s32 var = 1; if (sub_80023E4(4)) { var = 5; } ResetTextbox_809B294(); if (MakuhitaDojo_New(var)) { gUnknown_3001B64->unk418 = &gUnknown_8116298; return 1; } else { gUnknown_3001B64->unk430 = -1; return 0; } } case 0x26: { s32 var = 2; if (sub_80023E4(4)) { var = 6; } ResetTextbox_809B294(); if (MakuhitaDojo_New(var)) { gUnknown_3001B64->unk418 = &gUnknown_81162A8; return 1; } else { gUnknown_3001B64->unk430 = -1; return 0; } } case 0x27: { s32 var = 3; if (sub_80023E4(4)) { var = 7; } ResetTextbox_809B294(); if (MakuhitaDojo_New(var)) { gUnknown_3001B64->unk418 = &gUnknown_81162B8; return 1; } else { gUnknown_3001B64->unk430 = -1; return 0; } } case 0x28: gUnknown_3001B64->unk418 = &gUnknown_81162C8; return 1; case 0x29: gUnknown_3001B64->unk418 = &gUnknown_81162D8; return 1; case 0x2a: ResetTextbox_809B294(); if (sub_803B050()) { sub_803B100(gUnknown_3001B64->unk5A4); gUnknown_3001B64->unk418 = &gUnknown_81162E8; return 1; } gUnknown_3001B64->unk430 = -1; return 0; case 0x12: gUnknown_3001B64->unk430 = 1; break; case 0x14: case 0x15: ResetTextbox_809B294(); return 0; case 0x16: if (CreateFriendListMenu(2)) { gUnknown_3001B64->unk418 = &gUnknown_81162F8; return 1; } gUnknown_3001B64->unk430 = -2; return 0; case 0x2b: gUnknown_3001B64->unk430 = sub_809CCDC(gUnknown_3001B64->unk424,gUnknown_3001B64->unk428); gUnknown_3001B64->unk418 = &gUnknown_8116308; return 1; case 0x2c: { s32 uVar13 = gUnknown_3001B64->unk428; u8 uVar1 = gUnknown_3001B64->unk424; ResetTextbox_809B294(); if (sub_801B60C(uVar13,uVar1,1)) { gUnknown_3001B64->unk418 = &gUnknown_8116318; return 1; } else { gUnknown_3001B64->unk430 = -1; return 0; } } case 0x2d: if (gUnknown_3001B64->unk420 == 1) { ResetTextbox_809B294(); ShowWindows(NULL, 1, 1); if (sub_801A5D8(0,0,NULL,10)) { return 1; } else { gUnknown_3001B64->unk430 = -1; return 0; } } else { switch(sub_801A6E8(TRUE)) { case 3: { s32 itemArrayId = sub_801A8AC(); s32 itemId = gTeamInventoryRef->teamItems[itemArrayId].id; if (IsEdibleItem(itemId)) { BufferItemName(gFormatBuffer_Items[0],itemId,0); ShiftItemsDownFrom(itemArrayId); gUnknown_3001B64->unk430 = 1; } else { gUnknown_3001B64->unk430 = -1; } sub_801A928(); return 0; } case 2: gUnknown_3001B64->unk430 = -1;sub_801A928();return 0; return 0; default: return 1; } } break; case 0x2E: if (gUnknown_3001B64->unk420 == 1) { ResetTextbox_809B294(); if (DrawCredits(gUnknown_3001B64->unk424, gUnknown_3001B64->unk428)) { return 1; } gUnknown_3001B64->unk430 = -1; return 0; } else { switch (sub_8035574()) { case 2: case 3: gUnknown_3001B64->unk430 = -1; sub_803565C(); return 0; default: return 1; } } break; } return 0; } void sub_809C39C(void) { gUnknown_3001B64->unk430 = sub_801D178(); if(gUnknown_3001B64->unk430 == 3) GroundMainGroundRequest(sub_8002694(sub_801D1D4()), 0, -1); sub_801D1E0(); } void sub_809C3D8(void) { gUnknown_3001B64->unk430 = sub_801D178(); if(gUnknown_3001B64->unk430 == 3) GroundMainGroundRequest(sub_8002694(sub_801D1D4()), 0, -1); sub_801D1E0(); } void sub_809C414(void) { u8 val; val = sub_802540C(); if(val != 0) { gUnknown_3001B64->unk430 = val; GroundMainGroundRequest(sub_8002694(val), 0, -1); } else { gUnknown_3001B64->unk430 = -1; } CleanFriendListMenu(); } void sub_809C464(void) { DeleteTestTracker(); sub_8001064(); sub_809965C(); } void sub_809C478(void) { s32 temp; s32 temp1; if(sub_80356A0() == 0x3) { PlaySound(0x313); InitFlash(); ClearFlashData(); } sub_8035758(); GetScriptVarScenario(SCENARIO_MAIN, &temp, &temp1); sub_80993C0(0); } void sub_809C4B0(void) { s16 scriptIndex_s16; s32 scriptIndex = -1; if (gUnknown_3001B64->unk430 == 0) { scriptIndex = (s16) sub_803B168(); ASM_MATCH_TRICK(gUnknown_3001B64->unk5A4); scriptIndex_s16 = scriptIndex; gUnknown_3001B64->unk5A4 = scriptIndex_s16; gUnknown_3001B64->unk430 = scriptIndex; } else { gUnknown_3001B64->unk430 = -1; } sub_803B1BC(); if (scriptIndex != -1) GroundMap_ExecuteEvent(scriptIndex, 0); } void sub_809C504(void) { u8 temp; if(sub_80282DC(&temp) == 1) { sub_809927C(temp); gUnknown_3001B64->unk430 = 1; } else { gUnknown_3001B64->unk430 = -1; } sub_80282FC(); } void sub_809C550(void) { u32 ret; s32 val; ret = sub_802E90C(); val = 0; sub_802E918(); switch(ret) { case 1: if(ScriptVarScenarioBefore(SCENARIO_SUB1, 0x1D, 0x3)) val = 1; break; case 2: if(ScriptVarScenarioBefore(SCENARIO_SUB1, 0x1F, 0x2)) val = 2; break; case 3: if(ScriptVarScenarioBefore(SCENARIO_SUB8, 0x33, 0x8)) val = 3; break; } gUnknown_3001B64->unk430 = val; }