summaryrefslogtreecommitdiff
path: root/include/Player
diff options
context:
space:
mode:
authorAetias <aetias@outlook.com>2024-03-21 23:22:54 +0100
committerAetias <aetias@outlook.com>2024-03-21 23:22:54 +0100
commit30dbcc458025e9b1129a8eafecc23496a2a43d6d (patch)
tree7f1fea499162a02b45c54f0fcbfba62066f0018f /include/Player
parent2324c499ab412d73131a59f224d1b673e53eb915 (diff)
Add all other Link states
Diffstat (limited to 'include/Player')
-rw-r--r--include/Player/LinkDamage.hpp28
-rw-r--r--include/Player/LinkState3.hpp34
-rw-r--r--include/Player/LinkState4.hpp42
-rw-r--r--include/Player/LinkStateBase.hpp47
-rw-r--r--include/Player/LinkStateDamage.hpp41
-rw-r--r--include/Player/LinkStateGrab.hpp34
-rw-r--r--include/Player/LinkStateHandler.hpp14
-rw-r--r--include/Player/LinkStateItem.hpp46
-rw-r--r--include/Player/LinkStateItemGet.hpp62
-rw-r--r--include/Player/LinkStateMove.hpp29
-rw-r--r--include/Player/PlayerControl.hpp58
11 files changed, 393 insertions, 42 deletions
diff --git a/include/Player/LinkDamage.hpp b/include/Player/LinkDamage.hpp
deleted file mode 100644
index b5b1f847..00000000
--- a/include/Player/LinkDamage.hpp
+++ /dev/null
@@ -1,28 +0,0 @@
-#pragma once
-
-#include "global.h"
-#include "types.h"
-
-#include "Player/LinkStateHandler.hpp"
-#include "Render/ModelRender.hpp"
-
-class LinkDamage : public LinkStateHandler {
- /* 00 (base) */
- /* 0c */ void *mUnk_0c;
- /* 10 */ unk32 mUnk_10;
- /* 14 */ unk32 mUnk_14;
- /* 18 */ unk32 mUnk_18;
- /* 1c */ unk32 mUnk_1c;
- /* 20 */ unk8 mUnk_20[2];
- /* 22 */ unk16 mUnk_22;
- /* 24 */ unk8 mUnk_24[0xe];
- /* 32 */ unk16 mUnk_32;
- /* 34 */ unk32 mUnk_34[2];
- /* 3c */ ModelRender mUnk_3c;
- /* 98 */ void *mUnk_98;
- /* 9c */ void *mUnk_9c;
- /* a0 */ unk32 mUnk_a0[3];
- /* ac */ unk32 mUnk_ac;
- /* b0 */ unk8 mUnk_b0[4];
- /* b4 */
-};
diff --git a/include/Player/LinkState3.hpp b/include/Player/LinkState3.hpp
new file mode 100644
index 00000000..486ee7b3
--- /dev/null
+++ b/include/Player/LinkState3.hpp
@@ -0,0 +1,34 @@
+#pragma once
+
+#include "global.h"
+#include "types.h"
+
+#include "lib/math.h"
+
+#include "Player/LinkStateBase.hpp"
+
+class LinkState3 : public LinkStateBase {
+public:
+ /* 00 (base) */
+ /* 0c */ void *mUnk_0c;
+ /* 10 */ unk32 mUnk_10;
+ /* 14 */ unk8 mUnk_14[0x10];
+ /* 24 */ Vec3p mUnk_24;
+ /* 30 */ unk8 mUnk_30[0x88]; // non-documented struct
+ /* b8 */ unk8 mUnk_b8[0x2a]; // non-documented struct
+ /* e2 */ unk8 mUnk_e2[2];
+ /* e4 */
+
+ /* 00 */ virtual void vfunc_00() override;
+ /* 04 */ virtual ~LinkState3() override;
+ /* 0c */ virtual LinkStateId GetId() override;
+ /* 14 */ virtual void OnStateEnter() override;
+ /* 18 */ virtual void OnStateLeave(s32 param1) override;
+ /* 1c */ virtual void vfunc_1c() override;
+ /* 20 */ virtual bool vfunc_20(s32 param1) override;
+ /* 24 */ virtual bool vfunc_24(s32 param1) override;
+ /* 28 */ virtual bool vfunc_28() override;
+ /* 2c */ virtual void vfunc_2c(u16 *param1) override;
+ /* 34 */ virtual bool vfunc_34(Vec3p *param1) override;
+ /* 44 */
+};
diff --git a/include/Player/LinkState4.hpp b/include/Player/LinkState4.hpp
new file mode 100644
index 00000000..05f6d958
--- /dev/null
+++ b/include/Player/LinkState4.hpp
@@ -0,0 +1,42 @@
+#pragma once
+
+#include "global.h"
+#include "types.h"
+
+#include "Player/LinkStateBase.hpp"
+
+class LinkState4 : public LinkStateBase {
+public:
+ /* 00 (base) */
+ /* 0c */ unk16 mUnk_0c;
+ /* 0e */ unk8 mUnk_0a[2];
+ /* 10 */ unk16 mUnk_10;
+ /* 12 */ s16 mUnk_12;
+ /* 14 */ s16 mUnk_14;
+ /* 16 */ u16 mUnk_16;
+ /* 18 */ unk8 mUnk_18[2];
+ /* 1a */ unk16 mUnk_1a;
+ /* 1c */ unk8 mUnk_1c[4];
+ /* 20 */ unk32 mUnk_20;
+ /* 24 */ unk8 mUnk_24[2];
+ /* 26 */ unk16 mUnk_26;
+ /* 28 */ unk8 mUnk_24[4];
+ /* 2c */ unk32 mUnk_2c[5];
+ /* 40 */ unk32 mUnk_40;
+ /* 44 */ unk32 mUnk_2c[0x10];
+ /* 84 */ void *mUnk_84;
+ /* 88 */ unk32 mUnk_88;
+ /* 8c */ unk8 mUnk_8c[0xc];
+ /* 98 */
+
+ /* 00 */ virtual void vfunc_00() override;
+ /* 04 */ virtual ~LinkStateBase() override;
+ /* 0c */ virtual LinkStateId GetId() override;
+ /* 10 */ virtual void CreateDebugHierarchy() override;
+ /* 14 */ virtual void OnStateEnter() override;
+ /* 18 */ virtual void OnStateLeave(s32 param1) override;
+ /* 1c */ virtual void vfunc_1c() override;
+ /* 20 */ virtual bool vfunc_20(s32 param1) override;
+ /* 24 */ virtual bool vfunc_24(s32 param1) override;
+ /* 44 */
+};
diff --git a/include/Player/LinkStateBase.hpp b/include/Player/LinkStateBase.hpp
new file mode 100644
index 00000000..22b50f84
--- /dev/null
+++ b/include/Player/LinkStateBase.hpp
@@ -0,0 +1,47 @@
+#pragma once
+
+#include "global.h"
+#include "types.h"
+
+#include "lib/math.h"
+
+#include "System/SysNew.hpp"
+#include "Player/PlayerLink.hpp"
+
+typedef unk32 LinkStateId;
+enum LinkStateId_ {
+ LinkStateId_Move = 0,
+ LinkStateId_Item = 1,
+ LinkStateId_Grab = 2,
+ LinkStateId_Unk3 = 3,
+ LinkStateId_Unk4 = 4,
+ LinkStateId_Damage = 5,
+ LinkStateId_ItemGet = 6,
+ LinkStateId_COUNT
+}
+
+class LinkStateBase : public SysObject {
+public:
+ /* 0 (vtable) */
+ /* 4 */ unk32 mSubState;
+ /* 8 */ PlayerLink *mLink;
+ /* c */
+
+ /* 00 */ virtual void vfunc_00();
+ /* 04 */ virtual ~LinkStateBase();
+ /* 0c */ virtual LinkStateId GetId() = 0;
+ /* 10 */ virtual void CreateDebugHierarchy();
+ /* 14 */ virtual void OnStateEnter();
+ /* 18 */ virtual void OnStateLeave(s32 param1);
+ /* 1c */ virtual void vfunc_1c();
+ /* 20 */ virtual bool vfunc_20(s32 param1);
+ /* 24 */ virtual bool vfunc_24(s32 param1);
+ /* 28 */ virtual bool vfunc_28();
+ /* 2c */ virtual void vfunc_2c(u16 *param1);
+ /* 30 */ virtual void vfunc_30(unk32 param1);
+ /* 34 */ virtual bool vfunc_34(Vec3p *param1);
+ /* 38 */ virtual bool vfunc_38();
+ /* 3c */ virtual bool vfunc_3c();
+ /* 40 */ virtual bool vfunc_40();
+ /* 44 */
+};
diff --git a/include/Player/LinkStateDamage.hpp b/include/Player/LinkStateDamage.hpp
new file mode 100644
index 00000000..90dd0194
--- /dev/null
+++ b/include/Player/LinkStateDamage.hpp
@@ -0,0 +1,41 @@
+#pragma once
+
+#include "global.h"
+#include "types.h"
+
+#include "Player/LinkStateBase.hpp"
+#include "Render/ModelRender.hpp"
+
+class LinkStateDamage : public LinkStateBase {
+ /* 00 (base) */
+ /* 0c */ void *mUnk_0c;
+ /* 10 */ unk32 mUnk_10;
+ /* 14 */ unk32 mUnk_14;
+ /* 18 */ unk32 mUnk_18;
+ /* 1c */ unk32 mUnk_1c;
+ /* 20 */ unk8 mUnk_20[2];
+ /* 22 */ unk16 mUnk_22;
+ /* 24 */ unk8 mUnk_24[0xe];
+ /* 32 */ unk16 mUnk_32;
+ /* 34 */ unk32 mUnk_34[2];
+ /* 3c */ ModelRender mUnk_3c;
+ /* 98 */ void *mUnk_98;
+ /* 9c */ void *mUnk_9c;
+ /* a0 */ unk32 mUnk_a0[3];
+ /* ac */ unk32 mUnk_ac;
+ /* b0 */ unk8 mUnk_b0[4];
+ /* b4 */
+
+ /* 00 */ virtual void vfunc_00() override;
+ /* 04 */ virtual ~LinkStateBase() override;
+ /* 0c */ virtual LinkStateId GetId() override;
+ /* 10 */ virtual void CreateDebugHierarchy() override;
+ /* 14 */ virtual void OnStateEnter() override;
+ /* 18 */ virtual void OnStateLeave(s32 param1) override;
+ /* 1c */ virtual void vfunc_1c() override;
+ /* 20 */ virtual bool vfunc_20(s32 param1) override;
+ /* 24 */ virtual bool vfunc_24(s32 param1) override;
+ /* 30 */ virtual void vfunc_30(unk32 param1) override;
+ /* 40 */ virtual bool vfunc_40() override;
+ /* 44 */
+};
diff --git a/include/Player/LinkStateGrab.hpp b/include/Player/LinkStateGrab.hpp
new file mode 100644
index 00000000..3c430a5d
--- /dev/null
+++ b/include/Player/LinkStateGrab.hpp
@@ -0,0 +1,34 @@
+#pragma once
+
+#include "global.h"
+#include "types.h"
+
+#include "lib/math.h"
+
+#include "Player/LinkStateBase.hpp"
+#include "Actor/ActorManager.hpp"
+
+class LinkStateGrab : public LinkStateBase {
+public:
+ /* 00 (base) */
+ /* 0c */ void *mUnk_0c;
+ /* 10 */ ActorRef mGrabRef;
+ /* 18 */ Vec3p mThrowOffset;
+ /* 24 */ unk8 mUnk_24[0x88]; // non-documented struct
+ /* ac */ unk32 mUnk_ac;
+ /* b0 */ unk8 mUnk_b0[4];
+ /* b4 */
+
+ /* 00 */ virtual void vfunc_00() override;
+ /* 04 */ virtual ~LinkStateGrab() override;
+ /* 0c */ virtual LinkStateId GetId() override;
+ /* 10 */ virtual void CreateDebugHierarchy() override;
+ /* 14 */ virtual void OnStateEnter() override;
+ /* 18 */ virtual void OnStateLeave(s32 param1) override;
+ /* 1c */ virtual void vfunc_1c() override;
+ /* 20 */ virtual bool vfunc_20(s32 param1) override;
+ /* 24 */ virtual bool vfunc_24(s32 param1) override;
+ /* 2c */ virtual void vfunc_2c(u16 *param1) override;
+ /* 34 */ virtual bool vfunc_34(Vec3p *param1) override;
+ /* 44 */
+};
diff --git a/include/Player/LinkStateHandler.hpp b/include/Player/LinkStateHandler.hpp
deleted file mode 100644
index 0247d42a..00000000
--- a/include/Player/LinkStateHandler.hpp
+++ /dev/null
@@ -1,14 +0,0 @@
-#pragma once
-
-#include "global.h"
-#include "types.h"
-
-#include "System/SysNew.hpp"
-#include "Player/PlayerLink.hpp"
-
-class LinkStateHandler : public SysObject {
- /* 0 (vtable) */
- /* 4 */ unk32 mSubState;
- /* 8 */ PlayerLink *mLink;
- /* c */
-};
diff --git a/include/Player/LinkStateItem.hpp b/include/Player/LinkStateItem.hpp
new file mode 100644
index 00000000..4cef7c4f
--- /dev/null
+++ b/include/Player/LinkStateItem.hpp
@@ -0,0 +1,46 @@
+#pragma once
+
+#include "global.h"
+#include "types.h"
+
+#include "Player/LinkStateBase.hpp"
+#include "Item/Item.hpp"
+
+class LinkStateItem : public LinkStateBase {
+public:
+ /* 00 (base) */
+ /* 0c */ void *mUnk_0c;
+ /* 10 */ unk32 mUnk_10;
+ /* 14 */ ItemId mEquipId;
+ /* 18 */ ItemId mNextEquip;
+ /* 1c */ unk32 mUnk_1c;
+ /* 20 */ unk16 mUnk_20;
+ /* 22 */ unk8 mUnk_22[2];
+ /* 24 */ s8 mUnk_24;
+ /* 25 */ unk8 mUnk_25[7];
+ /* 2c */ unk16 mUnk_2c;
+ /* 2e */ unk8 mUnk_2e[2];
+ /* 30 */ void *mUnk_30;
+ /* 34 */ unk32 mUnk_34;
+ /* 38 */ unk32 mUnk_38;
+ /* 3c */ void *mUnk_3c;
+ /* 40 */ unk32 mUnk_40;
+ /* 44 */ unk32 mUnk_44;
+ /* 48 */ void *mUnk_48;
+ /* 4c */ unk32 mUnk_4c;
+ /* 50 */ unk32 mUnk_50[2];
+ /* 58 */ unk32 mUnk_58;
+ /* 5c */ s32 mUnk_5c;
+ /* 60 */
+
+ /* 00 */ virtual void vfunc_00() override;
+ /* 04 */ virtual ~LinkStateItem() override;
+ /* 0c */ virtual LinkStateId GetId() = 0 override;
+ /* 14 */ virtual void OnStateEnter() override;
+ /* 18 */ virtual void OnStateLeave(s32 param1) override;
+ /* 1c */ virtual void vfunc_1c() override;
+ /* 20 */ virtual bool vfunc_20(s32 param1) override;
+ /* 24 */ virtual bool vfunc_24(s32 param1) override;
+ /* 28 */ virtual bool vfunc_28() override;
+ /* 44 */
+};
diff --git a/include/Player/LinkStateItemGet.hpp b/include/Player/LinkStateItemGet.hpp
new file mode 100644
index 00000000..2eb0462d
--- /dev/null
+++ b/include/Player/LinkStateItemGet.hpp
@@ -0,0 +1,62 @@
+#pragma once
+
+#include "global.h"
+#include "types.h"
+
+#include "lib/math.h"
+
+#include "Player/LinkStateBase.hpp"
+#include "Item/Item.hpp"
+
+class LinkStateItemGet : public LinkStateBase {
+public:
+ /* 00 (base) */
+ /* 0c */ unk8 mUnk_08[0x24]; // non-documented struct
+ /* 30 */ void *mUnk_30;
+ /* 34 */ s16 mUnk_34;
+ /* 36 */ unk8 mUnk_36[2];
+ /* 38 */ s32 mUnk_38;
+ /* 3c */ s16 mUnk_3c;
+ /* 3e */ unk16 mUnk_3e;
+ /* 40 */ Vec3p mUnk_40;
+ /* 4c */ Vec3p mUnk_4c;
+ /* 58 */ unk32 mUnk_58;
+ /* 5c */ unk32 mUnk_5c;
+ /* 60 */ unk32 mUnk_60;
+ /* 64 */ unk32 mUnk_64;
+ /* 68 */ unk32 mUnk_68;
+ /* 6c */ unk16 mUnk_6c;
+ /* 6e */ unk8 mUnk_6e[2];
+ /* 70 */ unk32 mUnk_70;
+ /* 74 */ ItemId mLastItemId;
+ /* 78 */ s16 mAngle;
+ /* 7a */ unk16 mUnk_7a;
+ /* 7c */ unk16 mUnk_7c;
+ /* 7e */ unk16 mUnk_7e;
+ /* 80 */ unk16 mUnk_80;
+ /* 82 */ unk8 mUnk_82[2];
+ /* 84 */ void *mUnk_84;
+ /* 88 */ unk32 mUnk_88[4];
+ /* 98 */ unk32 mUnk_98;
+ /* 9c */ void *mUnk_9c;
+ /* a0 */ unk32 mUnk_a0;
+ /* a4 */ bool mUnk_a4;
+ /* a5 */ s8 mUnk_a5;
+ /* a6 */ bool mUnk_a6;
+ /* a7 */ unk8 mUnk_a7[5];
+ /* ac */
+
+ /* 00 */ virtual void vfunc_00() override;
+ /* 04 */ virtual ~LinkStateItemGet() override;
+ /* 0c */ virtual LinkStateId GetId() override;
+ /* 10 */ virtual void CreateDebugHierarchy() override;
+ /* 14 */ virtual void OnStateEnter() override;
+ /* 18 */ virtual void OnStateLeave(s32 param1) override;
+ /* 1c */ virtual void vfunc_1c() override;
+ /* 24 */ virtual bool vfunc_24(s32 param1) override;
+ /* 28 */ virtual bool vfunc_28() override;
+ /* 30 */ virtual void vfunc_30(unk32 param1) override;
+ /* 38 */ virtual bool vfunc_38() override;
+ /* 40 */ virtual bool vfunc_40() override;
+ /* 44 */
+};
diff --git a/include/Player/LinkStateMove.hpp b/include/Player/LinkStateMove.hpp
new file mode 100644
index 00000000..d27ca20b
--- /dev/null
+++ b/include/Player/LinkStateMove.hpp
@@ -0,0 +1,29 @@
+#pragma once
+
+#include "global.h"
+#include "types.h"
+
+#include "Player/LinkStateBase.hpp"
+
+class LinkStateMove : public LinkStateBase {
+public:
+ /* 00 (base) */
+ /* 0c */ s32 mUnk_0c;
+ /* 10 */ unk16 mUnk_10;
+ /* 12 */ unk16 mUnk_12;
+ /* 14 */ bool mUnk_14;
+ /* 14 */ bool mUnk_15;
+ /* 16 */ unk8 mUnk_16[2];
+ /* 18 */
+
+ /* 00 */ virtual void vfunc_00() override;
+ /* 04 */ virtual ~LinkStateBase() override;
+ /* 0c */ virtual LinkStateId GetId() override;
+ /* 10 */ virtual void CreateDebugHierarchy() override;
+ /* 14 */ virtual void OnStateEnter() override;
+ /* 18 */ virtual void OnStateLeave(s32 param1) override;
+ /* 1c */ virtual void vfunc_1c() override;
+ /* 24 */ virtual bool vfunc_24(s32 param1) override;
+ /* 3c */ virtual bool vfunc_3c() override;
+ /* 44 */
+};
diff --git a/include/Player/PlayerControl.hpp b/include/Player/PlayerControl.hpp
new file mode 100644
index 00000000..d10dce26
--- /dev/null
+++ b/include/Player/PlayerControl.hpp
@@ -0,0 +1,58 @@
+#pragma once
+
+#include "global.h"
+#include "types.h"
+
+#include "Player/TouchControl.hpp"
+
+typedef TouchEdge u16;
+enum TouchEdge_ {
+ TouchEdge_Right = 0,
+ TouchEdge_Left = 1,
+ TouchEdge_Bottom = 2,
+ TouchEdge_Top = 3,
+ TouchEdge_Middle = 4
+};
+
+class PlayerControl : public TouchControl {
+ /* 00 (base) */
+ /* 38 */ Vec3p mTouchWorld; // tile position
+ /* 44 */ Vec3p mUnk_44;
+ /* 50 */ q20 mTouchSpeedX; // how fast the stylus moves
+ /* 54 */ q20 mTouchSpeedY;
+ /* 58 */ q20 mTouchDist; // pixel distance from touch to link, deadzone is 20 pixels
+ /* 5c */ unk32 mUnk_5c;
+ /* 60 */ s16 mTouchDuration;
+ /* 62 */ s16 mTouchSlowDuration; // resets to 0 if stylus is fast enough
+ /* 64 */ s16 mTouchFastTime; // gets set to mTouchDuration if stylus is fast enough
+ /* 66 */ s16 mTouchFastX; // gets set to mTouchX if stylus is fast enough
+ /* 68 */ s16 mTouchFastY; // gets set to mTouchY if stylus is fast enough
+ /* 6a */ s16 mTouchAngle; // angle from touch to link, 0 = down, 0x4000 = right, 0x8000 = up, 0xc000 = left
+ /* 6c */ s16 mTouchFastAngle; // gets set to mTouchAngle if stylus is fast enough
+ /* 6e */ TouchEdge mTouchEdge; // changes value when touching close to the edge of the screen
+ /* 70 */ TouchEdge mTouchLastEdge;
+ /* 72 */ s16 mTouchDiffX;
+ /* 74 */ s16 mTouchDiffY;
+ /* 76 */ bool mTouchFast;
+ /* 78 */ unk32 mUnk_78;
+ /* 7c */ unk32 mUnk_7c;
+ /* 80 */ unk32 mUnk_80;
+ /* 84 */ s32 mUnk_84;
+ /* 88 */ s32 mUnk_88;
+ /* 8c */ s32 mUnk_8c;
+ /* 90 */ s32 mUnk_90;
+ /* 94 */ s32 mUnk_94;
+ /* 98 */ s32 mUnk_98;
+ /* 9c */ q20 mUnk_9c;
+ /* a0 */ void *mFollowActor;
+ /* a4 */ q20 mFollowDist;
+ /* a8 */ u16 mFollowStuckTimer;
+ /* aa */ u16 mCutsceneEndTimer;
+ /* ac */ unk32 mUnk_ac;
+ /* b0 */ Vec3p mAim; // used by boomerang, bow and rope
+ /* bc */ Vec3p mAimWorld; // used by hammer
+ /* c8 */ s32 mUnk_c8;
+ /* cc */ s32 mUnk_cc;
+ /* d0 */ void *mTouchGesture;
+ /* d4 */ void *mDebug;
+};