Paper Mario DX
Paper Mario (N64) modding
 
Loading...
Searching...
No Matches
landing_dust.c File Reference

Go to the source code of this file.

Functions

void landing_dust_init (EffectInstance *effect)
 
void landing_dust_update (EffectInstance *effect)
 
void landing_dust_render (EffectInstance *effect)
 
void landing_dust_appendGfx (void *effect)
 
void func_E000C000 (LandingDustFXData *part)
 
void func_E000C094 (LandingDustFXData *part)
 
void func_E000C0C8 (LandingDustFXData *part)
 
void landing_dust_main (s32 type, f32 x, f32 y, f32 z, f32 angle)
 

Variables

Gfx D_09002780_32B620 []
 
Gfx D_09002868_32B708 []
 
Gfx D_09002950_32B7F0 []
 
Gfx D_09002A38_32B8D8 []
 
Gfx D_09002B20_32B9C0 []
 
Gfx D_09002B40_32B9E0 []
 
Gfx D_09002B60_32BA00 []
 

Function Documentation

◆ landing_dust_init()

void landing_dust_init ( EffectInstance * effect)

Definition at line 211 of file landing_dust.c.

211 {
212}

Referenced by landing_dust_main().

◆ landing_dust_update()

void landing_dust_update ( EffectInstance * effect)

Definition at line 214 of file landing_dust.c.

214 {
215 LandingDustFXData* data = effect->data.landingDust;
216
217 data->unk_40 = D_E000CD24[data->unk_38][data->unk_3C++];
218
219 if (data->unk_40 < 0) {
220 remove_effect(effect);
221 } else {
222 s32 type = data->type;
223 s32 i;
224
225 data++;
226
227 for (i = 1; i < effect->numParts; i++, data++) {
228 switch (type) {
229 case 0:
230 case 1:
231 func_E000C000(data);
232 break;
233 case 2:
234 break;
235 case 3:
236 func_E000C094(data);
237 break;
238 case 4:
239 func_E000C0C8(data);
240 break;
241 }
242 }
243 }
244}
BSS s32 PopupMenu_SelectedIndex
#define remove_effect
struct LandingDustFXData * landingDust
Definition effects.h:2470
EffectInstanceDataPtr data
Definition effects.h:2605
void func_E000C000(LandingDustFXData *part)
void func_E000C0C8(LandingDustFXData *part)
void func_E000C094(LandingDustFXData *part)

Referenced by landing_dust_main().

◆ landing_dust_render()

void landing_dust_render ( EffectInstance * effect)

Definition at line 246 of file landing_dust.c.

246 {
249
251 renderTask.appendGfxArg = effect;
252 renderTask.dist = 0;
254
257}
#define queue_render_task
@ RENDER_TASK_FLAG_REFLECT_FLOOR
Definition enums.h:3352
@ RENDER_MODE_PASS_THROUGH
Definition enums.h:3340
void landing_dust_appendGfx(void *effect)
void(* appendGfx)(void *)

Referenced by landing_dust_main().

◆ landing_dust_appendGfx()

void landing_dust_appendGfx ( void * effect)

Definition at line 259 of file landing_dust.c.

