diff --git a/config/SOUE01/splits.txt b/config/SOUE01/splits.txt index 8ffe500f..fee89686 100644 --- a/config/SOUE01/splits.txt +++ b/config/SOUE01/splits.txt @@ -424,6 +424,10 @@ d/lyt/d_lyt_do_button.cpp: .data start:0x8051A5A8 end:0x8051AC00 .bss start:0x805ACE10 end:0x805ACF78 +d/lyt/d_lyt_do_button_related.cpp: + .text start:0x8010EB00 end:0x8010EF8C + .ctors start:0x804DB72C end:0x804DB730 + d/lyt/d_lyt_common_a_btn.cpp: .text start:0x8010EF90 end:0x8010F818 .rodata start:0x804E72E0 end:0x804E7330 diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index d163b62a..84bb0bc8 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -5814,7 +5814,7 @@ fn_800EF580__21dLytMeterItemSelect_cFv = .text:0x800EF580; // type:function size fn_800EF6B0__21dLytMeterItemSelect_cFUc = .text:0x800EF6B0; // type:function size:0x38 setOwnerPane__21dLytMeterItemSelect_cFPQ34nw4r3lyt4Pane = .text:0x800EF6F0; // type:function size:0x18 fn_800EF710__21dLytMeterItemSelect_cFUc = .text:0x800EF710; // type:function size:0x8 -fn_800EF720__21dLytMeterItemSelect_cFl = .text:0x800EF720; // type:function size:0x7C +fn_800EF720__21dLytMeterItemSelect_cFQ221dLytMeterItemSelect_c14InternalItem_e = .text:0x800EF720; // type:function size:0x7C fn_800EF7A0__21dLytMeterItemSelect_cFbl = .text:0x800EF7A0; // type:function size:0x14 realizeSelectedWheelItem__21dLytMeterItemSelect_cFv = .text:0x800EF7C0; // type:function size:0xF8 fn_800EF8C0__21dLytMeterItemSelect_cFb = .text:0x800EF8C0; // type:function size:0x10C @@ -5826,7 +5826,7 @@ fn_800EFDF0__21dLytMeterItemSelect_cCFb = .text:0x800EFDF0; // type:function siz fn_800F0030__21dLytMeterItemSelect_cCFv = .text:0x800F0030; // type:function size:0x114 getBaseItemForBWheelSlot__21dLytMeterItemSelect_cFl = .text:0x800F0150; // type:function size:0x14 fn_800F0170__21dLytMeterItemSelect_cCFl = .text:0x800F0170; // type:function size:0x14 -fn_800F0190__21dLytMeterItemSelect_cCFl = .text:0x800F0190; // type:function size:0x18 +getInternalBaseItemForSlot__21dLytMeterItemSelect_cCFl = .text:0x800F0190; // type:function size:0x18 fn_800F01B0__21dLytMeterItemSelect_cCFl = .text:0x800F01B0; // type:function size:0x30 fn_800F01E0__21dLytMeterItemSelect_cCFl = .text:0x800F01E0; // type:function size:0xC isSlotBocoburinLocked__21dLytMeterItemSelect_cFl = .text:0x800F01F0; // type:function size:0x28 @@ -5838,7 +5838,7 @@ setBtnItem__21dLytMeterItemSelect_cFl = .text:0x800F0680; // type:function size: realizeWheelItems__21dLytMeterItemSelect_cFv = .text:0x800F0700; // type:function size:0xC8 baseItemLytIndexToCurrentVariant__21dLytMeterItemSelect_cCFl = .text:0x800F07D0; // type:function size:0xD4 baseItemIdToCurrentVariant__21dLytMeterItemSelect_cCF7ITEM_ID = .text:0x800F08B0; // type:function size:0xD4 -getBaseItemLytIndexforUnkId__21dLytMeterItemSelect_cCFl = .text:0x800F0990; // type:function size:0x44 +getBaseItemLytIndexforInternalId__21dLytMeterItemSelect_cCFl = .text:0x800F0990; // type:function size:0x44 isWheelBlockedByCurrentAction__21dLytMeterItemSelect_cFv = .text:0x800F09E0; // type:function size:0xBC isInSpiralChargeTutorialMinigame__21dLytMeterItemSelect_cFv = .text:0x800F0AA0; // type:function size:0x8 isInRollercoasterMinigame__21dLytMeterItemSelect_cFv = .text:0x800F0AB0; // type:function size:0x8 diff --git a/configure.py b/configure.py index 48daa2ad..0ffb3de9 100644 --- a/configure.py +++ b/configure.py @@ -405,6 +405,7 @@ config.libs = [ Object(NonMatching, "d/lyt/meter/d_lyt_meter_heart.cpp"), Object(NonMatching, "d/lyt/meter/d_lyt_meter_shield_gauge.cpp"), Object(NonMatching, "d/lyt/d_lyt_do_button.cpp"), + Object(NonMatching, "d/lyt/d_lyt_do_button_related.cpp"), Object(Matching, "d/lyt/d_lyt_common_a_btn.cpp"), Object(Matching, "d/lyt/d_lyt_common_icon_material.cpp"), Object(Matching, "d/lyt/d_lyt_common_icon_item.cpp"), diff --git a/include/d/lyt/d_lyt_unknowns.h b/include/d/lyt/d_lyt_unknowns.h index 9c2e1869..4d78f2e9 100644 --- a/include/d/lyt/d_lyt_unknowns.h +++ b/include/d/lyt/d_lyt_unknowns.h @@ -15,26 +15,48 @@ public: return sInstance; } - void set0x08(s32 value) { - field_0x08 = value; - field_0x35 = 1; + enum Action_e { + DO_RETURN = 0x7F, + DO_STOP = 0x84, + DO_ITEMS = 0x85, + DO_DONE = 0x87, + DO_READY_CANNON = 0x8F, + DO_STOW_CANNON = 0x90, + DO_SAILCLOTH = 0x91, + DO_NONE = 0x98, + }; + + enum DoButton_e { + DO_BUTTON_B = 1 + }; + + void set(DoButton_e button, Action_e value) { + field_0x04[button] = value; + field_0x34[button] = 1; } - static s32 get0x08() { + static Action_e get(DoButton_e button) { if (sInstance != nullptr) { - return sInstance->field_0x08; + return sInstance->field_0x04[button]; } else { - return 0x98; + return DO_NONE; + } + } + + + static Action_e get0x08() { + if (sInstance != nullptr) { + return sInstance->field_0x04[1]; + } else { + return DO_NONE; } } private: static LytDoButtonRelated *sInstance; - /* 0x04 */ u8 field_0x04[0x08 - 0x04]; - /* 0x08 */ s32 field_0x08; - /* 0x0C */ u8 _0x08[0x35 - 0x0C]; - /* 0x35 */ u8 field_0x35; + /* 0x04 */ Action_e field_0x04[12]; + /* 0x34 */ u8 field_0x34[12]; }; // size 0x27C diff --git a/include/d/lyt/meter/d_lyt_meter_item_select.h b/include/d/lyt/meter/d_lyt_meter_item_select.h index 15d53c39..0841304d 100644 --- a/include/d/lyt/meter/d_lyt_meter_item_select.h +++ b/include/d/lyt/meter/d_lyt_meter_item_select.h @@ -172,19 +172,35 @@ public: static bool isInSpiralChargeTutorialMinigame(); static bool isInRollercoasterMinigame(); + // This enum might be used externally too? + enum InternalItem_e { + I_BOMB_BAG, + I_BOW, + I_SAILCLOTH, + I_CLAWSHOTS, + I_BEETLE, + I_SLINGSHOT, + I_GUST_BELLOWS, + I_BUG_NET, + I_WHIP, + I_BOAT_CANNON, + I_HARP, + + I_INVALID, // 11 + }; void fn_800EF580(); void fn_800EF6B0(u8); void setOwnerPane(nw4r::lyt::Pane *p); void fn_800EF710(u8); - void fn_800EF720(s32); + void fn_800EF720(InternalItem_e item); void fn_800EF7A0(bool, s32); bool fn_800EFDF0(bool b) const; bool fn_800F02F0() const; bool fn_800F0220(s32 arg); private: - void setBtnItem(s32 unkId); + void setBtnItem(s32 internalItem); void realizeSelectedWheelItem(); void fn_800EF8C0(bool); bool isWheelBlockedByCurrentAction(); @@ -195,7 +211,7 @@ private: void fn_800F0310(); bool fn_800F0030() const; s32 fn_800F0170(s32) const; - u8 fn_800F0190(s32) const; + u8 getInternalBaseItemForSlot(s32) const; bool isWheelIndexLocked(s32 idx); @@ -209,7 +225,7 @@ private: static ITEM_ID getBaseItemForBWheelSlot(s32 idx); ITEM_ID baseItemIdToCurrentVariant(ITEM_ID baseItem) const; s32 baseItemLytIndexToCurrentVariant(s32 lytIndex) const; - s32 getBaseItemLytIndexforUnkId(s32 idx) const; + s32 getBaseItemLytIndexforInternalId(s32 idx) const; STATE_FUNC_DECLARE(dLytMeterItemSelect_c, InitWait); STATE_FUNC_DECLARE(dLytMeterItemSelect_c, Wait); @@ -253,19 +269,19 @@ private: /* 0x5688 */ d2d::SubPaneListNode mSubpanes[9]; /* 0x5718 */ EffectsStruct mEffects; - /* 0x574C */ s32 field_0x574C; - /* 0x5750 */ s32 field_0x5750; + /* 0x574C */ InternalItem_e field_0x574C; + /* 0x5750 */ InternalItem_e field_0x5750; /* 0x5754 */ s32 field_0x5754; /* 0x5758 */ s32 field_0x5758; /* 0x575C */ s32 field_0x575C; /* 0x5760 */ s32 mDemoMoveTimer; /* 0x5764 */ s32 field_0x5764; /* 0x5768 */ s32 field_0x5768; - /* 0x576C */ s32 field_0x576C; + /* 0x576C */ s32 mLastDoButtonRelatedAction; /* 0x5770 */ s32 field_0x5770; /* 0x5774 */ s32 field_0x5774; - /* 0x5778 */ f32 field_0x5778; - /* 0x577C */ f32 field_0x577C; + /* 0x5778 */ f32 mArrowRotation; + /* 0x577C */ f32 mArrowLength; /* 0x5780 */ f32 field_0x5780; /* 0x5784 */ f32 field_0x5784; /* 0x5788 */ s32 field_0x5788; @@ -279,10 +295,10 @@ private: /* 0x5799 */ u8 field_0x5799; /* 0x579A */ u8 field_0x579A; /* 0x579B */ u8 field_0x579B; - /* 0x579C */ u8 field_0x579C; - /* 0x579C */ u8 field_0x579D; - /* 0x579C */ u8 field_0x579E; - /* 0x579C */ u8 field_0x579F; + /* 0x579C */ u8 mStoredBowVariant; + /* 0x579C */ u8 mStoredSlingshotVariant; + /* 0x579C */ u8 mStoredBeetleVariant; + /* 0x579C */ u8 mStoredBugNetVariant; /* 0x57A0 */ u8 field_0x57A0; /* 0x57A1 */ u8 field_0x57A1; /* 0x57A2 */ u8 field_0x57A2; diff --git a/include/d/lyt/meter/d_lyt_meter_remocon_bg.h b/include/d/lyt/meter/d_lyt_meter_remocon_bg.h index 7678ffbe..067e160f 100644 --- a/include/d/lyt/meter/d_lyt_meter_remocon_bg.h +++ b/include/d/lyt/meter/d_lyt_meter_remocon_bg.h @@ -3,7 +3,6 @@ #include "d/lyt/d2d.h" #include "s/s_State.hpp" -#include "s/s_StateMgr.hpp" class dLytMeterRemoconBg_c : public d2d::dSubPane { public: diff --git a/src/d/lyt/d_lyt_do_button_related.cpp b/src/d/lyt/d_lyt_do_button_related.cpp new file mode 100644 index 00000000..457407ce --- /dev/null +++ b/src/d/lyt/d_lyt_do_button_related.cpp @@ -0,0 +1,19 @@ +#include "d/lyt/d2d.h" +#include "d/lyt/d_lyt_unknowns.h" + +LytDoButtonRelated::LytDoButtonRelated() { + sInstance = this; +} + +bool LytDoButtonRelated::build(d2d::ResAccIf_c *resAcc) { + for (int i = 0; i < 12; i++) { + field_0x04[i] = DO_NONE; + field_0x34[i] = 0; + } + + return true; +} + +bool LytDoButtonRelated::remove() { + return true; +} diff --git a/src/d/lyt/meter/d_lyt_meter_item_select.cpp b/src/d/lyt/meter/d_lyt_meter_item_select.cpp index 611fde0f..56e86514 100644 --- a/src/d/lyt/meter/d_lyt_meter_item_select.cpp +++ b/src/d/lyt/meter/d_lyt_meter_item_select.cpp @@ -489,8 +489,8 @@ static const char *sWindowNames[] = { static const char *sGroupName = "G_ref_00"; dLytMeterItemSelect_c::dLytMeterItemSelect_c() : mStateMgr(*this, sStateID::null) { - field_0x574C = 11; - field_0x5750 = 11; + field_0x574C = I_INVALID; + field_0x5750 = I_INVALID; field_0x5754 = 0; field_0x5758 = -1; field_0x575C = 0; @@ -514,12 +514,12 @@ void dLytMeterItemSelect_c::executeState_InitWait() { if (field_0x57B5 == 0) { return; } - if (field_0x5794 == 2 || field_0x5794 == 9 || field_0x5794 == 10) { + if (field_0x5794 == I_SAILCLOTH || field_0x5794 == I_BOAT_CANNON || field_0x5794 == I_HARP) { field_0x579A = field_0x5794; } bool blocked = isWheelBlockedByCurrentAction(); - if ((field_0x574C != 11 && field_0x5794 != 11 && !blocked) || field_0x579A != 11) { + if ((field_0x574C != I_INVALID && field_0x5794 != I_INVALID && !blocked) || field_0x579A != I_INVALID) { realizeSelectedWheelItem(); fn_800EF8C0(true); if (dLytMeterContainer_c::GetInstance()->checkAllFlags(0x10)) { @@ -666,10 +666,10 @@ void dLytMeterItemSelect_c::initializeState_Wait() { } } void dLytMeterItemSelect_c::executeState_Wait() { - if (field_0x57B3 == 1 && (field_0x5794 == 11 || LytDoButtonRelated::get0x08() == 0x84)) { + if (field_0x57B3 == 1 && (field_0x5794 == I_INVALID || LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_B) == LytDoButtonRelated::DO_STOP)) { mStateMgr.changeState(StateID_SetNone); - } else if (field_0x57B3 == 0 && field_0x5794 == 11 && - (field_0x579A == 2 || field_0x579A == 9 || field_0x579A == 10)) { + } else if (field_0x57B3 == 0 && field_0x5794 == I_INVALID && + (field_0x579A == I_SAILCLOTH || field_0x579A == I_BOAT_CANNON || field_0x579A == I_HARP)) { mStateMgr.changeState(StateID_SetNone); } else if (field_0x5754 == 1) { mStateMgr.changeState(StateID_DemoMove); @@ -681,14 +681,14 @@ void dLytMeterItemSelect_c::executeState_Wait() { } else if (isWheelBlockedByCurrentAction()) { field_0x5768 = 0; mStateMgr.changeState(StateID_FrameOffIn); - } else if ((field_0x5794 == 2 || (field_0x5794 == 9 || field_0x5794 == 10)) && field_0x579A == 11) { + } else if ((field_0x5794 == I_SAILCLOTH || (field_0x5794 == I_BOAT_CANNON || field_0x5794 == I_HARP)) && field_0x579A == I_INVALID) { mStateMgr.changeState(StateID_SetSpecialItemIn); } else if (!dLytMeterContainer_c::GetInstance()->checkAllFlags(0x10)) { mStateMgr.changeState(StateID_ToUnuse); } else if (!dLytMeterContainer_c::GetMeter()->fn_800D5650() && !dLytMeterContainer_c::GetMeter()->fn_800D5680() && - LytDoButtonRelated::get0x08() != 0x85 && LytDoButtonRelated::get0x08() != 0x7F && - LytDoButtonRelated::get0x08() != 0x87 && LytDoButtonRelated::get0x08() != 0x84 && - (field_0x5794 != 9 && field_0x5794 != 10 && field_0x5794 != 11 && field_0x5794 != 2)) { + LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_B) != LytDoButtonRelated::DO_ITEMS && LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_B) != LytDoButtonRelated::DO_RETURN && + LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_B) != LytDoButtonRelated::DO_DONE && LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_B) != LytDoButtonRelated::DO_STOP && + (field_0x5794 != I_BOAT_CANNON && field_0x5794 != I_HARP && field_0x5794 != I_INVALID && field_0x5794 != I_SAILCLOTH)) { mStateMgr.changeState(StateID_ResetIn); } } @@ -787,14 +787,14 @@ void dLytMeterItemSelect_c::finalizeState_SelectIn() { void dLytMeterItemSelect_c::initializeState_Select() {} void dLytMeterItemSelect_c::executeState_Select() { if (dLytMeterContainer_c::getCrossBtn0x7BF8() == 0 && dPad::checkButtonDpadDownPressed()) { - if (field_0x5794 != 11) { + if (field_0x5794 != I_INVALID) { field_0x5780 = 0.0f; mStateMgr.changeState(StateID_SetIn); } else { mStateMgr.changeState(StateID_SelectOut); } } else if (field_0x57A2 == 0) { - if (field_0x57A0 != 0 || field_0x5794 != 11) { + if (field_0x57A0 != 0 || field_0x5794 != I_INVALID) { field_0x5780 = 0.0f; mStateMgr.changeState(StateID_SetIn); } else { @@ -891,7 +891,7 @@ void dLytMeterItemSelect_c::initializeState_SetSpecialItemIn() { mAnm[ITEM_SELECT_ANIM_OUT].setToStart(); } else { mAnm[ITEM_SELECT_ANIM_OUT].setToEnd2(); - if (field_0x5798 == 11) { + if (field_0x5798 == I_INVALID) { mAnm[ITEM_SELECT_ANIM_RESET].setBackwardsOnce(); mAnm[ITEM_SELECT_ANIM_RESET].setToStart(); mBtn[2].setVisible(false); @@ -936,16 +936,16 @@ void dLytMeterItemSelect_c::executeState_SetSpecialItemIn() { void dLytMeterItemSelect_c::finalizeState_SetSpecialItemIn() {} void dLytMeterItemSelect_c::initializeState_Set() { - if (field_0x5794 == 10 && field_0x5790 <= 0) { + if (field_0x5794 == I_HARP && field_0x5790 <= 0) { field_0x5790 = 10; } - if (field_0x5794 == 2 || field_0x5794 == 9 || field_0x5794 == 10) { + if (field_0x5794 == I_SAILCLOTH || field_0x5794 == I_BOAT_CANNON || field_0x5794 == I_HARP) { field_0x579A = field_0x5794; } } void dLytMeterItemSelect_c::executeState_Set() { if (field_0x57A0 == 0) { - if (field_0x5794 == 11) { + if (field_0x5794 == I_INVALID) { mAnm[ITEM_SELECT_ANIM_IN].setAnimEnable(true); mAnm[ITEM_SELECT_ANIM_IN].setFrame(0.0f); mLyt.calc(); @@ -963,10 +963,10 @@ void dLytMeterItemSelect_c::executeState_Set() { mStateMgr.changeState(StateID_SetOut); } } else { - if ((field_0x5794 == 2 || field_0x5794 == 9 || field_0x5794 == 10) && field_0x579A != field_0x5794) { + if ((field_0x5794 == I_SAILCLOTH || field_0x5794 == I_BOAT_CANNON || field_0x5794 == I_HARP) && field_0x579A != field_0x5794) { mStateMgr.changeState(StateID_SetSpecialItemIn); } else if (!dLytMeterContainer_c::GetInstance()->checkAllFlags(0x10) && field_0x5790 <= 0 && - (field_0x5794 == 9 || field_0x5794 == 10)) { + (field_0x5794 == I_BOAT_CANNON || field_0x5794 == I_HARP)) { mStateMgr.changeState(StateID_ToUnuse); } else if (field_0x57A2 != 0) { mStateMgr.changeState(StateID_SelectIn); @@ -983,7 +983,7 @@ void dLytMeterItemSelect_c::executeState_SetOut() { if (mAnm[ITEM_SELECT_ANIM_OUT].isStop2()) { mAnm[ITEM_SELECT_ANIM_OUT].setAnimEnable(false); field_0x57B3 = 0; - field_0x579A = 11; + field_0x579A = I_INVALID; mStateMgr.changeState(StateID_Wait); } @@ -996,7 +996,7 @@ void dLytMeterItemSelect_c::finalizeState_SetOut() {} void dLytMeterItemSelect_c::initializeState_SetNone() { mAnm[ITEM_SELECT_ANIM_RESET].setForwardOnce(); mAnm[ITEM_SELECT_ANIM_RESET].setAnimEnable(true); - if (field_0x5795 == 2 || field_0x5795 == 9 || field_0x5795 == 10) { + if (field_0x5795 == I_SAILCLOTH || field_0x5795 == I_BOAT_CANNON || field_0x5795 == I_HARP) { // "instant" mAnm[ITEM_SELECT_ANIM_RESET].setToEnd2(); mBtn[0].setVisible(true, true); @@ -1019,7 +1019,7 @@ void dLytMeterItemSelect_c::executeState_SetNone() { if (mAnm[ITEM_SELECT_ANIM_RESET].isStop2() && mBtn[0].isSettled()) { mAnm[ITEM_SELECT_ANIM_RESET].setAnimEnable(false); field_0x57B3 = 0; - field_0x579A = 11; + field_0x579A = I_INVALID; mStateMgr.changeState(StateID_Wait); } @@ -1035,7 +1035,7 @@ void dLytMeterItemSelect_c::initializeState_SelectOut() { mAnm[ITEM_SELECT_ANIM_IN].setToStart(); mAnm[ITEM_SELECT_ANIM_IN].setAnimEnable(true); field_0x57B3 = 0; - if (field_0x5796 != 11) { + if (field_0x5796 != I_INVALID) { mBtn[2].setVisible(false, false); } else { mBtn[2].setVisible(true, false); @@ -1089,7 +1089,7 @@ void dLytMeterItemSelect_c::initializeState_ResetIn() { mAnm[ITEM_SELECT_ANIM_RESET].setToStart(); mAnm[ITEM_SELECT_ANIM_RESET].setAnimEnable(true); mBtn[2].setVisible(true); - setBtnText(field_0x576C); + setBtnText(mLastDoButtonRelatedAction); } void dLytMeterItemSelect_c::executeState_ResetIn() { if (mAnm[ITEM_SELECT_ANIM_RESET].isStop2()) { @@ -1108,17 +1108,17 @@ void dLytMeterItemSelect_c::initializeState_Reset() {} void dLytMeterItemSelect_c::executeState_Reset() { if (field_0x57A2 != 0 || field_0x5754 == 1 || (field_0x57A0 != 0 && - (dLytMeterContainer_c::GetInstance()->checkAllFlags(0x10) || (field_0x5794 != 10 && field_0x5794 != 9)))) { + (dLytMeterContainer_c::GetInstance()->checkAllFlags(0x10) || (field_0x5794 != I_HARP && field_0x5794 != I_BOAT_CANNON)))) { mAnm[ITEM_SELECT_ANIM_RESET].setBackwardsOnce(); mAnm[ITEM_SELECT_ANIM_RESET].setToEnd2(); mAnm[ITEM_SELECT_ANIM_RESET].setAnimEnable(true); mLyt.calc(); mAnm[ITEM_SELECT_ANIM_RESET].setAnimEnable(false); fn_800F0310(); - } else if (field_0x5794 == 2 || field_0x5794 == 9 || field_0x5794 == 10) { + } else if (field_0x5794 == I_SAILCLOTH || field_0x5794 == I_BOAT_CANNON || field_0x5794 == I_HARP) { mStateMgr.changeState(StateID_SetSpecialItemIn); - } else if (LytDoButtonRelated::get0x08() == 0x85 || LytDoButtonRelated::get0x08() == 0x7F || - LytDoButtonRelated::get0x08() == 0x87 || LytDoButtonRelated::get0x08() == 0x84 || field_0x5794 == 11 || + } else if (LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_B) == LytDoButtonRelated::DO_ITEMS || LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_B) == LytDoButtonRelated::DO_RETURN || + LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_B) == LytDoButtonRelated::DO_DONE || LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_B) == LytDoButtonRelated::DO_STOP || field_0x5794 == I_INVALID || !dLytMeterContainer_c::GetInstance()->checkAllFlags(0x10) || field_0x5754 == 1) { mStateMgr.changeState(StateID_ResetOut); } @@ -1134,7 +1134,7 @@ void dLytMeterItemSelect_c::initializeState_ResetOut() { void dLytMeterItemSelect_c::executeState_ResetOut() { if (field_0x57A2 != 0 || field_0x5754 == 1 || (field_0x57A0 != 0 && - (dLytMeterContainer_c::GetInstance()->checkAllFlags(0x10) || (field_0x5794 != 10 && field_0x5794 != 9)))) { + (dLytMeterContainer_c::GetInstance()->checkAllFlags(0x10) || (field_0x5794 != I_HARP && field_0x5794 != I_BOAT_CANNON)))) { mAnm[ITEM_SELECT_ANIM_RESET].setToEnd2(); mBtn[2].setVisible(false, true); mLyt.calc(); @@ -1154,7 +1154,7 @@ void dLytMeterItemSelect_c::executeState_ResetOut() { void dLytMeterItemSelect_c::finalizeState_ResetOut() {} void dLytMeterItemSelect_c::initializeState_ToUse() { - if (field_0x5796 != 11) { + if (field_0x5796 != I_INVALID) { field_0x57B4 = 0; } field_0x57C4 = 0; @@ -1162,7 +1162,7 @@ void dLytMeterItemSelect_c::initializeState_ToUse() { mBtn[0].setVisible(true, false); if (field_0x57B3 == 0) { - if (field_0x5796 != 11) { + if (field_0x5796 != I_INVALID) { mBtn[2].setVisible(false, false); } else { mBtn[2].setVisible(true, false); @@ -1173,7 +1173,7 @@ void dLytMeterItemSelect_c::initializeState_ToUse() { mAnm[ITEM_SELECT_ANIM_RESET].setToStart(); mAnm[ITEM_SELECT_ANIM_RESET].setAnimEnable(true); } - } else if (field_0x5794 != 11 && (field_0x5795 == 9 || field_0x5795 == 10)) { + } else if (field_0x5794 != I_INVALID && (field_0x5795 == I_BOAT_CANNON || field_0x5795 == I_HARP)) { field_0x57B3 = 0; field_0x57C4 = 1; mAnm[ITEM_SELECT_ANIM_OUT].setForwardOnce(); @@ -1184,7 +1184,7 @@ void dLytMeterItemSelect_c::initializeState_ToUse() { void dLytMeterItemSelect_c::executeState_ToUse() { if (field_0x57A2 != 0 || field_0x5754 == 1 || (field_0x57A0 != 0 && - (dLytMeterContainer_c::GetInstance()->checkAllFlags(0x10) || (field_0x5794 != 10 && field_0x5794 != 9)))) { + (dLytMeterContainer_c::GetInstance()->checkAllFlags(0x10) || (field_0x5794 != I_HARP && field_0x5794 != I_BOAT_CANNON)))) { if (field_0x57C4 != 0 && mAnm[ITEM_SELECT_ANIM_OUT].isEnabled()) { mAnm[ITEM_SELECT_ANIM_OUT].setToEnd2(); mLyt.calc(); @@ -1243,7 +1243,7 @@ void dLytMeterItemSelect_c::initializeState_ToUnuse() { mBtn[1].setVisible(false, false); mBtn[0].setVisible(false, false); if (field_0x57B3 == 0) { - if (field_0x5794 != 11) { + if (field_0x5794 != I_INVALID) { mBtn[2].setVisible(false, false); } else { mBtn[2].setVisible(true, false); @@ -1253,18 +1253,18 @@ void dLytMeterItemSelect_c::initializeState_ToUnuse() { field_0x57A1 = field_0x57A0; } void dLytMeterItemSelect_c::executeState_ToUnuse() { - if (field_0x57B3 == 0 && field_0x5794 == 11 && (field_0x579A == 2 || field_0x579A == 9 || field_0x579A == 10)) { + if (field_0x57B3 == 0 && field_0x5794 == I_INVALID && (field_0x579A == I_SAILCLOTH || field_0x579A == I_BOAT_CANNON || field_0x579A == I_HARP)) { mStateMgr.changeState(StateID_SetNone); } else if (field_0x57A2 != 0 || field_0x5754 == 1 || (field_0x57A0 != 0 && (dLytMeterContainer_c::GetInstance()->checkAllFlags(0x10) || - (field_0x5794 != 10 && field_0x5794 != 9)))) { + (field_0x5794 != I_HARP && field_0x5794 != I_BOAT_CANNON)))) { fn_800F0310(); return; } if (field_0x57A0 == 0 && field_0x57A1 != 0) { field_0x57A1 = field_0x57A0; - if (field_0x5794 == 11) { + if (field_0x5794 == I_INVALID) { mAnm[ITEM_SELECT_ANIM_IN].setAnimEnable(true); mAnm[ITEM_SELECT_ANIM_IN].setFrame(0.0f); mLyt.calc(); @@ -1287,7 +1287,7 @@ void dLytMeterItemSelect_c::executeState_ToUnuse() { mBtn[0].setVisible(false); if (field_0x57B3 == 0) { if (mBtn[2].isSettled()) { - if (field_0x5794 != 11) { + if (field_0x5794 != I_INVALID) { mBtn[2].setVisible(false); } else { mBtn[2].setVisible(true); @@ -1309,11 +1309,11 @@ void dLytMeterItemSelect_c::executeState_Unuse() { mStateMgr.changeState(StateID_FrameOffIn); } else if (field_0x57A2 != 0 || field_0x5754 == 1 || (field_0x57A0 != 0 && (dLytMeterContainer_c::GetInstance()->checkAllFlags(0x10) || - (field_0x5794 != 10 && field_0x5794 != 9)))) { + (field_0x5794 != I_HARP && field_0x5794 != I_BOAT_CANNON)))) { fn_800F0310(); } else if (dLytMeterContainer_c::GetInstance()->checkAllFlags(0x10) || field_0x5754 == 1) { - if (field_0x5794 != 11) { - if (field_0x5794 == 2 || field_0x5794 == 9 || field_0x5794 == 10) { + if (field_0x5794 != I_INVALID) { + if (field_0x5794 == I_SAILCLOTH || field_0x5794 == I_BOAT_CANNON || field_0x5794 == I_HARP) { mStateMgr.changeState(StateID_SetSpecialItemIn); return; } @@ -1405,9 +1405,9 @@ void dLytMeterItemSelect_c::executeState_DemoMove() { if (mIsBocoburinLocked[i]) { mIsBocoburinLocked[i] = false; - field_0x5799 = 11; + field_0x5799 = I_INVALID; } else { - field_0x5799 = fn_800F0190(i); + field_0x5799 = getInternalBaseItemForSlot(i); field_0x5794 = field_0x5799; } } @@ -1425,7 +1425,7 @@ void dLytMeterItemSelect_c::executeState_DemoMove() { void dLytMeterItemSelect_c::finalizeState_DemoMove() {} void dLytMeterItemSelect_c::initializeState_DemoOut0() { - if (field_0x5799 != 11) { + if (field_0x5799 != I_INVALID) { mAnm[ITEM_SELECT_ANIM_DECIDE].setAnimEnable(true); mAnm[ITEM_SELECT_ANIM_DECIDE].setFrame(0.0f); } else { @@ -1435,7 +1435,7 @@ void dLytMeterItemSelect_c::initializeState_DemoOut0() { } } void dLytMeterItemSelect_c::executeState_DemoOut0() { - if (field_0x5799 != 11) { + if (field_0x5799 != I_INVALID) { if (mAnm[ITEM_SELECT_ANIM_DECIDE].isEndReached()) { if (!mBtn[1].getShouldBeVisible()) { mBtn[1].setVisible(true, true); @@ -1471,7 +1471,7 @@ void dLytMeterItemSelect_c::executeState_DemoOut1() { mAnm[ITEM_SELECT_ANIM_OUT].setAnimEnable(false); field_0x57B3 = 1; field_0x5754 = 4; - field_0x5799 = 11; + field_0x5799 = I_INVALID; mStateMgr.changeState(StateID_Wait); } @@ -1493,7 +1493,7 @@ void dLytMeterItemSelect_c::initializeState_FrameOffIn() { } if (field_0x57B3 == 0) { - if (field_0x5794 == 11) { + if (field_0x5794 == I_INVALID) { mBtn[2].setVisible(false, false); } else if (field_0x57B4 == 0) { field_0x57C2 = 1; @@ -1501,7 +1501,7 @@ void dLytMeterItemSelect_c::initializeState_FrameOffIn() { } } - if (field_0x57B3 == 0 && field_0x5794 != 11) { + if (field_0x57B3 == 0 && field_0x5794 != I_INVALID) { mAnm[ITEM_SELECT_ANIM_RESET].setForwardOnce(); mAnm[ITEM_SELECT_ANIM_RESET].setToStart(); mAnm[ITEM_SELECT_ANIM_RESET].setAnimEnable(true); @@ -1557,7 +1557,7 @@ void dLytMeterItemSelect_c::initializeState_FrameOffOut() { mpPanes[ITEM_SELECT_PANE_SET_BTN]->SetVisible(true); } - if (field_0x57B3 == 0 && field_0x5794 != 11) { + if (field_0x57B3 == 0 && field_0x5794 != I_INVALID) { if (field_0x57A0 != 0) { field_0x57B3 = 1; mAnm[ITEM_SELECT_ANIM_DECIDE].setAnimEnable(true); @@ -1584,7 +1584,7 @@ void dLytMeterItemSelect_c::initializeState_FrameOffOut() { mBtn[0].setVisible(true, false); mBtn[1].setVisible(true, false); mBtn[3].setVisible(true); - if (field_0x5794 != 11) { + if (field_0x5794 != I_INVALID) { mBtn[2].setVisible(false, false); } else { mBtn[2].setVisible(true, false); @@ -1626,7 +1626,7 @@ void dLytMeterItemSelect_c::executeState_FrameOffOut() { mBtn[0].setVisible(true); mBtn[1].setVisible(true); mBtn[3].setVisible(true); - if (field_0x5794 != 11) { + if (field_0x5794 != I_INVALID) { mBtn[2].setVisible(false); } else { mBtn[2].setVisible(true); @@ -1719,18 +1719,18 @@ bool dLytMeterItemSelect_c::build(d2d::ResAccIf_c *resAcc) { mItemIcons[i].setSize(true); } - field_0x5794 = 11; - field_0x5795 = 11; - field_0x5796 = 11; - field_0x5797 = 11; - field_0x5798 = 11; - field_0x5799 = 11; - field_0x579A = 11; + field_0x5794 = I_INVALID; + field_0x5795 = I_INVALID; + field_0x5796 = I_INVALID; + field_0x5797 = I_INVALID; + field_0x5798 = I_INVALID; + field_0x5799 = I_INVALID; + field_0x579A = I_INVALID; - field_0x579C = baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforUnkId(1)); - field_0x579D = baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforUnkId(5)); - field_0x579E = baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforUnkId(4)); - field_0x579F = baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforUnkId(7)); + mStoredBowVariant = baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforInternalId(I_BOW)); + mStoredSlingshotVariant = baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforInternalId(I_SLINGSHOT)); + mStoredBeetleVariant = baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforInternalId(I_BEETLE)); + mStoredBugNetVariant = baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforInternalId(I_BUG_NET)); field_0x57B3 = 0; field_0x57B4 = 0; @@ -1769,8 +1769,8 @@ bool dLytMeterItemSelect_c::build(d2d::ResAccIf_c *resAcc) { field_0x57A0 = 0; field_0x57A1 = 0; - field_0x5778 = 0.0f; - field_0x577C = 0.0f; + mArrowRotation = 0.0f; + mArrowLength = 0.0f; field_0x5780 = 0.0f; mpOwnerPane = nullptr; @@ -1780,10 +1780,10 @@ bool dLytMeterItemSelect_c::build(d2d::ResAccIf_c *resAcc) { field_0x57BB = 0; field_0x57BC = 0; field_0x5774 = 0; - field_0x576C = 0x98; + mLastDoButtonRelatedAction = LytDoButtonRelated::DO_NONE; field_0x5770 = 5; - setBtnText(0x98); + setBtnText(LytDoButtonRelated::DO_NONE); mStateMgr.changeState(StateID_InitWait); @@ -1817,7 +1817,7 @@ bool dLytMeterItemSelect_c::remove() { bool dLytMeterItemSelect_c::execute() { if (StoryflagManager::sInstance->getCounterOrFlag(569) != 0) { - if (field_0x57A2 != 0 || (field_0x57A0 != 0 && field_0x5794 != 2 && field_0x5794 != 9 && field_0x5794 != 10)) { + if (field_0x57A2 != 0 || (field_0x57A0 != 0 && field_0x5794 != I_SAILCLOTH && field_0x5794 != I_BOAT_CANNON && field_0x5794 != I_HARP)) { field_0x57B9 = 0; StoryflagManager::sInstance->unsetFlag(569); } else { @@ -1848,8 +1848,8 @@ bool dLytMeterItemSelect_c::execute() { mAnm[ITEM_SELECT_ANIM_DECIDE].setToEnd2(); } - if (field_0x5798 != 11) { - if (field_0x5794 != 11) { + if (field_0x5798 != I_INVALID) { + if (field_0x5794 != I_INVALID) { mAnm[ITEM_SELECT_ANIM_OUT].setForwardOnce(); mAnm[ITEM_SELECT_ANIM_OUT].setAnimEnable(true); mAnm[ITEM_SELECT_ANIM_OUT].setToEnd2(); @@ -1858,7 +1858,7 @@ bool dLytMeterItemSelect_c::execute() { mAnm[ITEM_SELECT_ANIM_RESET].setAnimEnable(true); mAnm[ITEM_SELECT_ANIM_RESET].setToEnd2(); } - } else if (field_0x5794 != 11) { + } else if (field_0x5794 != I_INVALID) { mAnm[ITEM_SELECT_ANIM_OUT].setForwardOnce(); mAnm[ITEM_SELECT_ANIM_OUT].setAnimEnable(true); mAnm[ITEM_SELECT_ANIM_OUT].setToEnd2(); @@ -1892,13 +1892,13 @@ bool dLytMeterItemSelect_c::execute() { field_0x57B3 = 0; - if (field_0x5798 != 11) { - if (field_0x5794 != 11) { + if (field_0x5798 != I_INVALID) { + if (field_0x5794 != I_INVALID) { mBtn[2].setVisible(false, true); } else { mBtn[2].setVisible(true, true); } - } else if (field_0x5794 != 11) { + } else if (field_0x5794 != I_INVALID) { mBtn[2].setVisible(false, true); } else { mBtn[2].setVisible(true, true); @@ -1940,7 +1940,7 @@ bool dLytMeterItemSelect_c::execute() { mAnm[ITEM_SELECT_ANIM_RESET].setAnimEnable(false); field_0x57B3 = 0; - field_0x579A = 11; + field_0x579A = I_INVALID; mStateMgr.changeState(StateID_Wait); } if (*mStateMgr.getStateID() == StateID_SetSpecialItemIn) { @@ -1967,7 +1967,7 @@ bool dLytMeterItemSelect_c::execute() { mAnm[ITEM_SELECT_ANIM_RESET].setAnimEnable(false); mpPanes[ITEM_SELECT_PANE_SET_BTN]->SetVisible(false); field_0x57B3 = 0; - field_0x579A = 11; + field_0x579A = I_INVALID; mStateMgr.changeState(StateID_Wait); } } @@ -2003,7 +2003,7 @@ bool dLytMeterItemSelect_c::execute() { if (field_0x5794 != field_0x5796) { field_0x5796 = field_0x5794; a = true; - if (field_0x5794 != 11) { + if (field_0x5794 != I_INVALID) { field_0x5797 = field_0x5794; field_0x57B4 = 0; } else { @@ -2011,26 +2011,28 @@ bool dLytMeterItemSelect_c::execute() { } setBtnItem(field_0x5796); b = true; - } else if (field_0x579C != baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforUnkId(1))) { - field_0x579C = baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforUnkId(1)); + // The conditions below check if you just upgraded a certain item. If the current item differs from + // what we recorded last, this automatically switches the item. + } else if (mStoredBowVariant != baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforInternalId(I_BOW))) { + mStoredBowVariant = baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforInternalId(I_BOW)); setBtnItem(field_0x5796); b = true; - } else if (field_0x579D != baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforUnkId(5))) { - field_0x579D = baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforUnkId(5)); + } else if (mStoredSlingshotVariant != baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforInternalId(I_SLINGSHOT))) { + mStoredSlingshotVariant = baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforInternalId(I_SLINGSHOT)); setBtnItem(field_0x5796); b = true; - } else if (field_0x579E != baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforUnkId(4))) { - field_0x579E = baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforUnkId(4)); + } else if (mStoredBeetleVariant != baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforInternalId(I_BEETLE))) { + mStoredBeetleVariant = baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforInternalId(I_BEETLE)); setBtnItem(field_0x5796); b = true; - } else if (field_0x579F != baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforUnkId(7))) { - field_0x579F = baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforUnkId(7)); + } else if (mStoredBugNetVariant != baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforInternalId(I_BUG_NET))) { + mStoredBugNetVariant = baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforInternalId(I_BUG_NET)); setBtnItem(field_0x5796); b = true; } - if (field_0x5797 != 11) { - realizeBtnNumberForLytIndex(baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforUnkId(field_0x5797)), a); + if (field_0x5797 != I_INVALID) { + realizeBtnNumberForLytIndex(baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforInternalId(field_0x5797)), a); } if (field_0x57B6) { @@ -2045,11 +2047,11 @@ bool dLytMeterItemSelect_c::execute() { if (!mAnm[ITEM_SELECT_ANIM_FULL].isEnabled()) { mAnm[ITEM_SELECT_ANIM_FULL].setFrame(0.0f); mAnm[ITEM_SELECT_ANIM_FULL].setAnimEnable(true); - if (field_0x5797 == 0) { + if (field_0x5797 == I_BOMB_BAG) { SmallSoundManager::GetInstance()->playSound(SE_S_BM_MAX); - } else if (field_0x5797 == 1) { + } else if (field_0x5797 == I_BOW) { SmallSoundManager::GetInstance()->playSound(SE_S_AW_MAX); - } else if (field_0x5797 == 5) { + } else if (field_0x5797 == I_SLINGSHOT) { SmallSoundManager::GetInstance()->playSound(SE_S_PC_MAX); } } @@ -2077,7 +2079,7 @@ bool dLytMeterItemSelect_c::execute() { } bool b2 = false; - if (field_0x57B9 != 0 && dLytMeterContainer_c::GetInstance()->checkAllFlags(0x10) && field_0x576C == 0x85) { + if (field_0x57B9 != 0 && dLytMeterContainer_c::GetInstance()->checkAllFlags(0x10) && mLastDoButtonRelatedAction == 0x85) { if (field_0x57BA == 0) { mAnm[ITEM_SELECT_ANIM_CALL].setToEnd(); mAnm[ITEM_SELECT_ANIM_CALL].setRate(1.0f); @@ -2153,22 +2155,25 @@ bool dLytMeterItemSelect_c::execute() { mLyt.getLayout()->Animate(0); } + // Rotate the arrow mVec3_c t1(0.0f, 0.0f, 0.0f); - t1.z = field_0x5778; + t1.z = mArrowRotation; mpPanes[ITEM_SELECT_PANE_ITEM_ARROW]->SetRotate(t1); + // But rotate the button and the pointer back so that + // they point up mVec3_c t2(0.0f, 0.0f, 0.0f); - t2.z = -field_0x5778; + t2.z = -mArrowRotation; mpPanes[ITEM_SELECT_PANE_ARROW_HAND]->SetRotate(t2); mpPanes[ITEM_SELECT_PANE_N_BTN_0]->SetRotate(t2); f32 frame = mAnm[ITEM_SELECT_ANIM_ARROW].getAnimDuration(); - if (field_0x577C < 0.0f) { - field_0x577C = 0.0f; + if (mArrowLength < 0.0f) { + mArrowLength = 0.0f; } - if (field_0x577C > 1.0f) { - field_0x577C = 1.0f; + if (mArrowLength > 1.0f) { + mArrowLength = 1.0f; } - mAnm[ITEM_SELECT_ANIM_ARROW].setFrame(frame * field_0x577C); + mAnm[ITEM_SELECT_ANIM_ARROW].setFrame(frame * mArrowLength); mAnm[ITEM_SELECT_ANIM_ARROW].setAnimEnable(true); if (mAnm[ITEM_SELECT_ANIM_SELECT_LOOP].isEnabled()) { @@ -2197,18 +2202,18 @@ bool dLytMeterItemSelect_c::execute() { mSubpanes[i].mpLytPane->execute(); } - if (field_0x5794 == 2) { + if (field_0x5794 == I_SAILCLOTH) { if (LytDoButtonRelated::GetInstance() != nullptr) { - LytDoButtonRelated::GetInstance()->set0x08(0x91); + LytDoButtonRelated::GetInstance()->set(LytDoButtonRelated::DO_BUTTON_B, LytDoButtonRelated::DO_SAILCLOTH); } - } else if (field_0x5794 == 9) { + } else if (field_0x5794 == I_BOAT_CANNON) { if (field_0x57B3 != 0) { if (LytDoButtonRelated::GetInstance() != nullptr) { - LytDoButtonRelated::GetInstance()->set0x08(0x90); + LytDoButtonRelated::GetInstance()->set(LytDoButtonRelated::DO_BUTTON_B, LytDoButtonRelated::DO_STOW_CANNON); } } else { if (LytDoButtonRelated::GetInstance() != nullptr) { - LytDoButtonRelated::GetInstance()->set0x08(0x8F); + LytDoButtonRelated::GetInstance()->set(LytDoButtonRelated::DO_BUTTON_B, LytDoButtonRelated::DO_READY_CANNON); } } } @@ -2216,14 +2221,14 @@ bool dLytMeterItemSelect_c::execute() { if (field_0x578C <= 0 && *mStateMgr.getStateID() != StateID_SetIn && *mStateMgr.getStateID() != StateID_SetOut && *mStateMgr.getStateID() != StateID_ToUnuse && *mStateMgr.getStateID() != StateID_Unuse) { - if (field_0x576C != LytDoButtonRelated::get0x08()) { - field_0x576C = LytDoButtonRelated::get0x08(); - setBtnText(field_0x576C); + if (mLastDoButtonRelatedAction != LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_B)) { + mLastDoButtonRelatedAction = LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_B); + setBtnText(mLastDoButtonRelatedAction); } } else { - if (field_0x576C != 0x98) { - field_0x576C = 0x98; - setBtnText(field_0x576C); + if (mLastDoButtonRelatedAction != LytDoButtonRelated::DO_NONE) { + mLastDoButtonRelatedAction = LytDoButtonRelated::DO_NONE; + setBtnText(mLastDoButtonRelatedAction); } if (field_0x578C > 0) { @@ -2232,7 +2237,7 @@ bool dLytMeterItemSelect_c::execute() { } if (LytDoButtonRelated::GetInstance() != nullptr) { - LytDoButtonRelated::GetInstance()->set0x08(0x98); + LytDoButtonRelated::GetInstance()->set(LytDoButtonRelated::DO_BUTTON_B, LytDoButtonRelated::DO_NONE); } } @@ -2262,7 +2267,7 @@ void dLytMeterItemSelect_c::fn_800EF580() { } void dLytMeterItemSelect_c::fn_800EF6B0(u8 arg) { - if (field_0x5794 != 2 && field_0x5794 != 9 && field_0x5794 != 10) { + if (field_0x5794 != I_SAILCLOTH && field_0x5794 != I_BOAT_CANNON && field_0x5794 != I_HARP) { field_0x5798 = field_0x5794; } @@ -2283,7 +2288,7 @@ void dLytMeterItemSelect_c::fn_800EF710(u8 arg) { field_0x57A0 = arg; } -void dLytMeterItemSelect_c::fn_800EF720(s32 arg) { +void dLytMeterItemSelect_c::fn_800EF720(InternalItem_e arg) { if (field_0x57B5 == 0 || *mStateMgr.getStateID() != StateID_InitWait) { field_0x57B5 = 1; field_0x574C = arg; @@ -2379,7 +2384,7 @@ void dLytMeterItemSelect_c::realizeWheelNumberForLytIndex(s32 iconIdx, s32 lytIt break; } - u8 color = 0; + s32 color = 0; if (num == 0) { color = 1; } else if (num == max) { @@ -2502,16 +2507,18 @@ ITEM_ID dLytMeterItemSelect_c::getBaseItemForBWheelSlot(s32 idx) { return sSlotToBaseItem[idx]; } +// What is this for? This is not an internal item id... static s32 sUnkArray1[] = {1, 0, 3, 8, 4, 2, 6, 5}; s32 dLytMeterItemSelect_c::fn_800F0170(s32 slot) const { return sUnkArray1[slot]; } -static s32 sUnkArray2[] = {1, 0, 4, 7, 5, 3, 8, 6}; -u8 dLytMeterItemSelect_c::fn_800F0190(s32 idx) const { - return sUnkArray2[idx]; +u8 dLytMeterItemSelect_c::getInternalBaseItemForSlot(s32 slot) const { + static s32 sSlotToInternalItem[] = {I_BOW, I_BOMB_BAG, I_BEETLE, I_BUG_NET, I_SLINGSHOT, I_CLAWSHOTS, I_WHIP, I_GUST_BELLOWS}; + + return sSlotToInternalItem[slot]; } extern "C" s32 fn_801673B0(s32); @@ -2536,8 +2543,8 @@ bool dLytMeterItemSelect_c::fn_800F0220(s32 arg) { field_0x5758 = arg; field_0x575C = 0; - field_0x5778 = 0.0f; - field_0x577C = 0.0f; + mArrowRotation = 0.0f; + mArrowLength = 0.0f; mpPanes[4]->SetVisible(false); mpPanes[5]->SetVisible(false); mpPanes[3]->SetVisible(false); @@ -2593,7 +2600,7 @@ static const s32 sActIds[] = { void dLytMeterItemSelect_c::setBtnText(s32 unkId) { SizedString<16> id; - if (unkId < 0x98) { + if (unkId < LytDoButtonRelated::DO_NONE) { mpTextBoxes[8]->SetVisible(true); mpTextBoxes[9]->SetVisible(true); mpWindows[0]->SetVisible(true); @@ -2627,15 +2634,15 @@ void dLytMeterItemSelect_c::setBtnText(s32 unkId) { } } -void dLytMeterItemSelect_c::setBtnItem(s32 unkId) { - if (unkId == 2 || unkId == 9 || unkId == 10) { +void dLytMeterItemSelect_c::setBtnItem(s32 item) { + if (item == I_SAILCLOTH || item == I_BOAT_CANNON || item == I_HARP) { field_0x57B8 = 1; } else { field_0x57B8 = 0; } - if (unkId != 11) { - mItemIcons[8].setItem(baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforUnkId(unkId))); + if (item != I_INVALID) { + mItemIcons[8].setItem(baseItemLytIndexToCurrentVariant(getBaseItemLytIndexforInternalId(item))); } } @@ -2707,17 +2714,17 @@ ITEM_ID dLytMeterItemSelect_c::baseItemIdToCurrentVariant(ITEM_ID baseItem) cons return baseItem; } -static const s32 sUnkIdItemLytIndex[] = { +static const s32 sInternalItemToLytIndex[] = { LYT_CMN_ItemBombBag, LYT_CMN_ItemBow, LYT_CMN_ItemSailcloth, LYT_CMN_ItemClawshots, LYT_CMN_ItemBeetle, LYT_CMN_ItemSlingshot, LYT_CMN_ItemGustBellows, LYT_CMN_ItemBugnet, LYT_CMN_ItemWhip, LYT_CMN_ItemBoatCannon, LYT_CMN_ItemHarp, }; -s32 dLytMeterItemSelect_c::getBaseItemLytIndexforUnkId(s32 idx) const { +s32 dLytMeterItemSelect_c::getBaseItemLytIndexforInternalId(s32 idx) const { if (idx < 11) { - return sUnkIdItemLytIndex[idx]; - } else if (field_0x5797 != 11) { - return sUnkIdItemLytIndex[field_0x5797]; + return sInternalItemToLytIndex[idx]; + } else if (field_0x5797 != I_INVALID) { + return sInternalItemToLytIndex[field_0x5797]; } return LYT_CMN_ItemNone;