Mario Kart 64
Loading...
Searching...
No Matches
update.inc.c
Go to the documentation of this file.
1#include <actors.h>
2#include <waypoints.h>
3#include <defines.h>
4#include <main.h>
5#include <actors_extended.h>
6#include <code_800029B0.h>
7#include "port/Game.h"
8
9void func_802B3B44(struct ShellActor* shell) {
10 u16 currentWaypoint;
11 u16 nextWaypoint;
12 f32 temp_f0;
13 f32 temp_f0_2;
14 f32 temp_f0_3;
15 f32 temp_f12_3;
16 f32 temp_f14_2;
17 f32 temp_f16_2;
18 f32 temp_f2;
19 f32 temp_f12;
20 f32 temp_f28;
21 f32 temp_f20;
22 f32 temp_f22;
23 f32 temp_f24;
24 f32 temp_f12_0;
25 f32 temp_f12_1;
26 f32 temp_f12_2;
27 f32 temp_f18_3;
28 f32 temp_f16_3;
29 f32 temp_f26;
30 Vec3f origPos;
31
32 currentWaypoint = shell->pathIndex;
33 temp_f2 = gCurrentTrackPath[currentWaypoint].posX;
34 temp_f12 = gCurrentTrackPath[currentWaypoint].posY;
35 temp_f28 = gCurrentTrackPath[currentWaypoint].posZ;
36 nextWaypoint = currentWaypoint + 1;
37
38 if (nextWaypoint >= gSelectedPathCount) {
39 nextWaypoint -= gSelectedPathCount;
40 }
41
42 temp_f20 = temp_f2 - shell->pos[0];
43 temp_f22 = temp_f12 - shell->pos[1];
44 temp_f24 = temp_f28 - shell->pos[2];
45 temp_f0 = (temp_f20 * temp_f20) + (temp_f22 * temp_f22) + (temp_f24 * temp_f24);
46 if (temp_f0 > 400.0f) {
47 temp_f18_3 = gCurrentTrackPath[nextWaypoint].posX;
48 temp_f16_3 = gCurrentTrackPath[nextWaypoint].posY;
49 temp_f26 = gCurrentTrackPath[nextWaypoint].posZ;
50
51 temp_f12_0 = temp_f18_3 - shell->pos[0];
52 temp_f12_1 = temp_f16_3 - shell->pos[1];
53 temp_f12_2 = temp_f26 - shell->pos[2];
54
55 temp_f0_3 = (temp_f12_0 * temp_f12_0) + (temp_f12_1 * temp_f12_1) + (temp_f12_2 * temp_f12_2);
56 if (temp_f0_3 < temp_f0) {
57 shell->pathIndex = nextWaypoint;
58 } else {
59 temp_f0_2 = sqrtf(temp_f0) * 4.0f;
60 temp_f20 /= temp_f0_2;
61 temp_f22 /= temp_f0_2;
62 temp_f24 /= temp_f0_2;
63
64 temp_f12_3 = shell->velocity[0];
65 temp_f14_2 = shell->velocity[1];
66 temp_f16_2 = shell->velocity[2];
67
68 temp_f12_3 += temp_f20;
69 temp_f14_2 += temp_f22;
70 temp_f16_2 += temp_f24;
71 temp_f0 = sqrtf((temp_f12_3 * temp_f12_3) + (temp_f14_2 * temp_f14_2) + (temp_f16_2 * temp_f16_2));
72 if (temp_f0 > 6.0f) {
73 temp_f0 /= 6.0f;
74 temp_f12_3 /= temp_f0;
75 temp_f14_2 /= temp_f0;
76 temp_f16_2 /= temp_f0;
77 }
78 shell->velocity[0] = temp_f12_3;
79 shell->velocity[1] = temp_f14_2;
80 shell->velocity[2] = temp_f16_2;
81
82 origPos[0] = shell->pos[0];
83 origPos[1] = shell->pos[1];
84 origPos[2] = shell->pos[2];
85
86 shell->pos[0] += temp_f12_3;
87 shell->pos[1] += temp_f14_2;
88 shell->pos[2] += temp_f16_2;
89 actor_terrain_collision(&shell->unk30, 4.0f, shell->pos[0], shell->pos[1], shell->pos[2], origPos[0],
90 origPos[1], origPos[2]);
91 func_802B4E30((struct Actor*) shell);
92 }
93 } else {
94 if (temp_f0 > 5.0f) {
95 shell->pos[0] = temp_f2;
96 shell->pos[1] = shell->boundingBoxSize + temp_f12;
97 shell->pos[2] = temp_f28;
98 shell->pathIndex = nextWaypoint;
99 } else {
100 temp_f18_3 = gCurrentTrackPath[nextWaypoint].posX;
101 temp_f16_3 = gCurrentTrackPath[nextWaypoint].posY;
102 temp_f26 = gCurrentTrackPath[nextWaypoint].posZ;
103
104 shell->pos[0] = (temp_f2 + temp_f18_3) * 0.5f;
105 shell->pos[1] = ((temp_f12 + temp_f16_3) * 0.5f) + shell->boundingBoxSize;
106 shell->pos[2] = (temp_f28 + temp_f26) * 0.5f;
107
108 shell->velocity[0] = (temp_f18_3 - temp_f2) * 0.5f;
109 shell->velocity[1] = (temp_f16_3 - temp_f12) * 0.5f;
110 shell->velocity[2] = (temp_f26 - temp_f28) * 0.5f;
111 }
112 }
113}
114
115void func_802B3E7C(struct ShellActor* shell, Player* player) {
116 f32 x_velocity;
117 f32 z_velocity;
118 f32 xz_dist;
119 Vec3f newPosition;
120
121 x_velocity = player->pos[0];
122 x_velocity -= shell->pos[0];
123 z_velocity = player->pos[2];
124 z_velocity -= shell->pos[2];
125 xz_dist = sqrtf((x_velocity * x_velocity) + (z_velocity * z_velocity)) / 8;
126 if (xz_dist == 0.0f) {
127 x_velocity = 0.0f;
128 z_velocity = 0.0f;
129 } else {
130 x_velocity /= xz_dist;
131 z_velocity /= xz_dist;
132 }
133
134 newPosition[0] = shell->pos[0];
135 newPosition[1] = shell->pos[1];
136 newPosition[2] = shell->pos[2];
137 shell->pos[0] += x_velocity;
138 shell->pos[1] -= 2.0f;
139 shell->pos[2] += z_velocity;
140 shell->velocity[0] = x_velocity;
141 shell->velocity[1] = -2.0f;
142 shell->velocity[2] = z_velocity;
143
144 if (player->effects & BOO_EFFECT) {
145 destroy_destructable_actor((struct Actor*) shell);
146 } else {
147 actor_terrain_collision(&shell->unk30, 4.0f, shell->pos[0], shell->pos[1], shell->pos[2], newPosition[0],
148 newPosition[1], newPosition[2]);
149 func_802B4E30((struct Actor*) shell);
150 func_802B4104(shell);
151 }
152}
153
158s16 func_802B3FD0(Player* owner, struct ShellActor* shell) {
159 Player* player;
160 s32 playerIndex;
161 f32 playerToShellDistance;
162 s16 playerId = -1;
163 f32 smallestDistance = 25000000.0f;
164
165 for (playerIndex = 0; playerIndex < 4; playerIndex++) {
166 player = &gPlayers[playerIndex];
167 if ((player->type & PLAYER_EXISTS) == 0) {
168 continue;
169 }
170 if (player == owner) {
171 continue;
172 }
173 if (gPlayerBalloonCount[playerIndex] < 0) {
174 continue;
175 }
176 // func_802B51E8 is not quite a 3D distance function, it doubles (rather than squares) the Z difference of the
177 // positions
178 playerToShellDistance = func_802B51E8(player->pos, shell->pos);
179 if (playerToShellDistance < smallestDistance) {
180 smallestDistance = playerToShellDistance;
181 playerId = player - gPlayerOne;
182 }
183 }
184
185 return playerId;
186}
187
188void func_802B4104(struct ShellActor* shell) {
189 if ((shell->unk30.surfaceDistance[0] < 0.0f) &&
190 ((shell->unk30.unk48[1] < 0.25f) || (shell->unk30.unk48[1] > -0.25f))) {
191 destroy_destructable_actor((struct Actor*) shell);
192 func_800C98B8(shell->pos, shell->velocity, SOUND_ARG_LOAD(0x19, 0x00, 0x80, 0x54));
193 shell->flags |= 0x80;
194 } else if ((shell->unk30.surfaceDistance[1] < 0.0f) &&
195 ((shell->unk30.unk54[1] < 0.25f) || (shell->unk30.unk54[1] < -0.25f))) {
196 destroy_destructable_actor((struct Actor*) shell);
197 func_800C98B8(shell->pos, shell->velocity, SOUND_ARG_LOAD(0x19, 0x00, 0x80, 0x54));
198 shell->flags |= 0x80;
199 }
200}
201
208 UNUSED f32 pad9;
209 Player* player;
210 f32 height;
211 UNUSED f32 temp_f14;
212 f32 temp_f2;
213 s16 temp_v0;
214 UNUSED s16 pad3;
215 Vec3f somePosVel;
216 struct Controller* controller;
217 TripleShellParent* parent;
218 UNUSED f32 pad0;
219 UNUSED f32 pad1;
220 UNUSED f32 pad2;
221 UNUSED f32 pad4;
222 UNUSED f32 pad5;
223 UNUSED f32 pad6;
224 UNUSED f32 pad7;
225 UNUSED f32 pad8;
226 UNUSED f32 pad10;
227 UNUSED f32 pad11;
228 UNUSED f32 pad12;
229 UNUSED s16 pad13;
230 UNUSED s16 pad13_2;
231 UNUSED f32 pad14;
232 UNUSED f32 pad15;
233 UNUSED f32 pad16;
234 UNUSED f32 pad17;
235 Vec3f origPos;
236
237 pad1 = shell->pos[0];
238 pad0 = shell->pos[2];
239 pad2 = shell->pos[1];
240 pad13 = shell->type;
241 if ((pad0 < (f32) gCourseMinZ) || ((f32) gCourseMaxZ < pad0) || (pad1 < (f32) gCourseMinX) ||
242 ((f32) gCourseMaxX < pad1) || (pad2 < (f32) gCourseMinY)) {
243 destroy_destructable_actor((struct Actor*) shell);
244 }
245
246 shell->rotVelocity += 0x71C;
247 switch (shell->state) {
248 case HELD_SHELL:
249 player = &gPlayers[shell->playerId];
250 copy_collision(&player->collision, &shell->unk30);
251 somePosVel[0] = 0.0f;
252 somePosVel[1] = player->boundingBoxSize;
253 somePosVel[2] = -(player->boundingBoxSize + shell->boundingBoxSize + 2.0f);
254 mtxf_translate_vec3f_mat3(somePosVel, player->orientationMatrix);
255 shell->pos[0] = player->pos[0] + somePosVel[0];
256 pad7 = player->pos[1] - somePosVel[1];
257 shell->pos[2] = player->pos[2] + somePosVel[2];
258 height = calculate_surface_height(shell->pos[0], pad7, shell->pos[2], player->collision.meshIndexZX);
259 temp_f2 = pad7 - height;
260
261 if ((temp_f2 < 5.0f) && (temp_f2 > -5.0f)) {
262 shell->pos[1] = shell->boundingBoxSize + height;
263 } else {
264 shell->pos[1] = pad7;
265 }
266
267 if ((player->type & PLAYER_HUMAN) != 0) {
268 if (gDemoMode) {
269 controller = gControllerOne;
270 } else {
271 controller = &gControllers[shell->playerId];
272 }
273 } else {
274 controller = gControllerOne;
275 }
276
277 if ((controller->buttonDepressed & Z_TRIG) != 0) {
278 controller->buttonDepressed &= ~Z_TRIG;
279 shell->state = RELEASED_SHELL;
280 if (player->unk_0C0 > 0) {
281 shell->rotAngle = 0x78E3;
282 } else {
283 shell->rotAngle = -0x78E4;
284 }
285 }
286 break;
287 case RELEASED_SHELL:
288 player = &gPlayers[shell->playerId];
289 if (shell->rotAngle > 0) {
290 shell->rotAngle -= 0x71C;
291 if (shell->rotAngle < 0) {
292 shell->state = MOVING_SHELL;
293 func_800C9060(shell->playerId, SOUND_ARG_LOAD(0x19, 0x00, 0x80, 0x04));
294 func_800C90F4(shell->playerId,
295 (player->characterId * 0x10) + SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x00));
296 if (pad13 == ACTOR_RED_SHELL) {
298 } else {
300 func_800C9D80(shell->pos, shell->velocity, SOUND_ARG_LOAD(0x51, 0x01, 0x80, 0x08));
301 }
302 }
303 } else {
304 shell->rotAngle += 0x71C;
305 if (shell->rotAngle > 0) {
306 shell->state = MOVING_SHELL;
307 func_800C9060(shell->playerId, SOUND_ARG_LOAD(0x19, 0x00, 0x80, 0x04));
308 func_800C90F4(shell->playerId,
309 (player->characterId * 0x10) + SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x00));
310 if (pad13 == ACTOR_RED_SHELL) {
312 } else {
314 func_800C9D80(shell->pos, shell->velocity, SOUND_ARG_LOAD(0x51, 0x01, 0x80, 0x08));
315 }
316 }
317 }
318 if (shell->state == MOVING_SHELL) {
319 shell->someTimer = 0x001E;
320 height = 8.0f;
321 if (player->speed > 8.0f) {
322 height = player->speed * 1.2f;
323 }
324 somePosVel[0] = 0.0f;
325 somePosVel[1] = 0.0f;
326 somePosVel[2] = height;
327 func_802B64C4(somePosVel, (s16) (player->rotation[1] + player->unk_0C0));
328 shell->velocity[0] = somePosVel[0];
329 shell->velocity[1] = somePosVel[1];
330 shell->velocity[2] = somePosVel[2];
331 } else {
332 somePosVel[0] = sins(shell->rotAngle) * 8.0f;
333 somePosVel[1] = shell->boundingBoxSize - player->boundingBoxSize;
334 somePosVel[2] = coss(shell->rotAngle) * 8.0f;
335 mtxf_translate_vec3f_mat3(somePosVel, player->orientationMatrix);
336 shell->pos[0] = player->pos[0] + somePosVel[0];
337 shell->pos[1] = player->pos[1] + somePosVel[1];
338 shell->pos[2] = player->pos[2] + somePosVel[2];
339 }
340 break;
341 case MOVING_SHELL:
342 player = &gPlayers[shell->playerId];
343 shell->someTimer -= 1;
344 if (shell->someTimer == 0) {
345 shell->flags &= 0xEFFF;
346 if (shell->type == ACTOR_BLUE_SPINY_SHELL) {
348 shell->state = BLUE_SHELL_LOCK_ON;
349 shell->shellId = 1000.0f;
350 temp_v0 = gNearestPathPointByPlayerId[player - gPlayerOne] + 8;
351 if ((s32) gSelectedPathCount < temp_v0) {
352 temp_v0 -= gSelectedPathCount;
353 }
354 shell->pathIndex = temp_v0;
355 } else if (gModeSelection == BATTLE) {
356 shell->shellId = 1000.0f;
357 shell->targetPlayer = func_802B3FD0(player, shell);
358 if (shell->targetPlayer < 0) {
359 shell->flags = 0x8000;
360 shell->velocity[1] = 3.0f;
361 shell->pathIndex = 0;
362 shell->someTimer = 0x003C;
363 shell->state = DESTROYED_SHELL;
364 } else {
365 shell->state = RED_SHELL_LOCK_ON;
366 }
367 } else {
368 if (player->currentRank == 0) {
369 shell->state = TRIPLE_GREEN_SHELL;
370 shell->someTimer = 0x0258;
371 temp_v0 = gNearestPathPointByPlayerId[player - gPlayerOne] + 8;
372 if ((s32) gSelectedPathCount < temp_v0) {
373 temp_v0 -= gSelectedPathCount;
374 }
375 shell->pathIndex = temp_v0;
376 } else if (player->currentRank >= 5) {
378 shell->shellId = 1000.0f;
379 temp_v0 = gNearestPathPointByPlayerId[player - gPlayerOne] + 8;
380 if ((s32) gSelectedPathCount < temp_v0) {
381 temp_v0 -= gSelectedPathCount;
382 }
383 shell->pathIndex = temp_v0;
384 shell->targetPlayer = gPlayerPositionLUT[player->currentRank - 1];
385 } else {
386 shell->state = RED_SHELL_LOCK_ON;
387 shell->shellId = 1000.0f;
388 shell->targetPlayer = gPlayerPositionLUT[player->currentRank - 1];
389 }
390 }
391 }
392 shell->velocity[1] -= 0.5;
393 if (shell->velocity[1] < -2.0f) {
394 shell->velocity[1] = -2.0f;
395 }
396 origPos[0] = shell->pos[0];
397 origPos[1] = shell->pos[1];
398 origPos[2] = shell->pos[2];
399 shell->pos[0] += shell->velocity[0];
400 shell->pos[1] += shell->velocity[1];
401 shell->pos[2] += shell->velocity[2];
402 actor_terrain_collision(&shell->unk30, 4.0f, shell->pos[0], shell->pos[1], shell->pos[2], origPos[0],
403 origPos[1], origPos[2]);
404 func_802B4E30((struct Actor*) shell);
405 func_802B4104(shell);
406 break;
408 func_802B3E7C(shell, &gPlayers[shell->targetPlayer]);
409 break;
411 func_802B3B44(shell);
412 if (shell->someTimer == 0) {
413 if ((shell->flags & 0xF) == 0) {
414 destroy_destructable_actor((struct Actor*) shell);
415 } else {
416 shell->someTimer -= 1;
417 }
418 }
419 break;
421 func_802B3B44(shell);
422 player = &gPlayers[shell->targetPlayer];
423 height = player->pos[0];
424 height -= shell->pos[0];
425 temp_f2 = player->pos[2];
426 temp_f2 -= shell->pos[2];
427 if (((height * height) + (temp_f2 * temp_f2)) < 40000.0f) {
428 shell->state = RED_SHELL_LOCK_ON;
429 }
430 break;
431 case TRIPLE_RED_SHELL:
432 player = &gPlayers[shell->playerId];
433 parent = (TripleShellParent*) GET_ACTOR(shell->parentIndex);
434 if (parent->type != ACTOR_TRIPLE_RED_SHELL) {
435 destroy_destructable_actor((struct Actor*) shell);
436 } else {
437 shell->rotAngle += parent->rotVelocity;
438 somePosVel[0] = sins(shell->rotAngle) * 8.0f;
439 somePosVel[1] = shell->boundingBoxSize - player->boundingBoxSize;
440 somePosVel[2] = coss(shell->rotAngle) * 8.0f;
441 mtxf_translate_vec3f_mat3(somePosVel, player->orientationMatrix);
442 origPos[0] = shell->pos[0];
443 origPos[1] = shell->pos[1];
444 origPos[2] = shell->pos[2];
445 shell->pos[0] = player->pos[0] + somePosVel[0];
446 shell->pos[1] = player->pos[1] + somePosVel[1];
447 shell->pos[2] = player->pos[2] + somePosVel[2];
448 actor_terrain_collision(&shell->unk30, 4.0f, shell->pos[0], shell->pos[1], shell->pos[2], origPos[0],
449 origPos[1], origPos[2]);
450 func_802B4E30((struct Actor*) shell);
451 }
452 break;
453 case DESTROYED_SHELL:
454 shell->velocity[1] -= 0.3f;
455 if (shell->velocity[1] < -5.0f) {
456 shell->velocity[1] = -5.0f;
457 }
458 shell->rotAngle += 0x5B0;
459 shell->someTimer -= 1;
460 shell->pos[1] += shell->velocity[1];
461 if (shell->someTimer == 0) {
462 destroy_actor((struct Actor*) shell);
463 }
464 break;
466 func_802B3B44(shell);
467 shell->targetPlayer = gPlayerPositionLUT[0];
468 player = &gPlayers[gPlayerPositionLUT[0]];
469 height = player->pos[0];
470 height -= shell->pos[0];
471 temp_f2 = player->pos[2];
472 temp_f2 -= shell->pos[2];
473 if (((height * height) + (temp_f2 * temp_f2)) < 40000.0f) {
475 }
476 break;
477 case 9:
478 func_802B3E7C(shell, &gPlayers[shell->targetPlayer]);
479 break;
480 default:
481 break;
482 }
483}
size_t CM_FindActorIndex(Actor *actor)
Definition Game.cpp:615
@ ACTOR_BLUE_SPINY_SHELL
Definition actor_types.h:81
@ ACTOR_RED_SHELL
Definition actor_types.h:47
@ ACTOR_TRIPLE_RED_SHELL
Definition actor_types.h:61
@ DESTROYED_SHELL
Definition actor_types.h:104
@ MOVING_SHELL
Definition actor_types.h:99
@ HELD_SHELL
Definition actor_types.h:97
@ TRIPLE_RED_SHELL
Definition actor_types.h:103
@ BLUE_SHELL_TARGET_ELIMINATED
Definition actor_types.h:106
@ RELEASED_SHELL
Definition actor_types.h:98
@ GREEN_SHELL_HIT_A_RACER
Definition actor_types.h:102
@ TRIPLE_GREEN_SHELL
Definition actor_types.h:101
@ BLUE_SHELL_LOCK_ON
Definition actor_types.h:105
@ RED_SHELL_LOCK_ON
Definition actor_types.h:100
#define GET_ACTOR(index)
Definition actor_types.h:90
void destroy_destructable_actor(struct Actor *actor)
Definition actors.c:1821
void destroy_actor(struct Actor *actor)
Definition actors.c:1289
void copy_collision(Collision *src, Collision *dest)
Definition actors_extended.c:20
void func_802B4E30(struct Actor *arg0)
Definition actors_extended.c:973
void func_802B3E7C(struct ShellActor *shell, Player *player)
Definition update.inc.c:115
void func_802B3B44(struct ShellActor *shell)
Definition update.inc.c:9
void func_802B4104(struct ShellActor *shell)
Definition update.inc.c:188
void update_actor_red_blue_shell(struct ShellActor *shell)
Update the red and blue shell actors.
Definition update.inc.c:207
s16 func_802B3FD0(Player *owner, struct ShellActor *shell)
Definition update.inc.c:158
s16 gCourseMinZ
Definition code_800029B0.c:99
s16 gCourseMaxZ
Definition code_800029B0.c:98
s16 gCourseMinX
Definition code_800029B0.c:93
s16 gCourseMinY
Definition code_800029B0.c:96
s16 gCourseMaxX
Definition code_800029B0.c:92
s16 gPlayerPositionLUT[8]
Definition code_800029B0.c:150
s32 add_red_shell_in_unexpired_actor_list(s32 actorIndex)
Definition code_80005FD0.c:3306
s32 add_blue_shell_in_unexpired_actor_list(s32 arg0)
Definition code_80005FD0.c:3322
u16 gSelectedPathCount
Definition code_80005FD0.c:171
TrackPathPoint * gCurrentTrackPath
Definition code_80005FD0.c:176
u16 gNearestPathPointByPlayerId[12]
Definition code_80005FD0.c:172
s16 gPlayerBalloonCount[8]
Definition code_80057C60_var.c:223
f32 calculate_surface_height(f32 x, f32 y, f32 z, u16 index)
Definition collision.c:457
u16 actor_terrain_collision(Collision *collision, f32 boundingBoxSize, f32 newX, f32 newY, f32 newZ, f32 oldX, f32 oldY, f32 oldZ)
Definition collision.c:1172
f32 Vec3f[3]
Definition common_structs.h:10
#define BOO_EFFECT
Definition defines.h:355
#define BATTLE
Definition defines.h:126
#define PLAYER_EXISTS
Definition defines.h:82
#define PLAYER_HUMAN
Definition defines.h:81
void func_800C9060(u8 playerId, u32 soundBits)
Definition external.c:2919
void func_800C90F4(u8 playerId, u32 soundBits)
Definition external.c:2932
void func_800C9D80(Vec3f position, Vec3f velocity, u32 soundBits)
Definition external.c:3172
void func_800C98B8(Vec3f position, Vec3f velocity, u32 soundBits)
Definition external.c:3084
#define UNUSED
Definition macros.h:26
Player * gPlayerOne
Definition main.c:82
Player gPlayers[NUM_PLAYERS]
Definition main.c:81
struct Controller gControllers[NUM_PLAYERS]
Definition main.c:71
u16 gDemoMode
Definition main.c:185
struct Controller * gControllerOne
Definition main.c:72
s32 gModeSelection
Definition main.c:194
float sqrtf(float)
f32 sins(u16 arg0)
Definition math_util.c:1063
void func_802B64C4(Vec3f arg0, s16 arg1)
Definition math_util.c:589
f32 func_802B51E8(Vec3f arg0, Vec3f arg1)
Definition math_util.c:84
void mtxf_translate_vec3f_mat3(Vec3f pos, Mat3 mat)
Definition math_util.c:557
f32 coss(u16 arg0)
Definition math_util.c:1067
#define SOUND_ARG_LOAD(sound_bank, byte2, byte3, sound_id)
Definition sounds.h:14
Definition actor_types.h:124
s16 state
Definition actor_types.h:128
Vec3f velocity
Definition actor_types.h:134
Collision unk30
Definition actor_types.h:135
s16 flags
Definition actor_types.h:126
Vec3f pos
Definition actor_types.h:133
f32 boundingBoxSize
Definition actor_types.h:130
Vec3f surfaceDistance
Definition common_structs.h:155
Vec3f unk54
Definition common_structs.h:157
u16 meshIndexZX
Definition common_structs.h:154
Vec3f unk48
Definition common_structs.h:156
Definition common_structs.h:66
u16 buttonDepressed
Definition common_structs.h:73
Definition common_structs.h:264
s16 unk_0C0
Definition common_structs.h:314
f32 speed
Definition common_structs.h:299
Mat3 orientationMatrix
Definition common_structs.h:341
u16 characterId
Definition common_structs.h:369
u32 effects
Definition common_structs.h:313
Vec3s rotation
Definition common_structs.h:276
Collision collision
Definition common_structs.h:339
f32 boundingBoxSize
Definition common_structs.h:289
u16 type
Definition common_structs.h:265
s16 currentRank
Definition common_structs.h:267
Vec3f pos
Definition common_structs.h:274
Definition actor_types.h:320
s16 rotAngle
Definition actor_types.h:336
s16 rotVelocity
Definition actor_types.h:334
s16 flags
Definition actor_types.h:322
f32 boundingBoxSize
Definition actor_types.h:333
s16 state
Definition actor_types.h:331
f32 shellId
Definition actor_types.h:332
s16 type
Definition actor_types.h:321
s16 playerId
Definition actor_types.h:340
Vec3f velocity
Definition actor_types.h:343
Vec3f pos
Definition actor_types.h:342
Collision unk30
Definition actor_types.h:344
s16 targetPlayer
Definition actor_types.h:329
s16 someTimer
Definition actor_types.h:327
u16 pathIndex
Definition actor_types.h:337
Definition actor_types.h:303
s16 rotVelocity
Definition actor_types.h:310
s16 type
Definition actor_types.h:304