func_020371c8: 96%

This commit is contained in:
Yanis002
2025-01-22 20:56:39 +01:00
parent a72a9d77d2
commit fc19911a51
5 changed files with 74 additions and 84 deletions
+2 -2
View File
@@ -1822,10 +1822,10 @@ func_02037158 kind:function(arm,size=0x20) addr:0x2037158
func_02037178 kind:function(arm,size=0x38) addr:0x2037178
func_020371b0 kind:function(arm,size=0x4) addr:0x20371b0
_Z13func_020371b4P11BMGFileInfo kind:function(thumb,size=0x14) addr:0x20371b4
_Z13func_020371c8P11BMGFileInfoPji kind:function(thumb,size=0x90) addr:0x20371c8
_Z13func_020371c8P11BMGFileInfoPjs kind:function(thumb,size=0x90) addr:0x20371c8
_Z13func_02037258P11BMGFileInfoi kind:function(arm,size=0x34) addr:0x2037258
_Z13func_0203728cP11BMGFileInfoi kind:function(arm,size=0x64) addr:0x203728c
_ZN14MessageManager13func_020372f0Eiii kind:function(thumb,size=0xc4) addr:0x20372f0
_ZN14MessageManager13func_020372f0Eisi kind:function(thumb,size=0xc4) addr:0x20372f0
func_020373b4 kind:function(thumb,size=0x38) addr:0x20373b4
func_020373ec kind:function(arm,size=0x60) addr:0x20373ec
func_0203744c kind:function(thumb,size=0xc) addr:0x203744c
+2 -2
View File
@@ -1822,10 +1822,10 @@ func_02037158 kind:function(arm,size=0x20) addr:0x2037114
func_02037178 kind:function(arm,size=0x38) addr:0x2037134
func_020371b0 kind:function(arm,size=0x4) addr:0x203716c
_Z13func_020371b4P11BMGFileInfo kind:function(thumb,size=0x14) addr:0x2037170
_Z13func_020371c8P11BMGFileInfoPji kind:function(thumb,size=0x90) addr:0x2037184
_Z13func_020371c8P11BMGFileInfoPjs kind:function(thumb,size=0x90) addr:0x2037184
_Z13func_02037258P11BMGFileInfoi kind:function(arm,size=0x34) addr:0x2037214
_Z13func_0203728cP11BMGFileInfoi kind:function(arm,size=0x64) addr:0x2037248
_ZN14MessageManager13func_020372f0Eiii kind:function(thumb,size=0xc4) addr:0x20372ac
_ZN14MessageManager13func_020372f0Eisi kind:function(thumb,size=0xc4) addr:0x20372ac
func_020373b4 kind:function(thumb,size=0x38) addr:0x2037370
func_020373ec kind:function(arm,size=0x60) addr:0x20373a8
func_0203744c kind:function(thumb,size=0xc) addr:0x2037408
+5 -4
View File
@@ -4,13 +4,15 @@
#include "types.h"
#define BMG_MAGIC "MESGbmg1"
#define BMG_TAG(a, b, c, d) (((a) << 24) | ((b) << 16) | ((c) << 8) | (d))
#define BMG_TAG(a, b, c, d) (((d) << 24) | ((c) << 16) | ((b) << 8) | (a))
typedef enum BMGTag {
/* "INF1" */ BMG_TAG_INF1 = BMG_TAG('I', 'N', 'F', '1'),
/* "FLW1" */ BMG_TAG_FLW1 = BMG_TAG('F', 'L', 'W', '1'),
/* "FLI1" */ BMG_TAG_FLI1 = BMG_TAG('F', 'L', 'I', '1'),
/* "DAT1" */ BMG_TAG_DAT1 = BMG_TAG('D', 'A', 'T', '1'),
/* "MID1" */ BMG_TAG_MID1 = BMG_TAG('M', 'I', 'D', '1'),
/* "MID1" */ BMG_TAG_STR1 = BMG_TAG('S', 'T', 'R', '1'),
} BMGTag;
typedef enum BMGEncoding {
@@ -22,7 +24,7 @@ typedef enum BMGEncoding {
} BMGEncoding;
typedef struct SectionBase {
/* 0x00 */ char tag[4]; // "INF1", "DAT1", ...
/* 0x00 */ u32 tag; // "INF1", "DAT1", ...
/* 0x04 */ u32 size; // the size of the section
} SectionBase; // size = 0x8
@@ -32,8 +34,7 @@ typedef struct BMGHeader {
/* 0x0C */ u32 numSections; // the number of sections (INF1, DAT1, ...)
/* 0x10 */ u8 encoding; // see `BMGEncoding`
/* 0x11 */ u8 unk_11[0xF]; // alignment padding?
/* 0x20 */ SectionBase* firstSection; // technically not part of the header but used by functions
} BMGHeader; // size = 0x24
} BMGHeader; // size = 0x20
typedef struct EntryINF1 {
/* 0x00 */ u32 offset; // relative to the end of the DAT1 header
+1 -1
View File
@@ -17,5 +17,5 @@ private:
BMGFileInfo* aUnknownData;
public:
void func_020372f0(int index, int param_3, int param_4);
void func_020372f0(int index, s16 unk_18, int param_4);
};
+64 -75
View File
@@ -20,89 +20,78 @@ THUMB void func_020371b4(BMGFileInfo* pData) {
pData->unk_18 = 0;
}
THUMB int func_020371c8(BMGFileInfo* pData, u32* pFile, int param_3) {
char acVar1;
char* pacVar2;
char acVar3;
int dVar4;
u32 uVar5;
THUMB u16 func_020371c8(BMGFileInfo* pFileInfo, u32* pFile, s16 unk_18) {
SectionBase* pSection;
u16 groupId;
u32 i;
pData->unk_14 = (BMGHeader*)pFile;
pData->unk_18 = param_3;
pData->pHeader = (BMGHeader*)pFile;
groupId = -1;
pFileInfo->unk_14 = (BMGHeader*)pFile;
pFileInfo->pHeader = (BMGHeader*)pFile;
pFileInfo->unk_18 = unk_18;
pSection = (SectionBase*)((u8*)pFile + sizeof(BMGHeader));
// acVar1 = BMG_TAG_FLI1;
// pacVar2 = pHeader->firstSection;
// uVar5 = 0;
// dVar4 = 0xFFFF;
for (i = 0; i < pFileInfo->pHeader->numSections; i++) {
switch (pSection->tag) {
case BMG_TAG_MID1:
// unused
break;
case BMG_TAG_STR1:
// unused
break;
case BMG_TAG_INF1:
pFileInfo->pINF1 = (SectionINF1*)pSection;
groupId = pFileInfo->pINF1->groupId;
break;
case BMG_TAG_DAT1:
//! TODO: fake?
pFileInfo->pDAT1 = (SectionDAT1*)(pSection + 1);
break;
case BMG_TAG_FLW1:
pFileInfo->pFLW1 = (SectionFLW1*)pSection;
break;
case BMG_TAG_FLI1:
pFileInfo->pFLI1 = (SectionFLI1*)pSection;
break;
}
if (pData->pFLI1 != NULL) {
// do {
// acVar3 = *pacVar2;
if (acVar1 < acVar3) {
// if ('DAT1' < acVar3) {
// if (acVar3 == 'FLW1') {
// pData->pFLW1 = (int)pacVar2;
// }
// } else if ('DAT1' <= acVar3) {
// pData->pDAT1 = (int)(pacVar2 + 2);
// }
} else if (acVar3 < acVar1) {
// if (('MID1' < acVar3) && (acVar3 == 'INF1')) {
// pData->pINF1 = (int)pacVar2;
// dVar4 = pacVar2[3];
// }
} else {
// pData->pFLI1 = (int)pacVar2;
}
// uVar5 = uVar5 + 1;
// pacVar2++;
// } while (uVar5 < pData->pFLI1);
pSection = (SectionBase*)((u8*)pSection + pSection->size);
}
return dVar4;
return groupId;
}
ARM int func_02037258(BMGFileInfo* pData, unk32 param_2) {
// u32 iVar1;
ARM EntryINF1* func_02037258(BMGFileInfo* pFileInfo, unk32 param_2) {
SectionINF1* pINF1 = pFileInfo->pINF1;
// iVar1 = pData->pINF1;
if (pINF1 == NULL) {
return NULL;
}
// if (iVar1 == 0) {
// return 0;
// }
if (param_2 < pINF1->numEntries) {
return &pINF1->entries[pINF1->entrySize * param_2];
}
// if (param_2 < iVar1) {
// return (iVar1 + 10) * param_2 + iVar1 + 0x10;
// }
// return 0;
return NULL;
}
ARM s64 func_0203728c(BMGFileInfo* pData, unk32 param_2) {
// u32* iVar1;
// u32 uVar2;
// u32 uVar3;
ARM u16 func_0203728c(BMGFileInfo* pFileInfo, unk32 param_2) {
SectionFLI1* pFLI1;
u16 i;
// iVar1 = pData->unk_0C;
// if (iVar1 == 0) {
// return 0xFFFF;
// }
pFLI1 = pFileInfo->pFLI1;
// uVar2 = 0;
// if (iVar1 + 0xC + 8 != 0) {
// do {
// if (param_2 == *(int *)(iVar1 + 0x10 + uVar2 * 8)) {
// return iVar1 + 0x10 + uVar2 * 8 + 4;
// }
// uVar3 = uVar2 + 1;
// uVar2 = uVar3 & 0xFFFF;
// } while ((uVar3 & 0xFFFF) < iVar1 + 0xC + 8);
// }
if (pFLI1 == NULL) {
return -1;
}
// return 0xFFFF;
for (i = 0; i < pFLI1->entrySize; i++) {
if (param_2 == pFLI1->entries[i * 8].msgFlowID) {
return pFLI1->entries[i * 8].msgFlowNodeIndex;
}
}
return -1;
}
static char* sBMGFiles[] = {
@@ -142,11 +131,11 @@ static char* sBMGFiles[] = {
"kaitei_F",
};
THUMB void MessageManager::func_020372f0(int index, int param_3, int param_4) {
THUMB void MessageManager::func_020372f0(int index, s16 unk_18, int param_4) {
char bmgPath[64];
BMGFileInfo bmgFile;
u32* pFile;
int iVar1;
u16 groupId;
// path to the bmg file for the current language (i.e.: "English/Message/battle.bmg")
strcpy(bmgPath, func_0202ab38(&data_027e05f4));
@@ -156,8 +145,8 @@ THUMB void MessageManager::func_020372f0(int index, int param_3, int param_4) {
pFile = data_027e0ce0[1];
if (param_3 != 1) {
if (param_3 != 4) {
if (unk_18 != 1) {
if (unk_18 != 4) {
pFile = data_027e0ce0[0];
} else {
pFile = data_ov002_0210016c;
@@ -171,7 +160,7 @@ THUMB void MessageManager::func_020372f0(int index, int param_3, int param_4) {
bmgFile.unk_1A = 0;
func_020371b4(&bmgFile);
iVar1 = func_020371c8(&bmgFile, pFile, param_3);
this->aUnknownData[iVar1] = bmgFile;
this->aUnknownData[iVar1].unk_1A = iVar1;
groupId = func_020371c8(&bmgFile, pFile, unk_18);
this->aUnknownData[groupId] = bmgFile;
this->aUnknownData[groupId].unk_1A = groupId;
}