From c8ee25ec81e3b3e0353fe8e1db9d76096a4c2d54 Mon Sep 17 00:00:00 2001 From: TakaRikka <38417346+TakaRikka@users.noreply.github.com> Date: Tue, 21 Dec 2021 06:06:57 -0800 Subject: [PATCH] wip --- .../JSystem/J3DGraphAnimator/J3DAnimation.h | 6 + include/JSystem/J3DGraphLoader/J3DAnmLoader.h | 6 +- include/JSystem/JSupport/JSUInputStream.h | 5 + include/SSystem/SComponent/c_math.h | 4 + include/d/a/d_a_alink.h | 22 +- include/d/a/d_a_player.h | 52 +- include/d/bg/d_bg_s.h | 2 +- include/d/bg/d_bg_w.h | 4 +- include/d/bg/d_bg_w_base.h | 2 +- include/d/bg/d_bg_w_kcol.h | 2 +- include/d/com/d_com_inf_game.h | 219 ++++++++- include/d/d_resorce.h | 6 +- include/d/d_stage.h | 7 +- include/d/event/d_event.h | 2 + include/d/kankyo/d_kankyo.h | 1 + include/d/meter/d_meter2.h | 50 +- include/d/meter/d_meter2_draw.h | 40 +- include/d/meter/d_meter2_info.h | 30 +- include/d/meter/d_meter_HIO.h | 6 + include/d/meter/d_meter_map.h | 6 +- include/d/pane/d_pane_class.h | 6 + include/d/save/d_save.h | 5 +- include/m_Do/m_Do_ext.h | 12 + libs/JSystem/J2DGraph/J2DScreen.cpp | 16 + libs/JSystem/J3DGraphLoader/J3DAnmLoader.cpp | 2 +- src/d/a/d_a_alink.cpp | 140 +++++- src/d/a/d_a_player.cpp | 460 +++++++++--------- src/d/bg/d_bg_s.cpp | 2 +- src/d/bg/d_bg_w.cpp | 2 +- src/d/bg/d_bg_w_kcol.cpp | 2 +- src/d/com/d_com_inf_game.cpp | 2 +- src/d/d_resorce.cpp | 9 +- src/d/d_stage.cpp | 8 +- src/d/kankyo/d_kankyo.cpp | 2 +- src/d/meter/d_meter2.cpp | 434 +++++++++++++++-- src/d/meter/d_meter2_draw.cpp | 120 +++-- src/d/meter/d_meter_HIO.cpp | 60 +-- src/d/meter/d_meter_map.cpp | 2 +- src/d/save/d_save.cpp | 8 +- 39 files changed, 1287 insertions(+), 477 deletions(-) diff --git a/include/JSystem/J3DGraphAnimator/J3DAnimation.h b/include/JSystem/J3DGraphAnimator/J3DAnimation.h index 18ff4ee9e2..a745ef473a 100644 --- a/include/JSystem/J3DGraphAnimator/J3DAnimation.h +++ b/include/JSystem/J3DGraphAnimator/J3DAnimation.h @@ -40,6 +40,12 @@ private: }; // Size: 0x20 class J3DAnmTransformKey : public J3DAnmTransform { +public: + J3DAnmTransformKey() : J3DAnmTransform(0, NULL, NULL, NULL) { + field_0x20 = 0; + field_0x24 = 0; + } + /* 80329A34 */ void calcTransform(f32, u16, J3DTransformInfo*) const; /* 8003B8D0 */ virtual ~J3DAnmTransformKey(); diff --git a/include/JSystem/J3DGraphLoader/J3DAnmLoader.h b/include/JSystem/J3DGraphLoader/J3DAnmLoader.h index 265bc83c18..46e36e70c1 100644 --- a/include/JSystem/J3DGraphLoader/J3DAnmLoader.h +++ b/include/JSystem/J3DGraphLoader/J3DAnmLoader.h @@ -3,12 +3,14 @@ #include "dolphin/types.h" -struct J3DAnmLoaderDataBaseFlag {}; +enum J3DAnmLoaderDataBaseFlag { + UNK_FLAG0 +}; struct J3DAnmBase; struct J3DAnmLoaderDataBase { - /* 80337B40 */ void load(void const*, J3DAnmLoaderDataBaseFlag); + /* 80337B40 */ static void* load(void const*, J3DAnmLoaderDataBaseFlag); /* 80338134 */ void setResource(J3DAnmBase*, void const*); }; diff --git a/include/JSystem/JSupport/JSUInputStream.h b/include/JSystem/JSupport/JSUInputStream.h index 3c4968b66a..5b7a7e0f6e 100644 --- a/include/JSystem/JSupport/JSUInputStream.h +++ b/include/JSystem/JSupport/JSUInputStream.h @@ -47,4 +47,9 @@ public: /* 802DC298 */ s32 read(void*, s32); }; // Size = 0x8 + +// move? +template +T* JSUConvertOffsetToPtr(const void*, const void*); + #endif /* JSUINPUTSTREAM_H */ diff --git a/include/SSystem/SComponent/c_math.h b/include/SSystem/SComponent/c_math.h index 632fa9091e..1ea9516d83 100644 --- a/include/SSystem/SComponent/c_math.h +++ b/include/SSystem/SComponent/c_math.h @@ -25,4 +25,8 @@ inline f32 cM_ssin(s16 s) { return JMath::sincosTable_.table[static_cast(s) >> 3].a1; } +inline s16 cM_deg2s(f32 val) { + return val * 182.04445f; +} + #endif /* C_MATH_H */ diff --git a/include/d/a/d_a_alink.h b/include/d/a/d_a_alink.h index d906fe333e..67d3789c63 100644 --- a/include/d/a/d_a_alink.h +++ b/include/d/a/d_a_alink.h @@ -184,6 +184,8 @@ public: /* 0xBF */ ANM_BACKWARD_SLIDE_LAND, /* 0xC0 */ ANM_FORWARD_SLIDE_LAND, + /* 0xFD */ ANM_TRANSFORM_WOLF = 0xFD, // verify + /* 0x18D */ ANM_CUT_JUMP_LARGE = 0x18D, // verify ANM_GANON_FINISH = 408 // name probably wrong, fix later }; @@ -199,7 +201,9 @@ public: enum daAlink_WARP_MAT_MODE {}; enum daAlink_WANM { - /* 0x5E */ ANM_WOLF_HOWL_SUCCESS = 94 + /* 0x5E */ ANM_WOLF_HOWL_SUCCESS = 94, + + /* 0x70 */ ANM_TRANFORM_HUMAN = 0x70, // verify }; enum MODE_FLG { @@ -446,7 +450,7 @@ public: /* 800A142C */ void getNeckAimAngle(cXyz*, s16*, s16*, s16*, s16*); /* 800A1AEC */ void setEyeMove(cXyz*, s16, s16); /* 800A1F90 */ void setNeckAngle(); - /* 800A2198 */ void commonLineCheck(cXyz*, cXyz*); + /* 800A2198 */ bool commonLineCheck(cXyz*, cXyz*); /* 800A21E0 */ static s16 getMoveBGActorName(cBgS_PolyInfo&, int); /* 800A2280 */ void checkGoronRide(); /* 800A22E8 */ void setMoveSlantAngle(); @@ -1029,7 +1033,7 @@ public: /* 800E01A0 */ bool checkBossBabaRoom(); /* 800E01CC */ void cancelBoomerangLock(fopAc_ac_c*); /* 800E0210 */ fopAc_ac_c* getBoomerangActor(); - /* 800E0244 */ void checkBoomerangChargeEnd(); + /* 800E0244 */ bool checkBoomerangChargeEnd(); /* 800E02B8 */ void checkBoomerangCarry(fopAc_ac_c*); /* 800E03D0 */ void initBoomerangUpperAnimeSpeed(int); /* 800E0440 */ BOOL checkBoomerangAnime() const; @@ -2323,9 +2327,14 @@ public: return mNowAnmPack[param_0].getAnmTransform(); } void setFacePriBck(u16 param_0) { setFaceBck(param_0, 1, 0xFFFF); } + void cancelFmChainGrabFromOut() { + field_0x2fa3 = 0; + field_0x2844.clearData(); + } BOOL i_checkReinRide() const { return mRideStatus == 1 || mRideStatus == 2; } + inline void startRestartRoomFromOut(int, u32, int); inline u16 getReadyItem(); static u8 const m_mainBckShield[80]; @@ -4518,6 +4527,13 @@ public: void onEndResetStateFlg0(daMidna_ERFLG0 pFlg) { mEndResetStateFlg0 |= pFlg; } u32 checkStateFlg1(daMidna_FLG1 pFlg) const { return mStateFlg1 & pFlg; } + void setFaceNum(int num) { mFaceNum = num; } + void setMotionNum(int num) { mMotionNum = num; } + bool checkDemoTypeNone() const { return mDemoType == 0; } + void changeOriginalDemo() { mDemoType = 3; } + void changeDemoMode(u32 mode) { mDemoMode = mode; } + + inline bool checkMidnaRealBody(); static u8 const m_texDataTable[84]; static u8 const m_anmDataTable[636]; diff --git a/include/d/a/d_a_player.h b/include/d/a/d_a_player.h index fa7b20ef7b..f1927e216b 100644 --- a/include/d/a/d_a_player.h +++ b/include/d/a/d_a_player.h @@ -26,8 +26,8 @@ private: /* 0x05 */ u8 field_0x5[3]; /* 0x08 */ cXyz mPos; /* 0x14 */ Mtx field_0x14; - /* 0x44 */ ResTIMG* field_0x44; - /* 0x48 */ ResTIMG* field_0x48; + /* 0x44 */ ResTIMG* mpImg; + /* 0x48 */ u8* mpData; }; class daPy_boomerangMove_c { @@ -53,10 +53,10 @@ public: void initData(); void* mallocBuffer(); void createHeap(daPy_anmHeap_c::daAlinkHEAP_TYPE); - J3DAnmBase* loadData(u16); - J3DAnmBase* loadDataIdx(u16); - J3DAnmBase* loadDataPriIdx(u16); - J3DAnmBase* loadDataDemoRID(u16, u16); + void* loadData(u16); + void* loadDataIdx(u16); + void* loadDataPriIdx(u16); + void* loadDataDemoRID(u16, u16); JKRHeap* setAnimeHeap(); u16 getIdx() const { return mIdx; } @@ -126,6 +126,7 @@ public: u16 getDemoType() const { return mDemoType; } void setDemoMode(u32 mode) { mDemoMode = mode; } u32 getDemoMode() const { return mDemoMode; } + int getParam1() const { return mParam1; } void i_setSpecialDemoType() { setDemoType(5); } private: @@ -189,7 +190,7 @@ public: FLG0_UNK_20 = 0x20, UNK_F_ROLL_CRASH_2 = 0x10, UNK_F_ROLL_CRASH_1 = 0x8, - FLG0_UNK_4 = 4, + MIDNA_RIDE = 4, HEAVY_STATE_BOOTS = FLG0_UNK_40000000 | EQUIP_HEAVY_BOOTS | FLG0_UNK_20000, }; @@ -212,6 +213,7 @@ public: ERFLG0_UNK_8000000 = 0x8000000, ERFLG0_UNK_1000000 = 0x1000000, ERFLG0_UNK_100000 = 0x100000, + ERFLG0_UNK_2 = 2, ERFLG0_UNK_1 = 1, }; enum daPy_ERFLG1 { @@ -262,10 +264,10 @@ public: }; static u32 setParamData(int, int, int, int); - int checkFishingRodItem(int); + static BOOL checkFishingRodItem(int); static BOOL checkBombItem(int); static BOOL checkBottleItem(int); - void checkDrinkBottleItem(int); + static BOOL checkDrinkBottleItem(int); static BOOL checkOilBottleItem(int); static BOOL checkOpenBottleItem(int); static BOOL checkBowItem(int); @@ -276,25 +278,25 @@ public: void checkWoodShieldEquip(); f32 getAttentionOffsetY(); s16 checkNowWolfEyeUp(); - void forceRestartRoom(int, u32, int); - void setFmChainPos(fopAc_ac_c*, cXyz*, int); - void cancelFmChainGrab(); - void setLookPos(cXyz*); - void setPlayerSe(u32); - void linkGrabSubjectNoDraw(fopAc_ac_c*); + static void forceRestartRoom(int, u32, int); + static void setFmChainPos(fopAc_ac_c*, cXyz*, int); + static void cancelFmChainGrab(); + static void setLookPos(cXyz*); + static void setPlayerSe(u32); + static bool linkGrabSubjectNoDraw(fopAc_ac_c*); void wolfGrabSubjectNoDraw(fopAc_ac_c*); - void checkRoomRestartStart(); + static bool checkRoomRestartStart(); static u32 checkCarryStartLightBallA(); static u32 checkCarryStartLightBallB(); float getSpinnerRideSpeed() const; void checkSpinnerReflectEffect(); - void checkBoomerangCharge(); + static bool checkBoomerangCharge(); bool checkBoomerangChargeTime(); static daBoomerang_c* getThrowBoomerangActor(); - void cancelBoomerangLockActor(fopAc_ac_c*); - void setPlayerDamage(int, int); - void setMidnaMotionNum(int); - void setMidnaFaceNum(int); + static void cancelBoomerangLockActor(fopAc_ac_c*); + static void setPlayerDamage(int, int); + static void setMidnaMotionNum(int); + static void setMidnaFaceNum(int); int checkNoResetFlg0(daPy_FLG0) const; int checkEquipHeavyBoots() const; int checkBoarSingleBattle() const; @@ -517,18 +519,20 @@ public: int i_checkEndResetFlg0(daPy_py_c::daPy_ERFLG0 flag) const { return mEndResetFlg0 & flag; } int i_checkEndResetFlg1(daPy_py_c::daPy_ERFLG1 flag) const { return mEndResetFlg1 & flag; } void i_onEndResetFlg1(daPy_ERFLG1 pFlg) { mEndResetFlg1 |= pFlg; } - int i_checkWolf() const { return i_checkNoResetFlg1(IS_WOLF); } + u32 i_checkWolf() const { return i_checkNoResetFlg1(IS_WOLF); } BOOL i_checkEquipHeavyBoots() const { return i_checkNoResetFlg0(EQUIP_HEAVY_BOOTS); } BOOL i_checkMagneBootsOn() const { return i_checkNoResetFlg0(MAGNE_BOOTS_ON); } - bool i_checkMidnaRide() const { return i_checkNoResetFlg0(FLG0_UNK_4); } + bool i_checkMidnaRide() const { return i_checkNoResetFlg0(MIDNA_RIDE); } - inline u32 getLastSceneMode(); + inline static u32 getLastSceneMode(); inline bool checkWoodSwordEquip(); inline BOOL i_checkSwordGet(); inline bool i_checkShieldGet() const; inline BOOL checkNowWolf(); inline bool checkZoraWearFlg() const; + static daMidna_c* getMidnaActor() { return m_midnaActor; } + static daMidna_c* m_midnaActor; }; diff --git a/include/d/bg/d_bg_s.h b/include/d/bg/d_bg_s.h index 0f8b51946b..1c8160c9ab 100644 --- a/include/d/bg/d_bg_s.h +++ b/include/d/bg/d_bg_s.h @@ -75,7 +75,7 @@ public: bool GetMagnetCode(cBgS_PolyInfo const&); bool GetMonkeyBarsCode(cBgS_PolyInfo const&); bool GetUnderwaterRoofCode(cBgS_PolyInfo const&); - bool GetWallCode(cBgS_PolyInfo const&); + s32 GetWallCode(cBgS_PolyInfo const&); bool GetPolyAtt0(cBgS_PolyInfo const&); bool GetPolyAtt1(cBgS_PolyInfo const&); bool GetGroundCode(cBgS_PolyInfo const&); diff --git a/include/d/bg/d_bg_w.h b/include/d/bg/d_bg_w.h index 121895ba9e..02d8cf7287 100644 --- a/include/d/bg/d_bg_w.h +++ b/include/d/bg/d_bg_w.h @@ -124,7 +124,7 @@ public: virtual void GetShdwThrough(int) = 0; virtual bool GetUnderwaterRoofCode(int) = 0; virtual bool GetMonkeyBarsCode(cBgS_PolyInfo const&) = 0; - virtual bool GetWallCode(cBgS_PolyInfo const&) = 0; + virtual s32 GetWallCode(cBgS_PolyInfo const&) = 0; virtual bool GetPolyAtt0(cBgS_PolyInfo const&) = 0; virtual bool GetPolyAtt1(cBgS_PolyInfo const&) = 0; virtual bool GetGroundCode(cBgS_PolyInfo const&) = 0; @@ -224,7 +224,7 @@ public: /* 8007B630 */ virtual bool GetUnderwaterRoofCode(int); /* 8007B4B4 */ virtual bool GetMonkeyBarsCode(cBgS_PolyInfo const&); /* 8007B6AC */ virtual void GetLinkNo(cBgS_PolyInfo const&); - /* 8007B6D8 */ virtual bool GetWallCode(cBgS_PolyInfo const&); + /* 8007B6D8 */ virtual s32 GetWallCode(cBgS_PolyInfo const&); /* 8007B704 */ virtual bool GetPolyAtt0(cBgS_PolyInfo const&); /* 8007B734 */ virtual bool GetPolyAtt1(cBgS_PolyInfo const&); /* 8007B760 */ virtual bool GetGroundCode(cBgS_PolyInfo const&); diff --git a/include/d/bg/d_bg_w_base.h b/include/d/bg/d_bg_w_base.h index 2b67b17c5a..d2797f66fc 100644 --- a/include/d/bg/d_bg_w_base.h +++ b/include/d/bg/d_bg_w_base.h @@ -65,7 +65,7 @@ public: virtual bool GetUnderwaterRoofCode(int) = 0; virtual bool GetMonkeyBarsCode(cBgS_PolyInfo const&) = 0; virtual void GetLinkNo(cBgS_PolyInfo const&) = 0; - virtual bool GetWallCode(cBgS_PolyInfo const&) = 0; + virtual s32 GetWallCode(cBgS_PolyInfo const&) = 0; virtual bool GetPolyAtt0(cBgS_PolyInfo const&) = 0; virtual bool GetPolyAtt1(cBgS_PolyInfo const&) = 0; virtual bool GetGroundCode(cBgS_PolyInfo const&) = 0; diff --git a/include/d/bg/d_bg_w_kcol.h b/include/d/bg/d_bg_w_kcol.h index f46686e157..4fd7aa108d 100644 --- a/include/d/bg/d_bg_w_kcol.h +++ b/include/d/bg/d_bg_w_kcol.h @@ -61,7 +61,7 @@ public: /* 80082CCC */ virtual void GetUnderwaterRoofCode(int); /* 80082B3C */ virtual void GetMonkeyBarsCode(cBgS_PolyInfo const&); /* 80082D24 */ virtual void GetLinkNo(cBgS_PolyInfo const&); - /* 80082D54 */ virtual void GetWallCode(cBgS_PolyInfo const&); + /* 80082D54 */ virtual s32 GetWallCode(cBgS_PolyInfo const&); /* 80082D84 */ virtual void GetPolyAtt0(cBgS_PolyInfo const&); /* 80082DB4 */ virtual void GetPolyAtt1(cBgS_PolyInfo const&); /* 80082DE4 */ virtual void GetGroundCode(cBgS_PolyInfo const&); diff --git a/include/d/com/d_com_inf_game.h b/include/d/com/d_com_inf_game.h index 202b637c5e..c92bec0cb2 100644 --- a/include/d/com/d_com_inf_game.h +++ b/include/d/com/d_com_inf_game.h @@ -155,6 +155,29 @@ public: mBottleStatus = status; mBottleSetFlag = flag; } + void setNunStatus(u8 status, u8 param_1, u8 flag) { + mNunStatus = status; + field_0x4ef0 = param_1; + mNunSetFlag = flag; + } + void setRemoConStatus(u8 status, u8 param_1, u8 flag) { + mRemoConStatus = status; + field_0x4ef2 = param_1; + mRemoConSetFlag = flag; + } + void setNunZStatus(u8 status, u8 flag) { + mNunZStatus = status; + mNunZSetFlag = flag; + } + void setNunCStatus(u8 status, u8 flag) { + mNunCStatus = status; + mNunCSetFlag = flag; + } + void setCStickStatus(u8 status, u8 param_1, u8 flag) { + mCStickStatus = status; + mCStickDirection = param_1; + mCStickSetFlag = flag; + } void setItemLifeCount(float hearts, u8 type) { mItemLifeCount += hearts; mItemLifeCountType = type; @@ -167,9 +190,33 @@ public: void setItemKeyNumCount(s16 keys) { mItemKeyNumCount += keys; } void setItemMaxLifeCount(s16 max) { mItemMaxLifeCount += max; } void setOxygen(int oxygen) { mOxygen = oxygen; } + void setNowOxygen(s32 oxygen) { mNowOxygen = oxygen; } + int getOxygen() { return mOxygen; } + int getMaxOxygen() { return mMaxOxygen; } void setMaxOxygen(int max) { mMaxOxygen = max; } + void setItemNowLife(u16 life) { mItemNowLife = life; } + void setItemNowMagic(s16 magic) { mItemNowMagicCount = magic; } + void setItemNowOil(s32 oil) { mItemNowOil = oil; } + u8 getNeedLightDropNum() { return mNeedLightDropNum; } u8 getDoStatus() { return mDoStatus; } u8 getRStatus() { return mRStatus; } + u8 getAStatus() { return mAStatus; } + u8 getXStatus() { return mXStatus; } + u8 getYStatus() { return mYStatus; } + u8 getZStatus() { return mZStatus; } + u8 get3DStatus() { return m3DStatus; } + u8 getCStickStatus() { return mCStickStatus; } + u8 getSButtonStatus() { return mSButtonStatus; } + u8 getNunStatus() { return mNunStatus; } + u8 getRemoConStatus() { return mRemoConStatus; } + u8 getNunZStatus() { return mNunZStatus; } + u8 getNunCStatus() { return mNunCStatus; } + u8 getBottleStatus() { return mBottleStatus; } + bool isDoSetFlag(u8 flag) { return flag & mDoSetFlag; } + bool isASetFlag(u8 flag) { return flag & mASetFlag; } + bool isRSetFlag(u8 flag) { return flag & mRSetFlag; } + bool isXSetFlag(u8 flag) { return flag & mXSetFlag; } + bool isYSetFlag(u8 flag) { return flag & mYSetFlag; } const char* getStartStageName() { return mStartStage.getName(); } s8 getStartStageRoomNo() { return mStartStage.getRoomNo(); } s8 getStartStageLayer() { return mStartStage.getLayer(); } @@ -189,7 +236,9 @@ public: s8 getStartStageDarkArea() { return mStartStage.getDarkArea(); } void setStartStageDarkArea(s8 darkArea) { mStartStage.setDarkArea(darkArea); } void* getPlayerPtr(int ptrIdx) { return mPlayerPtr[ptrIdx]; } + void* getPlayer(int idx) { return mPlayer[idx]; } JKRArchive* getMain2DArchive() { return mMain2DArchive; } + JKRArchive* getAnmArchive() { return mAnmArchive; } J2DGrafContext* getCurrentGrafPort() { return mCurrentGrafPort; } dVibration_c& getVibration() { return mVibration; } void setPlayerStatus(int param_0, int i, u32 flag) { mPlayerStatus[i] |= flag; } @@ -492,6 +541,8 @@ const char* dComIfGs_getWarpStageName(); s16 dComIfGs_getWarpPlayerAngleY(); s8 dComIfGs_getWarpRoomNo(); char* dComIfG_getRoomArcName(int); +int dComIfGp_getSelectItemNum(int); +int dComIfGp_getSelectItemMaxNum(int); inline void dComIfGp_setRStatus(u8 status, u8 flag) { g_dComIfG_gameInfo.play.setRStatus(status, flag); @@ -912,10 +963,14 @@ inline JKRHeap* dComIfGp_getExpHeap2D() { return g_dComIfG_gameInfo.play.getExpHeap2D(); } -inline u16 dComIfGs_getOil() { +inline s16 dComIfGs_getOil() { return g_dComIfG_gameInfo.info.getPlayer().getPlayerStatusA().getOil(); } +inline s16 dComIfGs_getMaxOil() { + return g_dComIfG_gameInfo.info.getPlayer().getPlayerStatusA().getMaxOil(); +} + inline s64 dComIfGs_getSaveStartTime() { return g_dComIfG_gameInfo.info.getStartTime(); } @@ -1064,6 +1119,10 @@ inline JKRArchive* dComIfGp_getMain2DArchive() { return g_dComIfG_gameInfo.play.getMain2DArchive(); } +inline JKRArchive* dComIfGp_getAnmArchive() { + return g_dComIfG_gameInfo.play.getAnmArchive(); +} + inline J2DGrafContext* dComIfGp_getCurrentGrafPort() { return g_dComIfG_gameInfo.play.getCurrentGrafPort(); } @@ -1104,7 +1163,7 @@ inline void dComIfGp_set3DStatus(u8 status, u8 direction, u8 flag) { g_dComIfG_gameInfo.play.set3DStatus(status, direction, flag); } -inline u8 dComIfGs_getLastSceneMode() { +inline s32 dComIfGs_getLastSceneMode() { return g_dComIfG_gameInfo.info.getRestart().getLastMode(); } @@ -1192,4 +1251,160 @@ inline dStage_roomStatus_c* dComIfGp_roomControl_getStatusRoomDt(int room_no) { return g_dComIfG_gameInfo.play.getRoomControl()->getStatusRoomDt(room_no); } +inline void dComIfGp_setItemNowLife(u16 life) { + g_dComIfG_gameInfo.play.setItemNowLife(life); +} + +inline void dComIfGp_setItemNowMagic(s16 magic) { + g_dComIfG_gameInfo.play.setItemNowMagic(magic); +} + +inline u8 dComIfGs_getMagic() { + return g_dComIfG_gameInfo.info.getPlayer().getPlayerStatusA().getMagic(); +} + +inline u8 dComIfGs_getMaxMagic() { + return g_dComIfG_gameInfo.info.getPlayer().getPlayerStatusA().getMaxMagic(); +} + +inline void dComIfGp_setOxygen(int oxygen) { + g_dComIfG_gameInfo.play.setOxygen(oxygen); +} + +inline void dComIfGp_setNowOxygen(s32 oxygen) { + g_dComIfG_gameInfo.play.setNowOxygen(oxygen); +} + +inline int dComIfGp_getMaxOxygen() { + return g_dComIfG_gameInfo.play.getMaxOxygen(); +} + +inline int dComIfGp_getOxygen() { + return g_dComIfG_gameInfo.play.getOxygen(); +} + +inline u8 dComIfGp_getNeedLightDropNum() { + return g_dComIfG_gameInfo.play.getNeedLightDropNum(); +} + +inline void dComIfGp_setItemNowOil(s32 oil) { + g_dComIfG_gameInfo.play.setItemNowOil(oil); +} + +inline u8 dComIfGp_getAStatus() { + return g_dComIfG_gameInfo.play.getAStatus(); +} + +inline u8 dComIfGp_getXStatus() { + return g_dComIfG_gameInfo.play.getXStatus(); +} + +inline u8 dComIfGp_getYStatus() { + return g_dComIfG_gameInfo.play.getYStatus(); +} + +inline u8 dComIfGp_getZStatus() { + return g_dComIfG_gameInfo.play.getZStatus(); +} + +inline u8 dComIfGp_get3DStatus() { + return g_dComIfG_gameInfo.play.get3DStatus(); +} + +inline u8 dComIfGp_getCStickStatus() { + return g_dComIfG_gameInfo.play.getCStickStatus(); +} + +inline u8 dComIfGp_getSButtonStatus() { + return g_dComIfG_gameInfo.play.getSButtonStatus(); +} + +inline u8 dComIfGp_getNunStatus() { + return g_dComIfG_gameInfo.play.getNunStatus(); +} + +inline u8 dComIfGp_getNunZStatus() { + return g_dComIfG_gameInfo.play.getNunZStatus(); +} + +inline u8 dComIfGp_getNunCStatus() { + return g_dComIfG_gameInfo.play.getNunCStatus(); +} + +inline u8 dComIfGp_getBottleStatus() { + return g_dComIfG_gameInfo.play.getBottleStatus(); +} + +inline u8 dComIfGp_getRemoConStatus() { + return g_dComIfG_gameInfo.play.getRemoConStatus(); +} + +inline bool dComIfGp_isDoSetFlag(u8 flag) { + return g_dComIfG_gameInfo.play.isDoSetFlag(flag); +} + +inline bool dComIfGp_isASetFlag(u8 flag) { + return g_dComIfG_gameInfo.play.isASetFlag(flag); +} + +inline bool dComIfGp_isRSetFlag(u8 flag) { + return g_dComIfG_gameInfo.play.isRSetFlag(flag); +} + +inline bool dComIfGp_isXSetFlag(u8 flag) { + return g_dComIfG_gameInfo.play.isXSetFlag(flag); +} + +inline bool dComIfGp_isYSetFlag(u8 flag) { + return g_dComIfG_gameInfo.play.isYSetFlag(flag); +} + +inline bool dComIfGs_isCollectMirror(u8 param_0) { + return g_dComIfG_gameInfo.info.getPlayer().getCollect().isCollectMirror(param_0); +} + +inline bool dComIfGs_isCollectCrystal(u8 param_0) { + return g_dComIfG_gameInfo.info.getPlayer().getCollect().isCollectCrystal(param_0); +} + +inline void dComIfGs_onCollectMirror(u8 param_0) { + g_dComIfG_gameInfo.info.getPlayer().getCollect().onCollectMirror(param_0); +} + +inline void dComIfGs_onCollectCrystal(u8 param_0) { + g_dComIfG_gameInfo.info.getPlayer().getCollect().onCollectCrystal(param_0); +} + +inline bool dComIfGp_isPauseFlag() { + return g_dComIfG_gameInfo.play.isPauseFlag(); +} + +inline void dComIfGp_setNunStatus(u8 param_0, u8 param_1, u8 param_2) { + g_dComIfG_gameInfo.play.setNunStatus(param_0, param_1, param_2); +} + +inline void dComIfGp_setRemoConStatus(u8 param_0, u8 param_1, u8 param_2) { + g_dComIfG_gameInfo.play.setRemoConStatus(param_0, param_1, param_2); +} + +inline void dComIfGp_setNunZStatus(u8 param_0, u8 param_1) { + g_dComIfG_gameInfo.play.setNunZStatus(param_0, param_1); +} + +inline void dComIfGp_setNunCStatus(u8 param_0, u8 param_1) { + g_dComIfG_gameInfo.play.setNunCStatus(param_0, param_1); +} + +inline void dComIfGp_setCStickStatus(u8 param_0, u8 param_1, u8 param_2) { + g_dComIfG_gameInfo.play.setCStickStatus(param_0, param_1, param_2); +} + +inline void* dComIfG_getObjectIDRes(const char* arc_name, u16 id) { + return g_dComIfG_gameInfo.mResControl.getObjectIDRes(arc_name, id); +} + +inline void* dComIfGp_getPlayer(int idx) { + return g_dComIfG_gameInfo.play.getPlayer(idx); +} + #endif /* D_COM_D_COM_INF_GAME_H */ diff --git a/include/d/d_resorce.h b/include/d/d_resorce.h index 67e81da529..5419ba7fe5 100644 --- a/include/d/d_resorce.h +++ b/include/d/d_resorce.h @@ -59,7 +59,7 @@ public: /* 8003C260 */ static dRes_info_c* newResInfo(dRes_info_c*, int); /* 8003C288 */ static dRes_info_c* getResInfoLoaded(char const*, dRes_info_c*, int); /* 8003C2EC */ static void* getRes(char const*, s32, dRes_info_c*, int); - /* 8003C400 */ void getIDRes(char const*, u16, dRes_info_c*, int); + /* 8003C400 */ static void* getIDRes(char const*, u16, dRes_info_c*, int); /* 8003C470 */ static int syncAllRes(dRes_info_c*, int); /* 8003C4E4 */ int setObjectRes(char const*, void*, u32, JKRHeap*); /* 8003C5BC */ int setStageRes(char const*, JKRHeap*); @@ -79,6 +79,10 @@ public: return getRes(arcName, param_1, &mObjectInfo[0], ARRAY_SIZE(mObjectInfo)); } + void* getObjectIDRes(const char* arcName, u16 id) { + return getIDRes(arcName, id, &mObjectInfo[0], ARRAY_SIZE(mObjectInfo)); + } + int syncObjectRes(const char* name) { return syncRes(name, &mObjectInfo[0], ARRAY_SIZE(mObjectInfo)); } diff --git a/include/d/d_stage.h b/include/d/d_stage.h index c5b70bd256..d3da7a8591 100644 --- a/include/d/d_stage.h +++ b/include/d/d_stage.h @@ -45,8 +45,8 @@ struct stage_stag_info_class { /* 0x2A */ u16 mStageTitleNo; }; // Size: Unknown -inline u16 dStage_stagInfo_GetUpButton(stage_stag_info_class* p_info) { - return p_info->field_0x10 & 7; +inline s16 dStage_stagInfo_GetUpButton(stage_stag_info_class* p_info) { + return p_info->field_0x0a & 7; } struct stage_scls_info_class { @@ -547,11 +547,12 @@ public: bool checkStatusFlag(int i_roomNo, u8 flag) const { return cLib_checkBit(mStatus[i_roomNo].unk_0x3F4, flag); } + static char* getDemoArcName() { return mDemoArcName; } static JKRExpHeap* mMemoryBlock[19]; static char mArcBank[32][10]; static dStage_roomStatus_c mStatus[0x40]; - static u8 mDemoArcName[10 + 2 /* padding */]; + static char mDemoArcName[10]; static u32 mProcID; static char* mArcBankName; static char* mArcBankData; diff --git a/include/d/event/d_event.h b/include/d/event/d_event.h index 6fdb8b79a4..598c6fa448 100644 --- a/include/d/event/d_event.h +++ b/include/d/event/d_event.h @@ -84,6 +84,8 @@ public: u16 chkEventFlag(u16 flag) { return flag & mEventFlag; } u8 getMode() const { return mMode; } + bool i_isOrderOK() { return field_0xe5 == 0 || field_0xe5 == 2; } + public: /* 0x000 */ u8 field_0x0[4]; /* 0x004 */ dEvt_order_c mOrder[8]; diff --git a/include/d/kankyo/d_kankyo.h b/include/d/kankyo/d_kankyo.h index 60bb54f246..4b58527211 100644 --- a/include/d/kankyo/d_kankyo.h +++ b/include/d/kankyo/d_kankyo.h @@ -665,5 +665,6 @@ STATIC_ASSERT(sizeof(dScnKy_env_light_c) == 4880); BOOL dKy_darkworld_stage_check(char const*, int); BOOL dKy_withwarp_capture_check(); +bool dKy_darkworld_check(); #endif /* D_KANKYO_D_KANKYO_H */ diff --git a/include/d/meter/d_meter2.h b/include/d/meter/d_meter2.h index 890777f971..4dd2347f62 100644 --- a/include/d/meter/d_meter2.h +++ b/include/d/meter/d_meter2.h @@ -14,12 +14,12 @@ public: class dMeterMap_c; -class dMeter2_c { +class dMeter2_c : public msg_class { public: - /* 8021EA14 */ void _create(); - /* 8021F128 */ void _execute(); - /* 8021F370 */ void _draw(); - /* 8021F49C */ void _delete(); + /* 8021EA14 */ int _create(); + /* 8021F128 */ int _execute(); + /* 8021F370 */ int _draw(); + /* 8021F49C */ int _delete(); /* 8021F6EC */ void emphasisButtonDelete(); /* 8021F780 */ void setLifeZero(); /* 8021F7B0 */ void checkStatus(); @@ -61,6 +61,8 @@ public: /* 802259F8 */ void isArrowEquip(); /* 80225A64 */ void isPachinkoEquip(); + void setNowLifeGauge(s16 life) { mNowLifeGauge = life; } + private: /* 0x100 */ JKRExpHeap* mpHeap; /* 0x104 */ JKRExpHeap* mpSubHeap; @@ -72,7 +74,7 @@ private: /* 0x11C */ void* field_0x11c; /* 0x120 */ dMeterMap_c* mpMap; /* 0x124 */ u32 field_0x124; - /* 0x128 */ int field_0x128; + /* 0x128 */ u32 field_0x128; /* 0x12C */ int field_0x12c; /* 0x130 */ f32 field_0x130; /* 0x134 */ f32 field_0x134[2]; @@ -90,22 +92,22 @@ private: /* 0x18C */ f32 field_0x18c; /* 0x190 */ s16 field_0x190; /* 0x192 */ s16 mNowLifeGauge; - /* 0x194 */ s16 field_0x194; - /* 0x196 */ s16 field_0x196; - /* 0x198 */ s16 field_0x198; + /* 0x194 */ s16 mMaxLife; + /* 0x196 */ s16 mNowMagic; + /* 0x198 */ s16 mMaxMagic; /* 0x19A */ s16 field_0x19a; - /* 0x19C */ int field_0x19c; - /* 0x1A0 */ int field_0x1a0; - /* 0x1A4 */ int field_0x1a4; - /* 0x1A8 */ int field_0x1a8; + /* 0x19C */ int mNowOil; + /* 0x1A0 */ int mMaxOil; + /* 0x1A4 */ int mNowOxygen; + /* 0x1A8 */ int mMaxOxygen; /* 0x1AC */ int field_0x1ac; - /* 0x1B0 */ u16 field_0x1b0; - /* 0x1B2 */ u16 field_0x1b2; + /* 0x1B0 */ u16 mRupeeNum; + /* 0x1B2 */ u16 mKeyNum; /* 0x1B4 */ u16 field_0x1b4; /* 0x1B6 */ u16 mSubContentsStringType; /* 0x1B8 */ u16 field_0x1b8[5]; - /* 0x1C2 */ u8 field_0x1c2; - /* 0x1C3 */ u8 field_0x1c3; + /* 0x1C2 */ u8 mLightDropNum; + /* 0x1C3 */ u8 mNeedLightDropNum; /* 0x1C4 */ u8 field_0x1c4; /* 0x1C5 */ u8 field_0x1c5; /* 0x1C6 */ u8 field_0x1c6; @@ -123,8 +125,8 @@ private: /* 0x1D2 */ u8 field_0x1d2[4]; /* 0x1D6 */ u8 field_0x1d6[2]; /* 0x1D8 */ u8 field_0x1d8[2]; - /* 0x1DA */ u8 field_0x1da; - /* 0x1DB */ u8 field_0x1db; + /* 0x1DA */ u8 mArrowNum; + /* 0x1DB */ u8 mPachinkoNum; /* 0x1DC */ u8 field_0x1dc; /* 0x1DD */ u8 field_0x1dd; /* 0x1DE */ u8 field_0x1de; @@ -144,10 +146,10 @@ private: /* 0x1EC */ u8 field_0x1ec; /* 0x1ED */ u8 field_0x1ed; /* 0x1EE */ u8 field_0x1ee; - /* 0x1EF */ u8 field_0x1ef[4]; - /* 0x1F3 */ u8 field_0x1f3[3]; - /* 0x1F6 */ u8 field_0x1f6[3]; - /* 0x1F9 */ u8 field_0x1f9[4]; + /* 0x1EF */ u8 mBottleNum[4]; + /* 0x1F3 */ u8 mBombNum[3]; + /* 0x1F6 */ u8 mBombMax[3]; + /* 0x1F9 */ u8 mItemMaxNum[4]; /* 0x1FD */ u8 field_0x1fd; /* 0x1FE */ u8 field_0x1fe; /* 0x1FF */ u8 field_0x1ff; @@ -155,4 +157,6 @@ private: /* 0x201 */ u8 field_0x201; }; +typedef int (*dMeter2_Method)(dMeter2_c*); + #endif /* D_METER_D_METER2_H */ diff --git a/include/d/meter/d_meter2_draw.h b/include/d/meter/d_meter2_draw.h index 8a3cd44dcd..b45c483045 100644 --- a/include/d/meter/d_meter2_draw.h +++ b/include/d/meter/d_meter2_draw.h @@ -51,7 +51,7 @@ public: /* 80215A94 */ void setAlphaOxygenAnimeMax(); /* 80215B18 */ void drawLightDrop(u8, u8, f32, f32, f32, f32, u8); /* 80215DA4 */ void setAlphaLightDropChange(bool); - /* 80215DA8 */ void getNowLightDropRateCalc(); + /* 80215DA8 */ f32 getNowLightDropRateCalc(); /* 80215E40 */ void setAlphaLightDropAnimeMin(); /* 80215F88 */ void setAlphaLightDropAnimeMax(); /* 8021632C */ void drawRupee(s16); @@ -114,6 +114,8 @@ public: /* 802102F8 */ virtual ~dMeter2Draw_c(); + J2DScreen* getMainScreenPtr() { return mpScreen; } + private: /* 0x004 */ f32 field_0x4; /* 0x008 */ f32 field_0x8; @@ -210,9 +212,9 @@ private: /* 0x518 */ J2DPicture* mpItemXYPane[3]; /* 0x524 */ int field_0x524[2][2]; /* 0x534 */ u8 field_0x534[8]; - /* 0x53C */ void* field_0x53c; - /* 0x540 */ J2DAnmBase* field_0x540; // bpk - /* 0x544 */ J2DAnmBase* field_0x544; // bpk + /* 0x53C */ J2DAnmColorKey* field_0x53c; + /* 0x540 */ J2DAnmColorKey* field_0x540; // bpk + /* 0x544 */ J2DAnmColorKey* field_0x544; // bpk /* 0x548 */ u8 field_0x548[8]; /* 0x550 */ f32 field_0x550; /* 0x554 */ f32 field_0x554; @@ -227,7 +229,35 @@ private: /* 0x578 */ f32 field_0x578; /* 0x57C */ f32 field_0x57c; /* 0x580 */ f32 field_0x580; - /* 0x584 */ u8 field_0x584[0x78]; + /* 0x584 */ f32 field_0x584; + /* 0x588 */ f32 field_0x588; + /* 0x58C */ f32 field_0x58c; + /* 0x590 */ f32 field_0x590; + /* 0x594 */ f32 field_0x594; + /* 0x598 */ f32 field_0x598; + /* 0x59C */ f32 field_0x59c; + /* 0x5A0 */ f32 field_0x5a0; + /* 0x5A4 */ f32 field_0x5a4; + /* 0x5A8 */ f32 field_0x5a8; + /* 0x5AC */ f32 field_0x5ac; + /* 0x5B0 */ f32 field_0x5b0; + /* 0x5B4 */ f32 field_0x5b4; + /* 0x5B8 */ f32 field_0x5b8; + /* 0x5BC */ f32 field_0x5bc; + /* 0x5C0 */ f32 field_0x5c0; + /* 0x5C4 */ f32 field_0x5c4; + /* 0x5C8 */ f32 field_0x5c8; + /* 0x5CC */ f32 field_0x5cc; + /* 0x5D0 */ f32 field_0x5d0; + /* 0x5D4 */ f32 field_0x5d4; + /* 0x5D8 */ f32 field_0x5d8; + /* 0x5DC */ f32 field_0x5dc; + /* 0x5E0 */ f32 field_0x5e0; + /* 0x5E4 */ f32 field_0x5e4; + /* 0x5E8 */ f32 field_0x5e8; + /* 0x5EC */ f32 field_0x5ec; + /* 0x5F0 */ f32 field_0x5f0; + /* 0x5F4 */ u8 field_0x5f4[0x8]; /* 0x5FC */ f32 field_0x5fc[3]; /* 0x608 */ f32 field_0x608; /* 0x60C */ f32 field_0x60c; diff --git a/include/d/meter/d_meter2_info.h b/include/d/meter/d_meter2_info.h index 5d3f9847c3..550361b58f 100644 --- a/include/d/meter/d_meter2_info.h +++ b/include/d/meter/d_meter2_info.h @@ -129,8 +129,12 @@ public: const char* getWarpStageName() { return mWarpInfo.mStageName; } void setNowCount(u8 count) { mNowCount = count; } void setMaxCount(u8 count) { mMaxCount = count; } + void allUseButton() { mUseButton = -1; } + bool isUseButton(int param_0) { return param_0 & mUseButton; } + void setMeterMapClass(dMeterMap_c* p_map) { mMeterMap = p_map; } + void resetGameStatus() { mGameStatus = 0; } -private: +public: /* 0x04 */ u8 unk4[4]; /* 0x08 */ u64 unk8; /* 0x10 */ void* mMsgResource; @@ -277,4 +281,28 @@ inline void dMeter2Info_setMaxCount(u8 count) { g_meter2_info.setMaxCount(count); } +inline bool dMeter2Info_isDirectUseItem(int param_0) { + return g_meter2_info.isDirectUseItem(param_0); +} + +inline bool dMeter2Info_isUseButton(int param_0) { + return g_meter2_info.isUseButton(param_0); +} + +inline void dMeter2Info_setMeterMapClass(dMeterMap_c* p_map) { + g_meter2_info.setMeterMapClass(p_map); +} + +inline void dMeter2Info_decHotSpringTimer() { + g_meter2_info.decHotSpringTimer(); +} + +inline void dMeter2Info_allUseButton() { + g_meter2_info.allUseButton(); +} + +inline void dMeter2Info_resetGameStatus() { + g_meter2_info.resetGameStatus(); +} + #endif /* D_METER_D_METER2_INFO_H */ diff --git a/include/d/meter/d_meter_HIO.h b/include/d/meter/d_meter_HIO.h index d731a2051b..8e59384438 100644 --- a/include/d/meter/d_meter_HIO.h +++ b/include/d/meter/d_meter_HIO.h @@ -1380,4 +1380,10 @@ public: STATIC_ASSERT(sizeof(dMeter_cursorHIO_c) == 68); +extern dMeter_menuHIO_c g_menuHIO; +extern dMeter_drawHIO_c g_drawHIO; +extern dMeter_ringHIO_c g_ringHIO; +extern dMeter_fmapHIO_c g_fmapHIO; +extern dMeter_cursorHIO_c g_cursorHIO; + #endif /* D_METER_D_METER_HIO_H */ diff --git a/include/d/meter/d_meter_map.h b/include/d/meter/d_meter_map.h index 4d10d3521e..e4bfcbd903 100644 --- a/include/d/meter/d_meter_map.h +++ b/include/d/meter/d_meter_map.h @@ -8,7 +8,7 @@ class dMeterMap_c { public: /* 8020D49C */ void isEnableDispMap(); /* 8020D528 */ void getMapDispSizeTypeNo(); - /* 8020D650 */ void isEnableDispMapAndMapDispSizeTypeNo(); + /* 8020D650 */ static bool isEnableDispMapAndMapDispSizeTypeNo(); /* 8020D690 */ void getMapDispEdgeBottomY_Layout(); /* 8020D698 */ void isEventRunCheck(); /* 8020D72C */ void getMapDispEdgeLeftX_Layout(); @@ -31,8 +31,10 @@ public: /* 8020E4C8 */ void isShow(u32); /* 8020E620 */ void isFmapScreen(); /* 8020E70C */ void isDmapScreen(); - /* 8020E754 */ void meter_map_move(u32); + /* 8020E754 */ static void meter_map_move(u32); /* 8020E9CC */ void keyCheck(); + + u8 field_0x0[0x34]; }; #endif /* D_METER_D_METER_MAP_H */ diff --git a/include/d/pane/d_pane_class.h b/include/d/pane/d_pane_class.h index 40b33a9ed0..f77aafc09b 100644 --- a/include/d/pane/d_pane_class.h +++ b/include/d/pane/d_pane_class.h @@ -47,6 +47,12 @@ public: f32 getInitCenterPosY() { return mInitPos.y + mInitSize.y * 0.5f; } + f32 getInitSizeX() { return mInitSize.x; } + f32 getInitSizeY() { return mInitSize.y; } + + f32 getInitPosX() { return mInitPos.x; } + f32 getInitPosY() { return mInitPos.y; } + private: /* 0x1C */ void* mpFirstStackSize; /* 0x20 */ void* field_0x20; diff --git a/include/d/save/d_save.h b/include/d/save/d_save.h index 217ba4c419..9ce8764948 100644 --- a/include/d/save/d_save.h +++ b/include/d/save/d_save.h @@ -371,6 +371,9 @@ public: u16& getLife() { return mLife; } u16& getRupee() { return mRupee; } u16& getOil() { return mOil; } + u16& getMaxOil() { return mMaxOil; } + u8& getMagic() { return mMagic; } + u8& getMaxMagic() { return mMaxMagic; } u8 getSelectEquip(int item) const { return mSelectEquip[item]; } void setOil(u16 oil) { mOil = oil; } void setMaxOil(u16 max) { mMaxOil = max; } @@ -1001,7 +1004,7 @@ public: BOOL isActor(int, int) const; int memory_to_card(char*, int); int card_to_memory(char*, int); - void initdata_to_card(char*, int); + int initdata_to_card(char*, int); dSv_save_c& getSavedata() { return mSavedata; } dSv_memory_c& getMemory() { return mMemory; } diff --git a/include/m_Do/m_Do_ext.h b/include/m_Do/m_Do_ext.h index ff338d68b0..73826358d9 100644 --- a/include/m_Do/m_Do_ext.h +++ b/include/m_Do/m_Do_ext.h @@ -18,6 +18,17 @@ private: /* 0x0 */ J3DFrameCtrl mFrameCtrl; }; // Size: 0x14 +class mDoExt_transAnmBas : public J3DAnmTransformKey { +public: + mDoExt_transAnmBas(void* bas) { + mBas = bas; + } + virtual ~mDoExt_transAnmBas(); + +private: + /* 0x28 */ void* mBas; +}; + class mDoExt_btkAnm : public mDoExt_baseAnm { public: mDoExt_btkAnm(void) { mBtkAnm = 0; } @@ -165,6 +176,7 @@ JKRExpHeap* mDoExt_getHostIOHeap(); JKRSolidHeap* mDoExt_createSolidHeapToCurrent(JKRHeap**, u32, JKRHeap*, u32); JKRSolidHeap* mDoExt_createSolidHeapToCurrent(u32, JKRHeap*, u32); JKRSolidHeap* mDoExt_createSolidHeapFromGameToCurrent(u32, u32); +JKRSolidHeap* mDoExt_createSolidHeapFromGameToCurrent(JKRHeap**, u32, u32); JKRHeap* mDoExt_getCurrentHeap(); extern JKRExpHeap* zeldaHeap; diff --git a/libs/JSystem/J2DGraph/J2DScreen.cpp b/libs/JSystem/J2DGraph/J2DScreen.cpp index 11c5d58bf4..8bea45590c 100644 --- a/libs/JSystem/J2DGraph/J2DScreen.cpp +++ b/libs/JSystem/J2DGraph/J2DScreen.cpp @@ -4,6 +4,7 @@ // #include "JSystem/J2DGraph/J2DScreen.h" +#include "JSystem/JGeometry.h" #include "dol2asm.h" #include "dolphin/types.h" @@ -247,6 +248,20 @@ SECTION_SDATA2 static f32 lit_1563[1 + 1 /* padding */] = { }; /* 802F8498-802F8540 2F2DD8 00A8+00 0/0 59/59 4/4 .text __ct__9J2DScreenFv */ +#ifdef NONMATCHING +J2DScreen::J2DScreen() : + J2DPane(NULL, true, 'root', JGeometry::TBox2(0.0f, 0.0f, 640.0f, 480.0f)) { + + field_0x114 = -1; + _4 = -1; + mScissor = false; + mMaterialNum = 0; + mMaterials = NULL; + field_0x108 = NULL; + field_0x10c = NULL; + mNameTable = NULL; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -255,6 +270,7 @@ asm J2DScreen::J2DScreen() { #include "asm/JSystem/J2DGraph/J2DScreen/__ct__9J2DScreenFv.s" } #pragma pop +#endif /* 802F8540-802F85A8 2F2E80 0068+00 1/0 0/0 0/0 .text __dt__9J2DScreenFv */ #pragma push diff --git a/libs/JSystem/J3DGraphLoader/J3DAnmLoader.cpp b/libs/JSystem/J3DGraphLoader/J3DAnmLoader.cpp index 96f7494548..7bccd2a508 100644 --- a/libs/JSystem/J3DGraphLoader/J3DAnmLoader.cpp +++ b/libs/JSystem/J3DGraphLoader/J3DAnmLoader.cpp @@ -283,7 +283,7 @@ SECTION_SDATA2 static f32 lit_889[1 + 1 /* padding */] = { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void J3DAnmLoaderDataBase::load(void const* param_0, J3DAnmLoaderDataBaseFlag param_1) { +asm void* J3DAnmLoaderDataBase::load(void const* param_0, J3DAnmLoaderDataBaseFlag param_1) { nofralloc #include "asm/JSystem/J3DGraphLoader/J3DAnmLoader/load__20J3DAnmLoaderDataBaseFPCv24J3DAnmLoaderDataBaseFlag.s" } diff --git a/src/d/a/d_a_alink.cpp b/src/d/a/d_a_alink.cpp index 153c21af87..d45357fdb6 100644 --- a/src/d/a/d_a_alink.cpp +++ b/src/d/a/d_a_alink.cpp @@ -6443,7 +6443,7 @@ asm bool daAlink_c::getStickAngleFromPlayerShape(s16* param_0) const { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daAlink_c::commonLineCheck(cXyz* param_0, cXyz* param_1) { +asm bool daAlink_c::commonLineCheck(cXyz* param_0, cXyz* param_1) { nofralloc #include "asm/d/a/d_a_alink/commonLineCheck__9daAlink_cFP4cXyzP4cXyz.s" } @@ -14470,7 +14470,7 @@ COMPILER_STRIP_GATE(0x80391FEC, &swimOffset); static u8 lit_4409[12]; /* 80425514-80425520 052234 000C+00 32/35 0/0 0/0 .bss l_waitBaseAnime */ -static f32 l_waitBaseAnime[3]; +static Vec l_waitBaseAnime; /* 80425520-8042552C 052240 000C+00 0/1 0/0 0/0 .bss @4410 */ #pragma push @@ -17963,9 +17963,7 @@ bool daAlink_c::procSlideLandInit(int param_0) { field_0x3478 = daAlinkHIO_slide_c0::m.mForwardLandAnm.field_0x10; field_0x3198 = 1; field_0x2f99 = 4; - field_0x3588.x = l_waitBaseAnime[0]; - field_0x3588.y = l_waitBaseAnime[1]; - field_0x3588.z = l_waitBaseAnime[2]; + field_0x3588 = l_waitBaseAnime; } else { setSingleAnimeParam(ANM_FORWARD_SLIDE_LAND, &daAlinkHIO_slide_c0::m.mBackwardLandAnm); field_0x3478 = daAlinkHIO_slide_c0::m.mBackwardLandAnm.field_0x10; @@ -18411,9 +18409,132 @@ static u8 lit_4420[12]; #pragma pop /* 8042561C-80425628 05233C 000C+00 37/39 0/0 0/0 .bss l_wolfBaseAnime */ -static f32 l_wolfBaseAnime[3]; +static Vec l_wolfBaseAnime; + +inline dEvt_control_c& i_dComIfGp_getEvent() { + return g_dComIfG_gameInfo.play.getEvent(); +} + +bool daMidna_c::checkMidnaRealBody() { + return dKy_darkworld_check() == 1 || dComIfGs_isTransformLV(3); +} /* 800C77F4-800C7C64 0C2134 0470+00 4/2 0/0 0/0 .text procCoMetamorphoseInit__9daAlink_cFv */ +// 1 missing instruction, lots of regalloc. maybe related +#ifdef NONMATCHING +bool daAlink_c::procCoMetamorphoseInit() { + int svar8 = 0; + + if (i_dComIfGp_getEvent().i_isOrderOK()) { + if (!dComIfGp_event_compulsory(this, NULL, 0xFFFF)) { + return 0; + } + mDemo.i_setSpecialDemoType(); + mDamageTimer = 0; + svar8 = 1; + } + + if (!commonProcInitNotSameProc(METAMORPHOSE)) { + return 1; + } + + field_0x3198 = svar8; + field_0x3008 = 0; + field_0x300e = 0; + field_0x3010 = 0; + field_0x347c = 1.0f; + mFallVoiceInit = 0; + + if ((i_checkWolf() && mDemo.getDemoMode() == 0x39) || (!i_checkWolf() && mDemo.getDemoMode() == 0x3A)) { + field_0x300a = 1; + mSpeed.y = 0.0f; + mNormalSpeed = 0.0f; + if (i_checkWolf()) { + mCommonCounter = mCollisionRot.x; + } + } else { + deleteEquipItem(0, 1); + + if (i_checkEndResetFlg0(ERFLG0_UNK_2) && checkStageName("D_MN08")) { + field_0x3010 = 1; + } + field_0x300a = 0; + + if (i_checkWolf()) { + // Transform Wolf -> Human + setSingleAnimeWolfBase(ANM_TRANFORM_HUMAN); + field_0x3588 = l_wolfBaseAnime; + field_0x347c = 0.5f; + field_0x3480 = daAlinkHIO_basic_c0::m.mWolfLinkTransformSpeed; + mCommonCounter = mCollisionRot.x; + + daMidna_c* midna = getMidnaActor(); + if (i_checkMidnaRide() && midna->checkMidnaRealBody() && midna->checkDemoTypeNone()) { + midna->changeOriginalDemo(); + midna->changeDemoMode(15); + } + } else { + // Transform Human -> Wolf + if (mDemo.getDemoMode() == 0x39 && mDemo.getParam1() == 1) { + voiceStart(Z2SE_AL_V_TRANSFORM); + } + setSingleAnimeBase(ANM_TRANSFORM_WOLF); + setMetamorphoseModel(1); + field_0x3588 = l_waitBaseAnime; + field_0x3480 = daAlinkHIO_basic_c0::m.mLinkWolfTransformSpeed; + + cXyz pos(mCurrent.mPosition.x + (cM_ssin(mCollisionRot.y) * 100.0f), + mCurrent.mPosition.y + 300.0f, + mCurrent.mPosition.z + (cM_scos(mCollisionRot.y) * 100.0f)); + mLinkGndChk.SetPos(&pos); + + f32 gnd_cross = dComIfG_Bgsp().GroundCross(&mLinkGndChk); + if (gnd_cross != -1000000000.0f) { + pos.y = -1000000000.0f; + cXyz tmp_4c = mCurrent.mPosition; + cXyz tmp_58 = pos; + BOOL check = false; + for (int i = 0; i < 4; i++) { + if (i == 3) { + tmp_4c.y = gnd_cross + 5.0f; + } else { + tmp_4c.y = mCurrent.mPosition.y + field_0x18B0[i].GetWallH(); + } + tmp_58.y = tmp_4c.y; + + + if (commonLineCheck(&tmp_4c, &tmp_58) && dBgS_CheckBWallPoly(mLinkLinChk)) { + if (dComIfG_Bgsp().GetWallCode(mLinkLinChk) != 7) { + check = true; + break; + } + } + } + + if (check) { + mCommonCounter = field_0x2ff0; + } else { + pos -= mCurrent.mPosition; + pos.atan2sY_XZ(); + mCommonCounter = svar8; + + if (cM_deg2s(70.0f) < abs(mCommonCounter)) { + mCommonCounter = field_0x2ff0; + } + } + } else { + mCommonCounter = 0; + } + } + mSpeed.y = 0.0f; + mNormalSpeed = 0.0f; + field_0x3012 = 0; + } + + field_0x3484 = mCurrent.mPosition.y; + return 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -18422,6 +18543,7 @@ asm bool daAlink_c::procCoMetamorphoseInit() { #include "asm/d/a/d_a_alink/procCoMetamorphoseInit__9daAlink_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80392070-8039207C 01E6D0 000C+00 0/1 0/0 0/0 .rodata @74273 */ @@ -19258,11 +19380,11 @@ u8 daAlink_c::getClothesChangeWaitTimer() const { /* 800D01A8-800D01E0 0CAAE8 0038+00 1/0 0/0 0/0 .text checkHorseStart__9daAlink_cFv */ u32 daPy_py_c::getLastSceneMode() { - return dComIfGs_getLastSceneMode(); + return dComIfGs_getLastSceneMode() & 0xF; } BOOL daAlink_c::checkHorseStart() { - return checkHorseStart(getLastSceneMode() & 0xF, getStartMode()); + return checkHorseStart(getLastSceneMode(), getStartMode()); } /* 800D01E0-800D0208 0CAB20 0028+00 1/0 0/0 0/0 .text checkCutTurnCharge__9daAlink_cCFv @@ -22110,7 +22232,7 @@ fopAc_ac_c* daAlink_c::getBoomerangActor() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daAlink_c::checkBoomerangChargeEnd() { +asm bool daAlink_c::checkBoomerangChargeEnd() { nofralloc #include "asm/d/a/d_a_alink/checkBoomerangChargeEnd__9daAlink_cFv.s" } diff --git a/src/d/a/d_a_player.cpp b/src/d/a/d_a_player.cpp index 9641162398..3acacdf028 100644 --- a/src/d/a/d_a_player.cpp +++ b/src/d/a/d_a_player.cpp @@ -11,6 +11,7 @@ #include "dolphin/types.h" #include "f_op/f_op_actor_iter.h" #include "f_op/f_op_actor_mng.h" +#include "JSystem/J3DGraphLoader/J3DAnmLoader.h" #include "rel/d/a/d_a_boomerang/d_a_boomerang.h" // @@ -23,12 +24,6 @@ struct mDoMtx_stack_c { static u8 now[48]; }; -struct J3DAnmLoaderDataBaseFlag {}; - -struct J3DAnmLoaderDataBase { - /* 80337B40 */ void load(void const*, J3DAnmLoaderDataBaseFlag); -}; - // // Forward References: // @@ -146,6 +141,10 @@ extern "C" u8 sOldVcdVatCmd__8J3DShape[4]; // Declarations: // +inline s8 dComIfGp_getPlayerCameraID(int idx) { + return g_dComIfG_gameInfo.play.getPlayerCameraID(idx); +} + /* ############################################################################################## */ /* 80453600-80453608 001C00 0004+04 6/6 0/0 0/0 .sdata2 @4215 */ SECTION_SDATA2 static f32 lit_4215[1 + 1 /* padding */] = { @@ -302,37 +301,15 @@ asm void daPy_boomerangMove_c::bgCheckAfterOffset(cXyz const* param_0) { #endif /* 8015EA0C-8015EA20 15934C 0014+00 0/0 3/3 0/0 .text setParamData__9daPy_py_cFiiii */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm u32 daPy_py_c::setParamData(int param_0, int param_1, int param_2, int param_3) { - nofralloc -#include "asm/d/a/d_a_player/setParamData__9daPy_py_cFiiii.s" +u32 daPy_py_c::setParamData(int param_0, int param_1, int param_2, int param_3) { + return param_3 | (param_0 & 0x3F | (param_1 & 0x1F) << 0xC | param_2 << 0x18); } -#pragma pop /* 8015EA20-8015EA48 159360 0028+00 0/0 10/10 3/3 .text checkFishingRodItem__9daPy_py_cFi */ -#ifdef NONMATCHING -BOOL daPy_py_c::checkFishingRodItem(int i_item_id) { - bool is_fishing_item = false; - - if (i_item_id == FISHING_ROD_1 || i_item_id < BEE_ROD || i_item_id <= JEWEL_WORM_ROD) { - is_fishing_item = true; - } - - return is_fishing_item; +BOOL daPy_py_c::checkFishingRodItem(int i_itemNo) { + return i_itemNo == FISHING_ROD_1 || (i_itemNo >= BEE_ROD && i_itemNo <= JEWEL_WORM_ROD); } -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm BOOL daPy_py_c::checkFishingRodItem(int param_0) { - nofralloc -#include "asm/d/a/d_a_player/checkFishingRodItem__9daPy_py_cFi.s" -} -#pragma pop -#endif /* 8015EA48-8015EA88 159388 0040+00 0/0 3/3 0/0 .text checkBombItem__9daPy_py_cFi */ #pragma push @@ -345,25 +322,17 @@ asm BOOL daPy_py_c::checkBombItem(int param_0) { #pragma pop /* 8015EA88-8015EAD8 1593C8 0050+00 0/0 5/5 0/0 .text checkBottleItem__9daPy_py_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm BOOL daPy_py_c::checkBottleItem(int param_0) { - nofralloc -#include "asm/d/a/d_a_player/checkBottleItem__9daPy_py_cFi.s" +// is there a way to write this with a switch? +BOOL daPy_py_c::checkBottleItem(int i_itemNo) { + return (i_itemNo >= EMPTY_BOTTLE && i_itemNo <= FAIRY) || i_itemNo == BEE_CHILD || i_itemNo == WORM || i_itemNo == FAIRY_DROP || i_itemNo == CHUCHU_BLACK || (i_itemNo >= CHUCHU_RARE && i_itemNo <= LV3_SOUP); } -#pragma pop /* 8015EAD8-8015EB40 159418 0068+00 0/0 3/3 0/0 .text checkDrinkBottleItem__9daPy_py_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daPy_py_c::checkDrinkBottleItem(int param_0) { - nofralloc -#include "asm/d/a/d_a_player/checkDrinkBottleItem__9daPy_py_cFi.s" +// is there a way to write this with a switch? +BOOL daPy_py_c::checkDrinkBottleItem(int i_itemNo) { + return (i_itemNo >= RED_BOTTLE && i_itemNo <= HALF_MILK_BOTTLE) || i_itemNo == RED_BOTTLE_2 || i_itemNo == UGLY_SOUP || i_itemNo == HOT_SPRING || i_itemNo == BEE_CHILD || i_itemNo == CHUCHU_BLACK || i_itemNo == FAIRY_DROP || (i_itemNo >= CHUCHU_RARE && i_itemNo != CHUCHU_YELLOW && i_itemNo <= LV3_SOUP); } -#pragma pop /* 8015EB40-8015EB68 159480 0028+00 0/0 4/4 0/0 .text checkOilBottleItem__9daPy_py_cFi */ BOOL daPy_py_c::checkOilBottleItem(int i_itemNo) { @@ -388,14 +357,9 @@ BOOL daPy_py_c::checkHookshotItem(int i_itemNo) { } /* 8015EBD8-8015EC28 159518 0050+00 0/0 3/3 0/0 .text checkTradeItem__9daPy_py_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm BOOL daPy_py_c::checkTradeItem(int param_0) { - nofralloc -#include "asm/d/a/d_a_player/checkTradeItem__9daPy_py_cFi.s" +BOOL daPy_py_c::checkTradeItem(int i_itemNo) { + return (i_itemNo >= LETTER && i_itemNo <= IRIAS_PENDANT) || i_itemNo == ANCIENT_DOCUMENT || i_itemNo == AIR_LETTER || i_itemNo == ANCIENT_DOCUMENT2 || i_itemNo == RAFRELS_MEMO || i_itemNo == TKS_LETTER || i_itemNo == ASHS_SCRIBBLING; } -#pragma pop /* 8015EC28-8015EC48 159568 0020+00 0/0 2/2 0/0 .text checkDungeonWarpItem__9daPy_py_cFi */ @@ -450,33 +414,46 @@ void daPy_anmHeap_c::initData() { } /* 8015EDC4-8015EE00 159704 003C+00 0/0 1/1 1/1 .text mallocBuffer__14daPy_anmHeap_cFv */ -#ifdef NONMATCHING void* daPy_anmHeap_c::mallocBuffer() { - void* buf = new (0x20) void*[mBufferSize]; - mBuffer = buf; + mBuffer = new (0x20) char[mBufferSize]; return mBuffer; } -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void* daPy_anmHeap_c::mallocBuffer() { - nofralloc -#include "asm/d/a/d_a_player/mallocBuffer__14daPy_anmHeap_cFv.s" -} -#pragma pop -#endif /* 8015EE00-8015EF84 159740 0184+00 0/0 1/1 1/1 .text * createHeap__14daPy_anmHeap_cFQ214daPy_anmHeap_c16daAlinkHEAP_TYPE */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daPy_anmHeap_c::createHeap(daPy_anmHeap_c::daAlinkHEAP_TYPE param_0) { - nofralloc -#include "asm/d/a/d_a_player/createHeap__14daPy_anmHeap_cFQ214daPy_anmHeap_c16daAlinkHEAP_TYPE.s" +void daPy_anmHeap_c::createHeap(daPy_anmHeap_c::daAlinkHEAP_TYPE heap_type) { + u32 size; + + if (heap_type == 4) { + size = mBufferSize; + } else if (heap_type == 3) { + size = 0x50; + } else if (heap_type == 0) { + size = 0x40; + } else if (heap_type == 1) { + size = 0x40; + } else { + size = 0xA0; + } + + JKRHeap* tmp; + mAnimeHeap = mDoExt_createSolidHeapFromGameToCurrent(&tmp, size, 0x20); + + if (heap_type == 4) { + char* tmpWork = new char[size]; + } else if (heap_type == 3) { + mDoExt_transAnmBas* tmpTransBas = new mDoExt_transAnmBas(NULL); + } else if (heap_type == 0) { + J3DAnmTransformKey* tmpTrans = new J3DAnmTransformKey(); + } else if (heap_type == 1) { + J3DAnmTexPattern* tmpTp = new J3DAnmTexPattern(); + } else { + J3DAnmTextureSRTKey* tmpTk = new J3DAnmTextureSRTKey(); + } + + mDoExt_setCurrentHeap(tmp); + mDoExt_adjustSolidHeap(mAnimeHeap); } -#pragma pop /* ############################################################################################## */ /* 80453648-80453650 001C48 0008+00 1/0 0/0 0/0 .sdata2 sumouArcName$4614 */ @@ -519,59 +496,66 @@ SECTION_SDATA2 static char lastGanonArcName[8] = "B_gnd"; SECTION_SDATA2 static char pigGanonArcName[8] = "B_mgn"; /* 8015EF84-8015F068 1598C4 00E4+00 3/3 0/0 0/0 .text loadData__14daPy_anmHeap_cFUs */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm J3DAnmBase* daPy_anmHeap_c::loadData(u16 param_0) { - nofralloc -#include "asm/d/a/d_a_player/loadData__14daPy_anmHeap_cFUs.s" +void* daPy_anmHeap_c::loadData(u16 id) { + if (mArcNo == 0xFFFF) { + dComIfGp_getAnmArchive()->readIdxResource(mBuffer, mBufferSize, id); + JKRHeap* heap = setAnimeHeap(); + void* data = J3DAnmLoaderDataBase::load(mBuffer, UNK_FLAG0); + mDoExt_setCurrentHeap(heap); + return data; + } + + if (mArcNo == 0) { + return dComIfG_getObjectIDRes(dStage_roomControl_c::getDemoArcName(), id); + } + + return dComIfG_getObjectRes(arcName[mArcNo - 1], id); } -#pragma pop /* 8015F068-8015F0D0 1599A8 0068+00 0/0 9/9 5/5 .text loadDataIdx__14daPy_anmHeap_cFUs */ -J3DAnmBase* daPy_anmHeap_c::loadDataIdx(u16 pID) { - J3DAnmBase* tmp; +void* daPy_anmHeap_c::loadDataIdx(u16 id) { + void* data; - if (pID == mIdx && mArcNo == 0xffff) { - tmp = NULL; + if (id == mIdx && mArcNo == 0xFFFF) { + data = NULL; } else { - mIdx = pID; - mArcNo = 0xffff; - if (mPriIdx == 0xffff) { - tmp = loadData(pID); + mIdx = id; + mArcNo = 0xFFFF; + if (mPriIdx == 0xFFFF) { + data = loadData(id); } else { - tmp = NULL; + data = NULL; } } - return tmp; + return data; } /* 8015F0D0-8015F118 159A10 0048+00 0/0 3/3 0/0 .text loadDataPriIdx__14daPy_anmHeap_cFUs */ -J3DAnmBase* daPy_anmHeap_c::loadDataPriIdx(u16 pID) { - J3DAnmBase* tmp; +void* daPy_anmHeap_c::loadDataPriIdx(u16 id) { + void* data; - if (pID == mPriIdx || mArcNo != 0xffff) { - tmp = NULL; + if (id == mPriIdx || mArcNo != 0xFFFF) { + data = NULL; } else { - mPriIdx = pID; - tmp = loadData(pID); + mPriIdx = id; + data = loadData(id); } - return tmp; + return data; } /* 8015F118-8015F168 159A58 0050+00 0/0 5/5 5/5 .text loadDataDemoRID__14daPy_anmHeap_cFUsUs */ -J3DAnmBase* daPy_anmHeap_c::loadDataDemoRID(u16 pID, u16 pArcNo) { - J3DAnmBase* tmp; +void* daPy_anmHeap_c::loadDataDemoRID(u16 id, u16 arc_no) { + void* data; - if (pID == mIdx && pArcNo == mArcNo) { - tmp = NULL; + if (id == mIdx && arc_no == mArcNo) { + data = NULL; } else { - mIdx = pID; - mArcNo = pArcNo; - tmp = loadData(pID); + mIdx = id; + mArcNo = arc_no; + data = loadData(id); } - return tmp; + return data; } /* 8015F168-8015F1A0 159AA8 0038+00 1/1 4/4 0/0 .text setAnimeHeap__14daPy_anmHeap_cFv */ @@ -582,7 +566,7 @@ JKRHeap* daPy_anmHeap_c::setAnimeHeap() { /* ############################################################################################## */ /* 803BA0C0-803BA14C 0171E0 0089+03 1/1 0/0 0/0 .data l_sightDL */ -SECTION_DATA static u8 l_sightDL[137 + 3 /* padding */] = { +SECTION_DATA static u8 l_sightDL[137] = { 0x10, 0x00, 0x00, @@ -720,10 +704,6 @@ SECTION_DATA static u8 l_sightDL[137 + 3 /* padding */] = { 0x00, 0x00, 0x00, - /* padding */ - 0x00, - 0x00, - 0x00, }; /* 80453678-8045367C 001C78 0004+00 1/1 0/0 0/0 .sdata2 @4668 */ @@ -759,14 +739,10 @@ asm void daPy_sightPacket_c::setSight() { /* 8015F384-8015F398 159CC4 0014+00 0/0 1/1 0/0 .text * setSightImage__18daPy_sightPacket_cFP7ResTIMG */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daPy_sightPacket_c::setSightImage(ResTIMG* param_0) { - nofralloc -#include "asm/d/a/d_a_player/setSightImage__18daPy_sightPacket_cFP7ResTIMG.s" +void daPy_sightPacket_c::setSightImage(ResTIMG* p_img) { + mpImg = p_img; + mpData = (u8*)p_img + p_img->texDataOffset; } -#pragma pop /* 8015F398-8015F3C4 159CD8 002C+00 0/0 8/8 10/10 .text checkMasterSwordEquip__9daPy_py_cFv */ BOOL daPy_py_c::checkMasterSwordEquip() { @@ -811,72 +787,74 @@ s16 daPy_py_c::checkNowWolfEyeUp() { /* 8015F438-8015F478 159D78 0040+00 0/0 0/0 1/1 .text forceRestartRoom__9daPy_py_cFiUli */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daPy_py_c::forceRestartRoom(int param_0, u32 param_1, int param_2) { - nofralloc -#include "asm/d/a/d_a_player/forceRestartRoom__9daPy_py_cFiUli.s" +// move these inlines? +inline BOOL i_dComIfGp_event_runCheck() { + return g_dComIfG_gameInfo.play.getEvent().runCheck(); +} + +void daAlink_c::startRestartRoomFromOut(int param_0, u32 param_1, int param_2) { + startRestartRoom(param_1, param_2, param_0, i_dComIfGp_event_runCheck()); +} + +void daPy_py_c::forceRestartRoom(int param_0, u32 param_1, int param_2) { + daAlink_getAlinkActorClass()->startRestartRoomFromOut(param_0, param_1, param_2); } -#pragma pop /* 8015F478-8015F4B8 159DB8 0040+00 0/0 0/0 3/3 .text * setFmChainPos__9daPy_py_cFP10fopAc_ac_cP4cXyzi */ -#ifdef NONMATCHING void daPy_py_c::setFmChainPos(fopAc_ac_c* param_0, cXyz* param_1, int param_2) { daAlink_getAlinkActorClass()->setFmChainPosFromOut(param_0, param_1, param_2); } + +/* 8015F4B8-8015F4F0 159DF8 0038+00 0/0 0/0 1/1 .text cancelFmChainGrab__9daPy_py_cFv */ +void daPy_py_c::cancelFmChainGrab() { + daAlink_getAlinkActorClass()->cancelFmChainGrabFromOut(); +} + +/* 8015F4F0-8015F520 159E30 0030+00 0/0 0/0 17/17 .text setLookPos__9daPy_py_cFP4cXyz */ +void daPy_py_c::setLookPos(cXyz* p_pos) { + daAlink_getAlinkActorClass()->setLookPosFromOut(p_pos); +} + +/* 8015F520-8015F55C 159E60 003C+00 0/0 0/0 4/4 .text setPlayerSe__9daPy_py_cFUl */ +void daPy_py_c::setPlayerSe(u32 se_id) { + daAlink_getAlinkActorClass()->seStartOnlyReverb(se_id); +} + +/* 8015F55C-8015F60C 159E9C 00B0+00 1/1 0/0 2/2 .text + * linkGrabSubjectNoDraw__9daPy_py_cFP10fopAc_ac_c */ +// regalloc +#ifdef NONMATCHING +inline daPy_py_c* daPy_getPlayerActorClass() { + return (daPy_py_c*)dComIfGp_getPlayer(0); +} + +bool daPy_py_c::linkGrabSubjectNoDraw(fopAc_ac_c* p_ac) { + bool check_carry = false; + bool ret = false; + + if (fopAcM_checkCarryNow(p_ac)) { + if (daPy_getPlayerActorClass()->getGrabActorID() == fopAcM_GetID(p_ac)) { + check_carry = true; + } + } + + if (check_carry && dComIfGp_checkCameraAttentionStatus(dComIfGp_getPlayerCameraID(0), 2) != 0) { + ret = true; + } + + return ret; +} #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daPy_py_c::setFmChainPos(fopAc_ac_c* param_0, cXyz* param_1, int param_2) { - nofralloc -#include "asm/d/a/d_a_player/setFmChainPos__9daPy_py_cFP10fopAc_ac_cP4cXyzi.s" -} -#pragma pop -#endif - -/* 8015F4B8-8015F4F0 159DF8 0038+00 0/0 0/0 1/1 .text cancelFmChainGrab__9daPy_py_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daPy_py_c::cancelFmChainGrab() { - nofralloc -#include "asm/d/a/d_a_player/cancelFmChainGrab__9daPy_py_cFv.s" -} -#pragma pop - -/* 8015F4F0-8015F520 159E30 0030+00 0/0 0/0 17/17 .text setLookPos__9daPy_py_cFP4cXyz */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daPy_py_c::setLookPos(cXyz* param_0) { - nofralloc -#include "asm/d/a/d_a_player/setLookPos__9daPy_py_cFP4cXyz.s" -} -#pragma pop - -/* 8015F520-8015F55C 159E60 003C+00 0/0 0/0 4/4 .text setPlayerSe__9daPy_py_cFUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daPy_py_c::setPlayerSe(u32 param_0) { - nofralloc -#include "asm/d/a/d_a_player/setPlayerSe__9daPy_py_cFUl.s" -} -#pragma pop - -/* 8015F55C-8015F60C 159E9C 00B0+00 1/1 0/0 2/2 .text - * linkGrabSubjectNoDraw__9daPy_py_cFP10fopAc_ac_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daPy_py_c::linkGrabSubjectNoDraw(fopAc_ac_c* param_0) { +asm bool daPy_py_c::linkGrabSubjectNoDraw(fopAc_ac_c* param_0) { nofralloc #include "asm/d/a/d_a_player/linkGrabSubjectNoDraw__9daPy_py_cFP10fopAc_ac_c.s" } #pragma pop +#endif /* 8015F60C-8015F660 159F4C 0054+00 0/0 0/0 2/2 .text * wolfGrabSubjectNoDraw__9daPy_py_cFP10fopAc_ac_c */ @@ -889,36 +867,45 @@ asm void daPy_py_c::wolfGrabSubjectNoDraw(fopAc_ac_c* param_0) { } #pragma pop +u32 daPy_py_c::getLastSceneMode() { + return dComIfGs_getLastSceneMode() & 0xF; +} + /* 8015F660-8015F698 159FA0 0038+00 2/2 1/1 1/1 .text checkRoomRestartStart__9daPy_py_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daPy_py_c::checkRoomRestartStart() { - nofralloc -#include "asm/d/a/d_a_player/checkRoomRestartStart__9daPy_py_cFv.s" +bool daPy_py_c::checkRoomRestartStart() { + u8 mode = getLastSceneMode(); + + if (mode == 4 || mode == 8 || mode == 5) { + return true; + } else { + return false; + } +} + +inline dStage_stageDt_c* dComIfGp_getStage() { + return &g_dComIfG_gameInfo.play.getStage(); +} + +inline s32 dStage_stagInfo_GetSaveTbl(stage_stag_info_class* param_0) { + return param_0->field_0x09 >> 1 & 0x1f; } -#pragma pop /* 8015F698-8015F730 159FD8 0098+00 0/0 2/2 1/1 .text checkCarryStartLightBallA__9daPy_py_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm u32 daPy_py_c::checkCarryStartLightBallA() { - nofralloc -#include "asm/d/a/d_a_player/checkCarryStartLightBallA__9daPy_py_cFv.s" +u32 daPy_py_c::checkCarryStartLightBallA() { + if (checkRoomRestartStart() || !dComIfGp_getStage() || !dComIfGp_getStage()->getStagInfo() || dStage_stagInfo_GetSaveTbl(dComIfGp_getStage()->getStagInfo()) != 0x17) { + return FALSE; + } + return dComIfGs_getLastSceneMode() & 0x100000; } -#pragma pop /* 8015F730-8015F7C8 15A070 0098+00 0/0 2/2 1/1 .text checkCarryStartLightBallB__9daPy_py_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm u32 daPy_py_c::checkCarryStartLightBallB() { - nofralloc -#include "asm/d/a/d_a_player/checkCarryStartLightBallB__9daPy_py_cFv.s" +u32 daPy_py_c::checkCarryStartLightBallB() { + if (checkRoomRestartStart() || !dComIfGp_getStage() || !dComIfGp_getStage()->getStagInfo() || dStage_stagInfo_GetSaveTbl(dComIfGp_getStage()->getStagInfo()) != 0x17) { + return FALSE; + } + return dComIfGs_getLastSceneMode() & 0x80000; } -#pragma pop float daPy_py_c::getSpinnerRideSpeed() const { float rideSpeed; @@ -942,14 +929,9 @@ asm void daPy_py_c::checkSpinnerReflectEffect() { /* 8015F89C-8015F8C8 15A1DC 002C+00 0/0 0/0 7/7 .text checkBoomerangCharge__9daPy_py_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daPy_py_c::checkBoomerangCharge() { - nofralloc -#include "asm/d/a/d_a_player/checkBoomerangCharge__9daPy_py_cFv.s" +bool daPy_py_c::checkBoomerangCharge() { + return daAlink_getAlinkActorClass()->checkBoomerangChargeEnd(); } -#pragma pop /* 8015F8C8-8015F8D0 15A208 0008+00 0/0 0/0 1/1 .text checkBoomerangChargeTime__9daPy_py_cFv */ bool daPy_py_c::checkBoomerangChargeTime() { @@ -964,46 +946,75 @@ daBoomerang_c* daPy_py_c::getThrowBoomerangActor() { /* 8015F8E4-8015F914 15A224 0030+00 0/0 0/0 2/2 .text * cancelBoomerangLockActor__9daPy_py_cFP10fopAc_ac_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daPy_py_c::cancelBoomerangLockActor(fopAc_ac_c* param_0) { - nofralloc -#include "asm/d/a/d_a_player/cancelBoomerangLockActor__9daPy_py_cFP10fopAc_ac_c.s" +void daPy_py_c::cancelBoomerangLockActor(fopAc_ac_c* p_ac) { + daAlink_getAlinkActorClass()->cancelBoomerangLock(p_ac); } -#pragma pop /* 8015F914-8015F954 15A254 0040+00 0/0 0/0 2/2 .text setPlayerDamage__9daPy_py_cFii */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daPy_py_c::setPlayerDamage(int param_0, int param_1) { - nofralloc -#include "asm/d/a/d_a_player/setPlayerDamage__9daPy_py_cFii.s" +void daPy_py_c::setPlayerDamage(int param_0, int param_1) { + daAlink_getAlinkActorClass()->setDamagePoint(param_0, 0, param_1, 0); } -#pragma pop /* 8015F954-8015F968 15A294 0014+00 0/0 3/3 0/0 .text setMidnaMotionNum__9daPy_py_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daPy_py_c::setMidnaMotionNum(int param_0) { - nofralloc -#include "asm/d/a/d_a_player/setMidnaMotionNum__9daPy_py_cFi.s" +void daPy_py_c::setMidnaMotionNum(int motion_num) { + if (m_midnaActor != NULL) { + m_midnaActor->setMotionNum(motion_num); + } } -#pragma pop /* 8015F968-8015F97C 15A2A8 0014+00 0/0 3/3 0/0 .text setMidnaFaceNum__9daPy_py_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daPy_py_c::setMidnaFaceNum(int param_0) { - nofralloc -#include "asm/d/a/d_a_player/setMidnaFaceNum__9daPy_py_cFi.s" +void daPy_py_c::setMidnaFaceNum(int face_num) { + if (m_midnaActor != NULL) { + m_midnaActor->setFaceNum(face_num); + } } -#pragma pop /* 8015F97C-8015FA2C 15A2BC 00B0+00 0/0 7/7 2/2 .text daPy_addCalcShort__FPsssss */ +// 1 instruction in wrong place +#ifdef NONMATCHING +int daPy_addCalcShort(s16* param_0, s16 param_1, s16 param_2, s16 param_3, s16 param_4) { + s16 temp_r0; + s16 temp_r0_2; + s16 temp_r8; + s16 temp_r9; + s32 temp_r10; + s32 temp_r4; + s32 temp_r5; + s32 phi_r4; + + temp_r8 = *param_0; + temp_r9 = (s16) param_1; + temp_r10 = temp_r9 - temp_r8; + + if (temp_r8 != temp_r9) { + temp_r5 = temp_r10 / param_2; + temp_r0 = (s16) param_4; + if (temp_r5 > temp_r0 || temp_r5 < -temp_r0) { + temp_r0_2 = param_3; + temp_r4 = -temp_r0_2; + phi_r4 = temp_r4; + if (temp_r5 < temp_r4) { + phi_r4 = temp_r5; + } else if (temp_r5 > temp_r0_2) { + phi_r4 = temp_r0_2; + } + *param_0 += phi_r4; + } + else if (temp_r10 >= 0) { + *param_0 = temp_r8 + param_4; + if (temp_r9 - *param_0 <= 0) { + *param_0 = param_1; + } + } else { + *param_0 = temp_r8 - param_4; + if (temp_r9 - *param_0 >= 0) { + *param_0 = param_1; + } + } + } + return temp_r9 - *param_0; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -1012,6 +1023,7 @@ asm void daPy_addCalcShort(s16* param_0, s16 param_1, s16 param_2, s16 param_3, #include "asm/d/a/d_a_player/daPy_addCalcShort__FPsssss.s" } #pragma pop +#endif /* ############################################################################################## */ /* 803BA14C-803BA160 01726C 0010+04 0/0 4/4 0/0 .data __vt__18daPy_sightPacket_c */ diff --git a/src/d/bg/d_bg_s.cpp b/src/d/bg/d_bg_s.cpp index 6182b7c416..5516f14d1e 100644 --- a/src/d/bg/d_bg_s.cpp +++ b/src/d/bg/d_bg_s.cpp @@ -533,7 +533,7 @@ bool dBgS::GetUnderwaterRoofCode(cBgS_PolyInfo const& poly) { } /* 80074E00-80074E50 06F740 0050+00 0/0 13/13 5/5 .text GetWallCode__4dBgSFRC13cBgS_PolyInfo */ -bool dBgS::GetWallCode(cBgS_PolyInfo const& poly) { +s32 dBgS::GetWallCode(cBgS_PolyInfo const& poly) { int bg_index = poly.GetBgIndex(); if (m_chk_element[bg_index].ChkUsed()) { return m_chk_element[bg_index].m_bgw_base_ptr->GetWallCode(poly); diff --git a/src/d/bg/d_bg_w.cpp b/src/d/bg/d_bg_w.cpp index 51cd65b8ba..ba90aee54a 100644 --- a/src/d/bg/d_bg_w.cpp +++ b/src/d/bg/d_bg_w.cpp @@ -1157,7 +1157,7 @@ asm void dBgW::GetLinkNo(cBgS_PolyInfo const& param_0) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm bool dBgW::GetWallCode(cBgS_PolyInfo const& param_0) { +asm s32 dBgW::GetWallCode(cBgS_PolyInfo const& param_0) { nofralloc #include "asm/d/bg/d_bg_w/GetWallCode__4dBgWFRC13cBgS_PolyInfo.s" } diff --git a/src/d/bg/d_bg_w_kcol.cpp b/src/d/bg/d_bg_w_kcol.cpp index dbf04a7a1e..4332c70011 100644 --- a/src/d/bg/d_bg_w_kcol.cpp +++ b/src/d/bg/d_bg_w_kcol.cpp @@ -761,7 +761,7 @@ asm void dBgWKCol::GetLinkNo(cBgS_PolyInfo const& param_0) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dBgWKCol::GetWallCode(cBgS_PolyInfo const& param_0) { +asm s32 dBgWKCol::GetWallCode(cBgS_PolyInfo const& param_0) { nofralloc #include "asm/d/bg/d_bg_w_kcol/GetWallCode__8dBgWKColFRC13cBgS_PolyInfo.s" } diff --git a/src/d/com/d_com_inf_game.cpp b/src/d/com/d_com_inf_game.cpp index d5cf762663..08d9c99cb4 100644 --- a/src/d/com/d_com_inf_game.cpp +++ b/src/d/com/d_com_inf_game.cpp @@ -392,7 +392,7 @@ extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; // Declarations: // -inline u8 dStage_stagInfo_GetSaveTbl(stage_stag_info_class* param_0) { +inline s32 dStage_stagInfo_GetSaveTbl(stage_stag_info_class* param_0) { return param_0->field_0x09 >> 1 & 0x1f; } diff --git a/src/d/d_resorce.cpp b/src/d/d_resorce.cpp index b03b1e7cca..28167fca6d 100644 --- a/src/d/d_resorce.cpp +++ b/src/d/d_resorce.cpp @@ -31,10 +31,6 @@ struct mDoGph_gInf_c { static u8 mZbufferTimg[4]; }; -struct mDoExt_transAnmBas { - /* 8003C784 */ ~mDoExt_transAnmBas(); -}; - struct dBgWKCol { /* 8007E7D0 */ void initKCollision(void*); }; @@ -996,7 +992,7 @@ asm void* dRes_control_c::getRes(char const* param_0, char const* param_1, dRes_ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dRes_control_c::getIDRes(char const* param_0, u16 param_1, dRes_info_c* param_2, +asm void* dRes_control_c::getIDRes(char const* param_0, u16 param_1, dRes_info_c* param_2, int param_3) { nofralloc #include "asm/d/d_resorce/getIDRes__14dRes_control_cFPCcUsP11dRes_info_ci.s" @@ -1096,7 +1092,8 @@ s32 J3DAnmTransform::getKind() const { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm mDoExt_transAnmBas::~mDoExt_transAnmBas() { +// asm mDoExt_transAnmBas::~mDoExt_transAnmBas() { +extern "C" asm void __dt__18mDoExt_transAnmBasFv() { nofralloc #include "asm/d/d_resorce/__dt__18mDoExt_transAnmBasFv.s" } diff --git a/src/d/d_stage.cpp b/src/d/d_stage.cpp index 4d2c6c29e7..1130c28ba4 100644 --- a/src/d/d_stage.cpp +++ b/src/d/d_stage.cpp @@ -433,8 +433,8 @@ extern "C" u8 mResetData__6mDoRst[4 + 4 /* padding */]; // Declarations: // -inline dStage_stageDt_c& dComIfGp_getStage() { - return g_dComIfG_gameInfo.play.getStage(); +inline dStage_stageDt_c* dComIfGp_getStage() { + return &g_dComIfG_gameInfo.play.getStage(); } void dStage_nextStage_c::set(const char* i_stage, s8 i_roomId, s16 i_point, s8 i_layer, s8 i_wipe, @@ -2283,7 +2283,7 @@ void dStage_infoCreate() { void* stageRsrc = dComIfG_getStageRes("stage.dzs"); dComIfGp_roomControl_init(); - dStage_dt_c_stageInitLoader(stageRsrc, &dComIfGp_getStage()); + dStage_dt_c_stageInitLoader(stageRsrc, dComIfGp_getStage()); } /* ############################################################################################## */ @@ -2294,7 +2294,7 @@ SECTION_DEAD static char const* const stringBase_80378B73 = "vrbox_sora.bmd"; #pragma pop /* 80406194-804061A0 032EB4 000A+02 2/2 14/14 7/7 .bss mDemoArcName__20dStage_roomControl_c */ -u8 dStage_roomControl_c::mDemoArcName[10 + 2 /* padding */]; +char dStage_roomControl_c::mDemoArcName[10]; /* 80026D38-80026DF8 021678 00C0+00 0/0 1/1 0/0 .text dStage_Create__Fv */ #pragma push diff --git a/src/d/kankyo/d_kankyo.cpp b/src/d/kankyo/d_kankyo.cpp index b70262a10d..56fc46daa2 100644 --- a/src/d/kankyo/d_kankyo.cpp +++ b/src/d/kankyo/d_kankyo.cpp @@ -3177,7 +3177,7 @@ asm void dKy_depth_dist_set(void* param_0) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dKy_darkworld_check() { +asm bool dKy_darkworld_check() { nofralloc #include "asm/d/kankyo/d_kankyo/dKy_darkworld_check__Fv.s" } diff --git a/src/d/meter/d_meter2.cpp b/src/d/meter/d_meter2.cpp index 5af6b8a96e..408f259c6c 100644 --- a/src/d/meter/d_meter2.cpp +++ b/src/d/meter/d_meter2.cpp @@ -308,31 +308,330 @@ SECTION_SDATA2 static u8 lit_4662[4] = { /* 804549CC-804549D0 002FCC 0004+00 13/13 0/0 0/0 .sdata2 @4663 */ SECTION_SDATA2 static f32 lit_4663 = 1.0f; -/* 8021EA14-8021F128 219354 0714+00 1/1 0/0 0/0 .text _create__9dMeter2_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMeter2_c::_create() { - nofralloc -#include "asm/d/meter/d_meter2/_create__9dMeter2_cFv.s" +inline u16 dComIfGs_getLife() { + return g_dComIfG_gameInfo.info.getPlayer().getPlayerStatusA().getLife(); +} + +inline u16 i_dComIfGs_getRupee() { + return g_dComIfG_gameInfo.info.getPlayer().getPlayerStatusA().getRupee(); +} + +inline u8 dComIfGp_getRStatus() { + return g_dComIfG_gameInfo.play.getRStatus(); +} + +inline void dComIfGp_setBottleStatus(u8 param_0, u8 param_1) { + g_dComIfG_gameInfo.play.setBottleStatus(param_0, param_1); +} + +inline u8 dComIfGp_getDoStatus() { + return g_dComIfG_gameInfo.play.getDoStatus(); +} + +inline void dMeter2Info_offUseButton(int flag) { + g_meter2_info.offUseButton(flag); +} + +/* 8021EA14-8021F128 219354 0714+00 1/1 0/0 0/0 .text _create__9dMeter2_cFv */ +// this can be cleaned up with float literals when everything else is decompiled +int dMeter2_c::_create() { + stage_stag_info_class* stag_info = dComIfGp_getStageStagInfo(); + if (dStage_stagInfo_GetUpButton(stag_info) == 1) { + mpHeap = fopMsgM_createExpHeap(0x5A400, NULL); + } else { + mpHeap = fopMsgM_createExpHeap(0x60800, NULL); + } + + JKRHeap* heap = mDoExt_setCurrentHeap(mpHeap); + mpHeap->getTotalFreeSize(); + + if (!strcmp(dComIfGp_getStartStageName(), "F_SP00")) { + dMeter2Info_setNowCount(0); + dMeter2Info_setMaxCount(0); + } + + field_0x128 = 0; + field_0x12c = field_0x128; + field_0x124 = 0; + mSubContents = 0; + mSubContentsStringType = 0; + field_0x1e6 = 0; + field_0x1e7 = 0; + + mItemMaxNum[2] = dComIfGs_getArrowMax(); + mArrowNum = dComIfGs_getArrowNum(); + mItemMaxNum[3] = dComIfGs_getPachinkoMax(); + mPachinkoNum = dComIfGs_getPachinkoNum(); + + for (int i = 0; i < 3; i++) { + mBombMax[i] = dComIfGs_getBombMax(dComIfGs_getItem((u8)(i + SLOT_15), 1)); + mBombNum[i] = dComIfGs_getBombNum(i); + } + + for (int i = 0; i < 2; i++) { + mItemMaxNum[i] = dComIfGs_getSelectItemIndex(i); + } + + for (int i = 0; i < 4; i++) { + mBottleNum[i] = dComIfGs_getBottleNum(i); + } + + field_0x1e8 = 0; + field_0x1e9 = 0; + field_0x1ea = 0; + field_0x1eb = 0; + + for (int i = 0; i < 5; i++) { + field_0x1b8[i] = 0; + } + + field_0x1ec = 0; + field_0x1ed = 0; + field_0x1ee = 0; + + mNowLifeGauge = dComIfGs_getLife(); + dComIfGp_setItemNowLife((u8)mNowLifeGauge); + + mMaxLife = dComIfGs_getMaxLife(); + + mNowMagic = dComIfGs_getMagic(); + dComIfGp_setItemNowMagic(mNowMagic); + + mMaxMagic = dComIfGs_getMaxMagic(); + + mNowOil = dComIfGs_getOil(); + dComIfGp_setItemNowOil(mNowOil); + + mMaxOil = dComIfGs_getMaxOil(); + + mNowOxygen = dComIfGp_getOxygen(); + dComIfGp_setNowOxygen(mNowOxygen); + + mMaxOxygen = dComIfGp_getMaxOxygen(); + + field_0x130 = FLOAT_LABEL(lit_4662); + + u8 dark_area = dComIfGp_getStartStageDarkArea(); + mLightDropNum = dComIfGs_getLightDropNum(dark_area); + + mNeedLightDropNum = dComIfGp_getNeedLightDropNum(); + + mRupeeNum = i_dComIfGs_getRupee(); + mKeyNum = dComIfGs_getKeyNum(); + + field_0x1c4 = dComIfGp_getDoStatus(); + field_0x1dc = dComIfGp_isDoSetFlag(2); + + int i = 0; + f32 temp0 = FLOAT_LABEL(lit_4662); + for (; i < 2; i++) { + field_0x134[i] = temp0; + field_0x13c[i] = temp0; + } + field_0x144 = lit_4663; + + field_0x1c5 = dComIfGp_getAStatus(); + field_0x1c6 = 0; + field_0x1dd = dComIfGp_isASetFlag(2); + + i = 0; + f32 temp1 = FLOAT_LABEL(lit_4662); + for (; i < 2; i++) { + field_0x148[i] = temp1; + field_0x150[i] = temp1; + } + field_0x158 = lit_4663; + + field_0x1e4 = 0; + field_0x1e2 = dComIfGs_getSelectEquipSword(); + field_0x1e3 = 0; + + field_0x1fe = 0; + field_0x1fd = 0; + field_0x1ff = 0; + field_0x200 = 0; + field_0x201 = 0; + + field_0x1c7 = dComIfGs_getCollectSmell(); + field_0x1c8 = dComIfGp_getRStatus(); + field_0x1de = dComIfGp_isRSetFlag(2); + field_0x1df = dComIfGp_isXSetFlag(2); + field_0x1e0 = dComIfGp_isYSetFlag(2); + + for (int i = 0; i < 2; i++) { + dComIfGp_setSelectItem(i); + } + + field_0x1d2[0] = dComIfGp_getSelectItem(0); + field_0x1d2[2] = dComIfGp_getSelectItem(1); + field_0x1d2[1] = dComIfGp_getXStatus(); + field_0x1d2[3] = dComIfGp_getYStatus(); + f32 temp2 = FLOAT_LABEL(lit_4662); + field_0x188 = temp2; + field_0x18c = temp2; + + for (int i = 0; i < 2; i++) { + field_0x1d6[i] = dMeter2Info_isDirectUseItem(i); + field_0x1d8[i] = dComIfGp_getSelectItemNum(i); + } + + field_0x1e1 = 0; + field_0x1b4 = 0; + + f32 temp3 = FLOAT_LABEL(lit_4662); + field_0x15c = temp3; + + for (int i = 0; i < 4; i++) { + field_0x160[i] = temp3; + field_0x174[i] = temp3; + } + field_0x190 = 0; + + field_0x1c9 = dComIfGp_getZStatus(); + field_0x1ca = dComIfGp_get3DStatus(); + field_0x1cb = dComIfGp_getCStickStatus(); + field_0x1cc = dComIfGp_getSButtonStatus(); + field_0x1cd = dComIfGp_getNunStatus(); + field_0x1ce = dComIfGp_getRemoConStatus(); + field_0x1cf = dComIfGp_getNunZStatus(); + field_0x1d0 = dComIfGp_getNunCStatus(); + field_0x1d1 = dComIfGp_getBottleStatus(); + + field_0x1ac = dMeter2Info_isUseButton(16); + field_0x19a = 0; + + mpMeterDraw = new dMeter2Draw_c(mpHeap); + + field_0x130 = mpMeterDraw->getNowLightDropRateCalc(); + mpHeap->getTotalFreeSize(); + + for (int i = 0; i < 2; i++) { + if (field_0x128 == 0) { + if (field_0x1d2[i * 2] == BOMB_BAG_LV1 || field_0x1d2[i * 2] == NORMAL_BOMB || + field_0x1d2[i * 2] == WATER_BOMB || field_0x1d2[i * 2] == POKE_BOMB) { + mpMeterDraw->setItemNum(i, dComIfGp_getSelectItemNum(i), dComIfGp_getSelectItemMaxNum(i)); + } else if (field_0x1d2[i * 2] == BEE_CHILD) { + mpMeterDraw->setItemNum(i, dComIfGp_getSelectItemNum(i), dComIfGp_getSelectItemMaxNum(i)); + } else if (field_0x1d2[i * 2] == BOW || field_0x1d2[i * 2] == LIGHT_ARROW || + field_0x1d2[i * 2] == ARROW_LV1 || field_0x1d2[i * 2] == ARROW_LV2 || + field_0x1d2[i * 2] == ARROW_LV3 || field_0x1d2[i * 2] == HAWK_ARROW) { + mpMeterDraw->setItemNum(i, mArrowNum, dComIfGs_getArrowMax()); + } else if (field_0x1d2[i * 2] == PACHINKO) { + mpMeterDraw->setItemNum(i, mPachinkoNum, dComIfGs_getPachinkoMax()); + } else if (field_0x1d2[i * 2] == BOMB_ARROW) { + u8 item_num = dComIfGp_getSelectItemNum(i); + u8 item_max = dComIfGp_getSelectItemMaxNum(i); + if (item_num > mArrowNum) { + item_num = mArrowNum; + } + u8 temp = dComIfGs_getArrowMax() & 0xFF; + if (item_max < temp) { + item_max = temp; + } + mpMeterDraw->setItemNum(i, item_num, item_max); + } + } + } + + mpMap = NULL; + if (dMeterMap_c::isEnableDispMapAndMapDispSizeTypeNo()) { + mpMap = new dMeterMap_c(mpMeterDraw->getMainScreenPtr()); + } else { + if (g_meter2_info.mMapStatus == 2) { + g_meter2_info.mMapStatus = 0; + } + } + dMeter2Info_setMeterMapClass(mpMap); + + mpHeap->getTotalFreeSize(); + mpSubHeap = fopMsgM_createExpHeap(0x5000, mpHeap); + field_0x108 = NULL; + field_0x110 = NULL; + field_0x114 = NULL; + field_0x118 = NULL; + + mpHeap->getTotalFreeSize(); + field_0x11c = NULL; + mDoExt_setCurrentHeap(heap); + return 4; +} + +inline BOOL dComIfGs_isEventBit(u16 id) { + return g_dComIfG_gameInfo.info.getSavedata().getEvent().isEventBit(id); +} + +inline BOOL dComIfGp_event_runCheck() { + return g_dComIfG_gameInfo.play.getEvent().runCheck(); } -#pragma pop /* 8021F128-8021F370 219A68 0248+00 1/1 0/0 0/0 .text _execute__9dMeter2_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMeter2_c::_execute() { - nofralloc -#include "asm/d/meter/d_meter2/_execute__9dMeter2_cFv.s" +int dMeter2_c::_execute() { + JKRHeap* heap = mDoExt_setCurrentHeap(mpHeap); + + if (!dComIfGs_isCollectMirror(0) && dComIfGs_isEventBit(0x5420)) { + dComIfGs_onCollectMirror(0); + } + + if (!dComIfGs_isCollectCrystal(3) && dComIfGs_isEventBit(0x5410)) { + dComIfGs_onCollectCrystal(3); + } + + checkStatus(); + mpMeterDraw->exec(field_0x124); + + moveLife(); + moveKantera(); + moveOxygen(); + moveLightDrop(); + moveRupee(); + moveKey(); + moveButtonXY(); + moveButtonA(); + moveButtonB(); + moveButtonR(); + moveButtonZ(); + moveButton3D(); + moveButtonC(); + moveButtonS(); + moveButtonCross(); + moveTouchSubMenu(); + moveBombNum(); + moveArrowNum(); + movePachinkoNum(); + moveBottleNum(); + + if (mpMap != NULL) { + mpMap->_move(field_0x124); + } else { + dMeterMap_c::meter_map_move(field_0x124); + } + + moveSubContents(); + move2DContents(); + + if (!dComIfGp_isPauseFlag() && !dComIfGp_event_runCheck()) { + dMeter2Info_decHotSpringTimer(); + } + + dMeter2Info_allUseButton(); + dMeter2Info_offUseButton(0x800); + dMeter2Info_resetGameStatus(); + dComIfGp_setNunStatus(0, 0, 0); + dComIfGp_setRemoConStatus(0, 0, 0); + dComIfGp_setNunZStatus(0, 0); + dComIfGp_setNunCStatus(0, 0); + dComIfGp_setBottleStatus(0, 0); + dComIfGp_setCStickStatus(0, 0, 0); + + mDoExt_setCurrentHeap(heap); + return 1; } -#pragma pop /* 8021F370-8021F49C 219CB0 012C+00 1/1 0/0 0/0 .text _draw__9dMeter2_cFv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dMeter2_c::_draw() { +asm int dMeter2_c::_draw() { nofralloc #include "asm/d/meter/d_meter2/_draw__9dMeter2_cFv.s" } @@ -350,7 +649,7 @@ SECTION_SDATA2 static f32 lit_4837[1 + 1 /* padding */] = { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dMeter2_c::_delete() { +asm int dMeter2_c::_delete() { nofralloc #include "asm/d/meter/d_meter2/_delete__9dMeter2_cFv.s" } @@ -367,15 +666,16 @@ asm void dMeter2_c::emphasisButtonDelete() { } #pragma pop -/* 8021F780-8021F7B0 21A0C0 0030+00 0/0 0/0 1/1 .text setLifeZero__9dMeter2_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMeter2_c::setLifeZero() { - nofralloc -#include "asm/d/meter/d_meter2/setLifeZero__9dMeter2_cFv.s" +inline void i_dComIfGp_setItemLifeCount(f32 amount, u8 type) { + g_dComIfG_gameInfo.play.setItemLifeCount(amount, type); +} + +/* 8021F780-8021F7B0 21A0C0 0030+00 0/0 0/0 1/1 .text setLifeZero__9dMeter2_cFv */ +void dMeter2_c::setLifeZero() { + dComIfGs_setLife(1); + setNowLifeGauge(1); + i_dComIfGp_setItemLifeCount(lit_4837[0], 0); } -#pragma pop /* ############################################################################################## */ /* 803BFA28-803BFA54 -00001 002C+00 1/1 0/0 0/0 .data @5038 */ @@ -434,6 +734,49 @@ asm void dMeter2_c::moveKantera() { } #pragma pop +/* void dMeter2_c::moveKantera() { + s32 max_oil = dComIfGs_getMaxOil(); + bool meter_visible = false; + + s32 cur_oil = 0; + if (dComIfGp_getItemMaxOilCount() != 0) { + if (dComIfGs_getMaxOil() + dComIfGp_getItemMaxOilCount() <= max_oil) { + max_oil = dComIfGs_getMaxOil() + dComIfGp_getItemMaxOilCount(); + if (max_oil < 0) { + max_oil = 0; + } + } + dComIfGs_setMaxOil(max_oil); + + cur_oil = dComIfGs_getOil(); + dComIfGp_setItemOilCount(max_oil - cur_oil); + dComIfGp_clearItemMaxOilCount(); + meter_visible = true; + cur_oil = max_oil; + } + + if (dComIfGp_getItemOilCount() != 0) { + if (!meter_visible) { + cur_oil = dComIfGs_getMaxOil(); + } + + if (dComIfGs_getOil() + dComIfGp_getItemOilCount() <= cur_oil) { + cur_oil = dComIfGs_getOil(); + if (dComIfGs_getOil() < 0) { + cur_oil = 0; + } + } + + dComIfGs_setOil(cur_oil); + dComIfGp_clearItemOilCount(); + meter_visible = true; + } + + if () { + + } +} */ + /* ############################################################################################## */ /* 804549EC-804549F0 002FEC 0004+00 2/2 0/0 0/0 .sdata2 @5933 */ SECTION_SDATA2 static f32 lit_5933 = 0.5f; @@ -831,45 +1174,30 @@ asm void dMeter2_c::isPachinkoEquip() { #pragma pop /* 80225AA0-80225AC0 2203E0 0020+00 1/0 0/0 0/0 .text dMeter2_Draw__FP9dMeter2_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dMeter2_Draw(dMeter2_c* param_0) { - nofralloc -#include "asm/d/meter/d_meter2/dMeter2_Draw__FP9dMeter2_c.s" +static int dMeter2_Draw(dMeter2_c* p_meter) { + return p_meter->_draw(); } -#pragma pop /* 80225AC0-80225AE0 220400 0020+00 1/0 0/0 0/0 .text dMeter2_Execute__FP9dMeter2_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dMeter2_Execute(dMeter2_c* param_0) { - nofralloc -#include "asm/d/meter/d_meter2/dMeter2_Execute__FP9dMeter2_c.s" +static int dMeter2_Execute(dMeter2_c* p_meter) { + return p_meter->_execute(); } -#pragma pop /* 80225AE0-80225AE8 220420 0008+00 1/0 0/0 0/0 .text dMeter2_IsDelete__FP9dMeter2_c */ -static bool dMeter2_IsDelete(dMeter2_c* param_0) { - return true; +static int dMeter2_IsDelete(dMeter2_c* p_meter) { + return 1; } /* 80225AE8-80225B08 220428 0020+00 1/0 0/0 0/0 .text dMeter2_Delete__FP9dMeter2_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dMeter2_Delete(dMeter2_c* param_0) { - nofralloc -#include "asm/d/meter/d_meter2/dMeter2_Delete__FP9dMeter2_c.s" +static int dMeter2_Delete(dMeter2_c* p_meter) { + return p_meter->_delete(); } -#pragma pop /* 80225B08-80225BB8 220448 00B0+00 1/0 0/0 0/0 .text dMeter2_Create__FP9msg_class */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void dMeter2_Create(msg_class* param_0) { +static asm int dMeter2_Create(msg_class* param_0) { nofralloc #include "asm/d/meter/d_meter2/dMeter2_Create__FP9msg_class.s" } @@ -877,10 +1205,10 @@ static asm void dMeter2_Create(msg_class* param_0) { /* ############################################################################################## */ /* 803BFA54-803BFA68 -00001 0014+00 1/0 0/0 0/0 .data l_dMeter2_Method */ -SECTION_DATA static void* l_dMeter2_Method[5] = { - (void*)dMeter2_Create__FP9msg_class, (void*)dMeter2_Delete__FP9dMeter2_c, - (void*)dMeter2_Execute__FP9dMeter2_c, (void*)dMeter2_IsDelete__FP9dMeter2_c, - (void*)dMeter2_Draw__FP9dMeter2_c, +SECTION_DATA static dMeter2_Method l_dMeter2_Method[5] = { + (dMeter2_Method)dMeter2_Create, dMeter2_Delete, + dMeter2_Execute, dMeter2_IsDelete, + dMeter2_Draw, }; /* 803BFA68-803BFA90 -00001 0028+00 0/0 0/0 1/0 .data g_profile_METER2 */ diff --git a/src/d/meter/d_meter2_draw.cpp b/src/d/meter/d_meter2_draw.cpp index 4c6cfff35b..4622965799 100644 --- a/src/d/meter/d_meter2_draw.cpp +++ b/src/d/meter/d_meter2_draw.cpp @@ -4,6 +4,9 @@ // #include "d/meter/d_meter2_draw.h" +#include "d/meter/d_meter_HIO.h" +#include "d/com/d_com_inf_game.h" +#include "JSystem/J2DGraph/J2DAnmLoader.h" #include "dol2asm.h" #include "dolphin/types.h" @@ -11,35 +14,6 @@ // Types: // -struct dSv_player_item_c { - /* 80033030 */ void getItem(int, bool) const; -}; - -struct dSv_light_drop_c { - /* 80034340 */ void getLightDropNum(u8) const; - /* 8003439C */ void isLightDropGetFlag(u8) const; -}; - -struct dSv_event_c { - /* 800349BC */ void isEventBit(u16) const; -}; - -struct dMsgObject_c { - /* 802370E8 */ void isHowlMessage(); - /* 8023822C */ void getStatus(); -}; - -struct JMSMesgEntry_c {}; - -struct dMeter2Info_c { - /* 8021C250 */ void getString(u32, char*, JMSMesgEntry_c*); - /* 8021C370 */ void getStringKana(u32, char*, JMSMesgEntry_c*); - /* 8021C544 */ void getStringKanji(u32, char*, JMSMesgEntry_c*); - /* 8021C950 */ void isDirectUseItem(int); - /* 8021CF08 */ void readItemTexture(u8, void*, J2DPicture*, void*, J2DPicture*, void*, - J2DPicture*, void*, J2DPicture*, int); -}; - struct dKantera_icon_c { /* 801AE938 */ dKantera_icon_c(); /* 801AEB7C */ void setAlphaRate(f32); @@ -48,12 +22,6 @@ struct dKantera_icon_c { /* 801AEC44 */ void setNowGauge(u16, u16); }; -struct dItem_data { - static void* item_resource[1530]; -}; - -struct JAISoundID {}; - struct Z2SeMgr { /* 802AB984 */ void seStart(JAISoundID, Vec const*, u32, s8, f32, f32, f32, f32, u8); /* 802AC50C */ void seStartLevel(JAISoundID, Vec const*, u32, s8, f32, f32, f32, f32, u8); @@ -63,10 +31,6 @@ struct Z2AudioMgr { static u8 mAudioMgrPtr[4 + 4 /* padding */]; }; -struct J2DAnmLoaderDataBase { - /* 80308A6C */ void load(void const*); -}; - // // Forward References: // @@ -258,13 +222,8 @@ extern "C" void _restgpr_26(); extern "C" void _restgpr_27(); extern "C" void _restgpr_28(); extern "C" void _restgpr_29(); -extern "C" void strcmp(); -extern "C" void strcpy(); extern "C" extern void* __vt__12dDlst_base_c[3]; extern "C" void* item_resource__10dItem_data[1530]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" extern u8 g_drawHIO[3880]; -extern "C" extern u8 g_meter2_info[248]; extern "C" extern u8 g_MsgObject_HIO_c[1040]; extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; @@ -745,6 +704,55 @@ SECTION_DEAD static char const* const stringBase_80398A0A = "zelda_game_image_sa #pragma pop /* 80211E64-80212190 20C7A4 032C+00 1/1 0/0 0/0 .text initMagic__13dMeter2Draw_cFv */ +#ifdef NONMATCHING +void dMeter2Draw_c::initMagic() { + field_0x550 = 0.0f; + field_0x554 = 0.0f; + + mpMagicParent = new CPaneMgr(mpKanteraScreen, 'magic_n', 2, NULL); + mpMagicBase = new CPaneMgr(mpKanteraScreen, 'mm_base', 0, NULL); + mpMagicFrameL = new CPaneMgr(mpKanteraScreen, 'm_w_l_n', 2, NULL); + mpMagicFrameR = new CPaneMgr(mpKanteraScreen, 'm_w_r_n', 2, NULL); + mpMagicMeter = new CPaneMgr(mpKanteraScreen, 'mm_00', 0, NULL); + + void* res = JKRFileLoader::getGlbResource("zelda_game_image_sanso_10percent.bpk", dComIfGp_getMain2DArchive()); + field_0x53c = (J2DAnmColorKey*)J2DAnmLoaderDataBase::load(res); + field_0x53c->searchUpdateMaterialID(mpKanteraScreen); + + res = JKRFileLoader::getGlbResource("zelda_game_image_sanso_25percent.bpk", dComIfGp_getMain2DArchive()); + field_0x540 = (J2DAnmColorKey*)J2DAnmLoaderDataBase::load(res); + field_0x540->searchUpdateMaterialID(mpKanteraScreen); + + res = JKRFileLoader::getGlbResource("zelda_game_image_sanso_50percent.bpk", dComIfGp_getMain2DArchive()); + field_0x544 = (J2DAnmColorKey*)J2DAnmLoaderDataBase::load(res); + field_0x544->searchUpdateMaterialID(mpKanteraScreen); + + field_0x558 = 0.0f; + mpMagicParent->setAlphaRate(0.0f); + + f32 offsetX = g_drawHIO.mLifeTopPosX; + f32 offsetY = 0.0f; + + if (dComIfGs_getMaxLife() <= 50) { + offsetY = g_drawHIO.mLifeTopPosY; + } + + for (int i = 0; i < 3; i++) { + field_0x5fc[i] = 0.0f; + field_0x742[i] = 0; + } + + u8 magic = dComIfGs_getMagic(); + u8 max_magic = dComIfGs_getMaxMagic(); + drawMagic(max_magic, magic, g_drawHIO.mMagicMeterPosX + offsetX, g_drawHIO.mMagicMeterPosY + offsetY); + setAlphaMagicChange(true); + + u16 oil = dComIfGs_getOil(); + u16 max_oil = dComIfGs_getMaxOil(); + drawKantera(max_oil, oil, g_drawHIO.mLanternMeterPosX + offsetX, g_drawHIO.mLanternMeterPosY + (g_drawHIO.mNoMagicPosY + offsetY)); + setAlphaKanteraChange(true); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -753,6 +761,7 @@ asm void dMeter2Draw_c::initMagic() { #include "asm/d/meter/d_meter2_draw/initMagic__13dMeter2Draw_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80398640-803986C0 024CA0 0080+00 0/1 0/0 0/0 .rodata tuta_0$5094 */ @@ -1072,6 +1081,26 @@ asm void dMeter2Draw_c::drawKanteraScreen(u8 param_0) { SECTION_SDATA2 static f32 lit_6175 = 0.03125f; /* 80215290-80215380 20FBD0 00F0+00 1/1 0/0 0/0 .text drawMagic__13dMeter2Draw_cFssff */ +#ifdef NONMATCHING +void dMeter2Draw_c::drawMagic(s16 max_count, s16 now_count, f32 x_pos, f32 y_pos) { + f32 x_diff = mpMagicFrameR->getInitPosX() - mpMagicFrameL->getInitPosX(); + + field_0x584 = mpMagicMeter->getInitSizeX() * (lit_6175 * now_count); + field_0x590 = mpMagicMeter->getInitSizeY(); + + field_0x59c = mpMagicFrameL->getInitPosX() * x_diff * (max_count * lit_6175); + field_0x5a8 = mpMagicFrameL->getInitPosY(); + + field_0x5b4 = mpMagicBase->getInitSizeX() * (max_count * lit_6175); + field_0x5c0 = mpMagicBase->getInitSizeY(); + + field_0x5cc = g_drawHIO.mMagicMeterScale; + field_0x5d8 = g_drawHIO.mMagicMeterScale; + + field_0x5e4 = x_pos; + field_0x5f0 = y_pos; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -1080,6 +1109,7 @@ asm void dMeter2Draw_c::drawMagic(s16 param_0, s16 param_1, f32 param_2, f32 par #include "asm/d/meter/d_meter2_draw/drawMagic__13dMeter2Draw_cFssff.s" } #pragma pop +#endif /* 80215380-802154A8 20FCC0 0128+00 2/2 0/0 0/0 .text setAlphaMagicChange__13dMeter2Draw_cFb */ #pragma push @@ -1207,7 +1237,7 @@ void dMeter2Draw_c::setAlphaLightDropChange(bool param_0) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dMeter2Draw_c::getNowLightDropRateCalc() { +asm f32 dMeter2Draw_c::getNowLightDropRateCalc() { nofralloc #include "asm/d/meter/d_meter2_draw/getNowLightDropRateCalc__13dMeter2Draw_cFv.s" } diff --git a/src/d/meter/d_meter_HIO.cpp b/src/d/meter/d_meter_HIO.cpp index 34e51d8e75..7af89032e4 100644 --- a/src/d/meter/d_meter_HIO.cpp +++ b/src/d/meter/d_meter_HIO.cpp @@ -1875,65 +1875,17 @@ extern "C" asm void __dt__16dMeter_drawHIO_cFv() { /* 8020123C-80201284 1FBB7C 0048+00 2/1 0/0 0/0 .text __dt__16dMeter_menuHIO_cFv */ dMeter_menuHIO_c::~dMeter_menuHIO_c() {} -/* ############################################################################################## */ -/* 8042EBB0-8042EBBC 05B8D0 000C+00 1/1 0/0 0/0 .bss @3766 */ -static u8 lit_3766[12]; - -/* 8042EBBC-8042EBC8 05B8DC 000C+00 0/1 0/0 0/0 .bss @3767 */ -#pragma push -#pragma force_active on -static u8 lit_3767[12]; -#pragma pop +/* 804510B0-804510B8 0005B0 0008+00 1/1 1/1 0/0 .sbss g_menuHIO */ +dMeter_menuHIO_c g_menuHIO; /* 8042EBC8-8042FAF0 05B8E8 0F28+00 0/1 157/157 0/0 .bss g_drawHIO */ -extern u8 g_drawHIO[3880]; -u8 g_drawHIO[3880]; - -/* 8042FAF0-8042FAFC 05C810 000C+00 0/1 0/0 0/0 .bss @3768 */ -#pragma push -#pragma force_active on -static u8 lit_3768[12]; -#pragma pop +dMeter_drawHIO_c g_drawHIO; /* 8042FAFC-8042FC54 05C81C 0158+00 0/1 19/19 0/0 .bss g_ringHIO */ -extern u8 g_ringHIO[344]; -u8 g_ringHIO[344]; - -/* 8042FC54-8042FC60 05C974 000C+00 0/1 0/0 0/0 .bss @3769 */ -#pragma push -#pragma force_active on -static u8 lit_3769[12]; -#pragma pop +dMeter_ringHIO_c g_ringHIO; /* 8042FC60-80430104 05C980 04A4+00 0/1 54/54 0/0 .bss g_fmapHIO */ -extern u8 g_fmapHIO[1188]; -u8 g_fmapHIO[1188]; - -/* 80430104-80430110 05CE24 000C+00 0/1 0/0 0/0 .bss @3770 */ -#pragma push -#pragma force_active on -static u8 lit_3770[12]; -#pragma pop +dMeter_fmapHIO_c g_fmapHIO; /* 80430110-80430158 05CE30 0044+04 0/1 6/6 1/1 .bss g_cursorHIO */ -extern u8 g_cursorHIO[68 + 4 /* padding */]; -u8 g_cursorHIO[68 + 4 /* padding */]; - -/* 804510B0-804510B8 0005B0 0008+00 1/1 1/1 0/0 .sbss g_menuHIO */ -extern u8 g_menuHIO[8]; -u8 g_menuHIO[8]; - -/* 80201284-80201328 1FBBC4 00A4+00 0/0 1/0 0/0 .text __sinit_d_meter_HIO_cpp */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __sinit_d_meter_HIO_cpp() { - nofralloc -#include "asm/d/meter/d_meter_HIO/__sinit_d_meter_HIO_cpp.s" -} -#pragma pop - -#pragma push -#pragma force_active on -REGISTER_CTORS(0x80201284, __sinit_d_meter_HIO_cpp); -#pragma pop +dMeter_cursorHIO_c g_cursorHIO; diff --git a/src/d/meter/d_meter_map.cpp b/src/d/meter/d_meter_map.cpp index f19625aff0..18be6c631e 100644 --- a/src/d/meter/d_meter_map.cpp +++ b/src/d/meter/d_meter_map.cpp @@ -170,7 +170,7 @@ asm void dMeterMap_c::getMapDispSizeTypeNo() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dMeterMap_c::isEnableDispMapAndMapDispSizeTypeNo() { +asm bool dMeterMap_c::isEnableDispMapAndMapDispSizeTypeNo() { nofralloc #include "asm/d/meter/d_meter_map/isEnableDispMapAndMapDispSizeTypeNo__11dMeterMap_cFv.s" } diff --git a/src/d/save/d_save.cpp b/src/d/save/d_save.cpp index 43a7a57c25..8d93c8b4cd 100644 --- a/src/d/save/d_save.cpp +++ b/src/d/save/d_save.cpp @@ -1970,20 +1970,22 @@ SECTION_DEAD static char const* const pad_80379296 = "\0"; /* 80035BD0-80035C88 030510 00B8+00 0/0 3/3 0/0 .text initdata_to_card__10dSv_info_cFPci */ #ifdef NONMATCHING -void dSv_info_c::initdata_to_card(char* param_0, int fileNo) { +int dSv_info_c::initdata_to_card(char* param_0, int fileNo) { + char* ptr = param_0 + (fileNo * 0xa94); dSv_save_c tmp; tmp.init(); tmp.getPlayer().getPlayerInfo().setPlayerName(""); tmp.getPlayer().getPlayerInfo().setHorseName(""); - memcpy(¶m_0 + fileNo * 0xa94, &tmp, 0x958); + memcpy(&ptr, &tmp, 0x958); printf("INIT size:%d\n", 0x958); + return 0; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dSv_info_c::initdata_to_card(char* param_0, int param_1) { +asm int dSv_info_c::initdata_to_card(char* param_0, int param_1) { nofralloc #include "asm/d/save/d_save/initdata_to_card__10dSv_info_cFPci.s" }