1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2024-11-25 17:54:15 +00:00
oot/include/z64camera.h
louist103 e3f1ccd902
Fix all headers to comply with C standard (#957)
* Fix all headers to comply with C standard

* fix a file in libultra

* Update include/stdbool.h

Co-authored-by: Dragorn421 <Dragorn421@users.noreply.github.com>

* Update stdbool.h

* Update z64animation.h

Co-authored-by: Dragorn421 <Dragorn421@users.noreply.github.com>
2021-09-15 19:24:19 -04:00

991 lines
27 KiB
C

#ifndef Z64CAMERA_H
#define Z64CAMERA_H
#include "ultra64.h"
#include "z64cutscene.h"
#define CAM_STAT_CUT 0
#define CAM_STAT_WAIT 1
#define CAM_STAT_UNK3 3
#define CAM_STAT_ACTIVE 7
#define CAM_STAT_UNK100 0x100
#define NUM_CAMS 4
#define MAIN_CAM 0
#define SUBCAM_FIRST 1
#define SUBCAM_FREE 0
#define SUBCAM_NONE -1
#define SUBCAM_ACTIVE -1
#define ONEPOINT_CS_INFO(camera) ((Unique9OnePointCs*)camera->paramData)
#define PARENT_CAM(cam) ((cam)->globalCtx->cameraPtrs[(cam)->parentCamIdx])
#define CHILD_CAM(cam) ((cam)->globalCtx->cameraPtrs[(cam)->childCamIdx])
typedef enum {
/* 0x00 */ CAM_SET_NONE,
/* 0x01 */ CAM_SET_NORMAL0,
/* 0x02 */ CAM_SET_NORMAL1,
/* 0x03 */ CAM_SET_DUNGEON0,
/* 0x04 */ CAM_SET_DUNGEON1,
/* 0x05 */ CAM_SET_NORMAL3,
/* 0x06 */ CAM_SET_HORSE0,
/* 0x07 */ CAM_SET_BOSS_GOMA,
/* 0x08 */ CAM_SET_BOSS_DODO,
/* 0x09 */ CAM_SET_BOSS_BARI,
/* 0x0A */ CAM_SET_BOSS_FGANON,
/* 0x0B */ CAM_SET_BOSS_BAL,
/* 0x0C */ CAM_SET_BOSS_SHADES,
/* 0x0D */ CAM_SET_BOSS_MOFA,
/* 0x0E */ CAM_SET_TWIN0,
/* 0x0F */ CAM_SET_TWIN1,
/* 0x10 */ CAM_SET_BOSS_GANON1,
/* 0x11 */ CAM_SET_BOSS_GANON2,
/* 0x12 */ CAM_SET_TOWER0,
/* 0x13 */ CAM_SET_TOWER1,
/* 0x14 */ CAM_SET_FIXED0,
/* 0x15 */ CAM_SET_FIXED1,
/* 0x16 */ CAM_SET_CIRCLE0,
/* 0x17 */ CAM_SET_CIRCLE2,
/* 0x18 */ CAM_SET_CIRCLE3,
/* 0x19 */ CAM_SET_PREREND0,
/* 0x1A */ CAM_SET_PREREND1,
/* 0x1B */ CAM_SET_PREREND3,
/* 0x1C */ CAM_SET_DOOR0,
/* 0x1D */ CAM_SET_DOORC,
/* 0x1E */ CAM_SET_RAIL3,
/* 0x1F */ CAM_SET_START0,
/* 0x20 */ CAM_SET_START1,
/* 0x21 */ CAM_SET_FREE0,
/* 0x22 */ CAM_SET_FREE2,
/* 0x23 */ CAM_SET_CIRCLE4,
/* 0x24 */ CAM_SET_CIRCLE5,
/* 0x25 */ CAM_SET_DEMO0,
/* 0x26 */ CAM_SET_DEMO1,
/* 0x27 */ CAM_SET_MORI1,
/* 0x28 */ CAM_SET_ITEM0,
/* 0x29 */ CAM_SET_ITEM1,
/* 0x2A */ CAM_SET_DEMO3,
/* 0x2B */ CAM_SET_DEMO4,
/* 0x2C */ CAM_SET_UFOBEAN,
/* 0x2D */ CAM_SET_LIFTBEAN,
/* 0x2E */ CAM_SET_SCENE0,
/* 0x2F */ CAM_SET_SCENE1,
/* 0x30 */ CAM_SET_HIDAN1,
/* 0x31 */ CAM_SET_HIDAN2,
/* 0x32 */ CAM_SET_MORI2,
/* 0x33 */ CAM_SET_MORI3,
/* 0x34 */ CAM_SET_TAKO,
/* 0x35 */ CAM_SET_SPOT05A,
/* 0x36 */ CAM_SET_SPOT05B,
/* 0x37 */ CAM_SET_HIDAN3,
/* 0x38 */ CAM_SET_ITEM2,
/* 0x39 */ CAM_SET_CIRCLE6,
/* 0x3A */ CAM_SET_NORMAL2,
/* 0x3B */ CAM_SET_FISHING,
/* 0x3C */ CAM_SET_DEMOC,
/* 0x3D */ CAM_SET_UO_FIBER,
/* 0x3E */ CAM_SET_DUNGEON2,
/* 0x3F */ CAM_SET_TEPPEN,
/* 0x40 */ CAM_SET_CIRCLE7,
/* 0x41 */ CAM_SET_NORMAL4,
/* 0x42 */ CAM_SET_MAX
} CameraSettingType;
typedef enum {
/* 0x00 */ CAM_MODE_NORMAL,
/* 0x01 */ CAM_MODE_TARGET, // Original: CAM_MODE_PARALLEL
/* 0x02 */ CAM_MODE_FOLLOWTARGET, // Original: CAM_MODE_KEEPON
/* 0x03 */ CAM_MODE_TALK,
/* 0x04 */ CAM_MODE_BATTLE,
/* 0x05 */ CAM_MODE_CLIMB,
/* 0x06 */ CAM_MODE_FIRSTPERSON, // Original: CAM_MODE_SUBJECT
/* 0x07 */ CAM_MODE_BOWARROW,
/* 0x08 */ CAM_MODE_BOWARROWZ,
/* 0x09 */ CAM_MODE_FOOKSHOT,
/* 0x0A */ CAM_MODE_BOOMERANG,
/* 0x0B */ CAM_MODE_SLINGSHOT, // Original: CasdfsAM_MODE_PACHINCO
/* 0x0C */ CAM_MODE_CLIMBZ,
/* 0x0D */ CAM_MODE_JUMP,
/* 0x0E */ CAM_MODE_HANG,
/* 0x0F */ CAM_MODE_HANGZ,
/* 0x10 */ CAM_MODE_FREEFALL,
/* 0x11 */ CAM_MODE_CHARGE,
/* 0x12 */ CAM_MODE_STILL,
/* 0x13 */ CAM_MODE_PUSHPULL,
/* 0x14 */ CAM_MODE_BOOMFOLLLOW, // Original: CAM_MODE_BOOKEEPON
/* 0x15 */ CAM_MODE_MAX
} CameraModeType;
typedef enum {
/* 0x00 */ CAM_FUNC_NONE,
/* 0x01 */ CAM_FUNC_NORM0,
/* 0x02 */ CAM_FUNC_NORM1,
/* 0x03 */ CAM_FUNC_NORM2,
/* 0x04 */ CAM_FUNC_NORM3,
/* 0x05 */ CAM_FUNC_NORM4,
/* 0x06 */ CAM_FUNC_PARA0,
/* 0x07 */ CAM_FUNC_PARA1,
/* 0x08 */ CAM_FUNC_PARA2,
/* 0x09 */ CAM_FUNC_PARA3,
/* 0x0A */ CAM_FUNC_PARA4,
/* 0x0B */ CAM_FUNC_KEEP0,
/* 0x0C */ CAM_FUNC_KEEP1,
/* 0x0D */ CAM_FUNC_KEEP2,
/* 0x0E */ CAM_FUNC_KEEP3,
/* 0x0F */ CAM_FUNC_KEEP4,
/* 0x10 */ CAM_FUNC_SUBJ0,
/* 0x11 */ CAM_FUNC_SUBJ1,
/* 0x12 */ CAM_FUNC_SUBJ2,
/* 0x13 */ CAM_FUNC_SUBJ3,
/* 0x14 */ CAM_FUNC_SUBJ4,
/* 0x15 */ CAM_FUNC_JUMP0,
/* 0x16 */ CAM_FUNC_JUMP1,
/* 0x17 */ CAM_FUNC_JUMP2,
/* 0x18 */ CAM_FUNC_JUMP3,
/* 0x19 */ CAM_FUNC_JUMP4,
/* 0x1A */ CAM_FUNC_BATT0,
/* 0x1B */ CAM_FUNC_BATT1,
/* 0x1C */ CAM_FUNC_BATT2,
/* 0x1D */ CAM_FUNC_BATT3,
/* 0x1E */ CAM_FUNC_BATT4,
/* 0x1F */ CAM_FUNC_FIXD0,
/* 0x20 */ CAM_FUNC_FIXD1,
/* 0x21 */ CAM_FUNC_FIXD2,
/* 0x22 */ CAM_FUNC_FIXD3,
/* 0x23 */ CAM_FUNC_FIXD4,
/* 0x24 */ CAM_FUNC_DATA0,
/* 0x25 */ CAM_FUNC_DATA1,
/* 0x26 */ CAM_FUNC_DATA2,
/* 0x27 */ CAM_FUNC_DATA3,
/* 0x28 */ CAM_FUNC_DATA4,
/* 0x29 */ CAM_FUNC_UNIQ0,
/* 0x2A */ CAM_FUNC_UNIQ1,
/* 0x2B */ CAM_FUNC_UNIQ2,
/* 0x2C */ CAM_FUNC_UNIQ3,
/* 0x2D */ CAM_FUNC_UNIQ4,
/* 0x2E */ CAM_FUNC_UNIQ5,
/* 0x2F */ CAM_FUNC_UNIQ6,
/* 0x30 */ CAM_FUNC_UNIQ7,
/* 0x31 */ CAM_FUNC_UNIQ8,
/* 0x32 */ CAM_FUNC_UNIQ9,
/* 0x33 */ CAM_FUNC_DEMO0,
/* 0x34 */ CAM_FUNC_DEMO1,
/* 0x35 */ CAM_FUNC_DEMO2,
/* 0x36 */ CAM_FUNC_DEMO3,
/* 0x37 */ CAM_FUNC_DEMO4,
/* 0x38 */ CAM_FUNC_DEMO5,
/* 0x39 */ CAM_FUNC_DEMO6,
/* 0x3A */ CAM_FUNC_DEMO7,
/* 0x3B */ CAM_FUNC_DEMO8,
/* 0x3C */ CAM_FUNC_DEMO9,
/* 0x3D */ CAM_FUNC_SPEC0,
/* 0x3E */ CAM_FUNC_SPEC1,
/* 0x3F */ CAM_FUNC_SPEC2,
/* 0x40 */ CAM_FUNC_SPEC3,
/* 0x41 */ CAM_FUNC_SPEC4,
/* 0x42 */ CAM_FUNC_SPEC5,
/* 0x43 */ CAM_FUNC_SPEC6,
/* 0x44 */ CAM_FUNC_SPEC7,
/* 0x45 */ CAM_FUNC_SPEC8,
/* 0x46 */ CAM_FUNC_SPEC9,
/* 0x47 */ CAM_FUNC_MAX
} CameraFuncType;
typedef struct {
/* 0x0000 */ Vec3f collisionClosePoint;
/* 0x000C */ CollisionPoly* atEyePoly;
/* 0x0010 */ f32 swingUpdateRate;
/* 0x0014 */ s16 unk_14;
/* 0x0016 */ s16 unk_16;
/* 0x0018 */ s16 unk_18;
/* 0x001A */ s16 swingUpdateRateTimer;
} SwingAnimation; // size = 0x1C
typedef struct {
/* 0x0000 */ SwingAnimation swing;
/* 0x001C */ f32 yOffset;
/* 0x0020 */ f32 unk_20;
/* 0x0024 */ s16 slopePitchAdj;
/* 0x0026 */ s16 swingYawTarget;
/* 0x0028 */ s16 unk_28;
/* 0x002A */ s16 startSwingTimer;
} Normal1Anim; // size = 0x2C
typedef struct {
/* 0x0000 */ f32 yOffset;
/* 0x0004 */ f32 distMin;
/* 0x0008 */ f32 distMax;
/* 0x000C */ f32 unk_0C;
/* 0x0010 */ f32 unk_10;
/* 0x0014 */ f32 unk_14;
/* 0x0018 */ f32 fovTarget;
/* 0x001C */ f32 atLERPScaleMax;
/* 0x0020 */ s16 pitchTarget;
/* 0x0022 */ s16 interfaceFlags;
/* 0x0024 */ Normal1Anim anim;
} Normal1; // size = 0x50
typedef struct {
/* 0x0000 */ Vec3f unk_00;
/* 0x000C */ Vec3f unk_0C;
/* 0x0018 */ f32 unk_18;
/* 0x001C */ f32 unk_1C;
/* 0x0020 */ s16 unk_20;
/* 0x0022 */ s16 unk_22;
/* 0x0024 */ f32 unk_24;
/* 0x0028 */ s16 unk_28;
} Normal2Anim; // size = 0x2A
typedef struct {
/* 0x0000 */ f32 unk_00;
/* 0x0004 */ f32 unk_04;
/* 0x0008 */ f32 unk_08;
/* 0x000C */ f32 unk_0C;
/* 0x0010 */ f32 unk_10;
/* 0x0014 */ f32 unk_14;
/* 0x0018 */ f32 unk_18;
/* 0x001C */ s16 unk_1C;
/* 0x001E */ s16 interfaceFlags;
/* 0x0020 */ Normal2Anim anim;
} Normal2; // size = 0x4A
typedef struct {
/* 0x0000 */ SwingAnimation swing;
/* 0x001C */ f32 unk_1C;
/* 0x0020 */ f32 unk_20;
/* 0x0024 */ s16 curPitch;
/* 0x0026 */ s16 yawUpdAmt;
/* 0x0028 */ s16 yawTimer;
/* 0x002A */ s16 distTimer;
} Normal3Anim; // size = 0x2C
typedef struct {
/* 0x0000 */ f32 yOffset;
/* 0x0004 */ f32 distMin;
/* 0x0008 */ f32 distMax;
/* 0x000C */ f32 yawUpdateSpeed;
/* 0x0010 */ f32 unk_10;
/* 0x0014 */ f32 fovTarget;
/* 0x0018 */ f32 maxAtLERPScale;
/* 0x001C */ s16 pitchTarget;
/* 0x001E */ s16 interfaceFlags;
/* 0x0020 */ Normal3Anim anim;
} Normal3; // size = 0x4C
typedef struct {
/* 0x0000 */ Vec3f unk_00;
/* 0x000C */ f32 yTarget;
/* 0x0010 */ s16 unk_10;
/* 0x0012 */ s16 yawTarget;
/* 0x0014 */ s16 pitchTarget;
/* 0x0016 */ s16 unk_16;
/* 0x0018 */ s16 animTimer;
} Parallel1Anim; // size = 0x1A
typedef struct {
/* 0x0000 */ f32 unk_00;
/* 0x0004 */ f32 distTarget;
/* 0x0008 */ f32 unk_08;
/* 0x000C */ f32 unk_0C;
/* 0x0010 */ f32 fovTarget;
/* 0x0014 */ f32 unk_14;
/* 0x0018 */ f32 unk_18;
/* 0x001C */ f32 unk_1C;
/* 0x0020 */ s16 pitchTarget;
/* 0x0022 */ s16 yawTarget;
/* 0x0024 */ s16 interfaceFlags;
/* 0x0028 */ Parallel1Anim anim;
} Parallel1;
typedef struct {
/* 0x0000 */ SwingAnimation swing;
/* 0x001C */ f32 unk_1C;
/* 0x0020 */ VecSph unk_20;
} Jump1Anim; // size = 0x28
typedef struct {
/* 0x0000 */ f32 atYOffset;
/* 0x0004 */ f32 distMin;
/* 0x0008 */ f32 distMax;
/* 0x000C */ f32 yawUpateRateTarget;
/* 0x0010 */ f32 maxYawUpdate;
/* 0x0014 */ f32 unk_14; // never used.
/* 0x0018 */ f32 atLERPScaleMax;
/* 0x001C */ s16 interfaceFlags;
/* 0x0020 */ Jump1Anim anim;
} Jump1; // size 0x48
typedef struct {
/* 0x0000 */ f32 floorY;
/* 0x0004 */ s16 yawTarget;
/* 0x0006 */ s16 initYawDiff; // unused, set but not read.
/* 0x0008 */ s16 yawAdj;
/* 0x000A */ s16 onFloor; // unused, set but not read
/* 0x000C */ s16 animTimer;
} Jump2Anim; // size = 0x10
typedef struct {
/* 0x0000 */ f32 atYOffset;
/* 0x0004 */ f32 minDist;
/* 0x0008 */ f32 maxDist;
/* 0x000C */ f32 minMaxDistFactor;
/* 0x0010 */ f32 yawUpdRateTarget;
/* 0x0014 */ f32 xzUpdRateTarget;
/* 0x0018 */ f32 fovTarget;
/* 0x001C */ f32 atLERPStepScale;
/* 0x0020 */ s16 interfaceFlags;
/* 0x0024 */ Jump2Anim anim;
} Jump2; // size = 0x34
typedef struct {
/* 0x0000 */ SwingAnimation swing;
/* 0x001C */ f32 unk_1C;
/* 0x0020 */ s16 animTimer;
/* 0x0022 */ s16 mode;
} Jump3Anim; // size = 0x24
typedef struct {
/* 0x0000 */ f32 yOffset;
/* 0x0004 */ f32 distMin;
/* 0x0008 */ f32 distMax;
/* 0x000C */ f32 swingUpdateRate;
/* 0x0010 */ f32 unk_10;
/* 0x0014 */ f32 unk_14;
/* 0x0018 */ f32 fovTarget;
/* 0x001C */ f32 unk_1C;
/* 0x0020 */ s16 pitchTarget;
/* 0x0022 */ s16 interfaceFlags;
/* 0x0024 */ Jump3Anim anim;
} Jump3; // size = 0x48
typedef struct {
/* 0x0000 */ f32 initialEyeToAtDist;
/* 0x0004 */ f32 roll;
/* 0x0008 */ f32 yPosOffset;
/* 0x000C */ Actor* target;
/* 0x0010 */ f32 unk_10;
/* 0x0014 */ s16 unk_14; // unused
/* 0x0016 */ s16 initialEyeToAtYaw;
/* 0x0018 */ s16 initialEyeToAtPitch;
/* 0x001A */ s16 animTimer;
/* 0x001C */ s16 chargeTimer;
} Battle1Anim; // size = 0x1E
typedef struct {
/* 0x0000 */ f32 yOffset;
/* 0x0004 */ f32 distance;
/* 0x0008 */ f32 swingYawInitial;
/* 0x000C */ f32 swingYawFinal;
/* 0x0010 */ f32 swingPitchInitial;
/* 0x0014 */ f32 swingPitchFinal;
/* 0x0018 */ f32 swingPitchAdj;
/* 0x001C */ f32 fov;
/* 0x0020 */ f32 atLERPScaleOnGround;
/* 0x0024 */ f32 yOffsetOffGround;
/* 0x0028 */ f32 atLERPScaleOffGround;
/* 0x002C */ s16 flags;
/* 0x0030 */ Battle1Anim anim;
} Battle1; // size = 0x50
typedef struct {
/* 0x0000 */ s16 animTimer;
} Battle4Anim; // size = 0x2
typedef struct {
/* 0x0000 */ f32 yOffset;
/* 0x0004 */ f32 rTarget;
/* 0x0008 */ s16 pitchTarget;
/* 0x000C */ f32 lerpUpdateRate;
/* 0x0010 */ f32 fovTarget;
/* 0x0014 */ f32 atLERPTarget;
/* 0x0018 */ s16 interfaceFlags;
/* 0x001A */ s16 unk_1A;
/* 0x001C */ Battle4Anim anim;
} Battle4; // size = 0x20
typedef struct {
/* 0x0000 */ f32 unk_00;
/* 0x0004 */ f32 unk_04;
/* 0x0008 */ f32 unk_08;
/* 0x000C */ Actor* unk_0C;
/* 0x0010 */ s16 unk_10;
/* 0x0012 */ s16 unk_12;
/* 0x0014 */ s16 unk_14;
/* 0x0016 */ s16 unk_16;
} Keep1Anim; // size = 0x18
typedef struct {
/* 0x0000 */ f32 unk_00;
/* 0x0004 */ f32 unk_04;
/* 0x0008 */ f32 unk_08;
/* 0x000C */ f32 unk_0C;
/* 0x0010 */ f32 unk_10;
/* 0x0014 */ f32 unk_14;
/* 0x0018 */ f32 unk_18;
/* 0x001C */ f32 unk_1C;
/* 0x0020 */ f32 unk_20;
/* 0x0024 */ f32 unk_24;
/* 0x0028 */ f32 unk_28;
/* 0x002C */ f32 unk_2C;
/* 0x0030 */ s16 interfaceFlags;
/* 0x0034 */ Keep1Anim anim;
} KeepOn1; // size = 0x4C
typedef struct {
/* 0x0000 */ Vec3f eyeToAtTarget; // esentially a VecSph, but all floats.
/* 0x000C */ Actor* target;
/* 0x0010 */ Vec3f atTarget;
/* 0x001C */ s16 animTimer;
} Keep3Anim; // size = 0x20
typedef struct {
/* 0x0000 */ f32 yOffset;
/* 0x0004 */ f32 minDist;
/* 0x0008 */ f32 maxDist;
/* 0x000C */ f32 swingYawInital;
/* 0x0010 */ f32 swingYawFinal;
/* 0x0014 */ f32 swingPitchInitial;
/* 0x0018 */ f32 swingPitchFinal;
/* 0x001C */ f32 swingPitchAdj;
/* 0x0020 */ f32 fovTarget;
/* 0x0024 */ f32 atLERPScaleMax;
/* 0x0028 */ s16 initTimer;
/* 0x002A */ s16 flags;
/* 0x002C */ Keep3Anim anim;
} KeepOn3; // size = 0x4C
typedef struct {
/* 0x0000 */ f32 unk_00;
/* 0x0004 */ f32 unk_04;
/* 0x0008 */ f32 unk_08;
/* 0x000C */ s16 unk_0C;
/* 0x000E */ s16 unk_0E;
/* 0x0010 */ s16 unk_10;
/* 0x0012 */ s16 unk_12;
/* 0x0014 */ s16 unk_14;
} KeepOn4_Unk20; // size = 0x14
typedef struct {
/* 0x0000 */ f32 unk_00;
/* 0x0004 */ f32 unk_04;
/* 0x0008 */ f32 unk_08;
/* 0x000C */ f32 unk_0C;
/* 0x0010 */ f32 unk_10;
/* 0x0014 */ f32 unk_14;
/* 0x0018 */ f32 unk_18;
/* 0x001C */ s16 unk_1C;
/* 0x001E */ s16 unk_1E;
/* 0x0020 */ KeepOn4_Unk20 unk_20;
} KeepOn4; // size = 0x34
typedef struct {
/* 0x0000 */ f32 fovTarget;
/* 0x0004 */ s16 animTimer;
} KeepOn0Anim; // size = 0x8
typedef struct {
/* 0x0000 */ f32 fovScale;
/* 0x0004 */ f32 yawScale;
/* 0x0008 */ s16 timerInit;
/* 0x000A */ s16 interfaceFlags;
/* 0x000C */ KeepOn0Anim anim;
} KeepOn0; // size = 0x14
typedef struct {
/* 0x0000 */ PosRot eyePosRotTarget;
/* 0x0014 */ s16 fov;
} Fixed1Anim; // size = 0x18
typedef struct {
/* 0x0000 */ f32 unk_00; // seems to be unused?
/* 0x0004 */ f32 lerpStep;
/* 0x0008 */ f32 fov;
/* 0x000C */ s16 interfaceFlags;
/* 0x0010 */ Fixed1Anim anim;
} Fixed1; // size = 0x28
typedef struct {
/* 0x0000 */ Vec3f eye;
/* 0x000C */ s16 fov;
} Fixed2InitParams; // size = 0x10
typedef struct {
/* 0x0000 */ f32 yOffset;
/* 0x0004 */ f32 eyeStepScale;
/* 0x0008 */ f32 posStepScale;
/* 0x000C */ f32 fov;
/* 0x0010 */ s16 interfaceFlags;
/* 0x0014 */ Fixed2InitParams initParams;
} Fixed2; // size = 0x24
typedef struct {
/* 0x0000 */ Vec3s rot;
/* 0x0006 */ s16 fov;
/* 0x0008 */ s16 updDirTimer;
/* 0x000A */ s16 jfifId;
} Fixed3Anim; // size = 0xC
typedef struct {
/* 0x000 */ s16 interfaceFlags;
/* 0x0004 */ Fixed3Anim anim;
} Fixed3; // size = 0x10
typedef struct {
/* 0x0000 */ Vec3f eyeTarget;
/* 0x000C */ f32 followSpeed;
} Fixed4Anim; // size = 0x10
typedef struct {
/* 0x0000 */ f32 yOffset;
/* 0x0004 */ f32 speedToEyePos;
/* 0x0008 */ f32 followSpeed;
/* 0x000C */ f32 fov;
/* 0x0010 */ s16 interfaceFlags;
/* 0x0014 */ Fixed4Anim anim;
} Fixed4; // size = 0x24
typedef struct {
/* 0x0000 */ f32 r;
/* 0x0004 */ s16 yaw;
/* 0x0006 */ s16 pitch;
/* 0x0008 */ s16 animTimer;
} Subj3Anim; // size = 0xC
typedef struct {
/* 0x0000 */ f32 eyeNextYOffset;
/* 0x0004 */ f32 eyeDist;
/* 0x0008 */ f32 eyeNextDist;
/* 0x000C */ f32 unk_0C; // unused
/* 0x0010 */ Vec3f atOffset;
/* 0x001C */ f32 fovTarget;
/* 0x0020 */ s16 interfaceFlags;
/* 0x0024 */ Subj3Anim anim;
} Subj3; // size = 0x30
typedef struct {
/* 0x0000 */ Linef unk_00;
/* 0x0018 */ f32 unk_18;
/* 0x001C */ f32 unk_1C;
/* 0x0020 */ f32 unk_20;
/* 0x0024 */ f32 unk_24;
/* 0x0028 */ f32 unk_28;
/* 0x002C */ s16 unk_2C;
/* 0x002E */ s16 unk_2E;
/* 0x0030 */ s16 unk_30;
/* 0x0032 */ s16 unk_32;
} Subj4Anim; // size = 0x34
typedef struct {
/* 0x0000 */ s16 interfaceFlags;
/* 0x0004 */ Subj4Anim anim;
} Subj4; // size = 0x38
typedef struct {
/* 0x0000 */ PosRot eyePosRot;
/* 0x0014 */ char unk_14[0x8];
/* 0x001C */ s16 fov;
/* 0x001E */ s16 jfifId;
} Data4InitParams; // size = 0x20
typedef struct {
/* 0x0000 */ f32 yOffset;
/* 0x0004 */ f32 fov;
/* 0x0008 */ s16 interfaceFlags;
/* 0x000C */ Data4InitParams initParams;
} Data4; // size = 0x2C
typedef struct {
/* 0x0000 */ f32 unk_00; // unused
/* 0x0004 */ s16 yawTarget;
/* 0x0006 */ s16 yawTargetAdj;
/* 0x0008 */ s16 timer;
} Unique1Anim; // size = 0xC
typedef struct {
/* 0x0000 */ f32 yOffset;
/* 0x0004 */ f32 distMin;
/* 0x0008 */ f32 distMax;
/* 0x000C */ char unk_0C[4]; // unused
/* 0x0010 */ f32 fovTarget;
/* 0x0014 */ f32 atLERPScaleMax;
/* 0x0018 */ s16 pitchTarget;
/* 0x001A */ s16 interfaceFlags;
/* 0x001C */ Unique1Anim anim;
} Unique1; // size = 0x28
typedef struct {
/* 0x0000 */ f32 unk_00;
/* 0x0004 */ s16 unk_04;
} Unique2Unk10; // size = 0x8
typedef struct {
/* 0x0000 */ f32 yOffset;
/* 0x0004 */ f32 distTarget;
/* 0x0008 */ f32 fovTarget;
/* 0x000C */ s16 interfaceFlags;
/* 0x0010 */ Unique2Unk10 unk_10; // unused, values set but not read.
} Unique2; // size = 0x18
typedef struct {
/* 0x0000 */ f32 initialFov;
/* 0x0004 */ f32 initialDist;
} Unique3Anim; // size = 0x8
typedef struct {
/* 0x0000 */ f32 yOffset;
/* 0x0004 */ f32 fov;
/* 0x0008 */ s16 interfaceFlags;
} Unique3Params; // size = 0xC
typedef struct {
/* 0x0000 */ struct Actor* doorActor;
/* 0x0004 */ s16 camDataIdx;
/* 0x0006 */ s16 timer1;
/* 0x0008 */ s16 timer2;
/* 0x000A */ s16 timer3;
} DoorParams; // size = 0xC
typedef struct {
/* 0x0000 */ DoorParams doorParams;
/* 0x000C */ Unique3Params params;
/* 0x0018 */ Unique3Anim anim;
} Unique3; // size = 0x20
typedef struct {
/* 0x0000 */ Vec3f initalPos;
/* 0x000C */ s16 animTimer;
/* 0x0010 */ Linef sceneCamPosPlayerLine;
} Unique0Anim; // size = 0x28
typedef struct {
/* 0x0000 */ s16 interfaceFlags;
/* 0x0004 */ Unique0Anim anim;
} Unique0Params; // size = 0x2C
typedef struct {
/* 0x0000 */ DoorParams doorParams;
/* 0x000C */ Unique0Params uniq0;
} Unique0; // size = 0x38
typedef struct {
/* 0x0000 */ s16 interfaceFlags;
} Unique6; // size = 0x4
typedef union {
/* 0x0000 */ Vec3s unk_00;
} Unique7Unk8; // size = 0x8
typedef struct {
/* 0x0000 */ f32 fov;
/* 0x0004 */ s16 interfaceFlags;
/* 0x0006 */ s16 align;
// unk_08 goes unused.
/* 0x0008 */ Unique7Unk8 unk_08;
} Unique7; // size = 0x10
/** initFlags
* & 0x00FF = atInitFlags
* & 0xFF00 = eyeInitFlags
* 0x1: Direct Copy of atTargetInit
* if initFlags & 0x6060: use head for focus point
* 0x2: Add atTargetInit to view's lookAt
* if initFlags & 0x6060: use world for focus point
* 0x3: Add atTargetInit to camera's at
* 0x4: Don't update targets?
* 0x8: flag to use atTagetInit as f32 pitch, yaw, r
* 0x10: ? unused
* 0x20: focus on player
*/
typedef struct {
/* 0x0000 */ u8 actionFlags;
/* 0x0001 */ u8 unk_01;
/* 0x0002 */ s16 initFlags;
/* 0x0004 */ s16 timerInit;
/* 0x0006 */ s16 rollTargetInit;
/* 0x0008 */ f32 fovTargetInit;
/* 0x000C */ f32 lerpStepScale;
/* 0x0010 */ Vec3f atTargetInit;
/* 0x001C */ Vec3f eyeTargetInit;
} OnePointCsFull; /* size = 0x28 */
typedef struct {
/* 0x0000 */ OnePointCsFull* curKeyFrame;
/* 0x0004 */ Vec3f atTarget;
/* 0x0010 */ Vec3f eyeTarget;
/* 0x001C */ Vec3f playerPos;
/* 0x0028 */ f32 fovTarget;
/* 0x002C */ VecSph atEyeOffsetTarget;
/* 0x0034 */ s16 rollTarget;
/* 0x0036 */ s16 curKeyFrameIdx;
/* 0x0038 */ s16 unk_38;
/* 0x003A */ s16 isNewKeyFrame;
/* 0x003C */ s16 keyFrameTimer;
} Unique9Anim; // size = 0x3E
typedef struct {
/* 0x0000 */ s16 interfaceFlags;
/* 0x0004 */ Unique9Anim anim;
} Unique9; // size = 0x40
typedef struct {
/* 0x0000 */ s32 keyFrameCnt;
/* 0x0004 */ OnePointCsFull* keyFrames;
/* 0x0008 */ Unique9 uniq9;
} Unique9OnePointCs; // size = 0x48
typedef struct {
/* 0x0000 */ f32 curFrame;
/* 0x0004 */ s16 keyframe;
} Demo1Anim; // size = 0x14
typedef struct {
/* 0x0000 */ s16 interfaceFlags;
/* 0x0004 */ Demo1Anim anim;
} Demo1; // size = 0x18
typedef struct {
/* 0x0000 */ Vec3f initialAt;
/* 0x000C */ f32 unk_0C;
/* 0x0010 */ s16 animFrame;
/* 0x0012 */ s16 yawDir;
} Demo3Anim; // size = 0x14
typedef struct {
/* 0x0000 */ f32 fov;
/* 0x0004 */ f32 unk_04; // unused
/* 0x0008 */ s16 interfaceFlags;
/* 0x000C */ Demo3Anim anim;
} Demo3; // size = 0x20
typedef struct {
/* 0x0000 */ s16 animTimer;
/* 0x0004 */ Vec3f atTarget;
} Demo6Anim; // size = 0x10
typedef struct {
/* 0x0000 */ s16 interfaceFlags;
/* 0x0002 */ s16 unk_02;
/* 0x0004 */ Demo6Anim anim;
} Demo6; // size = 0x14
typedef struct {
/* 0x0000 */ f32 curFrame;
/* 0x0004 */ s16 keyframe;
/* 0x0006 */ s16 doLERPAt;
/* 0x0008 */ s16 finishAction;
/* 0x000A */ s16 animTimer;
} Demo9Anim; // size = 0xC
typedef struct {
/* 0x0000 */ s16 interfaceFlags;
/* 0x0004 */ Demo9Anim anim;
} Demo9;
typedef struct {
/* 0x0000 */ CutsceneCameraPoint* atPoints;
/* 0x0004 */ CutsceneCameraPoint* eyePoints;
/* 0x0008 */ s16 actionParameters;
/* 0x000A */ s16 initTimer;
} OnePointCsCamera; // size = 0xC
typedef struct {
/* 0x0000 */ OnePointCsCamera onePointCs;
/* 0x000C */ Demo9 demo9;
} Demo9OnePointCs; // size = 0x1C
typedef struct {
/* 0x0000 */ f32 lerpAtScale;
/* 0x0004 */ s16 interfaceFlags;
} Special0; // size = 0x8
typedef struct {
/* 0x0000 */ s16 initalTimer;
} Special4; // size = 0x4
typedef struct {
/* 0x0000 */ s16 animTimer;
} Special5Anim; // size = 0x2
typedef struct {
/* 0x0000 */ f32 yOffset;
/* 0x0004 */ f32 eyeDist;
/* 0x0008 */ f32 minDistForRot;
/* 0x000C */ f32 fovTarget;
/* 0x0010 */ f32 atMaxLERPScale;
/* 0x0014 */ s16 timerInit;
/* 0x0016 */ s16 pitch;
/* 0x0018 */ s16 interfaceFlags;
/* 0x001A */ s16 unk_1A;
/* 0x001C */ Special5Anim anim;
} Special5; // size = 0x20
typedef struct {
/* 0x0000 */ s16 idx;
} Special7; // size = 0x4
typedef struct {
/* 0x0000 */ f32 initalPlayerY;
/* 0x0004 */ s16 animTimer;
} Special6Anim; // size = 0x8
typedef struct {
/* 0x0000 */ s16 interfaceFlags;
/* 0x0004 */ Special6Anim anim;
} Special6; // size = 0xC
typedef struct {
/* 0x0000 */ s16 targetYaw;
} Special9Anim; // size = 0x2
typedef struct {
/* 0x0000 */ f32 yOffset;
/* 0x0004 */ f32 unk_04;
/* 0x0008 */ s16 interfaceFlags;
/* 0x000A */ s16 unk_0A;
/* 0x000C */ Special9Anim anim;
} Special9Params; // size = 0x10
typedef struct {
/* 0x0000 */ DoorParams doorParams;
/* 0x000C */ Special9Params params;
} Special9; // size = 0x1C
typedef struct {
/* 0x0000 */ Vec3f pos;
/* 0x000C */ Vec3f norm;
/* 0x0018 */ CollisionPoly* poly;
/* 0x001C */ VecSph sphNorm;
/* 0x0024 */ s32 bgId;
} CamColChk; // size = 0x28
typedef struct {
/* 0x0000 */ char paramData[0x50];
/* 0x0050 */ Vec3f at;
/* 0x005C */ Vec3f eye;
/* 0x0068 */ Vec3f up;
/* 0x0074 */ Vec3f eyeNext;
/* 0x0080 */ Vec3f skyboxOffset;
/* 0x008C */ struct GlobalContext* globalCtx;
/* 0x0090 */ struct Player* player;
/* 0x0094 */ PosRot playerPosRot;
/* 0x00A8 */ struct Actor* target;
/* 0x00AC */ PosRot targetPosRot;
/* 0x00C0 */ f32 rUpdateRateInv;
/* 0x00C4 */ f32 pitchUpdateRateInv;
/* 0x00C8 */ f32 yawUpdateRateInv;
/* 0x00CC */ f32 xzOffsetUpdateRate;
/* 0x00D0 */ f32 yOffsetUpdateRate;
/* 0x00D4 */ f32 fovUpdateRate;
/* 0x00D8 */ f32 xzSpeed;
/* 0x00DC */ f32 dist;
/* 0x00E0 */ f32 speedRatio;
/* 0x00E4 */ Vec3f posOffset;
/* 0x00F0 */ Vec3f playerPosDelta;
/* 0x00FC */ f32 fov;
/* 0x0100 */ f32 atLERPStepScale;
/* 0x0104 */ f32 playerGroundY;
/* 0x0108 */ Vec3f floorNorm;
/* 0x0114 */ f32 waterYPos;
/* 0x0118 */ s32 waterPrevCamIdx;
/* 0x011C */ s32 waterPrevCamSetting;
/* 0x0120 */ s32 waterQuakeId;
/* 0x0124 */ void* data0;
/* 0x0128 */ void* data1;
/* 0x012C */ s16 data2;
/* 0x012E */ s16 data3;
/* 0x0130 */ s16 uid;
/* 0x0132 */ char unk_132[2];
/* 0x0134 */ Vec3s inputDir;
/* 0x013A */ Vec3s camDir;
/* 0x0140 */ s16 status;
/* 0x0142 */ s16 setting;
/* 0x0144 */ s16 mode;
/* 0x0146 */ s16 bgCheckId;
/* 0x0148 */ s16 camDataIdx;
/* 0x014A */ s16 unk_14A;
/* 0x014C */ s16 unk_14C;
/* 0x014E */ s16 childCamIdx;
/* 0x0150 */ s16 unk_150;
/* 0x0152 */ s16 unk_152;
/* 0x0154 */ s16 prevSetting;
/* 0x0156 */ s16 nextCamDataIdx;
/* 0x0158 */ s16 nextBGCheckId;
/* 0x015A */ s16 roll;
/* 0x015C */ s16 paramFlags;
/* 0x015E */ s16 animState;
/* 0x0160 */ s16 timer;
/* 0x0162 */ s16 parentCamIdx;
/* 0x0164 */ s16 thisIdx;
/* 0x0166 */ s16 prevCamDataIdx;
/* 0x0168 */ s16 csId;
/* 0x016A */ s16 unk_16A;
} Camera; // size = 0x16C
/**
* Debug Camera
*/
typedef struct {
/* 0x0000 */ s16 mode;
/* 0x0002 */ s16 nFrames;
/* 0x0004 */ s16 nPoints;
/* 0x0006 */ s16 unkIdx;
/* 0x0008 */ s16 unk_08;
/* 0x000A */ s16 unk_0A;
/* 0x000C */ s32 unk_0C; // bool: indicates position vs lookAt?
/* 0x0010 */ char unk_10[0x14];
/* 0x0024 */ CutsceneCameraPoint position[129];
/* 0x0834 */ CutsceneCameraPoint lookAt[129];
/* 0x1044 */ s16 demoCtrlMenu;
/* 0x1046 */ s16 demoCtrlActionIdx; // e (?), s (save), l (load), c (clear)
/* 0x1048 */ s16 demoCtrlToggleSwitch;
/* 0x104A */ Vec3s unk_104A;
} DbCameraSub; // size = 0x1050
typedef struct {
/* 0x0000 */ s32 unk_00;
/* 0x0004 */ Vec3f at;
/* 0x0010 */ Vec3f eye;
/* 0x001C */ Vec3f unk_1C;
/* 0x0028 */ char unk_28[0xC];
/* 0x0034 */ s32 unk_34;
/* 0x0038 */ s32 unk_38;
/* 0x003C */ s32 unk_3C; // bool
/* 0x0040 */ s32 unk_40;
/* 0x0044 */ s32 unk_44;
/* 0x0048 */ f32 fov;
/* 0x004C */ s16 roll;
/* 0x004E */ char unk_4E[0x2];
/* 0x0050 */ f32 rollDegrees;
/* 0x0054 */ Vec3f unk_54;
/* 0x0060 */ Vec3f unk_60;
/* 0x006C */ Vec3f unk_6C;
/* 0x0078 */ s16 unk_78;
/* 0x007A */ s16 unk_7A;
/* 0x007C */ DbCameraSub sub;
} DbCamera; // size = 0x10CC
typedef struct {
/* 0x00 */ char letter;
/* 0x01 */ u8 unk_01;
/* 0x02 */ s16 mode;
/* 0x04 */ CutsceneCameraPoint* position;
/* 0x08 */ CutsceneCameraPoint* lookAt;
/* 0x0C */ s16 nFrames;
/* 0x0E */ s16 nPoints;
} DbCameraCut; // size = 0x10
typedef struct {
/* 0x00 */ f32 curFrame;
/* 0x04 */ f32 unk_04; // frame count?
/* 0x08 */ s16 keyframe;
/* 0x0A */ s16 unk_0A;
/* 0x0C */ s16 unk_0C;
/* 0x10 */ Vec3f positionPos; // confusing name
/* 0x1C */ Vec3f lookAtPos;
/* 0x28 */ f32 roll;
/* 0x2C */ f32 fov;
} DbCameraAnim; // size = 0x30
#endif