Cutscene Camera OK (Some Docs) (#1411)

* import WIP

* Match func_80161E4C

* Match func_801620CC

* Match func_80162FF8

* Match func_801631DC

* Match func_80162FF8

* Import bss

* fix bss

* type docs

* more docs?

* waypoint?

* names

* cleanup

* PR Review

* comments

* PR Review

* waypoints as 1 word

* adjust names

* Path order

* remove pathing

* fix bss

---------

Co-authored-by: Derek Hensley <hensley.derek58@gmail.com>
This commit is contained in:
engineer124
2023-10-31 12:44:36 +11:00
committed by GitHub
co-authored by Derek Hensley
parent 23beee0717
commit 4d74fed7f0
8 changed files with 695 additions and 154 deletions
+1 -14
View File
@@ -1679,20 +1679,7 @@ extern SaveContext gSaveContext;
// extern UNK_TYPE4 D_801F6B00;
// extern UNK_TYPE4 D_801F6B04;
// extern UNK_TYPE4 D_801F6B08;
// extern UNK_TYPE1 D_801F6B0C;
// extern UNK_TYPE1 D_801F6B0E;
// extern UNK_TYPE1 D_801F6B10;
// extern UNK_TYPE1 D_801F6B12;
// extern UNK_TYPE1 D_801F6B14;
// extern UNK_TYPE1 D_801F6B16;
// extern UNK_TYPE1 D_801F6B18;
// extern UNK_TYPE1 D_801F6B1A;
// extern UNK_TYPE1 D_801F6B1C;
// extern UNK_TYPE1 D_801F6B1E;
// extern UNK_TYPE1 D_801F6B20;
// extern UNK_TYPE1 D_801F6B22;
// extern UNK_TYPE4 sCurCsCamera;
// extern UNK_TYPE1 D_801F6B58;
extern void (*sKaleidoScopeUpdateFunc)(PlayState* play);
extern void (*sKaleidoScopeDrawFunc)(PlayState* play);
+30 -28
View File
@@ -737,18 +737,21 @@ typedef struct {
/* 0xA */ s16 relativeTo; // see `CutsceneCamRelativeTo`
} CsCmdCamPoint; // size = 0xC
typedef enum {
/* 0 */ CS_CAM_INTERP_0,
/* 1 */ CS_CAM_INTERP_1,
/* 2 */ CS_CAM_INTERP_2,
/* 3 */ CS_CAM_INTERP_3,
/* 4 */ CS_CAM_INTERP_4,
/* 5 */ CS_CAM_INTERP_5,
/* 6 */ CS_CAM_INTERP_6,
/* 7 */ CS_CAM_INTERP_7
typedef enum CutsceneCamInterpType {
/* 0 */ CS_CAM_INTERP_NONE, // values do not change.
// values 1-3 only uses a single point from the cmd
/* 1 */ CS_CAM_INTERP_SET, // values immediately set to cmd values.
/* 2 */ CS_CAM_INTERP_LINEAR, // Lerp to the target position
/* 3 */ CS_CAM_INTERP_SCALE, // Step to the target position in increments scaled by the remaining distance
// values 4-5 uses multiple points from the cmd
/* 4 */ CS_CAM_INTERP_MP_CUBIC, // cubic multi-point (identical to SM64/OoT)
/* 5 */ CS_CAM_INTERP_MP_QUAD, // quadratic multi-point
// value 6 only uses a single point from the cmd
/* 6 */ CS_CAM_INTERP_GEO, // does VecGeo calculations using fov
/* 7 */ CS_CAM_INTERP_OFF // interpolation is not processed.
} CutsceneCamInterpType;
typedef enum {
typedef enum CutsceneCamRelativeTo {
/* 0 */ CS_CAM_REL_0,
/* 1 */ CS_CAM_REL_1,
/* 2 */ CS_CAM_REL_2,
@@ -759,26 +762,25 @@ typedef enum {
// Roll and Fov Data
typedef struct {
/* 0x0 */ s16 unused0; // unused
typedef struct CsCmdCamMisc {
/* 0x0 */ s16 unused0; // used only in the unused interp function
/* 0x2 */ s16 roll;
/* 0x4 */ s16 fov;
/* 0x6 */ s16 unused1; // unused
} CsCmdCamMisc; // size = 0x8
typedef struct {
/* 0x00 */ Vec3f unk_00;
/* 0x0C */ Vec3f unk_0C;
/* 0x18 */ f32 unk_18;
/* 0x1C */ f32 unk_1C;
/* 0x2A */ f32 unk_20;
/* 0x24 */ s16 unk_24;
/* 0x26 */ s16 unk_26;
/* 0x28 */ s16 unk_28;
typedef struct CutsceneCameraInterp {
/* 0x00 */ Vec3f curPos;
/* 0x0C */ Vec3f initPos;
/* 0x18 */ f32 initFov;
/* 0x1C */ f32 initRoll;
/* 0x2A */ f32 unk_20; // position adjustment based on fov?
/* 0x24 */ s16 curFrame;
/* 0x26 */ s16 waypoint;
/* 0x28 */ s16 duration;
/* 0x2A */ s16 numEntries;
/* 0x1E */ u8 curPoint;
/* 0x2D */ u8 unk_2D;
/* 0x2E */ UNK_TYPE1 unk_2E[2];
/* 0x2D */ u8 type; // See `CutsceneCamInterpType`
} CutsceneCameraInterp; // size = 0x30
typedef struct CutsceneCamera {
@@ -798,11 +800,11 @@ typedef struct CutsceneCamera {
} CutsceneCamera; // size = 0x80
typedef enum {
/* 0 */ CS_CAM_STATE_UPDATE_ALL, // Update spline and next spline timer
/* 0 */ CS_CAM_STATE_UPDATE_SPLINE, // Update spline, do not advance next spline timer
/* 0 */ CS_CAM_STATE_PAUSE, // No updates
/* 0 */ CS_CAM_STATE_DONE_SPLINE, // Finished the current spline, ready for the next one
/* 0 */ CS_CAM_STATE_DONE = 999 // Finished all the splines.
/* 0 */ CS_CAM_STATE_UPDATE_ALL, // Update spline and next spline timer
/* 1 */ CS_CAM_STATE_UPDATE_SPLINE, // Update spline, do not advance next spline timer
/* 2 */ CS_CAM_STATE_PAUSE, // No updates
/* 3 */ CS_CAM_STATE_DONE_SPLINE, // Finished the current spline, ready for the next one
/* 999 */ CS_CAM_STATE_DONE = 999 // Finished all the splines.
} CutsceneCameraState;
// OoT Remnant