summaryrefslogtreecommitdiff
path: root/src/engine/clear_save_data_menu.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/clear_save_data_menu.c')
-rw-r--r--src/engine/clear_save_data_menu.c177
1 files changed, 177 insertions, 0 deletions
diff --git a/src/engine/clear_save_data_menu.c b/src/engine/clear_save_data_menu.c
new file mode 100644
index 000000000..498562fe0
--- /dev/null
+++ b/src/engine/clear_save_data_menu.c
@@ -0,0 +1,177 @@
+#include "global.h"
+#include "clear_save_data_menu.h"
+#include "main.h"
+#include "menu.h"
+#include "palette.h"
+#include "save.h"
+#include "songs.h"
+#include "sound.h"
+#include "sprite.h"
+#include "strings2.h"
+#include "task.h"
+
+static void VBlankCB_ClearSaveDataScreen(void);
+static void Task_InitMenu(u8);
+static void Task_ProcessMenuInput(u8);
+static void Task_ClearSaveData(u8);
+static void CB2_ClearSaveDataScreen(void);
+static void VBlankCB_InitClearSaveDataScreen(void);
+static u8 InitClearSaveDataScreen(void);
+static void CB2_SoftReset(void);
+
+void CB2_InitClearSaveDataScreen(void)
+{
+ if (InitClearSaveDataScreen())
+ {
+ CreateTask(Task_InitMenu, 0);
+ }
+}
+
+static void VBlankCB_ClearSaveDataScreen(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+static void Task_InitMenu(u8 taskId)
+{
+ ResetSpriteData();
+
+ REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON;
+
+ SetVBlankCallback(VBlankCB_ClearSaveDataScreen);
+ MenuDrawTextWindow(2, 14, 27, 19);
+ MenuPrint(gSystemText_ClearAllSaveDataPrompt, 3, 15);
+
+ MenuDrawTextWindow(2, 1, 8, 6);
+ PrintMenuItems(3, 2, 2, gMenuYesNoItems);
+ InitMenu(0, 3, 2, 2, 1, 5);
+
+ gTasks[taskId].func = Task_ProcessMenuInput;
+}
+
+static void Task_ProcessMenuInput(u8 taskId)
+{
+ switch (ProcessMenuInputNoWrap_())
+ {
+ case 0:
+ PlaySE(SE_SELECT);
+ sub_8071F40(gSystemText_ClearingData);
+ gTasks[taskId].func = Task_ClearSaveData;
+ break;
+ case -1:
+ case 1:
+ PlaySE(SE_SELECT);
+ DestroyTask(taskId);
+ SetMainCallback2(CB2_SoftReset);
+ break;
+ }
+ AnimateSprites();
+ BuildOamBuffer();
+}
+
+static void Task_ClearSaveData(u8 taskId)
+{
+ ClearSaveData();
+ DestroyTask(taskId);
+ SetMainCallback2(CB2_SoftReset);
+}
+
+static void CB2_ClearSaveDataScreen(void)
+{
+ RunTasks();
+ UpdatePaletteFade();
+}
+
+static void VBlankCB_InitClearSaveDataScreen(void)
+{
+ TransferPlttBuffer();
+}
+
+static u8 InitClearSaveDataScreen(void)
+{
+ u16 i;
+ u16 ime;
+
+ switch (gMain.state)
+ {
+ case 0:
+ default:
+ SetVBlankCallback(NULL);
+
+ REG_DISPCNT = 0;
+ REG_BG0HOFS = 0;
+ REG_BG0VOFS = 0;
+ REG_BG3HOFS = 0;
+ REG_BG3VOFS = 0;
+ REG_WIN0H = 0;
+ REG_WIN0V = 0;
+ REG_WININ = 0;
+ REG_WINOUT = 0;
+ REG_BLDCNT = 0;
+ REG_BLDALPHA = 0;
+ REG_BLDY = 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();
+
+ gPlttBufferUnfaded[0] = 0x7fff;
+ gPlttBufferFaded[0] = 0x7fff;
+ gPlttBufferUnfaded[1] = 0x3945;
+ gPlttBufferFaded[1] = 0x3945;
+
+ for (i = 0; i < 0x10; i++)
+ ((u16 *)(VRAM + 0x20))[i] = 0x1111;
+
+ for (i = 0; i < 0x500; i++)
+ ((u16 *)(VRAM + 0x3800))[i] = 0x0001;
+
+ ResetTasks();
+ ResetSpriteData();
+
+ SetUpWindowConfig(&gWindowConfig_81E6C3C);
+ InitMenuWindow(&gWindowConfig_81E6CE4);
+ BeginNormalPaletteFade(-1, 0, 0x10, 0, 0xffff);
+
+ ime = REG_IME;
+ REG_IME = 0;
+ REG_IE |= INTR_FLAG_VBLANK;
+ REG_IME = ime;
+ REG_DISPSTAT |= DISPSTAT_VBLANK_INTR;
+
+ SetVBlankCallback(VBlankCB_InitClearSaveDataScreen);
+
+ REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(7) | BGCNT_16COLOR | BGCNT_TXT256x256;
+ REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_BG0_ON | DISPCNT_BG3_ON;
+ gMain.state = 1;
+ return 0;
+ case 1:
+ UpdatePaletteFade();
+ if (gPaletteFade.active)
+ return 0;
+ SetMainCallback2(CB2_ClearSaveDataScreen);
+ return 1;
+ }
+}
+
+static void CB2_SoftReset(void)
+{
+ switch (gMain.state)
+ {
+ case 0:
+ default:
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, 0xffff);
+ gMain.state = 1;
+ break;
+ case 1:
+ UpdatePaletteFade();
+ if (gPaletteFade.active)
+ return;
+ DoSoftReset();
+ break;
+ }
+}