diff --git a/include/functions.h b/include/functions.h index f079c50fce..4a03b89a70 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1882,7 +1882,7 @@ void func_8011C808(PlayState* play); // void func_8011CA64(void); // void func_8011E3B4(void); // void func_8011E730(void); -// void func_8011F0E0(UNK_TYPE4 ctxt); +void func_8011F0E0(PlayState* play); // void func_80120F90(void); // void func_80121000(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE1 param_8, UNK_TYPE1 param_9, UNK_TYPE1 param_10, UNK_TYPE4 param_11, UNK_TYPE4 param_12, UNK_TYPE4 param_13, UNK_TYPE4 param_14); // void func_80121064(void); @@ -2361,7 +2361,7 @@ void func_80140EA0(Struct_80140E80* arg0); // void func_80141200(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); // void func_8014151C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); // void func_80141678(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); -// void func_80141778(void); +void func_80141778(Struct_80140E80* arg0, Gfx** gfxp, void* unk_18E60, GraphicsContext* gfxCtx); void VisMono_Init(VisMono* this); void VisMono_Destroy(VisMono* this); // void VisMono_DesaturateTLUT(u16* tlut); @@ -2431,7 +2431,7 @@ u8 Message_GetState(MessageContext* msgCtx); // void func_80153E7C(void); // void func_80153EF0(void); void func_801541D4(PlayState* play, Gfx** gfxp); -// void func_80156758(void); +void func_80156758(PlayState* play); void func_8015680C(PlayState* play); void func_801586A4(PlayState* play); void Message_Init(PlayState* play); diff --git a/include/z64.h b/include/z64.h index 1eafccde0e..bdb994280a 100644 --- a/include/z64.h +++ b/include/z64.h @@ -1193,7 +1193,7 @@ struct PlayState { /* 0x18E54 */ SceneTableEntry* loadedScene; /* 0x18E58 */ UNK_PTR unk_18E58; /* 0x18E5C */ UNK_PTR unk_18E5C; - /* 0x18E60 */ UNK_PTR unk_18E60; + /* 0x18E60 */ void* unk_18E60; /* 0x18E64 */ void* unk_18E64; /* 0x18E68 */ void* unk_18E68; /* 0x18E6C */ char unk_18E6C[0x3EC]; diff --git a/src/code/z_play.c b/src/code/z_play.c index aafca8e58b..3b2297678d 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -116,7 +116,6 @@ void func_80165E04(void) { SREG(89) = 1; } - void func_80165E1C(PreRender* prerender) { PreRender_ApplyFilters(prerender); func_801656A4(D_80780000, prerender->fbufSave, 0x140, 0x50, 0x40, 0xEF, 0xAF, 8); @@ -379,10 +378,9 @@ void func_80167DE4(PlayState* play) { D_801F6D50.unk_00 = 0; } } else { - if (CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_L) || - CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_B) || - CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_START) || - (gIrqMgrResetStatus != 0)) { + if (CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_L) || + CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_B) || + CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, BTN_START) || (gIrqMgrResetStatus != 0)) { D_801F6DFC = 0; play->pauseCtx.unk_1F0 = 0; D_801F6D50.unk_00 = 0; @@ -401,7 +399,46 @@ void func_80167DE4(PlayState* play) { } } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_play/func_80167F0C.s") +void func_80167F0C(PlayState* this) { + Gfx* sp34; + Gfx* sp30; + GraphicsContext* gfxCtx; + + if ((this->pauseCtx.state != 0) || (this->pauseCtx.debugEditor != 0)) { + KaleidoScopeCall_Draw(this); + } + + if (gSaveContext.gameMode == 0) { + func_8011F0E0(this); + } + + if (((this->pauseCtx.state == 0) && (this->pauseCtx.debugEditor == 0)) || (this->msgCtx.currentTextId != 0xFF)) { + func_80156758(this); + } + + if (this->gameOverCtx.state != 0) { + GameOver_FadeLights(this); + } + + if (gSaveContext.screenScaleFlag != 0) { + gfxCtx = this->state.gfxCtx; + D_801F6D4C->scale = gSaveContext.screenScale / 1000.0f; + + OPEN_DISPS(gfxCtx); + + sp30 = POLY_OPA_DISP; + sp34 = Graph_GfxPlusOne(sp30); + gSPDisplayList(OVERLAY_DISP++, sp34); + + func_80141778(D_801F6D4C, &sp34, this->unk_18E60, gfxCtx); + + gSPEndDisplayList(sp34++); + Graph_BranchDlist(sp30, sp34); + POLY_OPA_DISP = sp34; + + CLOSE_DISPS(gfxCtx); + } +} #pragma GLOBAL_ASM("asm/non_matchings/code/z_play/Play_Draw.s")