From d5376fc903f3677a4f9c97bd3abd85c229f1ceb6 Mon Sep 17 00:00:00 2001 From: Aetias Date: Sun, 2 Feb 2025 11:38:39 +0100 Subject: [PATCH] Add `ActorRope` --- config/eur/arm9/overlays/ov014/symbols.txt | 40 +++++++++--------- config/usa/arm9/overlays/ov014/symbols.txt | 40 +++++++++--------- include/Actor/ActorType.hpp | 8 ++-- include/Actor/Player/ActorRope.hpp | 49 ++++++++++++++++++++++ include/Player/EquipRope.hpp | 5 ++- src/00_Core/Actor/Actor.cpp | 10 ++--- src/14_Land/Actor/Player/ActorRope.cpp | 19 +++++++++ src/14_Land/Player/EquipRope.cpp | 2 +- 8 files changed, 121 insertions(+), 52 deletions(-) create mode 100644 include/Actor/Player/ActorRope.hpp create mode 100644 src/14_Land/Actor/Player/ActorRope.cpp diff --git a/config/eur/arm9/overlays/ov014/symbols.txt b/config/eur/arm9/overlays/ov014/symbols.txt index e8cf9e39..87782ee1 100644 --- a/config/eur/arm9/overlays/ov014/symbols.txt +++ b/config/eur/arm9/overlays/ov014/symbols.txt @@ -84,22 +84,22 @@ func_ov014_0212357c kind:function(arm,size=0x40) addr:0x212357c func_ov014_021235bc kind:function(arm,size=0x180) addr:0x21235bc func_ov014_0212373c kind:function(arm,size=0xb0) addr:0x212373c func_ov014_021237ec kind:function(arm,size=0x10) addr:0x21237ec -func_ov014_021237fc kind:function(arm,size=0x30) addr:0x21237fc -func_ov014_0212382c kind:function(arm,size=0x20) addr:0x212382c -func_ov014_0212384c kind:function(arm,size=0xc) addr:0x212384c -func_ov014_02123858 kind:function(arm,size=0x50) addr:0x2123858 -func_ov014_021238a8 kind:function(arm,size=0x48) addr:0x21238a8 -func_ov014_021238f0 kind:function(arm,size=0x14) addr:0x21238f0 -func_ov014_02123904 kind:function(arm,size=0x5c) addr:0x2123904 -func_ov014_02123960 kind:function(arm,size=0x34) addr:0x2123960 -func_ov014_02123994 kind:function(arm,size=0x214) addr:0x2123994 -func_ov014_02123ba8 kind:function(arm,size=0xac) addr:0x2123ba8 -func_ov014_02123c54 kind:function(arm,size=0x7c) addr:0x2123c54 -func_ov014_02123cd0 kind:function(arm,size=0x14c) addr:0x2123cd0 -func_ov014_02123e1c kind:function(arm,size=0x2c) addr:0x2123e1c -func_ov014_02123e48 kind:function(arm,size=0xbc) addr:0x2123e48 -func_ov014_02123f04 kind:function(arm,size=0xec) addr:0x2123f04 -func_ov014_02123ff0 kind:function(thumb,size=0x14) addr:0x2123ff0 +_ZN9ActorRope6CreateEv kind:function(arm,size=0x30) addr:0x21237fc +_ZN9ActorRope19func_ov014_0212382cEP5Vec4p kind:function(arm,size=0x20) addr:0x212382c +_ZN9ActorRope19func_ov014_0212384cEv kind:function(arm,size=0xc) addr:0x212384c +_ZN9ActorRopeD1Ev kind:function(arm,size=0x50) addr:0x2123858 +_ZN9ActorRopeD0Ev kind:function(arm,size=0x48) addr:0x21238a8 +_ZN9ActorRope19func_ov014_021238f0Ev kind:function(arm,size=0x14) addr:0x21238f0 +_ZN9ActorRope19func_ov014_02123904Ev kind:function(arm,size=0x5c) addr:0x2123904 +_ZN9ActorRope19func_ov014_02123960Ev kind:function(arm,size=0x34) addr:0x2123960 +_ZN9ActorRope8vfunc_14Ej kind:function(arm,size=0x214) addr:0x2123994 +_ZN9ActorRope8vfunc_18Ej kind:function(arm,size=0xac) addr:0x2123ba8 +_ZN9ActorRope19func_ov014_02123c54Ei kind:function(arm,size=0x7c) addr:0x2123c54 +_ZN9ActorRope19func_ov014_02123cd0EP5Vec3pi kind:function(arm,size=0x14c) addr:0x2123cd0 +_ZN9ActorRope19func_ov014_02123e1cEv kind:function(arm,size=0x2c) addr:0x2123e1c +_ZN9ActorRope19func_ov014_02123e48Ei kind:function(arm,size=0xbc) addr:0x2123e48 +_ZN9ActorRope8vfunc_20Eb kind:function(arm,size=0xec) addr:0x2123f04 +_ZN9ActorRope8vfunc_10Ej kind:function(thumb,size=0x14) addr:0x2123ff0 func_ov014_02124004 kind:function(arm,size=0x30) addr:0x2124004 func_ov014_02124034 kind:function(arm,size=0xc) addr:0x2124034 func_ov014_02124040 kind:function(arm,size=0xdc) addr:0x2124040 @@ -1636,7 +1636,7 @@ __sinit_ActorArrow.cpp kind:function(arm,size=0x68) addr:0x21541ec __sinit_ActorBlast.cpp kind:function(arm,size=0x40) addr:0x2154254 __sinit_ActorBomb.cpp kind:function(arm,size=0x60) addr:0x2154294 __sinit_ov014_021542f4 kind:function(arm,size=0x40) addr:0x21542f4 -__sinit_ov014_02154334 kind:function(arm,size=0x40) addr:0x2154334 +__sinit_ActorRope.cpp kind:function(arm,size=0x40) addr:0x2154334 __sinit_ov014_02154374 kind:function(arm,size=0x84) addr:0x2154374 __sinit_ov014_021543f8 kind:function(arm,size=0x38) addr:0x21543f8 __sinit_ov014_02154430 kind:function(arm,size=0x38) addr:0x2154430 @@ -1751,7 +1751,7 @@ data_ov014_02155dc0 kind:data(any) addr:0x2155dc0 data_ov014_02155dc4 kind:data(any) addr:0x2155dc4 data_ov014_02155dc8 kind:data(any) addr:0x2155dc8 data_ov014_02155dcc kind:data(any) addr:0x2155dcc -data_ov014_02155df8 kind:data(any) addr:0x2155df8 +_ZTV9ActorRope kind:data(any) addr:0x2155df8 data_ov014_02155eac kind:data(any) addr:0x2155eac data_ov014_02155eb0 kind:data(any) addr:0x2155eb0 data_ov014_02155eb4 kind:data(any) addr:0x2155eb4 @@ -2120,8 +2120,8 @@ data_ov014_0215ac40 kind:bss addr:0x215ac40 data_ov014_0215ac4c kind:bss addr:0x215ac4c data_ov014_0215ac5c kind:bss addr:0x215ac5c data_ov014_0215ac68 kind:bss addr:0x215ac68 -data_ov014_0215ac7c kind:bss addr:0x215ac7c -data_ov014_0215ac88 kind:bss addr:0x215ac88 +@366 kind:bss addr:0x215ac7c +_ZN9ActorRope5gTypeE kind:bss addr:0x215ac88 data_ov014_0215ac9c kind:bss addr:0x215ac9c data_ov014_0215aca8 kind:bss addr:0x215aca8 data_ov014_0215acbc kind:bss addr:0x215acbc diff --git a/config/usa/arm9/overlays/ov014/symbols.txt b/config/usa/arm9/overlays/ov014/symbols.txt index 67d72044..82f56532 100644 --- a/config/usa/arm9/overlays/ov014/symbols.txt +++ b/config/usa/arm9/overlays/ov014/symbols.txt @@ -84,22 +84,22 @@ func_ov014_0212357c kind:function(arm,size=0x40) addr:0x21234fc func_ov014_021235bc kind:function(arm,size=0x180) addr:0x212353c func_ov014_0212373c kind:function(arm,size=0xb0) addr:0x21236bc func_ov014_021237ec kind:function(arm,size=0x10) addr:0x212376c -func_ov014_021237fc kind:function(arm,size=0x30) addr:0x212377c -func_ov014_0212382c kind:function(arm,size=0x20) addr:0x21237ac -func_ov014_0212384c kind:function(arm,size=0xc) addr:0x21237cc -func_ov014_02123858 kind:function(arm,size=0x50) addr:0x21237d8 -func_ov014_021238a8 kind:function(arm,size=0x48) addr:0x2123828 -func_ov014_021238f0 kind:function(arm,size=0x14) addr:0x2123870 -func_ov014_02123904 kind:function(arm,size=0x5c) addr:0x2123884 -func_ov014_02123960 kind:function(arm,size=0x34) addr:0x21238e0 -func_ov014_02123994 kind:function(arm,size=0x214) addr:0x2123914 -func_ov014_02123ba8 kind:function(arm,size=0xac) addr:0x2123b28 -func_ov014_02123c54 kind:function(arm,size=0x7c) addr:0x2123bd4 -func_ov014_02123cd0 kind:function(arm,size=0x14c) addr:0x2123c50 -func_ov014_02123e1c kind:function(arm,size=0x2c) addr:0x2123d9c -func_ov014_02123e48 kind:function(arm,size=0xbc) addr:0x2123dc8 -func_ov014_02123f04 kind:function(arm,size=0xec) addr:0x2123e84 -func_ov014_02123ff0 kind:function(thumb,size=0x14) addr:0x2123f70 +_ZN9ActorRope6CreateEv kind:function(arm,size=0x30) addr:0x212377c +_ZN9ActorRope19func_ov014_0212382cEP5Vec4p kind:function(arm,size=0x20) addr:0x21237ac +_ZN9ActorRope19func_ov014_0212384cEv kind:function(arm,size=0xc) addr:0x21237cc +_ZN9ActorRopeD1Ev kind:function(arm,size=0x50) addr:0x21237d8 +_ZN9ActorRopeD0Ev kind:function(arm,size=0x48) addr:0x2123828 +_ZN9ActorRope19func_ov014_021238f0Ev kind:function(arm,size=0x14) addr:0x2123870 +_ZN9ActorRope19func_ov014_02123904Ev kind:function(arm,size=0x5c) addr:0x2123884 +_ZN9ActorRope19func_ov014_02123960Ev kind:function(arm,size=0x34) addr:0x21238e0 +_ZN9ActorRope8vfunc_14Ej kind:function(arm,size=0x214) addr:0x2123914 +_ZN9ActorRope8vfunc_18Ej kind:function(arm,size=0xac) addr:0x2123b28 +_ZN9ActorRope19func_ov014_02123c54Ei kind:function(arm,size=0x7c) addr:0x2123bd4 +_ZN9ActorRope19func_ov014_02123cd0EP5Vec3pi kind:function(arm,size=0x14c) addr:0x2123c50 +_ZN9ActorRope19func_ov014_02123e1cEv kind:function(arm,size=0x2c) addr:0x2123d9c +_ZN9ActorRope19func_ov014_02123e48Ei kind:function(arm,size=0xbc) addr:0x2123dc8 +_ZN9ActorRope8vfunc_20Eb kind:function(arm,size=0xec) addr:0x2123e84 +_ZN9ActorRope8vfunc_10Ej kind:function(thumb,size=0x14) addr:0x2123f70 func_ov014_02124004 kind:function(arm,size=0x30) addr:0x2123f84 func_ov014_02124034 kind:function(arm,size=0xc) addr:0x2123fb4 func_ov014_02124040 kind:function(arm,size=0xdc) addr:0x2123fc0 @@ -1636,7 +1636,7 @@ __sinit_ActorArrow.cpp kind:function(arm,size=0x68) addr:0x2154148 __sinit_ActorBlast.cpp kind:function(arm,size=0x40) addr:0x21541b0 __sinit_ActorBomb.cpp kind:function(arm,size=0x60) addr:0x21541f0 __sinit_ov014_021542f4 kind:function(arm,size=0x40) addr:0x2154250 -__sinit_ov014_02154334 kind:function(arm,size=0x40) addr:0x2154290 +__sinit_ActorRope.cpp kind:function(arm,size=0x40) addr:0x2154290 __sinit_ov014_02154374 kind:function(arm,size=0x84) addr:0x21542d0 __sinit_ov014_021543f8 kind:function(arm,size=0x38) addr:0x2154354 __sinit_ov014_02154430 kind:function(arm,size=0x38) addr:0x215438c @@ -1751,7 +1751,7 @@ data_ov014_02155dc0 kind:data(any) addr:0x2155d20 data_ov014_02155dc4 kind:data(any) addr:0x2155d24 data_ov014_02155dc8 kind:data(any) addr:0x2155d28 data_ov014_02155dcc kind:data(any) addr:0x2155d2c -data_ov014_02155df8 kind:data(any) addr:0x2155d58 +_ZTV9ActorRope kind:data(any) addr:0x2155d58 data_ov014_02155eac kind:data(any) addr:0x2155e0c data_ov014_02155eb0 kind:data(any) addr:0x2155e10 data_ov014_02155eb4 kind:data(any) addr:0x2155e14 @@ -2120,8 +2120,8 @@ data_ov014_0215ac40 kind:bss addr:0x215aba0 data_ov014_0215ac4c kind:bss addr:0x215abac data_ov014_0215ac5c kind:bss addr:0x215abbc data_ov014_0215ac68 kind:bss addr:0x215abc8 -data_ov014_0215ac7c kind:bss addr:0x215abdc -data_ov014_0215ac88 kind:bss addr:0x215abe8 +@366 kind:bss addr:0x215abdc +_ZN9ActorRope5gTypeE kind:bss addr:0x215abe8 data_ov014_0215ac9c kind:bss addr:0x215abfc data_ov014_0215aca8 kind:bss addr:0x215ac08 data_ov014_0215acbc kind:bss addr:0x215ac1c diff --git a/include/Actor/ActorType.hpp b/include/Actor/ActorType.hpp index 0f711f0a..7842da14 100644 --- a/include/Actor/ActorType.hpp +++ b/include/Actor/ActorType.hpp @@ -28,9 +28,10 @@ enum ActorTypeId_ { ActorTypeId_Heart = 'HART', ActorTypeId_Rupee = 'RUPY', - ActorTypeId_Arrow = 'ARRW', - ActorTypeId_Blast = 'BLST', - ActorTypeId_Bomb = 'BOMB', + ActorTypeId_Arrow = 'ARRW', + ActorTypeId_Blast = 'BLST', + ActorTypeId_Bomb = 'BOMB', + ActorTypeId_GrapplingHook = 'ROPE', ActorTypeId_PlayerDummy = 'PLDM', ActorTypeId_PushBlock = 'PSBL', @@ -77,7 +78,6 @@ enum ActorTypeId_ { ActorTypeId_FLTB = 'FLTB', ActorTypeId_FLTM = 'FLTM', ActorTypeId_FORC = 'FORC', - ActorTypeId_ROPE = 'ROPE', ActorTypeId_SBEM = 'SBEM', ActorTypeId_STNE = 'STNE', ActorTypeId_TARU = 'TARU', diff --git a/include/Actor/Player/ActorRope.hpp b/include/Actor/Player/ActorRope.hpp new file mode 100644 index 00000000..ce6051ec --- /dev/null +++ b/include/Actor/Player/ActorRope.hpp @@ -0,0 +1,49 @@ +#pragma once + +#include "global.h" +#include "nds/math.h" +#include "types.h" + +#include "Actor/Actor.hpp" +#include "Actor/ActorType.hpp" + +class ActorRope : public Actor { +public: + static ActorType gType; + + /* 000 (base) */ + /* 158 */ unk8 mUnk_158[0xc]; + /* 164 */ unk16 mUnk_164; + /* 166 */ unk16 mUnk_166; + /* 168 */ unk8 mUnk_168[0x3]; + /* 16b */ unk8 mUnk_16b; + /* 16c */ unk8 mUnk_16c; + /* 16d */ unk8 mUnk_16d; + /* 16e */ unk16 mUnk_16e; + /* 170 */ unk8 mUnk_170[0x4]; + /* 174 */ Vec3p mUnk_174; + /* 180 */ Vec3p mUnk_180; + /* 18c */ unk8 mUnk_18c[0x4]; + /* 190 */ Vec3p mUnk_190; + /* 19c */ u32 mUnk_19c; + /* 1a0 */ + + /* 00 */ virtual ~ActorRope() override; + /* 08 */ virtual bool vfunc_08() override; + /* 10 */ virtual void vfunc_10(u32 param1) override; + /* 14 */ virtual void vfunc_14(u32 param1) override; + /* 18 */ virtual void vfunc_18(u32 param1) override; + /* 20 */ virtual void vfunc_20(bool param1) override; + /* b4 */ + + static ActorRope *Create(); + static void func_ov014_0212382c(Vec4p *vec); + static q20 func_ov014_0212384c(); + s32 func_ov014_021238f0(); + void func_ov014_02123904(); + bool func_ov014_02123960(); + void func_ov014_02123c54(s32 param1); + bool func_ov014_02123cd0(Vec3p *param1, s32 param2); + bool func_ov014_02123e1c(); + bool func_ov014_02123e48(unk32 param1); +}; diff --git a/include/Player/EquipRope.hpp b/include/Player/EquipRope.hpp index 6b7927b2..4d3117f6 100644 --- a/include/Player/EquipRope.hpp +++ b/include/Player/EquipRope.hpp @@ -5,6 +5,7 @@ #include "types.h" #include "Actor/ActorRef.hpp" +#include "Actor/Player/ActorRope.hpp" #include "Physics/Cylinder.hpp" #include "Player/EquipItem.hpp" @@ -23,7 +24,7 @@ public: /* 09 */ unk8 mUnk_09; /* 0a */ unk16 mUnk_0a; /* 0c */ unk8 mUnk_0c[4]; - /* 10 */ ActorRef mRef; + /* 10 */ ActorRef mRopeRef; /* 18 */ EquipRope_Unk_18 mUnk_18[2]; /* 50 */ unk8 mUnk_50[0x1a]; /* 6a */ bool mUnk_6a; @@ -52,7 +53,7 @@ public: EquipRope(); bool func_ov014_0213d3d4(Vec3p *vec); void func_ov014_0213d404(unk32 *param1); - Actor *func_ov14_0213d420(); + ActorRope *GetRopeActor(); s32 func_ov14_0213d440(s32 actorId); s32 func_ov14_0213d480(s32 actorId); bool func_ov014_0213d4c8(); diff --git a/src/00_Core/Actor/Actor.cpp b/src/00_Core/Actor/Actor.cpp index 3944a710..f008064d 100644 --- a/src/00_Core/Actor/Actor.cpp +++ b/src/00_Core/Actor/Actor.cpp @@ -551,7 +551,7 @@ ARM bool Actor::func_ov00_020c243c(ActorTypeId *actorTypes, Actor **out) { knockback.mUnk_10 = 5; } break; - case ActorTypeId_ROPE: { + case ActorTypeId_GrapplingHook: { knockback.mUnk_10 = 8; } break; @@ -759,7 +759,7 @@ ARM EquipBoomerang *Actor::GetEquipBoomerang() { ARM bool Actor::func_ov00_020c2d54() { const ActorTypeId types[] = { - ActorTypeId_ROPE, + ActorTypeId_GrapplingHook, ActorTypeId_Null, }; if (mHitbox.size >= 0) { @@ -780,7 +780,7 @@ ARM bool Actor::func_ov00_020c2de4() { EquipRope *rope = EquipSword::GetEquipRope(); - Actor *actor = rope->func_ov14_0213d420(); + ActorRope *actor = rope->GetRopeActor(); if (actor) { Vec3p_Sub(&actor->mPos, &mPos, &vel); if (Vec3p_Length(&vel) > FLOAT_TO_Q20(1.0)) { @@ -819,8 +819,8 @@ ARM bool Actor::func_ov00_020c2ed4() { s32 index = rope->func_ov14_0213d440(mRef.id); if (index >= 0) { - bool unk1 = rope->func_ov14_0213d420(); - if (unk1) { + ActorRope *actor = rope->GetRopeActor(); + if (actor) { Vec3p vel; if (rope->func_ov14_0213d81c(index, &vel)) { mVel = vel; diff --git a/src/14_Land/Actor/Player/ActorRope.cpp b/src/14_Land/Actor/Player/ActorRope.cpp new file mode 100644 index 00000000..e94f258d --- /dev/null +++ b/src/14_Land/Actor/Player/ActorRope.cpp @@ -0,0 +1,19 @@ +#include "Actor/Player/ActorRope.hpp" + +ActorType ActorRope::gType(ActorTypeId_GrapplingHook, (ActorCreateFunc) ActorRope::Create, NULL); + +ActorRope *ActorRope::Create() {} +void ActorRope::func_ov014_0212382c(Vec4p *vec) {} +q20 ActorRope::func_ov014_0212384c() {} +ActorRope::~ActorRope() {} +s32 ActorRope::func_ov014_021238f0() {} +void ActorRope::func_ov014_02123904() {} +bool ActorRope::func_ov014_02123960() {} +void ActorRope::vfunc_14(u32 param1) {} +void ActorRope::vfunc_18(u32 param1) {} +void ActorRope::func_ov014_02123c54(s32 param1) {} +bool ActorRope::func_ov014_02123cd0(Vec3p *param1, s32 param2) {} +bool ActorRope::func_ov014_02123e1c() {} +bool ActorRope::func_ov014_02123e48(unk32 param1) {} +void ActorRope::vfunc_20(bool param1) {} +void ActorRope::vfunc_10(u32 param1) {} diff --git a/src/14_Land/Player/EquipRope.cpp b/src/14_Land/Player/EquipRope.cpp index ee5c2da8..abc2ddc0 100644 --- a/src/14_Land/Player/EquipRope.cpp +++ b/src/14_Land/Player/EquipRope.cpp @@ -10,7 +10,7 @@ void EquipRope::vfunc_10() {} ItemFlag EquipRope::GetId() const {} bool EquipRope::func_ov014_0213d3d4(Vec3p *vec) {} void EquipRope::func_ov014_0213d404(unk32 *param1) {} -Actor *EquipRope::func_ov14_0213d420() {} +ActorRope *EquipRope::GetRopeActor() {} s32 EquipRope::func_ov14_0213d440(s32 actorId) {} s32 EquipRope::func_ov14_0213d480(s32 actorId) {} bool EquipRope::func_ov014_0213d4c8() {}