summaryrefslogtreecommitdiff
path: root/include/d
diff options
context:
space:
mode:
authorrobojumper <robojumper@gmail.com>2026-01-24 11:10:18 +0100
committerGitHub <noreply@github.com>2026-01-24 11:10:18 +0100
commitcffba79e3f0600d54dea3bdbb0506e2fc1c54199 (patch)
treeea7b04324a88e16afdec64354ea790cfb4c85cc3 /include/d
parentddc2c9359124773594b93b3a35ad5f548c9fc89a (diff)
parent2952e7568f6d0c2ab7c12bbdaa8d274fee619adc (diff)
Merge pull request #290 from robojumper/d_lyt_deposit
d_lyt_deposit OK
Diffstat (limited to 'include/d')
-rw-r--r--include/d/d_cs_base.h21
-rw-r--r--include/d/d_pouch.h6
-rw-r--r--include/d/flag/storyflag_map.h2
-rw-r--r--include/d/lyt/d_lyt_common_arrow.h29
-rw-r--r--include/d/lyt/d_lyt_cursor_stick.h11
-rw-r--r--include/d/lyt/d_lyt_deposit.h228
-rw-r--r--include/d/lyt/d_lyt_deposit_box_cursor.h67
-rw-r--r--include/d/lyt/d_lyt_deposit_stock.h206
-rw-r--r--include/d/lyt/d_lyt_util_items.h9
9 files changed, 563 insertions, 16 deletions
diff --git a/include/d/d_cs_base.h b/include/d/d_cs_base.h
index 8c7972c8..0ac075b9 100644
--- a/include/d/d_cs_base.h
+++ b/include/d/d_cs_base.h
@@ -26,6 +26,9 @@ public:
void setVisible(bool val) {
mVisible = val;
}
+ bool isVisible() const {
+ return mVisible;
+ }
void setDrawDirectly(bool val) {
mDrawDirectly = val;
}
@@ -36,7 +39,7 @@ public:
mCalibrationPointCenterEnabled = val;
}
- dCursorHitCheck_c *getHitCheck() {
+ dCursorHitCheck_c *getHitCheck() const {
return mCursorIf.getHit();
}
@@ -52,10 +55,26 @@ public:
mCursorStick.setShouldBeOn(visible);
}
+ void setCursorStickPriority(u8 priority) {
+ mCursorStick.setPriority(priority);
+ }
+
+ void setCursorStickPriority2(u8 priority) {
+ mCursorStick.setPriority2(priority);
+ }
+
+ bool isCursorStickVisible() const {
+ return mCursorStick.getShouldBeOn();
+ }
+
void setCursorStickTargetPane(const nw4r::lyt::Pane *target) {
mCursorStick.setTargetPane(target);
}
+ const nw4r::lyt::Pane *getCursorStickAllPane() const {
+ return mCursorStick.getAllPane();
+ }
+
private:
static dCsBase_c *sInstance;
void setCurrentLyt(int lyt);
diff --git a/include/d/d_pouch.h b/include/d/d_pouch.h
index feacc53d..6ef2f808 100644
--- a/include/d/d_pouch.h
+++ b/include/d/d_pouch.h
@@ -19,6 +19,12 @@ bool isItemShield(s32 item);
u8 adventurePouchFindItemSlot(ITEM_ID item);
u32 adventurePouchCountItem(ITEM_ID itemId);
+bool swapAdventurePouchItems(s32 slot1, s32 slot2);
+bool swapStockAndPouchItems(s32 pouchSlot, s32 stockSlot);
+bool swapStockItems(s32 slot1, s32 slot2);
+
+void sortStock();
+
#define ITEM_CHECK_SLOT_NONE 60
u16 itemCheckFindItemSlot(ITEM_ID item);
diff --git a/include/d/flag/storyflag_map.h b/include/d/flag/storyflag_map.h
index 940380fd..9f82fc70 100644
--- a/include/d/flag/storyflag_map.h
+++ b/include/d/flag/storyflag_map.h
@@ -1520,7 +1520,7 @@ enum StoryFlags_e {
/** [Set when talking to Strich]
* Story Flag #300 (0x012C) - JP 805ACD7D 0x40 / US 805A9AFD 0x40
*/
- STORYFLAG_300,
+ STORYFLAG_TALKED_TO_STRICH,
/** [Kukiel screams]
* Story Flag #301 (0x012D) - JP 805ACD7D 0x80 / US 805A9AFD 0x80
diff --git a/include/d/lyt/d_lyt_common_arrow.h b/include/d/lyt/d_lyt_common_arrow.h
index ccab07b9..5fd61236 100644
--- a/include/d/lyt/d_lyt_common_arrow.h
+++ b/include/d/lyt/d_lyt_common_arrow.h
@@ -6,6 +6,7 @@
// vtable order
#include "d/d_cursor_hit_check.h"
// clang-format on
+#include "m/m_vec.h"
#include "nw4r/lyt/lyt_bounding.h"
#include "s/s_State.hpp"
@@ -35,34 +36,38 @@ public:
bool requestIn();
bool requestOut();
- void unk() {
- field_0x6B8 = mPointedAtArrow;
+ s32 getPointedAtArrow() const {
+ return mPointedAtArrow;
}
- s32 getField_0x6B8() const {
- return field_0x6B8;
+ bool isChangingState() const {
+ return mIsChangingState;
}
nw4r::lyt::Bounding *getArrowBounding(s32 idx) const {
return mpBoundings[idx];
}
- void setField_0x6B8(s32 v) {
- field_0x6B8 = v;
+ s32 getActiveArrow() const {
+ return mActiveArrow;
+ }
+
+ void setActiveArrow(s32 v) {
+ mActiveArrow = v;
}
void setBackwards(bool b) {
mBackwards = b;
}
- bool fn_80168760();
+ bool triggerArrowPress();
+ void setTranslate(const mVec2_c *);
private:
- void setTranslate(const Vec *);
void displayElement(s32, f32);
void unbindAt(s32);
void tickDown(d2d::AnmGroup_c *);
void checkPointAtPane();
-
+
/* 0x04 */ UI_STATE_MGR_DECLARE(dLytCommonArrow_c);
/* 0x40 */ d2d::LytBase_c mLytBase;
d2d::ResAccIf_c mResAcc;
@@ -71,9 +76,9 @@ private:
/* 0x6A8 */ nw4r::lyt::Bounding *mpBoundings[2];
/* 0x6B0 */ s32 mType;
/* 0x6B4 */ s32 mPointedAtArrow;
- /* 0x6B8 */ s32 field_0x6B8;
- /* 0x6BC */ s32 field_0x6BC;
- /* 0x6C0 */ s32 field_0x6C0;
+ /* 0x6B8 */ s32 mActiveArrow;
+ /* 0x6BC */ s32 mLastActiveArrow;
+ /* 0x6C0 */ s32 mTriggeredArrow;
/* 0x6C4 */ s32 mTimer;
/* 0x6C8 */ bool mInRequested;
/* 0x6C9 */ bool mOutRequested;
diff --git a/include/d/lyt/d_lyt_cursor_stick.h b/include/d/lyt/d_lyt_cursor_stick.h
index 84f7293b..80670a58 100644
--- a/include/d/lyt/d_lyt_cursor_stick.h
+++ b/include/d/lyt/d_lyt_cursor_stick.h
@@ -23,16 +23,27 @@ public:
static bool drawDirectly();
void setPriority(u8 priority);
+ void setPriority2(u8 priority) {
+ mLyt.setPriority(priority);
+ }
void setTargetPane(const nw4r::lyt::Pane *pane);
void setShouldBeOn(bool value) {
mShouldBeOn = value;
}
+ bool getShouldBeOn() const {
+ return mShouldBeOn;
+ }
+
static dLytCursorStick_c *GetInstance() {
return sInstance;
}
+ const nw4r::lyt::Pane *getAllPane() const {
+ return mpPanes[0];
+ }
+
private:
bool build_();
bool remove_();
diff --git a/include/d/lyt/d_lyt_deposit.h b/include/d/lyt/d_lyt_deposit.h
index aa8804c9..22689646 100644
--- a/include/d/lyt/d_lyt_deposit.h
+++ b/include/d/lyt/d_lyt_deposit.h
@@ -1,14 +1,240 @@
#ifndef D_LYT_DEPOSIT_H
#define D_LYT_DEPOSIT_H
-class dLytDeposit_c {
+#include "d/d_cursor_hit_check.h"
+#include "d/d_pad_nav.h"
+#include "d/lyt/d2d.h"
+#include "d/lyt/d_lyt_base.h"
+#include "d/lyt/d_lyt_common_arrow.h"
+#include "d/lyt/d_lyt_common_icon_item.h"
+#include "d/lyt/d_lyt_deposit_box_cursor.h"
+#include "d/lyt/d_lyt_deposit_stock.h"
+#include "d/lyt/d_textbox.h"
+#include "d/lyt/d_window.h"
+#include "m/m_vec.h"
+#include "nw4r/lyt/lyt_bounding.h"
+#include "nw4r/lyt/lyt_pane.h"
+#include "s/s_State.hpp"
+
+class dLytDepositMain_c {
+public:
+ dLytDepositMain_c();
+ virtual ~dLytDepositMain_c() {
+ dPadNav::setNavEnabled(false, false);
+ }
+
+ bool build(d2d::ResAccIf_c *resAcc);
+ bool execute();
+ bool draw();
+ bool remove();
+
+ void setModeNone();
+ void setModeIn();
+ void setModeCheck();
+ void setModeChange(bool unk);
+ void setModeArrangement();
+ void setModeReverseChange();
+ void setModeScroll(bool leftRight, bool viaButton);
+ void setModeRecycle();
+ void setModeArrangementOut();
+ void setModeOut();
+
+ bool isSellableItem() const {
+ return mIsSellActive && mItemSellValue > 0;
+ }
+
+ s32 getArrowDirection() const {
+ return mStock[STOCK_ACTIVE].getArrowDirection();
+ }
+
+ void setField_0x1952C(bool b) {
+ mPreventCancellingSelection = b;
+ }
+
+ s32 getStateStep() const {
+ return mStateStep;
+ }
+
+ bool isIdle() const {
+ return mIsIdle;
+ }
+
+ bool isPointingAtToStockBounding() const {
+ return mIsPointingAtToStockBounding;
+ }
+
+ bool isPointingAtToPouchBounding() const {
+ return mIsPointingAtToPouchBounding;
+ }
+
+ bool getField_0x19523() const {
+ return mIsFinishActive;
+ }
+
+ bool getField_0x19525() const {
+ return mIsSortActive;
+ }
+
+ bool getField_0x1952B() const {
+ return mDidDropCancelItem;
+ }
+
+ bool isHoldingItem() const {
+ return mCurrentlyHoldingItemSlot >= 0;
+ }
+
+private:
+ static const s32 NUM_STOCKS = 3;
+ static const s32 STOCK_ACTIVE = 0;
+
+ static const s32 RING_NUM_ITEMS = 8;
+
+ static const s32 SLOT_STOCK_OFFSET = 8;
+
+ static const s32 NUM_ICONS_PER_PAGE = 12;
+ static const s32 NUM_PAGES = 5;
+
+ void buildSubpanes();
+ void loadInitialState();
+
+ void checkPouchItems();
+ void checkPointToStock();
+ void checkForItemPickupOrDrop();
+ void checkSellOrFinish();
+ void checkPointToPouch();
+ void checkSort();
+ void checkArrows();
+ s32 checkNav();
+
+ void loadItemText(s32 itemId, s32 where);
+ void loadStockItems(s32 hiddenSlot);
+ void loadPouchItem(s32 slot);
+ void loadPageText();
+
+ void setPouchItemsVisible(bool visible);
+
+ void selectPouchSlot(s32 slot);
+ void navigateOffIcon();
+
+ void updateStockCursor();
+ void showCursor();
+ void hideCursor();
+ void loadCursor();
+
+ void returnCursorAfterCancellingSell(s32 idx);
+ void returnCursorAfterCancellingSort(s32 idx);
+ void returnCursorAfterCancellingArrow(s32 idx);
+
+ s32 getItemSellValueFrame(s32 value);
+ s32 calcNumDigits(s32 value);
+
+ STATE_FUNC_DECLARE(dLytDepositMain_c, ModeNone);
+ STATE_FUNC_DECLARE(dLytDepositMain_c, ModeIn);
+ STATE_FUNC_DECLARE(dLytDepositMain_c, ModeCheck);
+ STATE_FUNC_DECLARE(dLytDepositMain_c, ModeChange);
+ STATE_FUNC_DECLARE(dLytDepositMain_c, ModeArrangement);
+ STATE_FUNC_DECLARE(dLytDepositMain_c, ModeReverseChange);
+ STATE_FUNC_DECLARE(dLytDepositMain_c, ModeScroll);
+ STATE_FUNC_DECLARE(dLytDepositMain_c, ModeRecycle);
+ STATE_FUNC_DECLARE(dLytDepositMain_c, ModeArrangementOut);
+ STATE_FUNC_DECLARE(dLytDepositMain_c, ModeOut);
+
+ STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytDepositMain_c);
+
+ /* 0x00004 */ UI_STATE_MGR_DECLARE(dLytDepositMain_c);
+ /* 0x00040 */ d2d::LytBase_c mLyt;
+ /* 0x000D0 */ d2d::AnmGroup_c mAnm[36];
+
+ /* 0x009D0 */ nw4r::lyt::Bounding *mpBoundingBox;
+ /* 0x009D4 */ nw4r::lyt::Bounding *mpBoundingChoices;
+ /* 0x009D8 */ nw4r::lyt::Bounding *mpBoundingCleanUp;
+ /* 0x009DC */ nw4r::lyt::Bounding *mpBoundingItem12;
+ /* 0x009E0 */ nw4r::lyt::Bounding *mpItemBoundings[12];
+ /* 0x00A10 */ nw4r::lyt::Bounding *mpRingBoundings[8];
+ /* 0x00A30 */ nw4r::lyt::Pane *mpPaneABtn;
+ /* 0x00A34 */ nw4r::lyt::Pane *mpPanePrice;
+ /* 0x00A38 */ nw4r::lyt::Pane *mpPaneCommonArrow;
+ /* 0x00A3C */ dWindow_c *mpWindows[2];
+ /* 0x00A44 */ dTextBox_c *mpSizeBoxes[2];
+ /* 0x00A4C */ dCursorHitCheckLyt_c mCsHitCheck;
+ /* 0x00A74 */ mVec2_c mCsPosition;
+ /* 0x00A7C */ dLytDepositStock_c mStock[NUM_STOCKS];
+ /* 0x143F0 */ dLytDepositBoxCursor_c mCursor;
+ /* 0x14D48 */ dLytCommonIconItem_c mPouchItems[RING_NUM_ITEMS];
+ /* 0x18D88 */ dLytCommonArrow_c mArrow;
+ /* 0x19458 */ d2d::SubPaneList mStockList;
+ /* 0x19464 */ d2d::SubPaneListNode mStockNodes[NUM_STOCKS];
+ /* 0x19494 */ d2d::SubPaneList mRingList;
+ /* 0x194A0 */ d2d::SubPaneListNode mRingNodes[RING_NUM_ITEMS];
+ /* 0x19520 */ bool mIsIdle;
+ /* 0x19521 */ bool mIsPointingAtToStockBounding;
+ /* 0x19522 */ bool mIsPointingAtToPouchBounding;
+ /* 0x19523 */ bool mIsFinishActive;
+ /* 0x19524 */ bool mIsSellActive;
+ /* 0x19525 */ bool mIsSortActive;
+ /* 0x19526 */ bool mIsRecycleActive;
+ /* 0x19527 */ bool field_0x19527;
+ /* 0x19528 */ bool mIsArrangementDone;
+ /* 0x19529 */ bool mHasHandledScrollTempItems;
+ /* 0x1952A */ bool mPrevPointerVisible;
+ /* 0x1952B */ bool mDidDropCancelItem;
+ /* 0x1952C */ bool mPreventCancellingSelection;
+ /* 0x19530 */ s32 mCurrentPouchNavTarget;
+ /* 0x19534 */ s32 mCurrentlyHoldingItemSlot; // encoded with SLOT_STOCK_OFFSET
+ /* 0x19538 */ s32 mStateStep;
+ /* 0x1953C */ s32 mCursorLocation;
+ /* 0x19540 */ s32 mCurrentlyHoldingStockOrPouchSlot; // always raw slot
+ /* 0x19544 */ s32 mItemSellValue;
+ /* 0x19548 */ UNKWORD field_0x19548; // always -1
+ /* 0x1954C */ s32 mNextLocation;
+ /* 0x19550 */ s32 mChangeCooldown;
+ /* 0x19554 */ s32 mDroppedStockSlot;
+ /* 0x19558 */ u8 mPouchItemIds[RING_NUM_ITEMS];
+};
+
+class dLytDeposit_c : public dLytBase_c {
public:
+ dLytDeposit_c() : mStateMgr(*this) {}
+ virtual ~dLytDeposit_c() {
+ removeLyt();
+ }
+
static dLytDeposit_c *GetInstance() {
return sInstance;
}
+ virtual bool build() override;
+ virtual int create() override;
+ virtual int execute() override;
+ virtual int draw() override;
+ virtual int doDelete() override;
+
private:
+ bool checkForNavRight();
+ bool checkForNavLeft();
+
static dLytDeposit_c *sInstance;
+
+ STATE_FUNC_DECLARE(dLytDeposit_c, None);
+ STATE_FUNC_DECLARE(dLytDeposit_c, In);
+ STATE_FUNC_DECLARE(dLytDeposit_c, Check);
+ STATE_FUNC_DECLARE(dLytDeposit_c, Change);
+ STATE_FUNC_DECLARE(dLytDeposit_c, Arrangement);
+ STATE_FUNC_DECLARE(dLytDeposit_c, ReverseChange);
+ STATE_FUNC_DECLARE(dLytDeposit_c, Scroll);
+ STATE_FUNC_DECLARE(dLytDeposit_c, Recycle);
+ STATE_FUNC_DECLARE(dLytDeposit_c, ArrangementOut);
+ STATE_FUNC_DECLARE(dLytDeposit_c, Out);
+
+ STATE_MGR_DEFINE_UTIL_ISSTATE(dLytDeposit_c);
+ STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytDeposit_c);
+
+ /* 0x0008C */ UI_STATE_MGR_DECLARE(dLytDeposit_c);
+ /* 0x000C8 */ d2d::ResAccIf_c mResAcc;
+ /* 0x00438 */ dLytDepositMain_c mMain;
+ /* 0x19998 */ bool mInRequest;
+ /* 0x19999 */ bool mIsMovingOut;
+ /* 0x1999A */ bool mScrollViaArrowButton;
};
#endif
diff --git a/include/d/lyt/d_lyt_deposit_box_cursor.h b/include/d/lyt/d_lyt_deposit_box_cursor.h
new file mode 100644
index 00000000..82f1175e
--- /dev/null
+++ b/include/d/lyt/d_lyt_deposit_box_cursor.h
@@ -0,0 +1,67 @@
+#ifndef D_LYT_DEPOSIT_BOX_CURSOR_H
+#define D_LYT_DEPOSIT_BOX_CURSOR_H
+
+#include "d/lyt/d2d.h"
+#include "d/lyt/d_lyt_common_icon_item.h"
+#include "nw4r/lyt/lyt_pane.h"
+
+// made up name
+class dLytDepositBoxCursor_c : public d2d::dSubPane {
+public:
+ enum ItemLocation_e {
+ LOC_POUCH,
+ LOC_STOCK,
+ };
+
+public:
+ dLytDepositBoxCursor_c() : mSlot(-1), mItem(0), mItemLocation(0) {}
+ /* vt 0x0C */ virtual bool build(d2d::ResAccIf_c *resAcc) override;
+ /* vt 0x10 */ virtual bool remove() override;
+ /* vt 0x14 */ virtual bool execute() override;
+ /* vt 0x18 */ virtual nw4r::lyt::Pane *getPane() override {
+ return mLyt.getLayout()->GetRootPane();
+ }
+ /* vt 0x1C */ virtual d2d::LytBase_c *getLyt() override {
+ return &mLyt;
+ }
+ /* vt 0x20 */ virtual const char *getName() const override {
+ return mLyt.getName();
+ }
+
+ /* vt 0x08 */ virtual ~dLytDepositBoxCursor_c() {}
+
+ bool draw();
+
+ void init(s32 location, s32 slot, s32 item, bool isSell);
+ void updateSlot(s32 location, s32 slot, s32 item, bool isSell);
+ void activateSell();
+
+ bool isVisible() const {
+ return mIsVisible;
+ }
+
+ void setVisible(bool b) {
+ mIsVisible = b;
+ }
+
+private:
+ static const s32 NUM_ICONS_PER_PAGE = 12;
+
+ void initIcon();
+ void realizeNav();
+
+ /* 0x008 */ d2d::dLytSub mLyt;
+ /* 0x09C */ d2d::AnmGroup_c mAnm[2];
+ /* 0x11C */ nw4r::lyt::Pane *mpStickCursorPane;
+ /* 0x120 */ nw4r::lyt::Pane *mpGetIconPane;
+ /* 0x124 */ dLytCommonIconItem_c mIcon;
+ /* 0x930 */ d2d::SubPaneList mSubpaneList;
+ /* 0x938 */ d2d::SubPaneListNode mNode;
+ /* 0x948 */ bool mIsVisible;
+ /* 0x949 */ bool mIsSellMode;
+ /* 0x94C */ s32 mSlot;
+ /* 0x950 */ s32 mItem;
+ /* 0x954 */ s32 mItemLocation;
+};
+
+#endif
diff --git a/include/d/lyt/d_lyt_deposit_stock.h b/include/d/lyt/d_lyt_deposit_stock.h
new file mode 100644
index 00000000..a24d1848
--- /dev/null
+++ b/include/d/lyt/d_lyt_deposit_stock.h
@@ -0,0 +1,206 @@
+#ifndef D_LYT_DEPOSIT_STOCK_H
+#define D_LYT_DEPOSIT_STOCK_H
+
+#include "d/lyt/d2d.h"
+#include "d/lyt/d_lyt_common_arrow.h"
+#include "d/lyt/d_lyt_common_icon_item.h"
+#include "nw4r/lyt/lyt_pane.h"
+#include "s/s_State.hpp"
+
+class dLytDepositStock_c : public d2d::dSubPane {
+public:
+ enum NavMode_e {
+ NAV_ITEM,
+ NAV_SELL,
+ NAV_SORT,
+ NAV_FINISH,
+ NAV_ARROW,
+ };
+
+public:
+ dLytDepositStock_c() : mStateMgr(*this) {}
+ virtual ~dLytDepositStock_c() {}
+
+ /* vt 0x0C */ virtual bool build(d2d::ResAccIf_c *resAcc) override;
+ /* vt 0x10 */ virtual bool remove() override;
+ /* vt 0x14 */ virtual bool execute() override;
+ /* vt 0x18 */ virtual nw4r::lyt::Pane *getPane() override {
+ return mLyt.getLayout()->GetRootPane();
+ }
+ /* vt 0x1C */ virtual d2d::LytBase_c *getLyt() override {
+ return &mLyt;
+ }
+ /* vt 0x20 */ virtual const char *getName() const override {
+ return mLyt.getName();
+ }
+
+ void nextPage(bool preventCancellingSelection);
+ void prevPage(bool preventCancellingSelection);
+ void fn_80156530(bool unk);
+
+ void navigateToItem();
+ void navigateToSell();
+ void navigateToSort();
+ void navigateToFinish();
+ void saveArrowDirection();
+ void navigateToArrow(s32 arrowDirection);
+ s32 restoreArrowDirection();
+ void handleSpecialNavMode();
+ bool isNavModeItem() const;
+ void navigateOffIcon();
+ void handleNavOrPoint();
+
+ void pickUpOrPlaceItem(s32 slot, bool place);
+ void selectNavTarget(s32 idx);
+ void setItem(s32 idx, s32 item);
+ s32 getCurrentSlot() const;
+ void loadItems(s32 hiddenSlot);
+
+ STATE_MGR_DEFINE_UTIL_EXECUTESTATE(dLytDepositStock_c);
+
+ s32 getCurrentNavTarget() const {
+ return mCurrentNavTarget;
+ }
+
+ bool isModeSort() const {
+ return mIsModeSort;
+ }
+
+ bool isModePouch() const {
+ return mIsModePouch;
+ }
+
+ bool isModeSell() const {
+ return mIsModeSell;
+ }
+
+ bool isModeFinish() const {
+ return mIsModeFinish;
+ }
+
+ void disableModeSort() {
+ mIsModeSort = false;
+ }
+
+ void disableModePouch() {
+ mIsModePouch = false;
+ }
+
+ void disableModeSell() {
+ mIsModeSell = false;
+ }
+
+ void disableModeFinish() {
+ mIsModeFinish = false;
+ }
+
+ void returnToNoneMode() {
+ mIsModeFinish = false;
+ mIsModeSell = false;
+ mIsModeSort = false;
+ mIsModePouch = false;
+ mSavedArrowDirection = dLytCommonArrow_c::ARROW_NONE;
+ }
+
+ void disableSpecialModes() {
+ mIsModeSell = false;
+ mIsModeFinish = false;
+ mIsModeSort = false;
+ mSavedArrowDirection = dLytCommonArrow_c::ARROW_NONE;
+ }
+
+ u8 getItem(s32 idx) const {
+ return mItemIds[idx];
+ }
+
+ u8 getPage() const {
+ return mItemPage;
+ }
+
+ void setPage(u8 page) {
+ mItemPage = page;
+ }
+
+ s32 getActiveItem() const {
+ return mItemIds[mCurrentNavTarget];
+ }
+
+ void setSellBlocked(bool v) {
+ mIsSellBlocked = v;
+ }
+
+ void setSortBlocked(bool v) {
+ mIsSortBlocked = v;
+ }
+
+ s32 getArrowDirection() const {
+ return mArrowDirection;
+ }
+
+ s32 getSavedArrowDirection() const {
+ return mSavedArrowDirection;
+ }
+
+ void setSavedArrowDirection(s32 dir) {
+ mSavedArrowDirection = dir;
+ }
+
+ void setMainStock(bool b) {
+ mIsMainStock = b;
+ }
+
+ void onDropItem() {
+ mPickedUpItemOnThisPage = false;
+ }
+
+ void setPreventCancellingSelection() {
+ mPreventCancellingSelection = true;
+ }
+
+private:
+ static const s32 NUM_ICONS_PER_PAGE = 12;
+ static const s32 NUM_PAGES = 5;
+
+ void initIcons();
+ void loadIcon(s32 idx);
+ void navigateToPouch();
+ void realizeItem(s32 idx);
+
+ /**
+ * Check if the FS stick is pushed in a direction. Diagonal movements
+ * are adjusted to horizontal and vertical navigations if necessary.
+ * @returns FS stick direction
+ */
+ s32 checkNav();
+
+ STATE_FUNC_DECLARE(dLytDepositStock_c, None);
+
+ /* 0x0008 */ UI_STATE_MGR_DECLARE(dLytDepositStock_c);
+ /* 0x0044 */ d2d::dLytSub mLyt;
+ /* 0x00D8 */ d2d::AnmGroup_c mAnm[25];
+ /* 0x0718 */ dLytCommonIconItem_c mIcons[NUM_ICONS_PER_PAGE];
+ /* 0x6778 */ d2d::SubPaneList mSubpaneList;
+ /* 0x6784 */ d2d::SubPaneListNode mNodes[NUM_ICONS_PER_PAGE];
+ /* 0x6844 */ bool mIsIdle;
+ /* 0x6845 */ bool mIsModePouch;
+ /* 0x6846 */ bool mIsModeSell;
+ /* 0x6847 */ bool mIsModeSort;
+ /* 0x6848 */ bool mIsModeFinish;
+ /* 0x6849 */ bool mIsSellBlocked;
+ /* 0x684A */ bool mIsSortBlocked;
+ /* 0x684B */ bool mPreventCancellingSelection;
+ /* 0x684C */ bool mPrevPointerVisible;
+ /* 0x684D */ bool mIsMainStock;
+ /* 0x684E */ bool mPickedUpItemOnThisPage;
+ /* 0x6850 */ s32 mCurrentNavTarget;
+ /* 0x6854 */ s32 mNumSlots;
+ /* 0x6858 */ s32 mSelectedItemId;
+ /* 0x685C */ s32 mPickedUpIdx;
+ /* 0x6860 */ s32 mArrowDirection;
+ /* 0x6864 */ s32 mSavedArrowDirection;
+ /* 0x6868 */ s32 mNavMode;
+ /* 0x686C */ u8 mItemIds[NUM_ICONS_PER_PAGE];
+ /* 0x6878 */ u8 mItemPage;
+};
+
+#endif
diff --git a/include/d/lyt/d_lyt_util_items.h b/include/d/lyt/d_lyt_util_items.h
index 12f029a5..d6bf4819 100644
--- a/include/d/lyt/d_lyt_util_items.h
+++ b/include/d/lyt/d_lyt_util_items.h
@@ -18,6 +18,8 @@ enum SongLifeTreeSeedStatus_e {
SONG_LIFETREE_HAS_SOTH = 2,
};
+s32 convertLytPouchSlot2(s32 fileSlot);
+
u8 getSongLifeTreeStatus();
/** 0: no sword, 6: TMS */
@@ -74,9 +76,14 @@ u8 getPouchItemForSlot(s32 slot, bool unk);
bool hasPouchSlot(s32 slot, bool unk);
s32 getPouchItemAmount(s32 slot, bool unk);
u8 getPouchItemNumberColor(s32 slot, bool unk);
-f32 getShieldDurability(s32 slot, bool unk);
+f32 getPouchShieldDurability(s32 slot, bool unk);
u32 getPouchItemIdForIndex(s32 slot, bool unk);
+u8 getDepositItemForSlot(s32 slot);
+s32 getDepositItemAmount(s32 slot);
+u8 getDepositItemNumberColor(s32 slot);
+f32 getDepositShieldDurability(s32 slot);
+
// TODO - rename and make sense of these
DowsingTarget::DowsingSlot dowsingSlotForIndex(s32 index);
u8 getLytIndexForDowsingIndex(s32 index);