Decompile Door Map Objects 1 (DRDS, DRCK, DRKY, DRSW, DRTC) (#56)

* random docs

* "match" ctor

* match ctor and link miniblocks

* DRDS 98%

* jp differences

* improve MapObjectUnkDRDS::vfunc_04

* MapObjectDoorBase 78%

* fix regressions

* MapObjectDoorBase 98%

* MapObjectUnkDRKY 98%

* MapObjectUnkDRSW 100%

* fix build issues

* MapObjectUnkDRTC 100%

* DRCK delinks

* MapObjectUnkDRCK 98%
This commit is contained in:
Yanis
2026-04-23 18:42:59 +02:00
committed by GitHub
parent 4a07ec0baa
commit c3c34ebe5a
68 changed files with 3685 additions and 986 deletions
@@ -0,0 +1,760 @@
#define DOORBASE_DTOR_NOINLINE
#include "MapObject/MapObjectDoorBase.hpp"
#include "Unknown/Common.hpp"
#include "Unknown/UnkMemFuncs.h"
#include "Unknown/UnkStruct_0204af1c.hpp"
#include "Unknown/UnkStruct_027e0998.hpp"
#include "Unknown/UnkStruct_027e09b8.hpp"
extern "C" unk32 func_01ffb464(unk32 param1);
extern "C" void func_01ff9218(void *, unk32, unk32);
extern "C" unk32 func_01ffb428(unk32, unk32);
extern "C" void *func_ov000_02077590(unk32);
class UnkStruct_ov031_02117210 {
public:
/* 00 */ MapObject_10 mUnk_00[3];
/* 6C */
UnkStruct_ov031_02117210();
};
const UnkStruct_ov031_021150b0 data_ov031_02114ffc(0x1E66);
UnkStruct_ov031_02117210 data_ov031_02117210;
UnkStruct_ov019_020d24c8_28_258_00 data_ov031_02117204(NULL, 0);
ARM UnkStruct_ov031_02117210::UnkStruct_ov031_02117210() {
this->mUnk_00[0].mUnk_0C.x = -FLOAT_TO_Q20(1.0f);
this->mUnk_00[0].mUnk_0C.y = FLOAT_TO_Q20(0.0f);
this->mUnk_00[0].mUnk_0C.z = -FLOAT_TO_Q20(0.35f);
this->mUnk_00[0].mUnk_18.x = FLOAT_TO_Q20(1.0f);
this->mUnk_00[0].mUnk_18.y = FLOAT_TO_Q20(2.4f);
this->mUnk_00[0].mUnk_18.z = FLOAT_TO_Q20(0.35f);
this->mUnk_00[0].mUnk_04 &= 0xFE;
this->mUnk_00[0].mUnk_08 = 0x7009;
this->mUnk_00[1].mUnk_0C.x = -FLOAT_TO_Q20(1.0f);
this->mUnk_00[1].mUnk_0C.y = FLOAT_TO_Q20(0.0f);
this->mUnk_00[1].mUnk_0C.z = -FLOAT_TO_Q20(1.35f);
this->mUnk_00[1].mUnk_18.x = FLOAT_TO_Q20(1.0f);
this->mUnk_00[1].mUnk_18.y = FLOAT_TO_Q20(2.4f);
this->mUnk_00[1].mUnk_18.z = FLOAT_TO_Q20(0.35f);
this->mUnk_00[1].mUnk_04 &= 0xFE;
this->mUnk_00[1].mUnk_08 = 0x7009;
this->mUnk_00[2].mUnk_0C.x = -FLOAT_TO_Q20(0.35f);
this->mUnk_00[2].mUnk_0C.y = FLOAT_TO_Q20(0.0f);
this->mUnk_00[2].mUnk_0C.z = -FLOAT_TO_Q20(1.0f);
this->mUnk_00[2].mUnk_18.x = FLOAT_TO_Q20(0.35f);
this->mUnk_00[2].mUnk_18.y = FLOAT_TO_Q20(2.4f);
this->mUnk_00[2].mUnk_18.z = FLOAT_TO_Q20(1.0f);
this->mUnk_00[2].mUnk_04 &= 0xFE;
this->mUnk_00[2].mUnk_08 = 0x7009;
}
ARM MapObjectDoorBase::MapObjectDoorBase() :
mUnk_68(NULL) {
this->mUnk_6C = 0;
this->mUnk_70 = 0x148;
this->mUnk_74 = -1;
this->mUnk_78 = 0x32;
this->mUnk_7A = 0x19;
this->mUnk_7C = 10;
this->mUnk_7E = 0;
this->mUnk_80 = 0;
this->mUnk_82 = 0;
this->mUnk_84 = 0;
this->mUnk_86 = true;
this->mUnk_87 = true;
this->mUnk_88 = true;
this->mUnk_89 = false;
this->mUnk_8A = true;
this->mUnk_8B = true;
this->mUnk_8C = false;
this->mUnk_8D = false;
this->mUnk_8E = false;
this->mUnk_8F = false;
this->mUnk_90 = true;
this->mUnk_91 = true;
data_ov031_02117204.func_ov000_0205fc20(0x5D, 0x1F, NULL, NULL);
}
ARM void MapObjectDoorBase::func_ov031_020fbf10(bool param1, bool param2) {
if (this->IsOrientedVertically()) {
this->mPos.z += FLOAT_TO_Q20(0.5f);
Vec2b local_16(1, 2);
this->func_ov000_0209d2f0(5, 1, &local_16);
} else {
this->mPos.x += FLOAT_TO_Q20(0.5f);
Vec2b local_18(2, 1);
this->func_ov000_0209d2f0(5, 1, &local_18);
}
MapObject_10 *pMapObject_10;
if (!this->IsOrientedVertically()) {
if (param1) {
pMapObject_10 = &data_ov031_02117210.mUnk_00[1];
} else {
pMapObject_10 = &data_ov031_02117210.mUnk_00[0];
}
} else {
pMapObject_10 = &data_ov031_02117210.mUnk_00[2];
}
this->mUnk_10 = pMapObject_10;
SET_FLAG(this->mFlags, MapObjFlag_5);
if (this->vfunc_64()) {
this->vfunc_5C(8, 1);
if (param2) {
this->func_ov031_020fcd40();
}
} else {
this->vfunc_5C(2, 1);
}
}
ARM void MapObjectDoorBase::vfunc_08() {
this->vfunc_70();
switch (this->mUnk_16) {
case 0:
if (this->mUnk_80 > 0) {
this->mUnk_80--;
}
if (this->mUnk_80 > 0) {
func_01ff9218(&this->mUnk_6C, 0, func_01ffb464(INT_TO_Q20(this->mUnk_80)));
}
if (this->mUnk_80 == 0) {
this->vfunc_5C(1, 0);
break;
}
this->mUnk_82++;
if (this->mUnk_88) {
this->vfunc_78();
}
if (!this->mUnk_86 && this->vfunc_68()) {
this->vfunc_5C(3, 0);
}
break;
case 1:
this->mUnk_82++;
if (this->mUnk_82 >= this->mUnk_7A + this->mUnk_7C && this->vfunc_88()) {
this->vfunc_58();
this->vfunc_5C(2, 0);
break;
}
if (!this->mUnk_86 && this->vfunc_68()) {
this->vfunc_5C(3, 0);
}
break;
case 2:
if (this->vfunc_68()) {
this->vfunc_5C(3, 0);
}
break;
case 3:
this->mUnk_84++;
if (!this->mUnk_86 && this->vfunc_6C()) {
this->vfunc_5C(0, 0);
break;
}
this->mUnk_82++;
if (this->mUnk_82 >= 0x1D) {
this->vfunc_5C(4, 0);
}
break;
case 4:
this->mUnk_84++;
if (!this->mUnk_86 && this->vfunc_6C()) {
this->vfunc_5C(0, 0);
break;
}
this->mUnk_82++;
if (this->mUnk_82 >= 0x28) {
this->vfunc_5C(5, 0);
}
break;
case 5:
this->mUnk_84++;
if (!this->mUnk_86 && this->vfunc_6C()) {
this->vfunc_5C(0, 0);
break;
}
this->mUnk_80--;
if (this->mUnk_80 > 0) {
func_01ff9218(&this->mUnk_6C, 0x1000, func_01ffb464(INT_TO_Q20(this->mUnk_80)));
}
if (this->mUnk_88) {
if (this->mUnk_80 > 7) {
this->vfunc_78();
} else {
this->vfunc_7C();
}
}
if (this->mUnk_80 <= 0) {
if (this->mUnk_80 == 0 && this->mUnk_91) {
this->vfunc_40();
}
this->mUnk_82++;
if (this->mUnk_82 >= 0x32) {
this->mUnk_82 = 0x32;
this->vfunc_5C(6, 0);
}
}
break;
case 6:
this->mUnk_82++;
this->mUnk_84++;
if (this->mUnk_82 >= 0x32) {
this->mUnk_82 = 0x32;
this->vfunc_5C(7, 0);
}
break;
case 7:
this->mUnk_82++;
this->mUnk_84++;
if (this->mUnk_82 >= 0x50) {
this->vfunc_5C(8, 0);
}
// fallthrough
case 8:
if (!this->vfunc_6C()) {
break;
}
this->vfunc_5C(0, 0);
break;
default:
break;
}
this->vfunc_60();
}
ARM void MapObjectDoorBase::vfunc_40() {}
ARM void MapObjectDoorBase::vfunc_0C() {
if (this->mUnk_74 >= 0 && data_027e09b8->func_ov000_020732ec(this->mUnk_74)) {
this->vfunc_08();
} else if (this->mUnk_16 == 2 || this->mUnk_16 == 8) {
this->vfunc_08();
}
}
ARM void MapObjectDoorBase::vfunc_60() {
switch (this->mUnk_16) {
case 0:
if (!this->mUnk_86 && !GET_FLAG(this->mFlags, MapObjFlag_1) && this->mUnk_6C <= FLOAT_TO_Q20(0.5f)) {
this->func_ov031_020fcf0c(1);
}
this->vfunc_54();
break;
case 2:
if (this->mUnk_86 && !GET_FLAG(this->mFlags, MapObjFlag_1) && this->mUnk_6C <= FLOAT_TO_Q20(0.5f)) {
this->func_ov031_020fcf0c(1);
this->vfunc_58();
}
break;
case 5:
if (GET_FLAG(this->mFlags, MapObjFlag_1) && this->mUnk_6C >= FLOAT_TO_Q20(0.5f)) {
this->func_ov031_020fcf0c(0);
}
break;
case 1:
if (this->mUnk_86) {
this->func_ov031_020fcf0c(1);
this->vfunc_58();
}
break;
default:
break;
}
}
struct UnkStackStruct {
s16 mUnk_00;
s16 mUnk_02;
s16 mUnk_04;
s16 mUnk_06;
unk32 mUnk_08;
Vec3p mUnk_0C;
u16 mUnk_18;
u16 mUnk_1A;
u16 mUnk_1C;
u16 mUnk_1E;
};
ARM void MapObjectDoorBase::vfunc_5C(unk32 param1, unk32 param2) {
UnkStackStruct1 auStack_5c;
UnkStackStruct1 auStack_9c;
this->mUnk_16 = param1;
switch (this->mUnk_16) {
case 0:
if (this->mUnk_88) {
this->vfunc_74();
}
this->mUnk_82 = 0;
this->mUnk_84 = 0x0D;
this->mUnk_80 =
(MUL_Q20(INT_TO_Q20(this->mUnk_7A), func_01ffb428(this->mUnk_6C, 0x1000)) + FLOAT_TO_Q20(0.5f)) >> 12;
this->vfunc_50();
if (this->mUnk_86 && param2 == 0) {
func_ov000_02072fd0(&auStack_5c);
void *var_r0 = this;
if (this != NULL) {
var_r0 = (u8 *) this + 0x40;
}
auStack_5c.mUnk_04 = var_r0;
auStack_5c.mUnk_00 = 0x7B;
auStack_5c.mUnk_0C.x = this->mPos.x;
auStack_5c.mUnk_0C.y = this->mPos.y;
auStack_5c.mUnk_0C.z = this->mPos.z;
auStack_5c.mUnk_08 = this->mUnk_7A + this->mUnk_7C + 1 + this->vfunc_8C();
auStack_5c.mUnk_38 |= 0x80;
if (!this->mUnk_8C) {
this->mUnk_48 = -1;
} else {
this->mUnk_48 = 0;
this->vfunc_84(1, &this->mUnk_4C, &this->mUnk_4A);
}
if (this->mUnk_90) {
auStack_5c.mUnk_3A = 2;
auStack_5c.mUnk_3B = 2;
auStack_5c.mUnk_38 |= 0x41;
} else {
auStack_5c.mUnk_3A = 0;
auStack_5c.mUnk_3B = 0;
}
UnkStackStruct *puVar5 = (UnkStackStruct *) func_ov000_02077590(3);
auStack_5c.mUnk_18 = puVar5->mUnk_00;
auStack_5c.mUnk_1A = puVar5->mUnk_02;
auStack_5c.mUnk_1C = puVar5->mUnk_04;
auStack_5c.mUnk_1E = puVar5->mUnk_06;
auStack_5c.mUnk_20 = puVar5->mUnk_08;
auStack_5c.mUnk_24.coords = puVar5->mUnk_0C.coords;
u16 unk_18 = puVar5->mUnk_18;
u16 unk_1A = puVar5->mUnk_1A;
auStack_5c.mUnk_32 = unk_1A;
auStack_5c.mUnk_30 = unk_18;
u16 unk_1C = puVar5->mUnk_1C;
u16 unk_1E = puVar5->mUnk_1E;
auStack_5c.mUnk_36 = unk_1E;
auStack_5c.mUnk_34 = unk_1C;
auStack_5c.mUnk_1E = this->mUnk_14;
this->mUnk_74 = data_027e09b8->func_ov000_02073388(&auStack_5c, 0);
}
if (param2 == 0) {
this->func_ov000_0209d614(0);
}
break;
case 1:
if (this->mUnk_91) {
this->vfunc_48();
}
this->mUnk_82 = 0;
this->vfunc_7C();
break;
case 2:
this->mUnk_84 = 0x0D;
this->func_ov031_020fcf0c(1);
break;
case 3:
this->vfunc_7C();
this->mUnk_80 =
(MUL_Q20(INT_TO_Q20(this->mUnk_78), func_01ffb428(0x1000 - this->mUnk_6C, 0x1000)) + FLOAT_TO_Q20(0.5f)) >> 12;
if (this->mUnk_8A) {
this->mUnk_82 = 0;
this->mUnk_84 = 0;
if (this->mUnk_86 && param2 == 0) {
func_ov000_02072fd0(&auStack_9c);
void *var_r1 = this;
if (this != NULL) {
var_r1 = (u8 *) this + 0x40;
}
auStack_9c.mUnk_04 = var_r1;
auStack_9c.mUnk_00 = 0x76;
auStack_9c.mUnk_0C.x = this->mPos.x;
auStack_9c.mUnk_0C.y = this->mPos.y;
auStack_9c.mUnk_0C.z = this->mPos.z;
auStack_9c.mUnk_08 = this->mUnk_7E + (this->mUnk_78 + 0x51);
auStack_9c.mUnk_3A = 9;
auStack_9c.mUnk_3B = 2;
auStack_9c.mUnk_38 |= 0x01;
auStack_9c.mUnk_38 |= 0xC0;
if (this->mUnk_8D) {
this->mUnk_48 = 0x19;
this->vfunc_84(0, &this->mUnk_4C, &this->mUnk_4A);
} else {
this->mUnk_48 = -1;
}
if (this->mUnk_89 && this->mUnk_20.mUnk_16 != 0) {
auStack_9c.mUnk_38 |= 0x04;
}
if (this->mUnk_8E) {
auStack_9c.mUnk_38 |= 0x10;
}
if (this->mUnk_8F) {
auStack_9c.mUnk_38 |= 0x20;
}
auStack_9c.mUnk_38 |= 0x200;
UnkStackStruct *puVar5 = (UnkStackStruct *) func_ov000_02077590(2);
auStack_9c.mUnk_18 = puVar5->mUnk_00;
auStack_9c.mUnk_1A = puVar5->mUnk_02;
auStack_9c.mUnk_1C = puVar5->mUnk_04;
auStack_9c.mUnk_1E = puVar5->mUnk_06;
auStack_9c.mUnk_20 = puVar5->mUnk_08;
auStack_9c.mUnk_24.coords = puVar5->mUnk_0C.coords;
u16 unk_18 = puVar5->mUnk_18;
u16 unk_1A = puVar5->mUnk_1A;
auStack_9c.mUnk_32 = unk_1A;
auStack_9c.mUnk_30 = unk_18;
u16 unk_1C = puVar5->mUnk_1C;
u16 unk_1E = puVar5->mUnk_1E;
auStack_9c.mUnk_36 = unk_1E;
auStack_9c.mUnk_34 = unk_1C;
auStack_9c.mUnk_1E = this->mUnk_14;
this->mUnk_74 = data_027e09b8->func_ov000_02073388(&auStack_9c, 0);
this->mUnk_84 = 0x0D;
}
}
break;
case 4:
this->vfunc_7C();
if (this->mUnk_8A && this->mUnk_86 && param2 == 0) {
unk32 var_r5 = 1;
unk32 var_r1_2 = 2;
if (this->IsOrientedVertically()) {
var_r1_2 = -1;
}
if (this->mUnk_8D != 0) {
var_r5 = 2;
}
if (this->mUnk_87) {
unk32 sp8;
MapObject::func_ov000_0209d54c(&sp8, this, 1, &this->mPos, var_r1_2, var_r5);
}
}
break;
case 5:
if (this->mUnk_88) {
this->vfunc_74();
}
break;
case 6:
this->vfunc_7C();
break;
case 7:
break;
case 8:
this->vfunc_7C();
if (param2 == 0) {
this->vfunc_80();
}
this->func_ov031_020fcf0c(0);
this->mUnk_82 = 0;
this->mUnk_84 = 0;
this->mUnk_6C = 0x1000;
break;
default:
break;
}
}
ARM void MapObjectDoorBase::vfunc_48() {}
ARM bool MapObjectDoorBase::vfunc_64() {
return this->func_ov000_0209d668();
}
ARM bool MapObjectDoorBase::vfunc_68() {
return this->func_ov000_0209d29c(0);
}
ARM bool MapObjectDoorBase::vfunc_6C() {
return false;
}
struct stack_struct {
/* 00 */ void *mUnk_00;
/* 04 */ unk8 mUnk_04;
/* 05 */ unk8 mUnk_05;
/* 06 */ u16 mUnk_06;
/* 08 */
};
extern "C" void func_01ff9fbc(Mat2p *, unk32, Mat2p *);
extern q4 data_0203f964[];
ARM void MapObjectDoorBase::func_ov031_020fcb78(s8 *param1, s8 param2) {
unk32 sp10;
stack_struct sp8;
unk32 sp4;
bool var_r2;
if (!GET_FLAG(this->mFlags, MapObjFlag_5)) {
return;
}
var_r2 = data_ov031_02117204.mUnk_04 & 1;
if (param1[0] != var_r2 && param1[1] != var_r2) {
return;
}
bool uVar4 = (this->mUnk_84 % 0x1A) >= 0x0D ? true : false;
//! TODO: fake match?
sp4 = *(u32 *) &this->mUnk_38;
if (data_027e0998->vfunc_00(&this->mPos, &sp10, &sp4) && uVar4 != 0) {
Mat2p m;
if (this->IsOrientedVertically()) {
Mat2p_InitRotation(&m, data_0203f964[0], data_0203f964[1]);
} else {
Mat2p_InitIdentity(&m);
}
func_01ff9fbc(&m, data_027e0998->func_ov000_02061a70(), &m);
sp8.mUnk_06 = 0x00;
MI_CpuFill32(0, &sp8, sizeof(sp8));
sp8.mUnk_05 = -1;
sp8.mUnk_06 |= 0x01;
sp8.mUnk_00 = &m;
data_0204af1c.func_0201aa44(&data_ov031_02117204, &sp10, 2, &sp8);
}
}
ARM void MapObjectDoorBase::vfunc_74() {}
ARM void MapObjectDoorBase::vfunc_78() {}
ARM void MapObjectDoorBase::vfunc_7C() {
this->mUnk_68.func_ov000_020a0334();
}
ARM void MapObjectDoorBase::vfunc_80() {
this->mUnk_74 = -1;
this->func_ov031_020fcd40();
if (this->mUnk_8A && this->mUnk_86) {
this->mUnk_8A = false;
}
}
ARM void MapObjectDoorBase::func_ov031_020fcd40() {
this->func_ov000_0209d2c4(1, 1);
this->func_ov000_0209d614(1);
}
ARM void MapObjectDoorBase::vfunc_70() {
switch (this->mUnk_16) {
case 5:
if (this->mUnk_80 > 0) {
this->vfunc_44();
}
break;
case 0:
if (this->mUnk_80 > 0) {
this->vfunc_4C();
}
break;
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 6:
break;
case 7:
break;
case 8:
break;
default:
this->vfunc_44();
break;
}
}
ARM void MapObjectDoorBase::vfunc_44() {}
ARM void MapObjectDoorBase::vfunc_4C() {}
ARM void MapObjectDoorBase::vfunc_84(unk32 param1, Vec3p *param2, unk16 *param3) {
Vec3p local_20;
*param3 = this->mUnk_14;
if (param1 != 0) {
local_20.x = MUL_Q20(SIN((u16) this->mUnk_14), 0x1000);
local_20.z = MUL_Q20(COS((u16) this->mUnk_14), 0x1000);
local_20.y = 0;
} else {
local_20.x = MUL_Q20(SIN((u16) this->mUnk_14), 0xC00);
local_20.z = MUL_Q20(COS((u16) this->mUnk_14), 0xC00);
local_20.y = 0;
*param3 += -DEG_TO_ANG(180);
}
Vec3p_Add(&this->mPos, &local_20, param2);
}
ARM void MapObjectDoorBase::func_ov031_020fcf0c(unk32 param1) {
if (param1 != 0) {
SET_FLAG(this->mFlags, MapObjFlag_1);
} else {
UNSET_FLAG(this->mFlags, MapObjFlag_1);
}
}
ARM bool MapObjectDoorBase::func_ov031_020fcf30() {
unk16 *plocal_10;
unk16 local_10;
plocal_10 = (unk16 *) &local_10;
MapObject::func_ov000_0209d22c(plocal_10, this, 0);
if (*plocal_10 >= 0x4000 || *plocal_10 <= -0x4000) {
return false;
}
return true;
}
ARM void MapObjectDoorBase::vfunc2_04() {}
// https://decomp.me/scratch/JINmb
ARM void MapObjectDoorBase::vfunc2_08() {
s32 temp_r0;
s32 temp_r1;
s32 temp_r2;
u16 *temp_r2_2;
u16 *temp_r3;
u16 *temp_r3_2;
if (this->mUnk_16 != 1 || !this->mUnk_8C || (u16) (this->mUnk_14 + 0x2000) / DEG_TO_ANG(90) != 2) {
return;
}
bool result = data_027e0ce0->func_01fff1a4();
temp_r0 = this->mPos.x;
temp_r1 = this->mPos.y;
temp_r2 = this->mPos.z - FLOAT_TO_Q20(3.0f);
if (!result) {
this->mUnk_4C.x = temp_r0;
this->mUnk_4C.y = temp_r1;
this->mUnk_4C.z = temp_r2;
// temp_r3 = sp - 4;
// *temp_r3 = this->mUnk_4A;
data_027e0ce0->func_ov000_0208bbd4(this->mUnk_44, &this->mUnk_4C, this->mUnk_4A);
return;
}
this->mUnk_4C.x = temp_r0 - FLOAT_TO_Q20(1.0f);
this->mUnk_4C.y = temp_r1;
this->mUnk_4C.z = temp_r2;
// temp_r3_2 = sp - 4;
// *temp_r3_2 = this->mUnk_4A;
data_027e0ce0->func_ov000_0208bbd4(this->mUnk_44, &this->mUnk_4C, this->mUnk_4A);
this->mUnk_5C.x = this->mPos.x + FLOAT_TO_Q20(1.0f);
this->mUnk_5C.y = this->mPos.y;
this->mUnk_5C.z = this->mPos.z - FLOAT_TO_Q20(3.0f);
this->mUnk_5A = this->mUnk_4A;
// temp_r2_2 = sp - 4;
// *temp_r2_2 = this->mUnk_5A;
data_027e0ce0->func_ov000_0208bbd4(1, &this->mUnk_5C, this->mUnk_5A);
}
ARM bool MapObjectDoorBase::vfunc_88() {
return true;
}
ARM unk32 MapObjectDoorBase::vfunc_8C() {
return 0;
}
ARM void MapObjectDoorBase::vfunc_50() {}
ARM void MapObjectDoorBase::vfunc_54() {}
ARM void MapObjectDoorBase::vfunc_58() {}
//! TODO: this is fake but we don't have any other choice currently to match the function order
ARM MapObjectDoorBase::~MapObjectDoorBase() {}
+413 -29
View File
@@ -1,41 +1,425 @@
//! TODO: This file was generated automatically and might contain errors
#include "MapObject/MapObjectUnkDRCK.hpp"
#include "System/SysNew.hpp"
#include "Unknown/UnkStruct_027e09a8.hpp"
#include "Unknown/UnkStruct_027e09b8.hpp"
#include "Unknown/UnkStruct_027e0cec.hpp"
extern "C" f32 func_02039f04(unk32);
extern "C" void func_01ffaf74(Vec3p *, Mat4x3p *, Vec3p *);
extern "C" void func_01ffcfcc(Vec3p *, Vec3p *, Vec3p *);
extern "C" unk32 func_01ffb428(unk32, unk32);
extern "C" unk32 func_01ffb464(unk32 param1);
extern "C" void func_01ff9218(void *, unk32, unk32);
static const u32 data_ov031_02110c1c[] = {
'DRCG',
'DRCG',
'DRTC',
};
static const u16 data_ov031_02110c28[] = {0x00, 0x00, 0x00, 0x00, 0x07, 0x0A, 0x0C, 0x0C, 0x14, 0x00};
const UnkStruct_ov031_021150b0 data_ov031_02115328(0x1E66);
ARM DECL_PROFILE(MapObjectProfileUnkDRCK);
ARM MapObject *MapObjectProfileUnkDRCK::Create() {
return new(HeapIndex_2) MapObjectUnkDRCK();
return new(HeapIndex_ITCM) MapObjectUnkDRCK();
}
ARM MapObjectProfileUnkDRCK::MapObjectProfileUnkDRCK() :
MapObjectProfile(MapObjectId_DRCK) {}
MapObjectProfile_Derived1(MapObjectId_DRCK, -1, 0) {
this->mUnk_06 = 2;
this->mUnk_1E |= 0x01;
this->mUnk_0C = 0x399A;
}
ARM MapObjectUnkDRCK::MapObjectUnkDRCK() {}
ARM MapObjectUnkDRCK::MapObjectUnkDRCK() :
mUnk_9C(1),
mUnk_A0(0) {
this->mUnk_8F = true;
SET_FLAG(this->mFlags, MapObjFlag_9);
this->mUnk_18[0] = 0x0E;
this->func_ov000_0209d2c4(1, 1);
}
ARM void MapObjectUnkDRCK::func_ov031_020ff598(void) {}
ARM void MapObjectUnkDRCK::func_ov031_020ff6a8(void) {}
ARM void MapObjectUnkDRCK::func_ov031_020ff6bc(void) {}
ARM void MapObjectUnkDRCK::func_ov031_020ff7bc(void) {}
ARM void MapObjectUnkDRCK::func_ov031_020ffb8c(void) {}
ARM void MapObjectUnkDRCK::func_ov031_020ffb98(void) {}
ARM void MapObjectUnkDRCK::func_ov031_020ffce4(void) {}
ARM void MapObjectUnkDRCK::func_ov031_020ffddc(void) {}
ARM void MapObjectUnkDRCK::func_ov031_020ffde4(void) {}
ARM void MapObjectUnkDRCK::func_ov031_020ffe1c(void) {}
ARM void MapObjectUnkDRCK::func_ov031_020ffe7c(void) {}
ARM void MapObjectUnkDRCK::func_ov031_020ffe8c(void) {}
ARM void MapObjectUnkDRCK::func_ov031_020ffe94(void) {}
ARM void MapObjectUnkDRCK::func_ov031_020ffe9c(void) {}
ARM void MapObjectUnkDRCK::func_ov031_020ffeec(void) {}
ARM void MapObjectUnkDRCK::func_ov031_020fff10(void) {}
ARM void MapObjectUnkDRCK::func_ov031_021000ac(void) {}
ARM void MapObjectUnkDRCK::func_ov031_02100138(void) {}
ARM void MapObjectUnkDRCK::func_ov031_02100164(void) {}
ARM void MapObjectUnkDRCK::func_ov031_021001a8(void) {}
ARM void MapObjectUnkDRCK::func_ov031_021001ac(void) {}
ARM void MapObjectUnkDRCK::func_ov031_021001b0(void) {}
ARM u16 MapObjectUnkDRCK::vfunc2_1C(unk32 param1) {
return data_ov031_02110c28[param1];
}
ARM MapObjectUnkDRCK::~MapObjectUnkDRCK() {}
ARM MapObjectProfileUnkDRCK::~MapObjectProfileUnkDRCK() {}
// https://decomp.me/scratch/zmw3b
ARM bool MapObjectUnkDRCK::vfunc_00(void) {
Vec3p local_1c;
Vec3p local_28;
Vec3p local_40[2];
this->func_ov031_020fbf10(true, false);
this->mUnk_8B = true;
this->mUnk_6C = 0;
this->func_ov031_020fcf0c(1);
this->mUnk_8D = false;
this->mUnk_88 = false;
this->mUnk_78 = 10;
this->mUnk_A4 = this->mUnk_20.mUnk_00[1];
this->vfunc2_10();
local_1c.x = -0x1000;
local_1c.y = 0;
local_1c.z = -0x266;
local_28.y = 0x2000;
local_28.x = 0x1000;
local_28.z = 0x266;
unk32 value = ((this->mUnk_20.mUnk_00[2] & 0xFF) << 8) | 0x21C07006;
unk32 uVar2;
if (this->mUnk_20.mUnk_00[3] == 0) {
uVar2 = 0x1B;
} else {
uVar2 = 0x1C;
}
this->mUnk_A8.mUnk_07 = uVar2;
func_01ffcfcc(local_40, &local_1c, &local_28);
this->mUnk_A8.mUnk_0C.x = local_40[0].x;
this->mUnk_A8.mUnk_0C.y = local_40[0].y;
this->mUnk_A8.mUnk_0C.z = local_40[0].z;
this->mUnk_A8.mUnk_18.x = local_40[1].x;
this->mUnk_A8.mUnk_18.y = local_40[1].y;
this->mUnk_A8.mUnk_18.z = local_40[1].z;
this->mUnk_A8.mUnk_08 = value;
return true;
}
ARM void MapObjectUnkDRCK::vfunc_08(void) {
if (this->mUnk_A4 != 0 && this->func_ov000_0209d29c(0)) {
this->mUnk_A4 = 0;
}
if (this->mUnk_16 == 2) {
this->mUnk_8B = this->func_ov031_020fcf30();
}
switch (this->mUnk_16) {
case 3:
this->mUnk_84++;
if (!this->mUnk_86 && this->vfunc_6C()) {
this->vfunc_5C(0, 0);
break;
}
this->mUnk_82++;
if (this->mUnk_82 >= this->vfunc2_1C(4)) {
this->vfunc_5C(4, 0);
}
break;
case 4:
this->mUnk_84++;
if (!this->mUnk_86 && this->vfunc_6C()) {
this->vfunc_5C(0, 0);
break;
}
this->mUnk_82++;
if (this->mUnk_82 >= this->vfunc2_1C(5)) {
this->vfunc_5C(5, 0);
}
break;
case 5:
this->mUnk_84++;
if (!this->mUnk_86 && this->vfunc_6C()) {
this->vfunc_5C(0, 0);
break;
}
this->vfunc_44();
this->mUnk_80--;
if (this->mUnk_80 > 0) {
func_01ff9218(&this->mUnk_6C, 0x1000, func_01ffb464(INT_TO_Q20(this->mUnk_80)));
}
if (this->mUnk_88 != false) {
if (this->mUnk_80 > 1) {
this->vfunc_78();
} else {
this->vfunc_7C();
}
}
if (this->mUnk_80 <= 0) {
if (this->mUnk_80 == 0 && this->mUnk_91) {
this->vfunc_40();
}
this->mUnk_82++;
if (this->mUnk_82 >= this->vfunc2_1C(6)) {
this->mUnk_82 = this->vfunc2_1C(6);
this->vfunc_5C(6, 0);
}
}
break;
case 6:
this->mUnk_84++;
this->mUnk_82++;
if (this->mUnk_82 >= this->vfunc2_1C(7)) {
this->mUnk_82 = this->vfunc2_1C(7);
this->vfunc_5C(7, 0);
}
break;
case 7:
this->mUnk_84++;
this->mUnk_82++;
if (this->mUnk_82 >= this->vfunc2_1C(8)) {
this->vfunc_5C(8, 0);
}
break;
case 8:
this->MapObjectDoorBase::vfunc_08();
break;
default:
this->MapObjectDoorBase::vfunc_08();
break;
}
}
ARM void MapObjectUnkDRCK::vfunc_18(s8 *param1, s8 param2) {
this->func_ov031_020fcb78(param1, param2);
}
// https://decomp.me/scratch/3XTMj
ARM void MapObjectUnkDRCK::vfunc_14(void) {
f32 factor;
f32 uVar3;
s32 sVar2;
s32 sVar2_2;
u16 uVar2;
if (this->mUnk_8B) {
uVar3 = func_02039f04(this->mUnk_6C) / 4096.0f;
factor = 16384.0f;
} else {
uVar3 = func_02039f04(this->mUnk_6C) / 4096.0f;
factor = -16384.0f;
}
s32 mul = factor * uVar3;
sVar2 = (s16) mul;
u16 angle = (u16) sVar2;
Mat3p m;
Vec3p local_48;
Vec3p temp;
Mat3p_InitYRotation(&m, SIN(angle), COS(angle));
temp.x = this->mPos.x - FLOAT_TO_Q20(1.0f) + this->mUnk_70;
temp.z = this->mPos.z;
temp.y = this->mPos.y;
local_48.x = temp.x;
local_48.y = temp.y;
local_48.z = temp.z;
this->mUnk_94.vfunc_14(&m, &local_48);
u16 var = (-0x8000 - sVar2);
Mat3p_InitYRotation(&m, SIN(var), COS(var));
temp.x = this->mPos.x + FLOAT_TO_Q20(1.0f) - this->mUnk_70;
temp.z = this->mPos.z;
temp.y = this->mPos.y;
local_48.x = temp.x;
local_48.y = temp.y;
local_48.z = temp.z;
this->mUnk_94.vfunc_14(&m, &local_48);
}
ARM void MapObjectUnkDRCK::vfunc_5C(unk32 param1, unk32 param2) {
s32 var_r6;
u32 temp_r8;
UnkStackStruct1 sp8;
s16 sp4;
s16 *sp4Ptr;
this->mUnk_16 = param1;
switch (this->mUnk_16) {
case 3:
this->vfunc_7C();
u16 result = ROUND_Q20(MUL_Q20(func_01ffb428(0x1000 - this->mUnk_6C, 0x1000), INT_TO_Q20(this->mUnk_78)));
this->mUnk_80 = result;
if (this->mUnk_8A) {
this->mUnk_82 = 0;
this->mUnk_84 = 0;
UNSET_FLAG(this->mFlags, MapObjFlag_9);
this->vfunc2_18();
this->func_ov000_0209d2c4(1, 1);
}
break;
case 8:
if (this->mUnk_20.mUnk_00[2] & 0xFF) {
this->MapObjectDoorBase::vfunc_5C(param1, param2);
this->func_ov031_020fcf0c(1);
this->mUnk_10 = this->vfunc2_14();
break;
}
// fallthrough
default:
this->MapObjectDoorBase::vfunc_5C(param1, param2);
break;
}
}
ARM MapObject_10 *MapObjectUnkDRCK::vfunc2_14(void) {
return &this->mUnk_A8;
}
ARM bool MapObjectUnkDRCK::func_ov031_020ffde4(void) {
switch (this->mUnk_A4) {
case 0:
return true;
case 1:
if (!this->mUnk_8B) {
return true;
}
break;
default:
break;
}
return false;
}
ARM unk32 MapObjectUnkDRCK::vfunc_28(void) {
switch (this->mUnk_16) {
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
return -1;
default:
this->vfunc_5C(3, 0);
break;
}
return 0;
}
ARM bool MapObjectUnkDRCK::vfunc_64(void) {
return this->func_ov000_0209d29c(1);
}
ARM bool MapObjectUnkDRCK::vfunc_68(void) {
return false;
}
ARM bool MapObjectUnkDRCK::vfunc_6C(void) {
return false;
}
ARM void MapObjectUnkDRCK::vfunc_74(void) {
data_027e0cec->func_ov000_0209ff8c(&this->mUnk_68, 0x89E, &this->mPos, 4);
data_027e0cec->func_ov000_0209ff8c(&this->mUnk_A0, 0x89E, &this->mPos, 4);
}
ARM void MapObjectUnkDRCK::vfunc_7C(void) {
this->MapObjectDoorBase::vfunc_7C();
if (this->mUnk_A0.mUnk_00 != NULL) {
this->mUnk_A0.func_ov000_020a0334();
}
}
ARM void MapObjectUnkDRCK::vfunc_78(void) {
Vec3p local_24;
Vec3p local_30;
Vec3p VStack_3c;
Vec3p VStack_48;
Mat4x3p m;
Vec3p local_84;
Vec3p local_90;
Vec3p temp;
temp.x = this->mPos.x;
temp.z = this->mPos.z;
temp.y = this->mPos.y;
local_24.x = temp.x - FLOAT_TO_Q20(0.999f);
local_24.y = temp.y;
local_24.z = temp.z;
local_30.x = temp.x + FLOAT_TO_Q20(0.999f);
local_30.y = temp.y;
local_30.z = temp.z;
f32 div = func_02039f04(this->mUnk_6C) / 4096.0f;
s16 angle = 21845.0f * div;
Mat4x3p_InitYRotation(&m, SIN((u16) angle), COS((u16) angle));
local_84.x = FLOAT_TO_Q20(1.0f);
local_84.y = 0;
local_84.z = 0;
local_90.x = 0;
local_90.y = 0;
local_90.z = FLOAT_TO_Q20(0.3299f);
func_01ffaf74(&local_90, &m, &local_90);
func_01ffaf74(&local_84, &m, &local_84);
Vec3p_Add(&local_24, &local_90, &local_24);
Vec3p_Add(&local_24, &local_84, &VStack_3c);
local_90.x = -local_90.x;
local_84.x = -local_84.x;
Vec3p_Add(&local_30, &local_90, &local_30);
Vec3p_Add(&local_30, &local_84, &VStack_48);
if (this->mUnk_68.mUnk_00 != NULL) {
this->mUnk_68.mUnk_00->func_ov000_02052c48(&VStack_3c, &local_24);
}
if (this->mUnk_A0.mUnk_00 != NULL) {
this->mUnk_A0.mUnk_00->func_ov000_02052c48(&VStack_48, &local_30);
}
}
ARM void MapObjectUnkDRCK::vfunc2_10(void) {
unk32 index = this->mUnk_20.mUnk_00[0];
this->mUnk_94.vfunc_08(GetUnkPointer2<MapObjectProfileUnkDRCK>(index, data_ov031_02110c1c[index]));
}
ARM void MapObjectUnkDRCK::vfunc_40(void) {
data_027e09a8->func_ov000_02071b30(0x143, &this->mPos, 0);
}
ARM void MapObjectUnkDRCK::vfunc_44(void) {
unk32 local_c = *(u32 *) &this->mUnk_38;
data_027e09a8->func_ov000_02071d34(&local_c, 0x142, &this->mPos, 0);
}
ARM void MapObjectUnkDRCK::vfunc_48(void) {}
ARM void MapObjectUnkDRCK::vfunc_4C(void) {}
ARM void MapObjectUnkDRCK::vfunc2_18(void) {}
+740 -29
View File
@@ -1,43 +1,754 @@
//! TODO: This file was generated automatically and might contain errors
#include "MapObject/MapObjectUnkDRDS.hpp"
#include "Actor/ActorManager.hpp"
#include "MapObject/MapObjectManager.hpp"
#include "System/SysNew.hpp"
#include "Unknown/UnkStruct_027e09a8.hpp"
#include "Unknown/UnkStruct_027e09b8.hpp"
#include "Unknown/UnkStruct_027e09bc.hpp"
#include "Unknown/UnkStruct_027e0cd8.hpp"
#include "Unknown/UnkStruct_027e0ce0.hpp"
#include "Unknown/UnkStruct_027e0cec.hpp"
#include "Unknown/UnkStruct_027e0d34.hpp"
#include "Unknown/UnkStruct_027e0d38.hpp"
#include "Unknown/UnkStruct_027e0d8c.hpp"
#include "Unknown/UnkStruct_ov000_020b51b8.hpp"
#include "versions.h"
extern "C" void *func_ov000_02077590(unk32);
extern "C" unk32 func_01ffb428(unk32, unk32);
extern "C" void func_01ffaf74(Vec3p *, Mat4x3p *, Vec3p *);
extern "C" void func_01ff93c0(Vec3p *, q20);
extern unk32 data_ov031_02110c00[];
extern UnkStruct_ov000_020b34c4_Callback data_ov000_020b4cc4;
const UnkStruct_ov031_021150b0 data_ov031_021150b0(0x1E66);
ARM DECL_PROFILE(MapObjectProfileUnkDRDS);
ARM MapObject *MapObjectProfileUnkDRDS::Create() {
return new(HeapIndex_2) MapObjectUnkDRDS();
return new(HeapIndex_ITCM) MapObjectUnkDRDS();
}
ARM MapObjectProfileUnkDRDS::MapObjectProfileUnkDRDS() :
MapObjectProfile(MapObjectId_DRDS) {}
MapObjectProfile_Derived2(MapObjectId_DRDS, MapObjectId_DRDS) {
this->mUnk_0E = 1;
this->mUnk_06 = -1;
this->mUnk_1E &= ~0x01;
}
ARM MapObjectUnkDRDS::MapObjectUnkDRDS() {}
ARM MapObjectUnkDRDS::MapObjectUnkDRDS() :
mUnk_94(GetUnkPointer1<MapObjectProfileUnkDRDS>()),
mUnk_9C(1),
mUnk_A0(0),
mUnk_A1(false),
mUnk_A2(false),
mUnk_A3(0),
mUnk_A4(-1),
mUnk_A8(NULL) {
this->mUnk_AC = 0;
this->mUnk_AE = 0;
this->mUnk_89 = true;
}
ARM void MapObjectUnkDRDS::func_ov031_020fd234(void) {}
ARM void MapObjectUnkDRDS::func_ov031_020fd284(void) {}
ARM void MapObjectUnkDRDS::func_ov031_020fd3f8(void) {}
ARM void MapObjectUnkDRDS::func_ov031_020fd404(void) {}
ARM void MapObjectUnkDRDS::func_ov031_020fd474(void) {}
ARM void MapObjectUnkDRDS::func_ov031_020fd7e8(void) {}
ARM void MapObjectUnkDRDS::func_ov031_020fd814(void) {}
ARM void MapObjectUnkDRDS::func_ov031_020fdc08(void) {}
ARM void MapObjectUnkDRDS::func_ov031_020fdcc4(void) {}
ARM void MapObjectUnkDRDS::func_ov031_020fdd70(void) {}
ARM void MapObjectUnkDRDS::func_ov031_020fdec8(void) {}
ARM void MapObjectUnkDRDS::func_ov031_020fdfc0(void) {}
ARM void MapObjectUnkDRDS::func_ov031_020fdfcc(void) {}
ARM void MapObjectUnkDRDS::func_ov031_020fe04c(void) {}
ARM void MapObjectUnkDRDS::func_ov031_020fe0d0(void) {}
ARM void MapObjectUnkDRDS::func_ov031_020fe22c(void) {}
ARM void MapObjectUnkDRDS::func_ov031_020fe250(void) {}
ARM void MapObjectUnkDRDS::func_ov031_020fe278(void) {}
ARM void MapObjectUnkDRDS::func_ov031_020fe2bc(void) {}
ARM void MapObjectUnkDRDS::func_ov031_020fe2e8(void) {}
ARM void MapObjectUnkDRDS::func_ov031_020fe32c(void) {}
ARM void MapObjectUnkDRDS::func_ov031_020fe350(void) {}
ARM void MapObjectUnkDRDS::func_ov031_020fe388(void) {}
ARM void MapObjectUnkDRDS::func_ov031_020fe5fc(void) {}
ARM bool MapObjectUnkDRDS::vfunc_00(void) {
this->func_ov031_020fbf10(true, false);
this->mUnk_78 = 0x23;
this->mUnk_7A = 0x0F;
this->mUnk_7C = 0x28;
this->mUnk_8C = 1;
this->mUnk_58 = data_027e0ce0->func_01fff1a4();
return true;
}
ARM void MapObjectUnkDRDS::vfunc_04(void) {
UnkStruct_027e0cd8_0c *ptr;
Vec3p auStack_20;
if (this->mUnk_20.mUnk_00[1] == 2) {
this->mUnk_6C = 0;
ptr = data_027e0cd8->mUnk_0C;
ptr->func_ov000_0208053c(this->mUnk_20.mUnk_00[0]);
ptr->func_ov000_020803ec(this->mUnk_20.mUnk_00[0]);
this->vfunc_5C(2, 1);
return;
}
if (this->mUnk_20.mUnk_00[1] == 3) {
this->mUnk_8C = 0;
}
if (this->mUnk_20.mUnk_00[1] == 4) {
if (this->func_ov000_0209d29c(0) != 0) {
this->mUnk_6C = 0;
this->MapObjectDoorBase::vfunc_5C(2, 1);
return;
}
}
this->vfunc_5C(8, 1);
#if IS_JP
//! TODO: non-matching
UnkStruct_ov000_020b34c4 stack;
bool run = true;
stack.mUnk_00 = &data_ov000_020b4cc4;
stack.mUnk_04 = MapObjectId_DRDS;
MapObject **ppMapObject =
gpMapObjManager->func_01fff520((UnkStruct_ov000_020b34c4 *) &stack.mUnk_00, gpMapObjManager->mMapObjTable);
if (ppMapObject != gpMapObjManager->mUnk_08) {
MapObjectUnkDRDS *pMapObject = (MapObjectUnkDRDS *) *ppMapObject;
u32 temp1;
u32 temp2;
if (pMapObject != NULL) {
temp1 = *(u32 *) &this->mUnk_38;
temp2 = *(u32 *) &pMapObject->mUnk_38;
if (temp2 != temp1 && pMapObject->mUnk_A2) {
run = false;
}
}
}
if (run) {
data_027e0cd8->mUnk_0C->func_ov000_0208053c(this->mUnk_20.mUnk_00[0]);
}
#else
data_027e0cd8->mUnk_0C->func_ov000_0208053c(this->mUnk_20.mUnk_00[0]);
#endif
ptr = data_027e0cd8->mUnk_0C;
if (this->func_ov031_020fdec8()) {
this->mUnk_A2 = true;
this->mUnk_8C = 0;
ptr->func_ov000_020803ec(this->mUnk_20.mUnk_00[0]);
this->vfunc_5C(0, 0);
UnkStruct_027e09bc_0c *uVar5 = data_027e09bc->mUnk_0C;
MapObjectUnkDRDS::func_ov031_020fe5fc(&auStack_20, this);
uVar5->func_ov000_0207834c(&auStack_20, (unk32) func_ov000_02077590(0), 0);
}
}
ARM void MapObjectUnkDRDS::vfunc2_04(void) {
this->MapObjectDoorBase::vfunc2_04();
}
ARM void MapObjectUnkDRDS::vfunc2_08(void) {
this->mUnk_8C = 1;
this->vfunc_84(1, &this->mUnk_4C, &this->mUnk_4A);
this->MapObjectDoorBase::vfunc2_08();
if (this->mUnk_A2) {
data_027e09bc->mUnk_0C->func_ov000_02078230(0);
}
data_ov000_020b51b8.func_ov000_0206c96c(data_ov031_02110c00[this->mUnk_20.mUnk_00[3]]);
}
struct UnkStruct_Copy {
unk32 data[8];
};
// https://decomp.me/scratch/KLkdU
ARM void MapObjectUnkDRDS::vfunc_08(void) {
UnkStruct_Copy sp3C;
UnkStruct_Copy sp1C;
Vec3p sp10;
Vec3p sp4;
if (this->mUnk_AC < this->mUnk_AE) {
this->mUnk_AC++;
}
switch (this->mUnk_16) {
case 0:
if (this->mUnk_A2) {
u16 max = this->mUnk_AE;
u16 timer = this->mUnk_AC;
if (timer < max) {
if (max - timer == 1) {
this->mUnk_88 = 1;
this->vfunc_74();
UnkStruct_Copy *temp_r0_3 = (UnkStruct_Copy *) func_ov000_02077590(3);
sp3C = *temp_r0_3;
((unk16 *) sp3C.data)[3] = this->mUnk_14;
UnkStruct_027e09bc_0c *temp_r5 = data_027e09bc->mUnk_0C;
this->func_ov031_020fe5fc(&sp10, this);
temp_r5->func_ov000_02078764(&sp10, &sp3C, 0);
data_ov000_020b51b8.func_ov000_0206d134(0x0F);
if (data_027e0ce0->func_01fff1a4()) {
data_027e0d8c->func_ov093_02166058();
}
} else {
UnkStruct_Copy *temp_r0_3 = (UnkStruct_Copy *) func_ov000_02077590(0);
sp1C = *temp_r0_3;
UnkStruct_027e09bc_0c *temp_r7_2 = data_027e09bc->mUnk_0C;
this->func_ov031_020fe5fc(&sp4, this);
temp_r7_2->func_ov000_02078764(&sp4, &sp1C, 0);
}
return;
}
}
case 1:
if (!this->mUnk_86 || data_027e09b8->func_ov000_020732ec(this->mUnk_74)) {
if (!this->mUnk_A2) {
if (data_027e09b8->func_ov000_0207330c() == 0x0A) {
data_027e0d34->func_ov031_020d9844();
if (data_027e0ce0->func_01fff1a4()) {
data_027e0d8c->func_ov093_02166068();
}
}
} else {
UnkStruct_027e09b8 *temp_r6 = data_027e09b8;
unk32 temp_r4 = this->vfunc_8C();
if (temp_r4 + 0x0A == temp_r6->func_ov000_0207330c()) {
data_027e0d34->func_ov031_020d9844();
if (data_027e0ce0->func_01fff1a4()) {
data_027e0d8c->func_ov093_02166068();
}
}
}
}
break;
case 2:
if (this->mUnk_20.mUnk_00[1] == 4 && this->func_ov000_0209d29c(0) != 0) {
if (this->func_ov000_0209d29c(1) != 0) {
return;
}
if (this->vfunc_68() == 0) {
return;
}
if (this->mUnk_A1) {
return;
}
data_ov000_020b51b8.func_ov000_0206d0bc(0);
this->mUnk_A1 = true;
unk32 temp = data_027e0cd8->mUnk_0C->func_ov000_02080a44();
data_ov000_020b51b8.func_ov000_0206d0ec(temp, 0x78, 0x7F, -1);
this->func_ov000_0209d2c4(1, 1);
return;
}
break;
default:
break;
}
this->MapObjectDoorBase::vfunc_08();
this->vfunc2_10();
if (this->mUnk_16 == 2 && this->mUnk_A4 == 0 && !this->mUnk_A1) {
data_ov000_020b51b8.func_ov000_0206d0bc(5);
this->mUnk_A1 = true;
}
}
ARM void MapObjectUnkDRDS::vfunc_0C(void) {
this->MapObjectDoorBase::vfunc_0C();
if ((u16) this->mUnk_16 <= 1) {
this->vfunc_08();
}
}
ARM void MapObjectUnkDRDS::vfunc_5C(unk32 param1, unk32 param2) {
UnkStruct_027e0cd8 **ptr;
s32 var_r6;
u32 temp_r8;
UnkStackStruct1 sp8;
s16 sp4;
s16 *sp4Ptr;
this->mUnk_16 = param1;
this->mUnk_AE = 0;
this->mUnk_AC = 0;
switch (this->mUnk_16) {
case 3:
this->vfunc_7C();
sp4Ptr = (s16 *) &sp4;
MapObject::func_ov000_0209d22c(sp4Ptr, this, 0);
if (*sp4Ptr >= 0x4000 || *sp4Ptr <= -0x4000) {
this->mUnk_8B = 0;
} else {
this->mUnk_8B = 1;
}
u16 result = ROUND_Q20(MUL_Q20(func_01ffb428(0x1000 - this->mUnk_6C, 0x1000), INT_TO_Q20(this->mUnk_78)));
this->mUnk_80 = result;
if (this->mUnk_8A) {
this->mUnk_82 = 0;
if (this->mUnk_86 != 0) {
if (param2 == 0) {
func_ov000_02072fd0(&sp8);
unk32 temp = this->mUnk_78 + 0x5B;
sp8.mUnk_00 = 0x7B;
sp8.mUnk_08 = temp;
sp8.mUnk_3A = 7;
sp8.mUnk_3B = 7;
sp8.mUnk_38 |= 0x80;
sp8.mUnk_0C.x = this->mPos.x;
sp8.mUnk_0C.y = this->mPos.y;
sp8.mUnk_0C.z = this->mPos.z;
if (this->mUnk_89 && this->mUnk_20.mUnk_16) {
sp8.mUnk_38 |= 4;
}
this->mUnk_74 = data_027e09b8->func_ov000_02073388(&sp8, 0);
}
}
data_ov000_020b51b8.func_ov000_0206d0bc(5);
this->mUnk_A1 = 1;
}
break;
case 4:
this->MapObjectDoorBase::vfunc_5C(param1, param2);
break;
case 0:
this->func_ov000_0209d2c4(1, 0);
this->func_ov000_0209d2c4(0, 1);
if (this->mUnk_A2 == 0) {
data_ov000_020b51b8.func_ov000_0206d134(0x0F);
}
data_027e0d38->func_ov031_020d9c44(4);
if (this->mUnk_A2 != 0) {
this->mUnk_AE = this->vfunc_8C() * 2;
this->mUnk_AC = 0;
this->mUnk_88 = 0;
this->mUnk_90 = false;
}
this->MapObjectDoorBase::vfunc_5C(param1, param2);
if (this->mUnk_86 && param2 == 0 && this->mUnk_90 && data_027e0ce0->func_01fff1a4()) {
data_027e0d8c->func_ov093_02166058();
}
return;
case 2:
ptr = &data_027e0cd8; // whyyy
this->MapObjectDoorBase::vfunc_5C(param1, param2);
var_r6 = 1;
temp_r8 = data_027e09a4->mSceneIndex;
if (param2 != 0 && (temp_r8 - SceneIndex_tekiya00) > 4) {
var_r6 = 0;
}
if ((temp_r8 == SceneIndex_tekiya03 && (*ptr)->func_ov000_02081d5c() == 4) ||
(temp_r8 == SceneIndex_tekiya00 && (*ptr)->func_ov000_02081d5c() == 0) ||
(temp_r8 == SceneIndex_tekiya02 && (*ptr)->func_ov000_02081d5c() == 0) ||
(temp_r8 == SceneIndex_tekiya02 && (*ptr)->func_ov000_02081d5c() == 5)) {
var_r6 = 0;
}
if (var_r6 != 0) {
data_ov000_020b51b8.func_ov000_0206c9a8(data_ov031_02110c00[this->mUnk_20.mUnk_00[3]], 0, 0x7F, 0);
}
break;
case 8:
ptr = &data_027e0cd8;
this->MapObjectDoorBase::vfunc_5C(param1, param2);
this->func_ov000_0209d2c4(0, 0);
if (param2 == 0) {
(*ptr)->mUnk_0C->func_ov000_0208053c(this->mUnk_20.mUnk_00[0]);
}
if (param2 == 0) {
data_ov000_020b51b8.func_ov000_0206d0ec((*ptr)->mUnk_0C->func_ov000_02080a44(), 0x78, 0x7F, -1);
}
break;
default:
this->MapObjectDoorBase::vfunc_5C(param1, param2);
break;
}
}
ARM bool MapObjectUnkDRDS::vfunc_64(void) {
UnkStruct_027e0cd8_0c *pUVar4;
unk32 var_r0;
bool var_r5;
switch (this->mUnk_20.mUnk_00[1]) {
case 1:
case 4:
if (MapObjectDoorBase::vfunc_64()) {
return true;
}
pUVar4 = data_027e0cd8->mUnk_0C;
if (pUVar4->func_ov000_020802ec(this->mUnk_20.mUnk_00[0], data_027e0ce0->func_01fff148(0)) == 0) {
return true;
}
var_r0 = 0;
var_r5 = false;
if (this->mUnk_20.mUnk_00[0] != 0) {
var_r0 = gpActorManager->func_ov000_020970c8(this->mUnk_20.mUnk_00[0], NULL);
} else {
var_r0 = gpActorManager->func_ov000_0209704c();
}
if (var_r0 == 0) {
var_r5 = true;
}
return var_r5;
default:
break;
}
return MapObjectDoorBase::vfunc_64();
}
ARM bool MapObjectUnkDRDS::vfunc_68(void) {
UnkStruct_027e0cd8_0c *pUVar2 = data_027e0cd8->mUnk_0C;
if (this->mUnk_20.mUnk_00[2] == 1) {
if (func_ov000_0209d29c(1)) {
return true;
}
} else {
if (func_ov000_0209d668()) {
return true;
}
}
if (this->mUnk_20.mUnk_00[0] != 0) {
if (gpActorManager->func_ov000_020970c8(this->mUnk_20.mUnk_00[0], &this->mUnk_A4) == 0) {
pUVar2->func_ov000_0208053c(this->mUnk_20.mUnk_00[0]);
return true;
}
return false;
}
return gpActorManager->func_ov000_0209704c() == 0;
}
ARM bool MapObjectUnkDRDS::vfunc_6C(void) {
UnkStruct_027e0cd8_0c *pUVar5;
switch (this->mUnk_20.mUnk_00[1]) {
case 1:
case 4:
pUVar5 = data_027e0cd8->mUnk_0C;
if (this->mUnk_20.mUnk_00[2] == 1) {
if (this->func_ov000_0209d29c(1) != 0) {
return false;
}
} else {
if (this->func_ov000_0209d668() != 0) {
return false;
}
}
if (this->mUnk_20.mUnk_00[0] != 0) {
if (gpActorManager->func_ov000_020970c8(this->mUnk_20.mUnk_00[0], NULL) == 0) {
return false;
}
} else {
if (gpActorManager->func_ov000_0209704c() == 0) {
return false;
}
}
if (pUVar5->func_ov000_020802ec(this->mUnk_20.mUnk_00[0], data_027e0ce0->func_01fff148(0)) != 0) {
pUVar5->func_ov000_020803ec(this->mUnk_20.mUnk_00[0]);
return true;
}
return false;
default:
break;
}
if (this->mUnk_20.mUnk_00[1] == 3) {
if (this->func_ov000_0209d29c(0) != 0) {
u16 uVar4 = this->mUnk_20.mUnk_00[0];
if (uVar4 != 0 && gpActorManager->func_ov000_020970c8(uVar4, 0) != 0) {
data_027e0cd8->mUnk_0C->func_ov000_020803ec(this->mUnk_20.mUnk_00[0]);
return true;
}
}
} else {
return false;
}
return false;
}
ARM bool MapObjectUnkDRDS::func_ov031_020fdec8(void) {
UnkStruct_027e0cd8_0c *pUVar4;
Vec3p *uVar3;
int iVar1;
switch (this->mUnk_20.mUnk_00[1]) {
case 1:
case 4:
if (this->mUnk_20.mUnk_00[2] == 1) {
if (this->func_ov000_0209d29c(1) != 0) {
return false;
}
} else {
if (this->func_ov000_0209d668() != 0) {
return false;
}
}
if (this->mUnk_20.mUnk_00[0] != 0) {
if (gpActorManager->func_ov000_020970c8(this->mUnk_20.mUnk_00[0], 0) == 0) {
return false;
}
} else {
if (gpActorManager->func_ov000_0209704c() == 0) {
return false;
}
}
pUVar4 = data_027e0cd8->mUnk_0C;
uVar3 = pUVar4->func_ov001_020b8a5c(data_027e09a4->func_ov000_02070560()->mSpawnIndex, 0);
if (pUVar4->func_ov000_020802ec(this->mUnk_20.mUnk_00[0], uVar3) != 0) {
return true;
}
return false;
default:
break;
}
return false;
}
ARM void MapObjectUnkDRDS::vfunc_18(s8 *param1, s8 param2) {
this->func_ov031_020fcb78(param1, param2);
}
ARM void MapObjectUnkDRDS::vfunc_14(void) {
Mat3p m;
Mat3p_InitYRotation(&m, SIN((u16) this->mUnk_14), COS((u16) this->mUnk_14));
Vec3p pos(this->mPos);
pos.y += -(this->mUnk_6C * 2);
this->mUnk_94.vfunc_14(&m, &pos);
}
ARM void MapObjectUnkDRDS::vfunc2_10(void) {
switch (this->mUnk_16) {
case 0:
default:
if (data_027e09b8->func_ov000_020732ec(this->mUnk_74) != 0) {
if (this->mUnk_68.mUnk_00 != NULL) {
this->mUnk_68.mUnk_00->mUnk_24 &= ~0x08;
}
} else if (this->mUnk_68.mUnk_00 != NULL) {
this->mUnk_68.mUnk_00->mUnk_24 |= 0x08;
}
break;
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
break;
}
}
// https://decomp.me/scratch/DEJfq
ARM void MapObjectUnkDRDS::vfunc_74(void) {
Vec3p local_28;
Vec3p local_34;
Vec3p local_40;
Vec3p local_4c;
Mat4x3p m;
q20 b33 = 0xB33;
local_34.x = this->mPos.x;
local_34.y = this->mPos.y;
local_34.z = this->mPos.z;
local_40.x = 0;
local_40.y = 0;
local_40.z = b33;
local_4c.x = 0;
local_4c.y = 0;
local_4c.z = -b33;
local_28.x = local_34.x;
local_28.y = local_34.y;
local_28.z = local_34.z;
u16 var_r5 = (u16) (this->mUnk_14 + DEG_TO_ANG(45));
if (((u16) this->mUnk_14 / DEG_TO_ANG(90)) == 2 && this->mUnk_16 == 5) {
var_r5 = 0;
}
Mat4x3p_InitYRotation(&m, SIN(var_r5), COS(var_r5));
func_01ffaf74(&local_40, &m, &local_40);
func_01ffaf74(&local_4c, &m, &local_4c);
Vec3p_Add(&local_28, &local_40, &local_28);
Vec3p_Add(&local_34, &local_4c, &local_34);
data_027e0cec->func_ov000_0209ff8c(&this->mUnk_68, 0x8CF, &local_28, 4);
data_027e0cec->func_ov000_0209ff8c(&this->mUnk_A8, 0x8CF, &local_34, 4);
if (this->mUnk_68.mUnk_00 != NULL) {
this->mUnk_68.mUnk_00->mUnk_A4 = var_r5;
}
if (this->mUnk_A8.mUnk_00 != NULL) {
this->mUnk_A8.mUnk_00->mUnk_A4 = var_r5;
}
}
ARM void MapObjectUnkDRDS::vfunc_7C(void) {
this->MapObjectDoorBase::vfunc_7C();
if (this->mUnk_A8.mUnk_00 != NULL) {
this->mUnk_A8.func_ov000_020a0334();
}
}
ARM void MapObjectUnkDRDS::vfunc_40(void) {
data_027e09a8->func_ov000_02071b30(0x138, &this->mPos, 0);
}
ARM void MapObjectUnkDRDS::vfunc_44(void) {
unk32 local_c = *(u32 *) &this->mUnk_38;
data_027e09a8->func_ov000_02071d34(&local_c, 0x137, &this->mPos, 0);
}
ARM void MapObjectUnkDRDS::vfunc_48(void) {
data_027e09a8->func_ov000_02071b30(0x13A, &this->mPos, 0);
}
ARM void MapObjectUnkDRDS::vfunc_4C(void) {
unk32 local_c = *(u32 *) &this->mUnk_38;
data_027e09a8->func_ov000_02071d34(&local_c, 0x139, &this->mPos, 0);
}
ARM bool MapObjectUnkDRDS::vfunc_88(void) {
return !data_027e09b8->func_01ffd420();
}
ARM unk32 MapObjectUnkDRDS::vfunc_8C(void) {
if (this->mUnk_A2) {
if (data_027e0ce0->func_01fff1a4()) {
return 0x28;
}
return 0x14;
}
return 0;
}
ARM void MapObjectUnkDRDS::vfunc_84(unk32 param1, Vec3p *param2, unk16 *param3) {
s16 iVar1;
if (!this->mUnk_58) {
MapObjectDoorBase::vfunc_84(param1, param2, param3);
return;
}
Vec3p local_24;
*param3 = this->mUnk_14;
iVar1 = this->mUnk_14 + DEG_TO_ANG(30);
if (param1 != 0) {
local_24.x = MUL_Q20(SIN((u16) iVar1), 0x1666);
local_24.z = MUL_Q20(COS((u16) iVar1), 0x1666);
local_24.y = 0;
} else {
local_24.x = MUL_Q20(SIN((u16) iVar1), 0x10CD);
local_24.z = MUL_Q20(COS((u16) iVar1), 0x10CD);
local_24.y = 0;
*param3 += DEG_TO_ANG(180);
}
Vec3p_Add(&this->mPos, &local_24, param2);
Vec3p local_30;
this->mUnk_5A = this->mUnk_14;
iVar1 = this->mUnk_14 - DEG_TO_ANG(30);
if (param1 != 0) {
local_30.x = MUL_Q20(SIN((u16) iVar1), 0x1666);
local_30.z = MUL_Q20(COS((u16) iVar1), 0x1666);
local_30.y = 0;
} else {
local_30.x = MUL_Q20(SIN((u16) iVar1), 0x10CD);
local_30.z = MUL_Q20(COS((u16) iVar1), 0x10CD);
local_30.y = 0;
this->mUnk_5A += DEG_TO_ANG(180);
}
Vec3p_Add(&this->mPos, &local_30, &this->mUnk_5C);
}
ARM void MapObjectUnkDRDS::func_ov031_020fe5fc(Vec3p *param1, MapObjectUnkDRDS *thisx) {
if (data_027e0ce0->func_01fff1a4()) {
Vec3p *piVar2 = data_027e0ce0->func_01fff148(1);
Vec3p *piVar3 = data_027e0ce0->func_01fff148(0);
Vec3p temp(piVar3->x, piVar3->y, piVar3->z);
Vec3p pos(temp.x + piVar2->x, temp.y + piVar2->y, temp.z + piVar2->z);
func_01ff93c0(&pos, FLOAT_TO_Q20(0.5f));
param1->coords = pos.coords;
} else {
Vec3p *piVar4 = data_027e0ce0->func_01fff148(0);
param1->coords = piVar4->coords;
}
}
ARM MapObjectUnkDRDS::~MapObjectUnkDRDS() {}
ARM MapObjectProfileUnkDRDS::~MapObjectProfileUnkDRDS() {}
+232 -22
View File
@@ -1,36 +1,246 @@
//! TODO: This file was generated automatically and might contain errors
#include "MapObject/MapObjectUnkDRKY.hpp"
#include "System/SysNew.hpp"
#include "Unknown/UnkStruct_027e09a8.hpp"
#include "Unknown/UnkStruct_027e0ce0.hpp"
#include "Unknown/UnkStruct_027e0cec.hpp"
extern "C" f32 func_02039f04(unk32);
extern "C" void func_01ffaf74(Vec3p *, Mat4x3p *, Vec3p *);
const UnkStruct_ov031_021150b0 data_ov031_02115184(0x1E66);
ARM DECL_PROFILE(MapObjectProfileUnkDRKY);
ARM MapObject *MapObjectProfileUnkDRKY::Create() {
return new(HeapIndex_2) MapObjectUnkDRKY();
return new(HeapIndex_ITCM) MapObjectUnkDRKY();
}
ARM MapObjectProfileUnkDRKY::MapObjectProfileUnkDRKY() :
MapObjectProfile(MapObjectId_DRKY) {}
MapObjectProfile_Derived2(MapObjectId_DRKY, MapObjectId_DRKY) {
this->mUnk_0E = 1;
this->mUnk_06 = 2;
this->mUnk_1E |= 0x01;
this->mUnk_0C = 0x2666;
}
ARM MapObjectUnkDRKY::MapObjectUnkDRKY() {}
ARM MapObjectUnkDRKY::MapObjectUnkDRKY() :
mUnk_94(GetUnkPointer1<MapObjectProfileUnkDRKY>()),
mUnk_9C(1),
mUnk_A0(0),
mUnk_A4(false) {
this->mUnk_8F = true;
SET_FLAG(this->mFlags, MapObjFlag_9);
this->mUnk_18[0] = 0x0E;
}
ARM void MapObjectUnkDRKY::func_ov031_020fe86c(void) {}
ARM void MapObjectUnkDRKY::func_ov031_020fe888(void) {}
ARM void MapObjectUnkDRKY::func_ov031_020fe8a0(void) {}
ARM void MapObjectUnkDRKY::func_ov031_020fe8ac(void) {}
ARM void MapObjectUnkDRKY::func_ov031_020fe9f8(void) {}
ARM void MapObjectUnkDRKY::func_ov031_020fea88(void) {}
ARM void MapObjectUnkDRKY::func_ov031_020feabc(void) {}
ARM void MapObjectUnkDRKY::func_ov031_020feb4c(void) {}
ARM void MapObjectUnkDRKY::func_ov031_020feb58(void) {}
ARM void MapObjectUnkDRKY::func_ov031_020feb60(void) {}
ARM void MapObjectUnkDRKY::func_ov031_020feb68(void) {}
ARM void MapObjectUnkDRKY::func_ov031_020febb8(void) {}
ARM void MapObjectUnkDRKY::func_ov031_020febdc(void) {}
ARM void MapObjectUnkDRKY::func_ov031_020fed78(void) {}
ARM void MapObjectUnkDRKY::func_ov031_020feda4(void) {}
ARM void MapObjectUnkDRKY::func_ov031_020fede8(void) {}
ARM void MapObjectUnkDRKY::func_ov031_020fedec(void) {}
ARM bool MapObjectUnkDRKY::vfunc_00(void) {
this->func_ov031_020fbf10(true, false);
return true;
}
ARM void MapObjectUnkDRKY::vfunc_08(void) {
this->MapObjectDoorBase::vfunc_08();
this->mUnk_A4 = false;
}
ARM void MapObjectUnkDRKY::vfunc_18(s8 *param1, s8 param2) {
this->MapObjectDoorBase::func_ov031_020fcb78(param1, param2);
}
// https://decomp.me/scratch/XO3u2
ARM void MapObjectUnkDRKY::vfunc_14(void) {
f32 factor;
f32 uVar3;
s32 sVar2;
s32 sVar2_2;
u16 uVar2;
if (this->mUnk_8B) {
uVar3 = func_02039f04(this->mUnk_6C) / 4096.0f;
factor = 16384.0f;
} else {
uVar3 = func_02039f04(this->mUnk_6C) / 4096.0f;
factor = -16384.0f;
}
s32 mul = factor * uVar3;
sVar2 = (s16) mul;
u16 angle = (u16) sVar2;
Mat3p m;
Vec3p local_48;
Vec3p temp;
Mat3p_InitYRotation(&m, SIN(angle), COS(angle));
temp.x = this->mPos.x - FLOAT_TO_Q20(1.0f) + this->mUnk_70;
temp.z = this->mPos.z;
temp.y = this->mPos.y;
local_48.x = temp.x;
local_48.y = temp.y;
local_48.z = temp.z;
this->mUnk_94.vfunc_14(&m, &local_48);
u16 var = (-0x8000 - sVar2);
Mat3p_InitYRotation(&m, SIN(var), COS(var));
temp.x = this->mPos.x + FLOAT_TO_Q20(1.0f) - this->mUnk_70;
temp.z = this->mPos.z;
temp.y = this->mPos.y;
local_48.x = temp.x;
local_48.y = temp.y;
local_48.z = temp.z;
this->mUnk_94.vfunc_14(&m, &local_48);
}
ARM void MapObjectUnkDRKY::vfunc_5C(unk32 param1, unk32 param2) {
this->mUnk_8D = true;
this->MapObjectDoorBase::vfunc_5C(param1, param2);
switch (this->mUnk_16) {
case 3:
if (param2 == 0) {
data_027e0ce0->mUnk_2C->func_ov000_020a87c8(-1);
}
UNSET_FLAG(this->mFlags, MapObjFlag_9);
data_027e09a8->func_ov000_02071b30(0x134, &this->mPos, 0);
break;
case 8:
UNSET_FLAG(this->mFlags, MapObjFlag_9);
break;
default:
break;
}
}
ARM bool MapObjectUnkDRKY::func_ov031_020fea88(void) {
if (this->mUnk_A4) {
return false;
}
if (data_027e0ce0->mUnk_2C->mKeyAmount != 0) {
return true;
}
return false;
}
ARM unk32 MapObjectUnkDRKY::vfunc_28(void) {
if (this->mUnk_A4) {
return -1;
}
if (data_027e0ce0->mUnk_2C->mKeyAmount == 0) {
return -1;
}
switch (this->mUnk_16) {
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
return -1;
default:
this->vfunc_5C(3, 0);
break;
}
return 0;
}
ARM bool MapObjectUnkDRKY::vfunc_64(void) {
return this->func_ov000_0209d668();
}
ARM bool MapObjectUnkDRKY::vfunc_68(void) {
return false;
}
ARM bool MapObjectUnkDRKY::vfunc_6C(void) {
return false;
}
ARM void MapObjectUnkDRKY::vfunc_74(void) {
data_027e0cec->func_ov000_0209ff8c(&this->mUnk_68, 0x89E, &this->mPos, 4);
data_027e0cec->func_ov000_0209ff8c(&this->mUnk_A0, 0x89E, &this->mPos, 4);
}
ARM void MapObjectUnkDRKY::vfunc_7C(void) {
this->MapObjectDoorBase::vfunc_7C();
if (this->mUnk_A0.mUnk_00 != NULL) {
this->mUnk_A0.func_ov000_020a0334();
}
}
ARM void MapObjectUnkDRKY::vfunc_78(void) {
Vec3p local_24;
Vec3p local_30;
Vec3p VStack_3c;
Vec3p VStack_48;
Mat4x3p m;
Vec3p local_84;
Vec3p local_90;
Vec3p temp;
temp.x = this->mPos.x;
temp.z = this->mPos.z;
temp.y = this->mPos.y;
local_24.x = temp.x - FLOAT_TO_Q20(0.999f);
local_24.y = temp.y;
local_24.z = temp.z;
local_30.x = temp.x + FLOAT_TO_Q20(0.999f);
local_30.y = temp.y;
local_30.z = temp.z;
f32 div = func_02039f04(this->mUnk_6C) / 4096.0f;
s16 angle = 16384.0f * div;
Mat4x3p_InitYRotation(&m, SIN((u16) angle), COS((u16) angle));
local_84.x = FLOAT_TO_Q20(1.0f);
local_84.y = 0;
local_84.z = 0;
local_90.x = 0;
local_90.y = 0;
local_90.z = FLOAT_TO_Q20(0.3299f);
func_01ffaf74(&local_90, &m, &local_90);
func_01ffaf74(&local_84, &m, &local_84);
Vec3p_Add(&local_24, &local_90, &local_24);
Vec3p_Add(&local_24, &local_84, &VStack_3c);
local_90.x = -local_90.x;
local_84.x = -local_84.x;
Vec3p_Add(&local_30, &local_90, &local_30);
Vec3p_Add(&local_30, &local_84, &VStack_48);
if (this->mUnk_68.mUnk_00 != NULL) {
this->mUnk_68.mUnk_00->func_ov000_02052c48(&VStack_3c, &local_24);
}
if (this->mUnk_A0.mUnk_00 != NULL) {
this->mUnk_A0.mUnk_00->func_ov000_02052c48(&VStack_48, &local_30);
}
}
ARM void MapObjectUnkDRKY::vfunc_40(void) {
data_027e09a8->func_ov000_02071b30(0x136, &this->mPos, 0);
}
ARM void MapObjectUnkDRKY::vfunc_44(void) {
unk32 stack = *(u32 *) &this->mUnk_38;
data_027e09a8->func_ov000_02071d34(&stack, 0x135, &this->mPos, 0);
}
ARM void MapObjectUnkDRKY::vfunc_48(void) {}
ARM void MapObjectUnkDRKY::vfunc_4C(void) {}
ARM MapObjectUnkDRKY::~MapObjectUnkDRKY() {}
ARM MapObjectProfileUnkDRKY::~MapObjectProfileUnkDRKY() {}
+324 -21
View File
@@ -1,35 +1,338 @@
//! TODO: This file was generated automatically and might contain errors
#include "MapObject/MapObjectUnkDRSW.hpp"
#include "System/SysNew.hpp"
#include "Unknown/UnkStruct_027e09a8.hpp"
#include "Unknown/UnkStruct_027e09b8.hpp"
#include "Unknown/UnkStruct_027e0cec.hpp"
#include "versions.h"
extern "C" void func_01ffaf74(Vec3p *, Mat4x3p *, Vec3p *);
extern "C" q20 func_01ffb464(q20);
extern "C" void func_01ff9218(q20 *, q20, q20);
const UnkStruct_ov031_021150b0 data_ov031_02115254(0x1E66);
ARM DECL_PROFILE(MapObjectProfileUnkDRSW);
ARM MapObject *MapObjectProfileUnkDRSW::Create() {
return new(HeapIndex_2) MapObjectUnkDRSW();
return new(HeapIndex_ITCM) MapObjectUnkDRSW();
}
ARM MapObjectProfileUnkDRSW::MapObjectProfileUnkDRSW() :
MapObjectProfile(MapObjectId_DRSW) {}
MapObjectProfile_Derived2(MapObjectId_DRSW, MapObjectId_DRSW) {
this->mUnk_06 = -1;
this->mUnk_1E &= ~0x01;
}
ARM MapObjectUnkDRSW::MapObjectUnkDRSW() {}
ARM MapObjectUnkDRSW::MapObjectUnkDRSW() :
mUnk_094(0) {
this->mUnkPos = FLOAT_TO_Q20(0.0f);
ARM void MapObjectUnkDRSW::func_ov031_020feee4(void) {}
ARM void MapObjectUnkDRSW::func_ov031_020fefac(void) {}
ARM void MapObjectUnkDRSW::func_ov031_020ff07c(void) {}
ARM void MapObjectUnkDRSW::func_ov031_020ff100(void) {}
ARM void MapObjectUnkDRSW::func_ov031_020ff110(void) {}
ARM void MapObjectUnkDRSW::func_ov031_020ff130(void) {}
ARM void MapObjectUnkDRSW::func_ov031_020ff1b0(void) {}
ARM void MapObjectUnkDRSW::func_ov031_020ff1bc(void) {}
ARM void MapObjectUnkDRSW::func_ov031_020ff288(void) {}
ARM void MapObjectUnkDRSW::func_ov031_020ff2d8(void) {}
ARM void MapObjectUnkDRSW::func_ov031_020ff318(void) {}
ARM void MapObjectUnkDRSW::func_ov031_020ff38c(void) {}
ARM void MapObjectUnkDRSW::func_ov031_020ff3d0(void) {}
ARM void MapObjectUnkDRSW::func_ov031_020ff3fc(void) {}
ARM void MapObjectUnkDRSW::func_ov031_020ff43c(void) {}
ARM void MapObjectUnkDRSW::func_ov031_020ff468(void) {}
#if IS_JP
this->mUnk_140 = false;
this->mUnk_141 = false;
#endif
this->mUnk_8E = true;
this->mUnk_8F = true;
this->mUnk_89 = true;
}
ARM bool MapObjectUnkDRSW::vfunc_00(void) {
this->mUnk_094.vfunc_08(this->vfunc2_10());
this->func_ov031_020fbf10(true, true);
if (this->mUnk_20.mUnk_00[3] == 1) {
this->mUnk_8F = false;
}
#if IS_JP
if (this->mUnk_20.mUnk_00[2] == 1) {
this->mUnk_141 = true;
}
#endif
this->mUnk_0F4.mUnk_0C.x = -FLOAT_TO_Q20(1.0f);
this->mUnk_0F4.mUnk_0C.y = FLOAT_TO_Q20(0.0f);
this->mUnk_0F4.mUnk_0C.z = -FLOAT_TO_Q20(1.35f);
this->mUnk_0F4.mUnk_18.x = FLOAT_TO_Q20(1.0f);
this->mUnk_0F4.mUnk_18.y = FLOAT_TO_Q20(2.4f);
this->mUnk_0F4.mUnk_18.z = FLOAT_TO_Q20(0.35f);
this->mUnk_0F4.mUnk_04 &= ~0x01;
this->mUnk_0F4.mUnk_08 = 0x7009;
#if IS_JP
this->mUnk_118.mUnk_0C.x = -FLOAT_TO_Q20(0.35f);
this->mUnk_118.mUnk_0C.y = FLOAT_TO_Q20(0.0f);
this->mUnk_118.mUnk_0C.z = -FLOAT_TO_Q20(1.0f);
this->mUnk_118.mUnk_18.x = FLOAT_TO_Q20(0.35f);
this->mUnk_118.mUnk_18.y = FLOAT_TO_Q20(2.4f);
this->mUnk_118.mUnk_18.z = FLOAT_TO_Q20(1.0f);
this->mUnk_118.mUnk_04 &= ~0x01;
this->mUnk_118.mUnk_08 = 0x7009;
if (!this->IsOrientedVertically()) {
this->mUnk_10 = &this->mUnk_0F4;
this->mUnk_140 = true;
} else if (this->mUnk_141) {
this->mUnk_10 = &this->mUnk_118;
this->mUnk_140 = true;
}
#else
if (!this->IsOrientedVertically()) {
this->mUnk_10 = &this->mUnk_0F4;
}
#endif
return true;
}
ARM void MapObjectUnkDRSW::vfunc_08(void) {
if (this->mUnk_20.mUnk_00[3] == 2 && data_027e09b8->func_01ffd420()) {
this->MapObjectDoorBase::vfunc_08();
} else if (this->mUnk_16 == 5 && this->vfunc_6C()) {
this->vfunc_5C(0, 0);
} else {
this->MapObjectDoorBase::vfunc_08();
}
}
ARM bool MapObjectUnkDRSW::vfunc_64(void) {
return this->func_ov000_0209d29c(0);
}
ARM bool MapObjectUnkDRSW::vfunc_6C(void) {
if (this->func_ov000_0209d29c(0)) {
return false;
}
return true;
}
ARM void MapObjectUnkDRSW::vfunc_14(void) {
u16 angle = this->mUnk_14;
Mat3p m;
Mat3p_InitYRotation(&m, SIN(angle), COS(angle));
Vec3p local_40(this->mPos);
local_40.y -= this->mUnk_6C * 2;
this->mUnk_094.vfunc_14(&m, &local_40);
}
ARM void MapObjectUnkDRSW::vfunc_18(s8 *param1, s8 param2) {
this->func_ov031_020fcb78(param1, param2);
}
ARM void MapObjectUnkDRSW::vfunc_74(void) {
Vec3p local_20(this->mPos);
Vec3p local_2c(0, 0, 0x666);
Mat4x3p m;
u16 angle = this->mUnk_14;
Mat4x3p_InitYRotation(&m, SIN(angle), COS(angle));
func_01ffaf74(&local_2c, &m, &local_2c);
Vec3p_Add(&local_20, &local_2c, &local_20);
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;
}
}
ARM void *MapObjectUnkDRSW::vfunc2_10(void) {
return GetUnkPointer1<MapObjectProfileUnkDRSW>();
}
ARM void MapObjectUnkDRSW::vfunc_50(void) {
#if IS_JP
if (!this->mUnk_140) {
return;
}
u16 uVar1 = this->GetDirection();
if (!this->IsOrientedVertically()) {
this->mUnkPos = FLOAT_TO_Q20(0.35f);
this->mUnk_0F4.mUnk_0C.x = -FLOAT_TO_Q20(1.0f);
this->mUnk_0F4.mUnk_0C.y = FLOAT_TO_Q20(0.0f);
this->mUnk_0F4.mUnk_0C.z = FLOAT_TO_Q20(0.35f);
this->mUnk_0F4.mUnk_18.x = FLOAT_TO_Q20(1.0f);
this->mUnk_0F4.mUnk_18.y = FLOAT_TO_Q20(2.4f);
this->mUnk_0F4.mUnk_18.z = FLOAT_TO_Q20(0.35f);
return;
}
if (!this->mUnk_141) {
return;
}
if (uVar1 == 3) {
this->mUnkPos = FLOAT_TO_Q20(0.35f);
this->mUnk_118.mUnk_0C.x = FLOAT_TO_Q20(0.35f);
this->mUnk_118.mUnk_0C.y = FLOAT_TO_Q20(0.0f);
this->mUnk_118.mUnk_0C.z = -FLOAT_TO_Q20(1.0f);
this->mUnk_118.mUnk_18.x = FLOAT_TO_Q20(0.35f);
this->mUnk_118.mUnk_18.y = FLOAT_TO_Q20(2.4f);
this->mUnk_118.mUnk_18.z = FLOAT_TO_Q20(1.0f);
} else {
this->mUnkPos = -FLOAT_TO_Q20(0.35f);
this->mUnk_118.mUnk_0C.x = -FLOAT_TO_Q20(0.35f);
this->mUnk_118.mUnk_0C.y = FLOAT_TO_Q20(0.0f);
this->mUnk_118.mUnk_0C.z = -FLOAT_TO_Q20(1.0f);
this->mUnk_118.mUnk_18.x = -FLOAT_TO_Q20(0.35f);
this->mUnk_118.mUnk_18.y = FLOAT_TO_Q20(2.4f);
this->mUnk_118.mUnk_18.z = FLOAT_TO_Q20(1.0f);
}
#else
this->mUnkPos = FLOAT_TO_Q20(0.35f);
this->mUnk_0F4.mUnk_0C.x = -FLOAT_TO_Q20(1.0f);
this->mUnk_0F4.mUnk_0C.y = FLOAT_TO_Q20(0.0f);
this->mUnk_0F4.mUnk_0C.z = FLOAT_TO_Q20(0.35f);
this->mUnk_0F4.mUnk_18.x = FLOAT_TO_Q20(1.0f);
this->mUnk_0F4.mUnk_18.y = FLOAT_TO_Q20(2.4f);
this->mUnk_0F4.mUnk_18.z = FLOAT_TO_Q20(0.35f);
#endif
}
ARM void MapObjectUnkDRSW::vfunc_54(void) {
this->func_ov031_020fcf0c(1);
#if IS_JP
if (!this->mUnk_140) {
return;
}
u16 uVar1 = this->GetDirection();
if (!this->IsOrientedVertically()) {
if (this->mUnk_80 > 0) {
func_01ff9218(&this->mUnkPos, -FLOAT_TO_Q20(1.35f), func_01ffb464(INT_TO_Q20(this->mUnk_80)));
}
q20 temp_118 = this->mUnkPos;
this->mUnk_0F4.mUnk_0C.x = -FLOAT_TO_Q20(1.0f);
this->mUnk_0F4.mUnk_0C.y = FLOAT_TO_Q20(0.0f);
this->mUnk_0F4.mUnk_0C.z = temp_118;
this->mUnk_0F4.mUnk_18.x = FLOAT_TO_Q20(1.0f);
this->mUnk_0F4.mUnk_18.y = FLOAT_TO_Q20(2.4f);
this->mUnk_0F4.mUnk_18.z = FLOAT_TO_Q20(0.35f);
return;
}
if (!this->mUnk_141) {
return;
}
s16 cond_80 = this->mUnk_80;
if (uVar1 == 3) {
if (this->mUnk_80 > 0) {
func_01ff9218(&this->mUnkPos, -FLOAT_TO_Q20(0.35f), func_01ffb464(INT_TO_Q20(this->mUnk_80)));
}
this->mUnk_118.mUnk_0C.x = this->mUnkPos;
this->mUnk_118.mUnk_0C.y = FLOAT_TO_Q20(0.0f);
this->mUnk_118.mUnk_0C.z = -FLOAT_TO_Q20(1.0f);
this->mUnk_118.mUnk_18.x = FLOAT_TO_Q20(0.35f);
this->mUnk_118.mUnk_18.y = FLOAT_TO_Q20(2.4f);
this->mUnk_118.mUnk_18.z = FLOAT_TO_Q20(1.0f);
} else {
if (this->mUnk_80 > 0) {
func_01ff9218(&this->mUnkPos, FLOAT_TO_Q20(0.35f), func_01ffb464(INT_TO_Q20(this->mUnk_80)));
}
this->mUnk_118.mUnk_0C.x = -FLOAT_TO_Q20(0.35f);
this->mUnk_118.mUnk_0C.y = FLOAT_TO_Q20(0.0f);
this->mUnk_118.mUnk_0C.z = -FLOAT_TO_Q20(1.0f);
this->mUnk_118.mUnk_18.x = this->mUnkPos;
this->mUnk_118.mUnk_18.y = FLOAT_TO_Q20(2.4f);
this->mUnk_118.mUnk_18.z = FLOAT_TO_Q20(1.0f);
}
#else
if (this->mUnk_80 > 0) {
func_01ff9218(&this->mUnkPos, -FLOAT_TO_Q20(1.35f), func_01ffb464(INT_TO_Q20(this->mUnk_80)));
}
q20 temp_118 = this->mUnkPos;
this->mUnk_0F4.mUnk_0C.x = -FLOAT_TO_Q20(1.0f);
this->mUnk_0F4.mUnk_0C.y = FLOAT_TO_Q20(0.0f);
this->mUnk_0F4.mUnk_0C.z = temp_118;
this->mUnk_0F4.mUnk_18.x = FLOAT_TO_Q20(1.0f);
this->mUnk_0F4.mUnk_18.y = FLOAT_TO_Q20(2.4f);
this->mUnk_0F4.mUnk_18.z = FLOAT_TO_Q20(0.35f);
#endif
}
ARM void MapObjectUnkDRSW::vfunc_58(void) {
#if IS_JP
if (!this->mUnk_140) {
return;
}
if (!this->IsOrientedVertically()) {
this->mUnk_0F4.mUnk_0C.x = -FLOAT_TO_Q20(1.0f);
this->mUnk_0F4.mUnk_0C.y = FLOAT_TO_Q20(0.0f);
this->mUnk_0F4.mUnk_0C.z = -FLOAT_TO_Q20(1.35f);
this->mUnk_0F4.mUnk_18.x = FLOAT_TO_Q20(1.0f);
this->mUnk_0F4.mUnk_18.y = FLOAT_TO_Q20(2.4f);
this->mUnk_0F4.mUnk_18.z = FLOAT_TO_Q20(0.35f);
} else {
if (this->mUnk_141) {
this->mUnk_118.mUnk_0C.x = -FLOAT_TO_Q20(0.35f);
this->mUnk_118.mUnk_0C.y = FLOAT_TO_Q20(0.0f);
this->mUnk_118.mUnk_0C.z = -FLOAT_TO_Q20(1.0f);
this->mUnk_118.mUnk_18.x = FLOAT_TO_Q20(0.35f);
this->mUnk_118.mUnk_18.y = FLOAT_TO_Q20(2.4f);
this->mUnk_118.mUnk_18.z = FLOAT_TO_Q20(1.0f);
}
}
#else
this->mUnk_0F4.mUnk_0C.x = -FLOAT_TO_Q20(1.0f);
this->mUnk_0F4.mUnk_0C.y = FLOAT_TO_Q20(0.0f);
this->mUnk_0F4.mUnk_0C.z = -FLOAT_TO_Q20(1.35f);
this->mUnk_0F4.mUnk_18.x = FLOAT_TO_Q20(1.0f);
this->mUnk_0F4.mUnk_18.y = FLOAT_TO_Q20(2.4f);
this->mUnk_0F4.mUnk_18.z = FLOAT_TO_Q20(0.35f);
#endif
}
ARM void MapObjectUnkDRSW::vfunc_40(void) {
data_027e09a8->func_ov000_02071b30(0x131, &this->mPos, 0);
}
ARM void MapObjectUnkDRSW::vfunc_44(void) {
unk32 local_c = *(u32 *) &this->mUnk_38;
data_027e09a8->func_ov000_02071d34(&local_c, 0x130, &this->mPos, 0);
}
ARM void MapObjectUnkDRSW::vfunc_48(void) {
data_027e09a8->func_ov000_02071b30(0x133, &this->mPos, 0);
}
ARM void MapObjectUnkDRSW::vfunc_4C(void) {
unk32 local_c = *(u32 *) &this->mUnk_38;
data_027e09a8->func_ov000_02071d34(&local_c, 0x132, &this->mPos, 0);
}
ARM MapObjectUnkDRSW::~MapObjectUnkDRSW() {}
ARM MapObjectProfileUnkDRSW::~MapObjectProfileUnkDRSW() {}
+41 -12
View File
@@ -1,26 +1,55 @@
//! TODO: This file was generated automatically and might contain errors
#include "MapObject/MapObjectUnkDRTC.hpp"
#include "System/SysNew.hpp"
#include "Unknown/Common.hpp"
#include "Unknown/UnkStruct_027e09a8.hpp"
extern u32 data_ov031_02110c3c[];
ARM DECL_PROFILE(MapObjectProfileUnkDRTC);
ARM MapObject *MapObjectProfileUnkDRTC::Create() {
return new(HeapIndex_2) MapObjectUnkDRTC();
return new(HeapIndex_ITCM) MapObjectUnkDRTC();
}
ARM MapObjectProfileUnkDRTC::MapObjectProfileUnkDRTC() :
MapObjectProfile(MapObjectId_DRTC) {}
MapObjectProfile_Derived1(MapObjectId_DRTC, -1, 0) {
this->mUnk_06 = -1;
this->mUnk_1E &= ~0x01;
}
ARM MapObjectUnkDRTC::MapObjectUnkDRTC() {}
ARM MapObjectUnkDRTC::MapObjectUnkDRTC() {
this->mUnk_18[0] = 0x0F;
}
ARM void MapObjectUnkDRTC::func_ov031_021002fc(void) {}
ARM void MapObjectUnkDRTC::func_ov031_02100314(void) {}
ARM void MapObjectUnkDRTC::func_ov031_021003a0(void) {}
ARM void MapObjectUnkDRTC::func_ov031_021003c8(void) {}
ARM void MapObjectUnkDRTC::func_ov031_0210040c(void) {}
ARM void MapObjectUnkDRTC::func_ov031_02100410(void) {}
ARM void MapObjectUnkDRTC::func_ov031_02100414(void) {}
ARM bool MapObjectUnkDRTC::vfunc_00(void) {
this->MapObjectUnkDRCK::vfunc_00();
this->mUnk_88 = true;
return true;
}
ARM void MapObjectUnkDRTC::vfunc2_10(void) {
MapObjectProfileUnkDRTC *p = GET_PROFILE(MapObjectProfileUnkDRTC);
unk32 index = this->mUnk_20.mUnk_00[0];
this->mUnk_94.vfunc_08(GetUnkPointer2<MapObjectProfileUnkDRTC>(index, data_ov031_02110c3c[index]));
}
ARM void MapObjectUnkDRTC::vfunc_40(void) {
data_027e09a8->func_ov000_02071b30(0x148, &this->mPos, 0);
}
ARM void MapObjectUnkDRTC::vfunc_44(void) {
unk32 local_c = *(u32 *) &this->mUnk_38;
data_027e09a8->func_ov000_02071d34(&local_c, 0x147, &this->mPos, 0);
}
ARM void MapObjectUnkDRTC::vfunc_48(void) {}
ARM void MapObjectUnkDRTC::vfunc_4C(void) {}
ARM void MapObjectUnkDRTC::vfunc2_18(void) {
data_027e09a8->func_ov000_02071b30(0x146, &this->mPos, 0);
}
ARM MapObjectUnkDRTC::~MapObjectUnkDRTC() {}
ARM MapObjectProfileUnkDRTC::~MapObjectProfileUnkDRTC() {}