diff options
Diffstat (limited to 'src/main_menu.c')
-rw-r--r-- | src/main_menu.c | 193 |
1 files changed, 140 insertions, 53 deletions
diff --git a/src/main_menu.c b/src/main_menu.c index c8a868251..85a445a67 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -51,48 +51,15 @@ IWRAM_DATA u8 gUnknown_03000DD0; // Static ROM declarations -// .rodata - -// .text - -enum -{ - HAS_NO_SAVED_GAME, //NEW GAME, OPTION - HAS_SAVED_GAME, //CONTINUE, NEW GAME, OPTION - HAS_MYSTERY_GIFT, //CONTINUE, NEW GAME, MYSTERY EVENTS, OPTION - HAS_MYSTERY_EVENTS, -}; - -struct ArrowStruct { - u8 unk0[6]; - u16 unk6[5]; -}; - -extern struct BgTemplate gUnknown_082FF0E8[]; -extern struct WindowTemplate gUnknown_082FF038[]; -extern struct WindowTemplate gUnknown_082FF070[]; -extern u8 gUnknown_082FF0E0[]; -extern struct WindowTemplate gUnknown_082FF048[]; -extern struct ArrowStruct gUnknown_082FF0F4; -extern struct BgTemplate gUnknown_082FF0F0; -extern struct WindowTemplate gUnknown_082FF080[]; -extern const union AffineAnimCmd *const gUnknown_082FF114[]; -extern struct WindowTemplate gUnknown_082FF088[]; -extern const struct MenuAction gUnknown_082FF118[]; -extern u8* gMalePresetNames[]; -extern u8* gFemalePresetNames[]; -extern u8 gUnknown_082FF0E3[]; - u32 InitMainMenu(bool8); void Task_MainMenuCheckSaveFile(u8); void Task_MainMenuCheckBattery(u8); void Task_WaitForSaveFileErrorWindow(u8); void CreateMainMenuErrorWindow(const u8*); -void sub_8032250(struct WindowTemplate*); +void sub_8032250(const struct WindowTemplate*); void Task_DisplayMainMenu(u8); void Task_WaitForBatteryDryErrorWindow(u8); void fmt_savegame(void); -u8 AddScrollIndicatorArrowPair(struct ArrowStruct*, u16*); void HighlightSelectedMainMenuItem(u8, u8, s16); void Task_HandleMainMenuInput(u8); void Task_HandleMainMenuAPressed(u8); @@ -119,7 +86,7 @@ void task_new_game_prof_birch_speech_9(u8); void task_new_game_prof_birch_speech_10(u8); void task_new_game_prof_birch_speech_11(u8); void LoadMainMenuWindowFrameTiles(u8, u16); -void DrawMainMenuWindowBorder(struct WindowTemplate*, u16); +void DrawMainMenuWindowBorder(const struct WindowTemplate*, u16); void Task_HighlightSelectedMainMenuItem(u8); void task_new_game_prof_birch_speech_12(u8); void task_new_game_prof_birch_speech_13(u8); @@ -154,6 +121,126 @@ void fmt_player(void); void fmt_badges(void); void sub_8032474(u8, u8, u8, u8, u8, u8); +// .rodata + +const u16 gUnknown_082FECFC[][16] = { + INCBIN_U16("graphics/birch_speech/bg0.gbapal"), + INCBIN_U16("graphics/birch_speech/bg1.gbapal") +}; + +const u8 gBirchIntroShadowGfx[] = INCBIN_U8("graphics/birch_speech/shadow.4bpp.lz"); +const u8 gUnknown_082FEEF0[] = INCBIN_U8("graphics/birch_speech/map.bin.lz"); +const u16 gUnknown_082FF018[] = INCBIN_U16("graphics/birch_speech/bg2.gbapal"); +const u16 gUnknown_082FF028[] = {0, 0, 0, 0, 0, 0, 0, 0}; + +const struct WindowTemplate gUnknown_082FF038[] = { + {0, 2, 1, 26, 2, 15, 1}, + {0, 2, 5, 26, 2, 15, 0x35} +}; + +const struct WindowTemplate gUnknown_082FF048[] = { + {0, 2, 1, 26, 6, 15, 1}, + {0, 2, 9, 26, 2, 15, 0x9D}, + {0, 2, 13, 26, 2, 15, 0xD1}, + {0, 2, 17, 26, 2, 15, 0x105}, + {0, 2, 21, 26, 2, 15, 0x139} +}; + +const struct WindowTemplate gUnknown_082FF070[] = { + {0, 2, 15, 26, 4, 15, 0x16D}, + {0xFF, 0, 0, 0, 0, 0, 0} +}; + +const struct WindowTemplate gUnknown_082FF080[] = { + {0, 2, 15, 27, 4, 15, 1}, + {0, 3, 5, 6, 4, 15, 0x6D}, + {0, 3, 2, 9, 10, 15, 0x85}, + {0xFF, 0, 0, 0, 0, 0, 0} +}; + +const u16 gMainMenuBgPal[] = INCBIN_U16("graphics/misc/main_menu_bg.gbapal"); +const u16 gMainMenuTextPal[] = INCBIN_U16("graphics/misc/main_menu_text.gbapal"); + +const u8 gUnknown_082FF0E0[] = {10, 11, 12}; +const u8 gUnknown_082FF0E3[] = {10, 1, 12}; + +const struct BgTemplate gUnknown_082FF0E8[] = { + {0, 2, 30, 0, 0, 0, 0}, + {1, 0, 7, 0, 0, 3, 0} +}; + +const struct BgTemplate gUnknown_082FF0F0 = {0, 3, 30, 0, 0, 0, 0}; + +const struct ArrowStruct gUnknown_082FF0F4 = {2, 0x78, 8, 3, 0x78, 0x98, 3, 4, 1, 1, 0}; + +const union AffineAnimCmd gUnknown_082FF104[] = { + AFFINEANIMCMD_FRAME(-2, -2, 0, 0x30), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd *const gUnknown_082FF114 = gUnknown_082FF104; + +const struct MenuAction gUnknown_082FF118[] = { + {gText_BirchBoy, NULL}, + {gText_BirchGirl, NULL} +}; + +const u8 *const gMalePresetNames[] = { + gText_DefaultNameStu, + gText_DefaultNameMilton, + gText_DefaultNameTom, + gText_DefaultNameKenny, + gText_DefaultNameReid, + gText_DefaultNameJude, + gText_DefaultNameJaxson, + gText_DefaultNameEaston, + gText_DefaultNameWalker, + gText_DefaultNameTeru, + gText_DefaultNameJohnny, + gText_DefaultNameBrett, + gText_DefaultNameSeth, + gText_DefaultNameTerry, + gText_DefaultNameCasey, + gText_DefaultNameDarren, + gText_DefaultNameLandon, + gText_DefaultNameCollin, + gText_DefaultNameStanley, + gText_DefaultNameQuincy +}; + +const u8 *const gFemalePresetNames[] = { + gText_DefaultNameKimmy, + gText_DefaultNameTiara, + gText_DefaultNameBella, + gText_DefaultNameJayla, + gText_DefaultNameAllie, + gText_DefaultNameLianna, + gText_DefaultNameSara, + gText_DefaultNameMonica, + gText_DefaultNameCamila, + gText_DefaultNameAubree, + gText_DefaultNameRuthie, + gText_DefaultNameHazel, + gText_DefaultNameNadine, + gText_DefaultNameTanja, + gText_DefaultNameYasmin, + gText_DefaultNameNicola, + gText_DefaultNameLillie, + gText_DefaultNameTerra, + gText_DefaultNameLucy, + gText_DefaultNameHalie +}; + +// .text + +enum +{ + HAS_NO_SAVED_GAME, //NEW GAME, OPTION + HAS_SAVED_GAME, //CONTINUE, NEW GAME, OPTION + HAS_MYSTERY_GIFT, //CONTINUE, NEW GAME, MYSTERY EVENTS, OPTION + HAS_MYSTERY_EVENTS, +}; + void CB2_MainMenu(void) { RunTasks(); @@ -230,7 +317,7 @@ u32 InitMainMenu(bool8 affects_palette_maybe) EnableInterrupts(1); SetVBlankCallback(VBlankCB_MainMenu); SetMainCallback2(CB2_MainMenu); - SetGpuReg(REG_OFFSET_DISPCNT, 0x3040); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); ShowBg(0); HideBg(1); CreateTask(Task_MainMenuCheckSaveFile, 0); @@ -248,7 +335,7 @@ void Task_MainMenuCheckSaveFile(u8 taskId) SetGpuReg(REG_OFFSET_WIN0V, 0); SetGpuReg(REG_OFFSET_WININ, 17); SetGpuReg(REG_OFFSET_WINOUT, 0x31); - SetGpuReg(REG_OFFSET_BLDCNT, 0xC1); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_DARKEN | BLDCNT_TGT1_BG0); SetGpuReg(REG_OFFSET_BLDALPHA, 0); SetGpuReg(REG_OFFSET_BLDY, 7); @@ -326,7 +413,7 @@ void Task_MainMenuCheckBattery(u8 taskId) SetGpuReg(REG_OFFSET_WIN0V, 0); SetGpuReg(REG_OFFSET_WININ, 17); SetGpuReg(REG_OFFSET_WINOUT, 0x31); - SetGpuReg(REG_OFFSET_BLDCNT, 0xC1); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_DARKEN | BLDCNT_TGT1_BG0); SetGpuReg(REG_OFFSET_BLDALPHA, 0); SetGpuReg(REG_OFFSET_BLDY, 7); @@ -364,7 +451,7 @@ void Task_DisplayMainMenu(u8 taskId) SetGpuReg(REG_OFFSET_WIN0V, 0); SetGpuReg(REG_OFFSET_WININ, 17); SetGpuReg(REG_OFFSET_WINOUT, 0x31); - SetGpuReg(REG_OFFSET_BLDCNT, 0xC1); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_DARKEN | BLDCNT_TGT1_BG0); SetGpuReg(REG_OFFSET_BLDALPHA, 0); SetGpuReg(REG_OFFSET_BLDY, 7); @@ -862,7 +949,7 @@ void HighlightSelectedMainMenuItem(u8 menuType, u8 selectedMenuItem, s16 a) void task_new_game_prof_birch_speech_1(u8 taskId) { SetGpuReg(REG_OFFSET_DISPCNT, 0); - SetGpuReg(REG_OFFSET_DISPCNT, 0x1040); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); InitBgFromTemplate(&gUnknown_082FF0F0); SetGpuReg(REG_OFFSET_WIN0H, 0); SetGpuReg(REG_OFFSET_WIN0V, 0); @@ -1338,7 +1425,7 @@ void task_new_game_prof_birch_speech_part2_9(u8 taskId) { spriteId = gTasks[taskId].data[2]; gSprites[spriteId].oam.affineMode = 1; - gSprites[spriteId].affineAnims = gUnknown_082FF114; + gSprites[spriteId].affineAnims = &gUnknown_082FF114; InitSpriteAffineAnim(&gSprites[spriteId]); StartSpriteAffineAnim(&gSprites[spriteId], 0); gSprites[spriteId].callback = sub_80318D8; @@ -1365,7 +1452,7 @@ void task_new_game_prof_birch_speech_part2_11(u8 taskId) { spriteId = gTasks[taskId].data[2]; gSprites[spriteId].callback = nullsub_11; - SetGpuReg(REG_OFFSET_DISPCNT, 0x1040); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); BeginNormalPaletteFade(-0x10000, 0, 0, 16, -1); gTasks[taskId].func = task_new_game_prof_birch_speech_part2_12; } @@ -1391,7 +1478,7 @@ void new_game_prof_birch_speech_part2_start(void) ResetBgsAndClearDma3BusyFlags(0); SetGpuReg(REG_OFFSET_DISPCNT, 0); - SetGpuReg(REG_OFFSET_DISPCNT, 0x1040); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); InitBgsFromTemplates(0, gUnknown_082FF0E8, 2); InitBgFromTemplate(&gUnknown_082FF0F0); SetVBlankCallback(NULL); @@ -1493,12 +1580,12 @@ void AddBirchSpeechObjects(u8 taskId) gSprites[spriteId2].oam.priority = 0; gSprites[spriteId2].invisible = 1; gTasks[taskId].data[9] = spriteId2; - spriteId3 = CreateTrainerSprite(sub_806EFF0(0x3C), 0x78, 0x3C, 0, gDecompressionBuffer); + spriteId3 = CreateTrainerSprite(FacilityClassToPicIndex(0x3C), 0x78, 0x3C, 0, gDecompressionBuffer); gSprites[spriteId3].callback = nullsub_11; gSprites[spriteId3].invisible = 1; gSprites[spriteId3].oam.priority = 0; gTasks[taskId].data[10] = spriteId3; - spriteId4 = CreateTrainerSprite(sub_806EFF0(0x3F), 0x78, 0x3C, 0, &gDecompressionBuffer[0x800]); + spriteId4 = CreateTrainerSprite(FacilityClassToPicIndex(0x3F), 0x78, 0x3C, 0, &gDecompressionBuffer[0x800]); gSprites[spriteId4].callback = nullsub_11; gSprites[spriteId4].invisible = 1; gSprites[spriteId4].oam.priority = 0; @@ -1532,8 +1619,8 @@ void sub_8031ACC(u8 taskId, u8 a) { u8 taskId2; - SetGpuReg(REG_OFFSET_BLDCNT, 0x250); - SetGpuReg(REG_OFFSET_BLDALPHA, 16); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_OBJ); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0)); SetGpuReg(REG_OFFSET_BLDY, 0); gTasks[taskId].data[5] = 0; taskId2 = CreateTask(sub_8031A5C, 0); @@ -1571,8 +1658,8 @@ void sub_8031BAC(u8 taskId, u8 a) { u8 taskId2; - SetGpuReg(REG_OFFSET_BLDCNT, 0x250); - SetGpuReg(REG_OFFSET_BLDALPHA, 0x1000); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_OBJ); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); SetGpuReg(REG_OFFSET_BLDY, 0); gTasks[taskId].data[5] = 0; taskId2 = CreateTask(sub_8031B3C, 0); @@ -1653,7 +1740,7 @@ void sub_8031D34(u8 taskId, u8 a) void sub_8031D74(void) { - DrawMainMenuWindowBorder(gUnknown_082FF088, 0xF3); + DrawMainMenuWindowBorder(&gUnknown_082FF080[1], 0xF3); FillWindowPixelBuffer(1, 17); PrintMenuTable(1, 2, gUnknown_082FF118); InitMenuInUpperLeftCornerPlaySoundWhenAPressed(1, 2, 0); @@ -1668,7 +1755,7 @@ s8 sub_8031DB4(void) void set_default_player_name(u8 nameId) { - u8* name; + const u8* name; u8 i; if (gSaveBlock2Ptr->playerGender == MALE) @@ -1760,7 +1847,7 @@ void LoadMainMenuWindowFrameTiles(u8 bgId, u16 tileOffset) LoadPalette(GetWindowFrameTilesPal(gSaveBlock2Ptr->optionsWindowFrameType)->pal, 32, 32); } -void DrawMainMenuWindowBorder(struct WindowTemplate *template, u16 baseTileNum) +void DrawMainMenuWindowBorder(const struct WindowTemplate *template, u16 baseTileNum) { u16 r9 = 1 + baseTileNum; u16 r10 = 2 + baseTileNum; @@ -1781,7 +1868,7 @@ void DrawMainMenuWindowBorder(struct WindowTemplate *template, u16 baseTileNum) CopyBgTilemapBufferToVram(template->priority); } -void sub_8032250(struct WindowTemplate *template) +void sub_8032250(const struct WindowTemplate *template) { FillBgTilemapBufferRect(template->priority, 0, template->tilemapLeft - 1, template->tilemapTop - 1, template->tilemapLeft + template->width + 1, template->tilemapTop + template->height + 1, 2); CopyBgTilemapBufferToVram(template->priority); |