Decompiling BOMB (#140)

* feat: begin decompiling

* feat: some progress

* fix: forgot to change symbol

* feat: increase matching

* fix: function params not updated

* feat: more matching

* fix: noo more errors oon local help

* fix: match back UnkStruct_PlayerGet_74.data

* feat: little progress

* fix: SWBM.data regression

* feat: up jp version

* feat: update matching

* refactor: rename UnkBOMB to Bomb

* feat: decompiling part of MapObjectUnkBMFL

* feat: destroy MapObjectPot's vfunc_24 for the good of all

* fix: revert wrong symbol

* feat: updating jp symbols

* feat: eur advancements

* feat: weird stuff

* feat: fix build issue

* feat: rename BMFL to BombFlower

* feat: catchup jp .data

* feat: improve BombFlower

* feat: improve bomb matching

* style: cleanup

* style: cleanup v2

* fix: mapobjectpot_base .data

* feat: better match for mapobjectpot_base

* style: use deg_to_rad macro

* style: cleaner variable definition

* doc: better comment

* fix: build
This commit is contained in:
Alessevan
2026-08-23 15:06:08 -04:00
committed by GitHub
parent fd3a2340e3
commit 473e1e102b
69 changed files with 2105 additions and 811 deletions
+3 -3
View File
@@ -111,12 +111,12 @@ bool Actor::Grab(ActorGrabParams grabParams) {
SET_FLAG(this->mFlags, ActorFlag_Grabbed);
switch (grabParams.unk_00) {
switch (grabParams.mUnk_00.type_index) {
case 0x100:
case 0x101: {
u16 var_r3 = grabParams.unk_02;
u16 var_r3 = grabParams.mUnk_00.unk_id;
if (grabParams.unk_00 == 0x101) {
if (grabParams.mUnk_00.type_index == 0x101) {
var_r3 = 0;
}
+1 -1
View File
@@ -36,7 +36,7 @@ MapObject::MapObject() {
this->mPos.y = ptr->y;
this->mPos.z = ptr->z;
this->mUnk_14 = *ptr2->mUnk_0C;
this->mAngle = *ptr2->mUnk_0C;
MI_CpuCopyFast(ptr2->mUnk_04, &this->mUnk_20, sizeof(MapObject_20));
for (int i = 0; i < ARRAY_LEN(this->mUnk_18); i++) {
@@ -85,31 +85,31 @@ bool MapObjectMiniBlocks::vfunc_00(void) {
case 1:
case 6:
case 8:
this->mUnk_14 = -0x8000;
this->mAngle = DEG_TO_ANG(-180);
break;
case 2:
case 7:
case 9:
this->mUnk_14 = 0x4000;
this->mAngle = DEG_TO_ANG(90);
break;
case 3:
case 5:
case 11:
this->mUnk_14 = -0x4000;
this->mAngle = DEG_TO_ANG(-90);
break;
default:
this->mUnk_14 = 0;
this->mAngle = DEG_TO_ANG(0);
break;
}
func_01ff9638(&vec, -this->mUnk_14);
func_01ff9638(&vec, -this->mAngle);
VecFx32_Add(&this->mPos, &vec, &this->mPos);
return true;
}
void MapObjectMiniBlocks::vfunc_14(void) {
Mat3p m;
u16 unk_14 = this->mUnk_14;
u16 unk_14 = this->mAngle;
Mat3p_InitYRotation(&m, SIN(unk_14), COS(unk_14));
this->mUnk_40.vfunc_14(&m, &this->mPos);
}
@@ -0,0 +1,76 @@
#include "MapObject/MapObjectPot_Base.hpp"
extern "C" void func_ov000_020a14e4(unk8, VecFx32 *);
MapObjectPot_Base::MapObjectPot_Base() {
this->mUnk_40 = 0;
this->mUnk_44 = 0;
this->func_ov000_0209da78(0x0, 0x1);
this->func_ov000_0209da78(0x1, 0x0);
}
MapObjectPot_Base::~MapObjectPot_Base() {}
bool MapObjectPot_Base::vfunc_00() {
this->SetState(MapObjPot_BaseState_0, 0x1);
return true;
}
// non-matching
bool MapObjectPot_Base::SetState(MapObjState state, unk32 param2) {
if (param2 == 0x0 && this->mState == MapObjPot_BaseState_1) {
return;
}
this->mState = state;
switch (this->mState) {
case MapObjPot_BaseState_0:
break;
case MapObjPot_BaseState_1:
this->vfunc_48();
if (this->vfunc_40()) {
func_ov000_020a14e4(this->mUnk_38, &this->mPos);
} else {
if (this->vfunc_4C()) {
unk32 val = this->vfunc_54();
this->vfunc_3C();
}
}
this->MapObject::func_ov000_0209d614(0x1);
UNSET_FLAG(this->mFlags, MapObjFlag_Alive);
break;
case MapObjPot_BaseState_2:
UNSET_FLAG(this->mFlags, MapObjFlag_Alive);
break;
case MapObjPot_BaseState_3:
this->vfunc_38();
UNSET_FLAG(this->mFlags, MapObjFlag_Alive);
break;
break;
default:
break;
}
return true;
}
// non-matching
void MapObjectPot_Base::vfunc_24(MapObject *param1, VecFx32 param2) {}
// non-matching
void MapObjectPot_Base::vfunc_38() {}
// non-matching
unk32 MapObjectPot_Base::vfunc_28() {}
// non-matching
void MapObjectPot_Base::vfunc_48() {}
unk32 MapObjectPot_Base::vfunc_54() {
return this->mUnk_20.mParams[0] & 0xFF;
}
bool MapObjectPot_Base::vfunc_4C() {
return true;
}
// non-matching
void MapObjectPot_Base::func_ov000_0209da78(unk32 param1, unk32 param2) {}
// non-matching
void MapObjectPot_Base::vfunc_50(ActorRef *param1, MapObjectPot_Base *thisx) {}
+5 -5
View File
@@ -31,7 +31,7 @@ ActorProfileBlast::ActorProfileBlast() :
}
// non-matching
bool ActorBlast_E8::vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 param2) {}
bool ActorBlast_E8::vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 *param2, unk32 param3) {}
ActorBlast::ActorBlast() :
mUnk_94(FLOAT_TO_FX32(0.625f)),
@@ -146,7 +146,7 @@ fx32 ActorBlast::func_ov031_020e3b94() {
return FLOAT_TO_FX32(0.5f);
}
void ActorBlast::func_ov031_020e3b9c(unk16 param1, unk16 param2) {
void ActorBlast::func_ov031_020e3b9c(Actor *spawner, unk16 param1, unk16 param2) {
ActorParams actorParams;
ActorRef ref;
@@ -154,11 +154,11 @@ void ActorBlast::func_ov031_020e3b9c(unk16 param1, unk16 param2) {
actorParams.func_ov000_020975f8();
actorParams.func_ov000_020975f8();
actorParams.mUnk_28 = this->mRef;
VecFx32_Copy(&this->mPos, &actorParams.mInitialPos);
actorParams.mUnk_28 = spawner->mRef;
VecFx32_Copy(&spawner->mPos, &actorParams.mInitialPos);
actorParams.mParams[0] = param1;
actorParams.mParams[1] = param2;
this->func_ov000_020973f4(&ref, &data_ov000_020b539c_eur, ActorId_Blast, &actorParams, 0x0);
spawner->func_ov000_020973f4(&ref, &data_ov000_020b539c_eur, ActorId_Blast, &actorParams, 0x0);
}
+889
View File
@@ -0,0 +1,889 @@
#include "Actor/ActorBomb.hpp"
#include "Actor/ActorBlast.hpp"
#include "Actor/ActorManager.hpp"
#include "Actor/Actor_Derived1.hpp"
#include "MainGame/AdventureMode.hpp"
#include "Map/MapObjectId.hpp"
#include "MapObject/MapObjectBombFlower.hpp"
#include "MapObject/MapObjectProfile.hpp"
#include "System/SysNew.hpp"
#include "Unknown/UnkStruct_027e09a8.hpp"
#include "Unknown/UnkStruct_027e09b4.hpp"
#include "Unknown/UnkStruct_027e09b8.hpp"
#include "Unknown/UnkStruct_027e09c0.hpp"
#include "Unknown/UnkStruct_027e0cec.hpp"
#include "Unknown/UnkStruct_027e0d38.hpp"
#include "Unknown/UnkStruct_027e0d8c.hpp"
#include "Unknown/UnkStruct_ov000_020b5d34.hpp"
struct UnkStruct_ov031_020e5d18_00 {
/* 00 */ Actor *mUnk_00;
/* 04 */ STRUCT_PAD(0x04, 0x18);
/* 18 */
};
extern "C" VecFx32 data_027e07d4;
extern "C" unk32 data_ov000_020aecf8;
extern "C" VecFx32 data_ov031_02110a10;
extern "C" VecFx32 data_ov031_02110a28;
extern "C" char data_ov031_02110a50;
extern "C" char data_ov031_02110a60;
extern "C" char data_ov031_02110a70;
extern "C" bool func_01ff916c(void *, int, int);
extern "C" void func_01ff9218(fx32 *, fx32, fx32);
extern "C" unk32 func_01ff9258(fx32, fx32);
extern "C" void func_01ff94cc(VecFx32 *, VecFx32 *, VecFx32 *);
extern "C" fx32 func_01ffb464(fx32);
extern "C" void func_01ffb714(VecFx32 *, VecFx32 *, VecFx32 *);
extern "C" void func_01ffb974(unk32, VecFx32 *, VecFx32 *, VecFx32 *);
extern "C" void func_01ffc5a0(ModelRender *, unk32, UnkAngleStruct, void *);
extern "C" void func_01ffe6c4(UnkStruct_ov031_020e5d18_00 *, ActorRef, VecFx32 *, VecFx32 *, s32, VecFx32 *,
UnkStruct_ov031_Items_00_Base *);
extern "C" void func_0200b578(G3d_RenderObject *, void (*)(), unk32, unk32, unk32);
extern "C" void func_ov017_020c2438(unk32 *, unk32, VecFx32 *, unk32, unk32);
extern "C" void func_ov017_020c26f8(unk32, VecFx32 *, unk32, unk32);
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
ActorBomb::func_ov031_020e1f88, // ActorUnkBOMBState_2
ActorBomb::func_ov031_020e1fe4, // ActorUnkBOMBState_3
ActorBomb::func_ov031_020e2064, // ActorUnkBOMBState_4
ActorBomb::func_ov031_020e20fc, // ActorUnkBOMBState_5
ActorBomb::func_ov031_020e2134, // ActorUnkBOMBState_6
};
static PTMF<ActorBomb> data_ov031_02112c38[ActorBombState_Max] = {
ActorBomb::func_ov031_020e1d48, // ActorUnkBOMBState_0
ActorBomb::func_ov031_020e1ebc, // ActorUnkBOMBState_1
ActorBomb::func_ov031_020e1f18, // ActorUnkBOMBState_2
ActorBomb::func_ov031_020e1fe0, // ActorUnkBOMBState_3
ActorBomb::func_ov031_020e2034, // ActorUnkBOMBState_4
ActorBomb::func_ov031_020e20d8, // ActorUnkBOMBState_5
ActorBomb::func_ov031_020e2100, // ActorUnkBOMBState_6
};
DECL_PROFILE(ActorProfileBomb);
Actor *ActorProfileBomb::Create() {
return new(HeapIndex_2) ActorBomb();
}
ActorProfileBomb::ActorProfileBomb() :
ActorProfile(ActorId_Bomb) {
this->mUnk_04.Init(FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.2999f), FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.4f));
}
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 G3d_GetModelPtr(
((MapObjectProfileBombFlower *) data_ov000_020b5d34.GetProfileFromId(MapObjectId_BombFlower))->mUnk_20.mUnk_50);
}
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 ((MapObjectProfileBombFlower *) data_ov000_020b5d34.GetProfileFromId(MapObjectId_BombFlower))
->mUnk_20.func_ov000_02058a84(0x1, &data_ov031_02110a50);
}
// 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() {}
ActorBomb::ActorBomb() :
mUnk_094(this->func_ov031_020e1540(this->mUnk_5C.mParams[0])),
mUnk_0F4(&this->mUnk_114, this->func_ov031_020e1540(this->mUnk_5C.mParams[0])),
mUnk_17C(NULL),
mUnk_180(this),
mUnk_19C(this),
mUnk_1CC(data_027e07d4),
mUnk_1D8(0x1000),
mUnk_1DC(0x0),
mUnk_1E0(0x0),
mUnk_1E4(0x0),
mUnk_1E8(0x0),
mUnk_1EA(0x0),
mUnk_1EC(0x0),
mUnk_1EE(false),
#if IS_JP
mUnk_1F0(false),
mUnk_1F1(false)
#else
mUnk_1F0(false)
#endif
{
if (this->mUnk_5C.mParams[0] != 0x1) {
this->mUnk_1EF = false;
this->mUnk_17C = &data_ov031_02110a28;
} else {
func_0200b578(&this->mUnk_094.mRenderObj, this->func_ov031_020e1634, 0x0, 0x2, 0x2);
this->mUnk_17C = &data_ov031_02110a10;
this->mUnk_1EF = true;
}
this->mUnk_164[0].mUnk_04 = 0x810;
this->mUnk_164[0].mUnk_08 = 0x2;
this->mUnk_164[1].mUnk_04 = 0x811;
this->mUnk_164[1].mUnk_08 = 0x2;
SET_FLAG(this->mFlags, ActorFlag_11);
#if IS_JP
SET_FLAG(this->mFlags, ActorFlag_13);
#endif
}
void ActorBomb::func_ov031_020e17f4() {}
bool ActorBomb::vfunc_18(unk32 param1) {
Cylinder *profileCylinder = &this->mpProfile->mUnk_04;
this->mUnk_154.pos = profileCylinder->pos;
this->mUnk_154.size = profileCylinder->size;
this->mUnk_30 = &this->mUnk_154;
this->SetState(ActorBombState_0);
this->mUnk_19C.mUnk_04 = this->mRef;
VecFx32_Copy(&this->mPos, &this->mUnk_19C.mUnk_0C.pos);
this->mUnk_19C.mUnk_0C.size = 0x666;
this->mUnk_1EC = 0x78;
this->mUnk_1EA = 0x0;
this->Actor::func_ov000_0209862c(0x2);
return true;
}
void ActorBomb::func_ov031_020e18a0() {
this->func_ov000_0209862c(0x2);
this->mUnk_2C = data_ov000_020aecf8;
}
void ActorBomb::SetState(ActorState state) {
this->mState = state;
this->func_ov031_020e18a0();
CALL_PTMF(PTMF<ActorBomb>, data_ov031_02112c38[this->mState]);
}
void ActorBomb::func_ov031_020e1908() {
this->mUnk_134.mUnk_04 |= 0x8000;
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_020e193c() {
if (this->mUnk_1EF && GET_FLAG(this->mFlags, ActorFlag_Visible)) {
VecFx32 sp0C;
func_01ffb974(this->mUnk_1D8, this->mUnk_17C, &this->mPos, &sp0C);
VecFx32 sp00;
// weird logic + 1
func_01ffb974(this->mUnk_1D8, this->mUnk_17C + 1, &this->mPos, &sp00);
data_027e0cec->func_ov000_020a0140(&this->mUnk_164[0], &sp0C);
data_027e0cec->func_ov000_020a0140(&this->mUnk_164[1], &sp00);
for (ActorBomb_unk *ptr = this->mUnk_164; ptr != this->mUnk_164 + ARRAY_LEN(this->mUnk_164); ptr++) {
if (ptr->mUnk_00 != NULL) {
ptr->mUnk_00->mUnk_24 &= ~0x8;
}
}
return;
}
for (ActorBomb_unk *ptr = this->mUnk_164; ptr != this->mUnk_164 + ARRAY_LEN(this->mUnk_164); ptr++) {
ptr->func_ov000_020a0334();
}
}
void ActorBomb::vfunc_20() {
this->mUnk_3C = &this->mUnk_134;
CALL_PTMF(PTMF<ActorBomb>, data_ov031_02112c00[this->mState]);
this->func_ov031_020e1b7c();
if (!GET_FLAG(this->mFlags, ActorFlag_Alive)) {
return;
}
this->func_ov031_020e193c();
if (this->mState != ActorBombState_2 && this->mState != ActorBombState_4) {
return;
}
if (func_01ff9258(this->mVel.x, this->mVel.z) <= 0x52) {
return;
}
if (this->mUnk_1E4.type == 0x1) {
if (!this->func_ov031_020e25bc()) {
return;
}
ActorBlast::func_ov031_020e3b9c(this, 0x0, 0x0);
this->func_ov000_020984d0();
return;
}
this->func_ov031_020e262c();
}
void ActorBomb::vfunc_24() {
if (this->mState != ActorBombState_1) {
return;
}
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 param3 = !(param1->mUnk_6 & 0x2);
this->mUnk_0F4.func_ov000_020577a4(param1, 0x0, param3);
this->mUnk_0F4.mUnk_08 = 0x1000;
this->mUnk_0F4.mUnk_04 = data_ov031_02112be8.unknown;
this->mUnk_094.func_ov000_02057cf4();
this->mUnk_094.func_ov000_02057c98(&this->mUnk_0F4);
}
void ActorBomb::func_ov031_020e1b7c() {
if (!this->mUnk_1EF) {
return;
}
data_027e09a8->func_ov000_02071d34(&this->mRef, 0xF4, &this->mPos, 0x0);
if (!this->mUnk_1EE) {
if (!this->IsInternalTimerOut()) {
return;
}
this->mUnk_1EE = true;
this->mUnk_1EC = 0x3C;
this->mUnk_1EA = 0x00;
this->func_ov031_020e1b1c();
return;
}
fx32 delta = this->mUnk_1EC - this->mUnk_1EA;
this->mUnk_0F4.mUnk_08 = FLOAT_TO_FX32(1.5f) - delta * FLOAT_TO_FX32(0.01985f);
this->mUnk_0F4.func_01ffc3b4();
if (delta > 0x0) {
func_01ff9218(&this->mUnk_1D8, FLOAT_TO_FX32(1.3f), func_01ffb464((u32) delta << 0xC));
}
if (!this->IsInternalTimerOut()) {
return;
}
ActorBlast::func_ov031_020e3b9c(this, 0x0, 0x0);
if (this->mState == ActorBombState_6) {
ActorParams params;
ActorRef ref;
params.mUnk_28 = 0;
params.func_ov000_020975f8();
VecFx32_Copy(&this->mPos, &params.mInitialPos);
params.mInitialPos.y = this->mUnk_1DC;
this->Actor::func_ov000_020973f4(&ref, &data_ov000_020b539c_eur, ActorId_EFSC, &params, 0x0);
}
this->Actor::func_ov000_020984d0();
}
void ActorBomb::func_ov031_020e1d18() {
this->func_ov000_02098838();
VecFx32_Add(&this->mPos, &this->mUnk_1CC, &this->mPos);
VecFx32_Init(FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.0f), &this->mUnk_1CC);
}
void ActorBomb::func_ov031_020e1d48() {
this->mUnk_1E4 = 0;
this->mUnk_2C = 0x0;
}
bool ActorBomb::func_ov031_020e1d58() {
return this->mUnk_154.pos.y >= FLOAT_TO_FX32(0.2999f);
}
bool ActorBomb::func_ov031_020e1d74() {
if (this->func_ov031_020e1d58()) {
if (this->mUnk_46 & 0x1) {
return true;
}
}
return false;
}
void ActorBomb::func_ov031_020e1da0() {
this->func_ov031_020e1d18();
VecFx32_Copy(&this->mPos, &this->mPrevPos);
VecFx32_Add(&this->mPos, &this->mVel, &this->mPos);
this->func_ov031_020e2a9c();
if (this->func_ov031_020e1d74() || this->mUnk_180.mUnk_04 & 0x1) {
if (this->mUnk_180.mUnk_04 & 0x8) {
if (this->func_ov031_020e1d58()) {
this->SetState(ActorBombState_6);
}
} else {
if (this->func_ov031_020e2b40()) {
this->func_ov000_020984d0();
return;
}
if (this->mUnk_180.mUnk_0C.z >= FLOAT_TO_FX32(-0.1003f)) {
this->mUnk_2C = 0x0;
VecFx32_Init(FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.0f), &this->mVel);
func_01ffb974(-0x29, &this->mUnk_180.mUnk_0C, &this->mVel, &this->mVel);
} else {
func_01ff9218(&this->mUnk_2C, data_ov000_020aecf8, 0x800);
}
}
} else {
func_01ff9218(&this->mUnk_2C, data_ov000_020aecf8, 0x200);
}
this->func_ov031_020e238c();
}
void ActorBomb::func_ov031_020e1ebc() {
this->func_ov000_0209862c(0x0);
this->mUnk_2C = 0x0;
}
void ActorBomb::func_ov031_020e1ed8() {
if (this->mUnk_1E0.type_index != 0x100) {
return;
}
unk32 param1 = 0x101;
if (this->mUnk_1E0.type_index == param1) {
param1 = 0x0;
} else {
param1 = this->mUnk_1E0.unk_id;
}
data_027e0ce0->func_ov000_0208bacc(param1, &this->mPos);
}
void ActorBomb::func_ov031_020e1f18() {
if (!this->mUnk_1EF) {
bool var = true;
if (this->mUnk_1E0.type_index != 0x100 && this->mUnk_1E0.type_index != 0x101) {
var = false;
}
if (var) {
#if IS_JP
if (!this->mUnk_1F1)
#endif
{
ItemManager *itemManager = data_027e0ce0->mUnk_2C;
if (itemManager != NULL && itemManager->GetInventory()->GetBombAmount() > 0) {
itemManager->GetInventory()->GiveBombs(-1);
#if IS_JP
this->mUnk_1F1 = true;
#endif
}
}
}
}
if (!this->mUnk_1F0) {
this->mUnk_1EF = true;
}
}
void ActorBomb::func_ov031_020e1f88() {
this->mUnk_3C = &this->mUnk_134;
this->func_ov031_020e1d18();
VecFx32_Copy(&this->mPos, &this->mPrevPos);
VecFx32_Add(&this->mPos, &this->mVel, &this->mPos);
this->func_ov031_020e2a9c();
this->func_ov031_020e2c2c();
this->func_ov031_020e238c();
}
void ActorBomb::func_ov031_020e1fe0() {}
void ActorBomb::func_ov031_020e1fe4() {
this->func_ov031_020e1d18();
VecFx32_Copy(&this->mPos, &this->mPrevPos);
VecFx32_Add(&this->mPos, &this->mVel, &this->mPos);
this->func_ov031_020e2a9c();
this->func_ov031_020e2c2c();
this->func_ov031_020e238c();
}
void ActorBomb::func_ov031_020e2034() {
this->mUnk_1E4 = 0;
this->mUnk_2C = 0x0;
this->Actor::vfunc_40();
this->mUnk_44 = (s16) this->mUnk_44 & ~0x20;
this->mUnk_134.func_ov000_02097bec();
}
void ActorBomb::func_ov031_020e2064() {
this->Actor::vfunc_44();
if (GET_FLAG(this->mFlags, ActorFlag_5)) {
this->SetState(ActorBombState_3);
this->mUnk_44 = (s16) this->mUnk_44 | 0x20;
}
this->func_ov031_020e238c();
this->func_ov031_020e1d18();
VecFx32_Copy(&this->mPos, &this->mPrevPos);
VecFx32_Add(&this->mPos, &this->mVel, &this->mPos);
this->func_ov031_020e2a9c();
}
void ActorBomb::func_ov031_020e20d8() {
this->mUnk_1E4 = 0x0;
ActorBlast::func_ov031_020e3b9c(this, 0x1, 0x0);
this->Actor::func_ov000_020984d0();
}
void ActorBomb::func_ov031_020e20fc() {}
void ActorBomb::func_ov031_020e2100() {
fx32 newY = this->mPos.y - FLOAT_TO_FX32(0.0125f);
newY -= FLOAT_TO_FX32(0.1875f);
this->mUnk_1E9 = 0x50;
this->mUnk_2C = 0x0;
this->mPos.y = newY;
this->mUnk_1DC = newY;
this->mUnk_44 = (s16) this->mUnk_44 & ~0x3;
}
void ActorBomb::func_ov031_020e2134() {
fx32 newZ = MUL_FX32(this->mVel.z, FLOAT_TO_FX32(0.3f));
fx32 newX = MUL_FX32(this->mVel.x, FLOAT_TO_FX32(0.3f));
this->mVel.x = newX;
this->mVel.y = FLOAT_TO_FX32(-0.0102f);
this->mVel.z = newZ;
VecFx32_Copy(&this->mPos, &this->mPrevPos);
VecFx32_Add(&this->mPos, &this->mVel, &this->mPos);
ActorBomb_ov031_020e2134 sp00 = ActorBomb_ov031_020e2134();
this->func_ov031_020e295c(&sp00);
this->func_ov031_020e2820(&sp00);
if (!(--this->mUnk_1E9 & 0xFF)) {
this->func_ov000_020984d0();
}
}
void ActorBomb::vfunc_2C(unk32 param1) {
if (!this->Actor::func_01fff5d0(param1, 0x0)) {
for (ActorBomb_unk *ptr = this->mUnk_164; ptr != this->mUnk_164 + ARRAY_LEN(this->mUnk_164); ptr++) {
ptr->func_ov000_020a0334();
}
return;
}
if (!data_027e09b8->mUnk_97) {
for (ActorBomb_unk *ptr = this->mUnk_164; ptr != this->mUnk_164 + ARRAY_LEN(this->mUnk_164); ptr++) {
if (ptr->mUnk_00 != NULL) {
ptr->mUnk_00->mUnk_24 |= 0x8;
}
}
return;
}
for (ActorBomb_unk *ptr = this->mUnk_164; ptr != this->mUnk_164 + ARRAY_LEN(this->mUnk_164); ptr++) {
if (ptr->mUnk_00 != NULL) {
ptr->mUnk_00->mUnk_24 &= ~0x8;
}
}
func_01ffc5a0(&this->mUnk_094, this->mUnk_1D8, this->mAngleStruct, &this->mPos);
VecFx32 sp0C;
VecFx32_Init(this->mPos.x, this->mPos.y + FLOAT_TO_FX32(0.4f), this->mPos.z, &sp0C);
if (this->mState == ActorBombState_6) {
return;
}
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) {
case 15:
this->mUnk_134.mUnk_04 &= ~0x8000;
data_027e0d8c->func_ov093_021661c0(this->mRef);
break;
case 4:
if (!data_027e0d38->func_ov031_020d9c04(0x1, 0x0, 0x0)) {
break;
}
this->SetState(ActorBombState_4);
break;
case 0:
this->SetState(ActorBombState_5);
break;
default:
ActorBlast::func_ov031_020e3b9c(this, 0x0, 0x0);
this->Actor::func_ov000_020984d0();
break;
}
}
bool ActorBomb::Grab(ActorGrabParams grabParams) {
this->SetState(ActorBombState_1);
this->mUnk_1E0 = grabParams.mUnk_00;
this->mUnk_1E4 = 0;
this->mUnk_180.mUnk_18 = 0x0;
this->Actor::Grab(grabParams);
}
bool ActorBomb::Drop(ActorGrabParams grabParams, const VecFx32 *pVel) {
this->SetState(ActorBombState_2);
this->mUnk_1E4 = this->mUnk_1E0;
this->mUnk_1E0 = 0x0;
if (!(grabParams.mUnk_00.type_index != 0x100 && grabParams.mUnk_00.type_index != 0x2 + 0xFF)) {
unk32 param1;
if (grabParams.mUnk_00.type_index == 0x101) {
param1 = 0x0;
} else {
param1 = grabParams.mUnk_00.unk_id;
}
VecFx32 sp0C = *this->Actor::func_ov000_0209853c(param1);
this->mUnk_154.pos.y = sp0C.y + FLOAT_TO_FX32(0.4f) - this->mPos.y;
this->mPrevPos.x = sp0C.x;
this->mPrevPos.z = sp0C.z;
} else {
Actor *actor = gpActorManager->func_01fff3b4(grabParams.mUnk_00);
if (actor != NULL) {
VecFx32 sp00 = actor->mPos;
this->mUnk_154.pos.y = sp00.y + FLOAT_TO_FX32(0.4f) - this->mPos.y;
this->mPrevPos.x = sp00.x;
this->mPrevPos.z = sp00.z;
}
}
return this->Actor::Drop(grabParams, pVel);
}
bool ActorBomb::func_ov031_020e25bc() {
bool ret = true;
Cylinder cylinder;
VecFx32_Copy(&this->mPos, &cylinder.pos);
cylinder.size = 0x666;
if (!data_027e09c0->func_ov000_0207e458(0x4, 0x0, &cylinder.pos, 0x1, NULL, 0x0)) {
ret = false;
}
return ret;
}
bool ActorBomb::func_ov031_020e262c() {
VecFx32_Copy(&this->mPos, &this->mUnk_19C.mUnk_0C.pos);
this->mUnk_19C.mUnk_0C.size = FLOAT_TO_FX32(0.4f);
data_027e09c0->func_ov000_0207e58c(this->mRef, 0x0, 0xC, &this->mUnk_19C);
return true;
}
void ActorBomb::func_ov031_020e2680(VecFx32 *param1) {
if (this->mVel.y == FLOAT_TO_FX32(0.0f)) {
return;
}
if (param1->x == FLOAT_TO_FX32(0.0f) && param1->y == FLOAT_TO_FX32(0.0f) && param1->z == FLOAT_TO_FX32(0.0f)) {
return;
}
VecFx32 sp0C = this->mVel;
VecFx32 sp00 = this->mVel;
if (VecFx32_Dot(param1, &sp00) >= FLOAT_TO_FX32(0.0f)) {
return;
}
fx32 velLength = VecFx32_Length(&this->mVel);
func_01ff94cc(&sp00, param1, &sp0C);
VecFx32_TryNormalize(&sp00);
this->mVel.x = MUL_FX32(sp00.x, MUL_FX32(velLength, FLOAT_TO_FX32(0.2f)));
this->mVel.z = MUL_FX32(sp00.z, MUL_FX32(velLength, FLOAT_TO_FX32(0.2f)));
}
void ActorBomb::func_ov031_020e2780(VecFx32 *param1) {
VecFx32 sp00 = *param1;
if (!VecFx32_TryNormalize(&sp00)) {
return;
}
fx32 dot = VecFx32_Dot(&sp00, &this->mVel);
if (dot >= FLOAT_TO_FX32(0.0f)) {
return;
}
func_01ffb974(ROUND_FX32(dot * FLOAT_TO_FX32(-1.2002f)), &sp00, &this->mVel, &this->mVel);
this->mVel.x = ROUND_FX32(this->mVel.x * FLOAT_TO_FX32(0.75f));
this->mVel.z = ROUND_FX32(this->mVel.z * FLOAT_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 sp3C;
func_01ffb714(&sp54, &sp48, &sp3C);
fx32 sp3CLength = VecFx32_Length(&sp3C);
VecFx32 sp0C = sp48;
VecFx32 sp30 = sp0C;
VecFx32 sp24 = sp0C;
VecFx32 sp18 = sp3C;
if (VecFx32_TryNormalize(&sp18) != 0x0) {
while (sp3CLength != FLOAT_TO_FX32(0.0f)) {
if (sp3CLength > FLOAT_TO_FX32(0.5f)) {
func_01ffb974(FLOAT_TO_FX32(0.5f), &sp18, &sp24, &sp24);
sp3CLength -= FLOAT_TO_FX32(0.5f);
} else {
func_01ffb974(sp3CLength, &sp18, &sp24, &sp24);
sp3CLength = FLOAT_TO_FX32(0.0f);
}
func_01ffe6c4(&sp60, this->mRef, &sp24, &sp30, (s16) this->mUnk_44, &this->mPos, param1);
if (!this->Actor::func_ov000_0207e294(this->mUnk_30)) {
VecFx32_Copy(&sp24, &sp30);
}
}
}
return sp3CLength;
}
// 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 sp3C;
func_01ffb714(&sp54, &sp48, &sp3C);
fx32 sp3CLength = VecFx32_Length(&sp3C);
VecFx32 sp0C = sp48;
VecFx32 sp30 = sp0C;
VecFx32 sp24 = sp0C;
VecFx32 sp18 = sp3C;
if (VecFx32_TryNormalize(&sp18) != 0x0) {
while (sp3CLength != FLOAT_TO_FX32(0.0f)) {
if (sp3CLength > FLOAT_TO_FX32(0.5f)) {
func_01ffb974(FLOAT_TO_FX32(0.5f), &sp18, &sp24, &sp24);
sp3CLength -= FLOAT_TO_FX32(0.5f);
} else {
func_01ffb974(sp3CLength, &sp18, &sp24, &sp24);
sp3CLength = FLOAT_TO_FX32(0.0f);
}
func_01ffe6c4(&sp60, 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);
}
}
}
return sp3CLength;
}
void ActorBomb::func_ov031_020e2a9c() {
UnkStruct_ov031_020e5d18_00 s0C;
s0C.mUnk_00 = NULL;
VecFx32_Init(FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.0f), &this->mUnk_180.mUnk_0C);
func_01ffe6c4(&s0C, this->mRef, &this->mPos, &this->mPrevPos, (s16) this->mUnk_44, &this->mPos, &this->mUnk_180);
unk32 value = this->func_ov031_020e295c(&this->mUnk_180) | this->func_ov031_020e2820(&this->mUnk_180);
if (this->mUnk_1E0.type_index != 0x0) {
this->mUnk_154.pos.y = 0x4CC;
} else {
func_01ff916c(&this->mUnk_154.pos.y, 0x4CC, 0x333);
}
this->mUnk_46 = value;
}
bool ActorBomb::func_ov031_020e2b40() {
if (this->mUnk_180.mUnk_04 & 0x4) {
func_ov017_020c26f8(0x2, &this->mPos, 0x1, 0x1);
data_027e09a8->func_ov000_02071b30(0xED, &this->mPos, 0x0);
ActorBlast::func_ov031_020e3b9c(this, 0x0, 0x0);
return true;
}
if (this->mUnk_180.mUnk_04 & 0x2) {
unk32 sp00;
func_ov017_020c2438(&sp00, 0x2, &this->mPos, 0x1, 0x1);
data_027e09a8->func_ov000_02071b30(0xEA, &this->mPos, 0x0);
return true;
}
if (!(this->mUnk_180.mUnk_04 & 0x1)) {
return false;
}
data_027e09a8->func_ov000_02071b30(0xE8, &this->mPos, 0x0);
return true;
}
void ActorBomb::func_ov031_020e2c2c() {
if (this->func_ov031_020e1d74() || (this->mUnk_180.mUnk_04 & 0x1) != 0x0) {
if (this->mUnk_1F0) {
this->mUnk_1EF = true;
}
if (this->mUnk_180.mUnk_04 & 0x8) {
if (!this->func_ov031_020e1d58()) {
return;
}
this->SetState(ActorBombState_6);
return;
}
if (this->func_ov031_020e2b40()) {
this->Actor::func_ov000_020984d0();
return;
}
++this->mUnk_1E8;
this->mVel.y = MUL_FX32(-this->mVel.y, FLOAT_TO_FX32(0.6f));
this->mVel.x = MUL_FX32(this->mVel.x, FLOAT_TO_FX32(0.2f));
this->mVel.z = MUL_FX32(this->mVel.z, FLOAT_TO_FX32(0.2f));
if (this->mUnk_1E8 <= 0x3) {
return;
}
VecFx32_Init(FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.0f), &this->mVel);
this->SetState(ActorBombState_0);
return;
}
if (!(this->mUnk_46 & 0x1C)) {
return;
}
this->func_ov031_020e2780(&this->mUnk_180.mUnk_0C);
}
ActorBomb_180::ActorBomb_180(Actor *param1) :
mUnk_08(param1) {
VecFx32_Init(FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.0f), &this->mUnk_0C);
this->mUnk_18 = 0x0;
}
ActorBomb_180::~ActorBomb_180() {
this->mUnk_08 = NULL;
}
// non-matching (wrong instruction in condition)
bool ActorBomb_180::vfunc_08(const UnkStruct_ov031_020f3310 *param1) {
if (((((u32) param1->mUnk_04->mUnk_24[param1->mUnk_00->mUnk_06]) >> 0x19) & 1) == 1) {
return false;
}
VecFx16_Copy2VecFx32(&param1->mUnk_08, &this->mUnk_0C);
return this->UnkStruct_ov031_Items_00::vfunc_08(param1);
}
// non-matching
bool ActorBomb_180::vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 *param2, unk32 param3) {}
bool ActorBomb_180::vfunc_10(ActorRef param1, unk32 param2) {
if (param1.type == 0x1) {
Actor *actor = gpActorManager->func_01fff3b4(param1);
if (actor != NULL && actor->GetActorId() == ActorId_Bomb) {
ActorBlast::func_ov031_020e3b9c(this->mUnk_08, 0x0, 0x0);
this->mUnk_08->func_ov000_020984d0();
((ActorBomb *) actor)->SetState(ActorBombState_5);
}
}
return true;
}
// non-matching (unreachable code ?)
bool ActorBomb_ov031_020e2134::vfunc_08(const UnkStruct_ov031_020f3310 *param1) {
if ((((u32) param1->mUnk_04->mUnk_24[param1->mUnk_00->mUnk_06] >> 0x9) & 0x7) == 0xA) {
return false;
}
return this->UnkStruct_ov031_Items_00::vfunc_08(param1);
}
ActorBomb_19C::ActorBomb_19C(Actor *param1) :
mUnk_2C(param1) {}
void ActorBomb_19C::vfunc_10(Actor *actor) {
Actor *bomb = this->mUnk_2C;
if (!GET_FLAG(bomb->mFlags, ActorFlag_Alive)) {
return;
}
ActorBlast::func_ov031_020e3b9c(bomb, 0x0, 0x0);
this->mUnk_2C->func_ov000_020984d0();
}
ActorBomb_unk::ActorBomb_unk() :
UnkSystem7(NULL),
mUnk_04(-0x1),
mUnk_08(0x0) {}
+1 -1
View File
@@ -30,7 +30,7 @@ ActorProfileItemBoomerang::ActorProfileItemBoomerang() :
// non-matching
ActorItemBoomerang::ActorItemBoomerang() :
mUnk_94(data_027e0ce0->func_ov000_0208ed30(0x0, 0x1, ItemManager::func_ov000_020a8974(0x1)->mUnk_10)),
mUnk_94(data_027e0ce0->mUnk_1C->func_ov000_0208ed30(0x0, 0x1, ItemManager::func_ov000_020a8974(0x1)->mUnk_10)),
mUnk_9C(true),
mUnk_11C(this),
mUnk_12C(),
+2 -2
View File
@@ -39,7 +39,7 @@ ActorProfileItemTornado::ActorProfileItemTornado() :
// non-matching
ActorItemTornado::ActorItemTornado() :
mUnk_94(data_027e0ce0->func_ov000_0208ed30(0x0, 0x1, data_ov031_02110a88)),
mUnk_94(data_027e0ce0->mUnk_1C->func_ov000_0208ed30(0x0, 0x1, data_ov031_02110a88)),
mUnk_F4(&this->mUnk_114, this->mUnk_94.mpModel),
mUnk_134(&this->mUnk_154, this->mUnk_94.mpModel),
mUnk_17C(NULL),
@@ -268,7 +268,7 @@ void ActorItemTornado::vfunc_2C(unk32 param1) {
VecFx32 vec = this->mPos;
if (this->mState == ActorItemTornadoState_0) {
vec.y += (((FLOAT_TO_FX32(1.0f) - this->mUnk_1DC) << 0xC) + FLOAT_TO_FX32(0.5f)) >> 0xC;
vec.y += ROUND_FX32(((FLOAT_TO_FX32(1.0f) - this->mUnk_1DC) << 0xC));
}
data_027e0958->func_ov000_02058fc4(&this->mUnk_17C, &vec);
}
+18 -2
View File
@@ -1,5 +1,6 @@
#include "Actor/ActorRollingStone.hpp"
#include "Actor/ActorManager.hpp"
#include "Physics/Cylinder.hpp"
#include "System/SysNew.hpp"
#include "Unknown/UnkStruct_027e09a8.hpp"
@@ -64,8 +65,23 @@ ActorProfileRollingStone::ActorProfileRollingStone() :
// non-matching
bool ActorRollingStone_104::vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 *param2, unk32 param3) {}
// non-matching
void ActorRollingStone_104::vfunc_10() {}
bool ActorRollingStone_104::vfunc_10(ActorRef param1, unk32 param2) {
if (param1.type != 0x0) {
Actor *actor = gpActorManager->func_01fff3b4(param1);
if (actor != NULL) {
switch (actor->GetActorId()) {
case ActorId_CASE:
case ActorId_FMAS:
case ActorId_FMLS:
case ActorId_RCMS:
return false;
default:
break;
}
}
}
return this->UnkStruct_027e0ce0_38_Base::vfunc_10(param1, param2);
}
void ActorRollingStone_D4::vfunc_10(Actor *param1) {
if (param1->GetActorId() != ActorId_RollingStone) {
-77
View File
@@ -1,77 +0,0 @@
//! TODO: This file was generated automatically and might contain errors
#include "Actor/ActorUnkBOMB.hpp"
#include "System/SysNew.hpp"
DECL_PROFILE(ActorProfileUnkBOMB);
Actor *ActorProfileUnkBOMB::Create() {
return new(HeapIndex_2) ActorUnkBOMB();
}
ActorProfileUnkBOMB::ActorProfileUnkBOMB() :
ActorProfile(ActorId_BOMB) {}
ActorUnkBOMB::ActorUnkBOMB() {}
void ActorUnkBOMB::func_ov031_020e1540(void) {}
void ActorUnkBOMB::func_ov031_020e15d0(void) {}
void ActorUnkBOMB::func_ov031_020e1634(void) {}
void ActorUnkBOMB::func_ov031_020e17f4(void) {}
void ActorUnkBOMB::func_ov031_020e1808(void) {}
void ActorUnkBOMB::func_ov031_020e181c(void) {}
void ActorUnkBOMB::func_ov031_020e18a0(void) {}
void ActorUnkBOMB::func_ov031_020e18c4(void) {}
void ActorUnkBOMB::func_ov031_020e1908(void) {}
void ActorUnkBOMB::func_ov031_020e1920(void) {}
void ActorUnkBOMB::func_ov031_020e193c(void) {}
void ActorUnkBOMB::func_ov031_020e1a28(void) {}
void ActorUnkBOMB::func_ov031_020e1af8(void) {}
void ActorUnkBOMB::func_ov031_020e1b1c(void) {}
void ActorUnkBOMB::func_ov031_020e1b7c(void) {}
void ActorUnkBOMB::func_ov031_020e1d18(void) {}
void ActorUnkBOMB::func_ov031_020e1d48(void) {}
void ActorUnkBOMB::func_ov031_020e1d58(void) {}
void ActorUnkBOMB::func_ov031_020e1d74(void) {}
void ActorUnkBOMB::func_ov031_020e1da0(void) {}
void ActorUnkBOMB::func_ov031_020e1ebc(void) {}
void ActorUnkBOMB::func_ov031_020e1ed8(void) {}
void ActorUnkBOMB::func_ov031_020e1f18(void) {}
void ActorUnkBOMB::func_ov031_020e1f88(void) {}
void ActorUnkBOMB::func_ov031_020e1fe0(void) {}
void ActorUnkBOMB::func_ov031_020e1fe4(void) {}
void ActorUnkBOMB::func_ov031_020e2034(void) {}
void ActorUnkBOMB::func_ov031_020e2064(void) {}
void ActorUnkBOMB::func_ov031_020e20d8(void) {}
void ActorUnkBOMB::func_ov031_020e20fc(void) {}
void ActorUnkBOMB::func_ov031_020e2100(void) {}
void ActorUnkBOMB::func_ov031_020e2134(void) {}
void ActorUnkBOMB::func_ov031_020e2220(void) {}
void ActorUnkBOMB::func_ov031_020e2234(void) {}
void ActorUnkBOMB::func_ov031_020e238c(void) {}
void ActorUnkBOMB::func_ov031_020e246c(void) {}
void ActorUnkBOMB::func_ov031_020e24ac(void) {}
void ActorUnkBOMB::func_ov031_020e25bc(void) {}
void ActorUnkBOMB::func_ov031_020e262c(void) {}
void ActorUnkBOMB::func_ov031_020e2680(void) {}
void ActorUnkBOMB::func_ov031_020e2780(void) {}
void ActorUnkBOMB::func_ov031_020e2820(void) {}
void ActorUnkBOMB::func_ov031_020e295c(void) {}
void ActorUnkBOMB::func_ov031_020e2a9c(void) {}
void ActorUnkBOMB::func_ov031_020e2b40(void) {}
void ActorUnkBOMB::func_ov031_020e2c2c(void) {}
void ActorUnkBOMB::func_ov031_020e2d78(void) {}
void ActorUnkBOMB::func_ov031_020e2df4(void) {}
void ActorUnkBOMB::func_ov031_020e2e3c(void) {}
void ActorUnkBOMB::func_ov031_020e328c(void) {}
void ActorUnkBOMB::func_ov031_020e3310(void) {}
void ActorUnkBOMB::func_ov031_020e3340(void) {}
void ActorUnkBOMB::func_ov031_020e337c(void) {}
void ActorUnkBOMB::func_ov031_020e33ac(void) {}
void ActorUnkBOMB::func_ov031_020e33c0(void) {}
void ActorUnkBOMB::func_ov031_020e33dc(void) {}
void ActorUnkBOMB::func_ov031_020e33f8(void) {}
void ActorUnkBOMB::func_ov031_020e3448(void) {}
ActorUnkBOMB::~ActorUnkBOMB() {}
ActorProfileUnkBOMB::~ActorProfileUnkBOMB() {}
+7 -6
View File
@@ -1,4 +1,6 @@
#include "Actor/ActorUnkROCK.hpp"
#include "MapObject/MapObject_10_Pot.hpp"
#include "System/SysNew.hpp"
#include "Unknown/UnkStruct_027e09a8.hpp"
#include "Unknown/UnkStruct_027e09b4.hpp"
@@ -6,7 +8,7 @@
extern "C" Mat3p data_027e0130;
static MapObject_10 data_ov031_021166b8;
static MapObject_10_Pot data_ov031_021166b8;
DECL_PROFILE(ActorProfileUnkROCK);
@@ -17,9 +19,10 @@ Actor *ActorProfileUnkROCK::Create() {
// non-matching
ActorProfileUnkROCK::ActorProfileUnkROCK() :
ActorProfileUnkROCK_Base(ActorId_ROCK) {
this->mUnk_04.Init(FLOAT_TO_FX32(0.5f));
this->mUnk_04.Init(FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.5f));
VecFx32_Init(FLOAT_TO_FX32(7.0017f), FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.0f), &this->mUnk_D8.mUnk_0C);
VecFx32_Init(FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.6f), FLOAT_TO_FX32(1.2f), &this->mUnk_D8.mUnk_18);
this->mUnk_D8.mUnk_18 = FLOAT_TO_FX32(0.6f);
this->mUnk_D8.mUnk_1C = FLOAT_TO_FX32(1.2f);
}
ActorUnkROCK::ActorUnkROCK() :
@@ -105,9 +108,8 @@ void ActorUnkROCK::vfunc_2C(unk32 param1) {
data_027e09b4->func_01fff60c(&this->mPos, 0xC00, 0xC00, 0x1F, 0x0, 0x0);
}
// non-matching
bool ActorUnkROCK::Grab(ActorGrabParams param1) {
if (param1.unk_00 != 0x100 || param1.unk_02 != 1) {
if (param1.mUnk_00.type_index != 0x100 || param1.mUnk_00.unk_id != 1) {
return false;
}
if (!this->Actor::Grab(param1)) {
@@ -117,7 +119,6 @@ bool ActorUnkROCK::Grab(ActorGrabParams param1) {
return true;
}
// non-matching
bool ActorUnkROCK::Drop(ActorGrabParams param1, const VecFx32 *param2) {
if (!this->Actor::Drop(param1, param2)) {
return false;
+1 -1
View File
@@ -60,7 +60,7 @@ void ActorUnkSWBM_98::vfunc_10(Actor *actor) {
}
// non-matching
void ActorUnkSWBM_C8::vfunc_00(unk32 param1, unk32 param2, unk32 param3) {
void ActorUnkSWBM_C8::vfunc_00(unk32 param1, unk32 param2) {
ActorUnkSWBM *actor = this->mUnk_14;
FlushGfxQueue();
@@ -0,0 +1,257 @@
#include "MapObject/MapObjectBombFlower.hpp"
#include "Actor/ActorBomb.hpp"
#include "Actor/ActorManager.hpp"
#include "System/SysNew.hpp"
#include "Unknown/UnkStruct_027e09a8.hpp"
#include "Unknown/UnkStruct_027e0d38.hpp"
extern "C" fx32 func_01ffb464(fx32);
extern "C" void func_01ff9218(fx32 *, fx32, fx32);
extern "C" void func_ov031_020e0f30(ActorRef);
struct UnkStruct_ov031_02102728 {
ActorRef ref;
unk32 mUnk_04;
};
DECL_PROFILE(MapObjectProfileBombFlower);
MapObject *MapObjectProfileBombFlower::Create() {
return new(HeapIndex_ITCM) MapObjectBombFlower();
}
MapObjectProfileBombFlower::MapObjectProfileBombFlower() :
MapObjectProfile_Derived2(MapObjectId_BombFlower, MapObjectId_BombFlower) {
this->mUnk_0E = 0x0;
this->mUnk_06 = 0x0;
this->mUnk_0C = 0x1333;
}
// non-matching
MapObjectBombFlower::MapObjectBombFlower() :
mUnk_48(G3d_GetModelPtr(GET_PROFILE(MapObjectProfileBombFlower)->mUnk_20.mUnk_50), 0x0, 0x0),
mUnk_B4(0x1000),
mUnk_B8(0x0),
mUnk_BA(0x0),
mUnk_BC(true) {
SET_FLAG(this->mFlags, MapObjFlag_8);
if (this->mUnk_20.mParams[1] == 0x1) {
this->mPos.x += FLOAT_TO_FX32(0.5f);
}
this->mUnk_40 = ActorId_Bomb;
this->mUnk_C0.mUnk_08 = (unk32) 0x80007006;
VecFx32_Init(FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.0f), &this->mUnk_C0.mUnk_0C);
this->mUnk_C0.mUnk_18 = FLOAT_TO_FX32(0.5f);
this->mUnk_C0.mUnk_1C = FLOAT_TO_FX32(1.2f);
this->mUnk_10 = &this->mUnk_C0;
SET_FLAG(this->mFlags, MapObjFlag_6);
}
bool MapObjectBombFlower::vfunc_1C(ActorRef param1, unk32 param2, VecFx32 *param3) {
this->mUnk_BC = false;
switch (param2) {
case 0xD:
if (this->mState != MapObjBombFlowerState_0) {
break;
}
func_ov031_020e0f30(param1);
this->SetState(MapObjBombFlowerState_1, 0x0);
break;
case 0x0:
case 0x3:
case 0x7:
case 0x8:
case 0xA:
case 0xC:
if (this->mState != MapObjBombFlowerState_0) {
break;
}
if (param2 != 0) {
this->SetState(MapObjBombFlowerState_1, 0x0);
break;
}
this->SetState(0x6, 0x0);
break;
case 0x4:
if (this->mState != MapObjBombFlowerState_0) {
return false;
}
if (data_027e0d38->func_ov031_020d9c04(0x2, 0x0, 0x1)) {
this->SetState(MapObjBombFlowerState_3, 0x0);
}
return false;
case 0x10:
return true;
default:
break;
}
return false;
}
void MapObjectBombFlower::vfunc_48() {
this->func_ov031_02102728(0x0);
}
void MapObjectBombFlower::vfunc_58() {
this->func_ov031_02102728(0x1);
}
void MapObjectBombFlower::func_ov031_02102728(unk32 param1) {
ActorParams params;
params.mUnk_28 = 0;
params.func_ov000_020975f8();
params.mUnk_28 = *(unk32 *) &this->mUnk_38;
VecFx32_Copy(&this->mPos, &params.mInitialPos);
params.mParams[0] = 0x0;
if (param1 != 0x0) {
params.mParams[0] = 0x1;
}
UnkStruct_ov031_02102728 stack;
Actor::func_ov000_020973f4(&stack.ref, &data_ov000_020b539c_eur, ActorId_Blast, &params, 0);
}
void MapObjectBombFlower::vfunc_08() {
switch (this->mState) {
case MapObjBombFlowerState_4:
if (!this->mUnk_BC) {
break;
}
if (!this->IsInternalTimerOut()) {
break;
}
this->SetState(MapObjBombFlowerState_5, 0x0);
break;
case MapObjBombFlowerState_5:
if (this->IsInternalTimerOut()) {
this->SetState(MapObjBombFlowerState_0, 0x0);
break;
}
fx32 delta = this->mUnk_BA - this->mUnk_B8;
if (delta > 0x0) {
func_01ff9218(&this->mUnk_B4, 0x1000, func_01ffb464((u32) delta << 0xC));
}
this->mUnk_B0 = this->mUnk_B4;
break;
default:
break;
}
this->mUnk_BC = true;
}
bool MapObjectBombFlower::SetState(MapObjState state, unk32 param2) {
if (param2 == 0x0 && this->mState == state) {
return true;
}
this->mState = state;
switch (this->mState) {
case MapObjBombFlowerState_1:
this->vfunc_48();
this->SetState(MapObjBombFlowerState_4, 0x0);
break;
case MapObjBombFlowerState_6:
this->vfunc_58();
this->SetState(MapObjBombFlowerState_4, 0x0);
break;
case MapObjBombFlowerState_2:
this->SetState(MapObjBombFlowerState_4, 0x0);
break;
case MapObjBombFlowerState_4:
this->mUnk_C0.mUnk_04 &= 0xFD;
this->mUnk_C0.mUnk_08 |= 0xA800000;
UNSET_FLAG(this->mFlags, MapObjFlag_9);
this->mUnk_B4 = FLOAT_TO_FX32(0.0f);
this->mUnk_BA = 0xB4;
this->mUnk_B8 = 0x00;
break;
case MapObjBombFlowerState_5:
this->mUnk_BA = 0xA;
this->mUnk_B8 = 0x0;
data_027e09a8->func_ov000_02071b30(0x10C, &this->mPos, 0x0);
break;
case MapObjBombFlowerState_0:
this->MapObjectPot_Base::SetState(state, param2);
this->mUnk_C0.mUnk_04 |= 0x2;
this->mUnk_C0.mUnk_08 &= ~0xA800000;
SET_FLAG(this->mFlags, MapObjFlag_9);
this->mUnk_B4 = FLOAT_TO_FX32(1.0f);
break;
case MapObjBombFlowerState_3:
this->vfunc_38();
this->SetState(MapObjBombFlowerState_4, 0x0);
break;
default:
this->MapObjectPot_Base::SetState(state, param2);
break;
}
this->mUnk_B0 = this->mUnk_B4;
return true;
}
void MapObjectBombFlower::vfunc_14() {
this->mUnk_48.func_ov031_02102c00();
this->MapObject::func_ov000_0209d518(&this->mPos, 0x5A7, 0x5A7, 0x1F);
this->mUnk_48.vfunc_18(&this->mPos);
}
void MapObjectBombFlower::vfunc_38() {
ActorParams params;
params.mUnk_28 = 0;
params.func_ov000_020975f8();
params.mInitialAngle = this->mAngle;
VecFx32_Copy(&this->mPos, &params.mInitialPos);
params.mParams[0] = 0x1;
ActorRef ref;
Actor::func_ov000_020973f4(&ref, &data_ov000_020b539c_eur, this->mUnk_40, &params, 0x0);
ActorBomb *bomb = (ActorBomb *) gpActorManager->func_01fff3b4(ref);
if (bomb == NULL) {
return;
}
bomb->SetState(ActorBombState_4);
}
// non-matching
unk32 MapObjectBombFlower::vfunc_28() {
if (this->mState == MapObjBombFlowerState_4) {
return 0x0;
}
return this->MapObjectPot_Base::vfunc_28();
}
// non-matching
// https://decomp.me/scratch/WRLuY
void MapObjectBombFlower::vfunc_50(ActorRef *param1, MapObjectPot_Base *thisx) {
ActorParams params;
params.mUnk_28 = 0;
params.func_ov000_020975f8();
params.mInitialAngle = thisx->mAngle;
VecFx32_Copy(&thisx->mPos, &params.mInitialPos);
params.mParams[0] = 0x1;
Actor::func_ov000_020973f4(param1, &data_ov000_020b539c_eur, thisx->mUnk_40, &params, 0x0);
}
+8 -8
View File
@@ -382,7 +382,7 @@ void MapObjectDoorBase::vfunc_5C(MapObjState state, unk32 param2) {
auStack_5c.mUnk_36 = unk_1E;
auStack_5c.mUnk_34 = unk_1C;
auStack_5c.mUnk_1E = this->mUnk_14;
auStack_5c.mUnk_1E = this->mAngle;
this->mUnk_74 = data_027e09b8->func_ov000_02073388(&auStack_5c, 0);
}
@@ -466,7 +466,7 @@ void MapObjectDoorBase::vfunc_5C(MapObjState state, unk32 param2) {
auStack_9c.mUnk_36 = unk_1E;
auStack_9c.mUnk_34 = unk_1C;
auStack_9c.mUnk_1E = this->mUnk_14;
auStack_9c.mUnk_1E = this->mAngle;
this->mUnk_74 = data_027e09b8->func_ov000_02073388(&auStack_9c, 0);
this->mUnk_84 = 0x0D;
@@ -648,15 +648,15 @@ void MapObjectDoorBase::vfunc_4C() {}
void MapObjectDoorBase::vfunc_84(unk32 param1, VecFx32 *param2, unk16 *param3) {
VecFx32 local_20;
*param3 = this->mUnk_14;
*param3 = this->mAngle;
if (param1 != 0) {
local_20.x = MUL_FX32(SIN((u16) this->mUnk_14), 0x1000);
local_20.z = MUL_FX32(COS((u16) this->mUnk_14), 0x1000);
local_20.x = MUL_FX32(SIN((u16) this->mAngle), 0x1000);
local_20.z = MUL_FX32(COS((u16) this->mAngle), 0x1000);
local_20.y = 0;
} else {
local_20.x = MUL_FX32(SIN((u16) this->mUnk_14), 0xC00);
local_20.z = MUL_FX32(COS((u16) this->mUnk_14), 0xC00);
local_20.x = MUL_FX32(SIN((u16) this->mAngle), 0xC00);
local_20.z = MUL_FX32(COS((u16) this->mAngle), 0xC00);
local_20.y = 0;
*param3 += -DEG_TO_ANG(180);
@@ -699,7 +699,7 @@ void MapObjectDoorBase::vfunc2_08() {
u16 *temp_r3;
u16 *temp_r3_2;
if (this->mState != MapObjDoorBaseState_1 || !this->mUnk_8C || (u16) (this->mUnk_14 + 0x2000) / DEG_TO_ANG(90) != 2) {
if (this->mState != MapObjDoorBaseState_1 || !this->mUnk_8C || (u16) (this->mAngle + 0x2000) / DEG_TO_ANG(90) != 2) {
return;
}
@@ -176,7 +176,7 @@ void MapObjectDoorDangerSpawn::vfunc_08(void) {
UnkStruct_Copy *temp_r0_3 = (UnkStruct_Copy *) func_ov000_02077590(3);
sp3C = *temp_r0_3;
((unk16 *) sp3C.data)[3] = this->mUnk_14;
((unk16 *) sp3C.data)[3] = this->mAngle;
UnkStruct_027e09bc_0C *temp_r5 = data_027e09bc->mUnk_0C;
@@ -564,7 +564,7 @@ void MapObjectDoorDangerSpawn::vfunc_18(s8 *param1, s8 param2) {
void MapObjectDoorDangerSpawn::vfunc_14(void) {
Mat3p m;
Mat3p_InitYRotation(&m, SIN((u16) this->mUnk_14), COS((u16) this->mUnk_14));
Mat3p_InitYRotation(&m, SIN((u16) this->mAngle), COS((u16) this->mAngle));
VecFx32 pos(this->mPos);
pos.y += -(this->mUnk_6C * 2);
@@ -622,9 +622,9 @@ void MapObjectDoorDangerSpawn::vfunc_74(void) {
local_28.y = local_34.y;
local_28.z = local_34.z;
u16 var_r5 = (u16) (this->mUnk_14 + DEG_TO_ANG(45));
u16 var_r5 = (u16) (this->mAngle + DEG_TO_ANG(45));
if (((u16) this->mUnk_14 / DEG_TO_ANG(90)) == 2 && this->mState == MapObjDoorDangerSpawnState_5) {
if (((u16) this->mAngle / DEG_TO_ANG(90)) == 2 && this->mState == MapObjDoorDangerSpawnState_5) {
var_r5 = 0;
}
@@ -699,8 +699,8 @@ void MapObjectDoorDangerSpawn::vfunc_84(unk32 param1, VecFx32 *param2, unk16 *pa
}
VecFx32 local_24;
*param3 = this->mUnk_14;
iVar1 = this->mUnk_14 + DEG_TO_ANG(30);
*param3 = this->mAngle;
iVar1 = this->mAngle + DEG_TO_ANG(30);
if (param1 != 0) {
local_24.x = MUL_FX32(SIN((u16) iVar1), 0x1666);
local_24.z = MUL_FX32(COS((u16) iVar1), 0x1666);
@@ -715,8 +715,8 @@ void MapObjectDoorDangerSpawn::vfunc_84(unk32 param1, VecFx32 *param2, unk16 *pa
VecFx32_Add(&this->mPos, &local_24, param2);
VecFx32 local_30;
this->mUnk_5A = this->mUnk_14;
iVar1 = this->mUnk_14 - DEG_TO_ANG(30);
this->mUnk_5A = this->mAngle;
iVar1 = this->mAngle - DEG_TO_ANG(30);
if (param1 != 0) {
local_30.x = MUL_FX32(SIN((u16) iVar1), 0x1666);
local_30.z = MUL_FX32(COS((u16) iVar1), 0x1666);
@@ -113,7 +113,7 @@ bool MapObjectDoorSwitch::vfunc_6C(void) {
}
void MapObjectDoorSwitch::vfunc_14(void) {
u16 angle = this->mUnk_14;
u16 angle = this->mAngle;
Mat3p m;
Mat3p_InitYRotation(&m, SIN(angle), COS(angle));
@@ -133,7 +133,7 @@ void MapObjectDoorSwitch::vfunc_74(void) {
VecFx32_Init(0, 0, 0x666, &local_2c);
Mat4x3p m;
u16 angle = this->mUnk_14;
u16 angle = this->mAngle;
Mat4x3p_InitYRotation(&m, SIN(angle), COS(angle));
func_01ffaf74(&local_2c, &m, &local_2c);
@@ -142,7 +142,7 @@ void MapObjectDoorSwitch::vfunc_74(void) {
data_027e0cec->func_ov000_0209ff8c(&this->mUnk_68, 0x8CF, &local_20, 4);
if (this->mUnk_68.mUnk_00 != NULL) {
this->mUnk_68.mUnk_00->mUnk_A4 = this->mUnk_14;
this->mUnk_68.mUnk_00->mUnk_A4 = this->mAngle;
}
}
+9 -1
View File
@@ -13,7 +13,15 @@ MapObject *MapObjectProfileGrass::Create() {
// non-matching
MapObjectProfileGrass::MapObjectProfileGrass() :
MapObjectProfile_Derived2(MapObjectId_Grass, MapObjectId_Grass) {}
MapObjectProfilePot_Base(MapObjectId_Grass, MapObjectId_Grass) {
this->mUnk_D4.mUnk_08 = 0x2A807003;
VecFx32_Init(FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.0f), &this->mUnk_D4.mUnk_0C);
this->mUnk_D4.mUnk_18 = FLOAT_TO_FX32(0.35f);
this->mUnk_D4.mUnk_1C = FLOAT_TO_FX32(1.0f);
this->mUnk_D4.mUnk_04 &= 0xFD;
this->mUnk_06 = -0x1;
this->mUnk_1E &= ~0x1;
}
MapObjectGrass::MapObjectGrass() :
mUnk_58(0x0),
+68 -68
View File
@@ -9,7 +9,7 @@
#include "limits.h"
extern "C" MapObject_10 data_ov031_02118010;
extern "C" MapObject_10_Pot data_ov031_02118010;
extern "C" fx32 func_01ffe868(VecFx32 *, unk32, unk32);
extern "C" void func_ov031_020e0f30(ActorRef);
@@ -22,15 +22,15 @@ MapObject *MapObjectProfilePot::Create() {
MapObjectProfilePot::MapObjectProfilePot() :
MapObjectProfilePot_Base(MapObjectId_Pot, MapObjectId_Pot) {
this->mUnk_0E = 0x0;
this->mUnk_D4.mUnk_08 = 0x7007;
this->mUnk_D4.mUnk_0C.x = FLOAT_TO_FX32(0.0f);
this->mUnk_D4.mUnk_0C.y = FLOAT_TO_FX32(0.0f);
this->mUnk_D4.mUnk_0C.z = FLOAT_TO_FX32(0.0f);
this->mUnk_D4.mUnk_18.x = FLOAT_TO_FX32(0.5f);
this->mUnk_D4.mUnk_18.y = FLOAT_TO_FX32(1.2f);
this->mUnk_06 = 0x0;
this->mUnk_0C = 0x1000;
this->mUnk_0E = 0x0;
this->mUnk_D4.mUnk_08 = 0x7007;
VecFx32_Init(FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.0f), &this->mUnk_D4.mUnk_0C);
this->mUnk_D4.mUnk_18 = FLOAT_TO_FX32(0.5f);
this->mUnk_D4.mUnk_1C = FLOAT_TO_FX32(1.2f);
this->mUnk_06 = 0x0;
this->mUnk_0C = 0x1000;
}
ModelRender_ov000_020b198c::ModelRender_ov000_020b198c(G3d_Model *pModel, unk8 param2) :
@@ -54,78 +54,39 @@ void MapObjectPot::vfunc_04() {
this->mPos.y = func_01ffe868(&this->mPos, 0x1, 0x0);
}
void MapObjectPot::vfunc_14() {
this->func_ov000_0209d518(&this->mPos, 0x5A7, 0x5A7, 0x1F);
this->mUnk_48.vfunc_18(&this->mPos);
}
// non-matching
bool MapObjectPot::vfunc_1C(ActorRef param1, unk32 param2, VecFx32 *param3) {
switch (param2) {
case 0xD:
this->vfunc_44(0x1, 0x0);
this->SetState(0x1, 0x0);
func_ov031_020e0f30(param1);
return true;
break;
case 0x0:
case 0x1:
case 0x7:
case 0x8:
case 0xA:
case 0xB:
this->vfunc_44(0x1, 0x0);
return true;
this->SetState(0x1, 0x0);
break;
case 0x3:
case 0xC:
this->vfunc_44(0x1, 0x0);
this->SetState(0x1, 0x0);
return false;
case 0xA:
case 0xB:
this->SetState(0x1, 0x0);
break;
case 0x4:
if (data_027e0d38->func_ov031_020d9c04(0x1, 0x0, 0x0)) {
Actor *actor = gpActorManager->func_01fff3b4(param1);
if (actor != NULL) {
this->mUnk_14 = actor->mAngle;
this->vfunc_44(0x3, 0x0);
this->mAngle = actor->mAngle;
this->SetState(0x3, 0x0);
break;
}
}
default:
return true;
break;
}
}
void MapObjectPot::vfunc_24(MapObject *param1, VecFx32 param2) {
this->func_ov000_0209d8e8((MapObjectPot_Base *) param1, param2.x);
param1->func_ov000_0209d614(0x1);
if (((MapObjectPot_Base *) param1)->func_ov000_0209da64() != 0x65) {
return;
}
if (param1->mUnk_20.mUnk_0A[0] == 0x0) {
return;
}
param1->func_ov000_0209d2c4(0x0, true);
}
bool MapObjectPot::vfunc_3C() {
if (this->func_ov000_0209da64() == 0x65) {
return false;
}
if (this->func_ov000_0209da64() == 0x0) {
return this->func_ov000_0209d668() == 0x0;
}
return false;
}
bool MapObjectPot::vfunc_40() {
if (this->func_ov000_0209da64() == 0x65) {
if (!this->func_ov000_0209d29c(0x0)) {
return true;
}
if (this->mUnk_20.mUnk_0A[0] == 0x0) {
return true;
}
}
return false;
return true;
}
void MapObjectPot::vfunc_48() {
@@ -140,7 +101,7 @@ void MapObjectPot::vfunc_48() {
data_027e0cec->func_ov000_0209feac(0x822, &stack_09, 0x4, 0x0, 0x0);
if (this->func_ov000_0209da64() != 0x65) {
if (this->MapObjectPot_Base::vfunc_54() != 0x65) {
return;
}
@@ -150,8 +111,13 @@ void MapObjectPot::vfunc_48() {
this->func_ov000_0209d2c4(0x0, true);
}
void MapObjectPot::vfunc_14() {
this->func_ov000_0209d518(&this->mPos, 0x5A7, 0x5A7, 0x1F);
this->mUnk_48.vfunc_18(&this->mPos);
}
unk32 MapObjectPot::vfunc_54() {
if (this->func_ov000_0209da64() == 0x65) {
if (this->MapObjectPot_Base::vfunc_54() == 0x65) {
return 0x1;
}
@@ -159,8 +125,42 @@ unk32 MapObjectPot::vfunc_54() {
return 0x1;
}
return this->func_ov000_0209da64();
return this->MapObjectPot_Base::vfunc_54();
}
MapObjectPot::~MapObjectPot() {}
MapObjectProfilePot::~MapObjectProfilePot() {}
void MapObjectPot::vfunc_24(MapObject *param1, VecFx32 param2) {
this->MapObjectPot_Base::vfunc_24(param1, param2);
param1->func_ov000_0209d614(0x1);
if (((MapObjectPot_Base *) param1)->MapObjectPot_Base::vfunc_54() != 0x65) {
return;
}
if (param1->mUnk_20.mUnk_0A[0] == 0x0) {
return;
}
param1->func_ov000_0209d2c4(0x0, true);
}
bool MapObjectPot::vfunc_3C() {
if (this->MapObjectPot_Base::vfunc_54() == 0x65) {
return false;
}
if (this->MapObjectPot_Base::vfunc_54() == 0x0) {
return this->func_ov000_0209d668() == 0x0;
}
return false;
}
bool MapObjectPot::vfunc_40() {
if (this->MapObjectPot_Base::vfunc_54() == 0x65) {
if (!this->func_ov000_0209d29c(0x0)) {
return true;
}
if (this->mUnk_20.mUnk_0A[0] == 0x0) {
return true;
}
}
return false;
}
@@ -1,29 +0,0 @@
//! TODO: This file was generated automatically and might contain errors
#include "MapObject/MapObjectUnkBMFL.hpp"
#include "System/SysNew.hpp"
DECL_PROFILE(MapObjectProfileUnkBMFL);
MapObject *MapObjectProfileUnkBMFL::Create() {
return new(HeapIndex_2) MapObjectUnkBMFL();
}
MapObjectProfileUnkBMFL::MapObjectProfileUnkBMFL() :
MapObjectProfile(MapObjectId_BMFL) {}
MapObjectUnkBMFL::MapObjectUnkBMFL() {}
void MapObjectUnkBMFL::func_ov031_021025c4(void) {}
void MapObjectUnkBMFL::func_ov031_02102708(void) {}
void MapObjectUnkBMFL::func_ov031_02102718(void) {}
void MapObjectUnkBMFL::func_ov031_02102728(void) {}
void MapObjectUnkBMFL::func_ov031_021027a4(void) {}
void MapObjectUnkBMFL::func_ov031_02102894(void) {}
void MapObjectUnkBMFL::func_ov031_021029f0(void) {}
void MapObjectUnkBMFL::func_ov031_02102a40(void) {}
void MapObjectUnkBMFL::func_ov031_02102ad8(void) {}
void MapObjectUnkBMFL::func_ov031_02102af4(void) {}
MapObjectUnkBMFL::~MapObjectUnkBMFL() {}
MapObjectProfileUnkBMFL::~MapObjectProfileUnkBMFL() {}
+4 -4
View File
@@ -165,12 +165,12 @@ void MapObjectUnkSKDI::func_ov031_0210643c(unk32 param1) {
VecFx32 vec;
VecFx32_Init(this->mPos.x, this->mPos.y + FLOAT_TO_FX32(1.25f), this->mPos.z, &vec);
UnkStruct_027e0cec *data = data_027e0cec;
for (ActorUnkBOMB_unk *ptr = this->mUnk_04C; ptr != this->mUnk_04C + ARRAY_LEN(this->mUnk_04C); ++ptr) {
for (ActorBomb_unk *ptr = this->mUnk_04C; ptr != this->mUnk_04C + ARRAY_LEN(this->mUnk_04C); ++ptr) {
data->func_ov000_020a0140(ptr, &vec);
}
} else {
UnkStruct_027e0cec *data = data_027e0cec;
for (ActorUnkBOMB_unk *ptr = this->mUnk_04C; ptr != this->mUnk_04C + ARRAY_LEN(this->mUnk_04C); ++ptr) {
for (ActorBomb_unk *ptr = this->mUnk_04C; ptr != this->mUnk_04C + ARRAY_LEN(this->mUnk_04C); ++ptr) {
data->func_ov000_020a0110(ptr);
}
}
@@ -265,7 +265,7 @@ void MapObjectUnkSKDI::func_ov031_02106678(MapObjState state, unk32 param2) {
this->func_ov000_0209d2c4(0x0, true);
}
UnkStruct_027e0cec *data = data_027e0cec;
for (ActorUnkBOMB_unk *ptr = this->mUnk_04C; ptr != this->mUnk_04C + ARRAY_LEN(this->mUnk_04C); ++ptr) {
for (ActorBomb_unk *ptr = this->mUnk_04C; ptr != this->mUnk_04C + ARRAY_LEN(this->mUnk_04C); ++ptr) {
data->func_ov000_020a0140(ptr, &sp48);
}
unk32 dc = this->mUnk_0D4.mUnk_08;
@@ -287,7 +287,7 @@ void MapObjectUnkSKDI::func_ov031_02106678(MapObjState state, unk32 param2) {
if (param2 == 0) {
this->func_ov000_0209d2c4(0x0, false);
UnkStruct_027e0cec *data = data_027e0cec;
for (ActorUnkBOMB_unk *ptr = this->mUnk_04C; ptr != this->mUnk_04C + ARRAY_LEN(this->mUnk_04C); ++ptr) {
for (ActorBomb_unk *ptr = this->mUnk_04C; ptr != this->mUnk_04C + ARRAY_LEN(this->mUnk_04C); ++ptr) {
data->func_ov000_020a0110(ptr);
}
if (this->mUnk_0FC == 0) {
+7 -7
View File
@@ -27,11 +27,11 @@ MapObjectProfileUnkSWHT::MapObjectProfileUnkSWHT() :
MapObjectProfilePot_Base(MapObjectId_SWHT, MapObjectId_SWHT) {
this->mUnk_D4.mUnk_08 = 0x84007009;
VecFx32_Init(FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.0f), &this->mUnk_D4.mUnk_0C);
this->mUnk_D4.mUnk_18.x = FLOAT_TO_FX32(0.35f);
this->mUnk_D4.mUnk_18.y = FLOAT_TO_FX32(1.2f);
this->mUnk_06 = 0x0;
this->mUnk_0C = 0x1333;
this->mUnk_20.mUnk_15 = 0x1;
this->mUnk_D4.mUnk_18 = FLOAT_TO_FX32(0.35f);
this->mUnk_D4.mUnk_1C = FLOAT_TO_FX32(1.2f);
this->mUnk_06 = 0x0;
this->mUnk_0C = 0x1333;
this->mUnk_20.mUnk_15 = 0x1;
}
MapObjectUnkSWHT::MapObjectUnkSWHT() :
@@ -43,8 +43,8 @@ MapObjectUnkSWHT::MapObjectUnkSWHT() :
this->mUnk_054.vfunc_08(G3d_GetModelPtr(GET_PROFILE(MapObjectProfileUnkSWHT)->mUnk_20.mUnk_50));
this->mUnk_0B4.mpModel = this->mUnk_054.mpModel;
unk32 param2 = data_ov031_021179e8.func_ov000_02058a24();
unk32 param1 = data_ov031_021179e8.func_ov000_02058a84(0x3, &data_ov031_02110ce0);
unk32 param2 = data_ov031_021179e8.func_ov000_02058a24();
UnkStruct_ov000_02058a84 *param1 = data_ov031_021179e8.func_ov000_02058a84(0x3, &data_ov031_02110ce0);
this->mUnk_0B4.func_ov000_020577a4(param1, param2, 0x1);
@@ -119,7 +119,7 @@ void MapObjectUnkSTAT::vfunc_0C(void) {
void MapObjectUnkSTAT::vfunc_14(void) {
VecFx32 vec;
VecFx32_Init(mPos.x + mUnk_60, mPos.y + mUnk_64, mPos.z + mUnk_68, &vec);
mUnk_40.func_01ffc6d4(mUnk_14_AngleStruct, &vec);
mUnk_40.func_01ffc6d4(mAngleStruct, &vec);
}
void MapObjectUnkSTAT::func_ov063_0215f7ac(void) {
@@ -220,7 +220,7 @@ void MapObjectUnkSTAT::func_ov063_0215fc40(unk32 param1) {
}
unk32 MapObjectUnkSTAT::func_ov063_0215fce0(void) {
return func_02016b8c(&mPos, data_027e0ce0->func_01fff148(0), mUnk_54, mUnk_14_AngleStruct, mUnk_58, 1);
return func_02016b8c(&mPos, data_027e0ce0->func_01fff148(0), mUnk_54, mAngleStruct, mUnk_58, 1);
}
MapObjectUnkSTAT::~MapObjectUnkSTAT() {}
+6 -7
View File
@@ -37,7 +37,7 @@ extern const char *data_ov000_020aa248; // .nsbmd
extern "C" void func_ov000_0205ca74(unk32);
extern "C" void func_01ffb6e4(unk32, const void *, void *);
extern "C" void func_01ffc5a0(ModelRender *, unk32, u16, void *, unk32);
extern "C" void func_01ffc5a0(ModelRender *, unk32, UnkAngleStruct, void *);
extern "C" void func_ov000_0208f820();
extern "C" void func_ov000_0208ba10(void *, void *, unk32);
extern "C" void func_02015ea8(unk32, void *);
@@ -425,18 +425,17 @@ static const AdventureFlag sAdvFlagItemMap[] = {
AdventureFlag_Nothing, // ItemId_EngineerUniform
};
// non-matching
void UnkStruct_PlayerGet_74::vfunc_00(unk32 param1, unk32 param2, unk32 param3) {
void UnkStruct_PlayerGet_74::vfunc_00(unk32 param1, unk32 param2) {
PlayerGet *unk_14 = (PlayerGet *) this->mUnk_14;
func_01ffc5a0(&unk_14->mUnk_8C, unk_14->mUnk_6C, unk_14->mUnk_70, &this->mUnk_04, param3);
func_01ffc5a0(&unk_14->mUnk_8C, unk_14->mUnk_6C, unk_14->mUnkAngleStruct, &this->mUnk_04);
}
PlayerGet::PlayerGet() :
mUnk_54(0, 0, -1, ItemId_None),
mUnk_64(mUnk_44, -1),
mUnk_6C(0x1000),
mUnk_70(0),
mAngle(0),
mUnk_72(0),
mUnk_73(0),
mUnk_74(this),
@@ -536,7 +535,7 @@ void PlayerGet::vfunc_0C(UnkStruct_PlayerGet_vfunc_0C_param1 *param1) {
}
this->mUnk_54.mItemId = itemId;
this->mUnk_70 = 0;
this->mAngle = 0;
this->mUnk_2C->mUnk_58 = 0;
char auStack_108[12];
func_ov000_0208ba10(auStack_108, &this->mUnk_24->mUnk_94, 0);
@@ -955,7 +954,7 @@ void PlayerGet::vfunc_10(unk32 param1, unk32 param2) {
break;
}
this->mUnk_70 += 0x10E;
this->mAngle += 0x10E;
if (this->mUnk_73 == 0) {
break;