diff --git a/include/functions.h b/include/functions.h index 4a03b89a70..9b189d4ce4 100644 --- a/include/functions.h +++ b/include/functions.h @@ -2601,7 +2601,7 @@ void Play_Init(GameState* gameState); // void func_8016CD4C(void); // void func_8016E40C(void); // void func_8016EA90(void); -// void func_8016F1A8(void); +void func_8016F1A8(HiresoStruct* arg0, GraphicsContext* gfxCtx); // void func_8016F4EC(void); void func_8016F5A8(PlayState* play, HiresoStruct* arg1, Input* input); void func_8016FC78(HiresoStruct* this); @@ -2778,11 +2778,11 @@ void func_801780F0(Mtx* param_1, f32 param_2, f32 param_3, f32 param_4, f32 para // void func_801781EC(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); void func_8017842C(MtxF* arg0, f32 arg1, f32 arg2, f32 arg3, s16 arg4, f32 arg5, f32 arg6, f32 arg7, f32 arg8, f32 arg9, f32 arg10); void func_80178750(void); -// void func_80178818(void); +void func_80178818(void); void func_80178978(void); // void func_801789D4(void); -u32 SysCfb_GetFbPtr(s32 index); -u32 SysCfb_GetZBuffer(void); +void* SysCfb_GetFbPtr(s32 index); +void* SysCfb_GetZBuffer(void); // UNK_TYPE4 func_80178A24(void); // void func_80178A34(void); s32 func_80178A94(s32 param_1, s32 param_2); diff --git a/include/variables.h b/include/variables.h index 56111f6f29..a5dbdbb528 100644 --- a/include/variables.h +++ b/include/variables.h @@ -3275,7 +3275,7 @@ extern UNK_TYPE2 D_801FBBCC; extern UNK_TYPE2 D_801FBBCE; // extern UNK_TYPE1 D_801FBBD0; // extern UNK_TYPE1 D_801FBBD2; -// extern UNK_TYPE1 D_801FBBD4; +extern u8 D_801FBBD4; // extern UNK_TYPE1 D_801FBBE0; extern Vec3f D_801FBBF0; extern LineSegment Math3D_ColSphereTri_line; diff --git a/src/code/graph.c b/src/code/graph.c index 481aa1da0e..bfce5ab0fa 100644 --- a/src/code/graph.c +++ b/src/code/graph.c @@ -49,7 +49,7 @@ void Graph_SetNextGfxPool(GraphicsContext* gfxCtx) { gfxCtx->workBuffer = pool->workBuffer; gfxCtx->debugBuffer = pool->debugBuffer; - gfxCtx->curFrameBuffer = (u16*)SysCfb_GetFbPtr(gfxCtx->framebufferIdx % 2); + gfxCtx->curFrameBuffer = SysCfb_GetFbPtr(gfxCtx->framebufferIdx % 2); gSegments[0x0F] = gfxCtx->curFrameBuffer; gfxCtx->zbuffer = SysCfb_GetZBuffer(); diff --git a/src/code/z_play.c b/src/code/z_play.c index 3b2297678d..b181b85c24 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -233,13 +233,13 @@ void Play_Destroy(GameState* thisx) { if (D_801F6DFC != 0) { MsgEvent_SendNullTask(); func_80178750(); - gfxCtx->curFrameBuffer = (u16*)SysCfb_GetFbPtr(gfxCtx->framebufferIdx % 2); + gfxCtx->curFrameBuffer = SysCfb_GetFbPtr(gfxCtx->framebufferIdx % 2); gfxCtx->zbuffer = SysCfb_GetZBuffer(); gfxCtx->viMode = D_801FBB88; gfxCtx->viConfigFeatures = gViConfigFeatures; gfxCtx->xScale = gViConfigXScale; gfxCtx->yScale = gViConfigYScale; - gfxCtx->updateViMode = 1; + gfxCtx->updateViMode = true; D_801F6DFC = 0; } @@ -442,7 +442,46 @@ void func_80167F0C(PlayState* this) { #pragma GLOBAL_ASM("asm/non_matchings/code/z_play/Play_Draw.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80168DAC.s") +void func_80168DAC(PlayState* this) { + GraphicsContext* gfxCtx = this->state.gfxCtx; + + { + GraphicsContext* gfxCtx2 = this->state.gfxCtx; + + if (D_801F6DFC != 0) { + if (D_801FBBD4 != 1) { + MsgEvent_SendNullTask(); + func_80178818(); + gfxCtx2->curFrameBuffer = SysCfb_GetFbPtr(gfxCtx2->framebufferIdx % 2); + gfxCtx2->zbuffer = SysCfb_GetZBuffer(); + gfxCtx2->viMode = D_801FBB88; + gfxCtx2->viConfigFeatures = gViConfigFeatures; + gfxCtx2->xScale = gViConfigXScale; + gfxCtx2->yScale = gViConfigYScale; + gfxCtx2->updateViMode = true; + } + } else { + if (D_801FBBD4 != 0) { + MsgEvent_SendNullTask(); + func_80178750(); + gfxCtx2->curFrameBuffer = SysCfb_GetFbPtr(gfxCtx2->framebufferIdx % 2); + gfxCtx2->zbuffer = SysCfb_GetZBuffer(); + gfxCtx2->viMode = D_801FBB88; + gfxCtx2->viConfigFeatures = gViConfigFeatures; + gfxCtx2->xScale = gViConfigXScale; + gfxCtx2->yScale = gViConfigYScale; + gfxCtx2->updateViMode = true; + } + } + } + + if ((D_801F6DFC != 0) && ((SREG(2) != 2) || (gZBufferPtr == NULL))) { + func_8016F1A8(&D_801F6D50, gfxCtx); + func_80156758(this); + } else { + Play_Draw(this); + } +} void Play_Main(GameState* thisx); #pragma GLOBAL_ASM("asm/non_matchings/code/z_play/Play_Main.s")