summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorelijah-thomas774 <elijahthomas774@gmail.com>2026-10-19 13:13:46 -0400
committerelijah-thomas774 <elijahthomas774@gmail.com>2026-10-19 13:13:46 -0400
commitffe45f52ac6f4e1bccf0ed306c2d870e5fdee9cb (patch)
tree1c3374a59ed1193a1cbdb5264bf8848fbdc58499 /include
parent5633a09e0223ddcea4fd0bb2cc79a126d3816182 (diff)
parentd418bd839cd6cc8f98c0c7976d006159e9e6ee28 (diff)
Merge remote-tracking branch 'upstream/HEAD' into bases
Diffstat (limited to 'include')
-rw-r--r--include/d/a/obj/d_a_obj_D3_dummy.h12
-rw-r--r--include/d/a/obj/d_a_obj_control_panel.h125
-rw-r--r--include/d/lyt/msg_window/d_lyt_msg_window.h4
-rw-r--r--include/toBeSorted/misc_actor.h5
4 files changed, 143 insertions, 3 deletions
diff --git a/include/d/a/obj/d_a_obj_D3_dummy.h b/include/d/a/obj/d_a_obj_D3_dummy.h
index 6038bd67..48892644 100644
--- a/include/d/a/obj/d_a_obj_D3_dummy.h
+++ b/include/d/a/obj/d_a_obj_D3_dummy.h
@@ -2,6 +2,7 @@
#define D_A_OBJ_D3_DUMMY_H
#include "d/a/obj/d_a_obj_base.h"
+#include "d/col/bg/d_bg_w.h"
#include "s/s_State.hpp"
class dAcOD3Dummy_c : public dAcObjBase_c {
@@ -11,8 +12,17 @@ public:
STATE_FUNC_DECLARE(dAcOD3Dummy_c, Wait);
+ void setField_0x1570(u8 val) {
+ field_0x1570 = val;
+ }
+
private:
- /* 0x??? */ STATE_MGR_DECLARE(dAcOD3Dummy_c);
+ /* 0x0330 */ dBgW field_330[8];
+ /* 0x13B0 */ u8 unk[0x180];
+ /* 0x1530 */ STATE_MGR_DECLARE(dAcOD3Dummy_c);
+ /* 0x156C */ u8 field_0x156C[4];
+ /* 0x1570 */ u8 field_0x1570;
+ /* 0x1571 */ u8 field_0x1571[0xB];
};
#endif
diff --git a/include/d/a/obj/d_a_obj_control_panel.h b/include/d/a/obj/d_a_obj_control_panel.h
index 4427b2c5..7f32a5c8 100644
--- a/include/d/a/obj/d_a_obj_control_panel.h
+++ b/include/d/a/obj/d_a_obj_control_panel.h
@@ -1,20 +1,141 @@
#ifndef D_A_OBJ_CONTROL_PANEL_H
#define D_A_OBJ_CONTROL_PANEL_H
+#include "c/c_lib.h"
+#include "common.h"
+#include "d/a/d_a_base.h"
+#include "d/a/obj/d_a_obj_D3_dummy.h"
#include "d/a/obj/d_a_obj_base.h"
+#include "d/col/bg/d_bg_w.h"
+#include "d/d_message.h"
+#include "d/flag/sceneflag_manager.h"
+#include "m/m3d/m_mdl.h"
+#include "m/m3d/m_smdl.h"
+#include "m/m_color.h"
+#include "m/m_vec.h"
+#include "nw4r/g3d/res/g3d_resfile.h"
#include "s/s_State.hpp"
+#include "toBeSorted/actor_event.h"
+#include "toBeSorted/d_flow_mgr.h"
class dAcOCtrlPnl_c : public dAcObjBase_c {
+ class callback_c : public m3d::callback_c {
+ public:
+ void timingB(u32, nw4r::g3d::WorldMtxManip *, nw4r::g3d::ResMdl) override;
+ void setPosAndScale(int tileId, const mVec3_c &vec, f32 f) {
+ mTilePositions[tileId] = vec;
+ mTileScales[tileId] = f;
+ }
+ void setNodeID(int i, s32 nodeID) {
+ mTileNodeIDs[i] = nodeID;
+ }
+
+ private:
+ /* 0x00 */ mVec3_c mTilePositions[8];
+ /* 0x20 */ f32 mTileScales[8];
+ /* 0x40 */ s32 mTileNodeIDs[8];
+ };
+ friend class callback_c;
+ struct Spot {
+ /* 0x00 */ Spot *mNeighbors[4];
+ /* 0x10 */ u8 mSpot;
+ /* 0x11 */ u8 mCurrentTile;
+
+ Spot *getNeighbor(s32 direction) {
+ return mNeighbors[direction];
+ }
+ };
+
public:
- dAcOCtrlPnl_c() : mStateMgr(*this) {}
+ dAcOCtrlPnl_c() : mStateMgr(*this), mEvent(*this, nullptr), mFlowMgr(&mFlow) {}
virtual ~dAcOCtrlPnl_c() {}
+ virtual int doDelete() override;
+ virtual int draw() override;
+ virtual bool createHeap() override;
+ virtual int actorCreate() override;
+ virtual int actorPostCreate() override;
+ virtual int actorExecute() override;
+ virtual void doInteraction(s32 /* InteractionType */) override;
+
+ void updatePuzzleFromFile();
+ void savePuzzleState();
+ bool handleSlidingTile();
+ void setupNeighbors();
+ void updateTileScales();
+ bool hasAdjacentEmptySpot(s32);
+ bool getAdjacentEmptySpot(s32, s32 *);
+ void handleEvent();
+ void handleControl();
+ void updateDoorSceneflags();
+ u8 getSpotForCursor(mVec2_c &);
+ u8 getMoveDirection(s32, s32);
+ void setTileID(u32, u32);
+ u8 getTileID(u32);
+ void resetPuzzleState();
+ void updateTilePositions();
+ void updateSpotTilesFromPuzzle();
+ void getScreenCenter(mVec3_c &);
+ void setLinkVisibility(bool);
+ void updateTileColors();
+ void afterControlPanel();
+ void afterControlPanelFirst();
+ void enterMove();
+ void finishMove();
+ bool changedPuzzle();
+ bool isFirstTime();
+
+ bool doChaseTilePosToTarget() {
+ return cLib::chasePos(mTilePositions[mMovingTile], mGrabTargetPosition, 10.f) > 0;
+ }
+
+ void setSceneflag(u8 flag) {
+ SceneflagManager::sInstance->setFlag(mRoomID, flag);
+ }
+
+ void unsetSceneflag(u8 flag) {
+ SceneflagManager::sInstance->unsetFlag(mRoomID, flag);
+ }
STATE_FUNC_DECLARE(dAcOCtrlPnl_c, Wait);
STATE_FUNC_DECLARE(dAcOCtrlPnl_c, Control);
STATE_FUNC_DECLARE(dAcOCtrlPnl_c, EndEvent);
private:
- /* 0x??? */ STATE_MGR_DECLARE(dAcOCtrlPnl_c);
+ /* 0x330 */ nw4r::g3d::ResFile mRes;
+ /* 0x334 */ m3d::mdl_c mModel;
+ /* 0x358 */ mVec3_c mTilePositions[8];
+ /* 0x3B8 */ STATE_MGR_DECLARE(dAcOCtrlPnl_c);
+ /* 0x3F4 */ ActorEventRelated mEvent;
+ /* 0x444 */ mVec3_c mGrabTargetPosition;
+ /* 0x450 */ s32 mMovingTile;
+ /* 0x454 */ dBgW mBgW;
+ /* 0x664 */ s32 mCurrentlyHoveredTile;
+ /* 0x668 */ s32 mCurrentlyHoveredSpot;
+ /** The spots where tiles can be, in the following order:
+ * 0 | 1 | 2
+ * ---+---+---
+ * 3 | 4 | 5
+ * ---+---+---
+ * 6 | 7 | 8
+ */
+ /* 0x66C */ Spot mSpots[9];
+ /* 0x720 */ dAcRef_c<dAcOD3Dummy_c> mD3DummyRef;
+ /* 0x72C */ bool mIsGrabbing;
+ /* 0x72D */ u8 mGrabTargetMoveDirection;
+ /* 0x72E */ u8 mGrabTargetSpot;
+ /* 0x730 */ mVec2_c mGrabStartCursorPos;
+ /* 0x738 */ bool mHasMovedATile;
+ /* 0x739 */ bool mLeavePuzzle;
+ /* 0x73C */ dFlow_c mFlow;
+ /* 0x7A0 */ dFlowMgrBase_c mFlowMgr;
+ /* 0x7F8 */ u8 mSkykeepPuzzle[9];
+ /* 0x801 */ u8 mSkykeepPuzzleOriginal[9];
+ /* 0x80C */ callback_c mCallback;
+ /* 0x8B0 */ f32 mTileScales[8];
+ /* 0x8D0 */ s32 mTilePlateMatIDs[8];
+ /* 0x8F0 */ s32 mTriforceMatIDs[3];
+ /* 0x8FC */ mColor mNormalPlateColor;
+ /* 0x900 */ s32 mTimer;
};
#endif
diff --git a/include/d/lyt/msg_window/d_lyt_msg_window.h b/include/d/lyt/msg_window/d_lyt_msg_window.h
index d3cb9ae3..a9d2b9b2 100644
--- a/include/d/lyt/msg_window/d_lyt_msg_window.h
+++ b/include/d/lyt/msg_window/d_lyt_msg_window.h
@@ -126,6 +126,10 @@ public:
mValidChangeBtnMask |= flag;
}
+ static void setFlowMgr(dFlowMgrBase_c *flowMgr) {
+ sFlowMgr = flowMgr;
+ }
+
private:
bool setTextToDisplay(const wchar_t *text);
void createSubMsgManager(u8 type);
diff --git a/include/toBeSorted/misc_actor.h b/include/toBeSorted/misc_actor.h
index ade8210e..c921a729 100644
--- a/include/toBeSorted/misc_actor.h
+++ b/include/toBeSorted/misc_actor.h
@@ -12,6 +12,11 @@
bool checkIsInSkykeepPuzzle();
void restoreSkykeepPuzzleFromGlobal();
+s32 getSKDoorSceneflag(s32, s32);
+bool checkSKDoorHasSceneflag(s32, s32);
+s32 getCurrentSkyKeepRoomTileId();
+
+extern bool sIsInSkykeepPuzzle;
extern const u8 sTadtoneSceneflags[];
extern const u8 sTadtoneGroupSizes[];