From 87732304d15f80fa952a243bb3c6dec44f3f0856 Mon Sep 17 00:00:00 2001 From: Carco_21 <144170194+carter-ktb21@users.noreply.github.com> Date: Fri, 12 Dec 2025 23:54:42 -0500 Subject: [PATCH] d_particle debug work (#2944) * misc work * more work * fixed error * more work * PR cleanup * missed cleanup * error fix * wii fix --- include/JSystem/J2DGraph/J2DPicture.h | 4 +- .../JSystem/J3DGraphAnimator/J3DModelData.h | 2 +- include/JSystem/JMath/JMath.h | 6 + include/JSystem/JParticle/JPAEmitter.h | 18 +- include/JSystem/JParticle/JPAEmitterManager.h | 8 +- include/JSystem/JParticle/JPAParticle.h | 6 +- include/Z2AudioLib/Z2SeMgr.h | 1 + include/d/d_com_inf_game.h | 60 ++ include/d/d_drawlist.h | 56 ++ include/d/d_msg_object.h | 4 + include/d/d_particle.h | 45 +- include/d/d_s_play_env.h | 8 +- include/m_Do/m_Do_graphic.h | 8 +- src/Z2AudioLib/Z2SeMgr.cpp | 6 + src/d/d_com_inf_game.cpp | 220 ++++- src/d/d_drawlist.cpp | 28 +- src/d/d_particle.cpp | 787 +++++++++++------- 17 files changed, 894 insertions(+), 373 deletions(-) diff --git a/include/JSystem/J2DGraph/J2DPicture.h b/include/JSystem/J2DGraph/J2DPicture.h index f6e8ec3b31..bb71d97aa3 100644 --- a/include/JSystem/J2DGraph/J2DPicture.h +++ b/include/JSystem/J2DGraph/J2DPicture.h @@ -151,11 +151,11 @@ public: return NULL; } virtual u8 getTextureCount() const { return mTextureNum; } - virtual bool setBlack(JUtility::TColor i_black) { + /* vt 0x128 */ virtual bool setBlack(JUtility::TColor i_black) { mBlack = i_black; return true; } - virtual bool setWhite(JUtility::TColor i_white) { + /* vt 0x12C */ virtual bool setWhite(JUtility::TColor i_white) { mWhite = i_white; return true; } diff --git a/include/JSystem/J3DGraphAnimator/J3DModelData.h b/include/JSystem/J3DGraphAnimator/J3DModelData.h index 757c472820..ea1ef96813 100644 --- a/include/JSystem/J3DGraphAnimator/J3DModelData.h +++ b/include/JSystem/J3DGraphAnimator/J3DModelData.h @@ -86,7 +86,7 @@ public: int removeMatColorAnimator(J3DAnmColor* anm) { return mMaterialTable.removeMatColorAnimator(anm); } - void syncJ3DSys() { + void syncJ3DSys() const { syncJ3DSysFlags(); syncJ3DSysPointers(); } diff --git a/include/JSystem/JMath/JMath.h b/include/JSystem/JMath/JMath.h index 1142f41389..ee31b6e541 100644 --- a/include/JSystem/JMath/JMath.h +++ b/include/JSystem/JMath/JMath.h @@ -17,6 +17,12 @@ inline int JMAAbs(int value) { #endif } +inline f32 JMAAbs(f32 x) { +#ifdef __MWERKS__ + return __fabsf(x); +#endif +} + inline f32 JMAFastReciprocal(f32 value) { #ifdef __MWERKS__ return __fres(value); diff --git a/include/JSystem/JParticle/JPAEmitter.h b/include/JSystem/JParticle/JPAEmitter.h index eca7556754..ebf82df33e 100644 --- a/include/JSystem/JParticle/JPAEmitter.h +++ b/include/JSystem/JParticle/JPAEmitter.h @@ -134,6 +134,7 @@ public: void setGlobalTranslation(f32 x, f32 y, f32 z) { mGlobalTrs.set(x, y, z); } void setGlobalTranslation(const JGeometry::TVec3& trs) { mGlobalTrs.set(trs); } void getLocalTranslation(JGeometry::TVec3& vec) { vec.set(mLocalTrs); } + void getLocalTranslation(JGeometry::TVec3* vec) const { vec->set(mLocalTrs); } void setGlobalRotation(const JGeometry::TVec3& rot) { JPAGetXYZRotateMtx(rot.x, rot.y, rot.z, mGlobalRot); } @@ -143,6 +144,7 @@ public: void setGlobalAlpha(u8 alpha) { mGlobalPrmClr.a = alpha; } u8 getGlobalAlpha() const { return mGlobalPrmClr.a; } void getGlobalPrmColor(GXColor& color) { color = mGlobalPrmClr; } + void getGlobalPrmColor(_GXColor* color) const { *color = mGlobalPrmClr; } void setGlobalPrmColor(u8 r, u8 g, u8 b) { mGlobalPrmClr.r = r; mGlobalPrmClr.g = g; mGlobalPrmClr.b = b; } void setGlobalEnvColor(u8 r, u8 g, u8 b) { mGlobalEnvClr.r = r; mGlobalEnvClr.g = g; mGlobalEnvClr.b = b; } void setVolumeSize(u16 size) { mVolumeSize = size; } @@ -173,6 +175,18 @@ public: scale.z = 1.0f; #else scale.set(mGlobalPScl.x, mGlobalPScl.y, 1.0f); +#endif + } + void getGlobalParticleScale(JGeometry::TVec3* scale) const { + //TODO: Possible fakematch. Debug and Wii indicate TVec3::set, but using it breaks regalloc + // in dPa_gen_b_light8PcallBack::draw on GCN (where the call to set would normally be + // inlined). +#if PLATFORM_GCN + scale->x = mGlobalPScl.x; + scale->y = mGlobalPScl.y; + scale->z = 1.0f; +#else + scale->set(mGlobalPScl.x, mGlobalPScl.y, 1.0f); #endif } void setGlobalScale(const JGeometry::TVec3& scale) { @@ -208,7 +222,7 @@ public: void stopDrawParticle() { setStatus(JPAEmtrStts_StopDraw); } void playDrawParticle() { clearStatus(JPAEmtrStts_StopDraw); } - uintptr_t getUserWork() { return mpUserWork; } + uintptr_t getUserWork() const { return mpUserWork; } void setUserWork(uintptr_t userWork) { mpUserWork = userWork; } u32 getParticleNumber() const { return mAlivePtclBase.getNum() + mAlivePtclChld.getNum(); @@ -218,7 +232,7 @@ public: } void setDrawTimes(u8 drawTimes) { mDrawTimes = drawTimes; } void setParticleCallBackPtr(JPAParticleCallBack* cb) { mpPtclCallBack = cb; } - JPAParticleCallBack* getParticleCallBackPtr() { return mpPtclCallBack; } + JPAParticleCallBack* getParticleCallBackPtr() const { return mpPtclCallBack; } JPAEmitterCallBack* getEmitterCallBackPtr() const { return mpEmtrCallBack; } u32 getAge() const { return mTick; } diff --git a/include/JSystem/JParticle/JPAEmitterManager.h b/include/JSystem/JParticle/JPAEmitterManager.h index f0380d0dbb..8aeb2f56cd 100644 --- a/include/JSystem/JParticle/JPAEmitterManager.h +++ b/include/JSystem/JParticle/JPAEmitterManager.h @@ -6,6 +6,7 @@ #include "JSystem/JParticle/JPADrawInfo.h" #include "JSystem/JSupport/JSUList.h" #include "JSystem/JGeometry.h" +#include "JSystem/JUtility/JUTAssert.h" class JPAEmitterCallBack; class JPAParticleCallBack; @@ -32,7 +33,12 @@ public: void entryResourceManager(JPAResourceManager*, u8); void clearResourceManager(u8); void calcYBBCam(); - JPAResourceManager* getResourceManager(u16 idx) { return pResMgrAry[idx]; } + JPAResourceManager* getResourceManager(u16 idx) const { return pResMgrAry[idx]; } + JPAResourceManager* getResourceManager(u8 res_mgr_id) const { + JUT_ASSERT(147, res_mgr_id < ridMax); + return pResMgrAry[res_mgr_id]; + } + int getEmitterNumber() const { return emtrNum - mFreeEmtrList.getNumLinks(); } public: /* 0x00 */ JSUList* pEmtrUseList; diff --git a/include/JSystem/JParticle/JPAParticle.h b/include/JSystem/JParticle/JPAParticle.h index ac6cd9798f..e6e0bec6f4 100644 --- a/include/JSystem/JParticle/JPAParticle.h +++ b/include/JSystem/JParticle/JPAParticle.h @@ -27,12 +27,14 @@ public: bool canCreateChild(JPAEmitterWorkData*); f32 getWidth(JPABaseEmitter const*) const; f32 getHeight(JPABaseEmitter const*) const; - int getAge() { return mAge; } + int getAge() const { return mAge; } void setOffsetPosition(const JGeometry::TVec3& pos) { mOffsetPosition.set(pos); } void setOffsetPosition(f32 x, f32 y, f32 z) { mOffsetPosition.set(x, y, z); } void getOffsetPosition(JGeometry::TVec3& pos) { pos.set(mOffsetPosition); } + void getOffsetPosition(JGeometry::TVec3* pos) const { pos->set(mOffsetPosition); } u16 getRotateAngle() const { return mRotateAngle; } void getGlobalPosition(JGeometry::TVec3& pos) const { pos.set(mPosition); } + void getGlobalPosition(JGeometry::TVec3* pos) const { pos->set(mPosition); } f32 getParticleScaleX() const { return mParticleScaleX; } f32 getParticleScaleY() const { return mParticleScaleY; } void setStatus(u32 flag) { mStatus |= flag; } @@ -42,7 +44,9 @@ public: void setDeleteParticleFlag() { setStatus(2); } void getVelVec(JGeometry::TVec3& vec) const { vec.set(mVelocity); } void getLocalPosition(JGeometry::TVec3& vec) const { vec.set(mLocalPosition); } + void getLocalPosition(JGeometry::TVec3* vec) const { vec->set(mLocalPosition); } void getBaseAxis(JGeometry::TVec3& vec) const { vec.set(mBaseAxis); } + void getBaseAxis(JGeometry::TVec3* vec) const { vec->set(mBaseAxis); } public: /* 0x00 */ JGeometry::TVec3 mPosition; diff --git a/include/Z2AudioLib/Z2SeMgr.h b/include/Z2AudioLib/Z2SeMgr.h index 8f04dbe2b6..3f8ca03eb3 100644 --- a/include/Z2AudioLib/Z2SeMgr.h +++ b/include/Z2AudioLib/Z2SeMgr.h @@ -75,6 +75,7 @@ public: void setLevObjSE(u32 soundID, Vec* posPtr, s8 reverb); void setMultiTriggerSE(u32 soundID, Vec* posPtr, s8 reverb); void processSeFramework(); + void playNaviFlySound(f32, f32); bool isLevelSe(JAISoundID soundID); bool isSoundCulling(JAISoundID soundID); void resetCrowdSize() { mCrowdSize = 0; } diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 88263a5cb8..8613b3ae98 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -14,6 +14,7 @@ #include "f_op/f_op_actor.h" #include "global.h" #include "m_Do/m_Do_controller_pad.h" +#include "m_Do/m_Do_graphic.h" class JKRAramArchive; class dSmplMdl_draw_c; @@ -838,8 +839,57 @@ public: dComIfG_inf_c() { this->ct(); } ~dComIfG_inf_c() {} void ct(); + void createBaseCsr(); dComIfG_play_c& getPlay() { return play; } +#if PLATFORM_WII || VERSION == VERSION_SHIELD_DEBUG + class baseCsr_c : public mDoGph_gInf_c::csr_c { + public: + class navi_c { + public: + virtual ~navi_c() {} + int create(); + bool draw(f32, f32, u8); + u32 getParticleId() { return mParticleId; } + + JKRSolidHeap* m_heap; + J3DModel* m_model; + mDoExt_bckAnm m_bck; + mDoExt_brkAnm m_brk; + cXyz field_0x40; + csXyz field_0x4c; + f32 field_0x54; + f32 field_0x58; + f32 field_0x5c; + u32 mParticleId; + }; + + virtual ~baseCsr_c() {} + baseCsr_c(u8); + void draw(f32, f32); + void create(); + static void particleExecute(); + static navi_c* getNavi() { return m_navi; } + + dDlst_blo_c field_0x8; + u8 field_0x13c; + u8 field_0x13d; + u8 field_0x13e; + + static dPa_hermiteEcallBack_c m_blurCB; + static u32 _m_blurID; + static navi_c* m_navi; + }; + + class anmCsr_c : public mDoGph_gInf_c::csr_c { + public: + virtual ~anmCsr_c() {} + void draw(f32, f32); + + dDlst_blo_c field_0x8; + }; +#endif + /* 0x00000 */ dSv_info_c info; /* 0x00F38 */ dComIfG_play_c play; /* 0x05F64 */ dDlst_list_c drawlist; @@ -858,6 +908,9 @@ public: /* 0x1DE0C */ u8 field_0x1de0c; static __d_timer_info_c dComIfG_mTimerInfo; + #if PLATFORM_WII || VERSION == VERSION_SHIELD_DEBUG + static baseCsr_c* m_baseCsr; + #endif }; // Size: 0x1DE10 STATIC_ASSERT(122384 == sizeof(dComIfG_inf_c)); @@ -4430,4 +4483,11 @@ inline void dComIfGd_set3DlineMatDark(mDoExt_3DlineMat_c* param_0) { g_dComIfG_gameInfo.drawlist.set3DlineMatDark(param_0); } +#if PLATFORM_WII || VERSION == VERSION_SHIELD_DEBUG +inline void dComIfGd_setListCursor() { + g_dComIfG_gameInfo.drawlist.setOpaListCursor(); + g_dComIfG_gameInfo.drawlist.setXluListCursor(); +} +#endif + #endif /* D_COM_D_COM_INF_GAME_H */ diff --git a/include/d/d_drawlist.h b/include/d/d_drawlist.h index 02c4e41d5b..38b4861bcb 100644 --- a/include/d/d_drawlist.h +++ b/include/d/d_drawlist.h @@ -2,6 +2,7 @@ #define D_D_DRAWLIST_H #include "JSystem/J2DGraph/J2DPicture.h" +#include "JSystem/J2DGraph/J2DScreen.h" #include "SSystem/SComponent/c_m3d_g_pla.h" #include "f_op/f_op_view.h" #include "m_Do/m_Do_ext.h" @@ -35,6 +36,57 @@ public: virtual void draw() {} }; +class dDlst_blo_c : public dDlst_base_c { +public: + virtual void draw(); + bool create(JKRArchive* param_1, const char* param_2) { + return mScreen.setPriority(param_2, 0x20000, param_1) != 0; + } + + J2DPane* getPane(u64 i_tag) { + return mScreen.search(i_tag); + } + + J2DPicture* getPicture(u64 i_tag) { + J2DPane* pane = getPane(i_tag); + JUT_ASSERT(1553, pane != NULL); + if (pane->getTypeID() != 0x12) { + return NULL; + } + return (J2DPicture*)pane; + } + + J2DScreen* getScreen() { return &mScreen; } + + void setPos(u64 param_1, f32 param_2, f32 param_3) { + + } + + class anm_c { + public: + inline anm_c() { + field_0x4 = 0; + field_0x8 = 1.0f; + } + ~anm_c() { remove(); } + + void remove() { + if (field_0x4 != 0.0f) { + + } + + field_0x4 = 0.0f; + } + + f32 field_0x4; + f32 field_0x8; + }; + + /* 0x004 */ int field_0x4; + /* 0x008 */ J2DScreen mScreen; + /* 0x120 */ anm_c anm; +}; + class dDlst_snapShot_c : public dDlst_base_c { public: virtual void draw(); @@ -368,6 +420,10 @@ public: void setXluListZxlu() { setXluDrawList(mDrawBuffers[DB_LIST_Z_XLU]); } void setOpaListFilter() { setOpaDrawList(mDrawBuffers[DB_LIST_FILTER]); } void setXluListFilter() { setXluDrawList(mDrawBuffers[DB_LIST_FILTER]); } + #if PLATFORM_WII || VERSION == VERSION_SHIELD_DEBUG + void setOpaListCursor() { setOpaDrawList(mDrawBuffers[DB_LIST_CURSOR]); } + void setXluListCursor() { setXluDrawList(mDrawBuffers[DB_LIST_CURSOR]); } + #endif void set3DlineMat(mDoExt_3DlineMat_c *param_1) { m3DLineMatSortPacket[param_1->getMaterialID()].setMat(param_1); } diff --git a/include/d/d_msg_object.h b/include/d/d_msg_object.h index 65c205d6da..133b9f88ab 100644 --- a/include/d/d_msg_object.h +++ b/include/d/d_msg_object.h @@ -552,6 +552,10 @@ inline void dMsgObject_setInsectItemNo(u8 i_insectItemNo) { dMsgObject_getMsgObjectClass()->setInsectItemNo(i_insectItemNo); } +inline bool dMsgObject_isSelectTalkNowCheck() { + return dMsgObject_getMsgObjectClass()->getStatus() != 8 || (dMsgObject_getMsgObjectClass()->getStatus() != 9 && dMsgObject_getMsgObjectClass()->getStatus() != 20); +} + class dMsgObject_HowlHIO_c { public: dMsgObject_HowlHIO_c(); diff --git a/include/d/d_particle.h b/include/d/d_particle.h index a9b4af7e6c..ed9bac9b2d 100644 --- a/include/d/d_particle.h +++ b/include/d/d_particle.h @@ -1,6 +1,7 @@ #ifndef D_PARTICLE_D_PARTICLE_H #define D_PARTICLE_D_PARTICLE_H +#include "JSystem/JParticle/JPAEmitterManager.h" #include "SSystem/SComponent/c_m3d_g_pla.h" #include "JSystem/JParticle/JPAEmitter.h" #include "JSystem/JParticle/JPAParticle.h" @@ -17,7 +18,7 @@ class JKRSolidHeap; class dKy_tevstr_c; class fopAc_ac_c; -class dPa_levelEcallBack : public JPAEmitterCallBack { +class dPa_levelEcallBack : public JPAEmitterCallBack { public: virtual ~dPa_levelEcallBack() { cleanup(); } virtual void setup(JPABaseEmitter*, const cXyz*, const csXyz*, s8) = 0; @@ -44,7 +45,7 @@ public: virtual void draw(JPABaseEmitter*); void removeEmitter() { mEmitter = NULL; } - u16 getID() const { return mID; } + u16 getID() { return mID; } /* 0x04 */ JPABaseEmitter* mEmitter; /* 0x08 */ u16 mID; @@ -54,18 +55,18 @@ public: /* 0x10 */ dPa_simpleData_c* mData; }; // Size: 0x14 -class dPa_windPcallBack : public JPAParticleCallBack { -public: - virtual ~dPa_windPcallBack() {} - virtual void execute(JPABaseEmitter*, JPABaseParticle*); -}; - class dPa_modelPcallBack : public JPAParticleCallBack { public: virtual ~dPa_modelPcallBack() {} virtual void draw(JPABaseEmitter*, JPABaseParticle*); }; +class dPa_windPcallBack : public JPAParticleCallBack { +public: + virtual ~dPa_windPcallBack() {} + virtual void execute(JPABaseEmitter*, JPABaseParticle*); +}; + class dPa_modelEcallBack : public dPa_levelEcallBack { public: struct model_c { @@ -73,16 +74,16 @@ public: void setup(); void cleanup(); void draw(f32 (*)[4]); - model_c() { field_0x0 = NULL; } + model_c() { mModelData = NULL; } void reset() { - field_0x0 = NULL; + mModelData = NULL; } u8 getRotAxis() { return mRotAxis; } - J3DModelData* getModelData() { return field_0x0; } + J3DModelData* getModelData() { return mModelData; } - J3DModelData* field_0x0; + J3DModelData* mModelData; J3DAnmBase* field_0x4; dKy_tevstr_c field_0x8; u8 mRotAxis; @@ -119,6 +120,9 @@ public: static dPa_modelPcallBack mPcallback; static model_c* mModel; + #if DEBUG + static u8 mNum; + #endif }; class dPa_selectTexEcallBack : public dPa_levelEcallBack { @@ -183,6 +187,7 @@ public: class dPa_gen_d_light8EcallBack : public dPa_levelEcallBack { public: + virtual ~dPa_gen_d_light8EcallBack() {} virtual void draw(JPABaseEmitter*); virtual void drawAfter(JPABaseEmitter*) { dPa_cleanupGX(); } virtual void setup(JPABaseEmitter*, cXyz const*, csXyz const*, s8); @@ -232,6 +237,7 @@ public: virtual void setup(JPABaseEmitter*, cXyz const*, csXyz const*, s8); void setRate(f32 rate) { mRate = rate; } + void setMaxCnt(int i_maxCnt) { mMaxCnt = i_maxCnt; } private: /* 0x04 */ f32 mRate; @@ -282,11 +288,16 @@ public: u32 getId() { return mId; } void clearStatus() { mStatus = 0; } + #if DEBUG + void onEventMove() { mStatus |= (u8)2; } + void offEventMove() { mStatus &= (u8)~2; } + #else void onEventMove() { mStatus |= 2; } void offEventMove() { mStatus &= ~2; } + #endif bool isEventMove() { return mStatus & 2; } - void offActive() { mStatus &= ~1; } + void offActive() { mStatus &= (u8)~1; } bool isActive() { return mStatus & 1; } u16 getNameId() { return mNameId; } dPa_levelEcallBack* getCallback() { return mCallback; } @@ -402,7 +413,7 @@ public: void draw2DmenuBack(JPADrawInfo* i_drawInfo) { draw(i_drawInfo, 18); } JKRSolidHeap* getHeap() { return mHeap; } - JKRSolidHeap* getSceneHeap() { return m_sceneHeap; } + JKRSolidHeap* getSceneHeap() { return mSceneHeap; } JKRExpHeap* getResHeap() { return m_resHeap; } void levelAllForceOnEventMove() { field_0x210.allForceOnEventMove(); } @@ -423,6 +434,7 @@ public: } static JPAEmitterManager* getEmitterManager() { return mEmitterMng; } + static int getEmitterNum() { return mEmitterMng->getEmitterNumber(); }; static dPa_light8PcallBack* getLight8PcallBack() { return &mLight8PcallBack; @@ -479,7 +491,7 @@ private: /* 0x000 */ JKRSolidHeap* mHeap; /* 0x004 */ JPAResourceManager* mCommonResMng; /* 0x008 */ JKRExpHeap* m_resHeap; - /* 0x00C */ JKRSolidHeap* m_sceneHeap; + /* 0x00C */ JKRSolidHeap* mSceneHeap; /* 0x010 */ void* m_sceneRes; /* 0x014 */ JPAResourceManager* mSceneResMng; /* 0x018 */ u8 field_0x18; @@ -488,6 +500,9 @@ private: /* 0x01B */ u8 field_0x1b; /* 0x01C */ dPa_simpleEcallBack field_0x1c[25]; /* 0x210 */ level_c field_0x210; + #if DEBUG + u8 mSceneCount; + #endif }; #endif /* D_PARTICLE_D_PARTICLE_H */ diff --git a/include/d/d_s_play_env.h b/include/d/d_s_play_env.h index f14e1f6ef3..79eed8a63d 100644 --- a/include/d/d_s_play_env.h +++ b/include/d/d_s_play_env.h @@ -7,6 +7,12 @@ public: virtual ~dScnPly_env_otherHIO_c() {} void genMessage(JORMContext*); + void addSetEmitterID(u16 param_0) { + #if DEBUG + field_0x1c[field_0x4f++] = param_0; + field_0x4f %= 20; + #endif + } #if DEBUG /* 0x04 */ s8 field_0x04; @@ -21,7 +27,7 @@ public: /* 0x16 */ s16 mRailColorG; /* 0x18 */ s16 mRailColorB; /* 0x1A */ s16 field_0x1a; - /* 0x1C */ s16 field_0x1c[20]; + /* 0x1C */ u16 field_0x1c[20]; #endif /* 0x44 */ u8 mAdjustLODBias; diff --git a/include/m_Do/m_Do_graphic.h b/include/m_Do/m_Do_graphic.h index 7bb876f1ee..861575787b 100644 --- a/include/m_Do/m_Do_graphic.h +++ b/include/m_Do/m_Do_graphic.h @@ -55,12 +55,16 @@ public: #if PLATFORM_WII || PLATFORM_SHIELD class csr_c { public: - virtual ~csr_c(); + virtual ~csr_c() {} virtual bool isPointer(); - void particleExecute(); + static void particleExecute(); + static u32 getBlurID() { return m_blurID; } static u32 m_blurID; + static cXyz m_oldEffPos; + static cXyz m_oldOldEffPos; + static cXyz m_nowEffPos; }; static void entryBaseCsr(csr_c*); diff --git a/src/Z2AudioLib/Z2SeMgr.cpp b/src/Z2AudioLib/Z2SeMgr.cpp index 934e15110c..c53af03ece 100644 --- a/src/Z2AudioLib/Z2SeMgr.cpp +++ b/src/Z2AudioLib/Z2SeMgr.cpp @@ -999,6 +999,12 @@ void Z2SeMgr::processSeFramework() { } } +#if PLATFORM_WII || VERSION == VERSION_SHIELD_DEBUG +void Z2SeMgr::playNaviFlySound(f32 param_1, f32 param_2) { + wii_field_0x6c = param_1; + wii_field_0x70 = JMAAbs(param_2); +} +#endif bool Z2SeMgr::isLevelSe(JAISoundID soundID) { switch (soundID) { diff --git a/src/d/d_com_inf_game.cpp b/src/d/d_com_inf_game.cpp index d99996c45c..bd451371c0 100644 --- a/src/d/d_com_inf_game.cpp +++ b/src/d/d_com_inf_game.cpp @@ -938,8 +938,205 @@ dTimer_c* dComIfG_play_c::getTimerPtr() { return mTimerInfo.mTimerPtr; } +#if PLATFORM_WII || VERSION == VERSION_SHIELD_DEBUG +int dComIfG_inf_c::baseCsr_c::navi_c::create() { + m_heap = mDoExt_createSolidHeapFromGameToCurrent(0, 32); + JUT_ASSERT(1323, m_heap != NULL); + + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("NNGC", "nv.bmd"); + + JUT_ASSERT(1327, modelData != NULL); + + m_model = mDoExt_J3DModel__create(modelData, J3DMdlFlag_DifferedDLBuffer, 0x11000084); + JUT_ASSERT(1331, m_model != NULL); + + J3DAnmTransform* bck = (J3DAnmTransform*)dComIfG_getObjectRes("NNGC", "waitA.bck"); + JUT_ASSERT(1334, bck != NULL); + + int rt = m_bck.init(bck, 1, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, false); + JUT_ASSERT(1336, rt); + + J3DAnmTevRegKey* brk = (J3DAnmTevRegKey*)dComIfG_getObjectRes("NNGC", "nv_color.brk"); + rt = m_brk.init(modelData, brk, 0, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1); + JUT_ASSERT(1340, rt); + + mDoExt_adjustSolidHeap(m_heap); + mDoExt_restoreCurrentHeap(); + + return rt; +} + +bool dComIfG_inf_c::baseCsr_c::navi_c::draw(f32 param_1, f32 param_2, u8 param_3) { + f32 fVar1 = (param_1 - mDoGph_gInf_c::getMinXF()) / mDoGph_gInf_c::getWidthF(); + f32 fVar2 = (param_2 - mDoGph_gInf_c::getMinYF()) / mDoGph_gInf_c::getHeightF(); + f32 fVar3 = fVar1 - field_0x58; + f32 fVar4 = fVar2 - field_0x5c; + field_0x58 = fVar1; + field_0x5c = fVar2; + f32 x = param_1 - 304.0f; + f32 y = param_2 - 224.0f; + cXyz spdc(x, y, 0.0f); + + if (param_3 != 0) { + fVar1 = 1.5f; + } else { + fVar1 = 0.0f; + } + f32 target = fVar1; + + cLib_chaseF(&field_0x54, target, 0.15f); + + if (field_0x54 == 0.0f) { + return true; + } + + cLib_addCalcAngleS2(&field_0x4c.y, cLib_targetAngleY(&field_0x40, &spdc), 6, 4000); + field_0x40 = spdc; + mDoMtx_stack_c::transS(field_0x40); + mDoMtx_stack_c::YrotM(field_0x4c.y); + mDoMtx_stack_c::scaleM(field_0x54, -field_0x54, field_0x54); + m_model->setBaseTRMtx(mDoMtx_stack_c::get()); + m_bck.play(); + J3DModelData* modelData = m_model->getModelData(); + m_bck.entry(modelData); + m_brk.entry(modelData); + dComIfGd_setListCursor(); + mDoExt_modelUpdateDL(m_model); + dComIfGd_setList(); + + if (field_0x58 >= 0.0f && field_0x58 <= 1.0f && fVar2 >= 0.0f && fVar2 <= 1.0f) { + f32 sqrt = JMAFastSqrt(SQUARE(fVar3) + SQUARE(fVar4)); + Z2GetAudioMgr()->playNaviFlySound(field_0x58, cLib_maxLimit(sqrt, 1.0f)); + } + + mParticleId = dComIfGp_particle_set(mParticleId, ID_ZR_J_2DNV_TAIL_A, &field_0x40, &field_0x4c, NULL); + dComIfGp_particle_levelEmitterOnEventMove(mParticleId); + + JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mParticleId); + if (emitter != NULL) { + fVar1 = field_0x54 * 0.5f; + JGeometry::TVec3 scale(fVar1, fVar1, fVar1); + emitter->setGlobalScale(scale); + } + + return param_3 == 0; +} + +dComIfG_inf_c::baseCsr_c::baseCsr_c(u8 param_1) { + field_0x13c = 1; + field_0x13d = param_1; + field_0x13e = 1; + m_blurCB.setOldPosP(&mDoGph_gInf_c::csr_c::m_oldEffPos, &mDoGph_gInf_c::csr_c::m_oldOldEffPos); +} + +void dComIfG_inf_c::baseCsr_c::draw(f32 param_1, f32 param_2) { + static cXyz effScale(0.53f, 0.53f, 0.53f); + u32 uVar1 = 0; + s8 bVar1 = true; + s8 bVar2 = true; + s8 bVar3 = true; + s8 bVar4 = true; + s8 bVar5 = true; + + if (field_0x13e && dComIfGp_event_runCheck()) { + bVar5 = false; + } + + if (!bVar5 && !dComIfGp_isPauseFlag()) { + bVar4 = false; + } + + if (!bVar4) { + bVar5 = false; + if (dMsgObject_getMsgObjectClass() && dMsgObject_isSelectTalkNowCheck()) { + bVar5 = true; + } + + if (!bVar5) { + bVar3 = false; + } + } + + if (!bVar3 && !dMeter2Info_isShopTalkFlag()) { + bVar2 = false; + } + + if (!bVar2 && dComIfGp_isHeapLockFlag() != 6) { + bVar1 = false; + } + + u8 uVar2 = 0; + if (bVar1 && field_0x13d) { + uVar2 = 1; + } + + if (m_navi->draw(param_1, param_2, uVar2) && bVar1 && field_0x13c) { + uVar1 = 0xFF; + } + + J2DPicture* picture = field_0x8.getPicture(uVar1); + JUT_ASSERT(1450, picture != NULL); + picture->scale(1.3f, 1.3f); + JUtility::TColor color = picture->getWhite(); + cLib_chaseUC(&color.a, uVar1, 0x20); + picture->setWhite(color); + + if (color.a != 0) { + picture->translate(param_1, param_2); + dComIfGd_set2DXlu(&field_0x8); + + if (color.a == 0xFF) { + f32 absVal = mDoGph_gInf_c::csr_c::m_nowEffPos.abs2(mDoGph_gInf_c::csr_c::m_oldEffPos); + JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mDoGph_gInf_c::csr_c::m_blurID); + if (absVal > 289.0f || (emitter != NULL && absVal > 9.0f)) { + mDoGph_gInf_c::csr_c::m_blurID = g_dComIfG_gameInfo.play.getParticle()->set(mDoGph_gInf_c::csr_c::m_blurID, 17, ID_ZR_J_POINTINGCURSOR_TAIL_B, + &mDoGph_gInf_c::csr_c::m_nowEffPos, NULL, NULL, &effScale, 0xFF, &m_blurCB, + -1, NULL, NULL, NULL, 1.0f); + dComIfGp_particle_levelEmitterOnEventMove(mDoGph_gInf_c::csr_c::m_blurID); + } + + m_blurCB.setRate(3.5f); + m_blurCB.setMaxCnt(40); + } + } +} + +void dComIfG_inf_c::baseCsr_c::create() { + dRes_info_c* resInfo = dComIfG_getObjectResInfo("NNGC"); + JUT_ASSERT(1495, resInfo != NULL); + + int rt = field_0x8.create(resInfo->getArchive(), "zelda_pointing_cursor_navi.blo"); + JUT_ASSERT(1498, rt); + + J2DPicture* picture = field_0x8.getPicture(rt); + JUT_ASSERT(1500, picture != NULL); + JUtility::TColor color = picture->getWhite(); + picture->setWhite(color); + + field_0x8.getScreen()->setUserInfo((uintptr_t)m_navi); + + m_navi = new navi_c(); + JUT_ASSERT(1517, m_navi != NULL); + m_navi->create(); +} + +void dComIfG_inf_c::baseCsr_c::particleExecute() { + if (m_navi != NULL) { + dComIfGp_particle_levelExecute(m_navi->getParticleId()); + } +} + +void dComIfG_inf_c::anmCsr_c::draw(f32 param_1, f32 param_2) { + field_0x8.setPos(0x636B, param_1, param_2); + dComIfGd_set2DXlu(&field_0x8); +} +#endif + void dComIfG_inf_c::ct() { mFadeBrightness = 255; + #if DEBUG + mIsDebugMode = 0; + #endif play.ct(); mWorldDark = 0; field_0x1ddfa = -1; @@ -952,6 +1149,16 @@ void dComIfG_inf_c::ct() { field_0x1de0a = 0xFF; } +#if PLATFORM_WII || VERSION == VERSION_SHIELD_DEBUG +void dComIfG_inf_c::createBaseCsr() { + JUT_ASSERT(1622, m_baseCsr == NULL); + m_baseCsr = new baseCsr_c(1); + JUT_ASSERT(1624, m_baseCsr != NULL); + m_baseCsr->create(); + mDoGph_gInf_c::entryBaseCsr(m_baseCsr); +} +#endif + GXColor g_clearColor = {0, 0, 0, 0}; GXColor g_blackColor = {0, 0, 0, 255}; @@ -974,15 +1181,22 @@ int dComIfG_changeOpeningScene(scene_class* i_scene, s16 i_procName) { } BOOL dComIfG_resetToOpening(scene_class* i_scene) { - if (mDoRst::isReturnToMenu() || !mDoRst::isReset() || - mDoGph_gInf_c::getFader()->getStatus() == 2) - { + #if PLATFORM_WII || VERSION == VERSION_SHIELD_DEBUG + if (mDoRst::isShutdown() || mDoRst::isReturnToMenu() || !mDoRst::isReset() || mDoGph_gInf_c::getFader()->getStatus() == 2) { return 0; } + #else + if (mDoRst::isReturnToMenu() || !mDoRst::isReset() || mDoGph_gInf_c::getFader()->getStatus() == 2) { + return 0; + } + #endif dComIfG_changeOpeningScene(i_scene, PROC_OPENING_SCENE); mDoAud_bgmStop(30); mDoAud_resetProcess(); + #if PLATFORM_WII || VERSION == VERSION_SHIELD_DEBUG + mDoGph_gInf_c::resetDimming(); + #endif return 1; } diff --git a/src/d/d_drawlist.cpp b/src/d/d_drawlist.cpp index 7a64286c75..6d90b08181 100644 --- a/src/d/d_drawlist.cpp +++ b/src/d/d_drawlist.cpp @@ -13,32 +13,6 @@ #include "m_Do/m_Do_lib.h" #include "m_Do/m_Do_mtx.h" -class dDlst_blo_c : public dDlst_base_c { -public: - virtual void draw(); - bool create(JKRArchive* param_1, char* param_2) { - return mScreen.setPriority(param_2,0x20000,param_1) != 0; - } - - J2DPane* getPane(u64 i_tag) { - return mScreen.search(i_tag); - } - - J2DPicture* getPicture(u64 i_tag) { - J2DPane* pane = getPane(i_tag); - JUT_ASSERT(1553, pane != NULL); - if (pane->getTypeID() != 0x12) { - return NULL; - } - return (J2DPicture*)pane; - } - - /* 0x004 */ int field_0x4; - /* 0x008 */ J2DScreen mScreen; - /* 0x120 */ f32 field_0x120; - /* 0x124 */ f32 field_0x124; -}; - class dDlst_2Dm_c { public: virtual void draw(); @@ -896,7 +870,7 @@ void dDlst_2D_c::draw() { } void dDlst_blo_c::draw() { - mScreen.draw(field_0x120, field_0x124, dComIfGp_getCurrentGrafPort()); + mScreen.draw(anm.field_0x4, anm.field_0x8, dComIfGp_getCurrentGrafPort()); } // stand-in for a function that pulls in a bunch of inline functions but was presumably stripped diff --git a/src/d/d_particle.cpp b/src/d/d_particle.cpp index 6b8202aac4..a53af78ae9 100644 --- a/src/d/d_particle.cpp +++ b/src/d/d_particle.cpp @@ -16,6 +16,7 @@ #include "JSystem/JParticle/JPAEmitterManager.h" #include "JSystem/JParticle/JPAResourceManager.h" #include "JSystem/JMath/JMATrigonometric.h" +#include "d/d_s_play.h" #include "stdio.h" #include "d/d_com_inf_game.h" #include "m_Do/m_Do_lib.h" @@ -24,6 +25,10 @@ #include "d/actor/d_a_player.h" #include "SSystem/SComponent/c_math.h" +#if DEBUG +#pragma nosyminline on +#endif + extern dPa_particleTracePcallBack_c JPTracePCB4; void dPa_cleanupGX() { @@ -62,29 +67,34 @@ dPa_followEcallBack::dPa_followEcallBack(u8 param_0, u8 param_1) { mpEmitter = NULL; } -void dPa_followEcallBack::execute(JPABaseEmitter* param_0) { +void dPa_followEcallBack::execute(JPABaseEmitter* i_emitter) { if ((field_0x12 == 0) && ((field_0x10 & 2) == 0)) { - param_0->setGlobalTranslation(field_0x8->x, field_0x8->y, field_0x8->z); + i_emitter->setGlobalTranslation(field_0x8->x, field_0x8->y, field_0x8->z); if (field_0xc != NULL) { + // LIKELY FAKEMATCH + #if DEBUG + JGeometry::TVec3 aTStack_24(field_0xc->x, field_0xc->y, field_0xc->z); + #else JGeometry::TVec3 aTStack_24; aTStack_24.x = field_0xc->x; aTStack_24.y = field_0xc->y; aTStack_24.z = field_0xc->z; - param_0->setGlobalRotation(aTStack_24); + #endif + i_emitter->setGlobalRotation(aTStack_24); } } - if (param_0->isEnableDeleteEmitter()) { + if (i_emitter->isEnableDeleteEmitter()) { end(); } if (isEnd()) { - s16 globalAlpha = param_0->getGlobalAlpha() & 0xff; + s16 globalAlpha = i_emitter->getGlobalAlpha(); cLib_chaseS(&globalAlpha, 1, 4); - param_0->setGlobalAlpha(globalAlpha); + i_emitter->setGlobalAlpha(globalAlpha); } } -void dPa_followEcallBack::draw(JPABaseEmitter*) {} +void dPa_followEcallBack::draw(JPABaseEmitter* i_emitter) {} void dPa_followEcallBack::setup(JPABaseEmitter* i_emitter, cXyz const* param_1, csXyz const* param_2, s8) { @@ -110,42 +120,48 @@ void dPa_followEcallBack::end() { mpEmitter->becomeInvalidEmitter(); mpEmitter->quitImmortalEmitter(); mpEmitter->setEmitterCallBackPtr(NULL); - field_0x10 |= 1; + field_0x10 |= (u8)1; mpEmitter = NULL; } } +u32 dummy(JPABaseEmitter* i_emitter) { + return i_emitter->getAge(); +} + dPa_modelEcallBack dPa_modelEcallBack::mEcallback; dPa_modelPcallBack dPa_modelEcallBack::mPcallback; dPa_modelEcallBack::model_c* dPa_modelEcallBack::mModel; +#if DEBUG +u8 dPa_modelEcallBack::mNum; +#endif + /* 80450E9C 0001+00 data_80450E9C None */ /* 80450E9D 0001+00 data_80450E9D None */ /* 80450E9E 0002+00 data_80450E9E None */ static u8 struct_80450E9C; static u8 struct_80450E9D; -// -void dPa_light8EcallBack::setup(JPABaseEmitter* param_0, cXyz const* param_1, - csXyz const* param_2, s8 param_3) { - param_0->setDrawTimes(2); - param_0->setParticleCallBackPtr(dPa_control_c::getLight8PcallBack()); +void dPa_light8EcallBack::setup(JPABaseEmitter* i_emitter, cXyz const* param_1, csXyz const* param_2, s8 param_3) { + i_emitter->setDrawTimes(2); + i_emitter->setParticleCallBackPtr(dPa_control_c::getLight8PcallBack()); } -void dPa_gen_b_light8EcallBack::setup(JPABaseEmitter* param_0, cXyz const* param_1, - csXyz const* param_2, s8 param_3) { - param_0->setDrawTimes(2); - param_0->setParticleCallBackPtr(dPa_control_c::getGen_b_Light8PcallBack()); - param_0->setUserWork(param_3); +void dPa_gen_b_light8EcallBack::setup(JPABaseEmitter* i_emitter, cXyz const* param_1, csXyz const* param_2, s8 param_3) { + u32 userWork = param_3; + i_emitter->setDrawTimes(2); + i_emitter->setParticleCallBackPtr(dPa_control_c::getGen_b_Light8PcallBack()); + i_emitter->setUserWork((s8)userWork); } -void dPa_gen_d_light8EcallBack::setup(JPABaseEmitter* param_0, cXyz const* param_1, - csXyz const* param_2, s8 param_3) { - param_0->setDrawTimes(2); - param_0->setParticleCallBackPtr(dPa_control_c::getGen_d_Light8PcallBack()); - param_0->setUserWork(param_3); +void dPa_gen_d_light8EcallBack::setup(JPABaseEmitter* i_emitter, cXyz const* param_1, csXyz const* param_2, s8 param_3) { + u32 userWork = param_3; + i_emitter->setDrawTimes(2); + i_emitter->setParticleCallBackPtr(dPa_control_c::getGen_d_Light8PcallBack()); + i_emitter->setUserWork((s8)userWork); } static void dPa_group_id_change(u32* param_0, u8* param_1) { @@ -204,32 +220,28 @@ static void initiateLighting8(_GXColor& param_0, s16 param_1) { GXSetChanCtrl(GX_ALPHA0, false, GX_SRC_REG, GX_SRC_VTX, 0xfe, GX_DF_CLAMP, GX_AF_SPOT); s32 r,g,b; GXColor color0; - color0.r = r = (param_1 << 1) & 0x3e; - color0.g = g = (param_1 >> 4) & 0x3e; - color0.b = b = (param_1 >> 9) & 0x3e; + color0.r = r = (param_1 & 0x1F) << 1; + color0.g = g = ((param_1 >> 5) & 0x1F) << 1; + color0.b = b = ((param_1 >> 10) & 0x1F) << 1; if (daPy_py_c::checkNowWolfPowerUp()) { - f32 fVar2; f32 fVar1 = (g_env_light.bg_amb_col[0].r / 255.0f); - fVar2 = r + 0x10; - color0.r = fVar2 * (4.0f * (fVar1)); + color0.r = (r + 0x10) * (4.0f * (fVar1)); - fVar2 = (g_env_light.bg_amb_col[0].g / 255.0f); - fVar1 = g + 0x10; - color0.g = fVar1 * (4.0f * (fVar2)); + fVar1 = (g_env_light.bg_amb_col[0].g / 255.0f); + color0.g = (g + 0x10) * (4.0f * (fVar1)); - fVar1 = b + 0x10; - fVar2 = (g_env_light.bg_amb_col[0].b / 255.0f); - color0.b = fVar1 * (4.0f * (fVar2)); + fVar1 = (g_env_light.bg_amb_col[0].b / 255.0f); + color0.b = (b + 0x10) * (4.0f * (fVar1)); } if (color0.r == 0x3e) { - color0.r = param_0.r; + color0.r = param_0.r & 0xFF; } if (color0.g == 0x3e) { - color0.g = param_0.g; + color0.g = param_0.g & 0xFF; } if (color0.b == 0x3e) { - color0.b = param_0.b; + color0.b = param_0.b & 0xFF; } GXSetChanAmbColor(GX_COLOR0A0, color0); GXSetChanMatColor(GX_COLOR0A0, g_whiteColor); @@ -242,21 +254,22 @@ static void initiate_b_Lighting8(_GXColor& param_0) { GXSetChanMatColor(GX_COLOR0A0, g_whiteColor); } -static void drawFirst(JPABaseEmitter* param_0) { +static void drawFirst(JPABaseEmitter* i_emitter) { GXSetColorUpdate(false); - GXSetAlphaCompare(GX_GEQUAL, param_0->getGlobalAlpha(), GX_AOP_OR, GX_GEQUAL, param_0->getGlobalAlpha()); + GXSetAlphaCompare(GX_GEQUAL, i_emitter->getGlobalAlpha(), GX_AOP_OR, GX_GEQUAL, i_emitter->getGlobalAlpha()); GXSetZMode(true, GX_LEQUAL, true); GXSetZCompLoc(false); } -static void drawFirst_l8(JPABaseEmitter* param_0) { +static void drawFirst_l8(JPABaseEmitter* i_emitter) { GXSetColorUpdate(false); } -static void drawSecond_light8(JPABaseEmitter* param_0) { - s16 sVar1 = (param_0->mGlobalPrmClr.r); - s16 sVar2 = (sVar1 << 8); - s16 sVar3 = sVar2 + param_0->mGlobalPrmClr.g; +static void drawSecond_light8(JPABaseEmitter* i_emitter) { + GXColor globalPrmColor; + i_emitter->getGlobalPrmColor(&globalPrmColor); + s16 sVar3 = (s16)((s16)globalPrmColor.r << 8) + (s16)globalPrmColor.g; + dScnKy_env_light_c* envLight = dKy_getEnvlight(); dKy_setLight_nowroom_grass(dComIfGp_roomControl_getStayNo(), 0.0f); GXSetColorUpdate(1); GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_AND, GX_ALWAYS, 0); @@ -264,14 +277,14 @@ static void drawSecond_light8(JPABaseEmitter* param_0) { GXSetZCompLoc(0); GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_SET); GXSetNumChans(1); - GXColor local_14; - local_14.r = g_env_light.bg_amb_col[0].r; - local_14.g = g_env_light.bg_amb_col[0].g; - local_14.b = g_env_light.bg_amb_col[0].b; - local_14.a = g_env_light.bg_amb_col[0].a; - initiateLighting8(local_14, sVar3); + GXColor color; + color.r = envLight->bg_amb_col[0].r; + color.g = envLight->bg_amb_col[0].g; + color.b = envLight->bg_amb_col[0].b; + color.a = envLight->bg_amb_col[0].a; + initiateLighting8(color, sVar3); GXSetNumTexGens(1); - GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x3c, false, 0x7d); + GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x3c); GXSetNumTevStages(2); GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_TEXC, GX_CC_RASC, GX_CC_ZERO); @@ -285,13 +298,13 @@ static void drawSecond_light8(JPABaseEmitter* param_0) { GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, true, GX_TEVPREV); } -static void drawSecond_b_light8(JPABaseEmitter* param_0) { +static void drawSecond_b_light8(JPABaseEmitter* i_emitter) { dScnKy_env_light_c* envLight = dKy_getEnvlight(); dKy_setLight_nowroom(dComIfGp_roomControl_getStayNo()); GXSetColorUpdate(true); GXSetNumChans(1); GXColor local_18; - if (param_0->getUserWork() == 0) { + if (i_emitter->getUserWork() == 0) { local_18.r = envLight->actor_amb_col.r; local_18.g = envLight->actor_amb_col.g; local_18.b = envLight->actor_amb_col.b; @@ -316,7 +329,7 @@ static void drawSecond_b_light8(JPABaseEmitter* param_0) { GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, true, GX_TEVPREV); } -static void static_light8EcallBack(JPABaseEmitter* param_0) { +static void static_light8EcallBack(JPABaseEmitter* i_emitter) { GXFlush(); GXLoadPosMtxImm(j3dSys.getViewMtx(), 0); GXLoadNrmMtxImm(j3dSys.getViewMtx(), 0); @@ -331,17 +344,17 @@ static void static_light8EcallBack(JPABaseEmitter* param_0) { GXSetVtxDesc(GX_VA_CLR0, GX_DIRECT); GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT); - switch (param_0->getDrawCount()) { + switch (i_emitter->getDrawCount()) { case 1: - drawFirst(param_0); + drawFirst(i_emitter); break; case 2: - drawSecond_light8(param_0); + drawSecond_light8(i_emitter); break; } } -static void static_gen_b_light8EcallBack(JPABaseEmitter* param_0) { +static void static_gen_b_light8EcallBack(JPABaseEmitter* i_emitter) { GXFlush(); Mtx identity; MTXIdentity(identity); @@ -358,17 +371,17 @@ static void static_gen_b_light8EcallBack(JPABaseEmitter* param_0) { GXSetVtxDesc(GX_VA_CLR0, GX_DIRECT); GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT); - switch (param_0->getDrawCount()) { + switch (i_emitter->getDrawCount()) { case 1: - drawFirst_l8(param_0); + drawFirst_l8(i_emitter); break; case 2: - drawSecond_b_light8(param_0); + drawSecond_b_light8(i_emitter); break; } } -static void static_gen_d_light8EcallBack(JPABaseEmitter* param_0) { +static void static_gen_d_light8EcallBack(JPABaseEmitter* i_emitter) { GXFlush(); GXLoadPosMtxImm(j3dSys.getViewMtx(), 0); GXLoadNrmMtxImm(j3dSys.getViewMtx(), 0); @@ -383,26 +396,26 @@ static void static_gen_d_light8EcallBack(JPABaseEmitter* param_0) { GXSetVtxDesc(GX_VA_CLR0, GX_DIRECT); GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT); - switch (param_0->getDrawCount()) { + switch (i_emitter->getDrawCount()) { case 1: - drawFirst_l8(param_0); + drawFirst_l8(i_emitter); break; case 2: - drawSecond_b_light8(param_0); + drawSecond_b_light8(i_emitter); break; } } -void dPa_light8EcallBack::draw(JPABaseEmitter* param_0) { - static_light8EcallBack(param_0); +void dPa_light8EcallBack::draw(JPABaseEmitter* i_emitter) { + static_light8EcallBack(i_emitter); } -void dPa_gen_b_light8EcallBack::draw(JPABaseEmitter* param_0) { - static_gen_b_light8EcallBack(param_0); +void dPa_gen_b_light8EcallBack::draw(JPABaseEmitter* i_emitter) { + static_gen_b_light8EcallBack(i_emitter); } -void dPa_gen_d_light8EcallBack::draw(JPABaseEmitter* param_0) { - static_gen_d_light8EcallBack(param_0); +void dPa_gen_d_light8EcallBack::draw(JPABaseEmitter* i_emitter) { + static_gen_d_light8EcallBack(i_emitter); } static void dPa_setWindPower(JPABaseParticle* param_0) { @@ -411,7 +424,7 @@ static void dPa_setWindPower(JPABaseParticle* param_0) { JGeometry::TVec3 aTStack_24; JGeometry::TVec3 aTStack_30; cXyz cStack_3c; - param_0->getOffsetPosition(aTStack_24); + param_0->getOffsetPosition(&aTStack_24); dKyw_get_AllWind_vec((cXyz*)&aTStack_24, &cStack_3c, &local_58); cStack_3c.y = 0.65f; JGeometry::TVec3 aTStack_48; @@ -420,14 +433,19 @@ static void dPa_setWindPower(JPABaseParticle* param_0) { param_0->setOffsetPosition(aTStack_24); } -void dPa_modelPcallBack::draw(JPABaseEmitter* param_0, JPABaseParticle* param_1) { +void dPa_modelPcallBack::draw(JPABaseEmitter* i_emitter, JPABaseParticle* param_1) { Mtx local_74; Mtx local_44; + JGeometry::TVec3 local_cc; + JGeometry::TVec3 aTStack_24; + JGeometry::TVec3 aTStack_30; + JGeometry::TVec3 aTStack_36; + JGeometry::TVec3 local_fc; MTXIdentity(local_74); MTXIdentity(local_44); f32 f31 = -90.0f / 16384.0f * param_1->getRotateAngle(); if (f31) { - switch(dPa_modelEcallBack::getRotAxis(param_0)) { + switch(dPa_modelEcallBack::getRotAxis(i_emitter)) { case 0: MTXRotRad(local_44, 0x79, DEG_TO_RAD(f31)); break; @@ -440,34 +458,35 @@ void dPa_modelPcallBack::draw(JPABaseEmitter* param_0, JPABaseParticle* param_1) case 3: Vec vec = {1.0f, 1.0f, 1.0f}; MTXRotAxisRad(local_44, &vec, DEG_TO_RAD(f31)); - break; } MTXConcat(local_74, local_44, local_74); } - JGeometry::TVec3 local_cc; - param_1->getGlobalPosition(local_cc); + param_1->getGlobalPosition(&local_cc); local_74[0][3] = local_cc.x; local_74[1][3] = local_cc.y; local_74[2][3] = local_cc.z; - JGeometry::TVec3 local_fc; - param_0->getGlobalParticleScale(local_fc); + i_emitter->getGlobalParticleScale(&local_fc); local_fc.x *= param_1->getParticleScaleX(); local_fc.y *= param_1->getParticleScaleY(); Mtx auStack_c0; - MTXScale(auStack_c0, local_fc.x, local_fc.y, local_fc.x); + local_fc.z = local_fc.x; + MTXScale(auStack_c0, local_fc.x, local_fc.y, local_fc.z); MTXConcat(local_74, auStack_c0, local_74); - dPa_modelEcallBack::drawModel(param_0, local_74); + dPa_modelEcallBack::drawModel(i_emitter, local_74); param_1->setInvisibleParticleFlag(); } -bool dPa_modelEcallBack::model_c::set(J3DModelData* param_0, dKy_tevstr_c const& param_1, +bool dPa_modelEcallBack::model_c::set(J3DModelData* i_modelData, dKy_tevstr_c const& param_1, u8 rotAxis, void* param_3, u8 param_4, u8 param_5) { - if (field_0x0 != NULL) { + if (mModelData != NULL) { return false; } - field_0x0 = param_0; + mModelData = i_modelData; + #if DEBUG + field_0x8 = param_1; + #else field_0x8.mLightObj = param_1.mLightObj; // Supposedly dKy_tevstr_c::operator= but it's too big to inline @@ -511,6 +530,7 @@ bool dPa_modelEcallBack::model_c::set(J3DModelData* param_0, dKy_tevstr_c const& field_0x8.Material_use_fg = param_1.Material_use_fg; field_0x8.field_0x384 = param_1.field_0x384; field_0x8.field_0x385 = param_1.field_0x385; + #endif mRotAxis = rotAxis; field_0x391 = param_5; field_0x4 = (J3DAnmBase*)param_3; @@ -520,21 +540,23 @@ bool dPa_modelEcallBack::model_c::set(J3DModelData* param_0, dKy_tevstr_c const& } void dPa_modelEcallBack::model_c::setup() { + JUT_ASSERT(1284, mModelData != NULL); + if (field_0x4 != NULL) { if (field_0x392 == 0) { J3DAnmTexPattern* pattern = (J3DAnmTexPattern*)field_0x4; - pattern->searchUpdateMaterialID(field_0x0); + pattern->searchUpdateMaterialID(mModelData); pattern->setFrame(field_0x391); - field_0x0->entryTexNoAnimator(pattern); + mModelData->entryTexNoAnimator(pattern); } else { J3DAnmTevRegKey* tevRegKey = (J3DAnmTevRegKey*)field_0x4; - tevRegKey->searchUpdateMaterialID(field_0x0); + tevRegKey->searchUpdateMaterialID(mModelData); tevRegKey->setFrame(field_0x391); - field_0x0->entryTevRegAnimator(tevRegKey); + mModelData->entryTevRegAnimator(tevRegKey); } } - field_0x0->syncJ3DSys(); + mModelData->syncJ3DSys(); J3DShape::resetVcdVatCache(); } @@ -545,14 +567,16 @@ void dPa_modelEcallBack::model_c::cleanup() { } if (field_0x392 == 0) { - field_0x0->removeTexNoAnimator((J3DAnmTexPattern*)field_0x4); + J3DAnmTexPattern* anm = (J3DAnmTexPattern*)field_0x4; + mModelData->removeTexNoAnimator(anm); } else { - field_0x0->removeTevRegAnimator((J3DAnmTevRegKey*)field_0x4); + J3DAnmTevRegKey* anm = (J3DAnmTevRegKey*)field_0x4; + mModelData->removeTevRegAnimator(anm); } } void dPa_modelEcallBack::model_c::draw(f32 (*param_0)[4]) { - J3DJoint* joint = field_0x0->getJointNodePointer(0); + J3DJoint* joint = mModelData->getJointNodePointer(0); for (J3DMaterial* material = joint->getMesh(); material != NULL; material = material->getNext()) { material->loadSharedDL(); @@ -562,7 +586,7 @@ void dPa_modelEcallBack::model_c::draw(f32 (*param_0)[4]) { } material->calc(param_0); u16 texNo = material->getTevBlock()->getTexNo(0); - field_0x0->getTexture()->loadGX(texNo, GX_TEXMAP0); + mModelData->getTexture()->loadGX(texNo, GX_TEXMAP0); dKy_setLight_again(); dKy_Global_amb_set(&field_0x8); dKy_GxFog_tevstr_set(&field_0x8); @@ -574,28 +598,27 @@ void dPa_modelEcallBack::model_c::draw(f32 (*param_0)[4]) { } } -void dPa_modelEcallBack::draw(JPABaseEmitter* param_0) { - if (param_0->isEnableDeleteEmitter()) { - param_0->quitImmortalEmitter(); - param_0->setEmitterCallBackPtr(NULL); - param_0->setParticleCallBackPtr(NULL); - resetModel(param_0); +void dPa_modelEcallBack::draw(JPABaseEmitter* i_emitter) { + if (i_emitter->isEnableDeleteEmitter()) { + i_emitter->quitImmortalEmitter(); + i_emitter->setEmitterCallBackPtr(NULL); + i_emitter->setParticleCallBackPtr(NULL); + resetModel(i_emitter); } else { - setupModel(param_0); + setupModel(i_emitter); } } -void dPa_modelEcallBack::setup(JPABaseEmitter* param_0, cXyz const* param_1, - csXyz const* param_2, s8 param_3) { - param_0->setEmitterCallBackPtr(NULL); +void dPa_modelEcallBack::setup(JPABaseEmitter* i_emitter, cXyz const* param_1, csXyz const* param_2, s8 param_3) { + i_emitter->setEmitterCallBackPtr(NULL); if (mModel != NULL) { int sVar1 = struct_80450E9C; for (int i = 0; i < sVar1; i++) { int x = struct_80450E9D / sVar1; struct_80450E9D -= (x) * sVar1; if (mModel[struct_80450E9D].getModelData() == NULL) { - param_0->setUserWork(struct_80450E9D++); - param_0->setParticleCallBackPtr(&mPcallback); + i_emitter->setUserWork(struct_80450E9D++); + i_emitter->setParticleCallBackPtr(&mPcallback); return; } struct_80450E9D++; @@ -616,65 +639,79 @@ void dPa_modelEcallBack::remove() { } } -int dPa_modelEcallBack::setModel(JPABaseEmitter* param_0, J3DModelData* param_1, +int dPa_modelEcallBack::setModel(JPABaseEmitter* i_emitter, J3DModelData* i_modelData, dKy_tevstr_c const& param_2, u8 param_3, void* param_4, u8 param_5, u8 param_6) { - model_c* pModel = getModel(param_0); + JUT_ASSERT(1478, i_modelData != NULL); + + model_c* pModel = getModel(i_emitter); if (pModel != NULL) { - pModel->set(param_1, param_2, param_3, param_4, param_5, param_6); - param_0->setEmitterCallBackPtr((JPAEmitterCallBack*)&mEcallback); - param_0->becomeImmortalEmitter(); + pModel->set(i_modelData, param_2, param_3, param_4, param_5, param_6); + i_emitter->setEmitterCallBackPtr((JPAEmitterCallBack*)&mEcallback); + i_emitter->becomeImmortalEmitter(); return 1; } return 0; } -void dPa_modelEcallBack::resetModel(JPABaseEmitter* param_0) { - model_c* pModel = getModel(param_0); +void dPa_modelEcallBack::resetModel(JPABaseEmitter* i_emitter) { + JUT_ASSERT(1507, i_emitter != NULL); + + model_c* pModel = getModel(i_emitter); if (pModel) { pModel->reset(); } } -void dPa_modelEcallBack::setupModel(JPABaseEmitter* param_0) { - model_c* pModel = getModel(param_0); +void dPa_modelEcallBack::setupModel(JPABaseEmitter* i_emitter) { + JUT_ASSERT(1524, i_emitter != NULL); + + model_c* pModel = getModel(i_emitter); if (pModel) { pModel->setup(); } } -void dPa_modelEcallBack::drawModel(JPABaseEmitter* param_0, f32 (*param_1)[4]) { - model_c* pModel = getModel(param_0); +void dPa_modelEcallBack::drawModel(JPABaseEmitter* i_emitter, f32 (*param_1)[4]) { + JUT_ASSERT(1542, i_emitter != NULL); + + model_c* pModel = getModel(i_emitter); if (pModel) { pModel->draw(param_1); } } -void dPa_modelEcallBack::cleanupModel(JPABaseEmitter* param_0) { - model_c* pModel = getModel(param_0); +void dPa_modelEcallBack::cleanupModel(JPABaseEmitter* i_emitter) { + JUT_ASSERT(1559, i_emitter != NULL); + + model_c* pModel = getModel(i_emitter); if (pModel) { pModel->cleanup(); } dPa_cleanupGX(); } -dPa_modelEcallBack::model_c* dPa_modelEcallBack::getModel(JPABaseEmitter* param_0) { - if (mModel != NULL && param_0 != NULL && param_0->getUserWork() != 0xffffffff) { - return mModel + param_0->getUserWork(); +dPa_modelEcallBack::model_c* dPa_modelEcallBack::getModel(JPABaseEmitter* i_emitter) { + if (mModel != NULL && i_emitter != NULL && i_emitter->getUserWork() != 0xFFFFFFFF) { + JUT_ASSERT(1585, i_emitter->getUserWork() < mNum); + return mModel + i_emitter->getUserWork(); } + return NULL; } -u8 dPa_modelEcallBack::getRotAxis(JPABaseEmitter* param_0) { - model_c* pModel = getModel(param_0); +u8 dPa_modelEcallBack::getRotAxis(JPABaseEmitter* i_emitter) { + JUT_ASSERT(1602, i_emitter != NULL); + + model_c* pModel = getModel(i_emitter); if (pModel) { return pModel->getRotAxis(); } return 0; } -void dPa_selectTexEcallBack::draw(JPABaseEmitter* param_0) { - param_0->loadTexture(field_0x4, GX_TEXMAP0); +void dPa_selectTexEcallBack::draw(JPABaseEmitter* i_emitter) { + i_emitter->loadTexture(field_0x4, GX_TEXMAP0); } dPa_simpleEcallBack::dPa_simpleEcallBack() { @@ -682,24 +719,24 @@ dPa_simpleEcallBack::dPa_simpleEcallBack() { field_0xc = 0; } -void dPa_simpleEcallBack::executeAfter(JPABaseEmitter* param_0) { - int currentCreateNumber = param_0->getCurrentCreateNumber(); +void dPa_simpleEcallBack::executeAfter(JPABaseEmitter* i_emitter) { + int currentCreateNumber = i_emitter->getCurrentCreateNumber(); if (currentCreateNumber <= 0) { field_0xc = 0; } else { dPa_simpleData_c* pData = mData; - param_0->playCreateParticle(); + i_emitter->playCreateParticle(); for (; field_0xc != 0; field_0xc--) { Vec local_3c; if ((int)mDoLib_clipper::clip(j3dSys.getViewMtx(), *(Vec*)pData, 200.0f) == 0) { JGeometry::TVec3 aTStack_30; - param_0->getLocalTranslation(aTStack_30); - param_0->setGlobalTranslation(pData->field_0x00.x, pData->field_0x00.y + aTStack_30.y, pData->field_0x00.z); - param_0->setGlobalPrmColor(pData->field_0x0c.r, pData->field_0x0c.g, pData->field_0x0c.b); - param_0->setGlobalAlpha(pData->field_0x0c.a); - param_0->setGlobalEnvColor(pData->field_0x10.r, pData->field_0x10.g, pData->field_0x10.b); + i_emitter->getLocalTranslation(&aTStack_30); + i_emitter->setGlobalTranslation(pData->field_0x00.x, pData->field_0x00.y + aTStack_30.y, pData->field_0x00.z); + i_emitter->setGlobalPrmColor(pData->field_0x0c.r, pData->field_0x0c.g, pData->field_0x0c.b); + i_emitter->setGlobalAlpha(pData->field_0x0c.a); + i_emitter->setGlobalEnvColor(pData->field_0x10.r, pData->field_0x10.g, pData->field_0x10.b); for (int i = 0; i < currentCreateNumber; i++) { - JPABaseParticle* particle = (JPABaseParticle*)param_0->createParticle(); + JPABaseParticle* particle = (JPABaseParticle*)i_emitter->createParticle(); if (particle == NULL) break; particle->setOffsetPosition(pData->field_0x00.x, pData->field_0x00.y + aTStack_30.y, pData->field_0x00.z); @@ -708,10 +745,11 @@ void dPa_simpleEcallBack::executeAfter(JPABaseEmitter* param_0) { pData++; } } - param_0->stopCreateParticle(); + + i_emitter->stopCreateParticle(); } -void dPa_simpleEcallBack::draw(JPABaseEmitter* param_0) { +void dPa_simpleEcallBack::draw(JPABaseEmitter* i_emitter) { /* empty function */ } @@ -721,6 +759,7 @@ JPABaseEmitter* dPa_simpleEcallBack::create(JPAEmitterManager* param_0, u16 id, mID = id; field_0xe = 0x20; mData = new dPa_simpleData_c[field_0xe]; + JUT_ASSERT(1747, mData != NULL); createEmitter(param_0); return mEmitter; } @@ -732,7 +771,8 @@ dPa_simpleData_c::dPa_simpleData_c() { } JPABaseEmitter* dPa_simpleEcallBack::createEmitter(JPAEmitterManager* param_0) { - JPAResourceManager* this_00 = param_0->getResourceManager(dPa_control_c::getRM_ID(mID)); + u8 id = dPa_control_c::getRM_ID(mID); + JPAResourceManager* this_00 = param_0->getResourceManager(id); u32 uVar1 = this_00->getResUserWork(mID); if (mEmitter == NULL) { static JGeometry::TVec3 pos(0.0f, 0.0f, 0.0f); @@ -741,19 +781,22 @@ JPABaseEmitter* dPa_simpleEcallBack::createEmitter(JPAEmitterManager* param_0) { if (mEmitter == NULL) { return NULL; } + if ((uVar1 & 0x100) != 0) { mEmitter->setParticleCallBackPtr(dPa_control_c::getFsenthPcallBack()); } + mEmitter->setEmitterCallBackPtr(this); mEmitter->becomeContinuousParticle(); mEmitter->stopCreateParticle(); } + return mEmitter; } u32 dPa_simpleEcallBack::set(cXyz const* i_pos, dKy_tevstr_c const* param_2, u8 param_3, - _GXColor const& param_4, _GXColor const& param_5, int param_6, - f32 param_7) { + _GXColor const& param_4, _GXColor const& param_5, int param_6, f32 param_7) { + f32 fVar1; f32 dVar7 = param_7; if (param_2 != NULL && param_2->Material_use_fg != 124) { OS_REPORT("\x1b[43;30mSimple Particle tevstr nonset !!\n"); @@ -762,23 +805,28 @@ u32 dPa_simpleEcallBack::set(cXyz const* i_pos, dKy_tevstr_c const* param_2, u8 dPa_simpleData_c* pData = mData; if (pData == NULL || field_0xc >= field_0xe) { - if (pData != NULL) { - OS_REPORT("\x1b[43;30mSimple Particle Set Over !!\n"); - } else { + if (pData == NULL) { OS_REPORT("\x1b[43;30mSimple Particle Nothing !!\n"); + } else { + OS_REPORT("\x1b[43;30mSimple Particle Set Over !!\n"); } + return 0; } + pData = mData + field_0xc; pData->field_0x00 = *i_pos; - u32 uVar5 = dPa_control_c::getEmitterManager()->getResourceManager(dPa_control_c::getRM_ID(mID))->getResUserWork(mID); - u32 uVar6 = (uVar5 & 0xef0000) >> 0x10; - if (uVar6 < 100) { - dVar7 = uVar6 / 99.0f; + u8 id = dPa_control_c::getRM_ID(mID); + JPAResourceManager* manager = dPa_control_c::getEmitterManager()->getResourceManager(id); + u32 uVar5 = manager->getResUserWork(mID); + if (((uVar5 & 0xEF0000) >> 16) < 100) { + dVar7 = ((uVar5 & 0xEF0000) >> 16) / 99.0f; } - if (uVar6 < 100) { - dVar7 = uVar6 / 99.0f; + + if (((uVar5 & 0xEF0000) >> 16) < 100) { + dVar7 = ((uVar5 & 0xEF0000) >> 16) / 99.0f; } + if ((uVar5 & 0x20) != 0) { GXColor local_5c; GXColor local_60; @@ -787,9 +835,11 @@ u32 dPa_simpleEcallBack::set(cXyz const* i_pos, dKy_tevstr_c const* param_2, u8 if (¶m_5 != NULL) { local_64 = param_5; } + if (¶m_4 != NULL) { local_68 = param_4; } + dKy_ParticleColor_get_actor((cXyz*)i_pos, (dKy_tevstr_c*)param_2, &local_5c, &local_60, &local_64, &local_68, dVar7); pData->field_0x0c.r = local_60.r; @@ -798,56 +848,58 @@ u32 dPa_simpleEcallBack::set(cXyz const* i_pos, dKy_tevstr_c const* param_2, u8 pData->field_0x10.r = local_5c.r; pData->field_0x10.g = local_5c.g; pData->field_0x10.b = local_5c.b; + } else if ((uVar5 & 0x40) != 0) { + GXColor local_6c; + GXColor local_70; + GXColor local_74 = {0xff, 0xff, 0xff, 0xff}; + GXColor local_78 = {0xff, 0xff, 0xff, 0xff}; + if (¶m_5 != NULL) { + local_74 = param_5; + } + + if (¶m_4 != NULL) { + local_78 = param_4; + } + + dKy_ParticleColor_get_bg((cXyz*)i_pos, (dKy_tevstr_c*)param_2, &local_6c, &local_70, &local_74, &local_78, + dVar7); + f32 work__ratio = g_env_light.bg_light_influence + + (1.0f - g_env_light.bg_light_influence) * dVar7; + OS_REPORT("\nwork__ratio=[%f]", work__ratio); + local_6c = dKy_light_influence_col(&local_6c, work__ratio); + local_70 = dKy_light_influence_col(&local_70, work__ratio); + pData->field_0x0c.r = local_70.r; + pData->field_0x0c.g = local_70.g; + pData->field_0x0c.b = local_70.b; + pData->field_0x10.r = local_6c.r; + pData->field_0x10.g = local_6c.g; + pData->field_0x10.b = local_6c.b; } else { - if ((uVar5 & 0x40) != 0) { - GXColor local_6c; - GXColor local_70; - GXColor local_74 = {0xff, 0xff, 0xff, 0xff}; - GXColor local_78 = {0xff, 0xff, 0xff, 0xff}; - if (¶m_5 != NULL) { - local_74 = param_5; - } - if (¶m_4 != NULL) { - local_78 = param_4; - } - dKy_ParticleColor_get_bg((cXyz*)i_pos, (dKy_tevstr_c*)param_2, &local_6c, &local_70, &local_74, &local_78, - dVar7); - dVar7 = g_env_light.bg_light_influence + - (1.0f - g_env_light.bg_light_influence) * dVar7; - OS_REPORT("\nwork__ratio=[%f]", dVar7); - local_6c = dKy_light_influence_col(&local_6c, dVar7); - local_70 = dKy_light_influence_col(&local_70, dVar7); - pData->field_0x0c.r = local_70.r; - pData->field_0x0c.g = local_70.g; - pData->field_0x0c.b = local_70.b; - pData->field_0x10.r = local_6c.r; - pData->field_0x10.g = local_6c.g; - pData->field_0x10.b = local_6c.b; - } else { - if (¶m_4 != NULL) { - pData->field_0x0c.r = param_4.r; - pData->field_0x0c.g = param_4.g; - pData->field_0x0c.b = param_4.b; - } - if (¶m_5 != NULL) { - pData->field_0x10.r = param_5.r; - pData->field_0x10.g = param_5.g; - pData->field_0x10.b = param_5.b; - } + if (¶m_4 != NULL) { + pData->field_0x0c.r = param_4.r; + pData->field_0x0c.g = param_4.g; + pData->field_0x0c.b = param_4.b; + } + + if (¶m_5 != NULL) { + pData->field_0x10.r = param_5.r; + pData->field_0x10.g = param_5.g; + pData->field_0x10.b = param_5.b; } } + pData->field_0x0c.a = param_3; pData->field_0x10.a = param_6; field_0xc++; return 1; } -void dPa_windPcallBack::execute(JPABaseEmitter* param_0, JPABaseParticle* param_1) { +void dPa_windPcallBack::execute(JPABaseEmitter* i_emitter, JPABaseParticle* param_1) { dPa_setWindPower(param_1); } void dPa_control_c::level_c::emitter_c::onActive() { - mStatus |= 1; + mStatus |= (u8)1; if (dComIfGp_event_runCheck()) { onEventMove(); @@ -872,7 +924,12 @@ void dPa_control_c::level_c::emitter_c::cleanup() { JPAEmitterCallBack* pdVar1 = mEmitter->getEmitterCallBackPtr(); if (mCallback != NULL) { mCallback->cleanup(); + + if (mEmitter->getEmitterCallBackPtr() != NULL) { + OS_REPORT("\x1b[32mdPa_control_c::level_c::emitter_c::cleanup emitte\n\x1b[m"); + } } + if (pdVar1 != dPa_control_c::getGen_b_Light8EcallBack() && pdVar1 != dPa_control_c::getGen_d_Light8EcallBack() && pdVar1 != dPa_control_c::getLight8EcallBack()) { @@ -882,6 +939,7 @@ void dPa_control_c::level_c::emitter_c::cleanup() { mEmitter->setParticleCallBackPtr(NULL); } } + mEmitter->becomeInvalidEmitter(); mEmitter->quitImmortalEmitter(); mId = 0; @@ -902,6 +960,7 @@ void dPa_control_c::level_c::execute(dPa_control_c::level_c::emitter_c* i_emitte i_emitter->getEmitter()->playCalcEmitter(); cutTable(i_emitter); mFreeNo = ((i_emitter - mEmitter) / sizeof(emitter_c)); + JUT_ASSERT(2110, mFreeNo < EMITTER_MAX); } else { i_emitter->getEmitter()->stopCalcEmitter(); } @@ -911,10 +970,19 @@ void dPa_control_c::level_c::execute(dPa_control_c::level_c::emitter_c* i_emitte } void dPa_control_c::level_c::execute() { + JUT_ASSERT(2134, dComIfG_inf_c::baseCsr_c::getNavi() != NULL); + #if PLATFORM_WII || VERSION == VERSION_SHIELD_DEBUG + u32 prtclId = dComIfG_inf_c::baseCsr_c::getNavi()->getParticleId(); + u32 blurID = mDoGph_gInf_c::csr_c::getBlurID(); + #endif emitter_c* emitter = mEmitter; for (int i = 0; i < EMITTER_MAX; i++) { - if (emitter->getId() != 0) { + u32 id = emitter->getId(); + if (id != 0) { + #if PLATFORM_WII || VERSION == VERSION_SHIELD_DEBUG + if (id != prtclId && id != blurID) + #endif execute(emitter); } emitter++; @@ -959,11 +1027,10 @@ void dPa_control_c::level_c::forceOnEventMove(u32 id) { void dPa_control_c::level_c::allForceOnEventMove() { emitter_c* emitter = mEmitter; - for (int i = 0; i < EMITTER_MAX; i++) { + for (int i = 0; i < EMITTER_MAX; i++, emitter++) { if (emitter->getId() != 0) { emitter->onEventMove(); } - emitter++; } } @@ -977,8 +1044,9 @@ JPABaseEmitter* dPa_control_c::level_c::getEmitter(u32 id) { return emitter->getEmitter(); } -u32 dPa_control_c::level_c::entry(u16 i_name, JPABaseEmitter* i_emitter, - dPa_levelEcallBack* i_callback) { +u32 dPa_control_c::level_c::entry(u16 i_name, JPABaseEmitter* i_emitter, dPa_levelEcallBack* i_callback) { + JUT_ASSERT(2261, i_emitter != NULL); + for (int i = 0; i < EMITTER_MAX; i++) { if (mEmitter[mFreeNo].getId() == 0) { u32 uvar1 = field_0x0 + 1; @@ -996,6 +1064,13 @@ u32 dPa_control_c::level_c::entry(u16 i_name, JPABaseEmitter* i_emitter, mFreeNo = (mFreeNo + 1) % EMITTER_MAX; } + #if DEBUG + BOOL isConnect = mDoCPd_c::isConnect(PAD_3); + if (isConnect) { + JUT_WARN(2284, "%s", "Level Emitter Max Over !!\n"); + } + #endif + i_emitter->becomeInvalidEmitter(); i_emitter->quitImmortalEmitter(); return 0; @@ -1074,8 +1149,9 @@ dPa_particleTracePcallBack_c dPa_control_c::mParticleTracePCB; dPa_control_c::dPa_control_c() { m_resHeap = JKRCreateExpHeap(0x96000, mDoExt_getArchiveHeap(), false); + JUT_ASSERT(2426, m_resHeap != NULL); mHeap = NULL; - m_sceneHeap = NULL; + mSceneHeap = NULL; field_0x18 = 0xFF; mEmitterMng = NULL; field_0x19 = 0; @@ -1091,11 +1167,14 @@ u8 dPa_control_c::getRM_ID(u16 param_0) { } void dPa_control_c::createCommon(void const* param_0) { + OS_REPORT("常駐パーティクルリソースサイズ<%d>\n", mHeap->getSize((void*)param_0)); mHeap = mDoExt_createSolidHeapFromSystem(0, 0); + JUT_ASSERT(2518, mHeap != NULL); mCommonResMng = new (mHeap, 0) JPAResourceManager(param_0, mHeap); - ResTIMG* pRVar3 = mDoGph_gInf_c::getFrameBufferTimg(); - mCommonResMng->swapTexture(pRVar3, "dummy"); + JUT_ASSERT(2521, mCommonResMng != NULL); + mCommonResMng->swapTexture(mDoGph_gInf_c::getFrameBufferTimg(), "dummy"); mEmitterMng = new (mHeap, 0) JPAEmitterManager(3000, 250, *(JKRHeap**)this, 0x13, 2); + JUT_ASSERT(2531, mEmitterMng != NULL); mEmitterMng->entryResourceManager(mCommonResMng, 0); JKRHeap* prevHeap = mDoExt_setCurrentHeap(mHeap); for (u16 i = 0; i < 5; i++) { @@ -1109,16 +1188,18 @@ void dPa_control_c::createCommon(void const* param_0) { } field_0x1a = field_0x19; mDoExt_setCurrentHeap(prevHeap); - mDoExt_adjustSolidHeap(mHeap); + u32 memory = mDoExt_adjustSolidHeap(mHeap); + OS_REPORT("------- %d\n", memory); } void dPa_control_c::createRoomScene() { - m_sceneHeap = mDoExt_createSolidHeapFromGame(0, 0); - mSceneResMng = new (m_sceneHeap, 0) JPAResourceManager(m_sceneRes, m_sceneHeap); - ResTIMG* pRVar3 = mDoGph_gInf_c::getFrameBufferTimg(); - mSceneResMng->swapTexture(pRVar3, "dummy"); + mSceneHeap = mDoExt_createSolidHeapFromGame(0, 0); + JUT_ASSERT(2573, mSceneHeap != NULL); + mSceneResMng = new (mSceneHeap, 0) JPAResourceManager(m_sceneRes, mSceneHeap); + JUT_ASSERT(2576, mSceneResMng != NULL); + mSceneResMng->swapTexture(mDoGph_gInf_c::getFrameBufferTimg(), "dummy"); mEmitterMng->entryResourceManager(mSceneResMng, 1); - JKRHeap* prevHeap = mDoExt_setCurrentHeap(m_sceneHeap); + JKRHeap* prevHeap = mDoExt_setCurrentHeap(mSceneHeap); for (u16 i = 0; i < 14; i++) { u16 uVar1 = dPa_name::s_o_id[i]; if (mSceneResMng->checkUserIndexDuplication(uVar1)) { @@ -1129,7 +1210,8 @@ void dPa_control_c::createRoomScene() { } } mDoExt_setCurrentHeap(prevHeap); - mDoExt_adjustSolidHeap(m_sceneHeap); + u32 memory = mDoExt_adjustSolidHeap(mSceneHeap); + OS_REPORT("------- %d\n", memory); } bool dPa_control_c::readScene(u8 param_0, mDoDvdThd_toMainRam_c** param_1) { @@ -1138,9 +1220,11 @@ bool dPa_control_c::readScene(u8 param_0, mDoDvdThd_toMainRam_c** param_1) { } if (m_sceneRes) { + JUT_ASSERT(2641, !(--mSceneCount)); JKRHeap::free(m_sceneRes, NULL); m_sceneRes = NULL; } + JUT_ASSERT(2647, !mSceneCount++); field_0x18 = param_0; static char jpcName[32]; sprintf(jpcName, "/res/Particle/Pscene%03d.jpc", param_0); @@ -1154,6 +1238,7 @@ void dPa_control_c::createScene(void const* param_0) { } if (param_0 != NULL) { m_sceneRes = (void*)param_0; + OS_REPORT("シーン依存パーティクルリソースサイズ<%d>\n", m_resHeap->getSize(m_sceneRes)); } if (m_sceneRes != NULL) { createRoomScene(); @@ -1162,16 +1247,17 @@ void dPa_control_c::createScene(void const* param_0) { } bool dPa_control_c::removeRoomScene(bool param_0) { - if (m_sceneHeap == NULL) { + if (mSceneHeap == NULL) { return false; } mEmitterMng->clearResourceManager(true); - mDoExt_destroySolidHeap(m_sceneHeap); - m_sceneHeap = NULL; + mDoExt_destroySolidHeap(mSceneHeap); + mSceneHeap = NULL; mSceneResMng = NULL; field_0x19 = field_0x1a; if (param_0) { + JUT_ASSERT(2710, !(--mSceneCount)); JKRHeap::free(m_sceneRes, NULL); m_sceneRes = NULL; field_0x18 = 0xff; @@ -1189,6 +1275,10 @@ void dPa_control_c::removeScene(bool param_0) { mEmitterMng->forceDeleteAllEmitter(); dPa_modelEcallBack::remove(); + + if (getEmitterNum()) { + OS_REPORT("\x1b[43;30m常駐エミッター開放してない!!"); + } } void dPa_control_c::cleanup() { @@ -1217,6 +1307,11 @@ void dPa_control_c::calcMenu() { for (u8 i = 17; i <= 18; i++) { mEmitterMng->calc(i); } + + #if PLATFORM_WII || VERSION == VERSION_SHIELD_DEBUG + dComIfG_inf_c::baseCsr_c::particleExecute(); + mDoGph_gInf_c::csr_c::particleExecute(); + #endif } } @@ -1236,39 +1331,38 @@ void dPa_control_c::draw(JPADrawInfo* param_0, u8 param_1) { } } -void dPa_control_c::setHitMark(u16 param_1, fopAc_ac_c* param_2, cXyz const* param_3, - csXyz const* param_4, cXyz const* param_5, u32 param_6) { - cXyz cStack_34; - csXyz cStack_78; +void dPa_control_c::setHitMark(u16 param_1, fopAc_ac_c* param_2, cXyz const* param_3, csXyz const* param_4, cXyz const* param_5, u32 param_6) { cXyz const* pPos = param_3; csXyz const* pAngle = param_4; + cXyz cStack_34; + csXyz cStack_78; if (param_2 != NULL) { if (fopAcM_CheckStatus(param_2, 0x40000000)) { return; } + fopAcM_OnStatus(param_2, 0x40000000); if (fopAcM_GetJntCol(param_2) != NULL) { dJntCol_c* jntCol = fopAcM_GetJntCol(param_2); - if (jntCol->getHitmarkPosAndAngle(pPos, pAngle, &cStack_34, &cStack_78, - param_1 == 6) >= 0) - { + if (jntCol->getHitmarkPosAndAngle(pPos, pAngle, &cStack_34, &cStack_78, param_1 == 6) >= 0) { pPos = &cStack_34; pAngle = &cStack_78; } } } + if (param_1 == 3) { - dComIfGp_particle_set(0x114, pPos, pAngle, param_5); - dComIfGp_particle_set(0x115, pPos, 0, param_5); - dComIfGp_particle_set(0x116, pPos, 0, param_5); + dComIfGp_particle_set(ID_ZI_J_HITCR_A, pPos, pAngle, param_5); + dComIfGp_particle_set(ID_ZI_J_HITCR_B, pPos, 0, param_5); + dComIfGp_particle_set(ID_ZI_J_HITCR_C, pPos, 0, param_5); if ((param_6 & 2) != 0 && param_2 != NULL && fopAcM_GetGroup(param_2) == 2) { - dComIfGp_particle_set(0x2ed, pPos, 0, param_5); + dComIfGp_particle_set(ID_ZI_J_HITCR_D, pPos, 0, param_5); } - dComIfGp_particle_set(0x2ee, pPos, 0, param_5); + dComIfGp_particle_set(ID_ZI_J_HITCR_IND, pPos, 0, param_5); dKy_SordFlush_set(*pPos, 1); } else if (param_1 == 2 || param_1 == 5 || param_1 == 9 || param_1 == 8 || param_1 == 6) { - dComIfGp_particle_set(0x117, pPos, pAngle, param_5); - dComIfGp_particle_set(0x118, pPos, 0, param_5); + dComIfGp_particle_set(ID_ZI_J_HITNG_A, pPos, pAngle, param_5); + dComIfGp_particle_set(ID_ZI_J_HITNG_B, pPos, 0, param_5); if (param_1 != 9) { dKy_SordFlush_set(*pPos, 0); } @@ -1279,19 +1373,21 @@ void dPa_control_c::setHitMark(u16 param_1, fopAc_ac_c* param_2, cXyz const* par } else { cStack_40.set(0.5f, 0.5f, 0.5f); } - dComIfGp_particle_set(0x119, pPos, pAngle, &cStack_40); - dComIfGp_particle_set(0x11a, pPos, 0, &cStack_40); - dComIfGp_particle_set(0x2ef, pPos, 0, &cStack_40); + + dComIfGp_particle_set(ID_ZI_J_HITOK_A, pPos, pAngle, &cStack_40); + dComIfGp_particle_set(ID_ZI_J_HITOK_B, pPos, 0, &cStack_40); + dComIfGp_particle_set(ID_ZI_J_HITOK_C, pPos, 0, &cStack_40); if ((param_6 & 2) != 0 && param_2 != NULL && fopAcM_GetGroup(param_2) == 2) { - dComIfGp_particle_set(0x2f0, pPos, 0, &cStack_40); + dComIfGp_particle_set(ID_ZI_J_HITOK_D, pPos, 0, &cStack_40); } } else if (param_1 == 1 || param_1 == 4) { - dComIfGp_particle_set(0x119, pPos, pAngle, param_5); - dComIfGp_particle_set(0x11a, pPos, 0, param_5); - dComIfGp_particle_set(0x2ef, pPos, 0, param_5); + dComIfGp_particle_set(ID_ZI_J_HITOK_A, pPos, pAngle, param_5); + dComIfGp_particle_set(ID_ZI_J_HITOK_B, pPos, 0, param_5); + dComIfGp_particle_set(ID_ZI_J_HITOK_C, pPos, 0, param_5); if ((param_6 & 2) != 0 && param_2 != NULL && fopAcM_GetGroup(param_2) == 2) { - dComIfGp_particle_set(0x2f0, pPos, 0, param_5); + dComIfGp_particle_set(ID_ZI_J_HITOK_D, pPos, 0, param_5); } + dKy_SordFlush_set(*pPos, 1); } } @@ -1306,13 +1402,12 @@ void dPa_control_c::setWaterRipple(u32* param_0, cBgS_PolyInfo& param_1, cXyz co csXyz local_50; cM3dGPla acStack_48; if (dComIfG_Bgsp().GetTriPla(param_1, &acStack_48)) { - f32 uVar5 = acStack_48.mNormal.absXZ(); - local_50.x = cM_atan2s(uVar5, acStack_48.mNormal.y); + local_50.x = cM_atan2s(acStack_48.mNormal.absXZ(), acStack_48.mNormal.y); local_50.y = acStack_48.mNormal.atan2sX_Z(); local_50.z = 0; } - static u16 const particleID[2] = {0x01B3, 0x01B2}; + static u16 const particleID[2] = {ID_ZI_J_HAMON_IND, ID_ZI_J_HAMON_A}; for (int i = 0; i < 2; i++, param_0++) { *param_0 = dComIfGp_particle_setPolyColor( *param_0, particleID[i], param_1, param_2, param_4, @@ -1344,39 +1439,72 @@ JPABaseEmitter* dPa_control_c::set(u8 param_0, u16 param_1, cXyz const* i_pos, } dPa_group_id_change(&local_ac, ¶m_0); + // FAKEMATCH + #if DEBUG + JGeometry::TVec3 aTStack_78(i_pos->x, i_pos->y, i_pos->z); + #else JGeometry::TVec3 aTStack_78; aTStack_78.set(i_pos->x, i_pos->y, i_pos->z); + #endif JPABaseEmitter* this_00 = mEmitterMng->createSimpleEmitterID( aTStack_78, param_1, param_0, - local_e0, NULL, NULL); + local_e0, NULL, NULL + ); + + #if DEBUG + g_envHIO.mOther.addSetEmitterID(param_1); + #endif if (this_00 == NULL) { + #if DEBUG + g_envHIO.mOther.field_0x4e = 1; + #endif return NULL; } if (i_rotation != NULL) { + #if DEBUG + JGeometry::TVec3 aTStack_a4(i_rotation->x, i_rotation->y, i_rotation->z); + #else JGeometry::TVec3 aTStack_a4; aTStack_a4.x = i_rotation->x; aTStack_a4.y = i_rotation->y; aTStack_a4.z = i_rotation->z; + #endif this_00->setGlobalRotation(aTStack_a4); } + if (i_scale != NULL) { + #if DEBUG + JGeometry::TVec3 aTStack_84(i_scale->x, i_scale->y, i_scale->z); + #else JGeometry::TVec3 aTStack_84; aTStack_84.x = i_scale->x; aTStack_84.y = i_scale->y; aTStack_84.z = i_scale->z; + #endif this_00->setGlobalScale(aTStack_84); } + #if DEBUG + if ((local_ac & 0xFF000000) == 0xFF000000) { + JGeometry::TVec3 local_90; + this_00->getGlobalParticleScale(local_90); + local_90.x *= mDoGph_gInf_c::getScale(); + this_00->setGlobalScale(local_90); + } + #endif + this_00->setGlobalAlpha(i_alpha); if (param_7 != NULL) { this_00->setEmitterCallBackPtr(param_7); param_7->setup(this_00, i_pos, i_rotation, param_8); } + if ((local_ac & 0x100) != 0) { this_00->setParticleCallBackPtr(getFsenthPcallBack()); } + if ((local_ac & 0x800) != 0) { this_00->setEmitterCallBackPtr(getGen_d_Light8EcallBack()); if ((local_ac & 0x20) != 0) { @@ -1384,66 +1512,74 @@ JPABaseEmitter* dPa_control_c::set(u8 param_0, u16 param_1, cXyz const* i_pos, } else { getGen_d_Light8EcallBack()->setup(this_00, i_pos, i_rotation, 1); } - } else { - if ((local_ac & 0x400) != 0) { - this_00->setEmitterCallBackPtr(getGen_b_Light8EcallBack()); - if ((local_ac & 0x20) != 0) { - getGen_b_Light8EcallBack()->setup(this_00, i_pos, i_rotation, 0); - } else { - getGen_b_Light8EcallBack()->setup(this_00, i_pos, i_rotation, 1); - } + } else if ((local_ac & 0x400) != 0) { + this_00->setEmitterCallBackPtr(getGen_b_Light8EcallBack()); + if ((local_ac & 0x20) != 0) { + getGen_b_Light8EcallBack()->setup(this_00, i_pos, i_rotation, 0); } else { - if ((local_ac & 0xef0000) >> 0x10 < 100) { - param_12 = ((local_ac & 0xef0000) >> 0x10) / 99.0f; + getGen_b_Light8EcallBack()->setup(this_00, i_pos, i_rotation, 1); + } + } else { + if ((local_ac & 0xef0000) >> 0x10 < 100) { + param_12 = ((local_ac & 0xef0000) >> 0x10) / 99.0f; + } + + if ((local_ac & 0x20) != 0) { + GXColor local_b0; + GXColor local_b4; + GXColor local_b8 = {0xff, 0xff, 0xff, 0xff}; + GXColor local_bc = {0xff, 0xff, 0xff, 0xff}; + if (param_10 != NULL) { + local_b8 = *param_10; } - if ((local_ac & 0x20) != 0) { - GXColor local_b0; - GXColor local_b4; - GXColor local_b8 = {0xff, 0xff, 0xff, 0xff}; - GXColor local_bc = {0xff, 0xff, 0xff, 0xff}; - if (param_10 != NULL) { - local_b8 = *param_10; - } - if (param_9 != NULL) { - local_bc = *param_9; - } - dKy_ParticleColor_get_actor((cXyz*)i_pos, (dKy_tevstr_c*)param_3, &local_b0, - &local_b4, &local_b8, &local_bc, param_12); - this_00->setGlobalEnvColor(local_b0.r, local_b0.g, local_b0.b); - this_00->setGlobalPrmColor(local_b4.r, local_b4.g, local_b4.b); - } else { - if ((local_ac & 0x40) != 0) { - GXColor local_c0; - GXColor local_c4; - GXColor local_c8 = {0xff, 0xff, 0xff, 0xff}; - GXColor local_cc = {0xff, 0xff, 0xff, 0xff}; - if (param_10 != NULL) { - local_c8 = *param_10; - } - if (param_9 != NULL) { - local_cc = *param_9; - } - dKy_ParticleColor_get_bg((cXyz*)i_pos, (dKy_tevstr_c*)param_3, &local_c0, - &local_c4, &local_c8, &local_cc, param_12); - param_12 = g_env_light.bg_light_influence + (1.0f - g_env_light.bg_light_influence) * param_12; - local_c0 = dKy_light_influence_col(&local_c0, param_12); - local_c4 = dKy_light_influence_col(&local_c4, param_12); - this_00->setGlobalEnvColor(local_c0.r, local_c0.g, local_c0.b); - this_00->setGlobalPrmColor(local_c4.r, local_c4.g, local_c4.b); - } else { - if (param_9 != NULL) { - this_00->setGlobalPrmColor(param_9->r, param_9->g, param_9->b); - } - if (param_10 != NULL) { - this_00->setGlobalEnvColor(param_10->r, param_10->g, param_10->b); - } - } + + if (param_9 != NULL) { + local_bc = *param_9; + } + + dKy_ParticleColor_get_actor((cXyz*)i_pos, (dKy_tevstr_c*)param_3, &local_b0, + &local_b4, &local_b8, &local_bc, param_12); + this_00->setGlobalEnvColor(local_b0.r, local_b0.g, local_b0.b); + this_00->setGlobalPrmColor(local_b4.r, local_b4.g, local_b4.b); + } else if ((local_ac & 0x40) != 0) { + GXColor local_c0; + GXColor local_c4; + GXColor local_c8 = {0xff, 0xff, 0xff, 0xff}; + GXColor local_cc = {0xff, 0xff, 0xff, 0xff}; + f32 fVar1 = 0.0f; + if (param_10 != NULL) { + local_c8 = *param_10; + } + + if (param_9 != NULL) { + local_cc = *param_9; + } + + dKy_ParticleColor_get_bg((cXyz*)i_pos, (dKy_tevstr_c*)param_3, &local_c0, + &local_c4, &local_c8, &local_cc, param_12); + param_12 = g_env_light.bg_light_influence + (1.0f - g_env_light.bg_light_influence) * param_12; + local_c0 = dKy_light_influence_col(&local_c0, param_12); + local_c4 = dKy_light_influence_col(&local_c4, param_12); + this_00->setGlobalEnvColor(local_c0.r, local_c0.g, local_c0.b); + this_00->setGlobalPrmColor(local_c4.r, local_c4.g, local_c4.b); + } else { + if (param_9 != NULL) { + this_00->setGlobalPrmColor(param_9->r, param_9->g, param_9->b); + } + + if (param_10 != NULL) { + this_00->setGlobalEnvColor(param_10->r, param_10->g, param_10->b); } } } + if (param_11 != NULL) { + #if DEBUG + JGeometry::TVec3 aTStack_9c(param_11->x, param_11->y, param_11->z); + #else JGeometry::TVec3 aTStack_9c; aTStack_9c.set(param_11->x, param_11->y, param_11->z); + #endif this_00->setGlobalParticleScale(aTStack_9c); } return this_00; @@ -1482,20 +1618,29 @@ JPABaseEmitter* dPa_control_c::setPoly(u16 param_0, cBgS_PolyInfo& param_1, cXyz GXColor a_Stack_10; GXColor a_Stack_14; - if (getPolyColor(param_1, param_6, &a_Stack_10, + if (!getPolyColor(param_1, param_6, &a_Stack_10, &a_Stack_14, &local_18, &local_c)) { - return setNormal(param_0, param_2, param_3, param_4, param_5, local_18, - param_7, param_8, &a_Stack_10, &a_Stack_14, param_9, local_c); + return NULL; } - return NULL; + + return setNormal(param_0, param_2, param_3, param_4, param_5, local_18, + param_7, param_8, &a_Stack_10, &a_Stack_14, param_9, local_c); } bool dPa_control_c::newSimple(u16 param_0, u8 param_1, u32* param_2) { - if (field_0x19 >= 0x19) { + if ( + #if DEBUG + field_0x19 >= 0x30 + #else + field_0x19 >= 0x19 + #endif + ) { OSReport("\x1B[43;30m1エミッター登録数オーバー!!\n"); return false; } - if (field_0x1c[field_0x19].create(mEmitterMng, param_0, param_1) == 0) { + + JPABaseEmitter* emitter = field_0x1c[field_0x19].create(mEmitterMng, param_0, param_1); + if (emitter == NULL) { return false;; } field_0x19++; @@ -1507,6 +1652,7 @@ u32 dPa_control_c::setSimple(u16 param_0, cXyz const* i_pos, dKy_tevstr_c const* int param_6, f32 param_7) { dPa_simpleEcallBack* cb = getSimple(param_0); if (cb == NULL) { + JUT_WARN(3443, "One Emitter Error !! <%s>\n", dPa_name::getName(param_0)); return 0; } @@ -1520,6 +1666,7 @@ dPa_simpleEcallBack* dPa_control_c::getSimple(u16 param_0) { return arr; } } + return NULL; } @@ -1626,14 +1773,13 @@ u32 dPa_control_c::setPoly(u32 param_0, u16 param_1, cBgS_PolyInfo& param_2, GXColor local_10; GXColor local_c; u8 local_4; - if (getPolyColor(param_2, param_7, &local_10, + if (!getPolyColor(param_2, param_7, &local_10, &local_c, &local_4, (f32*)&local_8)) { - return setNormal(param_0, param_1, param_3, param_4, param_5, param_6, - local_4, param_8, param_9, &local_10, &local_c, param_10, - local_8); + return 0; } - return 0; + return setNormal(param_0, param_1, param_3, param_4, param_5, param_6, + local_4, param_8, param_9, &local_10, &local_c, param_10, local_8); } u32 dPa_control_c::setStopContinue(u32 param_0) { @@ -1669,8 +1815,8 @@ u32 dPa_control_c::setSimpleFoot(u32 param_0, u32* param_1, cBgS_PolyInfo& param return 0; } static u16 effectIDTable[6][2] = { - {0xE6, 0xE7}, {0x143, 0x146}, {0x1AF, 0x1B8}, - {0x881B, 0x881E}, {0x881C, 0x881F}, {0x86AE, 0x86AF}, + {ID_ZI_J_DASHSMOKE_A, ID_ZI_J_DOWNSMOKE_A}, {ID_ZI_J_DASHKUSA_A, ID_ZI_J_DOWNKUSA_A}, {ID_ZI_J_DASHWTRA_A, ID_ZI_J_DOWNWTRA_A}, + {dPa_RM(ID_ZI_S_DASHSAND_A), dPa_RM(ID_ZI_S_DOWNSAND_A)}, {dPa_RM(ID_ZI_S_DASHSNOW_A), dPa_RM(ID_ZI_S_DOWNSNOW_A)}, {dPa_RM(ID_ZI_S_DASHSMOKE_INWTR_A), dPa_RM(ID_ZI_S_DOWNSMOKE_INWTR_A)}, }; u32 rv = setNormal(param_0, effectIDTable[effType][param_5], param_3, param_4, param_6, param_7, local_50, param_8, param_9, &a_Stack_48, @@ -1736,14 +1882,14 @@ u16 dPa_control_c::setCommonPoly(u32* param_0, cBgS_PolyInfo* param_1, cXyz cons uVar5 |= (0xff << (i << 3)); } else { static u16 ringID[6][4] = { - {0x00E7, 0xFFFF, 0xFFFF, 0xFFFF}, {0x0146, 0xFFFF, 0xFFFF, 0xFFFF}, - {0x01AF, 0x01B0, 0x01B1, 0xFFFF}, {0x881E, 0xFFFF, 0xFFFF, 0xFFFF}, - {0x881F, 0x8820, 0xFFFF, 0xFFFF}, {0x86AF, 0xFFFF, 0xFFFF, 0xFFFF}, + {ID_ZI_J_DOWNSMOKE_A, 0xFFFF, 0xFFFF, 0xFFFF}, {ID_ZI_J_DOWNKUSA_A, 0xFFFF, 0xFFFF, 0xFFFF}, + {ID_ZI_J_DASHWTRA_A, ID_ZI_J_DASHWTRA_B, ID_ZI_J_DASHWTRA_C, 0xFFFF}, {dPa_RM(ID_ZI_S_DOWNSAND_A), 0xFFFF, 0xFFFF, 0xFFFF}, + {dPa_RM(ID_ZI_S_DOWNSNOW_A), dPa_RM(ID_ZI_S_DOWNSNOW_B), 0xFFFF, 0xFFFF}, {dPa_RM(ID_ZI_S_DOWNSMOKE_INWTR_A), 0xFFFF, 0xFFFF, 0xFFFF}, }; static u16 normalID[6][4] = { - {0x00E6, 0xFFFF, 0xFFFF, 0xFFFF}, {0x0143, 0xFFFF, 0xFFFF, 0xFFFF}, - {0x01B8, 0x01B9, 0x01BA, 0x01BB}, {0x881B, 0xFFFF, 0xFFFF, 0xFFFF}, - {0x881C, 0x881D, 0xFFFF, 0xFFFF}, {0x86AE, 0xFFFF, 0xFFFF, 0xFFFF}, + {ID_ZI_J_DASHSMOKE_A, 0xFFFF, 0xFFFF, 0xFFFF}, {ID_ZI_J_DASHKUSA_A, 0xFFFF, 0xFFFF, 0xFFFF}, + {ID_ZI_J_DOWNWTRA_A, ID_ZI_J_DOWNWTRA_B, ID_ZI_J_DOWNWTRA_C, ID_ZI_J_DOWNWTRA_D}, {dPa_RM(ID_ZI_S_DASHSAND_A), 0xFFFF, 0xFFFF, 0xFFFF}, + {dPa_RM(ID_ZI_S_DASHSNOW_A), dPa_RM(ID_ZI_S_DASHSNOW_B), 0xFFFF, 0xFFFF}, {dPa_RM(ID_ZI_S_DASHSMOKE_INWTR_A), 0xFFFF, 0xFFFF, 0xFFFF}, }; uVar5 |= bVar3 << (i << 3); if (bVar3 == 2 && ((param_6 & 0x10000) != 0)) { @@ -1773,7 +1919,7 @@ u16 dPa_control_c::setCommonPoly(u32* param_0, cBgS_PolyInfo* param_1, cXyz cons return uVar5; } -void dPa_wbPcallBack_c::execute(JPABaseEmitter* param_0, JPABaseParticle* param_1) { +void dPa_wbPcallBack_c::execute(JPABaseEmitter* i_emitter, JPABaseParticle* param_1) { JGeometry::TVec3 local_18; param_1->getGlobalPosition(local_18); cXyz cStack_24(local_18.x, local_18.y, local_18.z); @@ -1783,29 +1929,29 @@ void dPa_wbPcallBack_c::execute(JPABaseEmitter* param_0, JPABaseParticle* param_ } } -void dPa_fsenthPcallBack::execute(JPABaseEmitter* param_0, JPABaseParticle* param_1) { +void dPa_fsenthPcallBack::execute(JPABaseEmitter* i_emitter, JPABaseParticle* param_1) { if (g_env_light.now_senses_effect == 1 && g_env_light.senses_effect_strength > 0.0f) { - param_0->setGlobalAlpha(255.0f * g_env_light.senses_effect_strength); - param_0->playDrawParticle(); + i_emitter->setGlobalAlpha(255.0f * g_env_light.senses_effect_strength); + i_emitter->playDrawParticle(); } else { - param_0->setGlobalAlpha(0); - param_0->stopDrawParticle(); + i_emitter->setGlobalAlpha(0); + i_emitter->stopDrawParticle(); } } -void dPa_fsenthPcallBack::draw(JPABaseEmitter* param_0, JPABaseParticle* param_1) { +void dPa_fsenthPcallBack::draw(JPABaseEmitter* i_emitter, JPABaseParticle* param_1) { /* empty function */ } -void dPa_light8PcallBack::execute(JPABaseEmitter* param_0, JPABaseParticle* param_1) { +void dPa_light8PcallBack::execute(JPABaseEmitter* i_emitter, JPABaseParticle* param_1) { /* empty function */ } -void dPa_gen_b_light8PcallBack::execute(JPABaseEmitter* param_0, JPABaseParticle* param_1) { +void dPa_gen_b_light8PcallBack::execute(JPABaseEmitter* i_emitter, JPABaseParticle* param_1) { /* empty function */ } -void dPa_gen_d_light8PcallBack::execute(JPABaseEmitter* param_0, JPABaseParticle* param_1) { +void dPa_gen_d_light8PcallBack::execute(JPABaseEmitter* i_emitter, JPABaseParticle* param_1) { /* empty function */ } @@ -1828,8 +1974,8 @@ void dPa_light8PcallBack::draw(JPABaseEmitter* param_1, JPABaseParticle* param_2 dPa_setWindPower(param_2); MTXIdentity(local_60); MTXIdentity(auStack_90); - param_2->getBaseAxis(local_10c); - param_2->getLocalPosition(local_118); + param_2->getBaseAxis(&local_10c); + param_2->getLocalPosition(&local_118); if (local_118.isZero()) { local_118.set(0.0f, 1.0f, 0.0f); } else { @@ -2029,7 +2175,7 @@ void dPa_gen_d_light8PcallBack::draw(JPABaseEmitter* param_1, JPABaseParticle* p JGeometry::TVec3 local_118; JGeometry::TVec3 local_124; JGeometry::TVec3 local_130; - u8 uVar6 = param_1->getGlobalAlpha() & 0xff; + u8 uVar6 = param_1->getGlobalAlpha(); JGeometry::TVec3 local_13c; JGeometry::TVec3 local_148; JGeometry::TVec3 local_154; @@ -2144,6 +2290,10 @@ void dPa_hermiteEcallBack_c::setOldPosP(cXyz const* param_0, cXyz const* param_1 void dPa_hermiteEcallBack_c::executeAfter(JPABaseEmitter* param_1) { JGeometry::TVec3 aTStack_68; + #if DEBUG + JGeometry::TVec3 local_74(field_0x10->x, field_0x10->y, field_0x10->z); + JGeometry::TVec3 local_80(field_0xc->x, field_0xc->y, field_0xc->z); + #else JGeometry::TVec3 local_74; local_74.x = field_0x10->x; local_74.y = field_0x10->y; @@ -2152,6 +2302,7 @@ void dPa_hermiteEcallBack_c::executeAfter(JPABaseEmitter* param_1) { local_80.x = field_0xc->x; local_80.y = field_0xc->y; local_80.z = field_0xc->z; + #endif JGeometry::TVec3 local_8c; JGeometry::TVec3 local_98; param_1->setGlobalTranslation(local_80); @@ -2182,18 +2333,18 @@ void dPa_hermiteEcallBack_c::executeAfter(JPABaseEmitter* param_1) { } } -void dPa_hermiteEcallBack_c::setup(JPABaseEmitter* param_0, cXyz const* param_1, +void dPa_hermiteEcallBack_c::setup(JPABaseEmitter* i_emitter, cXyz const* param_1, csXyz const* param_2, s8 param_3) { field_0xc = param_1; mRate = 1.0f; mMaxCnt = 0; } -void dPa_particleTracePcallBack_c::execute(JPABaseEmitter* param_0, JPABaseParticle* param_1) { +void dPa_particleTracePcallBack_c::execute(JPABaseEmitter* i_emitter, JPABaseParticle* param_1) { if (param_1->getAge() > 0) { - Vec* vec = (Vec*)param_0->getUserWork(); + Vec* vec = (Vec*)i_emitter->getUserWork(); JGeometry::TVec3 local_24; - param_1->getOffsetPosition(local_24); + param_1->getOffsetPosition(&local_24); local_24.x += vec->x; local_24.y += vec->y; local_24.z += vec->z;