summaryrefslogtreecommitdiff
path: root/src/engine/main_menu.c
diff options
context:
space:
mode:
authorcamthesaxman <cameronghall@cox.net>2018-02-18 19:59:51 -0600
committercamthesaxman <cameronghall@cox.net>2018-02-18 19:59:51 -0600
commitdaa05c1b7c5e079ad8554e88a290e07b333bd2db (patch)
treef635e307268f6e6027423369d221e2adf32b438d /src/engine/main_menu.c
parent2e21a867487e2187a954a351f775bd3f3a9535b1 (diff)
remove subdirectories
Diffstat (limited to 'src/engine/main_menu.c')
-rw-r--r--src/engine/main_menu.c1705
1 files changed, 0 insertions, 1705 deletions
diff --git a/src/engine/main_menu.c b/src/engine/main_menu.c
deleted file mode 100644
index 5a3f55b29..000000000
--- a/src/engine/main_menu.c
+++ /dev/null
@@ -1,1705 +0,0 @@
-#include "global.h"
-#include "constants/songs.h"
-#include "constants/species.h"
-#include "main_menu.h"
-#include "data2.h"
-#include "decompress.h"
-#include "event_data.h"
-#include "field_effect.h"
-#include "menu.h"
-#include "mystery_event_menu.h"
-#include "naming_screen.h"
-#include "option_menu.h"
-#include "palette.h"
-#include "pokeball.h"
-#include "overworld.h"
-#include "rtc.h"
-#include "save_menu_util.h"
-#include "save.h"
-#include "sound.h"
-#include "string_util.h"
-#include "strings.h"
-#include "task.h"
-#include "text.h"
-#include "title_screen.h"
-#include "scanline_effect.h"
-#include "ewram.h"
-
-#define BirchSpeechUpdateWindowText() ((u8)Menu_UpdateWindowTextOverrideLineLength(24))
-
-extern struct PaletteFadeControl gPaletteFade;
-
-extern const u8 gBirchSpeech_Welcome[];
-extern const u8 gBirchSpeech_ThisIsPokemon[];
-extern const u8 gBirchSpeech_WorldInhabitedByPokemon[];
-extern const u8 gBirchSpeech_AndYouAre[];
-extern const u8 gBirchSpeech_AreYouBoyOrGirl[];
-extern const u8 gBirchSpeech_WhatsYourName[];
-extern u8 gBirchSpeech_SoItsPlayer[];
-extern u8 gBirchSpeech_AhOkayYouArePlayer[];
-extern u8 gBirchSpeech_AreYouReady[];
-
-extern struct SpriteTemplate gUnknown_02024E8C;
-extern const struct MenuAction gUnknown_081E79B0[];
-extern const struct MenuAction gMalePresetNames[];
-extern const struct MenuAction gFemalePresetNames[];
-
-extern const u8 gUnknown_081E7834[];
-
-extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E79AC[];
-
-//Menu layouts
-enum
-{
- HAS_NO_SAVED_GAME, //NEW GAME, OPTION
- HAS_SAVED_GAME, //CONTINUE, NEW GAME, OPTION
- HAS_MYSTERY_GIFT, //CONTINUE, NEW GAME, MYSTERY EVENTS, OPTION
-};
-
-static void CB2_MainMenu(void);
-static void VBlankCB_MainMenu(void);
-static void CB2_InitMainMenuFromOptions(void);
-static u32 InitMainMenu(bool8 a1);
-static void Task_MainMenuCheckSave(u8 taskId);
-static void Task_MainMenuWaitForSaveErrorAck(u8 taskId);
-static void Task_MainMenuCheckRtc(u8 taskId);
-static void Task_MainMenuWaitForRtcErrorAck(u8 taskId);
-static void Task_MainMenuDraw(u8 taskId);
-static void Task_MainMenuHighlight(u8 taskId);
-static bool8 MainMenuProcessKeyInput(u8 taskId);
-static void Task_MainMenuProcessKeyInput(u8 taskId);
-static void Task_MainMenuPressedA(u8 taskId);
-static void Task_MainMenuPressedB(u8 taskId);
-static void HighlightCurrentMenuItem(u8 layout, u8 menuItem);
-static void PrintMainMenuItem(const u8 *text, u8 left, u8 top);
-static void PrintSaveFileInfo(void);
-static void PrintPlayerName(void);
-static void PrintPlayTime(void);
-static void PrintPokedexCount(void);
-static void PrintBadgeCount(void);
-static void Task_NewGameSpeech1(u8 taskId);
-static void Task_NewGameSpeech2(u8 taskId);
-static void Task_NewGameSpeech3(u8 taskId);
-static void Task_NewGameSpeech4(u8 taskId);
-static void Task_NewGameSpeech5(u8 taskId);
-static void Task_NewGameSpeech6(u8 taskId);
-static void Task_NewGameSpeech7(u8 taskId);
-static void Task_NewGameSpeech8(u8 taskId);
-static void Task_NewGameSpeech9(u8 taskId);
-static void Task_NewGameSpeech10(u8 taskId);
-static void Task_NewGameSpeech11(u8 taskId);
-static void Task_NewGameSpeech12(u8 taskId);
-static void Task_NewGameSpeech13(u8 taskId);
-static void Task_NewGameSpeech14(u8 taskId);
-static void Task_NewGameSpeech15(u8 taskId);
-static void Task_NewGameSpeech16(u8 taskId);
-static void Task_NewGameSpeech17(u8 taskId);
-static void Task_NewGameSpeech18(u8 taskId);
-static void Task_NewGameSpeech19(u8 taskId);
-static void Task_NewGameSpeech20(u8 taskId);
-static void Task_NewGameSpeech21(u8 taskId);
-static void Task_NewGameSpeech22(u8 taskId);
-static void Task_NewGameSpeech23(u8 taskId);
-static void Task_NewGameSpeech24(u8 taskId);
-static void Task_NewGameSpeech25(u8 taskId);
-static void Task_NewGameSpeech26(u8 taskId);
-static void Task_NewGameSpeech27(u8 taskId);
-static void Task_NewGameSpeech28(u8 taskId);
-static void Task_NewGameSpeech29(u8 taskId);
-static void Task_NewGameSpeech30(u8 taskId);
-static void Task_NewGameSpeech31(u8 taskId);
-static void Task_NewGameSpeech32(u8 taskId);
-static void Task_NewGameSpeech33(u8 taskId);
-static void CB_ContinueNewGameSpeechPart2();
-static void nullsub_34(struct Sprite *sprite);
-static void ShrinkPlayerSprite(struct Sprite *sprite);
-static u8 CreateAzurillSprite(u8 x, u8 y);
-static void AddBirchSpeechObjects(u8 taskId);
-static void Task_SpriteFadeOut(u8 taskId);
-static void StartSpriteFadeOut(u8 taskId, u8 interval);
-static void Task_SpriteFadeIn(u8 taskId);
-static void StartSpriteFadeIn(u8 taskId, u8 interval);
-static void HandleFloorShadowFadeOut(u8 taskId);
-static void StartBackgroundFadeOut(u8 taskId, u8 interval);
-static void HandleFloorShadowFadeIn(u8 taskId);
-static void StartBackgroundFadeIn(u8 taskId, u8 interval);
-static void CreateGenderMenu(u8 left, u8 top);
-static s8 GenderMenuProcessInput(void);
-static void CreateNameMenu(u8 left, u8 top);
-static s8 NameMenuProcessInput(void);
-static void SetPresetPlayerName(u8 index);
-
-static const u16 gUnknown_081E764C[][16] =
-{
- INCBIN_U16("graphics/birch_speech/bg0.gbapal"),
- INCBIN_U16("graphics/birch_speech/bg1.gbapal"),
-};
-
-static const u8 gBirchIntroShadowGfx[] = INCBIN_U8("graphics/birch_speech/shadow.4bpp.lz");
-static const u8 gUnknown_081E7834[] = INCBIN_U8("graphics/birch_speech/map.bin.lz");
-static const u16 gUnknown_081E795C[] = INCBIN_U16("graphics/birch_speech/bg2.gbapal");
-static const u16 gUnknown_081E796C[] = INCBIN_U16("graphics/birch_speech/blank_pal.gbapal");
-static const u16 gMainMenuPalette[] = INCBIN_U16("graphics/misc/main_menu.gbapal");
-
-static const union AffineAnimCmd gSpriteAffineAnim_81E799C[] =
-{
- AFFINEANIMCMD_FRAME(0xFFFE, 0xFFFE, 0, 48),
- AFFINEANIMCMD_END,
-};
-
-static const union AffineAnimCmd *const gSpriteAffineAnimTable_81E79AC[] =
-{
- gSpriteAffineAnim_81E799C,
-};
-
-static const struct MenuAction gUnknown_081E79B0[] =
-{
- {gBirchText_Boy, NULL},
- {gBirchText_Girl, NULL},
-};
-
-static const struct MenuAction gMalePresetNames[] =
-{
- {gBirchText_NewName, NULL},
- {gDefaultBoyName1, NULL},
- {gDefaultBoyName2, NULL},
- {gDefaultBoyName3, NULL},
- {gDefaultBoyName4, NULL},
-};
-
-static const struct MenuAction gFemalePresetNames[] =
-{
- {gBirchText_NewName, NULL},
- {gDefaultGirlName1, NULL},
- {gDefaultGirlName2, NULL},
- {gDefaultGirlName3, NULL},
- {gDefaultGirlName4, NULL},
-};
-
-static void CB2_MainMenu(void)
-{
- RunTasks();
- AnimateSprites();
- BuildOamBuffer();
- UpdatePaletteFade();
-}
-
-void VBlankCB_MainMenu(void)
-{
- LoadOam();
- ProcessSpriteCopyRequests();
- TransferPlttBuffer();
-}
-
-void CB2_InitMainMenu(void)
-{
- InitMainMenu(FALSE);
-}
-
-static void CB2_InitMainMenuFromOptions(void)
-{
- InitMainMenu(TRUE);
-}
-
-#define tMenuLayout data[0]
-#define tMenuSelection data[1]
-
-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);
- ScanlineEffect_Stop();
- ResetTasks();
- ResetSpriteData();
- FreeAllSpritePalettes();
- Text_LoadWindowTemplate(&gWindowTemplate_81E6C3C);
- InitMenuWindow((struct WindowTemplate *)&gWindowTemplate_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_MODE_0
- | DISPCNT_OBJ_1D_MAP
- | DISPCNT_BG0_ON
- | DISPCNT_OBJ_ON
- | DISPCNT_WIN0_ON;
-
- taskId = CreateTask(Task_MainMenuCheckSave, 0);
- gTasks[taskId].tMenuSelection = 0;
-
- return 0;
-}
-
-void Task_MainMenuCheckSave(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 SAVE_STATUS_OK:
- if (IsMysteryGiftEnabled() == TRUE)
- gTasks[taskId].tMenuLayout = HAS_MYSTERY_GIFT;
- else
- gTasks[taskId].tMenuLayout = HAS_SAVED_GAME;
- gTasks[taskId].func = Task_MainMenuCheckRtc;
- break;
- case 2:
- Menu_DrawStdWindowFrame(2, 14, 27, 19);
- MenuPrintMessage(gSaveFileDeletedMessage, 3, 15);
- REG_WIN0H = WIN_RANGE(17, 223);
- REG_WIN0V = WIN_RANGE(113, 159);
- gTasks[taskId].tMenuLayout = HAS_NO_SAVED_GAME;
- gTasks[taskId].func = Task_MainMenuWaitForSaveErrorAck;
- break;
- case SAVE_STATUS_ERROR:
- Menu_DrawStdWindowFrame(2, 14, 27, 19);
- MenuPrintMessage(gSaveFileCorruptMessage, 3, 15);
- REG_WIN0H = WIN_RANGE(17, 223);
- REG_WIN0V = WIN_RANGE(113, 159);
- gTasks[taskId].tMenuLayout = HAS_SAVED_GAME;
- gTasks[taskId].func = Task_MainMenuWaitForSaveErrorAck;
-
- if (IsMysteryGiftEnabled() == TRUE)
- gTasks[taskId].tMenuLayout = HAS_MYSTERY_GIFT;
- else
- gTasks[taskId].tMenuLayout = HAS_SAVED_GAME;
- break;
- case SAVE_STATUS_EMPTY:
- default:
- gTasks[taskId].tMenuLayout = HAS_NO_SAVED_GAME;
- gTasks[taskId].func = Task_MainMenuCheckRtc;
- break;
- case SAVE_STATUS_NO_FLASH:
- Menu_DrawStdWindowFrame(2, 14, 27, 19);
- MenuPrintMessage(gBoardNotInstalledMessage, 3, 15);
- REG_WIN0H = WIN_RANGE(17, 223);
- REG_WIN0V = WIN_RANGE(113, 159);
- gTasks[taskId].tMenuLayout = HAS_NO_SAVED_GAME;
- gTasks[taskId].func = Task_MainMenuWaitForSaveErrorAck;
- return;
- }
-}
-
-void Task_MainMenuWaitForSaveErrorAck(u8 taskId)
-{
- if (Menu_UpdateWindowText())
- {
- if (gMain.newKeys & A_BUTTON)
- {
- Menu_EraseWindowRect(2, 14, 27, 19);
- gTasks[taskId].func = Task_MainMenuCheckRtc;
- }
- }
-}
-
-void Task_MainMenuCheckRtc(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_MainMenuDraw;
- }
- else
- {
- Menu_DrawStdWindowFrame(2, 14, 27, 19);
- MenuPrintMessage(gBatteryDryMessage, 3, 15);
- REG_WIN0H = WIN_RANGE(17, 223);
- REG_WIN0V = WIN_RANGE(113, 159);
- gTasks[taskId].func = Task_MainMenuWaitForRtcErrorAck;
- }
- }
-}
-
-void Task_MainMenuWaitForRtcErrorAck(u8 taskId)
-{
- if (Menu_UpdateWindowText())
- {
- if ( gMain.newKeys & 1 )
- {
- Menu_EraseWindowRect(2, 14, 27, 19);
- gTasks[taskId].func = Task_MainMenuDraw;
- }
- }
-}
-
-void Task_MainMenuDraw(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].tMenuLayout)
- {
- case HAS_NO_SAVED_GAME:
- default:
- Menu_DrawStdWindowFrame(1, 0, 28, 3);
- PrintMainMenuItem(gMainMenuString_NewGame, 2, 1);
- Menu_DrawStdWindowFrame(1, 4, 28, 7);
- PrintMainMenuItem(gMainMenuString_Option, 2, 5);
- break;
- case HAS_SAVED_GAME:
- Menu_DrawStdWindowFrame(1, 0, 28, 7);
- PrintMainMenuItem(gMainMenuString_Continue, 2, 1);
- Menu_DrawStdWindowFrame(1, 8, 28, 11);
- PrintMainMenuItem(gMainMenuString_NewGame, 2, 9);
- Menu_DrawStdWindowFrame(1, 12, 28, 15);
- PrintMainMenuItem(gMainMenuString_Option, 2, 13);
- PrintSaveFileInfo();
- break;
- case HAS_MYSTERY_GIFT:
- Menu_DrawStdWindowFrame(1, 0, 28, 7);
- PrintMainMenuItem(gMainMenuString_Continue, 2, 1);
- Menu_DrawStdWindowFrame(1, 8, 28, 11);
- PrintMainMenuItem(gMainMenuString_NewGame, 2, 9);
- Menu_DrawStdWindowFrame(1, 12, 28, 15);
- PrintMainMenuItem(gMainMenuString_MysteryEvents, 2, 13);
- Menu_DrawStdWindowFrame(1, 16, 28, 19);
- PrintMainMenuItem(gMainMenuString_Option, 2, 0x11);
- PrintSaveFileInfo();
- break;
- }
-
- gTasks[taskId].func = Task_MainMenuHighlight;
- }
-}
-
-void Task_MainMenuHighlight(u8 taskId)
-{
- HighlightCurrentMenuItem(gTasks[taskId].tMenuLayout, gTasks[taskId].tMenuSelection);
- gTasks[taskId].func = Task_MainMenuProcessKeyInput;
-}
-
-bool8 MainMenuProcessKeyInput(u8 taskId)
-{
- if (gMain.newKeys & A_BUTTON)
- {
- PlaySE(SE_SELECT);
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0x0000);
- gTasks[taskId].func = Task_MainMenuPressedA;
- }
- else if (gMain.newKeys & B_BUTTON)
- {
- PlaySE(SE_SELECT);
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0xFFFF);
- REG_WIN0H = WIN_RANGE(0, 240);
- REG_WIN0V = WIN_RANGE(0, 160);
- gTasks[taskId].func = Task_MainMenuPressedB;
- }
- else
- {
- s32 menuItemCount;
-
- switch (gTasks[taskId].tMenuLayout)
- {
- case HAS_NO_SAVED_GAME:
- default:
- menuItemCount = 2;
- break;
- case HAS_SAVED_GAME:
- menuItemCount = 3;
- break;
- case HAS_MYSTERY_GIFT:
- menuItemCount = 4;
- break;
- }
-
- if (gMain.newKeys & DPAD_UP)
- {
- if (gTasks[taskId].tMenuSelection > 0)
- {
- gTasks[taskId].tMenuSelection--;
- return TRUE;
- }
- }
- if (gMain.newKeys & DPAD_DOWN)
- {
- if (gTasks[taskId].tMenuSelection < menuItemCount - 1)
- {
- gTasks[taskId].tMenuSelection++;
- return TRUE;
- }
- }
- }
-
- return FALSE;
-}
-
-void Task_MainMenuProcessKeyInput(u8 taskId)
-{
- bool8 currentMenuItemChanged = MainMenuProcessKeyInput(taskId);
- if (currentMenuItemChanged)
- gTasks[taskId].func = Task_MainMenuHighlight;
-}
-
-void Task_MainMenuPressedA(u8 taskId)
-{
- enum
- {
- NEW_GAME,
- CONTINUE,
- OPTION,
- MYSTERY_EVENTS,
- } action;
-
- if (gPaletteFade.active)
- return;
-
- switch (gTasks[taskId].tMenuLayout)
- {
- case HAS_NO_SAVED_GAME:
- default:
- switch (gTasks[taskId].tMenuSelection)
- {
- case 0:
- default:
- action = NEW_GAME;
- break;
- case 1:
- action = OPTION;
- break;
- }
- break;
- case HAS_SAVED_GAME:
- switch (gTasks[taskId].tMenuSelection)
- {
- case 0:
- default:
- action = CONTINUE;
- break;
- case 1:
- action = NEW_GAME;
- break;
- case 2:
- action = OPTION;
- break;
- }
- break;
- case HAS_MYSTERY_GIFT:
- switch (gTasks[taskId].tMenuSelection)
- {
- 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_NewGameSpeech1;
- break;
- case CONTINUE:
- gPlttBufferUnfaded[0] = 0;
- gPlttBufferFaded[0] = 0;
- SetMainCallback2(CB2_ContinueSavedGame);
- DestroyTask(taskId);
- break;
- case OPTION:
- gMain.savedCallback = CB2_InitMainMenuFromOptions;
- SetMainCallback2(CB2_InitOptionMenu);
- DestroyTask(taskId);
- break;
- case MYSTERY_EVENTS:
- SetMainCallback2(CB2_InitMysteryEventMenu);
- DestroyTask(taskId);
- break;
- }
-}
-
-void Task_MainMenuPressedB(u8 taskId)
-{
- if (!gPaletteFade.active)
- {
- SetMainCallback2(CB2_InitTitleScreen);
- DestroyTask(taskId);
- }
-}
-
-#undef tMenuLayout
-#undef tMenuSelection
-
-void HighlightCurrentMenuItem(u8 layout, u8 menuItem)
-{
- REG_WIN0H = WIN_RANGE(9, 231);
-
- switch (layout)
- {
- case HAS_NO_SAVED_GAME:
- default:
- switch (menuItem)
- {
- case 0:
- default:
- REG_WIN0V = WIN_RANGE(1, 31);
- break;
- case 1:
- REG_WIN0V = WIN_RANGE(33, 63);
- break;
- }
- break;
- case HAS_SAVED_GAME:
- 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 HAS_MYSTERY_GIFT:
- 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(const 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;
-
- Menu_PrintText(buffer, left, top);
-}
-
-void PrintSaveFileInfo(void)
-{
- PrintPlayerName();
- PrintPokedexCount();
- PrintPlayTime();
- PrintBadgeCount();
-}
-
-void PrintPlayerName(void)
-{
- Menu_PrintText(gMainMenuString_Player, 2, 3);
- Menu_PrintText(gSaveBlock2.playerName, 9, 3);
-}
-
-void PrintPlayTime(void)
-{
- u8 playTime[16];
- u8 alignedPlayTime[32];
-
-#if defined(ENGLISH)
- Menu_PrintText(gMainMenuString_Time, 16, 3);
- FormatPlayTime(playTime, gSaveBlock2.playTimeHours, gSaveBlock2.playTimeMinutes, 1);
- sub_8072C74(alignedPlayTime, playTime, 48, 1);
- Menu_PrintText(alignedPlayTime, 22, 3);
-#elif defined(GERMAN)
- Menu_PrintTextPixelCoords(gMainMenuString_Time, 124, 24, TRUE);
- FormatPlayTime(playTime, gSaveBlock2.playTimeHours, gSaveBlock2.playTimeMinutes, 1);
- sub_8072C74(alignedPlayTime, playTime, 40, 1);
- Menu_PrintText(alignedPlayTime, 23, 3);
-#endif
-}
-
-void PrintPokedexCount(void)
-{
- u8 buffer[16];
-
- Menu_PrintText(gMainMenuString_Pokedex, 2, 5);
- sub_8072C14(buffer, GetPokedexSeenCount(), 18, 0);
- Menu_PrintText(buffer, 9, 5);
-}
-
-void PrintBadgeCount(void)
-{
- u8 buffer[16];
-
-#if defined(ENGLISH)
- Menu_PrintText(gMainMenuString_Badges, 16, 5);
-#elif defined(GERMAN)
- Menu_PrintTextPixelCoords(gMainMenuString_Badges, 124, 40, TRUE);
-#endif
- ConvertIntToDecimalString(buffer, GetBadgeCount());
- Menu_PrintTextPixelCoords(buffer, 205, 40, 1);
-}
-
-#define tTrainerSpriteId data[2]
-#define tBGhofs data[4]
-#define tSubtaskIsDone data[5]
-#define tGenderSelection data[6]
-#define tFrameCounter data[7]
-#define tBirchSpriteId data[8]
-#define tAzurillSpriteId data[9]
-#define tBrendanSpriteId data[10]
-#define tMaySpriteId data[11]
-
-static void Task_NewGameSpeech1(u8 taskId)
-{
- Text_LoadWindowTemplate(&gWindowTemplate_81E6C3C);
- InitMenuWindow((struct WindowTemplate *)&gWindowTemplate_81E6CE4);
- REG_WIN0H = 0;
- REG_WIN0V = 0;
- REG_WININ = 0;
- REG_WINOUT = 0;
- REG_BLDCNT = 0;
- REG_BLDALPHA = 0;
- REG_BLDY = 0;
- LZ77UnCompVram(gBirchIntroShadowGfx, (void *)BG_VRAM);
- LZ77UnCompVram(gUnknown_081E7834, (void *)(BG_VRAM + 0x3800));
- LoadPalette(gUnknown_081E764C, 0, 0x40);
- LoadPalette(gUnknown_081E796C, 1, 0x10);
- ScanlineEffect_Stop();
- ResetSpriteData();
- FreeAllSpritePalettes();
- AddBirchSpeechObjects(taskId);
- BeginNormalPaletteFade(-1, 0, 0x10, 0, 0);
- REG_BG1CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(7) | BGCNT_16COLOR | BGCNT_TXT256x256;
- REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP;
- gTasks[taskId].tBGhofs = 0;
- gTasks[taskId].func = Task_NewGameSpeech2;
- gTasks[taskId].tTrainerSpriteId = 0xFF;
- gTasks[taskId].data[3] = 0xFF;
- gTasks[taskId].tFrameCounter = 216; //Wait 3.6 seconds (216 frames) before starting speech
-
- PlayBGM(BGM_DOORO_X4);
-}
-
-static void Task_NewGameSpeech2(u8 taskId)
-{
- if (gTasks[taskId].tFrameCounter != 0)
- {
- gTasks[taskId].tFrameCounter--;
- }
- else
- {
- //Initialize Birch sprite
- u8 spriteId = gTasks[taskId].tBirchSpriteId;
-
- gSprites[spriteId].pos1.x = 136;
- gSprites[spriteId].pos1.y = 60;
- gSprites[spriteId].invisible = 0;
- gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND;
- StartSpriteFadeIn(taskId, 10);
- StartBackgroundFadeIn(taskId, 20);
- gTasks[taskId].tFrameCounter = 80;
- gTasks[taskId].func = Task_NewGameSpeech3;
- }
-}
-
-static void Task_NewGameSpeech3(u8 taskId)
-{
- if (gTasks[taskId].tSubtaskIsDone)
- {
- gSprites[gTasks[taskId].tBirchSpriteId].oam.objMode = ST_OAM_OBJ_NORMAL;
- if (gTasks[taskId].tFrameCounter)
- {
- gTasks[taskId].tFrameCounter--;
- }
- else
- {
- Menu_DrawStdWindowFrame(2, 13, 27, 18);
- //"Hi! Sorry to keep you waiting...
- //...But everyone calls me the POKEMON PROFESSOR."
- MenuPrintMessage(gBirchSpeech_Welcome, 3, 14);
- gTasks[taskId].func = Task_NewGameSpeech4;
- }
- }
-}
-
-static void Task_NewGameSpeech4(u8 taskId)
-{
- if (!gPaletteFade.active && BirchSpeechUpdateWindowText())
- {
- gTasks[taskId].func = Task_NewGameSpeech5;
- //"This is what we call a POKEMON."
- MenuPrintMessage(gBirchSpeech_ThisIsPokemon, 3, 14);
- }
-}
-
-static void Task_NewGameSpeech5(u8 taskId)
-{
- if (BirchSpeechUpdateWindowText())
- gTasks[taskId].func = Task_NewGameSpeech6;
-}
-
-static void Task_NewGameSpeech6(u8 taskId)
-{
- u8 spriteId = gTasks[taskId].tAzurillSpriteId;
-
- gSprites[spriteId].pos1.x = 104;
- gSprites[spriteId].pos1.y = 72;
- gSprites[spriteId].invisible = 0;
- gSprites[spriteId].data[0] = 0;
- CreatePokeballSprite(spriteId, gSprites[spriteId].oam.paletteNum, 0x70, 0x3A, 0, 0, 0x20, 0x0000FFFF);
- gTasks[taskId].func = Task_NewGameSpeech7;
- gTasks[taskId].tFrameCounter = 0;
-}
-
-static void Task_NewGameSpeech7(u8 taskId)
-{
- if (IsCryFinished())
- {
- //Go on to next sentence after frame 95
- if (gTasks[taskId].tFrameCounter > 95)
- {
- Menu_SetText(gSystemText_NewPara);
- gTasks[taskId].func = Task_NewGameSpeech8;
- }
- }
-
- if (gTasks[taskId].tFrameCounter < 16384)
- {
- gTasks[taskId].tFrameCounter++;
- //Play Azurill cry at frame 32
- if (gTasks[taskId].tFrameCounter == 32)
- PlayCry1(SPECIES_AZURILL, 0);
- }
-}
-
-static void Task_NewGameSpeech8(u8 taskId)
-{
- if (BirchSpeechUpdateWindowText())
- {
- //"This world is widely inhabited by POKEMON...
- //...That's what I do."
- MenuPrintMessage(gBirchSpeech_WorldInhabitedByPokemon, 3, 14);
- gTasks[taskId].func = Task_NewGameSpeech9;
- }
-}
-
-static void Task_NewGameSpeech9(u8 taskId)
-{
- if (BirchSpeechUpdateWindowText())
- {
- Menu_DrawStdWindowFrame(2, 13, 27, 18);
- //"And you are?"
- MenuPrintMessage(gBirchSpeech_AndYouAre, 3, 14);
- gTasks[taskId].func = Task_NewGameSpeech10;
- }
-}
-
-static void Task_NewGameSpeech10(u8 taskId)
-{
- if (BirchSpeechUpdateWindowText())
- {
- gSprites[gTasks[taskId].tBirchSpriteId].oam.objMode = ST_OAM_OBJ_BLEND;
- gSprites[gTasks[taskId].tAzurillSpriteId].oam.objMode = ST_OAM_OBJ_BLEND;
- StartSpriteFadeOut(taskId, 2);
- StartBackgroundFadeOut(taskId, 1);
- gTasks[taskId].tFrameCounter = 64;
- gTasks[taskId].func = Task_NewGameSpeech11;
- }
-}
-
-//Slide platform away to the right
-static void Task_NewGameSpeech11(u8 taskId)
-{
- if (gTasks[taskId].tBGhofs != -60)
- {
- gTasks[taskId].tBGhofs -= 2;
- REG_BG1HOFS = gTasks[taskId].tBGhofs;
- }
- else
- {
- gTasks[taskId].tBGhofs = -60;
- gTasks[taskId].func = Task_NewGameSpeech12;
- }
-}
-
-static void Task_NewGameSpeech12(u8 taskId)
-{
- if (gTasks[taskId].tSubtaskIsDone)
- {
- //Hide Birch and Azurill
- gSprites[gTasks[taskId].tBirchSpriteId].invisible = TRUE;
- gSprites[gTasks[taskId].tAzurillSpriteId].invisible = TRUE;
-
- if (gTasks[taskId].tFrameCounter)
- {
- gTasks[taskId].tFrameCounter--;
- }
- else
- {
- //Initialize Brendan sprite
- u8 spriteId = gTasks[taskId].tBrendanSpriteId;
-
- gSprites[spriteId].pos1.x = 180;
- gSprites[spriteId].pos1.y = 60;
- gSprites[spriteId].invisible = FALSE;
- gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND;
- gTasks[taskId].tTrainerSpriteId = spriteId;
- gTasks[taskId].tGenderSelection = 0;
- StartSpriteFadeIn(taskId, 2);
- StartBackgroundFadeIn(taskId, 1);
- gTasks[taskId].func = Task_NewGameSpeech13;
- }
- }
-}
-
-static void Task_NewGameSpeech13(u8 taskId)
-{
- if (gTasks[taskId].tSubtaskIsDone)
- {
- gSprites[gTasks[taskId].tTrainerSpriteId].oam.objMode = ST_OAM_OBJ_NORMAL;
- gTasks[taskId].func = Task_NewGameSpeech14;
- }
-}
-
-static void Task_NewGameSpeech14(u8 taskId)
-{
- Menu_DrawStdWindowFrame(2, 13, 27, 18);
- //"Are you a boy? Or are you a girl?"
- MenuPrintMessage(gBirchSpeech_AreYouBoyOrGirl, 3, 14);
- gTasks[taskId].func = Task_NewGameSpeech15;
-}
-
-static void Task_NewGameSpeech15(u8 taskId)
-{
- if (BirchSpeechUpdateWindowText())
- {
- CreateGenderMenu(2, 4);
- gTasks[taskId].func = Task_NewGameSpeech16;
- }
-}
-
-//Process gender menu
-static void Task_NewGameSpeech16(u8 taskId)
-{
- u8 cursorPos;
-
- switch (GenderMenuProcessInput())
- {
- case MALE:
- Menu_DestroyCursor();
- PlaySE(SE_SELECT);
- gSaveBlock2.playerGender = MALE;
- Menu_EraseWindowRect(2, 4, 8, 9);
- gTasks[taskId].func = Task_NewGameSpeech19;
- break;
- case FEMALE:
- Menu_DestroyCursor();
- PlaySE(SE_SELECT);
- gSaveBlock2.playerGender = FEMALE;
- Menu_EraseWindowRect(2, 4, 8, 9);
- gTasks[taskId].func = Task_NewGameSpeech19;
- break;
- }
-
- cursorPos = Menu_GetCursorPos();
-
- if (cursorPos != gTasks[taskId].tGenderSelection)
- {
- //Menu selection changed. Slide Brendan or May out and slide the other in
- gTasks[taskId].tGenderSelection = cursorPos;
- gSprites[gTasks[taskId].tTrainerSpriteId].oam.objMode = ST_OAM_OBJ_BLEND;
- StartSpriteFadeOut(taskId, 0);
- gTasks[taskId].func = Task_NewGameSpeech17;
- }
-}
-
-//Slide old trainer sprite off right of screen
-static void Task_NewGameSpeech17(u8 taskId)
-{
- u8 spriteId = gTasks[taskId].tTrainerSpriteId;
-
- if (gTasks[taskId].tSubtaskIsDone == FALSE)
- {
- gSprites[spriteId].pos1.x += 4; //Move sprite right
- }
- else
- {
- gSprites[spriteId].invisible = TRUE;
-
- //Set up new trainer sprite
- if (gTasks[taskId].tGenderSelection)
- spriteId = gTasks[taskId].tMaySpriteId;
- else
- spriteId = gTasks[taskId].tBrendanSpriteId;
- gSprites[spriteId].pos1.x = 240;
- gSprites[spriteId].pos1.y = 60;
- gSprites[spriteId].invisible = FALSE;
- gTasks[taskId].tTrainerSpriteId = spriteId;
- gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND;
- StartSpriteFadeIn(taskId, 0);
- gTasks[taskId].func = Task_NewGameSpeech18;
- }
-}
-
-//Slide new trainer sprite from right of screen
-static void Task_NewGameSpeech18(u8 taskId)
-{
- u8 spriteId = gTasks[taskId].tTrainerSpriteId;
-
- if (gSprites[spriteId].pos1.x > 180)
- {
- gSprites[spriteId].pos1.x -= 4; //Move sprite left
- }
- else
- {
- gSprites[spriteId].pos1.x = 180;
- if (gTasks[taskId].tSubtaskIsDone)
- {
- gSprites[spriteId].oam.objMode = ST_OAM_OBJ_NORMAL;
- gTasks[taskId].func = Task_NewGameSpeech16; //Go back to gender menu
- }
- }
-}
-
-static void Task_NewGameSpeech19(u8 taskId)
-{
- Menu_DrawStdWindowFrame(2, 13, 27, 18);
- //"All right. What's your name?"
- MenuPrintMessage(gBirchSpeech_WhatsYourName, 3, 14);
- gTasks[taskId].func = Task_NewGameSpeech20;
-}
-
-static void Task_NewGameSpeech20(u8 taskId)
-{
- if (BirchSpeechUpdateWindowText())
- {
- CreateNameMenu(2, 1);
- gTasks[taskId].func = Task_NewGameSpeech21;
- }
-}
-
-//Handle name menu selection
-static void Task_NewGameSpeech21(u8 taskId)
-{
- s8 selection = NameMenuProcessInput();
-
- switch (selection)
- {
- case 1: //preset names
- case 2:
- case 3:
- case 4:
- Menu_DestroyCursor();
- PlaySE(SE_SELECT);
- Menu_EraseWindowRect(2, 1, 22, 12);
- SetPresetPlayerName(selection);
- gTasks[taskId].func = Task_NewGameSpeech23;
- break;
- case 0: //NEW NAME
- PlaySE(SE_SELECT);
- BeginNormalPaletteFade(-1, 0, 0, 16, 0);
- gTasks[taskId].func = Task_NewGameSpeech22;
- break;
- case -1: //B button
- Menu_DestroyCursor();
- PlaySE(SE_SELECT);
- Menu_EraseWindowRect(2, 1, 22, 12);
- gTasks[taskId].func = Task_NewGameSpeech14; //Go back to gender menu
- break;
- }
-}
-
-//Open naming screen
-static void Task_NewGameSpeech22(u8 taskId)
-{
- if (!gPaletteFade.active)
- {
- SetPresetPlayerName(1);
- DoNamingScreen(0, gSaveBlock2.playerName, gSaveBlock2.playerGender, 0, 0, CB_ContinueNewGameSpeechPart2);
- }
-}
-
-static void Task_NewGameSpeech23(u8 taskId)
-{
- Menu_DrawStdWindowFrame(2, 13, 27, 18);
- //"So it's (PLAYER)?"
- StringExpandPlaceholders(gStringVar4, gBirchSpeech_SoItsPlayer);
- MenuPrintMessage(gStringVar4, 3, 14);
- gTasks[taskId].func = Task_NewGameSpeech24;
-}
-
-static void Task_NewGameSpeech24(u8 taskId)
-{
- if (BirchSpeechUpdateWindowText())
- {
- DisplayYesNoMenu(2, 1, 1);
- gTasks[taskId].func = Task_NewGameSpeech25;
- }
-}
-
-//Handle yes/no menu selection
-static void Task_NewGameSpeech25(u8 taskId)
-{
- switch (Menu_ProcessInputNoWrap_())
- {
- case 0: //YES
- PlaySE(SE_SELECT);
- Menu_EraseWindowRect(2, 1, 8, 7);
- gSprites[gTasks[taskId].tTrainerSpriteId].oam.objMode = ST_OAM_OBJ_BLEND;
- StartSpriteFadeOut(taskId, 2);
- StartBackgroundFadeOut(taskId, 1);
- gTasks[taskId].func = Task_NewGameSpeech26; //Continue
- break;
- case -1: //B button
- case 1: //NO
- PlaySE(SE_SELECT);
- Menu_EraseWindowRect(2, 1, 8, 7);
- gTasks[taskId].func = Task_NewGameSpeech14; //Go back to gender menu
- break;
- }
-}
-
-static void Task_NewGameSpeech26(u8 taskId)
-{
- if (gTasks[taskId].tBGhofs)
- {
- gTasks[taskId].tBGhofs += 2;
- REG_BG1HOFS = gTasks[taskId].tBGhofs;
- }
- else
- {
- gTasks[taskId].func = Task_NewGameSpeech27;
- }
-}
-
-static void Task_NewGameSpeech27(u8 taskId)
-{
- if (gTasks[taskId].tSubtaskIsDone)
- {
- s16 spriteId;
-
- //Hide Brendan and May sprites
- spriteId = gTasks[taskId].tBrendanSpriteId;
- gSprites[spriteId].invisible = TRUE;
- spriteId = gTasks[taskId].tMaySpriteId;
- gSprites[spriteId].invisible = TRUE;
-
- //Fade in Birch and Azurill
- spriteId = (u8)gTasks[taskId].tBirchSpriteId;
- gSprites[spriteId].pos1.x = 136;
- gSprites[spriteId].pos1.y = 64;
- gSprites[spriteId].invisible = FALSE;
- gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND;
- spriteId = (u8)gTasks[taskId].tAzurillSpriteId;
- gSprites[spriteId].pos1.x = 104;
- gSprites[spriteId].pos1.y = 72;
- gSprites[spriteId].invisible = FALSE;
- gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND;
-
- StartSpriteFadeIn(taskId, 2);
- StartBackgroundFadeIn(taskId, 1);
- Menu_DrawStdWindowFrame(2, 13, 27, 18);
- StringExpandPlaceholders(gStringVar4, gBirchSpeech_AhOkayYouArePlayer);
- //"Ah, okay! You're (PLAYER) who's moving...
- //...I get it now!"
- MenuPrintMessage(gStringVar4, 3, 14);
- gTasks[taskId].func = Task_NewGameSpeech28;
- }
-}
-
-static void Task_NewGameSpeech28(u8 taskId)
-{
- if (gTasks[taskId].tSubtaskIsDone)
- {
- s16 spriteId;
-
- spriteId = gTasks[taskId].tBirchSpriteId;
- gSprites[spriteId].oam.objMode = ST_OAM_OBJ_NORMAL;
-
- spriteId = gTasks[taskId].tAzurillSpriteId;
- gSprites[spriteId].oam.objMode = ST_OAM_OBJ_NORMAL;
-
- if (BirchSpeechUpdateWindowText())
- {
- //Fade out Birch and Azurill
- spriteId = gTasks[taskId].tBirchSpriteId;
- gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND;
- spriteId = gTasks[taskId].tAzurillSpriteId;
- gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND;
-
- StartSpriteFadeOut(taskId, 2);
- StartBackgroundFadeOut(taskId, 1);
- gTasks[taskId].tFrameCounter = 64;
- gTasks[taskId].func = Task_NewGameSpeech29;
- }
- }
-}
-
-static void Task_NewGameSpeech29(u8 taskId)
-{
- if (gTasks[taskId].tSubtaskIsDone)
- {
- s16 spriteId;
-
- //Hide Birch and Azurill
- spriteId = gTasks[taskId].tBirchSpriteId;
- gSprites[spriteId].invisible = TRUE;
- spriteId = gTasks[taskId].tAzurillSpriteId;
- gSprites[spriteId].invisible = TRUE;
-
- if (gTasks[taskId].tFrameCounter)
- {
- gTasks[taskId].tFrameCounter--;
- }
- else
- {
- u8 spriteId;
-
- //Fade in trainer and background
- if (gSaveBlock2.playerGender)
- spriteId = (u8)gTasks[taskId].tMaySpriteId;
- else
- spriteId = (u8)gTasks[taskId].tBrendanSpriteId;
- gSprites[spriteId].pos1.x = 120;
- gSprites[spriteId].pos1.y = 60;
- gSprites[spriteId].invisible = FALSE;
- gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND;
- gTasks[taskId].tTrainerSpriteId = spriteId;
-
- StartSpriteFadeIn(taskId, 2);
- StartBackgroundFadeIn(taskId, 1);
- Menu_DrawStdWindowFrame(2, 13, 27, 18);
- MenuPrintMessage(gBirchSpeech_AreYouReady, 3, 14);
- gTasks[taskId].func = Task_NewGameSpeech30;
- }
- }
-}
-
-static void Task_NewGameSpeech30(u8 taskId)
-{
- if (gTasks[taskId].tSubtaskIsDone)
- {
- s16 spriteId;
-
- spriteId = gTasks[taskId].tTrainerSpriteId;
- gSprites[spriteId].oam.objMode = ST_OAM_OBJ_NORMAL;
-
- if (BirchSpeechUpdateWindowText())
- {
- u8 spriteId;
-
- spriteId = gTasks[taskId].tTrainerSpriteId;
- gSprites[spriteId].oam.affineMode = 1;
- gSprites[spriteId].affineAnims = gSpriteAffineAnimTable_81E79AC;
- InitSpriteAffineAnim(&gSprites[spriteId]);
- StartSpriteAffineAnim(&gSprites[spriteId], 0);
- gSprites[spriteId].callback = ShrinkPlayerSprite;
- BeginNormalPaletteFade(0x0000FFFF, 0, 0, 0x10, 0);
- FadeOutBGM(4);
- gTasks[taskId].func = Task_NewGameSpeech31;
- }
- }
-}
-
-static void Task_NewGameSpeech31(u8 taskId)
-{
- u8 spriteId = gTasks[taskId].tTrainerSpriteId;
-
- if (gSprites[spriteId].affineAnimEnded)
- gTasks[taskId].func = Task_NewGameSpeech32;
-}
-
-static void Task_NewGameSpeech32(u8 taskId)
-{
- if (!gPaletteFade.active)
- {
- u8 spriteId = gTasks[taskId].tTrainerSpriteId;
- gSprites[spriteId].callback = nullsub_34;
- REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON;
- BeginNormalPaletteFade(0xFFFF0000, 0, 0, 0x10, 0xFFFF);
- gTasks[taskId].func = Task_NewGameSpeech33;
- }
-}
-
-static void Task_NewGameSpeech33(u8 taskId)
-{
- if (!gPaletteFade.active)
- {
- //We're finished setting up. Start the new game!
- SetMainCallback2(CB2_NewGame);
- DestroyTask(taskId);
- }
-}
-
-// Re-initializes graphics state after running the naming screen
-// and continues the new game speech
-void CB_ContinueNewGameSpeechPart2()
-{
- 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(gBirchIntroShadowGfx, (void *)BG_VRAM);
- LZ77UnCompVram(gUnknown_081E7834, (void *)(BG_VRAM + 0x3800));
-
- LoadPalette(gUnknown_081E764C, 0, 0x40);
-
- ResetTasks();
-
- taskId = CreateTask(Task_NewGameSpeech23, 0);
-
- gTasks[taskId].tBGhofs = -60;
-
- ScanlineEffect_Stop();
- ResetSpriteData();
- FreeAllSpritePalettes();
- AddBirchSpeechObjects(taskId);
-
- Text_LoadWindowTemplate(&gWindowTemplate_81E6C3C);
- InitMenuWindow((struct WindowTemplate *)&gWindowTemplate_81E6CE4);
-
- if (gSaveBlock2.playerGender != MALE)
- {
- gTasks[taskId].tGenderSelection = FEMALE;
- spriteId = gTasks[taskId].tMaySpriteId;
- }
- else
- {
- gTasks[taskId].tGenderSelection = MALE;
- spriteId = gTasks[taskId].tBrendanSpriteId;
- }
-
- gSprites[spriteId].pos1.x = 180;
- gSprites[spriteId].pos1.y = 60;
- gSprites[spriteId].invisible = FALSE;
-
- gTasks[taskId].tTrainerSpriteId = 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 = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(7) | BGCNT_16COLOR | BGCNT_TXT256x256;
- REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP |
- DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_ON;
-}
-
-void nullsub_34(struct Sprite *sprite)
-{
-}
-
-void ShrinkPlayerSprite(struct Sprite *sprite)
-{
- u32 y = (sprite->pos1.y << 16) + sprite->data[0] + 0xC000;
- sprite->pos1.y = y >> 16;
- sprite->data[0] = y;
-}
-
-u8 CreateAzurillSprite(u8 x, u8 y)
-{
- DecompressPicFromTable_2(
- &gMonFrontPicTable[SPECIES_AZURILL],
- gMonFrontPicCoords[SPECIES_AZURILL].coords,
- gMonFrontPicCoords[SPECIES_AZURILL].y_offset,
- gUnknown_081FAF4C[0],
- gUnknown_081FAF4C[1],
- SPECIES_AZURILL);
- LoadCompressedObjectPalette(&gMonPaletteTable[SPECIES_AZURILL]);
- GetMonSpriteTemplate_803C56C(SPECIES_AZURILL, 1);
- return CreateSprite(&gUnknown_02024E8C, x, y, 0);
-}
-
-void AddBirchSpeechObjects(u8 taskId)
-{
- u8 spriteId;
-
- spriteId = CreateBirchSprite(136, 60, 1);
- gSprites[spriteId].callback = nullsub_34;
- gSprites[spriteId].oam.priority = 0;
- gSprites[spriteId].invisible = 1;
- gTasks[taskId].tBirchSpriteId = spriteId;
-
- spriteId = CreateAzurillSprite(0x68, 0x48);
- gSprites[spriteId].callback = nullsub_34;
- gSprites[spriteId].oam.priority = 0;
- gSprites[spriteId].invisible = 1;
- gTasks[taskId].tAzurillSpriteId = spriteId;
-
- //Create Brendan sprite
- spriteId = CreateTrainerSprite(0, 120, 60, 0, eBrendanSprite);
- gSprites[spriteId].callback = nullsub_34;
- gSprites[spriteId].invisible = 1;
- gSprites[spriteId].oam.priority = 0;
- gTasks[taskId].tBrendanSpriteId = spriteId;
-
- //Create May sprite
- spriteId = CreateTrainerSprite(1, 120, 60, 0, eMaySprite);
- gSprites[spriteId].callback = nullsub_34;
- gSprites[spriteId].invisible = 1;
- gSprites[spriteId].oam.priority = 0;
- gTasks[taskId].tMaySpriteId = spriteId;
-}
-
-#undef tTrainerSpriteId
-#undef tBGhofs
-//#undef tSubtaskIsDone
-#undef tGenderSelection
-#undef tFrameCounter
-#undef tBirchSpriteId
-#undef tAzurillSpriteId
-#undef tBrendanSpriteId
-#undef tMaySpriteId
-
-
-// Sprite Fade task
-
-#define tMainTaskId data[0]
-#define tBlendEVA data[1]
-#define tBlendEVB data[2]
-#define tUpdateInterval data[3]
-#define tFrameCounter data[4]
-
-static void Task_SpriteFadeOut(u8 taskId)
-{
- if (gTasks[taskId].tBlendEVA == 0)
- {
- gTasks[gTasks[taskId].tMainTaskId].tSubtaskIsDone = TRUE;
- DestroyTask(taskId);
- }
- else
- {
- if (gTasks[taskId].tFrameCounter)
- {
- gTasks[taskId].tFrameCounter--;
- }
- else
- {
- gTasks[taskId].tFrameCounter = gTasks[taskId].tUpdateInterval;
- gTasks[taskId].tBlendEVA--;
- gTasks[taskId].tBlendEVB++;
- REG_BLDALPHA = gTasks[taskId].tBlendEVA + (gTasks[taskId].tBlendEVB * 256);
- }
- }
-}
-
-//Launches a helper task to fade out sprites
-static void StartSpriteFadeOut(u8 taskId, u8 interval)
-{
- u8 newTaskId;
-
- REG_BLDCNT = 592;
- REG_BLDALPHA = 16;
- REG_BLDY = 0;
- gTasks[taskId].tSubtaskIsDone = FALSE;
- newTaskId = CreateTask(Task_SpriteFadeOut, 0);
-
- gTasks[newTaskId].tMainTaskId = taskId;
- gTasks[newTaskId].tBlendEVA = 16;
- gTasks[newTaskId].tBlendEVB = 0;
- gTasks[newTaskId].tUpdateInterval = interval;
- gTasks[newTaskId].tFrameCounter = interval;
-}
-
-static void Task_SpriteFadeIn(u8 taskId)
-{
- if (gTasks[taskId].tBlendEVA == 16)
- {
- gTasks[gTasks[taskId].tMainTaskId].tSubtaskIsDone = TRUE;
- DestroyTask(taskId);
- }
- else if (gTasks[taskId].tFrameCounter)
- {
- gTasks[taskId].tFrameCounter--;
- }
- else
- {
- gTasks[taskId].tFrameCounter = gTasks[taskId].tUpdateInterval;
- gTasks[taskId].tBlendEVA++;
- gTasks[taskId].tBlendEVB--;
- REG_BLDALPHA = gTasks[taskId].tBlendEVA + (gTasks[taskId].tBlendEVB * 256);
- }
-}
-
-//Launches a helper task to fade in sprites
-static void StartSpriteFadeIn(u8 taskId, u8 interval)
-{
- u8 newTaskId;
-
- REG_BLDCNT = 592;
- REG_BLDALPHA = 4096;
- REG_BLDY = 0;
- gTasks[taskId].tSubtaskIsDone = FALSE;
- newTaskId = CreateTask(Task_SpriteFadeIn, 0);
-
- gTasks[newTaskId].tMainTaskId = taskId;
- gTasks[newTaskId].tBlendEVA = 0;
- gTasks[newTaskId].tBlendEVB = 16;
- gTasks[newTaskId].tUpdateInterval = interval;
- gTasks[newTaskId].tFrameCounter = interval;
-}
-
-#undef tMainTaskId
-#undef tBlendEVA
-#undef tBlendEVB
-#undef tUpdateInterval
-#undef tFrameCounter
-
-
-// Background fade task
-
-#define tMainTaskId data[0]
-#define tFadeLevel data[1]
-#define tDelay data[2]
-#define tUpdateInterval data[3]
-#define tFrameCounter data[4]
-
-static void HandleFloorShadowFadeOut(u8 taskId)
-{
- if (gTasks[taskId].tDelay)
- gTasks[taskId].tDelay--;
- else
- {
- if (gTasks[taskId].tFadeLevel == 8)
- DestroyTask(taskId);
- else
- {
- if (gTasks[taskId].tFrameCounter)
- gTasks[taskId].tFrameCounter--;
- else
- {
- gTasks[taskId].tFrameCounter = gTasks[taskId].tUpdateInterval;
- gTasks[taskId].tFadeLevel++;
- LoadPalette(&gUnknown_081E795C[gTasks[taskId].tFadeLevel], 1, 0x10);
- }
- }
- }
-}
-
-//Launches a helper task to fade out the background
-static void StartBackgroundFadeOut(u8 taskId, u8 interval)
-{
- u8 newTaskId = CreateTask(HandleFloorShadowFadeOut, 0);
- gTasks[newTaskId].tMainTaskId = taskId;
- gTasks[newTaskId].tFadeLevel = 0;
- gTasks[newTaskId].tDelay = 8;
- gTasks[newTaskId].tUpdateInterval = interval;
- gTasks[newTaskId].tFrameCounter = interval;
-}
-
-static void HandleFloorShadowFadeIn(u8 taskId)
-{
- if (gTasks[taskId].tDelay)
- gTasks[taskId].tDelay--;
- else
- {
- if (gTasks[taskId].tFadeLevel == 0)
- DestroyTask(taskId);
- else
- {
- if (gTasks[taskId].tFrameCounter)
- gTasks[taskId].tFrameCounter--;
- else
- {
- gTasks[taskId].tFrameCounter = gTasks[taskId].tUpdateInterval;
- gTasks[taskId].tFadeLevel--;
- LoadPalette(&gUnknown_081E795C[gTasks[taskId].tFadeLevel], 1, 0x10);
- }
- }
- }
-}
-
-//Launches a helper task to fade in the background
-static void StartBackgroundFadeIn(u8 taskId, u8 interval)
-{
- u8 newTaskId = CreateTask(HandleFloorShadowFadeIn, 0);
- gTasks[newTaskId].tMainTaskId = taskId;
- gTasks[newTaskId].tFadeLevel = 8;
- gTasks[newTaskId].tDelay = 8;
- gTasks[newTaskId].tUpdateInterval = interval;
- gTasks[newTaskId].tFrameCounter = interval;
-}
-
-#undef tMainTaskId
-#undef tFadeLevel
-#undef tDelay
-#undef tUpdateInterval
-#undef tFrameCounter
-
-static void CreateGenderMenu(u8 left, u8 top)
-{
- u8 menuLeft, menuTop;
- Menu_DrawStdWindowFrame(left, top, left + 6, top + 5);
- menuLeft = left + 1;
- menuTop = top + 1;
- Menu_PrintItems(menuLeft, menuTop, 2, gUnknown_081E79B0);
- InitMenu(0, menuLeft, menuTop, 2, 0, 5);
-}
-
-static s8 GenderMenuProcessInput(void)
-{
- return Menu_ProcessInputNoWrap();
-}
-
-static void CreateNameMenu(u8 left, u8 top)
-{
- Menu_DrawStdWindowFrame(left, top, left + 10, top + 11);
-
- if (gSaveBlock2.playerGender == MALE)
- Menu_PrintItems(left + 1, top + 1, 5, gMalePresetNames);
- else
- Menu_PrintItems(left + 1, top + 1, 5, gFemalePresetNames);
-
- InitMenu(0, left + 1, top + 1, 5, 0, 9);
-}
-
-static s8 NameMenuProcessInput(void)
-{
- return Menu_ProcessInput();
-}
-
-static void SetPresetPlayerName(u8 index)
-{
- u8 i;
- u8 *name;
-
- if (gSaveBlock2.playerGender == MALE)
- name = (u8 *) gMalePresetNames[index].text;
- else
- name = (u8 *) gFemalePresetNames[index].text;
-
- for (i = 0; i < 7; i++)
- gSaveBlock2.playerName[i] = name[i];
-
- gSaveBlock2.playerName[i] = EOS;
-}