SpaghettiKart
Loading...
Searching...
No Matches
render.inc.c
Go to the documentation of this file.
1#include <actors.h>
2#include <code_800029B0.h>
3#include <libultra/gbi.h>
4#include <main.h>
6
13void render_actor_fake_item_box(Camera* camera, struct FakeItemBox* fakeItemBox) {
14 Vec3s someRot;
15 UNUSED s32 pad[3];
16 Vec3f someVec;
17 Mat4 someMatrix2;
18 Mat4 someMatrix3;
19 UNUSED s32 pad2[12];
20 f32 temp_f0_2;
21 f32 temp_f0_3;
22 f32 temp_f12;
23 f32 temp_f2;
24 f32 thing;
25 f32 temp_f2_2;
26 f32 someMultiplier;
27
28 FrameInterpolation_RecordOpenChild("Fake Item Box", TAG_ITEM_ADDR((((struct Actor*)fakeItemBox) - gActorList) << 5) | (camera - cameras));
29
30 if (is_within_render_distance(camera->pos, fakeItemBox->pos, camera->rot[1], 2500.0f, camera->fieldOfView,
31 1000000.0f) < 0 &&
32 CVarGetInteger("gNoCulling", 0) == 0) {
33 actor_not_rendered(camera, (struct Actor*) fakeItemBox);
34 return;
35 }
36 if (((f32) gTrackMaxY + 800.0f) < fakeItemBox->pos[1]) {
37 actor_not_rendered(camera, (struct Actor*) fakeItemBox);
38 return;
39 }
40 if (fakeItemBox->pos[1] < ((f32) gTrackMinY - 800.0f)) {
41 actor_not_rendered(camera, (struct Actor*) fakeItemBox);
42 return;
43 }
44
45 actor_rendered(camera, (struct Actor*) fakeItemBox);
46 someRot[0] = 0;
47 someRot[1] = fakeItemBox->rot[1];
48 someRot[2] = 0;
49 mtxf_pos_rotation_xyz(someMatrix2, fakeItemBox->pos, someRot);
50 mtxf_scale(someMatrix2, fakeItemBox->sizeScaling);
51 if (fakeItemBox->state != 2) {
52
53 if (!render_set_position(someMatrix2, 0)) {
55 return;
56 }
57
58 gSPDisplayList(gDisplayListHead++, common_model_fake_itembox);
60
61 FrameInterpolation_RecordOpenChild("fake_item_box_part2", TAG_ITEM_ADDR((((struct Actor*)fakeItemBox) - gActorList) << 5) | (camera - cameras));
62
63 mtxf_pos_rotation_xyz(someMatrix2, fakeItemBox->pos, fakeItemBox->rot);
64 mtxf_scale(someMatrix2, fakeItemBox->sizeScaling);
65
66 if (!render_set_position(someMatrix2, 0)) {
68 return;
69 }
70
71 gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
72 gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEIA, G_CC_MODULATEIA);
73
74 /*
75 * In the original game, the question mark texture would become corrupted. Thus, this code
76 * makes it disappear to hide the issue. Since the texture no longer becomes corrupted, this
77 * fix can be removed.
78 */
79#ifdef TARGET_N64
80 if ((fakeItemBox->rot[1] < 0xAA1) && (fakeItemBox->rot[1] > 0)) {
81 gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
82 } else if ((fakeItemBox->rot[1] >= 0x6AA5) && (fakeItemBox->rot[1] < 0x754E)) {
83 gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
84 } else if ((fakeItemBox->rot[1] >= 0x38E1) && (fakeItemBox->rot[1] < 0x438A)) {
85 gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
86 } else if ((fakeItemBox->rot[1] >= 0xC711) && (fakeItemBox->rot[1] < 0xD1BA)) {
87 gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
88 } else {
89#endif
90 gDPSetBlendMask(gDisplayListHead++, 0xFF);
91 gDPSetRenderMode(gDisplayListHead++, G_RM_ZB_CLD_SURF, G_RM_ZB_CLD_SURF2);
92#ifdef TARGET_N64
93 }
94#endif
95 gSPDisplayList(gDisplayListHead++, D_0D003090);
97 } else {
98 gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
99 gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK);
100 gDPSetBlendMask(gDisplayListHead++, 0xFF);
101 thing = fakeItemBox->someTimer;
102 mtxf_pos_rotation_xyz(someMatrix2, fakeItemBox->pos, fakeItemBox->rot);
103 if (thing < 10.0f) {
104 someMultiplier = 1.0f;
105 } else {
106 someMultiplier = 1.0f - ((thing - 10.0f) * 0.1f);
107 }
108 mtxf_scale(someMatrix2, someMultiplier);
109 if (fakeItemBox->someTimer & 1) {
110 gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
111 } else {
112 gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_XLU_INTER, G_RM_NOOP2);
113 }
114 temp_f2 = 2.0f * thing;
115 someVec[0] = 0.0f;
116 someVec[1] = temp_f2;
117 someVec[2] = thing;
118 add_translate_mat4_vec3f(someMatrix2, someMatrix3, someVec);
119
120 if (!render_set_position(someMatrix3, 0)) {
122 return;
123 }
124
125 gSPDisplayList(gDisplayListHead++, D_0D003158);
127 temp_f2_2 = 0.8f * thing;
128 temp_f12 = 0.5f * thing;
129 someVec[0] = temp_f2_2;
130 someVec[1] = 2.3f * thing;
131 someVec[2] = temp_f12;
132 FrameInterpolation_RecordOpenChild("fake_item_box_part3", TAG_ITEM_ADDR((((struct Actor*)fakeItemBox) - gActorList) << 5) | (camera - cameras));
133
134 add_translate_mat4_vec3f(someMatrix2, someMatrix3, someVec);
135
136 if (!render_set_position(someMatrix3, 0)) {
138 return;
139 }
140 gSPDisplayList(gDisplayListHead++, D_0D0031B8);
142
143 temp_f0_2 = -0.5f * thing;
144 someVec[0] = temp_f2_2;
145 someVec[1] = 1.2f * thing;
146 someVec[2] = temp_f0_2;
147 FrameInterpolation_RecordOpenChild("fake_item_box_part4", TAG_ITEM_ADDR((((struct Actor*)fakeItemBox) - gActorList) << 5) | (camera - cameras));
148 add_translate_mat4_vec3f(someMatrix2, someMatrix3, someVec);
149
150 if (!render_set_position(someMatrix3, 0)) {
152 return;
153 }
154
155 gSPDisplayList(gDisplayListHead++, D_0D003128);
157
158 if (!(fakeItemBox->someTimer & 1)) {
159 gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
160 } else {
161 gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_XLU_INTER, G_RM_NOOP2);
162 }
163 someVec[0] = 0.0f;
164 someVec[1] = 1.8f * thing;
165 someVec[2] = -1.0f * thing;
166 FrameInterpolation_RecordOpenChild("fake_item_box_part5", TAG_ITEM_ADDR((((struct Actor*)fakeItemBox) - gActorList) << 5) | (camera - cameras));
167
168 add_translate_mat4_vec3f(someMatrix2, someMatrix3, someVec);
169
170 if (!render_set_position(someMatrix3, 0)) {
172 return;
173 }
174 gSPDisplayList(gDisplayListHead++, D_0D0031E8);
176 FrameInterpolation_RecordOpenChild("fake_item_box_part6", TAG_ITEM_ADDR((((struct Actor*)fakeItemBox) - gActorList) << 5) | (camera - cameras));
177
178 temp_f0_3 = -0.8f * thing;
179 someVec[0] = temp_f0_3;
180 someVec[1] = 0.6f * thing;
181 someVec[2] = temp_f0_2;
182 add_translate_mat4_vec3f(someMatrix2, someMatrix3, someVec);
183
184 if (!render_set_position(someMatrix3, 0)) {
186 return;
187 }
188
189 gSPDisplayList(gDisplayListHead++, D_0D003188);
191 FrameInterpolation_RecordOpenChild("fake_item_box_part7", TAG_ITEM_ADDR((((struct Actor*)fakeItemBox) - gActorList) << 5) | (camera - cameras));
192
193 someVec[0] = temp_f0_3;
194 someVec[1] = temp_f2;
195 someVec[2] = temp_f12;
196 add_translate_mat4_vec3f(someMatrix2, someMatrix3, someVec);
197
198 if (!render_set_position(someMatrix3, 0)) {
200 return;
201 }
202 gSPDisplayList(gDisplayListHead++, D_0D0030F8);
204 gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK);
205 }
206}
void FrameInterpolation_RecordOpenChild(const void *a, uintptr_t b)
Definition FrameInterpolation.cpp:640
void FrameInterpolation_RecordCloseChild(void)
Definition FrameInterpolation.cpp:650
#define TAG_ITEM_ADDR(x)
Definition FrameInterpolation.h:21
void gSPDisplayList(Gfx *pkt, Gfx *dl)
Definition GBIMiddleware.cpp:12
void actor_not_rendered(Camera *arg0, struct Actor *arg1)
Definition actors.c:329
void actor_rendered(Camera *arg0, struct Actor *arg1)
Definition actors.c:346
Camera cameras[NUM_CAMERAS]
Definition camera.c:29
struct Actor gActorList[100]
Definition code_800029B0.c:158
s16 gTrackMinY
Definition code_800029B0.c:100
s16 gTrackMaxY
Definition code_800029B0.c:99
f32 Vec3f[3]
Definition common_structs.h:10
s16 Vec3s[3]
Definition common_structs.h:15
f32 Mat4[4][4]
Definition common_structs.h:20
void render_actor_fake_item_box(Camera *camera, struct FakeItemBox *fakeItemBox)
Renders the fake item box actor.
Definition render.inc.c:13
#define UNUSED
Definition macros.h:40
Gfx * gDisplayListHead
Definition main.c:129
s32 render_set_position(Mat4 mtx, s32 arg1)
Definition math_util.c:53
f32 is_within_render_distance(Vec3f cameraPos, Vec3f objectPos, u16 orientationY, f32 minDistance, f32 fov, f32 maxDistance)
Definition math_util.c:1099
void mtxf_pos_rotation_xyz(Mat4 out, Vec3f pos, Vec3s orientation)
Definition math_util.c:449
void add_translate_mat4_vec3f(Mat4 mat, Mat4 dest, Vec3f pos)
Definition math_util.c:191
void mtxf_scale(Mat4 mat, f32 coef)
Definition math_util.c:435
Definition actor_types.h:124
Vec3s rot
Definition actor_types.h:131
Vec3f pos
Definition actor_types.h:133
Definition camera.h:35
Vec3s rot
Definition camera.h:42
f32 fieldOfView
Definition camera.h:43
Vec3f pos
Definition camera.h:36
Definition actor_types.h:367
Vec3s rot
Definition actor_types.h:374
s16 someTimer
Definition actor_types.h:370
f32 sizeScaling
Definition actor_types.h:372
s16 state
Definition actor_types.h:371
Vec3f pos
Definition actor_types.h:376