diff options
Diffstat (limited to 'arm9/src/save_data_read_error.c')
-rw-r--r-- | arm9/src/save_data_read_error.c | 79 |
1 files changed, 71 insertions, 8 deletions
diff --git a/arm9/src/save_data_read_error.c b/arm9/src/save_data_read_error.c index f3778435..9524475c 100644 --- a/arm9/src/save_data_read_error.c +++ b/arm9/src/save_data_read_error.c @@ -13,7 +13,7 @@ extern void FUN_0200CCA4(struct Window* window, BOOL copy_to_vram, u16 fill_valu extern void FUN_0200E394(BOOL set_brightness_on_bottom_screen); extern void FUN_0200E3A0(BOOL set_brightness_on_bottom_screen, s32); -const struct WindowTemplate gSaveDataReadErrorWindowTemplate = { +static const struct WindowTemplate sSaveDataReadErrorWindowTemplate = { .bgId = GF_BG_LYR_MAIN_0, .tilemapLeft = 3, .tilemapTop = 3, @@ -23,14 +23,14 @@ const struct WindowTemplate gSaveDataReadErrorWindowTemplate = { .baseTile = 0x23, }; -const struct GraphicsModes gSaveDataReadErrorGraphicsModes = { +static const struct GraphicsModes sSaveDataReadErrorGraphicsModes = { .dispMode = GX_DISPMODE_GRAPHICS, .bgMode = GX_BGMODE_0, .subMode = GX_BGMODE_0, ._2d3dMode = GX_BG0_AS_2D, }; -const struct BgTemplate gSaveDataReadErrorBgTemplate = { +static const struct BgTemplate sSaveDataReadErrorBgTemplate = { .x = 0, .y = 0, .bufferSize = 0x800, @@ -46,7 +46,7 @@ const struct BgTemplate gSaveDataReadErrorBgTemplate = { .mosaic = FALSE, }; -const struct GraphicsBanks gSaveDataReadErrorGraphicsBanks = { +static const struct GraphicsBanks sSaveDataReadErrorGraphicsBanks = { .bg = 3, .bgextpltt = 0, .subbg = 0, @@ -83,13 +83,13 @@ THUMB_FUNC void ShowSaveDataReadError(u32 heap_id) reg_G2S_DB_BLDCNT = 0; reg_GX_DISPCNT &= ~(REG_GX_DISPCNT_OW_MASK | REG_GX_DISPCNT_W1_MASK | REG_GX_DISPCNT_W0_MASK); reg_GXS_DB_DISPCNT &= ~(REG_GXS_DB_DISPCNT_OW_MASK | REG_GXS_DB_DISPCNT_W1_MASK | REG_GXS_DB_DISPCNT_W0_MASK); - GX_SetBanks(&gSaveDataReadErrorGraphicsBanks); + GX_SetBanks(&sSaveDataReadErrorGraphicsBanks); struct BgConfig* bg_config = BgConfig_Alloc(heap_id); - SetBothScreensModesAndDisable(&gSaveDataReadErrorGraphicsModes); + SetBothScreensModesAndDisable(&sSaveDataReadErrorGraphicsModes); - InitBgFromTemplate(bg_config, 0, &gSaveDataReadErrorBgTemplate, 0); + InitBgFromTemplate(bg_config, 0, &sSaveDataReadErrorBgTemplate, 0); BgClearTilemapBufferAndCommit(bg_config, 0); FUN_0200CB00(bg_config, GF_BG_LYR_MAIN_0, 0x01F7, 2, 0, heap_id); FUN_02002ED0(GF_BG_LYR_MAIN_0, 0x20, heap_id); @@ -102,7 +102,7 @@ THUMB_FUNC void ShowSaveDataReadError(u32 heap_id) FUN_0201BD5C(); - AddWindow(bg_config, &window, &gSaveDataReadErrorWindowTemplate); + AddWindow(bg_config, &window, &sSaveDataReadErrorWindowTemplate); FillWindowPixelRect(&window, 0xF, 0, 0, 208, 144); FUN_0200CCA4(&window, FALSE, 0x01F7, 2); @@ -121,3 +121,66 @@ THUMB_FUNC void ShowSaveDataReadError(u32 heap_id) OS_WaitIrq(TRUE, OS_IE_V_BLANK); } } + +THUMB_FUNC void ShowGBACartRemovedError(u32 heap_id) +{ + struct Window window; + + FUN_0200E3A0(PM_LCD_TOP, 0); + FUN_0200E3A0(PM_LCD_BOTTOM, 0); + + Main_SetVBlankIntrCB(NULL, NULL); + FUN_02015F34(NULL, NULL); + + GX_DisableEngineALayers(); + GX_DisableEngineBLayers(); + reg_GX_DISPCNT &= ~REG_GX_DISPCNT_DISPLAY_MASK; + reg_GXS_DB_DISPCNT &= ~REG_GX_DISPCNT_DISPLAY_MASK; + + SetKeyRepeatTimers(4, 8); + + gMain.screensFlipped = 0; + + GX_SwapDisplay(); + reg_G2_BLDCNT = 0; + reg_G2S_DB_BLDCNT = 0; + reg_GX_DISPCNT &= ~(REG_GX_DISPCNT_OW_MASK | REG_GX_DISPCNT_W1_MASK | REG_GX_DISPCNT_W0_MASK); + reg_GXS_DB_DISPCNT &= ~(REG_GXS_DB_DISPCNT_OW_MASK | REG_GXS_DB_DISPCNT_W1_MASK | REG_GXS_DB_DISPCNT_W0_MASK); + GX_SetBanks(&sSaveDataReadErrorGraphicsBanks); + + struct BgConfig* bg_config = BgConfig_Alloc(heap_id); + + SetBothScreensModesAndDisable(&sSaveDataReadErrorGraphicsModes); + + InitBgFromTemplate(bg_config, 0, &sSaveDataReadErrorBgTemplate, 0); + BgClearTilemapBufferAndCommit(bg_config, 0); + FUN_0200CB00(bg_config, GF_BG_LYR_MAIN_0, 0x01F7, 2, 0, heap_id); + FUN_02002ED0(GF_BG_LYR_MAIN_0, 0x20, heap_id); + BG_ClearCharDataRange(GF_BG_LYR_MAIN_0, 0x20, 0, heap_id); + BG_SetMaskColor(GF_BG_LYR_MAIN_0, 0x6C21); + BG_SetMaskColor(GF_BG_LYR_SUB_0, 0x6C21); + + struct MsgData* msg_data = NewMsgDataFromNarc(1, NARC_MSGDATA_MSG, NARC_msg_narc_0005_bin, heap_id); + struct String* str = String_ctor(384, heap_id); + + FUN_0201BD5C(); + + AddWindow(bg_config, &window, &sSaveDataReadErrorWindowTemplate); + FillWindowPixelRect(&window, 0xF, 0, 0, 208, 144); + FUN_0200CCA4(&window, FALSE, 0x01F7, 2); + + ReadMsgDataIntoString(msg_data, 1, str); + AddTextPrinterParameterized(&window, 0, str, 0, 0, 0, NULL); + String_dtor(str); + + GX_BothDispOn(); + FUN_0200E394(PM_LCD_TOP); + FUN_0200E394(PM_LCD_BOTTOM); + SetBrightness(0, 0x3F, 3); + + while (TRUE) + { + HandleDSLidAction(); + OS_WaitIrq(TRUE, OS_IE_V_BLANK); + } +} |