1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-07-04 15:04:31 +00:00

Merge branch 'master' (early part) into doc_pause_menu

This commit is contained in:
Dragorn421 2022-12-30 15:42:14 +01:00
commit ae8cc175f2
No known key found for this signature in database
GPG key ID: 32B53D2D16FC4118
19 changed files with 622 additions and 517 deletions

View file

@ -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);

View file

@ -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)

View file

@ -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;

View file

@ -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;

View file

@ -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

View file

@ -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)

View file

@ -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,

View file

@ -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;
}

View file

@ -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);

View file

@ -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;

View file

@ -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++);

View file

@ -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;
}

View file

@ -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)

View file

@ -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
}

View file

@ -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;

View file

@ -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) {

View file

@ -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)) {

View file

@ -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;

View file

@ -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 */
) ||