d_drawlist, d_particle, f_op_actor_mng, JPA work

This commit is contained in:
Jasper St. Pierre
2023-11-11 13:22:49 -08:00
parent ed3fd719d5
commit 77f5d98159
17 changed files with 572 additions and 245 deletions
+18 -1
View File
@@ -58,7 +58,24 @@ struct J3DTexMtxInfo {
mInfo = other.mInfo;
mSRT = other.mSRT;
}
void setEffectMtx(Mtx);
void setEffectMtx(Mtx m) {
mEffectMtx[0][0] = m[0][0];
mEffectMtx[0][1] = m[0][1];
mEffectMtx[0][2] = m[0][2];
mEffectMtx[0][3] = m[0][3];
mEffectMtx[1][0] = m[1][0];
mEffectMtx[1][1] = m[1][1];
mEffectMtx[1][2] = m[1][2];
mEffectMtx[1][3] = m[1][3];
mEffectMtx[2][0] = m[2][0];
mEffectMtx[2][1] = m[2][1];
mEffectMtx[2][2] = m[2][2];
mEffectMtx[2][3] = m[2][3];
mEffectMtx[3][2] = 0.0f;
mEffectMtx[3][1] = 0.0f;
mEffectMtx[3][0] = 0.0f;
mEffectMtx[3][3] = 1.0f;
}
/* 0x00 */ u8 mProjection;
/* 0x01 */ u8 mInfo;
+5 -3
View File
@@ -34,7 +34,7 @@ class JPADrawContext {
class JPADraw {
public:
enum JPADrawVisitorDefFlags {};
void initialize(JPABaseEmitter*, JPATextureResource*);
void draw(MtxP);
void calc();
@@ -54,7 +54,7 @@ public:
void zDrawParticle();
void zDrawChild();
void loadYBBMtx(MtxP);
/* 0x00 */ JPADrawExecEmitterVisitor* mpExecEmtrVis[1];
/* 0x04 */ JPADrawExecEmitterVisitor* mpExecEmtrPVis[5];
/* 0x18 */ JPADrawExecEmitterVisitor* mpExecEmtrCVis[3];
@@ -77,7 +77,9 @@ public:
/* 0xBC */ GXColor mEnvColor;
/* 0xC0 */ s16 mTexIdx;
/* 0xC2 */ u8 field_0xc2;
/* 0xC3 */ u8 field_0xC3[0xC4 - 0xC3];
/* 0xC3 */ u8 field_0xc3;
};
STATIC_ASSERT(sizeof(JPADraw) == 0xC4);
#endif /* JPADRAW_H */
+19 -5
View File
@@ -113,8 +113,8 @@ public:
/* 0x0E0 */ JGeometry::TVec3<f32> mEmitterGlobalCenter;
/* 0x0EC */ JGeometry::TVec3<f32> mPublicScale;
/* 0x0F8 */ JGeometry::TVec3<f32> mgReRDir;
/* 0x100 */ void* field_0x100;
/* 0x104 */ void* field_0x104;
/* 0x100 */ f32 mFovy;
/* 0x104 */ f32 mAspect;
/* 0x10C */ JGeometry::TVec3<f32> mVolumePos;
/* 0x118 */ JGeometry::TVec3<f32> mVelOmni;
/* 0x124 */ JGeometry::TVec3<f32> mVelAxis;
@@ -129,6 +129,8 @@ public:
class JPABaseEmitter {
public:
JPABaseEmitter();
typedef void (JPABaseEmitter::*VolumeFunc)();
void calcVolumePoint();
@@ -166,6 +168,9 @@ public:
return mActiveParticles.getNumLinks() + mChildParticles.getNumLinks();
}
u8 getGroupID() { return mGroupID; }
u8 getResourceManagerID() { return mResMgrID; }
JPADataBlockLinkInfo * getEmitterDataBlockInfoPtr() const { return mpDataLinkInfo; }
bool isEnableDeleteEmitter() { return checkStatus(JPAEmtrStts_EnableDeleteEmitter) && getParticleNumber() == 0; }
@@ -204,10 +209,14 @@ public:
void setRate(float i_rate) { mRate = i_rate; }
void setDirectionalSpeed(float i_speed) { mInitialVelDir = i_speed; }
void setAwayFromAxisSpeed(float i_speed) { mInitialVelAxis = i_speed; }
void setAwayFromCenterSpeed(float i_speed) { mInitialVelOmni = i_speed; }
void setSpread(float i_spread) { mSpread = i_spread; }
void stopCreateParticle() { setStatus(JPAEmtrStts_StopEmit); }
void playCreateParticle() { clearStatus(JPAEmtrStts_StopEmit); }
void stopDrawParticle() { setStatus(JPAEmtrStts_StopDraw); }
void playDrawParticle() { clearStatus(JPAEmtrStts_StopDraw); }
bool isDraw() { return !checkStatus(JPAEmtrStts_StopDraw); }
void becomeImmortalEmitter() { setStatus(JPAEmtrStts_Immortal); }
void quitImmortalEmitter() { clearStatus(JPAEmtrStts_Immortal); }
@@ -222,6 +231,11 @@ public:
void setParticleCallBackPtr(JPACallBackBase2<JPABaseEmitter*, JPABaseParticle*>* callback) {
mpParticleCallBack = callback;
}
void setParticleList(JSUList<JPABaseParticle>* list) { mpPtclVacList = list; }
void setFieldList(JSUList<JPAFieldData>* list) { mFieldManager.mVacList = list; }
JSULink<JPABaseEmitter>* getLinkBufferPtr() { return &mLink; }
void initDrawMgr(JPATextureResource* texRes) { mDraw.initialize(this, texRes); }
void draw(MtxP cameraMtxP) { mDraw.draw(cameraMtxP); }
static JPAEmitterInfo emtrInfo;
@@ -256,14 +270,14 @@ public:
/* 0x084 */ f32 mVolumeMinRad;
/* 0x088 */ s32 mDataFlag;
/* 0x08C */ s32 mUseKeyFlag;
/* 0x090 */ JSUPtrLink mLink;
/* 0x090 */ JSULink<JPABaseEmitter> mLink;
/* 0x0A0 */ JPADraw mDraw;
/* 0x164 */ f32 mTick;
/* 0x168 */ f32 mTime;
/* 0x16C */ JPAFieldManager mFieldManager;
/* 0x17C */ JSUList<JPABaseParticle> mActiveParticles;
/* 0x188 */ JSUList<JPABaseParticle> mChildParticles;
/* 0x194 */ JSUPtrList* mpPtclVacList;
/* 0x194 */ JSUList<JPABaseParticle>* mpPtclVacList;
/* 0x198 */ JPADataBlockLinkInfo* mpDataLinkInfo;
/* 0x19C */ JPACallBackBase<JPABaseEmitter*>* mpEmitterCallBack;
/* 0x1A0 */ JPACallBackBase2<JPABaseEmitter*, JPABaseParticle*>* mpParticleCallBack;
@@ -280,7 +294,7 @@ public:
/* 0x210 */ u32 mUserData;
/* 0x214 */ u8 mGroupID;
/* 0x215 */ u8 mResMgrID;
/* 0x216 */ u8 field_0x216[0x218 - 0x216];
/* 0x216 */ u16 field_0x216;
};
void JPACallBackBase<JPABaseEmitter*>::init(JPABaseEmitter*) {}
@@ -14,7 +14,11 @@ public:
};
struct JPAEmitterData {
public:
JPAEmitterData() : pLinkInfoArray(NULL) {}
JPADataBlockLinkInfo** getLinkInfo() { return pLinkInfoArray; }
public:
/* 0x00 */ JPADataBlockLinkInfo** pLinkInfoArray;
/* 0x04 */ u16 infoNum;
/* 0x06 */ u16 userIndex;
@@ -0,0 +1,45 @@
#ifndef JPAEMITTERMANAGER_H
#define JPAEMITTERMANAGER_H
#include "JSystem/JGeometry.h"
#include "JSystem/JParticle/JPAEmitter.h"
class JPABaseEmitter;
class JPABaseParticle;
class JPAResourceManager;
class JKRHeap;
class JPADrawInfo {
public:
MtxP getCameraMtxPtr() { return mCameraMtxPtr; }
f32 getFovy() { return mFovy; }
f32 getAspect() { return mAspect; }
/* 0x00 */ MtxP mCameraMtxPtr;
/* 0x04 */ f32 mFovy;
/* 0x08 */ f32 mAspect;
};
class JPAEmitterManager {
public:
JPAEmitterManager(JPAResourceManager*, u32, u32, u32, JKRHeap*);
JPABaseEmitter* createSimpleEmitterID(const JGeometry::TVec3<float>&, u16, u8, u8, JPACallBackBase<JPABaseEmitter*>*, JPACallBackBase2<JPABaseEmitter*, JPABaseParticle*>*);
void calc(u8);
void draw(JPADrawInfo*, u8);
void deleteEmitter(JPABaseEmitter*);
void forceDeleteEmitter(JPABaseEmitter*);
void forceDeleteAllEmitter();
void clearResourceManager(u8);
public:
/* 0x00 */ JSUList<JPABaseParticle> mPtclPool;
/* 0x0C */ JSUList<JPABaseEmitter> mEmtrPool;
/* 0x18 */ JSUList<JPAFieldData> mFieldPool;
/* 0x24 */ u32 mPtclNum;
/* 0x28 */ u32 mEmtrNum;
/* 0x2C */ u32 mFieldNum;
/* 0x30 */ JPAResourceManager * pResMgrArray[8];
/* 0x50 */ JSUList<JPABaseEmitter> mEmtrGroup[16];
};
#endif /* JPAEMITTERMANAGER_H */
+42 -2
View File
@@ -2,11 +2,13 @@
#define JPAFIELD_H
#include "JSystem/JSupport/JSUList.h"
#include "JSystem/JGeometry.h"
class JPADataBlockLinkInfo;
class JPAEmitterInfo;
class JPAFieldData;
class JPABaseParticle;
class JPABaseField;
class JPAFieldManager {
public:
@@ -17,8 +19,46 @@ public:
void deleteField(JPAFieldData*);
void deleteAllField();
/* 0x00 */ JSUPtrList mList;
/* 0x0C */ JSUPtrList* field_0x0c;
public:
/* 0x00 */ JSUList<JPAFieldData> mList;
/* 0x0C */ JSUList<JPAFieldData>* mVacList;
};
class JPAFieldData {
public:
JPAFieldData();
virtual ~JPAFieldData();
JSULink<JPAFieldData>* getLinkBufferPtr() { return &mLink; }
public:
/* 0x04 */ JPABaseField * mpBaseField;
/* 0x08 */ JSULink<JPAFieldData> mLink;
/* 0x18 */ JGeometry::TVec3<f32> mVel;
/* 0x24 */ JGeometry::TVec3<f32> mAirPos;
/* 0x30 */ f32 mAirMinDist;
/* 0x34 */ u32 field_0x34;
/* 0x38 */ u32 field_0x38;
/* 0x3C */ JGeometry::TVec3<f32> mAirDir;
/* 0x48 */ u32 field_0x48;
/* 0x4C */ f32 mFadeOutRate;
/* 0x50 */ f32 mFadeInRate;
/* 0x54 */ JGeometry::TVec3<f32> mPos;
/* 0x60 */ JGeometry::TVec3<f32> mDir;
/* 0x6C */ f32 mMag;
/* 0x70 */ f32 mMagRndm;
/* 0x74 */ f32 mMaxDist;
/* 0x78 */ f32 mVal1;
/* 0x7C */ f32 mVal2;
/* 0x80 */ f32 mVal3;
/* 0x84 */ f32 mFadeIn;
/* 0x88 */ f32 mFadeOut;
/* 0x8C */ f32 mEnTime;
/* 0x90 */ f32 mDisTime;
/* 0x94 */ u16 mSttFlag;
/* 0x96 */ u8 mType;
/* 0x97 */ u8 mID;
/* 0x98 */ u8 mVelType;
/* 0x99 */ u8 mCycle;
};
#endif /* JPAFIELD_H */
+1
View File
@@ -29,6 +29,7 @@ public:
void calcVelocity();
void calcPosition();
bool checkCreateChild();
JSULink<JPABaseParticle>* getLinkBufferPtr() { return &mLink; }
~JPABaseParticle();
JPABaseParticle();
@@ -38,6 +38,8 @@ class JPAResourceManager {
public:
JPAResourceManager(const void*, JKRHeap*);
const ResTIMG* swapTexture(const ResTIMG*, const char*);
JPATextureResource * getTextureResource() { return pTexRes; }
JPAEmitterResource * getEmitterResource() { return pEmtrRes; }
public:
/* 0x00 */ JKRHeap * pHeap;
+5 -4
View File
@@ -1,13 +1,12 @@
#ifndef C_LIST_H
#define C_LIST_H
typedef struct node_class node_class;
typedef struct node_list_class {
node_class* mpHead;
node_class* mpTail;
int mSize;
/* 0x00 */ node_class* mpHead;
/* 0x04 */ node_class* mpTail;
/* 0x08 */ int mSize;
} node_list_class;
void cLs_Init(node_list_class* pList);
@@ -17,4 +16,6 @@ int cLs_Insert(node_list_class* pList, int idx, node_class* pNode);
node_class* cLs_GetFirst(node_list_class* pList);
void cLs_Create(node_list_class* pList);
#define LIST_GET_HEAD(pList) (pList->mpHead)
#endif /* C_LIST_H */
+5
View File
@@ -335,6 +335,11 @@ public:
struct dDlst_alphaModelPacket : public J3DPacket {
public:
virtual void draw();
public:
/* 0x10 */ u8 mType;
/* 0x11 */ GXColor mColor;
/* 0x18 */ Mtx* mMtxP;
};
struct dDlst_alphaVolPacket : public J3DPacket {
+34 -61
View File
@@ -41,16 +41,16 @@ class dPa_followEcallBack : public dPa_levelEcallBack {
public:
dPa_followEcallBack(u8=0, u8=0);
virtual ~dPa_followEcallBack() {}
virtual void execute(JPABaseEmitter*);
virtual void draw(JPABaseEmitter*);
virtual void setup(JPABaseEmitter*, cXyz const*, csXyz const*, s8);
virtual void end();
JPABaseEmitter* getEmitter() { return mpEmitter; }
void setRateOff(u8 param_0) { field_0x11 = param_0; }
bool isEnd() { return field_0x10 & 1; }
/* 0x04 */ JPABaseEmitter* mpEmitter;
/* 0x08 */ u8 field_0x08[0x10 - 0x08];
/* 0x10 */ u8 field_0x10;
@@ -67,11 +67,11 @@ public:
dPa_smokeEcallBack(u8, u8, u8, u8);
dPa_smokeEcallBack(const GXColor&, dKy_tevstr_c*, u8);
virtual ~dPa_smokeEcallBack() {}
virtual void draw(JPABaseEmitter*);
virtual void setup(JPABaseEmitter*, cXyz const*, csXyz const*, s8);
virtual void end();
/* 0x14 */ s8 field_0x14;
/* 0x15 */ u8 field_0x15;
/* 0x16 */ GXColor field_0x16;
@@ -167,7 +167,7 @@ class dPa_rippleEcallBack : public dPa_levelEcallBack {
public:
dPa_rippleEcallBack() { mpBaseEmitter = NULL; }
virtual ~dPa_rippleEcallBack() {}
void setup(JPABaseEmitter*, cXyz const*, csXyz const*, s8);
void end();
void execute(JPABaseEmitter*);
@@ -181,10 +181,8 @@ public:
/* 0x10 */ f32 mRate;
};
class dPa_modelEmitter_c {
class dPa_modelEmitter_c : public node_class {
public:
u8 temp[0xC];
dPa_modelEmitter_c();
virtual ~dPa_modelEmitter_c() {}
};
@@ -195,23 +193,27 @@ class dPa_J3DmodelEmitter_c : public dPa_modelEmitter_c {
public:
u8 temp2[4];
JKRSolidHeap* mpHeap;
dPa_J3DmodelEmitter_c(JPABaseEmitter*, J3DModelData*, dKy_tevstr_c&, J3DAnmTexPattern*, unsigned short, int);
virtual ~dPa_J3DmodelEmitter_c();
virtual void draw();
};
class dPa_J3Dmodel_c {
public:
dPa_J3Dmodel_c();
public:
/* 0x00 */ u8 mInit;
/* 0x04 */ J3DModel* mModel;
};
class dPa_smokePcallBack : public JPACallBackBase2<JPABaseEmitter*, JPABaseParticle*> {
public:
dPa_smokePcallBack();
virtual ~dPa_smokePcallBack() {}
virtual void execute(JPABaseEmitter*, JPABaseParticle*);
virtual void draw(JPABaseEmitter*, JPABaseParticle*);
};
@@ -220,7 +222,7 @@ class dPa_selectTexEcallBack : public dPa_levelEcallBack {
public:
dPa_selectTexEcallBack();
virtual ~dPa_selectTexEcallBack() {}
virtual void draw(JPABaseEmitter*);
virtual void setup(JPABaseEmitter*, const cXyz*, const csXyz*, s8);
};
@@ -229,7 +231,7 @@ class dPa_windPcallBack : public JPACallBackBase2<JPABaseEmitter*, JPABasePartic
public:
dPa_windPcallBack();
virtual ~dPa_windPcallBack() {}
virtual void execute(JPABaseEmitter*, JPABaseParticle*);
};
@@ -237,7 +239,7 @@ class dPa_singleRippleEcallBack : public dPa_levelEcallBack {
public:
dPa_singleRippleEcallBack();
virtual ~dPa_singleRippleEcallBack() {}
virtual void execute(JPABaseEmitter*);
virtual void draw(JPABaseEmitter*);
virtual void setup(JPABaseEmitter*, const cXyz*, const csXyz*, s8);
@@ -247,7 +249,7 @@ class dPa_ripplePcallBack : public JPACallBackBase2<JPABaseEmitter*, JPABasePart
public:
dPa_ripplePcallBack();
virtual ~dPa_ripplePcallBack() {}
virtual void execute(JPABaseEmitter*, JPABaseParticle*);
virtual void draw(JPABaseEmitter*, JPABaseParticle*);
};
@@ -256,7 +258,7 @@ class dPa_cutTurnEcallBack_c : public dPa_levelEcallBack {
public:
dPa_cutTurnEcallBack_c() {}
virtual ~dPa_cutTurnEcallBack_c() {}
virtual void executeAfter(JPABaseEmitter*);
virtual void setup(JPABaseEmitter*, const cXyz*, const csXyz*, s8);
void end();
@@ -271,7 +273,7 @@ class dPa_stripesEcallBack : public dPa_levelEcallBack {
public:
dPa_stripesEcallBack();
virtual ~dPa_stripesEcallBack() {}
virtual void draw(JPABaseEmitter*);
virtual void setup(JPABaseEmitter*, const cXyz*, const csXyz*, s8);
};
@@ -280,7 +282,7 @@ class dPa_kageroEcallBack : public JPACallBackBase<JPABaseEmitter*> {
public:
dPa_kageroEcallBack();
virtual ~dPa_kageroEcallBack() {}
virtual void draw(JPABaseEmitter*);
};
@@ -288,7 +290,7 @@ class dPa_bombSmokeEcallBack : public dPa_levelEcallBack {
public:
dPa_bombSmokeEcallBack();
virtual ~dPa_bombSmokeEcallBack() {}
virtual void execute(JPABaseEmitter*);
virtual void setup(JPABaseEmitter*, const cXyz*, const csXyz*, s8);
};
@@ -297,7 +299,7 @@ class dPa_setColorEcallBack : public dPa_levelEcallBack {
public:
dPa_setColorEcallBack();
virtual ~dPa_setColorEcallBack() {}
virtual void draw(JPABaseEmitter*);
virtual void setup(JPABaseEmitter*, const cXyz*, const csXyz*, s8);
@@ -305,53 +307,22 @@ public:
/* 0x04 */ GXColor mColor;
}; // Size: 0x08
class dPa_modelControl_c {
class dPa_modelControl_c : public node_list_class {
public:
dPa_modelControl_c(J3DModelData*);
~dPa_modelControl_c();
void newModel(J3DModelData*);
static J3DModel * newModel(J3DModelData*);
void draw();
/* 0x00 */ node_list_class parent;
/* 0x0C */ void* field_0x0c;
/* 0x10 */ void* field_0x10;
/* 0x14 */ void* field_0x14;
/* 0x18 */ void* field_0x18;
/* 0x1C */ void* field_0x1c;
/* 0x20 */ void* field_0x20;
/* 0x24 */ void* field_0x24;
/* 0x28 */ void* field_0x28;
/* 0x2C */ void* field_0x2c;
/* 0x30 */ void* field_0x30;
/* 0x34 */ void* field_0x34;
/* 0x38 */ void* field_0x38;
/* 0x3C */ void* field_0x3c;
/* 0x40 */ void* field_0x40;
/* 0x44 */ void* field_0x44;
/* 0x48 */ void* field_0x48;
/* 0x4C */ void* field_0x4c;
/* 0x50 */ void* field_0x50;
/* 0x54 */ void* field_0x54;
/* 0x58 */ void* field_0x58;
/* 0x5C */ void* field_0x5c;
/* 0x60 */ void* field_0x60;
/* 0x64 */ void* field_0x64;
/* 0x68 */ void* field_0x68;
/* 0x6C */ void* field_0x6c;
/* 0x70 */ void* field_0x70;
/* 0x74 */ void* field_0x74;
/* 0x78 */ void* field_0x78;
/* 0x7C */ void* field_0x7c;
/* 0x80 */ void* field_0x80;
// /* 0x84 */ J3DVertexData mVertexData;
static dPa_J3Dmodel_c * mModel;
};
class dPa_control_c {
public:
dPa_control_c();
void getRM_ID(u16);
static u16 getRM_ID(u16);
void swapFrameBufferTexture();
void createCommon(void const*);
void createRoomScene(void const*);
@@ -434,16 +405,18 @@ public:
return set(5, particleID, pos, angle, scale, alpha, &mSingleRippleEcallBack, -1, NULL, NULL, NULL);
}
void drawModelParticle() { mModelCtrl->draw(); }
JKRHeap * getHeap() { return mpHeap; }
JKRHeap * getHeap() { return mHeap; }
static dPa_setColorEcallBack* getLifeBallSetColorEcallBack(int idx) { return &mLifeBall[idx]; }
static dPa_rippleEcallBack mSingleRippleEcallBack;
static dPa_setColorEcallBack mLifeBall[3];
/* 0x0000 */ JKRHeap* mpHeap;
static JPAEmitterManager * mEmitterMng;
/* 0x0000 */ JKRHeap* mHeap;
/* 0x0004 */ JPAResourceManager* mpCommonResMgr;
/* 0x0008 */ dPa_modelControl_c* mModelCtrl;
/* 0x000C */ JKRHeap* mpSceneHeap;
+2 -3
View File
@@ -16,6 +16,7 @@
class J3DModelData; // placeholder
class JKRHeap;
class cM3dGPla;
class daItem_c;
struct fopAcM_prmBase_class {
/* 0x00 */ u32 field_0x00;
@@ -463,9 +464,7 @@ s32 fopAcM_createDemoItem(cXyz* p_pos, int itemNo, int itemBitNo, csXyz* p_angle
s32 fopAcM_createItemForBoss(cXyz* p_pos, int param_2, int roomNo, csXyz* p_angle,
cXyz* p_scale, int param_8);
void* fopAcM_createItemForSimpleDemo(cXyz* p_pos, int i_itemNo, int i_roomNo,
csXyz* p_angle, cXyz* p_scale, f32 speedF,
f32 speedY);
daItem_c* fopAcM_createItemForSimpleDemo(cXyz* p_pos, int i_itemNo, int i_roomNo, csXyz* p_angle, cXyz* p_scale, f32 speedF, f32 speedY);
s32 fopAcM_createItem(cXyz* p_pos, int itemNo, int param_3, int roomNo, int type, csXyz* p_angle,
int action, cXyz* p_scale);
+1
View File
@@ -615,6 +615,7 @@ s32 mDoExt_resIDToIndex(JKRArchive*, u16);
JKRSolidHeap * mDoExt_createSolidHeapFromGameToCurrent(u32 size, u32 align);
JKRSolidHeap * mDoExt_createSolidHeapToCurrent(u32, JKRHeap *, u32 align);
JKRSolidHeap * mDoExt_createSolidHeapFromSystem(u32 i_size, u32 i_alignment);
void mDoExt_restoreCurrentHeap();
s32 mDoExt_adjustSolidHeap(JKRSolidHeap * pHeap);
void mDoExt_destroySolidHeap(JKRSolidHeap * pHeap);
+119 -53
View File
@@ -4,84 +4,150 @@
//
#include "JSystem/JParticle/JPAEmitterManager.h"
#include "dolphin/types.h"
#include "JSystem/JParticle/JPAEmitterLoader.h"
#include "JSystem/JParticle/JPAResourceManager.h"
#include "JSystem/JKernel/JKRHeap.h"
#include "JSystem/JUtility/JUTAssert.h"
/* 8025EE44-8025F0E4 .text __ct__17JPAEmitterManagerFP18JPAResourceManagerUlUlUlP7JKRHeap */
JPAEmitterManager::JPAEmitterManager(JPAResourceManager*, unsigned long, unsigned long, unsigned long, JKRHeap*) {
/* Nonmatching */
JPAEmitterManager::JPAEmitterManager(JPAResourceManager* resMgr, u32 ptclNum, u32 emtrNum, u32 fieldNum, JKRHeap* heap) {
heap = heap != NULL ? heap : JKRHeap::getCurrentHeap();
mPtclNum = ptclNum;
mEmtrNum = emtrNum;
mFieldNum = fieldNum;
pResMgrArray[0] = resMgr;
for (u32 i = 1; i < 8; i++)
pResMgrArray[i] = 0;
JPABaseParticle* pPtclArray = new(heap, 0) JPABaseParticle[mPtclNum];
JUT_ASSERT(0x2e, pPtclArray);
for (u32 i = 0; i < mPtclNum; i++) {
JPABaseParticle* ptcl = &pPtclArray[i];
mPtclPool.prepend(ptcl->getLinkBufferPtr());
}
JPABaseEmitter* pEmtrArray = new(heap, 0) JPABaseEmitter[mEmtrNum];
JUT_ASSERT(0x35, pEmtrArray);
for (u32 i = 0; i < mEmtrNum; i++) {
JPABaseEmitter* emtr = &pEmtrArray[i];
emtr->setParticleList(&mPtclPool);
emtr->setFieldList(&mFieldPool);
mEmtrPool.prepend(emtr->getLinkBufferPtr());
}
JPAFieldData* pFieldArray = new(heap, 0) JPAFieldData[mFieldNum];
JUT_ASSERT(0x3e, pFieldArray);
for (u32 i = 0; i < mFieldNum; i++) {
JPAFieldData* field = &pFieldArray[i];
mFieldPool.prepend(field->getLinkBufferPtr());
}
}
/* 8025F0E4-8025F2F4 .text createSimpleEmitterID__17JPAEmitterManagerFRCQ29JGeometry8TVec3<f>UsUcUcP34JPACallBackBase<P14JPABaseEmitter>P54JPACallBackBase2<P14JPABaseEmitter,P15JPABaseParticle> */
void JPAEmitterManager::createSimpleEmitterID(const JGeometry::TVec3<float>&, unsigned short, unsigned char, unsigned char, JPACallBackBase<JPABaseEmitter*>*, JPACallBackBase2<JPABaseEmitter*, JPABaseParticle*>*) {
JPABaseEmitter* JPAEmitterManager::createSimpleEmitterID(const JGeometry::TVec3<float>& pos, u16 userID, u8 groupID, u8 rmID, JPACallBackBase<JPABaseEmitter*>* pEmtrCallBack, JPACallBackBase2<JPABaseEmitter*, JPABaseParticle*>* pPtclCallBack) {
/* Nonmatching */
JUT_ASSERT(0x56, groupID < 16);
JUT_ASSERT(0x57, rmID < 8);
JUT_ASSERT(0x58, pResMgrArray[rmID] != 0);
JPABaseEmitter* emtr;
JPAEmitterData* emtrData;
JPAResourceManager* resMgr;
emtr = NULL;
resMgr = pResMgrArray[rmID];
emtrData = resMgr->getEmitterResource()->getByUserIndex(userID);
if (emtrData == NULL) {
JUT_WARN(98, "%s", "JParticle::Couldn't Create Emitter!");
JUT_WARN(99, "%s", "User Index Number specification has mistaken.");
JUT_WARN(100, "Group ID (%d),EmitterManagerPtr(%x)", groupID, resMgr);
} else if (mEmtrPool.getNumLinks() != 0) {
emtr = mEmtrPool.getFirst()->getObject();
mEmtrPool.remove(emtr->getLinkBufferPtr());
mEmtrGroup[groupID].append(emtr->getLinkBufferPtr());
emtr->create(emtrData->getLinkInfo()[0]);
emtr->initDrawMgr(pResMgrArray[rmID]->getTextureResource());
emtr->setEmitterCallBackPtr(pEmtrCallBack);
emtr->setParticleCallBackPtr(pPtclCallBack);
emtr->mGroupID = groupID;
emtr->mResMgrID = rmID;
emtr->mGlobalTranslation.set(pos);
}
return emtr;
}
/* 8025F2F4-8025F3C4 .text calc__17JPAEmitterManagerFUc */
void JPAEmitterManager::calc(unsigned char) {
/* Nonmatching */
void JPAEmitterManager::calc(u8 groupID) {
JUT_ASSERT(0xbb, groupID < 16);
for (JSULink<JPABaseEmitter>* link = mEmtrGroup[groupID].getFirst(); link != NULL;) {
JSULink<JPABaseEmitter>* next = link->getNext();
JPABaseEmitter *emtr = link->getObject();
bool started = emtr->doStartFrameProcess();
if (started) {
if (emtr->doTerminationProcess())
deleteEmitter(emtr);
else
emtr->calc();
}
link = next;
}
}
/* 8025F3C4-8025F494 .text draw__17JPAEmitterManagerFP11JPADrawInfoUc */
void JPAEmitterManager::draw(JPADrawInfo*, unsigned char) {
/* Nonmatching */
void JPAEmitterManager::draw(JPADrawInfo* drawInfo, u8 groupID) {
JUT_ASSERT(0xde, groupID < 16);
JPABaseEmitter::emtrInfo.mFovy = drawInfo->getFovy();
JPABaseEmitter::emtrInfo.mAspect = drawInfo->getAspect();
for (JSULink<JPABaseEmitter>* link = mEmtrGroup[groupID].getFirst(); link != NULL; link = link->getNext()) {
JPABaseEmitter *emtr = link->getObject();
if (emtr->isDraw()) {
emtr->calcgReRDirection();
emtr->draw(drawInfo->getCameraMtxPtr());
}
}
}
/* 8025F494-8025F4F4 .text deleteEmitter__17JPAEmitterManagerFP14JPABaseEmitter */
void JPAEmitterManager::deleteEmitter(JPABaseEmitter*) {
/* Nonmatching */
void JPAEmitterManager::deleteEmitter(JPABaseEmitter* emtr) {
emtr->mFieldManager.deleteAllField();
mEmtrGroup[emtr->getGroupID()].remove(emtr->getLinkBufferPtr());
mEmtrPool.prepend(emtr->getLinkBufferPtr());
}
/* 8025F4F4-8025F53C .text forceDeleteEmitter__17JPAEmitterManagerFP14JPABaseEmitter */
void JPAEmitterManager::forceDeleteEmitter(JPABaseEmitter*) {
/* Nonmatching */
void JPAEmitterManager::forceDeleteEmitter(JPABaseEmitter* emtr) {
emtr->deleteAllParticle();
deleteEmitter(emtr);
}
/* 8025F53C-8025F5B4 .text forceDeleteAllEmitter__17JPAEmitterManagerFv */
void JPAEmitterManager::forceDeleteAllEmitter() {
/* Nonmatching */
for (u32 i = 0; i < 16; i++) {
for (JSULink<JPABaseEmitter>* link = mEmtrGroup[i].getFirst(); link != NULL;) {
JSULink<JPABaseEmitter>* next = link->getNext();
JPABaseEmitter* emtr = link->getObject();
forceDeleteEmitter(emtr);
link = next;
}
}
}
/* 8025F5B4-8025F68C .text clearResourceManager__17JPAEmitterManagerFUc */
void JPAEmitterManager::clearResourceManager(unsigned char) {
/* Nonmatching */
}
/* 8025F68C-8025F6F8 .text __dt__12JPAFieldDataFv */
JPAFieldData::~JPAFieldData() {
/* Nonmatching */
}
/* 8025F6F8-8025F73C .text __ct__12JPAFieldDataFv */
JPAFieldData::JPAFieldData() {
/* Nonmatching */
}
/* 8025F73C-8025F7E0 .text __dt__14JPABaseEmitterFv */
JPABaseEmitter::~JPABaseEmitter() {
/* Nonmatching */
}
/* 8025F7E0-8025F848 .text __ct__14JPABaseEmitterFv */
JPABaseEmitter::JPABaseEmitter() {
/* Nonmatching */
}
/* 8025F848-8025F8A0 .text __dt__15JPABaseParticleFv */
JPABaseParticle::~JPABaseParticle() {
/* Nonmatching */
}
/* 8025F8A0-8025F8DC .text __ct__15JPABaseParticleFv */
JPABaseParticle::JPABaseParticle() {
/* Nonmatching */
}
/* 8025F8DC-8025F90C .text __ct__25JSUList<14JPABaseEmitter>Fv */
JSUList<JPABaseEmitter>::JSUList() {
/* Nonmatching */
}
/* 8025F90C-8025F960 .text __dt__25JSUList<14JPABaseEmitter>Fv */
JSUList<JPABaseEmitter>::~JSUList() {
void JPAEmitterManager::clearResourceManager(u8 rmID) {
/* Nonmatching */
JUT_ASSERT(0x14b, rmID < 8);
for (u32 i = 0; i < 16; i++) {
for (JSULink<JPABaseEmitter>* link = mEmtrGroup[i].getFirst(); link != NULL;) {
JSULink<JPABaseEmitter>* next = link->getNext();
JPABaseEmitter* emtr = link->getObject();
if (emtr->getResourceManagerID() == rmID)
forceDeleteEmitter(emtr);
link = next;
}
}
pResMgrArray[rmID] = NULL;
}
+143 -63
View File
@@ -5,6 +5,8 @@
#include "d/d_drawlist.h"
#include "d/d_com_inf_game.h"
#include "d/d_kankyo_rain.h"
#include "f_op/f_op_camera_mng.h"
#include "m_Do/m_Do_lib.h"
#include "m_Do/m_Do_mtx.h"
#include "JSystem/JKernel/JKRHeap.h"
@@ -21,6 +23,9 @@ f32 dDlst_list_c::mWipeSpeed = 0.0f;
GXColor dDlst_list_c::mWipeColor = { 0, 0, 0, 0 };
dDlst_2DT2_c dDlst_list_c::mWipeDlst;
static Vec dummy1 = { 1.0f, 1.0f, 1.0f };
static Vec dummy2 = { 1.0f, 1.0f, 1.0f };
/* 800804A4-800804C0 .text setViewPort__14dDlst_window_cFffffff */
void dDlst_window_c::setViewPort(f32 x, f32 y, f32 w, f32 h, f32 n, f32 f) {
mViewport.mXOrig = x;
@@ -83,12 +88,12 @@ void dDlst_2DT2_c::draw() {
GXSetNumTevStages(1);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_C0, GX_CC_TEXC, GX_CC_ZERO);
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1,true, GX_TEVPREV);
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
if (mAlpha)
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0);
else
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_A0, GX_CA_TEXA, GX_CA_ZERO);
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1,true, GX_TEVPREV);
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
GXSetZCompLoc(0);
GXSetZMode(GX_FALSE, GX_ALWAYS, GX_FALSE);
GXSetBlendMode(GX_BM_NONE, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_CLEAR);
@@ -474,21 +479,21 @@ extern void GFSetVtxAttrFmtv(GXVtxFmt, GXVtxAttrFmtList*);
extern void GFSetBlendModeEtc(GXBlendMode, GXBlendFactor, GXBlendFactor, GXLogicOp, u8, u8, u8);
extern void GFSetArray(GXAttr, void*, u8);
char l_backRevZMat[0x40] = {};
char l_frontZMat[0x20] = {};
char l_frontNoZSubMat[0x20] = {};
char l_backRevZMat[0x41] __attribute__((aligned(32))) = {};
char l_frontZMat[0x3c] __attribute__((aligned(32))) = {};
char l_frontNoZSubMat[0x2a] __attribute__((aligned(32))) = {};
Vec l_bonboriPos[0x2a] = {};
char l_bonboriDL[0xa0] = {};
char l_bonboriDL[0xa7] __attribute__((aligned(32))) = {};
Vec l_beam_checkPos[0x10] = {};
char l_beam_checkDL[0xe0] = {};
Vec l_s_beam_checkPos[0x28] = {};
char l_s_beam_checkDL[0xf8] __attribute__((aligned(32))) = {};
Vec l_cubePos[0x10] = {};
char l_cubeDL[0xe0] = {};
Vec l_cubePos[0x08] = {};
char l_cubeDL[0x4a] __attribute__((aligned(32))) = {};
Vec l_bonbori2Pos[0x2a] = {};
char l_bonbori2DL[0xa0] = {};
Vec l_bonbori2Pos[0x56] = {};
char l_bonbori2DL[0x2a8] __attribute__((aligned(32))) = {};
/* 80082838-80082E44 .text draw__22dDlst_alphaModelData_cFPA4_f */
void dDlst_alphaModelData_c::draw(Mtx viewMtx) {
@@ -505,12 +510,12 @@ void dDlst_alphaModelData_c::draw(Mtx viewMtx) {
if (mType == 0) {
/* Bonbori */
GFSetArray(GX_VA_POS, l_bonboriPos, sizeof(*l_bonboriPos));
GXCallDisplayList(l_backRevZMat, sizeof(l_backRevZMat));
GXCallDisplayList(l_bonboriDL, sizeof(l_bonboriDL));
GXCallDisplayList(l_frontZMat, sizeof(l_frontZMat));
GXCallDisplayList(l_bonboriDL, sizeof(l_bonboriDL));
GXCallDisplayList(l_frontNoZSubMat, sizeof(l_frontNoZSubMat));
GXCallDisplayList(l_bonboriDL, sizeof(l_bonboriDL));
GXCallDisplayList(l_backRevZMat, 0x40);
GXCallDisplayList(l_bonboriDL, 0xa0);
GXCallDisplayList(l_frontZMat, 0x20);
GXCallDisplayList(l_bonboriDL, 0xa0);
GXCallDisplayList(l_frontNoZSubMat, 0x20);
GXCallDisplayList(l_bonboriDL, 0xa0);
} else if (mType == 1) {
/* Bonborix2 */
GFSetArray(GX_VA_POS, l_bonboriPos, sizeof(*l_bonboriPos));
@@ -519,22 +524,22 @@ void dDlst_alphaModelData_c::draw(Mtx viewMtx) {
MTXConcat(mtx, tmp, tmp);
GFLoadPosMtxImm(tmp, GX_PNMTX1);
GXCallDisplayList(l_backRevZMat, sizeof(l_backRevZMat));
GXCallDisplayList(l_bonboriDL, sizeof(l_bonboriDL));
GXCallDisplayList(l_backRevZMat, 0x40);
GXCallDisplayList(l_bonboriDL, 0xa0);
GFSetCurrentMtx(GX_PNMTX1, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY);
GXCallDisplayList(l_bonboriDL, sizeof(l_bonboriDL));
GXCallDisplayList(l_bonboriDL, 0xa0);
GXCallDisplayList(l_frontZMat, sizeof(l_frontZMat));
GXCallDisplayList(l_frontZMat, 0x20);
GFSetCurrentMtx(GX_PNMTX0, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY);
GXCallDisplayList(l_bonboriDL, sizeof(l_bonboriDL));
GXCallDisplayList(l_bonboriDL, 0xa0);
GFSetCurrentMtx(GX_PNMTX1, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY);
GXCallDisplayList(l_bonboriDL, sizeof(l_bonboriDL));
GXCallDisplayList(l_bonboriDL, 0xa0);
GXCallDisplayList(l_frontNoZSubMat, sizeof(l_frontNoZSubMat));
GXCallDisplayList(l_frontNoZSubMat, 0x20);
GFSetCurrentMtx(GX_PNMTX0, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY);
GXCallDisplayList(l_bonboriDL, sizeof(l_bonboriDL));
GXCallDisplayList(l_bonboriDL, 0xa0);
GFSetCurrentMtx(GX_PNMTX1, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY);
GXCallDisplayList(l_bonboriDL, sizeof(l_bonboriDL));
GXCallDisplayList(l_bonboriDL, 0xa0);
} else if (mType == 5) {
/* Bonborix3 */
GFSetArray(GX_VA_POS, l_bonboriPos, sizeof(*l_bonboriPos));
@@ -547,53 +552,53 @@ void dDlst_alphaModelData_c::draw(Mtx viewMtx) {
MTXConcat(mtx, tmp, tmp);
GFLoadPosMtxImm(tmp, GX_PNMTX2);
GXCallDisplayList(l_backRevZMat, sizeof(l_backRevZMat));
GXCallDisplayList(l_bonboriDL, sizeof(l_bonboriDL));
GXCallDisplayList(l_backRevZMat, 0x40);
GXCallDisplayList(l_bonboriDL, 0xa0);
GFSetCurrentMtx(GX_PNMTX1, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY);
GXCallDisplayList(l_bonboriDL, sizeof(l_bonboriDL));
GXCallDisplayList(l_bonboriDL, 0xa0);
GFSetCurrentMtx(GX_PNMTX2, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY);
GXCallDisplayList(l_bonboriDL, sizeof(l_bonboriDL));
GXCallDisplayList(l_bonboriDL, 0xa0);
GXCallDisplayList(l_frontZMat, sizeof(l_frontZMat));
GXCallDisplayList(l_frontZMat, 0x20);
GFSetCurrentMtx(GX_PNMTX0, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY);
GXCallDisplayList(l_bonboriDL, sizeof(l_bonboriDL));
GXCallDisplayList(l_bonboriDL, 0xa0);
GFSetCurrentMtx(GX_PNMTX1, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY);
GXCallDisplayList(l_bonboriDL, sizeof(l_bonboriDL));
GXCallDisplayList(l_bonboriDL, 0xa0);
GFSetCurrentMtx(GX_PNMTX2, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY);
GXCallDisplayList(l_bonboriDL, sizeof(l_bonboriDL));
GXCallDisplayList(l_bonboriDL, 0xa0);
GXCallDisplayList(l_frontNoZSubMat, sizeof(l_frontNoZSubMat));
GXCallDisplayList(l_frontNoZSubMat, 0x20);
GFSetCurrentMtx(GX_PNMTX0, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY);
GXCallDisplayList(l_bonboriDL, sizeof(l_bonboriDL));
GXCallDisplayList(l_bonboriDL, 0xa0);
GFSetCurrentMtx(GX_PNMTX1, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY);
GXCallDisplayList(l_bonboriDL, sizeof(l_bonboriDL));
GXCallDisplayList(l_bonboriDL, 0xa0);
GFSetCurrentMtx(GX_PNMTX2, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY);
GXCallDisplayList(l_bonboriDL, sizeof(l_bonboriDL));
GXCallDisplayList(l_bonboriDL, 0xa0);
} else if (mType == 2) {
/* BeamCheck */
GFSetArray(GX_VA_POS, l_beam_checkPos, sizeof(*l_beam_checkPos));
GXCallDisplayList(l_backRevZMat, sizeof(l_backRevZMat));
GXCallDisplayList(l_beam_checkDL, sizeof(l_beam_checkDL));
GXCallDisplayList(l_frontZMat, sizeof(l_frontZMat));
GXCallDisplayList(l_beam_checkDL, sizeof(l_beam_checkDL));
GXCallDisplayList(l_frontNoZSubMat, sizeof(l_frontNoZSubMat));
GXCallDisplayList(l_beam_checkDL, sizeof(l_beam_checkDL));
GFSetArray(GX_VA_POS, l_s_beam_checkPos, sizeof(*l_s_beam_checkPos));
GXCallDisplayList(l_backRevZMat, 0x40);
GXCallDisplayList(l_s_beam_checkDL, 0xe0);
GXCallDisplayList(l_frontZMat, 0x20);
GXCallDisplayList(l_s_beam_checkDL, 0xe0);
GXCallDisplayList(l_frontNoZSubMat, 0x20);
GXCallDisplayList(l_s_beam_checkDL, 0xe0);
} else if (mType == 3) {
/* Cube */
/* BeamCheck */
GFSetArray(GX_VA_POS, l_cubePos, sizeof(*l_cubePos));
GXCallDisplayList(l_backRevZMat, sizeof(l_backRevZMat));
GXCallDisplayList(l_frontZMat, sizeof(l_frontZMat));
GXCallDisplayList(l_cubeDL, sizeof(l_cubeDL));
GXCallDisplayList(l_backRevZMat, 0x40);
GXCallDisplayList(l_frontZMat, 0x20);
GXCallDisplayList(l_cubeDL, 0xe0);
} else if (mType == 4) {
/* Bonbori2 */
GFSetArray(GX_VA_POS, l_bonbori2Pos, sizeof(*l_bonbori2Pos));
GXCallDisplayList(l_backRevZMat, sizeof(l_backRevZMat));
GXCallDisplayList(l_bonbori2DL, sizeof(l_bonbori2DL));
GXCallDisplayList(l_frontZMat, sizeof(l_frontZMat));
GXCallDisplayList(l_bonbori2DL, sizeof(l_bonbori2DL));
GXCallDisplayList(l_frontNoZSubMat, sizeof(l_frontNoZSubMat));
GXCallDisplayList(l_bonbori2DL, sizeof(l_bonbori2DL));
GXCallDisplayList(l_backRevZMat, 0x40);
GXCallDisplayList(l_bonbori2DL, 0x2a0);
GXCallDisplayList(l_frontZMat, 0x20);
GXCallDisplayList(l_bonbori2DL, 0x2a0);
GXCallDisplayList(l_frontNoZSubMat, 0x20);
GXCallDisplayList(l_bonbori2DL, 0x2a0);
}
}
@@ -623,17 +628,20 @@ dDlst_alphaModel_c * dDlst_alphaModel_c::create(int num) {
/* 80082EFC-80082F38 .text __dt__22dDlst_alphaModelData_cFv */
dDlst_alphaModelData_c::~dDlst_alphaModelData_c() {
/* Nonmatching */
}
/* 80082F38-80082F3C .text __ct__22dDlst_alphaModelData_cFv */
dDlst_alphaModelData_c::dDlst_alphaModelData_c() {
/* Nonmatching */
}
/* 80082F3C-80082F9C .text set__18dDlst_alphaModel_cFUcPA4_fUc */
BOOL dDlst_alphaModel_c::set(u8 type, Mtx mtx, u8 alpha) {
/* Nonmatching */
if (mNum >= mCapacity)
return FALSE;
mpData[mNum].set(type, mtx, alpha);
mNum++;
return TRUE;
}
/* 80082F9C-80083064 .text draw__18dDlst_alphaModel_cFPA4_f */
@@ -641,7 +649,7 @@ BOOL dDlst_alphaModel_c::draw(Mtx mtx) {
if (mNum == 0)
return FALSE;
static char l_matDL[0x60] = {};
static char l_matDL[0x64] __attribute__((aligned(32))) = {};
static GXVtxDescList l_vtxDescList[2] = {
};
@@ -649,7 +657,7 @@ BOOL dDlst_alphaModel_c::draw(Mtx mtx) {
static GXVtxAttrFmtList l_vtxAttrFmtList[2] = {
};
GXCallDisplayList(l_matDL, sizeof(l_matDL));
GXCallDisplayList(l_matDL, 0x60);
GFSetVtxDescv(l_vtxDescList);
GFSetVtxAttrFmtv(GX_VTXFMT0, l_vtxAttrFmtList);
GXSetClipMode(GX_CLIP_ENABLE);
@@ -705,6 +713,43 @@ char l_shadowVolumeDL[] = {
/* 80083064-800832C4 .text draw__22dDlst_alphaModelPacketFv */
void dDlst_alphaModelPacket::draw() {
/* Nonmatching */
GXSetNumChans(1);
GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_REG, 0, GX_DF_NONE, GX_AF_NONE);
GXSetChanMatColor(GX_COLOR0A0, mColor);
GXSetNumTexGens(0);
GXSetNumTevStages(1);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_RASC);
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_RASA);
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
GXSetZCompLoc(GX_TRUE);
GXSetZMode(GX_TRUE, GX_LEQUAL, GX_FALSE);
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_CLEAR);
GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0);
GXSetFog(GX_FOG_NONE, 0.0f, 0.0f, 0.0f, 0.0f, g_clearColor);
GXSetCullMode(GX_CULL_FRONT);
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_INDEX8);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
Mtx mtx;
MTXConcat(j3dSys.getViewMtx(), *mMtxP, mtx);
GXLoadPosMtxImm(mtx, GX_PNMTX0);
GXSetCurrentMtx(GX_PNMTX0);
if (mType == 0) {
GXSetArray(GX_VA_POS, l_bonboriPos, sizeof(*l_bonboriPos));
GXCallDisplayList(l_bonboriDL, 0xa0);
} else if (mType == 1) {
GXSetArray(GX_VA_POS, l_bonboriPos, sizeof(*l_bonboriPos));
GXCallDisplayList(l_bonboriDL, 0xa0);
} else if (mType == 2) {
GXSetArray(GX_VA_POS, l_s_beam_checkPos, sizeof(*l_s_beam_checkPos));
GXCallDisplayList(l_s_beam_checkDL, 0xe0);
} else if (mType == 3) {
GXSetArray(GX_VA_POS, l_cubePos, sizeof(*l_cubePos));
GXCallDisplayList(l_cubeDL, 0x40);
}
}
/* 800832C4-800833CC .text set__18dDlst_shadowPoly_cFP10cBgD_Vtx_tUsUsUsP8cM3dGPla */
@@ -1194,11 +1239,46 @@ void dDlst_list_c::calcWipe() {
mWipeDlst.mScrollS = mWipeRate * 2.0f;
mWipeDlst.mScrollT = mWipeDlst.mScrollS * 1.218f;
set2DXlu(&mWipeDlst);
dComIfGd_set2DXlu(&mWipeDlst);
}
}
camera_class * dCam_getCamera();
/* 80086790-8008696C .text dDlst_texSpecmapST__FPC4cXyzPC12dKy_tevstr_cP12J3DModelDataf */
void dDlst_texSpecmapST(const cXyz*, const dKy_tevstr_c*, J3DModelData*, f32) {
/* Nonmatching */
void dDlst_texSpecmapST(const cXyz* pos, const dKy_tevstr_c* tevStr, J3DModelData* modelData, f32 scale) {
static Mtx mtx_adj = {
0.5f, 0.0f, 0.0f, 0.5f,
0.0f, -0.5f, 0.0f, 0.5f,
0.0f, 0.0f, 1.0f, 0.0f,
};
f32 inv = 1.0f / scale;
camera_class * camera = dCam_getCamera();
cXyz lookDir = *pos - camera->mLookat.mEye;
cXyz refl;
cXyz lightDir;
dKyr_get_vectle_calc((cXyz*)&tevStr->mLightPosWorld, (cXyz*)pos, &lightDir);
C_VECHalfAngle(&lookDir, &lightDir, &refl);
Mtx reflMtx, effMtx;
C_MTXLookAt(reflMtx, &cXyz::Zero, &cXyz::BaseY, &refl);
MTXScale(effMtx, inv, inv, 1.0f);
MTXConcat(effMtx, mtx_adj, effMtx);
MTXConcat(effMtx, reflMtx, effMtx);
effMtx[0][3] = 0.0f;
effMtx[1][3] = 0.0f;
effMtx[2][3] = 0.0f;
s32 materialNum = modelData->getMaterialNum();
for (s32 i = 0; i < materialNum; i++) {
J3DMaterial* mat = modelData->getMaterialNodePointer(i);
for (s32 j = 0; j < 8; j++) {
J3DTexMtx* texMtx = mat->getTexMtx(j);
if (texMtx != NULL && texMtx->getTexMtxInfo().mInfo == 10) {
texMtx->getTexMtxInfo().setEffectMtx(effMtx);
}
}
}
}
+76 -11
View File
@@ -4,11 +4,16 @@
//
#include "d/d_particle.h"
#include "dolphin/types.h"
#include "JSystem/JParticle/JPAParticle.h"
#include "JSystem/JParticle/JPAEmitter.h"
#include "JSystem/JParticle/JPAEmitterManager.h"
#include "JSystem/JKernel/JKRSolidHeap.h"
#include "JSystem/JUtility/JUTAssert.h"
#include "SSystem/SComponent/c_malloc.h"
/* 8007A4D8-8007A514 .text __ct__18dPa_modelEmitter_cFv */
dPa_modelEmitter_c::dPa_modelEmitter_c() {
/* Nonmatching */
cNd_ForcedClear(this);
}
/* 8007A514-8007A804 .text __ct__21dPa_J3DmodelEmitter_cFP14JPABaseEmitterP12J3DModelDataR12dKy_tevstr_cP16J3DAnmTexPatternUsi */
@@ -29,19 +34,28 @@ void dPa_J3DmodelEmitter_c::draw() {
}
/* 8007ADC4-8007AECC .text __ct__18dPa_modelControl_cFP12J3DModelData */
dPa_modelControl_c::dPa_modelControl_c(J3DModelData*) {
/* Nonmatching */
dPa_modelControl_c::dPa_modelControl_c(J3DModelData* modelData) {
mModel = new dPa_J3Dmodel_c[0x80];
JUT_ASSERT(0x10f, mModel != 0);
dPa_J3Dmodel_c * model = mModel;
for (s32 i = 0; i < 0x80; i++, model++) {
model->mModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x37221223);
JUT_ASSERT(0x120, model->mModel != 0);
}
cLs_Create(this);
}
/* 8007AECC-8007AED8 .text __ct__14dPa_J3Dmodel_cFv */
dPa_J3Dmodel_c::dPa_J3Dmodel_c() {
/* Nonmatching */
mInit = 0;
}
/* 8007AED8-8007AF64 .text __dt__18dPa_modelControl_cFv */
dPa_modelControl_c::~dPa_modelControl_c() {
/* Nonmatching (node_class has no virtual destructor) */
node_class* node = parent.mpHead;
node_class* node = mpHead;
while (node) {
node_class* nextNode = node->mpNextNode;
cLs_SingleCut(node);
@@ -50,14 +64,56 @@ dPa_modelControl_c::~dPa_modelControl_c() {
}
}
dPa_J3Dmodel_c * dPa_modelControl_c::mModel;
/* 8007AF64-8007B074 .text newModel__18dPa_modelControl_cFP12J3DModelData */
void dPa_modelControl_c::newModel(J3DModelData*) {
/* Nonmatching */
J3DModel * dPa_modelControl_c::newModel(J3DModelData* modelData) {
dPa_J3Dmodel_c * model = mModel;
for (s32 i = 0; i < 0x80; i++, model++) {
if (model->mInit == 0) {
model->mInit = 1;
J3DModel * j3dmodel = model->mModel;
j3dmodel->mModelData = modelData;
J3DShapePacket * shapePacket = j3dmodel->getShapePacket(0);
for (u16 j = 0; j < modelData->getShapeNum(); shapePacket++, j++) {
shapePacket->setShape(modelData->getShapeNodePointer(j));
}
J3DMatPacket * matPacket = j3dmodel->getMatPacket(0);
for (u16 j = 0; j < modelData->getMaterialNum(); matPacket++, j++) {
J3DMaterial* mat = modelData->getMaterialNodePointer(j);
matPacket->setMaterial(mat);
J3DShapePacket * shapePacket = j3dmodel->getShapePacket(mat->getShape()->getIndex());
matPacket->setInitShapePacket(shapePacket);
matPacket->addShapePacket(shapePacket);
matPacket->setTexture(modelData->getTexture());
matPacket->setDisplayListObj(mat->getSharedDisplayListObj());
}
j3dmodel->mVertexBuffer.setVertexData(&modelData->getVertexData());
return model->mModel;
}
}
return NULL;
}
/* 8007B074-8007B158 .text draw__18dPa_modelControl_cFv */
void dPa_modelControl_c::draw() {
/* Nonmatching */
for (u32 i = 0; i < 0x80; i++)
mModel[i].mInit = 0;
dKy_GxFog_set();
for (node_class * nd = LIST_GET_HEAD(this); nd != NULL;) {
node_class* pNext = NODE_GET_NEXT(nd);
// TODO
nd = pNext;
}
}
/* 8007B158-8007B194 .text __ct__19dPa_followEcallBackFUcUc */
@@ -186,14 +242,23 @@ void dPa_windPcallBack::execute(JPABaseEmitter*, JPABaseParticle*) {
/* Nonmatching */
}
JPAEmitterManager * dPa_control_c::mEmitterMng;
/* 8007C8E8-8007C9A4 .text __ct__13dPa_control_cFv */
dPa_control_c::dPa_control_c() {
/* Nonmatching */
mHeap = mDoExt_createSolidHeapFromSystem(0x16e800, 0);
JUT_ASSERT(0x4d8, mHeap != 0);
mSceneNo = 0xFF;
mCount = 0;
mEmitterMng = NULL;
mNumSimple = 0;
mpCommonResMgr = NULL;
mpSceneResMgr = NULL;
}
/* 8007CA28-8007CA30 .text getRM_ID__13dPa_control_cFUs */
void dPa_control_c::getRM_ID(u16) {
/* Nonmatching */
u16 dPa_control_c::getRM_ID(u16 uid) {
return (uid >> 15) & 0x01;
}
/* 8007CA30-8007CA98 .text swapFrameBufferTexture__13dPa_control_cFv */
+51 -39
View File
@@ -575,18 +575,18 @@ s32 fopAcM_cullingCheck(fopAc_ac_c* i_this) {
cMtx_concat(j3dSys.getViewMtx(), i_this->mCullMtx, mtx);
pMtx = mtx;
}
f32 cullFar = i_this->mCullSizeFar;
if (dComIfGp_event_runCheck()) {
cullFar *= dComIfGp_event_getCullRate();
}
int cullType = i_this->mCullType;
bool isBox = false;
if ((cullType >= 0 && cullType < fopAc_CULLBOX_CUSTOM_e) || cullType == fopAc_CULLBOX_CUSTOM_e) {
isBox = true;
}
if (isBox) {
if (cullType == fopAc_CULLBOX_CUSTOM_e) {
if (i_this->mCullSizeFar > 0.0f) {
@@ -781,42 +781,42 @@ fopAc_ac_c* fopAcM_getEventPartner(fopAc_ac_c* i_this) {
/* 80026118-800261E8 .text fopAcM_createItemForPresentDemo__FP4cXyziUciiP5csXyzP4cXyz */
s32 fopAcM_createItemForPresentDemo(cXyz* pos, int i_itemNo, u8 param_3, int roomNo, int param_5, csXyz* rot, cXyz* scale) {
JUT_ASSERT(2413, 0 <= i_itemNo && i_itemNo < 256);
dComIfGp_event_setGtItm(i_itemNo);
if (i_itemNo == NO_ITEM) {
return -1;
}
return fopAcM_createDemoItem(pos, i_itemNo, roomNo, rot, param_5, scale, param_3);
}
/* 800261E8-800262B4 .text fopAcM_createItemForTrBoxDemo__FP4cXyziiiP5csXyzP4cXyz */
s32 fopAcM_createItemForTrBoxDemo(cXyz* pos, int i_itemNo, int roomNo, int param_5, csXyz* rot, cXyz* scale) {
JUT_ASSERT(2458, 0 <= i_itemNo && i_itemNo < 256);
dComIfGp_event_setGtItm(i_itemNo);
if (i_itemNo == NO_ITEM) {
return -1;
}
return fopAcM_createDemoItem(pos, i_itemNo, roomNo, rot, param_5, scale, 0);
}
/* 800262B4-80026694 .text fopAcM_createItemFromTable__FP4cXyziiiiP5csXyziP4cXyz */
s32 fopAcM_createItemFromTable(cXyz* p_pos, int i_itemNo, int i_itemBitNo, int roomNo, int type, csXyz* p_angle, int action, cXyz* p_scale) {
JUT_ASSERT(2514, 0 <= i_itemNo && i_itemNo < 64 && (-1 <= i_itemBitNo && i_itemBitNo <= 79) || i_itemBitNo == 127);
static cXyz fairy_offset_tbl[3] = {
cXyz(40.0f, 0.0f, 0.0f),
cXyz(-40.0f, 0.0f, 0.0f),
cXyz(0.0f, 0.0f, 40.0f),
};
cXyz pos(0.0f, 0.0f, 0.0f);
csXyz angle(0, 0, 0);
if (i_itemNo >= 0x20 && i_itemNo <= 0x3E) {
ItemTableList* itemTableList = dComIfGp_getItemTable();
int tableIdx = i_itemNo - 0x20;
@@ -861,7 +861,7 @@ s32 fopAcM_createItemFromTable(cXyz* p_pos, int i_itemNo, int i_itemBitNo, int r
if (p_angle) {
angle = *p_angle;
}
if (tableIdx == RECOVER_FAIRY) {
// Bug: This condition never gets triggered. They meant to check if (itemNo == RECOVER_FAIRY) so
// that the 3x fairies drop table (table 0x14) spawns them in a triangle. But nstead they check if
@@ -869,10 +869,10 @@ s32 fopAcM_createItemFromTable(cXyz* p_pos, int i_itemNo, int i_itemBitNo, int r
pos += fairy_offset_tbl[i];
angle.y = cM_rndF((f32)0x7FFE);
}
itemNo = getItemNoByLife((s8)itemNo);
daItem_c* item = (daItem_c*)fopAcM_fastCreateItem2(&pos, itemNo, i_itemBitNo, roomNo, type, &angle, 8, NULL);
lastItemPcId = fopAcM_GetID(item);
if (lastItemPcId == -1) {
break;
@@ -880,11 +880,11 @@ s32 fopAcM_createItemFromTable(cXyz* p_pos, int i_itemNo, int i_itemBitNo, int r
}
return lastItemPcId;
}
int itemIdx = (int)cM_rndF(15.9999f);
i_itemNo = itemTableList->mItemTables[tableIdx][itemIdx];
}
if (i_itemNo == 0x3F || i_itemNo == 0xFF) {
return -1;
} else {
@@ -906,7 +906,7 @@ s32 fopAcM_createShopItem(cXyz* pos, int i_itemNo, csXyz* rot, int roomNo, cXyz*
if (i_itemNo == NO_ITEM) {
return -1;
}
return fopAcM_create(PROC_ShopItem, i_itemNo, pos, roomNo, rot, scale, 0xFF, createFunc);
}
@@ -916,7 +916,7 @@ s32 fopAcM_createRaceItem(cXyz* pos, int i_itemNo, int i_itemBitNo, csXyz* rot,
if (i_itemNo == NO_ITEM) {
return -1;
}
i_itemNo = check_itemno(i_itemNo);
u32 params = (i_itemBitNo & 0x7F) << 0x08 | i_itemNo & 0xFF | (param_7 & 0xF) << 0xF;
fopAcM_create(PROC_RACEITEM, params, pos, roomNo, rot, scale, 0xFF, NULL);
@@ -928,7 +928,7 @@ s32 fopAcM_createDemoItem(cXyz* pos, int i_itemNo, int i_itemBitNo, csXyz* rot,
if (i_itemNo == NO_ITEM) {
return -1;
}
u32 params = i_itemNo & 0xFF | (i_itemBitNo & 0x7F) << 0x08 | (param_7 & 0xFF) << 0x10;
fopAcM_create(PROC_Demo_Item, params, pos, roomNo, rot, scale, 0xFF, NULL);
}
@@ -945,8 +945,7 @@ s32 fopAcM_createItemForBoss(cXyz* pos, int, int roomNo, csXyz* rot, cXyz* scale
}
/* 80026ADC-80026C90 .text fopAcM_createItem__FP4cXyziiiiP5csXyziP4cXyz */
s32 fopAcM_createItem(cXyz* pos, int i_itemNo, int i_itemBitNo, int roomNo, int type, csXyz* rot,
int action, cXyz* scale) {
s32 fopAcM_createItem(cXyz* pos, int i_itemNo, int i_itemBitNo, int roomNo, int type, csXyz* rot, int action, cXyz* scale) {
/* Nonmatching */
}
@@ -955,21 +954,21 @@ void* fopAcM_fastCreateItem2(cXyz* pos, int i_itemNo, int i_itemBitNo, int roomN
csXyz* rot, int action, cXyz* scale) {
/* Nonmatching (regswap) */
JUT_ASSERT(2995, 0 <= i_itemNo && i_itemNo < 256 && (-1 <= i_itemBitNo && i_itemBitNo <= 79) || i_itemBitNo == 127);
csXyz prmRot = csXyz::Zero;
if (i_itemNo == NO_ITEM) {
return NULL;
}
if (rot) {
prmRot = *rot;
}
prmRot.z = 0xFF;
u32 params = check_itemno(i_itemNo);
params = (i_itemBitNo & 0xFF) << 0x08 | params & 0xFF | 0x00FF0000 | (type & 3) << 0x18 | action << 0x1A;
params = (i_itemBitNo & 0xFF) << 0x08 | params & 0xFF | 0x00FF0000 | (type & 3) << 24 | action << 26;
daItem_c* item;
switch (i_itemNo) {
case RECOVER_FAIRY:
@@ -986,13 +985,26 @@ void* fopAcM_fastCreateItem2(cXyz* pos, int i_itemNo, int i_itemBitNo, int roomN
}
/* 80026E5C-80026F5C .text fopAcM_createItemForKP2__FP4cXyziiP5csXyzP4cXyzfffUs */
void fopAcM_createItemForKP2(cXyz*, int, int, csXyz*, cXyz*, float, float, float, u16) {
/* Nonmatching */
fopAc_ac_c* fopAcM_createItemForKP2(cXyz* pos, int i_itemNo, int roomNo, csXyz* rot, cXyz* scale, f32 speedF, f32 speedY, f32 gravity, u16 i_itemBitNo) {
JUT_ASSERT(0xc25, 0 <= i_itemNo && i_itemNo < 256);
if (i_itemNo == NO_ITEM)
return NULL;
fopAc_ac_c* ac = (fopAc_ac_c*)fopAcM_fastCreate(PROC_SPC_ITEM01, i_itemNo | (i_itemBitNo & 0xFFFF) << 8, pos, roomNo, rot, scale, 0xFF, NULL, NULL);
if (ac != NULL) {
fopAcM_SetSpeedF(ac, speedF);
ac->speed.y = speedY;
fopAcM_SetGravity(ac, gravity);
}
return ac;
}
/* 80026F5C-80026F98 .text fopAcM_createItemForSimpleDemo__FP4cXyziiP5csXyzP4cXyzff */
void* fopAcM_createItemForSimpleDemo(cXyz*, int, int, csXyz*, cXyz*, float, float) {
/* Nonmatching */
daItem_c* fopAcM_createItemForSimpleDemo(cXyz* pos, int i_itemNo, int roomNo, csXyz* rot, cXyz* scale, f32 speedF, f32 speedY) {
daItem_c* item = (daItem_c*)fopAcM_fastCreateItem(pos, i_itemNo, roomNo, rot, scale, speedF, speedY, -7.0f, 0xFFFFFFFF, NULL);
if (item != NULL)
item->mCurState = 5;
return item;
}
/* 80026F98-80027254 .text fopAcM_fastCreateItem__FP4cXyziiP5csXyzP4cXyzfffiPFPv_i */
@@ -1003,13 +1015,13 @@ void* fopAcM_fastCreateItem(cXyz* pos, int i_itemNo, int roomNo, csXyz* rot, cXy
if (i_itemNo == NO_ITEM) {
return NULL;
}
u32 params = (u8)check_itemno(i_itemNo) & 0xFF | (i_itemBitNo & 0xFF) << 0x08 | 0x28FF0000;
if (isHeart(i_itemNo)) {
speedF = 2.0f * speedF;
}
daItem_c* item;
csXyz prmRot;
switch (i_itemNo) {
@@ -1026,7 +1038,7 @@ void* fopAcM_fastCreateItem(cXyz* pos, int i_itemNo, int roomNo, csXyz* rot, cXy
}
prmRot.z = 0xFF;
prmRot.y += (int)cM_rndFX(0x2000);
item = (daItem_c*)fopAcM_fastCreate(PROC_ITEM, params, pos, roomNo, &prmRot, scale, 0xFF, createFunc, NULL);
if (item) {
item->speedF = speedF * (1.0f + cM_rndFX(0.3f));
@@ -1042,7 +1054,7 @@ void* fopAcM_fastCreateItem(cXyz* pos, int i_itemNo, int roomNo, csXyz* rot, cXy
prmRot = csXyz::Zero;
}
prmRot.z = 0xFF;
item = (daItem_c*)fopAcM_fastCreate(PROC_ITEM, params, pos, roomNo, &prmRot, scale, 0xFF, createFunc, NULL);
if (item) {
item->speedF = speedF;
@@ -1064,7 +1076,7 @@ BOOL stealItem_CB(void* actor) {
}
/* 80027280-800273D4 .text fopAcM_createStealItem__FP4cXyziiP5csXyzi */
void fopAcM_createStealItem(cXyz*, int, int, csXyz*, int) {
void fopAcM_createStealItem(cXyz* p_pos, int i_tblNo, int, csXyz*, int) {
/* Nonmatching */
}
@@ -1138,7 +1150,7 @@ void fopAcM_cancelCarryNow(fopAc_ac_c* i_this) {
fopAcM_OffStatus(i_this, fopAcStts_CARRY_e);
fopAcM_setRoomLayer(i_this, fopAcM_GetRoomNo(i_this));
i_this->shape_angle.z = 0;
if (dComIfGp_event_runCheck() && i_this->mGroup != fopAc_ENEMY_e) {
fopAcM_OnStatus(i_this, fopAcStts_UNK800_e);
}