diff --git a/include/JSystem/J3DGraphAnimator/J3DModel.h b/include/JSystem/J3DGraphAnimator/J3DModel.h index a9c2b6261..2faabea94 100644 --- a/include/JSystem/J3DGraphAnimator/J3DModel.h +++ b/include/JSystem/J3DGraphAnimator/J3DModel.h @@ -4,6 +4,7 @@ #include "JSystem/J3DGraphAnimator/J3DSkinDeform.h" #include "JSystem/J3DGraphBase/J3DPacket.h" #include "JSystem/J3DGraphBase/J3DVertex.h" +#include "dolphin/mtx/mtx.h" #include "dolphin/mtx/mtxvec.h" #include "dolphin/types.h" diff --git a/include/JSystem/J3DGraphBase/J3DMatBlock.h b/include/JSystem/J3DGraphBase/J3DMatBlock.h index d280dd37e..64497f830 100644 --- a/include/JSystem/J3DGraphBase/J3DMatBlock.h +++ b/include/JSystem/J3DGraphBase/J3DMatBlock.h @@ -538,17 +538,17 @@ private: }; // Size: 0x1C inline u16 calcZModeID(u8 param_0, u8 param_1, u8 param_2) { - return ((param_1 * 2) & 0x1FE) + (param_0 * 0x10) + param_2; + return (param_1 * 2) + (param_0 * 0x10) + param_2; } -extern u8 j3dZModeTable[96]; +extern J3DZModeInfo j3dZModeTable[2]; struct J3DZMode { J3DZMode() { mZModeID = j3dDefaultZModeID; } - u8 getCompareEnaable() const { return j3dZModeTable[mZModeID * 3]; } - u8 getFunc() const { return j3dZModeTable[mZModeID * 3 + 1]; } - u8 getUpdateEnable() const { return j3dZModeTable[mZModeID * 3 + 2]; } + u8 getCompareEnaable() const { return j3dZModeTable[mZModeID].mCompareEnable; } + u8 getFunc() const { return j3dZModeTable[mZModeID].mFunc; } + u8 getUpdateEnable() const { return j3dZModeTable[mZModeID].mUpdateEnable; } void setZModeInfo(const J3DZModeInfo& info) { mZModeID = calcZModeID(info.mCompareEnable, info.mFunc, info.mUpdateEnable); @@ -558,6 +558,14 @@ struct J3DZMode { J3DGDSetZMode(getCompareEnaable(), GXCompare(getFunc()), getUpdateEnable()); } + void setCompareEnable(u8 i_compare) { + mZModeID = calcZModeID(i_compare, j3dZModeTable[mZModeID].mFunc, j3dZModeTable[mZModeID].mUpdateEnable); + } + + void setUpdateEnable(u8 i_enable) { + mZModeID = calcZModeID(j3dZModeTable[mZModeID].mCompareEnable, j3dZModeTable[mZModeID].mFunc, i_enable); + } + /* 0x0 */ u16 mZModeID; }; @@ -572,6 +580,18 @@ struct J3DBlend : public J3DBlendInfo { void load(u8 ditherEnable) { J3DGDSetBlendMode(getBlendMode(), getSrcFactor(), getDstFactor(), getLogicOp(), ditherEnable); } + + void setType(u8 i_type) { + mBlendMode = i_type; + } + + void setSrcFactor(u8 i_src) { + mSrcFactor = i_src; + } + + void setDstFactor(u8 i_dst) { + mDstFactor = i_dst; + } }; extern const J3DFogInfo j3dDefaultFogInfo; diff --git a/include/JSystem/JParticle/JPAEmitter.h b/include/JSystem/JParticle/JPAEmitter.h index 9d2c144e6..eb1a7c85f 100644 --- a/include/JSystem/JParticle/JPAEmitter.h +++ b/include/JSystem/JParticle/JPAEmitter.h @@ -85,12 +85,22 @@ public: JPASetRMtxTVecfromMtx(mtx, mGlobalRotation, mGlobalTranslation); } void setGlobalTranslation(f32 x, f32 y, f32 z) { mGlobalTranslation.set(x, y, z); } - void setGlobalParticleScale(const JGeometry::TVec3& scale) { + void setGlobalScale(const JGeometry::TVec3& scale) { mGlobalScale.set(scale); mGlobalScale2D.set(scale); } + void setGlobalParticleScale(const JGeometry::TVec3& scale) { + mGlobalScale.set(scale); + } + void setGlobalDynamicsScale(const JGeometry::TVec3& scale) { + mGlobalScale2D.set(scale); + } void setMaxFrame(s32 maxFrame) { mMaxFrame = maxFrame; } + void setVolumeSweep(float i_volSweep) { mVolumeSweep = i_volSweep; } + void setLifeTime(s16 i_lifeTime) { mLifeTime = i_lifeTime; } + void setRate(float i_rate) { mRate = i_rate; } + void stopCreateParticle() { setStatus(JPAEmtrStts_StopEmit); } void becomeInvalidEmitter() { diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index 985a4475d..29be5cd72 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -96,6 +96,9 @@ public: void changeDemoMoveAngle(s16 angle) { mDemo.setMoveAngle(angle); } u8 getCutType() const { return mAttackState; } + void onPlayerNoDraw() { field_0x29c |= 0x8000000; } + void offPlayerNoDraw() { field_0x29c &= ~0x8000000; } + virtual MtxP getLeftHandMatrix() = 0; virtual MtxP getRightHandMatrix() = 0; virtual void getGroundY() = 0; diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 0461842d4..669588b0d 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -902,6 +902,10 @@ inline fopAc_ac_c* dComIfGp_getPlayer(int idx) { return g_dComIfG_gameInfo.play.getPlayer(idx); } +inline fopAc_ac_c* dComIfGp_getCb1Player() { + return g_dComIfG_gameInfo.play.getPlayerPtr(1); +} + inline roomRead_class* dComIfGp_getStageRoom() { return g_dComIfG_gameInfo.play.getStage().getRoom(); } @@ -1274,6 +1278,10 @@ inline fopAc_ac_c* dComIfGp_event_getTalkPartner() { return g_dComIfG_gameInfo.play.getEvent().convPId(t); } +inline void dComIfGp_event_setTalkPartner(void* i_actor) { + g_dComIfG_gameInfo.play.getEvent().setPtT(i_actor); +} + inline fopAc_ac_c* dComIfGp_event_getItemPartner() { u32 i = g_dComIfG_gameInfo.play.getEvent().mPtItem; return g_dComIfG_gameInfo.play.getEvent().convPId(i); @@ -1297,7 +1305,7 @@ inline s32 dComIfGp_evmng_getEventPrio(s16 eventIdx) { return dComIfGp_getEventManager().getEventPrio(eventIdx); } -inline s16 dComIfGp_evmng_getEventIdx(char* pName, u8 evNo) { +inline s16 dComIfGp_evmng_getEventIdx(const char* pName, u8 evNo) { return dComIfGp_getEventManager().getEventIdx(pName, evNo); } @@ -1313,7 +1321,7 @@ inline f32* dComIfGp_evmng_getMyFloatP(int staffIdx, const char* name) { return reinterpret_cast(dComIfGp_getEventManager().getMySubstanceP(staffIdx, name, 0)); //type 0 is float } -inline Vec* dComIfGp_evmng_getMyVec3dP(int staffIdx, const char* name) { +inline Vec* dComIfGp_evmng_getMyXyzP(int staffIdx, const char* name) { return reinterpret_cast(dComIfGp_getEventManager().getMySubstanceP(staffIdx, name, 1)); //type 1 is vec3f } @@ -1325,6 +1333,10 @@ inline char* dComIfGp_evmng_getMyStringP(int staffIdx, const char* name) { return reinterpret_cast(dComIfGp_getEventManager().getMySubstanceP(staffIdx, name, 4)); //type 4 is string } +inline BOOL dComIfGp_evmng_startCheck(s16 eventID) { + return dComIfGp_getEventManager().startCheck(eventID); +} + inline BOOL dComIfGp_evmng_startCheck(const char* pName) { return dComIfGp_getEventManager().startCheckOld(pName); } @@ -1450,6 +1462,7 @@ inline void dComIfGd_setListP1() { inline void dComIfGd_setListBG() { g_dComIfG_gameInfo.drawlist.setOpaListBG(); + g_dComIfG_gameInfo.drawlist.setXluListBG(); } inline void dComIfGd_setXluListBG() { @@ -1559,14 +1572,14 @@ inline JPABaseEmitter* dComIfGp_particle_set(u16 particleID, const cXyz* pos, co pPrmColor, pEnvColor, pScale2D); } -inline JPABaseEmitter* dComIfGp_particle_set(u16 particleID, const cXyz* pos, const csXyz* angle, - const cXyz* scale) { - return dComIfGp_particle_set(particleID, pos, angle, scale, 0xFF, NULL, -1, NULL, NULL, NULL); -} - -inline void dComIfGp_particle_setStripes(u16 particleID, cXyz* pos, csXyz* angle, cXyz* scale, u8 param_4, u16 param_5) { +inline JPABaseEmitter* dComIfGp_particle_setP1(u16 particleID, const cXyz* pos, const csXyz* angle, + const cXyz* scale, u8 alpha, + dPa_levelEcallBack* pCallBack, s8 setupInfo, + const GXColor* pPrmColor, const GXColor* pEnvColor, + const cXyz* pScale2D) { dPa_control_c* pParticle = g_dComIfG_gameInfo.play.getParticle(); - pParticle->setNormalStripes(particleID, pos, angle, scale, param_4, param_5); + return pParticle->setNormalP1(particleID, pos, angle, scale, alpha, pCallBack, setupInfo, + pPrmColor, pEnvColor, pScale2D); } inline JPABaseEmitter* dComIfGp_particle_setToon(u16 particleID, const cXyz* pos, @@ -1579,6 +1592,26 @@ inline JPABaseEmitter* dComIfGp_particle_setToon(u16 particleID, const cXyz* pos pPrmColor, pEnvColor, pScale2D); } +inline JPABaseEmitter* dComIfGp_particle_setProjection(u16 particleID, const cXyz* pos, const csXyz* angle, + const cXyz* scale, u8 alpha, + dPa_levelEcallBack* pCallBack, s8 setupInfo, + const GXColor* pPrmColor, const GXColor* pEnvColor, + const cXyz* pScale2D) { + dPa_control_c* pParticle = g_dComIfG_gameInfo.play.getParticle(); + return pParticle->setProjection(particleID, pos, angle, scale, alpha, pCallBack, setupInfo, + pPrmColor, pEnvColor, pScale2D); +} + +inline JPABaseEmitter* dComIfGp_particle_set(u16 particleID, const cXyz* pos, const csXyz* angle, + const cXyz* scale) { + return dComIfGp_particle_set(particleID, pos, angle, scale, 0xFF, NULL, -1, NULL, NULL, NULL); +} + +inline void dComIfGp_particle_setStripes(u16 particleID, cXyz* pos, csXyz* angle, cXyz* scale, u8 param_4, u16 param_5) { + dPa_control_c* pParticle = g_dComIfG_gameInfo.play.getParticle(); + pParticle->setNormalStripes(particleID, pos, angle, scale, param_4, param_5); +} + inline void dComIfGp_particle_calc3D() { g_dComIfG_gameInfo.play.getParticle()->calc3D(); } diff --git a/include/d/d_event.h b/include/d/d_event.h index 464231fc4..a17cb00c0 100644 --- a/include/d/d_event.h +++ b/include/d/d_event.h @@ -69,7 +69,7 @@ public: void remove(); void getStageEventDt(); void nextStageEventDt(void*); - void getPId(void*); + int getPId(void*); fopAc_ac_c * convPId(unsigned int); void getTactFreeMStick(int); void getTactFreeCStick(int); @@ -78,6 +78,7 @@ public: u8 getTalkXYBtn() { return mTalkButton; } bool chkTalkXY() { return mTalkButton == 1 || mTalkButton == 2 || mTalkButton == 3; } void setPtI_Id(u32 id) { mPtItem = id; } + void setPtT(void* i_actor) { mPtTalk = getPId(i_actor); } u8 getPreItemNo() { return mItemNo; } u16 chkEventFlag(u16 flag) { return flag & mEventFlag; } @@ -116,4 +117,4 @@ public: /* 0xEE */ u8 mTactFreeCStick[4]; }; // Size = 0xF4 -#endif /* D_EVENT_D_EVENT_H */ \ No newline at end of file +#endif /* D_EVENT_D_EVENT_H */ diff --git a/include/d/d_event_manager.h b/include/d/d_event_manager.h index 4be016f03..58dd205f0 100644 --- a/include/d/d_event_manager.h +++ b/include/d/d_event_manager.h @@ -37,7 +37,7 @@ public: void getEventData(s16); s16 getEventIdx(const char*, u8); void order(s16); - void startCheck(s16); + BOOL startCheck(s16); BOOL startCheckOld(const char*); BOOL endCheck(s16); BOOL endCheckOld(const char*); @@ -76,4 +76,4 @@ inline int dEvmng_strcmp(const char* s1, const char* s2) { return strcmp(s1, s2); } -#endif /* D_EVENT_D_EVENT_MANAGER_H */ \ No newline at end of file +#endif /* D_EVENT_D_EVENT_MANAGER_H */ diff --git a/include/d/d_particle.h b/include/d/d_particle.h index 2cf3b51dd..b7545af79 100644 --- a/include/d/d_particle.h +++ b/include/d/d_particle.h @@ -370,12 +370,25 @@ public: const cXyz* pScale2D) { return set(0, particleID, pos, angle, scale, alpha, pCallBack, setupInfo, pPrmColor, pEnvColor, pScale2D); } - JPABaseEmitter* setToon(u16 particleID, const cXyz* pos, const csXyz* angle, + JPABaseEmitter* setNormalP1(u16 particleID, const cXyz* pos, const csXyz* angle, const cXyz* scale, u8 alpha, dPa_levelEcallBack* pCallBack, s8 setupInfo, const GXColor* pPrmColor, const GXColor* pEnvColor, const cXyz* pScale2D) { return set(1, particleID, pos, angle, scale, alpha, pCallBack, setupInfo, pPrmColor, pEnvColor, pScale2D); } + JPABaseEmitter* setToon(u16 particleID, const cXyz* pos, const csXyz* angle, + const cXyz* scale, u8 alpha, dPa_levelEcallBack* pCallBack, + s8 setupInfo, const GXColor* pPrmColor, const GXColor* pEnvColor, + const cXyz* pScale2D) { + return set(2, particleID, pos, angle, scale, alpha, pCallBack, setupInfo, pPrmColor, pEnvColor, pScale2D); + } + JPABaseEmitter* setProjection(u16 particleID, const cXyz* pos, const csXyz* angle, + const cXyz* scale, u8 alpha, dPa_levelEcallBack* pCallBack, + s8 setupInfo, const GXColor* pPrmColor, const GXColor* pEnvColor, + const cXyz* pScale2D) { + return set(4, particleID, pos, angle, scale, alpha, pCallBack, setupInfo, pPrmColor, pEnvColor, pScale2D); + } + void drawModelParticle() { mModelCtrl->draw(); } @@ -392,4 +405,4 @@ public: /* 0x001C */ dPa_simpleEcallBack mSimpleCallbacks[25]; }; -#endif /* D_PARTICLE */ \ No newline at end of file +#endif /* D_PARTICLE */ diff --git a/include/f_op/f_op_actor.h b/include/f_op/f_op_actor.h index f85849df6..9c048e212 100644 --- a/include/f_op/f_op_actor.h +++ b/include/f_op/f_op_actor.h @@ -119,12 +119,12 @@ public: void setEventId(s16 id) { mEventId = id; } void setCondition(u16 condition) { mCondition = condition; } u16 getCondition() { return mCondition; } - void setArchiveName(char* name) { mArchiveName = name; } + //void setArchiveName(char* name) { mArchiveName = name; } u8 getMapToolId() { return mMapToolId; } s16 getEventId() { return mEventId; } s16 getIdx() { return mIndex; } void setIdx(u8 i_idx) { mIndex = i_idx; } - char* getArchiveName() { return mArchiveName; } + //char* getArchiveName() { return mArchiveName; } BOOL chkCondition(u16 condition) { return (mCondition & condition) == condition; } void onCondition(u16 cond) { mCondition |= cond; } void offCondition(u16 cond) { mCondition &= ~cond; } @@ -135,20 +135,14 @@ public: bool checkCommandDemoAccrpt() { return mCommand == 2; } bool checkCommandCatch() { return mCommand == 6; } - void suspendProc(void* actor) { - if (field_0x10 != NULL) { - field_0x14(actor); - } - } - /* 0x04 */ u16 mCommand; /* 0x06 */ u16 mCondition; /* 0x08 */ s16 mEventId; /* 0x0A */ u8 mMapToolId; /* 0x0B */ s8 mIndex; - /* 0x0C */ char* mArchiveName; - /* 0x10 */ u8 field_0x10; - /* 0x14 */ void (*field_0x14)(void*); + /* 0x0C */ s16 (*mpEventCB)(void*, int); + /* 0x10 */ s16 (*mpCheckCB)(void*, int); + /* 0x14 */ s16 (*mpPhotoCB)(void*, int); }; // Size = 0x18 struct actor_place { diff --git a/include/f_pc/f_pc_base.h b/include/f_pc/f_pc_base.h index 935a6cf31..984a1b1ba 100644 --- a/include/f_pc/f_pc_base.h +++ b/include/f_pc/f_pc_base.h @@ -19,7 +19,7 @@ typedef struct base_process_class { /* 0x0A */ s8 mUnk0; /* 0x0B */ u8 mPauseFlag; /* 0x0C */ s8 mInitState; - /* 0x0D */ u8 mUnk2; + /* 0x0D */ s8 mCreateResult; /* 0x0E */ s16 mProfName; /* 0x10 */ process_profile_definition* mpProf; /* 0x14 */ struct create_request* mpCtRq; diff --git a/include/f_pc/f_pc_manager.h b/include/f_pc/f_pc_manager.h index 602c62b57..8169415c4 100644 --- a/include/f_pc/f_pc_manager.h +++ b/include/f_pc/f_pc_manager.h @@ -70,6 +70,10 @@ inline void* fpcM_LyJudge(process_node_class* i_node, fpcLyIt_JudgeFunc i_func, return fpcLyIt_Judge(&i_node->mLayer, i_func, i_data); } +inline s8 fpcM_CreateResult(const void* pActor) { + return ((base_process_class*)pActor)->mCreateResult; +} + void fpcM_Draw(void* pProc); s32 fpcM_DrawIterater(fpcM_DrawIteraterFunc pFunc); s32 fpcM_Execute(void* pProc); diff --git a/include/m_Do/m_Do_audio.h b/include/m_Do/m_Do_audio.h index f53339662..1dd104b46 100644 --- a/include/m_Do/m_Do_audio.h +++ b/include/m_Do/m_Do_audio.h @@ -39,6 +39,10 @@ int mDoAud_load1stDynamicWave(); extern JKRSolidHeap* g_mDoAud_audioHeap; +inline void mDoAud_bgmStart(u32 param_0) { + mDoAud_zelAudio_c::getInterface()->bgmStart(param_0, 0, 0); +} + inline void mDoAud_bgmStop(u32 param_0) { mDoAud_zelAudio_c::getInterface()->bgmStop(param_0, 0); } @@ -51,6 +55,10 @@ inline void mDoAud_load2ndDynamicWave() { mDoAud_zelAudio_c::getInterface()->load2ndDynamicWave(); } +inline void mDoAud_taktModeMuteOff() { + mDoAud_zelAudio_c::getInterface()->taktModeMuteOff(); +} + inline void mDoAud_resetProcess() { if (mDoAud_zelAudio_c::isResetFlag()) { mDoAud_zelAudio_c::getInterface()->resetProcess(); diff --git a/src/d/actor/d_a_arrow.cpp b/src/d/actor/d_a_arrow.cpp index 8c82317ab..e603211e0 100644 --- a/src/d/actor/d_a_arrow.cpp +++ b/src/d/actor/d_a_arrow.cpp @@ -191,7 +191,7 @@ void daArrow_c::setBlur() { /* 800D4994-800D4A04 .text createBlur__9daArrow_cFv */ void daArrow_c::createBlur() { if (!mPtclFollowCb.getEmitter()) { - dComIfGp_particle_setToon(0x48, ¤t.pos, NULL, NULL, 0xFF, &mPtclFollowCb, -1, NULL, NULL, NULL); + dComIfGp_particle_setP1(0x48, ¤t.pos, NULL, NULL, 0xFF, &mPtclFollowCb, -1, NULL, NULL, NULL); } } @@ -393,7 +393,7 @@ bool daArrow_c::check_water_in() { if (mArrowType == TYPE_FIRE) { mInWaterTimer = 1; - dComIfGp_particle_setToon(0x35A, &waterHitPos, NULL, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); + dComIfGp_particle_setP1(0x35A, &waterHitPos, NULL, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); if (field_0x6e4 == 0) { dKy_arrowcol_chg_on(¤t.pos, 0); } @@ -407,7 +407,7 @@ bool daArrow_c::check_water_in() { dKy_arrowcol_chg_on(¤t.pos, 1); } } else if (mArrowType == TYPE_LIGHT) { - dComIfGp_particle_setToon(0x2A1, &waterHitPos, NULL, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); + dComIfGp_particle_setP1(0x2A1, &waterHitPos, NULL, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); fopAcM_seStartCurrent(this, JA_SE_OBJ_LIGHT_ARW_EFF, 0); if (field_0x6e4 == 0) { dKy_arrowcol_chg_on(¤t.pos, 2); @@ -691,7 +691,7 @@ BOOL daArrow_c::procMove() { mDoMtx_stack_c::ZXYrotM(temp10.x, temp10.y, 0); cMtx_copy(mDoMtx_stack_c::get(), field_0x6b4); - dComIfGp_particle_setToon(0x2A1, &field_0x6a8, &temp10, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); + dComIfGp_particle_setP1(0x2A1, &field_0x6a8, &temp10, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); fopAcM_seStartCurrent(this, JA_SE_OBJ_LIGHT_ARW_EFF, 0); fopAcM_delete(this); } else { @@ -792,15 +792,15 @@ BOOL daArrow_c::procMove() { cMtx_copy(mDoMtx_stack_c::get(), field_0x6b4); if (mArrowType == TYPE_FIRE) { - dComIfGp_particle_setToon(0x29A, &field_0x6a8, &temp10, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); - dComIfGp_particle_setToon(0x29B, &field_0x6a8, &temp10, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); + dComIfGp_particle_setP1(0x29A, &field_0x6a8, &temp10, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); + dComIfGp_particle_setP1(0x29B, &field_0x6a8, &temp10, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); fopAcM_seStartCurrent(this, JA_SE_OBJ_FIRE_ARW_EFF, 0); field_0x698 = 0; } else if (mArrowType == TYPE_ICE) { if (dComIfG_Bgsp()->ChkGrpInf(mLinChk, 0x200)) { fopAcM_create(PROC_Obj_Magmarock, NULL, &field_0x6a8, current.roomNo, NULL, NULL, -1, NULL); } else { - dComIfGp_particle_setToon(0x29E, &field_0x6a8, &temp10, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); + dComIfGp_particle_setP1(0x29E, &field_0x6a8, &temp10, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); fopAcM_createChild( PROC_ARROW_ICEEFF, fpcM_GetID(this), @@ -811,7 +811,7 @@ BOOL daArrow_c::procMove() { fopAcM_seStartCurrent(this, JA_SE_OBJ_ICE_ARW_EFF, 0); } } else if (mArrowType == TYPE_LIGHT) { - dComIfGp_particle_setToon(0x2A1, &field_0x6a8, &temp10, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); + dComIfGp_particle_setP1(0x2A1, &field_0x6a8, &temp10, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); fopAcM_seStartCurrent(this, JA_SE_OBJ_LIGHT_ARW_EFF, 0); field_0x698 = 0; } @@ -829,7 +829,7 @@ BOOL daArrow_c::procMove() { csXyz temp9; cM3d_CalcVecZAngle(triPla->mNormal, &temp9); - dComIfGp_particle_setToon(0xC, &field_0x6a8, &temp9, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); + dComIfGp_particle_setP1(0xC, &field_0x6a8, &temp9, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); fopAcM_seStartCurrent(this, JA_SE_LK_ARROW_REBOUND, mtrlSndId); } else { fopAcM_seStartCurrent(this, JA_SE_LK_ARROW_HIT, mtrlSndId); @@ -1142,7 +1142,7 @@ BOOL daArrow_c::_execute() { scaleVec.x = scale; scaleVec.y = scale; scaleVec.z = scale; - mpSparkleEmitter->setGlobalParticleScale(scaleVec); + mpSparkleEmitter->setGlobalScale(scaleVec); } else { mpSparkleEmitter->becomeInvalidEmitter(); mpSparkleEmitter = NULL; diff --git a/src/d/actor/d_a_obj_mknjd.cpp b/src/d/actor/d_a_obj_mknjd.cpp index 60401c1fe..7be6a4a9b 100644 --- a/src/d/actor/d_a_obj_mknjd.cpp +++ b/src/d/actor/d_a_obj_mknjd.cpp @@ -3,216 +3,1135 @@ // Translation Unit: d_a_obj_mknjd.cpp // -#include "d_a_obj_mknjd.h" +#include "f_op/f_op_actor_mng.h" +#include "f_pc/f_pc_manager.h" +#include "f_op/f_op_msg.h" +#include "f_op/f_op_draw_tag.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "JSystem/JUtility/JUTAssert.h" +#include "JSystem/J3DGraphBase/J3DSys.h" +#include "JAZelAudio/JAIZelBasic.h" +#include "JAZelAudio/JAZelAudio_BGM.h" +#include "JAZelAudio/JAZelAudio_SE.h" +#include "SSystem/SComponent/c_xyz.h" +#include "d/d_procname.h" +#include "d/d_com_inf_game.h" +#include "d/d_bg_s_movebg_actor.h" +#include "d/d_bg_w.h" +#include "d/d_item.h" +#include "d/d_item_data.h" +#include "d/d_particle.h" +#include "d/actor/d_a_player.h" +#include "d/d_a_obj.h" +#include "m_Do/m_Do_ext.h" +#include "m_Do/m_Do_mtx.h" #include "dolphin/types.h" + +#define ACT_SETGOAL 0 +#define ACT_SETANGLE 1 +#define ACT_WAIT 2 +#define ACT_INPUT 3 +#define ACT_BREAK 4 +#define ACT_HIDE_LINK 5 +#define ACT_DISP_LINK 6 +#define ACT_LESSON 7 +#define ACT_TACT 8 + +#define ID_EARTH_MDL 4 +#define ID_BREAK_MDL 5 +#define ID_WIND_MDL 6 +#define ID_COL_DZB 9 + +static const char* daObjMknjD_jointName[] = { + "Hahen1", + "Hahen2", + "Hahen3", + "Hahen4", + "Hahen5", + "Hahen6", + "Hahen7", + "Hahen8", + "Hahen9", + "Hahen10", + "Hahen11", + "Hahen12", + "Hahen13", + "Hahen14", + "Hahen15", + "Hahen16", + "Hahen17", + "Hahen18", + "Hahen19", + "Hahen20" +}; + +char* daObjMknjD_EventName[] = { + "MKNJD_D_DEMO", + "MKNJD_K_DEMO", + + "MKNJD_D_CHECK", + "MKNJD_K_CHECK", + + "MKNJD_D_ERROR", + "MKNJD_K_ERROR", + + "MKNJD_D_LESSON", + "MKNJD_K_LESSON", +}; + +static u16 joint_number_table[20]; + +namespace daObjMknjD { + class Act_c : public dBgS_MoveBgActor { + public: + s32 Mthd_Create(); + s32 Mthd_Delete(); + + s16 XyCheckCB(int); + s16 XyEventCB(int); + + int CreateHeap(); + int Create(); + + int Delete(); + + void set_mtx(); + void init_mtx(); + + void setGoal(int); + void setPlayerAngle(int); + u16 talk(int); + void privateCut(); + bool daObjMknjD_break(); + + int Execute(Mtx**); + int Draw(); + + static const char M_arcname[]; + //static Mtx M_tmp_mtx; + + /* 0x02C8 */ cXyz mLeftHalfPos; + /* 0x02D4 */ cXyz mRightHalfPos; + + /* 0x02E0 */ cXyz mShardPositions[0x14]; + /* 0x03D0 */ float mShardHeights[0x14]; + + /* 0x0420 */ request_of_phase_process_class mPhs; + + /* 0x0428 */ J3DModel* mMainMdl; + /* 0x042C */ J3DModel* mBreakMdl; + + /* 0x0430 */ u16 m0430; + /* 0x0432 */ u16 m0432; + /* 0x0434 */ u16 m0434; + /* 0x0438 */ s32 mBreakTimer; + + /* 0x043C */ u8 mMainMdlAlpha; + /* 0x043D */ bool m043D; + /* 0x043E */ u8 m043E; + /* 0x043F */ u8 m043F; + + /* 0x0440 */ JPABaseEmitter* mEmitters[4]; + /* 0x0450 */ dPa_smokeEcallBack mSmokeCBs[4]; + + /* 0x04D0 */ cXyz mBrokenPos; + + /* 0x04DC */ s16 mCheckEventIdx; + /* 0x04DE */ s16 mDemoEventIdx; + /* 0x04E0 */ s16 mErrorEventIdx; + /* 0x04E2 */ s16 mLessonEventIdx; + + /* 0x04E4 */ s8 mActionIdx; + /* 0x04E5 */ u8 mTactMode; + /* 0x04E6 */ u8 mGiveItemId; + + /* 0x04E8 */ cXyz mGoalPos; + + /* 0x04F4 */ u32 mMsgId; + /* 0x04F8 */ u32 mMsgInstId; + /* 0x04FC */ msg_class* mMsgPtr; + + /* 0x0500 */ s32 m0500; + /* 0x0504 */ bool m0504; + + enum Prm_e { + PRM_SWITCH_W = 0x08, + PRM_SWITCH_S = 0x00, + + PRM_TYPE_W = 0x01, + PRM_TYPE_S = 0x10, + }; + + int prm_get_swSave() { return daObj::PrmAbstract(this, PRM_SWITCH_W, PRM_SWITCH_S); } + u8 prm_get_Type() { return daObj::PrmAbstract(this, PRM_TYPE_W, PRM_TYPE_S); } + + static Mtx M_tmp_mtx; + }; + + const char Act_c::M_arcname[] = "MknjD"; + + static void manage_friend_draw(int); + static void setMaterial(J3DMaterial*, u8); +} + +Mtx daObjMknjD::Act_c::M_tmp_mtx; + /* 00000078-0000012C .text nodeCallBackL__FP7J3DNodei */ -void nodeCallBackL(J3DNode*, int) { - /* Nonmatching */ +static u32 nodeCallBackL(J3DNode* i_node, int i_param2) { + if (i_param2 == 0) { + int jntNo = static_cast(i_node)->getJntNo(); + + J3DModel* mdl = j3dSys.getModel(); + daObjMknjD::Act_c* actor = (daObjMknjD::Act_c*)mdl->getUserArea(); + + if (actor != NULL) { + mDoMtx_copy(mdl->getAnmMtx(jntNo), *calc_mtx); + + MtxTrans(actor->mLeftHalfPos.x, actor->mLeftHalfPos.y, actor->mLeftHalfPos.z, 1); + + mdl->setAnmMtx(jntNo, *calc_mtx); + mDoMtx_copy(*calc_mtx, j3dSys.mCurrentMtx); + } + } + + return 1; } /* 0000012C-000001E0 .text nodeCallBackR__FP7J3DNodei */ -void nodeCallBackR(J3DNode*, int) { - /* Nonmatching */ +static u32 nodeCallBackR(J3DNode* i_node, int i_param2) { + if (i_param2 == 0) { + int jntNo = static_cast(i_node)->getJntNo(); + + J3DModel* mdl = j3dSys.getModel(); + daObjMknjD::Act_c* actor = (daObjMknjD::Act_c*)mdl->getUserArea(); + + if (actor != NULL) { + mDoMtx_copy(mdl->getAnmMtx(jntNo), *calc_mtx); + + MtxTrans(actor->mRightHalfPos.x, actor->mRightHalfPos.y, actor->mRightHalfPos.z, 1); + + mdl->setAnmMtx(jntNo, *calc_mtx); + mDoMtx_copy(*calc_mtx, j3dSys.mCurrentMtx); + } + } + + return 1; } /* 000001E0-000002B0 .text nodeCallBack_Hahen__FP7J3DNodei */ -void nodeCallBack_Hahen(J3DNode*, int) { - /* Nonmatching */ +static s32 nodeCallBack_Hahen(J3DNode* i_node, int i_param2) { + if (i_param2 == 0) { + int jntNo = static_cast(i_node)->getJntNo(); + u16 shardIdx = joint_number_table[jntNo - 1]; + + J3DModel* mdl = j3dSys.getModel(); + daObjMknjD::Act_c* actor = (daObjMknjD::Act_c*)mdl->getUserArea(); + + if (actor != NULL) { + mDoMtx_copy(mdl->getAnmMtx(jntNo), *calc_mtx); + + MtxTrans(actor->mShardPositions[shardIdx].x, actor->mShardPositions[shardIdx].y, actor->mShardPositions[shardIdx].z, 1); + + mdl->setAnmMtx(jntNo, *calc_mtx); + mDoMtx_copy(*calc_mtx, j3dSys.mCurrentMtx); + } + } + + return 1; } /* 000002B0-000002D0 .text daObjMknjD_XyCheckCB__FPvi */ -void daObjMknjD_XyCheckCB(void*, int) { - /* Nonmatching */ +static s16 daObjMknjD_XyCheckCB(void* i_this, int i_param2) { + return static_cast(i_this)->XyCheckCB(i_param2); } /* 000002D0-000002F0 .text daObjMknjD_XyEventCB__FPvi */ -void daObjMknjD_XyEventCB(void*, int) { - /* Nonmatching */ +static s16 daObjMknjD_XyEventCB(void* i_this, int i_param2) { + return static_cast(i_this)->XyEventCB(i_param2); } /* 000002F0-00000314 .text XyCheckCB__Q210daObjMknjD5Act_cFi */ -void daObjMknjD::Act_c::XyCheckCB(int) { - /* Nonmatching */ +s16 daObjMknjD::Act_c::XyCheckCB(int i_itemIdx) { + return dComIfGp_getSelectItem(i_itemIdx) == WIND_TACT ? 1 : 0; } /* 00000314-0000031C .text XyEventCB__Q210daObjMknjD5Act_cFi */ -void daObjMknjD::Act_c::XyEventCB(int) { - /* Nonmatching */ +s16 daObjMknjD::Act_c::XyEventCB(int) { + return mLessonEventIdx; } /* 0000031C-00000620 .text CreateHeap__Q210daObjMknjD5Act_cFv */ -void daObjMknjD::Act_c::CreateHeap() { +int daObjMknjD::Act_c::CreateHeap() { /* Nonmatching */ + J3DModelData* model_data_d; + if (m043E == true) { + model_data_d = (J3DModelData*)dComIfG_getObjectRes(M_arcname, ID_WIND_MDL); + } + else { + model_data_d = (J3DModelData*)dComIfG_getObjectRes(M_arcname, ID_EARTH_MDL); + } + + J3DModelData* model_data_h = (J3DModelData*)dComIfG_getObjectRes(M_arcname, ID_BREAK_MDL); + + JUT_ASSERT(0x123, model_data_d != 0) + JUT_ASSERT(0x124, model_data_h != 0) + + mMainMdl = mDoExt_J3DModel__create(model_data_d, 0x80000, 0x31000002); + mBreakMdl = mDoExt_J3DModel__create(model_data_h, 0x80000, 0x11000002); + + if (mMainMdl != NULL && mBreakMdl != NULL) { + JUTNameTab* nameTable = mMainMdl->getModelData()->getJointName(); + + for (u16 i = 0; i < mMainMdl->getModelData()->getJointNum(); i++) { + const char* jntName = nameTable->getName(i); + + if (strcmp("MknjL", jntName) == 0) { + mMainMdl->getModelData()->getJointNodePointer(i)->setCallBack((J3DNodeCallBack)nodeCallBackL); + } + else if (strcmp("MknjR", jntName) == 0) { + mMainMdl->getModelData()->getJointNodePointer(i)->setCallBack((J3DNodeCallBack)nodeCallBackR); + } + } + + mMainMdl->setUserArea(reinterpret_cast(this)); + + int curTblIdx = 0; + nameTable = mBreakMdl->getModelData()->getJointName(); + + for (u16 i = 0; i < mBreakMdl->getModelData()->getJointNum(); i++) { + const char* jntName = nameTable->getName(i); + + for (u16 j = 0; j < 20; j++) { + if (strcmp(daObjMknjD_jointName[j], jntName) == 0) { + mBreakMdl->getModelData()->getJointNodePointer(i)->setCallBack((J3DNodeCallBack)nodeCallBack_Hahen); + joint_number_table[curTblIdx++] = j; + + break; + } + } + } + + mBreakMdl->setUserArea(reinterpret_cast(this)); + mMainMdlAlpha = 0xFF; + + return 1; + } + + return 0; } /* 00000620-000008E8 .text Create__Q210daObjMknjD5Act_cFv */ -void daObjMknjD::Act_c::Create() { - /* Nonmatching */ +int daObjMknjD::Act_c::Create() { + mCullMtx = mMainMdl->getBaseTRMtx(); + init_mtx(); + mCullMtx = mBreakMdl->getBaseTRMtx(); + init_mtx(); + + fopAcM_setCullSizeBox(this, -400.0f, -1.0f, -400.0f, 400.0f, 405.0f, 400.0f); + + mLeftHalfPos.setAll(0.0f); + mRightHalfPos.setAll(0.0f); + + for (int i = 0; i < 20; i++) { + mShardPositions[i].setAll(0.0f); + mShardHeights[i] = 0.0f; + } + + m043D = false; + mBreakTimer = 0; + + for (int i = 0; i < 4; i++) { + mEmitters[i] = NULL; + } + + if (m043E == true) { + mCheckEventIdx = dComIfGp_evmng_getEventIdx(daObjMknjD_EventName[3], 0xFF); + mDemoEventIdx = dComIfGp_evmng_getEventIdx(daObjMknjD_EventName[1], 0xFF); + mErrorEventIdx = dComIfGp_evmng_getEventIdx(daObjMknjD_EventName[5], 0xFF); + mLessonEventIdx = dComIfGp_evmng_getEventIdx(daObjMknjD_EventName[7], 0xFF); + + mTactMode = 4; + mGiveItemId = TACT_SONG5; + mEvtInfo.setEventName("MKNJD_K_TALK"); + m0430 = 0x2910; + } + else { + mCheckEventIdx = dComIfGp_evmng_getEventIdx(daObjMknjD_EventName[2], 0xFF); + mDemoEventIdx = dComIfGp_evmng_getEventIdx(daObjMknjD_EventName[0], 0xFF); + mErrorEventIdx = dComIfGp_evmng_getEventIdx(daObjMknjD_EventName[4], 0xFF); + mLessonEventIdx = dComIfGp_evmng_getEventIdx(daObjMknjD_EventName[6], 0xFF); + + mTactMode = 3; + mGiveItemId = TACT_SONG4; + mEvtInfo.setEventName("MKNJD_D_TALK"); + m0430 = 0x2920; + } + + mAttentionInfo.mDistances[1] = 0x3D; + mAttentionInfo.mDistances[3] = 0x3D; + mAttentionInfo.mFlags |= 0x20000000 | 0x8; + + if (checkItemGet(mGiveItemId, 1) == 0) { + m043F = 8; + mEvtInfo.mpCheckCB = daObjMknjD_XyCheckCB; + mEvtInfo.mpEventCB = daObjMknjD_XyEventCB; + } + else { + m043F = 0; + } + + mMsgPtr = NULL; + mMsgInstId = 0xFFFFFFFF; + m0504 = false; + + return 1; } /* 000008E8-00000A84 .text Mthd_Create__Q210daObjMknjD5Act_cFv */ -void daObjMknjD::Act_c::Mthd_Create() { - /* Nonmatching */ -} +s32 daObjMknjD::Act_c::Mthd_Create() { + s32 phase_state; -/* 00000A84-00000B00 .text __dt__18dPa_smokeEcallBackFv */ -dPa_smokeEcallBack::~dPa_smokeEcallBack() { - /* Nonmatching */ -} + fopAcM_SetupActor(this, daObjMknjD::Act_c); -/* 00000B00-00000B24 .text __defctor__18dPa_smokeEcallBackFv */ -void dPa_smokeEcallBack::__defctor() { - /* Nonmatching */ -} + m043E = prm_get_Type(); -/* 00000B24-00000B28 .text __ct__4cXyzFv */ -cXyz::cXyz() { - /* Nonmatching */ -} + int switchIdx = prm_get_swSave(); + if (fopAcM_isSwitch(this, switchIdx)) { + mEmitters[2] = NULL; + mEmitters[3] = NULL; -/* 00000B28-00000B64 .text __dt__4cXyzFv */ -cXyz::~cXyz() { - /* Nonmatching */ + return 3; + } + else { + phase_state = dComIfG_resLoad(&mPhs, M_arcname); + if (phase_state == cPhs_COMPLEATE_e) { + phase_state = MoveBGCreate(M_arcname, ID_COL_DZB, NULL, 0x65A0); + + JUT_ASSERT(0x1CA, (phase_state == cPhs_COMPLEATE_e) || (phase_state == cPhs_ERROR_e)) + } + } + + return phase_state; } /* 00000B64-00000BDC .text Delete__Q210daObjMknjD5Act_cFv */ -void daObjMknjD::Act_c::Delete() { - /* Nonmatching */ +int daObjMknjD::Act_c::Delete() { + dComIfGp_getAttention().mFlags &= 0x7fffffff; + + for (int i = 0; i < 4; i++) { + mSmokeCBs[i].end(); + } + + return 1; } /* 00000BDC-00000C34 .text Mthd_Delete__Q210daObjMknjD5Act_cFv */ -void daObjMknjD::Act_c::Mthd_Delete() { - /* Nonmatching */ +s32 daObjMknjD::Act_c::Mthd_Delete() { + int bgDeleteResult = MoveBGDelete(); + + if (fpcM_CreateResult(this) != 3) { + dComIfG_resDelete(&mPhs, M_arcname); + } + + return bgDeleteResult; } /* 00000C34-00000CC8 .text set_mtx__Q210daObjMknjD5Act_cFv */ void daObjMknjD::Act_c::set_mtx() { - /* Nonmatching */ + mDoMtx_stack_c::transS(getPosition()); + mDoMtx_stack_c::ZXYrotM(shape_angle); + + mMainMdl->setBaseTRMtx(mDoMtx_stack_c::get()); + mBreakMdl->setBaseTRMtx(mDoMtx_stack_c::get()); + + mDoMtx_copy(mDoMtx_stack_c::get(), M_tmp_mtx); } /* 00000CC8-00000D28 .text init_mtx__Q210daObjMknjD5Act_cFv */ void daObjMknjD::Act_c::init_mtx() { - /* Nonmatching */ + mMainMdl->setBaseScale(cXyz(1.0f, 1.0f, 1.0f)); + mBreakMdl->setBaseScale(cXyz(1.0f, 1.0f, 1.0f)); + + set_mtx(); } /* 00000D28-00000E04 .text setGoal__Q210daObjMknjD5Act_cFi */ -void daObjMknjD::Act_c::setGoal(int) { - /* Nonmatching */ +void daObjMknjD::Act_c::setGoal(int i_staffIdx) { + cXyz pos = *dComIfGp_evmng_getMyXyzP(i_staffIdx, "Posion"); + + mDoMtx_stack_c::transS(getPosition()); + mDoMtx_YrotM(mDoMtx_stack_c::get(), current.angle.y); + + mDoMtx_stack_c::transM(pos); + + mDoMtx_multVecZero(mDoMtx_stack_c::get(), &pos); + mGoalPos = pos; + + dComIfGp_evmng_setGoal(&mGoalPos); } /* 00000E04-00000E84 .text setPlayerAngle__Q210daObjMknjD5Act_cFi */ -void daObjMknjD::Act_c::setPlayerAngle(int) { - /* Nonmatching */ +void daObjMknjD::Act_c::setPlayerAngle(int i_staffIdx) { + u32 angle = *dComIfGp_evmng_getMyIntegerP(i_staffIdx, "angle"); + daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); + + player->setPlayerPosAndAngle( + player->getPositionP(), + current.angle.y + (s16)angle + ); } /* 00000E84-00000F88 .text talk__Q210daObjMknjD5Act_cFi */ -void daObjMknjD::Act_c::talk(int) { - /* Nonmatching */ +u16 daObjMknjD::Act_c::talk(int i_param1) { + u16 msgMode = 0xFF; + + if (mMsgInstId == 0xFFFFFFFF) { + if (i_param1 == 1) { + u32 msgId; + + if (m0500 == 0) { + g_dComIfG_gameInfo.play.mTactMode = mTactMode; + msgId = 0x05B3; + } + else { + msgId = 0x1901; + } + + mMsgId = msgId; + } + + mMsgInstId = fopMsgM_messageSet(mMsgId, this); + mMsgPtr = NULL; + } + else { + if (mMsgPtr) { + msgMode = mMsgPtr->mMode; + + if (msgMode == 0x0E) { + if (g_dComIfG_gameInfo.play.field_0x4949 != 0) { + m0504 = true; + fopMsgM_messageSendOn(); + } + + mMsgPtr->mMode = 0x10; + } + else if (msgMode == 0x12) { + mMsgPtr->mMode = 0x13; + mMsgInstId = 0xFFFFFFFF; + } + } + else { + mMsgPtr = fopMsgM_SearchByID(mMsgInstId); + } + } + + return msgMode; } /* 00000F88-00001348 .text privateCut__Q210daObjMknjD5Act_cFv */ void daObjMknjD::Act_c::privateCut() { - /* Nonmatching */ + static const char* cut_name_table[] = { + "SETGOAL", + "SETANGLE", + "WAIT", + "INPUT", + "BREAK", + "HIDE_LINK", + "DISP_LINK", + "LESSON", + "TACT" + }; + + daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); + + int staffIdx = dComIfGp_evmng_getMyStaffId("MknjD", NULL, 0); + if (staffIdx != -1) { + mActionIdx = dComIfGp_evmng_getMyActIdx(staffIdx, cut_name_table, 9, 1, 0); + + if (mActionIdx == -1) { + dComIfGp_evmng_cutEnd(staffIdx); + } + else { + bool doCutEnd = false; + + if (dComIfGp_evmng_getIsAddvance(staffIdx)) { + switch (mActionIdx) { + case ACT_SETGOAL: + setGoal(staffIdx); + break; + case ACT_SETANGLE: + setPlayerAngle(staffIdx); + break; + case ACT_BREAK: + mDoAud_seStart(JA_SE_READ_RIDDLE_1, NULL, 0, 0); + + int switchId = prm_get_swSave(); + fopAcM_onSwitch(this, switchId); + + mBreakTimer = 0; + + if (mpBgW != NULL) { + if (mpBgW->ChkUsed()) { + g_dComIfG_gameInfo.play.mBgS.Release(mpBgW); + } + } + + break; + case ACT_HIDE_LINK: + player->onPlayerNoDraw(); + break; + case ACT_DISP_LINK: + player->offPlayerNoDraw(); + break; + case ACT_LESSON: + m0504 = false; + m0500 = 0; + mMsgInstId = 0xFFFFFFFF; + break; + case ACT_TACT: + break; + } + } + + switch (mActionIdx) { + case ACT_SETGOAL: + doCutEnd = true; + break; + case ACT_SETANGLE: + doCutEnd = true; + break; + case ACT_INPUT: + if (talk(1) == 0x12) { + doCutEnd = true; + } + break; + case ACT_WAIT: + doCutEnd = true; + break; + case ACT_BREAK: + if (daObjMknjD_break() == true) { + if (strcmp(dComIfGp_getStartStageName(), "Ekaze") == 0 || strcmp(dComIfGp_getStartStageName(), "Edaichi") == 0) { + mDoAud_bgmStart(0x80000000 | JA_BGM_JABOO_CAVE); + } + else if (m043E == true) { + mDoAud_bgmStart(0x80000000 | JA_BGM_D_WIND); + } + else { + mDoAud_bgmStart(0x80000000 | JA_BGM_D_EARTH); + } + + if (mSmokeCBs[2].getEmitter() != NULL) { + mSmokeCBs[2].end(); + } + if (mSmokeCBs[3].getEmitter() != NULL) { + mSmokeCBs[3].end(); + } + + doCutEnd = true; + } + break; + case ACT_LESSON: + u32 talkResult = talk(1); + + if (talkResult == 0x12 || talkResult == 0x15) { + doCutEnd = true; + } + break; + case ACT_TACT: + if (m0504 == false) { + doCutEnd = true; + } + else { + dComIfGp_event_onEventFlag(8); + } + break; + default: + doCutEnd = true; + break; + } + + if (doCutEnd) { + dComIfGp_evmng_cutEnd(staffIdx); + } + } + } } /* 00001348-00001400 .text manage_friend_draw__10daObjMknjDFi */ -void daObjMknjD::manage_friend_draw(int) { - /* Nonmatching */ +void daObjMknjD::manage_friend_draw(int i_param1) { + fopAc_ac_c* judgeResult = fopAcM_SearchByName(PROC_NPC_MD); + + if (judgeResult != NULL) { + if (i_param1 == 1) { + u32 prio = fpcLf_GetPriority(judgeResult); + fopDwTg_ToDrawQ(&judgeResult->mDwTg, prio); + } + else { + fopDwTg_DrawQTo(&judgeResult->mDwTg); + } + } + + judgeResult = fopAcM_SearchByName(PROC_NPC_CB1); + + if (judgeResult != NULL) { + if (i_param1 == 1) { + u32 prio = fpcLf_GetPriority(judgeResult); + fopDwTg_ToDrawQ(&judgeResult->mDwTg, prio); + } + else { + fopDwTg_DrawQTo(&judgeResult->mDwTg); + } + } } /* 00001400-0000195C .text daObjMknjD_break__Q210daObjMknjD5Act_cFv */ -void daObjMknjD::Act_c::daObjMknjD_break() { - /* Nonmatching */ +bool daObjMknjD::Act_c::daObjMknjD_break() { + bool ret = false; + mBreakTimer++; + + /* Statue splitting into left/right halves */ + // From 0 to 60 frames, the left and right halves of the statue split apart. + if (mBreakTimer < 60) { + mLeftHalfPos.x = -((mBreakTimer * 20.0) / 60.0); + mRightHalfPos.x = (mBreakTimer * 20.0) / 60.0; + } + // After 60 frames, the halves stay at +/- 20 units on the X axis. + else { + mLeftHalfPos.x = -20.0f; + mRightHalfPos.x = 20.0f; + } + + /* Particles and sound effects */ + // After 1 frame, the particles for the statue splitting in half spawn. + if (mBreakTimer == 1) { + mEmitters[0] = dComIfGp_particle_set(0x8185, ¤t.pos, ¤t.angle, NULL, 0xFF, NULL, -1, NULL, NULL, NULL); + + GXColor emitter2Color; + emitter2Color.r = mTevStr.mColorC0.r; + emitter2Color.g = mTevStr.mColorC0.g; + emitter2Color.b = mTevStr.mColorC0.b; + emitter2Color.a = mTevStr.mColorC0.a; + + mEmitters[1] = dComIfGp_particle_setProjection(0x8186, ¤t.pos, ¤t.angle, NULL, 0xFF, NULL, current.roomNo, &mTevStr.mColorK0, &emitter2Color, NULL); + + mEmitters[2] = dComIfGp_particle_setToon(0xA187, ¤t.pos, ¤t.angle, NULL, 0xFF, &mSmokeCBs[2], -1, NULL, NULL, NULL); + mSmokeCBs[2].setRateOff(0); + + fopAcM_seStartCurrent(this, JA_SE_OBJ_SAGE_GATE_CREAK, 0); + } + // After 30 frames, the sound effect for the light beam particles coming from the statue plays. + else if (mBreakTimer == 30) { + fopAcM_seStartCurrent(this, JA_SE_OBJ_SAGE_GATE_LIGHT, 0); + } + // After 60 frames, the shards that the statue will crumble into begin moving to their initial locations. + else if (mBreakTimer == 60) { + m043D = true; + + for (int i = 0; i < 20; i++) { + mShardPositions[i].setAll(0.0f); + + if (i == 0x02 || i == 0x03 || i == 0x06 || i == 0x07 || i == 0x0A || i == 0x0D || i == 0x0E || i == 0x12 || i == 0x13) { + mShardPositions[i].x += 20.0f; + } + else { + mShardPositions[i].x -= 20.0f; + } + } + } + // After 160 frames, the particles for the statue shattering spawn. + else if (mBreakTimer == 160) { + dComIfGp_getVibration().StartShock(6, -0x21, cXyz(0.0f, 1.0f, 0.0f)); + + fopAcM_seStartCurrent(this, JA_SE_OBJ_SAGE_GATE_BREAK, 0); + + mBrokenPos = current.pos; + mBrokenPos.y += 350.0f; + + mEmitters[3] = dComIfGp_particle_setToon(0x2027, &mBrokenPos, ¤t.angle, NULL, 0xFF, &mSmokeCBs[3], -1, NULL, NULL, NULL); + if (mEmitters[3] != NULL) { + mEmitters[3]->setVolumeSweep(0.5f); + mEmitters[3]->setLifeTime(0x2D); + mEmitters[3]->setRate(50.0f); + mEmitters[3]->setMaxFrame(1); + + JGeometry::TVec3 vec; + + vec.set(3.0f, 3.0f, 3.0f); + mEmitters[3]->setGlobalParticleScale(vec); + + vec.set(6.0f, 6.0f, 6.0f); + mEmitters[3]->setGlobalDynamicsScale(vec); + } + } + // After 255 frames, the cutscene ends. + else if (mBreakTimer == 255) { + ret = true; + } + + /* Main (unbroken) model transparency */ + // From 0 to 60 frames, the main model is 100% visible. + if (mBreakTimer < 60) { + mMainMdlAlpha = 0xFF; + } + // From 60 to 160 frames, the main model's transparency is lowered to 0. + else if (mBreakTimer >= 60 && mBreakTimer < 160) { + f64 mdlAlpha = ((0xA0 - mBreakTimer) * 255.0) / 100.0; + + if (mdlAlpha >= 255.0) { + mMainMdlAlpha = 0xFF; + } + else { + mMainMdlAlpha = static_cast(mdlAlpha); + } + } + // After 160 frames, the main model's transparency is 0. + else { + mMainMdlAlpha = 0; + } + + /* Falling shards */ + // After 160 frames, the shards of the broken statue model begin to fall. + if (mBreakTimer >= 160) { + int fallingShardNum = 19 - (mBreakTimer - 160); + + if (fallingShardNum < 0) { + fallingShardNum = 0; + } + + for (fallingShardNum; fallingShardNum < 20; fallingShardNum++) { + mShardHeights[fallingShardNum] -= 2.0f; + mShardPositions[fallingShardNum].y += mShardHeights[fallingShardNum]; + } + } + + return ret; } /* 0000195C-000020E0 .text Execute__Q210daObjMknjD5Act_cFPPA3_A4_f */ -void daObjMknjD::Act_c::Execute(float(**)[3][4]) { - /* Nonmatching */ +int daObjMknjD::Act_c::Execute(Mtx** i_mtx) { + daPy_py_c* player = static_cast(dComIfGp_getPlayer(0)); + daPy_py_c* partner = static_cast(dComIfGp_getCb1Player()); + + switch (m043F) { + case 0: + mEvtInfo.onCondition(1); + + if (mEvtInfo.checkCommandTalk() == true) { + m0500 = 1; + m043F = 0x0B; + } + else if (player != NULL) { + cXyz partnerDiff = current.pos - player->current.pos; + + s16 rotDiff = cM_atan2s(partnerDiff.x, partnerDiff.z) - current.angle.y; + f32 absXZ = partnerDiff.absXZ(); + + if (absXZ < 800.0f && (rotDiff < -0x4000 || rotDiff > 0x4000)) { + if (dComIfGp_checkPlayerStatus1(0, 1) != 0) { + m043F = 1; + manage_friend_draw(0); + } + } + } + + break; + case 1: + if (m043E == 1) { + player->setTactZev(fopAcM_GetID(this), 4, daObjMknjD_EventName[3]); + } + else { + player->setTactZev(fopAcM_GetID(this), 3, daObjMknjD_EventName[2]); + } + + m043F = 2; + break; + case 2: + if (dComIfGp_evmng_startCheck(mCheckEventIdx) != 0) { + if (partner != NULL && player != NULL) { + s16 rotDiff = cM_atan2s(current.pos.x - partner->current.pos.x, current.pos.z - partner->current.pos.z) - current.angle.y; + + cXyz diff = player->current.pos - partner->current.pos; + f32 absXZ = diff.absXZ(); + + if ((absXZ < 800.0f) && ((rotDiff < -0x4000) || (rotDiff > 0x4000))) { + fopAcM_orderChangeEventId(this, mDemoEventIdx, 0, 0xFFFF); + dComIfGs_onEventBit(m0430); + + s16 procMedli = PROC_NPC_MD; + void* judgeResult = fopAcIt_Judge(fpcSch_JudgeForPName, &procMedli); + + if (judgeResult != NULL) { + dComIfGp_event_setTalkPartner(judgeResult); + } + + m043F = 6; + } + else { + fopAcM_orderChangeEventId(this, mErrorEventIdx, 0, 0xFFFF); + + m043F = 3; + manage_friend_draw(1); + } + } + else { + fopAcM_orderChangeEventId(this, mErrorEventIdx, 0, 0xFFFF); + + m043F = 3; + manage_friend_draw(1); + } + } + else { + if (dComIfGp_checkPlayerStatus1(0, 1) == 0) { + m043F = 0; + manage_friend_draw(1); + } + } + + break; + case 3: + if (mEvtInfo.checkCommandDemoAccrpt()) { + m043F = 4; + } + + break; + case 4: + if (dComIfGp_evmng_endCheck(mErrorEventIdx)) { + dComIfGp_event_reset(); + m043F = 5; + } + + break; + case 5: + if (dComIfGp_checkPlayerStatus1(0, 1) == 0) { + m043F = 0; + } + + break; + case 6: + if (mEvtInfo.checkCommandDemoAccrpt()) { + m043F = 7; + + mDoAud_bgmStop(0x1E); + mDoAud_taktModeMuteOff(); + + dComIfGp_getAttention().mFlags |= 0x80000000; + + if (m043E == true) { + m0432 = 0x2B; + m0434 = 5; + } + else { + m0432 = 0x0E; + m0434 = 5; + } + } + + break; + case 7: + privateCut(); + + if (dComIfGp_evmng_endCheck(mDemoEventIdx)) { + dComIfGp_getAttention().mFlags &= ~0x80000000; + dComIfGp_event_onEventFlag(8); + + fopAcM_delete(this); + } + + break; + case 8: + mEvtInfo.onCondition(1); + mEvtInfo.onCondition(32); + + if (mEvtInfo.checkCommandTalk() == true) { + if (dComIfGp_event_chkTalkXY()) { + m0500 = 0; + m043F = 9; + + fopAcM_seStart(this, JA_SE_PRE_TAKT, 0); + } + else { + m0500 = 1; + m043F = 11; + } + } + + break; + case 9: + m043F = 10; + break; + case 10: + privateCut(); + + if (g_dComIfG_gameInfo.play.mEvtCtrl.mMode == 0) { + if (checkItemGet(mGiveItemId, 1) != 0) { + m043F = 0; + } + else { + m043F = 8; + } + } + + break; + case 11: + player->onPlayerNoDraw(); + m043F = 12; + break; + case 12: + if (talk(1) == 18) { + player->offPlayerNoDraw(); + g_dComIfG_gameInfo.play.mEvtCtrl.mEventFlag |= 8; + + if (checkItemGet(mGiveItemId, 1) != 0) { + m043F = 0; + } + else { + m043F = 8; + } + } + break; + } + + set_mtx(); + + *i_mtx = &M_tmp_mtx; + + if (m0432 > 1) { + m0432--; + } + if (m0432 == 1) { + if (m043E == true) { + mDoAud_bgmStart(0x80000000 | JA_BGM_TAKT_MAKORE); + } + else { + mDoAud_bgmStart(0x80000000 | JA_BGM_TAKT_MEDRI); + } + + m0432 = 0; + } + + if (m0434 > 1) { + m0434--; + } + if (m0434 == 1) { + manage_friend_draw(1); + m0434 = 0; + } + + return 1; } /* 000020E0-000022FC .text setMaterial__10daObjMknjDFP11J3DMaterialUc */ -void daObjMknjD::setMaterial(J3DMaterial*, unsigned char) { - /* Nonmatching */ +void daObjMknjD::setMaterial(J3DMaterial* i_mat, u8 i_alpha) { + for (; i_mat != NULL; i_mat = i_mat->getNext()) { + if (i_alpha == 0) { + i_mat->getShape()->hide(); + } + else { + i_mat->getShape()->show(); + + if (i_alpha == 0xFF) { + i_mat->setMaterialMode(1); + + i_mat->getPEBlock()->getZMode()->setUpdateEnable(1); + i_mat->getPEBlock()->getZMode()->setCompareEnable(1); + + i_mat->getPEBlock()->getBlend()->setType(0); + } + else { + i_mat->setMaterialMode(1); + + i_mat->getPEBlock()->getZMode()->setUpdateEnable(0); + i_mat->getPEBlock()->getZMode()->setCompareEnable(0); + + i_mat->getPEBlock()->getBlend()->setType(1); + i_mat->getPEBlock()->getBlend()->setSrcFactor(4); + i_mat->getPEBlock()->getBlend()->setDstFactor(5); + } + + i_mat->getTevKColor(3)->mColor.a = i_alpha; + } + } } /* 000022FC-00002430 .text Draw__Q210daObjMknjD5Act_cFv */ -void daObjMknjD::Act_c::Draw() { - /* Nonmatching */ +int daObjMknjD::Act_c::Draw() { + g_env_light.settingTevStruct(TEV_TYPE_BG0, getPositionP(), &mTevStr); + g_env_light.setLightTevColorType(mBreakMdl, &mTevStr); + + g_env_light.settingTevStruct(TEV_TYPE_BG0, getPositionP(), &mTevStr); + g_env_light.setLightTevColorType(mMainMdl, &mTevStr); + + dComIfGd_setListBG(); + + J3DModelData* mdlData = mMainMdl->getModelData(); + u16 jointCount = mdlData->getJointNum(); + for (u16 i = 0; i < jointCount; i++) { + setMaterial(mdlData->getJointNodePointer(i)->getMesh(), mMainMdlAlpha); + } + + dComIfGd_setListSky(); + + mDoExt_modelUpdateDL(mMainMdl); + if (m043D == true) { + mDoExt_modelUpdateDL(mBreakMdl); + } + + dComIfGd_setList(); + + return 1; } -/* 00002430-00002450 .text Mthd_Create__Q210daObjMknjD27@unnamed@d_a_obj_mknjd_cpp@FPv */ -void daObjMknjD::@unnamed@d_a_obj_mknjd_cpp@::Mthd_Create(void*) { - /* Nonmatching */ -} - -/* 00002450-00002470 .text Mthd_Delete__Q210daObjMknjD27@unnamed@d_a_obj_mknjd_cpp@FPv */ -void daObjMknjD::@unnamed@d_a_obj_mknjd_cpp@::Mthd_Delete(void*) { - /* Nonmatching */ -} - -/* 00002470-00002490 .text Mthd_Execute__Q210daObjMknjD27@unnamed@d_a_obj_mknjd_cpp@FPv */ -void daObjMknjD::@unnamed@d_a_obj_mknjd_cpp@::Mthd_Execute(void*) { - /* Nonmatching */ -} - -/* 00002490-000024BC .text Mthd_Draw__Q210daObjMknjD27@unnamed@d_a_obj_mknjd_cpp@FPv */ -void daObjMknjD::@unnamed@d_a_obj_mknjd_cpp@::Mthd_Draw(void*) { - /* Nonmatching */ -} - -/* 000024BC-000024E8 .text Mthd_IsDelete__Q210daObjMknjD27@unnamed@d_a_obj_mknjd_cpp@FPv */ -void daObjMknjD::@unnamed@d_a_obj_mknjd_cpp@::Mthd_IsDelete(void*) { - /* Nonmatching */ -} - -/* 000024E8-000024F0 .text IsDelete__16dBgS_MoveBgActorFv */ -void dBgS_MoveBgActor::IsDelete() { - /* Nonmatching */ -} - -/* 000024F0-000024F8 .text ToFore__16dBgS_MoveBgActorFv */ -void dBgS_MoveBgActor::ToFore() { - /* Nonmatching */ -} - -/* 000024F8-00002500 .text ToBack__16dBgS_MoveBgActorFv */ -void dBgS_MoveBgActor::ToBack() { - /* Nonmatching */ -} - -/* 00002500-00002504 .text draw__34JPACallBackBaseFP14JPABaseEmitter */ -void JPACallBackBase::draw(JPABaseEmitter*) { - /* Nonmatching */ -} - -/* 00002504-00002508 .text executeAfter__34JPACallBackBaseFP14JPABaseEmitter */ -void JPACallBackBase::executeAfter(JPABaseEmitter*) { - /* Nonmatching */ -} - -/* 00002508-0000250C .text execute__34JPACallBackBaseFP14JPABaseEmitter */ -void JPACallBackBase::execute(JPABaseEmitter*) { - /* Nonmatching */ -} - -/* 0000250C-00002510 .text init__34JPACallBackBaseFP14JPABaseEmitter */ -void JPACallBackBase::init(JPABaseEmitter*) { - /* Nonmatching */ -} - -/* 00002510-00002558 .text __dt__34JPACallBackBaseFv */ -JPACallBackBase::~JPACallBackBase() { - /* Nonmatching */ -} - -/* 00002558-000025B4 .text __dt__18dPa_levelEcallBackFv */ -dPa_levelEcallBack::~dPa_levelEcallBack() { - /* Nonmatching */ -} - -/* 000025B4-000025D0 .text PrmAbstract__5daObjFPC10fopAc_ac_cQ310daObjMknjD5Act_c5Prm_eQ310daObjMknjD5Act_c5Prm_e */ -void daObj::PrmAbstract(const fopAc_ac_c*, daObjMknjD::Act_c::Prm_e, daObjMknjD::Act_c::Prm_e) { - /* Nonmatching */ +namespace daObjMknjD { + namespace { + /* 00002430-00002450 .text Mthd_Create__Q210daObjMknjD27@unnamed@d_a_obj_mknjd_cpp@FPv */ + s32 Mthd_Create(void* i_this) { + return static_cast(i_this)->Mthd_Create(); + } + + /* 00002450-00002470 .text Mthd_Delete__Q210daObjMknjD27@unnamed@d_a_obj_mknjd_cpp@FPv */ + s32 Mthd_Delete(void* i_this) { + return static_cast(i_this)->Mthd_Delete(); + } + + /* 00002470-00002490 .text Mthd_Execute__Q210daObjMknjD27@unnamed@d_a_obj_mknjd_cpp@FPv */ + s32 Mthd_Execute(void* i_this) { + return static_cast(i_this)->MoveBGExecute(); + } + + /* 00002490-000024BC .text Mthd_Draw__Q210daObjMknjD27@unnamed@d_a_obj_mknjd_cpp@FPv */ + s32 Mthd_Draw(void* i_this) { + return static_cast(i_this)->Draw(); + } + + /* 000024BC-000024E8 .text Mthd_IsDelete__Q210daObjMknjD27@unnamed@d_a_obj_mknjd_cpp@FPv */ + s32 Mthd_IsDelete(void* i_this) { + return static_cast(i_this)->IsDelete(); + } + + static actor_method_class Mthd_Table = { + (process_method_func)Mthd_Create, + (process_method_func)Mthd_Delete, + (process_method_func)Mthd_Execute, + (process_method_func)Mthd_IsDelete, + (process_method_func)Mthd_Draw, + }; + } } +extern actor_process_profile_definition g_profile_Obj_MknjD = { + fpcLy_CURRENT_e, + 3, + fpcPi_CURRENT_e, + PROC_Obj_MknjD, + &g_fpcLf_Method.mBase, + sizeof(daObjMknjD::Act_c), + 0, + 0, + &g_fopAc_Method.base, + 0x01C6, + &daObjMknjD::Mthd_Table, + 0x00044100, + fopAc_ACTOR_e, + fopAc_CULLBOX_CUSTOM_e, +}; diff --git a/src/d/d_particle.cpp b/src/d/d_particle.cpp index 771d59169..747015b63 100644 --- a/src/d/d_particle.cpp +++ b/src/d/d_particle.cpp @@ -564,4 +564,3 @@ void dPa_setColorEcallBack::setup(JPABaseEmitter*, const cXyz*, const csXyz*, si // dPa_setColorEcallBack::~dPa_setColorEcallBack() { // /* Nonmatching */ // } - diff --git a/src/f_pc/f_pc_base.cpp b/src/f_pc/f_pc_base.cpp index bc742bfa7..b46805d66 100644 --- a/src/f_pc/f_pc_base.cpp +++ b/src/f_pc/f_pc_base.cpp @@ -119,19 +119,19 @@ s32 fpcBs_SubCreate(base_process_class* i_proc) { case 2: case cPhs_COMPLEATE_e: fpcBs_DeleteAppend(i_proc); - i_proc->mUnk2 = 2; + i_proc->mCreateResult = 2; return 2; case cPhs_INIT_e: case 1: i_proc->mInitState = 1; - i_proc->mUnk2 = 0; + i_proc->mCreateResult = 0; return cPhs_INIT_e; case 3: - i_proc->mUnk2 = 3; + i_proc->mCreateResult = 3; return 3; case cPhs_ERROR_e: default: - i_proc->mUnk2 = 5; + i_proc->mCreateResult = 5; return cPhs_ERROR_e; } }