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];