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

Go to the source code of this file.

Functions

void effect_75_init (EffectInstance *effect)
 
void effect_75_update (EffectInstance *effect)
 
void effect_75_render (EffectInstance *effect)
 
void effect_75_appendGfx (void *effect)
 
EffectInstanceeffect_75_main (s32 arg0, f32 posX, f32 posY, f32 posZ, f32 scale, s32 arg5)
 
void func_E00EA664 (void)
 

Variables

Gfx D_09001910_3E4270 []
 
Gfx D_09001A00_3E4360 []
 
Gfx D_09001A20_3E4380 []
 
GfxD_E00EAA50 [2] = { D_09001A00_3E4360, D_09001A20_3E4380 }
 
GfxD_E00EAA58 [2] = { D_09001910_3E4270, nullptr }
 

Function Documentation

◆ effect_75_init()

void effect_75_init ( EffectInstance * effect)

Definition at line 74 of file effect_75.c.

74 {
75}

Referenced by effect_75_main().

◆ effect_75_update()

void effect_75_update ( EffectInstance * effect)

Definition at line 77 of file effect_75.c.

77 {
78 Effect75FXData* data = effect->data.unk_75;
79 s32 unk_14;
80
81 if (effect->flags & FX_INSTANCE_FLAG_DISMISS) {
83 data->unk_10 = 0x10;
84 }
85
86 if (data->unk_10 < 1000) {
87 data->unk_10--;
88 }
89
90 data->unk_14++;
91 if (data->unk_14 > 108000) {
92 data->unk_14 = 0;
93 }
94
95 if (data->unk_10 < 0) {
96 remove_effect(effect);
97 return;
98 }
99
100 unk_14 = data->unk_14;
101
102 if (data->unk_10 < 16) {
103 data->unk_24 = data->unk_10 * 16;
104 }
105
106 if (unk_14 < 16) {
107 data->unk_24 = unk_14 * 16 + 15;
108 }
109
110 data->unk_48 += (data->unk_68 - data->unk_48) * 0.1;
111 data->unk_4C += (data->unk_6C - data->unk_4C) * 0.1;
112 data->unk_58 += (data->unk_70 - data->unk_58) * 0.1;
113 data->unk_5C += (data->unk_74 - data->unk_5C) * 0.1;
114 data->unk_60 += (data->unk_78 - data->unk_60) * 0.1;
115 data->unk_64 += (data->unk_7C - data->unk_64) * 0.1;
116
117 data->unk_40 += 2.0f * data->unk_48;
118 data->unk_44 += 2.0f * data->unk_4C;
119 data->unk_50 += 2.0f * data->unk_58;
120 data->unk_54 += 2.0f * data->unk_5C;
121
122 if (data->unk_40 < 0.0f) {
123 data->unk_40 += 256.0f;
124 }
125 if (data->unk_44 < 0.0f) {
126 data->unk_44 += 256.0f;
127 }
128 if (data->unk_50 < 0.0f) {
129 data->unk_50 += 256.0f;
130 }
131 if (data->unk_54 < 0.0f) {
132 data->unk_54 += 256.0f;
133 }
134
135 if (data->unk_40 > 256.0f) {
136 data->unk_40 -= 256.0f;
137 }
138 if (data->unk_44 > 256.0f) {
139 data->unk_44 -= 256.0f;
140 }
141 if (data->unk_50 > 256.0f) {
142 data->unk_50 -= 256.0f;
143 }
144 if (data->unk_54 > 256.0f) {
145 data->unk_54 -= 256.0f;
146 }
147
148 data->unk_34 = data->unk_60
149 + (sin_deg(unk_14 * 20) * (data->unk_64 - data->unk_60)
150 + (data->unk_64 - data->unk_60)) * 0.5;
151}
BSS s32 PopupMenu_SelectedIndex
s8 unk_14
Definition demo_api.c:19
#define sin_deg
#define remove_effect
struct Effect75FXData * unk_75
Definition effects.h:2581
EffectInstanceDataPtr data
Definition effects.h:2605
@ FX_INSTANCE_FLAG_DISMISS
Definition enums.h:3551

Referenced by effect_75_main().

◆ effect_75_render()

void effect_75_render ( EffectInstance * effect)

Definition at line 153 of file effect_75.c.

153 {
154 Effect75FXData* data = effect->data.unk_75;
158 s32 outDist;
159 f32 outX;
160 f32 outY;
161 f32 outZ;
162 f32 outS;
163
164 transform_point(&gCameras[gCurrentCameraID].mtxPerspective[0],
165 data->pos.x, data->pos.y, data->pos.z, 1.0f,
166 &outX, &outY, &outZ, &outS);
167
168 outDist = outZ + 5000;
169 if (outDist < 0) {
170 outDist = 0;
171 } else if (outDist > 10000) {
172 outDist = 10000;
173 }
174
175 if (outS < 0.01 && -0.01 < outS) {
176 outDist = 0;
177 }
178
180 renderTaskPtr->dist = -outDist;
181 renderTaskPtr->appendGfxArg = effect;
183
186}
void effect_75_appendGfx(void *effect)
Definition effect_75.c:191
#define transform_point
#define queue_render_task
@ RENDER_TASK_FLAG_REFLECT_FLOOR
Definition enums.h:3352
@ RENDER_MODE_SURFACE_XLU_LAYER1
Definition enums.h:3316
Camera gCameras[4]
Definition cam_main.c:16
s32 gCurrentCameraID
Definition cam_math.c:5

Referenced by effect_75_main().

◆ effect_75_appendGfx()

void effect_75_appendGfx ( void * effect)

