From acc3200e655c6f4cf40e1911ccf18249b78900b5 Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Sat, 25 Jan 2025 21:25:14 +0100 Subject: [PATCH] more vfuncs progress --- config/eur/arm9/symbols.txt | 2 +- config/usa/arm9/symbols.txt | 2 +- .../UnkStruct_027E0C68_UnkSubClass1.hpp | 177 +++++++++++++++--- .../UnkStruct_027E0C68_UnkSubClass1.cpp | 175 ++++++++++++++--- 4 files changed, 305 insertions(+), 51 deletions(-) diff --git a/config/eur/arm9/symbols.txt b/config/eur/arm9/symbols.txt index 59d1fb09..2fdf257f 100644 --- a/config/eur/arm9/symbols.txt +++ b/config/eur/arm9/symbols.txt @@ -1944,7 +1944,7 @@ func_0203c13c kind:function(arm,size=0x64) addr:0x203c13c func_0203c1a0 kind:function(arm,size=0xbc) addr:0x203c1a0 func_0203c25c kind:function(arm,size=0x6c) addr:0x203c25c _ZN31UnkStruct_027E0C68_UnkSubClass1D0Ev kind:function(arm,size=0x48) addr:0x203c2c8 -func_0203c310 kind:function(arm,size=0x40) addr:0x203c310 +_ZN31UnkStruct_027E0C68_UnkSubClass1D1Ev kind:function(arm,size=0x40) addr:0x203c310 func_0203c350 kind:function(arm,size=0x8) addr:0x203c350 func_0203c358 kind:function(thumb,size=0x44) addr:0x203c358 func_0203c39c kind:function(thumb,size=0x78) addr:0x203c39c diff --git a/config/usa/arm9/symbols.txt b/config/usa/arm9/symbols.txt index 00f08fd2..4413339c 100644 --- a/config/usa/arm9/symbols.txt +++ b/config/usa/arm9/symbols.txt @@ -1944,7 +1944,7 @@ func_0203c13c kind:function(arm,size=0x64) addr:0x203c0f8 func_0203c1a0 kind:function(arm,size=0xbc) addr:0x203c15c func_0203c25c kind:function(arm,size=0x6c) addr:0x203c218 _ZN31UnkStruct_027E0C68_UnkSubClass1D0Ev kind:function(arm,size=0x48) addr:0x203c284 -func_0203c310 kind:function(arm,size=0x40) addr:0x203c2cc +_ZN31UnkStruct_027E0C68_UnkSubClass1D1Ev kind:function(arm,size=0x40) addr:0x203c2cc func_0203c350 kind:function(arm,size=0x8) addr:0x203c30c func_0203c358 kind:function(thumb,size=0x44) addr:0x203c314 func_0203c39c kind:function(thumb,size=0x78) addr:0x203c358 diff --git a/include/Message/UnkStruct_027E0C68_UnkSubClass1.hpp b/include/Message/UnkStruct_027E0C68_UnkSubClass1.hpp index 534b725f..33c8c7ef 100644 --- a/include/Message/UnkStruct_027E0C68_UnkSubClass1.hpp +++ b/include/Message/UnkStruct_027E0C68_UnkSubClass1.hpp @@ -6,6 +6,65 @@ // temp #define UNK_TYPE void +typedef struct UnkStruct_0203b264 { + /* 0 */ u8 mUnk_0[0x4]; + /* 4 */ u16 *mUnk_4; + /* 8 */ +} UnkStruct_0203b264; + +typedef struct UnkSubClass1_unk_154 { + u8 unk_00; + u8 unk_01; + u8 unk_02; + u8 unk_03; + u8 unk_04; + u8 unk_05; + u8 unk_06; +} UnkSubClass1_unk_154; + +typedef u32 (*UnkCallback1)(void); + +typedef struct UnkStruct1 { + /* 0x00 */ UnkCallback1 unk_00; + /* 0x04 */ UnkCallback1 unk_04; +} UnkStruct1; // size = 0x8 + +class UnkSubClass1_unk_168 { +public: + /* 0x00 */ UnkStruct1* unk_00; + /* 0x04 */ + + void func_020350b4(unk32 param_2, unk32 param_3, unk32 param_4, unk32 param_5, unk32 param_6); + void func_020351b8(unk32 param_2, unk32 param_3, unk32 param_4, unk32 param_5); + void func_020352d8(void); + void func_020350ac(void); +}; + +class UnkSubClass1_unk_410 { +public: + /* 0x00 */ unk32 unk_00; + /* 0x04 */ + + void func_0203ec34(void); +}; + +class UnkSubClass1_unk_424 { +public: + /* 0x00 */ unk32 unk_00; + /* 0x04 */ + + void func_0203ee80(unk32); + void func_0203ef78(unk16, u16, unk8); +}; + +class UnkSubClass1_unk_124 { +public: + /* 0x00 */ unk32 unk_00; + /* 0x04 */ + + void func_0203f020(unk32, unk32); +}; + class UnkStruct_027E0C68_UnkSubClass1 : public SysObject { public: /* 0x000 (vtable) */ @@ -31,55 +90,112 @@ public: /* 0x04A */ unk16 unk_4A; /* 0x04C */ unk32 unk_4C; /* 0x050 */ u8 unk_50; - /* 0x050 */ unk8 unk_51; - /* 0x050 */ unk16 unk_52; + /* 0x051 */ unk8 unk_51; + /* 0x052 */ unk16 unk_52; /* 0x054 */ unk32 unk_54; /* 0x058 */ unk32 unk_58; /* 0x05C */ s16 unk_5C; /* 0x05E */ s16 unk_5E; /* 0x060 */ unk32 unk_60[0x2E]; /* 0x118 */ s32 unk_118; - /* 0x11C */ unk32 unk_11C[0xD]; + /* 0x11C */ unk8 unk_11C; + /* 0x11D */ unk8 unk_11D; + /* 0x11E */ u8 unk_11E; + /* 0x11F */ unk8 unk_11F; + /* 0x120 */ u8 unk_120; + /* 0x120 */ u8 unk_121; + /* 0x122 */ u8 unk_122; + /* 0x122 */ u8 unk_123; + /* 0x124 */ UnkSubClass1_unk_124* unk_124; + /* 0x128 */ unk32 unk_128; + /* 0x12C */ unk32 unk_12C; + /* 0x130 */ unk16 unk_130; + /* 0x132 */ unk16 unk_132; + /* 0x134 */ unk32 unk_134; + /* 0x138 */ unk32 unk_138; + /* 0x13C */ unk32 unk_13C; + /* 0x140 */ unk32 unk_140; + /* 0x144 */ unk32 unk_144; + /* 0x148 */ unk32 unk_148; + /* 0x14C */ unk32 unk_14C; /* 0x150 */ unk8 unk_150; /* 0x151 */ unk8 unk_151; /* 0x152 */ unk8 unk_152; /* 0x153 */ unk8 unk_153; - /* 0x154 */ unk32 unk_154; + /* 0x154 */ UnkSubClass1_unk_154* unk_154; /* 0x158 */ unk16 unk_158; /* 0x15A */ unk16 unk_15A; /* 0x15C */ s16 unk_15C; - /* 0x15C */ s16 unk_15E; + /* 0x15E */ s8 unk_15E; + /* 0x15F */ s8 unk_15F; /* 0x160 */ unk32 unk_160; /* 0x164 */ UnkStruct_027E0C68_UnkSubClass1* unk_164; - /* 0x168 */ u32 unk_168; - /* 0x16C */ u8 unk_16C[0x84]; - /* 0x1F0 */ u32 unk_1F0; + /* 0x168 */ UnkSubClass1_unk_168 unk_168; + /* 0x16C */ u32* unk_16C; + /* 0x16C */ u32* unk_170; + /* 0x16C */ u8 unk_174[0x58]; + /* 0x1CC */ u32 unk_1CC; + /* 0x1D0 */ unk32 unk_1D0; + /* 0x1D4 */ unk32 unk_1D4; + /* 0x1D8 */ unk32 unk_1D8; + /* 0x1DC */ u32* unk_1DC; + /* 0x1E0 */ u32* unk_1E0; + /* 0x1E4 */ u32 unk_1E4; + /* 0x1E8 */ unk32 unk_1E8; + /* 0x1EC */ unk32 unk_1EC; + /* 0x1F0 */ UnkSubClass1_unk_168 unk_1F0; /* 0x1F4 */ u8 unk_1F4[0x84]; - /* 0x278 */ u32 unk_278; + /* 0x278 */ UnkSubClass1_unk_168 unk_278; /* 0x27C */ u8 unk_27C[0x84]; - /* 0x300 */ u32 unk_300; + /* 0x300 */ UnkSubClass1_unk_168 unk_300; /* 0x304 */ u8 unk_304[0x84]; - /* 0x388 */ u32 unk_388; + /* 0x388 */ UnkSubClass1_unk_168 unk_388; /* 0x38C */ u8 unk_38C[0x84]; - /* 0x410 */ u32 unk_410; + /* 0x410 */ UnkSubClass1_unk_410 unk_410; /* 0x414 */ unk32 unk_414; /* 0x418 */ UnkStruct_027E0C68_UnkSubClass1* unk_418; + /* 0x41C */ unk32 unk_41C; + /* 0x420 */ unk32 unk_420; + /* 0x424 */ UnkSubClass1_unk_424 unk_424; + /* 0x428 */ u16* unk_428; + /* 0x42C */ unk32 unk_42C; + /* 0x430 */ unk32 unk_430; + /* 0x434 */ u8 unk_434[0xF4]; + /* 0x528 */ s16* unk_528; + /* 0x52C */ u8 unk_52C[0x3C]; + /* 0x568 */ unk32 unk_568; + /* 0x56C */ unk16 unk_56C; + /* 0x56E */ unk16 unk_56E; + /* 0x570 */ unk16 unk_570; + /* 0x572 */ unk16 unk_572; + /* 0x574 */ s16 unk_574; + /* 0x576 */ u8 unk_576; + /* 0x577 */ u8 unk_577; + /* 0x578 */ u8 unk_578; + /* 0x579 */ u8 unk_579; + /* 0x57A */ u8 unk_57A; + /* 0x57B */ u8 unk_57B; + /* 0x57C */ u8 unk_57C; + /* 0x57D */ u8 unk_57D; + /* 0x57E */ u8 unk_57E; + /* 0x57F */ u8 unk_57F; + /* 0x580 */ u8 unk_580; UnkStruct_027E0C68_UnkSubClass1(); /* 0x00 */ virtual ~UnkStruct_027E0C68_UnkSubClass1() override; /* 0x08 */ virtual UNK_TYPE vfunc_08(void) override; // func_0203c2c8 (dtor?) /* 0x0C */ virtual void func_02039228(unk32* param_2, unk32* param_3) override; - /* 0x10 */ virtual void func_02039578(unk8 param_2, unk8 param_3, unk8 param_4, unk32 param_5) override; - /* 0x14 */ virtual UNK_TYPE func_0203e060(void) override; - /* 0x18 */ virtual UNK_TYPE func_0203dcb4(void) override; - /* 0x1C */ virtual UNK_TYPE func_0203b264(void) override; - /* 0x20 */ virtual UNK_TYPE func_0203b310(void) override; + /* 0x10 */ virtual void func_02039578(u8 param_2, u8 param_3, u8 param_4, unk32 param_5) override; + /* 0x14 */ virtual void func_0203e060(u8 param_2, u8 param_3) override; + /* 0x18 */ virtual bool func_0203dcb4(unk32 param_2, unk32 param_3) override; + /* 0x1C */ virtual unk32 func_0203b264(UnkStruct_0203b264* param_2, unk32 param_3, unk32 param_4) override; + /* 0x20 */ virtual unk32 func_0203b310(unk8 param_2, UnkStruct_0203b264* param_3, unk8 param_4, unk32 param_5) override; /* 0x24 */ virtual UNK_TYPE func_0203b814(void) override; - /* 0x28 */ virtual void func_0203e0c8(void) override; + /* 0x28 */ virtual bool func_0203e0c8(void) override; /* 0x2C */ virtual void func_02039a5c(void) override; /* 0x30 */ virtual void func_02038ed0(void) override; /* 0x34 */ virtual UNK_TYPE func_02038c34(void) override; - /* 0x38 */ virtual UNK_TYPE func_0203c350(void) override; + /* 0x38 */ virtual bool func_0203c350(void) override; /* 0x3C */ virtual void func_02039ccc(unk32 param_2) override; /* 0x40 */ virtual UNK_TYPE func_02039d74(void) override; /* 0x44 */ virtual void func_0203a3fc(s32 touchLastX, s32 touchLastY) override; @@ -88,9 +204,9 @@ public: /* 0x50 */ virtual void func_0203a7f0(EntryINF1* param_2, int param_3, u8* param_4) override; /* 0x54 */ virtual UNK_TYPE func_0203a988(void) override; /* 0x58 */ virtual void func_0203af1c(void) override; - /* 0x5C */ virtual UNK_TYPE func_0203aea8(void) override; + /* 0x5C */ virtual void func_0203aea8(void) override; /* 0x60 */ virtual UNK_TYPE func_0203b410(void) override; - /* 0x64 */ virtual UNK_TYPE func_0203b5d0(void) override; + /* 0x64 */ virtual void func_0203b5d0(unk32 param_2) override; /* 0x68 */ virtual unk32 func_020393d0(unk32 param_2) override; /* 0x6C */ virtual void func_0203bdcc(unk32* param_2, unk32* param_3) override; /* 0x70 */ virtual void func_020394d8(unk32* param_2, unk32* param_3) override; @@ -99,14 +215,29 @@ public: unk32 func_020337d8(unk32 param_2); void func_02038b28(void); void func_0203e090(void); - void func_0203dc10(unk32 param_2, unk32 param_3, unk32 param_4); void func_0203dcfc(unk32 param_2, unk32 param_3, unk32 param_4, unk32 param_5); + unk32 func_0203a30c(void); + unk32 func_0203905c(unk8 param_2, UnkStruct_0203b264* param_3, unk8 param_4, unk32 param_5); + unk32 func_0203cb5c(unk8, unk32); + void func_020393a8(unk32 param_2); + void func_0203be08(void); + unk32 func_02032fa4(void); + void func_0203e0f8(void); + + void func_0203dc10(u8 param_2, u8 param_3); + void func_0203dc10(u8 param_2); // not sure it belongs to this class: void func_0203e2ac(unk32* param_2, unk32* param_3); void func_02033190(unk32 param_2, unk32 param_3, unk32 param_4, unk32 param_5); void func_02038b40(void); - void func_0203ec34(u32*); void func_020350ac(u32*); void func_02038b1c(void); + unk32 func_0203951c(void); + unk32 func_0203e284(UnkStruct_0203b264*, unk32, unk32); + void func_0203f020(UnkSubClass1_unk_124*, unk32, unk32); + void func_0203947c(void); + void func_0203fc78(unk32*, unk32*); + void func_02032fcc(unk32, unk32); + void func_020331c4(unk32, unk32); }; diff --git a/src/Main/Message/UnkStruct_027E0C68_UnkSubClass1.cpp b/src/Main/Message/UnkStruct_027E0C68_UnkSubClass1.cpp index c5227eef..98bf35e2 100644 --- a/src/Main/Message/UnkStruct_027E0C68_UnkSubClass1.cpp +++ b/src/Main/Message/UnkStruct_027E0C68_UnkSubClass1.cpp @@ -1,4 +1,9 @@ #include "Message/UnkStruct_027E0C68_UnkSubClass1.hpp" +#include "Message/MessageManager.hpp" +#include "Save/AdventureFlags.hpp" + +extern unk32 func_0203c084(void); +extern s32 data_027e0db0; ARM UNK_TYPE UnkStruct_027E0C68_UnkSubClass1::func_02038c34(UNK_TYPE) { // TODO @@ -19,7 +24,7 @@ ARM void UnkStruct_027E0C68_UnkSubClass1::func_02039228(unk32* param_2, unk32* p // temp = param_3[2]; this->unk_152 = 1; // param_3[0] = param_3[2]; - func_0203e2ac(param_2, param_3); + this->func_0203e2ac(param_2, param_3); } ARM unk32 UnkStruct_027E0C68_UnkSubClass1::func_020393d0(unk32 param_2) { @@ -51,8 +56,8 @@ ARM void UnkStruct_027E0C68_UnkSubClass1::func_020394d8(unk32* param_2, unk32* p *param_3 += this->unk_15A; } -ARM void UnkStruct_027E0C68_UnkSubClass1::func_02039578(unk8 param_2, unk8 param_3, unk8 param_4, unk32 param_5) { - this->func_0203dc10(1, param_3, param_4); +ARM void UnkStruct_027E0C68_UnkSubClass1::func_02039578(u8 param_2, u8 param_3, u8 param_4, unk32 param_5) { + this->func_0203dc10(1, param_3); this->func_02033190(param_2, param_3, param_4, param_5); } @@ -79,7 +84,7 @@ ARM void UnkStruct_027E0C68_UnkSubClass1::func_0203a328(UNK_TYPE) { this->func_02038b40(); } - this->func_0203ec34(&this->unk_410); + this->unk_410.func_0203ec34(); } ARM void UnkStruct_027E0C68_UnkSubClass1::func_0203a3fc(s32 touchLastX, s32 touchLastY) { @@ -94,28 +99,123 @@ ARM UNK_TYPE UnkStruct_027E0C68_UnkSubClass1::func_0203a988(UNK_TYPE) { // TODO } -ARM UNK_TYPE UnkStruct_027E0C68_UnkSubClass1::func_0203aea8(UNK_TYPE) { - // TODO +ARM void UnkStruct_027E0C68_UnkSubClass1::func_0203aea8(void) { + if (this->unk_15F == 0 || this->unk_154->unk_06 <= 2) { + this->unk_1CC = this->unk_1E4; + this->unk_168.func_020352d8(); + } else { + this->unk_1CC = 0; + this->unk_168.func_020352d8(); + this->unk_168.func_020351b8(1, 0, 0, 0); + } } ARM void UnkStruct_027E0C68_UnkSubClass1::func_0203af1c(void) { // TODO } -ARM UNK_TYPE UnkStruct_027E0C68_UnkSubClass1::func_0203b264(UNK_TYPE) { - // TODO +// non-matching (regalloc) +ARM unk32 UnkStruct_027E0C68_UnkSubClass1::func_0203b264(UnkStruct_0203b264* param_2, unk32 param_3, unk32 param_4) { + u16 sVar1; + u32 uVar4; + s32 unaff_r4; + bool bVar5; + + if (this->func_0203951c() == 0) { + return 1; + } + + if (this->unk_580 != 0) { + unaff_r4 = -0xC; + } else { + unaff_r4 = 0; + } + + sVar1 = param_2->mUnk_4[0]; + + if (sVar1 != 0x1A || sVar1 == 0x1A) { + bVar5 = true; + + if (sVar1 == 0x1A) { + uVar4 = (param_2->mUnk_0[3] << 0x10) | ((u16*)param_2->mUnk_0)[2]; + + if (((uVar4 == 0x0001000A || uVar4 == 0x00020000) || uVar4 == 0x00FF0000)) { + bVar5 = false; + } + } + + if (bVar5) { + this->unk_424.func_0203ee80(this->unk_130); + } + } + + return this->func_0203e284(param_2, param_3, param_4 + unaff_r4); } -ARM UNK_TYPE UnkStruct_027E0C68_UnkSubClass1::func_0203b310(UNK_TYPE) { - // TODO +// non-matching +ARM unk32 UnkStruct_027E0C68_UnkSubClass1::func_0203b310(unk8 param_2, UnkStruct_0203b264* param_3, unk8 param_4, unk32 param_5) { + int iVar1; + u16* psVar3; + + psVar3 = param_3->mUnk_4; + + if (psVar3[0] == 10) { + this->unk_424.func_0203ef78(this->unk_130, psVar3[0], param_4); + this->unk_574++; + + if (this->func_0203a30c() == 0) { + this->unk_153 = 1; + } + } + + if (this->unk_15E == 6) { + return 1; + } + + switch (this->unk_57A) { + case 0: + 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); + default: + break; + } + + return 0; } ARM UNK_TYPE UnkStruct_027E0C68_UnkSubClass1::func_0203b410(UNK_TYPE) { // TODO } -ARM UNK_TYPE UnkStruct_027E0C68_UnkSubClass1::func_0203b5d0(UNK_TYPE) { - // TODO +// non-matching +ARM void UnkStruct_027E0C68_UnkSubClass1::func_0203b5d0(unk32 param_2) { + unk32 uVar2; + + if ((this->unk_50 == 0 && data_027e0db0 <= 0 && func_0203c084() != 0) || (gAdventureFlags->Exists() && gAdventureFlags->func_ov00_02097738())) { + uVar2 = 0x16; + } else { + uVar2 = 0; + } + + this->func_0203f020(this->unk_124, param_2, uVar2); + this->func_0203be08(); + + if (this->func_02032fa4()) { + this->unk_168.func_020350b4(0x39, 0, 2, 0, 0); + this->unk_1F0.func_020350b4(0x33, 0, 2, 0, 0); + this->unk_278.func_020350b4(0x33, 1, 2, 0, 0); + } else { + this->unk_168.func_020350b4(0x34, 0, 2, 0, 0); + this->unk_1F0.func_020350b4(0x32, 0, 2, 0, 0); + this->unk_278.func_020350b4(0x32, 1, 2, 0, 0); + } + + this->unk_168.func_020351b8(1, 0, 0, 0); + this->unk_1F0.func_020351b8(0, 0, 0, 0); + this->unk_278.func_020351b8(0, 0, 0, 0); + this->func_020393a8(param_2); } ARM UNK_TYPE UnkStruct_027E0C68_UnkSubClass1::func_0203b814(UNK_TYPE) { @@ -123,30 +223,53 @@ ARM UNK_TYPE UnkStruct_027E0C68_UnkSubClass1::func_0203b814(UNK_TYPE) { } ARM void UnkStruct_027E0C68_UnkSubClass1::func_0203bdcc(unk32* param_2, unk32* param_3) { - // TODO + this->func_0203947c(); + *param_2 += this->unk_56E; + *param_3 += this->unk_570; } ARM UnkStruct_027E0C68_UnkSubClass1::~UnkStruct_027E0C68_UnkSubClass1() { - this->func_020350ac(&this->unk_388); - this->func_020350ac(&this->unk_300); - this->func_020350ac(&this->unk_278); - this->func_020350ac(&this->unk_1F0); - this->func_020350ac(&this->unk_168); + this->unk_388.func_020350ac(); + this->unk_300.func_020350ac(); + this->unk_278.func_020350ac(); + this->unk_1F0.func_020350ac(); + this->unk_168.func_020350ac(); this->func_02038b1c(); } -ARM UNK_TYPE UnkStruct_027E0C68_UnkSubClass1::func_0203c350(UNK_TYPE) { - // TODO +ARM bool UnkStruct_027E0C68_UnkSubClass1::func_0203c350(void) { + return true; } -ARM UNK_TYPE UnkStruct_027E0C68_UnkSubClass1::func_0203dcb4(UNK_TYPE) { - // TODO +// non-matching +ARM bool UnkStruct_027E0C68_UnkSubClass1::func_0203dcb4(unk32 param_2, unk32 param_3) { + unk32 uVar1; + unk32 local_c; + unk32 local_10; + + local_c = param_2; + local_10 = param_3; + + this->func_02032fa4(); + this->func_0203fc78(&local_c, &local_10); + this->func_02032fcc(local_c, local_10); + this->unk_10 = 0; + return true; } -ARM UNK_TYPE UnkStruct_027E0C68_UnkSubClass1::func_0203e060(UNK_TYPE) { - // TODO +ARM void UnkStruct_027E0C68_UnkSubClass1::func_0203e060(u8 param_2, u8 param_3) { + this->func_0203dc10(1, param_3); + this->unk_11E = param_2; + this->unk_118 = -1; + this->func_020331c4(param_2, -1); } -ARM void UnkStruct_027E0C68_UnkSubClass1::func_0203e0c8(UNK_TYPE) { - // TODO +ARM bool UnkStruct_027E0C68_UnkSubClass1::func_0203e0c8(void) { + if (this->unk_122 != 0) { + this->func_0203e0f8(); + this->func_0203dc10(0); + return true; + } + + return false; }