Mario Kart 64
Loading...
Searching...
No Matches
falling_rocks.inc.c
Go to the documentation of this file.
1void func_8029CF0C(struct ActorSpawnData *spawnData, struct FallingRock *rock) {
2 s32 segment = SEGMENT_NUMBER2(spawnData);
3 s32 offset = SEGMENT_OFFSET(spawnData);
4 struct ActorSpawnData *temp_v0 = (struct ActorSpawnData *) VIRTUAL_TO_PHYSICAL2(gSegmentTable[segment] + offset);
5 Vec3s sp24 = {60, 120, 180};
6 temp_v0 += rock->unk_06;
7 rock->respawnTimer = sp24[rock->unk_06]; // * 2
8 rock->pos[0] = (f32) temp_v0->pos[0] * gCourseDirection;
9 rock->pos[1] = (f32) temp_v0->pos[1] + 10.0f;
10 rock->pos[2] = (f32) temp_v0->pos[2];
11 vec3f_set(rock->velocity, 0, 0, 0);
12 vec3s_set(rock->rot, 0, 0, 0);
13}
14
15void place_falling_rocks(struct ActorSpawnData *spawnData) {
16 s32 addr = SEGMENT_NUMBER2(spawnData);
17 s32 offset = SEGMENT_OFFSET(spawnData);
18 // Casting this to prevent warning does not work.
19 struct ActorSpawnData *temp_s0 = (struct ActorSpawnData *) VIRTUAL_TO_PHYSICAL2(gSegmentTable[addr] + offset);
20 struct FallingRock *temp_v1;
21 Vec3f startingPos;
22 Vec3f startingVelocity;
23 Vec3s startingRot;
24 s16 temp;
25
26 while (temp_s0->pos[0] != -0x8000) {
27 startingPos[0] = temp_s0->pos[0] * gCourseDirection;
28 startingPos[1] = temp_s0->pos[1] + 10.0f;
29 startingPos[2] = temp_s0->pos[2];
30 vec3f_set(startingVelocity, 0, 0, 0);
31 vec3s_set(startingRot, 0, 0, 0);
32 temp = addActorToEmptySlot(startingPos, startingRot, startingVelocity, ACTOR_FALLING_ROCK);
33 temp_v1 = (struct FallingRock *) &gActorList[temp];
34
35 temp_v1->unk_06 = temp_s0->someId;
36 func_802AAAAC((Collision *) &temp_v1->unk30);
37 temp_s0++;
38 }
39}
40
42 Vec3f unkVec;
43 f32 pad0;
44 f32 pad1;
45
46 if (rock->respawnTimer != 0) {
47 rock->respawnTimer -= 1;
48 return;
49 }
50 if (rock->pos[1] < D_8015F8E4) {
52 }
53 rock->rot[0] += (s16) ((rock->velocity[2] * 5461.0f) / 20.0f);
54 rock->rot[2] += (s16) ((rock->velocity[0] * 5461.0f) / 20.0f);
55 rock->velocity[1] -= 0.1;
56 if (rock->velocity[1] < (-2.0f)) {
57 rock->velocity[1] = -2.0f;
58 }
59 rock->pos[0] += rock->velocity[0];
60 rock->pos[1] += rock->velocity[1];
61 rock->pos[2] += rock->velocity[2];
62 pad1 = rock->velocity[1];
63 func_802ADDC8(&rock->unk30, 10.0f, rock->pos[0], rock->pos[1], rock->pos[2]);
64 pad0 = rock->unk30.unk3C[2];
65 if (pad0 < 0.0f) {
66 unkVec[0] = -rock->unk30.orientationVector[0];
67 unkVec[1] = -rock->unk30.orientationVector[1];
68 unkVec[2] = -rock->unk30.orientationVector[2];
69 rock->pos[0] += unkVec[0] * rock->unk30.unk3C[2];
70 rock->pos[1] += unkVec[1] * rock->unk30.unk3C[2];
71 rock->pos[2] += unkVec[2] * rock->unk30.unk3C[2];
72 func_802AC114(unkVec, pad0, rock->velocity, 2.0f);
73 rock->velocity[1] = -1.2f * pad1;
74 func_800C98B8(rock->pos, rock->velocity, SOUND_ARG_LOAD(0x19, 0x00, 0x80, 0x0F));
75 }
76 pad0 = rock->unk30.unk3C[0];
77 if (pad0 < 0.0f) {
78 unkVec[1] = -rock->unk30.unk48[1];
79 if (unkVec[1] == 0.0f) {
80 rock->velocity[1] *= -1.2f;
81 return;
82 }
83 else {
84 unkVec[0] = -rock->unk30.unk48[0];
85 unkVec[2] = -rock->unk30.unk48[2];
86 rock->pos[0] += unkVec[0] * rock->unk30.unk3C[0];
87 rock->pos[1] += unkVec[1] * rock->unk30.unk3C[0];
88 rock->pos[2] += unkVec[2] * rock->unk30.unk3C[0];
89 func_802AC114(unkVec, pad0, rock->velocity, 2.0f);
90 rock->velocity[1] = -1.2f * pad1;
91 func_800C98B8(rock->pos, rock->velocity, SOUND_ARG_LOAD(0x19, 0x00, 0x80, 0x0F));
92 }
93 }
94 pad0 = rock->unk30.unk3C[1];
95 if (pad0 < 0.0f) {
96 unkVec[1] = -rock->unk30.unk54[1];
97 if (unkVec[1] == 0.0f) {
98 rock->velocity[1] *= -1.2f;
99 }
100 else {
101 unkVec[0] = -rock->unk30.unk54[0];
102 unkVec[2] = -rock->unk30.unk54[2];
103 rock->pos[0] += unkVec[0] * rock->unk30.unk3C[1];
104 rock->pos[1] += unkVec[1] * rock->unk30.unk3C[1];
105 rock->pos[2] += unkVec[2] * rock->unk30.unk3C[1];
106 pad1 = rock->velocity[1];
107 func_802AC114(unkVec, pad0, rock->velocity, 2.0f);
108 rock->velocity[1] = -1.2f * pad1;
109 func_800C98B8(rock->pos, rock->velocity, SOUND_ARG_LOAD(0x19, 0x00, 0x80, 0x0F));
110 }
111 }
112}
#define ACTOR_FALLING_ROCK
Definition actor_types.h:42
s16 addActorToEmptySlot(Vec3f pos, Vec3s rot, Vec3f velocity, s16 actorType)
Definition actors.c:2538
struct ActorSpawnData d_course_choco_mountain_falling_rock_spawns[]
Definition course_data.inc.c:3535
f32 D_8015F8E4
Definition code_800029B0.c:141
struct Actor gActorList[ACTOR_LIST_SIZE]
Definition code_800029B0.c:147
f32 gCourseDirection
Definition code_800029B0.c:121
u16 func_802ADDC8(Collision *collision, f32 boundingBoxSize, f32 posX, f32 posY, f32 posZ)
Definition collision.c:1349
void func_802AAAAC(Collision *collision)
Definition collision.c:27
void func_802AC114(Vec3f pos1, f32 boundingBoxSize, Vec3f pos2, UNUSED f32 unk)
Definition collision.c:600
f32 Vec3f[3]
Definition common_structs.h:6
s16 Vec3s[3]
Definition common_structs.h:8
void func_800C98B8(Vec3f position, Vec3f velocity, u32 soundBits)
Definition external.c:3476
void update_actor_falling_rocks(struct FallingRock *rock)
Definition falling_rocks.inc.c:41
void func_8029CF0C(struct ActorSpawnData *spawnData, struct FallingRock *rock)
Definition falling_rocks.inc.c:1
void place_falling_rocks(struct ActorSpawnData *spawnData)
Definition falling_rocks.inc.c:15
#define VIRTUAL_TO_PHYSICAL2(addr)
Definition macros.h:62
uintptr_t gSegmentTable[16]
Definition main.c:134
void vec3f_set(Vec3f arg0, f32 arg1, f32 arg2, f32 arg3)
Definition math_util.c:100
void vec3s_set(Vec3s arg0, s16 arg1, s16 arg2, s16 arg3)
Definition math_util.c:106
#define SEGMENT_OFFSET(a)
Definition mbi.h:92
#define SEGMENT_NUMBER2(a)
Definition mbi.h:94
#define SOUND_ARG_LOAD(sound_bank, byte2, byte3, sound_id)
Definition sounds.h:14
Definition actor_types.h:171
Vec3s pos
Definition actor_types.h:172
u16 someId
Definition actor_types.h:174
Definition common_structs.h:114
Vec3f unk3C
Definition common_structs.h:122
Vec3f orientationVector
Definition common_structs.h:125
Vec3f unk54
Definition common_structs.h:124
Vec3f unk48
Definition common_structs.h:123
Definition actor_types.h:157
Collision unk30
Definition actor_types.h:168
s16 respawnTimer
Definition actor_types.h:160
Vec3s rot
Definition actor_types.h:164
s16 unk_06
Definition actor_types.h:161
Vec3f pos
Definition actor_types.h:166
Vec3f velocity
Definition actor_types.h:167
signed int s32
Definition ultratypes.h:15
signed short int s16
Definition ultratypes.h:13
float f32
Definition ultratypes.h:33