Super Mario 64 Source
A Super Mario 64 decompilation, brought to you by a bunch of clever folks.
types.h
Go to the documentation of this file.
1 #ifndef _TYPES_H_
2 #define _TYPES_H_
3 
4 // This file contains various data types used in Super Mario 64 that don't yet
5 // have an appropriate header.
6 
7 #include <ultra64.h>
8 
9 struct Controller
10 {
11  /*0x00*/ s16 rawStickX; //
12  /*0x02*/ s16 rawStickY; //
13  /*0x04*/ float stickX; // [-64, 64] positive is right
14  /*0x08*/ float stickY; // [-64, 64] positive is up
15  /*0x0C*/ float stickMag; // distance from center [0, 64]
16  /*0x10*/ u16 buttonDown;
17  /*0x12*/ u16 buttonPressed;
18  /*0x14*/ OSContStatus *statusData;
19  /*0x18*/ OSContPad *controllerData;
20 };
21 
22 typedef f32 Vec2f[2];
23 typedef f32 Vec3f[3]; // X, Y, Z, where Y is up
24 typedef s16 Vec3s[3];
25 typedef s32 Vec3i[3];
26 typedef f32 Vec4f[4];
27 typedef s16 Vec4s[4];
28 
29 typedef f32 Mat4[4][4];
30 
37 };
38 
39 struct SPTask
40 {
41  /*0x00*/ OSTask task;
42  /*0x40*/ OSMesgQueue *msgqueue;
43  /*0x44*/ OSMesg msg;
44  /*0x48*/ enum SpTaskState state;
45 }; // size = 0x4C, align = 0x8
46 
48 {
49  OSMesgQueue *queue;
50  OSMesg msg;
51 };
52 
53 // NOTE: Since ObjectNode is the first member of Object, it is difficult to determine
54 // whether some of these pointers point to ObjectNode or Object.
55 
56 #define ANIM_FLAG_NOLOOP (1 << 0) // 0x01
57 #define ANIM_FLAG_FORWARD (1 << 1) // 0x02
58 #define ANIM_FLAG_2 (1 << 2) // 0x04
59 #define ANIM_FLAG_HOR_TRANS (1 << 3) // 0x08
60 #define ANIM_FLAG_VERT_TRANS (1 << 4) // 0x10
61 #define ANIM_FLAG_5 (1 << 5) // 0x20
62 #define ANIM_FLAG_6 (1 << 6) // 0x40
63 #define ANIM_FLAG_7 (1 << 7) // 0x80
64 
65 struct Animation {
66  /*0x00*/ s16 flags;
67  /*0x02*/ s16 unk02;
68  /*0x04*/ s16 unk04;
69  /*0x06*/ s16 unk06;
70  /*0x08*/ s16 unk08;
71  /*0x0A*/ s16 unk0A;
72  /*0x0C*/ void *values;
73  /*0x10*/ void *index;
74  /*0x14*/ u32 length; // only used with Mario animations to determine how much to load. 0 otherwise.
75 };
76 
77 struct GraphNode
78 {
79  /*0x00*/ s16 type; // structure type
80  /*0x02*/ s16 flags; // hi = drawing layer, lo = rendering modes
81  /*0x04*/ struct GraphNode *prev;
82  /*0x08*/ struct GraphNode *next;
83  /*0x0C*/ struct GraphNode *parent;
84  /*0x10*/ struct GraphNode *children;
85 };
86 
87 // struct AnimInfo?
89 {
90  /*0x00 0x38*/ s16 animID;
91  /*0x02 0x3A*/ s16 animYTrans;
92  /*0x04 0x3C*/ struct Animation *curAnim;
93  /*0x08 0x40*/ s16 animFrame;
94  /*0x0A 0x42*/ u16 animTimer;
95  /*0x0C 0x44*/ s32 animFrameAccelAssist;
96  /*0x10 0x48*/ s32 animAccel;
97 };
98 
99 // TODO this is the first member of ObjectNode/Object
101 {
102  /*0x00*/ struct GraphNode node;
103  /*0x14*/ struct GraphNode *sharedChild;
104  /*0x18*/ s8 unk18;
105  /*0x19*/ s8 unk19;
106  /*0x1A*/ Vec3s angle;
107  /*0x20*/ Vec3f pos;
108  /*0x2C*/ Vec3f scale;
109  /*0x38*/ struct GraphNodeObject_sub unk38;
110  /*0x4C*/ struct SpawnInfo *unk4C;
111  /*0x50*/ void *throwMatrix; // matrix ptr
113 };
114 
116 {
117  struct GraphNodeObject gfx;
118  struct ObjectNode *next;
119  struct ObjectNode *prev;
120 };
121 
122 struct Object
123 {
124  /*0x000*/ struct ObjectNode header;
125  /*0x068*/ struct Object *parentObj;
126  /*0x06C*/ struct Object *prevObj;
128  /*0x074*/ s16 activeFlags;
129  /*0x076*/ s16 numCollidedObjs;
130  /*0x078*/ struct Object *collidedObjs[4];
131  /*0x088*/
132  union
133  {
134  // Object fields. See object_fields.h.
135  u32 asU32[0x50];
136  s32 asS32[0x50];
137  s16 asS16[0x50][2];
138  f32 asF32[0x50];
139  void *asVoidP[0x50];
140  s16 *asS16P[0x50];
141  s32 *asS32P[0x50];
142  u32 *asAnims[0x50];
143  struct Waypoint *asWaypoint[0x50];
144  struct ChainSegment *asChainSegment[0x50];
145  struct Object *asObject[0x50];
146  struct Surface *asSurface[0x50];
147  void *asVoidPtr[0x50];
148  struct Object *asObjPtr[0x50];
149  } rawData;
150  /*0x1C8*/ u32 unk1C8;
151  /*0x1CC*/ u32 *behScript;
152  /*0x1D0*/ u32 stackIndex;
153  /*0x1D4*/ u32 stack[8];
154  /*0x1F4*/ s16 unk1F4;
155  /*0x1F6*/ s16 respawnInfoType;
156  /*0x1F8*/ f32 hitboxRadius;
157  /*0x1FC*/ f32 hitboxHeight;
158  /*0x200*/ f32 hurtboxRadius;
159  /*0x204*/ f32 hurtboxHeight;
161  /*0x20C*/ void *behavior;
162  /*0x210*/ u32 unk210;
163  /*0x214*/ struct Object *platform;
164  /*0x218*/ void *collisionData;
165  /*0x21C*/ Mat4 transform;
166  /*0x25C*/ void *respawnInfo;
167 };
168 
170 {
171  /*0x00*/ u32 interactType;
172  /*0x04*/ u8 downOffset;
174  /*0x06*/ s8 health;
175  /*0x07*/ s8 numLootCoins;
176  /*0x08*/ s16 radius;
177  /*0x0A*/ s16 height;
178  /*0x0C*/ s16 hurtboxRadius;
179  /*0x0E*/ s16 hurtboxHeight;
180 };
181 
182 struct Waypoint
183 {
186 };
187 
188 struct Surface
189 {
190  /*0x00*/ s16 type;
191  /*0x02*/ s16 force;
192  /*0x04*/ s8 flags;
193  /*0x05*/ s8 room;
194  /*0x06*/ s16 lowerY;
195  /*0x08*/ s16 upperY;
196  /*0x0A*/ Vec3s vertex1;
197  /*0x10*/ Vec3s vertex2;
198  /*0x16*/ Vec3s vertex3;
199  /*0x1C*/ struct {
203  } normal;
204  /*0x28*/ f32 originOffset;
205  /*0x2C*/ struct Object *object;
206 };
207 
209 {
210  /*0x00*/ u32 action;
211  /*0x04*/ s8 capState;
212  /*0x05*/ s8 eyeState;
213  /*0x06*/ s8 handState;
214  /*0x07*/ s8 unk07;
215  /*0x08*/ s16 modelState;
216  /*0x0A*/ s8 grabPos;
217  /*0x0B*/ u8 unk0B;
218  /*0x0C*/ Vec3s unkC;
219  /*0x12*/ Vec3s unk12;
220  /*0x18*/ Vec3f unk18;
221  u8 padding[4]; // what is this?
222 };
223 
225 {
228 };
229 
231 {
235  u8 padding[4];
236 };
237 
239 {
240  /*0x00*/ u16 unk00;
241  /*0x02*/ u16 input;
242  /*0x04*/ u32 flags;
243  /*0x08*/ u32 particleFlags;
244  /*0x0C*/ u32 action;
245  /*0x10*/ u32 prevAction;
246  /*0x14*/ u32 stepSound;
247  /*0x18*/ u16 actionState;
248  /*0x1A*/ u16 actionTimer;
249  /*0x1C*/ u32 actionArg;
250  /*0x20*/ f32 intendedMag;
251  /*0x24*/ s16 intendedYaw;
252  /*0x26*/ s16 invincTimer;
253  /*0x28*/ u8 framesSinceA;
254  /*0x29*/ u8 framesSinceB;
255  /*0x2A*/ u8 wallKickTimer;
256  /*0x2B*/ u8 doubleJumpTimer;
257  /*0x2C*/ Vec3s faceAngle;
258  /*0x32*/ Vec3s angleVel;
259  /*0x38*/ s16 slideYaw;
260  /*0x3A*/ s16 twirlYaw;
261  /*0x3C*/ Vec3f pos;
262  /*0x48*/ Vec3f vel;
263  /*0x54*/ f32 forwardVel;
264  /*0x58*/ f32 slideVelX;
265  /*0x5C*/ f32 slideVelZ;
266  /*0x60*/ struct Surface *wall;
267  /*0x64*/ struct Surface *ceil;
268  /*0x68*/ struct Surface *floor;
269  /*0x6C*/ f32 ceilHeight;
270  /*0x70*/ f32 floorHeight;
271  /*0x74*/ s16 floorAngle;
272  /*0x76*/ s16 waterLevel;
273  /*0x78*/ struct Object *interactObj;
274  /*0x7C*/ struct Object *heldObj;
275  /*0x80*/ struct Object *usedObj;
276  /*0x84*/ struct Object *riddenObj;
277  /*0x88*/ struct Object *marioObj;
278  /*0x8C*/ struct SpawnInfo *spawnInfo;
279  /*0x90*/ struct Area *area;
281  /*0x98*/ struct MarioBodyState *marioBodyState;
282  /*0x9C*/ struct Controller *controller;
283  /*0xA0*/ struct MarioAnimation *animation;
285  /*0xA8*/ s16 numCoins;
286  /*0xAA*/ s16 numStars;
287  /*0xAC*/ s8 numKeys; // Unused key mechanic
288  /*0xAD*/ s8 numLives;
289  /*0xAE*/ s16 health;
290  /*0xB0*/ s16 unkB0;
291  /*0xB2*/ u8 hurtCounter;
292  /*0xB3*/ u8 healCounter;
293  /*0xB4*/ u8 squishTimer;
294  /*0xB5*/ u8 fadeWarpOpacity;
295  /*0xB6*/ u16 capTimer;
296  /*0xB8*/ s16 unkB8;
297  /*0xBC*/ f32 peakHeight;
298  /*0xC0*/ f32 quicksandDepth;
299  /*0xC4*/ f32 unkC4;
300 };
301 
303 {
306 };
307 
308 #endif
s16 hurtboxRadius
Definition: types.h:178
u8 downOffset
Definition: types.h:172
Definition: area.h:121
struct GraphNode * parent
Definition: types.h:83
u32 interactType
Definition: types.h:171
Mat4 transform
Definition: types.h:165
f32 Vec3f[3]
Definition: types.h:23
s16 modelState
Definition: types.h:215
s16 animID
Definition: types.h:90
f32 floorHeight
Definition: types.h:270
s16 flags
Definition: types.h:66
f32 asF32[0x50]
Definition: types.h:138
struct Surface * floor
Definition: types.h:268
s16 twirlYaw
Definition: types.h:260
f32 x
Definition: types.h:200
Definition: types.h:33
s16 flags
Definition: types.h:184
OSMesg msg
Definition: types.h:43
signed char s8
Definition: ultratypes.h:11
s16 unkB0
Definition: types.h:290
f32 intendedMag
Definition: types.h:250
u32 prevAction
Definition: types.h:245
unsigned short int u16
Definition: ultratypes.h:14
OSTask task
Definition: types.h:41
f32 forwardVel
Definition: types.h:263
f32 slideVelX
Definition: types.h:264
float stickY
Definition: types.h:14
Definition: sptask.h:95
s16 health
Definition: types.h:289
Definition: types.h:115
Vec3f vel
Definition: types.h:262
s16 unk02
Definition: types.h:67
Vec3s vertex1
Definition: types.h:196
struct SpawnInfo * spawnInfo
Definition: types.h:278
Vec3s angleVel
Definition: types.h:258
s16 animFrame
Definition: types.h:93
s16 slideYaw
Definition: types.h:259
s16 numCollidedObjs
Definition: types.h:129
u16 input
Definition: types.h:241
u32 action
Definition: types.h:244
s32 animAccel
Definition: types.h:96
s8 handState
Definition: types.h:213
f32 peakHeight
Definition: types.h:297
signed short int s16
Definition: ultratypes.h:13
u16 buttonDown
Definition: types.h:16
Definition: types.h:169
struct GraphNode * prev
Definition: types.h:81
s8 numLootCoins
Definition: types.h:175
s32 unk0
Definition: types.h:304
void * behavior
Definition: types.h:161
s8 eyeState
Definition: types.h:212
u32 particleFlags
Definition: types.h:243
Definition: types.h:77
s16 numCoins
Definition: types.h:285
u8 framesSinceB
Definition: types.h:254
s16 hurtboxHeight
Definition: types.h:179
s16 unk08
Definition: types.h:70
struct Animation * curAnim
Definition: types.h:92
s16 waterLevel
Definition: types.h:272
struct Object * collidedObjs[4]
Definition: types.h:130
f32 Vec4f[4]
Definition: types.h:26
Definition: types.h:182
Vec3f unk18
Definition: types.h:220
s16 Vec4s[4]
Definition: types.h:27
s16 rawStickX
Definition: types.h:11
Definition: types.h:35
u32 stackIndex
Definition: types.h:152
struct MarioAnimation * animation
Definition: types.h:283
u16 capTimer
Definition: types.h:295
s8 flags
Definition: types.h:192
float stickX
Definition: types.h:13
f32 hurtboxRadius
Definition: types.h:158
struct GraphNode * next
Definition: types.h:82
u32 flags
Definition: types.h:242
u16 actionTimer
Definition: types.h:248
struct Object * marioObj
Definition: types.h:277
s16 * asS16P[0x50]
Definition: types.h:140
s16 numStars
Definition: types.h:286
s8 grabPos
Definition: types.h:216
struct Object * object
Definition: types.h:205
SpTaskState
Definition: types.h:31
struct ObjectNode * next
Definition: types.h:118
u32 unk4
Definition: types.h:227
f32 unkC4
Definition: types.h:299
struct Area * area
Definition: types.h:279
Definition: types.h:47
OSMesgQueue * msgqueue
Definition: types.h:42
float stickMag
Definition: types.h:15
s16 Vec3s[3]
Definition: types.h:24
s16 unk06
Definition: types.h:69
u32 action
Definition: types.h:210
Definition: types.h:100
OSMesgQueue * queue
Definition: types.h:49
u16 buttonPressed
Definition: types.h:17
f32 z
Definition: types.h:202
struct Object * prevObj
Definition: types.h:126
Definition: types.h:208
s32 animFrameAccelAssist
Definition: types.h:95
s16 activeFlags
Definition: types.h:128
s32 * asS32P[0x50]
Definition: types.h:141
s8 unk19
Definition: types.h:105
struct Surface * wall
Definition: types.h:266
Definition: types.h:238
Vec3s angle
Definition: types.h:106
struct Object * usedObj
Definition: types.h:275
u32 * asAnims[0x50]
Definition: types.h:142
s16 unkB8
Definition: types.h:296
u32 asU32[0x50]
Definition: types.h:135
void * index
Definition: types.h:73
Definition: types.h:88
float f32
Definition: ultratypes.h:29
s16 asS16[0x50][2]
Definition: types.h:137
struct ObjectNode * prev
Definition: types.h:119
f32 hitboxHeight
Definition: types.h:157
u8 doubleJumpTimer
Definition: types.h:256
Definition: types.h:39
u16 animTimer
Definition: types.h:94
u32 stack[8]
Definition: types.h:153
void * asVoidP[0x50]
Definition: types.h:139
Definition: types.h:122
Definition: types.h:302
s16 unk1F4
Definition: types.h:154
s16 intendedYaw
Definition: types.h:251
struct Object * interactObj
Definition: types.h:273
s8 unk18
Definition: types.h:104
s16 upperY
Definition: types.h:195
s32 * unk4
Definition: types.h:305
u32 collidedObjInteractTypes
Definition: types.h:284
Definition: types.h:34
s8 numLives
Definition: types.h:288
s16 radius
Definition: types.h:176
u8 healCounter
Definition: types.h:292
s8 damageOrCoinValue
Definition: types.h:173
Definition: area.h:185
s16 lowerY
Definition: types.h:194
s8 capState
Definition: types.h:211
s16 invincTimer
Definition: types.h:252
Definition: types.h:224
u32 * behScript
Definition: types.h:151
u32 actionArg
Definition: types.h:249
Definition: types.h:9
s16 type
Definition: types.h:79
struct GraphNode * sharedChild
Definition: types.h:103
s16 respawnInfoType
Definition: types.h:155
void * throwMatrix
Definition: types.h:111
Definition: types.h:230
Vec3s unk12
Definition: types.h:219
s16 floorAngle
Definition: types.h:271
s8 health
Definition: types.h:174
Definition: camera.h:168
u32 collidedObjInteractTypes
Definition: types.h:127
s16 unk04
Definition: types.h:68
u32 unk0
Definition: types.h:226
struct Object * asObjPtr[0x50]
Definition: types.h:148
Vec3f pos
Definition: types.h:107
OSMesg msg
Definition: types.h:50
f32 hurtboxHeight
Definition: types.h:159
Definition: types.h:188
u32 unk210
Definition: types.h:162
s16 force
Definition: types.h:191
u32 unk1C8
Definition: types.h:150
struct Controller * controller
Definition: types.h:282
Vec3f cameraToObject
Definition: types.h:112
f32 quicksandDepth
Definition: types.h:298
Vec3s vertex2
Definition: types.h:197
struct MarioBodyState * marioBodyState
Definition: types.h:281
s8 unk07
Definition: types.h:214
s32 Vec3i[3]
Definition: types.h:25
struct Object * parentObj
Definition: types.h:125
struct Object * platform
Definition: types.h:163
struct Animation * targetAnim
Definition: types.h:234
void * respawnInfo
Definition: types.h:166
s32 asS32[0x50]
Definition: types.h:136
Vec3f pos
Definition: types.h:261
u32 length
Definition: types.h:74
Vec3s pos
Definition: types.h:185
f32 slideVelZ
Definition: types.h:265
u16 actionState
Definition: types.h:247
struct Object * heldObj
Definition: types.h:274
u8 framesSinceA
Definition: types.h:253
struct Surface * ceil
Definition: types.h:267
u8 wallKickTimer
Definition: types.h:255
s16 flags
Definition: types.h:80
u8 hurtCounter
Definition: types.h:291
Vec3s vertex3
Definition: types.h:198
f32 y
Definition: types.h:201
unsigned char u8
Definition: ultratypes.h:12
void * collisionData
Definition: types.h:164
f32 ceilHeight
Definition: types.h:269
f32 Mat4[4][4]
Definition: types.h:29
struct MarioAnimDmaRelatedThing * animDmaTable
Definition: types.h:232
u16 unk00
Definition: types.h:240
Vec3s faceAngle
Definition: types.h:257
s8 room
Definition: types.h:193
Definition: types.h:65
u8 unk0B
Definition: types.h:217
f32 hitboxDownOffset
Definition: types.h:160
s16 rawStickY
Definition: types.h:12
s16 type
Definition: types.h:190
signed int s32
Definition: ultratypes.h:15
Vec3f scale
Definition: types.h:108
u8 fadeWarpOpacity
Definition: types.h:294
OSContStatus * statusData
Definition: types.h:18
s16 height
Definition: types.h:177
struct GraphNode * children
Definition: types.h:84
Definition: types.h:36
f32 hitboxRadius
Definition: types.h:156
f32 originOffset
Definition: types.h:204
OSContPad * controllerData
Definition: types.h:19
s8 numKeys
Definition: types.h:287
struct CameraPlayerStatus * statusForCamera
Definition: types.h:280
void * values
Definition: types.h:72
Definition: object_helpers.h:7
unsigned int u32
Definition: ultratypes.h:16
union Object::@1 rawData
u8 squishTimer
Definition: types.h:293
Vec3s unkC
Definition: types.h:218
Definition: types.h:32
u32 currentDma
Definition: types.h:233
u32 stepSound
Definition: types.h:246
f32 Vec2f[2]
Definition: types.h:22
struct SpawnInfo * unk4C
Definition: types.h:110
struct Object * asObject[0x50]
Definition: types.h:145
s16 unk0A
Definition: types.h:71
struct Object * riddenObj
Definition: types.h:276
s16 animYTrans
Definition: types.h:91