diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 6226a817..6eae43ad 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -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 diff --git a/config/eur/arm9/overlays/ov031/delinks.txt b/config/eur/arm9/overlays/ov031/delinks.txt index 2cdf19ba..0da36922 100644 --- a/config/eur/arm9/overlays/ov031/delinks.txt +++ b/config/eur/arm9/overlays/ov031/delinks.txt @@ -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: diff --git a/config/eur/arm9/overlays/ov031/relocs.txt b/config/eur/arm9/overlays/ov031/relocs.txt index a88d02ac..2667646e 100644 --- a/config/eur/arm9/overlays/ov031/relocs.txt +++ b/config/eur/arm9/overlays/ov031/relocs.txt @@ -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) diff --git a/config/eur/arm9/overlays/ov031/symbols.txt b/config/eur/arm9/overlays/ov031/symbols.txt index 71616682..9ae085eb 100644 --- a/config/eur/arm9/overlays/ov031/symbols.txt +++ b/config/eur/arm9/overlays/ov031/symbols.txt @@ -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 diff --git a/config/jp/arm9/overlays/ov000/symbols.txt b/config/jp/arm9/overlays/ov000/symbols.txt index c4ccea91..ee7dba84 100644 --- a/config/jp/arm9/overlays/ov000/symbols.txt +++ b/config/jp/arm9/overlays/ov000/symbols.txt @@ -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 diff --git a/config/jp/arm9/overlays/ov031/symbols.txt b/config/jp/arm9/overlays/ov031/symbols.txt index 012e6fe2..f39be6bd 100644 --- a/config/jp/arm9/overlays/ov031/symbols.txt +++ b/config/jp/arm9/overlays/ov031/symbols.txt @@ -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 diff --git a/include/MapObject/MapObject.hpp b/include/MapObject/MapObject.hpp index ab5b584f..08748db3 100644 --- a/include/MapObject/MapObject.hpp +++ b/include/MapObject/MapObject.hpp @@ -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 diff --git a/include/MapObject/MapObjectUnkSWHT.hpp b/include/MapObject/MapObjectUnkSWHT.hpp index e1bdf455..0dd3bdde 100644 --- a/include/MapObject/MapObjectUnkSWHT.hpp +++ b/include/MapObject/MapObjectUnkSWHT.hpp @@ -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(); diff --git a/include/Unknown/UnkStruct_027e0cec.hpp b/include/Unknown/UnkStruct_027e0cec.hpp index d63d0f51..fa134bae 100644 --- a/include/Unknown/UnkStruct_027e0cec.hpp +++ b/include/Unknown/UnkStruct_027e0cec.hpp @@ -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); diff --git a/include/flags.h b/include/flags.h index 1ecf2676..bfd76ec9 100644 --- a/include/flags.h +++ b/include/flags.h @@ -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__))) diff --git a/src/000_Second/Actor/Actor.cpp b/src/000_Second/Actor/Actor.cpp index fedd0d84..05ff98ae 100644 --- a/src/000_Second/Actor/Actor.cpp +++ b/src/000_Second/Actor/Actor.cpp @@ -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); diff --git a/src/000_Second/MapObject/MapObject.cpp b/src/000_Second/MapObject/MapObject.cpp index 10686c9d..494e8fd9 100644 --- a/src/000_Second/MapObject/MapObject.cpp +++ b/src/000_Second/MapObject/MapObject.cpp @@ -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() {} diff --git a/src/031_Land/MapObject/MapObjectUnkSWHT.cpp b/src/031_Land/MapObject/MapObjectUnkSWHT.cpp index d670fe23..0a76d1a8 100644 --- a/src/031_Land/MapObject/MapObjectUnkSWHT.cpp +++ b/src/031_Land/MapObject/MapObjectUnkSWHT.cpp @@ -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); +}