From 1299f85522946aad75288ed16068545442cfc09d Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Wed, 18 Oct 2023 18:13:26 -0400 Subject: [PATCH] d_a_player_main work --- .../JSystem/J3DGraphAnimator/J3DSkinDeform.h | 16 +- include/JSystem/JParticle/JPAEmitter.h | 4 + include/d/actor/d_a_player.h | 74 +++- include/d/actor/d_a_player_link.h | 401 ++++++++++++------ include/d/d_bg_s_gnd_chk.h | 11 +- include/d/d_bg_s_lin_chk.h | 14 +- include/d/d_bg_s_roof_chk.h | 8 +- include/d/d_com_inf_game.h | 26 ++ include/d/d_event.h | 2 +- include/d/d_kankyo.h | 2 +- include/d/d_particle.h | 10 +- include/d/d_stage.h | 6 + include/m_Do/m_Do_ext.h | 28 +- src/d/actor/d_a_player_bow.inc | 2 +- src/d/actor/d_a_player_grab.inc | 2 +- src/d/actor/d_a_player_main.cpp | 401 ++++++++++++++++-- src/d/actor/d_a_player_particle.inc | 21 +- src/d/d_stage.cpp | 10 +- 18 files changed, 826 insertions(+), 212 deletions(-) diff --git a/include/JSystem/J3DGraphAnimator/J3DSkinDeform.h b/include/JSystem/J3DGraphAnimator/J3DSkinDeform.h index 7e7a1f720..90733c1a2 100644 --- a/include/JSystem/J3DGraphAnimator/J3DSkinDeform.h +++ b/include/JSystem/J3DGraphAnimator/J3DSkinDeform.h @@ -4,6 +4,7 @@ #include "JSystem/J3DGraphAnimator/J3DCluster.h" #include "JSystem/J3DGraphBase/J3DTransform.h" #include "dolphin/types.h" +#include "global.h" class J3DModelData; class J3DVertexBuffer; @@ -79,15 +80,12 @@ public: private: /* 0x04 */ u16* mPosData; /* 0x08 */ u16* mNrmData; - /* 0x0C */ Mtx* mPosMtx; - /* 0x10 */ Mtx33* mNrmMtx; - /* 0x14 */ u32 mFlags; - /* 0x18 */ u8 field_0x18; - /* 0x19 */ u8 field_0x19; - /* 0x1C */ int field_0x1c; - /* 0x20 */ int field_0x20; - /* 0x24 */ J3DSkinNList* mSkinNList; -}; + /* 0x0C */ Mtx33* mNrmMtx; + /* 0x10 */ u32 mFlags; + /* 0x14 */ u8 field_0x14; +}; // Size: 0x18 + +STATIC_ASSERT(sizeof(J3DSkinDeform) == 0x18); class J3DDeformer { public: diff --git a/include/JSystem/JParticle/JPAEmitter.h b/include/JSystem/JParticle/JPAEmitter.h index 7277afce6..f9e247ca0 100644 --- a/include/JSystem/JParticle/JPAEmitter.h +++ b/include/JSystem/JParticle/JPAEmitter.h @@ -107,6 +107,10 @@ public: bool checkStatus(u32 status) { return mFlags & status; } void initStatus(u32 status); + int getParticleNumber() { + return mActiveParticles.getNumLinks() + mChildParticles.getNumLinks(); + } + u8 getGlobalAlpha() { return mGlobalPrmColor.a; } void setGlobalAlpha(u8 alpha) { mGlobalPrmColor.a = alpha; } void setGlobalRTMatrix(MtxP mtx) { diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index 9a96216e3..d685f0951 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -12,8 +12,13 @@ public: void init(); - virtual ~daPy_matAnm_c(); + virtual ~daPy_matAnm_c() {} virtual void calc(J3DMaterial*) const; + + static u8 m_maba_flg; + static u8 m_eye_move_flg; + static u8 m_maba_timer; + static u8 m_morf_frame; }; class daPy_mtxFollowEcallBack_c : public dPa_levelEcallBack { @@ -26,13 +31,17 @@ public: /* 0x04 */ JPABaseEmitter* mpEmitter; /* 0x08 */ MtxP mpMtx; -}; +}; // Size: 0x0C STATIC_ASSERT(sizeof(daPy_mtxFollowEcallBack_c) == 0x0C); class daPy_HIO_c { public: -}; + daPy_HIO_c(); + +public: + /* 0x00 */ u8 temp[0x3F - 0x00]; +}; // Size: 0x3F class daPy_demo_c { public: @@ -68,12 +77,12 @@ private: class daPy_py_c : public fopAc_ac_c { public: - enum daPy_PROC {}; - enum daPy_FLG0 { + daPyFlg0_UNK10 = 0x00000010, daPyFlg0_CUT_AT_FLG = 0x00000040, daPyFlg0_PUSH_PULL_KEEP = 0x00000800, daPyFlg0_UNK1000 = 0x00001000, + daPyFlg0_UNK4000 = 0x00004000, daPyFlg0_UNK200000 = 0x00200000, daPyFlg0_EQUIP_HEAVY_BOOTS = 0x02000000, daPyFlg0_NO_DRAW = 0x08000000, @@ -86,6 +95,7 @@ public: daPy_FLG1_FORCE_VOMIT_JUMP = 0x00000010, daPy_FLG1_NPC_NOT_CHANGE = 0x00000040, daPy_FLG1_CONFUSE = 0x00000100, + daPy_FLG1_FREEZE_STATE = 0x00000800, daPy_FLG1_SHIP_TACT = 0x00001000, daPy_FLG1_USE_ARROW_EFFECT = 0x00002000, daPy_FLG1_LETTER_READ_EYE_MOVE = 0x00004000, @@ -96,6 +106,24 @@ public: daPy_FLG1_LAST_COMBO_WAIT = 0x20000000, }; + enum daPy_RFLG0 { + daPy_RFLG0_ROPE_GRAB_RIGHT_HAND = 0x00000004, + daPy_RFLG0_GRAB_UP_END = 0x00000020, + daPy_RFLG0_AUTO_JUMP_LAND = 0x00000040, + daPy_RFLG0_RIGHT_FOOT_ON_GROUND = 0x00000400, + daPy_RFLG0_LEFT_FOOT_ON_GROUND = 0x00000800, + daPy_RFLG0_FRONT_ROLL_CRASH = 0x00002000, + daPy_RFLG0_UNK4000 = 0x00004000, + daPy_RFLG0_GRAB_UP_START = 0x00008000, + daPy_RFLG0_ATTENTION_LOCK = 0x00010000, + daPy_RFLG0_HAMMER_QUAKE = 0x00020000, + daPy_RFLG0_GRAB_PUT_START = 0x00400000, + daPy_RFLG0_FAIRY_USE = 0x02000000, + // 0x00000001 and 0x00000002 set in daPy_lk_c::dProcLastCombo + // 0x00001000 set in daPy_lk_c::procCrawlMove_init, checked in checkNoCollisionCorret__9daPy_lk_cFv + // 0x04000000 set in daPy_lk_c::procShipPaddle + }; + /* 0x290 */ u8 mAttackState; /* 0x291 */ u8 field_0x291; /* 0x292 */ u8 field_0x292[0x294 - 0x292]; @@ -104,7 +132,7 @@ public: /* 0x298 */ int field_0x298; /* 0x29C */ u32 mNoResetFlg0; /* 0x2A0 */ u32 mNoResetFlg1; - /* 0x2A4 */ u32 field_0x2a4; + /* 0x2A4 */ u32 mResetFlg0; /* 0x2A8 */ f32 field_0x2a8; /* 0x2AC */ u8 field_0x2AC[0x2B0 - 0x2AC]; /* 0x2B0 */ f32 field_0x2b0; @@ -149,6 +177,7 @@ public: void onConfuse() { onNoResetFlg1(daPy_FLG1_CONFUSE); } void offConfuse() { offNoResetFlg1(daPy_FLG1_CONFUSE); } bool checkConfuse() const { return checkNoResetFlg1(daPy_FLG1_CONFUSE); } + bool checkFreezeState() const { return checkNoResetFlg1(daPy_FLG1_FREEZE_STATE); } void onShipTact() { onNoResetFlg1(daPy_FLG1_SHIP_TACT); } void offShipTact() { offNoResetFlg1(daPy_FLG1_SHIP_TACT); } void onUseArrowEffect() { onNoResetFlg1(daPy_FLG1_USE_ARROW_EFFECT); } @@ -159,6 +188,38 @@ public: void onVineCatch() { onNoResetFlg1(daPy_FLG1_VINE_CATCH); } bool checkLastComboWait() const { return checkNoResetFlg1(daPy_FLG1_LAST_COMBO_WAIT); } + void onResetFlg0(daPy_RFLG0 flag) { mResetFlg0 |= flag; } + void offNoResetFlg0(daPy_RFLG0 flag) { mResetFlg0 &= ~flag; } + bool checkResetFlg0(daPy_RFLG0 flag) const { return mResetFlg0 & flag; } + bool getRopeGrabRightHand() const { return checkResetFlg0(daPy_RFLG0_ROPE_GRAB_RIGHT_HAND); } + bool getGrabUpEnd() const { return checkResetFlg0(daPy_RFLG0_GRAB_UP_END); } + bool getAutoJumpLand() const { return checkResetFlg0(daPy_RFLG0_AUTO_JUMP_LAND); } + bool getRightFootOnGround() const { return checkResetFlg0(daPy_RFLG0_RIGHT_FOOT_ON_GROUND); } + bool getLeftFootOnGround() const { return checkResetFlg0(daPy_RFLG0_LEFT_FOOT_ON_GROUND); } + bool checkFrontRollCrash() const { return checkResetFlg0(daPy_RFLG0_FRONT_ROLL_CRASH); } + bool getGrabUpStart() const { return checkResetFlg0(daPy_RFLG0_GRAB_UP_START); } + bool checkAttentionLock() const { return checkResetFlg0(daPy_RFLG0_ATTENTION_LOCK); } + bool checkHammerQuake() const { return checkResetFlg0(daPy_RFLG0_HAMMER_QUAKE); } + bool getGrabPutStart() const { return checkResetFlg0(daPy_RFLG0_GRAB_PUT_START); } + bool checkFairyUse() const { return checkResetFlg0(daPy_RFLG0_FAIRY_USE); } + + // checkSwordMiniGame__9daPy_py_cCFv + // checkNormalSwordEquip__9daPy_py_cCFv + // checkBowMiniGame__9daPy_py_cCFv + // checkUseArrowEffect__9daPy_py_cCFv + // checkNpcNotChange__9daPy_py_cCFv + // checkFinalMasterSwordEquip__9daPy_py_cCFv + // getHeavyState__9daPy_py_cFv + // checkEquipHoverBoots__9daPy_py_cCFv + // getHeavyStateAndBoots__9daPy_py_cFv + // onNpcCallCommand__9daPy_py_cFv + // onForceVomitJumpShort__9daPy_py_cFv + // onNoFallVoice__9daPy_py_cFv + // checkGrabWear__9daPy_py_cCFv + // checkArrowShoot__9daPy_py_cCFv + // onScopeCancel__9daPy_py_cFv + // getFootOnGround__9daPy_py_cCFv + virtual MtxP getLeftHandMatrix() = 0; virtual MtxP getRightHandMatrix() = 0; virtual f32 getGroundY() = 0; @@ -208,6 +269,7 @@ public: void setDoButtonQuake(); void stopDoButtonQuake(int); void getRopePos() const; + f32 getSpeedF() const { return speedF; } }; #endif /* D_A_PLAYER */ diff --git a/include/d/actor/d_a_player_link.h b/include/d/actor/d_a_player_link.h index e73633e3c..5b9201ed2 100644 --- a/include/d/actor/d_a_player_link.h +++ b/include/d/actor/d_a_player_link.h @@ -17,15 +17,15 @@ public: /* 0x0 */ u16 mIdx; /* 0x2 */ u16 field_0x2; /* 0x4 */ u32 field_0x4; - /* 0x8 */ u8* mBuffer; - /* 0xC */ JKRSolidHeap* mAnimeHeap; + /* 0x8 */ void* m_buffer; + /* 0xC */ JKRSolidHeap* mpAnimeHeap; }; class daPy_sightPacket_c : public dDlst_base_c { public: daPy_sightPacket_c() {} virtual void draw(); - virtual ~daPy_sightPacket_c(); + virtual ~daPy_sightPacket_c() {} void setSight(); void setSightImage(ResTIMG*); @@ -47,16 +47,14 @@ private: class daPy_actorKeep_c { public: - daPy_actorKeep_c() { clearData(); } + daPy_actorKeep_c() {} void setActor(); void setData(fopAc_ac_c*); void clearData(); u32 getID() const { return mID; } - void setID(u32 id) { mID = id; } - fopAc_ac_c* getActor() const { return mActor; } - fopAc_ac_c* getActorConst() const { return mActor; } + fopAc_ac_c* getActor() { return mActor; } private: /* 0x0 */ u32 mID; @@ -65,85 +63,98 @@ private: class daPy_footEffect_c { public: - ~daPy_footEffect_c(); - daPy_footEffect_c(); - /* 0x0 */ u8 field_0x0[0x4C]; + ~daPy_footEffect_c() {} + daPy_footEffect_c() {} + + /* 0x00 */ dPa_smokeEcallBack mSmokeCb; + /* 0x20 */ dPa_followEcallBack mFollowCb; + /* 0x34 */ u8 field_0x34[0x4C - 0x34]; }; -class daPy_fanSwingEcallBack_c { +class daPy_fanSwingEcallBack_c : public dPa_levelEcallBack { public: void execute(JPABaseEmitter*); - ~daPy_fanSwingEcallBack_c(); - void setup(JPABaseEmitter*, const cXyz*, const csXyz*, signed char); -}; + ~daPy_fanSwingEcallBack_c() {} + void setup(JPABaseEmitter* emitter, const cXyz*, const csXyz*, s8) { + emitter->becomeImmortalEmitter(); + mpEmitter = emitter; + field_0x4 = 0; + } + + /* 0x4 */ int field_0x4; + /* 0x8 */ JPABaseEmitter* mpEmitter; +}; // Size: 0xC -class daPy_waterDropPcallBack_c { +class daPy_waterDropPcallBack_c : public JPACallBackBase2 { public: void execute(JPABaseEmitter*, JPABaseParticle*); - ~daPy_waterDropPcallBack_c(); + ~daPy_waterDropPcallBack_c() {} + + /* 0x4 */ u8 field_0x4[0x4]; + /* 0x8 */ dBgS_ObjGndChk field_0x8; }; -class daPy_swimTailEcallBack_c { +class daPy_swimTailEcallBack_c : public dPa_levelEcallBack { public: - - void setup(JPABaseEmitter*, const cXyz*, const csXyz*, signed char); + void setup(JPABaseEmitter*, const cXyz*, const csXyz*, s8); void getMaxWaterY(JGeometry::TVec3*); void remove(); void execute(JPABaseEmitter*); void draw(JPABaseEmitter*); - ~daPy_swimTailEcallBack_c(); - daPy_swimTailEcallBack_c(); + ~daPy_swimTailEcallBack_c() {} + daPy_swimTailEcallBack_c() {} - /* 0x0 */ u8 field_0x0[0x28]; -}; + /* 0x4 */ u8 field_0x4[0x24]; +}; // Size: 0x28 STATIC_ASSERT(sizeof(daPy_swimTailEcallBack_c) == 0x28); -class daPy_waterDropEcallBack_c { +class daPy_followEcallBack_c : public dPa_levelEcallBack { public: void execute(JPABaseEmitter*); - void setup(JPABaseEmitter*, const cXyz*, const csXyz*, signed char); + void setup(JPABaseEmitter*, const cXyz*, const csXyz*, s8); void end(); - ~daPy_waterDropEcallBack_c(); + ~daPy_followEcallBack_c() {} - /* 0x0 */ u8 field_0x0[0x20]; -}; + /* 0x04 */ JPABaseEmitter* mpEmitter; + /* 0x08 */ cXyz field_0x08; + /* 0x14 */ u8 field_0x14[0x1C - 0x14]; +}; // Size: 0x1C -class daPy_followEcallBack_c { +class daPy_waterDropEcallBack_c : public daPy_followEcallBack_c { public: void execute(JPABaseEmitter*); - void setup(JPABaseEmitter*, const cXyz*, const csXyz*, signed char); + void setup(JPABaseEmitter*, const cXyz*, const csXyz*, s8); void end(); - ~daPy_followEcallBack_c(); + daPy_waterDropEcallBack_c() {} + ~daPy_waterDropEcallBack_c() {} - /* 0x0 */ u8 field_0x0[0x1C]; -}; + /* 0x1C */ u8 field_0x1C[0x4]; +}; // Size: 0x20 -class daPy_dmEcallBack_c { +class daPy_dmEcallBack_c : public daPy_mtxFollowEcallBack_c { public: void execute(JPABaseEmitter*); - ~daPy_dmEcallBack_c(); - daPy_dmEcallBack_c(); + ~daPy_dmEcallBack_c() {} + daPy_dmEcallBack_c() {} +}; // Size: 0x0C - /* 0x0 */ u8 field_0x0[0xC]; -}; - -class daPy_mtxPosFollowEcallBack_c { +class daPy_mtxPosFollowEcallBack_c : public daPy_mtxFollowEcallBack_c { public: - void makeEmitterColor(unsigned short, MtxP, const cXyz*, const csXyz*, const GXColor*, const GXColor*); + void makeEmitterColor(u16, MtxP, const cXyz*, const csXyz*, const GXColor*, const GXColor*); void execute(JPABaseEmitter*); - daPy_mtxPosFollowEcallBack_c(); - ~daPy_mtxPosFollowEcallBack_c(); + daPy_mtxPosFollowEcallBack_c() {} + ~daPy_mtxPosFollowEcallBack_c() {} - /* 0x0 */ u8 field_0x0[0x10]; -}; + /* 0xC */ u8 field_0xC[0x4]; +}; // Size: 0x10 class daPy_swBlur_c : public J3DPacket { public: void initSwBlur(MtxP, int, float, int); void copySwBlur(MtxP, int); void draw(); - ~daPy_swBlur_c(); + ~daPy_swBlur_c() {} /* 0x010 */ u8 field_0x010[0x014 - 0x010]; /* 0x014 */ int field_0x014; @@ -160,24 +171,43 @@ class daPy_footData_c { public: ~daPy_footData_c(); daPy_footData_c(); - /* 0x0 */ u8 field_0x0[0x118]; + + /* 0x000 */ u8 field_0x000[0x034 - 0x000]; + /* 0x034 */ dBgS_LinkGndChk field_0x034; + /* 0x088 */ u8 field_0x088[0x118 - 0x088]; }; -struct MagicArmorAuraEntry { +struct daPy_aura_c { J3DModel* mpYaura00Model; - f32 field_0x4; + f32 mFrame; + + void setModel(J3DModel* model) { mpYaura00Model = model; } + J3DModel* getModel() { return mpYaura00Model; } + void setFrame(f32 frame) { mFrame = frame; } + f32 getFrame() { return mFrame; } }; class daPy_anmIndex_c; class daPy_lk_c : public daPy_py_c { public: + enum daPy_PROC {}; + enum daPy_HEAP_TYPE {}; enum daPy_ANM {}; enum daPy_UPPER {}; + enum { + PART_UNDER_e = 0, + PART_UPPER_e = 1, + }; + + enum { + UNDER_MOVE0_e = 0, + }; + void getBoomerangCatchPos() const; void getLineTopPos(); void getHookshotRootPos() const; @@ -227,7 +257,7 @@ public: void drawShadow(); void offBodyEffect(); void onBodyEffect(); - void draw(); + BOOL draw(); void setAtnList(); void setActorPointer(); void setTalkStatus(); @@ -312,7 +342,7 @@ public: void setSubjectMode(); void checkMaskDraw(); void checkSubjectEnd(int); - void checkGuardAccept(); + BOOL checkGuardAccept(); void cancelNoDamageMode(); void commonProcInit(daPy_lk_c::daPy_PROC procID); void procScope_init(int); @@ -436,25 +466,25 @@ public: void setDemoData(); void setStickData(); void setBgCheckParam(); - void setParamData(int, int, int, int); + u32 setParamData(int, int, int, int); void checkLavaFace(cXyz*, int); void checkFallCode(); - void startRestartRoom(u32, int, f32, int); + BOOL startRestartRoom(u32, int, f32, int); void checkSuccessGuard(int); void setShapeAngleOnGround(); void setStepsOffset(); void setBeltConveyerPower(); void setWindAtPower(); void checkRoofRestart(); - void execute(); - void playerDelete(); + BOOL execute(); + BOOL playerDelete(); void initTextureAnime(); void initTextureScroll(); - void createHeap(); + BOOL createHeap(); void createAnimeHeap(JKRSolidHeap**, daPy_HEAP_TYPE); - void initModel(J3DModel**, int, u32); - void entryBtk(J3DModelData*, int); - void entryBrk(J3DModelData*, int); + J3DModelData* initModel(J3DModel**, int, u32); + J3DAnmTextureSRTKey* entryBtk(J3DModelData*, int); + J3DAnmTevRegKey* entryBrk(J3DModelData*, int); void playerInit(); daPy_lk_c(); int makeBgWait(); @@ -690,7 +720,7 @@ public: void procCrawlEnd(); void checkGrabSpecialHeavyState(); void setWeaponBlur(); - void checkGrabBarrelSearch(int); + BOOL checkGrabBarrelSearch(int); void setGrabItemPos(); void freeGrabItem(); void checkNextActionGrab(); @@ -831,7 +861,7 @@ public: void bowJointCB(int); void bowButton() const; void checkBowReadyAnime() const; - void checkBowAnime() const; + BOOL checkBowAnime() const; void makeArrow(); void deleteArrow(); void setBowReadyAnime(); @@ -1002,30 +1032,30 @@ public: J3DAnmTextureSRTKey* getIceArrowBtk() { return mpIceArrowBtk; } J3DAnmTextureSRTKey* getLightArrowBtk() { return mpLightArrowBtk; } - virtual MtxP getLeftHandMatrix(); - virtual MtxP getRightHandMatrix(); - virtual f32 getGroundY(); + 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(); } virtual int getTactMusic() const; virtual int getTactTimerCancel() const; virtual BOOL checkPlayerGuard() const; virtual fopAc_ac_c* getGrabMissActor(); - virtual BOOL checkPlayerFly() const; - virtual BOOL checkFrontRoll() const; - virtual BOOL checkBottleSwing() const; - virtual BOOL checkCutCharge() const; + virtual BOOL checkPlayerFly() const { return field_0x3618 & 0x10452822; } // TODO add enum + virtual BOOL checkFrontRoll() const { return mCurProc == 0x1E; } // TODO add enum + virtual BOOL checkBottleSwing() const { return mCurProc == 0xA5; } + virtual BOOL checkCutCharge() const { return mCurProc == 0x59; } virtual BOOL getBokoFlamePos(cXyz*); - virtual BOOL checkTactWait() const; + virtual BOOL checkTactWait() const { return mCurProc == 0x9A; } virtual void setTactZev(unsigned int, int, char*); virtual void onDekuSpReturnFlg(u8); virtual bool checkComboCutTurn() const; - virtual f32 getBaseAnimeFrameRate(); - virtual f32 getBaseAnimeFrame(); - virtual u32 getItemID() const; - virtual u32 getThrowBoomerangID() const; - virtual u32 getGrabActorID() const; - virtual BOOL checkGrabBarrel(); + virtual f32 getBaseAnimeFrameRate() { return mFrameCtrlUnder[0].getRate(); } + virtual f32 getBaseAnimeFrame() { return mFrameCtrlUnder[0].getFrame(); } + virtual u32 getItemID() const { return mActorKeepEquip.getID(); } + virtual u32 getThrowBoomerangID() const { return mActorKeepThrow.getID(); } + virtual u32 getGrabActorID() const { return mActorKeepGrab.getID(); } + virtual BOOL checkGrabBarrel() { return checkGrabBarrelSearch(1); } virtual BOOL checkPlayerNoDraw(); - virtual BOOL checkRopeTag(); + virtual BOOL checkRopeTag() { return mActorKeepEquip.getActor() == NULL; } virtual BOOL checkRopeReadyAnime() const; virtual void voiceStart(u32); virtual void setOutPower(f32, s16, int); @@ -1041,7 +1071,7 @@ public: virtual void cancelChangeTextureAnime(); /* 0x0320 */ request_of_phase_process_class mPhsLoad; - /* 0x0328 */ J3DModelData* mpModelData; + /* 0x0328 */ J3DModelData* mpCLModelData; /* 0x032C */ J3DModel* mpCLModel; /* 0x0330 */ J3DModel* mpKatsuraModel; /* 0x0334 */ J3DModel* mpYamuModel; @@ -1057,7 +1087,7 @@ public: /* 0x03A4 */ J3DShape* field_0x03a4; /* 0x03A8 */ J3DShape* field_0x03a8; /* 0x03AC */ dBgS_AcchCir mAcchCir[3]; - /* 0x046C */ dBgS_Acch mAcch; + /* 0x046C */ dBgS_LinkAcch mAcch; /* 0x0630 */ dBgS_LinkLinChk mLinkLinChk; /* 0x069C */ dBgS_RopeLinChk mRopeLinChk; /* 0x0708 */ dBgS_BoomerangLinChk mBoomerangLinChk; @@ -1065,41 +1095,41 @@ public: /* 0x07C8 */ dBgS_LinkRoofChk mRoofChk; /* 0x0814 */ dBgS_ArrowLinChk mArrowLinChk; /* 0x0880 */ dBgS_MirLightLinChk mMirLightLinChk; - /* 0x08EC */ u8 field_0x08EC[0x0910 - 0x08EC]; - /* 0x0910 */ cXyz field_0x0910; - /* 0x091C */ u8 field_0x091C[0x0950 - 0x091C]; - /* 0x0950 */ daPy_HIO_c* mpHIO; + /* 0x08EC */ dBgS_ObjGndChk_Spl field_0x08EC; + /* 0x0940 */ cBgS_PolyInfo mPolyInfo; + /* 0x0950 */ daPy_HIO_c* m_HIO; /* 0x0954 */ J3DModel* mpHandsModel; /* 0x0958 */ J3DModel* mpEquippedSwordModel; /* 0x095C */ J3DModel* mpSwgripaModel; /* 0x0960 */ J3DModel* mpSwgripmsModel; /* 0x0964 */ mDoExt_bckAnm mSwgripmsabBckAnim; - /* 0x0974 */ J3DAnmTevRegKey* mpTswgripmsabBrkData; - /* 0x0978 */ J3DAnmTextureSRTKey* mpTswgripmsBtkData; + /* 0x0974 */ J3DAnmTevRegKey* mpTswgripmsabBrk; + /* 0x0978 */ J3DAnmTextureSRTKey* mpTswgripmsBtk; /* 0x097C */ J3DModel* mpPodmsModel; /* 0x0980 */ J3DModel* mpEquippedShieldModel; /* 0x0984 */ J3DModel* mpShaModel; /* 0x0988 */ J3DModel* mpShmsModel; - /* 0x098C */ mDoExt_bckAnm field_0x098c; - /* 0x099C */ J3DAnmTextureSRTKey* field_0x099c; + /* 0x098C */ mDoExt_bckAnm mAtngshaBck; + /* 0x099C */ J3DAnmTextureSRTKey* mpTshmsBtk; /* 0x09A0 */ dDlst_mirrorPacket mMirrorPacket; /* 0x2E7C */ J3DModel* mpYmsls00Model; - /* 0x2E80 */ J3DAnmTextureSRTKey* mpYmsls00BtkData; + /* 0x2E80 */ J3DAnmTextureSRTKey* mpYmsls00Btk; /* 0x2E84 */ J3DModel* mpHbootsModelRightFoot; /* 0x2E88 */ J3DModel* mpHbootsModelLeftFoot; /* 0x2E8C */ J3DModel* mpPringModel; - /* 0x2E90 */ JKRSolidHeap* field_0x2e90; - /* 0x2E94 */ u8 field_0x2E94[0x2E98 - 0x2E94]; + /* 0x2E90 */ JKRSolidHeap* mpItemHeaps[2]; /* 0x2E98 */ J3DModel* mpHeldItemModel; /* 0x2E9C */ mDoExt_bckAnm mSwordAnim; /* 0x2EAC */ u8 field_0x2EAC[0x2EB0 - 0x2EAC]; /* 0x2EB0 */ J3DAnmTevRegKey* mpBombBrk; /* 0x2EB4 */ J3DAnmTevRegKey* mpGwp00BrkData; /* 0x2EB8 */ J3DAnmTextureSRTKey* mpGwp00BtkData; - /* 0x2EBC */ u8 field_0x2EBC[0x2EC0 - 0x2EBC]; + /* 0x2EBC */ J3DAnmTextureSRTKey* mpGicer00Btk; /* 0x2EC0 */ J3DAnmTextureSRTKey* mpIceArrowBtk; /* 0x2EC4 */ J3DAnmTextureSRTKey* mpLightArrowBtk; - /* 0x2EC8 */ u8 field_0x2EC8[0x2ED4 - 0x2EC8]; + /* 0x2EC8 */ J3DAnmTextureSRTKey* mpGicer01Btk; + /* 0x2ECC */ JKRSolidHeap* field_0x2ECC; + /* 0x2ED0 */ void* m_item_bck_buffer; /* 0x2ED4 */ J3DAnmTextureSRTKey* mpHeldItemModelAnimTexEx; /* 0x2ED8 */ J3DAnmTextureSRTKey* mpSwordAnimBTK; /* 0x2EDC */ J3DAnmTevRegKey* mpHeldItemAnimBRK; @@ -1112,30 +1142,29 @@ public: /* 0x2EF8 */ J3DAnmTevRegKey* field_0x2ef8; /* 0x2EFC */ mDoExt_brkAnm field_0x2efc; /* 0x2F14 */ J3DModel* mpSuimenMunyaModel; - /* 0x2F18 */ J3DAnmTextureSRTKey* field_0x2f18; + /* 0x2F18 */ J3DAnmTextureSRTKey* mpSuimenMunyaBtk; /* 0x2F1C */ J3DModel* mpYuchw00Model; - /* 0x2F20 */ mDoExt_bckAnm field_0x2f20; - /* 0x2F30 */ J3DAnmTextureSRTKey* field_0x2f30; - /* 0x2F34 */ J3DAnmTevRegKey* field_0x2f34; + /* 0x2F20 */ mDoExt_bckAnm mYuchw00Bck; + /* 0x2F30 */ J3DAnmTextureSRTKey* mpYuchw00Btk; + /* 0x2F34 */ J3DAnmTevRegKey* mpYuchw00Brk; /* 0x2F38 */ J3DModel* mpYbafo00Model; - /* 0x2F3C */ J3DAnmTextureSRTKey* field_0x2f3c; - /* 0x2F40 */ MagicArmorAuraEntry mMagicArmorAuraEntries[6]; - /* 0x2F70 */ mDoExt_brkAnm field_0x2f70; - /* 0x2F88 */ u8 field_0x2F88[0x2F8C - 0x2F88]; + /* 0x2F3C */ J3DAnmTextureSRTKey* mpYbafo00Btk; + /* 0x2F40 */ daPy_aura_c mMagicArmorAuraEntries[6]; + /* 0x2F70 */ mDoExt_brkAnm mYaura00rBrk; + /* 0x2F88 */ J3DAnmTextureSRTKey* mpYaura00Btk; /* 0x2F8C */ J3DModel* mpYmgcs00Model; - /* 0x2F90 */ mDoExt_brkAnm field_0x2f90; - /* 0x2FA8 */ u8 field_0x2FA8[0x2FAC - 0x2FA8]; - /* 0x2FAC */ J3DMtxCalc* field_0x2fac; - /* 0x2FB0 */ J3DMtxCalc* field_0x2fb0; - /* 0x2FB4 */ mDoExt_AnmRatioPack field_0x2fb4[2]; - /* 0x2FC4 */ mDoExt_AnmRatioPack field_0x2fc4[3]; - /* 0x2FDC */ daPy_anmHeap_c field_0x2fdc[2]; - /* 0x2FFC */ daPy_anmHeap_c field_0x2ffc[3]; - /* 0x302C */ J3DFrameCtrl field_0x302c[2]; - /* 0x3054 */ J3DFrameCtrl field_0x3054[3]; + /* 0x2F90 */ mDoExt_brkAnm mYmgcs00Brk; + /* 0x2FA8 */ J3DAnmTextureSRTKey* mpYmgcs00Btk; + /* 0x2FAC */ mDoExt_MtxCalcAnmBlendTblOld* m_pbCalc[2]; + /* 0x2FB4 */ mDoExt_AnmRatioPack mAnmRatioUnder[2]; + /* 0x2FC4 */ mDoExt_AnmRatioPack mAnmRatioUpper[3]; + /* 0x2FDC */ daPy_anmHeap_c m_anm_heap_under[2]; + /* 0x2FFC */ daPy_anmHeap_c m_anm_heap_upper[3]; + /* 0x302C */ J3DFrameCtrl mFrameCtrlUnder[2]; + /* 0x3054 */ J3DFrameCtrl mFrameCtrlUpper[3]; /* 0x3090 */ daPy_sightPacket_c mSightPacket; /* 0x30E0 */ JAIZelAnime mJAIZelAnime; - /* 0x3178 */ u8 field_0x3178[0x317C - 0x3178]; + /* 0x3178 */ void* m_sanm_buffer; /* 0x317C */ daPy_actorKeep_c mActorKeepEquip; /* 0x3184 */ daPy_actorKeep_c mActorKeepThrow; /* 0x318C */ daPy_actorKeep_c mActorKeepGrab; @@ -1146,7 +1175,7 @@ public: /* 0x31A8 */ fopAc_ac_c* mpAttnActorX; /* 0x31AC */ fopAc_ac_c* mpAttnActorY; /* 0x31B0 */ fopAc_ac_c* mpAttnActorZ; - /* 0x31B4 */ mDoExt_MtxCalcOldFrame* field_0x31b4; + /* 0x31B4 */ mDoExt_MtxCalcOldFrame* m_old_fdata; /* 0x31B8 */ s16 mTexAnimeResIdx; /* 0x31BA */ s16 field_0x31ba; /* 0x31BC */ s16 field_0x31bc; @@ -1159,30 +1188,42 @@ public: /* 0x31CE */ s16 field_0x31ce; /* 0x31D0 */ void* mpTextureScrollResData; /* 0x31D4 */ JKRSolidHeap* mpTextureScrollResHeap; - /* 0x31D8 */ u32 mCurProc; + /* 0x31D8 */ int mCurProc; /* 0x31DC */ int (daPy_lk_c::*field_0x31dc)(); /* 0x31E8 */ daPy_footEffect_c field_0x31e8[2]; - /* 0x3280 */ u8 field_0x3280[0x3294 - 0x3280]; + /* 0x3280 */ dPa_rippleEcallBack field_0x3280; /* 0x3294 */ daPy_swimTailEcallBack_c mSwimTailEcallBack[2]; /* 0x32E4 */ daPy_mtxFollowEcallBack_c field_0x32e4; /* 0x32F0 */ daPy_mtxFollowEcallBack_c field_0x32f0; /* 0x32FC */ dPa_smokeEcallBack mSmokeEcallBack; - /* 0x331C */ dPa_cutTurnEcallBack_c mCutTurnEcallBack[3]; - /* 0x334C */ daPy_waterDropEcallBack_c mWaterDropEcallBack[2]; + /* 0x331C */ dPa_cutTurnEcallBack_c field_0x331C; + /* 0x332C */ dPa_cutTurnEcallBack_c field_0x332C; + /* 0x333C */ dPa_cutTurnEcallBack_c field_0x333C; + /* 0x334C */ daPy_waterDropEcallBack_c field_0x334C; + /* 0x336C */ daPy_waterDropEcallBack_c field_0x336C; /* 0x338C */ daPy_followEcallBack_c field_0x338c; - /* 0x33A8 */ daPy_mtxFollowEcallBack_c field_0x33a8; - /* 0x33B4 */ u8 field_0x33B4[0x33B8 - 0x33B4]; + /* 0x33A8 */ daPy_mtxPosFollowEcallBack_c field_0x33a8; /* 0x33B8 */ daPy_dmEcallBack_c field_0x33b8[4]; - /* 0x33E8 */ u8 field_0x33E8[0x3460 - 0x33E8]; + /* 0x33E8 */ daPy_mtxFollowEcallBack_c field_0x33E8; + /* 0x33F4 */ daPy_fanSwingEcallBack_c mFanSwingCb; + /* 0x3400 */ daPy_mtxPosFollowEcallBack_c field_0x3400; + /* 0x3410 */ daPy_followEcallBack_c field_0x3410; + /* 0x342C */ daPy_mtxFollowEcallBack_c field_0x342C; + /* 0x3438 */ daPy_followEcallBack_c field_0x3438; + /* 0x3454 */ daPy_mtxFollowEcallBack_c field_0x3454; /* 0x3460 */ daPy_mtxPosFollowEcallBack_c field_0x3460[2]; /* 0x3480 */ dAttention_c* mpAttention; /* 0x3484 */ dAttList_c* mpAttnEntryA; /* 0x3488 */ dAttList_c* mpAttnEntryX; /* 0x348C */ dAttList_c* mpAttnEntryY; /* 0x3490 */ dAttList_c* mpAttnEntryZ; - /* 0x3494 */ u8 field_0x3494[0x34B9 - 0x3494]; + /* 0x3494 */ u8 field_0x3494[0x3498 - 0x3494]; + /* 0x3498 */ LIGHT_INFLUENCE field_0x3498; + /* 0x34B8 */ u8 field_0x34B8[0x34B9 - 0x34B8]; /* 0x34B9 */ u8 mFrontWallType; - /* 0x34BA */ u8 field_0x34BA[0x34BD - 0x34BA]; + /* 0x34BA */ u8 field_0x34BA[0x34BB - 0x34BA]; + /* 0x34BB */ u8 mCurrItemHeapIdx; + /* 0x34BC */ u8 field_0x34BC[0x34BD - 0x34BC]; /* 0x34BD */ u8 mLastUsedEquipItem; /* 0x34BE */ u8 field_0x34BE[0x34C0 - 0x34BE]; /* 0x34C0 */ u8 field_0x34c0; @@ -1194,7 +1235,9 @@ public: /* 0x34C6 */ u8 field_0x34C6[0x34C7 - 0x34C6]; /* 0x34C7 */ u8 mActivePlayerBombs; /* 0x34C8 */ u8 mPressedButtonsBitfield; - /* 0x34C9 */ u8 field_0x34C9[0x34D0 - 0x34C9]; + /* 0x34C9 */ u8 field_0x34C9[0x34CB - 0x34C9]; + /* 0x34CB */ u8 field_0x34CB; + /* 0x34CC */ u8 field_0x34D0[0x34D0 - 0x34CC]; /* 0x34D0 */ s16 field_0x34d0; /* 0x34D2 */ s16 field_0x34d2; /* 0x34D4 */ s16 field_0x34d4; @@ -1224,7 +1267,8 @@ public: /* 0x3556 */ u8 field_0x3556[0x355E - 0x3556]; /* 0x355E */ u16 field_0x355e; /* 0x3560 */ u16 mHeldItemType; - /* 0x3562 */ u8 field_0x3562[0x3566 - 0x3562]; + /* 0x3562 */ u8 field_0x3562[0x3564 - 0x3562]; + /* 0x3564 */ s16 field_0x3564; /* 0x3566 */ s16 field_0x3566; /* 0x3568 */ s16 field_0x3568; /* 0x356A */ u8 field_0x356A[0x356C - 0x356A]; @@ -1268,7 +1312,9 @@ public: /* 0x3634 */ int field_0x3634; /* 0x3638 */ u8 field_0x3638[0x3644 - 0x3638]; /* 0x3644 */ f32 field_0x3644; - /* 0x3648 */ u8 field_0x3648[0x3694 - 0x3648]; + /* 0x3648 */ u8 field_0x3648[0x3668 - 0x3648]; + /* 0x3668 */ J3DTransformInfo field_0x3668; + /* 0x3688 */ u8 field_0x3688[0x3694 - 0x3688]; /* 0x3694 */ cXyz mOldSpeed; /* 0x36A0 */ cXyz field_0x36a0; /* 0x36AC */ cXyz field_0x36ac; @@ -1293,6 +1339,115 @@ public: /* 0x488C */ dCcD_Cps field_0x488c; /* 0x49C4 */ dCcD_Sph field_0x49c4; /* 0x4AF0 */ dCcD_Cps field_0x4af0; +}; // Size: 0x4C28 + +enum LINK_RES_FILE_ID { // IDs and indexes are synced + /* BCK */ + LINK_BCK_ATNGSHA=0xA, + LINK_BCK_BOMB=0xB, + LINK_BCK_COMBO_TATE=0xC, + LINK_BCK_GICER01=0xD, + LINK_BCK_GWP00=0xE, + LINK_BCK_SWGRIPMSAB=0xF, + LINK_BCK_YUCHW00=0x10, + + /* BDL */ + LINK_BDL_BINFAIRY=0x13, + LINK_BDL_BOOMERANG=0x14, + LINK_BDL_BOTTLECAP=0x15, + LINK_BDL_BOW=0x16, + LINK_BDL_CAMERA=0x17, + LINK_BDL_CL=0x18, + LINK_BDL_FAN=0x19, + LINK_BDL_FANB=0x1A, + LINK_BDL_FANSMALL=0x1B, + LINK_BDL_HAMMER=0x1C, + LINK_BDL_HANDS=0x1D, + LINK_BDL_HOOKSHOT=0x1E, + LINK_BDL_HYOINOMI=0x1F, + LINK_BDL_KATSURA=0x20, + LINK_BDL_LETTER=0x21, + LINK_BDL_PODMS=0x22, + LINK_BDL_PRING=0x23, + LINK_BDL_SHA=0x24, + LINK_BDL_SWA=0x25, + LINK_BDL_SWGRIPA=0x26, + LINK_BDL_TCEIVER=0x27, + LINK_BDL_TETOLACH=0x28, + LINK_BDL_YAMU=0x29, + + /* BDLC */ + LINK_BDL_ESA=0x2C, + LINK_BDL_HBOOTS=0x2D, + LINK_BDL_ROPEEND=0x2E, + LINK_BDL_TELESCOPE=0x2F, + + /* BDLI */ + LINK_BDL_GARWFI00=0x32, + LINK_BDL_GARWFI01=0x33, + LINK_BDL_GARWG00=0x34, + + /* BDLM */ + LINK_BDL_ARROW=0x37, + LINK_BDL_ARROWGLITTER=0x38, + LINK_BDL_BINHO=0x39, + LINK_BDL_BINLIQUID=0x3A, + LINK_BDL_BINLIQUIDH=0x3B, + LINK_BDL_BOMB=0x3C, + LINK_BDL_BOTTLEEMP=0x3D, + LINK_BDL_CUTFH=0x3E, + LINK_BDL_CUTFM=0x3F, + LINK_BDL_GICER00=0x40, + LINK_BDL_GICER01=0x41, + LINK_BDL_GWP00=0x42, + LINK_BDL_SHMS=0x43, + LINK_BDL_SUIMEN_MUNYA=0x44, + LINK_BDL_SWGRIPMS=0x45, + LINK_BDL_SWMS=0x46, + LINK_BDL_TAKT=0x47, + LINK_BDL_YAURA00=0x48, + LINK_BDL_YBAFO00=0x49, + LINK_BDL_YHSLS00=0x4A, + LINK_BDL_YMGCS00=0x4B, + LINK_BDL_YMSLI00=0x4C, + LINK_BDL_YMSLS00=0x4D, + LINK_BDL_YUCHW00=0x4E, + + /* BRK */ + LINK_BRK_BOMB=0x51, + LINK_BRK_GARWFI00=0x52, + LINK_BRK_GARWFI01=0x53, + LINK_BRK_GARWG00=0x54, + LINK_BRK_GWP00=0x55, + LINK_BRK_TSWGRIPMSAB=0x56, + LINK_BRK_YAURA00_G=0x57, + LINK_BRK_YAURA00_R=0x58, + LINK_BRK_YMGCS00_MS=0x59, + LINK_BRK_YMGCS00_TS=0x5A, + LINK_BRK_YUCHW00=0x5B, + + /* BTK */ + LINK_BTK_GARWFI00=0x5E, + LINK_BTK_GARWFI01=0x5F, + LINK_BTK_GARWG00=0x60, + LINK_BTK_GICER00=0x61, + LINK_BTK_GICER01=0x62, + LINK_BTK_GWP00=0x63, + LINK_BTK_SUIMEN_MUNYA=0x64, + LINK_BTK_TARROWGLITTER=0x65, + LINK_BTK_TSHMS=0x66, + LINK_BTK_TSWGRIPMS=0x67, + LINK_BTK_TTIPICE=0x68, + LINK_BTK_YAURA00=0x69, + LINK_BTK_YBAFO00=0x6A, + LINK_BTK_YMGCS00=0x6B, + LINK_BTK_YMSLS00=0x6C, + LINK_BTK_YUCHW00=0x6D, + + /* TEX */ + LINK_BTI_BLUR=0x70, + LINK_BTI_LINKTEXBCI4=0x71, + LINK_BTI_ROCK_MARK=0x72, }; #endif /* D_A_PLAYER_LINK */ \ No newline at end of file diff --git a/include/d/d_bg_s_gnd_chk.h b/include/d/d_bg_s_gnd_chk.h index 39f3aaf12..cbd7a0fe0 100644 --- a/include/d/d_bg_s_gnd_chk.h +++ b/include/d/d_bg_s_gnd_chk.h @@ -17,9 +17,9 @@ STATIC_ASSERT(sizeof(dBgS_GndChk) == 0x54); class dBgS_LinkGndChk : public dBgS_GndChk { public: - dBgS_LinkGndChk() { /* SetLink(); */ } - virtual ~dBgS_LinkGndChk(); -}; + dBgS_LinkGndChk() { SetLink(); } + virtual ~dBgS_LinkGndChk() {} +}; // Size: 0x54 class dBgS_ObjGndChk : public dBgS_GndChk { public: @@ -47,7 +47,10 @@ public: class dBgS_ObjGndChk_Spl : public dBgS_ObjGndChk { public: - dBgS_ObjGndChk_Spl(); + dBgS_ObjGndChk_Spl() { + OffNormalGrp(); + OnSpl(); + } virtual ~dBgS_ObjGndChk_Spl(); }; diff --git a/include/d/d_bg_s_lin_chk.h b/include/d/d_bg_s_lin_chk.h index 38f30c7bd..740087eba 100644 --- a/include/d/d_bg_s_lin_chk.h +++ b/include/d/d_bg_s_lin_chk.h @@ -22,21 +22,21 @@ public: class dBgS_LinkLinChk : public dBgS_LinChk { public: - dBgS_LinkLinChk(); + dBgS_LinkLinChk() { SetLink(); } virtual ~dBgS_LinkLinChk(); }; class dBgS_RopeLinChk : public dBgS_LinChk { public: - dBgS_RopeLinChk(); + dBgS_RopeLinChk() { SetRope(); } virtual ~dBgS_RopeLinChk(); }; class dBgS_BoomerangLinChk : public dBgS_LinChk { public: - dBgS_BoomerangLinChk(); + dBgS_BoomerangLinChk() { SetBoomerang(); } virtual ~dBgS_BoomerangLinChk(); }; @@ -82,9 +82,13 @@ public: class dBgS_MirLightLinChk : public dBgS_LinChk { public: - dBgS_MirLightLinChk(); + dBgS_MirLightLinChk() { + SetArrow(); // "Arrow" also covers light + OnAll(); + OnLightGrp(); + } - virtual ~dBgS_MirLightLinChk(); + virtual ~dBgS_MirLightLinChk() {} }; #endif /* D_BG_D_BG_S_LIN_CHK_H */ diff --git a/include/d/d_bg_s_roof_chk.h b/include/d/d_bg_s_roof_chk.h index 53d8a9702..df2ed5d36 100644 --- a/include/d/d_bg_s_roof_chk.h +++ b/include/d/d_bg_s_roof_chk.h @@ -14,7 +14,7 @@ public: m_pos.y = 0.0f; m_pos.z = 0.0f; SetActorPid(-1); - field_0x44 = 0; + field_0x44 = NULL; } void Init(); @@ -22,6 +22,8 @@ public: void SetPos(cXyz& pos) { m_pos = pos; } cXyz* GetPosP() { return &m_pos; } + f32 GetNowY() { return m_pos.y; } + void SetNowY(f32 y) { m_pos.y = y; } private: /* 0x38 */ cXyz m_pos; @@ -33,8 +35,8 @@ STATIC_ASSERT(sizeof(dBgS_RoofChk) == 0x4C); class dBgS_LinkRoofChk : public dBgS_RoofChk { public: - dBgS_LinkRoofChk() { /* SetLink(); */ } - virtual ~dBgS_LinkRoofChk(); + dBgS_LinkRoofChk() { SetLink(); } + virtual ~dBgS_LinkRoofChk() {} }; // Size: 0x4C #endif /* D_BG_D_BG_S_ROOF_CHK_H */ \ No newline at end of file diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index f115fc8ae..f6303e185 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -1252,6 +1252,8 @@ inline u8 dComIfGs_getKeyNum() { u8 dComIfGs_checkGetItemNum(u8 i_itemNo); +BOOL dComIfGs_checkSeaLandingEvent(s8 i_roomNo); + /** * === PLAY === */ @@ -1332,6 +1334,10 @@ inline void dComIfGp_setPlayer(int idx, fopAc_ac_c* player) { g_dComIfG_gameInfo.play.setPlayer(idx, player); } +inline void dComIfGp_setPlayerPtr(int idx, fopAc_ac_c* player) { + g_dComIfG_gameInfo.play.setPlayerPtr(idx, player); +} + inline fopAc_ac_c* dComIfGp_getCb1Player() { return g_dComIfG_gameInfo.play.getPlayerPtr(1); } @@ -1456,6 +1462,10 @@ inline daShip_c* dComIfGp_getShipActor() { return (daShip_c*)g_dComIfG_gameInfo.play.getPlayerPtr(2); } +inline void dComIfGp_setShipActor(fopAc_ac_c* player) { + g_dComIfG_gameInfo.play.setPlayerPtr(2, player); +} + inline void dComIfGp_getIkadaShipBeforePos(Vec* o_pos) { *o_pos = g_dComIfG_gameInfo.play.mIkadaLinkPos; } @@ -1616,6 +1626,10 @@ inline fopAc_ac_c* dComIfGp_getLinkPlayer() { return g_dComIfG_gameInfo.play.getPlayerPtr(0); } +inline void dComIfGp_setLinkPlayer(fopAc_ac_c* player) { + g_dComIfG_gameInfo.play.setPlayerPtr(0, player); +} + inline daPy_lk_c* daPy_getPlayerLinkActorClass() { return (daPy_lk_c*)dComIfGp_getLinkPlayer(); } @@ -1708,6 +1722,14 @@ inline bool dComIfGp_checkPlayerStatus1(int param_0, u32 flag) { return g_dComIfG_gameInfo.play.checkPlayerStatus(param_0, 1, flag); } +inline void dComIfGp_clearPlayerStatus0(int param_0, u32 flag) { + g_dComIfG_gameInfo.play.clearPlayerStatus(param_0, 0, flag); +} + +inline void dComIfGp_clearPlayerStatus1(int param_0, u32 flag) { + g_dComIfG_gameInfo.play.clearPlayerStatus(param_0, 1, flag); +} + /** * Returns which item is on a specific button. * @param i_btnIdx The index of the button. 0 for X, 1 for Y, 2 for Z. @@ -1836,6 +1858,10 @@ inline s32 dComIfGp_event_moveApproval(void* actor) { return g_dComIfG_gameInfo.play.getEvent().moveApproval(actor); } +inline BOOL dComIfGp_event_compulsory(void* param_1, const char* param_2, u16 param_3) { + return g_dComIfG_gameInfo.play.getEvent().compulsory(param_1, param_2, param_3); +} + inline s32 dComIfGp_event_order(u16 eventType, u16 priority, u16 flag, u16 hind, void* pActor1, void* pActor2, s16 eventID, u8 infoIdx) { return g_dComIfG_gameInfo.play.getEvent().order(eventType, priority, flag, hind, pActor1, pActor2, eventID, infoIdx); } diff --git a/include/d/d_event.h b/include/d/d_event.h index 8a28206f7..0000d745a 100644 --- a/include/d/d_event.h +++ b/include/d/d_event.h @@ -65,7 +65,7 @@ public: void check(); void photoCheck(); s32 moveApproval(void*); - void compulsory(void*, const char*, u16); + BOOL compulsory(void*, const char*, u16); void remove(); void getStageEventDt(); void nextStageEventDt(void*); diff --git a/include/d/d_kankyo.h b/include/d/d_kankyo.h index 014583fec..17f76a82f 100644 --- a/include/d/d_kankyo.h +++ b/include/d/d_kankyo.h @@ -20,7 +20,7 @@ struct LIGHT_INFLUENCE { /* 0x14 */ f32 mPower; /* 0x18 */ f32 mFluctuation; /* 0x1C */ int mIdx; -}; +}; // Size: 0x20 struct EFLIGHT_PROC { /* 0x00 */ u8 mSwordState; diff --git a/include/d/d_particle.h b/include/d/d_particle.h index 9a2024a28..738412454 100644 --- a/include/d/d_particle.h +++ b/include/d/d_particle.h @@ -35,7 +35,7 @@ class dPa_levelEcallBack : public JPACallBackBase { public: virtual ~dPa_levelEcallBack() {} virtual void setup(JPABaseEmitter*, cXyz const*, csXyz const*, s8) = 0; -}; +}; // Size: 0x04 class dPa_followEcallBack : public dPa_levelEcallBack { public: @@ -56,7 +56,7 @@ public: /* 0x11 */ u8 field_0x11; /* 0x12 */ u8 field_0x12; /* 0x13 */ u8 field_0x13; -}; +}; // Size: 0x14 STATIC_ASSERT(sizeof(dPa_followEcallBack) == 0x14); @@ -251,7 +251,7 @@ public: class dPa_cutTurnEcallBack_c : public dPa_levelEcallBack { public: - dPa_cutTurnEcallBack_c(); + dPa_cutTurnEcallBack_c() {} virtual ~dPa_cutTurnEcallBack_c() {} virtual void executeAfter(JPABaseEmitter*); @@ -259,8 +259,8 @@ public: void end(); public: - /* 0x04 */ u8 field_0x04[0x0c]; -}; + /* 0x04 */ u8 field_0x04[0x0C]; +}; // Size: 0x10 STATIC_ASSERT(sizeof(dPa_cutTurnEcallBack_c) == 0x10); diff --git a/include/d/d_stage.h b/include/d/d_stage.h index daedb2706..62884ec77 100644 --- a/include/d/d_stage.h +++ b/include/d/d_stage.h @@ -990,4 +990,10 @@ inline int dStage_FileList_dt_GlobalWindLevel(dStage_FileList_dt_c* i_fili) { return (i_fili->mParam >> 0x12) & 3; } +bool dStage_chkPlayerId(int playerId, int room_no); + +int dStage_changeScene(int i_exitId, f32 speed, u32 mode, s8 room_no); + +void dStage_restartRoom(u32 roomParam, u32 mode); + #endif /* D_D_STAGE_H */ diff --git a/include/m_Do/m_Do_ext.h b/include/m_Do/m_Do_ext.h index d0e7ba739..85e37002d 100644 --- a/include/m_Do/m_Do_ext.h +++ b/include/m_Do/m_Do_ext.h @@ -197,8 +197,11 @@ private: class mDoExt_AnmRatioPack { public: - ~mDoExt_AnmRatioPack(); - mDoExt_AnmRatioPack(); + ~mDoExt_AnmRatioPack() {} + mDoExt_AnmRatioPack() { + mRatio = 0.0f; + mAnmTransform = NULL; + } void setRatio(f32 ratio) { mRatio = ratio; } f32 getRatio() { return mRatio; } @@ -223,6 +226,20 @@ private: class mDoExt_MtxCalcOldFrame { public: + mDoExt_MtxCalcOldFrame(J3DTransformInfo* param_1, Quaternion* param_2) { + mOldFrameTransInfo = param_1; + mOldFrameQuaternion = param_2; + mOldFrameRate = 0.0f; + mOldFrameFlg = false; + field_0x1 = true; + mOldFrameStartJoint = 0; + mOldFrameEndJoint = 0; + mOldFrameMorfCounter = 0.0f; + field_0x8 = 0.0f; + field_0x10 = 0.0f; + field_0x14 = 0.0f; + } + void initOldFrameMorf(f32, u16, u16); void decOldFrameMorfCounter(); @@ -236,6 +253,7 @@ public: private: /* 0x00 */ bool mOldFrameFlg; + /* 0x01 */ bool field_0x1; /* 0x04 */ f32 mOldFrameMorfCounter; /* 0x08 */ f32 field_0x8; /* 0x0C */ f32 mOldFrameRate; @@ -272,6 +290,9 @@ struct mDoExt_MtxCalcAnmBlendTbl : public J3DMtxCalcMaya { struct mDoExt_MtxCalcAnmBlendTblOld : public mDoExt_MtxCalcAnmBlendTbl { mDoExt_MtxCalcAnmBlendTblOld(mDoExt_MtxCalcOldFrame* oldFrame, int num, mDoExt_AnmRatioPack* anmRatio) : mDoExt_MtxCalcAnmBlendTbl(num, anmRatio) { mOldFrame = oldFrame; + mBeforeCallback = NULL; + mAfterCallback = NULL; + field_0x58 = 0; } virtual ~mDoExt_MtxCalcAnmBlendTblOld(); virtual void calc(u16); @@ -284,8 +305,7 @@ struct mDoExt_MtxCalcAnmBlendTblOld : public mDoExt_MtxCalcAnmBlendTbl { /* 0x5C */ mDoExt_MtxCalcOldFrame* mOldFrame; /* 0x60 */ void (*mBeforeCallback)(u32, u16, J3DTransformInfo*, Quaternion*); /* 0x64 */ void (*mAfterCallback)(u32, u16, J3DTransformInfo*, Quaternion*); - -}; // Size: 0x5C +}; // Size: 0x90 class mDoExt_McaMorfCallBack1_c { public: diff --git a/src/d/actor/d_a_player_bow.inc b/src/d/actor/d_a_player_bow.inc index 83273a8a2..024632ee4 100644 --- a/src/d/actor/d_a_player_bow.inc +++ b/src/d/actor/d_a_player_bow.inc @@ -33,7 +33,7 @@ void daPy_lk_c::checkBowReadyAnime() const { } /* 8014A02C-8014A080 .text checkBowAnime__9daPy_lk_cCFv */ -void daPy_lk_c::checkBowAnime() const { +BOOL daPy_lk_c::checkBowAnime() const { /* Nonmatching */ } diff --git a/src/d/actor/d_a_player_grab.inc b/src/d/actor/d_a_player_grab.inc index 497301cc9..267aca93a 100644 --- a/src/d/actor/d_a_player_grab.inc +++ b/src/d/actor/d_a_player_grab.inc @@ -28,7 +28,7 @@ void daPy_lk_c::setWeaponBlur() { } /* 8013A904-8013A97C .text checkGrabBarrelSearch__9daPy_lk_cFi */ -void daPy_lk_c::checkGrabBarrelSearch(int) { +BOOL daPy_lk_c::checkGrabBarrelSearch(int) { /* Nonmatching */ } diff --git a/src/d/actor/d_a_player_main.cpp b/src/d/actor/d_a_player_main.cpp index 8dfc4ee8e..1f0476055 100644 --- a/src/d/actor/d_a_player_main.cpp +++ b/src/d/actor/d_a_player_main.cpp @@ -12,12 +12,18 @@ #include "d/d_com_inf_game.h" #include "d/d_com_lib_game.h" #include "JSystem/JKernel/JKRHeap.h" +#include "d/d_procname.h" +#include "d/d_kankyo.h" +#include "JSystem/JKernel/JKRSolidHeap.h" +#include "JSystem/JUtility/JUTAssert.h" #include "src/d/actor/d_a_player_HIO.inc" +char l_arcName[] = "Link"; + /* 80102E8C-80102EAC .text daPy_createHeap__FP10fopAc_ac_c */ -void daPy_createHeap(fopAc_ac_c*) { - /* Nonmatching */ +static BOOL daPy_createHeap(fopAc_ac_c* i_this) { + return ((daPy_lk_c*)i_this)->createHeap(); } /* 80102F64-80103074 .text calc__13daPy_matAnm_cCFP11J3DMaterial */ @@ -78,7 +84,7 @@ void daPy_lk_c::auraJointCB0(int) { class J3DNode; /* 80103450-80103494 .text daPy_auraCallback__FP7J3DNodei */ -void daPy_auraCallback(J3DNode*, int) { +static BOOL daPy_auraCallback(J3DNode*, int) { /* Nonmatching */ } @@ -88,8 +94,8 @@ void daPy_lk_c::jointBeforeCB(int, J3DTransformInfo*, Quaternion*) { } /* 80103A88-80103AAC .text daPy_jointBeforeCallback__FUlUsP16J3DTransformInfoP10Quaternion */ -void daPy_jointBeforeCallback(u32, u16, J3DTransformInfo*, Quaternion*) { - /* Nonmatching */ +static BOOL daPy_jointBeforeCallback(u32 i_this, u16 param_1, J3DTransformInfo* param_2, Quaternion* param_3) { + ((daPy_lk_c*)i_this)->jointBeforeCB(param_1, param_2, param_3); } /* 80103AAC-80103C1C .text jointAfterCB__9daPy_lk_cFiP16J3DTransformInfoP10Quaternion */ @@ -98,8 +104,8 @@ void daPy_lk_c::jointAfterCB(int, J3DTransformInfo*, Quaternion*) { } /* 80103C1C-80103C40 .text daPy_jointAfterCallback__FUlUsP16J3DTransformInfoP10Quaternion */ -void daPy_jointAfterCallback(u32, u16, J3DTransformInfo*, Quaternion*) { - /* Nonmatching */ +static BOOL daPy_jointAfterCallback(u32 i_this, u16 param_1, J3DTransformInfo* param_2, Quaternion* param_3) { + ((daPy_lk_c*)i_this)->jointAfterCB(param_1, param_2, param_3); } /* 80103C40-80103EE4 .text jointCB0__9daPy_lk_cFi */ @@ -108,7 +114,7 @@ void daPy_lk_c::jointCB0(int) { } /* 80103EE4-80103F28 .text daPy_jointCallback0__FP7J3DNodei */ -void daPy_jointCallback0(J3DNode*, int) { +static BOOL daPy_jointCallback0(J3DNode*, int) { /* Nonmatching */ } @@ -118,18 +124,23 @@ void daPy_lk_c::jointCB1() { } /* 80104178-801041B4 .text daPy_jointCallback1__FP7J3DNodei */ -void daPy_jointCallback1(J3DNode*, int) { +static BOOL daPy_jointCallback1(J3DNode*, int) { /* Nonmatching */ } /* 801041B4-801041EC .text setAnimeHeap__9daPy_lk_cFP12JKRSolidHeap */ -void daPy_lk_c::setAnimeHeap(JKRSolidHeap*) { - /* Nonmatching */ +void daPy_lk_c::setAnimeHeap(JKRSolidHeap* animeHeap) { + animeHeap->freeAll(); + mDoExt_setCurrentHeap(animeHeap); } /* 801041EC-80104240 .text setItemHeap__9daPy_lk_cFv */ void daPy_lk_c::setItemHeap() { - /* Nonmatching */ + if (!checkResetFlg0(daPy_RFLG0_UNK4000)) { + mCurrItemHeapIdx ^= 1; + onResetFlg0(daPy_RFLG0_UNK4000); + } + setAnimeHeap(mpItemHeaps[mCurrItemHeapIdx]); } /* 80104240-80104280 .text setBlurPosResource__9daPy_lk_cFUs */ @@ -298,13 +309,13 @@ void daPy_lk_c::onBodyEffect() { } /* 80107308-80108204 .text draw__9daPy_lk_cFv */ -void daPy_lk_c::draw() { +BOOL daPy_lk_c::draw() { /* Nonmatching */ } /* 80108204-80108224 .text daPy_Draw__FP9daPy_lk_c */ -void daPy_Draw(daPy_lk_c*) { - /* Nonmatching */ +static BOOL daPy_Draw(daPy_lk_c* i_this) { + return ((daPy_lk_c*)i_this)->draw(); } /* 80108224-8010841C .text setAtnList__9daPy_lk_cFv */ @@ -743,8 +754,17 @@ void daPy_lk_c::checkSubjectEnd(int) { } /* 80112280-80112330 .text checkGuardAccept__9daPy_lk_cFv */ -void daPy_lk_c::checkGuardAccept() { - /* Nonmatching */ +BOOL daPy_lk_c::checkGuardAccept() { + if (field_0x3618 & 0x40 && !checkBowAnime()) { + u32 stageType = dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo()); + if (stageType != 2 || + strcmp(dComIfGp_getStartStageName(), "Ojhous") == 0 || + strcmp(dComIfGp_getStartStageName(), "Orichh") == 0) + { + return TRUE; + } + } + return FALSE; } /* 80112330-80112348 .text cancelNoDamageMode__9daPy_lk_cFv */ @@ -1363,7 +1383,7 @@ void daPy_lk_c::setBgCheckParam() { } /* 801200F8-8012010C .text setParamData__9daPy_lk_cFiiii */ -void daPy_lk_c::setParamData(int, int, int, int) { +u32 daPy_lk_c::setParamData(int, int, int, int) { /* Nonmatching */ } @@ -1378,8 +1398,102 @@ void daPy_lk_c::checkFallCode() { } /* 80120724-80120BBC .text startRestartRoom__9daPy_lk_cFUlifi */ -void daPy_lk_c::startRestartRoom(u32, int, f32, int) { - /* Nonmatching */ +BOOL daPy_lk_c::startRestartRoom(u32 param_1, int param_2, f32 param_3, int i_point) { + /* Nonmatching - npc_sarace */ + if (!checkNoResetFlg0(daPyFlg0_UNK4000) && (i_point != 0 || dComIfGp_event_compulsory(this, NULL, -1))) { + mDemo.setOriginalDemoType(); + if (i_point == 0) { + mDemo.setDemoMode(1); + } + onNoResetFlg0(daPyFlg0_UNK4000); + changePlayer(this); + + if (dComIfGp_getMiniGameType() == 1) { + dComIfGp_setNextStage("sea", 1, 48, -1, 0.0f, 0, 1, 0); + mDoAud_seStart(JA_SE_FORCE_BACK, NULL, 0, 0); + // daNpc_Sarace_c::ship_race_result = 3; + field_0x354e = 0; + return TRUE; + } else { + u32 stageType = dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo()); + setDamagePoint(param_3); + field_0x354e = 0; + + if (stageType == 7 && !dComIfGs_isEventBit(0x2A08) && (current.roomNo == 11 || current.roomNo == 44) && dStage_chkPlayerId(0x80, current.roomNo)) { + dComIfGp_setNextStage(dComIfGp_getStartStageName(), 0x80, current.roomNo, -1, 0.0f, param_1, 1, 0); + u32 roomParam = setParamData(-1, 0, param_2, 0); + dComIfGs_setRestartRoomParam(roomParam); + mDoAud_seStart(JA_SE_FORCE_BACK, NULL, 0, 0); + return TRUE; + } + + if (checkNoResetFlg0(daPyFlg0_UNK10) && mCurProc != 0xB2) { + i_point = field_0x34CB; + } else { + i_point = field_0x3594; + if (i_point != 0xFF && !dComIfGs_checkSeaLandingEvent(current.roomNo)) { + i_point = 0xFF; + } + } + + if (i_point == 0xFF) { + if (stageType == 7) { + cXyz* pos; + if (dComIfGp_getShipActor()) { + pos = &((fopAc_ac_c*)dComIfGp_getShipActor())->current.pos; + } else { + pos = ¤t.pos; + } + + int quad_x = (1.0f/50000.0f) * (350000.0f + pos->x); + int quad_z = (1.0f/50000.0f) * (350000.0f + pos->z); + if (quad_x < 0) { + quad_x = 0; + } else if (quad_x > 13) { + quad_x = 13; + } + if (quad_z < 0) { + quad_z = 0; + } else if (quad_z > 13) { + quad_z = 13; + } + + int subsector_z = quad_z & 1; + int subsector_x = quad_x & 1; + int sector_z = quad_z >> 1; + int sector_x = quad_x >> 1; + int sector_num = sector_z*7 + sector_x; + int scls_idx = subsector_x + (sector_num << 2) + (subsector_z << 1); + + dStage_changeScene(scls_idx, 0.0f, param_1, -1); + } else { + if (mCurProc == 0xB2) { + dStage_changeScene(0, 0.0f, param_1, -1); + } else { + int roomNo = dComIfGs_getRestartRoomNo(); + u32 roomParam = setParamData(roomNo, 0, param_2, 0); + dStage_restartRoom(roomParam, param_1); + mDoAud_seStart(JA_SE_FORCE_BACK, NULL, 0, 0); + } + return TRUE; + } + } else if (checkNoResetFlg0(daPyFlg0_UNK10)) { + dComIfGp_setNextStage(dComIfGp_getStartStageName(), i_point, 41, -1, 0.0f, param_1, 1, 0); + } else { + dComIfGp_setNextStage(dComIfGp_getStartStageName(), i_point, current.roomNo, -1, 0.0f, param_1, 1, 0); + } + + if (mCurProc != 0xB2) { + u32 roomParam = setParamData(-1, 0, param_2, 0); + dComIfGs_setRestartRoomParam(roomParam); + mDoAud_seStart(JA_SE_FORCE_BACK, NULL, 0, 0); + } + + return TRUE; + } + } + + return FALSE; } /* 80120BBC-80120BE0 .text checkSuccessGuard__9daPy_lk_cFi */ @@ -1413,28 +1527,89 @@ void daPy_lk_c::checkRoofRestart() { } /* 80121870-80122D30 .text execute__9daPy_lk_cFv */ -void daPy_lk_c::execute() { +BOOL daPy_lk_c::execute() { /* Nonmatching */ } /* 80122D30-80122D50 .text daPy_Execute__FP9daPy_lk_c */ -void daPy_Execute(daPy_lk_c*) { - /* Nonmatching */ +static BOOL daPy_Execute(daPy_lk_c* i_this) { + return ((daPy_lk_c*)i_this)->execute(); } /* 80122D50-80122D58 .text daPy_IsDelete__FP9daPy_lk_c */ -void daPy_IsDelete(daPy_lk_c*) { - /* Nonmatching */ +static BOOL daPy_IsDelete(daPy_lk_c*) { + return TRUE; } /* 80122D58-80123058 .text playerDelete__9daPy_lk_cFv */ -void daPy_lk_c::playerDelete() { +BOOL daPy_lk_c::playerDelete() { /* Nonmatching */ + for (int i = 0; i < (int)ARRAY_SIZE(field_0x31e8); i++) { + daPy_footEffect_c* footEffect = &field_0x31e8[i]; + footEffect->mSmokeCb.end(); + footEffect->mFollowCb.end(); + } + if (mFanSwingCb.mpEmitter) { + mFanSwingCb.mpEmitter->clearStatus(0x40); + mFanSwingCb.mpEmitter->setEmitterCallBackPtr(NULL); + mFanSwingCb.mpEmitter = NULL; + } + field_0x338c.end(); + field_0x33a8.end(); + field_0x3280.end(); + field_0x334C.end(); + field_0x336C.end(); + mSwimTailEcallBack[0].remove(); + mSwimTailEcallBack[1].remove(); + field_0x32e4.end(); + field_0x32f0.end(); + field_0x33E8.end(); + mSmokeEcallBack.end(); + field_0x331C.end(); + field_0x332C.end(); + field_0x333C.end(); + field_0x3400.end(); + field_0x3410.end(); + field_0x3438.end(); + field_0x342C.end(); + field_0x3454.end(); + field_0x3460[0].end(); + field_0x3460[1].end(); + + endDamageEmitter(); + dKy_plight_cut(&field_0x3498); + mDoAud_seDeleteObject(&mSwordTopPos); + mDoAud_seDeleteObject(&mRopePos); + mDoAud_seDeleteObject(&field_0x338c.field_0x08); + mDoAud_seDeleteObject(&field_0x488c.GetEndP()); + + for (int i = 0; i < (int)ARRAY_SIZE(m_anm_heap_under); i++) { + mDoExt_destroySolidHeap(m_anm_heap_under[i].mpAnimeHeap); + } + for (int i = 0; i < (int)ARRAY_SIZE(m_anm_heap_upper); i++) { + mDoExt_destroySolidHeap(m_anm_heap_upper[i].mpAnimeHeap); + } + + mDoExt_destroySolidHeap(mpTextureAnimeResHeap); + mDoExt_destroySolidHeap(mpTextureScrollResHeap); + mDoExt_destroySolidHeap(mpItemHeaps[0]); + mDoExt_destroySolidHeap(mpItemHeaps[1]); + mDoExt_destroySolidHeap(field_0x2ECC); + + mJAIZelAnime.stop(); + + dComIfGp_clearPlayerStatus0(0, 0x00400000); // Waiting for the boomerang to come back + dComIfGp_clearPlayerStatus1(0, 0x00040000); + g_dComIfG_gameInfo.play.field_0x4947 = 0; + + cancelNoDamageMode(); + + return TRUE; } /* 80123058-80123078 .text daPy_Delete__FP9daPy_lk_c */ -void daPy_Delete(daPy_lk_c*) { - /* Nonmatching */ +static BOOL daPy_Delete(daPy_lk_c* i_this) { + return ((daPy_lk_c*)i_this)->playerDelete(); } /* 80123078-80123360 .text initTextureAnime__9daPy_lk_cFv */ @@ -1448,8 +1623,133 @@ void daPy_lk_c::initTextureScroll() { } /* 80123834-8012469C .text createHeap__9daPy_lk_cFv */ -void daPy_lk_c::createHeap() { - /* Nonmatching */ +BOOL daPy_lk_c::createHeap() { + /* Nonmatching - data offsets */ + J3DModelData* tmp_modelData; + J3DAnmTransform* bck; + J3DAnmTevRegKey* brk; + int ret; + + mpCLModelData = initModel(&mpCLModel, LINK_BDL_CL, 0x37221222); + tmp_modelData = initModel(&mpHandsModel, LINK_BDL_HANDS, 0x37221222); + tmp_modelData = initModel(&mpKatsuraModel, LINK_BDL_KATSURA, 0x37221222); + tmp_modelData = initModel(&mpYamuModel, LINK_BDL_YAMU, 0x37221222); + tmp_modelData = initModel(&mpPringModel, LINK_BDL_PRING, 0x37221222); + tmp_modelData = initModel(&mpSwgripaModel, LINK_BDL_SWGRIPA, 0x37221222); + + tmp_modelData = initModel(&mpSwgripmsModel, LINK_BDL_SWGRIPMS, 0x37221222); + bck = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, LINK_BCK_SWGRIPMSAB); + ret = mSwgripmsabBckAnim.init(mpSwgripmsModel->getModelData(), bck, false, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false); + if (!ret) { JUT_ASSERT(21046, 0); } + mpTswgripmsabBrk = entryBrk(tmp_modelData, LINK_BRK_TSWGRIPMSAB); + mpTswgripmsBtk = entryBtk(tmp_modelData, LINK_BTK_TSWGRIPMS); + + tmp_modelData = initModel(&mpPodmsModel, LINK_BDL_PODMS, 0x37221222); + + tmp_modelData = initModel(&mpShaModel, LINK_BDL_SHA, 0x37221222); + bck = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, LINK_BCK_ATNGSHA); + ret = mAtngshaBck.init(mpShaModel->getModelData(), bck, false, J3DFrameCtrl::LOOP_ONCE_e, 1.0f, 0, -1, false); + if (!ret) { JUT_ASSERT(21063, 0); } + + tmp_modelData = initModel(&mpShmsModel, LINK_BDL_SHMS, 0x37221222); + mpTshmsBtk = entryBtk(tmp_modelData, LINK_BTK_TSHMS); + J3DSkinDeform* shmsSkinDeform = new J3DSkinDeform(); + if (!shmsSkinDeform) { JUT_ASSERT(21077, 0); } + if (!mpShmsModel->setSkinDeform(shmsSkinDeform, 1)) { JUT_ASSERT(21080, 0); } + + tmp_modelData = initModel(&mpYmsls00Model, LINK_BDL_YMSLS00, 0x13000222); + mpYmsls00Btk = entryBtk(tmp_modelData, LINK_BTK_YMSLS00); + + tmp_modelData = initModel(&mpHbootsModelRightFoot, LINK_BDL_HBOOTS, 0x37221222); + tmp_modelData = initModel(&mpHbootsModelLeftFoot, LINK_BDL_HBOOTS, 0x37221222); + + tmp_modelData = initModel(&mpSuimenMunyaModel, LINK_BDL_SUIMEN_MUNYA, 0x11001222); + mpSuimenMunyaBtk = entryBtk(tmp_modelData, LINK_BTK_SUIMEN_MUNYA); + + tmp_modelData = initModel(&mpYuchw00Model, LINK_BDL_YUCHW00, 0x13000222); + bck = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, LINK_BCK_YUCHW00); + ret = mYuchw00Bck.init(tmp_modelData, bck, 1, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false); + if (!ret) { JUT_ASSERT(21113, 0); } + mpYuchw00Btk = entryBtk(tmp_modelData, LINK_BTK_YUCHW00); + mpYuchw00Brk = entryBrk(tmp_modelData, LINK_BRK_YUCHW00); + mpYuchw00Brk->setFrame(mpYuchw00Brk->getFrameMax()-0.001f); + + tmp_modelData = initModel(&mpYbafo00Model, LINK_BDL_YBAFO00, 0x13000222); + mpYbafo00Btk = entryBtk(tmp_modelData, LINK_BTK_YBAFO00); + mpYbafo00Btk->setFrame(mpYbafo00Btk->getFrameMax()-0.001f); + + tmp_modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, LINK_BDL_YAURA00); + JUT_ASSERT(21130, tmp_modelData != 0); + daPy_aura_c* aura_p = mMagicArmorAuraEntries; + for (int i = 0; i < 6; i++) { + aura_p->setModel(mDoExt_J3DModel__create(tmp_modelData, 0x00080000, 0x11001222)); + JUT_ASSERT(21139, aura_p->getModel() != 0); + aura_p++; + } + mpYaura00Btk = entryBtk(tmp_modelData, LINK_BTK_YAURA00); + brk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, LINK_BRK_YAURA00_R); + ret = mYaura00rBrk.init(tmp_modelData, brk, false, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false, 0); + if (!ret) { JUT_ASSERT(21147, 0); } + mYaura00rBrk.setFrame(0.0f); + + tmp_modelData = initModel(&mpYmgcs00Model, LINK_BDL_YMGCS00, 0x11001222); + mpYmgcs00Btk = entryBtk(tmp_modelData, LINK_BTK_YMGCS00); + brk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, LINK_BRK_YMGCS00_MS); + ret = mYmgcs00Brk.init(tmp_modelData, brk, false, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, false, 0); + if (!ret) { JUT_ASSERT(21161, 0); } + mYmgcs00Brk.setFrame(0.0f); + + tmp_modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, LINK_BDL_BOMB); + JUT_ASSERT(21169, tmp_modelData != 0); + mpBombBrk = entryBrk(tmp_modelData, LINK_BRK_BOMB); + + tmp_modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, LINK_BDL_GWP00); + JUT_ASSERT(21176, tmp_modelData != 0); + mpGwp00BrkData = entryBrk(tmp_modelData, LINK_BRK_GWP00); + mpGwp00BtkData = entryBtk(tmp_modelData, LINK_BTK_GWP00); + + tmp_modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, LINK_BDL_ARROW); + JUT_ASSERT(21184, tmp_modelData != 0); + mpIceArrowBtk = entryBtk(tmp_modelData, LINK_BTK_TTIPICE); + + tmp_modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, LINK_BDL_ARROWGLITTER); + JUT_ASSERT(21191, tmp_modelData != 0); + mpLightArrowBtk = entryBtk(tmp_modelData, LINK_BTK_TARROWGLITTER); + + tmp_modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, LINK_BDL_GICER00); + JUT_ASSERT(21198, tmp_modelData != 0); + mpGicer00Btk = entryBtk(tmp_modelData, LINK_BTK_GICER00); + + tmp_modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, LINK_BDL_GICER01); + JUT_ASSERT(21198, tmp_modelData != 0); + mpGicer01Btk = entryBtk(tmp_modelData, LINK_BTK_GICER01); + + const int numCLJoints = 0x2A; + m_old_fdata = new mDoExt_MtxCalcOldFrame(new J3DTransformInfo[numCLJoints], new Quaternion[numCLJoints]); + JUT_ASSERT(21233, m_old_fdata != 0); + + m_pbCalc[PART_UNDER_e] = new mDoExt_MtxCalcAnmBlendTblOld(m_old_fdata, ARRAY_SIZE(mAnmRatioUnder), mAnmRatioUnder); + JUT_ASSERT(21239, m_pbCalc[PART_UNDER_e] != 0); + + m_pbCalc[PART_UPPER_e] = new mDoExt_MtxCalcAnmBlendTblOld(m_old_fdata, ARRAY_SIZE(mAnmRatioUpper), mAnmRatioUpper); + JUT_ASSERT(21245, m_pbCalc[PART_UPPER_e] != 0); + + initTextureScroll(); + initTextureAnime(); + + m_HIO = new daPy_HIO_c(); + JUT_ASSERT(21254, m_HIO != 0); + + m_anm_heap_under[UNDER_MOVE0_e].m_buffer = new(0x20) u8[0xB400]; + JUT_ASSERT(21259, m_anm_heap_under[UNDER_MOVE0_e].m_buffer != 0); + + m_sanm_buffer = new(0x20) u8[0x200]; + JUT_ASSERT(21266, m_sanm_buffer != 0); + + m_item_bck_buffer = new(0x20) u8[0x1000]; + JUT_ASSERT(21269, m_item_bck_buffer != 0); + + return TRUE; } /* 8012469C-801249F8 .text createAnimeHeap__9daPy_lk_cFPP12JKRSolidHeapQ29daPy_lk_c14daPy_HEAP_TYPE */ @@ -1458,17 +1758,17 @@ void daPy_lk_c::createAnimeHeap(JKRSolidHeap**, daPy_lk_c::daPy_HEAP_TYPE) { } /* 80124A40-80124B30 .text initModel__9daPy_lk_cFPP8J3DModeliUl */ -void daPy_lk_c::initModel(J3DModel**, int, u32) { +J3DModelData* daPy_lk_c::initModel(J3DModel**, int, u32) { /* Nonmatching */ } /* 80124B30-80124BE4 .text entryBtk__9daPy_lk_cFP12J3DModelDatai */ -void daPy_lk_c::entryBtk(J3DModelData*, int) { +J3DAnmTextureSRTKey* daPy_lk_c::entryBtk(J3DModelData*, int) { /* Nonmatching */ } /* 80124BE4-80124C98 .text entryBrk__9daPy_lk_cFP12J3DModelDatai */ -void daPy_lk_c::entryBrk(J3DModelData*, int) { +J3DAnmTevRegKey* daPy_lk_c::entryBrk(J3DModelData*, int) { /* Nonmatching */ } @@ -1478,8 +1778,8 @@ void daPy_lk_c::playerInit() { } int phase_1(daPy_lk_c* i_this) { - g_dComIfG_gameInfo.play.mpPlayer[0] = i_this; - g_dComIfG_gameInfo.play.mpPlayerPtr[0] = i_this; + dComIfGp_setPlayer(0, i_this); + dComIfGp_setLinkPlayer(i_this); fopAcM_setStageLayer(i_this); i_this->mAttentionInfo.mFlags = 0xFFFFFFFF; @@ -1494,7 +1794,7 @@ int phase_1(daPy_lk_c* i_this) { int phase_2(daPy_lk_c* i_this) { int result; - if (g_dComIfG_gameInfo.play.mCameraInfo[g_dComIfG_gameInfo.play.mCurCamera[0]].mpCamera == NULL) { + if (dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)) == NULL) { result = cPhs_INIT_e; } else { fopAcM_SetupActor(i_this, daPy_lk_c); @@ -1531,7 +1831,7 @@ int phase_3(daPy_lk_c* i_this) { return i_this->makeBgWait(); } -void daPy_Create(fopAc_ac_c* i_this) { +static s32 daPy_Create(fopAc_ac_c* i_this) { static int (*l_method[3])(void*) = { (int (*)(void*))phase_1, (int (*)(void*))phase_2, @@ -1539,7 +1839,7 @@ void daPy_Create(fopAc_ac_c* i_this) { }; daPy_lk_c* player_link = (daPy_lk_c*)i_this; - dComLbG_PhaseHandler(&player_link->mPhsLoad, l_method, player_link); + return dComLbG_PhaseHandler(&player_link->mPhsLoad, l_method, player_link); } /* 80127BA0-80127CC0 .text setSeAnime__9daPy_lk_cFPC14daPy_anmHeap_cP12J3DFrameCtrl */ @@ -1689,3 +1989,28 @@ BOOL daPy_lk_c::getBokoFlamePos(cXyz*) { #include "src/d/actor/d_a_player_food.inc" #include "src/d/actor/d_a_player_sword.inc" + +actor_method_class l_daPy_Method = { + (process_method_func)daPy_Create, + (process_method_func)daPy_Delete, + (process_method_func)daPy_Execute, + (process_method_func)daPy_IsDelete, + (process_method_func)daPy_Draw, +}; + +actor_process_profile_definition g_profile_PLAYER = { + /* LayerID */ fpcLy_CURRENT_e, + /* ListID */ 5, + /* ListPrio */ fpcLy_CURRENT_e, + /* ProcName */ PROC_PLAYER, + /* Proc SubMtd */ &g_fpcLf_Method.mBase, + /* Size */ sizeof(daPy_lk_c), + /* SizeOther */ 0, + /* Parameters */ 0, + /* Leaf SubMtd */ &g_fopAc_Method.base, + /* Priority */ 0x0068, + /* Actor SubMtd */ &l_daPy_Method, + /* Status */ fopAcStts_FREEZE_e, + /* Group */ fopAc_PLAYER_e, + /* CullType */ fopAc_CULLBOX_0_e, +}; diff --git a/src/d/actor/d_a_player_particle.inc b/src/d/actor/d_a_player_particle.inc index 31a6baf78..a9d393ef4 100644 --- a/src/d/actor/d_a_player_particle.inc +++ b/src/d/actor/d_a_player_particle.inc @@ -78,18 +78,29 @@ void daPy_followEcallBack_c::execute(JPABaseEmitter*) { } /* 80129F98-80129FA0 .text setup__22daPy_followEcallBack_cFP14JPABaseEmitterPC4cXyzPC5csXyzSc */ -void daPy_followEcallBack_c::setup(JPABaseEmitter*, const cXyz*, const csXyz*, s8) { - /* Nonmatching */ +void daPy_followEcallBack_c::setup(JPABaseEmitter* emitter, const cXyz*, const csXyz*, s8) { + mpEmitter = emitter; } /* 80129FA0-80129FD4 .text end__22daPy_followEcallBack_cFv */ void daPy_followEcallBack_c::end() { - /* Nonmatching */ + if (mpEmitter) { + mpEmitter->becomeInvalidEmitter(); + mpEmitter->setEmitterCallBackPtr(NULL); + mpEmitter = NULL; + } } /* 80129FD4-8012A040 .text execute__25daPy_waterDropEcallBack_cFP14JPABaseEmitter */ -void daPy_waterDropEcallBack_c::execute(JPABaseEmitter*) { - /* Nonmatching */ +void daPy_waterDropEcallBack_c::execute(JPABaseEmitter* emitter) { + daPy_followEcallBack_c::execute(emitter); + bool shouldEnd = false; + if (emitter->checkStatus(0x08) && emitter->getParticleNumber() == 0) { + shouldEnd = true; + } + if (shouldEnd) { + end(); + } } /* 8012A040-8012A058 .text setup__25daPy_waterDropEcallBack_cFP14JPABaseEmitterPC4cXyzPC5csXyzSc */ diff --git a/src/d/d_stage.cpp b/src/d/d_stage.cpp index e70ebcda0..ae9aab23b 100644 --- a/src/d/d_stage.cpp +++ b/src/d/d_stage.cpp @@ -1221,7 +1221,7 @@ void dStage_playerInitIkada(fopAcM_prm_class*, void*) { } /* 800419D0-80041AEC .text dStage_chkPlayerId__Fii */ -u32 dStage_chkPlayerId(int playerId, int room_no) { +bool dStage_chkPlayerId(int playerId, int room_no) { stage_actor_class * player; if (room_no == -1) { @@ -1232,14 +1232,14 @@ u32 dStage_chkPlayerId(int playerId, int room_no) { } if (player == NULL) - return FALSE; + return false; stage_actor_data_class * actor = player->m_entries; for (int i = 0; i < player->num; i++, actor++) if ((u8)actor->mAngle.z == playerId) - return TRUE; + return true; - return FALSE; + return false; } /* 80041AF4-80041E84 .text dStage_playerInit__FP11dStage_dt_cPviPv */ @@ -2061,8 +2061,6 @@ void dStage_roomControl_c::SetTimePass(int i_timepass) { m_time_pass = i_timepass; } -int dStage_changeScene(int i_exitId, f32 speed, u32 mode, s8 room_no); - static inline s8 IkadaGetRoomNoArg0(fopAc_ac_c* i_actor) { return (fopAcM_GetParam(i_actor) >> 4) & 0x3F; }