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

Go to the source code of this file.

Functions

void windy_leaves_init (EffectInstance *effect)
 
void windy_leaves_update (EffectInstance *effect)
 
void windy_leaves_render (EffectInstance *effect)
 
void windy_leaves_appendGfx (void *effect)
 
void windy_leaves_main (s32 type, f32 arg1, f32 arg2, f32 arg3)
 

Variables

Gfx D_09001180_33E790 []
 
Gfx D_09001258_33E868 []
 
Gfx D_09001280_33E890 []
 

Function Documentation

◆ windy_leaves_init()

void windy_leaves_init ( EffectInstance * effect)

Definition at line 82 of file windy_leaves.c.

82 {
83}

Referenced by windy_leaves_main().

◆ windy_leaves_update()

void windy_leaves_update ( EffectInstance * effect)

Definition at line 85 of file windy_leaves.c.

85 {
89 s32 i;
90 s32 temp;
91
92 part->unk_28--;
93 part->unk_2C++;
94 if (part->unk_28 < 0) {
95 remove_effect(effect);
96 return;
97 }
98 temp_a1 = part->unk_2C;
99 temp_v0 = part->unk_28;
100 temp = part->type;
101 if (temp_a1 < 10) {
102 part->alpha += (255 - part->alpha) * 0.3;
103 }
104 if (temp_v0 < 10) {
105 part->alpha *= 0.8;
106 }
107
108 part++;
109 switch (temp) {
110 case 0:
111 for (i = 1; i < effect->numParts; i++, part++) {
112 f32 temp3 = (sin_deg(2.0f * part->unk_18) * 0.2);
113 part->unk_14 += -0.05f;
114 part->unk_10 += temp3;
115 if (temp == 0) {
116 part->unk_10 *= 0.94;
117 part->unk_14 *= sin_deg(part->unk_18) * 0.05 + 0.95;
118 } else {
119 part->unk_14 += -0.05f;
120 part->unk_10 *= 0.92;
121 }
122 part->unk_1C += effect_simple_rand(50, temp_a1 + i * 20) - 25;
123 part->unk_18 += sin_deg(part->unk_1C) * 10.0f;
124 part->unk_20 += cos_deg(part->unk_1C * 0.5) * 10.0f;
125 part->unk_04.x += part->unk_10;
126 part->unk_04.y += part->unk_14;
127 if (part->unk_04.y < 30.0f) {
128 if (part->unk_04.x > -200.0f) {
129 part->unk_30 -= 0.4;
130 } else {
131 part->unk_30 += 0.4;
132 }
133 if (part->unk_04.z > 0.0f) {
134 part->unk_38 -= 0.4;
135 } else {
136 part->unk_38 += 0.4;
137 }
138 part->unk_30 *= 0.98;
139 part->unk_38 *= 0.98;
140 part->unk_14 *= 0.98;
141 } else {
142 if(part->unk_04.x > 0.0f) {
143 part->unk_30 -= 0.4;
144 } else {
145 part->unk_30 += 0.4;
146 }
147 if (part->unk_04.z > 0.0f){
148 part->unk_38 -= 0.4;
149 } else {
150 part->unk_38 += 0.4;
151 }
152 part->unk_30 *= 0.98;
153 part->unk_38 *= 0.98;
154 }
155 part->unk_04.x += part->unk_30;
156 part->unk_04.y += part->unk_34;
157 part->unk_04.z += part->unk_38;
158 }
159 break;
160 case 1:
161 for (i = 1; i < effect->numParts; i++, part++) {
162 part->unk_10 += (f32)(sin_deg(2.0f * part->unk_18) * 0.2 * 2.0);
163 part->unk_14 += -0.05f;
164 part->unk_10 *= 0.8464;
165 part->unk_14 += -0.05f;
166 part->unk_1C += effect_simple_rand(50, temp_a1 + i * 20) - 25;
167 part->unk_18 += sin_deg(part->unk_1C) * 10.0f;
168 part->unk_20 += cos_deg(part->unk_1C * 0.5) * 10.0f;
169 part->unk_04.x += part->unk_10;
170 part->unk_04.y += part->unk_14;
171 if (part->unk_04.y < 30.0f) {
172 if (part->unk_04.x > -200.0f) {
173 part->unk_30 -= 0.8;
174 } else {
175 part->unk_30 += 0.8;
176 }
177 if (part->unk_04.z > 0.0f) {
178 part->unk_38 -= 0.8;
179 } else {
180 part->unk_38 += 0.8;
181 }
182 part->unk_30 *= 0.9603999999999999;
183 part->unk_38 *= 0.9603999999999999;
184 part->unk_14 *= 0.9603999999999999;
185 } else {
186 if (part->unk_04.x > 0.0f){
187 part->unk_30 -= 0.8;
188 } else {
189 part->unk_30 += 0.8;
190 }
191 if (part->unk_04.z > 0.0f){
192 part->unk_38 -= 0.8;
193 } else {
194 part->unk_38 += 0.8;
195 }
196 part->unk_30 *= 0.9603999999999999;
197 part->unk_38 *= 0.9603999999999999;
198 }
199 part->unk_04.x += part->unk_30;
200 part->unk_04.y += part->unk_34;
201 part->unk_04.z += part->unk_38;
202 }
203 break;
204 case 2:
205 for (i = 1; i < effect->numParts; i++, part++) {
206 part->unk_1C += effect_simple_rand(50, temp_a1 + i * 20) - 25;
207 part->unk_18 += sin_deg(part->unk_1C) * 10.0f;
208 part->unk_20 += cos_deg(part->unk_1C * 0.5) * 10.0f;
209 part->unk_04.x += part->unk_10;
210 part->unk_04.y += part->unk_14;
211 }
212 break;
213 }
214}
BSS s32 PopupMenu_SelectedIndex
#define sin_deg
#define remove_effect
#define cos_deg
EffectInstanceDataPtr data
Definition effects.h:2605
struct WindyLeavesFXData * windyLeaves
Definition effects.h:2507
s32 effect_simple_rand(s32, s32)

