Decompile langGet

This commit is contained in:
Ryan Dwyer 2020-11-29 01:45:10 +10:00
parent 4f35a88566
commit 8025865ce4
3 changed files with 27 additions and 23 deletions

View File

@ -335,24 +335,28 @@ void langClearBank(s32 bank)
g_LangBanks[bank] = NULL;
}
GLOBAL_ASM(
glabel langGet
/* f16e7c4: 00047243 */ sra $t6,$a0,0x9
/* f16e7c8: 000e7880 */ sll $t7,$t6,0x2
/* f16e7cc: 3c02800b */ lui $v0,%hi(g_LangBanks)
/* f16e7d0: 004f1021 */ addu $v0,$v0,$t7
/* f16e7d4: 8c42aaa0 */ lw $v0,%lo(g_LangBanks)($v0)
/* f16e7d8: 309801ff */ andi $t8,$a0,0x1ff
/* f16e7dc: 0018c880 */ sll $t9,$t8,0x2
/* f16e7e0: 10400006 */ beqz $v0,.L0f16e7fc
/* f16e7e4: 00594021 */ addu $t0,$v0,$t9
/* f16e7e8: 8d050000 */ lw $a1,0x0($t0)
/* f16e7ec: 10a00003 */ beqz $a1,.L0f16e7fc
/* f16e7f0: 00a21821 */ addu $v1,$a1,$v0
/* f16e7f4: 03e00008 */ jr $ra
/* f16e7f8: 00601025 */ or $v0,$v1,$zero
.L0f16e7fc:
/* f16e7fc: 00001825 */ or $v1,$zero,$zero
/* f16e800: 03e00008 */ jr $ra
/* f16e804: 00601025 */ or $v0,$v1,$zero
);
/**
* Resolve a text ID to a string.
*
* g_LangBanks is an array of pointers to language file data in RAM. Many of
* those pointers will be NULL because only the necessary language files are
* loaded at any given time.
*
* The language file data consists of a variable-length array of offsets into
* the file. Not to be confused with pointers.
*/
char *langGet(s32 textid)
{
s32 bankindex = textid >> 9;
s32 textindex = textid & 0x1ff;
u32 *bank = g_LangBanks[bankindex];
u32 addr;
if (bank && bank[textindex]) {
addr = (u32)bank + bank[textindex];
} else {
addr = 0;
}
return (char *)addr;
}

View File

@ -15721,7 +15721,7 @@ u32 var800aaa78[4] = {0};
u32 g_AudioXReasonDurations[4] = {0};
u32 var800aaa98 = 0;
u32 var800aaa9c = 0;
char *g_LangBanks[69] = {NULL};
u32 *g_LangBanks[69] = {NULL};
void *var800aabb4 = NULL;
struct var800aabb8 *var800aabb8 = NULL;
u32 var800aabbc = 0;

View File

@ -771,7 +771,7 @@ extern u32 g_AudioXReasonsActive[4];
extern u32 var800aaa78[4];
extern u32 g_AudioXReasonDurations[4];
extern u32 var800aaa98;
extern char *g_LangBanks[69];
extern u32 *g_LangBanks[69];
extern void *var800aabb4;
extern struct var800aabb8 *var800aabb8;
extern struct texture *g_Textures;