Decompile overlay 112 (PlayerSceneChange) (#38)

* fix scratch upload?

* start overlay 112

* comment format thing

* build fixes 1

* name cs index

* started vfunc_0c and vfunc_10

* added scratch links

* config changes

* fix build issues

* first wave of broken matches

* second wave of broken matches

* fix build issue

* third wave of broken matches

* forth wave of broken matches
This commit is contained in:
Yanis
2026-04-01 02:20:31 +02:00
committed by GitHub
parent 13fbf76c71
commit 72aa60b96f
36 changed files with 1208 additions and 175 deletions
+1 -1
View File
@@ -81,7 +81,7 @@ public:
/* 04 */ Vec3p mPos;
/* 10 */ Vec3p mPrevPos;
/* 1c */ Vec3p mVel;
/* 28 */ u16 mAngle;
/* 28 */ s16 mAngle;
/* 2a */ unk16 mUnk_2a;
/* 2c */ unk32 mUnk_2c; // gravity?
/* 30 */ Cylinder *mUnk_30;
+1
View File
@@ -42,6 +42,7 @@ public:
~ActorManager();
ActorUnk_ov000_020a8bb0 *func_01fff3b4(unk32 param1);
Actor **func_01fff350(void *param1, Actor **ppActorTable);
void func_ov000_02096e44(int index);
+1 -1
View File
@@ -148,7 +148,7 @@ public:
/* 10 */ unk32 mUnk_10;
/* 14 */ unk32 mUnk_14;
/* 18 */ unk32 mUnk_18;
/* 1C */ Vec2s mUnk_1C;
/* 1C */ VEC2S mUnk_1C;
/* 20 */ volatile unk32 mUnk_20;
};
+1 -1
View File
@@ -152,7 +152,7 @@ public:
/* 04 */ virtual ~PlayerGet() override;
/* 0c */ virtual void vfunc_0c(UnkStruct_PlayerGet_vfunc_0c_param1 *param1) override;
/* 10 */ virtual void vfunc_10(unk32 param1) override;
/* 10 */ virtual void vfunc_10(unk32 param1, unk32 param2) override;
/* 18 */ virtual void vfunc_18(unk32 param1, unk32 param2, unk32 param3) override;
PlayerGet();
+58
View File
@@ -0,0 +1,58 @@
#pragma once
#include "global.h"
#include "types.h"
#include "versions.h"
#include "Unknown/UnkStruct_027e09a4.hpp"
#include "Unknown/UnkStruct_ov000_0208f820.hpp"
#include "nitro/math.h"
class PlayerSceneChange : public UnkStruct_ov000_0208f820 {
public:
/* 00 (base) */
/* 48 */ unk32 mUnk_48;
/* 4C */ unk32 mUnk_4C;
/* 50 */ unk32 mUnk_50;
/* 54 */ UnkStruct_SceneChange1 mUnk_54;
/* 68 */ unk32 mUnk_68;
/* 6C */ s32 mUnk_6C;
/* 70 */ volatile Vec3p mUnk_70;
/* 7C */ unk32 mUnk_7C;
/* 80 */ volatile Vec3p mUnk_80;
/* 8C */ unk32 mUnk_8C;
/* 90 */ volatile u32 mUnk_90;
/* 94 */ u16 mUnk_94[2];
/* 98 */ unk32 mUnk_98;
/* 9C */ Vec3p mUnk_9C;
/* A8 */ unk16 mUnk_A8;
/* AA */ unk16 mUnk_AA;
/* AC */ bool mUnk_AC;
/* AD */ bool mUnk_AD;
/* AE */ s16 mUnk_AE;
PlayerSceneChange();
s16 func_ov112_02184bbc(s16 param1);
/* 04 */ virtual ~PlayerSceneChange() override;
/* 0C */ virtual void vfunc_0c(UnkStruct_PlayerGet_vfunc_0c_param1 *param1) override;
/* 10 */ virtual void vfunc_10(unk32 param1, unk32 param2) override;
/* 1C */ virtual bool vfunc_1c(Vec3p *param1) override;
};
class PlayerSceneChange2 : public UnkStruct_ov000_0208f820 {
public:
/* 00 (base) */
/* 48 */ unk32 mUnk_48;
/* 4C */ unk32 mUnk_4C;
/* 50 */ unk32 mUnk_50;
/* 54 */ Vec3p mUnk_54;
/* 54 */ Vec3p mUnk_60;
PlayerSceneChange2();
/* 04 */ virtual ~PlayerSceneChange2() override;
/* 0C */ virtual void vfunc_0c(UnkStruct_PlayerGet_vfunc_0c_param1 *param1) override;
/* 10 */ virtual void vfunc_10(unk32 param1, unk32 param2) override;
};
-16
View File
@@ -52,22 +52,6 @@ struct Random {
return result;
}
#ifdef __MWERKS__
Vec2us &NextPos(u16 xMax, u16 yMax) {
Vec2us pos;
pos.x = this->Next32(0, xMax);
pos.y = this->Next32(0, yMax);
return pos;
}
#else
const Vec2us NextPos(u16 xMax, u16 yMax) {
const Vec2us pos = {(u16) this->Next32(0, xMax), (u16) this->Next32(0, yMax)};
return pos;
}
#endif
void Init();
};
+20 -22
View File
@@ -14,7 +14,8 @@ naming scheme:
- b_xxx: "B" for "Boss" -> dungeon boss area
- f_xxx: "F" for "Field" -> normal gameplay area (also known as a "land" area)
*/
enum SceneIndex {
typedef u32 SceneIndex;
enum SceneIndex_ {
/* 0 */ SceneIndex_test_trn = 0x00, //
/* 1 */ SceneIndex_test_trn2 = 0x01, //
/* 2 */ SceneIndex_test_pre = 0x02, //
@@ -158,14 +159,14 @@ struct UnkStruct_func_01ffd400 {
};
struct UnkStruct_SceneChange1 {
/* 00 */ unk32 nextSceneIndex;
/* 00 */ unk32 mNextSceneIndex;
/* 04 */ unk32 mUnk_04;
/* 08 */ unk16 mUnk_08;
/* 0A */ unk8 mUnk_0A;
/* 0B */ unk8 mUnk_0B;
/* 0A */ u8 mRoomIndex;
/* 0B */ unk8 mSpawnIndex;
/* 0C */ unk8 mUnk_0C;
/* 0D */ unk8 mUnk_0D;
/* 0E */ unk8 mUnk_0E;
/* 0E */ unk8 mCutsceneIndex;
/* 0F */ unk8 mUnk_0F;
/* 10 */ unk8 mUnk_10;
/* 11 */ unk8 mUnk_11;
@@ -174,14 +175,15 @@ struct UnkStruct_SceneChange1 {
/* 14 */
UnkStruct_SceneChange1() {
this->nextSceneIndex = SceneIndex_Max;
this->mUnk_04 = 0;
this->mUnk_08 = 0;
this->mUnk_0A = 0xFF;
this->mUnk_0B = 0;
this->mNextSceneIndex = SceneIndex_Max;
this->mUnk_04 = 0;
this->mUnk_08 = 0;
this->mRoomIndex = 0xFF; // this changes when you enter a house, it's not clear if it has another purpose yet
this->mSpawnIndex = 0; // changing this then saving will change your spawn location after opening the save again
// (not the area)
this->mUnk_0C = 0;
this->mUnk_0D = 0;
this->mUnk_0E = 0x2B;
this->mCutsceneIndex = 0x2B; // array length of `data_ov000_020af780`
this->mUnk_0F = 0;
this->mUnk_10 = 0;
}
@@ -194,8 +196,7 @@ public:
/* 78 */ UnkStruct_SceneChange1 mUnk_78;
/* 8C */ unk32 mNextSceneIndex;
/* 90 */ STRUCT_PAD(0x90, 0xB4);
/* B4 */ unk32
mSpawnTransitionType; // the behavior of Link when entering a new scene (walk from the entrance, stay still etc)
/* B4 */ unk32 mSpawnTransitionType; // the behavior of Link when entering a new scene
};
class UnkStruct_027e09a4 : public SysObject {
@@ -208,15 +209,8 @@ public:
/* 0E */ unk8 mUnk_0E;
/* 0F */ unk8 mUnk_0F;
/* 10 */ unk32 *mUnk_10;
/* 14 */ unk32 mSavedSceneIndex;
/* 18 */ unk32 mUnk_18;
/* 1C */ unk8 mUnk_1C;
/* 1D */ unk8 mUnk_1D;
/* 1E */ unk8 mSavedHouseIndex; // this changes when you enter a house, it's not clear if it has another purpose yet
/* 1F */ unk8 mSavedSpawnIndex; // changing this then saving will change your spawn location after opening the save again
// (not the area)
/* 20 */ unk32 mUnk_20;
/* 24 */ STRUCT_PAD(0x24, 0x54);
/* 14 */ UnkStruct_SceneChange1 mUnk_14;
/* 32 */ STRUCT_PAD(0x28, 0x54);
/* 54 */ void *mUnk_54; // vtable
/* 58 */ UnkStruct_WarpUnk1 *mpWarpUnk1;
/* 5C */ unk32 mUnk_5C;
@@ -259,6 +253,10 @@ public:
void func_ov000_020708d8(unk32 param1);
void func_ov000_02070938(unk32 param1);
void func_ov000_02070a4c(unk32 param1);
unk32 func_ov000_02070554();
unk16 *func_ov000_02070538();
bool func_ov000_02070a9c(UnkStruct_SceneChange1 *param1);
bool func_ov000_02072154(UnkStruct_SceneChange1 *param1, unk32 param2);
void func_ov017_020bb994(void *param1);
void func_ov017_020bb994(unk32 param1);
+1
View File
@@ -13,6 +13,7 @@ public:
unk32 func_ov000_020732fc(unk32 param1);
unk32 func_ov000_020732dc(unk32 param1);
unk32 func_ov000_02073470(void *param1, unk32 param2);
unk32 func_ov000_02073388(void *param1);
};
extern UnkStruct_027e09b8 *data_027e09b8;
+3
View File
@@ -4,6 +4,8 @@
#include "nitro/math.h"
#include "types.h"
#include "Unknown/UnkStruct_027e09a4.hpp"
class UnkStruct_027e0cd8_0c {
public:
/* 000 (vtable) */
@@ -79,6 +81,7 @@ public:
/* 2c */ virtual void vfunc_2c();
unk32 func_ov000_02080a44();
bool func_ov000_02080658(unk32 param1, UnkStruct_SceneChange1 *param2);
};
class UnkStruct_027e0cd8 {
+16
View File
@@ -0,0 +1,16 @@
#pragma once
#include "global.h"
#include "types.h"
class UnkStruct_027e0cdc {
public:
/* 00 */ unk32 mUnk_00;
UnkStruct_027e0cdc();
~UnkStruct_027e0cdc();
unk32 func_ov000_02082a28(unk32 param1);
};
extern UnkStruct_027e0cdc *data_027e0cdc;
+31 -3
View File
@@ -8,14 +8,42 @@ public:
void func_ov031_02103878();
};
class UnkStruct_027e0ce8_00 {
public:
/* 00 (vtable) */
/* 04 */ STRUCT_PAD(0x04, 0x38);
/* 38 */ unk32 mUnk_38;
/* 3C */ STRUCT_PAD(0x3C, 0xCC);
/* CC */ unk32 mUnk_CC;
/* 00 */ virtual void vfunc_00();
/* 04 */ virtual void vfunc_04();
/* 08 */ virtual void vfunc_08();
/* 0C */ virtual void vfunc_0C();
/* 10 */ virtual void vfunc_10();
/* 14 */ virtual void vfunc_14();
/* 18 */ virtual void vfunc_18();
/* 1C */ virtual void vfunc_1C();
/* 20 */ virtual void vfunc_20();
/* 24 */ virtual void vfunc_24();
/* 28 */ virtual void vfunc_28();
/* 2C */ virtual void vfunc_2C();
/* 30 */ virtual ~UnkStruct_027e0ce8_00();
/* 38 */ virtual void vfunc_38() = 0;
/* 3C */ virtual void vfunc_3C() = 0;
void func_ov000_0209d6ac(Vec3p *param1);
void func_ov034_02121d84();
};
class UnkStruct_027e0ce8 {
public:
/* 00 */ void *mUnk_00; // pointer to polygon list?
/* 04 */ void *mUnk_04; // pointer to the end of that list
/* 00 */ UnkStruct_027e0ce8_00 *mUnk_00; // pointer to polygon list?
/* 04 */ UnkStruct_027e0ce8_00 *mUnk_04; // pointer to the end of that list
/* 08 */ UnkStruct_func_01fff520_ret **mUnk_08;
UnkStruct_func_01fff520_ret **func_01fff520(UnkStruct_ov000_020b34c4 *param1, void *);
unk32 func_01fff498(UnkStruct_ov000_0208f820_04 param1);
UnkStruct_027e0ce8_00 *func_01fff498(unk32 param1, unk32 param2);
};
extern UnkStruct_027e0ce8 *data_027e0ce8;
+53 -28
View File
@@ -25,6 +25,8 @@ public:
class UnkStruct_PlayerGet_64 {
public:
/* 00 */ unk32 mUnk_00;
UnkStruct_PlayerGet_64(unk32 *param1, unk32 param2);
~UnkStruct_PlayerGet_64();
@@ -37,15 +39,27 @@ public:
/* 38 */ UnkStruct_PlayerGet_64 mUnk_38;
/* 3c */ unk32 mUnk_3c;
/* 40 */ u16 mUnk_40;
void func_ov093_0216f76c(Vec3p *param1, unk32 param2);
};
class UnkStruct_ov000_0208f820_28 {
public:
/* 00 */ unk8 mUnk_00[0x54];
/* 00 */ STRUCT_PAD(0x00, 0x38);
/* 38 */ UnkStruct_PlayerGet_64 mUnk_38;
/* 3C */ unk32 mUnk_3C;
/* 40 */ u16 mUnk_40;
/* 42 */ STRUCT_PAD(0x42, 0x48);
/* 48 */ unk32 mUnk_48;
/* 48 */ unk32 mUnk_4C;
/* 48 */ unk32 mUnk_50;
/* 54 */ ItemManager *pItemManager;
/* 58 */ unk8 mUnk_58[0x98 - 0x58];
/* 58 */ STRUCT_PAD(0x58, 0x94);
/* 94 */ unk32 mUnk_94;
/* 98 */ UnkStruct_ov000_0208f820_28_98 *mUnk_98;
void func_ov000_0208cf20(unk32 param1, unk32 param2);
void func_ov000_0208d12c();
void func_ov058_02152a24();
};
@@ -56,8 +70,18 @@ public:
/* 08 */ unk32 mUnk_08;
/* 0c */ unk32 mUnk_0c;
/* 10 */ unk32 mUnk_10;
/* 14 */ unk8 mUnk_14[0x58 - 0x14];
/* 14 */ unk16 mUnk_14;
/* 16 */ unk16 mUnk_16;
/* 18 */ STRUCT_PAD(0x18, 0x26);
/* 26 */ unk16 mUnk_26;
/* 28 */ STRUCT_PAD(0x28, 0x58);
/* 58 */ unk16 mUnk_58;
/* 5A */ STRUCT_PAD(0x5A, 0x9C);
/* 9C */ unk32 mUnk_9C;
/* A0 */ STRUCT_PAD(0xA0, 0x148);
/* 148 */ u32 mUnk_148;
/* 14C */ unk32 mUnk_14C;
/* 150 */ unk32 mUnk_150;
};
class UnkStruct_ov000_0208f820_30_10 {
@@ -77,7 +101,9 @@ public:
/* 1c */ unk32 mUnk_1c;
/* 20 */ unk32 mUnk_20;
/* 24 */ unk32 mUnk_24;
/* 28 */ unk8 mUnk_28[0x70 - 0x28];
/* 28 */ STRUCT_PAD(0x28, 0x68);
/* 68 */ unk32 mUnk_68;
/* 6C */ unk32 mUnk_6C;
/* 70 */ u32 mUnk_70;
void func_ov000_020921e4(unk32 param1);
@@ -85,23 +111,10 @@ public:
void func_ov000_02093a04();
};
class UnkStruct_ov000_0208f820_38 {
public:
/* 00 */ unk32 mUnk_00;
/* 04 */ unk32 mUnk_04;
/* 08 */ unk32 mUnk_08;
};
class UnkStruct_ov000_0208f820_3c {
public:
/* 00 */ unk32 mUnk_00;
/* 04 */ unk32 mUnk_04;
/* 08 */ unk32 mUnk_08;
};
class UnkStruct_ov000_0208f820_40 {
public:
/* 00 */ unk16 mUnk_00;
/* 00 */ u16 mUnk_00;
/* 00 */ s16 mUnk_02;
};
class UnkStruct_PlayerGet_vfunc_0c_param1 {
@@ -110,9 +123,7 @@ public:
/* 04 */ unk32 mUnk_04;
/* 08 */ unk32 mUnk_08;
/* 0c */ unk32 mUnk_0c;
/* 10 */ unk32 mUnk_10;
/* 14 */ unk32 mUnk_14;
/* 18 */ unk32 mUnk_18;
/* 10 */ Vec3p mUnk_10;
/* 1c */ ItemId mUnk_1c;
};
@@ -121,6 +132,17 @@ public:
/* 00 */ unk8 mUnk_00[0x24];
/* 24 */ unk8 mUnk_24;
/* 25 */ unk8 mUnk_25;
/* 26 */ STRUCT_PAD(0x26, 0x78);
/* 78 */ void **mUnk_78;
/* 7C */ STRUCT_PAD(0x7C, 0x94);
/* 94 */ unk32 mUnk_94;
/* 98 */ unk32 mUnk_98;
/* 9C */ unk32 mUnk_9C;
/* A0 */ STRUCT_PAD(0xA0, 0xFE);
/* FE */ unk8 mUnk_FE;
/* FF */ unk8 mUnk_FF;
/* 100 */ unk32 mUnk_100;
/* 104 */ u16 mUnk_104;
};
class UnkStruct_ov000_0208f820_04 {
@@ -141,7 +163,7 @@ public:
UnkStruct_ov000_0208f820_04() {}
};
class UnkStruct_ov000_0208f820 : public SysObject {
class UnkStruct_ov000_0208f820 {
public:
/* 00 (vtable) */
/* 04 */ UnkStruct_ov000_0208f820_04 mUnk_04;
@@ -157,20 +179,23 @@ public:
/* 2c */ UnkStruct_ov000_0208f820_2c *mUnk_2c;
/* 30 */ UnkStruct_ov000_0208f820_30 *mUnk_30;
/* 34 */ Vec3p *mUnk_34;
/* 38 */ UnkStruct_ov000_0208f820_38 *mUnk_38;
/* 3c */ UnkStruct_ov000_0208f820_3c *mUnk_3c;
/* 38 */ Vec3p *mUnk_38;
/* 3c */ Vec3p *mUnk_3C;
/* 40 */ UnkStruct_ov000_0208f820_40 *mUnk_40;
/* 44 */ unk32 *mUnk_44;
/* 48 */
/* 00 */ virtual void vfunc_00();
/* 04 */ virtual ~UnkStruct_ov000_0208f820();
/* 0c */ virtual void vfunc_0c(UnkStruct_PlayerGet_vfunc_0c_param1 *param1);
/* 10 */ virtual void vfunc_10(unk32 param1);
/* 0c */ virtual void vfunc_0c(UnkStruct_PlayerGet_vfunc_0c_param1 *param1) = 0;
/* 10 */ virtual void vfunc_10(unk32 param1, unk32 param2) = 0;
/* 14 */ virtual void vfunc_14();
/* 18 */ virtual void vfunc_18(unk32 param1, unk32 param2, unk32 param3);
/* 1c */ virtual void vfunc_1c();
/* 1c */ virtual bool vfunc_1c(Vec3p *param1);
/* 20 */
UnkStruct_ov000_0208f820();
bool func_ov000_020914b0(unk32 param1, Vec3p *param2, unk32 param3);
bool func_ov000_02091e68(unk32 param1);
};
+66 -19
View File
@@ -29,15 +29,26 @@ typedef s16 q4;
#define SIN(n) (gSinCosTable[2 * ((n) >> 4)])
#define COS(n) (gSinCosTable[2 * ((n) >> 4) + 1])
#define SIN2(table, n) ((table)[2 * ((n) >> 4)])
#define COS2(table, n) ((table)[2 * ((n) >> 4) + 1])
#ifdef __cplusplus
}
#endif
#ifdef __cplusplus
struct Vec2b {
/* 0 */ u8 x;
/* 1 */ u8 y;
/* 2 */
union Vec2b {
struct {
/* 0 */ u8 x;
/* 1 */ u8 y;
/* 2 */
};
u8 coords[2];
void operator=(const Vec2b &from) {
this->x = from.x;
this->y = from.y;
}
Vec2b() {}
Vec2b(u8 X, u8 Y) {
@@ -51,6 +62,11 @@ struct Vec2s {
/* 2 */ s16 y;
/* 4 */
void operator=(const Vec2s &from) {
this->x = from.x;
this->y = from.y;
}
Vec2s() {}
Vec2s(s16 X, s16 Y) {
x = X;
@@ -63,6 +79,11 @@ struct Vec2us {
/* 2 */ u16 y;
/* 4 */
void operator=(const Vec2us &from) {
this->x = from.x;
this->y = from.y;
}
Vec2us() {}
Vec2us(u16 X, u16 Y) {
x = X;
@@ -70,10 +91,18 @@ struct Vec2us {
}
};
struct Vec2p {
/* 0 */ q20 x;
/* 4 */ q20 y;
/* 8 */
union Vec2p {
struct {
/* 0 */ q20 x;
/* 4 */ q20 y;
/* 8 */
};
q20 coords[2];
void operator=(const Vec2p &from) {
this->x = from.x;
this->y = from.y;
}
Vec2p() {}
Vec2p(q20 X, q20 Y) {
@@ -82,11 +111,19 @@ struct Vec2p {
}
};
struct Vec3p {
/* 0 */ q20 x;
/* 4 */ q20 y;
/* 8 */ q20 z;
/* c */
union Vec3p {
struct {
q20 x;
q20 y;
q20 z;
};
q20 coords[3];
void operator=(const Vec3p &from) {
this->x = from.x;
this->y = from.y;
this->z = from.z;
}
Vec3p() {}
Vec3p(q20 X, q20 Y, q20 Z) {
@@ -96,12 +133,22 @@ struct Vec3p {
}
};
struct Vec4p {
/* 00 */ q20 x;
/* 04 */ q20 y;
/* 08 */ q20 z;
/* 0c */ q20 w;
/* 10 */
union Vec4p {
struct {
/* 00 */ q20 x;
/* 04 */ q20 y;
/* 08 */ q20 z;
/* 0c */ q20 w;
/* 10 */
};
q20 coords[4];
void operator=(const Vec4p &from) {
this->x = from.x;
this->y = from.y;
this->z = from.z;
this->w = from.w;
}
Vec4p() {}
Vec4p(q20 X, q20 Y, q20 Z, q20 W) {