mirror of
https://github.com/pret/pokeplatinum.git
synced 2026-10-27 11:04:29 -05:00
199 lines
4.5 KiB
C
199 lines
4.5 KiB
C
#include <nitro.h>
|
|
#include <string.h>
|
|
|
|
#include "core_sys.h"
|
|
|
|
#include "message.h"
|
|
#include "struct_decls/struct_02018340_decl.h"
|
|
#include "strbuf.h"
|
|
|
|
#include "struct_defs/struct_02017E74.h"
|
|
#include "struct_defs/struct_0205AA50.h"
|
|
#include "struct_defs/struct_02099F80.h"
|
|
#include "overlay061/struct_ov61_0222C884.h"
|
|
#include "overlay084/struct_ov84_0223BA5C.h"
|
|
#include "overlay097/struct_ov97_0222DB78.h"
|
|
|
|
#include "unk_02000C88.h"
|
|
#include "unk_02002B7C.h"
|
|
#include "unk_0200A9DC.h"
|
|
#include "message.h"
|
|
#include "unk_0200DA60.h"
|
|
#include "unk_0200F174.h"
|
|
#include "unk_02017728.h"
|
|
#include "heap.h"
|
|
#include "unk_02018340.h"
|
|
#include "unk_0201D670.h"
|
|
#include "gx_layers.h"
|
|
#include "strbuf.h"
|
|
#include "unk_02034198.h"
|
|
#include "unk_020366A0.h"
|
|
#include "error_message_reset.h"
|
|
|
|
static const UnkStruct_02099F80 sErrorMessageBanksConfig = {
|
|
GX_VRAM_BG_256_AB,
|
|
GX_VRAM_BGEXTPLTT_NONE,
|
|
GX_VRAM_SUB_BG_NONE,
|
|
GX_VRAM_SUB_BGEXTPLTT_NONE,
|
|
GX_VRAM_OBJ_NONE,
|
|
GX_VRAM_OBJEXTPLTT_NONE,
|
|
GX_VRAM_SUB_OBJ_NONE,
|
|
GX_VRAM_SUB_OBJEXTPLTT_NONE,
|
|
GX_VRAM_TEX_NONE,
|
|
GX_VRAM_TEXPLTT_NONE
|
|
};
|
|
|
|
static const UnkStruct_ov84_0223BA5C sErrorMessageBgModeSet = {
|
|
GX_DISPMODE_GRAPHICS,
|
|
GX_BGMODE_0,
|
|
GX_BGMODE_0,
|
|
GX_BG0_AS_2D
|
|
};
|
|
|
|
static const UnkStruct_ov97_0222DB78 sErrorMessageBgTemplate = {
|
|
0x0,
|
|
0x0,
|
|
0x800,
|
|
0x0,
|
|
0x1,
|
|
GX_BG_COLORMODE_16,
|
|
GX_BG_SCRBASE_0x0000,
|
|
GX_BG_CHARBASE_0x18000,
|
|
GX_BG_EXTPLTT_01,
|
|
0x1,
|
|
0x0,
|
|
0x0,
|
|
0x0
|
|
};
|
|
|
|
static const UnkStruct_ov61_0222C884 sErrorMessageWindowTemplate = {
|
|
0x0,
|
|
0x3,
|
|
0x3,
|
|
0x1A,
|
|
0x12,
|
|
0x1,
|
|
0x23
|
|
};
|
|
|
|
static const HeapParam sErrorMessageHeapParams[] = {
|
|
{
|
|
.size = 0x20000,
|
|
.arena = OS_ARENA_MAIN
|
|
}
|
|
};
|
|
|
|
static BOOL sErrorMessagePrinterLock;
|
|
|
|
static void VBlankIntr (void)
|
|
{
|
|
OS_SetIrqCheckFlag(OS_IE_V_BLANK);
|
|
MI_WaitDma(GX_DEFAULT_DMAID);
|
|
}
|
|
|
|
void ErrorMessageReset_PrintErrorAndReset (void)
|
|
{
|
|
BGL * bgConfig;
|
|
Window window;
|
|
MessageLoader * errorMsgData;
|
|
Strbuf* errorString;
|
|
int v4;
|
|
int v5 = 0;
|
|
|
|
if (sErrorMessagePrinterLock == TRUE) {
|
|
return;
|
|
}
|
|
|
|
sErrorMessagePrinterLock = TRUE;
|
|
|
|
OS_InitArenaHiAndLo(OS_ARENA_MAIN);
|
|
Heap_InitSystem(sErrorMessageHeapParams, NELEMS(sErrorMessageHeapParams), NELEMS(sErrorMessageHeapParams), 0);
|
|
|
|
v4 = 3;
|
|
|
|
sub_0200F344(0, 0x0);
|
|
sub_0200F344(1, 0x0);
|
|
|
|
OS_DisableIrqMask(OS_IE_V_BLANK);
|
|
OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr);
|
|
OS_EnableIrqMask(OS_IE_V_BLANK);
|
|
|
|
SetMainCallback(NULL, NULL);
|
|
SetHBlankCallback(NULL, NULL);
|
|
|
|
GXLayers_DisableEngineALayers();
|
|
GXLayers_DisableEngineBLayers();
|
|
|
|
GX_SetVisiblePlane(0);
|
|
GXS_SetVisiblePlane(0);
|
|
|
|
SetAutorepeat(4, 8);
|
|
gCoreSys.unk_65 = 0;
|
|
GXLayers_SwapDisplay();
|
|
|
|
G2_BlendNone();
|
|
G2S_BlendNone();
|
|
GX_SetVisibleWnd(GX_WNDMASK_NONE);
|
|
GXS_SetVisibleWnd(GX_WNDMASK_NONE);
|
|
|
|
GXLayers_SetBanks(&sErrorMessageBanksConfig);
|
|
bgConfig = sub_02018340(v5);
|
|
|
|
sub_02018368(&sErrorMessageBgModeSet);
|
|
sub_020183C4(bgConfig, 0, &sErrorMessageBgTemplate, 0);
|
|
sub_02019EBC(bgConfig, 0);
|
|
sub_0200DAA4(bgConfig, 0, (512 - 9), 2, 0, v5);
|
|
sub_02002E7C(0, 1 * (2 * 16), v5);
|
|
sub_02019690(0, 32, 0, v5);
|
|
sub_0201975C(0, 0x6c21);
|
|
sub_0201975C(4, 0x6c21);
|
|
|
|
errorMsgData = MessageLoader_Init(1, 26, 214, v5);
|
|
errorString = Strbuf_Init(0x180, v5);
|
|
|
|
sub_0201D710();
|
|
|
|
sub_0201A8D4(bgConfig, &window, &sErrorMessageWindowTemplate);
|
|
BGL_WindowColor(&window, 15, 0, 0, 26 * 8, 18 * 8);
|
|
Window_Show(&window, 0, (512 - 9), 2);
|
|
MessageLoader_GetStrbuf(errorMsgData, v4, errorString);
|
|
PrintStringSimple(&window, 0, errorString, 0, 0, 0, NULL);
|
|
Strbuf_Free(errorString);
|
|
|
|
GXLayers_TurnBothDispOn();
|
|
sub_0200F338(0);
|
|
sub_0200F338(1);
|
|
sub_0200AB4C(0, (GX_BLEND_PLANEMASK_BG0 | GX_BLEND_PLANEMASK_BG1 | GX_BLEND_PLANEMASK_BG2 | GX_BLEND_PLANEMASK_BG3 | GX_BLEND_PLANEMASK_OBJ | GX_BLEND_PLANEMASK_BD), 3);
|
|
sub_02037DB0();
|
|
|
|
while (TRUE) {
|
|
HandleConsoleFold();
|
|
sub_020349EC();
|
|
|
|
if (sub_02038AB8()) {
|
|
break;
|
|
}
|
|
|
|
OS_WaitIrq(1, OS_IE_V_BLANK);
|
|
}
|
|
|
|
while (TRUE) {
|
|
HandleConsoleFold();
|
|
|
|
if (PAD_Read() & PAD_BUTTON_A) {
|
|
break;
|
|
}
|
|
|
|
OS_WaitIrq(1, OS_IE_V_BLANK);
|
|
}
|
|
|
|
sub_0200F344(0, 0x7fff);
|
|
sub_0200F344(1, 0x7fff);
|
|
|
|
BGL_DeleteWindow(&window);
|
|
MessageLoader_Free(errorMsgData);
|
|
Heap_FreeToHeap(bgConfig);
|
|
|
|
OS_ResetSystem(0);
|
|
}
|