Paper Mario DX
Paper Mario (N64) modding
 
Loading...
Searching...
No Matches
snowflake.c
Go to the documentation of this file.
1#include "common.h"
2#include "effects_internal.h"
3
4s32 D_E001C5E0 = 0;
5
8
12void snowflake_appendGfx(void* effect);
13
14void snowflake_main(f32 x, f32 y, f32 z, s32 arg3) {
16 EffectInstance* effect;
18 s32 numParts = 1;
19 f32 phi_f4;
20
21 bp.unk_00 = 0;
22 bp.init = snowflake_init;
23 bp.update = snowflake_update;
24 bp.renderScene = snowflake_render;
25 bp.renderUI = NULL;
26 bp.effectID = EFFECT_SNOWFLAKE;
27
28 effect = create_effect_instance(&bp);
29 effect->numParts = 1;
30 part = effect->data.snowflake = general_heap_malloc(numParts * sizeof(*part));
31
32 ASSERT(effect->data.snowflake != NULL);
33
34 part->pos.x = x;
35 part->pos.y = y;
36 part->pos.z = z;
37 part->unk_0C = 0;
38 part->unk_10 = -3.0f;
39 part->unk_14 = 0;
40 part->unk_18 = 0;
41 part->unk_1C = 0;
42 part->unk_20 = 3.0f;
43 if (D_E001C5E0 != 0) {
44 phi_f4 = -10.0f;
45 } else {
46 phi_f4 = 10.0f;
47 }
48 part->unk_24 = phi_f4;
49 part->unk_28 = arg3;
50
51 D_E001C5E0++;
52 if (D_E001C5E0 >= 2) {
53 D_E001C5E0 = 0;
54 }
55}
56
58}
59
61 SnowflakeFXData* data = effect->data.snowflake;
62
63 data->unk_28--;
64 if (data->unk_28 < 0) {
65 remove_effect(effect);
66 return;
67 }
68
69 data->pos.x += data->unk_0C;
70 data->pos.y += data->unk_10;
71 data->pos.z += data->unk_14;
72 data->unk_18 += data->unk_20;
73 if (data->unk_18 < 10.0f) {
74 data->unk_18 = 10.0f;
75 data->unk_20 = -data->unk_20;
76 }
77 if (data->unk_18 > 45.0f) {
78 data->unk_18 = 45.0f;
79 data->unk_20 = -data->unk_20;
80 }
81 data->unk_1C += data->unk_24;
82}
83
86 SnowflakeFXData* data = effect->data.snowflake;
90 f32 effectPos = data->pos.x;
91 f32 playerPos = playerStatus->pos.x;
92
93 if (effectPos - playerPos > 200) {
94 data->pos.x = effectPos - 400;
95 } else {
96 if (playerPos - effectPos > 200) {
97 data->pos.x = effectPos + 400;
98 }
99 }
100
101 effectPos = data->pos.z;
102 playerPos = playerStatus->pos.z;
103 if (effectPos - playerPos > 200) {
104 data->pos.z = effectPos - 400;
105 } else {
106 if (playerPos - effectPos > 200) {
107 data->pos.z = effectPos + 400;
108 }
109 }
110
112 renderTaskPtr->appendGfxArg = effect;
113 renderTaskPtr->dist = 0;
115
118}
119
BSS s32 PopupMenu_SelectedIndex
Mtx matrixStack[0x200]
f32 Matrix4f[4][4]
#define general_heap_malloc
#define guRotateF
#define queue_render_task
#define guMtxF2L
#define guTranslateF
#define guMtxCatF
#define remove_effect
#define create_effect_instance
struct SnowflakeFXData * snowflake
Definition effects.h:2478
EffectInstanceDataPtr data
Definition effects.h:2605
#define ASSERT(condition)
@ RENDER_TASK_FLAG_REFLECT_FLOOR
Definition enums.h:3318
@ RENDER_MODE_CLOUD_NO_ZCMP
Definition enums.h:3311
#define VIRTUAL_TO_PHYSICAL(addr)
Definition macros.h:47
void snowflake_appendGfx(void *effect)
Definition snowflake.c:120
Gfx D_09000900_331800[]
void snowflake_init(EffectInstance *effect)
Definition snowflake.c:57
void snowflake_update(EffectInstance *effect)
Definition snowflake.c:60
void snowflake_render(EffectInstance *effect)
Definition snowflake.c:84
s32 D_E001C5E0
Definition snowflake.c:4
Gfx D_090009E8_3318E8[]
void snowflake_main(f32 x, f32 y, f32 z, s32 arg3)
Definition snowflake.c:14
Camera gCameras[4]
Definition cam_main.c:17
Gfx * gMainGfxPos
Definition cam_main.c:15
u16 gMatrixListPos
Definition main_loop.c:45
PlayerStatus gPlayerStatus
Definition 77480.c:39
s32 gCurrentCameraID
Definition cam_math.c:4
DisplayContext * gDisplayContext
Definition cam_main.c:16