From f7eed3278f25b57c70e875c3f7354ba6388dfb24 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Thu, 23 Dec 2021 21:02:42 -0800 Subject: [PATCH] a few more JPAResource functions --- .../JPAResource/__ct__11JPAResourceFv.s | 29 ----- ...eFP18JPAEmitterWorkDataP14JPABaseEmitter.s | 61 ----------- include/JSystem/JParticle/JPABaseShape.h | 103 ++++++++++++++++++ include/JSystem/JParticle/JPAParticle.h | 1 + libs/JSystem/JParticle/JPABaseShape.cpp | 99 ----------------- libs/JSystem/JParticle/JPAResource.cpp | 56 +++++++--- 6 files changed, 146 insertions(+), 203 deletions(-) delete mode 100644 asm/JSystem/JParticle/JPAResource/__ct__11JPAResourceFv.s delete mode 100644 asm/JSystem/JParticle/JPAResource/draw__11JPAResourceFP18JPAEmitterWorkDataP14JPABaseEmitter.s diff --git a/asm/JSystem/JParticle/JPAResource/__ct__11JPAResourceFv.s b/asm/JSystem/JParticle/JPAResource/__ct__11JPAResourceFv.s deleted file mode 100644 index f4f83d36c86..00000000000 --- a/asm/JSystem/JParticle/JPAResource/__ct__11JPAResourceFv.s +++ /dev/null @@ -1,29 +0,0 @@ -lbl_80274010: -/* 80274010 38 00 00 00 */ li r0, 0 -/* 80274014 90 03 00 08 */ stw r0, 8(r3) -/* 80274018 90 03 00 04 */ stw r0, 4(r3) -/* 8027401C 90 03 00 00 */ stw r0, 0(r3) -/* 80274020 90 03 00 18 */ stw r0, 0x18(r3) -/* 80274024 90 03 00 14 */ stw r0, 0x14(r3) -/* 80274028 90 03 00 10 */ stw r0, 0x10(r3) -/* 8027402C 90 03 00 0C */ stw r0, 0xc(r3) -/* 80274030 90 03 00 1C */ stw r0, 0x1c(r3) -/* 80274034 90 03 00 20 */ stw r0, 0x20(r3) -/* 80274038 90 03 00 24 */ stw r0, 0x24(r3) -/* 8027403C 90 03 00 28 */ stw r0, 0x28(r3) -/* 80274040 90 03 00 2C */ stw r0, 0x2c(r3) -/* 80274044 90 03 00 30 */ stw r0, 0x30(r3) -/* 80274048 90 03 00 34 */ stw r0, 0x34(r3) -/* 8027404C 90 03 00 38 */ stw r0, 0x38(r3) -/* 80274050 98 03 00 47 */ stb r0, 0x47(r3) -/* 80274054 98 03 00 46 */ stb r0, 0x46(r3) -/* 80274058 98 03 00 45 */ stb r0, 0x45(r3) -/* 8027405C 98 03 00 44 */ stb r0, 0x44(r3) -/* 80274060 98 03 00 43 */ stb r0, 0x43(r3) -/* 80274064 98 03 00 42 */ stb r0, 0x42(r3) -/* 80274068 98 03 00 41 */ stb r0, 0x41(r3) -/* 8027406C 98 03 00 40 */ stb r0, 0x40(r3) -/* 80274070 98 03 00 3F */ stb r0, 0x3f(r3) -/* 80274074 98 03 00 3E */ stb r0, 0x3e(r3) -/* 80274078 B0 03 00 3C */ sth r0, 0x3c(r3) -/* 8027407C 4E 80 00 20 */ blr diff --git a/asm/JSystem/JParticle/JPAResource/draw__11JPAResourceFP18JPAEmitterWorkDataP14JPABaseEmitter.s b/asm/JSystem/JParticle/JPAResource/draw__11JPAResourceFP18JPAEmitterWorkDataP14JPABaseEmitter.s deleted file mode 100644 index 488b16e4d81..00000000000 --- a/asm/JSystem/JParticle/JPAResource/draw__11JPAResourceFP18JPAEmitterWorkDataP14JPABaseEmitter.s +++ /dev/null @@ -1,61 +0,0 @@ -lbl_80275A94: -/* 80275A94 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 80275A98 7C 08 02 A6 */ mflr r0 -/* 80275A9C 90 01 00 24 */ stw r0, 0x24(r1) -/* 80275AA0 39 61 00 20 */ addi r11, r1, 0x20 -/* 80275AA4 48 0E C7 35 */ bl _savegpr_28 -/* 80275AA8 7C 7C 1B 78 */ mr r28, r3 -/* 80275AAC 7C 9D 23 78 */ mr r29, r4 -/* 80275AB0 7C BE 2B 78 */ mr r30, r5 -/* 80275AB4 93 C4 00 00 */ stw r30, 0(r4) -/* 80275AB8 93 84 00 04 */ stw r28, 4(r4) -/* 80275ABC 38 00 00 00 */ li r0, 0 -/* 80275AC0 98 04 02 16 */ stb r0, 0x216(r4) -/* 80275AC4 48 00 0F 49 */ bl calcWorkData_d__11JPAResourceFP18JPAEmitterWorkData -/* 80275AC8 80 7C 00 1C */ lwz r3, 0x1c(r28) -/* 80275ACC 7F A4 EB 78 */ mr r4, r29 -/* 80275AD0 48 00 4D 19 */ bl setGX__12JPABaseShapeCFP18JPAEmitterWorkData -/* 80275AD4 3B E0 00 01 */ li r31, 1 -/* 80275AD8 48 00 00 78 */ b lbl_80275B50 -lbl_80275ADC: -/* 80275ADC 88 7D 02 16 */ lbz r3, 0x216(r29) -/* 80275AE0 38 03 00 01 */ addi r0, r3, 1 -/* 80275AE4 98 1D 02 16 */ stb r0, 0x216(r29) -/* 80275AE8 80 7C 00 1C */ lwz r3, 0x1c(r28) -/* 80275AEC 80 63 00 00 */ lwz r3, 0(r3) -/* 80275AF0 80 03 00 08 */ lwz r0, 8(r3) -/* 80275AF4 54 00 02 53 */ rlwinm. r0, r0, 0, 9, 9 -/* 80275AF8 41 82 00 1C */ beq lbl_80275B14 -/* 80275AFC 80 1C 00 24 */ lwz r0, 0x24(r28) -/* 80275B00 28 00 00 00 */ cmplwi r0, 0 -/* 80275B04 41 82 00 10 */ beq lbl_80275B14 -/* 80275B08 7F 83 E3 78 */ mr r3, r28 -/* 80275B0C 7F A4 EB 78 */ mr r4, r29 -/* 80275B10 48 00 03 A1 */ bl drawC__11JPAResourceFP18JPAEmitterWorkData -lbl_80275B14: -/* 80275B14 7F 83 E3 78 */ mr r3, r28 -/* 80275B18 7F A4 EB 78 */ mr r4, r29 -/* 80275B1C 48 00 00 59 */ bl drawP__11JPAResourceFP18JPAEmitterWorkData -/* 80275B20 80 7C 00 1C */ lwz r3, 0x1c(r28) -/* 80275B24 80 63 00 00 */ lwz r3, 0(r3) -/* 80275B28 80 03 00 08 */ lwz r0, 8(r3) -/* 80275B2C 54 00 02 53 */ rlwinm. r0, r0, 0, 9, 9 -/* 80275B30 40 82 00 1C */ bne lbl_80275B4C -/* 80275B34 80 1C 00 24 */ lwz r0, 0x24(r28) -/* 80275B38 28 00 00 00 */ cmplwi r0, 0 -/* 80275B3C 41 82 00 10 */ beq lbl_80275B4C -/* 80275B40 7F 83 E3 78 */ mr r3, r28 -/* 80275B44 7F A4 EB 78 */ mr r4, r29 -/* 80275B48 48 00 03 69 */ bl drawC__11JPAResourceFP18JPAEmitterWorkData -lbl_80275B4C: -/* 80275B4C 3B FF 00 01 */ addi r31, r31, 1 -lbl_80275B50: -/* 80275B50 88 1E 01 10 */ lbz r0, 0x110(r30) -/* 80275B54 7C 1F 00 00 */ cmpw r31, r0 -/* 80275B58 40 81 FF 84 */ ble lbl_80275ADC -/* 80275B5C 39 61 00 20 */ addi r11, r1, 0x20 -/* 80275B60 48 0E C6 C5 */ bl _restgpr_28 -/* 80275B64 80 01 00 24 */ lwz r0, 0x24(r1) -/* 80275B68 7C 08 03 A6 */ mtlr r0 -/* 80275B6C 38 21 00 20 */ addi r1, r1, 0x20 -/* 80275B70 4E 80 00 20 */ blr diff --git a/include/JSystem/JParticle/JPABaseShape.h b/include/JSystem/JParticle/JPABaseShape.h index 0e7192f0839..3a38c81bd77 100644 --- a/include/JSystem/JParticle/JPABaseShape.h +++ b/include/JSystem/JParticle/JPABaseShape.h @@ -2,5 +2,108 @@ #define JPABASESHAPE_H #include "dolphin/types.h" +#include "dolphin/gx/GX.h" + +class JPAEmitterWorkData; +class JKRHeap; + +struct JPABaseShapeData { + // Common header. + /* 0x00 */ u8 mMagic[4]; + /* 0x04 */ u32 mSize; + + /* 0x08 */ u32 mFlags; + /* 0x0C */ s16 mClrPrmAnmOffset; + /* 0x0E */ s16 mClrEnvAnmOffset; + /* 0x10 */ f32 mBaseSizeX; + /* 0x14 */ f32 mBaseSizeY; + /* 0x18 */ u16 mBlendModeCfg; + /* 0x1A */ u8 mAlphaCompareCfg; + /* 0x1B */ u8 mAlphaRef0; + /* 0x1C */ u8 mAlphaRef1; + /* 0x1D */ u8 mZModeCfg; + /* 0x1E */ u8 mTexFlg; + /* 0x1F */ u8 mTexAnmNum; + /* 0x20 */ u8 mTexIdx; + /* 0x21 */ u8 mClrFlg; + /* 0x22 */ u8 mClrPrmKeyNum; + /* 0x23 */ u8 mClrEnvKeyNum; + /* 0x24 */ s16 mClrAnmFrmMax; + /* 0x26 */ GXColor mClrPrm; + /* 0x2A */ GXColor mClrEnv; + /* 0x2E */ u8 mAnmRndm; + /* 0x2F */ u8 mClrAnmRndmMask; + /* 0x30 */ u8 mTexAnmRndmMask; +}; + +struct JPABaseShape { +public: + /* 8027A6DC */ JPABaseShape(u8 const*, JKRHeap*); + /* 8027A7E8 */ void setGX(JPAEmitterWorkData*) const; + + static GXBlendMode st_bm[3]; + static GXBlendFactor st_bf[10]; + static GXLogicOp st_lo[16]; + static GXCompare st_c[8]; + static GXAlphaOp st_ao[4]; + static GXTevColorArg st_ca[6][4]; + static GXTevAlphaArg st_aa[2][4]; + + GXBlendMode getBlendMode() const { return st_bm[mpData->mBlendModeCfg & 0x03]; } + GXBlendFactor getBlendSrc() const { return st_bf[(mpData->mBlendModeCfg >> 2) & 0x0F]; } + GXBlendFactor getBlendDst() const { return st_bf[(mpData->mBlendModeCfg >> 6) & 0x0F]; } + GXLogicOp getLogicOp() const { return st_lo[(mpData->mBlendModeCfg >> 10) & 0x0F]; } + GXBool getZCompLoc() const { return (GXBool)((mpData->mZModeCfg >> 5) & 0x01); } + + GXBool getZEnable() const { return (GXBool)(mpData->mZModeCfg & 0x01); } + GXCompare getZCmp() const { return st_c[(mpData->mZModeCfg >> 1) & 0x07]; } + GXBool getZUpd() const { return (GXBool)((mpData->mZModeCfg >> 4) & 0x01); } + + GXCompare getAlphaCmp0() const { return st_c[mpData->mAlphaCompareCfg & 0x07]; } + u8 getAlphaRef0() const { return mpData->mAlphaRef0; } + GXAlphaOp getAlphaOp() const { return st_ao[(mpData->mAlphaCompareCfg >> 3) & 0x03]; } + GXCompare getAlphaCmp1() const { return st_c[(mpData->mAlphaCompareCfg >> 5) & 0x07]; } + u8 getAlphaRef1() const { return mpData->mAlphaRef1; } + + const GXTevColorArg* getTevColorArg() const { return st_ca[(mpData->mFlags >> 0x0F) & 0x07]; } + const GXTevAlphaArg* getTevAlphaArg() const { return st_aa[(mpData->mFlags >> 0x12) & 0x01]; } + + u32 getType() const { return (mpData->mFlags >> 0) & 0x0F; } + u32 getDirType() const { return (mpData->mFlags >> 4) & 0x07; } + u32 getRotType() const { return (mpData->mFlags >> 7) & 0x07; } + u32 getBasePlaneType() const { return (mpData->mFlags >> 10) & 0x07; } + u32 getTilingS() const { return (mpData->mFlags >> 25) & 0x01; } + u32 getTilingT() const { return (mpData->mFlags >> 26) & 0x01; } + bool isGlblClrAnm() const { return !!(mpData->mFlags & 0x00001000); } + bool isGlblTexAnm() const { return !!(mpData->mFlags & 0x00004000); } + bool isPrjTex() const { return !!(mpData->mFlags & 0x00100000); } + bool isDrawFwdAhead() const { return !!(mpData->mFlags & 0x00200000); } + bool isDrawPrntAhead() const { return !!(mpData->mFlags & 0x00400000); } + bool isClipOn() const { return !!(mpData->mFlags & 0x00800000); } + bool isTexCrdAnm() const { return !!(mpData->mFlags & 0x01000000); } + bool isNoDrawParent() const { return !!(mpData->mFlags & 0x08000000); } + bool isNoDrawChild() const { return !!(mpData->mFlags & 0x10000000); } + + bool isPrmAnm() const { return !!(mpData->mClrFlg & 0x02); } + bool isEnvAnm() const { return !!(mpData->mClrFlg & 0x08); } + u8 getClrAnmType() const { return (mpData->mClrFlg >> 4) & 0x07; } + s16 getClrAnmMaxFrm() const { return mpData->mClrAnmFrmMax; } + void getPrmClr(s16 idx, GXColor* dst) { *dst = mpPrmClrAnmTbl[idx]; } + void getEnvClr(s16 idx, GXColor* dst) { *dst = mpEnvClrAnmTbl[idx]; } + + bool isTexAnm() const { return !!(mpData->mTexFlg & 0x01); } + u8 getTexAnmType() const { return (mpData->mTexFlg >> 2) & 0x07; } + u32 getTexIdx() const { return mpData->mTexIdx; } + + f32 getBaseSizeX() const { return mpData->mBaseSizeX; } + f32 getBaseSizeY() const { return mpData->mBaseSizeY; } + +public: + const JPABaseShapeData* mpData; + const void* mpTexCrdMtxAnmTbl; + const u8* mpTexIdxAnimTbl; + GXColor* mpPrmClrAnmTbl; + GXColor* mpEnvClrAnmTbl; +}; #endif /* JPABASESHAPE_H */ diff --git a/include/JSystem/JParticle/JPAParticle.h b/include/JSystem/JParticle/JPAParticle.h index ca6dd4d926e..7b72bbe1c77 100644 --- a/include/JSystem/JParticle/JPAParticle.h +++ b/include/JSystem/JParticle/JPAParticle.h @@ -194,6 +194,7 @@ public: bool checkStatus(u32 status) { return !!(mStatus & status); } u8 getResourceManagerID() const { return mResMgrID; } u8 getGroupID() const { return mGroupID; } + u8 getDrawTimes() const { return mDrawTimes; } public: /* 0x00 */ Vec mLocalScl; diff --git a/libs/JSystem/JParticle/JPABaseShape.cpp b/libs/JSystem/JParticle/JPABaseShape.cpp index 12c7c3128eb..9eaabc93eaa 100644 --- a/libs/JSystem/JParticle/JPABaseShape.cpp +++ b/libs/JSystem/JParticle/JPABaseShape.cpp @@ -20,105 +20,6 @@ struct JKRHeap { /* 802CE474 */ void alloc(u32, int, JKRHeap*); }; -struct JPABaseShapeData { - // Common header. - /* 0x00 */ u8 mMagic[4]; - /* 0x04 */ u32 mSize; - - /* 0x08 */ u32 mFlags; - /* 0x0C */ s16 mClrPrmAnmOffset; - /* 0x0E */ s16 mClrEnvAnmOffset; - /* 0x10 */ f32 mBaseSizeX; - /* 0x14 */ f32 mBaseSizeY; - /* 0x18 */ u16 mBlendModeCfg; - /* 0x1A */ u8 mAlphaCompareCfg; - /* 0x1B */ u8 mAlphaRef0; - /* 0x1C */ u8 mAlphaRef1; - /* 0x1D */ u8 mZModeCfg; - /* 0x1E */ u8 mTexFlg; - /* 0x1F */ u8 mTexAnmNum; - /* 0x20 */ u8 mTexIdx; - /* 0x21 */ u8 mClrFlg; - /* 0x22 */ u8 mClrPrmKeyNum; - /* 0x23 */ u8 mClrEnvKeyNum; - /* 0x24 */ s16 mClrAnmFrmMax; - /* 0x26 */ GXColor mClrPrm; - /* 0x2A */ GXColor mClrEnv; - /* 0x2E */ u8 mAnmRndm; - /* 0x2F */ u8 mClrAnmRndmMask; - /* 0x30 */ u8 mTexAnmRndmMask; -}; - -struct JPABaseShape { -public: - /* 8027A6DC */ JPABaseShape(u8 const*, JKRHeap*); - /* 8027A7E8 */ void setGX(JPAEmitterWorkData*) const; - - static GXBlendMode st_bm[3]; - static GXBlendFactor st_bf[10]; - static GXLogicOp st_lo[16]; - static GXCompare st_c[8]; - static GXAlphaOp st_ao[4]; - static GXTevColorArg st_ca[6][4]; - static GXTevAlphaArg st_aa[2][4]; - - GXBlendMode getBlendMode() const { return st_bm[mpData->mBlendModeCfg & 0x03]; } - GXBlendFactor getBlendSrc() const { return st_bf[(mpData->mBlendModeCfg >> 2) & 0x0F]; } - GXBlendFactor getBlendDst() const { return st_bf[(mpData->mBlendModeCfg >> 6) & 0x0F]; } - GXLogicOp getLogicOp() const { return st_lo[(mpData->mBlendModeCfg >> 10) & 0x0F]; } - GXBool getZCompLoc() const { return (GXBool)((mpData->mZModeCfg >> 5) & 0x01); } - - GXBool getZEnable() const { return (GXBool)(mpData->mZModeCfg & 0x01); } - GXCompare getZCmp() const { return st_c[(mpData->mZModeCfg >> 1) & 0x07]; } - GXBool getZUpd() const { return (GXBool)((mpData->mZModeCfg >> 4) & 0x01); } - - GXCompare getAlphaCmp0() const { return st_c[mpData->mAlphaCompareCfg & 0x07]; } - u8 getAlphaRef0() const { return mpData->mAlphaRef0; } - GXAlphaOp getAlphaOp() const { return st_ao[(mpData->mAlphaCompareCfg >> 3) & 0x03]; } - GXCompare getAlphaCmp1() const { return st_c[(mpData->mAlphaCompareCfg >> 5) & 0x07]; } - u8 getAlphaRef1() const { return mpData->mAlphaRef1; } - - const GXTevColorArg* getTevColorArg() const { return st_ca[(mpData->mFlags >> 0x0F) & 0x07]; } - const GXTevAlphaArg* getTevAlphaArg() const { return st_aa[(mpData->mFlags >> 0x12) & 0x01]; } - - u32 getType() const { return (mpData->mFlags >> 0) & 0x0F; } - u32 getDirType() const { return (mpData->mFlags >> 4) & 0x07; } - u32 getRotType() const { return (mpData->mFlags >> 7) & 0x07; } - u32 getBasePlaneType() const { return (mpData->mFlags >> 10) & 0x07; } - u32 getTilingS() const { return (mpData->mFlags >> 25) & 0x01; } - u32 getTilingT() const { return (mpData->mFlags >> 26) & 0x01; } - bool isGlblClrAnm() const { return !!(mpData->mFlags & 0x00001000); } - bool isGlblTexAnm() const { return !!(mpData->mFlags & 0x00004000); } - bool isPrjTex() const { return !!(mpData->mFlags & 0x00100000); } - bool isDrawFwdAhead() const { return !!(mpData->mFlags & 0x00200000); } - bool isDrawPrntAhead() const { return !!(mpData->mFlags & 0x00400000); } - bool isClipOn() const { return !!(mpData->mFlags & 0x00800000); } - bool isTexCrdAnm() const { return !!(mpData->mFlags & 0x01000000); } - bool isNoDrawParent() const { return !!(mpData->mFlags & 0x08000000); } - bool isNoDrawChild() const { return !!(mpData->mFlags & 0x10000000); } - - bool isPrmAnm() const { return !!(mpData->mClrFlg & 0x02); } - bool isEnvAnm() const { return !!(mpData->mClrFlg & 0x08); } - u8 getClrAnmType() const { return (mpData->mClrFlg >> 4) & 0x07; } - s16 getClrAnmMaxFrm() const { return mpData->mClrAnmFrmMax; } - void getPrmClr(s16 idx, GXColor* dst) { *dst = mpPrmClrAnmTbl[idx]; } - void getEnvClr(s16 idx, GXColor* dst) { *dst = mpEnvClrAnmTbl[idx]; } - - bool isTexAnm() const { return !!(mpData->mTexFlg & 0x01); } - u8 getTexAnmType() const { return (mpData->mTexFlg >> 2) & 0x07; } - u32 getTexIdx() const { return mpData->mTexIdx; } - - f32 getBaseSizeX() const { return mpData->mBaseSizeX; } - f32 getBaseSizeY() const { return mpData->mBaseSizeY; } - -public: - const JPABaseShapeData* mpData; - const void* mpTexCrdMtxAnmTbl; - const u8* mpTexIdxAnimTbl; - GXColor* mpPrmClrAnmTbl; - GXColor* mpEnvClrAnmTbl; -}; - struct JMath { static u8 sincosTable_[65536]; }; diff --git a/libs/JSystem/JParticle/JPAResource.cpp b/libs/JSystem/JParticle/JPAResource.cpp index a21e82b7de5..ecab76d0213 100644 --- a/libs/JSystem/JParticle/JPAResource.cpp +++ b/libs/JSystem/JParticle/JPAResource.cpp @@ -5,6 +5,7 @@ #include "JSystem/JParticle/JPAResource.h" #include "JSystem/JParticle/JPAMath.h" +#include "JSystem/JParticle/JPABaseShape.h" #include "JSystem/JParticle/JPAParticle.h" #include "dol2asm.h" #include "dolphin/mtx/mtx.h" @@ -148,14 +149,34 @@ extern "C" void _restgpr_28(); // /* 80274010-80274080 26E950 0070+00 0/0 1/1 0/0 .text __ct__11JPAResourceFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JPAResource::JPAResource() { - nofralloc -#include "asm/JSystem/JParticle/JPAResource/__ct__11JPAResourceFv.s" +JPAResource::JPAResource() { + mpDrawEmitterChildFuncList = NULL; + mpDrawEmitterFuncList = NULL; + mpCalcEmitterFuncList = NULL; + mpDrawParticleChildFuncList = NULL; + mpCalcParticleChildFuncList = NULL; + mpDrawParticleFuncList = NULL; + mpCalcParticleFuncList = NULL; + mpBaseShape = NULL; + mpExtraShape = NULL; + mpChildShape = NULL; + mpExTexShape = NULL; + mpDynamicsBlock = NULL; + mpFieldBlocks = NULL; + mpKeyBlocks = NULL; + mpTDB1 = NULL; + mpDrawParticleChildFuncListNum = 0; + mpCalcParticleChildFuncListNum = 0; + mpDrawParticleFuncListNum = 0; + mpCalcParticleFuncListNum = 0; + mpDrawEmitterChildFuncListNum = 0; + mpDrawEmitterFuncListNum = 0; + mpCalcEmitterFuncListNum = 0; + mTDB1Num = 0; + mKeyBlockNum = 0; + mFieldBlockNum = 0; + mUsrIdx = 0; } -#pragma pop /* ############################################################################################## */ /* 803C40C0-803C4220 0211E0 0144+1C 2/2 0/0 0/0 .data jpa_pos */ @@ -574,14 +595,21 @@ asm void JPAResource::calc(JPAEmitterWorkData* param_0, JPABaseEmitter* param_1) /* 80275A94-80275B74 2703D4 00E0+00 0/0 1/1 0/0 .text * draw__11JPAResourceFP18JPAEmitterWorkDataP14JPABaseEmitter */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JPAResource::draw(JPAEmitterWorkData* param_0, JPABaseEmitter* param_1) { - nofralloc -#include "asm/JSystem/JParticle/JPAResource/draw__11JPAResourceFP18JPAEmitterWorkDataP14JPABaseEmitter.s" +void JPAResource::draw(JPAEmitterWorkData* work, JPABaseEmitter* emtr) { + work->mpEmtr = emtr; + work->mpRes = this; + work->mDrawCount = 0; + calcWorkData_d(work); + mpBaseShape->setGX(work); + for (s32 i = 1; i <= emtr->getDrawTimes(); i++) { + work->mDrawCount++; + if (mpBaseShape->isDrawPrntAhead() && mpChildShape != NULL) + drawC(work); + drawP(work); + if (!mpBaseShape->isDrawPrntAhead() && mpChildShape != NULL) + drawC(work); + } } -#pragma pop /* ############################################################################################## */ /* 80455290-80455294 003890 0004+00 2/2 0/0 0/0 .sdata2 @3189 */