diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/main_menu.c | 328 | ||||
-rw-r--r-- | src/mystery_gift_menu.c | 66 | ||||
-rw-r--r-- | src/quest_log.c | 14 |
3 files changed, 337 insertions, 71 deletions
diff --git a/src/main_menu.c b/src/main_menu.c index dfc4fb808..7be99ce2c 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -3,12 +3,23 @@ #include "gpu_regs.h" #include "scanline_effect.h" #include "bg.h" +#include "dma3.h" #include "task.h" #include "text.h" #include "save.h" #include "event_data.h" #include "window.h" +#include "menu.h" +#include "link.h" +#include "oak_speech.h" +#include "overworld.h" +#include "quest_log.h" +#include "mystery_gift_menu.h" #include "strings.h" +#include "sound.h" +#include "title_screen.h" +#include "help_system.h" +#include "constants/songs.h" bool32 sub_800C318(u8 a0); void sub_800C4D0(u8 taskId); @@ -17,16 +28,32 @@ void sub_800C688(u8 taskId); void sub_800C704(u8 taskId); void sub_800C780(u8 taskId); void sub_800C7A0(u8 taskId); +void sub_800C9CC(u8 taskId); +void sub_800CA28(u8 taskId); +void sub_800CA54(u8 taskId); void sub_800CA94(u8 taskId); +void sub_800CB90(u8 taskId); +void sub_800CC68(u8 taskId); +void sub_800CC94(u8 menuType, u8 cursorPos); +bool8 sub_800CCF8(u8 taskId); void sub_800CDF8(const u8 *str); +void sub_800CE58(void); +void sub_800CE70(void); +void sub_800CED4(void); +void sub_800CF3C(void); +void sub_800CFC4(void); void sub_800D044(u8 a0); void sub_800D094(u8 a0); +void sub_800D0B4(const struct WindowTemplate * template); void sub_800D1E8(const struct WindowTemplate * template); extern const struct WindowTemplate gUnknown_8234618[]; extern const u16 gUnknown_8234648[]; extern const u16 gUnknown_8234668[]; +extern const u8 gUnknown_8234688[]; +extern const u8 gUnknown_823468B[]; extern const struct BgTemplate gUnknown_8234690[1]; +extern const u8 gUnknown_8234694[]; void sub_800C2D4(void) { @@ -215,3 +242,304 @@ void sub_800C780(u8 taskId) sub_800C7A0(taskId); } } + +void sub_800C7A0(u8 taskId) +{ + u16 pal; + SetGpuReg(REG_OFFSET_WIN0H, 0); + SetGpuReg(REG_OFFSET_WIN0V, 0); + SetGpuReg(REG_OFFSET_WININ, 0x0001); + SetGpuReg(REG_OFFSET_WINOUT, 0x0021); + SetGpuReg(REG_OFFSET_BLDCNT, + BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | + BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0)); + SetGpuReg(REG_OFFSET_BLDY, 7); + if (gSaveBlock2Ptr->playerGender == MALE) + pal = RGB(4, 16, 31); + else + pal = RGB(31, 3, 21); + LoadPalette(&pal, 0xF1, 2); + switch (gTasks[taskId].data[0]) + { + case 0: + default: + FillWindowPixelBuffer(0, PIXEL_FILL(10)); + AddTextPrinterParameterized3(0, 2, 2, 2, gUnknown_8234688, -1, gText_NewGame); + sub_800D0B4(&gUnknown_8234618[0]); + PutWindowTilemap(0); + CopyWindowToVram(0, 3); + break; + case 1: + FillWindowPixelBuffer(1, PIXEL_FILL(10)); + FillWindowPixelBuffer(2, PIXEL_FILL(10)); + AddTextPrinterParameterized3(1, 2, 2, 2, gUnknown_8234688, -1, gText_Continue); + AddTextPrinterParameterized3(2, 2, 2, 2, gUnknown_8234688, -1, gText_NewGame); + sub_800CE58(); + sub_800D0B4(&gUnknown_8234618[1]); + sub_800D0B4(&gUnknown_8234618[2]); + PutWindowTilemap(1); + PutWindowTilemap(2); + CopyWindowToVram(1, 2); + CopyWindowToVram(2, 3); + break; + case 2: + FillWindowPixelBuffer(1, PIXEL_FILL(10)); + FillWindowPixelBuffer(2, PIXEL_FILL(10)); + FillWindowPixelBuffer(3, PIXEL_FILL(10)); + AddTextPrinterParameterized3(1, 2, 2, 2, gUnknown_8234688, -1, gText_Continue); + AddTextPrinterParameterized3(2, 2, 2, 2, gUnknown_8234688, -1, gText_NewGame); + gTasks[taskId].data[10] = 1; + AddTextPrinterParameterized3(3, 2, 2, 2, gUnknown_8234688, -1, gText_MysteryGift); + sub_800CE58(); + sub_800D0B4(&gUnknown_8234618[1]); + sub_800D0B4(&gUnknown_8234618[2]); + sub_800D0B4(&gUnknown_8234618[3]); + PutWindowTilemap(1); + PutWindowTilemap(2); + PutWindowTilemap(3); + CopyWindowToVram(1, 2); + CopyWindowToVram(2, 2); + CopyWindowToVram(3, 3); + break; + } + gTasks[taskId].func = sub_800C9CC; +} + +void sub_800C9CC(u8 taskId) +{ + if (CheckForSpaceForDma3Request(-1) != -1) + { + gTasks[taskId].func = sub_800CA28; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0xFFFF); + ShowBg(0); + SetVBlankCallback(sub_800C2EC); + } +} + +void sub_800CA28(u8 taskId) +{ + sub_800CC94(gTasks[taskId].data[0], gTasks[taskId].data[1]); + gTasks[taskId].func = sub_800CA54; +} + +void sub_800CA54(u8 taskId) +{ + if (!gPaletteFade.active && sub_800CCF8(taskId)) + { + gTasks[taskId].func = sub_800CA28; + } +} + +void sub_800CA94(u8 taskId) +{ + s32 r0; + if (!gPaletteFade.active) + { + switch (gTasks[taskId].data[0]) + { + default: + case 0: + r0 = 0; + break; + case 1: + switch (gTasks[taskId].data[1]) + { + default: + case 0: + r0 = 1; + break; + case 1: + r0 = 0; + break; + } + break; + case 2: + switch (gTasks[taskId].data[1]) + { + default: + case 0: + r0 = 1; + break; + case 1: + r0 = 0; + break; + case 2: + if (!IsWirelessAdapterConnected()) + { + sub_800D094(0); + gTasks[taskId].func = sub_800CB90; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + return; + } + else + { + r0 = 2; + } + break; + } + break; + } + switch (r0) + { + default: + case 0: + gUnknown_2031DE0 = 0; + FreeAllWindowBuffers(); + DestroyTask(taskId); + StartNewGameScene(); + break; + case 1: + gPlttBufferUnfaded[0] = RGB_BLACK; + gPlttBufferFaded[0] = RGB_BLACK; + gUnknown_2031DE0 = 0; + FreeAllWindowBuffers(); + TrySetUpQuestLogScenes_ElseContinueFromSave(taskId); + break; + case 2: + SetMainCallback2(c2_mystery_gift); + sub_812B478(); + FreeAllWindowBuffers(); + DestroyTask(taskId); + break; + } + } +} + +void sub_800CB90(u8 taskId) +{ + switch (gTasks[taskId].data[9]) + { + case 0: + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); + if (gTasks[taskId].data[10] == 1) + sub_800CDF8(gText_WirelessAdapterIsNotConnected); + else + sub_800CDF8(gText_MysteryGiftCantBeUsedWhileWirelessAdapterIsAttached); + gTasks[taskId].data[9]++; + break; + case 1: + if (!gPaletteFade.active) + gTasks[taskId].data[9]++; + break; + case 2: + RunTextPrinters(); + if (!IsTextPrinterActive(4)) + gTasks[taskId].data[9]++; + break; + case 3: + if (JOY_NEW(A_BUTTON | B_BUTTON)) + { + PlaySE(SE_SELECT); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gTasks[taskId].func = sub_800CC68; + } + break; + } +} + +void sub_800CC68(u8 taskId) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(CB2_InitTitleScreen); + DestroyTask(taskId); + } +} + +void sub_800CC94(u8 menuType, u8 cursorPos) +{ + u16 win0v1, win0v2; + SetGpuReg(REG_OFFSET_WIN0H, 0x12DE); + switch (menuType) + { + default: + case 0: + win0v1 = 0x00; + win0v2 = 0x20; + break; + case 1: + case 2: + switch (cursorPos) + { + default: + case 0: + win0v1 = 0x00; + win0v2 = 0x60; + break; + case 1: + win0v1 = 0x60 << 8; + win0v2 = 0x80; + break; + case 2: + win0v1 = 0x80 << 8; + win0v2 = 0xA0; + break; + } + break; + } + SetGpuReg(REG_OFFSET_WIN0V, (win0v1 + (2 << 8)) | (win0v2 - 2)); +} + +bool8 sub_800CCF8(u8 taskId) +{ + if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + IsWirelessAdapterConnected(); // called for its side effects only + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gTasks[taskId].func = sub_800CA94; + } + else if (JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + SetGpuReg(REG_OFFSET_WIN0H, 0xF0); + SetGpuReg(REG_OFFSET_WIN0V, 0xA0); + gTasks[taskId].func = sub_800CC68; + } + else if (JOY_NEW(DPAD_UP) && gTasks[taskId].data[1] > 0) + { + gTasks[taskId].data[1]--; + return TRUE; + } + else if (JOY_NEW(DPAD_DOWN) && gTasks[taskId].data[1] < gUnknown_8234694[gTasks[taskId].data[0]]) + { + gTasks[taskId].data[1]++; + return TRUE; + } + + return FALSE; +} + +void sub_800CDF8(const u8 *str) +{ + FillWindowPixelBuffer(4, PIXEL_FILL(10)); + sub_800D0B4(&gUnknown_8234618[4]); + AddTextPrinterParameterized3(4, 2, 0, 2, gUnknown_8234688, 2, str); + PutWindowTilemap(4); + CopyWindowToVram(4, 2); + SetGpuReg(REG_OFFSET_WIN0H, 0x13DD); + SetGpuReg(REG_OFFSET_WIN0V, 0x739D); +} + +void sub_800CE58(void) +{ + sub_800CE70(); + sub_800CF3C(); + sub_800CED4(); + sub_800CFC4(); +} + +void sub_800CE70(void) +{ + s32 i; + u8 name[OT_NAME_LENGTH + 1]; + u8 *ptr; + AddTextPrinterParameterized3(1, 2, 2, 18, gUnknown_823468B, -1, gText_Player); + ptr = name; + for (i = 0; i < OT_NAME_LENGTH; i++) + *ptr++ = gSaveBlock2Ptr->playerName[i]; + *ptr = EOS; + AddTextPrinterParameterized3(1, 2, 62, 18, gUnknown_823468B, -1, name); +} diff --git a/src/mystery_gift_menu.c b/src/mystery_gift_menu.c index dbc685602..39efed6eb 100644 --- a/src/mystery_gift_menu.c +++ b/src/mystery_gift_menu.c @@ -24,6 +24,7 @@ #include "mevent_server.h" #include "menews_jisan.h" #include "help_system.h" +#include "strings.h" #include "constants/songs.h" EWRAM_DATA u8 sDownArrowCounterAndYCoordIdx[8] = {}; @@ -33,69 +34,6 @@ void task_add_00_mystery_gift(void); void task00_mystery_gift(u8 taskId); void task_add_00_ereader(void); -extern const u8 gText_PickOKExit[]; -extern const u8 gText_PickOKCancel[]; -extern const u8 gText_MysteryGift[]; -extern const u8 gJPText_MysteryGift[]; -extern const u8 gJPText_DecideStop[]; -extern const u8 gText_WhatToDoWithCards[]; -extern const u8 gText_WhatToDoWithNews[]; -extern const u8 gText_OkayToDiscardNews[]; -extern const u8 gText_IfThrowAwayCardEventWontHappen[]; -extern const u8 gText_WonderCardThrownAway[]; -extern const u8 gText_WonderNewsThrownAway[]; -extern const u8 gText_DataWillBeSaved[]; -extern const u8 gText_SaveCompletedPressA[]; -extern const u8 gText_WonderCards[]; -extern const u8 gText_WonderNews[]; -extern const u8 gText_Exit3[]; -extern const u8 gText_WirelessCommunication[]; -extern const u8 gText_Friend2[]; -extern const u8 gFameCheckerText_Cancel[]; -extern const u8 gText_Receive[]; -extern const u8 gText_Send[]; -extern const u8 gText_Toss[]; -extern const u8 gText_VarietyOfEventsImportedWireless[]; -extern const u8 gText_WonderCardsInPossession[]; -extern const u8 gText_ReadNewsThatArrived[]; -extern const u8 gText_ReturnToTitle[]; -extern const u8 gText_NothingSentOver[]; -extern const u8 gText_RecordUploadedViaWireless[]; -extern const u8 gText_WonderCardReceived[]; -extern const u8 gText_WonderCardReceivedFrom[]; -extern const u8 gText_WonderNewsReceived[]; -extern const u8 gText_WonderNewsReceivedFrom[]; -extern const u8 gText_NewStampReceived[]; -extern const u8 gText_AlreadyHadCard[]; -extern const u8 gText_AlreadyHadStamp[]; -extern const u8 gText_AlreadyHadNews[]; -extern const u8 gText_NoMoreRoomForStamps[]; -extern const u8 gText_CommunicationCanceled[]; -extern const u8 gText_CantAcceptCardFromTrainer[]; -extern const u8 gText_CantAcceptNewsFromTrainer[]; -extern const u8 gText_CommunicationError[]; -extern const u8 gText_NewTrainerReceived[]; -extern const u8 gText_WonderCardSentTo[]; -extern const u8 gText_WonderNewsSentTo[]; -extern const u8 gText_StampSentTo[]; -extern const u8 gText_OtherTrainerHasCard[]; -extern const u8 gText_OtherTrainerHasStamp[]; -extern const u8 gText_OtherTrainerHasNews[]; -extern const u8 gText_OtherTrainerCanceled[]; -extern const u8 gText_GiftSentTo[]; -extern const u8 gText_CantSendGiftToTrainer[]; -extern const u8 gText_DontHaveCardNewOneInput[]; -extern const u8 gText_DontHaveNewsNewOneInput[]; -extern const u8 gText_WhereShouldCardBeAccessed[]; -extern const u8 gText_WhereShouldNewsBeAccessed[]; -extern const u8 gText_Communicating[]; -extern const u8 gText_ThrowAwayWonderCard[]; -extern const u8 gText_HaventReceivedCardsGift[]; -extern const u8 gText_CommunicationCompleted[]; -extern const u8 gText_HaventReceivedGiftOkayToDiscard[]; -extern const u8 gText_SendingWonderCard[]; -extern const u8 gText_SendingWonderNews[]; - const u16 gUnkTextboxBorderPal[] = INCBIN_U16("graphics/interface/unk_textbox_border.gbapal"); const u32 gUnkTextboxBorderGfx[] = INCBIN_U32("graphics/interface/unk_textbox_border.4bpp.lz"); @@ -538,7 +476,7 @@ void PrintMysteryGiftOrEReaderTopMenu(bool8 mg_or_ereader, bool32 usePickOkCance if (!mg_or_ereader) { src = usePickOkCancel == TRUE ? gText_PickOKExit : gText_PickOKCancel; - AddTextPrinterParameterized4(0, 2, 2, 2, 0, 0, sMG_Ereader_TextColor_1, 0, gText_MysteryGift); + AddTextPrinterParameterized4(0, 2, 2, 2, 0, 0, sMG_Ereader_TextColor_1, 0, gText_MysteryGift2); width = 222 - GetStringWidth(0, src, 0); AddTextPrinterParameterized4(0, 0, width, 2, 0, 0, sMG_Ereader_TextColor_1, 0, src); } diff --git a/src/quest_log.c b/src/quest_log.c index 065b42cef..f98357b32 100644 --- a/src/quest_log.c +++ b/src/quest_log.c @@ -93,7 +93,7 @@ static struct UnkStruct_300201C * gUnknown_300201C; static u16 gUnknown_3002020; EWRAM_DATA u8 gUnknown_203ADF8 = 0; -EWRAM_DATA u8 gUnknown_203ADF9 = 0; +static EWRAM_DATA u8 sNumScenes = 0; EWRAM_DATA u8 gUnknown_203ADFA = 0; EWRAM_DATA u16 gUnknown_203ADFC = 0; EWRAM_DATA u8 gUnknown_203ADFE[3] = {0}; @@ -840,19 +840,19 @@ bool8 sub_8110E68(struct UnkStruct_203AE98 * a0) return TRUE; } -void sub_8110F14(u8 taskId) +void TrySetUpQuestLogScenes_ElseContinueFromSave(u8 taskId) { u8 i; sub_811381C(); - gUnknown_203ADF9 = 0; + sNumScenes = 0; for (i = 0; i < 4; i++) { if (gSaveBlock1Ptr->questLog[i].unk_000) - gUnknown_203ADF9++; + sNumScenes++; } - if (gUnknown_203ADF9 != 0) + if (sNumScenes != 0) { gUnknown_3005ECC = FALSE; sub_8110F90(taskId); @@ -1221,7 +1221,7 @@ void sub_8111914(void) ScriptContext2_Enable(); if (++gUnknown_203ADF8 < 4 && gSaveBlock1Ptr->questLog[gUnknown_203ADF8].unk_000) { - gUnknown_203ADF9--; + sNumScenes--; sub_8111368(); } else @@ -1402,7 +1402,7 @@ bool8 sub_8111CD0(void) void sub_8111CF0(void) { if (gUnknown_203ADFA == 2) - sub_8111070(gUnknown_203ADF9); + sub_8111070(sNumScenes); } void sub_8111D10(void) |