diff options
Diffstat (limited to 'src/main_menu.c')
-rw-r--r-- | src/main_menu.c | 1662 |
1 files changed, 1662 insertions, 0 deletions
diff --git a/src/main_menu.c b/src/main_menu.c new file mode 100644 index 000000000..692267c64 --- /dev/null +++ b/src/main_menu.c @@ -0,0 +1,1662 @@ +#include "global.h" +#include "text.h" +#include "sprite.h" +#include "task.h" +#include "main.h" +#include "rtc.h" +#include "songs.h" +#include "palette.h" +#include "string_util.h" +#include "species.h" +#include "pokemon.h" + +extern u8 MenuUpdateWindowText(void); +extern void MenuPrint(u8 *, u8, u8); +extern void CB2_ContinueSavedGame(void); +extern void CB2_InitMysteryEventMenu(void); +extern void CB2_InitOptionMenu(void); +extern void CB2_InitTitleScreen(void); +extern void FormatPlayTime(u8 *str, u16 hours, u16 minutes, bool16 colon); +extern u8 *sub_8072C74(u8 *, u8 *, u8, u8); +extern u16 GetPokedexSeenCount(void); +extern u8 *sub_8072C14(u8 *, s32, u8, u8); +extern u8 sub_80729D8(u8 *, u8, u16, u8); +extern u8 GetBadgeCount(void); +extern void Task_Birch1(u8); +void MenuPrintMessage(const u8 *string, u8 a, u8 b); +u8 MenuUpdateWindowText_OverrideLineLength(u8 a); +void sub_8072DEC(void); +u8 sub_8075374(void); +void MenuSetText(u32); +void cry_related(u16, u8); +void audio_play(u8 a); +void MenuZeroFillWindowRect(u8 a, u8 b, u8 c, u8 d); +u8 GetMenuCursorPos(void); +void DoNamingScreen(u8 r0, struct SaveBlock2 *r1, u16 r2, u16 r3, u8 s0, MainCallback s4); +void DisplayYesNoMenu(u8 r0, u8 r1, u32 r2); +s8 ProcessMenuInputNoWrap_(void); +void c2_load_new_map_2(void); +void LZ77UnCompVram(const void *src, void *dest); +void InitMenuWindow(const struct WindowConfig *); +void CB2_MainMenu(void); +void VBlankCB_MainMenu(void); +void DecompressPicFromTable_2(const struct SpriteSheet *, u8, u8, void *, void *, u32); +void LoadCompressedObjectPalette(const struct SpritePalette *); +u8 AddNewGameBirchObject(u8, u8, u8); +u8 sub_80859BC(u8, u16, u16, u8, void *); +void MenuDrawTextWindow(u8 a, u8 b, u8 c, u8 d); + +extern struct PaletteFadeControl gPaletteFade; +extern u8 gSaveFileDeletedMessage[]; +extern u8 gSaveFileCorruptMessage[]; +extern u8 gBoardNotInstalledMessage[]; +extern u8 gBatteryDryMessage[]; +extern u16 gSaveFileStatus; +extern u8 gMainMenuString_Continue[]; +extern u8 gMainMenuString_NewGame[]; +extern u8 gMainMenuString_MysteryEvents[]; +extern u8 gMainMenuString_Option[]; +extern u8 gMainMenuString_Player[]; +extern u8 gMainMenuString_Time[]; +extern u8 gMainMenuString_Pokedex[]; +extern u8 gMainMenuString_Badges[]; + +void CB2_MainMenu(void); +void VBlankCB_MainMenu(void); +void CB2_InitMainMenu(void); +static void sub_80096FC(void); +static u32 InitMainMenu(bool8 a1); +static void Task_CheckSave(u8 taskId); +static void Task_WaitForSaveErrorAck(u8 taskId); +static void Task_CheckRtc(u8 taskId); +static void Task_WaitForRtcErrorAck(u8 taskId); +static void Task_DrawMainMenu(u8 taskId); +static void Task_HighlightCurrentMenuItem(u8 taskId); +static bool8 MainMenuProcessKeyInput(u8 taskId); +static void Task_MainMenuProcessKeyInput(u8 taskId); +static void MainMenuPressedA(u8 taskId); +static void MainMenuPressedB(u8 taskId); +static void HighlightCurrentMenuItem(u8, u8); +static void PrintMainMenuItem(u8 *text, u8, u8); +static void PrintSaveFileInfo(void); +static void PrintPlayerName(void); +static void PrintPlayTime(void); +static void PrintPokedexCount(void); +static void PrintBadgeCount(void); + +extern u16 gMainMenuPalette[]; + +void CB2_MainMenu(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void VBlankCB_MainMenu(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void CB2_InitMainMenu(void) +{ + InitMainMenu(FALSE); +} + +static void sub_80096FC(void) +{ + InitMainMenu(TRUE); +} + +u32 InitMainMenu(u8 a1) +{ + u16 savedIme; + u8 taskId; + + SetVBlankCallback(NULL); + + REG_DISPCNT = 0; + REG_BG2CNT = 0; + REG_BG1CNT = 0; + REG_BG0CNT = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + + DmaFill16(3, 0, (void *)VRAM, VRAM_SIZE); + DmaFill32(3, 0, (void *)OAM, OAM_SIZE); + DmaFill16(3, 0, (void *)(PLTT + 2), PLTT_SIZE - 2); + + ResetPaletteFade(); + LoadPalette(gMainMenuPalette, 0, 32); + remove_some_task(); + ResetTasks(); + ResetSpriteData(); + FreeAllSpritePalettes(); + SetUpWindowConfig(&gWindowConfig_81E6C3C); + InitMenuWindow(&gWindowConfig_81E6CE4); + + if (a1) + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0x0000); // fade to black + else + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0xFFFF); // fade to white + + REG_WIN0H = 0; + REG_WIN0V = 0; + REG_WININ = 0; + REG_WINOUT = 0; + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BLDY = 0; + + savedIme = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_VBLANK; + REG_IME = savedIme; + + SetVBlankCallback(VBlankCB_MainMenu); + SetMainCallback2(CB2_MainMenu); + + REG_DISPCNT = DISPCNT_OBJ_1D_MAP + | DISPCNT_BG0_ON + | DISPCNT_OBJ_ON + | DISPCNT_WIN0_ON; + + taskId = CreateTask(Task_CheckSave, 0); + gTasks[taskId].data[1] = 0; + + return 0; +} + +void Task_CheckSave(u8 taskId) +{ + if (gPaletteFade.active) + return; + + REG_WIN0H = 0; + REG_WIN0V = 0; + REG_WININ = 0x1111; + REG_WINOUT = 49; + REG_BLDCNT = 241; + REG_BLDALPHA = 0; + REG_BLDY = 7; + + switch (gSaveFileStatus) + { + case 1: + if (sub_806918C() == TRUE) + gTasks[taskId].data[0] = 2; + else + gTasks[taskId].data[0] = 1; + + gTasks[taskId].func = Task_CheckRtc; + break; + case 2: + MenuDrawTextWindow(2, 14, 27, 19); + MenuPrintMessage(gSaveFileDeletedMessage, 3, 15); + REG_WIN0H = WIN_RANGE(17, 223); + REG_WIN0V = WIN_RANGE(113, 159); + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = Task_WaitForSaveErrorAck; + break; + case 255: + MenuDrawTextWindow(2, 14, 27, 19); + MenuPrintMessage(gSaveFileCorruptMessage, 3, 15); + REG_WIN0H = WIN_RANGE(17, 223); + REG_WIN0V = WIN_RANGE(113, 159); + gTasks[taskId].data[0] = 1; + gTasks[taskId].func = Task_WaitForSaveErrorAck; + + if (sub_806918C() == TRUE) + gTasks[taskId].data[0] = 2; + else + gTasks[taskId].data[0] = 1; + break; + case 0: + default: + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = Task_CheckRtc; + break; + case 4: + MenuDrawTextWindow(2, 14, 27, 19); + MenuPrintMessage(gBoardNotInstalledMessage, 3, 15); + REG_WIN0H = WIN_RANGE(17, 223); + REG_WIN0V = WIN_RANGE(113, 159); + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = Task_WaitForSaveErrorAck; + return; + } +} + +void Task_WaitForSaveErrorAck(u8 taskId) +{ + if (MenuUpdateWindowText()) + { + if (gMain.newKeys & A_BUTTON) + { + MenuZeroFillWindowRect(2, 14, 27, 19); + gTasks[taskId].func = Task_CheckRtc; + } + } +} + +void Task_CheckRtc(u8 taskId) +{ + if (!gPaletteFade.active) + { + REG_WIN0H = 0; + REG_WIN0V = 0; + REG_WININ = 0x1111; + REG_WINOUT = 49; + REG_BLDCNT = 241; + REG_BLDALPHA = 0; + REG_BLDY = 7; + + if (!(RtcGetErrorStatus() & RTC_ERR_FLAG_MASK)) + { + gTasks[taskId].func = Task_DrawMainMenu; + } + else + { + MenuDrawTextWindow(2, 14, 27, 19); + MenuPrintMessage(gBatteryDryMessage, 3, 15); + REG_WIN0H = WIN_RANGE(17, 223); + REG_WIN0V = WIN_RANGE(113, 159); + gTasks[taskId].func = Task_WaitForRtcErrorAck; + } + } +} + +void Task_WaitForRtcErrorAck(u8 taskId) +{ + if (MenuUpdateWindowText()) + { + if ( gMain.newKeys & 1 ) + { + MenuZeroFillWindowRect(2, 14, 27, 19); + gTasks[taskId].func = Task_DrawMainMenu; + } + } +} + +void Task_DrawMainMenu(u8 taskId) +{ + u16 palette; + + if (!gPaletteFade.active) + { + REG_WIN0H = 0; + REG_WIN0V = 0; + REG_WININ = 0x1111; + REG_WINOUT = 49; + REG_BLDCNT = 241; + REG_BLDALPHA = 0; + REG_BLDY = 7; + + palette = RGB(0, 0, 0); + LoadPalette(&palette, 254, 2); + + if (gSaveBlock2.playerGender == MALE) + { + palette = RGB(4, 16, 31); + LoadPalette(&palette, 241, 2); + } + else + { + palette = RGB(31, 3, 21); + LoadPalette(&palette, 241, 2); + } + + switch (gTasks[taskId].data[0]) + { + case 0: + default: + MenuDrawTextWindow(1, 0, 28, 3); + PrintMainMenuItem(gMainMenuString_NewGame, 2, 1); + MenuDrawTextWindow(1, 4, 28, 7); + PrintMainMenuItem(gMainMenuString_Option, 2, 5); + break; + case 1: + MenuDrawTextWindow(1, 0, 28, 7); + PrintMainMenuItem(gMainMenuString_Continue, 2, 1); + MenuDrawTextWindow(1, 8, 28, 11); + PrintMainMenuItem(gMainMenuString_NewGame, 2, 9); + MenuDrawTextWindow(1, 12, 28, 15); + PrintMainMenuItem(gMainMenuString_Option, 2, 13); + PrintSaveFileInfo(); + break; + case 2: + MenuDrawTextWindow(1, 0, 28, 7); + PrintMainMenuItem(gMainMenuString_Continue, 2, 1); + MenuDrawTextWindow(1, 8, 28, 11); + PrintMainMenuItem(gMainMenuString_NewGame, 2, 9); + MenuDrawTextWindow(1, 12, 28, 15); + PrintMainMenuItem(gMainMenuString_MysteryEvents, 2, 13); + MenuDrawTextWindow(1, 16, 28, 19); + PrintMainMenuItem(gMainMenuString_Option, 2, 0x11); + PrintSaveFileInfo(); + break; + } + + gTasks[taskId].func = Task_HighlightCurrentMenuItem; + } +} + +void Task_HighlightCurrentMenuItem(u8 taskId) +{ + HighlightCurrentMenuItem(gTasks[taskId].data[0], gTasks[taskId].data[1]); + gTasks[taskId].func = Task_MainMenuProcessKeyInput; +} + +bool8 MainMenuProcessKeyInput(u8 taskId) +{ + if (gMain.newKeys & A_BUTTON) + { + audio_play(SE_SELECT); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0x0000); + gTasks[taskId].func = MainMenuPressedA; + } + else if (gMain.newKeys & B_BUTTON) + { + audio_play(SE_SELECT); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0xFFFF); + REG_WIN0H = WIN_RANGE(0, 240); + REG_WIN0V = WIN_RANGE(0, 160); + gTasks[taskId].func = MainMenuPressedB; + } + else + { + s32 menuItemCount; + + switch (gTasks[taskId].data[0]) + { + case 0: + default: + menuItemCount = 2; + break; + case 1: + menuItemCount = 3; + break; + case 2: + menuItemCount = 4; + break; + } + + if (gMain.newKeys & DPAD_UP) + { + if (gTasks[taskId].data[1] > 0) + { + gTasks[taskId].data[1]--; + return TRUE; + } + } + if (gMain.newKeys & DPAD_DOWN) + { + if (gTasks[taskId].data[1] < menuItemCount - 1) + { + gTasks[taskId].data[1]++; + return TRUE; + } + } + } + + return FALSE; +} + +void Task_MainMenuProcessKeyInput(u8 taskId) +{ + bool8 currentMenuItemChanged = MainMenuProcessKeyInput(taskId); + if (currentMenuItemChanged) + gTasks[taskId].func = Task_HighlightCurrentMenuItem; +} + +void MainMenuPressedA(u8 taskId) +{ + enum + { + NEW_GAME, + CONTINUE, + OPTION, + MYSTERY_EVENTS, + } action; + + if (gPaletteFade.active) + return; + + switch (gTasks[taskId].data[0]) + { + case 0: + default: + switch (gTasks[taskId].data[1]) + { + case 0: + default: + action = NEW_GAME; + break; + case 1: + action = OPTION; + break; + } + break; + case 1: + switch (gTasks[taskId].data[1]) + { + case 0: + default: + action = CONTINUE; + break; + case 1: + action = NEW_GAME; + break; + case 2: + action = OPTION; + break; + } + break; + case 2: + switch (gTasks[taskId].data[1]) + { + case 0: + default: + action = CONTINUE; + break; + case 1: + action = NEW_GAME; + break; + case 2: + action = MYSTERY_EVENTS; + break; + case 3: + action = OPTION; + break; + } + break; + } + + switch ((int)action) + { + case NEW_GAME: + default: + gPlttBufferUnfaded[0] = 0; + gPlttBufferFaded[0] = 0; + gTasks[taskId].func = Task_Birch1; + break; + case CONTINUE: + gPlttBufferUnfaded[0] = 0; + gPlttBufferFaded[0] = 0; + SetMainCallback2(CB2_ContinueSavedGame); + DestroyTask(taskId); + break; + case OPTION: + gMain.field_8 = (u32)sub_80096FC; + SetMainCallback2(CB2_InitOptionMenu); + DestroyTask(taskId); + break; + case MYSTERY_EVENTS: + SetMainCallback2(CB2_InitMysteryEventMenu); + DestroyTask(taskId); + break; + } +} + +void MainMenuPressedB(u8 taskId) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(CB2_InitTitleScreen); + DestroyTask(taskId); + } +} + +void HighlightCurrentMenuItem(u8 layout, u8 menuItem) +{ + REG_WIN0H = WIN_RANGE(9, 231); + + switch (layout) + { + case 0: + default: + switch (menuItem) + { + case 0: + default: + REG_WIN0V = WIN_RANGE(1, 31); + break; + case 1: + REG_WIN0V = WIN_RANGE(33, 63); + break; + } + break; + case 1: + switch (menuItem) + { + case 0: + default: + REG_WIN0V = WIN_RANGE(1, 63); + break; + case 1: + REG_WIN0V = WIN_RANGE(65, 95); + break; + case 2: + REG_WIN0V = WIN_RANGE(97, 127); + break; + } + break; + case 2: + switch (menuItem) + { + case 0: + default: + REG_WIN0V = WIN_RANGE(1, 63); + break; + case 1: + REG_WIN0V = WIN_RANGE(65, 95); + break; + case 2: + REG_WIN0V = WIN_RANGE(97, 127); + break; + case 3: + REG_WIN0V = WIN_RANGE(129, 159); + break; + } + break; + } +} + +void PrintMainMenuItem(u8 *text, u8 left, u8 top) +{ + u8 i; + u8 buffer[32]; + + buffer[0] = 0xFC; + buffer[1] = 1; + buffer[2] = 14; + + for (i = 0; i < 26; i++) + buffer[3 + i] = text[i]; + + buffer[29] = EOS; + + MenuPrint(buffer, left, top); +} + +void PrintSaveFileInfo(void) +{ + PrintPlayerName(); + PrintPokedexCount(); + PrintPlayTime(); + PrintBadgeCount(); +} + +void PrintPlayerName(void) +{ + MenuPrint(gMainMenuString_Player, 2, 3); + MenuPrint(gSaveBlock2.playerName, 9, 3); +} + +void PrintPlayTime(void) +{ + u8 playTime[16]; + u8 alignedPlayTime[32]; + + MenuPrint(gMainMenuString_Time, 16, 3); + FormatPlayTime(playTime, gSaveBlock2.playTimeHours, gSaveBlock2.playTimeMinutes, 1); + sub_8072C74(alignedPlayTime, playTime, 48, 1); + MenuPrint(alignedPlayTime, 22, 3); +} + +void PrintPokedexCount(void) +{ + u8 buffer[16]; + + MenuPrint(gMainMenuString_Pokedex, 2, 5); + sub_8072C14(buffer, GetPokedexSeenCount(), 18, 0); + MenuPrint(buffer, 9, 5); +} + +void PrintBadgeCount(void) +{ + u8 buffer[16]; + + MenuPrint(gMainMenuString_Badges, 16, 5); + ConvertIntToDecimalString(buffer, GetBadgeCount()); + sub_80729D8(buffer, 205, 40, 1); +} + +//Text Strings +extern const u8 gUnknown_081C6D78[]; //Hi! Sorry to keep you waiting!... +extern const u8 gUnknown_081C6DF8[]; +extern const u8 gUnknown_081C6E1A[]; +extern const u8 gUnknown_081C6FCB[]; +extern const u8 gUnknown_081C6FD8[]; +extern const u8 gUnknown_081C6FFA[]; +extern u8 gUnknown_081C7017[]; +extern u8 gUnknown_081C7025[]; +extern u8 gUnknown_081C7074[]; + +struct MonCoords +{ + u8 x, y; +}; + +extern const struct MonCoords gMonFrontPicCoords[]; +extern const struct SpriteSheet gMonFrontPicTable[]; +extern const struct SpritePalette gMonPaletteTable[]; +extern struct SpriteTemplate gUnknown_02024E8C; +extern void * const gUnknown_081FAF4C[]; +extern u16 gUnknown_081E795C[]; +extern u8 * const gUnknown_081E79B0[][2]; +extern u8 * const gUnknown_081E79C0[][2]; +extern u8 * const gUnknown_081E79E8[][2]; + +extern const u8 gUnknown_081E764C[]; +extern const u8 gUnknown_081E768C[]; +extern const u8 gUnknown_081E7834[]; +extern const u8 gUnknown_081E796C[]; +extern const u8 gUnknown_0840DFF7[]; + +extern u8 gSpriteAffineAnimTable_81E79AC[]; + +extern struct Sprite gSprites[]; +extern u8 gStringVar4[]; + +extern u8 unk_2000000[]; + +void task_new_game_prof_birch_speech_2(u8 taskId); +void task_new_game_prof_birch_speech_3(u8 taskId); +void task_new_game_prof_birch_speech_4(u8 taskId); +void task_new_game_prof_birch_speech_5(u8 taskId); +void task_new_game_prof_birch_speech_6(u8 taskId); +void task_new_game_prof_birch_speech_7(u8 taskId); +void task_new_game_prof_birch_speech_8(u8 taskId); +void task_new_game_prof_birch_speech_9(u8 taskId); +void task_new_game_prof_birch_speech_10(u8 taskId); +void task_new_game_prof_birch_speech_11(u8 taskId); +void task_new_game_prof_birch_speech_12(u8 taskId); +void task_new_game_prof_birch_speech_13(u8 taskId); +void task_new_game_prof_birch_speech_14(u8 taskId); +void task_new_game_prof_birch_speech_15(u8 taskId); +void task_new_game_prof_birch_speech_16(u8 taskId); +void task_new_game_prof_birch_speech_17(u8 taskId); +void task_new_game_prof_birch_speech_18(u8 taskId); +void sub_800A974(u8 taskId); +void Task_800A9B4(u8 taskId); +void sub_800A9EC(u8 taskId); +void sub_800AAAC(u8 taskId); +void task_new_game_prof_birch_speech_part2_1(u8 taskId); +void sub_800AB38(u8 taskId); +void task_new_game_prof_birch_speech_part2_4(u8 taskId); +void sub_800AC20(u8 taskId); +void task_new_game_prof_birch_speech_part2_6(u8 taskId); +void task_new_game_prof_birch_speech_part2_7(u8 taskId); +void task_new_game_prof_birch_speech_part2_8(u8 taskId); +void task_new_game_prof_birch_speech_part2_9(u8 taskId); +void task_new_game_prof_birch_speech_part2_10(u8 taskId); +void sub_800AFC0(u8 taskId); +void sub_800B034(u8 taskId); +void new_game_prof_birch_speech_part2_start(); +void nullsub_34(struct Sprite *sprite); +void sub_800B240(struct Sprite *sprite); +u8 CreateAzurillSprite(u8, u8); +void AddBirchSpeechObjects(u8); +void sub_800B3EC(u8); +void sub_800B458(u8, u8); +void sub_800B4C8(u8); +void sub_800B534(u8 taskId, u8 a); +void sub_800B5A8(u8); +void sub_800B614(u8, u8); +void sub_800B654(u8); +void sub_800B6C0(u8 taskId, u8 a); +void CreateGenderMenu(u8 left, u8 top); +s8 GenderMenuProcessInput(void); +void CreateNameMenu(u8 a, u8 b); +s8 NameMenuProcessInput(void); +void set_default_player_name(u8 a); + +void Task_Birch1(u8 taskId) +{ + SetUpWindowConfig(&gWindowConfig_81E6C3C); + InitMenuWindow(&gWindowConfig_81E6CE4); + REG_WIN0H = 0; + REG_WIN0V = 0; + REG_WININ = 0; + REG_WINOUT = 0; + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BLDY = 0; + LZ77UnCompVram(gUnknown_081E768C, (void *)BG_VRAM); + LZ77UnCompVram(gUnknown_081E7834, (void *)(BG_VRAM + 0x3800)); + LoadPalette(gUnknown_081E764C, 0, 0x40); + LoadPalette(gUnknown_081E796C, 1, 0x10); + remove_some_task(); + ResetSpriteData(); + FreeAllSpritePalettes(); + AddBirchSpeechObjects(taskId); + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); + REG_BG1CNT = 0x00000703; + REG_DISPCNT = DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP; + gTasks[taskId].data[4] = 0; + gTasks[taskId].func = task_new_game_prof_birch_speech_2; + gTasks[taskId].data[2] = 0xFF; + gTasks[taskId].data[3] = 0xFF; + gTasks[taskId].data[7] = 0xD8; + + sub_8075474(BGM_DOORO_X4); +} + +void task_new_game_prof_birch_speech_2(u8 taskId) +{ + struct Task *tasks = gTasks; + struct Task *task = &tasks[taskId]; + + if (task->data[7] != 0) + { + task->data[7]--; + } + else + { + u8 spriteId = task->data[8]; + struct Sprite *sprites = gSprites; + struct Sprite *sprite = &sprites[spriteId]; + sprite->pos1.x = 0x88; + sprite->pos1.y = 0x3C; + sprite->invisible = 0; + sprite->oam.objMode = 1; + sub_800B534(taskId, 0xA); + sub_800B6C0(taskId, 0x14); + task->data[7] = 0x50; + task->func = task_new_game_prof_birch_speech_3; + } +} + +void task_new_game_prof_birch_speech_3(u8 taskId) +{ + struct Task *tasks = gTasks; + struct Task *task = &tasks[taskId]; + + if (task->data[5] != 0) + { + struct Sprite *sprites = gSprites; + struct Sprite *sprite = &sprites[task->data[8]]; + + sprite->oam.objMode = 0; + if (task->data[7]) + { + task->data[7]--; + } + else + { + MenuDrawTextWindow(0x2, 0xD, 0x1B, 0x12); + MenuPrintMessage(gUnknown_081C6D78, 3, 14); + task->func = task_new_game_prof_birch_speech_4; + } + } +} + +void task_new_game_prof_birch_speech_4(u8 taskId) +{ + if (!gPaletteFade.active && MenuUpdateWindowText_OverrideLineLength(24)) + { + gTasks[taskId].func = task_new_game_prof_birch_speech_5; + MenuPrintMessage(gUnknown_081C6DF8, 3, 14); + } +} + +void task_new_game_prof_birch_speech_5(u8 taskId) +{ + if (MenuUpdateWindowText_OverrideLineLength(24)) + gTasks[taskId].func = task_new_game_prof_birch_speech_6; +} + +void task_new_game_prof_birch_speech_6(u8 taskId) +{ + struct Task *tasks = gTasks; + struct Task *task = &tasks[taskId]; + u8 data = task->data[9]; + struct Sprite *sprites = gSprites; + struct Sprite *sprite = &sprites[data]; + + sprite->pos1.x = 0x68; + sprite->pos1.y = 0x48; + sprite->invisible = 0; + sprite->data0 = 0; + CreatePokeballSprite(data, sprite->oam.paletteNum, 0x70, 0x3A, 0, 0, 0x20, 0x0000FFFF); + task->func = task_new_game_prof_birch_speech_7; + task->data[7] = 0; +} + +void task_new_game_prof_birch_speech_7(u8 taskId) +{ + struct Task *tasks; + struct Task *task; + + if (sub_8075374()) + { + struct Task *tasks = gTasks; + struct Task *task = &tasks[taskId]; + + if (task->data[7] > 0x5F) + { + MenuSetText((u32)&gUnknown_0840DFF7); + task->func = task_new_game_prof_birch_speech_8; + } + } + + tasks = gTasks; + task = &tasks[taskId]; + + if (task->data[7] < 0x4000) + { + task->data[7]++; + if (task->data[7] == 0x20) + { + cry_related(SPECIES_AZURILL, 0); + } + } +} + +void task_new_game_prof_birch_speech_8(u8 taskId) +{ + if (MenuUpdateWindowText_OverrideLineLength(24)) + { + MenuPrintMessage(gUnknown_081C6E1A, 3, 14); + gTasks[taskId].func = task_new_game_prof_birch_speech_9; + } +} + +void task_new_game_prof_birch_speech_9(u8 taskId) +{ + if (MenuUpdateWindowText_OverrideLineLength(24)) + { + MenuDrawTextWindow(0x2, 0xD, 0x1B, 0x12); + MenuPrintMessage(gUnknown_081C6FCB, 3, 14); + gTasks[taskId].func = task_new_game_prof_birch_speech_10; + } +} + +void task_new_game_prof_birch_speech_10(u8 taskId) +{ + if (MenuUpdateWindowText_OverrideLineLength(24)) + { + struct Sprite *sprites = gSprites; + struct Task *tasks = gTasks; + struct Task *task = &tasks[taskId]; + struct Sprite *sprite = &sprites[task->data[8]]; + struct Sprite *sprite2; + + sprite->oam.objMode = 1; + sprite2 = &sprites[task->data[9]]; + sprite2->oam.objMode = 1; + sub_800B458(taskId, 0x2); + sub_800B614(taskId, 0x1); + task->data[7] = 0x40; + task->func = task_new_game_prof_birch_speech_11; + } +} + +void task_new_game_prof_birch_speech_11(u8 taskId) +{ + struct Task *tasks = gTasks; + struct Task *task = &tasks[taskId]; + + if (task->data[4] != -0x3C) + { + task->data[4] -= 2; + REG_BG1HOFS = task->data[4]; + } + else + { + task->data[4] = 0x0000ffc4; + task->func = task_new_game_prof_birch_speech_12; + } +} + +void task_new_game_prof_birch_speech_12(u8 taskId) +{ + if (gTasks[taskId].data[5]) + { + gSprites[gTasks[taskId].data[8]].invisible = 1; + gSprites[gTasks[taskId].data[9]].invisible = 1; + + if (gTasks[taskId].data[7]) + { + gTasks[taskId].data[7]--; + } + else + { + u8 data10 = gTasks[taskId].data[10]; + + gSprites[data10].pos1.x = 0xB4; + gSprites[data10].pos1.y = 0x3C; + gSprites[data10].invisible = 0; + gSprites[data10].oam.objMode = 1; + gTasks[taskId].data[2] = data10; + gTasks[taskId].data[6] = 0; + sub_800B534(taskId, 2); + sub_800B6C0(taskId, 1); + gTasks[taskId].func = task_new_game_prof_birch_speech_13; + } + } +} + +void task_new_game_prof_birch_speech_13(u8 taskId) +{ + struct Task *tasks = gTasks; + struct Task *task = &tasks[taskId]; + + if (task->data[5]) + { + struct Sprite *sprites = gSprites; + struct Sprite *sprite = &sprites[task->data[2]]; + + sprite->oam.objMode = 0; + task->func = task_new_game_prof_birch_speech_14; + } +} + +void task_new_game_prof_birch_speech_14(u8 taskId) +{ + MenuDrawTextWindow(2, 0xD, 0x1B, 0x12); + MenuPrintMessage(gUnknown_081C6FD8, 3, 14); + gTasks[taskId].func = task_new_game_prof_birch_speech_15; +} + +void task_new_game_prof_birch_speech_15(u8 taskId) +{ + if (MenuUpdateWindowText_OverrideLineLength(24)) + { + CreateGenderMenu(2, 4); + gTasks[taskId].func = task_new_game_prof_birch_speech_16; + } +} + +void task_new_game_prof_birch_speech_16(u8 taskId) +{ + u8 cursorPos; + + switch (GenderMenuProcessInput()) + { + case MALE: + sub_8072DEC(); + audio_play(SE_SELECT); + gSaveBlock2.playerGender = MALE; + MenuZeroFillWindowRect(2, 4, 8, 9); + gTasks[taskId].func = sub_800A974; + break; + case FEMALE: + sub_8072DEC(); + audio_play(SE_SELECT); + gSaveBlock2.playerGender = FEMALE; + MenuZeroFillWindowRect(2, 4, 8, 9); + gTasks[taskId].func = sub_800A974; + break; + } + + cursorPos = GetMenuCursorPos(); + + if (cursorPos != gTasks[taskId].data[6]) + { + gTasks[taskId].data[6] = cursorPos; + gSprites[gTasks[taskId].data[2]].oam.objMode = 1; + sub_800B458(taskId, 0); + gTasks[taskId].func = task_new_game_prof_birch_speech_17; + } +} + +void task_new_game_prof_birch_speech_17(u8 taskId) +{ + u8 spriteId = gTasks[taskId].data[2]; + + if (gTasks[taskId].data[5] == 0) + { + gSprites[spriteId].pos1.x += 4; + } + else + { + gSprites[spriteId].invisible = 1; + if (gTasks[taskId].data[6]) + { + spriteId = gTasks[taskId].data[11]; + } + else + { + spriteId = gTasks[taskId].data[10]; + } + + gSprites[spriteId].pos1.x = 0xF0; + gSprites[spriteId].pos1.y = 0x3C; + gSprites[spriteId].invisible = 0; + gTasks[taskId].data[2] = spriteId; + gSprites[spriteId].oam.objMode = 1; + sub_800B534(taskId, 0); + gTasks[taskId].func = task_new_game_prof_birch_speech_18; + } +} + +void task_new_game_prof_birch_speech_18(u8 taskId) +{ + u8 spriteId = gTasks[taskId].data[2]; + + if (gSprites[spriteId].pos1.x > 0xB4) + { + gSprites[spriteId].pos1.x -= 4; + } + else + { + gSprites[spriteId].pos1.x = 0xB4; + if (gTasks[taskId].data[5]) + { + gSprites[spriteId].oam.objMode = 0; + gTasks[taskId].func = task_new_game_prof_birch_speech_16; + } + } +} + +void sub_800A974(u8 taskId) +{ + MenuDrawTextWindow(2, 13, 27, 18); + MenuPrintMessage(gUnknown_081C6FFA, 3, 14); + gTasks[taskId].func = Task_800A9B4; +} + +void Task_800A9B4(u8 taskId) +{ + if (MenuUpdateWindowText_OverrideLineLength(24)) + { + CreateNameMenu(2, 1); + gTasks[taskId].func = sub_800A9EC; + } +} + +void sub_800A9EC(u8 taskId) +{ + s8 n = NameMenuProcessInput(); + + switch (n) + { + case 1: + case 2: + case 3: + case 4: + sub_8072DEC(); + audio_play(SE_SELECT); + MenuZeroFillWindowRect(2, 1, 22, 12); + set_default_player_name(n); + gTasks[taskId].func = task_new_game_prof_birch_speech_part2_1; + break; + case 0: + audio_play(SE_SELECT); + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + gTasks[taskId].func = sub_800AAAC; + break; + case -1: + sub_8072DEC(); + audio_play(SE_SELECT); + MenuZeroFillWindowRect(2, 1, 22, 12); + gTasks[taskId].func = task_new_game_prof_birch_speech_14; + break; + } +} + +void sub_800AAAC(u8 taskId) +{ + if (!gPaletteFade.active) + { + set_default_player_name(1); + DoNamingScreen(0, &gSaveBlock2, gSaveBlock2.playerGender, 0, 0, new_game_prof_birch_speech_part2_start); + } +} + +void task_new_game_prof_birch_speech_part2_1(u8 taskId) +{ + MenuDrawTextWindow(2, 13, 27, 18); + StringExpandPlaceholders(gStringVar4, gUnknown_081C7017); + MenuPrintMessage(gStringVar4, 3, 14); + gTasks[taskId].func = sub_800AB38; +} + +void sub_800AB38(u8 taskId) +{ + if (MenuUpdateWindowText_OverrideLineLength(24)) + { + DisplayYesNoMenu(2, 1, 1); + gTasks[taskId].func = task_new_game_prof_birch_speech_part2_4; + } +} + +void task_new_game_prof_birch_speech_part2_4(u8 taskId) +{ + switch (ProcessMenuInputNoWrap_()) + { + case 0: + audio_play(SE_SELECT); + MenuZeroFillWindowRect(2, 1, 8, 7); + gSprites[gTasks[taskId].data[2]].oam.objMode = ST_OAM_OBJ_BLEND; + sub_800B458(taskId, 2); + sub_800B614(taskId, 1); + gTasks[taskId].func = sub_800AC20; + break; + case -1: + case 1: + audio_play(SE_SELECT); + MenuZeroFillWindowRect(2, 1, 8, 7); + gTasks[taskId].func = task_new_game_prof_birch_speech_14; + break; + } +} + +void sub_800AC20(u8 taskId) +{ + if (gTasks[taskId].data[4]) + { + gTasks[taskId].data[4] += 2; + REG_BG1HOFS = gTasks[taskId].data[4]; + } + else + { + gTasks[taskId].func = task_new_game_prof_birch_speech_part2_6; + } +} + +void task_new_game_prof_birch_speech_part2_6(u8 taskId) +{ + if (gTasks[taskId].data[5]) + { + s16 spriteId; + + spriteId = gTasks[taskId].data[10]; + gSprites[spriteId].invisible = 1; + + spriteId = gTasks[taskId].data[11]; + gSprites[spriteId].invisible = 1; + + spriteId = (u8)gTasks[taskId].data[8]; + gSprites[spriteId].pos1.x = 0x88; + gSprites[spriteId].pos1.y = 0x40; + gSprites[spriteId].invisible = 0; + gSprites[spriteId].oam.objMode = 1; + + spriteId = (u8)gTasks[taskId].data[9]; + gSprites[spriteId].pos1.x = 0x68; + gSprites[spriteId].pos1.y = 0x48; + gSprites[spriteId].invisible = 0; + gSprites[spriteId].oam.objMode = 1; + + sub_800B534(taskId, 2); + sub_800B6C0(taskId, 1); + MenuDrawTextWindow(2, 13, 27, 18); + StringExpandPlaceholders(gStringVar4, gUnknown_081C7025); + MenuPrintMessage(gStringVar4, 3, 14); + gTasks[taskId].func = task_new_game_prof_birch_speech_part2_7; + } +} + +void task_new_game_prof_birch_speech_part2_7(u8 taskId) +{ + if (gTasks[taskId].data[5]) + { + s16 spriteId; + + spriteId = gTasks[taskId].data[8]; + gSprites[spriteId].oam.objMode = 0; + + spriteId = gTasks[taskId].data[9]; + gSprites[spriteId].oam.objMode = 0; + + if (MenuUpdateWindowText_OverrideLineLength(24)) + { + spriteId = gTasks[taskId].data[8]; + gSprites[spriteId].oam.objMode = 1; + + spriteId = gTasks[taskId].data[9]; + gSprites[spriteId].oam.objMode = 1; + + sub_800B458(taskId, 2); + sub_800B614(taskId, 1); + gTasks[taskId].data[7] = 0x40; + gTasks[taskId].func = task_new_game_prof_birch_speech_part2_8; + } + } +} + +void task_new_game_prof_birch_speech_part2_8(u8 taskId) +{ + if (gTasks[taskId].data[5]) + { + s16 spriteId; + + spriteId = gTasks[taskId].data[8]; + gSprites[spriteId].invisible = 1; + + spriteId = gTasks[taskId].data[9]; + gSprites[spriteId].invisible = 1; + + if (gTasks[taskId].data[7]) + { + gTasks[taskId].data[7]--; + } + else + { + u8 spriteId; + + if (gSaveBlock2.playerGender) + spriteId = (u8)gTasks[taskId].data[11]; + else + spriteId = (u8)gTasks[taskId].data[10]; + + gSprites[spriteId].pos1.x = 0x78; + gSprites[spriteId].pos1.y = 0x3C; + gSprites[spriteId].invisible = 0; + gSprites[spriteId].oam.objMode = 1; + gTasks[taskId].data[2] = spriteId; + + sub_800B534(taskId, 2); + sub_800B6C0(taskId, 1); + MenuDrawTextWindow(2, 13, 27, 18); + MenuPrintMessage(gUnknown_081C7074, 3, 14); + gTasks[taskId].func = task_new_game_prof_birch_speech_part2_9; + } + } +} + +void task_new_game_prof_birch_speech_part2_9(u8 taskId) +{ + if (gTasks[taskId].data[5]) + { + s16 spriteId; + + spriteId = gTasks[taskId].data[2]; + gSprites[spriteId].oam.objMode = 0; + + if (MenuUpdateWindowText_OverrideLineLength(24)) + { + u8 spriteId; + + spriteId = gTasks[taskId].data[2]; + gSprites[spriteId].oam.affineMode = 1; + gSprites[spriteId].affineAnims = (union AffineAnimCmd **)gSpriteAffineAnimTable_81E79AC; + InitSpriteAffineAnim(&gSprites[spriteId]); + StartSpriteAffineAnim(&gSprites[spriteId], 0); + gSprites[spriteId].callback = sub_800B240; + BeginNormalPaletteFade(0x0000ffff, 0, 0, 0x10, 0); + play_sound_effect(4); + gTasks[taskId].func = task_new_game_prof_birch_speech_part2_10; + } + } +} + +void task_new_game_prof_birch_speech_part2_10(u8 taskId) +{ + u8 spriteId = gTasks[taskId].data[2]; + + if (gSprites[spriteId].affineAnimEnded) + gTasks[taskId].func = sub_800AFC0; +} + +void sub_800AFC0(u8 taskId) +{ + if (!gPaletteFade.active) + { + u8 spriteId = gTasks[taskId].data[2]; + gSprites[spriteId].callback = nullsub_34; + REG_DISPCNT = 4160; + BeginNormalPaletteFade(0xFFFF0000, 0, 0, 0x10, 0xFFFF); + gTasks[taskId].func = sub_800B034; + } +} + +void sub_800B034(u8 taskId) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(c2_load_new_map_2); + DestroyTask(taskId); + } +} + +// CB2 +void new_game_prof_birch_speech_part2_start() +{ + u8 taskId; + u8 spriteId; + u16 savedIme; + + SetVBlankCallback(NULL); + + REG_DISPCNT = 0; + REG_BG2CNT = 0; + REG_BG1CNT = 0; + REG_BG0CNT = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + + DmaFill16(3, 0, (void *)VRAM, VRAM_SIZE); + DmaFill32(3, 0, (void *)OAM, OAM_SIZE); + DmaFill16(3, 0, (void *)PLTT, PLTT_SIZE); + + ResetPaletteFade(); + + LZ77UnCompVram(gUnknown_081E768C, (void *)BG_VRAM); + LZ77UnCompVram(gUnknown_081E7834, (void *)(BG_VRAM + 0x3800)); + + LoadPalette(gUnknown_081E764C, 0, 0x40); + + ResetTasks(); + + taskId = CreateTask(task_new_game_prof_birch_speech_part2_1, 0); + + gTasks[taskId].data[4] = -60; + + remove_some_task(); + ResetSpriteData(); + FreeAllSpritePalettes(); + AddBirchSpeechObjects(taskId); + + SetUpWindowConfig(&gWindowConfig_81E6C3C); + InitMenuWindow(&gWindowConfig_81E6CE4); + + if (gSaveBlock2.playerGender != MALE) + { + gTasks[taskId].data[6] = FEMALE; + spriteId = gTasks[taskId].data[11]; + } + else + { + gTasks[taskId].data[6] = MALE; + spriteId = gTasks[taskId].data[10]; + } + + gSprites[spriteId].pos1.x = 180; + gSprites[spriteId].pos1.y = 60; + gSprites[spriteId].invisible = 0; + + gTasks[taskId].data[2] = spriteId; + + REG_BG1HOFS = -60; + + BeginNormalPaletteFade(0xFFFFFFFFu, 0, 0x10, 0, 0); + + REG_WIN0H = 0; + REG_WIN0V = 0; + REG_WININ = 0; + REG_WINOUT = 0; + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BLDY = 0; + + savedIme = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_VBLANK; + REG_IME = savedIme; + + SetVBlankCallback(VBlankCB_MainMenu); + SetMainCallback2(CB2_MainMenu); + REG_BG1CNT = 1795; + REG_DISPCNT = 4928; +} + +void nullsub_34(struct Sprite *sprite) +{ +} + +void sub_800B240(struct Sprite *sprite) +{ + u32 y = (sprite->pos1.y << 16) + sprite->data0 + 0xC000; + sprite->pos1.y = y >> 16; + sprite->data0 = y; +} + +u8 CreateAzurillSprite(u8 a1, u8 a2) +{ + DecompressPicFromTable_2( + &gMonFrontPicTable[SPECIES_AZURILL], + gMonFrontPicCoords[SPECIES_AZURILL].x, + gMonFrontPicCoords[SPECIES_AZURILL].y, + gUnknown_081FAF4C[0], + gUnknown_081FAF4C[1], + SPECIES_AZURILL); + LoadCompressedObjectPalette(&gMonPaletteTable[SPECIES_AZURILL]); + GetMonSpriteTemplate_803C56C(SPECIES_AZURILL, 1); + return CreateSprite(&gUnknown_02024E8C, a1, a2, 0); +} + +void AddBirchSpeechObjects(u8 taskId) +{ + u8 spriteId; + + spriteId = AddNewGameBirchObject(136, 60, 1); + gSprites[spriteId].callback = nullsub_34; + gSprites[spriteId].oam.priority = 0; + gSprites[spriteId].invisible = 1; + gTasks[taskId].data[8] = spriteId; + + spriteId = CreateAzurillSprite(0x68, 0x48); + gSprites[spriteId].callback = nullsub_34; + gSprites[spriteId].oam.priority = 0; + gSprites[spriteId].invisible = 1; + gTasks[taskId].data[9] = spriteId; + + spriteId = sub_80859BC(0, 120, 60, 0, unk_2000000); + gSprites[spriteId].callback = nullsub_34; + gSprites[spriteId].invisible = 1; + gSprites[spriteId].oam.priority = 0; + gTasks[taskId].data[10] = spriteId; + + spriteId = sub_80859BC(1, 120, 60, 0, unk_2000000 + 0x800); + gSprites[spriteId].callback = nullsub_34; + gSprites[spriteId].invisible = 1; + gSprites[spriteId].oam.priority = 0; + gTasks[taskId].data[11] = spriteId; +} + +void sub_800B3EC(u8 taskId) +{ + if (gTasks[taskId].data[1] == 0) + { + gTasks[gTasks[taskId].data[0]].data[5] = 1; + DestroyTask(taskId); + } + else + { + if (gTasks[taskId].data[4]) + { + gTasks[taskId].data[4]--; + } + else + { + gTasks[taskId].data[4] = gTasks[taskId].data[3]; + gTasks[taskId].data[1]--; + gTasks[taskId].data[2]++; + REG_BLDALPHA = gTasks[taskId].data[1] + (gTasks[taskId].data[2] * 256); + } + } +} + +void sub_800B458(u8 taskId, u8 a2) +{ + u8 newTaskId; + + REG_BLDCNT = 592; + REG_BLDALPHA = 16; + REG_BLDY = 0; + gTasks[taskId].data[5] = 0; + newTaskId = CreateTask(sub_800B3EC, 0); + + gTasks[newTaskId].data[0] = taskId; + gTasks[newTaskId].data[1] = 16; + gTasks[newTaskId].data[2] = 0; + gTasks[newTaskId].data[3] = a2; + gTasks[newTaskId].data[4] = a2; +} + +void sub_800B4C8(u8 taskId) +{ + if (gTasks[taskId].data[1] == 16) + { + gTasks[gTasks[taskId].data[0]].data[5] = 1; + DestroyTask(taskId); + } + else if (gTasks[taskId].data[4]) + { + gTasks[taskId].data[4]--; + } + else + { + gTasks[taskId].data[4] = gTasks[taskId].data[3]; + gTasks[taskId].data[1]++; + gTasks[taskId].data[2]--; + REG_BLDALPHA = gTasks[taskId].data[1] + (gTasks[taskId].data[2] * 256); + } +} + +void sub_800B534(u8 taskId, u8 a2) +{ + u8 newTaskId; + + REG_BLDCNT = 592; + REG_BLDALPHA = 4096; + REG_BLDY = 0; + gTasks[taskId].data[5] = 0; + newTaskId = CreateTask(sub_800B4C8, 0); + + gTasks[newTaskId].data[0] = taskId; + gTasks[newTaskId].data[1] = 0; + gTasks[newTaskId].data[2] = 16; + gTasks[newTaskId].data[3] = a2; + gTasks[newTaskId].data[4] = a2; +} + +void sub_800B5A8(u8 taskId) +{ + if (gTasks[taskId].data[2]) + { + gTasks[taskId].data[2]--; + } + else + { + if (gTasks[taskId].data[1] == 8) + { + DestroyTask(taskId); + } + else if (gTasks[taskId].data[4]) + { + gTasks[taskId].data[4]--; + } + else + { + gTasks[taskId].data[4] = gTasks[taskId].data[3]; + gTasks[taskId].data[1]++; + LoadPalette(&gUnknown_081E795C[gTasks[taskId].data[1]], 1, 0x10); + } + } +} + +void sub_800B614(u8 a1, u8 a2) +{ + u8 newTaskId = CreateTask(sub_800B5A8, 0); + gTasks[newTaskId].data[0] = a1; + gTasks[newTaskId].data[1] = 0; + gTasks[newTaskId].data[2] = 8; + gTasks[newTaskId].data[3] = a2; + gTasks[newTaskId].data[4] = a2; +} + +void sub_800B654(u8 taskId) +{ + if (gTasks[taskId].data[2]) + { + gTasks[taskId].data[2]--; + } + else + { + if (gTasks[taskId].data[1] == 0) + { + DestroyTask(taskId); + } + else + { + if (gTasks[taskId].data[4]) + { + gTasks[taskId].data[4]--; + } + else + { + gTasks[taskId].data[4] = gTasks[taskId].data[3]; + gTasks[taskId].data[1]--; + LoadPalette(&gUnknown_081E795C[gTasks[taskId].data[1]], 1, 0x10); + } + } + } +} + +void sub_800B6C0(u8 a1, u8 a2) +{ + u8 newTaskId = CreateTask(sub_800B654, 0); + gTasks[newTaskId].data[0] = a1; + gTasks[newTaskId].data[1] = 8; + gTasks[newTaskId].data[2] = 8; + gTasks[newTaskId].data[3] = a2; + gTasks[newTaskId].data[4] = a2; +} + +void CreateGenderMenu(u8 left, u8 top) +{ + u8 menuLeft, menuTop; + MenuDrawTextWindow(left, top, left + 6, top + 5); + menuLeft = left + 1; + menuTop = top + 1; + PrintMenuItems(menuLeft, menuTop, 2, gUnknown_081E79B0); + InitMenu(0, menuLeft, menuTop, 2, 0, 5); +} + +s8 GenderMenuProcessInput(void) +{ + return ProcessMenuInputNoWrap(); +} + +void CreateNameMenu(u8 left, u8 top) +{ + MenuDrawTextWindow(left, top, left + 10, top + 11); + + if (gSaveBlock2.playerGender == MALE) + { + PrintMenuItems((u8)(left + 1), (u8)(top + 1), 5, gUnknown_081E79C0); + } + else + { + PrintMenuItems((u8)(left + 1), (u8)(top + 1), 5, gUnknown_081E79E8); + } + + InitMenu(0, (u8)(left + 1), (u8)(top + 1), 5, 0, 9); +} + +s8 NameMenuProcessInput(void) +{ + return ProcessMenuInput(); +} + +void set_default_player_name(u8 index) +{ + u8 i; + u8 *name; + + if (gSaveBlock2.playerGender == MALE) + name = gUnknown_081E79C0[index][0]; + else + name = gUnknown_081E79E8[index][0]; + + for (i = 0; i < 7; i++) + gSaveBlock2.playerName[i] = name[i]; + + gSaveBlock2.playerName[i] = EOS; +} |