diff --git a/include/Message/UnkStruct_027E0C68_UnkSubClass1.hpp b/include/Message/UnkStruct_027E0C68_UnkSubClass1.hpp index 61c057f0..c8ea6cc9 100644 --- a/include/Message/UnkStruct_027E0C68_UnkSubClass1.hpp +++ b/include/Message/UnkStruct_027E0C68_UnkSubClass1.hpp @@ -67,6 +67,8 @@ public: /* 0x84 */ unk32 unk_84; /* 0x88 */ + void func_02034a1c(unk32, unk32, struct UnkStruct_01ffbe34*); + void func_02034b0c(unk32 param_2, unk32 param_3, unk32 param_4, unk32 param_5, unk32 param_6); void func_020350ac(void); void func_020350b4(unk32 param_2, unk32 param_3, unk32 param_4, unk32 param_5, unk32 param_6); void func_0203516c(void); @@ -153,7 +155,10 @@ public: /* 0x00C */ unk32* unk_0C; /* 0x010 */ unk32* unk_10; /* 0x014 */ unk32 unk_14; - /* 0x018 */ unk32 unk_18; + /* 0x018 */ u8 unk_18; + /* 0x018 */ u8 unk_19; + /* 0x018 */ u8 unk_1A; + /* 0x018 */ u8 unk_1B; /* 0x01C */ unk32 unk_1C; /* 0x020 */ unk32 unk_20; /* 0x024 */ unk32* unk_24; @@ -226,7 +231,10 @@ public: /* 0x430 */ unk32 unk_430; /* 0x434 */ u8 unk_434[0xF4]; /* 0x528 */ s16* unk_528; - /* 0x52C */ u8 unk_52C[0x3C]; + /* 0x52C */ u8 unk_52C[0x30]; + /* 0x55C */ unk32 unk_55C; + /* 0x560 */ unk32 unk_560; + /* 0x564 */ unk32 unk_564; /* 0x568 */ unk32 unk_568; /* 0x56C */ unk16 unk_56C; /* 0x56E */ unk16 unk_56E; @@ -299,7 +307,7 @@ public: void func_0203bd8c(u16 param_2); void func_0203be08(void); void func_0203be64(void); - unk32 func_0203cb5c(unk8, unk32); + unk32 func_0203cb5c(unk8, s16); void func_0203dc10(u8 param_2); void func_0203dc10(u8 param_2, u8 param_3); void func_0203dcfc(unk32 param_2, unk32 param_3, unk32 param_4, unk32 param_5); @@ -307,6 +315,9 @@ public: void func_0203e090(void); void func_0203e0f8(void); + void func_0203a188(unk32, unk32); + void func_0203e1b0(unk32, unk32, unk32); + // not sure it belongs to this class: void func_02032fcc(unk32, unk32); void func_02033190(unk32 param_2, unk32 param_3, unk32 param_4, unk32 param_5); diff --git a/src/Main/Message/UnkStruct_027E0C68_UnkSubClass1.cpp b/src/Main/Message/UnkStruct_027E0C68_UnkSubClass1.cpp index 5827ae39..4603346d 100644 --- a/src/Main/Message/UnkStruct_027E0C68_UnkSubClass1.cpp +++ b/src/Main/Message/UnkStruct_027E0C68_UnkSubClass1.cpp @@ -21,17 +21,51 @@ struct UnkStruct2 { }; extern UnkStruct2 data_027e077c; extern u8 data_02056be4[]; -extern u8 data_027e0618[]; +extern unk32 data_027e0618[]; + +class UnkClass_027e0cbc { +public: + unk32 func_0203d7e0(unk32); +}; +extern UnkClass_027e0cbc data_027e0cbc; +extern unk16 data_02056a10[]; +extern unk16 data_02056a16[]; +extern unk32 data_02056a04[]; +extern unk32 data_027e0c38[]; +extern "C" void func_0203489c(unk32, unk16, unk32*, unk32*); +extern "C" void func_020347b0(unk32, unk16, unk32*, unk32*, unk32, unk32); +extern THUMB unk32 func_0202ab48(void); +extern "C" void func_02034984(unk32, unk32, unk32, unk32, unk32); +extern "C" void func_02034698(unk32, unk32, unk32*, unk32*); + +// see Actor.cpp +typedef struct UnkStruct_01ffbe34 { + /* 00 */ unk32 mUnk_00; + /* 04 */ unk32 mUnk_04; + /* 08 */ unk8 mUnk_08; + /* 09 */ unk8 mUnk_09; + /* 0a */ unk8 mUnk_0a; + /* 0b */ unk8 mUnk_0b; + /* 0c */ unk32 mUnk_0c; + /* 10 */ unk32 mUnk_10; + /* 14 */ unk8 mUnk_14; + /* 15 */ unk8 mUnk_15; + /* 16 */ unk16 mUnk_16; + /* 18 */ unk32 mUnk_18; + /* 1c */ unk32 mUnk_1c; + /* 20 */ +} UnkStruct_01ffbe34; +extern "C" void func_01ffbe34(UnkStruct_01ffbe34 *param1); ARM unk32 UnkStruct_027E0C68_UnkSubClass1::func_02038c34(unk32 param_2) { - unk32 iVar1; + s16 iVar1; unk32 iVar2; unk32 iVar3; unk32 uVar4; iVar2 = this->func_02038cf4(); iVar3 = this->func_02038d10(); - iVar1 = ((this->unk_15A - (this->unk_18 << 3) / 2) << 0x10) >> 0x10; + iVar1 = ((this->unk_15A - (this->unk_18 << 3) / 2)); if ((param_2 < iVar2 + iVar1) || (iVar2 + iVar3 + iVar1 <= param_2)) { return -1; @@ -193,8 +227,110 @@ ARM void UnkStruct_027E0C68_UnkSubClass1::func_02039ccc(unk32 param_2) { } +// non-matching ARM void UnkStruct_027E0C68_UnkSubClass1::func_02039d74(unk32 param_2, unk32 param_3) { - // TODO + UnkStruct_027E0C68_UnkSubClass1* bVar1; + s8 cVar2; + unk32 iVar4; + unk32 iVar6; + unk32 iVar7; + unk32 iVar8; + unk32 uVar9; + unk32 iStack_a8; + unk32 iStack_a4; + unk32 local_a0; + unk32 local_9c; + unk32 local_98; + unk32 local_94; + unk32 local_90; + unk32 local_8c; + unk32 iVar5; + UnkStruct_01ffbe34 aStack_88; + UnkStruct_01ffbe34 aStack_68; + UnkStruct_01ffbe34 aStack_48; + + local_8c = 0; + local_90 = 0; + bVar1 = data_027e0c68.unk_28[this->unk_50]; + + this->func_0203bdcc(&local_8c, &local_90); + this->func_0203a188(local_8c + param_2, local_90 + param_3); + this->func_0203e1b0(param_2 + local_8c + (this->unk_158 - (this->unk_14 << 3) / 2), param_3 + local_90 + (this->unk_15A - (this->unk_18 << 3) / 2), 0); + + if (this->unk_584 != 0) { + iVar5 = this->unk_18 << 3; + + if (this->unk_580 != 0) { + iVar5 = -0xC; + } else { + iVar5 = 0; + } + + this->unk_300.func_02034a1c(param_2 + local_8c + this->unk_55C + (this->unk_158 - (this->unk_14 << 3) / 2), + iVar5 + param_3 + local_90 + this->unk_560 + ((this->unk_15A - (iVar5 / 2))), 0); + } + + if (this->unk_585 != 0 && ((data_02056be4[data_027e077c.mUnk_0] & 1) == 0)) { + switch (data_027e0618[0]) { + case 2: + if (data_027e0cbc.func_0203d7e0(3) != 0) { + this->unk_388.func_02034b0c(0xBE, 0, 0, 0, 0); + } + break; + case 6: + if (data_027e0cbc.func_0203d7e0(0x58) != 0) { + this->unk_388.func_02034b0c(0x013B, 0, 0, 0, 0); + } + break; + } + } + + iVar5 = this->func_02032fa4(); + iVar8 = bVar1->unk_18; + uVar9 = data_02056a04[iVar8]; + func_0203489c(uVar9, data_02056a16[iVar8], &local_94, &local_98); + iVar6 = this->unk_158 - local_94; + iVar7 = this->unk_15A - local_98; + + if ((this->unk_15E != 7) && (this->func_0203a2c0() != 0)) { + func_01ffbe34(&aStack_48); + func_020347b0(uVar9, data_02056a10[iVar8], &local_9c, &local_a0, 4, 4); + local_9c += param_2 + local_8c + iVar6; + local_a0 += param_3 + local_90 + iVar7; + + if (data_027e0c38[5] == 1) { + iVar8 = func_0202ab48(); + + if (iVar8 == 0) { + iVar8 = 0; + } else { + iVar8 = -3; + } + + local_9c = (0x108 - local_9c) + iVar8; + } + + if ((this->unk_57F == 0) && (this->unk_56C <= 0)) { + func_01ffbe34(&aStack_68); + aStack_68.mUnk_0a = 1; + this->unk_1F0.func_02034a1c(local_9c, local_a0, &aStack_68); + } else { + func_02034984(iVar5 != 0 ? 0x11F : 0x18, 0, local_9c, local_a0 + 2, 0); + } + } + + if (this->unk_08 != 0) { + if ((this->unk_08->unk_1C == 1 || this->unk_08->unk_1C == 2) == 0) { + return; + } + + func_01ffbe34(&aStack_88); + aStack_88.mUnk_0a = 1; + func_02034698(iVar5 != 0 ? 0x11F : 0x18, 2, &iStack_a4, &iStack_a8); + iStack_a4 += param_2 + local_8c + iVar6; + iStack_a8 += param_3 + local_90 + iVar7; + this->unk_278.func_02034a1c(iStack_a4, iStack_a8, &aStack_88); + } } // non-matching (regalloc) @@ -296,7 +432,7 @@ ARM unk32 UnkStruct_027E0C68_UnkSubClass1::func_0203b310(unk8 param_2, UnkStruct return this->func_0203905c(param_2, param_3, param_4, param_5); case 1: iVar1 = this->func_0203a30c(); - return this->unk_164->func_0203cb5c(param_2, ((this->unk_428[this->unk_528[iVar1]] & ~0xFFFF)) >> 0x10); + return this->unk_164->func_0203cb5c(param_2, ((this->unk_428[this->unk_528[iVar1]] & ~0xFFFF))); default: break; }