From 234e97538ef608f288835505a9c2e578eb25bf52 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Wed, 5 Oct 2022 21:42:45 -0700 Subject: [PATCH] Pictographs some more --- include/functions.h | 2 +- include/regs.h | 2 ++ include/z64save.h | 2 +- src/code/z_play.c | 54 +++++++++++++++++++--------------- tools/disasm/functions.txt | 4 +-- tools/sizes/code_functions.csv | 4 +-- 6 files changed, 39 insertions(+), 29 deletions(-) diff --git a/include/functions.h b/include/functions.h index 4caa78525c..161e7dccca 100644 --- a/include/functions.h +++ b/include/functions.h @@ -2450,7 +2450,7 @@ void Play_DisableMotionBlur(void); // void Play_ConvertBufferToI(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_TYPE4 param_8); // void Play_EnableMotionBlurPriority(void); // void Play_DisableMotionBlurPriority(void); -// void Play_TakePictograph(void); +// void Play_TakePictographPhoto(void); // void Play_ChooseDynamicTransition(void); // void Play_SetupTransition(void); // void Play_ClearTransition(void); diff --git a/include/regs.h b/include/regs.h index b8467e2398..8d9376150e 100644 --- a/include/regs.h +++ b/include/regs.h @@ -112,6 +112,8 @@ #define R_FB_FILTER_A SREG(84) #define R_FB_FILTER_ENV_COLOR(c) SREG(85 + c) + +#define R_PICTOGRAPH_PHOTO_STATE SREG(89) #define R_MOTION_BLUR_ALPHA SREG(90) #define R_MOTION_BLUR_ENABLED SREG(91) #define R_MOTION_BLUR_PRIORITY_ALPHA SREG(92) diff --git a/include/z64save.h b/include/z64save.h index 816e42390a..5a29e32b05 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -298,7 +298,7 @@ typedef struct SaveContext { /* 0x1050 */ u64 bottleTimerTimeLimits[BOTTLE_MAX]; // The original total time given before the timer expires, in centiseconds (1/100th sec). "bottle_sub" /* 0x1080 */ u64 bottleTimerCurTimes[BOTTLE_MAX]; // The remaining time left before the timer expires, in centiseconds (1/100th sec). "bottle_time" /* 0x10B0 */ OSTime bottleTimerPausedOsTimes[BOTTLE_MAX]; // The cumulative osTime spent with the timer paused. "bottle_stop_time" - /* 0x10E0 */ u64 pictoPhoto[1400]; // buffer containing the pictograph photo + /* 0x10E0 */ u8 pictoPhotoI5[0x2BC0]; // buffer containing the pictograph photo, compressed to I5 from I8 /* 0x3CA0 */ s32 fileNum; // "file_no" /* 0x3CA4 */ s16 powderKegTimer; // "big_bom_timer" /* 0x3CA6 */ u8 unk_3CA6; diff --git a/src/code/z_play.c b/src/code/z_play.c index 05eecf5454..96f7f86d5c 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -204,11 +204,19 @@ void Play_DisableMotionBlurPriority(void) { R_MOTION_BLUR_PRIORITY_ENABLED = false; } -void func_80165E04(void) { - SREG(89) = 1; +typedef enum { + /* 0 */ PICTOGRAPH_PHOTO_STATE_OFF, + /* 1 */ PICTOGRAPH_PHOTO_STATE_START, + /* 2 */ PICTOGRAPH_PHOTO_STATE_TAKE, + /* 3 */ PICTOGRAPH_PHOTO_STATE_FINISH +} PictographPhotoState; + +// Will take the photograph, but doesn't compress and save it +void Play_StartTakingPictographPhoto(void) { + R_PICTOGRAPH_PHOTO_STATE = PICTOGRAPH_PHOTO_STATE_START; } -void Play_TakePictograph(PreRender* prerender) { +void Play_TakePictographPhoto(PreRender* prerender) { PreRender_ApplyFilters(prerender); Play_ConvertBufferToI(gPictoPhotoI8, prerender->fbufSave, 320, 80, 64, 240 - 1, 176 - 1, 8); } @@ -413,12 +421,12 @@ void Play_Destroy(GameState* thisx) { this->state.gfxCtx->callbackParam = 0; Play_DestroyMotionBlur(); - if (SREG(94) != 0) { + if (R_PAUSE_MENU_MODE != 0) { PreRender_ApplyFiltersSlowlyDestroy(&this->pauseBgPreRender); - SREG(94) = 0; + R_PAUSE_MENU_MODE = 0; } - SREG(89) = 0; + R_PICTOGRAPH_PHOTO_STATE = PICTOGRAPH_PHOTO_STATE_OFF; PreRender_Destroy(&this->pauseBgPreRender); this->unk_18E58 = NULL; this->pictoPhotoI8 = NULL; @@ -936,11 +944,11 @@ void Play_Update(PlayState* this) { gSegments[5] = VIRTUAL_TO_PHYSICAL(this->objectCtx.status[this->objectCtx.subKeepIndex].segment); gSegments[2] = VIRTUAL_TO_PHYSICAL(this->sceneSegment); - if (SREG(89) == 2) { - SREG(89) = 3; + if (R_PICTOGRAPH_PHOTO_STATE == PICTOGRAPH_PHOTO_STATE_TAKE) { + R_PICTOGRAPH_PHOTO_STATE = PICTOGRAPH_PHOTO_STATE_FINISH; MsgEvent_SendNullTask(); - Play_TakePictograph(&this->pauseBgPreRender); - SREG(89) = 0; + Play_TakePictographPhoto(&this->pauseBgPreRender); + R_PICTOGRAPH_PHOTO_STATE = PICTOGRAPH_PHOTO_STATE_OFF; } Actor_SetMovementScale(this->state.framerateDivisor); @@ -1144,12 +1152,12 @@ void Play_Draw(PlayState* this) { u8 sp25B = false; f32 var_fv0; // fogFar - if (SREG(94) >= 4) { + if (R_PAUSE_MENU_MODE >= 4) { PreRender_ApplyFiltersSlowlyDestroy(&this->pauseBgPreRender); - SREG(94) = 0; + R_PAUSE_MENU_MODE = 0; } - if ((SREG(94) < 2) && (gTrnsnUnkState < 2)) { + if ((R_PAUSE_MENU_MODE < 2) && (gTrnsnUnkState < 2)) { if (this->skyboxCtx.skyboxShouldDraw || (this->roomCtx.curRoom.mesh->type0.type == 1)) { func_8012CF0C(gfxCtx, 0, 1, 0, 0, 0); } else { @@ -1264,15 +1272,15 @@ void Play_Draw(PlayState* this) { PreRender_SetValues(&this->pauseBgPreRender, D_801FBBCC, D_801FBBCE, gfxCtx->curFrameBuffer, gfxCtx->zbuffer); - if (SREG(94) == 2) { + if (R_PAUSE_MENU_MODE == 2) { MsgEvent_SendNullTask(); if (!gSaveContext.screenScaleFlag) { PreRender_ApplyFiltersSlowlyInit(&this->pauseBgPreRender); } - SREG(94) = 3; + R_PAUSE_MENU_MODE = 3; SREG(33) |= 1; } else { - if (SREG(94) == 3) { + if (R_PAUSE_MENU_MODE == 3) { Gfx* sp8C = POLY_OPA_DISP; if (this->pauseBgPreRender.unk_4D == 2) { @@ -1374,7 +1382,7 @@ void Play_Draw(PlayState* this) { DebugDisplay_DrawObjects(this); Play_DrawMotionBlur(this); - if (((SREG(94) == 1) || (gTrnsnUnkState == 1)) || (SREG(89) == 1)) { + if (((R_PAUSE_MENU_MODE == 1) || (gTrnsnUnkState == 1)) || (R_PICTOGRAPH_PHOTO_STATE == 1)) { Gfx* sp74; Gfx* sp70 = POLY_OPA_DISP; @@ -1382,12 +1390,12 @@ void Play_Draw(PlayState* this) { gSPDisplayList(OVERLAY_DISP++, sp74); this->pauseBgPreRender.fbuf = gfxCtx->curFrameBuffer; - if (SREG(94) == 1) { - SREG(94) = 2; + if (R_PAUSE_MENU_MODE == 1) { + R_PAUSE_MENU_MODE = 2; this->pauseBgPreRender.fbufSave = (u16*)gfxCtx->zbuffer; this->pauseBgPreRender.cvgSave = this->unk_18E58; - } else if (SREG(89) == 1) { - SREG(89) = 2; + } else if (R_PICTOGRAPH_PHOTO_STATE == 1) { + R_PICTOGRAPH_PHOTO_STATE = 2; this->pauseBgPreRender.fbufSave = (u16*)gfxCtx->zbuffer; this->pauseBgPreRender.cvgSave = this->unk_18E58; } else { @@ -2231,8 +2239,8 @@ void Play_Init(GameState* thisx) { Play_InitMotionBlur(); - SREG(94) = 0; - SREG(89) = 0; + R_PAUSE_MENU_MODE = 0; + R_PICTOGRAPH_PHOTO_STATE = 0; PreRender_Init(&this->pauseBgPreRender); PreRender_SetValuesSave(&this->pauseBgPreRender, D_801FBBCC, D_801FBBCE, NULL, NULL, NULL); diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 36e6740f9b..46dbad98ba 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -2980,8 +2980,8 @@ 0x80165DB8:("Play_SetMotionBlurPriorityAlpha",), 0x80165DCC:("Play_EnableMotionBlurPriority",), 0x80165DF0:("Play_DisableMotionBlurPriority",), - 0x80165E04:("func_80165E04",), - 0x80165E1C:("Play_TakePictograph",), + 0x80165E04:("Play_StartPictographPhoto",), + 0x80165E1C:("Play_TakePictographPhoto",), 0x80165E7C:("Play_ChooseDynamicTransition",), 0x80165EC0:("Play_SetupTransition",), 0x80166060:("Play_ClearTransition",), diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index b1c0915e58..5fb24dce53 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -2494,8 +2494,8 @@ asm/non_matchings/code/z_play/Play_ConvertBufferToI.s,Play_ConvertBufferToI,0x80 asm/non_matchings/code/z_play/Play_SetMotionBlurPriorityAlpha.s,Play_SetMotionBlurPriorityAlpha,0x80165DB8,0x5 asm/non_matchings/code/z_play/Play_EnableMotionBlurPriority.s,Play_EnableMotionBlurPriority,0x80165DCC,0x9 asm/non_matchings/code/z_play/Play_DisableMotionBlurPriority.s,Play_DisableMotionBlurPriority,0x80165DF0,0x5 -asm/non_matchings/code/z_play/func_80165E04.s,func_80165E04,0x80165E04,0x6 -asm/non_matchings/code/z_play/Play_TakePictograph.s,Play_TakePictograph,0x80165E1C,0x18 +asm/non_matchings/code/z_play/Play_StartPictographPhoto.s,Play_StartPictographPhoto,0x80165E04,0x6 +asm/non_matchings/code/z_play/Play_TakePictographPhoto.s,Play_TakePictographPhoto,0x80165E1C,0x18 asm/non_matchings/code/z_play/Play_ChooseDynamicTransition.s,Play_ChooseDynamicTransition,0x80165E7C,0x11 asm/non_matchings/code/z_play/Play_SetupTransition.s,Play_SetupTransition,0x80165EC0,0x68 asm/non_matchings/code/z_play/Play_ClearTransition.s,Play_ClearTransition,0x80166060,0x16