Referenced by windy_leaves_main().

◆ windy_leaves_render()

void windy_leaves_render ( EffectInstance * effect)

Definition at line 216 of file windy_leaves.c.

216 {
219
221 renderTask.appendGfxArg = effect;
222 renderTask.dist = 0;
224
227}
#define queue_render_task
@ RENDER_TASK_FLAG_REFLECT_FLOOR
Definition enums.h:3352
@ RENDER_MODE_CLOUD_NO_ZCMP
Definition enums.h:3345
void(* appendGfx)(void *)
void windy_leaves_appendGfx(void *effect)

Referenced by windy_leaves_main().

◆ windy_leaves_appendGfx()

void windy_leaves_appendGfx ( void * effect)

Definition at line 229 of file windy_leaves.c.

229 {
230 WindyLeavesFXData* part = ((EffectInstance*)effect)->data.windyLeaves;
232 Gfx* dlist;
233 s32 i;
234
235 dlist = D_09001280_33E890;
236 if (part->type == 0) {
237 dlist = D_09001258_33E868;
238 }
239
240 gSPSegment(gMainGfxPos++, 0x09, OS_K0_TO_PHYSICAL(((EffectInstance*)effect)->shared->graphics));
242 gDPSetPrimColor(gMainGfxPos++, 0, 0, 20, 100, 20, part->alpha);
243 guTranslateF(sp18, part->unk_04.x, part->unk_04.y, part->unk_04.z);
244 guRotateF(sp58, -gCameras[gCurrentCameraID].curYaw, 0.0f, 1.0f, 0.0f);
246
247 part++;
248 for (i = 1; i < ((EffectInstance*)effect)->numParts; i++, part++) {
249 guTranslateF(sp58, part->unk_04.x, part->unk_04.y, part->unk_04.z);
251 guRotateF(sp58, part->unk_18, 0.0f, 0.0f, 1.0f);
253 guRotateF(sp58, part->unk_20, 0.0f, 1.0f, 0.0f);
257 gSPDisplayList(gMainGfxPos++, dlist);
259 }
260}
Mtx matrixStack[0x200]
f32 Matrix4f[4][4]
#define guRotateF
#define guMtxF2L
#define guTranslateF
#define guMtxCatF
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
Gfx D_09001180_33E790[]
Gfx D_09001258_33E868[]
Gfx D_09001280_33E890[]

Referenced by windy_leaves_render().

◆ windy_leaves_main()

void windy_leaves_main ( s32 type,
f32 arg1,
f32 arg2,
f32 arg3 )

Definition at line 13 of file windy_leaves.c.

13 {
16 EffectInstance* effect;
18 s32 numParts;
19 s32 i;
20
21 bp.init = windy_leaves_init;
22 bp.update = windy_leaves_update;
23 bp.renderScene = windy_leaves_render;
24 bp.unk_00 = 0;
25 bp.renderUI = nullptr;
26 bp.effectID = EFFECT_WINDY_LEAVES;
27
28 numParts = 5;
30 effect->numParts = numParts;
31 effect->data.windyLeaves = part = general_heap_malloc(numParts * sizeof(*part));
32 ASSERT(part != nullptr);
33
34 part->type = type;
35 part->unk_04.x = arg1;
36 part->unk_04.y = arg2;
37 part->unk_04.z = arg3;
38 part->unk_28 = 100;
39 part->unk_2C = 0;
40 part->alpha = 0;
41
42 part++;
43 for (i = 1; i < numParts; i++, part++) {
48 part->unk_04.x = temp_s0_2 + 75;
49 part->unk_04.y = temp_s1 + 70;
50 part->unk_04.z = 0;
51 part->unk_18 = temp_s2;
52 part->unk_20 = 360 - temp_s2;
53
54 switch (type) {
55 case 0:
56 part->unk_10 = 0.0f;
57 part->unk_14 = 0.0f;
58 part->unk_34 = 0;
59 part->unk_30 = -3.0f;
60 part->unk_38 = 3.0f;
61 part->unk_1C = (f32)temp_v0_2 * 0.1;
62 break;
63 case 1:
64 part->unk_10 = 0.0f;
65 part->unk_14 = 0.0f;
66 part->unk_34 = 0;
67 part->unk_30 = -6.0f;
68 part->unk_38 = 6.0f;
69 part->unk_1C = 2.0 * ((f32)temp_v0_2 * 0.1);
70 break;
71 case 2:
72 part->unk_1C = 2.0 * ((f32)temp_v0_2 * 0.1);
73 part->unk_10 = -part->unk_04.x * (rand_int(10) * 0.008 + 0.05);
74 part->unk_14 = -part->unk_04.y * (rand_int(10) * 0.008 + 0.05);
75 break;
76 default:
77 break;
78 }
79 }
80}
#define general_heap_malloc
#define rand_int
#define create_effect_instance
#define ASSERT(condition)
s32 effect_rand_int(s32)
void windy_leaves_update(EffectInstance *effect)
void windy_leaves_render(EffectInstance *effect)
void windy_leaves_init(EffectInstance *effect)

Variable Documentation

◆ D_09001180_33E790

Gfx D_09001180_33E790[]
extern

Referenced by windy_leaves_appendGfx().

◆ D_09001258_33E868

Gfx D_09001258_33E868[]
extern

Referenced by windy_leaves_appendGfx().

◆ D_09001280_33E890

Gfx D_09001280_33E890[]
extern

Referenced by windy_leaves_appendGfx().