diff --git a/config/eur/arm9/symbols.txt b/config/eur/arm9/symbols.txt index 8af38d21..b50959ae 100644 --- a/config/eur/arm9/symbols.txt +++ b/config/eur/arm9/symbols.txt @@ -1908,8 +1908,8 @@ func_0203951c kind:function(arm,size=0x40) addr:0x203951c func_0203955c kind:function(arm,size=0x14) addr:0x203955c func_02039570 kind:function(arm,size=0x8) addr:0x2039570 _ZN36UnkStruct_027E0C68_UnkSubClass1_Sub18vfunc_0CEhhhi kind:function(arm,size=0x3c) addr:0x2039578 -_ZN36UnkStruct_027E0C68_UnkSubClass1_Sub1C2Ev kind:function(thumb,size=0x244) addr:0x20395b4 -_ZN36UnkStruct_027E0C68_UnkSubClass1_Sub1C1Ev kind:function(thumb,size=0x244) addr:0x20397f8 +_ZN36UnkStruct_027E0C68_UnkSubClass1_Sub1C2Eisi kind:function(thumb,size=0x244) addr:0x20395b4 +_ZN36UnkStruct_027E0C68_UnkSubClass1_Sub1C1Eisi kind:function(thumb,size=0x244) addr:0x20397f8 _ZN36UnkStruct_027E0C68_UnkSubClass1_Sub113func_02039a3cEv kind:function(thumb,size=0x20) addr:0x2039a3c _ZN36UnkStruct_027E0C68_UnkSubClass1_Sub18vfunc_2CEv kind:function(arm,size=0x24c) addr:0x2039a5c _ZN36UnkStruct_027E0C68_UnkSubClass1_Sub113func_02039ca8Ev kind:function(arm,size=0x24) addr:0x2039ca8 @@ -1919,23 +1919,23 @@ _ZN36UnkStruct_027E0C68_UnkSubClass1_Sub113func_0203a188Eiii kind:function(arm,s _ZN36UnkStruct_027E0C68_UnkSubClass1_Sub113func_0203a2c0Ev kind:function(arm,size=0x4c) addr:0x203a2c0 _ZN36UnkStruct_027E0C68_UnkSubClass1_Sub113func_0203a30cEv kind:function(arm,size=0x1c) addr:0x203a30c _ZN36UnkStruct_027E0C68_UnkSubClass1_Sub18vfunc_48Ev kind:function(arm,size=0x34) addr:0x203a328 -func_0203a35c kind:function(arm,size=0x84) addr:0x203a35c +_ZN36UnkStruct_027E0C68_UnkSubClass1_Sub113func_0203a35cEv kind:function(arm,size=0x84) addr:0x203a35c _ZN36UnkStruct_027E0C68_UnkSubClass1_Sub113func_0203a3e0Ev kind:function(arm,size=0x1c) addr:0x203a3e0 _ZN36UnkStruct_027E0C68_UnkSubClass1_Sub18vfunc_44Eii kind:function(arm,size=0x2d4) addr:0x203a3fc -func_0203a6d0 kind:function(arm,size=0x120) addr:0x203a6d0 +_ZN36UnkStruct_027E0C68_UnkSubClass1_Sub113func_0203a6d0Eii kind:function(arm,size=0x120) addr:0x203a6d0 _ZN36UnkStruct_027E0C68_UnkSubClass1_Sub18vfunc_50EP9EntryINF1jPsi kind:function(arm,size=0x198) addr:0x203a7f0 _ZN36UnkStruct_027E0C68_UnkSubClass1_Sub18vfunc_54Ev kind:function(arm,size=0x520) addr:0x203a988 _ZN36UnkStruct_027E0C68_UnkSubClass1_Sub18vfunc_5CEv kind:function(arm,size=0x74) addr:0x203aea8 _ZN36UnkStruct_027E0C68_UnkSubClass1_Sub18vfunc_58Ev kind:function(arm,size=0x1a0) addr:0x203af1c -func_0203b0bc kind:function(arm,size=0x30) addr:0x203b0bc -func_0203b0ec kind:function(arm,size=0x178) addr:0x203b0ec +_ZN36UnkStruct_027E0C68_UnkSubClass1_Sub113func_0203b0bcEv kind:function(arm,size=0x30) addr:0x203b0bc +_ZN36UnkStruct_027E0C68_UnkSubClass1_Sub113func_0203b0ecEi kind:function(arm,size=0x178) addr:0x203b0ec _ZN36UnkStruct_027E0C68_UnkSubClass1_Sub18vfunc_18EP18UnkStruct_0203b264ii kind:function(arm,size=0xac) addr:0x203b264 _ZN36UnkStruct_027E0C68_UnkSubClass1_Sub18vfunc_1CEcP18UnkStruct_0203b264ci kind:function(arm,size=0x100) addr:0x203b310 _ZN36UnkStruct_027E0C68_UnkSubClass1_Sub18vfunc_60EP21func_0203b410_param_2ii kind:function(arm,size=0x1c0) addr:0x203b410 _ZN36UnkStruct_027E0C68_UnkSubClass1_Sub18vfunc_64Ei kind:function(arm,size=0x194) addr:0x203b5d0 -func_0203b764 kind:function(arm,size=0xb0) addr:0x203b764 +_ZN36UnkStruct_027E0C68_UnkSubClass1_Sub113func_0203b764Ev kind:function(arm,size=0xb0) addr:0x203b764 _ZN36UnkStruct_027E0C68_UnkSubClass1_Sub18vfunc_20Ev kind:function(arm,size=0x578) addr:0x203b814 -func_0203bd8c kind:function(arm,size=0x40) addr:0x203bd8c +_ZN36UnkStruct_027E0C68_UnkSubClass1_Sub113func_0203bd8cEt kind:function(arm,size=0x40) addr:0x203bd8c _ZN36UnkStruct_027E0C68_UnkSubClass1_Sub18vfunc_6CEPiS0_ kind:function(arm,size=0x3c) addr:0x203bdcc func_0203be08 kind:function(arm,size=0x5c) addr:0x203be08 func_0203be64 kind:function(arm,size=0x220) addr:0x203be64 diff --git a/include/DTCM/UnkStruct_027e103c.hpp b/include/DTCM/UnkStruct_027e103c.hpp index f4a51c4a..7d3aee56 100644 --- a/include/DTCM/UnkStruct_027e103c.hpp +++ b/include/DTCM/UnkStruct_027e103c.hpp @@ -21,6 +21,8 @@ struct UnkStruct_027e103c { void func_ov000_020cf284(unk32, unk32); + void func_ov000_020cf224(unk32); + void func_ov000_020cf2a0(unk32); unk32 func_ov000_020cf4bc(void); unk8* func_ov000_020cef9c(void); void func_ov000_020cfb38(void); diff --git a/include/Message/MessageManager.hpp b/include/Message/MessageManager.hpp index 988ec1cd..16120003 100644 --- a/include/Message/MessageManager.hpp +++ b/include/Message/MessageManager.hpp @@ -81,8 +81,7 @@ public: class UnkStruct_027E0C68 : public SysObject { public: - /* 0x00 */ unk16 unk_00; - /* 0x02 */ u8 unk_02; + /* 0x00 */ u8 unk_00[2]; /* 0x03 */ u8 unk_03; /* 0x04 */ u8 unk_04; /* 0x05 */ u8 unk_05; diff --git a/include/Message/UnkStruct_027E0C68_UnkSubClass1.hpp b/include/Message/UnkStruct_027E0C68_UnkSubClass1.hpp index ffe5f92e..a8ac1b28 100644 --- a/include/Message/UnkStruct_027E0C68_UnkSubClass1.hpp +++ b/include/Message/UnkStruct_027E0C68_UnkSubClass1.hpp @@ -3,6 +3,7 @@ #include "System/SysNew.hpp" #include "Message/BMG.hpp" #include "Unknown/func_ov000_020d0644.hpp" +#include "lib/math.h" // temp #define UNK_TYPE void @@ -140,6 +141,7 @@ public: void func_0203ec34(void); void func_0203ebe0(void); void func_0203ebf8(void); + void func_0203ec4c(UnkStruct_0203b264* param_2, unk32 param_3, s32 param_4, s32 param_5); }; // same as UnkSubClass1_unk_410? @@ -152,6 +154,7 @@ public: void func_0203ef78(unk16, u16, unk8); void func_0203ef78(unk16); // overload? void func_0203ee48(void); + UnkStruct_0203b264* func_0203eeb0(unk32 param_2, unk32 param_3); }; class UnkSubClass1_unk_124 { @@ -213,7 +216,7 @@ public: /* 0x008 */ UnkSubClass1_02256FF8* unk_08; /* 0x00C */ unk32* unk_0C; /* 0x010 */ unk32 unk_10; - /* 0x014 */ unk32 unk_14; + /* 0x014 */ s32 unk_14; /* 0x018 */ s32 unk_18; /* 0x01C */ unk32 unk_1C; /* 0x020 */ unk32 unk_20; @@ -287,7 +290,8 @@ public: class UnkStruct_027E0C68_UnkSubClass1_Base_0 : public UnkStruct_027E0C68_UnkSubClass1_Base_1 { public: /* 0x052 */ unk16 unk_52; - /* 0x054 */ unk32 unk_54; + /* 0x054 */ unk16 unk_54; + /* 0x054 */ unk16 unk_56; /* 0x058 */ unk32 unk_58; /* 0x05C */ s16 unk_5C; /* 0x05E */ s16 unk_5E; @@ -333,7 +337,10 @@ public: /* 0x0FC */ unk32 unk_FC; /* 0x100 */ unk32 unk_100; /* 0x104 */ unk32 unk_104; - /* 0x108 */ unk32 unk_108; + /* 0x108 */ unk8 unk_108; + /* 0x108 */ unk8 unk_109; + /* 0x108 */ unk8 unk_10A; + /* 0x108 */ unk8 unk_10B; /* 0x10C */ unk32 unk_10C; /* 0x110 */ unk32 unk_110; /* 0x118 */ UnkStruct_027E0C68_UnkSubClass1_Base_0_unk_114* unk_114; @@ -387,8 +394,7 @@ public: /* 0x128 */ UnkSubClass1_UnkownClass2 unk_128; /* 0x150 */ u8 unk_150[4]; /* 0x154 */ UnkSubClass1_unk_154* unk_154; - /* 0x158 */ unk16 unk_158; - /* 0x15A */ unk16 unk_15A; + /* 0x158 */ Vec2s unk_158; // textbox position? /* 0x15C */ s16 unk_15C; /* 0x15E */ s8 unk_15E; /* 0x15F */ s8 unk_15F; @@ -447,11 +453,6 @@ public: void func_020393a8(unk32 param_2); void func_0203a188(unk32, unk32); unk32 func_0203a3e0(void); - unk32 func_0203a6d0(unk32, unk32); - unk32 func_0203b0bc(void); - void func_0203b0ec(unk32 param_2); - void func_0203b764(void); - void func_0203bd8c(u16 param_2); void func_0203be08(void); void func_0203be64(void); unk32 func_0203cb5c(unk8, s16); @@ -462,6 +463,7 @@ public: void func_0203e090(void); void func_0203e0f8(void); void func_0203e1b0(unk32, unk32, unk32); + void func_02039440(unk32, unk32); // not sure it belongs to this class: void func_02032fcc(unk32, unk32); @@ -590,6 +592,13 @@ public: unk32 func_0203a30c(void); void func_0203a35c(void); bool func_0203a3e0(void); + bool func_0203a6d0(unk32 param_2, unk32 param_3); + bool func_0203b0bc(void); + unk32 func_0203b0ec(unk32 param_2); + void func_0203b764(void); + void func_0203bd8c(u16 param_2); + + unk32 func_02038cb8(unk32 param_2); }; class UnkStruct_027E0C68_UnkSubClass1_Sub2 : public UnkStruct_027E0C68_UnkSubClass1_Base { @@ -776,3 +785,15 @@ public: void func_ov003_020f4874(void); }; extern UnkClass_027e1054 data_027e1054; + +class UnkClass_ov000_020eec9c { +public: + void func_ov000_020d77e4(unk32); +}; +extern UnkClass_ov000_020eec9c data_ov000_020eec9c; + +class UnkClass_ov000_027e0d04 { +public: + void func_0203fe60(unk32); +}; +extern UnkClass_ov000_027e0d04 data_027e0d04; diff --git a/src/Main/Message/UnkStruct_027E0C68_UnkSubClass1.cpp b/src/Main/Message/UnkStruct_027E0C68_UnkSubClass1.cpp index cd4c14de..8aed417b 100644 --- a/src/Main/Message/UnkStruct_027E0C68_UnkSubClass1.cpp +++ b/src/Main/Message/UnkStruct_027E0C68_UnkSubClass1.cpp @@ -14,7 +14,7 @@ ARM unk32 UnkStruct_027E0C68_UnkSubClass1_Sub1::vfunc_34(unk32 param_2) { iVar2 = this->func_02038cf4(); iVar3 = this->func_02038d10(); - iVar1 = ((this->unk_15A - (this->unk_18 << 3) / 2)); + iVar1 = ((this->unk_158.y - (this->unk_18 << 3) / 2)); if ((param_2 < iVar2 + iVar1) || (iVar2 + iVar3 + iVar1 <= param_2)) { return -1; @@ -67,8 +67,8 @@ ARM unk32 UnkStruct_027E0C68_UnkSubClass1_Sub1::vfunc_68(unk32 param_2) { ARM void UnkStruct_027E0C68_UnkSubClass1_Sub1::vfunc_70(unk32* param_2, unk32* param_3) { this->vfunc_6C(param_2, param_3); - *param_2 += this->unk_158; - *param_3 += this->unk_15A; + *param_2 += this->unk_158.x; + *param_3 += this->unk_158.y; } ARM void UnkStruct_027E0C68_UnkSubClass1_Sub1::vfunc_0C(u8 param_2, u8 param_3, u8 param_4, unk32 param_5) { diff --git a/src/Main/Message/func_0203744c.cpp b/src/Main/Message/func_0203744c.cpp index 067e0ae4..2bac7b25 100644 --- a/src/Main/Message/func_0203744c.cpp +++ b/src/Main/Message/func_0203744c.cpp @@ -49,7 +49,7 @@ THUMB UnkStruct_027E0C68_UnkSubClass1_Base::UnkStruct_027E0C68_UnkSubClass1_Base { this->func_020387e0(this->unk_150); this->unk_154 = 0; - this->unk_15A = 0; + this->unk_158.y = 0; this->unk_15C = 0; this->unk_15E = 0xFF; this->unk_15F = 0xFF; diff --git a/src/Main/Message/func_020397f8.cpp b/src/Main/Message/func_020397f8.cpp index 250b1df2..313ae6ab 100644 --- a/src/Main/Message/func_020397f8.cpp +++ b/src/Main/Message/func_020397f8.cpp @@ -233,7 +233,7 @@ ARM void UnkStruct_027E0C68_UnkSubClass1_Sub1::vfunc_40(unk32 param_2, unk32 par this->vfunc_6C(&local_8c, &local_90); this->func_0203a188(local_8c + param_2, local_90 + param_3, 0); - 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); + this->func_0203e1b0(param_2 + local_8c + (this->unk_158.x - (this->unk_14 << 3) / 2), param_3 + local_90 + (this->unk_158.y - (this->unk_18 << 3) / 2), 0); if (this->unk_584 != 0) { iVar5 = this->unk_18 << 3; @@ -244,8 +244,8 @@ ARM void UnkStruct_027E0C68_UnkSubClass1_Sub1::vfunc_40(unk32 param_2, unk32 par 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); + this->unk_300.func_02034a1c(param_2 + local_8c + this->unk_55C + (this->unk_158.x - (this->unk_14 << 3) / 2), + iVar5 + param_3 + local_90 + this->unk_560 + ((this->unk_158.y - (iVar5 / 2))), 0); } if (this->unk_585 != 0 && ((data_02056be4[data_027e077c.mUnk_0] & 1) == 0)) { @@ -267,8 +267,8 @@ ARM void UnkStruct_027E0C68_UnkSubClass1_Sub1::vfunc_40(unk32 param_2, unk32 par 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; + iVar6 = this->unk_158.x - local_94; + iVar7 = this->unk_158.y - local_98; if ((this->unk_15E != 7) && (this->func_0203a2c0() != 0)) { func_01ffbe34(&aStack_48); @@ -338,10 +338,10 @@ ARM void UnkStruct_027E0C68_UnkSubClass1_Sub1::func_0203a188(unk32 param_2, unk3 uVar5 = data_02056a04[iVar6]; func_0203489c(uVar5, data_02056a16[iVar6], &iStack_48, &iStack_4c); - iVar3 = iStack_50 + (this->unk_158 - iStack_48); + iVar3 = iStack_50 + (this->unk_158.x - iStack_48); func_02034698(uVar5, data_02056a0e[iVar6], &iStack_50, &iStack_54); - iVar4 = iStack_54 + (this->unk_15A - iStack_4c); + iVar4 = iStack_54 + (this->unk_158.y - iStack_4c); func_01ffbe34(&aStack_44); aStack_44.mUnk_0a = 1; @@ -477,6 +477,36 @@ ARM void UnkStruct_027E0C68_UnkSubClass1_Sub1::vfunc_44(s32 touchLastX, s32 touc } } +ARM bool UnkStruct_027E0C68_UnkSubClass1_Sub1::func_0203a6d0(unk32 param_2, unk32 param_3) { + unk32 iVar1; + unk32 uVar2; + UnkStruct_0203b264* piVar3; + + if (this->unk_164->unk_168.unk_06 > 0 && this->unk_164->unk_15C <= 0) { + return false; + } + + iVar1 = this->vfunc_34(param_3); + piVar3 = NULL; + + if (!(iVar1 < 0) && iVar1 < 4) { + piVar3 = this->unk_424.func_0203eeb0(iVar1, param_2); + } + + if (piVar3 != NULL && ((piVar3->mUnk_0[3] << 0x10) | ((u16*)piVar3->mUnk_0)[2]) == 0x00FF0002) { + uVar2 = this->func_02038cb8(iVar1); + this->unk_410.func_0203ec4c(piVar3, uVar2, + (s16)(this->unk_158.x - ((this->unk_14 << 3) / 2)) + iVar1 + this->unk_56E, + (s16)(this->unk_158.y - ((this->unk_18 << 3) / 2)) + iVar1 + this->unk_570 + ); + + this->unk_57F = 0; + return true; + } + + return false; +} + // non-matching ARM void UnkStruct_027E0C68_UnkSubClass1_Sub1::vfunc_50(EntryINF1* param_2, u32 param_3, s16* param_4, unk32 param_5) { bool bVar5; @@ -779,6 +809,109 @@ ARM void UnkStruct_027E0C68_UnkSubClass1_Sub1::vfunc_58(void) { this->func_02039398(); } +ARM bool UnkStruct_027E0C68_UnkSubClass1_Sub1::func_0203b0bc(void) { + return this->unk_57F != 0 && data_027e077c.mUnk_0 == data_027e077c.mUnk_4; +} + +// non-matching +ARM unk32 UnkStruct_027E0C68_UnkSubClass1_Sub1::func_0203b0ec(unk32 param_2) { + s32 iVar4; + u16 *puVar2; + u32 uVar3; + s32 unaff_r6; + bool bVar1; + + iVar4 = 0; + bVar1 = false; + + uVar3 = param_2; + + if (((data_02056be4[data_027e077c.mUnk_0] & 1) == 0)) { + uVar3 = 0; + } else { + uVar3 = 1; + } + + unaff_r6 = this->unk_50 == uVar3; + + this->unk_410.func_0203ec34(); + this->unk_585 = 0; + this->unk_584 = 0; + + if (this->unk_150[3] != 0) { + iVar4 = 1; + this->unk_56C = this->unk_578; + bVar1 = true; + this->unk_15C = 0x78; + } else { + if ((this->unk_128.unk_00 == NULL || this->unk_128.unk_00[0] == 0) != 0) { + this->func_02038b40(); + + if (data_027e0d38 != 0) { + data_027e103c->func_ov000_020cf224(1); + data_027e103c->func_ov000_020cf2a0(1); + } + + if (this->unk_08 == NULL) { + this->vfunc_58(); + } + + iVar4 = 1; + } + } + + if (iVar4 != 0) { + if (bVar1) { + this->vfunc_54(); + } + + if (unaff_r6 != 0) { + data_027e0d04.func_0203fe60(0); + } + } + + if (((param_2 != 0 && iVar4 != 0) && unaff_r6 != 0) && this->unk_15E != 7) { + data_ov000_020eec9c.func_ov000_020d77e4(0x19); + } + + return iVar4; +} + +// non-matching +ARM void UnkStruct_027E0C68_UnkSubClass1_Sub1::func_0203b764(void) { + s32 i = data_027e0c68.unk_00[this->unk_50]; + + this->func_02039440(data_02056a04[i * 0x18], data_02056a16[i]); + + switch (this->unk_57B) { + case 1: + this->unk_158.y -= 38; + break; + case 2: + switch (this->unk_154->unk_06) { + case 2: + this->unk_158.y -= 111; + break; + case 3: + this->unk_158.y -= 98; + break; + default: + break; + } + break; + default: + break; + } +} + +ARM void UnkStruct_027E0C68_UnkSubClass1_Sub1::func_0203bd8c(u16 param_2) { + this->unk_576 = param_2; + + if (this->func_0203b0ec(0) != 0) { + data_ov000_020eec9c.func_ov000_020d77e4(this->unk_564[param_2]); + } +} + // non-matching (regalloc) ARM unk32 UnkStruct_027E0C68_UnkSubClass1_Sub1::vfunc_18(UnkStruct_0203b264* param_2, unk32 param_3, unk32 param_4) { u16 sVar1; @@ -926,8 +1059,8 @@ ARM void UnkStruct_027E0C68_UnkSubClass1_Sub1::vfunc_60(func_0203b410_param_2* p if (param_2->unk_10 <= 0 && iVar3 > 0) { uVar2 = param_2->unk_12; - this->unk_158 = param_2->unk_10; - this->unk_15A = uVar2; + this->unk_158.x = param_2->unk_10; + this->unk_158.y = uVar2; } else { this->func_0203b764(); }