diff --git a/include/functions.h b/include/functions.h index b54af48330..f7272f9037 100644 --- a/include/functions.h +++ b/include/functions.h @@ -761,10 +761,10 @@ u8 CollisionCheck_GetSwordDamage(s32 dmgFlags); void SaveContext_Init(void); s32 func_800635D0(s32); void Regs_Init(void); -void func_8006375C(s32 arg0, s32 arg1, const char* text); -void func_8006376C(u8 x, u8 y, u8 colorIndex, const char* text); +void DbCamera_ScreenText(u8 x, u8 y, const char* text); +void DbCamera_ScreenTextColored(u8 x, u8 y, u8 colorIndex, const char* text); void Regs_UpdateEditor(Input* input); -void func_80063D7C(GraphicsContext* gfxCtx); +void Debug_DrawText(GraphicsContext* gfxCtx); void DebugDisplay_Init(void); DebugDispObject* DebugDisplay_AddObject(f32 posX, f32 posY, f32 posZ, s16 rotX, s16 rotY, s16 rotZ, f32 scaleX, f32 scaleY, f32 scaleZ, u8 red, u8 green, u8 blue, u8 alpha, s16 type, @@ -1208,13 +1208,10 @@ void func_800AD920(struct_80166500* this); void func_800AD950(struct_80166500* this); void func_800AD958(struct_80166500* this, Gfx** gfxp); void PlayerCall_InitFuncPtrs(void); -void TransitionUnk_InitGraphics(TransitionUnk* this); -void TransitionUnk_InitData(TransitionUnk* this); -void TransitionUnk_Destroy(TransitionUnk* this); -TransitionUnk* TransitionUnk_Init(TransitionUnk* this, s32 row, s32 col); -void TransitionUnk_SetData(TransitionUnk* this); -void TransitionUnk_Draw(TransitionUnk* this, Gfx**); -void func_800B23E8(TransitionUnk* this); +void TransitionTile_Destroy(TransitionTile* this); +TransitionTile* TransitionTile_Init(TransitionTile* this, s32 cols, s32 rows); +void TransitionTile_Draw(TransitionTile* this, Gfx** gfxP); +void TransitionTile_Update(TransitionTile* this); void TransitionTriforce_Start(void* thisx); void* TransitionTriforce_Init(void* thisx); void TransitionTriforce_Destroy(void* thisx); diff --git a/include/regs.h b/include/regs.h index 0bac6e7c30..77d0cd43aa 100644 --- a/include/regs.h +++ b/include/regs.h @@ -90,6 +90,7 @@ #define R_CAM_AT_LERP_STEP_SCALE_FAC OREG(42) #define R_CAM_YOFFSET_NORM OREG(46) #define R_CAM_DATA(type) PREG(0 + (type)) +#define R_CAM_PARALLEL_LOCKON_CALC_SLOPE_Y_ADJ PREG(76) #define R_DBG_CAM_UPDATE PREG(80) #define R_DBG_REG_UPDATE PREG(82) #define R_RELOAD_CAM_PARAMS QREG(0) diff --git a/include/variables.h b/include/variables.h index cd14efb6a2..c0fcc8dc4f 100644 --- a/include/variables.h +++ b/include/variables.h @@ -183,7 +183,7 @@ extern LightningStrike gLightningStrike; extern MapData* gMapData; extern f32 gBossMarkScale; extern PauseMapMarksData* gLoadedPauseMarkDataTable; -extern s32 gTrnsnUnkState; +extern s32 gTransitionTileState; extern Color_RGBA8_u32 gVisMonoColor; extern PreNmiBuff* gAppNmiBufferPtr; extern Scheduler gScheduler; diff --git a/include/z64.h b/include/z64.h index c70c68d164..256036a0d7 100644 --- a/include/z64.h +++ b/include/z64.h @@ -663,7 +663,7 @@ typedef enum { /* 0 */ PAUSE_BG_PRERENDER_OFF, // Inactive, do nothing. /* 1 */ PAUSE_BG_PRERENDER_SETUP, // The current frame is only drawn for the purpose of serving as the pause background. /* 2 */ PAUSE_BG_PRERENDER_PROCESS, // The previous frame was PAUSE_BG_PRERENDER_SETUP, now apply prerender filters. - /* 3 */ PAUSE_BG_PRERENDER_DONE, // The pause background is ready to be used. + /* 3 */ PAUSE_BG_PRERENDER_READY, // The pause background is ready to be used. /* 4 */ PAUSE_BG_PRERENDER_MAX } PauseBgPreRenderState; diff --git a/include/z64camera.h b/include/z64camera.h index f99b024e47..82fe5c5d72 100644 --- a/include/z64camera.h +++ b/include/z64camera.h @@ -1567,7 +1567,7 @@ typedef struct Camera { /* 0x0D8 */ f32 xzSpeed; /* 0x0DC */ f32 dist; /* 0x0E0 */ f32 speedRatio; - /* 0x0E4 */ Vec3f posOffset; + /* 0x0E4 */ Vec3f playerToAtOffset; /* 0x0F0 */ Vec3f playerPosDelta; /* 0x0FC */ f32 fov; /* 0x100 */ f32 atLERPStepScale; @@ -1675,4 +1675,15 @@ typedef struct { /* 0x2C */ f32 fov; } DbCameraAnim; // size = 0x30 +typedef enum { + /* 0 */ DBCAMERA_TEXT_YELLOW, + /* 1 */ DBCAMERA_TEXT_PEACH, + /* 2 */ DBCAMERA_TEXT_BROWN, + /* 3 */ DBCAMERA_TEXT_ORANGE, + /* 4 */ DBCAMERA_TEXT_GOLD, + /* 5 */ DBCAMERA_TEXT_WHITE, + /* 6 */ DBCAMERA_TEXT_BLUE, + /* 7 */ DBCAMERA_TEXT_GREEN +} DbCameraTextColor; + #endif diff --git a/include/z64cutscene_commands.h b/include/z64cutscene_commands.h index fcaa4a009b..89ef7ef2df 100644 --- a/include/z64cutscene_commands.h +++ b/include/z64cutscene_commands.h @@ -271,7 +271,7 @@ CMD_W(unk1), CMD_W(unk2), CMD_W(unk3), CMD_W(unk4), CMD_W(unk5), CMD_W(unk6), \ CMD_W(unk7), CMD_W(unk8), CMD_W(unk9), CMD_W(unk10), CMD_W(unk11), CMD_W(unk12) -// TODO: Fix ZAPD and delete these +// TODO: Fix ZAPD and delete these (everything to the end of the file) #define CS_CAM_POS_LIST CS_CAM_EYE_SPLINE #define CS_CAM_POS CS_CAM_POINT #define CS_CAM_FOCUS_POINT_LIST CS_CAM_AT_SPLINE @@ -296,6 +296,18 @@ #define CS_FADE_BGM CS_FADE_OUT_SEQ #define CS_TERMINATOR CS_DESTINATION +// CS_TIME macro: +// The last argument of the macro was removed, but ZAPD isn't aware +// Passing 6 arguments to a 5-arguments macro works fine with IDO, so ignore this hack for IDO +#ifndef __sgi +// Only spot06_scene uses CS_TIME. Limit the hack to that file, so everything else can use the new macro +# ifdef SPOT06_SCENE_H +# undef CS_TIME +# define CS_TIME(unused0, startFrame, endFrame, hour, min, _unusedZapdCompatibilityArg) \ + CMD_HH(unused0, startFrame), CMD_HBB(endFrame, hour, min), CMD_W(0) +# endif +#endif + #define CS_PLAY_BGM(seqId, startFrame, endFrame, unused0, unused1, unused2, unused3, unused4, unused5, unused6, unused7) \ CS_START_SEQ((seqId)-1, startFrame, endFrame, unused0, unused1, unused2, unused3, unused4, unused5, unused6, unused7) diff --git a/include/z64transition.h b/include/z64transition.h index e49ef1e660..34c3499b68 100644 --- a/include/z64transition.h +++ b/include/z64transition.h @@ -4,16 +4,23 @@ #include "ultra64.h" #include "color.h" -typedef struct { - f32 unk_0; - f32 unk_4; -} TransitionUnkData; +typedef enum { + /* 0 */ TRANS_TILE_OFF, // Inactive, do nothing + /* 1 */ TRANS_TILE_SETUP, // Save the necessary buffers + /* 2 */ TRANS_TILE_PROCESS, // Initialize the transition + /* 3 */ TRANS_TILE_READY // The transition is ready, so will update and draw each frame +} TransitionTileStatus; typedef struct { - /* 0x00 */ s32 row; - /* 0x04 */ s32 col; + /* 0x0 */ f32 x; + /* 0x4 */ f32 y; +} TransitionTileVtxData; // size = 0x8 + +typedef struct { + /* 0x00 */ s32 cols; + /* 0x04 */ s32 rows; /* 0x08 */ s32 frame; - /* 0x0C */ TransitionUnkData* unk_0C; + /* 0x0C */ TransitionTileVtxData* vtxData; /* 0x10 */ Vtx* vtxFrame1; /* 0x14 */ Vtx* vtxFrame2; /* 0x18 */ Mtx projection; @@ -21,7 +28,7 @@ typedef struct { /* 0x98 */ Mtx unk_98; /* 0xD8 */ Gfx* gfx; // "gfxtbl" /* 0xDC */ u16* zBuffer; -} TransitionUnk; // size = 0xE0 +} TransitionTile; // size = 0xE0 typedef enum { /* 1 */ TRANS_INSTANCE_TYPE_FILL_OUT = 1, diff --git a/src/code/db_camera.c b/src/code/db_camera.c index 80a9eb58db..ff7efdddda 100644 --- a/src/code/db_camera.c +++ b/src/code/db_camera.c @@ -364,9 +364,9 @@ void func_800B44E0(DbCamera* dbCamera, Camera* cam) { &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); sDbCamAnim.unk_0A = 0; } - func_8006376C(0x11, 0x17, 3, D_8012CEE0[0]); - func_8006376C(0x12, 0x18, 3, D_8012CEE4); - func_8006376C(0x10, 0x1A, 1, D_8012CEE8); + DbCamera_ScreenTextColored(17, 23, DBCAMERA_TEXT_ORANGE, D_8012CEE0[0]); + DbCamera_ScreenTextColored(18, 24, DBCAMERA_TEXT_ORANGE, D_8012CEE4); + DbCamera_ScreenTextColored(16, 26, DBCAMERA_TEXT_PEACH, D_8012CEE8); return; } @@ -381,7 +381,7 @@ void func_800B44E0(DbCamera* dbCamera, Camera* cam) { if (dbCamera->sub.nFrames > 0 && dbCamera->sub.nFrames < sDbCamAnim.unk_04) { sDbCamAnim.unk_0A = 0; - func_8006376C(0xF, 0x1A, 1, D_8012CEEC); + DbCamera_ScreenTextColored(15, 26, DBCAMERA_TEXT_PEACH, D_8012CEEC); } if (dbCamera->sub.mode != 1) { @@ -397,18 +397,18 @@ void func_800B44E0(DbCamera* dbCamera, Camera* cam) { dbCamera->rollDegrees = sDbCamAnim.roll * (360.0f / 256.0f); DbCamera_SetTextValue(sDbCamAnim.unk_04, &D_8012CFB4[8], 4); - func_8006376C(0x10, 0x17, 3, D_8012CFB4); + DbCamera_ScreenTextColored(16, 23, DBCAMERA_TEXT_ORANGE, D_8012CFB4); D_8012CFC4[5] = ((sDbCamAnim.keyframe + 1) / 10) + '0'; D_8012CFC4[6] = ((sDbCamAnim.keyframe + 1) % 10) + '0'; D_8012CFC4[8] = ((dbCamera->sub.nPoints - 5) / 10) + '0'; D_8012CFC4[9] = ((dbCamera->sub.nPoints - 5) % 10) + '0'; - func_8006376C(0x10, 0x18, 3, D_8012CFC4); - func_8006376C(0x10, 0x1A, 1, D_8012CEF0); + DbCamera_ScreenTextColored(16, 24, DBCAMERA_TEXT_ORANGE, D_8012CFC4); + DbCamera_ScreenTextColored(16, 26, DBCAMERA_TEXT_PEACH, D_8012CEF0); return; } sDbCamAnim.unk_0A = 0; - func_8006376C(0xF, 0x1A, 1, D_8012CEEC); + DbCamera_ScreenTextColored(15, 26, DBCAMERA_TEXT_PEACH, D_8012CEEC); } void DbCamera_PrintPoints(const char* name, s16 count, CutsceneCameraPoint* points) { @@ -989,7 +989,7 @@ void DbCamera_Update(DbCamera* dbCamera, Camera* cam) { if (dbCamera->unk_00 == 1) { OREG(0) = 8; - func_8006376C(0xC, 5, 0, D_8012CEF4); + DbCamera_ScreenTextColored(12, 5, DBCAMERA_TEXT_YELLOW, D_8012CEF4); if (CHECK_BTN_ALL(sPlay->state.input[DBCAM_CONTROLLER_PORT].cur.button, BTN_CRIGHT) && !CHECK_BTN_ALL(sPlay->state.input[DBCAM_CONTROLLER_PORT].cur.button, BTN_L)) { func_800B44E0(dbCamera, cam); @@ -1075,21 +1075,24 @@ void DbCamera_Update(DbCamera* dbCamera, Camera* cam) { } } - func_8006376C(0xA, 6, (dbCamera->sub.unk_08 == 0) ? 7 : 4, D_8012D00C); - func_8006376C(0x11, 6, (dbCamera->sub.unk_08 == 1) ? 7 : 4, D_8012D020); - func_8006376C(0x17, 6, (dbCamera->sub.unk_08 == 2) ? 7 : 4, D_8012D034); + DbCamera_ScreenTextColored(10, 6, (dbCamera->sub.unk_08 == 0) ? DBCAMERA_TEXT_GREEN : DBCAMERA_TEXT_GOLD, + D_8012D00C); + DbCamera_ScreenTextColored(17, 6, (dbCamera->sub.unk_08 == 1) ? DBCAMERA_TEXT_GREEN : DBCAMERA_TEXT_GOLD, + D_8012D020); + DbCamera_ScreenTextColored(23, 6, (dbCamera->sub.unk_08 == 2) ? DBCAMERA_TEXT_GREEN : DBCAMERA_TEXT_GOLD, + D_8012D034); if (dbCamera->sub.unkIdx == 0x80) { - func_8006376C(0x10, 0x1A, 1, D_8012CEF8[0]); + DbCamera_ScreenTextColored(16, 26, DBCAMERA_TEXT_PEACH, D_8012CEF8[0]); } else if (dbCamera->sub.unkIdx == (dbCamera->sub.nPoints - 1)) { D_8012CEE0[7][10] = (dbCamera->sub.nPoints / 10) + '0'; D_8012CEE0[7][11] = (dbCamera->sub.nPoints % 10) + '0'; - func_8006376C(0xF, 0x1A, 1, D_8012CEE0[7]); + DbCamera_ScreenTextColored(15, 26, DBCAMERA_TEXT_PEACH, D_8012CEE0[7]); } else { D_8012CEE0[8][10] = ((dbCamera->sub.unkIdx + 1) / 10) + '0'; D_8012CEE0[8][11] = ((dbCamera->sub.unkIdx + 1) % 10) + '0'; D_8012CEE0[8][13] = ((dbCamera->sub.nPoints - 1) / 10) + '0'; D_8012CEE0[8][14] = ((dbCamera->sub.nPoints - 1) % 10) + '0'; - func_8006376C(0xF, 0x1A, 1, D_8012CEE0[8]); + DbCamera_ScreenTextColored(15, 26, DBCAMERA_TEXT_PEACH, D_8012CEE0[8]); } switch (dbCamera->sub.unk_08) { @@ -1099,25 +1102,25 @@ void DbCamera_Update(DbCamera* dbCamera, Camera* cam) { case 0: dbCamera->unk_3C = false; if (dbCamera->sub.mode != 1) { - func_8006376C(0xD, 0x18, 3, !D_80161144 ? D_8012CF04 : D_8012CF08); + DbCamera_ScreenTextColored(13, 24, DBCAMERA_TEXT_ORANGE, !D_80161144 ? D_8012CF04 : D_8012CF08); DbCamera_SetTextValue(CAM_BINANG_TO_DEG(sp104.pitch), &D_8012D0E4[11], 4); - func_8006376C(0xF, 0x17, 3, D_8012D0E4); + DbCamera_ScreenTextColored(15, 23, DBCAMERA_TEXT_ORANGE, D_8012D0E4); DbCamera_SetTextValue(CAM_BINANG_TO_DEG(sp104.yaw), &D_8012D0F8[11], 4); - func_8006376C(0xF, 0x18, 3, D_8012D0F8); + DbCamera_ScreenTextColored(15, 24, DBCAMERA_TEXT_ORANGE, D_8012D0F8); DbCamera_SetTextValue(sp104.r, &D_8012D0D4[8], 6); - func_8006376C(0xF, 0x19, 3, D_8012D0D4); + DbCamera_ScreenTextColored(15, 25, DBCAMERA_TEXT_ORANGE, D_8012D0D4); } else { - func_8006376C(0xE, 0x18, 3, D_8012CF0C); - func_8006376C(0x10, 0x16, 3, D_8012CF10); + DbCamera_ScreenTextColored(14, 24, DBCAMERA_TEXT_ORANGE, D_8012CF0C); + DbCamera_ScreenTextColored(16, 22, DBCAMERA_TEXT_ORANGE, D_8012CF10); sp110 = 'X'; DbCamera_SetTextValue(temp_s6->pos.x, &sp111, 7); - func_8006376C(0x10, 0x17, 3, &sp110); + DbCamera_ScreenTextColored(16, 23, DBCAMERA_TEXT_ORANGE, &sp110); sp110 = 'Y'; DbCamera_SetTextValue(temp_s6->pos.y, &sp111, 7); - func_8006376C(0x10, 0x18, 3, &sp110); + DbCamera_ScreenTextColored(16, 24, DBCAMERA_TEXT_ORANGE, &sp110); sp110 = 'Z'; DbCamera_SetTextValue(temp_s6->pos.z, &sp111, 7); - func_8006376C(0x10, 0x19, 3, &sp110); + DbCamera_ScreenTextColored(16, 25, DBCAMERA_TEXT_ORANGE, &sp110); } break; case 1: @@ -1305,15 +1308,19 @@ void DbCamera_Update(DbCamera* dbCamera, Camera* cam) { } DbCamera_SetTextValue(dbCamera->sub.lookAt[dbCamera->sub.unkIdx].viewAngle, &D_8012D05C[10], 3); - func_8006376C(0x10, 0x14, (dbCamera->sub.unk_0A == 0) ? 7 : 4, D_8012D05C); + DbCamera_ScreenTextColored( + 16, 20, (dbCamera->sub.unk_0A == 0) ? DBCAMERA_TEXT_GREEN : DBCAMERA_TEXT_GOLD, D_8012D05C); DbCamera_SetTextValue(dbCamera->sub.lookAt[dbCamera->sub.unkIdx].nextPointFrame, &D_8012D070[9], 3); - func_8006376C(0x10, 0x15, (dbCamera->sub.unk_0A == 1) ? 7 : 4, D_8012D070); + DbCamera_ScreenTextColored( + 16, 21, (dbCamera->sub.unk_0A == 1) ? DBCAMERA_TEXT_GREEN : DBCAMERA_TEXT_GOLD, D_8012D070); DbCamera_SetTextValue(dbCamera->sub.lookAt[dbCamera->sub.unkIdx].cameraRoll, &D_8012D084[10], 3); - func_8006376C(0x10, 0x16, (dbCamera->sub.unk_0A == 2) ? 7 : 4, D_8012D084); - func_8006376C(0xF, 0x17, (dbCamera->sub.unk_0A == 3) ? 7 : 4, - (dbCamera->sub.mode == 1) ? D_8012CF14 - : (dbCamera->sub.mode == 0) ? *D_8012CF18 - : D_8012CFB0); + DbCamera_ScreenTextColored( + 16, 22, (dbCamera->sub.unk_0A == 2) ? DBCAMERA_TEXT_GREEN : DBCAMERA_TEXT_GOLD, D_8012D084); + DbCamera_ScreenTextColored(15, 23, + (dbCamera->sub.unk_0A == 3) ? DBCAMERA_TEXT_GREEN : DBCAMERA_TEXT_GOLD, + (dbCamera->sub.mode == 1) ? D_8012CF14 + : (dbCamera->sub.mode == 0) ? *D_8012CF18 + : D_8012CFB0); if (dbCamera->sub.unk_0C) { D_8012D05C[80] = '>'; } else { @@ -1329,70 +1336,76 @@ void DbCamera_Update(DbCamera* dbCamera, Camera* cam) { D_8012D05C[95] = '<'; } D_8012D05C[96] = '\0'; - func_8006376C(0xF, 0x18, (dbCamera->sub.unk_0A == 4) ? 7 : 4, D_8012D0AC); + DbCamera_ScreenTextColored( + 15, 24, (dbCamera->sub.unk_0A == 4) ? DBCAMERA_TEXT_GREEN : DBCAMERA_TEXT_GOLD, D_8012D0AC); DbCamera_SetTextValue(dbCamera->sub.nFrames, &D_8012D0C0[10], 5); - func_8006376C(0xF, 0x19, (dbCamera->sub.unk_0A == 5) ? 7 : 4, - (dbCamera->sub.nFrames == -1) ? *D_8012CF24 : D_8012D0C0); + DbCamera_ScreenTextColored(15, 25, + (dbCamera->sub.unk_0A == 5) ? DBCAMERA_TEXT_GREEN : DBCAMERA_TEXT_GOLD, + (dbCamera->sub.nFrames == -1) ? *D_8012CF24 : D_8012D0C0); break; } if (dbCamera->sub.mode != 1) { - func_8006376C(3, 0x16, - ((dbCamera->sub.unk_08 == 1) && (dbCamera->sub.unk_0A == 4) && !D_80161144) ? 7 - : !D_80161144 ? 4 - : 3, - D_8012CF30); + DbCamera_ScreenTextColored(3, 22, + ((dbCamera->sub.unk_08 == 1) && (dbCamera->sub.unk_0A == 4) && !D_80161144) + ? DBCAMERA_TEXT_GREEN + : !D_80161144 ? DBCAMERA_TEXT_GOLD + : DBCAMERA_TEXT_ORANGE, + D_8012CF30); sp110 = 'X'; DbCamera_SetTextValue(dbCamera->at.x, &sp111, 6); - func_8006376C(3, 0x17, 2, &sp110); + DbCamera_ScreenTextColored(3, 23, DBCAMERA_TEXT_BROWN, &sp110); sp110 = 'Y'; DbCamera_SetTextValue(dbCamera->at.y, &sp111, 6); - func_8006376C(3, 0x18, 2, &sp110); + DbCamera_ScreenTextColored(3, 24, DBCAMERA_TEXT_BROWN, &sp110); sp110 = 'Z'; DbCamera_SetTextValue(dbCamera->at.z, &sp111, 6); - func_8006376C(3, 0x19, 2, &sp110); - func_8006376C(0x1E, 0x16, - ((dbCamera->sub.unk_08 == 1) && (dbCamera->sub.unk_0A == 4) && D_80161144) ? 7 - : D_80161144 ? 4 - : 3, - D_8012CF34); + DbCamera_ScreenTextColored(3, 25, DBCAMERA_TEXT_BROWN, &sp110); + DbCamera_ScreenTextColored(30, 22, + ((dbCamera->sub.unk_08 == 1) && (dbCamera->sub.unk_0A == 4) && D_80161144) + ? DBCAMERA_TEXT_GREEN + : D_80161144 ? DBCAMERA_TEXT_GOLD + : DBCAMERA_TEXT_ORANGE, + D_8012CF34); sp110 = 'X'; DbCamera_SetTextValue(dbCamera->eye.x, &sp111, 6); - func_8006376C(0x1E, 0x17, 2, &sp110); + DbCamera_ScreenTextColored(30, 23, DBCAMERA_TEXT_BROWN, &sp110); sp110 = 'Y'; DbCamera_SetTextValue(dbCamera->eye.y, &sp111, 6); - func_8006376C(0x1E, 0x18, 2, &sp110); + DbCamera_ScreenTextColored(30, 24, DBCAMERA_TEXT_BROWN, &sp110); sp110 = 'Z'; DbCamera_SetTextValue(dbCamera->eye.z, &sp111, 6); - func_8006376C(0x1E, 0x19, 2, &sp110); + DbCamera_ScreenTextColored(30, 25, DBCAMERA_TEXT_BROWN, &sp110); } else { if (D_8012CEE0[0]) {} OLib_Vec3fDiffToVecGeo(&spFC, sp90, sp7C); spFC.yaw -= cam->playerPosRot.rot.y; - func_8006376C(3, 0x16, - ((dbCamera->sub.unk_08 == 1) && (dbCamera->sub.unk_0A == 4) && !D_80161144) ? 7 - : !D_80161144 ? 4 - : 3, - D_8012CF30); + DbCamera_ScreenTextColored(3, 22, + ((dbCamera->sub.unk_08 == 1) && (dbCamera->sub.unk_0A == 4) && !D_80161144) + ? DBCAMERA_TEXT_GREEN + : !D_80161144 ? DBCAMERA_TEXT_GOLD + : DBCAMERA_TEXT_ORANGE, + D_8012CF30); DbCamera_SetTextValue(CAM_BINANG_TO_DEG(spFC.pitch), &D_8012D0E4[10], 4); - func_8006376C(3, 0x17, 3, D_8012D0E4); + DbCamera_ScreenTextColored(3, 23, DBCAMERA_TEXT_ORANGE, D_8012D0E4); DbCamera_SetTextValue(CAM_BINANG_TO_DEG(spFC.yaw), &D_8012D0F8[10], 4); - func_8006376C(3, 0x18, 3, D_8012D0F8); + DbCamera_ScreenTextColored(3, 24, DBCAMERA_TEXT_ORANGE, D_8012D0F8); DbCamera_SetTextValue(spFC.r, &D_8012D0D4[7], 6); - func_8006376C(3, 0x19, 3, D_8012D0D4); + DbCamera_ScreenTextColored(3, 25, DBCAMERA_TEXT_ORANGE, D_8012D0D4); OLib_Vec3fDiffToVecGeo(&spFC, sp90, sp80); spFC.yaw -= cam->playerPosRot.rot.y; - func_8006376C(0x1E, 0x16, - ((dbCamera->sub.unk_08 == 1) && (dbCamera->sub.unk_0A == 4) && D_80161144) ? 7 - : D_80161144 ? 4 - : 3, - D_8012CF34); + DbCamera_ScreenTextColored(30, 22, + ((dbCamera->sub.unk_08 == 1) && (dbCamera->sub.unk_0A == 4) && D_80161144) + ? DBCAMERA_TEXT_GREEN + : D_80161144 ? DBCAMERA_TEXT_GOLD + : DBCAMERA_TEXT_ORANGE, + D_8012CF34); DbCamera_SetTextValue(CAM_BINANG_TO_DEG(spFC.pitch), &D_8012D0E4[10], 4); - func_8006376C(0x1C, 0x17, 3, D_8012D0E4); + DbCamera_ScreenTextColored(28, 23, DBCAMERA_TEXT_ORANGE, D_8012D0E4); DbCamera_SetTextValue(CAM_BINANG_TO_DEG(spFC.yaw), &D_8012D0F8[10], 4); - func_8006376C(0x1C, 0x18, 3, D_8012D0F8); + DbCamera_ScreenTextColored(28, 24, DBCAMERA_TEXT_ORANGE, D_8012D0F8); DbCamera_SetTextValue(spFC.r, &D_8012D0D4[7], 6); - func_8006376C(0x1C, 0x19, 3, D_8012D0D4); + DbCamera_ScreenTextColored(28, 25, DBCAMERA_TEXT_ORANGE, D_8012D0D4); } DebugDisplay_AddObject(dbCamera->at.x, dbCamera->at.y + 1.0f, dbCamera->at.z, 0, 0, 0, 0.02f, 2.0f, 0.02f, @@ -1438,41 +1451,44 @@ void DbCamera_Update(DbCamera* dbCamera, Camera* cam) { dbCamera->unk_38 = -1; } - func_8006376C(0xE, 5, 0, D_8012CF38); - func_8006376C(9, 6, (dbCamera->unk_78 == 0) ? 7 : 4, D_8012CFD0); - func_8006376C(0x11, 6, (dbCamera->unk_78 == 1) ? 7 : 4, D_8012CFE4); - func_8006376C(0x18, 6, (dbCamera->unk_78 == 2) ? 7 : 4, D_8012CFF8); - func_8006376C(3, 0x16, D_80161144 ? 3 : 4, D_8012CF30); + DbCamera_ScreenTextColored(14, 5, DBCAMERA_TEXT_YELLOW, D_8012CF38); + DbCamera_ScreenTextColored(9, 6, (dbCamera->unk_78 == 0) ? DBCAMERA_TEXT_GREEN : DBCAMERA_TEXT_GOLD, + D_8012CFD0); + DbCamera_ScreenTextColored(17, 6, (dbCamera->unk_78 == 1) ? DBCAMERA_TEXT_GREEN : DBCAMERA_TEXT_GOLD, + D_8012CFE4); + DbCamera_ScreenTextColored(24, 6, (dbCamera->unk_78 == 2) ? DBCAMERA_TEXT_GREEN : DBCAMERA_TEXT_GOLD, + D_8012CFF8); + DbCamera_ScreenTextColored(3, 22, D_80161144 ? DBCAMERA_TEXT_ORANGE : DBCAMERA_TEXT_GOLD, D_8012CF30); sp110 = 'X'; DbCamera_SetTextValue(dbCamera->at.x, &sp111, 6); - func_8006376C(3, 0x17, 2, &sp110); + DbCamera_ScreenTextColored(3, 23, DBCAMERA_TEXT_BROWN, &sp110); sp110 = 'Y'; DbCamera_SetTextValue(dbCamera->at.y, &sp111, 6); - func_8006376C(3, 0x18, 2, &sp110); + DbCamera_ScreenTextColored(3, 24, DBCAMERA_TEXT_BROWN, &sp110); sp110 = 'Z'; DbCamera_SetTextValue(dbCamera->at.z, &sp111, 6); - func_8006376C(3, 0x19, 2, &sp110); - func_8006376C(0x1E, 0x16, D_80161144 ? 4 : 3, D_8012CF34); + DbCamera_ScreenTextColored(3, 25, DBCAMERA_TEXT_BROWN, &sp110); + DbCamera_ScreenTextColored(30, 22, D_80161144 ? DBCAMERA_TEXT_GOLD : DBCAMERA_TEXT_ORANGE, D_8012CF34); sp110 = 'X'; DbCamera_SetTextValue(dbCamera->eye.x, &sp111, 6); - func_8006376C(0x1E, 0x17, 2, &sp110); + DbCamera_ScreenTextColored(30, 23, DBCAMERA_TEXT_BROWN, &sp110); sp110 = 'Y'; DbCamera_SetTextValue(dbCamera->eye.y, &sp111, 6); - func_8006376C(0x1E, 0x18, 2, &sp110); + DbCamera_ScreenTextColored(30, 24, DBCAMERA_TEXT_BROWN, &sp110); sp110 = 'Z'; DbCamera_SetTextValue(dbCamera->eye.z, &sp111, 6); - func_8006376C(0x1E, 0x19, 2, &sp110); - func_8006376C(0xD, 0x18, 3, !D_80161144 ? D_8012CF04 : D_8012CF08); + DbCamera_ScreenTextColored(30, 25, DBCAMERA_TEXT_BROWN, &sp110); + DbCamera_ScreenTextColored(13, 24, DBCAMERA_TEXT_ORANGE, !D_80161144 ? D_8012CF04 : D_8012CF08); DbCamera_SetTextValue(CAM_BINANG_TO_DEG(sp104.pitch), &D_8012D0E4[11], 4); - func_8006376C(0xF, 0x17, 3, D_8012D0E4); + DbCamera_ScreenTextColored(15, 23, DBCAMERA_TEXT_ORANGE, D_8012D0E4); DbCamera_SetTextValue(CAM_BINANG_TO_DEG(sp104.yaw), &D_8012D0F8[11], 4); - func_8006376C(0xF, 0x18, 3, D_8012D0F8); + DbCamera_ScreenTextColored(15, 24, DBCAMERA_TEXT_ORANGE, D_8012D0F8); DbCamera_SetTextValue(sp104.r, &D_8012D0D4[8], 6); - func_8006376C(0xF, 0x19, 3, D_8012D0D4); + DbCamera_ScreenTextColored(15, 25, DBCAMERA_TEXT_ORANGE, D_8012D0D4); if (dbCamera->unk_3C) { - func_8006376C(0x10, 0x1A, 1, D_8012CF3C); + DbCamera_ScreenTextColored(16, 26, DBCAMERA_TEXT_PEACH, D_8012CF3C); } else { - func_8006376C(0x10, 0x1A, 1, D_8012CF40); + DbCamera_ScreenTextColored(16, 26, DBCAMERA_TEXT_PEACH, D_8012CF40); } D_8012D110++; @@ -1706,9 +1722,9 @@ void DbCamera_DrawSlotLetters(char* str, s16 y, s16 x, s32 colorIndex) { } str[0x14] = str[i * 2 + 1] = '\0'; - func_8006376C(x, y, colorIndex, str); + DbCamera_ScreenTextColored(x, y, colorIndex, str); str[0x14] = str[i * 2 + 0] = '-'; - func_8006376C(x + 0x14, y, colorIndex, str + 0x14); + DbCamera_ScreenTextColored(20 + x, y, colorIndex, str + 0x14); } void DbCamera_PrintAllCuts(Camera* cam) { @@ -1766,11 +1782,11 @@ s32 func_800B91B0(Camera* cam, DbCamera* dbCamera) { D_8012D13C[10] = ((sDbCameraCuts[D_8016110C].nPoints - 5) / 10) + '0'; D_8012D13C[11] = ((sDbCameraCuts[D_8016110C].nPoints - 5) % 10) + '0'; DbCamera_SetTextValue(sDbCamAnim.unk_04, &D_8012D114[10], 4); - func_8006376C(0xF, 0x16, 3, D_8012D114); + DbCamera_ScreenTextColored(15, 22, DBCAMERA_TEXT_ORANGE, D_8012D114); DbCamera_SetTextValue(sDbCamAnim.unk_0C, &D_8012D128[10], 4); - func_8006376C(0xF, 0x17, 3, D_8012D128); - func_8006376C(0xF, 0x18, 3, D_8012D13C); - func_8006376C(0x10, 0x1A, 1, D_8012CEF0); + DbCamera_ScreenTextColored(15, 23, DBCAMERA_TEXT_ORANGE, D_8012D128); + DbCamera_ScreenTextColored(15, 24, DBCAMERA_TEXT_ORANGE, D_8012D13C); + DbCamera_ScreenTextColored(16, 26, DBCAMERA_TEXT_PEACH, D_8012CEF0); sDbCamAnim.unk_04++; sDbCamAnim.unk_0C++; @@ -1833,7 +1849,8 @@ void DbCamera_Reset(Camera* cam, DbCamera* dbCam) { s32 DbCamera_UpdateDemoControl(DbCamera* dbCamera, Camera* cam) { static s32 sMempakFiles; static u32 sDbCameraColors[] = { - 4, 4, 4, 7, 4, 4, + DBCAMERA_TEXT_GOLD, DBCAMERA_TEXT_GOLD, DBCAMERA_TEXT_GOLD, + DBCAMERA_TEXT_GREEN, DBCAMERA_TEXT_GOLD, DBCAMERA_TEXT_GOLD, }; static s32 sMempakFilesize = 0; s32 i; @@ -1845,7 +1862,7 @@ s32 DbCamera_UpdateDemoControl(DbCamera* dbCamera, Camera* cam) { VecGeo sp5C; s32 (*callbacks[])(char*) = { DbCamera_SaveCallback, DbCamera_LoadCallback, DbCamera_ClearCallback }; - func_8006376C(0xE, 5, 0, D_8012CF44); // DEMO CONTROL + DbCamera_ScreenTextColored(14, 5, DBCAMERA_TEXT_YELLOW, D_8012CF44); // DEMO CONTROL idx1 = sCurFileIdx >> 1; idx2 = sLastFileIdx >> 1; @@ -1867,12 +1884,17 @@ s32 DbCamera_UpdateDemoControl(DbCamera* dbCamera, Camera* cam) { dbCamera->sub.demoCtrlToggleSwitch ^= 1; } D_8012CEE0[41][9] = MEMPAK_INDEX_TO_LETTER(sCurFileIdx); - func_8006376C(0xA, 7, 5, D_8012CEE0[41]); - func_8006376C(0x10, 7, 5, D_8012CF60[dbCamera->sub.demoCtrlActionIdx]); - func_8006376C(0x14, 7, 5, D_8012CF88[0]); + DbCamera_ScreenTextColored(10, 7, DBCAMERA_TEXT_WHITE, D_8012CEE0[41]); + DbCamera_ScreenTextColored(16, 7, DBCAMERA_TEXT_WHITE, + D_8012CF60[dbCamera->sub.demoCtrlActionIdx]); + DbCamera_ScreenTextColored(20, 7, DBCAMERA_TEXT_WHITE, D_8012CF88[0]); - func_8006376C(0x11, 8, dbCamera->sub.demoCtrlToggleSwitch ? 4 : 7, D_8012CF94); - func_8006376C(0x15, 8, dbCamera->sub.demoCtrlToggleSwitch ? 7 : 4, D_8012CF98); + DbCamera_ScreenTextColored( + 17, 8, dbCamera->sub.demoCtrlToggleSwitch ? DBCAMERA_TEXT_GOLD : DBCAMERA_TEXT_GREEN, + D_8012CF94); + DbCamera_ScreenTextColored( + 21, 8, dbCamera->sub.demoCtrlToggleSwitch ? DBCAMERA_TEXT_GREEN : DBCAMERA_TEXT_GOLD, + D_8012CF98); if (CHECK_BTN_ALL(sPlay->state.input[DBCAM_CONTROLLER_PORT].press.button, BTN_A)) { if (dbCamera->sub.demoCtrlToggleSwitch == 0) { @@ -1891,9 +1913,12 @@ s32 DbCamera_UpdateDemoControl(DbCamera* dbCamera, Camera* cam) { } else { dbCamera->sub.demoCtrlToggleSwitch ^= 1; D_8012CF84[9] = MEMPAK_INDEX_TO_LETTER(sCurFileIdx); - func_8006376C(0xD, 7, 5, D_8012CF88[-1]); // todo: find something better - func_8006376C(0x12, 7, 5, D_8012CF80); - func_8006376C(0xD, 9, dbCamera->sub.demoCtrlToggleSwitch ? 1 : 6, "PRESS B BUTTON"); + DbCamera_ScreenTextColored(13, 7, DBCAMERA_TEXT_WHITE, + D_8012CF88[-1]); // todo: find something better + DbCamera_ScreenTextColored(18, 7, DBCAMERA_TEXT_WHITE, D_8012CF80); + DbCamera_ScreenTextColored( + 13, 9, dbCamera->sub.demoCtrlToggleSwitch ? DBCAMERA_TEXT_PEACH : DBCAMERA_TEXT_BLUE, + "PRESS B BUTTON"); } } if (CHECK_BTN_ALL(sPlay->state.input[DBCAM_CONTROLLER_PORT].press.button, BTN_B)) { @@ -1909,9 +1934,9 @@ s32 DbCamera_UpdateDemoControl(DbCamera* dbCamera, Camera* cam) { case DEMO_CTRL_MENU(ACTION_LOAD, MENU_CALLBACK): case DEMO_CTRL_MENU(ACTION_CLEAR, MENU_CALLBACK): { D_8012CEE0[41][9] = MEMPAK_INDEX_TO_LETTER(sCurFileIdx); - func_8006376C(0xC, 7, 5, D_8012CEE0[41]); - func_8006376C(0x12, 7, 5, D_8012CF60[dbCamera->sub.demoCtrlActionIdx]); - func_8006376C(0x16, 7, 5, D_8012CF9C[0]); + DbCamera_ScreenTextColored(12, 7, DBCAMERA_TEXT_WHITE, D_8012CEE0[41]); + DbCamera_ScreenTextColored(18, 7, DBCAMERA_TEXT_WHITE, D_8012CF60[dbCamera->sub.demoCtrlActionIdx]); + DbCamera_ScreenTextColored(22, 7, DBCAMERA_TEXT_WHITE, D_8012CF9C[0]); if (callbacks[dbCamera->sub.demoCtrlActionIdx - 1](&D_8012CF84[9])) { dbCamera->sub.demoCtrlMenu++; @@ -1927,10 +1952,13 @@ s32 DbCamera_UpdateDemoControl(DbCamera* dbCamera, Camera* cam) { case DEMO_CTRL_MENU(ACTION_CLEAR, MENU_SUCCESS): { dbCamera->sub.demoCtrlToggleSwitch ^= 1; D_8012CEE0[41][9] = MEMPAK_INDEX_TO_LETTER(sCurFileIdx); - func_8006376C(0xD, 7, 5, D_8012CEE0[41]); - func_8006376C(0x13, 7, 5, D_8012CF60[dbCamera->sub.demoCtrlMenu / 100]); - func_8006376C(0x17, 7, 5, D_8012CFA4); - func_8006376C(0xD, 9, (dbCamera->sub.demoCtrlToggleSwitch != 0) ? 1 : 6, "PRESS B BUTTON"); + DbCamera_ScreenTextColored(13, 7, DBCAMERA_TEXT_WHITE, D_8012CEE0[41]); + DbCamera_ScreenTextColored(19, 7, DBCAMERA_TEXT_WHITE, + D_8012CF60[dbCamera->sub.demoCtrlMenu / 100]); + DbCamera_ScreenTextColored(23, 7, DBCAMERA_TEXT_WHITE, D_8012CFA4); + DbCamera_ScreenTextColored( + 13, 9, (dbCamera->sub.demoCtrlToggleSwitch != 0) ? DBCAMERA_TEXT_PEACH : DBCAMERA_TEXT_BLUE, + "PRESS B BUTTON"); if (CHECK_BTN_ALL(sPlay->state.input[DBCAM_CONTROLLER_PORT].press.button, BTN_A) || CHECK_BTN_ALL(sPlay->state.input[DBCAM_CONTROLLER_PORT].press.button, BTN_B)) { @@ -1950,10 +1978,13 @@ s32 DbCamera_UpdateDemoControl(DbCamera* dbCamera, Camera* cam) { case DEMO_CTRL_MENU(ACTION_CLEAR, MENU_ERROR): { dbCamera->sub.demoCtrlToggleSwitch ^= 1; D_8012CEE0[41][9] = MEMPAK_INDEX_TO_LETTER(sCurFileIdx); - func_8006376C(0xD, 7, 5, D_8012CEE0[(dbCamera->sub.demoCtrlMenu / 100) + 32]); - func_8006376C(0x11, 7, 5, D_8012CFAC); - func_8006376C(0x17, 7, 5, D_8012CFA4); - func_8006376C(0xD, 9, (dbCamera->sub.demoCtrlToggleSwitch != 0) ? 1 : 6, "PRESS B BUTTON"); + DbCamera_ScreenTextColored(13, 7, DBCAMERA_TEXT_WHITE, + D_8012CEE0[(dbCamera->sub.demoCtrlMenu / 100) + 32]); + DbCamera_ScreenTextColored(17, 7, DBCAMERA_TEXT_WHITE, D_8012CFAC); + DbCamera_ScreenTextColored(23, 7, DBCAMERA_TEXT_WHITE, D_8012CFA4); + DbCamera_ScreenTextColored( + 13, 9, (dbCamera->sub.demoCtrlToggleSwitch != 0) ? DBCAMERA_TEXT_PEACH : DBCAMERA_TEXT_BLUE, + "PRESS B BUTTON"); if (CHECK_BTN_ALL(sPlay->state.input[DBCAM_CONTROLLER_PORT].press.button, BTN_A) || CHECK_BTN_ALL(sPlay->state.input[DBCAM_CONTROLLER_PORT].press.button, BTN_B)) { @@ -2029,30 +2060,31 @@ s32 DbCamera_UpdateDemoControl(DbCamera* dbCamera, Camera* cam) { } } idx3 = dbCamera->sub.demoCtrlActionIdx; - func_8006376C(0xE, 7, 5, D_8012CF50[idx3]); - func_8006376C(0xF, 7, 4, sp74); + DbCamera_ScreenTextColored(14, 7, DBCAMERA_TEXT_WHITE, D_8012CF50[idx3]); + DbCamera_ScreenTextColored(15, 7, DBCAMERA_TEXT_GOLD, sp74); - func_8006376C((sCurFileIdx * 2) + 0x10, 7, 7, "_"); // cursor + DbCamera_ScreenTextColored(16 + (sCurFileIdx * 2), 7, DBCAMERA_TEXT_GREEN, "_"); // cursor DbCamera_SetTextValue(DbCamera_GetMempakAllocSize(), sp74, 6); - func_8006376C(0xD, 9, 6, D_8012CF78); // NEED BYTE - func_8006376C(0x11, 9, 4, sp74); + DbCamera_ScreenTextColored(13, 9, DBCAMERA_TEXT_BLUE, D_8012CF78); // NEED BYTE + DbCamera_ScreenTextColored(17, 9, DBCAMERA_TEXT_GOLD, sp74); DbCamera_SetTextValue(Mempak_GetFreeBytes(DBCAM_CONTROLLER_PORT), sp74, 6); - func_8006376C(0xD, 0xA, 6, D_8012CF74); // FREE BYTE - func_8006376C(0x11, 0xA, 4, sp74); + DbCamera_ScreenTextColored(13, 10, DBCAMERA_TEXT_BLUE, D_8012CF74); // FREE BYTE + DbCamera_ScreenTextColored(17, 10, DBCAMERA_TEXT_GOLD, sp74); if (sMempakFilesize != 0) { DbCamera_SetTextValue(sMempakFilesize, sp74, 6); - func_8006376C(0xD, 0xB, 7, D_8012CFA8); - func_8006376C(0x11, 0xB, 4, sp74); + DbCamera_ScreenTextColored(13, 11, DBCAMERA_TEXT_GREEN, D_8012CFA8); + DbCamera_ScreenTextColored(17, 11, DBCAMERA_TEXT_GOLD, sp74); } idx1 = (dbCamera->sub.demoCtrlActionIdx + 2); - func_8006376C(0xF, 0x16, 1, D_8012CF7C); - func_8006376C(0x12, 0x17, sDbCameraColors[idx1], D_8012CF64); - func_8006376C(0x12, 0x18, sDbCameraColors[idx1 - 1], D_8012CF68); - func_8006376C(0x12, 0x19, sDbCameraColors[idx1 - 2], D_8012CF6C); - func_8006376C(0xE, dbCamera->sub.demoCtrlActionIdx + 0x16, 7, D_8012CF0C); // current selection - func_8006376C(0xD, 0x1A, 5, D_8012CF60[0]); - func_8006376C(0x14, 0x1A, 5, D_8012CF70); + DbCamera_ScreenTextColored(15, 22, DBCAMERA_TEXT_PEACH, D_8012CF7C); + DbCamera_ScreenTextColored(18, 23, sDbCameraColors[idx1], D_8012CF64); + DbCamera_ScreenTextColored(18, 24, sDbCameraColors[idx1 - 1], D_8012CF68); + DbCamera_ScreenTextColored(18, 25, sDbCameraColors[idx1 - 2], D_8012CF6C); + DbCamera_ScreenTextColored(14, 22 + dbCamera->sub.demoCtrlActionIdx, DBCAMERA_TEXT_GREEN, + D_8012CF0C); // current selection + DbCamera_ScreenTextColored(13, 26, DBCAMERA_TEXT_WHITE, D_8012CF60[0]); + DbCamera_ScreenTextColored(20, 26, DBCAMERA_TEXT_WHITE, D_8012CF70); if (CHECK_BTN_ALL(sPlay->state.input[DBCAM_CONTROLLER_PORT].press.button, BTN_DUP)) { Audio_PlaySfxGeneral(NA_SE_SY_CURSOR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, @@ -2079,8 +2111,8 @@ s32 DbCamera_UpdateDemoControl(DbCamera* dbCamera, Camera* cam) { } goto block_2; } else { - func_8006376C(0xC, 0x1A, 4, D_8012CF60[0]); - func_8006376C(0x13, 0x1A, 4, D_8012CF80); + DbCamera_ScreenTextColored(12, 26, DBCAMERA_TEXT_GOLD, D_8012CF60[0]); + DbCamera_ScreenTextColored(19, 26, DBCAMERA_TEXT_GOLD, D_8012CF80); if (CHECK_BTN_ALL(sPlay->state.input[DBCAM_CONTROLLER_PORT].press.button, BTN_B) || CHECK_BTN_ALL(sPlay->state.input[DBCAM_CONTROLLER_PORT].press.button, BTN_DUP) || CHECK_BTN_ALL(sPlay->state.input[DBCAM_CONTROLLER_PORT].press.button, BTN_DDOWN)) { @@ -2112,11 +2144,11 @@ s32 DbCamera_UpdateDemoControl(DbCamera* dbCamera, Camera* cam) { sCurFileIdx = 0; } - DbCamera_DrawSlotLetters(sp74, 7, 5, 4); + DbCamera_DrawSlotLetters(sp74, 7, 5, DBCAMERA_TEXT_GOLD); if (sDbCamAnim.unk_0A != 0) { - func_8006376C(4, 7, 5, D_8012CF4C); - func_8006376C(D_8016110C * 2 + 6, 7, 7, ">"); + DbCamera_ScreenTextColored(4, 7, DBCAMERA_TEXT_WHITE, D_8012CF4C); + DbCamera_ScreenTextColored(6 + (D_8016110C * 2), 7, DBCAMERA_TEXT_GREEN, ">"); if (CHECK_BTN_ALL(sPlay->state.input[DBCAM_CONTROLLER_PORT].press.button, BTN_CUP)) { if (D_8016110C > 0) { @@ -2225,7 +2257,7 @@ s32 DbCamera_UpdateDemoControl(DbCamera* dbCamera, Camera* cam) { &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); sp74[sCurFileIdx] = DbCamera_InitCut(idx1, &dbCamera->sub); if (sp74[sCurFileIdx] == '?') { - func_8006376C(0xF, 0x18, 7, D_8012CF48); + DbCamera_ScreenTextColored(15, 24, DBCAMERA_TEXT_GREEN, D_8012CF48); } } } @@ -2309,15 +2341,15 @@ s32 DbCamera_UpdateDemoControl(DbCamera* dbCamera, Camera* cam) { &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); } - func_8006376C(4, 7, 5, D_8012CF50[0]); + DbCamera_ScreenTextColored(4, 7, DBCAMERA_TEXT_WHITE, D_8012CF50[0]); sp74[1] = 0; if (sLastFileIdx != -1) { sp74[0] = D_801612EA; - func_8006376C(sLastFileIdx + 5, 7, 2, sp74); + DbCamera_ScreenTextColored(5 + sLastFileIdx, 7, DBCAMERA_TEXT_BROWN, sp74); } else { sp74[0] = '_'; } - func_8006376C(sCurFileIdx + 5, 7, 7, sp74); + DbCamera_ScreenTextColored(5 + sCurFileIdx, 7, DBCAMERA_TEXT_GREEN, sp74); break; } diff --git a/src/code/game.c b/src/code/game.c index 9f3bc91bcc..478fd709df 100644 --- a/src/code/game.c +++ b/src/code/game.c @@ -188,7 +188,7 @@ void GameState_Draw(GameState* gameState, GraphicsContext* gfxCtx) { CLOSE_DISPS(gfxCtx, "../game.c", 800); - func_80063D7C(gfxCtx); + Debug_DrawText(gfxCtx); if (R_ENABLE_ARENA_DBG != 0) { SpeedMeter_DrawTimeEntries(&D_801664D0, gfxCtx); diff --git a/src/code/z_camera.c b/src/code/z_camera.c index e91e4fe8ee..f7641f471f 100644 --- a/src/code/z_camera.c +++ b/src/code/z_camera.c @@ -25,9 +25,6 @@ s32 Camera_UpdateWater(Camera* camera); // Load the next value and scale down from camera read-only data stored in CameraModeValue #define GET_NEXT_SCALED_RO_DATA(values) CAM_DATA_SCALED(GET_NEXT_RO_DATA(values)) -#define FLG_ADJSLOPE (1 << 0) -#define FLG_OFFGROUND (1 << 7) - #define DISTORTION_HOT_ROOM (1 << 0) #define DISTORTION_UNDERWATER_WEAK (1 << 1) #define DISTORTION_UNDERWATER_MEDIUM (1 << 2) @@ -910,53 +907,51 @@ f32 Camera_CalcSlopeYAdj(Vec3f* floorNorm, s16 playerYRot, s16 eyeAtYaw, f32 adj /** * Calculates new at vector for the camera pointing in `eyeAtDir` */ -s32 Camera_CalcAtDefault(Camera* camera, VecGeo* eyeAtDir, f32 extraYOffset, s16 calcSlope) { +s32 Camera_CalcAtDefault(Camera* camera, VecGeo* eyeAtDir, f32 yOffset, s16 calcSlopeYAdj) { Vec3f* at = &camera->at; - Vec3f posOffsetTarget; + Vec3f playerToAtOffsetTarget; Vec3f atTarget; s32 pad2; PosRot* playerPosRot = &camera->playerPosRot; - f32 yOffset; + f32 playerHeight = Player_GetHeight(camera->player); - yOffset = Player_GetHeight(camera->player); + playerToAtOffsetTarget.x = 0.f; + playerToAtOffsetTarget.y = playerHeight + yOffset; + playerToAtOffsetTarget.z = 0.f; - posOffsetTarget.x = 0.f; - posOffsetTarget.y = yOffset + extraYOffset; - posOffsetTarget.z = 0.f; - - if (calcSlope) { - posOffsetTarget.y -= OLib_ClampMaxDist( + if (calcSlopeYAdj) { + playerToAtOffsetTarget.y -= OLib_ClampMaxDist( Camera_CalcSlopeYAdj(&camera->floorNorm, playerPosRot->rot.y, eyeAtDir->yaw, R_CAM_SLOPE_Y_ADJ_AMOUNT), - yOffset); + playerHeight); } - Camera_LERPCeilVec3f(&posOffsetTarget, &camera->posOffset, camera->yOffsetUpdateRate, camera->xzOffsetUpdateRate, - 0.1f); + Camera_LERPCeilVec3f(&playerToAtOffsetTarget, &camera->playerToAtOffset, camera->yOffsetUpdateRate, + camera->xzOffsetUpdateRate, 0.1f); - atTarget.x = playerPosRot->pos.x + camera->posOffset.x; - atTarget.y = playerPosRot->pos.y + camera->posOffset.y; - atTarget.z = playerPosRot->pos.z + camera->posOffset.z; + atTarget.x = playerPosRot->pos.x + camera->playerToAtOffset.x; + atTarget.y = playerPosRot->pos.y + camera->playerToAtOffset.y; + atTarget.z = playerPosRot->pos.z + camera->playerToAtOffset.z; Camera_LERPCeilVec3f(&atTarget, at, camera->atLERPStepScale, camera->atLERPStepScale, 0.2f); return true; } -s32 func_800458D4(Camera* camera, VecGeo* eyeAtDir, f32 arg2, f32* arg3, s16 arg4) { +s32 func_800458D4(Camera* camera, VecGeo* eyeAtDir, f32 yOffset, f32* arg3, s16 calcSlopeYAdj) { f32 phi_f2; - Vec3f posOffsetTarget; + Vec3f playerToAtOffsetTarget; Vec3f atTarget; f32 eyeAtAngle; PosRot* playerPosRot = &camera->playerPosRot; f32 deltaY; s32 pad[2]; - posOffsetTarget.y = Player_GetHeight(camera->player) + arg2; - posOffsetTarget.x = 0.0f; - posOffsetTarget.z = 0.0f; + playerToAtOffsetTarget.y = Player_GetHeight(camera->player) + yOffset; + playerToAtOffsetTarget.x = 0.0f; + playerToAtOffsetTarget.z = 0.0f; - if (arg4) { - posOffsetTarget.y -= + if (calcSlopeYAdj) { + playerToAtOffsetTarget.y -= Camera_CalcSlopeYAdj(&camera->floorNorm, playerPosRot->rot.y, eyeAtDir->yaw, R_CAM_SLOPE_Y_ADJ_AMOUNT); } @@ -972,30 +967,30 @@ s32 func_800458D4(Camera* camera, VecGeo* eyeAtDir, f32 arg2, f32* arg3, s16 arg phi_f2 = 1.0f; } - posOffsetTarget.y -= deltaY * phi_f2; - Camera_LERPCeilVec3f(&posOffsetTarget, &camera->posOffset, CAM_DATA_SCALED(OREG(29)), CAM_DATA_SCALED(OREG(30)), - 0.1f); + playerToAtOffsetTarget.y -= deltaY * phi_f2; + Camera_LERPCeilVec3f(&playerToAtOffsetTarget, &camera->playerToAtOffset, CAM_DATA_SCALED(OREG(29)), + CAM_DATA_SCALED(OREG(30)), 0.1f); - atTarget.x = playerPosRot->pos.x + camera->posOffset.x; - atTarget.y = playerPosRot->pos.y + camera->posOffset.y; - atTarget.z = playerPosRot->pos.z + camera->posOffset.z; + atTarget.x = playerPosRot->pos.x + camera->playerToAtOffset.x; + atTarget.y = playerPosRot->pos.y + camera->playerToAtOffset.y; + atTarget.z = playerPosRot->pos.z + camera->playerToAtOffset.z; Camera_LERPCeilVec3f(&atTarget, &camera->at, camera->atLERPStepScale, camera->atLERPStepScale, 0.2f); return 1; } -s32 func_80045B08(Camera* camera, VecGeo* eyeAtDir, f32 yExtra, s16 arg3) { +s32 func_80045B08(Camera* camera, VecGeo* eyeAtDir, f32 yOffset, s16 arg3) { f32 phi_f2; - Vec3f posOffsetTarget; + Vec3f playerToAtOffsetTarget; Vec3f atTarget; f32 pad; f32 temp_ret; PosRot* playerPosRot = &camera->playerPosRot; - posOffsetTarget.y = Player_GetHeight(camera->player) + yExtra; - posOffsetTarget.x = 0.0f; - posOffsetTarget.z = 0.0f; + playerToAtOffsetTarget.y = Player_GetHeight(camera->player) + yOffset; + playerToAtOffsetTarget.x = 0.0f; + playerToAtOffsetTarget.z = 0.0f; temp_ret = Math_SinS(arg3); @@ -1005,13 +1000,13 @@ s32 func_80045B08(Camera* camera, VecGeo* eyeAtDir, f32 yExtra, s16 arg3) { phi_f2 = -Math_CosS(playerPosRot->rot.y - eyeAtDir->yaw); } - posOffsetTarget.y -= temp_ret * phi_f2 * R_CAM_SLOPE_Y_ADJ_AMOUNT; - Camera_LERPCeilVec3f(&posOffsetTarget, &camera->posOffset, camera->yOffsetUpdateRate, camera->xzOffsetUpdateRate, - 0.1f); + playerToAtOffsetTarget.y -= temp_ret * phi_f2 * R_CAM_SLOPE_Y_ADJ_AMOUNT; + Camera_LERPCeilVec3f(&playerToAtOffsetTarget, &camera->playerToAtOffset, camera->yOffsetUpdateRate, + camera->xzOffsetUpdateRate, 0.1f); - atTarget.x = playerPosRot->pos.x + camera->posOffset.x; - atTarget.y = playerPosRot->pos.y + camera->posOffset.y; - atTarget.z = playerPosRot->pos.z + camera->posOffset.z; + atTarget.x = playerPosRot->pos.x + camera->playerToAtOffset.x; + atTarget.y = playerPosRot->pos.y + camera->playerToAtOffset.y; + atTarget.z = playerPosRot->pos.z + camera->playerToAtOffset.z; Camera_LERPCeilVec3f(&atTarget, &camera->at, camera->atLERPStepScale, camera->atLERPStepScale, 0.2f); return 1; @@ -1020,9 +1015,9 @@ s32 func_80045B08(Camera* camera, VecGeo* eyeAtDir, f32 yExtra, s16 arg3) { /** * Adjusts the camera's at position for Camera_Parallel1 */ -s32 Camera_CalcAtForParallel(Camera* camera, VecGeo* arg1, f32 yOffset, f32* arg3, s16 arg4) { +s32 Camera_CalcAtForParallel(Camera* camera, VecGeo* arg1, f32 yOffset, f32* arg3, s16 calcSlopeYAdj) { Vec3f* at = &camera->at; - Vec3f posOffsetTarget; + Vec3f playerToAtOffsetTarget; Vec3f atTarget; Vec3f* eye = &camera->eye; PosRot* playerPosRot = &camera->playerPosRot; @@ -1030,15 +1025,14 @@ s32 Camera_CalcAtForParallel(Camera* camera, VecGeo* arg1, f32 yOffset, f32* arg f32 phi_f16; f32 eyeAtDistXZ; f32 phi_f20; - f32 temp_f0_4; + f32 playerHeight = Player_GetHeight(camera->player); - temp_f0_4 = Player_GetHeight(camera->player); - posOffsetTarget.x = 0.0f; - posOffsetTarget.y = temp_f0_4 + yOffset; - posOffsetTarget.z = 0.0f; + playerToAtOffsetTarget.x = 0.0f; + playerToAtOffsetTarget.y = playerHeight + yOffset; + playerToAtOffsetTarget.z = 0.0f; - if (PREG(76) && arg4) { - posOffsetTarget.y -= + if (R_CAM_PARALLEL_LOCKON_CALC_SLOPE_Y_ADJ && calcSlopeYAdj) { + playerToAtOffsetTarget.y -= Camera_CalcSlopeYAdj(&camera->floorNorm, playerPosRot->rot.y, arg1->yaw, R_CAM_SLOPE_Y_ADJ_AMOUNT); } @@ -1046,8 +1040,8 @@ s32 Camera_CalcAtForParallel(Camera* camera, VecGeo* arg1, f32 yOffset, f32* arg camera->player->stateFlags1 & PLAYER_STATE1_21) { *arg3 = Camera_LERPCeilF(playerPosRot->pos.y, *arg3, CAM_DATA_SCALED(OREG(43)), 0.1f); phi_f20 = playerPosRot->pos.y - *arg3; - posOffsetTarget.y -= phi_f20; - Camera_LERPCeilVec3f(&posOffsetTarget, &camera->posOffset, camera->yOffsetUpdateRate, + playerToAtOffsetTarget.y -= phi_f20; + Camera_LERPCeilVec3f(&playerToAtOffsetTarget, &camera->playerToAtOffset, camera->yOffsetUpdateRate, camera->xzOffsetUpdateRate, 0.1f); } else { if (!PREG(75)) { @@ -1063,7 +1057,7 @@ s32 Camera_CalcAtForParallel(Camera* camera, VecGeo* arg1, f32 yOffset, f32* arg *arg3 += phi_f20 + temp_f2; phi_f20 = -temp_f2; } - posOffsetTarget.y -= phi_f20; + playerToAtOffsetTarget.y -= phi_f20; } else { phi_f20 = playerPosRot->pos.y - *arg3; temp_f2 = Math_FAtan2F(phi_f20, OLib_Vec3fDistXZ(at, eye)); @@ -1074,27 +1068,30 @@ s32 Camera_CalcAtForParallel(Camera* camera, VecGeo* arg1, f32 yOffset, f32* arg } else { phi_f16 = 1; } - posOffsetTarget.y -= phi_f20 * phi_f16; + playerToAtOffsetTarget.y -= phi_f20 * phi_f16; } - Camera_LERPCeilVec3f(&posOffsetTarget, &camera->posOffset, CAM_DATA_SCALED(OREG(29)), CAM_DATA_SCALED(OREG(30)), - 0.1f); + Camera_LERPCeilVec3f(&playerToAtOffsetTarget, &camera->playerToAtOffset, CAM_DATA_SCALED(OREG(29)), + CAM_DATA_SCALED(OREG(30)), 0.1f); camera->yOffsetUpdateRate = CAM_DATA_SCALED(OREG(29)); camera->xzOffsetUpdateRate = CAM_DATA_SCALED(OREG(30)); } - atTarget.x = playerPosRot->pos.x + camera->posOffset.x; - atTarget.y = playerPosRot->pos.y + camera->posOffset.y; - atTarget.z = playerPosRot->pos.z + camera->posOffset.z; + atTarget.x = playerPosRot->pos.x + camera->playerToAtOffset.x; + atTarget.y = playerPosRot->pos.y + camera->playerToAtOffset.y; + atTarget.z = playerPosRot->pos.z + camera->playerToAtOffset.z; Camera_LERPCeilVec3f(&atTarget, at, camera->atLERPStepScale, camera->atLERPStepScale, 0.2f); return 1; } +#define CAM_LOCKON_AT_FLAG_CALC_SLOPE_Y_ADJ (1 << 0) +#define CAM_LOCKON_AT_FLAG_OFF_GROUND (1 << 7) + /** * Adjusts at position for Camera_Battle1 and Camera_KeepOn1 */ s32 Camera_CalcAtForLockOn(Camera* camera, VecGeo* eyeAtDir, Vec3f* targetPos, f32 yOffset, f32 distance, f32* yPosOffset, VecGeo* outPlayerToTargetDir, s16 flags) { Vec3f* at = &camera->at; - Vec3f tmpPos0; + Vec3f playerToAtOffsetTarget; Vec3f tmpPos1; Vec3f lookFromOffset; Vec3f* floorNorm = &camera->floorNorm; @@ -1104,14 +1101,14 @@ s32 Camera_CalcAtForLockOn(Camera* camera, VecGeo* eyeAtDir, Vec3f* targetPos, f f32 phi_f16; f32 eyeAtDistXZ; f32 temp_f0_2; - f32 playerHeight; + f32 playerHeight = Player_GetHeight(camera->player); - playerHeight = Player_GetHeight(camera->player); - tmpPos0.x = 0.0f; - tmpPos0.y = playerHeight + yOffset; - tmpPos0.z = 0.0f; - if (PREG(76) && (flags & FLG_ADJSLOPE)) { - tmpPos0.y -= Camera_CalcSlopeYAdj(floorNorm, playerPosRot->rot.y, eyeAtDir->yaw, R_CAM_SLOPE_Y_ADJ_AMOUNT); + playerToAtOffsetTarget.x = 0.0f; + playerToAtOffsetTarget.y = playerHeight + yOffset; + playerToAtOffsetTarget.z = 0.0f; + if (R_CAM_PARALLEL_LOCKON_CALC_SLOPE_Y_ADJ && (flags & CAM_LOCKON_AT_FLAG_CALC_SLOPE_Y_ADJ)) { + playerToAtOffsetTarget.y -= + Camera_CalcSlopeYAdj(floorNorm, playerPosRot->rot.y, eyeAtDir->yaw, R_CAM_SLOPE_Y_ADJ_AMOUNT); } // tmpPos1 is player's head @@ -1130,7 +1127,7 @@ s32 Camera_CalcAtForLockOn(Camera* camera, VecGeo* eyeAtDir, Vec3f* targetPos, f playerToTargetDir.r = playerToTargetDir.r - (playerToTargetDir.r * temp_f0_2) * temp_f0_2; } - if (flags & FLG_OFFGROUND) { + if (flags & CAM_LOCKON_AT_FLAG_OFF_GROUND) { playerToTargetDir.r *= 0.2f; camera->xzOffsetUpdateRate = camera->yOffsetUpdateRate = .01f; } @@ -1142,18 +1139,19 @@ s32 Camera_CalcAtForLockOn(Camera* camera, VecGeo* eyeAtDir, Vec3f* targetPos, f lookFromOffset.z, camera->atLERPStepScale); } - tmpPos0.x = tmpPos0.x + lookFromOffset.x; - tmpPos0.y = tmpPos0.y + lookFromOffset.y; - tmpPos0.z = tmpPos0.z + lookFromOffset.z; + playerToAtOffsetTarget.x += lookFromOffset.x; + playerToAtOffsetTarget.y += lookFromOffset.y; + playerToAtOffsetTarget.z += lookFromOffset.z; if (camera->playerGroundY == camera->playerPosRot.pos.y || camera->player->actor.gravity > -0.1f || camera->player->stateFlags1 & PLAYER_STATE1_21) { *yPosOffset = Camera_LERPCeilF(playerPosRot->pos.y, *yPosOffset, CAM_DATA_SCALED(OREG(43)), 0.1f); yPosDelta = playerPosRot->pos.y - *yPosOffset; - tmpPos0.y -= yPosDelta; - Camera_LERPCeilVec3f(&tmpPos0, &camera->posOffset, camera->yOffsetUpdateRate, camera->xzOffsetUpdateRate, 0.1f); + playerToAtOffsetTarget.y -= yPosDelta; + Camera_LERPCeilVec3f(&playerToAtOffsetTarget, &camera->playerToAtOffset, camera->yOffsetUpdateRate, + camera->xzOffsetUpdateRate, 0.1f); } else { - if (!(flags & FLG_OFFGROUND)) { + if (!(flags & CAM_LOCKON_AT_FLAG_OFF_GROUND)) { yPosDelta = playerPosRot->pos.y - *yPosOffset; eyeAtDistXZ = OLib_Vec3fDistXZ(at, &camera->eye); phi_f16 = eyeAtDistXZ; @@ -1166,7 +1164,7 @@ s32 Camera_CalcAtForLockOn(Camera* camera, VecGeo* eyeAtDir, Vec3f* targetPos, f *yPosOffset = *yPosOffset + (yPosDelta + temp_f0_2); yPosDelta = -temp_f0_2; } - tmpPos0.y = tmpPos0.y - yPosDelta; + playerToAtOffsetTarget.y = playerToAtOffsetTarget.y - yPosDelta; } else { yPosDelta = playerPosRot->pos.y - *yPosOffset; temp_f0_2 = Math_FAtan2F(yPosDelta, OLib_Vec3fDistXZ(at, &camera->eye)); @@ -1178,33 +1176,32 @@ s32 Camera_CalcAtForLockOn(Camera* camera, VecGeo* eyeAtDir, Vec3f* targetPos, f } else { phi_f16 = 1.0f; } - tmpPos0.y -= (yPosDelta * phi_f16); + playerToAtOffsetTarget.y -= (yPosDelta * phi_f16); } - Camera_LERPCeilVec3f(&tmpPos0, &camera->posOffset, CAM_DATA_SCALED(OREG(29)), CAM_DATA_SCALED(OREG(30)), 0.1f); + Camera_LERPCeilVec3f(&playerToAtOffsetTarget, &camera->playerToAtOffset, CAM_DATA_SCALED(OREG(29)), + CAM_DATA_SCALED(OREG(30)), 0.1f); camera->yOffsetUpdateRate = CAM_DATA_SCALED(OREG(29)); camera->xzOffsetUpdateRate = CAM_DATA_SCALED(OREG(30)); } - tmpPos1.x = playerPosRot->pos.x + camera->posOffset.x; - tmpPos1.y = playerPosRot->pos.y + camera->posOffset.y; - tmpPos1.z = playerPosRot->pos.z + camera->posOffset.z; + tmpPos1.x = playerPosRot->pos.x + camera->playerToAtOffset.x; + tmpPos1.y = playerPosRot->pos.y + camera->playerToAtOffset.y; + tmpPos1.z = playerPosRot->pos.z + camera->playerToAtOffset.z; Camera_LERPCeilVec3f(&tmpPos1, at, camera->atLERPStepScale, camera->atLERPStepScale, 0.2f); return 1; } -s32 Camera_CalcAtForHorse(Camera* camera, VecGeo* eyeAtDir, f32 yOffset, f32* yPosOffset, s16 calcSlope) { +s32 Camera_CalcAtForHorse(Camera* camera, VecGeo* eyeAtDir, f32 yOffset, f32* yPosOffset, s16 calcSlopeYAdj) { Vec3f* at = &camera->at; - Vec3f posOffsetTarget; + Vec3f playerToAtOffsetTarget; Vec3f atTarget; s32 pad; s32 pad2; - f32 playerHeight; - Player* player; + f32 playerHeight = Player_GetHeight(camera->player); + Player* player = camera->player; PosRot horsePosRot; - playerHeight = Player_GetHeight(camera->player); - player = camera->player; Actor_GetWorldPosShapeRot(&horsePosRot, player->rideActor); if (EN_HORSE_CHECK_JUMPING((EnHorse*)player->rideActor)) { @@ -1215,21 +1212,21 @@ s32 Camera_CalcAtForHorse(Camera* camera, VecGeo* eyeAtDir, f32 yOffset, f32* yP *yPosOffset = Camera_LERPCeilF(horsePosRot.pos.y, *yPosOffset, 0.5f, 0.2f); } - posOffsetTarget.x = 0.0f; - posOffsetTarget.y = playerHeight + yOffset; - posOffsetTarget.z = 0.0f; + playerToAtOffsetTarget.x = 0.0f; + playerToAtOffsetTarget.y = playerHeight + yOffset; + playerToAtOffsetTarget.z = 0.0f; - if (calcSlope != 0) { - posOffsetTarget.y -= Camera_CalcSlopeYAdj(&camera->floorNorm, camera->playerPosRot.rot.y, eyeAtDir->yaw, - R_CAM_SLOPE_Y_ADJ_AMOUNT); + if (calcSlopeYAdj) { + playerToAtOffsetTarget.y -= Camera_CalcSlopeYAdj(&camera->floorNorm, camera->playerPosRot.rot.y, eyeAtDir->yaw, + R_CAM_SLOPE_Y_ADJ_AMOUNT); } - Camera_LERPCeilVec3f(&posOffsetTarget, &camera->posOffset, camera->yOffsetUpdateRate, camera->xzOffsetUpdateRate, - 0.1f); + Camera_LERPCeilVec3f(&playerToAtOffsetTarget, &camera->playerToAtOffset, camera->yOffsetUpdateRate, + camera->xzOffsetUpdateRate, 0.1f); - atTarget.x = camera->posOffset.x + horsePosRot.pos.x; - atTarget.y = camera->posOffset.y + horsePosRot.pos.y; - atTarget.z = camera->posOffset.z + horsePosRot.pos.z; + atTarget.x = camera->playerToAtOffset.x + horsePosRot.pos.x; + atTarget.y = camera->playerToAtOffset.y + horsePosRot.pos.y; + atTarget.z = camera->playerToAtOffset.z + horsePosRot.pos.z; Camera_LERPCeilVec3f(&atTarget, at, camera->atLERPStepScale, camera->atLERPStepScale, 0.2f); return 1; @@ -1932,7 +1929,7 @@ s32 Camera_Normal3(Camera* camera) { temp_f0 = (((1.0f / roData->unk_10) * 0.5f) * (1.0f - camera->speedRatio)); rwData->curPitch = Camera_LERPCeilS(t2, rwData->curPitch, sp94 + temp_f0, 0xF); - Camera_CalcAtForHorse(camera, &sp74, roData->yOffset, &rwData->unk_20, 1); + Camera_CalcAtForHorse(camera, &sp74, roData->yOffset, &rwData->unk_20, true); sp90 = (roData->distMax + roData->distMin) * 0.5f; OLib_Vec3fDiffToVecGeo(&sp84, at, eyeNext); camera->dist = sp84.r = Camera_ClampDist(camera, sp84.r, roData->distMin, roData->distMax, rwData->distTimer); @@ -2266,7 +2263,7 @@ s32 Camera_Jump1(Camera* camera) { rwData->swing.swingUpdateRate = roData->yawUpateRateTarget; rwData->unk_1C = playerPosRot->pos.y - camera->playerPosDelta.y; rwData->unk_20 = eyeAtOffset.r; - camera->posOffset.y -= camera->playerPosDelta.y; + camera->playerToAtOffset.y -= camera->playerPosDelta.y; camera->xzOffsetUpdateRate = (1.0f / 10000.0f); camera->animState++; } @@ -2294,7 +2291,7 @@ s32 Camera_Jump1(Camera* camera) { camera->fovUpdateRate = Camera_LERPCeilF(CAM_DATA_SCALED(R_CAM_FOV_UPDATE_RATE), camera->yOffsetUpdateRate, 0.05f, 0.1f); - func_800458D4(camera, &eyeNextAtOffset, roData->atYOffset, &rwData->unk_1C, 0); + func_800458D4(camera, &eyeNextAtOffset, roData->atYOffset, &rwData->unk_1C, false); eyeDiffGeo = eyeAtOffset; @@ -2458,7 +2455,7 @@ s32 Camera_Jump2(Camera* camera) { camera->speedRatio * 0.05f, 0.1f); camera->rUpdateRateInv = OREG(27); - Camera_CalcAtDefault(camera, &atToEyeNextDir, roData->atYOffset, 0); + Camera_CalcAtDefault(camera, &atToEyeNextDir, roData->atYOffset, false); OLib_Vec3fDiffToVecGeo(&adjAtToEyeDir, at, eye); temp_f16 = roData->minDist; @@ -2919,7 +2916,10 @@ s32 Camera_Battle1(Camera* camera) { Camera_CalcAtForLockOn(camera, &atToEyeNextDir, &camera->targetPosRot.pos, isOffGround ? roData->yOffsetOffGround : roData->yOffset, distance, &rwData->yPosOffset, - &playerToTargetDir, (isOffGround ? 0x81 : 1) | roData->interfaceField); + &playerToTargetDir, + (isOffGround ? (CAM_LOCKON_AT_FLAG_OFF_GROUND | CAM_LOCKON_AT_FLAG_CALC_SLOPE_Y_ADJ) + : CAM_LOCKON_AT_FLAG_CALC_SLOPE_Y_ADJ) | + roData->interfaceField); tmpAng2 = playerToTargetDir.yaw; playerHead = playerPosRot->pos; playerHead.y += playerHeight; @@ -3080,7 +3080,7 @@ s32 Camera_Battle4(Camera* camera) { Camera_LERPCeilF(CAM_DATA_SCALED(R_CAM_Y_OFFSET_UPDATE_RATE), camera->yOffsetUpdateRate, CAM_DATA_SCALED(R_CAM_UPDATE_RATE_STEP_SCALE_Y) * camera->speedRatio, 0.1f); camera->fovUpdateRate = 0.0001f; - Camera_CalcAtDefault(camera, &eyeNextAtOffset, roData->yOffset, 1); + Camera_CalcAtDefault(camera, &eyeNextAtOffset, roData->yOffset, true); if (rwData->animTimer != 0) { eyeNextOffset.yaw = eyeAtOffset.yaw; eyeNextOffset.pitch = eyeAtOffset.pitch; @@ -3133,7 +3133,7 @@ s32 Camera_KeepOn1(Camera* camera) { s32 sp88; f32 sp84; s16 sp82; - s16 sp80; + s16 isOffGround; KeepOn1ReadOnlyData* roData = &camera->paramData.keep1.roData; KeepOn1ReadWriteData* rwData = &camera->paramData.keep1.rwData; s16 t3; @@ -3232,13 +3232,14 @@ s32 Camera_KeepOn1(Camera* camera) { if (camera->playerGroundY == camera->playerPosRot.pos.y || camera->player->actor.gravity > -0.1f || camera->player->stateFlags1 & PLAYER_STATE1_21) { rwData->unk_08 = playerPosRot->pos.y; - sp80 = 0; + isOffGround = false; } else { - sp80 = 1; + isOffGround = true; } - Camera_CalcAtForLockOn(camera, &spB8, &camera->targetPosRot.pos, sp80 ? roData->unk_28 : roData->unk_00, - sp104, &rwData->unk_08, &spC8, (sp80 ? 0x80 : 0) | roData->interfaceField); + Camera_CalcAtForLockOn(camera, &spB8, &camera->targetPosRot.pos, + isOffGround ? roData->unk_28 : roData->unk_00, sp104, &rwData->unk_08, &spC8, + (isOffGround ? CAM_LOCKON_AT_FLAG_OFF_GROUND : 0) | roData->interfaceField); sp114 = playerPosRot->pos; sp114.y += playerHeight; OLib_Vec3fDiffToVecGeo(&spC8, &sp114, &camera->targetPosRot.pos); @@ -3342,7 +3343,7 @@ s32 Camera_KeepOn1(Camera* camera) { } camera->fov = Camera_LERPCeilF(roData->unk_20, camera->fov, camera->fovUpdateRate, 1.0f); camera->roll = Camera_LERPCeilS(0, camera->roll, 0.5f, 0xA); - camera->atLERPStepScale = Camera_ClampLERPScale(camera, sp80 ? roData->unk_2C : roData->unk_24); + camera->atLERPStepScale = Camera_ClampLERPScale(camera, isOffGround ? roData->unk_2C : roData->unk_24); return 1; } @@ -4000,9 +4001,9 @@ s32 Camera_Fixed1(Camera* camera) { camera->roll = 0; camera->atLERPStepScale = 0.0f; - camera->posOffset.x = camera->at.x - playerPosRot->pos.x; - camera->posOffset.y = camera->at.y - playerPosRot->pos.y; - camera->posOffset.z = camera->at.z - playerPosRot->pos.z; + camera->playerToAtOffset.x = camera->at.x - playerPosRot->pos.x; + camera->playerToAtOffset.y = camera->at.y - playerPosRot->pos.y; + camera->playerToAtOffset.z = camera->at.z - playerPosRot->pos.z; return true; } @@ -4012,7 +4013,7 @@ s32 Camera_Fixed2(Camera* camera) { Vec3f* at = &camera->at; Vec3f* eyeNext = &camera->eyeNext; Vec3f atTarget; - Vec3f posOffsetTarget; + Vec3f playerToAtOffsetTarget; PosRot* playerPosRot = &camera->playerPosRot; BgCamFuncData* bgCamFuncData; Fixed2ReadOnlyData* roData = &camera->paramData.fixd2.roData; @@ -4054,14 +4055,15 @@ s32 Camera_Fixed2(Camera* camera) { sCameraInterfaceField = roData->interfaceField; - posOffsetTarget.x = 0.0f; - posOffsetTarget.y = roData->yOffset + playerHeight; - posOffsetTarget.z = 0.0f; + playerToAtOffsetTarget.x = 0.0f; + playerToAtOffsetTarget.y = roData->yOffset + playerHeight; + playerToAtOffsetTarget.z = 0.0f; - Camera_LERPCeilVec3f(&posOffsetTarget, &camera->posOffset, roData->posStepScale, roData->posStepScale, 0.1f); - atTarget.x = playerPosRot->pos.x + camera->posOffset.x; - atTarget.y = playerPosRot->pos.y + camera->posOffset.y; - atTarget.z = playerPosRot->pos.z + camera->posOffset.z; + Camera_LERPCeilVec3f(&playerToAtOffsetTarget, &camera->playerToAtOffset, roData->posStepScale, roData->posStepScale, + 0.1f); + atTarget.x = playerPosRot->pos.x + camera->playerToAtOffset.x; + atTarget.y = playerPosRot->pos.y + camera->playerToAtOffset.y; + atTarget.z = playerPosRot->pos.z + camera->playerToAtOffset.z; if (camera->animState == 0) { camera->animState++; func_80043B60(camera); @@ -4080,9 +4082,9 @@ s32 Camera_Fixed2(Camera* camera) { camera->xzSpeed = 0.0f; camera->fov = CAM_DATA_SCALED(rwData->fov); camera->atLERPStepScale = Camera_ClampLERPScale(camera, 1.0f); - camera->posOffset.x = camera->at.x - playerPosRot->pos.x; - camera->posOffset.y = camera->at.y - playerPosRot->pos.y; - camera->posOffset.z = camera->at.z - playerPosRot->pos.z; + camera->playerToAtOffset.x = camera->at.x - playerPosRot->pos.x; + camera->playerToAtOffset.y = camera->at.y - playerPosRot->pos.y; + camera->playerToAtOffset.z = camera->at.z - playerPosRot->pos.z; return true; } @@ -4167,12 +4169,12 @@ s32 Camera_Fixed4(Camera* camera) { Vec3f* eyeNext = &camera->eyeNext; Vec3f playerPosWithCamOffset; Vec3f atTarget; - Vec3f posOffsetTarget; + Vec3f playerToAtOffsetTarget; VecGeo atEyeNextOffset; VecGeo atTargetEyeNextOffset; PosRot* playerPosRot = &camera->playerPosRot; BgCamFuncData* bgCamFuncData; - Vec3f* posOffset = &camera->posOffset; + Vec3f* posOffset = &camera->playerToAtOffset; Fixed4ReadOnlyData* roData = &camera->paramData.fixd4.roData; Fixed4ReadWriteData* rwData = &camera->paramData.fixd4.rwData; f32 playerYOffset; @@ -4212,14 +4214,14 @@ s32 Camera_Fixed4(Camera* camera) { VEC3F_LERPIMPDST(eyeNext, eyeNext, &rwData->eyeTarget, roData->speedToEyePos); *eye = *eyeNext; - posOffsetTarget.x = 0.0f; - posOffsetTarget.y = roData->yOffset + playerYOffset; - posOffsetTarget.z = 0.0f; - Camera_LERPCeilVec3f(&posOffsetTarget, &camera->posOffset, 0.1f, 0.1f, 0.1f); + playerToAtOffsetTarget.x = 0.0f; + playerToAtOffsetTarget.y = roData->yOffset + playerYOffset; + playerToAtOffsetTarget.z = 0.0f; + Camera_LERPCeilVec3f(&playerToAtOffsetTarget, &camera->playerToAtOffset, 0.1f, 0.1f, 0.1f); - playerPosWithCamOffset.x = playerPosRot->pos.x + camera->posOffset.x; - playerPosWithCamOffset.y = playerPosRot->pos.y + camera->posOffset.y; - playerPosWithCamOffset.z = playerPosRot->pos.z + camera->posOffset.z; + playerPosWithCamOffset.x = playerPosRot->pos.x + camera->playerToAtOffset.x; + playerPosWithCamOffset.y = playerPosRot->pos.y + camera->playerToAtOffset.y; + playerPosWithCamOffset.z = playerPosRot->pos.z + camera->playerToAtOffset.z; VEC3F_LERPIMPDST(&atTarget, at, &playerPosWithCamOffset, 0.5f); OLib_Vec3fDiffToVecGeo(&atEyeNextOffset, eyeNext, at); @@ -4366,9 +4368,9 @@ s32 Camera_Subj3(Camera* camera) { Camera_AddVecGeoToVec3f(eye, at, &sp7C); } - camera->posOffset.x = camera->at.x - playerPosRot->pos.x; - camera->posOffset.y = camera->at.y - playerPosRot->pos.y; - camera->posOffset.z = camera->at.z - playerPosRot->pos.z; + camera->playerToAtOffset.x = camera->at.x - playerPosRot->pos.x; + camera->playerToAtOffset.y = camera->at.y - playerPosRot->pos.y; + camera->playerToAtOffset.z = camera->at.z - playerPosRot->pos.z; camera->fov = Camera_LERPCeilF(roData->fovTarget, camera->fov, 0.25f, 1.0f); camera->roll = 0; camera->atLERPStepScale = 0.0f; @@ -4689,7 +4691,7 @@ s32 Camera_Unique1(Camera* camera) { sCameraInterfaceField = roData->interfaceField; if (camera->animState == 0) { - camera->posOffset.y = camera->posOffset.y - camera->playerPosDelta.y; + camera->playerToAtOffset.y -= camera->playerPosDelta.y; rwData->yawTarget = eyeNextAtOffset.yaw; rwData->unk_00 = 0.0f; playerWaistPos = camera->player->bodyPartsPos[PLAYER_BODYPART_WAIST]; @@ -4713,7 +4715,7 @@ s32 Camera_Unique1(Camera* camera) { Camera_LERPCeilF(0.01f, camera->yOffsetUpdateRate, R_CAM_UPDATE_RATE_STEP_SCALE_Y * 0.01f, 0.01f); camera->fovUpdateRate = Camera_LERPCeilF(R_CAM_FOV_UPDATE_RATE * 0.01f, camera->fovUpdateRate, 0.05f, 0.1f); - Camera_CalcAtDefault(camera, &eyeNextAtOffset, roData->yOffset, 1); + Camera_CalcAtDefault(camera, &eyeNextAtOffset, roData->yOffset, true); OLib_Vec3fDiffToVecGeo(&sp8C, at, eyeNext); camera->dist = Camera_LERPClampDist(camera, sp8C.r, roData->distMin, roData->distMax); @@ -4935,9 +4937,9 @@ s32 Camera_Unique3(Camera* camera) { camera->fov = roData->fov; Camera_ChangeSettingFlags(camera, camera->prevSetting, 2); camera->atLERPStepScale = 0.0f; - camera->posOffset.x = camera->at.x - cameraPlayerPosRot->pos.x; - camera->posOffset.y = camera->at.y - cameraPlayerPosRot->pos.y; - camera->posOffset.z = camera->at.z - cameraPlayerPosRot->pos.z; + camera->playerToAtOffset.x = camera->at.x - cameraPlayerPosRot->pos.x; + camera->playerToAtOffset.y = camera->at.y - cameraPlayerPosRot->pos.y; + camera->playerToAtOffset.z = camera->at.z - cameraPlayerPosRot->pos.z; break; } @@ -5025,9 +5027,9 @@ s32 Camera_Unique0(Camera* camera) { CHECK_BTN_ALL(D_8015BD7C->state.input[0].press.button, BTN_R) || CHECK_BTN_ALL(D_8015BD7C->state.input[0].press.button, BTN_Z))) { camera->dist = OLib_Vec3fDist(&camera->at, eye); - camera->posOffset.x = camera->at.x - playerPosRot->pos.x; - camera->posOffset.y = camera->at.y - playerPosRot->pos.y; - camera->posOffset.z = camera->at.z - playerPosRot->pos.z; + camera->playerToAtOffset.x = camera->at.x - playerPosRot->pos.x; + camera->playerToAtOffset.y = camera->at.y - playerPosRot->pos.y; + camera->playerToAtOffset.z = camera->at.z - playerPosRot->pos.z; camera->atLERPStepScale = 0.0f; camera->stateFlags |= CAM_STATE_2; Camera_ChangeSettingFlags(camera, camera->prevSetting, 2); @@ -5052,9 +5054,9 @@ s32 Camera_Unique0(Camera* camera) { CHECK_BTN_ALL(D_8015BD7C->state.input[0].press.button, BTN_R) || CHECK_BTN_ALL(D_8015BD7C->state.input[0].press.button, BTN_Z))) { camera->dist = OLib_Vec3fDist(&camera->at, &camera->eye); - camera->posOffset.x = camera->at.x - playerPosRot->pos.x; - camera->posOffset.y = camera->at.y - playerPosRot->pos.y; - camera->posOffset.z = camera->at.z - playerPosRot->pos.z; + camera->playerToAtOffset.x = camera->at.x - playerPosRot->pos.x; + camera->playerToAtOffset.y = camera->at.y - playerPosRot->pos.y; + camera->playerToAtOffset.z = camera->at.z - playerPosRot->pos.z; camera->atLERPStepScale = 0.0f; Camera_ChangeSettingFlags(camera, camera->prevSetting, 2); camera->stateFlags |= CAM_STATE_2; @@ -5106,9 +5108,9 @@ s32 Camera_Unique6(Camera* camera) { sp2C = playerPosRot->pos; sp2C.y += offset; camera->dist = OLib_Vec3fDist(&sp2C, &camera->eye); - camera->posOffset.x = camera->at.x - playerPosRot->pos.x; - camera->posOffset.y = camera->at.y - playerPosRot->pos.y; - camera->posOffset.z = camera->at.z - playerPosRot->pos.z; + camera->playerToAtOffset.x = camera->at.x - playerPosRot->pos.x; + camera->playerToAtOffset.y = camera->at.y - playerPosRot->pos.y; + camera->playerToAtOffset.z = camera->at.z - playerPosRot->pos.z; } else { camera->dist = OLib_Vec3fDist(&camera->at, &camera->eye); } @@ -5666,9 +5668,9 @@ s32 Camera_Unique9(Camera* camera) { } if (camera->player != NULL) { - camera->posOffset.x = camera->at.x - camera->playerPosRot.pos.x; - camera->posOffset.y = camera->at.y - camera->playerPosRot.pos.y; - camera->posOffset.z = camera->at.z - camera->playerPosRot.pos.z; + camera->playerToAtOffset.x = camera->at.x - camera->playerPosRot.pos.x; + camera->playerToAtOffset.y = camera->at.y - camera->playerPosRot.pos.y; + camera->playerToAtOffset.z = camera->at.z - camera->playerPosRot.pos.z; } camera->dist = OLib_Vec3fDist(at, eye); @@ -6007,9 +6009,9 @@ s32 Camera_Demo3(Camera* camera) { camera->dist = OLib_Vec3fDist(at, eye); camera->atLERPStepScale = 0.1f; - camera->posOffset.x = camera->at.x - camPlayerPosRot->pos.x; - camera->posOffset.y = camera->at.y - camPlayerPosRot->pos.y; - camera->posOffset.z = camera->at.z - camPlayerPosRot->pos.z; + camera->playerToAtOffset.x = camera->at.x - camPlayerPosRot->pos.x; + camera->playerToAtOffset.y = camera->at.y - camPlayerPosRot->pos.y; + camera->playerToAtOffset.z = camera->at.z - camPlayerPosRot->pos.z; return true; } @@ -6528,9 +6530,9 @@ s32 Camera_Special0(Camera* camera) { Actor_GetFocus(&camera->targetPosRot, camera->target); Camera_LERPCeilVec3f(&camera->targetPosRot.pos, &camera->at, roData->lerpAtScale, roData->lerpAtScale, 0.1f); - camera->posOffset.x = camera->at.x - playerPosRot->pos.x; - camera->posOffset.y = camera->at.y - playerPosRot->pos.y; - camera->posOffset.z = camera->at.z - playerPosRot->pos.z; + camera->playerToAtOffset.x = camera->at.x - playerPosRot->pos.x; + camera->playerToAtOffset.y = camera->at.y - playerPosRot->pos.y; + camera->playerToAtOffset.z = camera->at.z - playerPosRot->pos.z; camera->dist = OLib_Vec3fDist(&camera->at, &camera->eye); camera->xzSpeed = 0.0f; @@ -6669,7 +6671,7 @@ s32 Camera_Special5(Camera* camera) { } } - Camera_CalcAtDefault(camera, &sp5C, roData->yOffset, 0); + Camera_CalcAtDefault(camera, &sp5C, roData->yOffset, false); camera->fov = Camera_LERPCeilF(roData->fovTarget, camera->fov, camera->atLERPStepScale * CAM_DATA_SCALED(R_CAM_FOV_UPDATE_RATE), 1.0f); camera->roll = Camera_LERPCeilS(0, camera->roll, 0.5f, 0xA); @@ -6739,9 +6741,9 @@ s32 Camera_Special7(Camera* camera) { camera->dist = OLib_Vec3fDist(&camera->at, &camera->eye); camera->atLERPStepScale = 0.0f; - camera->posOffset.x = camera->at.x - playerPosRot->pos.x; - camera->posOffset.y = camera->at.y - playerPosRot->pos.y; - camera->posOffset.z = camera->at.z - playerPosRot->pos.z; + camera->playerToAtOffset.x = camera->at.x - playerPosRot->pos.x; + camera->playerToAtOffset.y = camera->at.y - playerPosRot->pos.y; + camera->playerToAtOffset.z = camera->at.z - playerPosRot->pos.z; return true; } @@ -7004,9 +7006,9 @@ s32 Camera_Special9(Camera* camera) { spAC = playerPosRot->pos; spAC.y += playerYOffset; camera->dist = OLib_Vec3fDist(&spAC, eye); - camera->posOffset.x = camera->at.x - playerPosRot->pos.x; - camera->posOffset.y = camera->at.y - playerPosRot->pos.y; - camera->posOffset.z = camera->at.z - playerPosRot->pos.z; + camera->playerToAtOffset.x = camera->at.x - playerPosRot->pos.x; + camera->playerToAtOffset.y = camera->at.y - playerPosRot->pos.y; + camera->playerToAtOffset.z = camera->at.z - playerPosRot->pos.z; return true; } @@ -7147,13 +7149,13 @@ void Camera_InitDataUsingPlayer(Camera* camera, Player* player) { s32 bgId; Vec3f floorPos; s32 upXZ; - f32 playerYOffset; + f32 playerToAtOffsetY; Vec3f* eye = &camera->eye; Vec3f* at = &camera->at; Vec3f* eyeNext = &camera->eyeNext; Actor_GetWorldPosShapeRot(&playerPosShape, &player->actor); - playerYOffset = Player_GetHeight(player); + playerToAtOffsetY = Player_GetHeight(player); camera->player = player; camera->playerPosRot = playerPosShape; camera->dist = eyeNextAtOffset.r = 180.0f; @@ -7165,11 +7167,11 @@ void Camera_InitDataUsingPlayer(Camera* camera, Player* player) { camera->xzSpeed = 0.0f; camera->playerPosDelta.y = 0.0f; camera->at = playerPosShape.pos; - camera->at.y += playerYOffset; + camera->at.y += playerToAtOffsetY; - camera->posOffset.x = 0; - camera->posOffset.y = playerYOffset; - camera->posOffset.z = 0; + camera->playerToAtOffset.x = 0; + camera->playerToAtOffset.y = playerToAtOffsetY; + camera->playerToAtOffset.z = 0; Camera_AddVecGeoToVec3f(eyeNext, at, &eyeNextAtOffset); *eye = *eyeNext; @@ -7276,15 +7278,16 @@ void Camera_PrintSettings(Camera* camera) { sp48[i] = '\0'; sp48[camera->play->activeCamId] = 'a'; - func_8006376C(3, 0x16, 5, sp58); - func_8006376C(3, 0x16, 1, sp48); - func_8006376C(3, 0x17, 5, "S:"); - func_8006376C(5, 0x17, 4, sCameraSettingNames[camera->setting]); - func_8006376C(3, 0x18, 5, "M:"); - func_8006376C(5, 0x18, 4, sCameraModeNames[camera->mode]); - func_8006376C(3, 0x19, 5, "F:"); - func_8006376C(5, 0x19, 4, - sCameraFunctionNames[sCameraSettings[camera->setting].cameraModes[camera->mode].funcIdx]); + DbCamera_ScreenTextColored(3, 22, DBCAMERA_TEXT_WHITE, sp58); + DbCamera_ScreenTextColored(3, 22, DBCAMERA_TEXT_PEACH, sp48); + DbCamera_ScreenTextColored(3, 23, DBCAMERA_TEXT_WHITE, "S:"); + DbCamera_ScreenTextColored(5, 23, DBCAMERA_TEXT_GOLD, sCameraSettingNames[camera->setting]); + DbCamera_ScreenTextColored(3, 24, DBCAMERA_TEXT_WHITE, "M:"); + DbCamera_ScreenTextColored(5, 24, DBCAMERA_TEXT_GOLD, sCameraModeNames[camera->mode]); + DbCamera_ScreenTextColored(3, 25, DBCAMERA_TEXT_WHITE, "F:"); + DbCamera_ScreenTextColored( + 5, 25, DBCAMERA_TEXT_GOLD, + sCameraFunctionNames[sCameraSettings[camera->setting].cameraModes[camera->mode].funcIdx]); i = 0; if (camera->bgCamIndex < 0) { @@ -7308,8 +7311,8 @@ void Camera_PrintSettings(Camera* camera) { sp50[i++] = ' '; sp50[i++] = ' '; sp50[i] = '\0'; - func_8006376C(3, 26, 5, "I:"); - func_8006376C(5, 26, 4, sp50); + DbCamera_ScreenTextColored(3, 26, DBCAMERA_TEXT_WHITE, "I:"); + DbCamera_ScreenTextColored(5, 26, DBCAMERA_TEXT_GOLD, sp50); } } @@ -7677,7 +7680,7 @@ Vec3s Camera_Update(Camera* camera) { sCameraFunctions[sCameraSettings[camera->setting].cameraModes[camera->mode].funcIdx](camera); } else if (camera->player != NULL) { OLib_Vec3fDiffToVecGeo(&eyeAtAngle, &camera->at, &camera->eye); - Camera_CalcAtDefault(camera, &eyeAtAngle, 0.0f, 0); + Camera_CalcAtDefault(camera, &eyeAtAngle, 0.0f, false); } if (camera->status == CAM_STAT_ACTIVE) { @@ -8303,9 +8306,9 @@ s32 Camera_ChangeDoorCam(Camera* camera, Actor* doorActor, s16 bgCamIndex, f32 a s32 Camera_Copy(Camera* dstCamera, Camera* srcCamera) { s32 pad; - dstCamera->posOffset.x = 0.0f; - dstCamera->posOffset.y = 0.0f; - dstCamera->posOffset.z = 0.0f; + dstCamera->playerToAtOffset.x = 0.0f; + dstCamera->playerToAtOffset.y = 0.0f; + dstCamera->playerToAtOffset.z = 0.0f; dstCamera->atLERPStepScale = 0.1f; dstCamera->at = srcCamera->at; @@ -8318,9 +8321,9 @@ s32 Camera_Copy(Camera* dstCamera, Camera* srcCamera) { if (dstCamera->player != NULL) { Actor_GetWorld(&dstCamera->playerPosRot, &dstCamera->player->actor); - dstCamera->posOffset.x = dstCamera->at.x - dstCamera->playerPosRot.pos.x; - dstCamera->posOffset.y = dstCamera->at.y - dstCamera->playerPosRot.pos.y; - dstCamera->posOffset.z = dstCamera->at.z - dstCamera->playerPosRot.pos.z; + dstCamera->playerToAtOffset.x = dstCamera->at.x - dstCamera->playerPosRot.pos.x; + dstCamera->playerToAtOffset.y = dstCamera->at.y - dstCamera->playerPosRot.pos.y; + dstCamera->playerToAtOffset.z = dstCamera->at.z - dstCamera->playerPosRot.pos.z; dstCamera->dist = OLib_Vec3fDist(&dstCamera->playerPosRot.pos, &dstCamera->eye); dstCamera->xzOffsetUpdateRate = 1.0f; dstCamera->yOffsetUpdateRate = 1.0f; diff --git a/src/code/z_debug.c b/src/code/z_debug.c index ac4de7bf9d..630cfc1ba7 100644 --- a/src/code/z_debug.c +++ b/src/code/z_debug.c @@ -5,7 +5,7 @@ typedef struct { u8 y; u8 colorIndex; char text[21]; -} PrintTextBufferEntry; // size = 0x18 +} DbCameraTextBufferEntry; // size = 0x18 typedef struct { u16 hold; @@ -14,17 +14,19 @@ typedef struct { RegEditor* gRegEditor; -PrintTextBufferEntry sDebugPrintTextBuffer[22]; -s16 sDebugPrintTextBufferNumUsed = 0; -Color_RGBA8 sDebugPrintTextColors[] = { - { 255, 255, 32, 192 }, // 0 - { 255, 150, 128, 192 }, // 1 - { 128, 96, 0, 64 }, // 2 - { 192, 128, 16, 128 }, // 3 - { 255, 192, 32, 128 }, // 4 - { 230, 230, 220, 64 }, // 5 - { 128, 150, 255, 128 }, // 6 - { 128, 255, 32, 128 }, // 7 +DbCameraTextBufferEntry sDbCameraTextBuffer[22]; + +s16 sDbCameraTextEntryCount = 0; + +Color_RGBA8 sDbCameraTextColors[] = { + { 255, 255, 32, 192 }, // DBCAMERA_TEXT_YELLOW + { 255, 150, 128, 192 }, // DBCAMERA_TEXT_PEACH + { 128, 96, 0, 64 }, // DBCAMERA_TEXT_BROWN + { 192, 128, 16, 128 }, // DBCAMERA_TEXT_ORANGE + { 255, 192, 32, 128 }, // DBCAMERA_TEXT_GOLD + { 230, 230, 220, 64 }, // DBCAMERA_TEXT_WHITE + { 128, 150, 255, 128 }, // DBCAMERA_TEXT_BLUE + { 128, 255, 32, 128 }, // DBCAMERA_TEXT_GREEN }; InputCombo sRegGroupInputCombos[REG_GROUPS] = { @@ -106,18 +108,16 @@ void Regs_Init(void) { } } -// Called when free movement is active. -void func_8006375C(s32 arg0, s32 arg1, const char* text) { +// Function is stubbed. Name is assumed by similarities in signature to `DbCamera_ScreenTextColored` and usage. +void DbCamera_ScreenText(u8 x, u8 y, const char* text) { } -// Store text during Update, to be drawn later during Draw -void func_8006376C(u8 x, u8 y, u8 colorIndex, const char* text) { - PrintTextBufferEntry* entry; +void DbCamera_ScreenTextColored(u8 x, u8 y, u8 colorIndex, const char* text) { + DbCameraTextBufferEntry* entry = &sDbCameraTextBuffer[sDbCameraTextEntryCount]; char* textDest; s16 charCount; - entry = &sDebugPrintTextBuffer[sDebugPrintTextBufferNumUsed]; - if (sDebugPrintTextBufferNumUsed < ARRAY_COUNT(sDebugPrintTextBuffer)) { + if (sDbCameraTextEntryCount < ARRAY_COUNT(sDbCameraTextBuffer)) { entry->x = x; entry->y = y; entry->colorIndex = colorIndex; @@ -125,34 +125,38 @@ void func_8006376C(u8 x, u8 y, u8 colorIndex, const char* text) { // Copy text into the entry, truncating if needed charCount = 0; textDest = entry->text; + while ((*textDest++ = *text++) != '\0') { if (charCount++ > (ARRAY_COUNT(entry->text) - 1)) { break; } } + *textDest = '\0'; - sDebugPrintTextBufferNumUsed++; + sDbCameraTextEntryCount++; } } -// Draw text previously stored by calls to `func_8006376C` -void func_80063828(GfxPrint* printer) { +void DbCamera_DrawScreenText(GfxPrint* printer) { s32 i; Color_RGBA8* color; - PrintTextBufferEntry* entry; + DbCameraTextBufferEntry* entry; - for (i = 0; i < sDebugPrintTextBufferNumUsed; i++) { - entry = &sDebugPrintTextBuffer[i]; + for (i = 0; i < sDbCameraTextEntryCount; i++) { + entry = &sDbCameraTextBuffer[i]; + color = &sDbCameraTextColors[entry->colorIndex]; - color = &sDebugPrintTextColors[entry->colorIndex]; GfxPrint_SetColor(printer, color->r, color->g, color->b, color->a); GfxPrint_SetPos(printer, entry->x, entry->y); GfxPrint_Printf(printer, "%s", entry->text); } } -// Process inputs to control the reg editor +/** + * Updates the state of the Reg Editor according to user input. + * Also contains a controller rumble test that can be interfaced with via related REGs. +*/ void Regs_UpdateEditor(Input* input) { s32 dPadInputCur; s32 pageDataStart = ((gRegEditor->regGroup * REG_PAGES) + gRegEditor->regPage - 1) * REGS_PER_PAGE; @@ -160,6 +164,7 @@ void Regs_UpdateEditor(Input* input) { s32 i; dPadInputCur = input->cur.button & (BTN_DUP | BTN_DLEFT | BTN_DRIGHT | BTN_DDOWN); + if (CHECK_BTN_ALL(input->cur.button, BTN_L) || CHECK_BTN_ALL(input->cur.button, BTN_R) || CHECK_BTN_ALL(input->cur.button, BTN_START)) { @@ -188,7 +193,6 @@ void Regs_UpdateEditor(Input* input) { case 4: case 5: case 6: - if (dPadInputCur == gRegEditor->dPadInputPrev) { gRegEditor->inputRepeatTimer--; if (gRegEditor->inputRepeatTimer < 0) { @@ -239,7 +243,6 @@ void Regs_UpdateEditor(Input* input) { } } -// Draw the reg editor void Regs_DrawEditor(GfxPrint* printer) { s32 i; s32 pageStart = (gRegEditor->regPage - 1) * REGS_PER_PAGE; @@ -267,7 +270,10 @@ void Regs_DrawEditor(GfxPrint* printer) { } } -void func_80063D7C(GraphicsContext* gfxCtx) { +/** + * Draws the Reg Editor and Debug Camera text on screen + */ +void Debug_DrawText(GraphicsContext* gfxCtx) { Gfx* gfx; Gfx* opaStart; GfxPrint printer; @@ -282,14 +288,14 @@ void func_80063D7C(GraphicsContext* gfxCtx) { GfxPrint_Open(&printer, gfx); if ((OREG(0) == 1) || (OREG(0) == 8)) { - func_80063828(&printer); + DbCamera_DrawScreenText(&printer); } if (gRegEditor->regPage != 0) { Regs_DrawEditor(&printer); } - sDebugPrintTextBufferNumUsed = 0; + sDbCameraTextEntryCount = 0; gfx = GfxPrint_Close(&printer); gSPEndDisplayList(gfx++); diff --git a/src/code/z_fbdemo.c b/src/code/z_fbdemo.c index c15255fc2d..f1e36a396c 100644 --- a/src/code/z_fbdemo.c +++ b/src/code/z_fbdemo.c @@ -1,9 +1,24 @@ +/** + * @file z_fbdemo.c + * + * This file implements an unused transition system that takes the current screen, partitions it into large tiles, and + * can apply an effect to them. + * + * The screen is divided into 7 rows and 10 columns of tiles. (`gScreenWidth`/ 10 = `gScreenHeight` / 7 = 0x20) + * + * @note The only coded effect has a visual effect to blend the tiles to a single point, which looks like the screen + * gets sucked into. + */ #include "global.h" -Gfx D_8012AFB0[] = { +// color framebuffer +extern u16 D_0F000000[]; + +// Unused background; a blue rectangle with a grey border that fills the screen +Gfx sTransTileBackgroundDL[] = { gsDPPipeSync(), gsDPSetCycleType(G_CYC_FILL), - gsDPSetColorImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 320, 0x0F000000), + gsDPSetColorImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 320, D_0F000000), gsDPSetFillColor((GPACK_RGBA5551(65, 65, 65, 1) << 16) | GPACK_RGBA5551(65, 65, 65, 1)), gsDPFillRectangle(0, 0, 319, 239), gsDPPipeSync(), @@ -13,7 +28,7 @@ Gfx D_8012AFB0[] = { gsSPEndDisplayList(), }; -Gfx D_8012B000[] = { +Gfx sTransTileSetupDL[] = { gsDPPipeSync(), gsSPTexture(0x8000, 0x8000, 0, G_TX_RENDERTILE, G_ON), gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | @@ -25,18 +40,15 @@ Gfx D_8012B000[] = { gsSPEndDisplayList(), }; -void TransitionUnk_InitGraphics(TransitionUnk* this) { - s32 row2; - s32 pad2; - s32 pad3; - Vtx_t* vtx2; +void TransitionTile_InitGraphics(TransitionTile* this) { s32 frame; - s32 rowTex; - s32 row; - Gfx* gfx; - Vtx* vtx; s32 col; + s32 col2; s32 colTex; + Vtx* vtx; + s32 row; + s32 rowTex; + Gfx* gfx; guMtxIdent(&this->modelView); guMtxIdent(&this->unk_98); @@ -45,74 +57,84 @@ void TransitionUnk_InitGraphics(TransitionUnk* this) { for (frame = 0; frame < 2; frame++) { this->frame = frame; vtx = (this->frame == 0) ? this->vtxFrame1 : this->vtxFrame2; - for (colTex = 0, col = 0; col < this->col + 1; colTex += 0x20, col++) { - for (rowTex = 0, row = 0; row < this->row + 1; row++) { - vtx2 = &vtx->v; - vtx++; + rowTex = 0; + for (row = 0; row < this->rows + 1; row++) { + colTex = 0; + for (col = 0; col < this->cols + 1; col++) { + Vtx_tn* vtxn = &vtx->n; - vtx2->tc[0] = rowTex << 6; - vtx2->ob[0] = row * 0x20; - vtx2->ob[1] = col * 0x20; - vtx2->ob[2] = -5; - vtx2->flag = 0; - vtx2->tc[1] = colTex << 6; - vtx2->cn[0] = 0; - vtx2->cn[1] = 0; - vtx2->cn[2] = 120; - vtx2->cn[3] = 255; - rowTex += 0x20; + vtx++; + vtxn->tc[0] = colTex << 6; + vtxn->ob[0] = col * 0x20; + vtxn->ob[1] = row * 0x20; + vtxn->ob[2] = -5; + vtxn->flag = 0; + vtxn->tc[1] = rowTex << 6; + vtxn->n[0] = 0; + vtxn->n[1] = 0; + vtxn->n[2] = 120; + vtxn->a = 255; + + colTex += 0x20; } + + rowTex += 0x20; } } gfx = this->gfx; - for (colTex = 0, col = 0; col < this->col; colTex += 0x20, col++) { + rowTex = 0; + for (row = 0; row < this->rows; row++) { + gSPVertex(gfx++, SEGMENT_ADDR(0xA, (u32)row * (this->cols + 1) * sizeof(Vtx)), 2 * (this->cols + 1), 0); - gSPVertex(gfx++, SEGMENT_ADDR(0xA, (u32)col * (this->row + 1) * sizeof(Vtx)), 2 * (this->row + 1), 0); - - for (rowTex = 0, row = 0, row2 = 0; row < this->row;) { + colTex = 0; + col2 = 0; + col = 0; + while (col < this->cols) { gDPPipeSync(gfx++); gDPLoadTextureTile(gfx++, SEGMENT_ADDR(0xB, 0), G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH, SCREEN_HEIGHT, - rowTex, colTex, rowTex + 0x20, colTex + 0x20, 0, G_TX_NOMIRROR | G_TX_WRAP, + colTex, rowTex, colTex + 0x20, rowTex + 0x20, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gSP1Quadrangle(gfx++, row, row + 1, row2 + this->row + 2, this->row + row2 + 1, 0); + gSP1Quadrangle(gfx++, col, col + 1, col2 + this->cols + 2, this->cols + col2 + 1, 0); - rowTex += 0x20; - row2++; - row++; + colTex += 0x20; + col2++; + col++; } + + rowTex += 0x20; } gDPPipeSync(gfx++); gSPEndDisplayList(gfx++); - LOG_NUM("this->col * (1 + this->row * (1 + 7 + 1)) + 1 + 1", this->col * (1 + this->row * 9) + 2, "../z_fbdemo.c", + LOG_NUM("this->col * (1 + this->row * (1 + 7 + 1)) + 1 + 1", this->rows * (1 + this->cols * 9) + 2, "../z_fbdemo.c", 144); LOG_NUM("gp - this->gfxtbl", gfx - this->gfx, "../z_fbdemo.c", 145); } -void TransitionUnk_InitData(TransitionUnk* this) { - s32 col; +void TransitionTile_InitVtxData(TransitionTile* this) { s32 row; + s32 col; - for (col = 0; col < this->col + 1; col++) { - for (row = 0; row < this->row + 1; row++) { - (this->unk_0C + row + col * (this->row + 1))->unk_0 = row * 32; - (this->unk_0C + row + col * (this->row + 1))->unk_4 = col * 32; + for (row = 0; row < this->rows + 1; row++) { + for (col = 0; col < this->cols + 1; col++) { + (this->vtxData + col + row * (this->cols + 1))->x = col * 0x20; + (this->vtxData + col + row * (this->cols + 1))->y = row * 0x20; } } } -void TransitionUnk_Destroy(TransitionUnk* this) { +void TransitionTile_Destroy(TransitionTile* this) { osSyncPrintf("fbdemo_cleanup(%08x)\n", this); osSyncPrintf("msleep(100);\n"); Sleep_Msec(100); - if (this->unk_0C != NULL) { - SystemArena_FreeDebug(this->unk_0C, "../z_fbdemo.c", 180); - this->unk_0C = NULL; + if (this->vtxData != NULL) { + SystemArena_FreeDebug(this->vtxData, "../z_fbdemo.c", 180); + this->vtxData = NULL; } if (this->vtxFrame1 != NULL) { SystemArena_FreeDebug(this->vtxFrame1, "../z_fbdemo.c", 181); @@ -128,22 +150,23 @@ void TransitionUnk_Destroy(TransitionUnk* this) { } } -TransitionUnk* TransitionUnk_Init(TransitionUnk* this, s32 row, s32 col) { - osSyncPrintf("fbdemo_init(%08x, %d, %d)\n", this, row, col); - bzero(this, sizeof(*this)); +TransitionTile* TransitionTile_Init(TransitionTile* this, s32 cols, s32 rows) { + osSyncPrintf("fbdemo_init(%08x, %d, %d)\n", this, cols, rows); + bzero(this, sizeof(TransitionTile)); this->frame = 0; - this->row = row; - this->col = col; - this->unk_0C = SystemArena_MallocDebug((row + 1) * sizeof(TransitionUnkData) * (col + 1), "../z_fbdemo.c", 195); - this->vtxFrame1 = SystemArena_MallocDebug((row + 1) * sizeof(Vtx) * (col + 1), "../z_fbdemo.c", 196); - this->vtxFrame2 = SystemArena_MallocDebug((row + 1) * sizeof(Vtx) * (col + 1), "../z_fbdemo.c", 197); - this->gfx = SystemArena_MallocDebug((this->col * (1 + this->row * 9) + 2) * sizeof(Gfx), "../z_fbdemo.c", 198); + this->cols = cols; + this->rows = rows; + this->vtxData = + SystemArena_MallocDebug((cols + 1) * sizeof(TransitionTileVtxData) * (rows + 1), "../z_fbdemo.c", 195); + this->vtxFrame1 = SystemArena_MallocDebug((cols + 1) * sizeof(Vtx) * (rows + 1), "../z_fbdemo.c", 196); + this->vtxFrame2 = SystemArena_MallocDebug((cols + 1) * sizeof(Vtx) * (rows + 1), "../z_fbdemo.c", 197); + this->gfx = SystemArena_MallocDebug((this->rows * (1 + this->cols * 9) + 2) * sizeof(Gfx), "../z_fbdemo.c", 198); - if (this->unk_0C == NULL || this->vtxFrame1 == NULL || this->vtxFrame2 == NULL || this->gfx == NULL) { + if ((this->vtxData == NULL) || (this->vtxFrame1 == NULL) || (this->vtxFrame2 == NULL) || (this->gfx == NULL)) { osSyncPrintf("fbdemo_init allocation error\n"); - if (this->unk_0C != NULL) { - SystemArena_FreeDebug(this->unk_0C, "../z_fbdemo.c", 202); - this->unk_0C = NULL; + if (this->vtxData != NULL) { + SystemArena_FreeDebug(this->vtxData, "../z_fbdemo.c", 202); + this->vtxData = NULL; } if (this->vtxFrame1 != NULL) { SystemArena_FreeDebug(this->vtxFrame1, "../z_fbdemo.c", 203); @@ -159,72 +182,75 @@ TransitionUnk* TransitionUnk_Init(TransitionUnk* this, s32 row, s32 col) { } return NULL; } - TransitionUnk_InitGraphics(this); - TransitionUnk_InitData(this); + + TransitionTile_InitGraphics(this); + TransitionTile_InitVtxData(this); this->frame = 0; return this; } -void TransitionUnk_SetData(TransitionUnk* this) { +void TransitionTile_SetVtx(TransitionTile* this) { + s32 row; s32 col; Vtx* vtx; - s32 row; - for (col = 0; col < this->col + 1; col++) { - for (row = 0; row < this->row + 1; row++) { + for (row = 0; row < this->rows + 1; row++) { + for (col = 0; col < this->cols + 1; col++) { vtx = (this->frame == 0) ? this->vtxFrame1 : this->vtxFrame2; - (vtx + row + col * (this->row + 1))->v.ob[0] = (this->unk_0C + row + col * (this->row + 1))->unk_0; + (vtx + col + row * (this->cols + 1))->n.ob[0] = (this->vtxData + col + row * (this->cols + 1))->x; + vtx = (this->frame == 0) ? this->vtxFrame1 : this->vtxFrame2; - (vtx + row + col * (this->row + 1))->v.ob[1] = (this->unk_0C + row + col * (this->row + 1))->unk_4; + (vtx + col + row * (this->cols + 1))->n.ob[1] = (this->vtxData + col + row * (this->cols + 1))->y; } } } -void TransitionUnk_Draw(TransitionUnk* this, Gfx** gfxP) { +void TransitionTile_Draw(TransitionTile* this, Gfx** gfxP) { Gfx* gfx = *gfxP; - gSPDisplayList(gfx++, D_8012B000); - TransitionUnk_SetData(this); + gSPDisplayList(gfx++, sTransTileSetupDL); + TransitionTile_SetVtx(this); gSPMatrix(gfx++, &this->projection, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); gSPMatrix(gfx++, &this->modelView, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPSegment(gfx++, 0xA, this->frame == 0 ? this->vtxFrame1 : this->vtxFrame2); gSPSegment(gfx++, 0xB, this->zBuffer); - gSPDisplayList(gfx++, D_8012B000); + gSPDisplayList(gfx++, sTransTileSetupDL); gSPDisplayList(gfx++, this->gfx); gDPPipeSync(gfx++); this->frame ^= 1; *gfxP = gfx; } -void TransitionUnk_Update(TransitionUnk* this) { - f32 temp_f00; - f32 temp_f12; - s32 col; - f32 phi_f14; +/** + * Blends tiles which has the visual effect of sucking those tiles into a single point + */ +void TransitionTile_Suck(TransitionTile* this) { s32 row; + s32 col; + f32 diffX; + f32 diffY; + f32 scale; - for (col = 0; col < this->col + 1; col++) { - for (row = 0; row < this->row + 1; row++) { - temp_f00 = - (this->unk_0C + row + col * (this->row + 1))->unk_0 - (this->unk_0C + 5 + 4 * (this->row + 1))->unk_0; - temp_f12 = - (this->unk_0C + row + col * (this->row + 1))->unk_4 - (this->unk_0C + 5 + 4 * (this->row + 1))->unk_4; - phi_f14 = (SQ(temp_f00) + SQ(temp_f12)) / 100.0f; - if (phi_f14 != 0.0f) { - if (phi_f14 < 1.0f) { - phi_f14 = 1.0f; + for (row = 0; row < this->rows + 1; row++) { + for (col = 0; col < this->cols + 1; col++) { + diffX = (this->vtxData + col + row * (this->cols + 1))->x - (this->vtxData + 5 + 4 * (this->cols + 1))->x; + diffY = (this->vtxData + col + row * (this->cols + 1))->y - (this->vtxData + 5 + 4 * (this->cols + 1))->y; + scale = (SQ(diffX) + SQ(diffY)) / 100.0f; + if (scale != 0.0f) { + if (scale < 1.0f) { + scale = 1.0f; } - (this->unk_0C + row + col * (this->row + 1))->unk_0 -= temp_f00 / phi_f14; - (this->unk_0C + row + col * (this->row + 1))->unk_4 -= temp_f12 / phi_f14; + (this->vtxData + col + row * (this->cols + 1))->x -= diffX / scale; + (this->vtxData + col + row * (this->cols + 1))->y -= diffY / scale; } } } } -void func_800B23E8(TransitionUnk* this) { +void TransitionTile_Update(TransitionTile* this) { } -s32 func_800B23F0(TransitionUnk* this) { +s32 func_800B23F0(TransitionTile* this) { return 0; } diff --git a/src/code/z_kaleido_scope_call.c b/src/code/z_kaleido_scope_call.c index 5457a6f089..76839db164 100644 --- a/src/code/z_kaleido_scope_call.c +++ b/src/code/z_kaleido_scope_call.c @@ -76,7 +76,7 @@ void KaleidoScopeCall_Update(PlayState* play) { } else if ((pauseCtx->state == PAUSE_STATE_WAIT_BG_PRERENDER) || (pauseCtx->state == PAUSE_STATE_9)) { osSyncPrintf("PR_KAREIDOSCOPE_MODE=%d\n", R_PAUSE_BG_PRERENDER_STATE); - if (R_PAUSE_BG_PRERENDER_STATE >= PAUSE_BG_PRERENDER_DONE) { + if (R_PAUSE_BG_PRERENDER_STATE >= PAUSE_BG_PRERENDER_READY) { pauseCtx->state++; // PAUSE_STATE_INIT or PAUSE_STATE_10 } } else if (pauseCtx->state != PAUSE_STATE_OFF) { @@ -118,7 +118,7 @@ void KaleidoScopeCall_Update(PlayState* play) { void KaleidoScopeCall_Draw(PlayState* play) { KaleidoMgrOverlay* kaleidoScopeOvl = &gKaleidoMgrOverlayTable[KALEIDO_OVL_KALEIDO_SCOPE]; - if (R_PAUSE_BG_PRERENDER_STATE >= PAUSE_BG_PRERENDER_DONE) { + if (R_PAUSE_BG_PRERENDER_STATE >= PAUSE_BG_PRERENDER_READY) { if (((play->pauseCtx.state >= PAUSE_STATE_OPENING_1) && (play->pauseCtx.state <= PAUSE_STATE_SAVE_PROMPT) /* PAUSE_STATE_OPENING_1, PAUSE_STATE_OPENING_2, PAUSE_STATE_MAIN, PAUSE_STATE_SAVE_PROMPT */) || ((play->pauseCtx.state >= PAUSE_STATE_11) && (play->pauseCtx.state <= PAUSE_STATE_CLOSING) diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index 8decf3d1b0..81d2b7ff0c 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -3239,7 +3239,7 @@ void Interface_Draw(PlayState* play) { Minimap_Draw(play); if ((R_PAUSE_BG_PRERENDER_STATE != PAUSE_BG_PRERENDER_PROCESS) && - (R_PAUSE_BG_PRERENDER_STATE != PAUSE_BG_PRERENDER_DONE)) { + (R_PAUSE_BG_PRERENDER_STATE != PAUSE_BG_PRERENDER_READY)) { func_8002C124(&play->actorCtx.targetCtx, play); // Draw Z-Target } diff --git a/src/code/z_play.c b/src/code/z_play.c index 29f60607b6..28651de8ab 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -6,8 +6,8 @@ void* gDebugCutsceneScript = NULL; UNK_TYPE D_8012D1F4 = 0; // unused Input* D_8012D1F8 = NULL; -TransitionUnk sTrnsnUnk; -s32 gTrnsnUnkState; +TransitionTile sTransitionTile; +s32 gTransitionTileState; VisMono D_80161498; Color_RGBA8_u32 gVisMonoColor; FaultClient D_801614B8; @@ -186,9 +186,9 @@ void Play_Destroy(GameState* thisx) { EffectSs_ClearAll(this); CollisionCheck_DestroyContext(this, &this->colChkCtx); - if (gTrnsnUnkState == 3) { - TransitionUnk_Destroy(&sTrnsnUnk); - gTrnsnUnkState = 0; + if (gTransitionTileState == TRANS_TILE_READY) { + TransitionTile_Destroy(&sTransitionTile); + gTransitionTileState = TRANS_TILE_OFF; } if (this->transitionMode == TRANS_MODE_INSTANCE_RUNNING) { @@ -361,7 +361,7 @@ void Play_Init(GameState* thisx) { PreRender_Init(&this->pauseBgPreRender); PreRender_SetValuesSave(&this->pauseBgPreRender, SCREEN_WIDTH, SCREEN_HEIGHT, NULL, NULL, NULL); PreRender_SetValues(&this->pauseBgPreRender, SCREEN_WIDTH, SCREEN_HEIGHT, NULL, NULL); - gTrnsnUnkState = 0; + gTransitionTileState = TRANS_TILE_OFF; this->transitionMode = TRANS_MODE_OFF; FrameAdvance_Init(&this->frameAdvCtx); Rand_Seed((u32)osGetTime()); @@ -492,20 +492,24 @@ void Play_Update(PlayState* this) { this->transitionMode = TRANS_MODE_SETUP; } - if (gTrnsnUnkState != 0) { - switch (gTrnsnUnkState) { - case 2: - if (TransitionUnk_Init(&sTrnsnUnk, 10, 7) == NULL) { + if (gTransitionTileState != TRANS_TILE_OFF) { + switch (gTransitionTileState) { + case TRANS_TILE_PROCESS: + if (TransitionTile_Init(&sTransitionTile, 10, 7) == NULL) { osSyncPrintf("fbdemo_init呼出し失敗!\n"); // "fbdemo_init call failed!" - gTrnsnUnkState = 0; + gTransitionTileState = TRANS_TILE_OFF; } else { - sTrnsnUnk.zBuffer = (u16*)gZBuffer; - gTrnsnUnkState = 3; + sTransitionTile.zBuffer = (u16*)gZBuffer; + gTransitionTileState = TRANS_TILE_READY; R_UPDATE_RATE = 1; } break; - case 3: - func_800B23E8(&sTrnsnUnk); + + case TRANS_TILE_READY: + TransitionTile_Update(&sTransitionTile); + break; + + default: break; } } @@ -652,9 +656,9 @@ void Play_Update(PlayState* this) { func_800BC88C(this); this->transitionMode = TRANS_MODE_OFF; - if (gTrnsnUnkState == 3) { - TransitionUnk_Destroy(&sTrnsnUnk); - gTrnsnUnkState = 0; + if (gTransitionTileState == TRANS_TILE_READY) { + TransitionTile_Destroy(&sTransitionTile); + gTransitionTileState = TRANS_TILE_OFF; R_UPDATE_RATE = 3; } } @@ -702,7 +706,7 @@ void Play_Update(PlayState* this) { this->envCtx.screenFillColor[3] = (1 - sTransitionFillTimer / 20.0f) * 255.0f; if (sTransitionFillTimer >= 20) { - gTrnsnUnkState = 0; + gTransitionTileState = TRANS_TILE_OFF; R_UPDATE_RATE = 3; this->transitionTrigger = TRANS_TRIGGER_OFF; this->transitionMode = TRANS_MODE_OFF; @@ -736,7 +740,7 @@ void Play_Update(PlayState* this) { this->transitionTrigger = TRANS_TRIGGER_OFF; this->transitionMode = TRANS_MODE_OFF; } else { - gTrnsnUnkState = 0; + gTransitionTileState = TRANS_TILE_OFF; R_UPDATE_RATE = 3; this->transitionTrigger = TRANS_TRIGGER_OFF; this->transitionMode = TRANS_MODE_OFF; @@ -767,7 +771,7 @@ void Play_Update(PlayState* this) { if (this->transitionTrigger == TRANS_TRIGGER_END) { if (this->envCtx.sandstormPrimA < 110) { - gTrnsnUnkState = 0; + gTransitionTileState = TRANS_TILE_OFF; R_UPDATE_RATE = 3; this->transitionTrigger = TRANS_TRIGGER_OFF; this->transitionMode = TRANS_MODE_OFF; @@ -802,7 +806,7 @@ void Play_Update(PlayState* this) { if (this->transitionTrigger == TRANS_TRIGGER_END) { if (this->envCtx.sandstormPrimA <= 0) { - gTrnsnUnkState = 0; + gTransitionTileState = TRANS_TILE_OFF; R_UPDATE_RATE = 3; this->transitionTrigger = TRANS_TRIGGER_OFF; this->transitionMode = TRANS_MODE_OFF; @@ -825,7 +829,7 @@ void Play_Update(PlayState* this) { this->envCtx.screenFillColor[3] = gSaveContext.cutsceneTransitionControl; if (gSaveContext.cutsceneTransitionControl <= 100) { - gTrnsnUnkState = 0; + gTransitionTileState = TRANS_TILE_OFF; R_UPDATE_RATE = 3; this->transitionTrigger = TRANS_TRIGGER_OFF; this->transitionMode = TRANS_MODE_OFF; @@ -837,7 +841,7 @@ void Play_Update(PlayState* this) { PLAY_LOG(3533); - if (1 && (gTrnsnUnkState != 3)) { + if (1 && (gTransitionTileState != TRANS_TILE_READY)) { PLAY_LOG(3542); if ((gSaveContext.gameMode == GAMEMODE_NORMAL) && (this->msgCtx.msgMode == MSGMODE_NONE) && @@ -1109,10 +1113,10 @@ void Play_Draw(PlayState* this) { POLY_OPA_DISP = gfxP; } - if (gTrnsnUnkState == 3) { + if (gTransitionTileState == TRANS_TILE_READY) { Gfx* sp88 = POLY_OPA_DISP; - TransitionUnk_Draw(&sTrnsnUnk, &sp88); + TransitionTile_Draw(&sTransitionTile, &sp88); POLY_OPA_DISP = sp88; goto Play_Draw_DrawOverlayElements; } else { @@ -1126,12 +1130,12 @@ void Play_Draw(PlayState* this) { PreRender_ApplyFilters(&this->pauseBgPreRender); - R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_DONE; + R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_READY; } else if (R_PAUSE_BG_PRERENDER_STATE >= PAUSE_BG_PRERENDER_MAX) { R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_OFF; } - if (R_PAUSE_BG_PRERENDER_STATE == PAUSE_BG_PRERENDER_DONE) { + if (R_PAUSE_BG_PRERENDER_STATE == PAUSE_BG_PRERENDER_READY) { Gfx* gfxP = POLY_OPA_DISP; PreRender_RestoreFramebuffer(&this->pauseBgPreRender, &gfxP); @@ -1247,7 +1251,8 @@ void Play_Draw(PlayState* this) { DebugDisplay_DrawObjects(this); } - if ((R_PAUSE_BG_PRERENDER_STATE == PAUSE_BG_PRERENDER_SETUP) || (gTrnsnUnkState == 1)) { + if ((R_PAUSE_BG_PRERENDER_STATE == PAUSE_BG_PRERENDER_SETUP) || + (gTransitionTileState == TRANS_TILE_SETUP)) { Gfx* gfxP = OVERLAY_DISP; // Copy the frame buffer contents at this point in the display list to the zbuffer @@ -1261,7 +1266,7 @@ void Play_Draw(PlayState* this) { R_PAUSE_BG_PRERENDER_STATE = PAUSE_BG_PRERENDER_PROCESS; } else { - gTrnsnUnkState = 2; + gTransitionTileState = TRANS_TILE_PROCESS; } OVERLAY_DISP = gfxP; this->unk_121C7 = 2; @@ -1560,11 +1565,11 @@ s32 Play_SetCameraAtEye(PlayState* this, s16 camId, Vec3f* at, Vec3f* eye) { player = camera->player; if (player != NULL) { - camera->posOffset.x = at->x - player->actor.world.pos.x; - camera->posOffset.y = at->y - player->actor.world.pos.y; - camera->posOffset.z = at->z - player->actor.world.pos.z; + camera->playerToAtOffset.x = at->x - player->actor.world.pos.x; + camera->playerToAtOffset.y = at->y - player->actor.world.pos.y; + camera->playerToAtOffset.z = at->z - player->actor.world.pos.z; } else { - camera->posOffset.x = camera->posOffset.y = camera->posOffset.z = 0.0f; + camera->playerToAtOffset.x = camera->playerToAtOffset.y = camera->playerToAtOffset.z = 0.0f; } camera->atLERPStepScale = 0.01f; @@ -1588,11 +1593,11 @@ s32 Play_SetCameraAtEyeUp(PlayState* this, s16 camId, Vec3f* at, Vec3f* eye, Vec player = camera->player; if (player != NULL) { - camera->posOffset.x = at->x - player->actor.world.pos.x; - camera->posOffset.y = at->y - player->actor.world.pos.y; - camera->posOffset.z = at->z - player->actor.world.pos.z; + camera->playerToAtOffset.x = at->x - player->actor.world.pos.x; + camera->playerToAtOffset.y = at->y - player->actor.world.pos.y; + camera->playerToAtOffset.z = at->z - player->actor.world.pos.z; } else { - camera->posOffset.x = camera->posOffset.y = camera->posOffset.z = 0.0f; + camera->playerToAtOffset.x = camera->playerToAtOffset.y = camera->playerToAtOffset.z = 0.0f; } camera->atLERPStepScale = 0.01f; diff --git a/src/code/z_rcp.c b/src/code/z_rcp.c index 7b93284593..aa4d56998e 100644 --- a/src/code/z_rcp.c +++ b/src/code/z_rcp.c @@ -1469,7 +1469,7 @@ void Gfx_SetupFrame(GraphicsContext* gfxCtx, u8 r, u8 g, u8 b) { gDPSetDepthImage(POLY_XLU_DISP++, gZBuffer); gDPSetDepthImage(OVERLAY_DISP++, gZBuffer); - if ((R_PAUSE_BG_PRERENDER_STATE <= PAUSE_BG_PRERENDER_SETUP) && (gTrnsnUnkState < 2)) { + if ((R_PAUSE_BG_PRERENDER_STATE <= PAUSE_BG_PRERENDER_SETUP) && (gTransitionTileState <= TRANS_TILE_SETUP)) { s32 letterboxSize = Letterbox_GetSize(); if (R_HREG_MODE == HREG_MODE_SETUP_FRAME) { diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index fbc2a3346c..78bc30f81a 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -13195,7 +13195,7 @@ s32 func_8084FCAC(Player* this, PlayState* play) { speed = 20.0f; } - func_8006375C(3, 2, "DEBUG MODE"); + DbCamera_ScreenText(3, 2, "DEBUG MODE"); if (!CHECK_BTN_ALL(sControlInput->cur.button, BTN_L)) { if (CHECK_BTN_ALL(sControlInput->cur.button, BTN_B)) { diff --git a/src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c b/src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c index 8d949c9e5b..5ca2c08afc 100644 --- a/src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c +++ b/src/overlays/effects/ovl_Effect_Ss_D_Fire/z_eff_ss_d_fire.c @@ -35,7 +35,12 @@ u32 EffectSsDFire_Init(PlayState* play, u32 index, EffectSs* this, void* initPar this->pos = initParams->pos; this->velocity = initParams->velocity; this->accel = initParams->accel; + + //! @bug Segment 6 is not set to the required object before setting this display list. + //! It works out in practice because this effect is spawned from an actor who uses the same object + //! and previously already set it to segment 6. this->gfx = SEGMENTED_TO_VIRTUAL(gDodongoFireDL); + this->life = initParams->life; this->rScale = initParams->scale; this->rScaleStep = initParams->scaleStep; diff --git a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c index d1b5544478..214ee7d4d8 100644 --- a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c +++ b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c @@ -3471,7 +3471,7 @@ void KaleidoScope_Update(PlayState* play) { s16 stepA; s32 pad; - if ((R_PAUSE_BG_PRERENDER_STATE >= PAUSE_BG_PRERENDER_DONE) && + if ((R_PAUSE_BG_PRERENDER_STATE >= PAUSE_BG_PRERENDER_READY) && (((pauseCtx->state >= PAUSE_STATE_OPENING_1) && (pauseCtx->state <= PAUSE_STATE_SAVE_PROMPT) /* PAUSE_STATE_OPENING_1, PAUSE_STATE_OPENING_2, PAUSE_STATE_MAIN, PAUSE_STATE_SAVE_PROMPT */ ) ||