diff --git a/asm/ov00/Player/LinkDamage.s b/asm/ov00/Player/LinkStateDamage.s similarity index 100% rename from asm/ov00/Player/LinkDamage.s rename to asm/ov00/Player/LinkStateDamage.s 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; +}; diff --git a/tools/lcf.py b/tools/lcf.py index 0c18ce7c..fb5788f5 100644 --- a/tools/lcf.py +++ b/tools/lcf.py @@ -27,7 +27,7 @@ ov00 = Overlay(name='ov00', after='ARM9', objects=[ 'src/00_Core/Player/TouchControl.cpp', 'asm/ov00/Player/TouchControl.s', 'asm/ov00/ov00_0207af9c.s', - 'asm/ov00/Player/LinkDamage.s', + 'asm/ov00/Player/LinkStateDamage.s', 'src/00_Core/Item/Item.cpp', 'asm/ov00/Item/Item.s', 'src/00_Core/Item/ItemManager.cpp',