SSBM Decomp
Loading...
Searching...
No Matches
psstructs.h
Go to the documentation of this file.
1#ifndef SYSDOLPHIN_BASELIB_PSSTRUCTS_H
2#define SYSDOLPHIN_BASELIB_PSSTRUCTS_H
3
4#include <platform.h>
5
6#include "baselib/forward.h"
7
8#include "baselib/archive.h"
9#include "baselib/jobj.h"
10
11#include <dolphin/gx.h>
12#include <dolphin/gx/GXEnum.h>
13#include <dolphin/mtx.h>
14
15struct _psAppSRT;
16struct HSD_Fog;
17
18typedef struct _psAppSRT HSD_psAppSRT;
19struct _particle;
20
21typedef struct _particle HSD_Particle;
22struct _generator;
23
24typedef struct _generator HSD_Generator;
25
27 Tornado = 1 << 2,
28 TexEdge = 1 << 3,
29 ComTLUT = 1 << 4,
30 MirrorS = 1 << 5,
31 MirrorT = 1 << 6,
32 PrimEnv = 1 << 7,
33 TexInterpNear = 1 << 9,
34 DispTexture = 1 << 10,
35 TexFlipS = 1 << 18,
36 TexFlipT = 1 << 19,
37 Trail = 1 << 20,
38 DirVec = 1 << 21,
39 DispFog = 1 << 24,
40 NoZComp = 1 << 28,
41 DispPoint = 1 << 30,
42 DispLighting = 1 << 31
43};
44
45/* size: 0x1C */
46typedef struct _HSD_PSTexGroup {
47 u32 num; /* 0x0 */
48
49 u32 fmt; /* 0x4 */
50 u32 tlutfmt; /* 0x8 */
51
52 u32 width; /* 0xC */
53 u32 height; /* 0x10 */
54
55 u16 palnum; /* 0x14 */
56 u16 palflag; /* 0x16 */
57
58 u8* texTable[1]; /* 0x18 */
60
61/* size: 0x8 */
62typedef struct _HSD_PSFormGroup {
63 u32 num; /* 0x0 */
64 u8* formTable[1]; /* 0x4 */
66
67/* size: 0x40 */
68typedef struct _HSD_PSCmdList {
69 u16 type; /* 0x0 */
70 u16 texGroup; /* 0x2 */
71
72 u16 genLife; /* 0x4 */
73 u16 life; /* 0x6 */
74
75 u32 kind; /* 0x8 */
76
77 float grav; /* 0xC */
78 float fric; /* 0x10 */
79
80 float vx; /* 0x14 */
81 float vy; /* 0x18 */
82 float vz; /* 0x1C */
83
84 float radius; /* 0x20 */
85 float angle; /* 0x24 */
86 float random; /* 0x28 */
87 float size; /* 0x2C */
88
89 float param1; /* 0x30 */
90 float param2; /* 0x34 */
91 float param3; /* 0x38 */
92
93 u8 cmdList[1]; /* 0x3C */
95
96struct _particle;
97
98struct _psAppSRT {
99 struct _psAppSRT* next; /* 0x0 */
100
101 struct _generator* gp; /* 0x4 */
102
103 Vec3 tra; /* 0x8 */
104 Quaternion rot; /* 0x14 */
105 Vec3 sca; /* 0x24 */
106
107 u8 status; /* 0x30 */
108
109 u8 frameNum; /* 0x31 */
110 u16 usedCount; /* 0x32 */
111
112 Mtx mmtx; /* 0x34 */
113 float ssx; /* 0x64 */
114 float ssy; /* 0x68 */
115
116 void (*freefunc)(struct _psAppSRT* appSrt); /* 0x6C */
117
118 u16 idnum; /* 0x70 */
119 u8 billboard; /* 0x72 */
120 u8 dummy; /* 0x73 */
121};
122
123/* size: 0x94 */
124struct _particle {
125 HSD_Particle* next; /* 0x0 */
126
127 u32 kind; /* 0x4 */
128
129 u8 bank; /* 0x8 */
130 u8 texGroup; /* 0x9 */
131
132 u8 poseNum; /* 0xA */
133 u8 palNum; /* 0xB */
134
136
137 u16 primColCount; /* 0xE */
138 u16 envColCount; /* 0x10 */
139 GXColor primCol; /* 0x12 */
140 GXColor envCol; /* 0x16 */
141
143
145
146 u8 linkNo; /* 0x1D */
147
149
154
156
157 float vx; /* 0x2C */
158 float vy; /* 0x30 */
159 float vz; /* 0x34 */
160
161 float grav; /* 0x38 */
162 float fric; /* 0x3C */
163
164 float x; /* 0x40 */
165 float y; /* 0x44 */
166 float z; /* 0x48 */
167
168 float size; /* 0x4C */
169 float rotate; /* 0x50 */
170
171 u16 aCmpCount; /* 0x54 */
172 u8 aCmpMode; /* 0x56 */
173 u8 aCmpParam1; /* 0x57 */
174 u8 aCmpParam2; /* 0x58 */
175
176 u8 pJObjOfs; /* 0x59 */
177
178 u16 matColCount; /* 0x5A */
179 u16 ambColCount; /* 0x5C */
181
184
185 u16 primColRemain; /* 0x68 */
186 u16 envColRemain; /* 0x6A */
189
190 u16 matColRemain; /* 0x74 */
191 u16 ambColRemain; /* 0x76 */
192
193 u16 aCmpRemain; /* 0x78 */
194 u8 aCmpParam1Target; /* 0x7A */
195 u8 aCmpParam2Target; /* 0x7B */
196
197 u8 matRGB; /* 0x7C */
198 u8 matA; /* 0x7D */
199
200 u8 ambRGB; /* 0x7E */
201 u8 ambA; /* 0x7F */
202
203 u8 matRGBTarget; /* 0x80 */
204 u8 matATarget; /* 0x81 */
205 u8 ambRGBTarget; /* 0x82 */
206 u8 ambATarget; /* 0x83 */
207
208 float trail; /* 0x84 */
209
210 struct _generator* gen; /* 0x88 */
212 float* userdata;
214};
215
216/* size: 0xC */
217typedef struct _PSUserFunc {
218 int (*hookCreate)(HSD_Particle* part); /* 0x0 */
219 int (*hookDelete)(HSD_Particle* part); /* 0x4 */
220 int (*setUserData)(HSD_Particle* part, u8 unknown1,
221 float unknown2); /* 0x8 */
223
224typedef struct _auxDisc {
227} auxDisc;
228
229typedef struct _auxLine {
230 f32 x2;
231 f32 y2;
232 f32 z2;
233} auxLine;
234
235typedef struct _auxTornado {
236 f32 vel;
237} auxTornado;
238
239typedef struct _auxRect {
240 f32 x;
241 f32 y;
242 f32 z;
243 f32 xx;
244 f32 xy;
245 f32 xz;
246 f32 yx;
247 f32 yy;
248 f32 yz;
249 f32 zx;
250 f32 zy;
251 f32 zz;
252 u16 flag;
253} auxRect;
254
255typedef struct _auxCone {
259} auxCone;
260
261typedef struct _auxSphere {
262 f32 speed;
267} auxSphere;
268
269typedef struct _generator {
271 u32 kind; // 0x4
272 f32 random; // 0x8
273 f32 count; // 0xC
274 HSD_JObj* jobj; // 0x10
275 u16 genLife; // 0x14
276 u16 type; // 0x16
277 u8 bank; // 0x18
278 u8 linkNo; // 0x19
279 u8 texGroup; // x1A
280 u8 dummy; // 0x1B
281 u16 idnum; // 0x1C
282 u16 life; // 0x1E
283 u8* cmdList; // 0x20
284 f32 x; // 0x24
285 f32 y; // 0x28
286 f32 z; // 0x2C
287 f32 vx; // 0x30
288 f32 vy; // 0x34
289 f32 vz; // 0x38
290 f32 grav; // 0x3C
291 f32 fric; // 0x40
292 f32 size; // 0x44
293 f32 radius; // 0x48
294 f32 angle; // 0x4C
295 u32 numChild; // 0x50
299 union {
306 } aux; // 0x60
307} _generator;
308
309extern u32* ptclref[64];
310
311extern int psNumTexGroup[64];
313
315
316extern int psNumCmdList[64];
317extern HSD_PSCmdList** psCmdListArray[64];
318
319extern u16 numActiveParticles;
320extern u16 numPeakParticles;
321
322extern int (**psCallback)(HSD_Particle* part);
323
324#define PS_TEXDIRECTION
325#ifdef PS_TEXDIRECTION
326extern int texc[4][4];
327extern int td;
328#endif
329
330#ifndef _NFUNCPROTO
331void psSetFog(struct HSD_Fog* fog);
332
333void psRemoveFog(void);
334#endif
335
336static inline void setBlendMode(int blendmode);
337
338static inline void setupChanCtrl(struct _particle* pp);
339static inline void setupChanReg(struct _particle* pp);
340static inline void getClrTrail(struct _particle* pp, GXColor* col);
341static inline void setupTevReg(struct _particle* pp);
342static inline void psSetCurrentMtx(GXPosNrmMtx idx);
343static inline struct _particle* psDispSubPoint(struct _particle* pp);
344static inline struct _particle* psDispSubPointTrail(struct _particle* pp);
345static inline void psDispSubMakePolygon(struct _particle* pp, u8* texform,
346 float x, float y, float z, float ppvx,
347 float ppvy, float ppvz, float x0,
348 float y0, float z0, float x1, float y1,
349 float z1);
350
351static inline void psDispSub(struct _particle* pp, u8* texform);
352
353void psInitDataBank(int bank, int* cmdBank, int* texBank, u32* ref,
354 int* formBank);
355
356void psInitParticle(int num);
357
359
361 u32 kind, u16 texGroup, u8* list, int life,
362 float x, float y, float z, float vx,
363 float vy, float vz, float size, float grav,
364 float fric, int palflag,
365 struct _generator* gp, int flgInterpret);
366
368 int id, int flgInterpret);
369
371 u8* list, int life, float x, float y, float z,
372 float vx, float vy, float vz, float size,
373 float grav, float fric, int palflag,
374 struct _generator* gp);
375
377 float py, float pz, float vx, float vy,
378 float vz);
379
382
385
386void psSetPointJObj(int no, HSD_JObj* jobj);
388
390
392
395
396void psAddOffsetAll(float xofs, float yofs, float zofs);
397
400
402
403void psSetUserFunc(struct _generator* gp, HSD_PSUserFunc* userfunc);
404
405static inline void psRemoveBillboardCamera(void);
406
407#endif
u8 x0
Definition dbbonus.c:18
UnkFlagStruct x1
Definition dbbonus.c:19
static void callback(HSD_GObj *gobj)
Definition ftDk_SpecialLw.c:88
static struct _particle * psDispSubPointTrail(struct _particle *pp)
void psRemoveParticle(void)
void psRestartFamily(u16 idnum, int linkNo)
HSD_Particle * psGenerateParticleIDN(int linkNo, int bank, int id)
static void setupChanCtrl(struct _particle *pp)
void psSetUserFunc(struct _generator *gp, HSD_PSUserFunc *userfunc)
int psNumTexGroup[64]
HSD_ParticleKind
Definition psstructs.h:26
@ TexEdge
Definition psstructs.h:28
@ DispLighting
Definition psstructs.h:42
@ DispFog
Definition psstructs.h:39
@ Tornado
Definition psstructs.h:27
@ DirVec
Definition psstructs.h:38
@ TexInterpNear
Definition psstructs.h:33
@ Trail
Definition psstructs.h:37
@ MirrorS
Definition psstructs.h:30
@ DispTexture
Definition psstructs.h:34
@ MirrorT
Definition psstructs.h:31
@ DispPoint
Definition psstructs.h:41
@ PrimEnv
Definition psstructs.h:32
@ TexFlipT
Definition psstructs.h:36
@ ComTLUT
Definition psstructs.h:29
@ NoZComp
Definition psstructs.h:40
@ TexFlipS
Definition psstructs.h:35
static void setupChanReg(struct _particle *pp)
static struct _particle * psDispSubPoint(struct _particle *pp)
void psSetFog(struct HSD_Fog *fog)
static void psDispSub(struct _particle *pp, u8 *texform)
void psInitDataBank(int bank, int *cmdBank, int *texBank, u32 *ref, int *formBank)
void psSetCallback(int(**callback)(HSD_Particle *part))
void psSetPointJObjNodup(HSD_JObj *jobj, int no)
void psKillParticle(HSD_Particle *pp)
static void psRemoveBillboardCamera(void)
u16 numActiveParticles
static void psDispSubMakePolygon(struct _particle *pp, u8 *texform, float x, float y, float z, float ppvx, float ppvy, float ppvz, float x0, float y0, float z0, float x1, float y1, float z1)
HSD_Particle * psGenerateParticleID(int linkNo, int bank, int id)
void psAddOffsetAll(float xofs, float yofs, float zofs)
int texc[4][4]
u16 numPeakParticles
HSD_PSFormGroup ** psFormGroupArray[64]
HSD_PSTexGroup ** psTexGroupArray[64]
static void setBlendMode(int blendmode)
HSD_Particle * psGenerateParticle0(HSD_Particle *p, int linkNo, int bank, u32 kind, u16 texGroup, u8 *list, int life, float x, float y, float z, float vx, float vy, float vz, float size, float grav, float fric, int palflag, struct _generator *gp, int flgInterpret)
static void setupTevReg(struct _particle *pp)
HSD_Particle * psGenerateParticleID0(HSD_Particle *p, int linkNo, int bank, int id, int flgInterpret)
void psKillGeneratorChild(struct _generator *gp)
u32 * ptclref[64]
HSD_Particle * psGenerateParticle(int linkNo, int bank, u32 kind, u16 texGroup, u8 *list, int life, float x, float y, float z, float vx, float vy, float vz, float size, float grav, float fric, int palflag, struct _generator *gp)
HSD_PSCmdList ** psCmdListArray[64]
void psSetPointJObj(int no, HSD_JObj *jobj)
void psPauseFamily(u16 idnum, int linkNo)
void psKillFamily(u16 idnum, int linkNo)
void psClearPointJObj(void)
static void psSetCurrentMtx(GXPosNrmMtx idx)
void psDeletePntJObjwithParticle(HSD_Particle *pp)
void psInitParticle(int num)
void psRemoveFog(void)
int td
int(** psCallback)(HSD_Particle *part)
static void getClrTrail(struct _particle *pp, GXColor *col)
HSD_Particle * psGenerateParticleIDPV(int linkNo, int bank, int id, float px, float py, float pz, float vx, float vy, float vz)
int psNumCmdList[64]
void psKillAllParticle(void)
Definition fog.h:21
Definition jobj.h:107
Definition psstructs.h:68
u32 kind
Definition psstructs.h:75
float fric
Definition psstructs.h:78
u16 genLife
Definition psstructs.h:72
float vy
Definition psstructs.h:81
float param2
Definition psstructs.h:90
float param1
Definition psstructs.h:89
float size
Definition psstructs.h:87
float param3
Definition psstructs.h:91
u16 type
Definition psstructs.h:69
float vz
Definition psstructs.h:82
u16 life
Definition psstructs.h:73
float grav
Definition psstructs.h:77
float angle
Definition psstructs.h:85
float radius
Definition psstructs.h:84
u16 texGroup
Definition psstructs.h:70
float random
Definition psstructs.h:86
float vx
Definition psstructs.h:80
Definition psstructs.h:62
u32 num
Definition psstructs.h:63
Definition psstructs.h:46
u16 palnum
Definition psstructs.h:55
u32 num
Definition psstructs.h:47
u32 fmt
Definition psstructs.h:49
u32 width
Definition psstructs.h:52
u16 palflag
Definition psstructs.h:56
u32 height
Definition psstructs.h:53
u32 tlutfmt
Definition psstructs.h:50
Definition psstructs.h:217
Definition psstructs.h:269
u8 dummy
Definition psstructs.h:280
u8 * cmdList
Definition psstructs.h:283
HSD_psAppSRT * appsrt
Definition psstructs.h:296
HSD_Generator * next
Definition psstructs.h:270
f32 fric
Definition psstructs.h:291
f32 size
Definition psstructs.h:292
u32 numChild
Definition psstructs.h:295
f32 count
Definition psstructs.h:273
u16 idnum
Definition psstructs.h:281
u16 type
Definition psstructs.h:276
u8 bank
Definition psstructs.h:277
f32 vy
Definition psstructs.h:288
u8 linkNo
Definition psstructs.h:278
f32 vx
Definition psstructs.h:287
u8 texGroup
Definition psstructs.h:279
u16 genLife
Definition psstructs.h:275
f32 random
Definition psstructs.h:272
auxRect rect
Definition psstructs.h:303
f32 radius
Definition psstructs.h:293
u16 life
Definition psstructs.h:282
f32 grav
Definition psstructs.h:290
auxSphere sphere
Definition psstructs.h:305
auxCone cone
Definition psstructs.h:304
union _generator::@326 aux
f32 x
Definition psstructs.h:284
HSD_JObj * jobj
Definition psstructs.h:274
HSD_PSUserFunc * userfunc
Definition psstructs.h:297
f32 vz
Definition psstructs.h:289
auxLine line
Definition psstructs.h:301
f32 z
Definition psstructs.h:286
f32 angle
Definition psstructs.h:294
u32 kind
Definition psstructs.h:271
auxTornado tornado
Definition psstructs.h:302
f32 y
Definition psstructs.h:285
int(* callback)(HSD_Generator *part)
Definition psstructs.h:298
auxDisc disc
Definition psstructs.h:300
Definition psstructs.h:124
u16 envColRemain
Definition psstructs.h:186
float x
Definition psstructs.h:164
u16 ambColCount
Definition psstructs.h:179
u16 cmdLoopPtr
Definition psstructs.h:153
u8 ambRGBTarget
Definition psstructs.h:205
GXColor primCol
Definition psstructs.h:139
float vz
Definition psstructs.h:159
u16 ambColRemain
Definition psstructs.h:191
u8 aCmpParam1Target
Definition psstructs.h:194
float fric
Definition psstructs.h:162
u8 poseNum
Definition psstructs.h:132
u8 ambRGB
Definition psstructs.h:200
u8 matRGB
Definition psstructs.h:197
u8 aCmpParam2Target
Definition psstructs.h:195
GXColor envCol
Definition psstructs.h:140
u8 bank
Definition psstructs.h:129
u16 primColCount
Definition psstructs.h:137
u16 idnum
Definition psstructs.h:148
u16 matColCount
Definition psstructs.h:178
float size
Definition psstructs.h:168
u8 ambATarget
Definition psstructs.h:206
u8 linkNo
Definition psstructs.h:146
GXColor primColTarget
Definition psstructs.h:187
float z
Definition psstructs.h:166
float rotateTarget
Definition psstructs.h:183
int(* callback)(HSD_Particle *part)
Definition psstructs.h:213
u8 ambA
Definition psstructs.h:201
u16 cmdWait
Definition psstructs.h:142
u8 pJObjOfs
Definition psstructs.h:176
float grav
Definition psstructs.h:161
u16 cmdMarkPtr
Definition psstructs.h:152
u16 cmdPtr
Definition psstructs.h:151
float rotate
Definition psstructs.h:169
struct _psAppSRT * appsrt
Definition psstructs.h:211
u8 matA
Definition psstructs.h:198
u16 matColRemain
Definition psstructs.h:190
float sizeTarget
Definition psstructs.h:182
u32 kind
Definition psstructs.h:127
float vx
Definition psstructs.h:157
u8 texGroup
Definition psstructs.h:130
HSD_Particle * next
Definition psstructs.h:125
u16 primColRemain
Definition psstructs.h:185
u8 aCmpMode
Definition psstructs.h:172
u16 aCmpCount
Definition psstructs.h:171
u8 * cmdList
Definition psstructs.h:150
u16 envColCount
Definition psstructs.h:138
struct _generator * gen
Definition psstructs.h:210
GXColor envColTarget
Definition psstructs.h:188
float * userdata
Definition psstructs.h:212
u8 matATarget
Definition psstructs.h:204
float vy
Definition psstructs.h:158
u16 rotateCount
Definition psstructs.h:180
u8 palNum
Definition psstructs.h:133
u16 sizeCount
Definition psstructs.h:135
u8 matRGBTarget
Definition psstructs.h:203
u8 aCmpParam1
Definition psstructs.h:173
u16 aCmpRemain
Definition psstructs.h:193
u8 aCmpParam2
Definition psstructs.h:174
float trail
Definition psstructs.h:208
float y
Definition psstructs.h:165
u16 life
Definition psstructs.h:155
u8 loopCount
Definition psstructs.h:144
Definition psstructs.h:98
float ssx
Definition psstructs.h:113
void(* freefunc)(struct _psAppSRT *appSrt)
Definition psstructs.h:116
u8 dummy
Definition psstructs.h:120
struct _psAppSRT * next
Definition psstructs.h:99
u8 billboard
Definition psstructs.h:119
struct _generator * gp
Definition psstructs.h:101
u8 status
Definition psstructs.h:107
u16 idnum
Definition psstructs.h:118
Vec3 tra
Definition psstructs.h:103
float ssy
Definition psstructs.h:114
Vec3 sca
Definition psstructs.h:105
u16 usedCount
Definition psstructs.h:110
Quaternion rot
Definition psstructs.h:104
u8 frameNum
Definition psstructs.h:109
Mtx mmtx
Definition psstructs.h:112
Definition psstructs.h:255
f32 maxAngle
Definition psstructs.h:257
f32 minAngle
Definition psstructs.h:256
f32 height
Definition psstructs.h:258
Definition psstructs.h:224
f32 maxAngle
Definition psstructs.h:226
f32 minAngle
Definition psstructs.h:225
Definition psstructs.h:229
f32 x2
Definition psstructs.h:230
f32 y2
Definition psstructs.h:231
f32 z2
Definition psstructs.h:232
Definition psstructs.h:239
f32 xz
Definition psstructs.h:245
f32 yz
Definition psstructs.h:248
f32 x
Definition psstructs.h:240
f32 yy
Definition psstructs.h:247
f32 xy
Definition psstructs.h:244
f32 zx
Definition psstructs.h:249
u16 flag
Definition psstructs.h:252
f32 y
Definition psstructs.h:241
f32 zy
Definition psstructs.h:250
f32 z
Definition psstructs.h:242
f32 yx
Definition psstructs.h:246
f32 xx
Definition psstructs.h:243
f32 zz
Definition psstructs.h:251
Definition psstructs.h:261
f32 lonMid
Definition psstructs.h:265
f32 lonRange
Definition psstructs.h:266
f32 latMid
Definition psstructs.h:263
f32 speed
Definition psstructs.h:262
f32 latRange
Definition psstructs.h:264
Definition psstructs.h:235
f32 vel
Definition psstructs.h:236