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

Go to the source code of this file.

Functions

void embers_init (EffectInstance *effect)
 
void embers_update (EffectInstance *effect)
 
void embers_render (EffectInstance *effect)
 
void embers_appendGfx (void *effect)
 
EffectInstanceembers_main (s32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6, s32 arg7, s32 arg8, f32 arg9, f32 argA)
 
void func_E00E05F8 (void)
 

Variables

Gfx D_09000280_3DC1C0 []
 
Gfx D_090003B0_3DC2F0 []
 
GfxD_E00E0A40 [] = { D_090003B0_3DC2F0, D_09000280_3DC1C0 }
 
f32 D_E00E0A48 []
 

Function Documentation

◆ embers_init()

void embers_init ( EffectInstance * effect)

Definition at line 91 of file embers.c.

91 {
92}

Referenced by embers_main().

◆ embers_update()

void embers_update ( EffectInstance * effect)

Definition at line 94 of file embers.c.

94 {
95 EmbersFXData* part = effect->data.embers;
96 f32 unk_10;
97 f32 unk_14;
98 s32 time;
99 f32 unk_68;
100 f32 unk_6C;
101 s32 i;
102
103 if (effect->flags & FX_INSTANCE_FLAG_DISMISS) {
105 part->timeLeft = 16;
106 }
107
108 if (part->timeLeft < 1000) {
109 part->timeLeft--;
110 }
111
112 part->lifetime++;
113 if (part->lifetime > 324000) {
114 part->lifetime = 256;
115 }
116
117 if (part->timeLeft < 0) {
118 remove_effect(effect);
119 return;
120 }
121
122 time = part->lifetime;
123
124 if (part->timeLeft < 16) {
125 part->unk_2C = part->timeLeft * 16;
126 }
127
128 if (time < 16) {
129 part->unk_2C = time * 16 + 15;
130 }
131
132 unk_10 = part->unk_10;
133 unk_14 = part->unk_14;
134 unk_68 = part->unk_68;
135 unk_6C = part->unk_6C;
136
137 part++;
138 for (i = 1; i < effect->numParts; i++, part++) {
139 part->unk_64++;
140 if (part->unk_64 >= 30) {
141 part->unk_64 = 0;
142 }
143
144 if (part->unk_64 >= 0) {
145 if (part->unk_64 == 0) {
146 part->unk_04 = rand_int(unk_10) - unk_10 * 0.5;
147 part->unk_08 = rand_int(unk_14);
148 part->unk_0C = 0.0f;
149 part->unk_44 = (f32) (rand_int(20) - 10) * 0.05;
150 part->unk_48 = (rand_int(40) - 1) * unk_68 * 0.05;
151 part->unk_4C = 0.0f;
152 part->unk_50 = (f32) (rand_int(20) - 10) * 0.05;
153 part->unk_54 = (rand_int(30) - 1) * unk_6C * 0.05;
154 part->unk_58 = 0.0f;
155 part->unk_5C = rand_int(15);
156 part->unk_60 = rand_int(15);
157 }
158 part->unk_40 = D_E00E0A48[part->unk_64];
159 part->unk_04 += part->unk_44;
160 part->unk_08 += part->unk_48;
161 part->unk_0C += part->unk_4C;
162 part->unk_5C += 0.1;
163 part->unk_60 += 0.3;
164 part->unk_44 += (part->unk_50 - part->unk_44) * 0.04;
165 part->unk_48 += (part->unk_54 - part->unk_48) * 0.04;
166 part->unk_4C += (part->unk_58 - part->unk_4C) * 0.04;
167 }
168 }
169}
BSS s32 PopupMenu_SelectedIndex
s8 unk_14
Definition demo_api.c:19
#define remove_effect
#define rand_int
EffectInstanceDataPtr data
Definition effects.h:2605
struct EmbersFXData * embers
Definition effects.h:2576
f32 D_E00E0A48[]
Definition embers.c:9
@ FX_INSTANCE_FLAG_DISMISS
Definition enums.h:3551

Referenced by embers_main().

◆ embers_render()

void embers_render ( EffectInstance * effect)

Definition at line 171 of file embers.c.

171 {
174
176 renderTask.appendGfxArg = effect;
177 renderTask.dist = 10;
179
182}
#define queue_render_task
void embers_appendGfx(void *effect)
Definition embers.c:187
@ RENDER_TASK_FLAG_REFLECT_FLOOR
Definition enums.h:3352
@ RENDER_MODE_CLOUD_NO_ZCMP
Definition enums.h:3345
void(* appendGfx)(void *)

Referenced by embers_main().

◆ embers_appendGfx()

void embers_appendGfx ( void * effect)

Definition at line 187 of file embers.c.

