Files
st/src/063_Shrine/MapObject/MapObjectUnkMTJR.cpp
T
Yanis 07a5bd9fcc Create Timer struct, improve angle usage and name known virtual functions (#154)
* name some actor vfuncs

* name some map object vfuncs

* remove angle union

* fix lots of clangd errors

* create Timer struct

* fix regressions
2026-10-02 20:54:43 +02:00

129 lines
3.3 KiB
C++

#include "MapObject/MapObjectUnkMTJR.hpp"
#include "System/Random.hpp"
#include "Unknown/UnkStruct_027e09a8.hpp"
#include "Unknown/UnkStruct_027e0cec.hpp"
#include "flags.h"
#include "nitro/fx.h"
#include "nitro/math.h"
#include "profile.hpp"
// Overlay 31
extern "C" void func_ov031_020e0f30(ActorRef);
DECL_PROFILE(MapObjectProfileUnkMTJR);
MapObject *MapObjectProfileUnkMTJR::Create() {
return new(HeapIndex_ITCM) MapObjectUnkMTJR();
}
// non-matching
MapObjectProfileUnkMTJR::MapObjectProfileUnkMTJR() :
MapObjectProfileUnkSTAT_Base(MapObjectId_MTJR, MapObjectId_MTJR) {
mUnk_D4.mUnk_08 = 0x7009;
VecFx32_Init(0, 0, 0, &mUnk_D4.mUnk_0C);
mUnk_D4.mUnk_18.x = FLOAT_TO_FX32(0.7f);
mUnk_D4.mUnk_18.y = FLOAT_TO_FX32(2.4f);
mUnk_06 = -1;
UNSET_FLAG2(mUnk_1E, 0x0);
}
MapObjectUnkMTJR::MapObjectUnkMTJR() :
mUnk_40(G3d_GetModelPtr(GET_PROFILE_20_50(MapObjectProfileUnkMTJR))),
mUnk_A0(2),
mUnk_A4(0, 0),
mUnk_A8(NULL),
mUnk_AC(-1),
mUnk_B0(0) {}
bool MapObjectUnkMTJR::Init() {
if (!this->func_ov000_0209d29c(0)) {
return false;
}
mPos.x += FLOAT_TO_FX32(.5f);
mPos.z += FLOAT_TO_FX32(.5f);
mUnk_10 = GET_PROFILE_D4(MapObjectProfileUnkMTJR);
mUnk_AC = 0x86F;
mUnk_B0 = 4;
mUnk_A8.func_ov000_020a0334();
this->func_ov063_02161254(0);
return true;
}
// non-matching
void MapObjectUnkMTJR::vfunc_08() {
if (mUnk_A0 == 0) {
fx32 tmp_x = mPos.x - FLOAT_TO_FX32(1.f) + (fx32) gRandom.Next32(0);
fx32 tmp_y = mPos.y + (fx32) gRandom.Next32(0x1801);
fx32 tmp_z = mPos.z - FLOAT_TO_FX32(1.f) + (fx32) gRandom.Next32(0);
VecFx32 stack_vec = {tmp_x, tmp_y, tmp_z};
data_027e0cec->func_ov000_020a0220(&mUnk_A8, &stack_vec);
}
this->mUnk_A4.Update();
}
void MapObjectUnkMTJR::vfunc_0C() {
this->vfunc_08();
}
bool MapObjectUnkMTJR::vfunc_1C(ActorRef param1, unk32 param2, VecFx32 *param3) {
switch (param2) {
case 13:
this->func_ov063_02161254(1);
func_ov031_020e0f30(param1);
break;
case 0:
case 1:
case 7:
case 8:
this->func_ov063_02161254(1);
break;
case 3:
case 12:
this->func_ov063_02161254(1);
return false;
break;
case 10:
case 11:
this->func_ov063_02161254(1);
break;
case 2:
case 4:
case 5:
case 6:
case 9:
default:
break;
}
return true;
}
void MapObjectUnkMTJR::func_ov063_02161254(unk32 param1) {
this->mUnk_A0 = param1;
this->mUnk_A4.Reset();
if (param1 != 0 && param1 == 1) {
this->func_ov063_02161288();
}
}
void MapObjectUnkMTJR::func_ov063_02161288(void) {
data_027e09a8->func_ov000_02071b30(0xFC, &mPos, 0);
data_027e09a8->func_ov000_02071eac(&mPos);
VecFx32 vec = mPos;
data_027e0cec->func_ov000_0209feac(0xCC17, &vec, 4, 0, 0);
data_027e0cec->func_ov000_0209feac(0xCC18, &vec, 4, 0, 0);
data_027e0cec->func_ov000_0209feac(0xCC19, &vec, 4, 0, 0);
data_027e0cec->func_ov000_0209feac(0xCC1A, &vec, 4, 0, 0);
this->func_ov000_0209d2c4(1, true);
UNSET_FLAG(mFlags, 0);
}
void MapObjectUnkMTJR::vfunc_14(unk32 param1) {
this->func_ov000_0209d518(&mPos, 0xD9A, 0xD9A, 0x1F);
mUnk_40.vfunc_18(&mPos);
}