From 2a27075530e4636ff47b79086f965ac773a8053b Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Tue, 16 Jan 2024 14:44:21 -0500 Subject: [PATCH] d_a_player_main --- .../JSystem/J3DGraphAnimator/J3DAnimation.h | 7 +- .../JSystem/J3DGraphAnimator/J3DMaterialAnm.h | 21 +- include/JSystem/J3DGraphAnimator/J3DModel.h | 1 + include/d/actor/d_a_player.h | 21 +- include/d/actor/d_a_player_main.h | 100 +-- include/d/d_attention.h | 4 +- include/d/d_com_inf_game.h | 9 + include/d/d_particle.h | 7 +- include/d/d_stage.h | 3 + include/f_op/f_op_actor.h | 1 + include/f_op/f_op_msg_mng.h | 1 + include/m_Do/m_Do_audio.h | 12 + include/m_Do/m_Do_ext.h | 1 + include/m_Do/m_Do_graphic.h | 2 +- src/JAZelAudio/JAIZelAnime.cpp | 2 +- src/d/actor/d_a_player.cpp | 4 +- src/d/actor/d_a_player_bottle.inc | 2 + src/d/actor/d_a_player_dproc.inc | 10 +- src/d/actor/d_a_player_fan.inc | 45 +- src/d/actor/d_a_player_grab.inc | 1 + src/d/actor/d_a_player_hammer.inc | 3 + src/d/actor/d_a_player_hook.inc | 3 + src/d/actor/d_a_player_main.cpp | 697 +++++++++++++++--- src/d/actor/d_a_player_particle.inc | 80 +- src/d/actor/d_a_player_rope.inc | 3 + src/d/actor/d_a_player_ship.inc | 2 + src/d/actor/d_a_player_swim.inc | 2 + src/d/actor/d_a_player_sword.inc | 13 +- src/d/d_vibration.cpp | 2 +- src/f_op/f_op_msg_mng.cpp | 2 +- 30 files changed, 865 insertions(+), 196 deletions(-) diff --git a/include/JSystem/J3DGraphAnimator/J3DAnimation.h b/include/JSystem/J3DGraphAnimator/J3DAnimation.h index 5aa10507e..f8746cc04 100644 --- a/include/JSystem/J3DGraphAnimator/J3DAnimation.h +++ b/include/JSystem/J3DGraphAnimator/J3DAnimation.h @@ -5,9 +5,6 @@ #include "JSystem/JUtility/JUTNameTab.h" #include "JSystem/JUtility/JUTDataHeader.h" -typedef struct _GXColor GXColor; -typedef struct _GXColorS10 GXColorS10; - struct J3DAnmKeyTableBase { /* 0x00 */ u16 mMaxFrame; /* 0x02 */ u16 mOffset; @@ -418,7 +415,7 @@ public: void searchUpdateMaterialID(J3DMaterialTable*); void searchUpdateMaterialID(J3DModelData*); - virtual ~J3DAnmTextureSRTKey(); + virtual ~J3DAnmTextureSRTKey() {} void getTransform(u16 idx, J3DTextureSRTInfo* pSRTInfo) const { calcTransform(getFrame(), idx, pSRTInfo); @@ -515,7 +512,7 @@ public: J3DAnmTexPatternFullTable * getAnmTable() const { return mAnmTable; } - virtual ~J3DAnmTexPattern(); + virtual ~J3DAnmTexPattern() {} private: /* 0x10 */ u16* mTextureIndex; diff --git a/include/JSystem/J3DGraphAnimator/J3DMaterialAnm.h b/include/JSystem/J3DGraphAnimator/J3DMaterialAnm.h index a3b532d7c..d4541799c 100644 --- a/include/JSystem/J3DGraphAnimator/J3DMaterialAnm.h +++ b/include/JSystem/J3DGraphAnimator/J3DMaterialAnm.h @@ -3,9 +3,6 @@ #include "JSystem/J3DGraphAnimator/J3DAnimation.h" -typedef struct _GXColor GXColor; -typedef struct _GXColorS10 GXColorS10; - class J3DMatColorAnm { public: ~J3DMatColorAnm() {} @@ -70,7 +67,7 @@ public: mAnmIndex = 0; mAnmTransform = NULL; } - J3DTexMtxAnm(J3DAnmTextureSRTKey * pAnm, u16 anmIdx) { + J3DTexMtxAnm(J3DAnmTextureSRTKey* pAnm, u16 anmIdx) { mAnmIndex = anmIdx; mAnmTransform = pAnm; } @@ -100,7 +97,7 @@ public: mAnmTevReg = NULL; mAnmIndex = 0; } - J3DTevKColorAnm(J3DAnmTevRegKey * pAnm, u16 anmIdx) { + J3DTevKColorAnm(J3DAnmTevRegKey* pAnm, u16 anmIdx) { mAnmTevReg = pAnm; mAnmIndex = anmIdx; } @@ -130,7 +127,7 @@ public: mAnmTevReg = NULL; mAnmIndex = 0; } - J3DTevColorAnm(J3DAnmTevRegKey * pAnm, u16 anmIdx) { + J3DTevColorAnm(J3DAnmTevRegKey* pAnm, u16 anmIdx) { mAnmTevReg = pAnm; mAnmIndex = anmIdx; } @@ -164,17 +161,17 @@ public: inline void setTevColorAnm(int i, J3DTevColorAnm* pAnm) { mTevColorAnm[i] = pAnm; } inline void setTevKColorAnm(int i, J3DTevKColorAnm* pAnm) { mTevKColorAnm[i] = pAnm; } - virtual ~J3DMaterialAnm() {}; + virtual ~J3DMaterialAnm() {} virtual void calc(J3DMaterial*) const; const J3DTexMtxAnm* getTexMtxAnm(int i) const { return mTexMtxAnm[i]; } private: - /* 0x04 */ J3DMatColorAnm * mMatColorAnm[2]; - /* 0x0C */ J3DTexMtxAnm * mTexMtxAnm[8]; - /* 0x2C */ J3DTexNoAnm * mTexNoAnm[8]; - /* 0x4C */ J3DTevColorAnm * mTevColorAnm[4]; - /* 0x5C */ J3DTevKColorAnm * mTevKColorAnm[4]; + /* 0x04 */ J3DMatColorAnm* mMatColorAnm[2]; + /* 0x0C */ J3DTexMtxAnm* mTexMtxAnm[8]; + /* 0x2C */ J3DTexNoAnm* mTexNoAnm[8]; + /* 0x4C */ J3DTevColorAnm* mTevColorAnm[4]; + /* 0x5C */ J3DTevKColorAnm* mTevKColorAnm[4]; }; // Size: 0x6C #endif /* J3DMATERIALANM_H */ diff --git a/include/JSystem/J3DGraphAnimator/J3DModel.h b/include/JSystem/J3DGraphAnimator/J3DModel.h index 9da5cbd6f..71651c6d0 100644 --- a/include/JSystem/J3DGraphAnimator/J3DModel.h +++ b/include/JSystem/J3DGraphAnimator/J3DModel.h @@ -142,6 +142,7 @@ public: // Appears in TP debug maps but not TWW debug maps. Vec* getBaseScale() { return &mBaseScale; } + /* 0x000 */ /* vtable */ /* 0x004 */ J3DModelData* mModelData; /* 0x008 */ u32 mFlags; /* 0x00C */ u32 mDiffFlag; diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index a6016e218..f8270b3ff 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -86,15 +86,19 @@ public: daPyFlg0_HOVER_BOOTS = 0x00001000, daPyFlg0_UNK4000 = 0x00004000, daPyFlg0_UNK10000 = 0x00010000, + daPyFlg0_UNK20000 = 0x00020000, daPyFlg0_NO_FALL_VOICE = 0x00040000, daPyFlg0_SCOPE_CANCEL = 0x00080000, daPyFlg0_PHOTO_BOX_CANCEL = 0x00080000, // Same as scope cancel daPyFlg0_UNK200000 = 0x00200000, + daPyFlg0_UNK400000 = 0x00400000, daPyFlg0_UNK1000000 = 0x01000000, daPyFlg0_EQUIP_HEAVY_BOOTS = 0x02000000, daPyFlg0_NO_DRAW = 0x08000000, daPyFlg0_UNK10000000 = 0x10000000, + daPyFlg0_UNK20000000 = 0x20000000, daPyFlg0_HEAVY_STATE = 0x40000000, + daPyFlg0_UNK80000000 = 0x80000000, }; enum daPy_FLG1 { @@ -106,6 +110,7 @@ public: daPyFlg1_NPC_NOT_CHANGE = 0x00000040, daPyFlg1_UNK80 = 0x00000080, daPyFlg1_CONFUSE = 0x00000100, + daPyFlg1_UNK200 = 0x00000200, daPyFlg1_UNK400 = 0x00000400, daPyFlg1_FREEZE_STATE = 0x00000800, daPyFlg1_SHIP_TACT = 0x00001000, @@ -114,13 +119,16 @@ public: daPyFlg1_UNK8000 = 0x00008000, daPyFlg1_FORCE_VOMIT_JUMP_SHORT = 0x00010000, daPyFlg1_FOREST_WATER_USE = 0x00020000, + daPyFlg1_UNK40000 = 0x00040000, daPyFlg1_WATER_DROP = 0x00080000, daPyFlg1_UNK200000 = 0x00200000, daPyFlg1_UNK800000 = 0x00800000, daPyFlg1_UNK1000000 = 0x01000000, daPyFlg1_VINE_CATCH = 0x02000000, daPyFlg1_UNK8000000 = 0x08000000, + daPyFlg1_UNK10000000 = 0x10000000, daPyFlg1_LAST_COMBO_WAIT = 0x20000000, + daPyFlg1_UNK40000000 = 0x40000000, }; enum daPy_RFLG0 { @@ -129,6 +137,7 @@ public: daPyRFlg0_GRAB_UP_END = 0x00000020, daPyRFlg0_AUTO_JUMP_LAND = 0x00000040, daPyRFlg0_UNK80 = 0x00000080, + daPyRFlg0_UNK200 = 0x00000200, daPyRFlg0_RIGHT_FOOT_ON_GROUND = 0x00000400, daPyRFlg0_LEFT_FOOT_ON_GROUND = 0x00000800, daPyRFlg0_FRONT_ROLL_CRASH = 0x00002000, @@ -142,6 +151,7 @@ public: daPyRFlg0_TACT_USE = 0x01000000, daPyRFlg0_FAIRY_USE = 0x02000000, daPyRFlg0_UNK8000000 = 0x08000000, + daPyRFlg0_UNK10000000 = 0x10000000, daPyRFlg0_ARROW_SHOOT = 0x20000000, // 0x00000001 and 0x00000002 set in daPy_lk_c::dProcLastCombo // 0x00001000 set in daPy_lk_c::procCrawlMove_init, checked in checkNoCollisionCorret__9daPy_lk_cFv @@ -437,11 +447,16 @@ public: bool checkGrabWear() const { return field_0x2b0 < 0.0f; } bool checkNormalSwordEquip() const { - return dComIfGs_getSelectEquip(0) == SWORD || dComIfGp_getMiniGameType() == 2; + return dComIfGs_getSelectEquip(0) == SWORD || + dComIfGp_getMiniGameType() == 2; + } + bool checkMasterSwordEquip() const { + return dComIfGs_getSelectEquip(0) == MASTER_SWORD || + dComIfGs_getSelectEquip(0) == LV3_SWORD || + dComIfGs_getSelectEquip(0) == MASTER_SWORD_EX; } void setFace(daPy_FACE face) { mFace = face; } - void checkMasterSwordEquip() const {} void checkFinalMasterSwordEquip() const {} void checkBowMiniGame() const {} void checkSwordMiniGame() const {} @@ -493,7 +508,7 @@ public: void changePlayer(fopAc_ac_c*); void objWindHitCheck(dCcD_Cyl*); void setDoButtonQuake(); - void stopDoButtonQuake(int); + void stopDoButtonQuake(BOOL); }; // Size: 0x320 #endif /* D_A_PLAYER */ diff --git a/include/d/actor/d_a_player_main.h b/include/d/actor/d_a_player_main.h index 73d480847..bffdf7e12 100644 --- a/include/d/actor/d_a_player_main.h +++ b/include/d/actor/d_a_player_main.h @@ -143,7 +143,8 @@ public: /* 0x04 */ JPABaseEmitter* mpEmitter; /* 0x08 */ cXyz field_0x08; - /* 0x14 */ u8 field_0x14[0x1C - 0x14]; + /* 0x14 */ csXyz field_0x14; + /* 0x1A */ u8 field_0x1A[0x1C - 0x1A]; }; // Size: 0x1C class daPy_waterDropEcallBack_c : public daPy_followEcallBack_c { @@ -165,18 +166,26 @@ public: ~daPy_dmEcallBack_c() {} daPy_dmEcallBack_c() {} + static int getTimer() { return m_timer; } static void setTimer(s16 timer) { m_timer = timer; } - static void setType(u16 type) { m_type = type; } + static void decTimer() { m_timer--; } + static bool checkFlame() { return m_type == 0; } static bool checkCurse() { return m_type == 1; } static bool checkElec() { return m_type == 2; } - - static void checkFlame() {} - static void decTimer() {} - static void getTimer() {} - static void setCurse(s16) {} - static void setElec(s16) {} - static void setFlame(s16) {} + static void setType(u16 type) { m_type = type; } + static void setFlame(s16 timer) { + setType(0); + setTimer(timer); + } + static void setCurse(s16 timer) { + setType(1); + setTimer(timer); + } + static void setElec(s16 timer) { + setType(2); + setTimer(timer); + } static s16 m_timer; static u16 m_type; @@ -206,8 +215,8 @@ public: static void onMabaFlg() { m_maba_flg = 1; } static void offMabaFlg() { m_maba_flg = 0; } - static void decMabaTimer() {} - static void decMorfFrame() {} + static void decMabaTimer() { cLib_calcTimer(&m_maba_timer); } + static void decMorfFrame() { cLib_calcTimer(&m_morf_frame); } static void getEyeMoveFlg() {} static void getMabaFlg() {} static void getMabaTimer() {} @@ -1258,7 +1267,7 @@ public: HEAP_TYPE_UNDER_UPPER_e = 0, HEAP_TYPE_TEXTURE_ANIME_e = 1, HEAP_TYPE_TEXTURE_SCROLL_e = 2, - HEAP_TYPE_UNK3_e = 3, + HEAP_TYPE_ITEM_ANIME_e = 3, }; enum daPy_ANM { @@ -1644,7 +1653,7 @@ public: void changeDragonShield(int); BOOL checkNewItemChange(u8); BOOL checkItemChangeFromButton(); - BOOL checkItemAction(); + void checkItemAction(); void getSlidePolygon(); BOOL checkJumpCutFromButton(); void orderTalk(); @@ -1666,9 +1675,9 @@ public: BOOL checkElecReturnDamage(dCcD_GObjInf*, cXyz*); s32 checkWallAtributeDamage(dBgS_AcchCir*); BOOL changeDamageProc(); - void changeAutoJumpProc(); - void changeDemoProc(); - void changeDeadProc(); + BOOL changeAutoJumpProc(); + BOOL changeDemoProc(); + BOOL changeDeadProc(); cXyz* getDamageVec(dCcD_GObjInf*); void setOldRootQuaternion(s16, s16, s16); BOOL checkRestHPAnime(); @@ -1783,39 +1792,39 @@ public: BOOL procBootsEquip(); BOOL procNotUse_init(int); BOOL procNotUse(); - void getGroundAngle(cBgS_PolyInfo*, s16); + s16 getGroundAngle(cBgS_PolyInfo*, s16); void setLegAngle(f32, int, s16*, s16*); void footBgCheck(); void setWaterY(); void autoGroundHit(); BOOL checkAttentionPosAngle(fopAc_ac_c*, cXyz**); void setNeckAngle(); - BOOL checkOriginalHatAnimation(); + void checkOriginalHatAnimation(); void setHatAngle(); void setMoveSlantAngle(); void setWaistAngle(); void setWorldMatrix(); void setAtParam(u32, int, dCcG_At_Spl, u8, u8, u8, f32); void resetCurse(); - BOOL checkLightHit(); + void checkLightHit(); void setSwordAtCollision(); void getBlurTopRate(); void setCollision(); void setAttentionPos(); - void setRoomInfo(); + int setRoomInfo(); void setDemoData(); void setStickData(); void setBgCheckParam(); u32 setParamData(int, int, int, int); BOOL checkLavaFace(cXyz*, int); - BOOL checkFallCode(); + void checkFallCode(); BOOL startRestartRoom(u32, int, f32, int); BOOL checkSuccessGuard(int); void setShapeAngleOnGround(); void setStepsOffset(); void setBeltConveyerPower(); void setWindAtPower(); - BOOL checkRoofRestart(); + void checkRoofRestart(); BOOL execute(); BOOL playerDelete(); void initTextureAnime(); @@ -1877,7 +1886,7 @@ public: BOOL dProcOpenTreasure_init(); BOOL dProcOpenTreasure(); void setGetItemSound(u16, int); - void setGetDemo(); + BOOL setGetDemo(); BOOL dProcGetItem_init(); BOOL dProcGetItem(); BOOL dProcUnequip_init(); @@ -2398,7 +2407,7 @@ public: } void onShipTact() { onNoResetFlg1(daPyFlg1_SHIP_TACT); } void offShipTact() { offNoResetFlg1(daPyFlg1_SHIP_TACT); } - void checkShipGetOff() {} + bool checkShipGetOff() { return mCurProc == daPyProc_SHIP_GET_OFF_e; } void onShipDrop(s16 param_1) { onNoResetFlg0(daPyFlg0_SHIP_DROP); m3550 = param_1; @@ -2422,6 +2431,10 @@ public: mActivePlayerBombs--; } } + bool checkSwordEquip() const { + return dComIfGs_getSelectEquip(0) != NO_ITEM || + dComIfGp_getMiniGameType() == 2; + } int getStartRoomNo() { return fopAcM_GetParam(this) & 0x3F; } int getStartMode() { return (fopAcM_GetParam(this) >> 0x0C) & 0xF; } @@ -2455,7 +2468,6 @@ public: void checkRopeThrowAnime() const {} void checkShieldEquip() const {} void checkSpecialDemoMode() const {} - void checkSwordEquip() const {} void checkSwordEquipAnime() const {} void checkUpperAnime(u16) const {} void doButton() const {} @@ -2486,6 +2498,12 @@ public: void swordTrigger() const {} void talkTrigger() const {} + virtual void setPlayerPosAndAngle(cXyz*, s16); + virtual void setPlayerPosAndAngle(cXyz*, csXyz*); + virtual void setPlayerPosAndAngle(MtxP); + virtual BOOL setThrowDamage(cXyz*, s16, f32, f32, int); + virtual void changeTextureAnime(u16, u16, int); + virtual MtxP getLeftHandMatrix() { return mpCLModel->getAnmMtx(0x08); } // cl_LhandA joint virtual MtxP getRightHandMatrix() { return mpCLModel->getAnmMtx(0x0C); } // cl_RhandA joint virtual f32 getGroundY() { return mAcch.GetGroundH(); } @@ -2529,11 +2547,6 @@ public: virtual MtxP getModelJointMtx(u16 idx) { return mpCLModel->getAnmMtx(idx); } virtual f32 getOldSpeedY() { return mOldSpeed.y; } virtual BOOL setHookshotCarryOffset(unsigned int, const cXyz*); - virtual void setPlayerPosAndAngle(cXyz*, s16); - virtual void setPlayerPosAndAngle(cXyz*, csXyz*); - virtual void setPlayerPosAndAngle(MtxP); - virtual BOOL setThrowDamage(cXyz*, s16, f32, f32, int); - virtual void changeTextureAnime(u16, u16, int); virtual void cancelChangeTextureAnime() { resetDemoTextureAnime(); } public: @@ -2563,7 +2576,7 @@ public: /* 0x07C8 */ dBgS_LinkRoofChk mRoofChk; /* 0x0814 */ dBgS_ArrowLinChk mArrowLinChk; /* 0x0880 */ dBgS_MirLightLinChk mMirLightLinChk; - /* 0x08EC */ dBgS_ObjGndChk_Spl m08EC; + /* 0x08EC */ dBgS_ObjGndChk_Spl mLavaGndChk; /* 0x0940 */ cBgS_PolyInfo mPolyInfo; /* 0x0950 */ daPy_HIO_c* m_HIO; /* 0x0954 */ J3DModel* mpHandsModel; @@ -2587,7 +2600,7 @@ public: /* 0x2E90 */ JKRSolidHeap* mpItemHeaps[2]; /* 0x2E98 */ J3DModel* mpHeldItemModel; /* 0x2E9C */ mDoExt_bckAnm mSwordAnim; - /* 0x2EAC */ mDoExt_McaMorf* m2EAC; + /* 0x2EAC */ mDoExt_McaMorf* mpParachuteFanMorf; /* 0x2EB0 */ J3DAnmTevRegKey* mpBombBrk; /* 0x2EB4 */ J3DAnmTevRegKey* mpGwp00BrkData; /* 0x2EB8 */ J3DAnmTextureSRTKey* mpGwp00BtkData; @@ -2595,7 +2608,7 @@ public: /* 0x2EC0 */ J3DAnmTextureSRTKey* mpIceArrowBtk; /* 0x2EC4 */ J3DAnmTextureSRTKey* mpLightArrowBtk; /* 0x2EC8 */ J3DAnmTextureSRTKey* mpGicer01Btk; - /* 0x2ECC */ JKRSolidHeap* m2ECC; + /* 0x2ECC */ JKRSolidHeap* mpItemAnimeHeap; /* 0x2ED0 */ void* m_item_bck_buffer; /* 0x2ED4 */ J3DAnmTextureSRTKey* mpHeldItemBtk; /* 0x2ED8 */ J3DAnmTextureSRTKey* mpSwordBtk; @@ -2606,7 +2619,7 @@ public: /* 0x2EEC */ J3DModel* mpSwordTipStabModel; /* 0x2EF0 */ J3DAnmColor* mpCutfBpk; /* 0x2EF4 */ J3DAnmTextureSRTKey* mpCutfBtk; - /* 0x2EF8 */ J3DAnmTevRegKey* mpCutfBrk2EF8; + /* 0x2EF8 */ J3DAnmTevRegKey* mpCutfBrk; /* 0x2EFC */ mDoExt_brkAnm m2EFC; /* 0x2F14 */ J3DModel* mpSuimenMunyaModel; /* 0x2F18 */ J3DAnmTextureSRTKey* mpSuimenMunyaBtk; @@ -2660,7 +2673,7 @@ public: /* 0x336C */ daPy_waterDropEcallBack_c m336C; /* 0x338C */ daPy_followEcallBack_c m338C; /* 0x33A8 */ daPy_mtxPosFollowEcallBack_c m33A8; - /* 0x33B8 */ daPy_dmEcallBack_c m33B8[4]; + /* 0x33B8 */ daPy_dmEcallBack_c mDmEcallBack[4]; /* 0x33E8 */ daPy_mtxFollowEcallBack_c m33E8; /* 0x33F4 */ daPy_fanSwingEcallBack_c mFanSwingCb; /* 0x3400 */ daPy_mtxPosFollowEcallBack_c m3400; @@ -2699,7 +2712,6 @@ public: /* 0x34CC */ u8 m34CC; /* 0x34CD */ u8 m34CD; /* 0x34CE */ u8 m34CE; - /* 0x34CF */ u8 m34CF[0x34D0 - 0x34CF]; /* 0x34D0 */ s16 m34D0; /* 0x34D2 */ s16 m34D2; /* 0x34D4 */ s16 m34D4; @@ -2777,35 +2789,36 @@ public: /* 0x3564 */ s16 m3564; /* 0x3566 */ s16 m3566; /* 0x3568 */ s16 m3568; - /* 0x356A */ u8 m356A[0x356C - 0x356A]; /* 0x356C */ int mCameraInfoIdx; /* 0x3570 */ s32 m3570; /* 0x3574 */ s32 m3574; /* 0x3578 */ int m3578; - /* 0x357C */ u8 m357C[0x3580 - 0x357C]; + /* 0x357C */ int m357C; /* 0x3580 */ int m3580; /* 0x3584 */ int mCurrAttributeCode; - /* 0x3588 */ u8 m3588[0x358C - 0x3588]; + /* 0x3588 */ int m3588; /* 0x358C */ int mStaffIdx; /* 0x3590 */ int mEventIdx; /* 0x3594 */ int mRestartPoint; /* 0x3598 */ f32 m3598; - /* 0x359C */ u8 m359C[0x35A0 - 0x359C]; + /* 0x359C */ f32 m359C; /* 0x35A0 */ f32 m35A0; /* 0x35A4 */ f32 m35A4; /* 0x35A8 */ f32 m35A8; /* 0x35AC */ f32 m35AC; /* 0x35B0 */ f32 m35B0; - /* 0x35B4 */ u8 m35B4[0x35BC - 0x35B4]; + /* 0x35B4 */ f32 m35B4; + /* 0x35B8 */ f32 m35B8; /* 0x35BC */ f32 mVelocity; /* 0x35C0 */ u8 m35C0[0x35C4 - 0x35C0]; /* 0x35C4 */ f32 m35C4; /* 0x35C8 */ f32 m35C8; - /* 0x35CC */ u8 m35CC[0x35D0 - 0x35CC]; + /* 0x35CC */ f32 m35CC; /* 0x35D0 */ f32 m35D0; /* 0x35D4 */ f32 m35D4; /* 0x35D8 */ f32 m35D8; - /* 0x35DC */ u8 m35DC[0x35E4 - 0x35DC]; + /* 0x35DC */ f32 m35DC; + /* 0x35E0 */ f32 m35E0; /* 0x35E4 */ f32 m35E4; /* 0x35E8 */ f32 m35E8; /* 0x35EC */ f32 m35EC; @@ -2830,7 +2843,6 @@ public: /* 0x3638 */ int mMsgId; /* 0x363C */ J3DFrameCtrl* mpSeAnmFrameCtrl; /* 0x3640 */ s16 m3640; - /* 0x3642 */ u8 m3642[0x3644 - 0x3642]; /* 0x3644 */ f32 m3644; /* 0x3648 */ Quaternion m3648; /* 0x3658 */ Quaternion m3658; diff --git a/include/d/d_attention.h b/include/d/d_attention.h index e77f552e8..7fa301fa0 100644 --- a/include/d/d_attention.h +++ b/include/d/d_attention.h @@ -28,6 +28,8 @@ public: void init(); void proc(); + fopAc_ac_c* getZHintTarget() { return convPId(field_0x8); } + private: /* 0x0 */ u32 mHintActorID; /* 0x4 */ int mPriority; @@ -176,6 +178,7 @@ public: fopAc_ac_c* getLookTarget() { return mLook[0].convPId(mLook[0].getLookTarget()); } fopAc_ac_c* getLook2Target() { return mLook[1].convPId(mLook[1].getLookTarget()); } + fopAc_ac_c* getZHintTarget() { return mHint.getZHintTarget(); } static s32 loc_type_num; static u32 act_type_num; @@ -200,7 +203,6 @@ public: void chkEnemySound() {} u8 getCatchChgItem() { return mCatch.getChangeItem(); } void getCatghTarget() {} - void getZHintTarget() {} void offAleart() {} void revivalAleart() {} void LookRequest(fopAc_ac_c*, f32, f32, f32, s16, int) {} diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 22824376d..27b506735 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -485,6 +485,7 @@ public: void setAStatus(u8 status) { mCurrButtonBAction = status; } u8 getDoStatus() { return mCurrButtonAAction; } void setDoStatus(u8 status) { mCurrButtonAAction = status; } + void setRStatus(u8 status) { field_0x492d = status; } u8 getRStatusForce() { return field_0x4930; } void setRStatusForce(u8 status) { field_0x4930 = status; } inline u8 getPictureStatus() { return mPictureStatus; } @@ -992,6 +993,10 @@ inline void dComIfGs_setPictureNum(u8 num) { g_dComIfG_gameInfo.save.getPlayer().getItemRecord().setPictureNum(num); } +inline u16 dComIfGs_getFwaterTimer() { + return g_dComIfG_gameInfo.save.getPlayer().getItemRecord().getTimer(); +} + inline u8 dComIfGs_getBeastNum(int i_idx) { return g_dComIfG_gameInfo.save.getPlayer().getBagItemRecord().getBeastNum(i_idx); } @@ -2281,6 +2286,10 @@ inline void dComIfGp_setDoStatus(u8 status) { g_dComIfG_gameInfo.play.setDoStatus(status); } +inline void dComIfGp_setRStatus(u8 status) { + g_dComIfG_gameInfo.play.setRStatus(status); +} + inline u8 dComIfGp_getRStatusForce() { return g_dComIfG_gameInfo.play.getRStatusForce(); } diff --git a/include/d/d_particle.h b/include/d/d_particle.h index 42a9d777b..4bd6e940f 100644 --- a/include/d/d_particle.h +++ b/include/d/d_particle.h @@ -295,8 +295,13 @@ public: virtual void setup(JPABaseEmitter*, const cXyz*, const csXyz*, s8); void end(); + void getAlpha() {} + void remove() {} + void setAlpha(u8) {} + void setPosArray(cXyz*, s16) {} + public: - /* 0x04 */ u8 field_0x04[0x0C]; + /* 0x04 */ u8 field_0x04[0x10 - 0x04]; }; // Size: 0x10 STATIC_ASSERT(sizeof(dPa_cutTurnEcallBack_c) == 0x10); diff --git a/include/d/d_stage.h b/include/d/d_stage.h index 963202918..3a61c3df8 100644 --- a/include/d/d_stage.h +++ b/include/d/d_stage.h @@ -1085,6 +1085,9 @@ void dStage_restartRoom(u32 roomParam, u32 mode); BOOL dStage_checkRestart(); +class cBgS_GndChk; +int dStage_RoomCheck(cBgS_GndChk* i_gndChk); + static inline u8 IkadaGetRoomNoArg0(fopAc_ac_c* i_actor) { return (fopAcM_GetParam(i_actor) >> 4) & 0x3F; } diff --git a/include/f_op/f_op_actor.h b/include/f_op/f_op_actor.h index c33061be1..62440b30f 100644 --- a/include/f_op/f_op_actor.h +++ b/include/f_op/f_op_actor.h @@ -132,6 +132,7 @@ enum dEvt_Condition_e { dEvtCnd_UNK2_e = 0x0002, dEvtCnd_CANDOOR_e = 0x0004, dEvtCnd_CANGETITEM_e = 0x0008, + dEvtCnd_UNK10_e = 0x0010, dEvtCnd_CANTALKITEM_e = 0x0020, dEvtCnd_CANCATCH_e = 0x0040, }; diff --git a/include/f_op/f_op_msg_mng.h b/include/f_op/f_op_msg_mng.h index ff033f4c8..51ca989ca 100644 --- a/include/f_op/f_op_msg_mng.h +++ b/include/f_op/f_op_msg_mng.h @@ -102,5 +102,6 @@ void fopMsgM_setAlpha(fopMsgM_pane_alpha_class*); u32 fopMsgM_searchMessageNumber(u32); void fopMsgM_messageSendOn(); u32 fopMsgM_tactMessageSet(); +void fopMsgM_demoMsgFlagOn(); #endif diff --git a/include/m_Do/m_Do_audio.h b/include/m_Do/m_Do_audio.h index fb12f9010..78d10580a 100644 --- a/include/m_Do/m_Do_audio.h +++ b/include/m_Do/m_Do_audio.h @@ -141,6 +141,18 @@ inline void mDoAud_linkVoiceStart(u32 param_0, Vec* i_sePos, u8 param_3, s8 para mDoAud_zelAudio_c::getInterface()->linkVoiceStart(param_0, i_sePos, param_3, param_4); } +inline void mDoAud_setLinkGroupInfo(u8 param_0) { + mDoAud_zelAudio_c::getInterface()->setLinkGroupInfo(param_0); +} + +inline void mDoAud_setLinkOnBoard(s32 param_0) { + mDoAud_zelAudio_c::getInterface()->setLinkOnBoard(param_0); +} + +inline void mDoAud_setLinkHp(s32 param_0, s32 param_1) { + mDoAud_zelAudio_c::getInterface()->setLinkHp(param_0, param_1); +} + inline void mDoAud_monsSeStart(u32 i_seNum, Vec* param_1, u32 param_2, u32 param_3, s8 i_reverb) { mDoAud_zelAudio_c::getInterface()->monsSeStart(i_seNum, param_1, param_2, param_3, i_reverb); } diff --git a/include/m_Do/m_Do_ext.h b/include/m_Do/m_Do_ext.h index a2cf0fa1a..92bc71cbd 100644 --- a/include/m_Do/m_Do_ext.h +++ b/include/m_Do/m_Do_ext.h @@ -237,6 +237,7 @@ public: u16 getOldFrameStartJoint() { return mOldFrameStartJoint; } u16 getOldFrameEndJoint() { return mOldFrameEndJoint; } Quaternion* getOldFrameQuaternion(int i_no) { return &mOldFrameQuaternion[i_no]; } + f32 getOldFrameMorfCounter() { return mOldFrameMorfCounter; } private: /* 0x00 */ bool mOldFrameFlg; diff --git a/include/m_Do/m_Do_graphic.h b/include/m_Do/m_Do_graphic.h index 994decf2a..5e3bf2628 100644 --- a/include/m_Do/m_Do_graphic.h +++ b/include/m_Do/m_Do_graphic.h @@ -57,9 +57,9 @@ public: static void endRender() { JFWDisplay::getManager()->endRender(); } static GXTexObj* getZbufferTexObj() { return &mZbufferTexObj; } static GXTexObj* getFrameBufferTexObj() { return &mFrameBufferTexObj; } + static void fadeIn(f32 rate, GXColor& color) { fadeOut(-rate, color); } static void alloc32(u32) {} - static void fadeIn(f32, _GXColor&) {} static void getFrameBufferMemory() {} static void getFrameBufferSize() {} static void getMonotoneRate() {} diff --git a/src/JAZelAudio/JAIZelAnime.cpp b/src/JAZelAudio/JAIZelAnime.cpp index 088e7eb1d..c93f40658 100644 --- a/src/JAZelAudio/JAIZelAnime.cpp +++ b/src/JAZelAudio/JAIZelAnime.cpp @@ -7,7 +7,7 @@ #include "dolphin/types.h" /* 802AC830-802AC888 .text setAnimSound__11JAIZelAnimeFP3VecffUlSc */ -void JAIZelAnime::setAnimSound(Vec*, f32, f32, u32, s8) { +void JAIZelAnime::setAnimSound(Vec* pos, f32 frame, f32 rate, u32 mtrlSndId, s8 reverb) { /* Nonmatching */ } diff --git a/src/d/actor/d_a_player.cpp b/src/d/actor/d_a_player.cpp index cbc8e6a21..069411525 100644 --- a/src/d/actor/d_a_player.cpp +++ b/src/d/actor/d_a_player.cpp @@ -95,7 +95,7 @@ void daPy_py_c::setDoButtonQuake() { } /* 80102D90-80102E18 .text stopDoButtonQuake__9daPy_py_cFi */ -void daPy_py_c::stopDoButtonQuake(int param_1) { +void daPy_py_c::stopDoButtonQuake(BOOL param_1) { if (mQuakeTimer > 0) { mQuakeTimer--; if (mQuakeTimer == 0) { @@ -103,6 +103,6 @@ void daPy_py_c::stopDoButtonQuake(int param_1) { } } if (param_1 && mQuakeTimer == 0) { - mNoResetFlg0 &= ~0x00200000; + offNoResetFlg0(daPyFlg0_UNK200000); } } diff --git a/src/d/actor/d_a_player_bottle.inc b/src/d/actor/d_a_player_bottle.inc index 7a9e67481..4004a723b 100644 --- a/src/d/actor/d_a_player_bottle.inc +++ b/src/d/actor/d_a_player_bottle.inc @@ -45,6 +45,8 @@ BOOL daPy_lk_c::procBottleOpen_init(u16) { /* 801527CC-80152ED0 .text procBottleOpen__9daPy_lk_cFv */ BOOL daPy_lk_c::procBottleOpen() { /* Nonmatching */ + static const Vec splash_scale = {0.3f, 0.3f, 0.3f}; + static const Vec ripple_scale = {0.5f, 0.5f, 0.5f}; } /* 80152ED0-80153064 .text procBottleSwing_init__9daPy_lk_cFi */ diff --git a/src/d/actor/d_a_player_dproc.inc b/src/d/actor/d_a_player_dproc.inc index aed0ba0c2..fc4533e81 100644 --- a/src/d/actor/d_a_player_dproc.inc +++ b/src/d/actor/d_a_player_dproc.inc @@ -113,7 +113,7 @@ void daPy_lk_c::setGetItemSound(u16, int) { } /* 8012E418-8012E6B4 .text setGetDemo__9daPy_lk_cFv */ -void daPy_lk_c::setGetDemo() { +BOOL daPy_lk_c::setGetDemo() { /* Nonmatching */ } @@ -155,6 +155,13 @@ BOOL daPy_lk_c::dProcLavaDamage() { /* 8012EF78-8012F0DC .text dProcFreezeDamage_init_sub__9daPy_lk_cFi */ void daPy_lk_c::dProcFreezeDamage_init_sub(int) { /* Nonmatching */ + static const u16 eff_joint[] = { + 0x0007, + 0x000B, + 0x001A, + 0x000E, + 0x001E, + }; } /* 8012F0DC-8012F174 .text dProcFreezeDamage_init__9daPy_lk_cFv */ @@ -175,6 +182,7 @@ void daPy_lk_c::dProcDead_init_sub() { /* 8012F288-8012F38C .text dProcDead_init_sub2__9daPy_lk_cFv */ void daPy_lk_c::dProcDead_init_sub2() { /* Nonmatching */ + static const Vec ripple_scale = {0.75f, 0.75f, 0.75f}; } /* 8012F38C-8012F3B8 .text checkGameOverStart__9daPy_lk_cFv */ diff --git a/src/d/actor/d_a_player_fan.inc b/src/d/actor/d_a_player_fan.inc index 1df5fe7bf..4704e3b4f 100644 --- a/src/d/actor/d_a_player_fan.inc +++ b/src/d/actor/d_a_player_fan.inc @@ -28,8 +28,15 @@ void daPy_lk_c::fanJointCB(int) { } /* 8014BBE8-8014BC2C .text daPy_fanJointCallback__FP7J3DNodei */ -void daPy_fanJointCallback(J3DNode*, int) { - /* Nonmatching */ +BOOL daPy_fanJointCallback(J3DNode* node, int param_1) { + if (!param_1) { + J3DJoint* joint = static_cast(node); + s32 jntNo = joint->getJntNo(); + J3DModel* model = j3dSys.getModel(); + daPy_lk_c* i_this = reinterpret_cast(model->getUserArea()); + i_this->fanJointCB(jntNo); + } + return TRUE; } /* 8014BC2C-8014BD08 .text parachuteJointCB__9daPy_lk_cFi */ @@ -38,8 +45,15 @@ void daPy_lk_c::parachuteJointCB(int) { } /* 8014BD08-8014BD4C .text daPy_parachuteJointCallback__FP7J3DNodei */ -void daPy_parachuteJointCallback(J3DNode*, int) { - /* Nonmatching */ +BOOL daPy_parachuteJointCallback(J3DNode* node, int param_1) { + if (!param_1) { + J3DJoint* joint = static_cast(node); + s32 jntNo = joint->getJntNo(); + J3DModel* model = j3dSys.getModel(); + daPy_lk_c* i_this = reinterpret_cast(model->getUserArea()); + i_this->parachuteJointCB(jntNo); + } + return TRUE; } /* 8014BD4C-8014BE50 .text setShapeFanLeaf__9daPy_lk_cFv */ @@ -63,8 +77,27 @@ void daPy_lk_c::setSmallFanModel() { } /* 8014C0C0-8014C254 .text setParachuteFanModel__9daPy_lk_cFf */ -void daPy_lk_c::setParachuteFanModel(f32) { - /* Nonmatching */ +void daPy_lk_c::setParachuteFanModel(f32 f31) { + J3DAnmTransform* bck = getItemAnimeResource(LKANM_BCK_FANBA); + JKRHeap* oldHeap = setItemHeap(); + J3DModelData* modelData = static_cast(dComIfG_getObjectRes(l_arcName, LINK_BDL_FANB)); + + mpParachuteFanMorf = new mDoExt_McaMorf( + modelData, NULL, NULL, bck, + J3DFrameCtrl::LOOP_ONCE_e, daPy_HIO_fan_c0::m.field_0x20, f31, daPy_HIO_fan_c0::m.field_0x4, 0, + NULL, + 0x00000000, + 0x11020203 + ); + if (mpParachuteFanMorf == NULL || mpParachuteFanMorf->getModel() == NULL) { JUT_ASSERT(323, 0); } + + mpHeldItemModel = mpParachuteFanMorf->getModel(); + mDoExt_setCurrentHeap(oldHeap); + mpHeldItemModel->setUserArea(reinterpret_cast(this)); + modelData->getJointNodePointer(0x01)->setCallBack(daPy_parachuteJointCallback); // skeleton_root_Lroot joint + modelData->getJointNodePointer(0x07)->setCallBack(daPy_parachuteJointCallback); // skeleton_root_Rroot joint + modelData->getJointNodePointer(0x03)->setCallBack(daPy_parachuteJointCallback); // skeleton_root_LarmB joint + modelData->getJointNodePointer(0x09)->setCallBack(daPy_parachuteJointCallback); // skeleton_root_RarmB joint } /* 8014C254-8014C34C .text procFanSwing_init__9daPy_lk_cFv */ diff --git a/src/d/actor/d_a_player_grab.inc b/src/d/actor/d_a_player_grab.inc index 1fee7f574..869467a9a 100644 --- a/src/d/actor/d_a_player_grab.inc +++ b/src/d/actor/d_a_player_grab.inc @@ -35,6 +35,7 @@ BOOL daPy_lk_c::checkGrabBarrelSearch(int) { /* 8013A97C-8013AF84 .text setGrabItemPos__9daPy_lk_cFv */ void daPy_lk_c::setGrabItemPos() { /* Nonmatching */ + static f32 magtail_offset = 40.0f; } /* 8013AF84-8013B05C .text freeGrabItem__9daPy_lk_cFv */ diff --git a/src/d/actor/d_a_player_hammer.inc b/src/d/actor/d_a_player_hammer.inc index 35a22c3ec..6f1f341c4 100644 --- a/src/d/actor/d_a_player_hammer.inc +++ b/src/d/actor/d_a_player_hammer.inc @@ -20,6 +20,9 @@ void daPy_lk_c::setHammerModel() { /* 80150324-801508FC .text setHammerQuake__9daPy_lk_cFP13cBgS_PolyInfoPC4cXyzi */ void daPy_lk_c::setHammerQuake(cBgS_PolyInfo*, const cXyz*, int) { /* Nonmatching */ + static JGeometry::TVec3 smoke_kusa_particle_scale; + static JGeometry::TVec3 emitter_scale; + static JGeometry::TVec3 emitter_trans; } /* 801508FC-80150B60 .text setHammerWaterSplash__9daPy_lk_cFv */ diff --git a/src/d/actor/d_a_player_hook.inc b/src/d/actor/d_a_player_hook.inc index 7340875be..49b54ea8c 100644 --- a/src/d/actor/d_a_player_hook.inc +++ b/src/d/actor/d_a_player_hook.inc @@ -40,6 +40,9 @@ void daPy_lk_c::freeHookshotItem() { /* 8014B05C-8014B2B8 .text checkNextActionHookshotReady__9daPy_lk_cFv */ BOOL daPy_lk_c::checkNextActionHookshotReady() { /* Nonmatching */ + static JGeometry::TVec3 eff_scale; + static JGeometry::TVec3 eff_dscale; + static JGeometry::TVec3 eff_pscale; } /* 8014B2B8-8014B350 .text checkNextHookshotMode__9daPy_lk_cFv */ diff --git a/src/d/actor/d_a_player_main.cpp b/src/d/actor/d_a_player_main.cpp index 96f3e26fb..3ffaee632 100644 --- a/src/d/actor/d_a_player_main.cpp +++ b/src/d/actor/d_a_player_main.cpp @@ -28,9 +28,9 @@ #include "d/actor/d_a_ship.h" #include "d/actor/d_a_boko.h" #include "SSystem/SComponent/c_counter.h" +#include "m_Do/m_Do_graphic.h" -Vec dummy_3569; -JGeometry::TVec3 l_hammer_splash_particle_scale(0.00002f, 0.00002f, 0.00002f); +cXyz l_hammer_splash_particle_scale(0.00002f, 0.00002f, 0.00002f); cXyz l_debug_keep_pos; csXyz l_debug_current_angle; @@ -63,37 +63,6 @@ static u8 l_sightDL[] ALIGN_DECL(32) = { 0x00, 0x00, 0x00, }; -static Vec waterfall_ripple_scale_5702 = {0.75f, 0.75f, 0.75f}; -static Vec grass_scale_6038 = {1.5f, 1.5f, 1.5f}; -static Vec smoke_scale_6039 = {1.25f, 1.25f, 1.25f}; -static Vec eff_scale_24884 = {1.5f, 1.5f, 1.5f}; -static Quaternion norm_quat_25648 = {0.0f, 0.0f, 0.0f, 1.0f}; -static Vec top_vec_29499 = {0.0f, 70.0f, 0.0f}; - -const u16 aura_emitter_joint_5412[] = { - 0x0007, 0x000B, - 0x0008, 0x000C, - 0x0021, 0x0026, - 0x0022, 0x0027, - 0x0000, 0x000F, -}; -const u16 aura_model_joint_5413[] = { - 0x0000, 0x000F, - 0x0008, 0x000C, - 0x0021, 0x0026, -}; -const Vec wave_offset_5635 = {0.0f, 18.0f, 0.0f}; -const Vec swim_offset_5636 = {0.0f, 30.0f, 0.0f}; -const Vec swim_side_offset_5637 = {0.0f, 0.0f, 30.0f}; -const u16 eff_joint_8128[] = { - 0x0007, 0x000B, - 0x001A, 0x000E, - 0x001E, -}; -const Vec ripple_scale_8193 = {0.75f, 0.75f, 0.75f}; -const Vec splash_scale_21927 = {0.3f, 0.3f, 0.3f}; -const Vec ripple_scale_21928 = {0.5f, 0.5f, 0.5f}; - static void dummydatafunc(f32* temp, f64* temp2) { // temporary hack to improve diffs until sdata2 offsets are figured out *temp = 2.0f; @@ -278,43 +247,6 @@ u8 daPy_matAnm_c::m_morf_frame; #include "d/actor/d_a_player_sword.inc" -u8 normal_ripple_scale_5638[0xC]; -u8 small_ripple_scale_5641[0xC]; -u8 waterfall_splash_trans_5699[0xC]; -u8 run_splash_scale_6040[0xC]; -u8 run_grass_scale_6043[0xC]; -u8 heavy_emit_smoke_scale_6046[0xC]; -u8 heavy_dyn_smoke_scale_6049[0xC]; -u8 heavy_pat_smoke_scale_6052[0xC]; -u8 tail_scale_6508[0xC]; -u8 arm_flame_scale_6651[0xC]; -u8 _6785[0xC]; -u8 eff_scale0_6784[0xC]; -u8 _6789[0xC]; -u8 eff_scale2_6788[0xC]; -u8 direction_6792[0xC]; -u8 splash_scale_14445[0xC]; -u8 ripple_scale_14448[0xC]; -u8 _15293[0xC]; -u8 arm_pos_15292[0xC]; -u8 _15297[0xC]; -u8 armA_offset_15296[0xC]; -u8 dynamic_scale_16750[0xC]; -u8 particle_scale_16753[0xC]; -u8 _17480[0xC]; -u8 local_height_offset_17479[0xC]; -u8 eff_scale_18886[0xC]; -u8 eff_dscale_18889[0xC]; -u8 eff_pscale_18892[0xC]; -u8 smoke_kusa_particle_scale_21005[0xC]; -u8 emitter_scale_21008[0xC]; -u8 emitter_trans_21011[0xC]; -u8 d_scale_23162[0xC]; -u8 p_scale_23165[0xC]; -u8 emitter_trans_24824[0xC]; -u8 particle_scale_24827[0xC]; -u8 root_mtx_25647[0x30]; - /* 80102E8C-80102EAC .text daPy_createHeap__FP10fopAc_ac_c */ static BOOL daPy_createHeap(fopAc_ac_c* i_this) { return static_cast(i_this)->createHeap(); @@ -467,6 +399,8 @@ static BOOL daPy_auraCallback(J3DNode* node, int param_1) { /* 80103494-80103A88 .text jointBeforeCB__9daPy_lk_cFiP16J3DTransformInfoP10Quaternion */ BOOL daPy_lk_c::jointBeforeCB(int, J3DTransformInfo*, Quaternion*) { /* Nonmatching */ + static Mtx root_mtx; + static Quaternion norm_quat = {0.0f, 0.0f, 0.0f, 1.0f}; } /* 80103A88-80103AAC .text daPy_jointBeforeCallback__FUlUsP16J3DTransformInfoP10Quaternion */ @@ -487,6 +421,7 @@ static BOOL daPy_jointAfterCallback(u32 userArea, u16 param_1, J3DTransformInfo* /* 80103C40-80103EE4 .text jointCB0__9daPy_lk_cFi */ BOOL daPy_lk_c::jointCB0(int) { /* Nonmatching */ + static f32 guard_rate = 0.0f; } /* 80103EE4-80103F28 .text daPy_jointCallback0__FP7J3DNodei */ @@ -544,7 +479,7 @@ void daPy_lk_c::setBlurPosResource(u16 index) { /* 80104280-80104364 .text getItemAnimeResource__9daPy_lk_cFUs */ J3DAnmTransform* daPy_lk_c::getItemAnimeResource(u16 index) { JKRReadIdxResource(m_item_bck_buffer, 0x1000, index, dComIfGp_getAnmArchive()); - JKRHeap* oldHeap = setAnimeHeap(m2ECC); + JKRHeap* oldHeap = setAnimeHeap(mpItemAnimeHeap); mDoExt_transAnmBas* bas = new mDoExt_transAnmBas(NULL); J3DAnmLoaderDataBase::setResource(bas, m_item_bck_buffer); mDoExt_setCurrentHeap(oldHeap); @@ -1046,9 +981,7 @@ BOOL daPy_lk_c::draw() { if (dComIfGs_getSelectEquip(2) == PWR_GROOVE) { entryDLSetLight(mpPringModel, mNoResetFlg1 & daPyFlg1_FREEZE_STATE); } - // TODO this may be an inline - bool r4 = dComIfGs_getSelectEquip(0) == MASTER_SWORD || dComIfGs_getSelectEquip(0) == LV3_SWORD || dComIfGs_getSelectEquip(0) == MASTER_SWORD_EX; - if (r4 && !checkCaughtShapeHide() && !checkDemoShieldNoDraw()) { + if (checkMasterSwordEquip() && !checkCaughtShapeHide() && !checkDemoShieldNoDraw()) { updateDLSetLight(mpPodmsModel, mNoResetFlg1 & daPyFlg1_FREEZE_STATE); } } @@ -1081,8 +1014,7 @@ BOOL daPy_lk_c::draw() { mDoExt_modelUpdateDL(mpSuimenMunyaModel); } if (!r24 && !dComIfGp_checkCameraAttentionStatus(mCameraInfoIdx, 0x20)) { - bool r4 = dComIfGs_getSelectEquip(0) != NO_ITEM || dComIfGp_getMiniGameType() == 2; // TODO this may be an inline - if (r4 && !checkDemoSwordNoDraw(1)) { + if (checkSwordEquip() && !checkDemoSwordNoDraw(1)) { entryDLSetLight(mpEquippedSwordModel, mNoResetFlg1 & daPyFlg1_FREEZE_STATE); } } @@ -1283,6 +1215,7 @@ void daPy_lk_c::cancelItemUpperReadyAnime() { /* 80109F4C-8010A204 .text checkBodyAngleX__9daPy_lk_cFs */ BOOL daPy_lk_c::checkBodyAngleX(s16) { /* Nonmatching */ + static Vec top_vec = {0.0f, 70.0f, 0.0f}; } /* 8010A204-8010A2F4 .text setBodyAngleToCamera__9daPy_lk_cFv */ @@ -1467,7 +1400,7 @@ void daPy_lk_c::deleteEquipItem(BOOL param_1) { if (mSwordAnim.getBckAnm() != NULL) { mSwordAnim.changeBckOnly(NULL); } - m2EAC = NULL; + mpParachuteFanMorf = NULL; mpHeldItemBtk = NULL; mpBottleContentsModel = NULL; mpBottleCapModel = NULL; @@ -1476,7 +1409,7 @@ void daPy_lk_c::deleteEquipItem(BOOL param_1) { mpSwordModel1 = NULL; m3454.end(); mpSwordTipStabModel = NULL; - mpCutfBrk2EF8 = 0; + mpCutfBrk = 0; mpCutfBtk = 0; mpCutfBpk = 0; offNoResetFlg1(daPyFlg1_UNK200000); @@ -1618,12 +1551,7 @@ BOOL daPy_lk_c::checkItemChangeFromButton() { !checkPlayerGuard() ) { if (!daPy_dmEcallBack_c::checkCurse()) { - bool r4; - if (mPressedButtons & 0x02 && - // TODO inline (e.g. checkSwordMiniGame?) - (r4 = dComIfGs_getSelectEquip(0) != NO_ITEM || dComIfGp_getMiniGameType() == 2, r4) && - mHeldItemType != 0x103 - ) { + if (mPressedButtons & 0x02 && checkSwordEquip() && mHeldItemType != 0x103) { setAnimeEquipSword(1); } else if (mPressedButtons & 0x04) { if (checkNewItemChange(0)) { @@ -1671,7 +1599,7 @@ BOOL daPy_lk_c::checkItemChangeFromButton() { } /* 8010D26C-8010D754 .text checkItemAction__9daPy_lk_cFv */ -BOOL daPy_lk_c::checkItemAction() { +void daPy_lk_c::checkItemAction() { /* Nonmatching */ } @@ -2014,18 +1942,18 @@ BOOL daPy_lk_c::changeDamageProc() { } /* 80110F3C-80111424 .text changeAutoJumpProc__9daPy_lk_cFv */ -void daPy_lk_c::changeAutoJumpProc() { +BOOL daPy_lk_c::changeAutoJumpProc() { /* Nonmatching */ } /* 80111424-80111A80 .text changeDemoProc__9daPy_lk_cFv */ -void daPy_lk_c::changeDemoProc() { +BOOL daPy_lk_c::changeDemoProc() { /* Nonmatching */ static const Vec tact_scale = {2.5f, 2.5f, 2.5f}; } /* 80111A80-80111B80 .text changeDeadProc__9daPy_lk_cFv */ -void daPy_lk_c::changeDeadProc() { +BOOL daPy_lk_c::changeDeadProc() { /* Nonmatching */ } @@ -2785,7 +2713,7 @@ BOOL daPy_lk_c::procNotUse() { } /* 80119DA0-80119EBC .text getGroundAngle__9daPy_lk_cFP13cBgS_PolyInfos */ -void daPy_lk_c::getGroundAngle(cBgS_PolyInfo*, s16) { +s16 daPy_lk_c::getGroundAngle(cBgS_PolyInfo*, s16) { /* Nonmatching */ } @@ -2831,7 +2759,7 @@ void daPy_lk_c::setNeckAngle() { } /* 8011BE08-8011BEA4 .text checkOriginalHatAnimation__9daPy_lk_cFv */ -BOOL daPy_lk_c::checkOriginalHatAnimation() { +void daPy_lk_c::checkOriginalHatAnimation() { /* Nonmatching */ } @@ -2884,12 +2812,11 @@ void daPy_lk_c::resetCurse() { } } -u8 normal_scale_38064[0xC]; -u8 boss_scale_38067[0xC]; - /* 8011D110-8011D4D0 .text checkLightHit__9daPy_lk_cFv */ -BOOL daPy_lk_c::checkLightHit() { +void daPy_lk_c::checkLightHit() { /* Nonmatching */ + static JGeometry::TVec3 normal_scale; + static JGeometry::TVec3 boss_scale; } /* 8011D4D0-8011D6C4 .text setSwordAtCollision__9daPy_lk_cFv */ @@ -2915,7 +2842,7 @@ void daPy_lk_c::setAttentionPos() { } /* 8011EEBC-8011EF94 .text setRoomInfo__9daPy_lk_cFv */ -void daPy_lk_c::setRoomInfo() { +int daPy_lk_c::setRoomInfo() { /* Nonmatching */ } @@ -2986,13 +2913,13 @@ BOOL daPy_lk_c::checkLavaFace(cXyz* param_1, int attributeCode) { if (param_1) { cXyz pos(current.pos.x, param_1->y + 20.0f, current.pos.z); - m08EC.SetPos(&pos); - m35D4 = dComIfG_Bgsp()->GroundCross(&m08EC); + mLavaGndChk.SetPos(&pos); + m35D4 = dComIfG_Bgsp()->GroundCross(&mLavaGndChk); if (mAcch.GetGroundH() > m35D4) { m35D4 = -1000000000.0f; } if (m35D4 > current.pos.y) { - attributeCode = dComIfG_Bgsp()->GetAttributeCode(m08EC); + attributeCode = dComIfG_Bgsp()->GetAttributeCode(mLavaGndChk); } else { return FALSE; } @@ -3015,7 +2942,7 @@ BOOL daPy_lk_c::checkLavaFace(cXyz* param_1, int attributeCode) { } /* 8012024C-80120724 .text checkFallCode__9daPy_lk_cFv */ -BOOL daPy_lk_c::checkFallCode() { +void daPy_lk_c::checkFallCode() { /* Nonmatching */ } @@ -3149,13 +3076,403 @@ void daPy_lk_c::setWindAtPower() { } /* 801216A8-80121870 .text checkRoofRestart__9daPy_lk_cFv */ -BOOL daPy_lk_c::checkRoofRestart() { +void daPy_lk_c::checkRoofRestart() { /* Nonmatching */ } /* 80121870-80122D30 .text execute__9daPy_lk_cFv */ BOOL daPy_lk_c::execute() { - /* Nonmatching */ + /* Nonmatching - regalloc */ + if (setGetDemo()) { + return TRUE; + } + + if (checkNoResetFlg1(daPyFlg1_UNK200)) { + fopMsgM_demoMsgFlagOn(); + if (checkEndMessage(0x14A3)) { + offNoResetFlg1(daPyFlg1_UNK200); + dComIfGs_setEventReg(0x9EFF, 0); + dComIfGp_event_reset(); + mDemo.setDemoType(0); + } + return TRUE; + } + + if (dComIfGs_checkBottle(FWATER_BOTTLE)) { + if (dComIfGs_getFwaterTimer() == 0) { + if (dComIfGp_event_compulsory(this)) { + onNoResetFlg1(daPyFlg1_UNK200); + dComIfGs_setBottleItemIn(FWATER_BOTTLE, BIN_IN_WATER); + mDemo.setDemoType(5); + m3628 = -1; + if (mCurProc == daPyProc_SCOPE_e) { + procWait_init(); + } + } + } + } + + if (checkNoControll()) { + mAttentionInfo.mFlags = 0; + fopAcM_SetStatusMap(this, 0x10); + if (!dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e)) { + mStts.SetWeight(0xFF); + mStts.ClrCcMove(); + } else { + mStts.SetWeight(120); + } + } else { + mAttentionInfo.mFlags = ~0; + fopAcM_SetStatusMap(this, 0x01); + mStts.SetWeight(120); + } + + if (checkEquipHeavyBoots() && + dComIfGp_getSelectItem(0) != HVY_BOOTS && + dComIfGp_getSelectItem(1) != HVY_BOOTS && + dComIfGp_getSelectItem(2) != HVY_BOOTS + ) { + offNoResetFlg0(daPyFlg0_EQUIP_HEAVY_BOOTS); + } else if (checkEquipDragonShield() && + dComIfGp_getSelectItem(0) != DRGN_SHIELD && + dComIfGp_getSelectItem(1) != DRGN_SHIELD && + dComIfGp_getSelectItem(2) != DRGN_SHIELD + ) { + offNoResetFlg1(daPyFlg1_EQUIP_DRAGON_SHIELD); + } + + // Using the dComIfGp_event_runCheck inline breaks the match + // if (dComIfGp_event_runCheck()) { + if (g_dComIfG_gameInfo.play.getEvent().runCheck()) { + mStaffIdx = dComIfGp_evmng_getMyStaffId("Link", this); + // Using the dComIfGp_event_chkEventFlag inline breaks the match + // if (mEvtInfo.checkCommandDoor() && !dComIfGp_event_chkEventFlag(0x4) && mHeldItemType == 0x101) { + if (mEvtInfo.checkCommandDoor() && !g_dComIfG_gameInfo.play.getEvent().chkEventFlag(0x4) && mHeldItemType == 0x101) { + fopAc_ac_c* equipActor = mActorKeepEquip.getActor(); + if (equipActor) { + s16 angle = shape_angle.y + 0x8000; + equipActor->speed.y = 0.0f; + equipActor->speedF = 5.0f; + equipActor->current.angle.y = angle; + } + deleteEquipItem(FALSE); + } + } + + current.pos = l_debug_keep_pos; + shape_angle = l_debug_shape_angle; + current.angle = l_debug_current_angle; + + mCameraInfoIdx = dComIfGp_getPlayerCameraID(0); + m3748 = current.pos; + + if (mCurProc != daPyProc_HOOKSHOT_FLY_e && + !dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e) && + !checkModeFlg(ModeFlg_ROPE | ModeFlg_CLIMB | ModeFlg_LADDER) && + mCurProc != daPyProc_DEMO_TOOL_e && + mAcch.GetGroundH() != -1e9f && + !checkNoResetFlg0((daPy_FLG0)(daPyFlg0_UNK20000000 | daPyFlg0_UNK80000000)) && + dComIfG_Bgsp()->ChkPolySafe(mAcch.m_gnd) && + dComIfG_Bgsp()->ChkMoveBG(mAcch.m_gnd) + ) { + dComIfG_Bgsp()->MoveBgCrrPos(mAcch.m_gnd, mAcch.ChkGroundHit(), ¤t.pos, ¤t.angle, &shape_angle); + dComIfG_Bgsp()->MoveBgCrrPos(mAcch.m_gnd, mAcch.ChkGroundHit(), &next.pos, NULL, NULL); + } + + cXyz sp20 = next.pos; + m34DE = shape_angle.y; + m35B4 = m35B0; + m34EA = m34DC; + + dComIfGp_setDoStatus(0); + dComIfGp_setRStatus(0); + + if (mHeldItemType == 0x101) { + dComIfGp_setAStatus(0x2F); + } else if (checkSwordEquip()) { + dComIfGp_setAStatus(0x35); + } else { + dComIfGp_setAStatus(0x00); + } + + mFrontWallType = 0; + + if (checkResetFlg0(daPyRFlg0_POISON_CURSE)) { + setDamageCurseEmitter(); + } + + if (checkResetFlg0(daPyRFlg0_UNK8000000)) { + mCutType = 0; + } + + mResetFlg0 = 0; + + daPy_matAnm_c::decMorfFrame(); + daPy_matAnm_c::decMabaTimer(); + + if (mCurProc == daPyProc_BOTTLE_SWING_e && mEvtInfo.checkCommandCatch()) { + mDemo.setDemoType(5); + } + + setActorPointer(); + setAtnList(); + fopAc_ac_c* zTarget = dComIfGp_getAttention().getZHintTarget(); + if (zTarget) { + stopDoButtonQuake(FALSE); + } else { + stopDoButtonQuake(TRUE); + } + + if (m34C2 == 8) { + if (m_old_fdata->getOldFrameMorfCounter() <= 0.0f) { + m34C2 = 9; + } + } else { + m34C2 = 0; + } + + fopAc_ac_c* grabActor = mActorKeepGrab.getActor(); + fopAc_ac_c* equipActor = mActorKeepEquip.getActor(); + + if (grabActor && !fopAcM_checkCarryNow(grabActor)) { + freeGrabItem(); + } + + if (mHeldItemType == 0x101) { + if (equipActor == NULL || !fopAcM_checkCarryNow(equipActor)) { + deleteEquipItem(FALSE); + } + } + + if (!checkFreezeState()) { + if (!checkNoResetFlg1(daPyFlg1_UNK40000000)) { + animeUpdate(); + } + } else if (!checkNoResetFlg1(daPyFlg1_UNK40000)) { + mDoGph_gInf_c::fadeIn(0.02f, l_freeze_fade_color); + onNoResetFlg1(daPyFlg1_UNK40000); + } + + setDemoData(); + setStickData(); + + if (mHeldItemType == ROPE && + (mCurProc == daPyProc_ROPE_SUBJECT_e || mCurProc == daPyProc_ROPE_MOVE_e) && + mActorKeepEquip.getActor() != NULL && fopAcM_GetParam(mActorKeepEquip.getActor()) == 2 + ) { + procRopeReady_init(); + } + + if (mDemo.getDemoType() != 5) { + if (!changeDemoProc() && !changeDeadProc() && + mCurProc != daPyProc_DEMO_LAVA_DAMAGE_e && mCurProc != daPyProc_DEMO_FREEZE_DAMAGE_e + ) { + if (!changeAutoJumpProc()) { + changeSwimProc(); + } + } + changeDamageProc(); + changeBoomerangCatchProc(); + } + + checkItemAction(); + + if (mHeldItemType == 0x103 && (m34C4 == 2 || m34C4 == 3)) { + if (mAtCps[0].ChkAtHit() || mAtCps[1].ChkAtHit() || mAtCps[2].ChkAtHit()) { + m34C4 += 2; + } + } + if (m3522 > 0) { + m3522--; + } else { + m34C4 = 0; + } + + setShieldGuard(); + + if (checkAtHitEnemy(&mAtCps[0]) || checkAtHitEnemy(&mAtCps[1]) || checkAtHitEnemy(&mAtCps[2])) { + onNoResetFlg0(daPyFlg0_UNK10000000); + } + + if (mCurProcFunc != NULL) { + (this->*mCurProcFunc)(); + } + + playTextureAnime(); + cXyz sp14 = current.pos; + posMove(); + mOldSpeed = speed; + cXyz sp8 = current.pos; + mAcch.ClrGroundHit(); + mAcch.CrrPos(*dComIfG_Bgsp()); + setWaterY(); + autoGroundHit(); + checkLavaFace(&sp20, dBgS_Attr_NORMAL_e); + + if (checkModeFlg(ModeFlg_SWIM)) { + if (checkNoResetFlg0(daPyFlg0_UNK100) && !checkSwimFallCheck()) { + current.pos.y = m35D0; + } + if (mCurProc != daPyProc_DEMO_DEAD_e) { + if (mAcch.GetGroundH() + 84.9f > current.pos.y && mAcch.ChkGroundHit()) { + current.pos.y = mAcch.GetGroundH() + 84.9f; + if (speed.y < 0.0f) { + speed.y = 0.0f; + } + } + } else if (mAcch.ChkGroundHit()) { + current.pos.y = mAcch.GetGroundH(); + if (speed.y < 0.0f) { + speed.y = 0.0f; + } + } + } else if (mCurProc == daPyProc_DEMO_TOOL_e) { + current.pos = sp14; + if (m3574 != 0 && mAcch.GetGroundH() != -1e9f) { + current.pos.y = mAcch.GetGroundH(); + } + } else if (mCurProc == daPyProc_HOOKSHOT_FLY_e || + dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e) || + checkModeFlg(ModeFlg_ROPE | ModeFlg_LADDER | ModeFlg_CAUGHT) + ) { + current.pos = sp8; + } else if (mCurProc == daPyProc_DEMO_DOOR_OPEN_e || + mCurProc == daPyProc_HANG_WAIT_e || + mCurProc == daPyProc_HANG_MOVE_e || + mCurProc == daPyProc_HANG_UP_e || + mCurProc == daPyProc_HANG_START_e || + mCurProc == daPyProc_HANG_FALL_START_e + ) { + current.pos.x = sp8.x; + current.pos.z = sp8.z; + } + + int roomNo; + if (mAcch.GetGroundH() != -1e9f) { + roomNo = setRoomInfo(); + m357C = m3580; + m3580 = dComIfG_Bgsp()->GetGroundCode(mAcch.m_gnd); + if (checkNoResetFlg0(daPyFlg0_UNK80000000)) { + mCurrAttributeCode = dBgS_Attr_NORMAL_e; + } else { + mCurrAttributeCode = dComIfG_Bgsp()->GetAttributeCode(mAcch.m_gnd); + } + dStage_RoomCheck(&mAcch.m_gnd); + checkFallCode(); + + if (mAcch.ChkGroundHit()) { + if (!checkModeFlg(ModeFlg_HANG) && (mCurrAttributeCode == dBgS_Attr_LAVA_e || mCurrAttributeCode == dBgS_Attr_VOID_e)) { + checkLavaFace(NULL, mCurrAttributeCode); + } else { + if (checkNoResetFlg0(daPyFlg0_UNK20000)) { + onResetFlg0(daPyRFlg0_AUTO_JUMP_LAND); + } + offNoResetFlg0(daPyFlg0_UNK20000); + if (checkNoResetFlg0(daPyFlg0_UNK400000)) { + onResetFlg0(daPyRFlg0_UNK200); + } + offNoResetFlg0(daPyFlg0_UNK400000); + if (current.pos.y < 2000.0f && dComIfG_Bgsp()->GetSpecialCode(mAcch.m_gnd) != 1) { + cM3dGPla* triPla = dComIfG_Bgsp()->GetTriPla(mAcch.m_gnd); + if (triPla->GetNP()->y >= 0.5f) { + offNoResetFlg0(daPyFlg0_DEKU_SP_RETURN_FLG); + } + } + } + + if (!checkNoResetFlg0((daPy_FLG0)(daPyFlg0_UNK20000000 | daPyFlg0_UNK80000000)) && + dComIfG_Bgsp()->ChkMoveBG(mAcch.m_gnd) + ) { + dComIfG_Bgsp()->MoveBgTransPos(mAcch.m_gnd, true, &m3724, NULL, NULL); + } + + if (checkNoResetFlg0(daPyFlg0_UNK80000000)) { + mMtrlSndId = 0; + m34E2 = 0; + } else { + mMtrlSndId = dComIfG_Bgsp()->GetMtrlSndId(mAcch.m_gnd); + m34E2 = getGroundAngle(&mAcch.m_gnd, shape_angle.y); + } + + if (checkModeFlg(ModeFlg_02000000)) { + setShapeAngleOnGround(); + } + } else { + if (checkModeFlg(ModeFlg_SWIM) && m3580 == 4) { + startRestartRoom(5, 0xC9, -1.0f, 0); + } + m34E2 = 0; + if (mCurProc == daPyProc_DEMO_TOOL_e) { + mMtrlSndId = dComIfG_Bgsp()->GetMtrlSndId(mAcch.m_gnd); + } else if (mCurProc == daPyProc_SHIP_READY_e || mCurProc == daPyProc_SHIP_GET_OFF_e) { + mMtrlSndId = 9; + } else { + mMtrlSndId = 0; + } + } + + if (mpSeAnmFrameCtrl) { + f32 rate = mpSeAnmFrameCtrl->getRate(); + f32 frame = mpSeAnmFrameCtrl->getFrame(); + mJAIZelAnime.setAnimSound(¤t.pos, frame, rate, mMtrlSndId, mReverb); + } + + if (!daPy_lk_c::checkPlayerFly() && + mCurProc != daPyProc_DEMO_TOOL_e && + (m34C3 == 1 || m34C3 == 4 || m34C3 == 0xA || m34C3 == 9) + ) { + setStepsOffset(); + } + + u8 groupInfo = dComIfG_Bgsp()->GetGrpSoundId(mAcch.m_gnd); + mDoAud_setLinkGroupInfo(groupInfo); + } else { + mRestartPoint = 0xFF; + m34E2 = 0; + mMtrlSndId = 0; + m357C = m3580; + m3580 = -1; + mCurrAttributeCode = dBgS_Attr_UNK1B_e; + roomNo = current.roomNo; + checkFallCode(); + } + + equipActor = mActorKeepEquip.getActor(); + if (equipActor) { + equipActor->mTevStr.mRoomNo = mTevStr.mRoomNo; + equipActor->mTevStr.mEnvrIdxOverride = mTevStr.mEnvrIdxOverride; + equipActor->current.roomNo = roomNo; + } + + setWorldMatrix(); + setWaistAngle(); + + if (m_old_fdata->getOldFrameFlg()) { + footBgCheck(); + } + + if (mCurProc != daPyProc_DAMAGE_e) { + cLib_addCalcAngleS(&mBodyAngle.z, 0, 4, 0xC00, 0x180); + if (mCurProc != daPyProc_FAN_GLIDE_e) { + setMoveSlantAngle(); + } + if (!checkModeFlg(ModeFlg_SUBJECT)) { + cLib_addCalcAngleS(&mBodyAngle.x, 0, 4, 0xC00, 0x180); + } + if (!checkModeFlg(ModeFlg_40000000)) { + cLib_addCalcAngleS(&mBodyAngle.y, 0, 4, 0xC00, 0x180); + } + } + + setNeckAngle(); + setHatAngle(); + + mpCLModelData->getJointNodePointer(0x00)->setMtxCalc(m_pbCalc[PART_UNDER_e]); + mpCLModelData->getJointNodePointer(0x02)->setMtxCalc(m_pbCalc[PART_UPPER_e]); + mpCLModelData->getJointNodePointer(0x1D)->setMtxCalc(m_pbCalc[PART_UNDER_e]); + + checkOriginalHatAnimation(); + static const Vec nsword_top = {45.0f, -31.0f, 0.0f}; static const Vec msword_top = {57.0f, 48.0f, 0.0f}; static const Vec boomerang_catch = {12.5f, 47.5f, 36.6f}; @@ -3164,6 +3481,143 @@ BOOL daPy_lk_c::execute() { static const Vec hammer_root = {8.0f, 0.0f, 0.0f}; static const Vec fan_top = {55.0f, 0.0f, 0.0f}; static const Vec head_offset = {40.0f, 0.0f, 0.0f}; + + mpCLModel->calc(); + cMtx_multVec(mpCLModel->getAnmMtx(0x0F), &head_offset, &mHeadTopPos); + checkRoofRestart(); + mDoMtx_multVecZero(mpCLModel->getAnmMtx(0x08), &mLeftHandPos); + mDoMtx_multVecZero(mpCLModel->getAnmMtx(0x0C), &mRightHandPos); + cMtx_multVec(mpCLModel->getAnmMtx(0x00), &boomerang_catch, &m36F4); + cMtx_multVec(mpCLModel->getAnmMtx(0x08), &hookshot_root, &mHookshotRootPos); + mpKatsuraModel->setBaseTRMtx(mpCLModel->getAnmMtx(0x0F)); + mpKatsuraModel->calc(); + mpYamuModel->setBaseTRMtx(mpCLModel->getAnmMtx(0x0F)); + mpYamuModel->calc(); + setItemModel(); + + if (mCurProc == daPyProc_CUT_F_e || mCurProc == daPyProc_BT_VERTICAL_JUMP_CUT_e) { + if (checkNormalSwordEquip()) { + mpSwordTipStabModel->setBaseTRMtx(mpHeldItemModel->getAnmMtx(0x03)); + } else { + mpSwordTipStabModel->setBaseTRMtx(mpHeldItemModel->getAnmMtx(0x04)); + } + } + + cMtx_multVec(mpCLModel->getAnmMtx(0x13), &l_eye_offset, &mEyePos); + + m36D0 = mSwordTopPos; + m36DC = m36C4; + + if (mHeldItemType == 0x101 && mActorKeepEquip.getActor()) { + daBoko_c* boko = static_cast(mActorKeepEquip.getActor()); + boko->getTopPos(&mSwordTopPos); + boko->getBlurRootPos(&m36C4); + } else if (mHeldItemType == HUMMER) { + cMtx_multVec(mpHeldItemModel->getBaseTRMtx(), &hammer_top, &mSwordTopPos); + cMtx_multVec(mpHeldItemModel->getBaseTRMtx(), &hammer_root, &m36C4); + } else if (mHeldItemType == 0x103) { + if (checkNormalSwordEquip()) { + cMtx_multVec(mpHeldItemModel->getAnmMtx(0x01), &nsword_top, &mSwordTopPos); + mDoMtx_multVecZero(mpHeldItemModel->getAnmMtx(0x02), &m36C4); + } else { + mDoMtx_multVecZero(mpHeldItemModel->getAnmMtx(0x01), &m36C4); + cMtx_multVec(mpHeldItemModel->getAnmMtx(0x01), &msword_top, &mSwordTopPos); + } + } else if (mCurProc == daPyProc_FAN_SWING_e) { + mDoMtx_multVecZero(mpHeldItemModel->getBaseTRMtx(), &m36C4); + cMtx_multVec(mpHeldItemModel->getAnmMtx(0x06), &fan_top, &mSwordTopPos); + } else { + mDoMtx_multVecZero(mpCLModel->getAnmMtx(0x0D), &m36C4); + mDoMtx_multVecZero(mpCLModel->getAnmMtx(0x0D), &mSwordTopPos); + } + + checkLightHit(); + setFootEffect(); + setCollision(); + setAttentionPos(); + setGrabItemPos(); + setWaterRipple(); + setAuraEffect(); + setHammerWaterSplash(); + setLightSaver(); + + if (!checkNoResetFlg0((daPy_FLG0)(daPyFlg0_UNK20000000 | daPyFlg0_UNK80000000))) { + if (mAcch.ChkGroundHit() && !daPy_lk_c::checkPlayerFly()) { + mEvtInfo.onCondition(dEvtCnd_CANTALK_e | dEvtCnd_CANDOOR_e | dEvtCnd_CANGETITEM_e | dEvtCnd_UNK10_e | dEvtCnd_CANCATCH_e); + } else if (dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e) || (checkModeFlg(ModeFlg_SWIM) && checkNoResetFlg0(daPyFlg0_UNK100))) { + mEvtInfo.onCondition(dEvtCnd_CANTALK_e); + } + } + mEvtInfo.onCondition(dEvtCnd_CANGETITEM_e); + + JPABaseEmitter* emitter = mSmokeEcallBack.getEmitter(); + if (emitter) { + emitter->setGlobalRTMatrix(mpCLModel->getAnmMtx(0x23)); + } + + setWaterDrop(); + + if (daPy_dmEcallBack_c::getTimer() > 0) { + daPy_dmEcallBack_c::decTimer(); + if (daPy_dmEcallBack_c::checkFlame()) { + seStartOnlyReverb(JA_SE_LK_BURNING); + mDoMtx_multVecZero(mpCLModel->getAnmMtx(0x00), &mLightInfluence.mPos); + mLightInfluence.mPower = 150.0f; + } else if (daPy_dmEcallBack_c::checkCurse()) { + seStartOnlyReverb(JA_SE_LK_CURSE_BURNING); + } + if (daPy_dmEcallBack_c::getTimer() == 0) { + endDamageEmitter(); + } + } + + offNoResetFlg1((daPy_FLG1)(daPyFlg1_NPC_CALL_COMMAND | daPyFlg1_VINE_CATCH)); + + // Using the dComIfGp_event_runCheck inline breaks the match + // if (dComIfGp_event_runCheck() || checkNoControll()) { + if (g_dComIfG_gameInfo.play.getEvent().runCheck() || checkNoControll()) { + dComIfGp_setDoStatus(0); + dComIfGp_setRStatus(0); + } else { + if (dComIfGp_getDoStatus() == 0x43) { + dComIfGp_setDoStatus(0x12); + } + if (checkResetFlg0(daPyRFlg0_UNK10000000)) { + dComIfGp_setAStatus(0); + } + } + offNoResetFlg1((daPy_FLG1)(daPyFlg1_UNK4 | daPyFlg1_FORCE_VOMIT_JUMP | daPyFlg1_FORCE_VOMIT_JUMP_SHORT | daPyFlg1_UNK10000000)); + + if (dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e)) { + mDoAud_setLinkOnBoard(1); + fopAcM_OnStatus(this, fopAcStts_UNK4000_e); + } else { + mDoAud_setLinkOnBoard(2); + fopAcM_OffStatus(this, fopAcStts_UNK4000_e); + } + + mDoAud_setLinkHp(dComIfGs_getLife(), dComIfGs_getMaxLife()); + + mShieldFrontRangeYAngle = shape_angle.y + mBodyAngle.y; + mFace = daPyFace_UNKNOWN; + + if (checkConfuse()) { + seStartMapInfo(JA_SE_LK_NOW_CURSE_PW); + } + + if (checkBowAnime()) { + dComIfGp_setPlayerStatus0(0, daPyStts0_BOW_AIM_e); + } else { + dComIfGp_clearPlayerStatus0(0, daPyStts0_BOW_AIM_e); + } + + m3634 = -1; + + l_debug_keep_pos = current.pos; + l_debug_shape_angle = shape_angle; + l_debug_current_angle = current.angle; + + return TRUE; } /* 80122D30-80122D50 .text daPy_Execute__FP9daPy_lk_c */ @@ -3228,7 +3682,7 @@ BOOL daPy_lk_c::playerDelete() { mDoExt_destroySolidHeap(m_tex_scroll_heap.mpAnimeHeap); mDoExt_destroySolidHeap(mpItemHeaps[0]); mDoExt_destroySolidHeap(mpItemHeaps[1]); - mDoExt_destroySolidHeap(m2ECC); + mDoExt_destroySolidHeap(mpItemAnimeHeap); mJAIZelAnime.stop(); @@ -3485,8 +3939,35 @@ BOOL daPy_lk_c::createHeap() { } /* 8012469C-801249F8 .text createAnimeHeap__9daPy_lk_cFPP12JKRSolidHeapQ29daPy_lk_c14daPy_HEAP_TYPE */ -void daPy_lk_c::createAnimeHeap(JKRSolidHeap**, daPy_HEAP_TYPE) { - /* Nonmatching */ +void daPy_lk_c::createAnimeHeap(JKRSolidHeap** pHeap, daPy_HEAP_TYPE heapType) { + u32 heapSize; + // TODO: Should these heap sizes be sizeof()s instead of magic numbers? + if (heapType == HEAP_TYPE_ITEM_ANIME_e) { + heapSize = 0x50; + } else if (heapType == HEAP_TYPE_UNDER_UPPER_e || heapType == HEAP_TYPE_TEXTURE_ANIME_e) { + heapSize = 0x40; + } else { // heapType == HEAP_TYPE_TEXTURE_SCROLL_e + heapSize = 0xA0; + } + + *pHeap = mDoExt_createSolidHeapFromGameToCurrent(heapSize, 0x20); + + if (heapType == HEAP_TYPE_ITEM_ANIME_e) { + mDoExt_transAnmBas* tmp_trans_bas = new mDoExt_transAnmBas(NULL); + JUT_ASSERT(21307, tmp_trans_bas != 0); + } else if (heapType == HEAP_TYPE_UNDER_UPPER_e) { + J3DAnmTransformKey* tmp_trans = new J3DAnmTransformKey; + JUT_ASSERT(21310, tmp_trans != 0); + } else if (heapType == HEAP_TYPE_TEXTURE_ANIME_e) { + J3DAnmTexPattern* tmp_tp = new J3DAnmTexPattern; + JUT_ASSERT(21313, tmp_tp != 0); + } else { // heapType == HEAP_TYPE_TEXTURE_SCROLL_e + J3DAnmTextureSRTKey* tmp_tk = new J3DAnmTextureSRTKey; + JUT_ASSERT(21316, tmp_tk != 0); + } + + mDoExt_restoreCurrentHeap(); + mDoExt_adjustSolidHeap(*pHeap); } /* 80124A40-80124B30 .text initModel__9daPy_lk_cFPP8J3DModeliUl */ @@ -3672,7 +4153,7 @@ void daPy_lk_c::playerInit() { mDoExt_restoreCurrentHeap(); mDoExt_adjustSolidHeap(mpItemHeaps[1]); - createAnimeHeap(&m2ECC, HEAP_TYPE_UNK3_e); + createAnimeHeap(&mpItemAnimeHeap, HEAP_TYPE_ITEM_ANIME_e); mActorKeepEquip.clearData(); mActorKeepThrow.clearData(); @@ -3724,7 +4205,7 @@ void daPy_lk_c::playerInit() { } onNoResetFlg0(daPyFlg0_UNK100); - m08EC.OffWaterGrp(); + mLavaGndChk.OffWaterGrp(); mDemo.setStick(1.0f); endDamageEmitter(); mMirrorPacket.init(NULL); @@ -4018,8 +4499,8 @@ void daPy_lk_c::animeUpdate() { upperPack2->setFrame(mFrameCtrlUpper[UPPER_MOVE2_e].getFrame()); } - if (m2EAC) { - m2EAC->play(NULL, 0, 0); + if (mpParachuteFanMorf) { + mpParachuteFanMorf->play(NULL, 0, 0); } } diff --git a/src/d/actor/d_a_player_particle.inc b/src/d/actor/d_a_player_particle.inc index d2a242538..f158193e5 100644 --- a/src/d/actor/d_a_player_particle.inc +++ b/src/d/actor/d_a_player_particle.inc @@ -203,8 +203,14 @@ void daPy_waterDropPcallBack_c::execute(JPABaseEmitter*, JPABaseParticle*) { } /* 80129F48-80129F98 .text execute__22daPy_followEcallBack_cFP14JPABaseEmitter */ -void daPy_followEcallBack_c::execute(JPABaseEmitter*) { - /* Nonmatching */ +void daPy_followEcallBack_c::execute(JPABaseEmitter* emitter) { + JGeometry::TVec3 pos(field_0x08.x, field_0x08.y, field_0x08.z); + emitter->setGlobalTranslation(pos); + JGeometry::TVec3 rot; + rot.x = field_0x14.x; + rot.y = field_0x14.y; + rot.z = field_0x14.z; + emitter->setGlobalRotation(rot); } /* 80129F98-80129FA0 .text setup__22daPy_followEcallBack_cFP14JPABaseEmitterPC4cXyzPC5csXyzSc */ @@ -268,16 +274,50 @@ void daPy_dmEcallBack_c::execute(JPABaseEmitter*) { /* 8012A288-8012A8D8 .text setAuraEffect__9daPy_lk_cFv */ void daPy_lk_c::setAuraEffect() { /* Nonmatching */ + static const u16 aura_emitter_joint[] = { + 0x0007, + 0x000B, + 0x0008, + 0x000C, + 0x0021, + 0x0026, + 0x0022, + 0x0027, + 0x0000, + 0x000F, + }; + static const u16 aura_model_joint[] = { + 0x0000, + 0x000F, + 0x0008, + 0x000C, + 0x0021, + 0x0026, + }; } /* 8012A8D8-8012B340 .text setWaterRipple__9daPy_lk_cFv */ void daPy_lk_c::setWaterRipple() { /* Nonmatching */ + static Vec waterfall_ripple_scale = {0.75f, 0.75f, 0.75f}; + static JGeometry::TVec3 normal_ripple_scale; + static JGeometry::TVec3 small_ripple_scale; + static JGeometry::TVec3 waterfall_splash_trans; + static const Vec wave_offset = {0.0f, 18.0f, 0.0f}; + static const Vec swim_offset = {0.0f, 30.0f, 0.0f}; + static const Vec swim_side_offset = {0.0f, 0.0f, 30.0f}; } /* 8012B340-8012B8EC .text setFootEffectType__9daPy_lk_cFiP4cXyzii */ void daPy_lk_c::setFootEffectType(int, cXyz*, int, int) { /* Nonmatching */ + static JGeometry::TVec3 run_splash_scale; + static Vec grass_scale = {1.5f, 1.5f, 1.5f}; + static JGeometry::TVec3 run_grass_scale; + static Vec smoke_scale = {1.25f, 1.25f, 1.25f}; + static JGeometry::TVec3 heavy_emit_smoke_scale; + static JGeometry::TVec3 heavy_dyn_smoke_scale; + static JGeometry::TVec3 heavy_pat_smoke_scale; } /* 8012B8EC-8012B9DC .text setFootMark__9daPy_lk_cFP4cXyz */ @@ -298,6 +338,7 @@ void daPy_lk_c::resetFootEffect() { /* 8012C1A8-8012C2A4 .text setSwimTail__9daPy_lk_cFv */ void daPy_lk_c::setSwimTail() { /* Nonmatching */ + static JGeometry::TVec3 tail_scale(1.0f, 1.0f, -1.0f); } /* 8012C2A4-8012C330 .text setCutWaterSplash__9daPy_lk_cFv */ @@ -317,7 +358,33 @@ void daPy_lk_c::setWaterDrop() { /* 8012C620-8012C754 .text setDamageFlameEmitter__9daPy_lk_cFv */ void daPy_lk_c::setDamageFlameEmitter() { - /* Nonmatching */ + static JGeometry::TVec3 arm_flame_scale(0.6f, 0.6f, 0.6f); + static const u16 flame_joint[ARRAY_SIZE(mDmEcallBack)] = { + 0x000F, // head_jnt + 0x0003, // stomach_jnt + 0x0007, // LarmB_jnt + 0x000B, // RarmB_jnt + }; + + if (!daPy_dmEcallBack_c::checkFlame()) { + endDamageEmitter(); + + const u16* jointNoP = flame_joint; + daPy_dmEcallBack_c* dmECB = mDmEcallBack; + for (int i = 0; i < (s32)ARRAY_SIZE(mDmEcallBack); i++, jointNoP++, dmECB++) { + cXyz jointPos; + mDoMtx_multVecZero(mpCLModel->getAnmMtx(*jointNoP), &jointPos); + dmECB->makeEmitter(0x3F1, mpCLModel->getAnmMtx(*jointNoP), &jointPos, NULL); + if (dmECB->getEmitter() == NULL) { + continue; + } + if (i == 2 || i == 3) { + dmECB->getEmitter()->setGlobalScale(arm_flame_scale); + } + } + } + + daPy_dmEcallBack_c::setFlame(100); } /* 8012C754-8012C7F0 .text setDamageCurseEmitter__9daPy_lk_cFv */ @@ -342,8 +409,8 @@ void daPy_lk_c::endFlameDamageEmitter() { /* 8012C9D8-8012CA44 .text endDamageEmitter__9daPy_lk_cFv */ void daPy_lk_c::endDamageEmitter() { - for (int i = 0; i < (int)ARRAY_SIZE(m33B8); i++) { - m33B8[i].end(); + for (int i = 0; i < (int)ARRAY_SIZE(mDmEcallBack); i++) { + mDmEcallBack[i].end(); } daPy_dmEcallBack_c::setTimer(0); daPy_dmEcallBack_c::setType(3); @@ -353,4 +420,7 @@ void daPy_lk_c::endDamageEmitter() { /* 8012CA44-8012CD60 .text setItemWaterEffect__9daPy_lk_cFP10fopAc_ac_cii */ u32 daPy_lk_c::setItemWaterEffect(fopAc_ac_c*, int, int) { /* Nonmatching */ + static cXyz eff_scale0(0.5f, 0.5f, 0.5f); + static cXyz eff_scale2(0.13f, 0.13f, 0.13f); + static JGeometry::TVec3 direction(0.0f, 1.0f, 0.0f); } diff --git a/src/d/actor/d_a_player_rope.inc b/src/d/actor/d_a_player_rope.inc index b8c826cbb..bb3d1c6ee 100644 --- a/src/d/actor/d_a_player_rope.inc +++ b/src/d/actor/d_a_player_rope.inc @@ -50,6 +50,8 @@ void daPy_lk_c::changeRopeToHangProc() { /* 8014327C-80143694 .text checkRopeSwingWall__9daPy_lk_cFP4cXyzP4cXyzPsPf */ BOOL daPy_lk_c::checkRopeSwingWall(cXyz*, cXyz*, s16*, f32*) { /* Nonmatching */ + static JGeometry::TVec3 dynamic_scale; + static JGeometry::TVec3 particle_scale; } /* 80143694-80143A44 .text setBlendRopeMoveAnime__9daPy_lk_cFi */ @@ -105,6 +107,7 @@ BOOL daPy_lk_c::procRopeSwing_init(fopAc_ac_c*, s16) { /* 80144C58-801456D8 .text procRopeSwing__9daPy_lk_cFv */ BOOL daPy_lk_c::procRopeSwing() { /* Nonmatching */ + static cXyz local_height_offset; } /* 801456D8-801457FC .text procRopeHangWait_init__9daPy_lk_cFi */ diff --git a/src/d/actor/d_a_player_ship.inc b/src/d/actor/d_a_player_ship.inc index 920e248b7..a8c343646 100644 --- a/src/d/actor/d_a_player_ship.inc +++ b/src/d/actor/d_a_player_ship.inc @@ -32,6 +32,8 @@ BOOL daPy_lk_c::checkShipNotNormalMode() { /* 8013F9B0-8013FE78 .text setShipRideArmAngle__9daPy_lk_cFiP16J3DTransformInfo */ void daPy_lk_c::setShipRideArmAngle(int, J3DTransformInfo*) { /* Nonmatching */ + static cXyz arm_pos; + static cXyz armA_offset; } /* 8013FE78-8013FEF4 .text checkShipRideUseItem__9daPy_lk_cFi */ diff --git a/src/d/actor/d_a_player_swim.inc b/src/d/actor/d_a_player_swim.inc index 203018ef7..fd08d855c 100644 --- a/src/d/actor/d_a_player_swim.inc +++ b/src/d/actor/d_a_player_swim.inc @@ -65,6 +65,8 @@ void daPy_lk_c::setSwimTimerStartStop() { /* 8013D814-8013DA18 .text procSwimUp_init__9daPy_lk_cFi */ BOOL daPy_lk_c::procSwimUp_init(int) { /* Nonmatching */ + static JGeometry::TVec3 splash_scale; + static JGeometry::TVec3 ripple_scale; } /* 8013DA18-8013DB24 .text procSwimUp__9daPy_lk_cFv */ diff --git a/src/d/actor/d_a_player_sword.inc b/src/d/actor/d_a_player_sword.inc index 8aa584e1a..4b61dd1ff 100644 --- a/src/d/actor/d_a_player_sword.inc +++ b/src/d/actor/d_a_player_sword.inc @@ -98,10 +98,10 @@ void daPy_lk_c::setSwordModel(BOOL r28) { buffer = new(0x20) u8[0x400]; JKRReadIdxResource(buffer, 0x400, model_tbl.tipStabBrk, dComIfGp_getAnmArchive()); - mpCutfBrk2EF8 = static_cast(J3DAnmLoaderDataBase::load(buffer)); - mpCutfBrk2EF8->setFrame(0.0f); - mpCutfBrk2EF8->searchUpdateMaterialID(modelData); - modelData->entryTevRegAnimator(mpCutfBrk2EF8); + mpCutfBrk = static_cast(J3DAnmLoaderDataBase::load(buffer)); + mpCutfBrk->setFrame(0.0f); + mpCutfBrk->searchUpdateMaterialID(modelData); + modelData->entryTevRegAnimator(mpCutfBrk); buffer = new(0x20) u8[0x400]; JKRReadIdxResource(buffer, 0x400, model_tbl.tipStabBpk, dComIfGp_getAnmArchive()); @@ -123,6 +123,8 @@ void daPy_lk_c::setSwordModel(BOOL r28) { /* 80154FBC-80155490 .text setLightSaver__9daPy_lk_cFv */ void daPy_lk_c::setLightSaver() { /* Nonmatching */ + static JGeometry::TVec3 d_scale(1.4f, 1.4f, 1.4f); + static JGeometry::TVec3 p_scale(1.6f, 1.4f, 1.4f); } /* 80155490-801554C8 .text checkDemoShieldNoDraw__9daPy_lk_cFv */ @@ -293,6 +295,8 @@ BOOL daPy_lk_c::procCutRoll() { /* 801588F0-80158A40 .text procCutRollEnd_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procCutRollEnd_init() { /* Nonmatching */ + static JGeometry::TVec3 emitter_trans(0.0f, 55.0f, 0.0f); + static JGeometry::TVec3 particle_scale(0.76f, 0.76f, 0.76f); } /* 80158A40-80158A98 .text procCutRollEnd__9daPy_lk_cFv */ @@ -313,6 +317,7 @@ BOOL daPy_lk_c::procCutTurnCharge() { /* 80158B58-80158D40 .text procCutTurnMove_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procCutTurnMove_init() { /* Nonmatching */ + static Vec eff_scale = {1.5f, 1.5f, 1.5f}; } /* 80158D40-80159130 .text procCutTurnMove__9daPy_lk_cFv */ diff --git a/src/d/d_vibration.cpp b/src/d/d_vibration.cpp index 3c9352eb6..7e8c17e08 100644 --- a/src/d/d_vibration.cpp +++ b/src/d/d_vibration.cpp @@ -37,7 +37,7 @@ bool dVibration_c::StartQuake(int, int, cXyz) { } /* 8009CE1C-8009CF84 .text StartQuake__12dVibration_cFPCUcii4cXyz */ -bool dVibration_c::StartQuake(const unsigned char*, int, int, cXyz) { +bool dVibration_c::StartQuake(const u8*, int, int, cXyz) { /* Nonmatching */ } diff --git a/src/f_op/f_op_msg_mng.cpp b/src/f_op/f_op_msg_mng.cpp index dc4e347e7..00f538d6b 100644 --- a/src/f_op/f_op_msg_mng.cpp +++ b/src/f_op/f_op_msg_mng.cpp @@ -137,7 +137,7 @@ void fop_MGameTerm_create(s16, s16, s16, int, int, int (*)(void*)) { } /* 8002B2B0-8002B324 .text fop_Timer_create__FsUcUsUcUcffffPFPv_i */ -void fop_Timer_create(s16, u8, u16, u8, u8, f32, f32, f32, f32, int (*)(void*)) { +s32 fop_Timer_create(s16, u8, u16, u8, u8, f32, f32, f32, f32, int (*)(void*)) { /* Nonmatching */ }