187 {
188 EmbersFXData* part = ((EffectInstance*)effect)->data.embers;
190 s32 unk_2C = part->unk_2C;
193 s32 i;
194
196 gSPSegment(gMainGfxPos++, 0x09, VIRTUAL_TO_PHYSICAL(((EffectInstance*)effect)->shared->graphics));
197
198 guTranslateF(sp10, part->unk_04, part->unk_08, part->unk_0C);
199 guScaleF(sp50, part->unk_40, part->unk_40, part->unk_40);
202
205 gDPSetPrimColor(gMainGfxPos++, 0, 0, part->unk_20, part->unk_24, part->unk_28, unk_2C);
206 gDPSetEnvColor(gMainGfxPos++, part->unk_30, part->unk_34, part->unk_38, part->unk_3C);
208
209 part++;
210 for (i = 1; i < ((EffectInstance*)effect)->numParts; i++, part++) {
211 if (part->unk_64 >= 0) {
212 guTranslateF(sp10, part->unk_04, part->unk_08, part->unk_0C);
214
216 gDPSetTileSize(gMainGfxPos++, G_TX_RENDERTILE, 0, (i % 4) * 16 * 4, 15 * 4, ((i % 4) * 16 + 15) * 4);
217 gDPSetTileSize(gMainGfxPos++, 1, (s32) part->unk_5C * 4, (s32) part->unk_60 * 4, ((s32) part->unk_5C + 15) * 4, ((s32) part->unk_60 + 15) * 4);
220 }
221 }
222
224}
Mtx matrixStack[0x200]
f32 Matrix4f[4][4]
#define guMtxF2L
#define guTranslateF
#define guMtxCatF
#define guScaleF
Gfx * D_E00E0A40[]
Definition embers.c:7
#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 embers_render().

◆ embers_main()

EffectInstance * embers_main ( s32 arg0,
f32 arg1,
f32 arg2,
f32 arg3,
f32 arg4,
f32 arg5,
f32 arg6,
s32 arg7,
s32 arg8,
f32 arg9,
f32 argA )

Definition at line 22 of file embers.c.

34 {
36 EffectInstance* effect;
38 f32 temp1;
39 s32 i;
40
41 arg7++;
42
43 bp.init = embers_init;
44 bp.update = embers_update;
45 bp.renderScene = embers_render;
46 bp.unk_00 = 0;
47 bp.renderUI = nullptr;
48 bp.effectID = EFFECT_EMBERS;
49
50 effect = create_effect_instance(&bp);
51 effect->numParts = arg7;
52 part = effect->data.embers = general_heap_malloc(arg7 * sizeof(*part));
53 ASSERT(effect->data.embers != nullptr);
54
55 part->unk_00 = arg0;
56 part->lifetime = 0;
57 if (arg8 <= 0) {
58 part->timeLeft = 1000;
59 } else {
60 part->timeLeft = arg8;
61 }
62 part->unk_2C = 0;
63 part->unk_04 = arg1;
64 part->unk_08 = arg2;
65 part->unk_0C = arg3;
66 part->unk_40 = arg6;
67 part->unk_10 = arg4;
68 part->unk_14 = arg5;
69 part->unk_68 = arg9;
70 part->unk_6C = argA;
71 part->unk_20 = 127;
72 part->unk_24 = 0;
73 part->unk_28 = 0;
74 part->unk_30 = 127;
75 part->unk_34 = 127;
76 part->unk_38 = 0;
77 part->unk_3C = 255;
78
79 temp1 = 30.0f / (arg7 - 1);
80 temp1 *= 0.5;
81
82 part++;
83 for (i = 1; i < arg7; i++, part++) {
84 s32 temp_f0 = -(f32) i * temp1;
85 part->unk_64 = temp_f0 - 1;
86 }
87
88 return effect;
89}
#define general_heap_malloc
#define create_effect_instance
#define ASSERT(condition)
void embers_render(EffectInstance *effect)
Definition embers.c:171
void embers_init(EffectInstance *effect)
Definition embers.c:91
void embers_update(EffectInstance *effect)
Definition embers.c:94

◆ func_E00E05F8()

void func_E00E05F8 ( void )

Definition at line 184 of file embers.c.

184 {
185}

Variable Documentation

◆ D_09000280_3DC1C0

Gfx D_09000280_3DC1C0[]
extern

◆ D_090003B0_3DC2F0

Gfx D_090003B0_3DC2F0[]
extern

◆ D_E00E0A40

Gfx* D_E00E0A40[] = { D_090003B0_3DC2F0, D_09000280_3DC1C0 }

Definition at line 7 of file embers.c.

Gfx D_09000280_3DC1C0[]
Gfx D_090003B0_3DC2F0[]

Referenced by embers_appendGfx().

◆ D_E00E0A48

f32 D_E00E0A48[]
Initial value:
= {
0.01f, 0.05f, 0.1f, 0.2f, 0.35f, 0.5f,
0.65f, 0.8f, 0.95f, 1.0f, 1.0f, 1.0f,
1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
1.0f, 1.0f, 1.0f, 0.95f, 0.8f, 0.65f,
0.5f, 0.35f, 0.2f, 0.1f, 0.05f, 0.01f
}

Definition at line 9 of file embers.c.

9 {
10 0.01f, 0.05f, 0.1f, 0.2f, 0.35f, 0.5f,
11 0.65f, 0.8f, 0.95f, 1.0f, 1.0f, 1.0f,
12 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
13 1.0f, 1.0f, 1.0f, 0.95f, 0.8f, 0.65f,
14 0.5f, 0.35f, 0.2f, 0.1f, 0.05f, 0.01f
15};

Referenced by embers_update().