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
+7 -3
View File
@@ -22,8 +22,9 @@ ARM Actor::Actor() {
this->mRef.Reset();
this->mType = NULL;
Copy256(&data_ov000_020b539c.mUnk_00, &this->mUnk_5c, sizeof(data_ov000_020b539c.mUnk_00));
this->mPrevPos = this->mPos = this->mUnk_5c.mUnk_00;
this->mAngle = this->mUnk_5c.mUnk_0c;
this->mPos = this->mUnk_5c.mUnk_00;
this->mPrevPos = this->mUnk_5c.mUnk_00;
this->mAngle = this->mUnk_5c.mUnk_0c;
SET_FLAGS(this->mFlags, ActorFlag_Alive, ActorFlag_Visible, ActorFlag_Active, ActorFlag_14);
this->mUnk_44 = 0xFF;
this->mUnk_46 = 0;
@@ -146,7 +147,10 @@ ARM bool Actor::vfunc_3c(unk32 param2, Vec3p *param3) {
return false;
}
this->mVel = *param3;
this->mVel.x = param3->x;
this->mVel.y = param3->y;
this->mVel.z = param3->z;
UNSET_FLAG(this->mFlags, ActorFlag_Grabbed);
return true;
}
+1 -1
View File
@@ -31,7 +31,7 @@ public:
UnkStruct_ov019_020d24c0 data_ov019_020d24c0(-0x100, 0, 0x100, 0);
UnkStruct_ov019_020d1e4c UnkStruct_ov019_020d1e70::data_ov019_020d1e4c = {
0x14, 0x14, 0x14, 0x04, 0x03, -0x47, 0x00, 0x0281, -0x47, Vec2s(0x00, 0x00), 0x0281,
0x14, 0x14, 0x14, 0x04, 0x03, -0x47, 0x00, 0x0281, -0x47, {0x00, 0x00}, 0x0281,
};
UnkStruct_ov019_020d1e94 UnkStruct_ov019_020d1e70::data_ov019_020d1e94 = {
+4 -4
View File
@@ -17,9 +17,9 @@ void func_ov000_020623d8(void *param1, unk32 param2);
class UnkStruct_ov019_020d215c {
public:
/* 00 */ Vec2s mUnk_00;
/* 04 */ Vec2s mUnk_04;
/* 08 */ Vec2s mUnk_08;
/* 00 */ VEC2S mUnk_00;
/* 04 */ VEC2S mUnk_04;
/* 08 */ VEC2S mUnk_08;
/* 0C */ VEC2S mUnk_0C;
/* 10 */ VEC2S mUnk_10;
/* 14 */
@@ -68,7 +68,7 @@ public:
};
UnkStruct_ov019_020d215c UnkStruct_ov019_020d2170::data_ov019_020d215c = {
Vec2s(), Vec2s(), Vec2s(), {-0x47, -0x01}, {0x0281, 0x00},
{0, 0}, {0, 0}, {0, 0}, {-0x47, -0x01}, {0x0281, 0x00},
};
static const UnkStruct_ov019_020d2170 data_ov019_020d2170;
+8 -2
View File
@@ -172,7 +172,10 @@ ARM FileSelect_UnkClass7::FileSelect_UnkClass7() {
u16 value = gRandom.ConditionalNext32(this->mUnk_004.mUnk_000[i].func_ov000_02060c28());
this->mUnk_004.mUnk_000[i].func_ov000_02060bd8(value);
Vec2us pos = pRandom->NextPos(SUBSCREEN_WIDTH, SUBSCREEN_HEIGHT);
Vec2us pos;
pos.x = pRandom->Next32(0, SUBSCREEN_WIDTH);
pos.y = pRandom->Next32(0, SUBSCREEN_HEIGHT);
Vec2us *pVec = &this->mUnk_004.mUnk_E10[i];
*pVec = pos;
}
@@ -185,7 +188,10 @@ ARM void FileSelect_UnkClass7::vfunc_00() {
if (this->mUnk_004.mUnk_000[i].func_ov000_02060af8() != 0) {
this->mUnk_004.mUnk_000[i].func_ov000_02060b64();
Vec2us pos = gRandom.NextPos(SUBSCREEN_WIDTH, SUBSCREEN_HEIGHT);
Vec2us pos;
pos.x = gRandom.Next32(0, SUBSCREEN_WIDTH);
pos.y = gRandom.Next32(0, SUBSCREEN_HEIGHT);
Vec2us *pVec = &this->mUnk_004.mUnk_E10[i];
*pVec = pos;
}
+9 -5
View File
@@ -52,10 +52,12 @@ ARM void ActorRupee::func_ov031_020e8d2c(Vec3p *param1, u8 param2, unk32 param3,
stack_struct stack;
stack.sp2C = 0;
stack.func_ov000_020975f8();
stack.sp14 = param2 & 0xFF;
stack.sp4 = *param1;
stack.sp2C = param4;
stack.sp30 = param3;
stack.sp14 = param2 & 0xFF;
stack.sp4.x = param1->x;
stack.sp4.y = param1->y;
stack.sp4.z = param1->z;
stack.sp2C = param4;
stack.sp30 = param3;
this->func_ov000_020973f4(&data_ov000_020b539c, ActorId_Rupee, (Actor_5c *) &stack, 0);
}
@@ -418,7 +420,9 @@ ARM void ActorRupee::func_ov031_020e95c0() {
return;
}
this->mPos = temp_r0->mPos;
this->mPos.x = temp_r0->mPos.x;
this->mPos.y = temp_r0->mPos.y;
this->mPos.z = temp_r0->mPos.z;
}
ARM void ActorRupee::func_ov031_020e9610() {
+14 -20
View File
@@ -287,8 +287,8 @@ ARM void PlayerGet::vfunc_0c(UnkStruct_PlayerGet_vfunc_0c_param1 *param1) {
ItemManager *pItemManager;
ItemId itemId;
ActorUnk_ov000_020a8bb0 *iVar10;
UnkStruct_ov000_0208f820_38 *pUnk_38;
UnkStruct_ov000_0208f820_3c *pUnk_3c;
Vec3p *pUnk_38;
Vec3p *pUnk_3c;
char auStack_108[12];
Vec3p VStack_fc;
unk32 uStack_f0[4];
@@ -296,9 +296,9 @@ ARM void PlayerGet::vfunc_0c(UnkStruct_PlayerGet_vfunc_0c_param1 *param1) {
switch (param1->mUnk_04) {
case 0x39:
*(u32 *) this->mUnk_54.mUnk_00 = param1->mUnk_10;
*(u32 *) this->mUnk_54.mUnk_04 = param1->mUnk_14;
this->mUnk_54.mUnk_08 = param1->mUnk_18;
*(u32 *) this->mUnk_54.mUnk_00 = param1->mUnk_10.x;
*(u32 *) this->mUnk_54.mUnk_04 = param1->mUnk_10.y;
this->mUnk_54.mUnk_08 = param1->mUnk_10.z;
pItemManager = this->mUnk_28->pItemManager;
itemId = param1->mUnk_1c;
@@ -336,14 +336,14 @@ ARM void PlayerGet::vfunc_0c(UnkStruct_PlayerGet_vfunc_0c_param1 *param1) {
func_ov000_0208ba10(auStack_108, &this->mUnk_24->mUnk_25, 0);
this->mUnk_40->mUnk_00 = 0x8000;
pUnk_38 = this->mUnk_38;
pUnk_38->mUnk_00 = 0;
pUnk_38->mUnk_08 = 0;
pUnk_38 = this->mUnk_38;
pUnk_38->x = 0;
pUnk_38->z = 0;
pUnk_3c = this->mUnk_3c;
pUnk_3c->mUnk_00 = 0;
pUnk_3c->mUnk_04 = 0;
pUnk_3c->mUnk_08 = 0;
pUnk_3c = this->mUnk_3C;
pUnk_3c->x = 0;
pUnk_3c->y = 0;
pUnk_3c->z = 0;
if (((*(u16 *) this->mUnk_54.mUnk_00 << 0x10) >> 0x1E) != 1) {
return;
@@ -497,7 +497,7 @@ ARM void PlayerGet::vfunc_0c(UnkStruct_PlayerGet_vfunc_0c_param1 *param1) {
const UnkStruct_ov110_021861ec data_ov110_021861ec = UnkStruct_ov110_021861ec(0x5E3, 0x152D, 0xCD);
ARM void PlayerGet::vfunc_10(unk32 param1) {
ARM void PlayerGet::vfunc_10(unk32 param1, unk32 param2) {
unk32 var_r1;
UnkStruct_func_01fff520_ret **temp_r0_6;
s32 temp_r5;
@@ -669,13 +669,7 @@ ARM void PlayerGet::vfunc_10(unk32 param1) {
}
if (*(u16 *) this->mUnk_54.mUnk_00 == 0x1000) {
UnkStruct_ov000_0208f820_04 structure;
structure.mUnk_00[0] = this->mUnk_54.mUnk_00[0];
structure.mUnk_00[1] = this->mUnk_54.mUnk_00[1];
// structure.mUnk_08 = this->mUnk_54.mUnk_08;
// structure.mItemId = this->mUnk_54.mItemId;
if (data_027e0ce8->func_01fff498(structure) != 0) {
if (data_027e0ce8->func_01fff498(this->mUnk_54.mUnk_00[0], this->mUnk_54.mUnk_00[1]) != 0) {
var_r5_2 = '\0';
switch (func_01fff584()) {
@@ -0,0 +1,751 @@
#include "Player/PlayerSceneChange.hpp"
#include "Actor/ActorManager.hpp"
#include "Actor/ActorUnk_ov000_020a8bb0.hpp"
#include "Unknown/UnkStruct_027e09b8.hpp"
#include "Unknown/UnkStruct_027e0cd8.hpp"
#include "Unknown/UnkStruct_027e0cdc.hpp"
#include "Unknown/UnkStruct_027e0ce8.hpp"
#include <nitro/math.h>
extern "C" void func_ov000_0205ca74(unk32);
extern "C" void func_ov000_0205d65c(void *, Vec3p *, Vec3p *, u32);
ARM PlayerSceneChange::PlayerSceneChange() {
this->mUnk_68 = this->mUnk_2c->mUnk_14C;
this->mUnk_6C = -1;
this->mUnk_70.coords = this->mUnk_34->coords;
this->mUnk_7C = 0;
this->mUnk_80.coords = this->mUnk_34->coords;
this->mUnk_8C = 0;
this->mUnk_90 = 0;
*((u32 *) this->mUnk_94) = 0;
this->mUnk_98 = -1;
this->mUnk_9C.x = 0;
this->mUnk_9C.y = 0;
this->mUnk_9C.z = 0;
this->mUnk_A8 = 0x8000;
this->mUnk_AA = 0x8000;
this->mUnk_AC = false;
this->mUnk_AD = false;
this->mUnk_AE = 0x8000;
}
ARM PlayerSceneChange::~PlayerSceneChange() {
UnkStruct_ov000_0208f820_28 *pUnk_28 = this->mUnk_28;
pUnk_28->mUnk_40 &= 0xFFFD;
if (pUnk_28->mUnk_40 == 0) {
pUnk_28->mUnk_38.~UnkStruct_PlayerGet_64();
}
func_ov000_0205ca74(this->mUnk_98);
}
ARM s16 PlayerSceneChange::func_ov112_02184bbc(s16 param1) {
// fake match?
if ((u32) (*(u16 *) &this->mUnk_90 << 0x10) >> 0x1E == 1) {
ActorUnk_ov000_020a8bb0 *iVar1 = gActorManager->func_01fff3b4(this->mUnk_90);
if (iVar1 != 0) {
return iVar1->mAngle;
}
} else if (this->mUnk_94[0] == 0x1000) {
return this->mUnk_AE;
}
return param1;
}
extern "C" bool func_ov096_02179c14();
extern "C" void func_ov034_02121de4(void *);
extern "C" unk32 func_01fff584();
extern q4 data_02040964[];
extern q4 data_0203e964[];
extern q4 data_02041964[];
extern q4 data_0203f964[];
extern q4 data_0203feb0[];
extern "C" void func_01ffb714(Vec3p *, Vec3p *, void *);
extern "C" void func_01ff9638(void *, unk32);
extern "C" q20 func_01ffb800(void *);
extern "C" void func_01ff9770(void *);
extern "C" void func_ov000_02072fd0(void *);
extern unk32 data_ov000_020b3000;
extern "C" bool func_ov000_02080998(Vec3p *);
extern "C" void func_01ff930c(UnkStruct_ov000_0208f820_40 *, unk16, unk32);
// https://decomp.me/scratch/c7PhN
ARM void PlayerSceneChange::vfunc_0c(UnkStruct_PlayerGet_vfunc_0c_param1 *param1) {
q4 *pSinCosTable = gSinCosTable;
switch (param1->mUnk_04) {
case 0x3C: {
int iVar19 = data_027e0cd8->mUnk_0c->func_ov000_02080658((this->mUnk_2c->mUnk_148 >> 16) & 0x3F, &this->mUnk_54);
if (iVar19 != 0 && this->mUnk_28->mUnk_94 != 0 && func_ov096_02179c14()) {
this->mUnk_54.mUnk_10 = 1;
}
switch (this->mUnk_68) {
case 0x08:
case 0x09:
case 0x22:
case 0x23:
this->mUnk_6C = 0x0F;
break;
case 0x0F:
case 0x10:
case 0x11:
case 0x12:
case 0x13:
case 0x14:
case 0x21:
case 0x24:
case 0x25:
this->mUnk_6C = 0x0A;
break;
case 0x1C:
this->mUnk_6C = 0x05;
break;
case 0x19:
this->mUnk_6C = 0x00;
break;
default:
this->mUnk_6C = 0x0D;
break;
}
Vec3p *temp_r8 = this->mUnk_34;
this->mUnk_70.x = temp_r8->x;
this->mUnk_70.y = temp_r8->y;
this->mUnk_70.z = temp_r8->z;
this->mUnk_A8 = -0x8000;
this->mUnk_AA = -0x8000;
this->mUnk_AC = false;
switch (this->mUnk_68) {
case 0x08:
this->mUnk_70.x = temp_r8->x + MUL_Q20(data_02040964[0], FLOAT_TO_Q20(2.0f));
this->mUnk_70.z = temp_r8->z + MUL_Q20(data_02040964[1], FLOAT_TO_Q20(2.0f));
break;
case 0x09:
this->mUnk_70.x = temp_r8->x + MUL_Q20(data_0203e964[0], FLOAT_TO_Q20(2.0f));
this->mUnk_70.z = temp_r8->z + MUL_Q20(data_0203e964[1], FLOAT_TO_Q20(2.0f));
break;
case 0x22:
this->mUnk_70.x = temp_r8->x + MUL_Q20(data_02041964[0], FLOAT_TO_Q20(2.0f));
this->mUnk_70.z = temp_r8->z + MUL_Q20(data_02041964[1], FLOAT_TO_Q20(2.0f));
break;
case 0x23:
this->mUnk_70.x = temp_r8->x + MUL_Q20(data_0203f964[0], FLOAT_TO_Q20(2.0f));
this->mUnk_70.z = temp_r8->z + MUL_Q20(data_0203f964[1], FLOAT_TO_Q20(2.0f));
break;
default:
if (this->mUnk_2c->mUnk_150 == 0x1000) {
UnkStruct_027e0ce8_00 *temp_r0_4 = data_027e0ce8->func_01fff498(this->mUnk_2c->mUnk_150 >> 0x10, 0);
if (temp_r0_4 != NULL) {
temp_r0_4->func_ov000_0209d6ac((Vec3p *) &this->mUnk_70);
if (this->mUnk_68 == 0x19) {
temp_r0_4->func_ov034_02121d84();
this->mUnk_8C = temp_r0_4->mUnk_38;
} else if (func_01fff584() == 'DRTY') {
*(u32 *) this->mUnk_94 = temp_r0_4->mUnk_38;
switch (temp_r0_4->mUnk_CC) {
case 1:
this->mUnk_AE = FLOAT_TO_Q20(-5.778f);
break;
case 2:
this->mUnk_AE = FLOAT_TO_Q20(5.7778f);
break;
default:
this->mUnk_AE = FLOAT_TO_Q20(-8.0002f);
break;
}
}
}
} else {
if (((u32) ((u16) this->mUnk_2c->mUnk_150 << 0x10) >> 0x1E) == 1) {
ActorUnk_ov000_020a8bb0 *temp_r0_6 = gActorManager->func_01fff3b4(this->mUnk_2c->mUnk_150);
if (temp_r0_6 != NULL) {
this->mUnk_70.x = temp_r0_6->mPos.x;
this->mUnk_70.y = temp_r0_6->mPos.y;
this->mUnk_70.z = temp_r0_6->mPos.z;
if (temp_r0_6->func_01fff458() == 'GTTG') {
this->mUnk_90 = temp_r0_6->mRef.index;
this->mUnk_AA = temp_r0_6->mAngle;
this->mUnk_A8 = temp_r0_6->mAngle;
}
}
}
}
break;
}
s16 stack;
func_ov000_0205d65c(&stack, this->mUnk_34, (Vec3p *) &this->mUnk_70, this->mUnk_40->mUnk_00);
this->mUnk_40->mUnk_00 = stack;
switch (this->mUnk_68) {
case 0x11:
case 0x12:
case 0x13:
case 0x14: {
s32 var_r1_2 = this->mUnk_A8 - this->mUnk_40->mUnk_00;
if (var_r1_2 < 0) {
var_r1_2 = -var_r1_2;
}
if (var_r1_2 >= 0x1555) {
this->mUnk_AC = true;
}
unk32 sp78;
unk16 temp_r8_2 = this->mUnk_A8 - 0x8000;
func_01ffb714(this->mUnk_34, (Vec3p *) &this->mUnk_70, &sp78);
func_01ff9638(&sp78, -temp_r8_2);
this->mUnk_9C.x = -sp78;
this->mUnk_9C.y = 0;
this->mUnk_9C.z = 0;
func_01ff9638(&this->mUnk_9C, temp_r8_2);
q20 temp_r0_11 = func_01ffb800(&this->mUnk_9C);
if (temp_r0_11 > 0x800) {
if ((((temp_r0_11 - 0x800) / 10) + ((temp_r0_11 - 0x800) >> 0x1F)) <= 0) {
this->mUnk_9C.x = 0;
this->mUnk_9C.y = 0;
this->mUnk_9C.z = 0;
} else {
func_01ff9770(&this->mUnk_9C);
Vec3p_Add(this->mUnk_3C, &this->mUnk_9C, this->mUnk_3C);
}
} else {
this->mUnk_9C.x = 0;
this->mUnk_9C.y = 0;
this->mUnk_9C.z = 0;
}
} break;
default:
break;
}
switch (this->mUnk_68) {
case 0x10:
case 0x11:
case 0x12:
case 0x13:
case 0x14:
case 0x15:
case 0x1C:
case 0x21:
case 0x25:
case 0x33:
this->mUnk_7C = FLOAT_TO_Q20(1 / 2);
break;
case 0x19:
this->mUnk_7C = FLOAT_TO_Q20(0.3f);
break;
default:
this->mUnk_7C = FLOAT_TO_Q20(0.8f);
break;
}
if (this->mUnk_28->mUnk_98 != NULL) {
this->mUnk_28->mUnk_98->func_ov093_0216f76c((Vec3p *) &this->mUnk_70, this->mUnk_68);
}
break;
}
case 0x3D: {
Vec3p *pVec = this->mUnk_38;
pVec->x = 0;
pVec->y = 0;
pVec->z = 0;
break;
}
case 0x3E: {
if (this->mUnk_44 != NULL) {
this->mUnk_28->func_ov000_0208d12c();
}
this->mUnk_6C = 0x5F;
if (this->mUnk_8C != 0x1000) {
return;
}
UnkStruct_027e0ce8_00 *target = data_027e0ce8->func_01fff498(this->mUnk_8C >> 16, 0);
if (target != NULL && func_01fff584() == 'WPHL') {
func_ov034_02121de4(target);
}
break;
}
case 0x3F:
if (param1->mUnk_00 != 0x3c) {
this->mUnk_68 = data_027e09a4->func_ov000_02070554();
}
SceneIndex eScene = data_027e09a4->mSceneIndex;
if (eScene == SceneIndex_tekiya07) {
this->mUnk_68 = 0x18;
} else {
switch (*data_027e09a4->func_ov000_02070538()) {
case SceneIndex_d_water27:
if (eScene == SceneIndex_b_water) {
this->mUnk_68 = 0x18;
}
break;
case SceneIndex_b_water:
if (eScene == SceneIndex_d_water27) {
this->mUnk_68 = 0x10;
}
break;
default:
break;
}
}
if ((this->mUnk_24->mUnk_104 & 0x10) || this->mUnk_28->pItemManager->mTearsAmount == 3) {
struct {
unk32 actorId;
void *ptr;
} local_9c;
local_9c.ptr = &data_ov000_020b3000;
local_9c.actorId = ActorId_RPMT;
Actor **ppAVar12 = gActorManager->func_01fff350(&local_9c, gActorManager->mActorTable);
if (ppAVar12 == gActorManager->mUnk_08) {
struct {
unk8 mUnk_04;
unk8 pad[4];
unk32 mUnk_00;
unk8 pad2[38];
unk8 mUnk_05;
unk8 mUnk_06;
} stack;
func_ov000_02072fd0(&stack);
stack.mUnk_00 = -1;
stack.mUnk_04 = 0x6C;
stack.mUnk_05 = 0;
stack.mUnk_06 = 0;
this->mUnk_98 = data_027e09b8->func_ov000_02073388(&stack);
}
}
this->mUnk_6C = -1;
Vec3p *pVec = this->mUnk_34;
this->mUnk_70.x = pVec->x;
this->mUnk_70.y = pVec->y;
this->mUnk_70.z = pVec->z;
this->mUnk_80.x = pVec->x;
this->mUnk_80.y = pVec->y;
this->mUnk_80.z = pVec->z;
switch (this->mUnk_68) {
case 0x15:
case 0x16:
case 0x1C:
pVec = this->mUnk_34;
pVec->x += MUL_Q20(FLOAT_TO_Q20(-1.1003f), SIN2(pSinCosTable, this->mUnk_40->mUnk_00));
pVec->z += MUL_Q20(FLOAT_TO_Q20(-1.1003f), COS2(pSinCosTable, this->mUnk_40->mUnk_00));
break;
case 0x08:
case 0x09:
case 0x0A:
case 0x0B:
case 0x0C:
case 0x0D:
case 0x0E:
case 0x17:
case 0x18:
case 0x19:
case 0x1A:
case 0x1B:
case 0x1D:
case 0x1E:
case 0x1F:
case 0x20:
case 0x22:
case 0x23:
pVec = this->mUnk_34;
pVec->x += MUL_Q20(FLOAT_TO_Q20(-1.9001f), SIN2(pSinCosTable, this->mUnk_40->mUnk_00));
pVec->z += MUL_Q20(FLOAT_TO_Q20(-1.9001f), COS2(pSinCosTable, this->mUnk_40->mUnk_00));
break;
case 0x0F:
case 0x10:
case 0x11:
case 0x12:
case 0x13:
case 0x14:
case 0x21:
case 0x24:
case 0x25:
pVec = this->mUnk_34;
pVec->x += MUL_Q20(FLOAT_TO_Q20(-1.0002f), SIN2(pSinCosTable, this->mUnk_40->mUnk_00));
pVec->z += MUL_Q20(FLOAT_TO_Q20(-1.0002f), COS2(pSinCosTable, this->mUnk_40->mUnk_00));
break;
default:
// pVec = this->mUnk_34;
// pVec->x += MUL_Q20(FLOAT_TO_Q20(-1.7001f), SIN2(pSinCosTable, this->mUnk_40->mUnk_00));
// pVec->z += MUL_Q20(FLOAT_TO_Q20(-1.7001f), COS2(pSinCosTable, this->mUnk_40->mUnk_00));
break;
}
switch (this->mUnk_68) {
case 0x15:
case 0x16:
case 0x1C:
case 0x33:
case 0x3B:
if (func_ov000_02080998(this->mUnk_34)) {
break;
}
case 0x1A:
case 0x1B:
case 0x1D:
case 0x1E:
case 0x1F:
default:
UnkStruct_027e0cd8_0c *ptr = data_027e0cd8->mUnk_0c;
switch (this->mUnk_68) {
case 0x0F:
case 0x11:
case 0x13:
case 0x24: {
q20 posY = ptr->vfunc_28(this->mUnk_34, 0, 0);
if (this->mUnk_34->y >= posY) {
this->mUnk_34->y = posY;
}
break;
}
default: {
q20 posY = ptr->vfunc_28(this->mUnk_34, 0, 0);
if (this->mUnk_34->y <= posY) {
this->mUnk_34->y = posY;
}
break;
}
}
break;
}
switch (this->mUnk_68) {
case 0x15:
case 0x16:
case 0x1C:
case 0x33:
case 0x3B:
this->mUnk_7C = FLOAT_TO_Q20(0.5f);
break;
default:
this->mUnk_7C = FLOAT_TO_Q20(0.8f);
break;
}
break;
}
}
// https://decomp.me/scratch/gX5Rb
ARM void PlayerSceneChange::vfunc_10(unk32 param1, unk32 param2) {
switch (param1) {
case 0x3C:
if (this->mUnk_68 == 0x19) {
if (this->func_ov000_020914b0(0x3C, (Vec3p *) &this->mUnk_70, this->mUnk_7C)) {
this->mUnk_30->func_ov000_020921e4(0x3D);
}
Vec3p *temp_r1 = this->mUnk_34;
this->mUnk_80.x = temp_r1->x;
this->mUnk_80.y = temp_r1->y;
this->mUnk_80.z = temp_r1->z;
} else {
if (this->mUnk_6C > 0) {
this->mUnk_6C--;
} else if (this->mUnk_6C == 0 && data_027e09a4->func_ov000_02070a9c(&this->mUnk_54)) {
this->mUnk_6C = -1;
}
switch (this->mUnk_68) {
case 0x11:
case 0x13:
this->mUnk_AA += 0x200;
break;
case 0x12:
case 0x14:
this->mUnk_AA -= 0x200;
default:
break;
}
if (this->func_ov000_020914b0(0x3C, (Vec3p *) &this->mUnk_70, this->mUnk_7C)) {
s16 var_r1_2 = this->mUnk_40->mUnk_00;
bool var_r3 = true;
switch (this->mUnk_68) {
case 0x08:
case 0x0F:
case 0x15:
case 0x17:
case 0x1B:
case 0x1F:
case 0x24:
case 0x33:
var_r1_2 = -0x8000;
break;
case 0x11:
case 0x12:
case 0x13:
case 0x14:
var_r3 = false;
if (this->mUnk_AC) {
// var_r1_2 = this->mUnk_A8;
this->mUnk_AC = false;
this->mUnk_40->mUnk_00 = this->mUnk_A8;
}
break;
case 0x09:
case 0x10:
case 0x16:
case 0x18:
case 0x1C:
case 0x20:
case 0x21:
case 0x25:
case 0x3B:
var_r1_2 = 0;
break;
case 0x22:
var_r1_2 = -0x4000;
break;
case 0x23:
var_r1_2 = 0x4000;
break;
default:
break;
}
if (var_r3) {
var_r1_2 = this->func_ov112_02184bbc(0);
}
// s16 iVar3 = var_r1_2 >> 4;
// q20 uVar6 = gSinCosTable[iVar3 * 2] * 0x2000;
// q20 uVar5 = gSinCosTable[iVar3 * 2 + 1] * 0x2000;
// q20 iVar2 = (gSinCosTable[iVar3 * 2 + 1] >> 0x13) + (0xfffff7ff < uVar5);
// this->mUnk_70.x +=
// (((uVar6 + 0x800) >> 0xc) | (gSinCosTable[iVar3 * 2] >> 0x13) + (0xfffff7ff < uVar6)) * 0x100000;
// this->mUnk_70.z += (((uVar5 + 0x800) >> 0xc) | iVar2 << 0x14);
s32 idx = (((s32) var_r1_2) >> 4) << 1;
s32 sin16 = (s16) data_0203feb0[idx];
s32 cos16 = (s16) data_0203feb0[idx + 1];
this->mUnk_70.x += (((sin16 << 13) + 0x800) >> 12);
this->mUnk_70.z += (((cos16 << 13) + 0x800) >> 12);
}
switch (this->mUnk_68) {
case 0x21:
case 0x25: {
s16 value = this->func_ov112_02184bbc(0);
q4 sin = SIN2(data_0203feb0, value);
q4 cos = COS2(data_0203feb0, value);
this->mUnk_70.x += MUL_Q20(sin, 0x19A);
this->mUnk_70.z += MUL_Q20(cos, 0x19A);
break;
}
case 0x10:
case 0x11:
case 0x12:
case 0x13:
case 0x14:
if (this->mUnk_AC && this->mUnk_30->mUnk_70 >= 8) {
this->mUnk_AC = false;
}
if (!this->mUnk_AC) {
func_01ff930c(this->mUnk_40, this->mUnk_AA, 0x200);
Vec3p *temp_r2_4 = this->mUnk_34;
this->mUnk_70.x = temp_r2_4->x;
this->mUnk_70.y = temp_r2_4->y;
this->mUnk_70.z = temp_r2_4->z;
q4 sin = SIN2(data_0203feb0, this->mUnk_40->mUnk_00);
q4 cos = COS2(data_0203feb0, this->mUnk_40->mUnk_00);
this->mUnk_70.x += MUL_Q20(sin, 0x19A);
this->mUnk_70.z += MUL_Q20(cos, 0x19A);
}
break;
default:
break;
}
switch (this->mUnk_68) {
case 0x11:
case 0x12:
case 0x13:
case 0x14:
if (this->mUnk_30->mUnk_70 < 0x0A) {
Vec3p_Add(this->mUnk_3C, &this->mUnk_9C, this->mUnk_3C);
}
break;
default:
break;
}
}
switch (this->mUnk_68) {
case 0x08:
case 0x09:
case 0x10:
case 0x12:
case 0x14:
case 0x21:
case 0x25:
this->mUnk_2c->mUnk_9C = this->mUnk_34->y + 0xFFFFFCCD;
break;
default:
this->mUnk_2c->mUnk_9C = this->mUnk_34->y;
break;
}
break;
case 0x3D: {
func_01ff930c(this->mUnk_40, 0, 0xE39);
Vec3p *temp_r2_8 = this->mUnk_34;
this->mUnk_80.x = temp_r2_8->x;
this->mUnk_80.y = temp_r2_8->y;
this->mUnk_80.z = temp_r2_8->z;
if (this->mUnk_30->mUnk_70 < 0x14) {
return;
}
this->mUnk_30->func_ov000_020921e4(0x3E);
break;
}
case 0x3E:
if (this->mUnk_6C > 0) {
this->mUnk_6C--;
if (this->mUnk_6C < 0x37) {
this->mUnk_28->mUnk_40 |= 0x02;
break;
}
func_01ff930c(this->mUnk_40, 0, 0xE39);
this->mUnk_38->y = 0x66;
} else if (this->mUnk_6C == 0 && data_027e09a4->func_ov000_02072154(&this->mUnk_54, this->mUnk_68)) {
this->mUnk_6C = -1;
}
break;
case 0x3F: {
switch (this->mUnk_68) {
case 0x08:
case 0x09:
case 0x10:
case 0x12:
case 0x14:
case 0x21:
case 0x22:
case 0x23:
case 0x25:
break;
default:
this->mUnk_2c->mUnk_9C = this->mUnk_34->y;
break;
}
bool temp_r5_2 = this->func_ov000_020914b0(0x3F, (Vec3p *) &this->mUnk_70, this->mUnk_7C);
switch (this->mUnk_68) {
case 0x0F:
case 0x11:
case 0x13:
case 0x24: {
UnkStruct_027e0cd8_0c *temp_r0_13 = data_027e0cd8->mUnk_0c;
q20 temp_r0_14 = temp_r0_13->vfunc_28(this->mUnk_34, 0, 0);
Vec3p *temp_r2_9 = this->mUnk_34;
if (temp_r2_9->y < temp_r0_14) {
temp_r2_9->y = temp_r0_14;
}
break;
}
default:
break;
}
if (this->mUnk_AD) {
UnkStruct_ov000_0208f820_24 *temp_r1_6 = this->mUnk_24;
temp_r1_6->mUnk_104 &= 0xFFFB;
temp_r1_6->mUnk_FE = 3;
this->mUnk_30->func_ov000_020921e4(1);
} else if (temp_r5_2) {
if (!this->func_ov000_02091e68(param2) && data_02049b18.mUnk_06.mTouchControl.mState.touch) {
func_ov000_0205ca74(this->mUnk_98);
this->mUnk_98 = -1;
q4 sin = SIN2(data_0203feb0, this->mUnk_40->mUnk_00);
q4 cos = COS2(data_0203feb0, this->mUnk_40->mUnk_00);
this->mUnk_70.x += MUL_Q20(sin, FLOAT_TO_Q20(2.0f));
this->mUnk_70.z += MUL_Q20(cos, FLOAT_TO_Q20(2.0f));
this->mUnk_AD = true;
return;
} else {
this->mUnk_30->func_ov000_020921e4(0);
}
}
break;
}
default:
break;
}
}
ARM bool PlayerSceneChange::vfunc_1c(Vec3p *param1) {
if (data_027e0cdc->func_ov000_02082a28(1) == 0) {
switch (this->mUnk_30->mUnk_68) {
case 0x3C:
case 0x3D:
case 0x3E:
case 0x3F: {
Vec3p unk_80;
unk_80.x = this->mUnk_80.x;
unk_80.y = this->mUnk_80.y;
unk_80.z = this->mUnk_80.z;
param1->x = unk_80.x;
param1->y = unk_80.y;
param1->z = unk_80.z;
return true;
}
default:
break;
}
}
return this->UnkStruct_ov000_0208f820::vfunc_1c(param1);
}
@@ -0,0 +1,91 @@
#include "Actor/ActorManager.hpp"
#include "Player/PlayerSceneChange.hpp"
#include "Unknown/UnkStruct_027e0cdc.hpp"
extern "C" void func_ov000_0208ba10(void *, void *, unk32);
extern "C" void func_ov000_02087ee8();
extern "C" void func_ov000_0205d65c(void *, Vec3p *, Vec3p *, u32);
extern "C" void func_ov000_0208cac8(UnkStruct_ov000_0208f820_28 *, Vec3p *, unk32);
extern "C" unk32 func_ov000_0208dc98(unk32);
extern "C" void func_ov000_020830a4(unk32, unk32, unk32, unk32, unk32, unk32);
extern "C" unk32 func_ov000_02093718(UnkStruct_ov000_0208f820_30 *);
extern "C" unk32 func_ov000_0209378c(UnkStruct_ov000_0208f820_30 *);
extern "C" void func_ov000_020830d4(unk32, u16, unk32, unk32, unk32);
ARM PlayerSceneChange2::PlayerSceneChange2() {
this->mUnk_54 = *this->mUnk_34;
this->mUnk_60 = *this->mUnk_34;
}
// non-matching
ARM void PlayerSceneChange2::vfunc_0c(UnkStruct_PlayerGet_vfunc_0c_param1 *param1) {
s16 auStack_18[12];
s16 auStack_2c;
Vec3p *pVVar1 = this->mUnk_38;
pVVar1->x = 0;
pVVar1->y = 0;
pVVar1->z = 0;
this->mUnk_2c->mUnk_58 = 0;
func_ov000_0208ba10(auStack_18, &this->mUnk_24->mUnk_94, 0);
if (this->mUnk_44[0] != 0) {
this->mUnk_28->func_ov000_0208cf20(0x1400, 0);
}
void **piVar3 = this->mUnk_24->mUnk_78;
if ((piVar3 != NULL && *piVar3 != NULL) ? 1 : 0) {
func_ov000_02087ee8();
}
switch (param1->mUnk_04) {
case 0x40:
case 0x41:
this->mUnk_54.x = this->mUnk_34->x;
this->mUnk_54.y = this->mUnk_34->y;
this->mUnk_54.z = this->mUnk_34->z;
this->mUnk_60 = param1->mUnk_10;
{
u16 test = this->mUnk_40->mUnk_00;
func_ov000_0205d65c(&auStack_2c, this->mUnk_34, &this->mUnk_60, test);
}
this->mUnk_40->mUnk_00 = auStack_2c;
break;
case 0x42:
case 0x43:
this->mUnk_54.x = this->mUnk_34->x;
this->mUnk_54.y = this->mUnk_34->y;
this->mUnk_54.z = this->mUnk_34->z;
this->mUnk_60 = param1->mUnk_10;
func_ov000_0205d65c(&auStack_2c, &this->mUnk_60, (Vec3p *) &this->mUnk_54, this->mUnk_40->mUnk_00);
this->mUnk_40->mUnk_00 = auStack_2c;
func_ov000_0208cac8(this->mUnk_28, &this->mUnk_60, 0);
func_ov000_020830a4(this->mUnk_48, 0, this->mUnk_28->mUnk_48, 1, 1, func_ov000_0208dc98(this->mUnk_28->mUnk_48));
func_ov000_020830d4(this->mUnk_48, this->mUnk_40->mUnk_00, func_ov000_02093718(this->mUnk_30),
func_ov000_0209378c(this->mUnk_30), 0);
break;
case 0x44:
func_ov000_0208cac8(this->mUnk_28, &this->mUnk_60, 0);
func_ov000_0205d65c(&auStack_2c, this->mUnk_34, (Vec3p *) &this->mUnk_54, this->mUnk_40->mUnk_00);
this->mUnk_40->mUnk_00 = auStack_2c;
this->mUnk_2c->mUnk_26 = 0;
break;
case 0x45:
this->mUnk_2c->mUnk_26 = 0;
break;
default:
break;
}
}
ARM void PlayerSceneChange2::vfunc_10(unk32 param1, unk32 param2) {}
ARM PlayerSceneChange2::~PlayerSceneChange2() {}