35 nextWaypoint = currentWaypoint + 1;
41 temp_f20 = temp_f2 - shell->
pos[0];
42 temp_f22 = temp_f12 - shell->
pos[1];
43 temp_f24 = temp_f28 - shell->
pos[2];
44 temp_f0 = (temp_f20 * temp_f20) + (temp_f22 * temp_f22) + (temp_f24 * temp_f24);
45 if (temp_f0 > 400.0f) {
50 temp_f12_0 = temp_f18_3 - shell->
pos[0];
51 temp_f12_1 = temp_f16_3 - shell->
pos[1];
52 temp_f12_2 = temp_f26 - shell->
pos[2];
54 temp_f0_3 = (temp_f12_0 * temp_f12_0) + (temp_f12_1 * temp_f12_1) + (temp_f12_2 * temp_f12_2);
55 if (temp_f0_3 < temp_f0) {
58 temp_f0_2 =
sqrtf(temp_f0) * 4.0f;
59 temp_f20 /= temp_f0_2;
60 temp_f22 /= temp_f0_2;
61 temp_f24 /= temp_f0_2;
67 temp_f12_3 += temp_f20;
68 temp_f14_2 += temp_f22;
69 temp_f16_2 += temp_f24;
70 temp_f0 =
sqrtf((temp_f12_3 * temp_f12_3) + (temp_f14_2 * temp_f14_2) + (temp_f16_2 * temp_f16_2));
73 temp_f12_3 /= temp_f0;
74 temp_f14_2 /= temp_f0;
75 temp_f16_2 /= temp_f0;
81 origPos[0] = shell->
pos[0];
82 origPos[1] = shell->
pos[1];
83 origPos[2] = shell->
pos[2];
85 shell->
pos[0] += temp_f12_3;
86 shell->
pos[1] += temp_f14_2;
87 shell->
pos[2] += temp_f16_2;
93 shell->
pos[0] = temp_f2;
95 shell->
pos[2] = temp_f28;
102 shell->
pos[0] = (temp_f2 + temp_f18_3) * 0.5f;
104 shell->
pos[2] = (temp_f28 + temp_f26) * 0.5f;
106 shell->
velocity[0] = (temp_f18_3 - temp_f2) * 0.5f;
107 shell->
velocity[1] = (temp_f16_3 - temp_f12) * 0.5f;
108 shell->
velocity[2] = (temp_f26 - temp_f28) * 0.5f;
119 x_velocity = player->
pos[0];
120 x_velocity -= shell->
pos[0];
121 z_velocity = player->
pos[2];
122 z_velocity -= shell->
pos[2];
123 xz_dist =
sqrtf((x_velocity * x_velocity) + (z_velocity * z_velocity)) / 8;
124 if (xz_dist == 0.0f) {
128 x_velocity /= xz_dist;
129 z_velocity /= xz_dist;
132 newPosition[0] = shell->
pos[0];
133 newPosition[1] = shell->
pos[1];
134 newPosition[2] = shell->
pos[2];
135 shell->
pos[0] += x_velocity;
136 shell->
pos[1] -= 2.0f;
137 shell->
pos[2] += z_velocity;
158 f32 playerToShellDistance;
160 f32 smallestDistance = 25000000.0f;
162 for (playerIndex = 0; playerIndex < 4; playerIndex++) {
165 if (player == owner) {
continue; }
169 if (playerToShellDistance < smallestDistance) {
170 smallestDistance = playerToShellDistance;
183 shell->
flags |= 0x80;
187 shell->
flags |= 0x80;
226 pad1 = shell->
pos[0];
227 pad0 = shell->
pos[2];
228 pad2 = shell->
pos[1];
235 switch (shell->
state) {
239 somePosVel[0] = 0.0f;
243 shell->
pos[0] = player->
pos[0] + somePosVel[0];
244 pad7 = player->
pos[1] - somePosVel[1];
245 shell->
pos[2] = player->
pos[2] + somePosVel[2];
247 temp_f2 = pad7 - height;
249 if ((temp_f2 < 5.0f) && (temp_f2 > -5.0f)) {
252 shell->
pos[1] = pad7;
308 height = player->
unk_094 * 1.2f;
310 somePosVel[0] = 0.0f;
311 somePosVel[1] = 0.0f;
312 somePosVel[2] = height;
322 shell->
pos[0] = player->
pos[0] + somePosVel[0];
323 shell->
pos[1] = player->
pos[1] + somePosVel[1];
324 shell->
pos[2] = player->
pos[2] + somePosVel[2];
331 shell->
flags &= 0xEFFF;
345 shell->
flags = 0x8000;
382 origPos[0] = shell->
pos[0];
383 origPos[1] = shell->
pos[1];
384 origPos[2] = shell->
pos[2];
397 if (shell->someTimer == 0) {
398 if ((shell->
flags & 0xF) == 0) {
401 shell->someTimer -= 1;
407 player = &
gPlayers[shell->targetPlayer];
408 height = player->
pos[0];
409 height -= shell->
pos[0];
410 temp_f2 = player->
pos[2];
411 temp_f2 -= shell->
pos[2];
412 if (((height * height) + (temp_f2 * temp_f2)) < 40000.0f) {
417 player = &
gPlayers[shell->playerId];
423 somePosVel[0] =
sins(shell->rotAngle) * 8.0f;
425 somePosVel[2] =
coss(shell->rotAngle) * 8.0f;
427 origPos[0] = shell->
pos[0];
428 origPos[1] = shell->
pos[1];
429 origPos[2] = shell->
pos[2];
430 shell->
pos[0] = player->
pos[0] + somePosVel[0];
431 shell->
pos[1] = player->
pos[1] + somePosVel[1];
432 shell->
pos[2] = player->
pos[2] + somePosVel[2];
442 shell->rotAngle += 0x5B0;
443 shell->someTimer -= 1;
445 if (shell->someTimer == 0) {
453 height = player->
pos[0];
454 height -= shell->
pos[0];
455 temp_f2 = player->
pos[2];
456 temp_f2 -= shell->
pos[2];
457 if (((height * height) + (temp_f2 * temp_f2)) < 40000.0f) {
@ ACTOR_BLUE_SPINY_SHELL
Definition actor_types.h:80
@ ACTOR_RED_SHELL
Definition actor_types.h:46
@ ACTOR_TRIPLE_RED_SHELL
Definition actor_types.h:60
@ DESTROYED_SHELL
Definition actor_types.h:100
@ MOVING_SHELL
Definition actor_types.h:95
@ HELD_SHELL
Definition actor_types.h:93
@ TRIPLE_RED_SHELL
Definition actor_types.h:99
@ BLUE_SHELL_TARGET_ELIMINATED
Definition actor_types.h:102
@ RELEASED_SHELL
Definition actor_types.h:94
@ GREEN_SHELL_HIT_A_RACER
Definition actor_types.h:98
@ TRIPLE_GREEN_SHELL
Definition actor_types.h:97
@ BLUE_SHELL_LOCK_ON
Definition actor_types.h:101
@ RED_SHELL_LOCK_ON
Definition actor_types.h:96
void destroy_destructable_actor(struct Actor *actor)
Definition actors.c:1813
void destroy_actor(struct Actor *actor)
Definition actors.c:1290
void copy_collision(Collision *src, Collision *dest)
Definition actors_extended.c:19
void func_802B4E30(struct Actor *arg0)
Definition actors_extended.c:962
void func_802B3E7C(struct ShellActor *shell, Player *player)
Definition update.inc.c:113
void func_802B3B44(struct ShellActor *shell)
Definition update.inc.c:8
void func_802B4104(struct ShellActor *shell)
Definition update.inc.c:179
void update_actor_red_blue_shell(struct ShellActor *shell)
Update the red and blue shell actors.
Definition update.inc.c:196
s16 func_802B3FD0(Player *owner, struct ShellActor *shell)
Definition update.inc.c:155
s16 gCourseMinZ
Definition code_800029B0.c:93
s16 gCourseMaxZ
Definition code_800029B0.c:92
s16 gCourseMinX
Definition code_800029B0.c:87
struct Actor gActorList[ACTOR_LIST_SIZE]
Definition code_800029B0.c:148
s16 gCourseMinY
Definition code_800029B0.c:90
s16 gCourseMaxX
Definition code_800029B0.c:86
s16 gPlayerPositionLUT[8]
Definition code_800029B0.c:144
s32 add_red_shell_in_unexpired_actor_list(s32 actorIndex)
Definition code_80005FD0.c:3247
TrackWaypoint * D_80164490
Definition code_80005FD0.c:166
u16 gNearestWaypointByPlayerId[12]
Definition code_80005FD0.c:162
s32 add_blue_shell_in_unexpired_actor_list(s32 arg0)
Definition code_80005FD0.c:3263
u16 D_80164430
Definition code_80005FD0.c:161
s16 gPlayerBalloonCount[8]
Definition code_80057C60_var.c:232
f32 calculate_surface_height(f32 x, f32 y, f32 z, u16 index)
Definition collision.c:519
u16 actor_terrain_collision(Collision *collision, f32 boundingBoxSize, f32 x1, f32 y1, f32 z1, f32 x2, f32 y2, f32 z2)
Definition collision.c:1221
f32 Vec3f[3]
Definition common_structs.h:6
#define BOO_EFFECT
Definition defines.h:380
#define BATTLE
Definition defines.h:146
#define PLAYER_EXISTS
Definition defines.h:102
#define PLAYER_HUMAN
Definition defines.h:101
void func_800C9060(u8 playerId, u32 soundBits)
Definition external.c:2894
void func_800C90F4(u8 playerId, u32 soundBits)
Definition external.c:2906
void func_800C9D80(Vec3f position, Vec3f velocity, u32 soundBits)
Definition external.c:3134
void func_800C98B8(Vec3f position, Vec3f velocity, u32 soundBits)
Definition external.c:3049
#define UNUSED
Definition macros.h:24
Player * gPlayerOne
Definition main.c:74
Player gPlayers[NUM_PLAYERS]
Definition main.c:73
struct Controller gControllers[NUM_PLAYERS]
Definition main.c:63
u16 gDemoMode
Definition main.c:174
struct Controller * gControllerOne
Definition main.c:64
s32 gModeSelection
Definition main.c:183
f32 sins(u16 arg0)
Definition math_util.c:1055
void func_802B64C4(Vec3f arg0, s16 arg1)
Definition math_util.c:606
f32 func_802B51E8(Vec3f arg0, Vec3f arg1)
Definition math_util.c:71
void mtxf_translate_vec3f_mat3(Vec3f pos, Mat3 mat)
Definition math_util.c:572
f32 coss(u16 arg0)
Definition math_util.c:1059
#define Z_TRIG
Definition os.h:398
#define SOUND_ARG_LOAD(sound_bank, byte2, byte3, sound_id)
Definition sounds.h:14
Definition actor_types.h:120
s16 state
Definition actor_types.h:124
Vec3f velocity
Definition actor_types.h:130
Collision unk30
Definition actor_types.h:131
s16 flags
Definition actor_types.h:122
Vec3f pos
Definition actor_types.h:129
f32 boundingBoxSize
Definition actor_types.h:126
Vec3f surfaceDistance
Definition common_structs.h:146
Vec3f unk54
Definition common_structs.h:148
u16 meshIndexZX
Definition common_structs.h:145
Vec3f unk48
Definition common_structs.h:147
Definition common_structs.h:71
u16 buttonDepressed
Definition common_structs.h:76
Definition common_structs.h:255
s16 unk_0C0
Definition common_structs.h:307
f32 unk_094
Definition common_structs.h:292
Mat3 orientationMatrix
Definition common_structs.h:334
u16 characterId
Definition common_structs.h:362
u32 effects
Definition common_structs.h:306
Vec3s rotation
Definition common_structs.h:269
Collision collision
Definition common_structs.h:332
f32 boundingBoxSize
Definition common_structs.h:282
u16 type
Definition common_structs.h:256
s16 currentRank
Definition common_structs.h:258
Vec3f pos
Definition common_structs.h:265
Definition actor_types.h:302
s16 rotAngle
Definition actor_types.h:318
s16 rotVelocity
Definition actor_types.h:316
s16 flags
Definition actor_types.h:304
f32 boundingBoxSize
Definition actor_types.h:315
s16 state
Definition actor_types.h:313
f32 shellId
Definition actor_types.h:314
s16 type
Definition actor_types.h:303
s16 playerId
Definition actor_types.h:321
Vec3f velocity
Definition actor_types.h:324
Vec3f pos
Definition actor_types.h:323
Collision unk30
Definition actor_types.h:325
s16 targetPlayer
Definition actor_types.h:311
s16 someTimer
Definition actor_types.h:309
u16 pathIndex
Definition actor_types.h:319
s16 posZ
Definition waypoints.h:9
s16 posY
Definition waypoints.h:8
s16 posX
Definition waypoints.h:7
Definition actor_types.h:286
s16 rotVelocity
Definition actor_types.h:293
s16 type
Definition actor_types.h:287
signed int s32
Definition ultratypes.h:15
signed short int s16
Definition ultratypes.h:13
float f32
Definition ultratypes.h:34
unsigned short int u16
Definition ultratypes.h:14