259 {
260 LandingDustFXData* part = ((EffectInstance*)effect)->data.landingDust;
261 s32 type = part->type;
262 s32 temp_t0 = part->unk_40;
266 s32 spD8;
267 s32 spDC;
268 s32 temp_lo;
270 Gfx* dlist1;
271 Gfx* dlist2;
272 s32 phi_a0;
273 s32 temp;
274 s32 i;
275
276 envAlpha = (temp_t0 & 0x38) * 4;
277
278 dlist1 = sDlists[type];
279 dlist2 = sDlists2[type];
280
282 gSPSegment(gMainGfxPos++, 0x09, VIRTUAL_TO_PHYSICAL(((EffectInstance*)effect)->shared->graphics));
284
285 spD8 = temp_t0 & 7;
286 spDC = temp_t0 & 0x40;
287
288 guTranslateF(mtx1, part->x, part->y, part->z);
289 guRotateF(mtx2, -gCameras[gCurrentCameraID].curYaw, 0.0f, 1.0f, 0.0f);
292
295
296 switch (type) {
297 case 0:
298 case 1:
299 gDPSetPrimColor(gMainGfxPos++, 0, 0, 230, 222, 222, 110);
301 break;
302 case 2:
303 case 3:
304 case 4:
305 gDPSetPrimColor(gMainGfxPos++, 0, 0, 230, 222, 222, 130);
307 break;
308 }
309
310 if (type == 0) {
311 phi_a0 = 24;
312 } else {
313 phi_a0 = 32;
314 }
315
316 temp_lo = spD8 * phi_a0;
317 temp = temp_lo + phi_a0;
318
320
321 if (spDC) {
322 gDPSetTileSize(gMainGfxPos++, 1, temp * 4, phi_a0 * 4, (temp_lo + (phi_a0 * 2)) * 4, phi_a0 * 8);
323 } else {
324 gDPSetTileSize(gMainGfxPos++, 1, temp * 4, 0, (temp_lo + (phi_a0 * 2)) * 4, phi_a0 * 4);
325 }
326
327 if (type == 2) {
329 }
330
331 part++;
332
333 for (i = 1; i < ((EffectInstance*)effect)->numParts; i++, part++) {
334 guTranslateF(mtx1, part->x, part->y, part->z);
340 }
341
344}
Mtx matrixStack[0x200]
f32 Matrix4f[4][4]
#define guRotateF
#define guMtxF2L
#define guTranslateF
#define guMtxCatF
#define VIRTUAL_TO_PHYSICAL(addr)
Definition macros.h:46
Camera gCameras[4]
Definition cam_main.c:16
Gfx * gMainGfxPos
Definition cam_main.c:14
u16 gMatrixListPos
Definition main_loop.c:44
s32 gCurrentCameraID
Definition cam_math.c:5
DisplayContext * gDisplayContext
Definition cam_main.c:15

Referenced by landing_dust_render().

◆ func_E000C000()

void func_E000C000 ( LandingDustFXData * part)

Definition at line 44 of file landing_dust.c.

44 {
45 part->unk_18 += part->unk_1C;
46 part->unk_14 += part->unk_18;
47 part->unk_10 += part->unk_14;
48 part->x += part->unk_10 * part->unk_30;
49 part->z += part->unk_10 * part->unk_34;
50 part->unk_28 += part->unk_2C;
51 part->unk_24 += part->unk_28;
52 part->unk_20 += part->unk_24;
53 part->y += part->unk_20;
54}

Referenced by landing_dust_update().

◆ func_E000C094()

void func_E000C094 ( LandingDustFXData * part)

Definition at line 56 of file landing_dust.c.

56 {
57 part->y += part->unk_20;
58 part->unk_20 += part->unk_24;
59 part->unk_24 *= part->unk_28;
60}

Referenced by landing_dust_update().

◆ func_E000C0C8()

void func_E000C0C8 ( LandingDustFXData * part)

Definition at line 62 of file landing_dust.c.

62 {
63 part->x += part->unk_10 * part->unk_30;
64 part->y += part->unk_20;
65 part->z += part->unk_10 * part->unk_34;
66 part->unk_20 += part->unk_24;
67 part->unk_10 *= part->unk_14;
68 part->unk_24 *= part->unk_28;
69 part->unk_20 *= part->unk_2C;
70}

Referenced by landing_dust_update().

◆ landing_dust_main()

void landing_dust_main ( s32 type,
f32 x,
f32 y,
f32 z,
f32 angle )

Definition at line 72 of file landing_dust.c.

