diff --git a/soh/src/code/graph.c b/soh/src/code/graph.c index f4a824cb4..f4dcf56e8 100644 --- a/soh/src/code/graph.c +++ b/soh/src/code/graph.c @@ -433,6 +433,7 @@ static void RunFrame() { u32 size; char faultMsg[0x50]; + static bool hasSetupSkybox = false; switch (runFrameContext.state) { case 0: @@ -465,6 +466,14 @@ static void RunFrame() } GameState_Init(runFrameContext.gameState, runFrameContext.ovl->init, &runFrameContext.gfxCtx); + // Setup the normal skybox once before entering any game states to avoid the 0xabababab crash. + // The crash is due to certain skyboxes not loading all the data they need from Skybox_Setup. + if (!hasSetupSkybox) { + GlobalContext* globalCtx = (GlobalContext*)runFrameContext.gameState; + Skybox_Setup(globalCtx, &globalCtx->skyboxCtx, SKYBOX_NORMAL_SKY); + hasSetupSkybox = true; + } + uint64_t freq = GetFrequency(); while (GameState_IsRunning(runFrameContext.gameState))