mirror of
https://github.com/zeldaret/ph
synced 2026-07-08 21:55:05 -04:00
func_020371c8: 96%
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user