94 FLAG_ZCOMP_ENABLE_TEST = (1 << 0),
95 FLAG_ZCOMP_ENABLE_UPDATE = (1 << 1),
96 FLAG_ZCOMP_BEFORE_TEX = (1 << 2),
97 FLAG_CLIP_DISABLE = (1 << 3),
98 FLAG_TEX1_ENABLE = (1 << 4),
99 FLAG_TEX2_ENABLE = (1 << 5),
100 FLAG_TEXIND_ENABLE = (1 << 6),
101 FLAG_TEX1_PROJ = (1 << 7),
102 FLAG_TEX2_PROJ = (1 << 8),
103 FLAG_TEXIND_PROJ = (1 << 9),
104 FLAG_HIDDEN = (1 << 10),
105 FLAG_DRAW_ORDER = (1 << 11),
106 FLAG_FOG_ENABLE = (1 << 12),
107 FLAG_XY_SAME_SIZE = (1 << 13),
108 FLAG_XY_SAME_SCALE = (1 << 14),
111 enum AlphaFlickType {
114 ALPHAFLICK_SAWTOOTH1,
115 ALPHAFLICK_SAWTOOTH2,
120 enum OptionTypeCommon { TYPE_CMN_NORMAL, TYPE_CMN_CROSS };
132 u8 mIndirectTargetStage;
143 u16 mAlphaFlickCycle;
144 u8 mAlphaFlickRandom;
145 u8 mAlphaFlickAmplitude;
147 f32 mIndTexOffsetMtx[2][3];
165 CMN_FLAG_SYNC_LIFE = (1 << 0),
166 CMN_FLAG_DISABLE_DRAW = (1 << 1),
167 CMN_FLAG_MAX_LIFE = (1 << 2),
169 CMN_FLAG_INHERIT_PTCL_SCALE = (1 << 5),
170 CMN_FLAG_INHERIT_PTCL_ROT = (1 << 6),
172 CMN_FLAG_EMIT_INHERIT_SCALE = (1 << 7),
173 CMN_FLAG_EMIT_INHERIT_ROT = (1 << 8),
175 CMN_FLAG_DISABLE_CALC = (1 << 9),
177 CMN_FLAG_RELOCATED = (1 << 30),
181 EMIT_FLAG_8 = (1 << 8),
182 EMIT_FLAG_15 = (1 << 15),
183 EMIT_FLAG_16 = (1 << 16),
184 EMIT_FLAG_17 = (1 << 17),
185 EMIT_FLAG_18 = (1 << 18),
186 EMIT_FLAG_24 = (1 << 24),
187 EMIT_FLAG_XYZ_SAME_SIZE = (1 << 25),
188 EMIT_FLAG_26 = (1 << 26),
196 s8 inheritChildPtclTranslate;
197 s8 emitEmitIntarvalRandom;
202 u16 emitEmitInterval;
203 s8 inheritPtclTranslate;
204 s8 inheritChildEmitTranslate;
205 f32 commonParam[NUM_PARAMS];
207 s8 velInitVelocityRandom;
208 s8 velMomentumRandom;
209 f32 velPowerRadiationDir;
211 f32 velPowerRandomDir;
212 f32 velPowerNormalDir;
213 f32 velDiffusionEmitterNormal;
215 f32 velDiffusionSpecDir;
228 EmitFormType GetFormType() {
229 return static_cast<EmitFormType
>(emitFlag & 0xFF);
243 return reinterpret_cast<EmitterDesc*
>(
reinterpret_cast<u8*
>(
this) +
246 u8* SkipEmitterDesc() {
247 u8* pPtr =
reinterpret_cast<u8*
>(
this);
252 const char* GetName()
const {
257 return &GetEmitterDesc()->drawSetting;
264 u8* pPtr = SkipEmitterDesc();
268 u8* SkipParticleParameterDesc() {
269 u8* pPtr = SkipEmitterDesc();
270 pPtr += *
reinterpret_cast<ulong*
>(pPtr) +
sizeof(ulong);
278 const u8* pPtr = SkipParticleParameterDesc();
279 u16 numPtclTrack = *(
reinterpret_cast<const u16*
>(pPtr) + 0);
282 u16 NumPtclInitTrack() {
283 const u8* pPtr = SkipParticleParameterDesc();
284 u16 numPtclTrack = *(
reinterpret_cast<const u16*
>(pPtr) + 1);
289 const u8* pPtr = SkipParticleParameterDesc();
290 u16 numPtclTrack = *
reinterpret_cast<const u16*
>(pPtr);
292 pPtr += numPtclTrack * 8 + 4;
293 u16 numEmitTrack = *(
reinterpret_cast<const u16*
>(pPtr) + 0);
297 u16 NumEmitInitTrack() {
298 const u8* pPtr = SkipParticleParameterDesc();
299 u16 numPtclTrack = *
reinterpret_cast<const u16*
>(pPtr);
301 pPtr += numPtclTrack * 8 + 4;
302 u16 numEmitTrack = *(
reinterpret_cast<const u16*
>(pPtr) + 1);
307 u8** GetPtclTrackTbl() {
308 u8* pPtr = SkipParticleParameterDesc();
309 u8** ppTbl =
reinterpret_cast<u8**
>(pPtr + 4);
312 u8** GetEmitTrackTbl() {
313 u8* pPtr = SkipParticleParameterDesc();
314 u16 numPtclTrack = *
reinterpret_cast<const u16*
>(pPtr);
316 pPtr += numPtclTrack * 8 + 4;
317 u8** ppTbl =
reinterpret_cast<u8**
>(pPtr + 4);
321 u8* GetPtclTrack(u16 idx) {
322 u8** ppTbl = GetPtclTrackTbl();
325 u8* GetEmitTrack(u16 idx) {
326 u8** ppTbl = GetEmitTrackTbl();
330 void LocateTracks() {
331 u8* pTail = SkipParticleParameterDesc();
332 pTail += NumPtclTrack() * 8 + 4;
333 pTail += NumEmitTrack() * 8 + 4;
335 ulong* pPtclPtrTbl =
reinterpret_cast<ulong*
>(GetPtclTrackTbl());
336 ulong* pEmitPtrTbl =
reinterpret_cast<ulong*
>(GetEmitTrackTbl());
338 ulong* pPtclSizeTbl =
339 reinterpret_cast<ulong*
>(GetPtclTrackTbl()) + NumPtclTrack();
340 ulong* pEmitSizeTbl =
341 reinterpret_cast<ulong*
>(GetEmitTrackTbl()) + NumEmitTrack();
344 for (i = 0; i < NumPtclTrack(); i++) {
345 pPtclPtrTbl[i] =
reinterpret_cast<ulong
>(pTail);
346 pTail += pPtclSizeTbl[i];
349 for (i = 0; i < NumEmitTrack(); i++) {
350 pEmitPtrTbl[i] =
reinterpret_cast<ulong
>(pTail);
351 pTail += pEmitSizeTbl[i];