Definition at line 191 of file effect_75.c.

191 {
192 Effect75FXData* data = ((EffectInstance*)effect)->data.unk_75;
194 s32 type = data->type;
195 s32 uls0 = data->unk_40 * 4.0f;
196 s32 ult0 = data->unk_44 * 4.0f;
197 s32 uls1 = data->unk_50 * 4.0f;
198 s32 ult1 = data->unk_54 * 4.0f;
201
203 gSPSegment(gMainGfxPos++, 0x09, VIRTUAL_TO_PHYSICAL(((EffectInstance*)effect)->shared->graphics));
204
205 guTranslateF(mtxTransfrom, data->pos.x, data->pos.y, data->pos.z);
206 guScaleF(mtxTemp, data->scale, data->scale, data->scale);
208 if (type == 1) {
209 guRotateF(mtxTemp, 180.0f, 0.0f, 0.0f, 1.0f);
211 }
213
216 gDPSetPrimColor(gMainGfxPos++, 0, 0, data->primCol.r, data->primCol.g, data->primCol.b, data->unk_34);
217 gDPSetEnvColor(gMainGfxPos++, data->envCol.r, data->envCol.g, data->envCol.b, data->unk_24 * data->masterAlpha / 255);
220 gDPSetTileSize(gMainGfxPos++, 1, uls1, ult1, uls1 + 252, ult1 + 252);
223}
Mtx matrixStack[0x200]
f32 Matrix4f[4][4]
Gfx * D_E00EAA50[2]
Definition effect_75.c:8
Gfx * D_E00EAA58[2]
Definition effect_75.c:9
#define guRotateF
#define guMtxF2L
#define guTranslateF
#define guMtxCatF
#define guScaleF
Color3i primCol
Definition effects.h:2105
Color3i envCol
Definition effects.h:2107
#define VIRTUAL_TO_PHYSICAL(addr)
Definition macros.h:46
Gfx * gMainGfxPos
Definition cam_main.c:14
u16 gMatrixListPos
Definition main_loop.c:44
DisplayContext * gDisplayContext
Definition cam_main.c:15

Referenced by effect_75_render().

◆ effect_75_main()

EffectInstance * effect_75_main ( s32 arg0,
f32 posX,
f32 posY,
f32 posZ,
f32 scale,
s32 arg5 )

Definition at line 16 of file effect_75.c.

16 {
18 EffectInstance* effect;
19 Effect75FXData* data;
20 s32 numParts = 1;
21
22 bp.init = effect_75_init;
23 bp.update = effect_75_update;
24 bp.renderScene = effect_75_render;
25 bp.unk_00 = 0;
26 bp.renderUI = nullptr;
27 bp.effectID = EFFECT_75;
28
29 effect = create_effect_instance(&bp);
30 effect->numParts = numParts;
31 data = effect->data.unk_75 = general_heap_malloc(numParts * sizeof(*data));
32 ASSERT(effect->data.unk_75 != nullptr);
33
34 data->type = arg0;
35 data->unk_14 = 0;
36 if (arg5 <= 0) {
37 data->unk_10 = 1000;
38 } else {
39 data->unk_10 = arg5;
40 }
41 data->unk_24 = 0;
42 data->pos.x = posX;
43 data->pos.y = posY;
44 data->pos.z = posZ;
45 data->scale = scale;
46 data->primCol.r = 0;
47 data->primCol.g = 180;
48 data->primCol.b = 220;
49 data->envCol.r = 0;
50 data->envCol.g = 0;
51 data->envCol.b = 0;
52 data->unk_34 = 0;
53 data->masterAlpha = 0;
54 data->unk_40 = 0;
55 data->unk_44 = 0;
56 data->unk_50 = 0;
57 data->unk_54 = 0;
58 data->unk_48 = 1.0f;
59 data->unk_68 = 1.0f;
60 data->unk_4C = 0.9f;
61 data->unk_6C = 0.9f;
62 data->unk_58 = -2.0f;
63 data->unk_70 = -2.0f;
64 data->unk_5C = 1.25f;
65 data->unk_74 = 1.25f;
66 data->unk_60 = 190.0f;
67 data->unk_78 = 190.0f;
68 data->unk_64 = 220.0f;
69 data->unk_7C = 220.0f;
70
71 return effect;
72}
void effect_75_init(EffectInstance *effect)
Definition effect_75.c:74
void effect_75_update(EffectInstance *effect)
Definition effect_75.c:77
void effect_75_render(EffectInstance *effect)
Definition effect_75.c:153
#define general_heap_malloc
#define create_effect_instance
#define ASSERT(condition)

◆ func_E00EA664()

void func_E00EA664 ( void )

Definition at line 188 of file effect_75.c.

188 {
189}

Variable Documentation

◆ D_09001910_3E4270

Gfx D_09001910_3E4270[]
extern

◆ D_09001A00_3E4360

Gfx D_09001A00_3E4360[]
extern

◆ D_09001A20_3E4380

Gfx D_09001A20_3E4380[]
extern

◆ D_E00EAA50

Gfx* D_E00EAA50[2] = { D_09001A00_3E4360, D_09001A20_3E4380 }

Definition at line 8 of file effect_75.c.

Gfx D_09001A20_3E4380[]
Gfx D_09001A00_3E4360[]

Referenced by effect_75_appendGfx().

◆ D_E00EAA58

Gfx* D_E00EAA58[2] = { D_09001910_3E4270, nullptr }

Definition at line 9 of file effect_75.c.

9{ D_09001910_3E4270, nullptr };
Gfx D_09001910_3E4270[]

Referenced by effect_75_appendGfx().