From 4b60389c212629513ea9d6c9e146fb98ba2872cb Mon Sep 17 00:00:00 2001 From: TakaRikka <38417346+TakaRikka@users.noreply.github.com> Date: Tue, 28 Dec 2021 03:02:45 -0800 Subject: [PATCH] d_menu_window_HIO ok --- include/d/menu/d_menu_window_HIO.h | 119 +++++++++++ src/d/menu/d_menu_window_HIO.cpp | 304 ++++++++++++++--------------- 2 files changed, 271 insertions(+), 152 deletions(-) diff --git a/include/d/menu/d_menu_window_HIO.h b/include/d/menu/d_menu_window_HIO.h index 1b6694db08f..dc3054edfd5 100644 --- a/include/d/menu/d_menu_window_HIO.h +++ b/include/d/menu/d_menu_window_HIO.h @@ -3,4 +3,123 @@ #include "dolphin/types.h" +class dMw_DHIO_c { +public: + /* 801F9E2C */ dMw_DHIO_c(); + + /* 801F9E98 */ virtual ~dMw_DHIO_c() {} + +private: + /* 0x004 */ u8 field_0x4; + /* 0x005 */ bool mMap[32]; + /* 0x025 */ bool mCompass[32]; + /* 0x045 */ bool mBossKey[32]; + /* 0x065 */ bool mBossClear[32]; + /* 0x085 */ bool mHeartContainer[32]; + /* 0x0A5 */ bool mBossDemo[32]; + /* 0x0C5 */ bool mPortal[32]; + /* 0x0E5 */ bool mMidBossClear[32]; + /* 0x105 */ bool mMapCopy[32]; + /* 0x125 */ bool mCompassCopy[32]; + /* 0x145 */ bool mBossKeyCopy[32]; + /* 0x165 */ bool mBossClearCopy[32]; + /* 0x185 */ bool mHeartContainerCopy[32]; + /* 0x1A5 */ bool mBossDemoCopy[32]; + /* 0x1C5 */ bool mPortalCopy[32]; + /* 0x1E5 */ bool mMidBossClearCopy[32]; +}; + +extern dMw_DHIO_c g_mwDHIO; + +class dMw_HIO_c { +public: + /* 801F9AFC */ dMw_HIO_c(); + /* 801F9B38 */ void init(); + /* 801F9E14 */ bool getBombFlag(); + /* 801F9E1C */ bool getArrowFlag(); + /* 801F9E24 */ bool getPachinkoFlag(); + + /* 801F9EE0 */ virtual ~dMw_HIO_c() {} + +private: + /* 0x004 */ u8 field_0x4; + /* 0x006 */ u16 mLife; + /* 0x008 */ u16 mMaxLife; + /* 0x00A */ u8 mMagic; + /* 0x00B */ u8 mMaxMagic; + /* 0x00C */ s32 mOil; + /* 0x010 */ s32 mMaxOil; + /* 0x014 */ s32 mOxygen; + /* 0x018 */ s32 mMaxOxygen; + /* 0x01C */ bool mEnableMagic; + /* 0x01D */ bool mEnableArrowDrops; + /* 0x01E */ s16 mRupees; + /* 0x020 */ s16 mWalletSize; + /* 0x022 */ u8 mKeys; + /* 0x023 */ u8 field_0x23; + /* 0x024 */ u16 mLifeCopy; + /* 0x026 */ u16 mMaxLifeCopy; + /* 0x028 */ u8 mMagicCopy; + /* 0x029 */ u8 mMaxMagicCopy; + /* 0x02C */ s32 mOilCopy; + /* 0x030 */ s32 mMaxOilCopy; + /* 0x034 */ s32 mOxygenCopy; + /* 0x038 */ s32 mMaxOxygenCopy; + /* 0x03C */ bool mEnableMagicCopy; + /* 0x03D */ bool mEnableArrowDropsCopy; + /* 0x03E */ s16 mRupeesCopy; + /* 0x040 */ s16 mWalletSizeCopy; + /* 0x042 */ s16 mDonationAmount; + /* 0x044 */ s16 mDonationAmountCopy; + /* 0x046 */ u8 mKeysCopy; + /* 0x047 */ u8 field_0x47; + /* 0x048 */ u8 mPoes; + /* 0x049 */ u8 mPoesCopy; + /* 0x04A */ u8 mItems[24]; + /* 0x062 */ u8 mItemsCopy[24]; + /* 0x07A */ u8 field_0x7a[24]; + /* 0x092 */ bool mSwords[4]; + /* 0x096 */ bool mShields[3]; + /* 0x099 */ bool mClothes[3]; + /* 0x09C */ bool mSwordsCopy[4]; + /* 0x0A0 */ bool mShieldsCopy[3]; + /* 0x0A3 */ bool mClothesCopy[3]; + /* 0x0A6 */ u8 mScent; + /* 0x0A7 */ u8 mScentCopy; + /* 0x0A8 */ u8 field_0xa8; + /* 0x0A9 */ bool mBombBagLV2; + /* 0x0AA */ bool mBombBagLV2Copy; + /* 0x0AB */ bool mLV2KeyShards[3]; + /* 0x0AE */ bool mLV2KeyShardsCopy[3]; + /* 0x0B1 */ bool mLV5Item[2]; + /* 0x0B3 */ bool mLV5ItemCopy[2]; + /* 0x0B5 */ bool mGoldBug[24]; + /* 0x0CD */ bool mGoldBugCopy[24]; + /* 0x0E5 */ u8 mArrowNum; + /* 0x0E6 */ u8 mSeedNum; + /* 0x0E7 */ u8 mBombNum[3]; + /* 0x0EA */ u8 field_0xea; + /* 0x0EB */ u8 mBottleNum[4]; + /* 0x0EF */ u8 mArrowNumCopy; + /* 0x0F0 */ u8 mSeedNumCopy; + /* 0x0F1 */ u8 mBombNumCopy[3]; + /* 0x0F4 */ u8 field_0xf4; + /* 0x0F5 */ u8 mBottleNumCopy[4]; + /* 0x0F9 */ u8 field_0xf9[8]; + /* 0x101 */ u8 field_0x101[8]; + /* 0x109 */ u8 field_0x109[8]; + /* 0x111 */ u8 field_0x111[8]; + /* 0x119 */ bool mEnableOxygenMeter; + /* 0x11A */ bool mEnableOxygenMeterCopy; + /* 0x11B */ u8 mArrowFlag; + /* 0x11C */ u8 mPachinkoFlag; + /* 0x11D */ u8 mBombFlag; + /* 0x11E */ bool mFusedShadow[4]; + /* 0x122 */ bool mFusedShadowCopy[4]; + /* 0x126 */ bool mMirrorShard[4]; + /* 0x12A */ bool mMirrorShardCopy[4]; +}; // Size: 0x130 + +extern dMw_HIO_c g_mwHIO; + #endif /* D_MENU_D_MENU_WINDOW_HIO_H */ diff --git a/src/d/menu/d_menu_window_HIO.cpp b/src/d/menu/d_menu_window_HIO.cpp index 5fb138a27ab..d92ca643fbb 100644 --- a/src/d/menu/d_menu_window_HIO.cpp +++ b/src/d/menu/d_menu_window_HIO.cpp @@ -4,125 +4,160 @@ // #include "d/menu/d_menu_window_HIO.h" +#include "d/com/d_com_inf_game.h" #include "dol2asm.h" #include "dolphin/types.h" -// -// Types: -// - -struct dSv_player_get_item_c { - /* 80033EC8 */ void isFirstBit(u8) const; -}; - -struct dMw_HIO_c { - /* 801F9AFC */ dMw_HIO_c(); - /* 801F9B38 */ void init(); - /* 801F9E14 */ bool getBombFlag(); - /* 801F9E1C */ bool getArrowFlag(); - /* 801F9E24 */ bool getPachinkoFlag(); - /* 801F9EE0 */ ~dMw_HIO_c(); -}; - -struct dMw_DHIO_c { - /* 801F9E2C */ dMw_DHIO_c(); - /* 801F9E98 */ ~dMw_DHIO_c(); -}; - -// -// Forward References: -// - -extern "C" void __ct__9dMw_HIO_cFv(); -extern "C" void init__9dMw_HIO_cFv(); -extern "C" bool getBombFlag__9dMw_HIO_cFv(); -extern "C" bool getArrowFlag__9dMw_HIO_cFv(); -extern "C" bool getPachinkoFlag__9dMw_HIO_cFv(); -extern "C" void __ct__10dMw_DHIO_cFv(); -extern "C" void __dt__10dMw_DHIO_cFv(); -extern "C" void __dt__9dMw_HIO_cFv(); -extern "C" void __sinit_d_menu_window_HIO_cpp(); - -// -// External References: -// - -extern "C" void isFirstBit__21dSv_player_get_item_cCFUc(); -extern "C" void __dl__FPv(); -extern "C" void __register_global_object(); -extern "C" void _savegpr_26(); -extern "C" void _restgpr_26(); -extern "C" extern u8 g_dComIfG_gameInfo[122384]; - // // Declarations: // -/* ############################################################################################## */ -/* 803BE8E0-803BE8EC 01BA00 000C+00 2/2 0/0 0/0 .data __vt__10dMw_DHIO_c */ -SECTION_DATA extern void* __vt__10dMw_DHIO_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__10dMw_DHIO_cFv, -}; - -/* 803BE8EC-803BE8F8 01BA0C 000C+00 2/2 0/0 0/0 .data __vt__9dMw_HIO_c */ -SECTION_DATA extern void* __vt__9dMw_HIO_c[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__9dMw_HIO_cFv, -}; +inline int dComIfGs_isItemFirstBit(u8 i_no) { + return g_dComIfG_gameInfo.info.getPlayer().getGetItem().isFirstBit(i_no); +} /* 801F9AFC-801F9B38 1F443C 003C+00 1/1 0/0 0/0 .text __ct__9dMw_HIO_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm dMw_HIO_c::dMw_HIO_c() { - nofralloc -#include "asm/d/menu/d_menu_window_HIO/__ct__9dMw_HIO_cFv.s" +dMw_HIO_c::dMw_HIO_c() { + init(); } -#pragma pop /* ############################################################################################## */ /* 80450748-8045074C 0001C8 0003+01 1/1 0/0 0/0 .sdata m_cloth_item$3797 */ -SECTION_SDATA static u8 m_cloth_item[3 + 1 /* padding */] = { - 0x2F, - 0x30, - 0x31, - /* padding */ - 0x00, +static u8 m_cloth_item[3] = { + WEAR_KOKIRI, + ARMOR, + WEAR_ZORA, }; /* 8045074C-80450750 0001CC 0004+00 1/1 0/0 0/0 .sdata m_sword_item$3798 */ -SECTION_SDATA static u8 m_sword_item[4] = { - 0x28, - 0x29, - 0x49, - 0x3F, +static u8 m_sword_item[4] = { + SWORD, + MASTER_SWORD, + LIGHT_SWORD, + WOOD_STICK, }; /* 80450750-80450758 0001D0 0003+05 1/1 0/0 0/0 .sdata m_shield_item$3799 */ -SECTION_SDATA static u8 m_shield_item[3 + 5 /* padding */] = { - 0x2B, - 0x2C, - 0x2A, - /* padding */ - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, +static u8 m_shield_item[3] = { + SHIELD, + HYLIA_SHIELD, + WOOD_SHIELD, }; /* 801F9B38-801F9E14 1F4478 02DC+00 1/1 0/0 0/0 .text init__9dMw_HIO_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMw_HIO_c::init() { - nofralloc -#include "asm/d/menu/d_menu_window_HIO/init__9dMw_HIO_cFv.s" +void dMw_HIO_c::init() { + mArrowFlag = 0; + mBombFlag = 0; + mPachinkoFlag = 0; + + mLifeCopy = 0; + mLife = 0; + mMaxLifeCopy = 0; + mMaxLife = 0; + mMagicCopy = 0; + mMagic = 0; + mMaxMagicCopy = 0; + mMaxMagic = 0; + mOilCopy = 0; + mOil = 0; + mMaxOilCopy = 0; + mMaxOil = 0; + mOxygenCopy = 0; + mOxygen = 0; + mMaxOxygenCopy = 0; + mMaxOxygen = 0; + mEnableMagicCopy = false; + mEnableMagic = false; + mEnableArrowDropsCopy = false; + mEnableArrowDrops = false; + mRupeesCopy = 0; + mRupees = 0; + mWalletSizeCopy = WALLET; + mWalletSize = WALLET; + mKeysCopy = 0; + mKeys = 0; + field_0x47 = 0; + field_0x23 = 0; + mEnableOxygenMeterCopy = false; + mEnableOxygenMeter = false; + mPoesCopy = 0; + mPoes = 0; + mDonationAmountCopy = 0; + mDonationAmount = 0; + + for (int i = 0; i < 24; i++) { + mItemsCopy[i] = NO_ITEM; + mItems[i] = NO_ITEM; + field_0x7a[i] = 0; + } + + for (int i = 0; i < 4; i++) { + mBottleNumCopy[i] = 0; + mBottleNum[i] = 0; + } + + for (int i = 0; i < 3; i++) { + mBombNumCopy[i] = 0; + mBombNum[i] = 0; + } + + mScentCopy = NO_ITEM; + mScent = NO_ITEM; + field_0xa8 = 0; + field_0xf4 = 0; + field_0xea = 0; + + for (int i = 0; i < 4; i++) { + bool swordBit = dComIfGs_isItemFirstBit(m_sword_item[i]); + mSwordsCopy[i] = swordBit; + mSwords[i] = swordBit; + } + + for (int i = 0; i < 3; i++) { + bool shieldBit = dComIfGs_isItemFirstBit(m_shield_item[i]); + mShieldsCopy[i] = shieldBit; + mShields[i] = shieldBit; + + bool clothesBit = dComIfGs_isItemFirstBit(m_cloth_item[i]); + mClothesCopy[i] = clothesBit; + mClothes[i] = clothesBit; + } + + mBombBagLV2Copy = false; + mBombBagLV2 = false; + + for (int i = 0; i < 3; i++) { + mLV2KeyShardsCopy[i] = false; + mLV2KeyShards[i] = false; + } + + for (int i = 0; i < 2; i++) { + mLV5ItemCopy[i] = false; + mLV5Item[i] = false; + } + + for (int i = 0; i < 24; i++) { + mGoldBugCopy[i] = false; + mGoldBug[i] = false; + } + + for (int i = 0; i < 8; i++) { + field_0x101[i] = 0; + field_0xf9[i] = 0; + field_0x111[i] = 0; + field_0x109[i] = 0; + } + + for (int i = 0; i < 4; i++) { + mFusedShadowCopy[i] = false; + mFusedShadow[i] = false; + } + + for (int i = 0; i < 4; i++) { + mMirrorShardCopy[i] = false; + mMirrorShard[i] = false; + } } -#pragma pop /* 801F9E14-801F9E1C 1F4754 0008+00 0/0 1/1 0/0 .text getBombFlag__9dMw_HIO_cFv */ bool dMw_HIO_c::getBombFlag() { @@ -140,64 +175,29 @@ bool dMw_HIO_c::getPachinkoFlag() { } /* 801F9E2C-801F9E98 1F476C 006C+00 1/1 0/0 0/0 .text __ct__10dMw_DHIO_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm dMw_DHIO_c::dMw_DHIO_c() { - nofralloc -#include "asm/d/menu/d_menu_window_HIO/__ct__10dMw_DHIO_cFv.s" +dMw_DHIO_c::dMw_DHIO_c() { + for (int i = 0; i < 32; i++) { + mMap[i] = false; + mCompass[i] = false; + mBossKey[i] = false; + mBossClear[i] = false; + mHeartContainer[i] = false; + mBossDemo[i] = false; + mPortal[i] = false; + mMidBossClear[i] = false; + mMapCopy[i] = false; + mCompassCopy[i] = false; + mBossKeyCopy[i] = false; + mBossClearCopy[i] = false; + mHeartContainerCopy[i] = false; + mBossDemoCopy[i] = false; + mPortalCopy[i] = false; + mMidBossClearCopy[i] = false; + } } -#pragma pop - -/* 801F9E98-801F9EE0 1F47D8 0048+00 2/1 0/0 0/0 .text __dt__10dMw_DHIO_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm dMw_DHIO_c::~dMw_DHIO_c() { - nofralloc -#include "asm/d/menu/d_menu_window_HIO/__dt__10dMw_DHIO_cFv.s" -} -#pragma pop - -/* 801F9EE0-801F9F28 1F4820 0048+00 2/1 0/0 0/0 .text __dt__9dMw_HIO_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm dMw_HIO_c::~dMw_HIO_c() { - nofralloc -#include "asm/d/menu/d_menu_window_HIO/__dt__9dMw_HIO_cFv.s" -} -#pragma pop - -/* ############################################################################################## */ -/* 8042E860-8042E86C 05B580 000C+00 1/1 0/0 0/0 .bss @3773 */ -static u8 lit_3773[12]; /* 8042E86C-8042E99C 05B58C 0130+00 0/1 4/4 0/0 .bss g_mwHIO */ -extern u8 g_mwHIO[304]; -u8 g_mwHIO[304]; - -/* 8042E99C-8042E9A8 05B6BC 000C+00 0/1 0/0 0/0 .bss @3774 */ -#pragma push -#pragma force_active on -static u8 lit_3774[12]; -#pragma pop +dMw_HIO_c g_mwHIO; /* 8042E9A8-8042EBB0 05B6C8 0208+00 0/1 1/1 0/0 .bss g_mwDHIO */ -extern u8 g_mwDHIO[520]; -u8 g_mwDHIO[520]; - -/* 801F9F28-801F9F84 1F4868 005C+00 0/0 1/0 0/0 .text __sinit_d_menu_window_HIO_cpp */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __sinit_d_menu_window_HIO_cpp() { - nofralloc -#include "asm/d/menu/d_menu_window_HIO/__sinit_d_menu_window_HIO_cpp.s" -} -#pragma pop - -#pragma push -#pragma force_active on -REGISTER_CTORS(0x801F9F28, __sinit_d_menu_window_HIO_cpp); -#pragma pop +dMw_DHIO_c g_mwDHIO;