From a65697ce56639332b8e8e078277d9d34bbc79bb3 Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Thu, 30 Jan 2025 14:28:49 +0100 Subject: [PATCH] more progress --- config/eur/arm9/symbols.txt | 10 +- include/DTCM/UnkStruct_027e103c.hpp | 20 +-- include/Message/MessageManager.hpp | 1 + .../UnkStruct_027E0C68_UnkSubClass1.hpp | 47 +++++-- src/Main/Message/func_020397f8.cpp | 116 +++++++++++++++++- 5 files changed, 166 insertions(+), 28 deletions(-) diff --git a/config/eur/arm9/symbols.txt b/config/eur/arm9/symbols.txt index b50959ae..17e3f6c4 100644 --- a/config/eur/arm9/symbols.txt +++ b/config/eur/arm9/symbols.txt @@ -1937,12 +1937,12 @@ _ZN36UnkStruct_027E0C68_UnkSubClass1_Sub113func_0203b764Ev kind:function(arm,siz _ZN36UnkStruct_027E0C68_UnkSubClass1_Sub18vfunc_20Ev kind:function(arm,size=0x578) addr:0x203b814 _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 +_ZN36UnkStruct_027E0C68_UnkSubClass1_Sub113func_0203be08Ev kind:function(arm,size=0x5c) addr:0x203be08 func_0203be64 kind:function(arm,size=0x220) addr:0x203be64 -func_0203c084 kind:function(arm,size=0xb8) addr:0x203c084 -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 +_ZN36UnkStruct_027E0C68_UnkSubClass1_Sub113func_0203c084Ev kind:function(arm,size=0xb8) addr:0x203c084 +_ZN36UnkStruct_027E0C68_UnkSubClass1_Sub113func_0203c13cEv kind:function(arm,size=0x64) addr:0x203c13c +_ZN36UnkStruct_027E0C68_UnkSubClass1_Sub113func_0203c1a0Ev kind:function(arm,size=0xbc) addr:0x203c1a0 +_ZN36UnkStruct_027E0C68_UnkSubClass1_Sub113func_0203c25cEPS_ kind:function(arm,size=0x6c) addr:0x203c25c _ZN36UnkStruct_027E0C68_UnkSubClass1_Sub1D0Ev kind:function(arm,size=0x48) addr:0x203c2c8 _ZN36UnkStruct_027E0C68_UnkSubClass1_Sub1D2Ev kind:function(arm,size=0x40) addr:0x203c310 _ZN36UnkStruct_027E0C68_UnkSubClass1_Sub18vfunc_38Ev kind:function(arm,size=0x8) addr:0x203c350 diff --git a/include/DTCM/UnkStruct_027e103c.hpp b/include/DTCM/UnkStruct_027e103c.hpp index 7d3aee56..6da1a887 100644 --- a/include/DTCM/UnkStruct_027e103c.hpp +++ b/include/DTCM/UnkStruct_027e103c.hpp @@ -23,15 +23,21 @@ struct UnkStruct_027e103c { 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); - unk32 func_ov000_020cf488(void); - void func_ov000_020cfa24(void); - void func_ov000_020cfe40(unk32, unk32); - void func_ov005_02104028(unk32); + s8* func_ov000_020cef9c(void); unk32 func_ov000_020cf0bc(void); + bool func_ov000_020cf42c(void); + unk32 func_ov000_020cf488(void); + unk32 func_ov000_020cf4bc(void); + void func_ov000_020cfa24(void); + void func_ov000_020cfb38(void); + void func_ov000_020cfe40(unk32, unk32); void func_ov005_02103f8c(unk32*); + void func_ov005_02104028(unk32); + void func_ov000_020cfb58(u8*); + unk32 func_ov000_020cf8fc(unk32); + + //! TODO: find out if the type is always `UnkStruct_027E0C68_UnkSubClass1_Sub1*` + void func_ov000_020cfb20(void*); }; extern UnkStruct_027e103c *data_027e103c; diff --git a/include/Message/MessageManager.hpp b/include/Message/MessageManager.hpp index 16120003..0ef665b9 100644 --- a/include/Message/MessageManager.hpp +++ b/include/Message/MessageManager.hpp @@ -82,6 +82,7 @@ public: class UnkStruct_027E0C68 : public SysObject { public: /* 0x00 */ u8 unk_00[2]; + /* 0x02 */ u8 unk_02; /* 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 5b21590b..d7b47039 100644 --- a/include/Message/UnkStruct_027E0C68_UnkSubClass1.hpp +++ b/include/Message/UnkStruct_027E0C68_UnkSubClass1.hpp @@ -119,12 +119,14 @@ public: /* 0x08 */ }; +typedef bool (*UnknownCallback)(class UnkStruct_027E0C68_UnkSubClass1_Sub1*); + class UnkSubClass1_UnkownClass2 : public UnkSubClass1_UnkownClass2_Base1 { public: /* 0x14 */ unk32 unk_14; /* 0x18 */ unk32 unk_18; - /* 0x1C */ unk32 unk_1C; - /* 0x20 */ unk32 unk_20; + /* 0x1C */ UnknownCallback unk_1C; + /* 0x20 */ class UnkStruct_027E0C68_UnkSubClass1_Sub1* unk_20; /* 0x24 */ unk32 unk_24; /* 0x2C */ @@ -271,6 +273,8 @@ public: /* 0x6C */ virtual void vfunc_6C(unk32* param_2, unk32* param_3); /* 0x70 */ virtual void vfunc_70(unk32* param_2, unk32* param_3); /* 0x74 */ + + unk32 func_02032fa4(void); }; class UnkStruct_027E0C68_UnkSubClass1_Base_0_unk_114 : public SysObject { @@ -437,7 +441,6 @@ public: static void func_020387e0(u8* param_2); - unk32 func_02032fa4(void); unk32 func_02032fb4(void); unk32 func_020337d8(unk32 param_2); u16* func_02037604(u16**); @@ -453,8 +456,6 @@ public: void func_020393a8(unk32 param_2); void func_0203a188(unk32, unk32); unk32 func_0203a3e0(void); - void func_0203be08(void); - void func_0203be64(void); unk32 func_0203cb5c(unk8, s16); void func_0203dc10(u8 param_2); void func_0203dc10(u8 param_2, u8 param_3); @@ -505,16 +506,20 @@ public: /* 0x428 */ UnknownMsgChoiceStruct unk_428[0x20]; /* 0x528 */ unk16 unk_528[4]; // number of choices? /* 0x55C */ unk32 unk_530; - /* 0x55C */ unk32 unk_534; - /* 0x55C */ unk32 unk_538; + /* 0x55C */ unk16 unk_534; + /* 0x55C */ unk16 unk_536; + /* 0x55C */ unk16 unk_538; + /* 0x55C */ unk16 unk_53A; /* 0x55C */ unk32 unk_53C; /* 0x55C */ unk32 unk_540; /* 0x55C */ unk8 unk_544; /* 0x55C */ unk8 unk_545; /* 0x55C */ unk8 unk_546; /* 0x55C */ unk8 unk_547; - /* 0x55C */ unk32 unk_548; - /* 0x55C */ unk32 unk_54C; + /* 0x55C */ unk16 unk_548; + /* 0x55C */ unk16 unk_54A; + /* 0x55C */ unk16 unk_54C; + /* 0x55C */ unk16 unk_54E; /* 0x55C */ unk32 unk_550; /* 0x55C */ unk32 unk_554; /* 0x55C */ unk8 unk_558; @@ -581,6 +586,8 @@ public: /* 0x70 */ virtual void vfunc_70(unk32* param_2, unk32* param_3) override; /* 0x74 */ + static bool func_0203c25c(class UnkStruct_027E0C68_UnkSubClass1_Sub1* param_1); + void func_0203e060(u8 param_2, u8 param_3); void func_02039a3c(void); @@ -597,6 +604,11 @@ public: unk32 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_0203c084(void); + bool func_0203c13c(void); + unk32 func_0203c1a0(void); unk32 func_02038cb8(unk32 param_2); }; @@ -777,12 +789,21 @@ typedef struct UnkStruct_01ffbe34 { } UnkStruct_01ffbe34; extern "C" void func_01ffbe34(UnkStruct_01ffbe34 *param1); +struct UnkClass_027e1054_unk_00_unk00 { + /* 0x00 */ u8 unk_00[0x95]; + /* 0x95 */ u8 unk_95; +}; +struct UnkClass_027e1054_unk_00 { + /* 0x00 */ unk32 unk_04; + /* 0x00 */ UnkClass_027e1054_unk_00_unk00* unk_00; +}; class UnkClass_027e1054 { public: - unk32 unk_00; + UnkClass_027e1054_unk_00* unk_00; unk32 unk_04; void func_ov003_020f4874(void); + void func_ov003_020f4760(u8, unk32); }; extern UnkClass_027e1054 data_027e1054; @@ -800,3 +821,9 @@ public: void func_0203fe60(unk32); }; extern UnkClass_ov000_027e0d04 data_027e0d04; + +class UnkClass_data_027e0f7c { +public: + u8* func_ov000_0209d90c(s8, s8); +}; +extern UnkClass_data_027e0f7c data_027e0f7c; diff --git a/src/Main/Message/func_020397f8.cpp b/src/Main/Message/func_020397f8.cpp index 313ae6ab..a4e5d909 100644 --- a/src/Main/Message/func_020397f8.cpp +++ b/src/Main/Message/func_020397f8.cpp @@ -765,7 +765,7 @@ ARM void UnkStruct_027E0C68_UnkSubClass1_Sub1::vfunc_5C(void) { // non-matching ARM void UnkStruct_027E0C68_UnkSubClass1_Sub1::vfunc_58(void) { bool bVar1; - unk8* puVar2; + s8* puVar2; int iVar3; char *pcVar4; @@ -799,11 +799,11 @@ ARM void UnkStruct_027E0C68_UnkSubClass1_Sub1::vfunc_58(void) { } } - if (data_027e0618[0] == 2 && func_ov000_02079e04() && (data_027e1054.unk_04 + 0x99) != 0 && - (data_027e077c.mUnk_0 != 0x39 || data_027e103c->func_ov000_020cf0bc())) { - data_027e1054.func_ov003_020f4874(); - data_027e103c->func_ov005_02103f8c(data_02057ed4); - } + // if (data_027e0618[0] == 2 && func_ov000_02079e04() && (data_027e1054.unk_04 + 0x99) != 0 && + // (data_027e077c.mUnk_0 != 0x39 || data_027e103c->func_ov000_020cf0bc())) { + // data_027e1054.func_ov003_020f4874(); + // data_027e103c->func_ov005_02103f8c(data_02057ed4); + // } } this->func_02039398(); @@ -1106,6 +1106,110 @@ ARM void UnkStruct_027E0C68_UnkSubClass1_Sub1::vfunc_6C(unk32* param_2, unk32* p *param_3 += this->unk_570; } +ARM void UnkStruct_027E0C68_UnkSubClass1_Sub1::func_0203be08(void) { + if (data_027e0d38 != 0) { + if (data_027e103c->func_ov000_020cf42c() != 0) { + this->unk_534 = this->unk_538; + } else { + this->unk_534 = this->unk_536; + } + + if (this->func_0203c084() != 0) { + this->unk_548 = this->unk_54C; + } + } +} + +// non-matching +ARM unk32 UnkStruct_027E0C68_UnkSubClass1_Sub1::func_0203c084(void) { + unk32 uVar4; + bool bVar2; + bool bVar1; + bool bVar3; + + uVar4 = 0; + + if (this->unk_50 == 0) { + bVar2 = true; + bVar1 = true; + + if ((data_02056be4[data_027e077c.mUnk_0] & 1) == 0 && data_027e103c->func_ov000_020cf8fc(0x8F) == 0) { + bVar1 = false; + } + + if (!bVar1 && data_027e0618[0x101] == 0) { + if ((data_027e0d38 != NULL && data_027e0d38->mUnk_14 == 1) == 0) { + bVar2 = false; + } + } + + if (bVar2) { + uVar4 = 1; + } + } + + return uVar4; +} + +ARM bool UnkStruct_027E0C68_UnkSubClass1_Sub1::func_0203c13c(void) { + if (this->func_02032fa4() == 0) { + data_ov000_020eec9c.func_ov000_020d77e4(6); + data_027e103c->func_ov000_020cfb20(this); + this->unk_585 = 1; + this->unk_584 = 1; + this->unk_128.unk_18 = 0x00016000; + this->unk_128.unk_1C = NULL; + this->unk_128.unk_20 = 0; + this->unk_128.unk_24 = 0; + + return true; + } + + return false; +} + +// non-matching +ARM unk32 UnkStruct_027E0C68_UnkSubClass1_Sub1::func_0203c1a0(void) { + s8* pVar1; + u8* iVar3; + + if ((data_02056be4[data_027e077c.mUnk_0] & 1) == 0) { + this->unk_584 = 1; + + pVar1 = data_027e103c->func_ov000_020cef9c(); + iVar3 = data_027e0f7c.func_ov000_0209d90c(pVar1[0x24F], 0); + data_027e1054.func_ov003_020f4760(iVar3[1], 0); + data_ov000_020eec9c.func_ov000_020d77e4(6); + data_027e103c->func_ov000_020cfb58(iVar3); + + this->unk_128.unk_18 = 0x0000A000; + this->unk_128.unk_1C = this->func_0203c25c; + this->unk_128.unk_20 = this; + this->unk_128.unk_24 = 0; + + return 0; + } + + return 0; +} + +ARM bool UnkStruct_027E0C68_UnkSubClass1_Sub1::func_0203c25c(UnkStruct_027E0C68_UnkSubClass1_Sub1* param_1) { + if (data_027e1054.unk_00->unk_00->unk_95 != 0) { + return false; + } + + if ((data_02056be4[data_027e077c.mUnk_0] & 1) == 0) { + param_1->unk_585 = 1; + param_1->unk_128.unk_18 = 0x00016000; + param_1->unk_128.unk_1C = NULL; + param_1->unk_128.unk_20 = 0; + param_1->unk_128.unk_24 = 0; + return true; + } + + return false; +} + ARM UnkStruct_027E0C68_UnkSubClass1_Sub1::~UnkStruct_027E0C68_UnkSubClass1_Sub1() { }