Mario Kart 64
camera.h
Go to the documentation of this file.
1 #ifndef CAMERA_H
2 #define CAMERA_H
3 
4 #include "common_structs.h"
5 
6 // todo put this define in types.h or similar.
7 // Certain functions are marked as having return values, but do not
8 // actually return a value. This causes undefined behavior, which we'd rather
9 // avoid on modern GCC. This only impacts -O2 and can matter for both the function
10 // itself and functions that call it.
11 #ifdef AVOID_UB
12  #define BAD_RETURN(cmd) void
13 #else
14  #define BAD_RETURN(cmd) cmd
15 #endif
16 
17 typedef struct {
23 
24 typedef struct {
25  /* 0x00 */ Vec3f pos;
26  /* 0x0C */ Vec3f lookAt;
27  // This is expected to be a normalized vector, indicates what direction is "up" for the camera
28  /* 0x18 */ Vec3f up;
29  // I think these are the "nautical angles" between pos and lookAt
30  // rot[0] = roll? Does nothing?, rot[1] = yaw, rot[2] = pitch
31  /* 0x24 */ Vec3s rot;
32  /* 0x2A */ u16 someBitFlags;
33  /* 0x2C */ s16 unk_2C;
34  /* 0x2E */ s16 unk_2E;
35  /* 0x30 */ Vec3f unk_30;
36  /* 0x3C */ Vec3f unk_3C;
37  /* 0x48 */ s32 unk_48;
38  /* 0x4C */ s32 unk_4C;
39  /* 0x50 */ s32 unk_50;
40  /* 0x54 */ Collision unk_54;
41  // When you hit a wall (or another driver) the camera's pos and lookAt bounce up and down. This is the velocity(?) of that bouncing
42  /* 0x94 */ UnkCameraInner unk_94;
43  // Timer for wall-hit bounce. Counts up instead of down
44  /* 0xA0 */ f32 unk_A0;
45  /* 0xA4 */ s32 unk_A4;
46  /* 0xA8 */ s32 unk_A8;
47  /* 0xAC */ s16 unk_AC;
48  // Id of the player the camera is following.
49  /* 0xAE */ s16 playerId;
50  // Seems related to camera movement during drifting
51  /* 0xB0 */ s16 unk_B0;
52  /* 0xB2 */ s16 unk_B2;
53  /* 0xB4 */ f32 unk_B4;
54 } Camera; /* size = 0xB8 */
55 
56 typedef BAD_RETURN(s32) (*CameraEvent)(Camera *c);
58 
60 void func_8001CA10(Camera*);
61 void func_8001CA24(Player*, f32);
64 void func_8001D53C(Player*, Camera*, Vec3f, f32*, f32*, f32*, s16, s16);
65 void func_8001D794(Player*, Camera*, Vec3f, f32*, f32*, f32*, s16);
67 void func_8001E0C4(Camera*, Player*, s8);
68 void func_8001E45C(Camera*, Player*, s8);
69 void func_8001E8E8(Camera*, Player*, s8);
70 void func_8001EA0C(Camera*, Player*, s8);
71 void func_8001EE98(Player*, Camera*, s8);
72 void func_8001F394(Player*, f32*);
73 void func_8001F87C(s32);
74 
75 extern f32 D_800DDB30[];
76 
77 extern Camera cameras[];
78 extern Camera *camera1;
79 extern Camera *camera2;
80 extern Camera *camera3;
81 extern Camera *camera4;
82 
83 // end of camera.c variables
84 
85 extern s8 D_80164A89;
86 
87 extern s32 D_80164A08[4];
88 
89 extern s32 D_80164A2C;
90 extern f32 D_80164A30;
91 extern f32 D_80164A90[];
92 extern f32 D_80164AA0[];
93 
94 
95 #endif
void func_8001D944(Player *, Camera *, Vec3f, f32 *, f32 *, f32 *, s32 *, s16, s16)
Camera * camera3
Definition: camera.c:29
void func_8001EE98(Player *, Camera *, s8)
Definition: camera.c:887
void func_8001D794(Player *, Camera *, Vec3f, f32 *, f32 *, f32 *, s16)
Definition: camera.c:447
void func_8001CA78(Player *, Camera *, Vec3f, f32 *, f32 *, f32 *, s32, s32)
CameraEvent CutsceneShot
Definition: camera.h:57
void func_8001EA0C(Camera *, Player *, s8)
Definition: camera.c:796
f32 D_800DDB30[]
Definition: camera.c:19
f32 D_80164A30
void func_8001F87C(s32)
Definition: camera.c:1117
Camera * camera4
Definition: camera.c:30
Camera * camera1
Definition: camera.c:27
#define BAD_RETURN(cmd)
Definition: camera.h:14
void func_8001F394(Player *, f32 *)
Definition: camera.c:988
f32 D_80164AA0[]
void func_8001CA24(Player *, f32)
Definition: camera.c:189
f32 D_80164A90[]
s32 D_80164A08[4]
Camera cameras[]
Definition: camera.c:26
BAD_RETURN() s32(* CameraEvent)(Camera *c)
Definition: camera.h:56
void func_8001E0C4(Camera *, Player *, s8)
Definition: camera.c:614
s32 D_80164A2C
Camera * camera2
Definition: camera.c:28
void func_8001CCEC(Player *, Camera *, Vec3f, f32 *, f32 *, f32 *, s32 *, s16, s16)
void func_8001CA10(Camera *)
Definition: camera.c:184
void func_8001D53C(Player *, Camera *, Vec3f, f32 *, f32 *, f32 *, s16, s16)
Definition: camera.c:397
s8 D_80164A89
void func_8001E8E8(Camera *, Player *, s8)
Definition: camera.c:765
void func_8001E45C(Camera *, Player *, s8)
Definition: camera.c:675
void camera_init(f32, f32, f32, s16, u32, s32)
f32 Vec3f[3]
Definition: common_structs.h:6
s16 Vec3s[3]
Definition: common_structs.h:8
Definition: camera.h:24
UnkCameraInner unk_94
Definition: camera.h:42
s32 unk_4C
Definition: camera.h:38
Vec3s rot
Definition: camera.h:31
s16 playerId
Definition: camera.h:49
Vec3f unk_30
Definition: camera.h:35
s16 unk_AC
Definition: camera.h:47
s32 unk_50
Definition: camera.h:39
Collision unk_54
Definition: camera.h:40
f32 unk_A0
Definition: camera.h:44
s16 unk_2E
Definition: camera.h:34
f32 unk_B4
Definition: camera.h:53
s32 unk_A4
Definition: camera.h:45
Vec3f pos
Definition: camera.h:25
s16 unk_B2
Definition: camera.h:52
Vec3f unk_3C
Definition: camera.h:36
Vec3f up
Definition: camera.h:28
u16 someBitFlags
Definition: camera.h:32
Vec3f lookAt
Definition: camera.h:26
s16 unk_B0
Definition: camera.h:51
s16 unk_2C
Definition: camera.h:33
s32 unk_48
Definition: camera.h:37
s32 unk_A8
Definition: camera.h:46
Definition: common_structs.h:110
Definition: common_structs.h:247
Definition: camera.h:17
s16 unk_6
Definition: camera.h:20
s16 unk_4
Definition: camera.h:19
s16 unk_8
Definition: camera.h:21
f32 unk_0
Definition: camera.h:18
signed int s32
Definition: ultratypes.h:15
unsigned int u32
Definition: ultratypes.h:16
signed char s8
Definition: ultratypes.h:11
signed short int s16
Definition: ultratypes.h:13
float f32
Definition: ultratypes.h:32
unsigned short int u16
Definition: ultratypes.h:14