Add all other Link states

This commit is contained in:
Aetias
2024-03-21 23:22:54 +01:00
parent 2324c499ab
commit 30dbcc4580
13 changed files with 394 additions and 43 deletions
-28
View File
@@ -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 */
};
+34
View File
@@ -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 */
};
+42
View File
@@ -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 */
};
+47
View File
@@ -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 */
};
+41
View File
@@ -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 */
};
+34
View File
@@ -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 */
};
-14
View File
@@ -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 */
};
+46
View File
@@ -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 */
};
+62
View File
@@ -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 */
};
+29
View File
@@ -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 */
};
+58
View File
@@ -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;
};
+1 -1
View File
@@ -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',