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:
commit
ae8cc175f2
19 changed files with 622 additions and 517 deletions
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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++);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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)) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 */
|
||||
) ||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue