Match ActorBomb (#158)

* actor prog from overlay 0

* fix build issues

* ActorBomb OK for eur

* ActorBomb OK for eur1, usa and jp

* fix regressions
This commit is contained in:
Yanis
2026-10-08 03:35:12 +02:00
committed by GitHub
parent 2c723299b7
commit 89dedbb3d1
86 changed files with 746 additions and 458 deletions
+4 -6
View File
@@ -33,16 +33,14 @@ Actor::Actor() {
Actor::~Actor() {}
// non-matching (equivalent)
void Actor::func_ov000_0209848c(ActorProfile *param1) {
Cylinder *temp_r3 = &param1->mUnk_04;
unk32 unk_1c = param1->mUnk_1C;
unk32 temp_r2 = param1->mUnk_1C;
this->mpProfile = param1;
this->mUnk_34 = &param1->mUnk_04;
this->mUnk_30 = &param1->mUnk_04;
this->mYOffset = unk_1c;
this->mUnk_34 = temp_r3;
this->mUnk_30 = temp_r3;
this->mYOffset = temp_r2;
}
bool Actor::Init(unk32 param1) {
+3 -2
View File
@@ -28,11 +28,12 @@ ActorUnkSWTM::~ActorUnkSWTM() {
}
}
// https://decomp.me/scratch/qkP8m
bool ActorUnkSWTM::Init(unk32 param1) {
this->mUnk_9E = this->mUnk_5C.mUnk_1A[1];
#pragma unused(param1)
this->mUnk_98 = this->mUnk_5C.mParams[2];
this->mUnk_A4 = this->mUnk_5C.mParams[1] * 30;
this->mUnk_9E = this->mUnk_5C.mUnk_1A[1];
this->mUnk_A0 = this->mUnk_9E + this->mUnk_5C.mParams[0];
this->mUnk_A2 = this->mUnk_5C.mUnk_18[1];
this->mUnk_9C = this->mUnk_9E;
+11 -11
View File
@@ -17,14 +17,14 @@ MapObject::MapObject() {
this->mState = MapObjState_None;
this->mFlags[0] = 0;
this->mUnk_20.Init();
*(u32 *) &this->mUnk_38 = 0;
this->mRef.Reset();
UnkStruct_ov000_020b5d34 *ptr1 = &data_ov000_020b5d34;
this->mpProfile = ptr1->mpProfile;
UnkStruct_ov000_020b5d34_00 *ptr2 = ptr1->mUnk_00;
*(u32 *) &this->mUnk_38 = *ptr2->mUnk_00;
this->mRef = *ptr2->mUnk_00;
VecFx32 *ptr = ptr2->mUnk_08;
this->mPos.x = ptr->x;
@@ -144,24 +144,24 @@ void MapObject::func_ov000_0209d2f0(unk32 param1, unk32 param2, Vec2bCpp *param3
UnkStruct_027e0cd8_0C_Base *temp_r5 = data_027e0cd8->mUnk_0C;
Vec2bCpp sp0(0, 0);
sp0.x = this->mUnk_3A.x;
sp0.x = this->mRef.unk_02.x;
s32 tempX = param3->x;
tempX += this->mUnk_3A.x;
tempX += this->mRef.unk_02.x;
if (this->mUnk_3A.x < tempX) {
if (this->mRef.unk_02.x < tempX) {
do {
sp0.y = this->mUnk_3A.y;
sp0.y = this->mRef.unk_02.y;
s32 tempY = param3->y;
tempY += this->mUnk_3A.y;
tempY += this->mRef.unk_02.y;
if (this->mUnk_3A.y < tempY) {
if (this->mRef.unk_02.y < tempY) {
do {
temp_r5->func_ov000_020801b0(&sp0, param1, param2);
} while (++sp0.y < param3->y + this->mUnk_3A.y);
} while (++sp0.y < param3->y + this->mRef.unk_02.y);
}
} while (++sp0.x < param3->x + this->mUnk_3A.x);
} while (++sp0.x < param3->x + this->mRef.unk_02.x);
}
}
@@ -208,7 +208,7 @@ void MapObject::func_ov000_0209d434(s8 *param1, UnkStruct_ov019_020d24c8_28_258_
return;
}
if (data_027e0998->vfunc_00(&this->mPos, &sp10, (ActorRef *) &this->mUnk_38)) {
if (data_027e0998->vfunc_00(&this->mPos, &sp10, (ActorRef *) &this->mRef)) { //! TODO: ref conflicts
spC.mUnk_06 = 0x00;
MI_CpuFill32(0, &spC, sizeof(spC));
spC.mUnk_05 = -1;
@@ -39,7 +39,7 @@ bool MapObjectMiniBlocks::Init(void) {
u8 uVar6;
if (this->mUnk_20.mParams[1] != MiniBlocksVariant_BLKF) {
Vec2bCpp vec(this->mUnk_3A.x, this->mUnk_3A.y);
Vec2bCpp vec(this->mRef.unk_02.x, this->mRef.unk_02.y);
this->mPos.y = pUnkStruct_027e0cd8_0C->func_01ffedf4(&vec);
}
@@ -28,7 +28,7 @@ bool MapObjectPot_Base::SetState(MapObjState state, unk32 param2) {
case MapObjPot_BaseState_1:
this->vfunc_48();
if (this->vfunc_40()) {
func_ov000_020a14e4(this->mUnk_38, &this->mPos);
func_ov000_020a14e4(this->mRef.unk_00, &this->mPos);
} else {
if (this->vfunc_4C()) {
unk32 val = this->vfunc_54();
@@ -52,29 +52,18 @@ void MapObjectSwitchStep_40::func_ov000_0209dde0(void) {
this->func_ov000_02057c38(6, 2);
}
void MapObjectSwitchStep_40::vfunc_1C(UnkSystem4_vfunc_1C *param1) {
unk32 iVar1 = param1->mUnk_04[1];
if (iVar1 != 0) {
iVar1 += 0x40;
} else {
iVar1 = 0;
}
void MapObjectSwitchStep_40::vfunc_1C(G3d_RenderState *param1) {
G3d_NameList *iVar1 = G3d_GetBoneList(param1->renderObj->model);
uint uVar2 = iVar1 != NULL ? func_0200f218(iVar1, data_ov000_020af560) : -1;
unk32 uVar2;
if (iVar1 == 0) {
uVar2 = -1;
} else {
uVar2 = func_0200f218(iVar1, data_ov000_020af560);
}
if (param1->mUnk_00[1] == uVar2) {
if (param1->currentCmd[1] == uVar2) {
if (this->mUnk_62) {
param1->mUnk_B4->mUnk_00 &= ~0x04;
param1->mUnk_B4->mUnk_50 = this->mUnk_60;
param1->mUnk_B4->mUnk_4C = 0;
param1->mUnk_B4->mUnk_54 = 0;
} else {
param1->mUnk_B8[0] = 0;
*param1->visibilityPtr = false;
}
}
}
@@ -205,7 +194,7 @@ void MapObjectSwitchStep::vfunc_18(s8 *param1) {
ActorRef sp4;
//! TODO: fake match?
sp4 = *(ActorRef *) &this->mUnk_38;
sp4 = *(ActorRef *) &this->mRef;
if (data_027e0998->vfunc_00(&this->mPos, &sp10, &sp4)) {
sp8.mUnk_06 = 0x00;
@@ -159,7 +159,7 @@ void MapObjectManager::func_ov017_020c033c(unk32 *param1, MapObjectManager *this
sp16.y = param2->y;
if (pMapObj->func_ov000_0209d144(&sp16, param3, temp_r0)) {
*param1 = *(s32 *) &pMapObj->mUnk_38;
*param1 = pMapObj->mRef.Get32();
return;
}
}
@@ -51,7 +51,7 @@ bool UnkStruct_027e0998::vfunc_00(VecFx32 *pPos, Vec2s *param2, ActorRef *param3
return this->func_ov024_020c727c(param2, param3);
case 4:
if (data_027e09a4->IsTrain()) {
u32 value = *(u32 *) param3;
u32 value = param3->Get32();
// position? param3 could be a Vec2us
u16 stack[4];
+1 -1
View File
@@ -29,7 +29,7 @@ ActorProfileBlast::ActorProfileBlast() :
}
// non-matching
bool ActorBlast_E8::vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 *param2, unk32 param3) {}
bool ActorBlast_E8::vfunc_0C(MapObjRef ref, UnkStruct_ov031_020e54d4 *param2, const VecFx32 *param3, const VecFx32 *param4) {}
ActorBlast::ActorBlast() :
mUnk_94(FX_F32_TO_FX32(0.625f)),
+308 -82
View File
@@ -7,6 +7,7 @@
#include "MainGame/AdventureMode.hpp"
#include "Map/MapObjectId.hpp"
#include "MapObject/MapObjectBombFlower.hpp"
#include "MapObject/MapObjectManager.hpp"
#include "MapObject/MapObjectProfile.hpp"
#include "System/SysNew.hpp"
#include "Unknown/UnkStruct_027e09a8.hpp"
@@ -17,6 +18,13 @@
#include "Unknown/UnkStruct_027e0d38.hpp"
#include "Unknown/UnkStruct_027e0d8c.hpp"
#include "Unknown/UnkStruct_ov000_020b5d34.hpp"
#include "global.h"
#include "math.hpp"
#include "nitro/fx.h"
#include "nitro/math.h"
#include "nns/g3d/sbc.h"
#pragma readonly_strings on
struct UnkStruct_ov031_020e5d18_00 {
/* 00 */ Actor *mUnk_00;
@@ -26,13 +34,28 @@ struct UnkStruct_ov031_020e5d18_00 {
extern VecFx32 data_027e07d4;
extern unk32 data_ov000_020aecf8;
extern VecFx32 data_ov031_02110a10;
extern VecFx32 data_ov031_02110a28;
extern char data_ov031_02110a50;
extern char data_ov031_02110a60;
extern char data_ov031_02110a70;
static ActorUnkZLSL_AnimationTag data_ov031_02112be8 = {.index = 0, .name = "bomb_clanim", .unknown = 0};
static const VecFx32 data_ov031_02110a28[] = {
{0xCD, 0xD9A, 0x00},
{0xCD, 0xC00, 0x00},
};
static const VecFx32 data_ov031_02110a10[] = {
{0x00, 0xC00, 0x00},
{0x00, 0xB33, 0x00},
};
static const char data_ov031_021109fc[20] = "Fbomb_h";
static const char data_ov031_02110a40[][16] = {
"Fbomb",
"Fbomb_clanim",
"bomb",
"bomb_clanim",
};
static ActorUnkZLSL_AnimationTag data_ov031_02112be8 = {.index = 0, .name = "bomb_clanim", .unknown = 0};
static PTMF<ActorBomb> data_ov031_02112c00[ActorBombState_Max] = {
&ActorBomb::func_ov031_020e1da0, // ActorUnkBOMBState_0
&ActorBomb::func_ov031_020e1ed8, // ActorUnkBOMBState_1
@@ -66,7 +89,7 @@ ActorProfileBomb::ActorProfileBomb() :
G3d_Model *ActorBomb::func_ov031_020e1540(u16 param1) {
if (param1 == 0x0) {
return data_027e0ce0->mUnk_1C->func_ov000_0208ed30(0x0, 0x1, &data_ov031_02110a60);
return data_027e0ce0->mUnk_1C->func_ov000_0208ed30(0x0, 0x1, (char *) data_ov031_02110a40[2]);
}
return G3d_GetModelPtr(
@@ -75,19 +98,24 @@ G3d_Model *ActorBomb::func_ov031_020e1540(u16 param1) {
UnkStruct_ov000_02058a84 *ActorBomb::func_ov031_020e15d0(u16 param1) {
if (param1 == 0x0) {
return data_027e0ce0->mUnk_1C->func_ov000_0208ee94(0x0, 0x1, &data_ov031_02110a70, 0x1);
return data_027e0ce0->mUnk_1C->func_ov000_0208ee94(0x0, 0x1, (char *) data_ov031_02110a40[3], 0x1);
}
return ((MapObjectProfileBombFlower *) data_ov000_020b5d34.GetProfileFromId(MapObjectId_BombFlower))
->mUnk_20.func_ov000_02058a84(0x1, &data_ov031_02110a50);
MapObjectProfileBombFlower *pProfile =
((MapObjectProfileBombFlower *) data_ov000_020b5d34.GetProfileFromId(MapObjectId_BombFlower));
return pProfile->mUnk_20.func_ov000_02058a84(0x1, (char *) data_ov031_02110a40[1]);
}
// non-matching
// seems not to be in the actor
// use a pattern like this->mUnk_04->mUnk_04
// so it's not ActorBomb and the class has at
// least 0xB3 bytes so it does not seem to be
// one of the auxiliary classes
void ActorBomb::func_ov031_020e1634() {}
void ActorBomb::func_ov031_020e1634(G3d_RenderState *param1) {
G3d_NameList *iVar1 = G3d_GetBoneList(param1->renderObj->model);
uint uVar2 = iVar1 != NULL ? func_0200f218(iVar1, data_ov031_021109fc) : -1;
uint uVar3 = param1->flag & 0x04 ? param1->currentBoneId : -1;
if (uVar2 == uVar3) {
*param1->visibilityPtr = false;
}
}
ActorBomb::ActorBomb() :
mUnk_094(this->func_ov031_020e1540(this->mUnk_5C.mParams[0])),
@@ -112,10 +140,10 @@ ActorBomb::ActorBomb() :
{
if (this->mUnk_5C.mParams[0] != 0x1) {
this->mUnk_1EF = false;
this->mUnk_17C = &data_ov031_02110a28;
this->mUnk_17C = (VecFx32 *) &data_ov031_02110a28;
} else {
func_0200b578(&this->mUnk_094.mRenderObj, this->func_ov031_020e1634, 0x0, 0x2, 0x2);
this->mUnk_17C = &data_ov031_02110a10;
func_0200b578(&this->mUnk_094.mRenderObj, ActorBomb::func_ov031_020e1634, 0x0, 0x2, 0x2);
this->mUnk_17C = (VecFx32 *) &data_ov031_02110a10;
this->mUnk_1EF = true;
}
this->mUnk_164[0].mUnk_04 = 0x810;
@@ -165,14 +193,8 @@ void ActorBomb::func_ov031_020e1908() {
this->mUnk_1F0 = true;
}
// non-matching
void ActorBomb::func_ov031_020e1920(VecFx32 *param1) {
fx32 y = param1->y;
fx32 z = param1->z;
fx32 x = param1->x;
this->mUnk_1CC.x = x;
this->mUnk_1CC.y = y;
this->mUnk_1CC.z = z;
void ActorBomb::func_ov031_020e1920(const VecFx32 *param1) {
VecFx32_Copy(param1, &this->mUnk_1CC);
}
void ActorBomb::func_ov031_020e193c() {
@@ -232,26 +254,30 @@ void ActorBomb::Update() {
}
void ActorBomb::vfunc_24() {
if (this->mState != ActorBombState_1) {
return;
if (this->mState == ActorBombState_1) {
this->func_ov031_020e1ed8();
this->func_ov031_020e193c();
}
this->func_ov031_020e1ed8();
this->func_ov031_020e193c();
}
// non-matching
void ActorBomb::func_ov031_020e1b1c() {
UnkStruct_ov000_02058a84 *param1 = this->func_ov031_020e15d0(this->mUnk_5C.mParams[0]);
bool var_r3;
bool param3 = !(param1->mUnk_6 & 0x2);
this->mUnk_0F4.func_ov000_020577a4(param1, 0x0, param3);
// weird but less weird than `func_ov019_020d0c90`
switch (param1->mUnk_06 & 2) {
default:
var_r3 = false;
break;
case 0:
var_r3 = true;
break;
}
this->mUnk_0F4.func_ov000_020577a4(param1, 0, var_r3);
this->mUnk_0F4.mUnk_04.mUnk_04 = 0x1000;
this->mUnk_0F4.mUnk_04.mUnk_00 = data_ov031_02112be8.unknown;
this->mUnk_094.func_ov000_02057cf4();
this->mUnk_094.func_ov000_02057c98(&this->mUnk_0F4);
}
@@ -523,15 +549,16 @@ void ActorBomb::vfunc_2C(Actor_vfunc_30 *param1) {
data_027e09b4->func_ov017_020c08c4(&sp0C, 0x59A, 0x59A, 0x1F, 0x0, 0x1);
}
// non-matching (switch case)
void ActorBomb::func_ov031_020e238c() {
this->Actor::func_ov000_020989e0();
if (!(this->mUnk_134.mUnk_08 & 0x3FFFF)) {
return;
}
u16 value = this->mUnk_134.mUnk_1C;
switch ((s32) value) {
switch (this->mUnk_134.mUnk_1C) {
case 14:
break;
case 15:
this->mUnk_134.mUnk_04 &= ~0x8000;
data_027e0d8c->func_ov093_021661c0(this->mRef);
@@ -540,6 +567,7 @@ void ActorBomb::func_ov031_020e238c() {
if (!data_027e0d38->func_ov031_020d9c04(0x1, 0x0, 0x0)) {
break;
}
this->SetState(ActorBombState_4);
break;
case 0:
@@ -655,76 +683,108 @@ void ActorBomb::func_ov031_020e2780(VecFx32 *param1) {
this->mVel.z = ROUND_FX32(this->mVel.z * FX_F32_TO_FX32(0.75f));
}
// non-matching
fx32 ActorBomb::func_ov031_020e2820(UnkStruct_ov031_Items_00 *param1) {
UnkStruct_ov031_020e5d18_00 sp60;
sp60.mUnk_00 = NULL;
VecFx32 sp54 = this->mPos;
VecFx32 sp48 = this->mPrevPos;
VecFx32 sp54;
VecFx32 sp48;
VecFx32 sp3C;
VecFx32 sp30;
VecFx32 sp24;
VecFx32 sp18;
VecFx32 sp0C;
fx32 var_r11;
fx32 var_r8;
var_r11 = 0;
sp60.mUnk_00 = NULL;
sp54 = this->mPos;
sp48 = this->mPrevPos;
func_01ffb714(&sp54, &sp48, &sp3C);
fx32 sp3CLength = VecFx32_Length(&sp3C);
var_r8 = VecFx32_Length(&sp3C);
VecFx32 sp0C = sp48;
VecFx32 sp30 = sp0C;
VecFx32 sp24 = sp0C;
VecFx32 sp18 = sp3C;
sp0C = sp48;
sp30 = sp0C;
sp24 = sp0C;
sp18 = sp3C;
if (VecFx32_TryNormalize(&sp18) != 0x0) {
while (sp3CLength != FX_F32_TO_FX32(0.0f)) {
if (sp3CLength > FX_F32_TO_FX32(0.5f)) {
while (var_r8 != FX_F32_TO_FX32(0.0f)) {
if (var_r8 > FX_F32_TO_FX32(0.5f)) {
func_01ffb974(FX_F32_TO_FX32(0.5f), &sp18, &sp24, &sp24);
sp3CLength -= FX_F32_TO_FX32(0.5f);
var_r8 -= FX_F32_TO_FX32(0.5f);
} else {
func_01ffb974(sp3CLength, &sp18, &sp24, &sp24);
sp3CLength = FX_F32_TO_FX32(0.0f);
func_01ffb974(var_r8, &sp18, &sp24, &sp24);
var_r8 = FX_F32_TO_FX32(0.0f);
}
func_01ffe6c4(&sp60.mUnk_00, this->mRef, &sp24, &sp30, (s16) this->mUnk_44, &this->mPos, param1);
if (!this->Actor::func_ov000_0207e294(this->mUnk_30)) {
VecFx32_Copy(&sp24, &sp30);
//! TODO: fake match?
var_r11 = ((Actor *) &sp60)->func_ov000_0207e294(this->mUnk_30);
if (var_r11 != 0) {
break;
}
VecFx32_Copy(&sp24, &sp30);
}
}
return sp3CLength;
return var_r11;
}
// non-matching
fx32 ActorBomb::func_ov031_020e295c(UnkStruct_ov031_Items_00 *param1) {
UnkStruct_ov031_020e5d18_00 sp60;
sp60.mUnk_00 = NULL;
VecFx32 sp54 = this->mPos;
VecFx32 sp48 = this->mPrevPos;
VecFx32 sp54;
VecFx32 sp48;
VecFx32 sp3C;
VecFx32 sp30;
VecFx32 sp24;
VecFx32 sp18;
VecFx32 sp0C;
fx32 var_r11;
fx32 var_r8;
var_r11 = 0;
sp60.mUnk_00 = NULL;
sp54 = this->mPos;
sp48 = this->mPrevPos;
func_01ffb714(&sp54, &sp48, &sp3C);
fx32 sp3CLength = VecFx32_Length(&sp3C);
var_r8 = VecFx32_Length(&sp3C);
VecFx32 sp0C = sp48;
VecFx32 sp30 = sp0C;
VecFx32 sp24 = sp0C;
VecFx32 sp18 = sp3C;
sp0C = sp48;
sp30 = sp0C;
sp24 = sp0C;
sp18 = sp3C;
if (VecFx32_TryNormalize(&sp18) != 0x0) {
while (sp3CLength != FX_F32_TO_FX32(0.0f)) {
if (sp3CLength > FX_F32_TO_FX32(0.5f)) {
while (var_r8 != FX_F32_TO_FX32(0.0f)) {
if (var_r8 > FX_F32_TO_FX32(0.5f)) {
func_01ffb974(FX_F32_TO_FX32(0.5f), &sp18, &sp24, &sp24);
sp3CLength -= FX_F32_TO_FX32(0.5f);
var_r8 -= FX_F32_TO_FX32(0.5f);
} else {
func_01ffb974(sp3CLength, &sp18, &sp24, &sp24);
sp3CLength = FX_F32_TO_FX32(0.0f);
func_01ffb974(var_r8, &sp18, &sp24, &sp24);
var_r8 = FX_F32_TO_FX32(0.0f);
}
func_01ffe6c4(&sp60.mUnk_00, this->mRef, &sp24, &sp30, (s16) this->mUnk_44, &this->mPos, param1);
if (!this->Actor::func_ov000_0207df88(this->mUnk_30, 0x10)) {
VecFx32_Copy(&sp24, &sp30);
//! TODO: fake match?
var_r11 = ((Actor *) &sp60)->func_ov000_0207df88(this->mUnk_30, 0x10);
if (var_r11 != 0) {
break;
}
VecFx32_Copy(&sp24, &sp30);
}
}
return sp3CLength;
return var_r11;
}
void ActorBomb::func_ov031_020e2a9c() {
@@ -821,18 +881,182 @@ ActorBomb_180::~ActorBomb_180() {
this->mUnk_08 = NULL;
}
// non-matching (wrong instruction in condition)
bool ActorBomb_180::vfunc_08(const UnkStruct_ov031_020f3310 *param1, unk32 param2) {
if (((((u32) param1->mUnk_04->mUnk_24[param1->mUnk_00->mUnk_06]) >> 0x19) & 1) == 1) {
if (((param1->mUnk_04->mUnk_24[param1->mUnk_00->mUnk_06] >> 0x19) & 0x01) == 0x01) {
return false;
}
VecFx16_Copy2VecFx32(&param1->mUnk_08, &this->mUnk_0C);
this->mUnk_0C.y = param1->mUnk_08.y;
this->mUnk_0C.z = param1->mUnk_08.z;
this->mUnk_0C.x = param1->mUnk_08.x;
return this->UnkStruct_ov031_Items_00::vfunc_08(param1, param2);
}
// non-matching
bool ActorBomb_180::vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 *param2, unk32 param3) {}
bool ActorBomb_180::vfunc_0C(MapObjRef ref, UnkStruct_ov031_020e54d4 *param2, const VecFx32 *param3, const VecFx32 *param4) {
MapObjRef sp54;
VecFx32 sp24;
VecFx32 sp18;
VecFx32 spC;
Vec2bCpp sp0;
s32 var_r0;
s32 var_r0_2;
s32 var_r0_3;
s32 var_r1;
s32 var_r2;
s32 var_r3;
s32 var_r4;
s32 var_r5;
if (((param2->mUnk_08 >> 0x19) & 0x01) == 0x01) {
return false;
}
var_r4 = 0;
if (ref.unk_00_u16 == 0x1000) {
sp54 = ref;
sp0 = sp54.GetUnk02();
MapObject *temp_r0 = gpMapObjManager->func_01fff498(sp0);
if (temp_r0 != NULL) {
switch (temp_r0->GetMapObjectId()) {
case MapObjectId_TMLV:
case MapObjectId_SWHT:
case MapObjectId_MLVC:
case MapObjectId_LVVT:
case MapObjectId_FRWL:
case MapObjectId_LVCM: {
ActorBlast::func_ov031_020e3b9c(this->mUnk_08, 0, 0);
this->mUnk_08->Kill();
return false;
}
case MapObjectId_BombFlower:
if (temp_r0->mState == 0) {
ActorBlast::func_ov031_020e3b9c(this->mUnk_08, 0, 0);
this->mUnk_08->Kill();
return false;
}
break;
case MapObjectId_FLSP:
var_r4 = 1;
break;
default:
break;
}
}
}
var_r5 = 0;
switch (param2->vfunc_00()) {
case 0:
case 1:
func_01ffb714(&this->mUnk_08->mPos, param4, &sp24);
sp24.y = 0;
break;
case 2:
param2->vfunc_14(&spC);
VecFx32_Add(&spC, param4, &spC);
VecFx32_Add(&sp18, param4, &sp18);
var_r0 = 0;
if (param3->x > spC.x && param3->x < sp18.x) {
var_r0 = 1;
}
var_r1 = 0;
if (param3->z > spC.z && param3->z < sp18.z) {
var_r1 = 1;
}
if (var_r4 != 0) {
if (var_r0 != 0 && var_r1 != 0) {
ActorBlast::func_ov031_020e3b9c(this->mUnk_08, 0, 0);
this->mUnk_08->Kill();
return false;
}
}
if (var_r0 != 0 && var_r1 != 0) {
if (param2->mUnk_04 & 0x01) {
sp24.x = 0;
sp24.y = 0x1000;
sp24.z = 0;
var_r5 = 1;
} else {
func_01ffb714(&this->mUnk_08->mPos, param4, &sp24);
var_r2 = ABS2(sp24.z);
var_r3 = ABS2(sp24.x);
if (var_r3 > var_r2) {
if (sp24.x > 0) {
sp24.x = 0x1000;
sp24.y = 0;
sp24.z = 0;
} else {
sp24.x = -0x1000;
sp24.y = 0;
sp24.z = 0;
}
} else if (sp24.z > 0) {
sp24.x = 0;
sp24.y = 0;
sp24.z = 0x1000;
} else {
sp24.x = 0;
sp24.y = 0;
sp24.z = -0x1000;
}
}
} else if (var_r1 != 0) {
var_r0_3 = param3->z <= param4->z ? -0x1000 : 0x1000;
sp24.x = 0;
sp24.y = 0;
sp24.z = var_r0_3;
} else {
if (param3->x <= param4->x) {
var_r0_2 = -0x1000;
} else {
var_r0_2 = 0x1000;
}
sp24.x = var_r0_2;
sp24.y = 0;
sp24.z = 0;
}
break;
default:
break;
}
if (VecFx32_IsCleared(&this->mUnk_0C)) {
this->mUnk_0C.x = sp24.x;
this->mUnk_0C.y = sp24.y;
this->mUnk_0C.z = sp24.z;
}
MapObjRef reffffff = ref;
u32 refdata = ref.Get32();
if (this->mUnk_18 == reffffff.Get32()) {
return true;
}
this->mUnk_18 = refdata;
if (var_r5 != 0) {
if (((ActorBomb *) this->mUnk_08)->func_ov031_020e1d58()) {
((ActorBomb *) this->mUnk_08)->func_ov031_020e2680(&sp24);
}
} else {
((ActorBomb *) this->mUnk_08)->func_ov031_020e2780(&sp24);
}
return true;
}
bool ActorBomb_180::vfunc_10(ActorRef param1, unk32 param2) {
if (param1.type == 0x1) {
@@ -846,11 +1070,13 @@ bool ActorBomb_180::vfunc_10(ActorRef param1, unk32 param2) {
return true;
}
// non-matching (unreachable code ?)
bool ActorBomb_ov031_020e2134::vfunc_08(const UnkStruct_ov031_020f3310 *param1, unk32 param2) {
if ((((u32) param1->mUnk_04->mUnk_24[param1->mUnk_00->mUnk_06] >> 0x9) & 0x7) == 0xA) {
// the cast is required otherwise the compiler will ignore that condition since it's always false
//! TODO: is this a macro/inline?
if ((s32) ((param1->mUnk_04->mUnk_24[param1->mUnk_00->mUnk_06] >> 0x09) & 0x07) == 0x0A) {
return false;
}
return this->UnkStruct_ov031_Items_00::vfunc_08(param1, param2);
}
+36 -27
View File
@@ -348,7 +348,6 @@ ActorItemBoomerang_11C::ActorItemBoomerang_11C(ActorItemBoomerang *param1) :
ActorItemBoomerang_11C::~ActorItemBoomerang_11C() {}
// non-matching
bool ActorItemBoomerang_11C::vfunc_08(const UnkStruct_ov031_020f3310 *param1, unk32 param2) {
u32 var = param1->mUnk_04->mUnk_24[param1->mUnk_00->mUnk_06];
@@ -359,54 +358,64 @@ bool ActorItemBoomerang_11C::vfunc_08(const UnkStruct_ov031_020f3310 *param1, un
return this->UnkStruct_ov031_Items_00::vfunc_08(param1, param2);
}
bool ActorItemBoomerang_11C::vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 *param2, unk32 param3) {
u32 val = (param1->mUnk_08 >> 9) & 7;
bool ActorItemBoomerang_11C::vfunc_0C(MapObjRef ref, UnkStruct_ov031_020e54d4 *param2, const VecFx32 *param3,
const VecFx32 *param4) {
u32 val = (param2->mUnk_08 >> 9) & 7;
if (val == 0x2) {
this->mUnk_08->func_ov031_020e5034(0x1);
}
if (val == 0x4) {
} else if (val == 0x4) {
this->mUnk_08->func_ov031_020e5034(0x2);
}
if (param1->mUnk_08 >> 0x18 & 1) {
if (((param2->mUnk_08 >> 0x18) & 1) == 1) {
return false;
}
Vec2bCpp pos;
if (this->mUnk_08->mState == ActorItemBoomerangState_1) {
if (*param2 & 0x1000) {
pos.x = (u8) *param2 >> 16;
pos.y = (u8) *param2 >> 24;
if (ref.unk_00_u16 & 0x1000) {
MapObjRef ref2 = ref;
Vec2bCpp pos = ref2.GetUnk02();
MapObject *mapObject = gpMapObjManager->func_01fff498(pos);
if (mapObject != NULL) {
if (mapObject->GetMapObjectId() == MapObjectId_ICEB || mapObject->GetMapObjectId() == MapObjectId_THAW) {
if (mapObject == NULL) {
return false;
}
switch (mapObject->GetMapObjectId()) {
case MapObjectId_ICEB:
case MapObjectId_THAW:
mapObject->vfunc_1C(this->mUnk_08->mRef, 0xC, &this->mUnk_08->mVel);
}
break;
default:
break;
}
}
return false;
}
if (*param2 & 0x1000) {
pos.x = (u8) *param2 >> 16;
pos.y = (u8) *param2 >> 24;
if (ref.unk_00_u16 & 0x1000) {
MapObjRef ref2 = ref;
Vec2bCpp pos = ref2.GetUnk02();
MapObject *mapObject = gpMapObjManager->func_01fff498(pos);
if (mapObject != NULL) {
switch (mapObject->GetMapObjectId()) {
case MapObjectId_SKDI:
case MapObjectId_SWHT:
data_027e0d2c->func_ov031_020d95c8(*param2);
case MapObjectId_Pot:
mapObject->vfunc_1C(this->mUnk_08->mRef, 0xC, &this->mUnk_08->mVel);
return false;
}
if (mapObject == NULL) {
return false;
}
switch (mapObject->GetMapObjectId()) {
case MapObjectId_SKDI:
case MapObjectId_SWHT:
data_027e0d2c->func_ov031_020d95c8(*(ActorRef *) &ref); //! TODO: ref conflicts
case MapObjectId_Pot:
mapObject->vfunc_1C(this->mUnk_08->mRef, 0xC, &this->mUnk_08->mVel);
return false;
}
}
UnkStruct_027e0ce0_38_Base::vfunc_0C(param1, param2, param3);
return this->UnkStruct_027e0ce0_38_Base::vfunc_0C(ref, param2, param3, param4);
}
void ActorItemBoomerang_Unknown::func_ov031_020e5704() {
+2 -1
View File
@@ -59,7 +59,8 @@ ActorProfileRollingStone::ActorProfileRollingStone() :
}
// non-matching
bool ActorRollingStone_104::vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 *param2, unk32 param3) {}
bool ActorRollingStone_104::vfunc_0C(MapObjRef ref, UnkStruct_ov031_020e54d4 *param2, const VecFx32 *param3,
const VecFx32 *param4) {}
bool ActorRollingStone_104::vfunc_10(ActorRef param1, unk32 param2) {
if (param1.type != 0x0) {
+2 -1
View File
@@ -965,7 +965,8 @@ bool ActorShotArrow_178::vfunc_08(const UnkStruct_ov031_020f3310 *param1, unk32
}
// non-matching
bool ActorShotArrow_178::vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 *param2, unk32 param3) {}
bool ActorShotArrow_178::vfunc_0C(MapObjRef ref, UnkStruct_ov031_020e54d4 *param2, const VecFx32 *param3,
const VecFx32 *param4) {}
ActorShotArrow_194::ActorShotArrow_194(ActorShotArrow *param1) {
this->mUnk_2C = param1;
+5 -4
View File
@@ -17,13 +17,13 @@ struct UnkStruct_ov031_020e5d18_00 {
static const Cylinder data_ov031_02113114(FX_F32_TO_FX32(0.0f), FX_F32_TO_FX32(0.0f), FX_F32_TO_FX32(0.0f),
FX_F32_TO_FX32(0.35f));
// non-matching
bool ActorUnkSWBM_94::vfunc_08(const UnkStruct_ov031_020f3310 *param1, unk32 param2) {
return (((u32) param1->mUnk_04->mUnk_24[param1->mUnk_00->mUnk_06] >> 0x16) & 0x1) != 0x1;
}
bool ActorUnkSWBM_94::vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 *param2, unk32 param3) {
return (((u32) param2[0x2] >> 0x16) & 0x1) != 0x1;
bool ActorUnkSWBM_94::vfunc_0C(MapObjRef ref, UnkStruct_ov031_020e54d4 *param2, const VecFx32 *param3, const VecFx32 *param4) {
#pragma unused(ref, param3, param4)
return ((param2->mUnk_08 >> 0x16) & 0x1) != 0x1;
}
bool ActorUnkSWBM_98::vfunc_0C(Actor *param1, VecFx32 *vector) {
@@ -42,13 +42,14 @@ bool ActorUnkSWBM_98::vfunc_0C(Actor *param1, VecFx32 *vector) {
void ActorUnkSWBM_98::vfunc_10(Actor *actor) {
switch (GET_FLAG(actor->mFlags, ActorFlag_17)) {
case false:
case false: {
ActorUnkSWBM *actorSWBM = this->mUnk_2C;
if (actorSWBM->mState != ActorUnkSWBMState_0) {
break;
}
actorSWBM->func_ov031_020e6e84(ActorUnkSWBMState_1);
break;
}
case true:
this->mUnk_2C->func_ov031_020e6d80(0x8C98);
break;
@@ -1,4 +1,5 @@
#include "MapObject/MapObjectBombFlower.hpp"
#include "Actor/ActorRef.hpp"
#include "CommonFuncs.hpp"
#include "Actor/ActorBomb.hpp"
@@ -103,7 +104,7 @@ void MapObjectBombFlower::func_ov031_02102728(unk32 param1) {
params.mUnk_28 = 0;
params.func_ov000_020975f8();
params.mUnk_28 = *(unk32 *) &this->mUnk_38;
params.mUnk_28 = *(ActorRef *) &this->mRef; //! TODO: ref conflicts
VecFx32_Copy(&this->mPos, &params.mInitialPos);
params.mParams[0] = 0x0;
+14 -28
View File
@@ -25,26 +25,12 @@ MapObjectTreasureSpawned_74::MapObjectTreasureSpawned_74(G3d_Model *param1) :
ModelRender(param1),
mUnk_60(1) {}
void MapObjectTreasureSpawned_74::vfunc_1C(UnkSystem4_vfunc_1C *param1) {
unk32 iVar1;
unk32 uVar2;
void MapObjectTreasureSpawned_74::vfunc_1C(G3d_RenderState *param1) {
G3d_NameList *iVar1 = G3d_GetBoneList(param1->renderObj->model);
uint uVar2 = iVar1 != NULL ? func_0200f218(iVar1, "box_B") : -1;
if (param1->mUnk_04[1] != 0) {
iVar1 = param1->mUnk_04[1] + 0x40;
} else {
iVar1 = 0;
}
if (iVar1 != 0) {
uVar2 = func_0200f218(iVar1, "box_B");
} else {
uVar2 = -1;
}
if (param1->mUnk_00[1] == uVar2) {
if (!this->mUnk_60) {
*param1->mUnk_B8 = 0;
}
if (param1->currentCmd[1] == uVar2 && !this->mUnk_60) {
*param1->visibilityPtr = false;
}
}
@@ -74,7 +60,7 @@ bool MapObjectChestBase::Init() {
if (this->mUnk_20.mParams[3] == 1) {
this->mPos.x += 0x7FC;
Vec2bCpp sp48(this->mUnk_3A.x, this->mUnk_3A.y);
Vec2bCpp sp48(this->mRef.unk_02.x, this->mRef.unk_02.y);
pUVar2->func_ov000_020801b0(&sp48, 7, 1);
sp48.x++;
@@ -125,12 +111,12 @@ void MapObjectChestBase::Setup() {
VecFx32_Add((VecFx32 *) &sp3C, &spC, (VecFx32 *) &sp3C);
local_68.x = this->mUnk_3A.x;
local_68.y = this->mUnk_3A.y;
local_68.x = this->mRef.unk_02.x;
local_68.y = this->mRef.unk_02.y;
iVar2 = pUVar5->func_01ffedf4((Vec2bCpp *) &local_68);
if (this->mUnk_20.mParams[3] == 1) {
Vec2bCpp temp_r0(this->mUnk_3A.x, this->mUnk_3A.y);
Vec2bCpp temp_r0(this->mRef.unk_02.x, this->mRef.unk_02.y);
temp_r0.x--;
if (pUVar5->func_01ffedf4((Vec2bCpp *) &temp_r0) > iVar2 || gpMapObjManager->func_01fff498(local_5e) != NULL) {
@@ -142,10 +128,10 @@ void MapObjectChestBase::Setup() {
sp3C.x += FX_F32_TO_FX32(0.5f);
}
} else {
Vec2bCpp temp_r0(this->mUnk_3A.x, this->mUnk_3A.y);
Vec2bCpp temp_r0(this->mRef.unk_02.x, this->mRef.unk_02.y);
temp_r0.x--;
temp_r0.y += 2;
// local_5e.y = this->mUnk_3A.y + (this->mUnk_3A.x - 1);
// local_5e.y = this->mRef.unk_02.y + (this->mRef.unk_02.x - 1);
// local_6c.y += local_5e.y;
// local_5e.y += 2;
@@ -159,7 +145,7 @@ void MapObjectChestBase::Setup() {
}
}
local_62.x = (this->mUnk_3A.y - 1) + this->mUnk_3A.x;
local_62.x = (this->mRef.unk_02.y - 1) + this->mRef.unk_02.x;
if (gpMapObjManager->func_ov000_0209c3a8(&local_62) == MapObjectId_MiniBlocks &&
iVar2 == pUVar5->func_01ffedf4(&local_62)) {
@@ -167,8 +153,8 @@ void MapObjectChestBase::Setup() {
}
if (data_027e09a4->CurrentSceneIndex() == SceneIndex_d_flame) {
local_64.x = this->mUnk_3A.x;
local_66.y = this->mUnk_3A.y;
local_64.x = this->mRef.unk_02.x;
local_66.y = this->mRef.unk_02.y;
local_66.x = local_64.x - 1;
local_64.y = local_66.y - 1;
+1 -1
View File
@@ -550,7 +550,7 @@ void MapObjectDoorBase::func_ov031_020fcb78(s8 *param1) {
bool uVar4 = (this->mUnk_84 % 0x1A) >= 0x0D ? true : false;
//! TODO: fake match?
sp4 = *(ActorRef *) &this->mUnk_38;
sp4 = *(ActorRef *) &this->mRef; //! TODO: ref conflicts
if (data_027e0998->vfunc_00(&this->mPos, &sp10, &sp4) && uVar4 != 0) {
MtxFx22 m;
@@ -409,7 +409,7 @@ void MapObjectDoorClick::vfunc_40(void) {
}
void MapObjectDoorClick::vfunc_44(void) {
unk32 local_c = *(u32 *) &this->mUnk_38;
unk32 local_c = *(u32 *) &this->mRef;
data_027e09a8->func_ov000_02071d34(&local_c, 0x142, &this->mPos, 0);
}
@@ -95,8 +95,8 @@ void MapObjectDoorDangerSpawn::Setup(void) {
u32 temp2;
if (pMapObject != NULL) {
temp1 = *(u32 *) &this->mUnk_38;
temp2 = *(u32 *) &pMapObject->mUnk_38;
temp1 = *(u32 *) &this->mRef;
temp2 = *(u32 *) &pMapObject->mRef;
if (temp2 != temp1 && pMapObject->mUnk_A2) {
run = false;
@@ -649,7 +649,7 @@ void MapObjectDoorDangerSpawn::vfunc_40(void) {
}
void MapObjectDoorDangerSpawn::vfunc_44(void) {
unk32 local_c = *(u32 *) &this->mUnk_38;
unk32 local_c = *(u32 *) &this->mRef;
data_027e09a8->func_ov000_02071d34(&local_c, 0x137, &this->mPos, 0);
}
@@ -658,7 +658,7 @@ void MapObjectDoorDangerSpawn::vfunc_48(void) {
}
void MapObjectDoorDangerSpawn::vfunc_4C(void) {
unk32 local_c = *(u32 *) &this->mUnk_38;
unk32 local_c = *(u32 *) &this->mRef;
data_027e09a8->func_ov000_02071d34(&local_c, 0x139, &this->mPos, 0);
}
+1 -1
View File
@@ -231,7 +231,7 @@ void MapObjectDoorKey::vfunc_40(void) {
}
void MapObjectDoorKey::vfunc_44(void) {
unk32 stack = *(u32 *) &this->mUnk_38;
unk32 stack = *(u32 *) &this->mRef;
data_027e09a8->func_ov000_02071d34(&stack, 0x135, &this->mPos, 0);
}
@@ -320,7 +320,7 @@ void MapObjectDoorSwitch::vfunc_40(void) {
}
void MapObjectDoorSwitch::vfunc_44(void) {
unk32 local_c = *(u32 *) &this->mUnk_38;
unk32 local_c = *(u32 *) &this->mRef;
data_027e09a8->func_ov000_02071d34(&local_c, 0x130, &this->mPos, 0);
}
@@ -329,7 +329,7 @@ void MapObjectDoorSwitch::vfunc_48(void) {
}
void MapObjectDoorSwitch::vfunc_4C(void) {
unk32 local_c = *(u32 *) &this->mUnk_38;
unk32 local_c = *(u32 *) &this->mRef;
data_027e09a8->func_ov000_02071d34(&local_c, 0x132, &this->mPos, 0);
}
@@ -38,7 +38,7 @@ void MapObjectDoorTouch::vfunc_40(void) {
}
void MapObjectDoorTouch::vfunc_44(void) {
unk32 local_c = *(u32 *) &this->mUnk_38;
unk32 local_c = *(u32 *) &this->mRef;
data_027e09a8->func_ov000_02071d34(&local_c, 0x147, &this->mPos, 0);
}
+1 -1
View File
@@ -105,7 +105,7 @@ bool ActorKeese_2AC::vfunc_08(const UnkStruct_ov031_020f3310 *param1, unk32 para
}
// non-matching
bool ActorKeese_2AC::vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 *param2, unk32 param3) {}
bool ActorKeese_2AC::vfunc_0C(MapObjRef ref, UnkStruct_ov031_020e54d4 *param2, const VecFx32 *param3, const VecFx32 *param4) {}
bool ActorKeese::Init(unk32 param1) {
this->mUnk_0B0.func_ov000_02057c38(0x6, 0x2);
+5 -4
View File
@@ -49,15 +49,16 @@ MapObjectUnkSWSW_40::MapObjectUnkSWSW_40(G3d_Model *pModel) :
this->ModelRender::func_ov000_02057c38(0x6, 0x2);
}
void MapObjectUnkSWSW_40::vfunc_1C(UnkSystem4_vfunc_1C *param1) {
if (param1->mUnk_00[0x1] == this->mUnk_60) {
void MapObjectUnkSWSW_40::vfunc_1C(G3d_RenderState *param1) {
if (param1->currentCmd[1] == this->mUnk_60) {
param1->mUnk_B4->mUnk_00 &= ~0x2;
MtxFx33_InitXRotation(&param1->mUnk_B4->mUnk_28, SIN((u16) this->mUnk_68), COS((u16) this->mUnk_68));
}
if (param1->mUnk_00[0x1] != this->mUnk_64) {
if (param1->currentCmd[1] != this->mUnk_64) {
return;
}
param1->mUnk_B4->mUnk_00 &= ~0x2;
MtxFx33_InitXRotation(&param1->mUnk_B4->mUnk_28, SIN((u16) this->mUnk_6A), COS((u16) this->mUnk_6A));
}
@@ -492,7 +493,7 @@ ActorUnkNSSW *MapObjectUnkSWSW::func_ov032_02121dc8(VecFx32 *param1) {
params.func_ov000_020975f8();
params.mInitialAngle = this->mAngle.angle_s;
params.mUnk_28 = *(unk32 *) &this->mUnk_38;
params.mUnk_28 = this->mRef.Get32(); //! TODO: ref conflicts
VecFx32_Init(param1->x, param1->y, param1->z, &params.mInitialPos);
+7 -12
View File
@@ -1173,17 +1173,13 @@ bool UnkStruct_ov063_02162ea8::vfunc_08(const UnkStruct_ov031_020f3310 *param1,
return retVal;
}
// non-matching
bool UnkStruct_ov063_02162ea8::vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 *param2, unk32 param3) {
UnkStruct_02162ea8_vfunc_0C *param2Struct = (UnkStruct_02162ea8_vfunc_0C *) param2;
if ((*(u16 *) &param2Struct->mUnk_04 & 0x1000) != 0) {
UnkStruct_02162ea8_vfunc_0C tmp;
tmp.mUnk_04 = *(volatile unk32 *) &param2Struct->mUnk_04;
bool UnkStruct_ov063_02162ea8::vfunc_0C(MapObjRef ref, UnkStruct_ov031_020e54d4 *param2, const VecFx32 *param3,
const VecFx32 *param4) {
if (ref.unk_00_u16 & 0x1000) {
MapObjRef ref2 = ref;
Vec2bCpp pos = ref2.GetUnk02();
Vec2bCpp vec;
*(unk32 *) &vec = tmp.mUnk_04;
MapObject *mapObject = gpMapObjManager->func_01fff498(vec);
MapObject *mapObject = gpMapObjManager->func_01fff498(pos);
if (mapObject != NULL) {
MapObjectId id = mapObject->GetMapObjectId();
@@ -1193,8 +1189,7 @@ bool UnkStruct_ov063_02162ea8::vfunc_0C(const UnkStruct_ov031_020e54d4 *param1,
}
}
return UnkStruct_027e0ce0_38_Base::vfunc_0C((const UnkStruct_ov031_020e54d4 *) param2Struct->mUnk_04, param2,
param2Struct->mUnk_04);
return UnkStruct_027e0ce0_38_Base::vfunc_0C(ref, param2, param3, param4);
}
void UnkStruct_ov063_02162f14::vfunc_3C() {
@@ -218,7 +218,7 @@ void MapObjectUnkSAND::vfunc_0C() {
void MapObjectUnkSAND::vfunc_14(unk32 param1) {
VecFx32 sp4 = this->mPos;
Vec2bCpp sp0 = this->mUnk_3A;
Vec2bCpp sp0 = this->mRef.GetUnk02();
for (int var_r7 = 0; var_r7 < ARRAY_LEN(this->mUnk_40); var_r7++) {
if (this->mUnk_40[var_r7].mUnk_00 != 0) {
@@ -163,9 +163,9 @@ void PlayerSceneChange::vfunc_0C(UnkStruct_PlayerGet_vfunc_0C_param1 *param1) {
if (this->mUnk_68 == 0x19) {
pDRTY->func_ov034_02121d84();
this->mUnk_8C = pDRTY->mUnk_38;
this->mUnk_8C = pDRTY->mRef.Get32();
} else if (pDRTY->GetMapObjectId() == MapObjectId_DRTY) {
*(u32 *) this->mUnk_94 = pDRTY->mUnk_38;
*(u32 *) this->mUnk_94 = pDRTY->mRef.Get32();
switch (pDRTY->mUnk_CC) {
case 1:
+1
View File
@@ -1,4 +1,5 @@
#include "CommonFuncs.hpp"
#include "MapObject/MapObject.hpp"
#include "MapObject/MapObjectManager.hpp"
MapObject *MapObjectManager::func_01fff498(Vec2bCpp param1) {