72 {
75 EffectInstance* effect;
77 f32 theta;
78 s32 numParts;
79 s32 i;
80
81 switch (type) {
82 case 2:
83 numParts = 1;
84 break;
85 case 3:
86 numParts = 4;
87 break;
88 case 4:
89 numParts = 9;
90 break;
91 default:
92 numParts = 3;
93 break;
94 }
95
97 bpPtr->update = landing_dust_update;
98 bpPtr->renderScene = landing_dust_render;
99 bpPtr->unk_00 = 0;
100 bpPtr->renderUI = nullptr;
101 bpPtr->effectID = EFFECT_LANDING_DUST;
102
104 effect->numParts = numParts;
105
106 data = general_heap_malloc(numParts * sizeof(*data));
107 effect->data.landingDust = data;
108 ASSERT(effect->data.landingDust != nullptr);
109
110 mem_clear(data, numParts * sizeof(*data));
111
112 switch (type) {
113 case 0:
114 case 1:
115 data->unk_38 = 0;
116 break;
117 case 3:
118 data->unk_38 = 2;
119 break;
120 case 2:
121 case 4:
122 data->unk_38 = 3;
123 break;
124 }
125
126 data->unk_3C = 0;
127 data->type = type;
128 data->x = x;
129 data->y = y;
130 data->z = z;
131
132 data++;
133
134 switch (type) {
135 case 0:
136 case 1:
137 for (i = 1; i < numParts; i++, data++) {
138 data->unk_10 = -3.0f;
139 data->unk_14 = 0.29999998f;
140 data->unk_18 = 0;
141 data->unk_1C = 0;
142 data->unk_20 = 1.75f;
143 data->unk_24 = -0.16f;
144 data->unk_28 = 0.0f;
145 data->unk_2C = 0.0f;
146 data->x = 0.0f;
147 data->y = 0.0f;
148 data->z = 4.0f;
149 theta = clamp_angle(90 + (180 * (i - 1)));
150 data->unk_30 = sin_deg(theta);
151 data->unk_34 = cos_deg(theta);
152 }
153 break;
154 case 2:
155 break;
156 case 3:
157 for (i = 1; i < numParts; i++, data++) {
158 switch (i - 1) {
159 case 0:
160 theta = 135.0f;
161 data->x = -sin_deg(theta) * 25.0f;
162 data->y = 0.0f;
163 data->z = -cos_deg(theta) * 25.0f;
164 data->unk_24 = -0.04f;
165 data->unk_28 = 0.94f;
166 data->unk_20 = 0.95f;
167 break;
168 case 1:
169 theta = -135.0f;
170 data->x = -sin_deg(theta) * 25.0f;
171 data->y = 4.0f;
172 data->z = -cos_deg(theta) * 25.0f;
173 data->unk_24 = -0.04f;
174 data->unk_28 = 0.94f;
175 data->unk_20 = 0.84999996f;
176 break;
177 case 2:
178 theta = 20.0f;
179 data->x = -sin_deg(theta) * 25.0f;
180 data->y = 10.0f;
181 data->z = -cos_deg(theta) * 25.0f;
182 data->unk_24 = -0.04f;
183 data->unk_28 = 0.94f;
184 data->unk_20 = 0.75f;
185 break;
186
187 }
188 data->unk_30 = 0.0f;
189 data->unk_34 = 0.0f;
190 }
191 break;
192 case 4:
193 for (i = 1; i < numParts; i++, data++) {
194 data->unk_10 = -3.0f;
195 data->unk_14 = 0.93f;
196 data->unk_20 = 0.0f;
197 data->unk_24 = 0.099999994f;
198 data->unk_28 = 0.94f;
199 data->unk_2C = 0.94f;
200 theta = angle + ((i - 1) * 360 / (numParts - 1));
201 data->x = -sin_deg(theta) * 10.0f;
202 data->y = 0.0f;
203 data->z = -cos_deg(theta) * 10.0f;
204 data->unk_30 = sin_deg(theta);
205 data->unk_34 = cos_deg(theta);
206 }
207 break;
208 }
209}
#define general_heap_malloc
#define sin_deg
#define clamp_angle
#define cos_deg
#define create_effect_instance
#define mem_clear
#define ASSERT(condition)
void landing_dust_render(EffectInstance *effect)
void landing_dust_init(EffectInstance *effect)
void landing_dust_update(EffectInstance *effect)

Referenced by star_update().

Variable Documentation

◆ D_09002780_32B620

Gfx D_09002780_32B620[]
extern

◆ D_09002868_32B708

Gfx D_09002868_32B708[]
extern

◆ D_09002950_32B7F0

Gfx D_09002950_32B7F0[]
extern

◆ D_09002A38_32B8D8

Gfx D_09002A38_32B8D8[]
extern

◆ D_09002B20_32B9C0

Gfx D_09002B20_32B9C0[]
extern

◆ D_09002B40_32B9E0

Gfx D_09002B40_32B9E0[]
extern

◆ D_09002B60_32BA00

Gfx D_09002B60_32BA00[]
extern