Decompiling SWHT (#138)

* feat: update

* feat: improve matching (98%)

* feat: match multiflags

* style: remove outdated comments
This commit is contained in:
Alessevan
2026-08-21 11:54:39 -04:00
committed by GitHub
parent 2d4deebb84
commit fd3a2340e3
13 changed files with 415 additions and 62 deletions
+1 -1
View File
@@ -2676,7 +2676,7 @@ _ZN18UnkStruct_027e0cec19func_ov000_0209ff8cEP22UnkStruct_PlayerGet_eciP7VecFx32
func_ov000_020a0000 kind:function(arm,size=0xa0) addr:0x020a0000
func_ov000_020a00a0 kind:function(arm,size=0x34) addr:0x020a00a0
_ZN18UnkStruct_027e0cec19func_ov000_020a00d4EP22UnkStruct_PlayerGet_eciiiP7VecFx32i kind:function(arm,size=0x3c) addr:0x020a00d4
_ZN18UnkStruct_027e0cec19func_ov000_020a0110EP22UnkStruct_PlayerGet_ec kind:function(arm,size=0x30) addr:0x020a0110
_ZN18UnkStruct_027e0cec19func_ov000_020a0110EP10UnkSystem7 kind:function(arm,size=0x30) addr:0x020a0110
_ZN18UnkStruct_027e0cec19func_ov000_020a0140EP10UnkSystem7P7VecFx32 kind:function(arm,size=0xe0) addr:0x020a0140
_ZN18UnkStruct_027e0cec19func_ov000_020a0220EPvS0_ kind:function(arm,size=0xb4) addr:0x020a0220
_ZN22UnkStruct_PlayerGet_ecD1Ev kind:function(arm,size=0x30) addr:0x020a02d4
+2 -1
View File
@@ -281,13 +281,14 @@ src/031_Land/MapObject/MapObjectGrass.cpp:
.text start:0x0210100c end:0x021019dc
.init start:0x02111df8 end:0x02111e88
.ctor start:0x02112834 end:0x02112838
.data start:0x0211561c end:0x021156a8
.data start:0x0211561c end:0x0211569c
.bss start:0x02117868 end:0x021179b8
src/031_Land/MapObject/MapObjectUnkSWHT.cpp:
.text start:0x02101a14 end:0x02102438
.init start:0x02111e88 end:0x02111ef8
.ctor start:0x02112838 end:0x0211283c
.data start:0x0211569c end:0x02115704
.bss start:0x021179b8 end:0x02117abc
src/031_Land/MapObject/MapObjectUnkBMFL.cpp:
+4 -4
View File
@@ -4566,7 +4566,7 @@ from:0x02101b80 kind:arm_call to:0x02058a24 module:overlay(0)
from:0x02101b94 kind:arm_call to:0x02058a84 module:overlay(0)
from:0x02101ba8 kind:arm_call to:0x020577a4 module:overlay(0)
from:0x02101bb4 kind:arm_call to:0x02057c98 module:overlay(0)
from:0x02101bd4 kind:load to:0x021156cc module:overlay(31)
from:0x02101bd4 kind:load to:0x021156c4 module:overlay(31) add:0x8
from:0x02101bd8 kind:load to:0x021179c8 module:overlay(31)
from:0x02101bdc kind:load to:0x021179e8 module:overlay(31)
from:0x02101be0 kind:load to:0x02110ce0 module:overlay(31)
@@ -4576,14 +4576,14 @@ from:0x02101c3c kind:arm_call to:0x021021c0 module:overlay(31)
from:0x02101c44 kind:arm_call to:0x020a0304 module:overlay(0)
from:0x02101c4c kind:arm_call_thumb to:0x02057b8c module:overlay(0)
from:0x02101c54 kind:arm_call to:0x0209d0ac module:overlay(0)
from:0x02101c60 kind:load to:0x021156cc module:overlay(31)
from:0x02101c60 kind:load to:0x021156c4 module:overlay(31) add:0x8
from:0x02101ca0 kind:arm_call to:0x0209d29c module:overlay(0)
from:0x02101cb8 kind:arm_call to:0x021021c0 module:overlay(31)
from:0x02101cc0 kind:arm_call to:0x020a0304 module:overlay(0)
from:0x02101cc8 kind:arm_call_thumb to:0x02057b8c module:overlay(0)
from:0x02101cd0 kind:arm_call to:0x0209d0ac module:overlay(0)
from:0x02101cd8 kind:arm_call to:0x02011ff4 module:main
from:0x02101ce4 kind:load to:0x021156cc module:overlay(31)
from:0x02101ce4 kind:load to:0x021156c4 module:overlay(31) add:0x8
from:0x02101d9c kind:arm_call to:0x0209d29c module:overlay(0)
from:0x02101dc4 kind:arm_call to:0x021021c0 module:overlay(31)
from:0x02101dcc kind:arm_call to:0x02101dd8 module:overlay(31)
@@ -4634,7 +4634,7 @@ from:0x02102440 kind:load to:0x02117acc module:overlay(31)
from:0x02102454 kind:arm_call to:0x02011f3c module:main
from:0x02102460 kind:arm_call to:0x021024ac module:overlay(31)
from:0x02102478 kind:arm_call to:0x0209c9a8 module:overlay(0)
from:0x021024a4 kind:load to:0x0211570c module:overlay(31)
from:0x021024a4 kind:load to:0x02115704 module:overlay(31) add:0x8
from:0x021024b4 kind:arm_call to:0x0209d700 module:overlay(0)
from:0x02102518 kind:arm_call to:0x02102bc0 module:overlay(31)
from:0x02102538 kind:arm_call to:0x0207c018 module:overlay(0)
+10 -10
View File
@@ -1495,16 +1495,16 @@ _ZN23MapObjectProfileUnkSWHT10GetProfileEv kind:function(arm,size=0xc) addr:0x02
_ZN23MapObjectProfileUnkSWHT6CreateEv kind:function(arm,size=0x24) addr:0x02101a20
_ZN23MapObjectProfileUnkSWHTC1Ev kind:function(arm,size=0x90) addr:0x02101a44
_ZN16MapObjectUnkSWHTC1Ev kind:function(arm,size=0x114) addr:0x02101ad4
_ZN16MapObjectUnkSWHT19func_ov031_02101be8Ev kind:function(arm,size=0x7c) addr:0x02101be8
_ZN16MapObjectUnkSWHTD1Ev kind:function(arm,size=0x7c) addr:0x02101be8
_ZN16MapObjectUnkSWHTD0Ev kind:function(arm,size=0x84) addr:0x02101c64
_ZN16MapObjectUnkSWHT19func_ov031_02101ce8Ev kind:function(arm,size=0xf0) addr:0x02101ce8
_ZN16MapObjectUnkSWHT8vfunc_00Ev kind:function(arm,size=0xf0) addr:0x02101ce8
_ZN16MapObjectUnkSWHT19func_ov031_02101dd8Ev kind:function(arm,size=0x44) addr:0x02101dd8
_ZN16MapObjectUnkSWHT19func_ov031_02101e1cEv kind:function(arm,size=0x16c) addr:0x02101e1c
_ZN16MapObjectUnkSWHT19func_ov031_02101f88Ev kind:function(arm,size=0xc) addr:0x02101f88
_ZN16MapObjectUnkSWHT19func_ov031_02101f94Ev kind:function(arm,size=0x20) addr:0x02101f94
_ZN16MapObjectUnkSWHT19func_ov031_02101fb4Ev kind:function(arm,size=0x138) addr:0x02101fb4
_ZN16MapObjectUnkSWHT8vfunc_08Ev kind:function(arm,size=0x16c) addr:0x02101e1c
_ZN16MapObjectUnkSWHT8vfunc_0CEv kind:function(arm,size=0xc) addr:0x02101f88
_ZN16MapObjectUnkSWHT8vfunc_14Ev kind:function(arm,size=0x20) addr:0x02101f94
_ZN16MapObjectUnkSWHT8vfunc_1CE8ActorRefiP7VecFx32 kind:function(arm,size=0x138) addr:0x02101fb4
_ZN16MapObjectUnkSWHT19func_ov031_021020ecEv kind:function(arm,size=0xd4) addr:0x021020ec
_ZN16MapObjectUnkSWHT19func_ov031_021021c0Ev kind:function(arm,size=0x1f0) addr:0x021021c0
_ZN16MapObjectUnkSWHT19func_ov031_021021c0Esi kind:function(arm,size=0x1f0) addr:0x021021c0
_ZN16MapObjectUnkSWHT19func_ov031_021023b0Ev kind:function(arm,size=0x74) addr:0x021023b0
_ZN23MapObjectProfileUnkSWHTD1Ev kind:function(arm,size=0x14) addr:0x02102424
_ZN23MapObjectProfileUnkBMFL10GetProfileEv kind:function(arm,size=0xc) addr:0x02102438
@@ -2438,9 +2438,9 @@ _ZTV24MapObjectProfilePot_Base kind:data(any) addr:0x0211561c
_ZTV21MapObjectProfileGrass kind:data(any) addr:0x02115638
_ZTV14MapObjectGrass kind:data(any) addr:0x02115654
data_ov031_0211569c kind:data(any) addr:0x0211569c
_ZTV19data_ov031_021156b0 kind:data(any) addr:0x021156a8
data_ov031_021156cc kind:data(any) addr:0x021156cc
data_ov031_0211570c kind:data(any) addr:0x0211570c
_ZTV23MapObjectProfileUnkSWHT kind:data(any) addr:0x021156a8
_ZTV16MapObjectUnkSWHT kind:data(any) addr:0x021156c4
_ZTV19data_ov031_0211570c kind:data(any) addr:0x02115704
data_ov031_02115728 kind:data(any) addr:0x02115728
_ZTV19data_ov031_0211578c kind:data(any) addr:0x02115784
data_ov031_021157b0 kind:data(any) addr:0x021157b0 local
+1 -1
View File
@@ -2677,7 +2677,7 @@ _ZN18UnkStruct_027e0cec19func_ov000_0209ff8cEP22UnkStruct_PlayerGet_eciP7VecFx32
func_ov000_020a17d8 kind:function(arm,size=0xa0) addr:0x020a17d8
func_ov000_020a1878 kind:function(arm,size=0x34) addr:0x020a1878
func_ov000_020a18ac kind:function(arm,size=0x3c) addr:0x020a18ac
_ZN18UnkStruct_027e0cec19func_ov000_020a0110EP22UnkStruct_PlayerGet_ec kind:function(arm,size=0x30) addr:0x020a18e8
_ZN18UnkStruct_027e0cec19func_ov000_020a0110EP10UnkSystem7 kind:function(arm,size=0x30) addr:0x020a18e8
_ZN18UnkStruct_027e0cec19func_ov000_020a0140EP10UnkSystem7P7VecFx32 kind:function(arm,size=0xe0) addr:0x020a1918
_ZN18UnkStruct_027e0cec19func_ov000_020a0220EPvS0_ kind:function(arm,size=0xb4) addr:0x020a19f8
_ZN22UnkStruct_PlayerGet_ecD1Ev kind:function(arm,size=0x30) addr:0x020a1aac
+7 -7
View File
@@ -1494,16 +1494,16 @@ _ZN23MapObjectProfileUnkSWHT10GetProfileEv kind:function(arm,size=0xc) addr:0x02
_ZN23MapObjectProfileUnkSWHT6CreateEv kind:function(arm,size=0x24) addr:0x02103768
_ZN23MapObjectProfileUnkSWHTC1Ev kind:function(arm,size=0x90) addr:0x0210378c
_ZN16MapObjectUnkSWHTC1Ev kind:function(arm,size=0x114) addr:0x0210381c
_ZN16MapObjectUnkSWHT19func_ov031_02101be8Ev kind:function(arm,size=0x7c) addr:0x02103930
_ZN16MapObjectUnkSWHTD1Ev kind:function(arm,size=0x7c) addr:0x02103930
_ZN16MapObjectUnkSWHTD0Ev kind:function(arm,size=0x84) addr:0x021039ac
_ZN16MapObjectUnkSWHT19func_ov031_02101ce8Ev kind:function(arm,size=0xf0) addr:0x02103a30
_ZN16MapObjectUnkSWHT8vfunc_00Ev kind:function(arm,size=0xf0) addr:0x02103a30
_ZN16MapObjectUnkSWHT19func_ov031_02101dd8Ev kind:function(arm,size=0x44) addr:0x02103b20
_ZN16MapObjectUnkSWHT19func_ov031_02101e1cEv kind:function(arm,size=0x16c) addr:0x02103b64
_ZN16MapObjectUnkSWHT19func_ov031_02101f88Ev kind:function(arm,size=0xc) addr:0x02103cd0
_ZN16MapObjectUnkSWHT19func_ov031_02101f94Ev kind:function(arm,size=0x20) addr:0x02103cdc
_ZN16MapObjectUnkSWHT19func_ov031_02101fb4Ev kind:function(arm,size=0x138) addr:0x02103cfc
_ZN16MapObjectUnkSWHT8vfunc_08Ev kind:function(arm,size=0x16c) addr:0x02103b64
_ZN16MapObjectUnkSWHT8vfunc_0CEv kind:function(arm,size=0xc) addr:0x02103cd0
_ZN16MapObjectUnkSWHT8vfunc_14Ev kind:function(arm,size=0x20) addr:0x02103cdc
_ZN16MapObjectUnkSWHT8vfunc_1CE8ActorRefiP7VecFx32 kind:function(arm,size=0x138) addr:0x02103cfc
_ZN16MapObjectUnkSWHT19func_ov031_021020ecEv kind:function(arm,size=0xd4) addr:0x02103e34
_ZN16MapObjectUnkSWHT19func_ov031_021021c0Ev kind:function(arm,size=0x204) addr:0x02103f08
_ZN16MapObjectUnkSWHT19func_ov031_021021c0Esi kind:function(arm,size=0x204) addr:0x02103f08
_ZN16MapObjectUnkSWHT19func_ov031_021023b0Ev kind:function(arm,size=0x74) addr:0x0210410c
_ZN23MapObjectProfileUnkSWHTD1Ev kind:function(arm,size=0x14) addr:0x02104180
_ZN23MapObjectProfileUnkBMFL10GetProfileEv kind:function(arm,size=0xc) addr:0x02104194
+1 -1
View File
@@ -56,7 +56,7 @@ public:
/* 05 */ unk8 mUnk_05;
/* 06 */ unk8 mUnk_06;
/* 07 */ unk8 mUnk_07;
/* 08 */ unk32 mUnk_08;
/* 08 */ u32 mUnk_08;
/* 0C */
MapObject_10_Base(); // func_ov000_0207c018
+31 -16
View File
@@ -1,39 +1,54 @@
//! TODO: This file was generated automatically and might contain errors
#pragma once
#include "MapObject/MapObject.hpp"
#include "MapObject/MapObjectProfile.hpp"
#include "MapObject_ov031.hpp"
#include "global.h"
#include "types.h"
enum MapObjUnkSWHTState_ {
MapObjUnkSWHTState_0 = 0,
MapObjUnkSWHTState_1 = 1,
MapObjUnkSWHTState_Max
};
class MapObjectUnkSWHT : public MapObject {
public:
/* 00 (base) */
/* 40 */
/* 000 (base) */
/* 040 */ u32 mUnk_040;
/* 044 */ unk32 mUnk_044;
/* 048 */ unk32 mUnk_048;
/* 04C */ unk32 mUnk_04C;
/* 050 */ unk32 mUnk_050;
/* 054 */ ModelRender mUnk_054;
/* 0B4 */ UnkSystem5 mUnk_0B4;
/* 0D4 */ unk32 mUnk_0D4;
/* 0D8 */ STRUCT_PAD(0x0D8, 0x0F4);
/* 0F4 */ UnkSystem7 mUnk_0F4;
/* 0F8 */ unk32 mUnk_0F8;
/* 0FC */ unk32 mUnk_0FC;
/* 100 */
MapObjectUnkSWHT();
/* 00 */ virtual bool vfunc_00() override;
/* 08 */ virtual void vfunc_08() override;
/* 0C */ virtual void vfunc_0C() override;
/* 14 */ virtual void vfunc_14() override;
/* 1C */ virtual bool vfunc_1C(ActorRef param1, unk32 param2, VecFx32 *param3) override;
/* 30 */ virtual ~MapObjectUnkSWHT() override;
void func_ov031_02101be8(void);
void func_ov031_02101ce8(void);
void func_ov031_02101dd8(void);
void func_ov031_02101e1c(void);
void func_ov031_02101f88(void);
void func_ov031_02101f94(void);
void func_ov031_02101fb4(void);
void func_ov031_021020ec(void);
void func_ov031_021021c0(void);
void func_ov031_021023b0(void);
void func_ov031_02101dd8();
bool func_ov031_021020ec();
void func_ov031_021021c0(unk16 state, unk32 param2);
void func_ov031_021023b0();
};
class MapObjectProfileUnkSWHT : public MapObjectProfile {
class MapObjectProfileUnkSWHT : public MapObjectProfilePot_Base {
public:
/* 00 (base) */
MapObjectProfileUnkSWHT();
~MapObjectProfileUnkSWHT();
/* 0C */ virtual MapObject *Create();
+1 -1
View File
@@ -78,7 +78,7 @@ public:
void func_ov000_020a0000(UnkStruct_PlayerGet_ec *param1, void *param2, unk32 *param3, VecFx32 *param4, unk32 param5);
void func_ov000_020a00d4(UnkStruct_PlayerGet_ec *param1, unk32 param2, unk32 param3, unk32 param4, VecFx32 *param5,
unk32 param6);
void func_ov000_020a0110(UnkStruct_PlayerGet_ec *param1);
void func_ov000_020a0110(UnkSystem7 *param1);
void func_ov000_020a0140(UnkSystem7 *param1, VecFx32 *param2);
void func_ov000_020a0220(void *param1, void *param2);
+3 -1
View File
@@ -37,4 +37,6 @@
#define GET_FLAGS_IMPL2(N, ...) GET_FLAGS_##N(__VA_ARGS__)
#define GET_FLAGS_IMPL(N, ...) GET_FLAGS_IMPL2(N, __VA_ARGS__)
#define GET_FLAGS(...) GET_FLAGS_IMPL(VA_NARGS(__VA_ARGS__), __VA_ARGS__)
#define SET_FLAGS(arr, ...) (*(arr) = GET_FLAGS_IMPL(VA_NARGS(__VA_ARGS__), __VA_ARGS__))
#define INIT_FLAGS(arr, ...) (*(arr) = GET_FLAGS_IMPL(VA_NARGS(__VA_ARGS__), __VA_ARGS__))
#define SET_FLAGS(arr, ...) (*(arr) |= GET_FLAGS_IMPL(VA_NARGS(__VA_ARGS__), __VA_ARGS__))
#define UNSET_FLAGS(arr, ...) (*(arr) &= ~(GET_FLAGS_IMPL(VA_NARGS(__VA_ARGS__), __VA_ARGS__)))
+1 -1
View File
@@ -25,7 +25,7 @@ Actor::Actor() {
VecFx32_Copy(&this->mUnk_5C.mInitialPos, &this->mPos);
VecFx32_Copy(&this->mUnk_5C.mInitialPos, &this->mPrevPos);
this->mAngle = this->mUnk_5C.mInitialAngle;
SET_FLAGS(this->mFlags, ActorFlag_Alive, ActorFlag_Visible, ActorFlag_Active, ActorFlag_14);
INIT_FLAGS(this->mFlags, ActorFlag_Alive, ActorFlag_Visible, ActorFlag_Active, ActorFlag_14);
this->mUnk_44 = 0xFF;
this->mUnk_46 = 0;
this->func_ov000_0209862c(0);
+1 -1
View File
@@ -43,7 +43,7 @@ MapObject::MapObject() {
this->mUnk_18[i] = 0;
}
SET_FLAGS(this->mFlags, MapObjFlag_Alive, MapObjFlag_1, MapObjFlag_2);
INIT_FLAGS(this->mFlags, MapObjFlag_Alive, MapObjFlag_1, MapObjFlag_2);
}
MapObject::~MapObject() {}
+352 -17
View File
@@ -1,29 +1,364 @@
//! TODO: This file was generated automatically and might contain errors
#include "MapObject/MapObjectUnkSWHT.hpp"
#include "Actor/Actor.hpp"
#include "Actor/ActorManager.hpp"
#include "System/SysNew.hpp"
#include "Unknown/UnkStruct_027e09a8.hpp"
#include "Unknown/UnkStruct_027e09b8.hpp"
#include "Unknown/UnkStruct_027e0cec.hpp"
#include "Unknown/UnkStruct_ov000_020b5214.hpp"
extern const char data_ov031_02110ce0;
extern "C" void func_ov031_020e0f30(ActorRef);
DECL_PROFILE(MapObjectProfileUnkSWHT);
// awful sinit: should not have constructors
static MapObject_10 data_ov031_02117a9c = MapObject_10();
static MapObjectProfile_Derived2_20 data_ov031_021179e8 = MapObjectProfile_Derived2_20();
MapObject *MapObjectProfileUnkSWHT::Create() {
return new(HeapIndex_2) MapObjectUnkSWHT();
return new(HeapIndex_ITCM) MapObjectUnkSWHT();
}
// non-matching (regalloc)
MapObjectProfileUnkSWHT::MapObjectProfileUnkSWHT() :
MapObjectProfile(MapObjectId_SWHT) {}
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;
}
MapObjectUnkSWHT::MapObjectUnkSWHT() {}
MapObjectUnkSWHT::MapObjectUnkSWHT() :
mUnk_054(NULL),
mUnk_0B4(&this->mUnk_0D4, NULL),
mUnk_0F4(NULL),
mUnk_0F8(-0x1),
mUnk_0FC(0x0) {
this->mUnk_054.vfunc_08(G3d_GetModelPtr(GET_PROFILE(MapObjectProfileUnkSWHT)->mUnk_20.mUnk_50));
this->mUnk_0B4.mpModel = this->mUnk_054.mpModel;
void MapObjectUnkSWHT::func_ov031_02101be8(void) {}
void MapObjectUnkSWHT::func_ov031_02101ce8(void) {}
void MapObjectUnkSWHT::func_ov031_02101dd8(void) {}
void MapObjectUnkSWHT::func_ov031_02101e1c(void) {}
void MapObjectUnkSWHT::func_ov031_02101f88(void) {}
void MapObjectUnkSWHT::func_ov031_02101f94(void) {}
void MapObjectUnkSWHT::func_ov031_02101fb4(void) {}
void MapObjectUnkSWHT::func_ov031_021020ec(void) {}
void MapObjectUnkSWHT::func_ov031_021021c0(void) {}
void MapObjectUnkSWHT::func_ov031_021023b0(void) {}
unk32 param2 = data_ov031_021179e8.func_ov000_02058a24();
unk32 param1 = data_ov031_021179e8.func_ov000_02058a84(0x3, &data_ov031_02110ce0);
MapObjectUnkSWHT::~MapObjectUnkSWHT() {}
MapObjectProfileUnkSWHT::~MapObjectProfileUnkSWHT() {}
this->mUnk_0B4.func_ov000_020577a4(param1, param2, 0x1);
this->mUnk_054.func_ov000_02057c98(&this->mUnk_0B4);
this->mUnk_10 = &data_ov031_02117a9c;
SET_FLAG(this->mFlags, MapObjFlag_6);
}
MapObjectUnkSWHT::~MapObjectUnkSWHT() {
if (this->mState == MapObjUnkSWHTState_1) {
if (!(this->mUnk_040 != 0x2 && this->mUnk_040 != 0x3)) {
if (!this->func_ov000_0209d29c(0x1)) {
this->func_ov031_021021c0(MapObjUnkSWHTState_0, 0x1);
}
}
}
}
bool MapObjectUnkSWHT::vfunc_00() {
SET_FLAGS(this->mFlags, MapObjFlag_9, MapObjFlag_10);
this->mUnk_18[0] = 0x11;
this->mUnk_18[1] = 0x11;
bool var = false;
this->mUnk_044 = 0x0;
this->mUnk_04C = 0x0;
switch (this->mUnk_20.mParams[0]) {
case 0x4:
this->mUnk_040 = 0x2;
var = true;
break;
case 0x5:
this->mUnk_040 = 0x3;
var = true;
break;
case 0x6:
this->mUnk_040 = 0x0;
this->mUnk_044 = 0x1;
break;
case 0x7:
this->mUnk_040 = 0x1;
this->mUnk_044 = 0x1;
break;
default:
this->mUnk_040 = this->mUnk_20.mParams[0];
break;
}
if (var != 0) {
this->mUnk_048 = this->mUnk_20.mParams[1] * 0x1E;
} else {
this->mUnk_048 = this->mUnk_20.mParams[1];
}
if (this->func_ov000_0209d29c(0x0)) {
this->func_ov031_021021c0(MapObjUnkSWHTState_1, 0x1);
} else {
this->func_ov031_021021c0(MapObjUnkSWHTState_0, 0x1);
}
this->func_ov031_02101dd8();
return true;
}
void MapObjectUnkSWHT::func_ov031_02101dd8() {
switch (this->mState) {
case MapObjUnkSWHTState_0:
this->mUnk_0B4.func_ov000_020577f8(0x3000);
break;
case MapObjUnkSWHTState_1:
this->mUnk_0B4.func_ov000_020577f8(0x1000);
break;
default:
break;
}
this->mUnk_0B4.func_01ffc3b4();
}
void MapObjectUnkSWHT::vfunc_08() {
this->func_ov031_02101dd8();
++this->mUnk_04C;
switch (this->mState) {
case MapObjUnkSWHTState_0:
++this->mUnk_050;
if (this->mUnk_044 != 0x1) {
break;
}
if (!this->func_ov000_0209d29c(0x0)) {
break;
}
this->func_ov031_021021c0(MapObjUnkSWHTState_1, 0x0);
break;
case MapObjUnkSWHTState_1:
this->func_ov031_021023b0();
data_027e0cec->func_ov000_020a0140(&this->mUnk_0F4, &this->mPos);
switch (this->mUnk_040) {
case 0x2:
case 0x3:
if (this->mUnk_20.mParams[2] == 0x1) {
if (this->func_ov000_0209d29c(0x1)) {
break;
}
}
if (++this->mUnk_050 < this->mUnk_048) {
break;
}
this->func_ov031_021021c0(MapObjUnkSWHTState_0, 0x0);
break;
case 0x1:
++this->mUnk_050;
if (this->mUnk_044 != 0x1) {
break;
}
if (this->func_ov000_0209d29c(0x0)) {
break;
}
this->func_ov031_021021c0(MapObjUnkSWHTState_0, 0x0);
break;
default:
if (this->func_ov000_0209d29c(0x0)) {
break;
}
this->func_ov031_021021c0(MapObjUnkSWHTState_0, 0x0);
break;
}
break;
default:
break;
}
}
void MapObjectUnkSWHT::vfunc_0C() {
this->func_ov031_02101dd8();
}
void MapObjectUnkSWHT::vfunc_14() {
this->mUnk_054.vfunc_18(&this->mPos);
}
bool MapObjectUnkSWHT::vfunc_1C(ActorRef param1, unk32 param2, VecFx32 *param3) {
if (param1.type != 0x0) {
Actor *actor = gpActorManager->func_01fff3b4(param1);
if (actor != NULL) {
if (actor->GetActorId() == ActorId_SRST) {
return false;
}
}
}
switch (param2) {
case 0xE:
case 0x10:
case 0x11:
return true;
case 0xD:
if (this->func_ov031_021020ec()) {
func_ov031_020e0f30(param1);
}
return false;
case 0xC:
this->func_ov031_021020ec();
return false;
case 0xA:
if (param1.type != 0x0) {
Actor *actor = gpActorManager->func_01fff3b4(param1);
if (actor != NULL) {
if (actor->GetActorId() == ActorId_KEYB) {
return true;
}
}
}
this->func_ov031_021020ec();
break;
default:
this->func_ov031_021020ec();
break;
}
return false;
}
bool MapObjectUnkSWHT::func_ov031_021020ec() {
bool retValue = false;
if (this->mState != MapObjUnkSWHTState_0) {
if (this->mState == MapObjUnkSWHTState_1) {
switch (this->mUnk_040) {
case 0:
case 2:
case 3:
break;
case 1:
if (this->mUnk_04C > 0x1 && this->mUnk_050 >= 0x14) {
this->func_ov031_021021c0(MapObjUnkSWHTState_0, 0);
retValue = true;
}
break;
default:
break;
}
}
} else {
switch (this->mUnk_040) {
default:
break;
case 0:
if (this->mUnk_050 < 0x14) {
break;
}
this->func_ov031_021021c0(MapObjUnkSWHTState_1, 0);
retValue = true;
break;
case 2:
case 3:
this->func_ov031_021021c0(MapObjUnkSWHTState_1, 0);
retValue = true;
break;
case 1:
if (this->mUnk_04C > 1 && this->mUnk_050 >= 0x14) {
this->func_ov031_021021c0(MapObjUnkSWHTState_1, 0);
retValue = true;
}
break;
}
}
this->mUnk_04C = 0;
return retValue;
}
void MapObjectUnkSWHT::func_ov031_021021c0(unk16 state, unk32 param2) {
this->mState = state;
switch (this->mState) {
case MapObjUnkSWHTState_0:
SET_FLAGS(this->mFlags, MapObjFlag_7);
SET_FLAGS(this->mFlags, MapObjFlag_9, MapObjFlag_10);
this->func_ov000_0209d2c4(0x0, false);
if (this->mUnk_040 - 2 > 0x1 || this->mUnk_20.mParams[2] != 0x1) {
this->func_ov000_0209d2c4(0x1, true);
}
this->mUnk_050 = 0x0;
if (param2 == 0x0) {
data_027e09a8->func_ov000_02071b30(0x120, &this->mPos, 0x0);
}
data_027e0cec->func_ov000_020a0110(&this->mUnk_0F4);
break;
case MapObjUnkSWHTState_1:
if (param2 == 0x0 && this->mUnk_20.mParams[3] != 0x0) {
UnkStackStruct1 stack;
func_ov000_02072fd0(&stack);
stack.mUnk_08 = 0x3C;
stack.mUnk_00 = 0x6C;
stack.mUnk_3A = 0x3;
stack.mUnk_38 |= 0x80;
VecFx32_Copy(&this->mPos, &stack.mUnk_0C);
data_027e09b8->func_ov000_02073388(&stack, 0x0);
}
this->func_ov000_0209d2c4(0x0, true);
if (this->mUnk_040 - 2 > 0x1 || this->mUnk_20.mParams[2] != 0x1) {
this->func_ov000_0209d2c4(0x1, false);
}
if (this->mUnk_040 == 1) {
SET_FLAG(this->mFlags, MapObjFlag_7);
} else {
UNSET_FLAGS(this->mFlags, MapObjFlag_9, MapObjFlag_10);
UNSET_FLAG(this->mFlags, MapObjFlag_7);
}
this->mUnk_050 = 0x0;
if (param2 == 0x0) {
data_027e09a8->func_ov000_02071b30(0x11F, &this->mPos, 0x0);
}
this->mUnk_0F8 = 0x8E9;
this->mUnk_0FC = 0x4;
break;
default:
break;
}
}
void MapObjectUnkSWHT::func_ov031_021023b0() {
if (this->mUnk_040 != 0x3) {
return;
}
bool var = true;
if (this->mUnk_20.mParams[2] == 0x1) {
if (this->func_ov000_0209d29c(0x1)) {
var = false;
}
}
if (!var) {
return;
}
if (this->mUnk_048 - this->mUnk_050 < 0x3C) {
data_ov000_020b5214_eur.func_ov000_0206e7e8(0x92);
return;
}
data_ov000_020b5214_eur.func_ov000_0206e7e8(0x91);
}