Mario Kart 64
Loading...
Searching...
No Matches
render.inc.c
Go to the documentation of this file.
1#include <actors.h>
2#include <PR/gbi.h>
3#include <main.h>
5
14void render_actor_train_engine(Camera *camera, struct TrainCar *actor) {
15 UNUSED s32 pad[2];
16 s32 maxObjectsReached;
17 Vec3f sp160;
18 Mat4 sp120;
19 Mat4 spE0;
20 Mat4 spA0;
21
22 f32 distance = is_within_render_distance(camera->pos, actor->pos, camera->rot[1], 2500.0f, gCameraZoom[camera - camera1], 9000000.0f);
23
24 if (distance < 0.0f) { return; }
25
26 gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
27
28 mtxf_pos_rotation_xyz(sp120, actor->pos, actor->rot);
29 maxObjectsReached = render_set_position(sp120, 0) == 0;
30 if (maxObjectsReached) { return; }
31
32 if (distance < 122500.0f) {
33
36
37 } else if (distance < 640000.0f) {
38
41 } else {
44 }
45 if (1440000.0f < distance) { return; }
46
47 gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK);
49
50 mtxf_rotate_x(sp120, actor->wheelRot);
51 vec3f_set(sp160, 17.0f, 6.0f, 32.0f);
52 mtxf_translate(spE0, sp160);
53 mtxf_multiplication(spA0, sp120, spE0);
54
55 maxObjectsReached = render_set_position(spA0, 3) == 0;
56 if (maxObjectsReached) { return; }
57
59 gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
60
61 mtxf_rotate_x(sp120, actor->wheelRot);
62 vec3f_set(sp160, -17.0, 6.0f, 32.0f);
63 mtxf_translate(spE0, sp160);
64 mtxf_multiplication(spA0, sp120, spE0);
65
66 maxObjectsReached = render_set_position(spA0, 3) == 0;
67 if (maxObjectsReached) { return; }
68
70 gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
71
72 mtxf_rotate_x(sp120, (s16) (actor->wheelRot + 0x16C));
73 vec3f_set(sp160, 17.0f, 6.0f, 16.0f);
74 mtxf_translate(spE0, sp160);
75 mtxf_multiplication(spA0, sp120, spE0);
76
77 maxObjectsReached = render_set_position(spA0, 3) == 0;
78 if (maxObjectsReached) { return; }
79
81 gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
82
83 mtxf_rotate_x(sp120, (s16) (actor->wheelRot + 0x16C));
84 vec3f_set(sp160, -17.0f, 6.0f, 16.0f);
85 mtxf_translate(spE0, sp160);
86 mtxf_multiplication(spA0, sp120, spE0);
87
88 maxObjectsReached = render_set_position(spA0, 3) == 0;
89 if (maxObjectsReached) { return; }
90
92 gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
93
94 mtxf_rotate_x(sp120, (s16) (actor->wheelRot + 0x444));
95 vec3f_set(sp160, 17.0f, 12.0f, -12.0f);
96 mtxf_translate(spE0, sp160);
97 mtxf_multiplication(spA0, sp120, spE0);
98
99 maxObjectsReached = render_set_position(spA0, 3) == 0;
100 if (maxObjectsReached) { return; }
101
103 gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
104
105 mtxf_rotate_x(sp120, (s16) (actor->wheelRot + 0x444));
106 vec3f_set(sp160, -17.0f, 12.0f, -12.0f);
107 mtxf_translate(spE0, sp160);
108 mtxf_multiplication(spA0, sp120, spE0);
109
110 maxObjectsReached = render_set_position(spA0, 3) == 0;
111 if (maxObjectsReached) { return; }
112
114 gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
115
116 mtxf_rotate_x(sp120, (s16) (actor->wheelRot + 0x2D8));
117 vec3f_set(sp160, 17.0f, 12.0f, -34.0f);
118 mtxf_translate(spE0, sp160);
119 mtxf_multiplication(spA0, sp120, spE0);
120
121 maxObjectsReached = render_set_position(spA0, 3) == 0;
122 if (maxObjectsReached) { return; }
123
125 gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
126
127 mtxf_rotate_x(sp120, (s16) (actor->wheelRot + 0x2D8));
128 vec3f_set(sp160, -17.0f, 12.0f, -34.0f);
129 mtxf_translate(spE0, sp160);
130 mtxf_multiplication(spA0, sp120, spE0);
131
132 maxObjectsReached = render_set_position(spA0, 3) == 0;
133 if (maxObjectsReached) { return; }
134
136 gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
137 gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK);
138}
139
140void render_actor_train_tender(Camera *camera, struct TrainCar *actor) {
141 Mat4 sp120;
142 Vec3f sp160;
143 Mat4 spE0;
144 Mat4 spA0;
145
146 f32 temp_f0 = is_within_render_distance(camera->pos, actor->pos, camera->rot[1], 625.0f, gCameraZoom[camera - camera1], 9000000.0f);
147
148 if (temp_f0 < 0.0f) { return; }
149
150 gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
151
152 mtxf_pos_rotation_xyz(sp120, actor->pos, actor->rot);
153 if (render_set_position(sp120, 0) == 0) { return; }
154
155 if (temp_f0 < 250000.0f) {
156
158
159 } else if (temp_f0 < 1000000.0f) {
161 } else {
163 }
164 if (1440000.0f < temp_f0) { return; }
165
166 gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK);
168
169 mtxf_rotate_x(sp120, actor->wheelRot);
170 vec3f_set(sp160, 17.0f, 6.0f, 8.0f);
171 mtxf_translate(spE0, sp160);
172 mtxf_multiplication(spA0, sp120, spE0);
173
174 if (render_set_position(spA0, 3) == 0) { return; }
175
177 gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
178
179 mtxf_rotate_x(sp120, actor->wheelRot);
180 vec3f_set(sp160, -17.0, 6.0f, 8.0f);
181 mtxf_translate(spE0, sp160);
182 mtxf_multiplication(spA0, sp120, spE0);
183
184 if (render_set_position(spA0, 3) == 0) { return; }
185
187 gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
188
189 mtxf_rotate_x(sp120, (s16) (actor->wheelRot + 0x444));
190 vec3f_set(sp160, 17.0f, 6.0f, -8.0f);
191 mtxf_translate(spE0, sp160);
192 mtxf_multiplication(spA0, sp120, spE0);
193
194 if (render_set_position(spA0, 3) == 0) { return; }
195
197 gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
198
199 mtxf_rotate_x(sp120, (s16) (actor->wheelRot + 0x444));
200 vec3f_set(sp160, -17.0f, 6.0f, -8.0f);
201 mtxf_translate(spE0, sp160);
202 mtxf_multiplication(spA0, sp120, spE0);
203
204 if (render_set_position(spA0, 3) == 0) { return; }
206 gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
207 gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK);
208}
209
211 Mat4 sp120;
212 Vec3f sp160;
213 Mat4 spE0;
214 Mat4 spA0;
215
216 f32 temp_f0 = is_within_render_distance(camera->pos, actor->pos, camera->rot[1], 2025.0f, gCameraZoom[camera - camera1], 9000000.0f);
217
218 if (temp_f0 < 0.0f) { return; }
219
221
223
224 if (render_set_position(sp120, 0) == 0) { return; }
225
226 if (temp_f0 < 250000.0f) {
227
230
231 } else if (temp_f0 < 1000000.0f) {
232
235 } else {
238 }
239 if (1440000.0f < temp_f0) { return; }
240
243
244 mtxf_rotate_x(sp120, actor->wheelRot);
245 vec3f_set(sp160, 17.0f, 6.0f, 28.0f);
248
249 if (render_set_position(spA0, 3) == 0) { return; }
250
253
254 mtxf_rotate_x(sp120, actor->wheelRot);
255 vec3f_set(sp160, -17.0, 6.0f, 28.0f);
258
259 if (render_set_position(spA0, 3) == 0) { return; }
260
263
264 mtxf_rotate_x(sp120, (s16) (actor->wheelRot + 0x222));
265 vec3f_set(sp160, 17.0f, 6.0f, 12.0f);
268
269 if (render_set_position(spA0, 3) == 0) { return; }
270
273
274 mtxf_rotate_x(sp120, (s16) (actor->wheelRot + 0x222));
275 vec3f_set(sp160, -17.0f, 6.0f, 12.0f);
278
279 if (render_set_position(spA0, 3) == 0) { return; }
280
283
284 mtxf_rotate_x(sp120, (s16) (actor->wheelRot + 0x5B0));
285 vec3f_set(sp160, 17.0f, 6.0f, -8.0f);
288
289 if (render_set_position(spA0, 3) == 0) { return; }
290
293
294 mtxf_rotate_x(sp120, (s16) (actor->wheelRot + 0x5B0));
295 vec3f_set(sp160, -17.0f, 6.0f, -8.0f);
298
299 if (render_set_position(spA0, 3) == 0) { return; }
300
303
304 mtxf_rotate_x(sp120, (s16) (actor->wheelRot + 0x16C));
305 vec3f_set(sp160, 17.0f, 6.0f, -24.0f);
308
309 if (render_set_position(spA0, 3) == 0) { return; }
310
313
314 mtxf_rotate_x(sp120, (s16) (actor->wheelRot + 0x16C));
315 vec3f_set(sp160, -17.0f, 6.0f, -24.0f);
318
319 if (render_set_position(spA0, 3) == 0) { return; }
320
324}
Camera * camera1
Definition camera.c:23
s16 gCourseMaxZ
Definition code_800029B0.c:92
f32 Vec3f[3]
Definition common_structs.h:6
f32 Mat4[4][4]
Definition common_structs.h:16
#define G_CULL_BACK
Definition gbi.h:355
#define G_MTX_MODELVIEW
Definition gbi.h:309
#define G_LIGHTING
Definition gbi.h:359
Gfx d_course_kalimari_desert_dl_1FAF8[]
Definition course_data.c:7295
Gfx d_course_kalimari_desert_dl_22D28[]
Definition course_data.c:8269
Gfx d_course_kalimari_desert_dl_20A20[]
Definition course_data.c:7701
Gfx d_course_kalimari_desert_dl_21A80[]
Definition course_data.c:8147
Gfx d_course_kalimari_desert_dl_22DB8[]
Definition course_data.c:8295
Gfx d_course_kalimari_desert_dl_21550[]
Definition course_data.c:8016
Gfx d_course_kalimari_desert_dl_20A08[]
Definition course_data.c:7694
Gfx d_course_kalimari_desert_dl_1F708[]
Definition course_data.c:7172
Gfx d_course_kalimari_desert_dl_1F228[]
Definition course_data.c:7036
Gfx d_course_kalimari_desert_dl_1C0F0[]
Definition course_data.c:5762
Gfx d_course_kalimari_desert_dl_21C90[]
Definition course_data.c:8241
Gfx d_course_kalimari_desert_dl_1B978[]
Definition course_data.c:5491
Gfx d_course_kalimari_desert_dl_1E480[]
Definition course_data.c:6633
Gfx d_course_kalimari_desert_dl_1D160[]
Definition course_data.c:6121
Gfx d_course_kalimari_desert_dl_1E910[]
Definition course_data.c:6811
Gfx d_course_kalimari_desert_dl_1D670[]
Definition course_data.c:6315
Gfx d_course_kalimari_desert_dl_21220[]
Definition course_data.c:7886
Gfx d_course_kalimari_desert_dl_22D70[]
Definition course_data.c:8282
#define UNUSED
Definition macros.h:24
Gfx * gDisplayListHead
Definition main.c:133
f32 gCameraZoom[4]
Definition main.c:123
void mtxf_rotate_x(Mat4 mat, s16 angle)
Definition math_util.c:320
f32 is_within_render_distance(Vec3f cameraPos, Vec3f objectPos, u16 orientationY, f32 minDistance, f32 fov, f32 maxDistance)
Definition math_util.c:1092
void mtxf_multiplication(Mat4 dest, Mat4 mat1, Mat4 mat2)
Definition math_util.c:820
void mtxf_pos_rotation_xyz(Mat4 out, Vec3f pos, Vec3s orientation)
Definition math_util.c:466
void vec3f_set(Vec3f arg0, f32 arg1, f32 arg2, f32 arg3)
Definition math_util.c:101
s32 render_set_position(Mat4 arg0, s32 arg1)
Definition math_util.c:49
void mtxf_translate(Mat4 dest, Vec3f b)
Definition math_util.c:212
Definition camera.h:26
Vec3s rot
Definition camera.h:33
Vec3f pos
Definition camera.h:27
Definition actor_types.h:144
s16 wheelRot
Definition actor_types.h:148
Vec3f pos
Definition actor_types.h:153
Vec3s rot
Definition actor_types.h:151
void render_actor_train_engine(Camera *camera, struct TrainCar *actor)
Renders the train engine actor. Actor used in Kalimari Desert. His update position are made in vehicl...
Definition render.inc.c:14
void render_actor_train_tender(Camera *camera, struct TrainCar *actor)
Definition render.inc.c:140
void render_actor_train_passenger_car(Camera *camera, struct TrainCar *actor)
Definition render.inc.c:210
signed int s32
Definition ultratypes.h:15
signed short int s16
Definition ultratypes.h:13
float f32
Definition ultratypes.h:33