From cf97807bbc2941a50267b1de59b88ae971009488 Mon Sep 17 00:00:00 2001 From: Yanis002 <35189056+Yanis002@users.noreply.github.com> Date: Thu, 23 Jan 2025 21:54:51 +0100 Subject: [PATCH] progress and add more funcs --- config/eur/arm9/delinks.txt | 2 +- config/eur/arm9/symbols.txt | 8 +-- config/usa/arm9/symbols.txt | 8 +-- include/Message/BMG.hpp | 89 -------------------------- include/Message/MessageManager.hpp | 74 ++++++++++++++++++++++ src/Main/Message/MessageManager.cpp | 96 ++++++++++++++++++++++++++--- 6 files changed, 171 insertions(+), 106 deletions(-) diff --git a/config/eur/arm9/delinks.txt b/config/eur/arm9/delinks.txt index e4fb5113..d30e76c9 100644 --- a/config/eur/arm9/delinks.txt +++ b/config/eur/arm9/delinks.txt @@ -19,7 +19,7 @@ src/Main/Message/BmgRelatedFunctions.cpp: .text start:0x0202d3bc end:0x0202d56c src/Main/Message/MessageManager.cpp: - .text start:0x02036c50 end:0x020371b0 + .text start:0x0203643c end:0x020371b0 src/Main/Message/BMG.cpp: .text start:0x020371b0 end:0x0203744c diff --git a/config/eur/arm9/symbols.txt b/config/eur/arm9/symbols.txt index 74290a74..f8b618ac 100644 --- a/config/eur/arm9/symbols.txt +++ b/config/eur/arm9/symbols.txt @@ -1807,13 +1807,13 @@ func_02036888 kind:function(arm,size=0x6c) addr:0x2036888 func_020368f4 kind:function(arm,size=0x18) addr:0x20368f4 func_0203690c kind:function(arm,size=0x2b0) addr:0x203690c func_02036bbc kind:function(arm,size=0x94) addr:0x2036bbc -func_02036c50 kind:function(arm,size=0x54) addr:0x2036c50 -func_02036ca4 kind:function(arm,size=0x40) addr:0x2036ca4 +_ZN18UnkStruct_027E0C6813func_02036c50Ei kind:function(arm,size=0x54) addr:0x2036c50 +_ZN18UnkStruct_027E0C6813func_02036ca4Ei kind:function(arm,size=0x40) addr:0x2036ca4 _ZN18UnkStruct_027E0C6813func_02036ce4EP22Struct_027E0C68_unk_18i kind:function(arm,size=0x4c) addr:0x2036ce4 _ZN18UnkStruct_027E0C6813func_02036d30Ei kind:function(arm,size=0x1c) addr:0x2036d30 _ZN18UnkStruct_027E0C6813func_02036d4cEi kind:function(arm,size=0x20) addr:0x2036d4c _ZN18UnkStruct_027E0C6813func_02036d6cEv kind:function(arm,size=0x3c) addr:0x2036d6c -func_02036da8 kind:function(arm,size=0x134) addr:0x2036da8 +_ZN18UnkStruct_027E0C6813func_02036da8EjPi kind:function(arm,size=0x134) addr:0x2036da8 _ZN18UnkStruct_027E0C6813func_02036edcEjh kind:function(arm,size=0x8c) addr:0x2036edc _ZN18UnkStruct_027E0C6813func_02036f68EjPh kind:function(arm,size=0x168) addr:0x2036f68 _ZN18UnkStruct_027E0C6813func_020370d0Eii kind:function(arm,size=0x18) addr:0x20370d0 @@ -2034,7 +2034,7 @@ func_0203dcb4 kind:function(arm,size=0x48) addr:0x203dcb4 func_0203dcfc kind:function(arm,size=0xf0) addr:0x203dcfc func_0203ddec kind:function(arm,size=0x10) addr:0x203ddec func_0203ddfc kind:function(arm,size=0x18) addr:0x203ddfc -func_0203de14 kind:function(arm,size=0x10) addr:0x203de14 +_Z13func_0203de14P22Struct_027E0C68_unk_28i kind:function(arm,size=0x10) addr:0x203de14 func_0203de24 kind:function(arm,size=0x34) addr:0x203de24 func_0203de58 kind:function(arm,size=0x208) addr:0x203de58 func_0203e060 kind:function(arm,size=0x30) addr:0x203e060 diff --git a/config/usa/arm9/symbols.txt b/config/usa/arm9/symbols.txt index 4535de5e..62bd2852 100644 --- a/config/usa/arm9/symbols.txt +++ b/config/usa/arm9/symbols.txt @@ -1807,13 +1807,13 @@ func_02036888 kind:function(arm,size=0x6c) addr:0x2036844 func_020368f4 kind:function(arm,size=0x18) addr:0x20368b0 func_0203690c kind:function(arm,size=0x2b0) addr:0x20368c8 func_02036bbc kind:function(arm,size=0x94) addr:0x2036b78 -func_02036c50 kind:function(arm,size=0x54) addr:0x2036c0c -func_02036ca4 kind:function(arm,size=0x40) addr:0x2036c60 +_ZN18UnkStruct_027E0C6813func_02036c50Ei kind:function(arm,size=0x54) addr:0x2036c0c +_ZN18UnkStruct_027E0C6813func_02036ca4Ei kind:function(arm,size=0x40) addr:0x2036c60 _ZN18UnkStruct_027E0C6813func_02036ce4EP22Struct_027E0C68_unk_18i kind:function(arm,size=0x4c) addr:0x2036ca0 _ZN18UnkStruct_027E0C6813func_02036d30Ei kind:function(arm,size=0x1c) addr:0x2036cec _ZN18UnkStruct_027E0C6813func_02036d4cEi kind:function(arm,size=0x20) addr:0x2036d08 _ZN18UnkStruct_027E0C6813func_02036d6cEv kind:function(arm,size=0x3c) addr:0x2036d28 -func_02036da8 kind:function(arm,size=0x134) addr:0x2036d64 +_ZN18UnkStruct_027E0C6813func_02036da8EjPi kind:function(arm,size=0x134) addr:0x2036d64 _ZN18UnkStruct_027E0C6813func_02036edcEjh kind:function(arm,size=0x8c) addr:0x2036e98 _ZN18UnkStruct_027E0C6813func_02036f68EjPh kind:function(arm,size=0x168) addr:0x2036f24 _ZN18UnkStruct_027E0C6813func_020370d0Eii kind:function(arm,size=0x18) addr:0x203708c @@ -2034,7 +2034,7 @@ func_0203dcb4 kind:function(arm,size=0x48) addr:0x203dc70 func_0203dcfc kind:function(arm,size=0xf0) addr:0x203dcb8 func_0203ddec kind:function(arm,size=0x10) addr:0x203dda8 func_0203ddfc kind:function(arm,size=0x18) addr:0x203ddb8 -func_0203de14 kind:function(arm,size=0x10) addr:0x203ddd0 +_Z13func_0203de14P22Struct_027E0C68_unk_28i kind:function(arm,size=0x10) addr:0x203ddd0 func_0203de24 kind:function(arm,size=0x34) addr:0x203dde0 func_0203de58 kind:function(arm,size=0x208) addr:0x203de14 func_0203e060 kind:function(arm,size=0x30) addr:0x203e01c diff --git a/include/Message/BMG.hpp b/include/Message/BMG.hpp index 4af7ccb7..7915ced7 100644 --- a/include/Message/BMG.hpp +++ b/include/Message/BMG.hpp @@ -173,94 +173,5 @@ typedef struct BMGGroups { /* 0x04 */ s32 numEntries; } BMGGroups; // size = 0x8 -typedef void (*Struct_027E0C68_unk_28_unk_50)(struct Struct_027E0C68_unk_28*, EntryINF1*, int, u8*); -typedef void (*Struct_027E0C68_unk_28_unk_58)(struct Struct_027E0C68_unk_28*); -typedef void (*Struct_027E0C68_unk_18_unk_08)(struct Struct_027E0C68_unk_18*); - -typedef struct Struct_027E0C68_unk_28_unk_00 { - /* 0x00 */ unk32 unk_00; - /* 0x04 */ unk32 unk_04; - /* 0x08 */ unk32 unk_08; - /* 0x0C */ unk32 unk_0C; - /* 0x10 */ unk32 unk_10; - /* 0x14 */ unk32 unk_14; - /* 0x18 */ unk32 unk_18; - /* 0x1C */ unk32 unk_1C; - /* 0x20 */ unk32 unk_20; - /* 0x24 */ unk32 unk_24; - /* 0x28 */ unk32 unk_28; - /* 0x2C */ unk32 unk_2C; - /* 0x30 */ unk32 unk_30; - /* 0x34 */ unk32 unk_34; - /* 0x38 */ unk32 unk_38; - /* 0x3C */ unk32 unk_3C; - /* 0x40 */ unk32 unk_40; - /* 0x44 */ unk32 unk_44; - /* 0x48 */ unk32 unk_48; - /* 0x4C */ unk32 unk_4C; - /* 0x50 */ Struct_027E0C68_unk_28_unk_50 unk_50; - /* 0x54 */ unk32 unk_54; - /* 0x58 */ Struct_027E0C68_unk_28_unk_58 unk_58; - /* 0x5C */ unk32 unk_5C; -} Struct_027E0C68_unk_28_unk_00; - -//! TODO: this should be a class -typedef struct Struct_027E0C68_unk_28 { - /* 0x00 */ Struct_027E0C68_unk_28_unk_00* unk_00; - /* 0x04 */ struct Struct_027E0C68_unk_28* unk_04; - /* 0x08 */ struct Struct_027E0C68_unk_28* unk_08; - /* 0x0C */ unk32 unk_0C; -} Struct_027E0C68_unk_28; - -typedef struct Struct_027E0C68_unk_18_unk_00 { - /* 0x00 */ unk32 unk_00; - /* 0x04 */ unk32 unk_04; - /* 0x08 */ Struct_027E0C68_unk_18_unk_08 unk_08; - /* 0x0C */ unk32 unk_0C; -} Struct_027E0C68_unk_18_unk_00; - -typedef struct Struct_027E0C68_unk_18 { - /* 0x00 */ Struct_027E0C68_unk_18_unk_00* unk_00; - /* 0x04 */ unk32 unk_04; - /* 0x08 */ unk32 unk_08; - /* 0x0C */ unk32 unk_0C; - /* 0x10 */ unk32 unk_10; - /* 0x14 */ unk32 unk_14; - /* 0x18 */ unk32 unk_18; - /* 0x1C */ unk32 unk_1C; - /* 0x20 */ unk32 unk_20; - /* 0x24 */ unk32 unk_24; - /* 0x28 */ unk32 unk_28; - /* 0x2C */ unk32 unk_2C; - /* 0x30 */ unk32 unk_30; - /* 0x34 */ unk16 unk_34; - /* 0x36 */ unk16 unk_36; - /* 0x38 */ unk32 unk_38; - /* 0x3C */ unk32 unk_3C; - /* 0x40 */ unk32 unk_40; - /* 0x44 */ unk32 unk_44; - /* 0x48 */ unk32 unk_48; -} Struct_027E0C68_unk_18; // size = 0x4C - -typedef struct Struct_027E0C68 { - /* 0x00 */ unk16 unk_00; - /* 0x02 */ unk16 unk_02; - /* 0x04 */ u8 unk_04; - /* 0x05 */ u8 unk_05; - /* 0x06 */ unk16 unk_06; - /* 0x08 */ Struct_027E0C68_unk_28* unk_08; - /* 0x0C */ unk32 unk_0C; - /* 0x10 */ unk32 unk_10; - /* 0x14 */ BMGGroups* pGroups; - /* 0x18 */ Struct_027E0C68_unk_18* unk_18; - /* 0x1C */ Struct_027E0C68_unk_18* unk_1C; - /* 0x20 */ unk32 unk_20; - /* 0x24 */ unk32 unk_24; - /* 0x28 */ Struct_027E0C68_unk_28* unk_28[6]; // 022172B0 -} Struct_027E0C68; - -extern Struct_027E0C68_unk_28* func_02036f68(Struct_027E0C68 *param_1, u32 param_2, u8* param_3); -extern Struct_027E0C68_unk_18* func_020370e8(Struct_027E0C68* param_1, unk32 param_2, unk16 param_3, unk16 param_4, unk32 param_5); -extern Struct_027E0C68_unk_28* func_02037178(Struct_027E0C68* param_1, u32 param_2); extern EntryINF1* func_02037258(BMGFileInfo* pFileInfo, unk32 param_2); extern u32 func_020373ec(BMGGroups* pGroups, unk32 param_2); diff --git a/include/Message/MessageManager.hpp b/include/Message/MessageManager.hpp index 4151991b..00d92ace 100644 --- a/include/Message/MessageManager.hpp +++ b/include/Message/MessageManager.hpp @@ -5,6 +5,77 @@ #include "Message/BMG.hpp" +typedef void (*Struct_027E0C68_unk_28_unk_50)(struct Struct_027E0C68_unk_28*, EntryINF1*, int, u8*); +typedef void (*Struct_027E0C68_unk_28_unk_58)(struct Struct_027E0C68_unk_28*); +typedef void (*Struct_027E0C68_unk_18_unk_08)(void); +typedef void (*Struct_027E0C68_unk_28_unk_28)(struct Struct_027E0C68_unk_28*); +typedef void (*Struct_027E0C68_unk_28_unk_3C)(struct Struct_027E0C68_unk_28*, unk32); + +typedef struct Struct_027E0C68_unk_28_unk_00 { + /* 0x00 */ unk32 unk_00; + /* 0x04 */ unk32 unk_04; + /* 0x08 */ unk32 unk_08; + /* 0x0C */ unk32 unk_0C; + /* 0x10 */ unk32 unk_10; + /* 0x14 */ unk32 unk_14; + /* 0x18 */ unk32 unk_18; + /* 0x1C */ unk32 unk_1C; + /* 0x20 */ unk32 unk_20; + /* 0x24 */ unk32 unk_24; + /* 0x28 */ Struct_027E0C68_unk_28_unk_28 unk_28; + /* 0x2C */ unk32 unk_2C; + /* 0x30 */ unk32 unk_30; + /* 0x34 */ unk32 unk_34; + /* 0x38 */ unk32 unk_38; + /* 0x3C */ Struct_027E0C68_unk_28_unk_3C unk_3C; + /* 0x40 */ unk32 unk_40; + /* 0x44 */ unk32 unk_44; + /* 0x48 */ unk32 unk_48; + /* 0x4C */ unk32 unk_4C; + /* 0x50 */ Struct_027E0C68_unk_28_unk_50 unk_50; + /* 0x54 */ unk32 unk_54; + /* 0x58 */ Struct_027E0C68_unk_28_unk_58 unk_58; + /* 0x5C */ unk32 unk_5C; +} Struct_027E0C68_unk_28_unk_00; + +//! TODO: this should be a class +typedef struct Struct_027E0C68_unk_28 { + /* 0x00 */ Struct_027E0C68_unk_28_unk_00* unk_00; + /* 0x04 */ struct Struct_027E0C68_unk_28* unk_04; + /* 0x08 */ struct Struct_027E0C68_unk_28* unk_08; + /* 0x0C */ unk32 unk_0C; +} Struct_027E0C68_unk_28; + +typedef struct Struct_027E0C68_unk_18_unk_00 { + /* 0x00 */ unk32 unk_00; + /* 0x04 */ unk32 unk_04; + /* 0x08 */ Struct_027E0C68_unk_18_unk_08 unk_08; + /* 0x0C */ unk32 unk_0C; +} Struct_027E0C68_unk_18_unk_00; + +typedef struct Struct_027E0C68_unk_18 { + /* 0x00 */ Struct_027E0C68_unk_18_unk_00* unk_00; + /* 0x04 */ unk32 unk_04; + /* 0x08 */ unk32 unk_08; + /* 0x0C */ unk32 unk_0C; + /* 0x10 */ unk32 unk_10; + /* 0x14 */ unk32 unk_14; + /* 0x18 */ unk32 unk_18; + /* 0x1C */ unk32 unk_1C; + /* 0x20 */ unk32 unk_20; + /* 0x24 */ unk32 unk_24; + /* 0x28 */ unk32 unk_28; + /* 0x2C */ unk32 unk_2C; + /* 0x30 */ unk32 unk_30; + /* 0x34 */ unk16 unk_34; + /* 0x36 */ unk16 unk_36; + /* 0x38 */ unk32 unk_38; + /* 0x3C */ unk32 unk_3C; + /* 0x40 */ unk32 unk_40; + /* 0x44 */ unk32 unk_44; + /* 0x48 */ unk32 unk_48; +} Struct_027E0C68_unk_18; // size = 0x4C + class UnkStruct_027E0C68 { private: /* 0x00 */ unk16 unk_00; @@ -24,10 +95,13 @@ private: public: s32 func_02036850(void); + void func_02036c50(unk32 param_2); + void func_02036ca4(unk32 param_2); s32 func_02036ce4(Struct_027E0C68_unk_18* param_2, unk32 param_3); unk32 func_02036d30(unk32 param_2); unk32 func_02036d4c(unk32 param_2); void func_02036d6c(void); + Struct_027E0C68_unk_28* func_02036da8(u32 param_2, s32* param_3); void func_02036edc(u32 param_2, u8 param_3); Struct_027E0C68_unk_28* func_02036f68(u32 param_2, u8* param_3); Struct_027E0C68_unk_18* func_020370d0(unk32 param_2, unk32 param_3); diff --git a/src/Main/Message/MessageManager.cpp b/src/Main/Message/MessageManager.cpp index 7413e15c..c18ce30f 100644 --- a/src/Main/Message/MessageManager.cpp +++ b/src/Main/Message/MessageManager.cpp @@ -1,11 +1,12 @@ #include "Message/MessageManager.hpp" -s32 func_02036824(void); -unk32 func_ov000_020d7f18(u32*, unk32); -unk32 func_ov000_020d77e4(u32*, unk32); -unk32 func_02037628(u8*); -THUMB unk32 func_0202ab48(void); -ARM void func_02038b40(Struct_027E0C68_unk_28*); +extern s32 func_02036824(void); +extern unk32 func_ov000_020d7f18(u32*, unk32); +extern unk32 func_ov000_020d77e4(u32*, unk32); +extern unk32 func_02037628(u8*); +extern THUMB unk32 func_0202ab48(void); +extern ARM void func_02038b40(Struct_027E0C68_unk_28*); +extern ARM unk32 func_0203de14(Struct_027E0C68_unk_28*, unk32); // see Actor.cpp struct UnkStruct2 { @@ -17,19 +18,43 @@ extern UnkStruct2 data_027e077c; extern u32 data_ov000_020eec9c[]; extern u8 data_02056be4[]; +ARM void UnkStruct_027E0C68::func_02036c50(unk32 param_2) { + s32 i; + + for (i = 0; i < ARRAY_LEN(this->unk_28); i++) { + if (this->unk_28[i] != NULL && func_0203de14(this->unk_28[i], param_2) != 0) { + this->unk_28[i]->unk_00->unk_28(this->unk_28[i]); + } + } +} + +ARM void UnkStruct_027E0C68::func_02036ca4(unk32 param_2) { + s32 i; + + for (i = 0; i < ARRAY_LEN(this->unk_28); i++) { + Struct_027E0C68_unk_28* pSVar1 = this->unk_28[i]; + + if (pSVar1 != NULL) { + pSVar1->unk_00->unk_3C(pSVar1, param_2); + } + } +} + +// non-matching ARM s32 UnkStruct_027E0C68::func_02036ce4(Struct_027E0C68_unk_18* param_2, unk32 param_3) { if (param_3 == 0) { return 0; } - if (func_020373ec(this->pGroups,param_3) != -1) { - param_2->unk_00->unk_08(param_2); + if (func_020373ec(this->pGroups, param_3) != -1) { + param_2->unk_00->unk_08(); return 1; } return 0; } +// non-matching ARM unk32 UnkStruct_027E0C68::func_02036d30(unk32 param_2) { if (this->unk_20 == 0 || this->unk_20 == param_2) { this->unk_20 = param_2; @@ -48,6 +73,7 @@ ARM unk32 UnkStruct_027E0C68::func_02036d4c(unk32 param_2) { return 0; } +// non-matching ARM void UnkStruct_027E0C68::func_02036d6c(void) { s32 i; @@ -58,6 +84,59 @@ ARM void UnkStruct_027E0C68::func_02036d6c(void) { } } +// non-matching +ARM Struct_027E0C68_unk_28* UnkStruct_027E0C68::func_02036da8(u32 param_2, s32* param_3) { + EntryINF1 *pEVar1; + EntryINF1 *pEVar2; + u8* puVar3; + Struct_027E0C68_unk_28 *pSVar4; + BMGGroups *pBVar5; + bool bVar6; + u8 iStack_38; + int iStack_34; + int iStack_30; + u8 uStack_2c; + u8 uStack_23; + + pEVar1 = func_02037258(&this->pGroups->entries[param_2 >> 0x10], param_2 & 0xFFFF); + + if (pEVar1 == NULL) { + return NULL; + } + + if ((data_02056be4[data_027e077c.mUnk_0] & 1) == 0) { + pSVar4 = this->unk_28[4]; + func_02037628(&iStack_38); + bVar6 = (data_02056be4[data_027e077c.mUnk_0] & 1) == 0; + puVar3 = data_02056be4; + + if (bVar6) { + puVar3[0] = 1; + } + + uStack_23 = puVar3[0]; + + if (!bVar6) { + uStack_23 = 0; + } + + uStack_2c = 1; + iStack_38 = *param_3; + iStack_34 = param_3[1]; + iStack_30 = param_3[2]; + pBVar5 = this->pGroups; + pEVar2 = func_02037258(&pBVar5->entries[param_2 >> 0x10], param_2 & 0xFFFF); + + pSVar4->unk_00->unk_50(pSVar4, pEVar1, (int)&((pBVar5->entries[param_2 >> 0x10].pDAT1)->base).tag + (pEVar2->offset & 0xfffffffe), &iStack_38); + + func_ov000_020d77e4(data_ov000_020eec9c, 0x1C); + return pSVar4; + } + + return NULL; +} + +// non-matching ARM void UnkStruct_027E0C68::func_02036edc(u32 param_2, u8 param_3) { Struct_027E0C68_unk_28 *pSVar1; u8 auStack_28[24]; @@ -81,6 +160,7 @@ ARM void UnkStruct_027E0C68::func_02036edc(u32 param_2, u8 param_3) { } } +// non-matching ARM Struct_027E0C68_unk_28* UnkStruct_027E0C68::func_02036f68(u32 param_2, u8* param_3) { EntryINF1 *pEVar1; Struct_027E0C68_unk_28 *pSVar2;