Decompiling rolling stones actor (#104)

* feat: rename UnkRLST to RollingStone

* feat: prepare for decompiling

* feat: match .data

* refactor: remove explicit deconstructor from parameters class

* feat: improvements

* feat: matching

* feat: fix build issues

* feat: continue matching

* style: weird style

* feat: improvements

* feat: remove explicit destructors

* feat: improvements

* feat: improvements

* feat: improvements

* feat: progress

* feat: some progress

* refactor: cleanup

* refactor: more cleanup

* refactor: apply rc

* refactor: includes black magic

* refactor: MORE MAGIC
This commit is contained in:
Alessevan
2026-07-13 21:13:21 +02:00
committed by GitHub
parent 8d759ee331
commit 260f9b13c5
29 changed files with 1148 additions and 326 deletions
+12 -27
View File
@@ -5,6 +5,7 @@
#include "Actor/ActorRef.hpp"
#include "Physics/Cylinder.hpp"
#include "System/SysNew.hpp"
#include "Unknown/UnkStruct_ov031_Items.hpp"
#include "flags.h"
#include "global.h"
#include "math.hpp"
@@ -89,30 +90,6 @@ enum ActorFlag_ {
ActorFlag_31 = FLAG(0, 31),
};
class Actor_C4;
struct ActorGrabParams;
extern "C" void func_ov000_0205d500(ActorGrabParams *, unk32, unk32);
bool PlayerCharacter_IsNotLink(s32 character);
struct ActorGrabParams {
/* 00 */ u16 unk_00;
/* 02 */ u16 unk_02;
/* 04 */
ActorGrabParams() {}
ActorGrabParams(unk32 param2, unk32 param3) {
ActorGrabParams local_1c;
func_ov000_0205d500(&local_1c, param3, param2);
*this = local_1c;
}
void operator=(ActorGrabParams &from) {
*(u32 *) this = *(u32 *) &from;
}
};
class Actor_9C {
public:
/* 00 (vtable) */
@@ -134,6 +111,13 @@ public:
void func_ov000_02097bec();
};
class Actor_38 {
public:
/* 00 (base) */ STRUCT_PAD(0x00, 0x08);
/* 08 */ unk16 mUnk_08;
/* 0A */
};
typedef s16 ActorState;
#define ActorState_None -1
@@ -148,7 +132,7 @@ public:
/* 2C */ unk32 mUnk_2C; // gravity?
/* 30 */ Cylinder *mUnk_30;
/* 34 */ Cylinder *mUnk_34;
/* 38 */ unk32 *mUnk_38;
/* 38 */ Actor_38 *mUnk_38;
/* 3C */ Actor_9C *mUnk_3C;
/* 40 */ Actor_C4 *mUnk_40;
/* 44 */ u16 mUnk_44;
@@ -231,7 +215,7 @@ public:
void func_ov000_020984f0();
u32 func_ov000_02098800(bool param1);
bool func_ov000_02098838();
unk32 func_ov000_02098910(unk32 param1, unk32 param2);
unk32 func_ov000_02098910(UnkStruct_ov031_Items_00 *param1, unk32 param2);
void func_ov000_02098b8c(unk32 param1, unk32 param2);
s32 func_ov000_02098518(unk32 *param1);
VecFx32 *func_ov000_0209853c(unk32 param1);
@@ -244,7 +228,7 @@ public:
void func_ov000_020989e0();
bool func_ov000_02098a60(unk32 param1);
void func_ov000_02098a88(unk32 param1, unk32 param2);
u32 func_ov000_02098ab4(bool param1, unk32 param2, unk32 param3, VecFx32 *param4);
u32 func_ov000_02098ab4(u8 param1, unk32 param2, unk32 param3, VecFx32 *param4);
static void func_ov000_020973f4(ActorRef *pOutRef, UnkStruct_ov000_020b539c *param2, ActorId actorId, ActorParams *pParams,
int param5);
@@ -253,6 +237,7 @@ public:
bool func_ov017_020beeec(unk32 param1);
void func_ov017_020bf5c4(VecFx32 *param1, unk32 param2, unk32 param3, unk32 param4, unk32 param5);
void func_ov017_020bf9c8(Actor *param1);
void func_ov017_020bfb18(Actor_9C *param1);
};
class Actor_C4_Base {
+150
View File
@@ -0,0 +1,150 @@
#pragma once
#include "Actor/Actor.hpp"
#include "Actor/ActorProfile.hpp"
#include "ActorItemBoomerang.hpp"
#include "ActorShotArrow.hpp"
#include "Actor_Derived1.hpp"
#include "Render/ModelRender.hpp"
#include "Unknown/UnkStruct_ov031_Items.hpp"
#include "global.h"
#include "types.h"
enum ActorRollingStoneState_ {
ActorRollingStoneState_0 = 0,
ActorRollingStoneState_1 = 1,
ActorRollingStoneState_2 = 2,
ActorRollingStoneState_3 = 3,
ActorRollingStoneState_4 = 4,
ActorRollingStoneState_5 = 5,
ActorRollingStoneState_6 = 6,
ActorRollingStoneState_7 = 7,
ActorRollingStoneState_8 = 8,
ActorRollingStoneState_9 = 9,
ActorRollingStoneState_10 = 10,
ActorRollingStoneState_MAX
};
class ActorRollingStone;
class ActorRollingStone_104 : public UnkStruct_ov031_Items_00 {
public:
/* 00 (vtable) */
/* 04 */
// data_ov031_02114a5c
/* 0C */ virtual bool vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 param2) override; // func_ov031_020f8354
/* 10 */ virtual void vfunc_10() override; // func_ov031_020f83e4
/* 14 */
};
class ActorRollingStone_D4 : public UnkStruct_ov031_Items_01 {
public:
/* 00 (vtable) */
/* 2C */ ActorRollingStone *mUnk_2C;
/* 30 */
ActorRollingStone_D4(ActorRollingStone *param1) {
this->mUnk_2C = param1;
}
// data_ov031_02114a40
/* 10 */ virtual void vfunc_10(Actor *param1) override; // func_ov031_020f849c
};
class ActorRollingStone : public Actor {
public:
/* 000 (base) */
/* 094 */ UnkSystem6_Derived2 mUnk_94;
/* 09C */ unk8 mUnk_9C;
/* 09D */ STRUCT_PAD(0x9D, 0xA0);
/* 0A0 */ Actor_Derived1_94 mUnk_A0;
/* 0AC */ ActorShotArrow_140 mUnk_AC;
/* 0D4 */ ActorRollingStone_D4 mUnk_D4;
/* 104 */ ActorRollingStone_104 mUnk_104;
/* 108 */ u16 mUnk_108;
/* 10A */ STRUCT_PAD(0x10A, 0x10C);
/* 10C */ Mat3p mUnk_10C;
/* 130 */ UnkStruct_PlayerGet_ec mUnk_130[0x2];
/* 138 */ unk16 mUnk_138;
/* 13C */ Cylinder mUnk_13C;
/* 14C */ unk32 mUnk_14C;
/* 150 */ volatile u16 mUnk_150;
/* 152 */ volatile u16 mUnk_152;
/* 154 */ volatile u16 mUnk_154;
/* 156 */ volatile u16 mUnk_156;
/* 158 */ bool mUnk_158;
/* 159 */ bool mUnk_159;
/* 15A */ s8 mUnk_15A;
/* 15B */ s8 mUnk_15B;
/* 15C */ Actor_Derived1_EC mUnk_15C;
/* 17C */
ActorRollingStone();
/* 18 */ virtual bool vfunc_18(unk32 param1) override; // func_ov031_020f869c
/* 20 */ virtual void vfunc_20() override; // func_ov031_020f878c
/* 2C */ virtual void vfunc_2C(unk32 param1) override; // func_ov031_020f8948
/* 54 */
bool IsInternalTimerOut1() {
if (this->mUnk_150 < this->mUnk_152) {
this->mUnk_150++;
return false;
}
return true;
}
bool IsInternalTimerOut2() {
if (this->mUnk_154 < this->mUnk_156) {
this->mUnk_154++;
return false;
}
return true;
}
void SetState(ActorState state);
void func_ov031_020f8880();
void func_ov031_020f89f4();
void func_ov031_020f8a04();
void func_ov031_020f8a2c();
void func_ov031_020f8a38();
void func_ov031_020f8a3c();
void func_ov031_020f8a58();
void func_ov031_020f8b58();
void func_ov031_020f8bc4();
void func_ov031_020f8de8();
void func_ov031_020f8ed4();
void func_ov031_020f8f0c();
void func_ov031_020f8f10();
void func_ov031_020f8f30();
void func_ov031_020f9018();
void func_ov031_020f9050();
void func_ov031_020f916c();
void func_ov031_020f91ac();
void func_ov031_020f9250();
void func_ov031_020f92cc();
void func_ov031_020f9340();
void func_ov031_020f93bc();
void func_ov031_020f9494();
void func_ov031_020f9554();
void func_ov031_020f97cc();
void func_ov031_020f98e4();
void func_ov031_020f9af4();
void func_ov031_020f9af8();
bool func_ov031_020f9ba4();
void func_ov031_020f9cc0();
};
class ActorProfileRollingStone : public ActorProfile_Derived1 {
public:
/* 00 (base) */
ActorProfileRollingStone();
/* 0C */ virtual Actor *Create();
static ActorProfileRollingStone *GetProfile();
};
-82
View File
@@ -1,82 +0,0 @@
//! TODO: This file was generated automatically and might contain errors
#pragma once
#include "Actor/Actor.hpp"
#include "Actor/ActorProfile.hpp"
#include "global.h"
#include "types.h"
class ActorUnkRLST_C4 : public Actor_C4 {
public:
ActorUnkRLST_C4(Actor *param1);
/* 00 */ virtual bool vfunc_00(ActorRef ref, unk32 param2) override;
/* 04 */ virtual void vfunc_04() override;
/* 08 */ virtual void vfunc_08() override;
/* 0C */ virtual void vfunc_0C(unk32 param1) override;
};
class ActorUnkRLST : public Actor {
public:
/* 00 (base) */
/* 94 */
ActorUnkRLST();
/* 4C */ virtual ~ActorUnkRLST() override;
void func_ov031_020f8354(void);
void func_ov031_020f83e4(void);
void func_ov031_020f849c(void);
void func_ov031_020f8674(void);
void func_ov031_020f8688(void);
void func_ov031_020f869c(void);
void func_ov031_020f878c(void);
void func_ov031_020f8824(void);
void func_ov031_020f8880(void);
void func_ov031_020f8948(void);
void func_ov031_020f89f4(void);
void func_ov031_020f8a04(void);
void func_ov031_020f8a2c(void);
void func_ov031_020f8a38(void);
void func_ov031_020f8a3c(void);
void func_ov031_020f8a58(void);
void func_ov031_020f8b58(void);
void func_ov031_020f8bc4(void);
void func_ov031_020f8de8(void);
void func_ov031_020f8ed4(void);
void func_ov031_020f8f0c(void);
void func_ov031_020f8f10(void);
void func_ov031_020f8f30(void);
void func_ov031_020f9018(void);
void func_ov031_020f9050(void);
void func_ov031_020f916c(void);
void func_ov031_020f91ac(void);
void func_ov031_020f9250(void);
void func_ov031_020f92cc(void);
void func_ov031_020f9340(void);
void func_ov031_020f93bc(void);
void func_ov031_020f9494(void);
void func_ov031_020f9554(void);
void func_ov031_020f97cc(void);
void func_ov031_020f98e4(void);
void func_ov031_020f9af4(void);
void func_ov031_020f9af8(void);
void func_ov031_020f9ba4(void);
void func_ov031_020f9cc0(void);
void func_ov031_020f9cf4(void);
void func_ov031_020f9d60(void);
};
class ActorProfileUnkRLST : public ActorProfile_Derived1 {
public:
/* 00 (base) */
ActorProfileUnkRLST();
~ActorProfileUnkRLST();
/* 0C */ virtual Actor *Create();
static ActorProfileUnkRLST *GetProfile();
};
+4 -4
View File
@@ -35,11 +35,9 @@ public:
class Actor_Derived1_94 {
public:
/* 00 */ unk32 mUnk_00;
/* 04 */ unk32 mUnk_04;
/* 08 */ unk16 mUnk_08;
/* 00 */ Actor_38 mUnk_00;
/* 0A */ unk16 mUnk_0A;
/* 0C */ unk32 mUnk_0C;
/* 0C */
Actor_Derived1_94();
~Actor_Derived1_94();
@@ -48,6 +46,8 @@ public:
class Actor_Derived1_94_Derived1 : public Actor_Derived1_94 {
public:
/* 00 (base) */
/* 0C */ unk32 mUnk_0C;
/* 10 */
Actor_Derived1_94_Derived1(unk32 param1) {
this->mUnk_0C = param1;
+26 -3
View File
@@ -1,15 +1,38 @@
#pragma once
#include "Actor/Actor.hpp"
#include "LinkList.hpp"
#include "Actor/ActorRef.hpp"
#include "Render/ModelRender.hpp"
#include "Unknown/Common.hpp"
#include "Unknown/UnkStruct_027e09a4.hpp"
#include "math.hpp"
#include "types.h"
#include <nns/g3d/g3d.h>
class Actor_C4;
struct ActorGrabParams;
extern "C" void func_ov000_0205d500(ActorGrabParams *, unk32, unk32);
bool PlayerCharacter_IsNotLink(s32 character);
struct ActorGrabParams {
/* 00 */ u16 unk_00;
/* 02 */ u16 unk_02;
/* 04 */
ActorGrabParams() {}
ActorGrabParams(unk32 param2, unk32 param3) {
ActorGrabParams local_1c;
func_ov000_0205d500(&local_1c, param3, param2);
*this = local_1c;
}
void operator=(ActorGrabParams &from) {
*(u32 *) this = *(u32 *) &from;
}
};
class UnkStruct_027e0ce0_40;
class PlayerActorBase_70;
-1
View File
@@ -6,7 +6,6 @@
#include "Render/ModelRender.hpp"
#include "Unknown/Common.hpp"
#include "Unknown/UnkStruct_027e0ce0.hpp"
#include "Unknown/UnkStruct_ov000_0208f820.hpp"
#include "math.hpp"
+7 -1
View File
@@ -914,8 +914,14 @@ struct UnkStackStruct1 {
};
extern "C" void func_ov000_02072fd0(UnkStackStruct1 *);
struct UnkSystem7_UnkStruct_00_20 {
/* 00 */ STRUCT_PAD(0x00, 0x04);
/* 04 */ VecFx32 mUnk_04;
};
struct UnkSystem7_UnkStruct_00 {
/* 00 */ STRUCT_PAD(0x00, 0x24);
/* 00 */ STRUCT_PAD(0x00, 0x20);
/* 20 */ UnkSystem7_UnkStruct_00_20 *mUnk_20;
/* 24 */ unk32 mUnk_24;
/* 28 */ unk32 mUnk_28;
/* 2C */ unk32 mUnk_2C;
+8
View File
@@ -8,6 +8,12 @@
class UnkStruct_027e0cd8_0C_Base;
struct UnkStruct_ov000_0207de98 {
VecFx32 vec;
unk32 param1;
unk32 param2;
};
class UnkStruct_027e09c0_60 {
public:
/* 00 */ unk32 mUnk_00;
@@ -61,7 +67,9 @@ public:
// overlay 0
void func_ov000_0207da40();
void func_ov000_0207de98(ActorRef param1, UnkStruct_ov000_0207de98 *param2, Actor_38 *param3);
void func_ov000_0207e58c(ActorRef param1, unk32 param2, u8 param3, UnkStruct_ov031_Items_01 *param4);
bool func_ov000_0207e458(unk32 param1, unk32 param2, VecFx32 *param3, unk32 param4, VecFx32 *param5, ActorRef param6);
// overlay 1
void func_ov001_020be394();
+1 -1
View File
@@ -9,7 +9,6 @@
#include "Player/PlayerLink.hpp"
#include "Player/TouchControl.hpp"
#include "Save/SaveManager.hpp"
#include "System/SysNew.hpp"
#include "input.hpp"
#include <nitro/math.h>
@@ -731,6 +730,7 @@ public:
bool func_ov000_0208bc1c(unk32 param1, unk32 param2, unk32 param3, unk32 param4, unk32 param5, unk32 param6);
void func_ov000_0208bc9c(unk32 param1, unk32 param2);
void func_ov000_0208bd30(bool param1, unk32 param2, unk32 param3, unk32 param4);
bool func_ov000_0208be70(VecFx32 param1);
G3d_Model *func_ov000_0208ed30(unk32 param1, unk32 param2, char *param3);
static UnkStruct_027e0ce0_34 *func_ov000_0205c904();
-1
View File
@@ -1,6 +1,5 @@
#pragma once
#include "Player/PlayerGet.hpp"
#include "math.hpp"
#include "types.h"
+2
View File
@@ -10,8 +10,10 @@ public:
UnkStruct_027e0d8c();
~UnkStruct_027e0d8c();
// overlay 93
void func_ov093_02166058();
void func_ov093_02166068();
void func_ov093_02166220();
};
extern UnkStruct_027e0d8c *data_027e0d8c;
+4 -3
View File
@@ -5,10 +5,11 @@
#include "Actor/ActorRef.hpp"
#include "Item/ItemManager.hpp"
#include "Player/PlayerLink.hpp"
#include "System/SysNew.hpp"
#include "Player/PlayerActorBase.hpp"
#include "math.hpp"
class PlayerLinkActor_A0;
class UnkStruct_ov000_0208f820_14 {
public:
/* 00 */ unk8 mUnk_00[0x6C];
@@ -134,7 +135,7 @@ public:
this->mItemId = itemId;
}
UnkStruct_ov000_0208f820_04() {}
UnkStruct_ov000_0208f820_04() {};
};
class UnkStruct_ov000_0208f820_44 {
+1 -1
View File
@@ -10,7 +10,7 @@ public:
// data_ov000_020b30d0
/* 00 */ virtual ~UnkStruct_ov031_Items_00();
/* 08 */ virtual bool vfunc_08(const UnkStruct_ov031_020f3310 *param1) override;
/* 08 */ virtual bool vfunc_08(const UnkStruct_ov031_020f3310 *param1) override; // func_ov000_020982d8
};
class UnkStruct_ov031_Items_01 {
-3
View File
@@ -1,8 +1,5 @@
#pragma once
#include "Actor/ActorId.hpp"
#include "Actor/ActorRef.hpp"
#include "Map/MapObjectId.hpp"
#include "types.h"
#include <nitro/math.h>