Paper Mario DX
Paper Mario (N64) modding
 
Loading...
Searching...
No Matches
quizmo_audience.c
Go to the documentation of this file.
1#include "common.h"
2#include "effects_internal.h"
3
5 /* 0x00 */ Vec2b* offsets;
6 /* 0x04 */ u8 count;
7} QuizmoAudiencePositonOffsets; // size = 0x8
8
10extern Gfx D_09002F18_3AA6B8[];
11extern Gfx D_09002F50_3AA6F0[];
12extern Gfx D_09002F88_3AA728[];
13extern Gfx D_09002FC0_3AA760[];
14extern Gfx D_09002FF8_3AA798[];
15extern Gfx D_09003030_3AA7D0[];
16extern Gfx D_09003068_3AA808[];
17extern Gfx D_090030A0_3AA840[];
18extern Gfx D_090030D8_3AA878[];
19extern Gfx D_09003110_3AA8B0[];
20
25
27 {0, 0},
28 {1, 0},
29 {2, 0},
30 {2, 0},
31 {3, 0},
32 {3, 0},
33 {3, 0},
34 {2, 0},
35 {2, 0},
36 {1, 0},
37 {1, 0},
38 {0, 0},
39 {0, 0},
40 {-1, 0},
41 {-2, 0},
42 {-2, 0},
43 {-3, 0},
44 {-3, 0},
45 {-3, 0},
46 {-2, 0},
47 {-2, 0},
48 {-1, 0},
49 {-1, 0},
50 {0, 0},
51};
52
54 {0, 0},
55 {0, 1},
56 {0, 2},
57 {0, 2},
58 {0, 3},
59 {0, 3},
60 {0, 3},
61 {0, 2},
62 {0, 2},
63 {0, 1},
64 {0, 1},
65 {0, 0},
66};
67
72
73void quizmo_audience_appendGfx(void* effect);
77
80 EffectInstance* effect;
82 s32 numParts = 1;
83 s32 i;
84
87 effectBp.renderScene = quizmo_audience_render;
88 effectBp.unk_00 = 0;
89 effectBp.renderUI = NULL;
91
93 effect->numParts = numParts;
94
95 data = effect->data.quizmoAudience = general_heap_malloc(numParts * sizeof(*data));
96 ASSERT(data != NULL);
97
98 data->timeLeft = 100;
99 data->unk_00 = arg0;
100 data->primColor = 255;
101 data->pos.x = posX;
102 data->pos.y = posY;
103 data->pos.z = posZ;
104 data->lifeTime = 0;
105
106 for (i = 0; i < ARRAY_COUNT(data->compState); i++) {
107 data->compState[i] = 0;
108 data->compX[i] = data->compY[i] = 0.0f;
109 }
110
111 return effect;
112}
113
116
120 s32 posIdx;
121 s32 i;
122
123 if (effect->flags & FX_INSTANCE_FLAG_DISMISS) {
125 data->timeLeft = 30;
126 }
127
128 if (data->timeLeft < 100) {
129 data->timeLeft--;
130 }
131
132 data->lifeTime++;
133 if (data->timeLeft < 0) {
134 remove_effect(effect);
135 return;
136 }
137
138 if (data->timeLeft < 16) {
139 data->primColor = data->timeLeft * 16;
140 }
141
142 for (i = 0; i < MAX_QUIZMO_AUDIENCE; i++) {
143 switch (data->compState[i]) {
144 case 0:
145 if (rand_int(10) == 10) {
146 data->compState[i] = 1;
147 data->compType[i] = rand_int(1);
148 data->compPosIdx[i] = 0;
149 data->compMoveMagnitude[i] = (rand_int(50) * 0.01) + 0.5;
150 }
151 break;
152 case 1:
153 posIdx = data->compPosIdx[i];
155 if (data->compPosIdx[i] >= unkStruct->count) {
156 data->compState[i] = 0;
157 } else {
158 data->compX[i] = unkStruct->offsets[posIdx].x * data->compMoveMagnitude[i];
159 data->compY[i] = unkStruct->offsets[posIdx].y * data->compMoveMagnitude[i];
160 data->compPosIdx[i]++;
161 }
162 break;
163 }
164 }
165}
166
179
180void func_E00A8318(void) {
181}
182
183void quizmo_audience_appendGfx(void* effect) {
186 QuizmoAudienceFXData* data = ((EffectInstance*)effect)->data.quizmoAudience;
187 s32 primColor = data->primColor;
188 s32 i;
189
191 gSPSegment(gMainGfxPos++, 0x09, VIRTUAL_TO_PHYSICAL(((EffectInstance*)effect)->shared->graphics));
192
193 guTranslateF(sp18, data->pos.x, data->pos.y, data->pos.z);
194 guRotateF(sp58, -gCameras[gCurrentCameraID].curYaw, 0.0f, 1.0f, 0.0f);
197
200 gDPSetPrimColor(gMainGfxPos++, 0, 0, primColor, primColor, primColor, 255);
202
203 for (i = 0; i < MAX_QUIZMO_AUDIENCE; i++) {
204 guTranslateF(sp18, data->compX[i], data->compY[i], 0.0f);
206
211 }
212
215}
216
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 rand_int
#define create_effect_instance
EffectInstanceDataPtr data
Definition effects.h:2605
#define MAX_QUIZMO_AUDIENCE
Definition effects.h:1419
f32 compMoveMagnitude[10]
Definition effects.h:1430
struct QuizmoAudienceFXData * quizmoAudience
Definition effects.h:2548
#define ASSERT(condition)
@ FX_INSTANCE_FLAG_DISMISS
Definition enums.h:3517
@ RENDER_TASK_FLAG_REFLECT_FLOOR
Definition enums.h:3318
@ RENDER_MODE_CLOUD_NO_ZCMP
Definition enums.h:3311
Gfx D_09002F18_3AA6B8[]
Gfx D_09003110_3AA8B0[]
Vec2b quizmo_audience_verticalPosOffsets[]
Gfx D_090030D8_3AA878[]
void quizmo_audience_init(EffectInstance *effect)
Gfx D_09002F50_3AA6F0[]
Gfx D_09002FF8_3AA798[]
Vec2b quizmo_audience_horizontalPosOffsets[]
Gfx * quizmo_audience_renderAudienceMember[]
void func_E00A8318(void)
Gfx D_09003068_3AA808[]
QuizmoAudiencePositonOffsets quizmo_audience_positionOffsets[]
void quizmo_audience_update(EffectInstance *effect)
Gfx D_09002FC0_3AA760[]
Gfx D_09003030_3AA7D0[]
Gfx D_09002EE0_3AA680[]
Gfx D_09002F88_3AA728[]
Gfx D_090030A0_3AA840[]
void quizmo_audience_render(EffectInstance *effect)
void quizmo_audience_appendGfx(void *effect)
EffectInstance * quizmo_audience_main(s32 arg0, f32 posX, f32 posY, f32 posZ)
#define ARRAY_COUNT(arr)
Definition macros.h:40
#define VIRTUAL_TO_PHYSICAL(addr)
Definition macros.h:47
void(* appendGfx)(void *)
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