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

Go to the source code of this file.

Functions

void snowflake_init (EffectInstance *effect)
 
void snowflake_update (EffectInstance *effect)
 
void snowflake_render (EffectInstance *effect)
 
void snowflake_appendGfx (void *effect)
 
void snowflake_main (f32 x, f32 y, f32 z, s32 arg3)
 

Variables

s32 D_E001C5E0 = 0
 
Gfx D_09000900_331800 []
 
Gfx D_090009E8_3318E8 []
 

Function Documentation

◆ snowflake_init()

void snowflake_init ( EffectInstance * effect)

Definition at line 57 of file snowflake.c.

57 {
58}

Referenced by snowflake_main().

◆ snowflake_update()

void snowflake_update ( EffectInstance * effect)

Definition at line 60 of file snowflake.c.

60 {
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}
#define remove_effect
struct SnowflakeFXData * snowflake
Definition effects.h:2478
EffectInstanceDataPtr data
Definition effects.h:2605

Referenced by snowflake_main().

◆ snowflake_render()

void snowflake_render ( EffectInstance * effect)

Definition at line 84 of file snowflake.c.

84 {
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}
BSS s32 PopupMenu_SelectedIndex
#define queue_render_task
@ RENDER_TASK_FLAG_REFLECT_FLOOR
Definition enums.h:3318
@ RENDER_MODE_CLOUD_NO_ZCMP
Definition enums.h:3311
void snowflake_appendGfx(void *effect)
Definition snowflake.c:120
PlayerStatus gPlayerStatus
Definition 77480.c:39

Referenced by snowflake_main().

◆ snowflake_appendGfx()

void snowflake_appendGfx ( void * effect)

Definition at line 120 of file snowflake.c.

120 {
122 EffectInstance* effectTemp = effect;
123 SnowflakeFXData* data = effectTemp->data.snowflake;
124
126 gSPSegment(gMainGfxPos++, 0x09, VIRTUAL_TO_PHYSICAL(effectTemp->shared->graphics));
128
129 guTranslateF(sp18, data->pos.x, data->pos.y, data->pos.z);
130 guRotateF(spD8, -gCameras[gCurrentCameraID].curYaw, 0.0f, 1.0f, 0.0f);
133
135 gDPSetPrimColor(gMainGfxPos++, 0, 0, 0, 0, 0, 255);
136
137 guRotateF(sp58, data->unk_18, 1.0f, 0.0f, 0.0f);
138 guRotateF(sp98, data->unk_1C, 0.0f, 1.0f, 0.0f);
141
146}
Mtx matrixStack[0x200]
f32 Matrix4f[4][4]
#define guRotateF
#define guMtxF2L
#define guTranslateF
#define guMtxCatF
#define VIRTUAL_TO_PHYSICAL(addr)
Definition macros.h:47
Gfx D_09000900_331800[]
Gfx D_090009E8_3318E8[]
Camera gCameras[4]
Definition cam_main.c:17
Gfx * gMainGfxPos
Definition cam_main.c:15
u16 gMatrixListPos
Definition main_loop.c:45
s32 gCurrentCameraID
Definition cam_math.c:4
DisplayContext * gDisplayContext
Definition cam_main.c:16

Referenced by snowflake_render().

◆ snowflake_main()

void snowflake_main ( f32 x,
f32 y,
f32 z,
s32 arg3 )

Definition at line 14 of file snowflake.c.

14 {
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}
#define general_heap_malloc
#define create_effect_instance
#define ASSERT(condition)
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

Variable Documentation

◆ D_E001C5E0

s32 D_E001C5E0 = 0

Definition at line 4 of file snowflake.c.

Referenced by snowflake_main().

◆ D_09000900_331800

Gfx D_09000900_331800[]
extern

Referenced by snowflake_appendGfx().

◆ D_090009E8_3318E8

Gfx D_090009E8_3318E8[]
extern

Referenced by snowflake_appendGfx().