diff --git a/src/game/game_1531a0.c b/src/game/game_1531a0.c index 9aa511d29..85d147c4e 100644 --- a/src/game/game_1531a0.c +++ b/src/game/game_1531a0.c @@ -3549,7 +3549,7 @@ glabel func0f154f38 /* f154d7c: 55c00006 */ bnezl $t6,.JF0f154d98 /* f154d80: 96390000 */ lhu $t9,0x0($s1) /* f154d84: 94c40000 */ lhu $a0,0x0($a2) -/* f154d88: 0fc5b967 */ jal func0f16e3fc +/* f154d88: 0fc5b967 */ jal lang0f16e3fc /* f154d8c: 2484ff80 */ addiu $a0,$a0,-128 /* f154d90: ae220008 */ sw $v0,0x8($s1) /* f154d94: 96390000 */ lhu $t9,0x0($s1) @@ -4978,7 +4978,7 @@ glabel func0f1552d4 /* f155624: 24040002 */ addiu $a0,$zero,0x2 /* f155628: 248c0080 */ addiu $t4,$a0,0x80 .L0f15562c: -/* f15562c: 0fc5b8ff */ jal func0f16e3fc +/* f15562c: 0fc5b8ff */ jal lang0f16e3fc /* f155630: a3ac0080 */ sb $t4,0x80($sp) /* f155634: afa20088 */ sw $v0,0x88($sp) /* f155638: 26100002 */ addiu $s0,$s0,0x2 @@ -5127,7 +5127,7 @@ glabel func0f15568c /* f1556c4: 962f0000 */ lhu $t7,0x0($s1) /* f1556c8: 96240000 */ lhu $a0,0x0($s1) /* f1556cc: afac00b0 */ sw $t4,0xb0($sp) -/* f1556d0: 0fc5b967 */ jal func0f16e3fc +/* f1556d0: 0fc5b967 */ jal lang0f16e3fc /* f1556d4: 2484ff80 */ addiu $a0,$a0,-128 /* f1556d8: 8fac00b0 */ lw $t4,0xb0($sp) /* f1556dc: 3c0d8008 */ lui $t5,0x8008 @@ -9518,7 +9518,7 @@ glabel textRenderProjected /* f1565a0: 24040002 */ addiu $a0,$zero,0x2 /* f1565a4: 248f0080 */ addiu $t7,$a0,0x80 .L0f1565a8: -/* f1565a8: 0fc5b8ff */ jal func0f16e3fc +/* f1565a8: 0fc5b8ff */ jal lang0f16e3fc /* f1565ac: a3af0068 */ sb $t7,0x68($sp) /* f1565b0: 8fb800d4 */ lw $t8,0xd4($sp) /* f1565b4: 8fa800dc */ lw $t0,0xdc($sp) @@ -9700,7 +9700,7 @@ glabel func0f156790 /* f156ba0: 57000008 */ bnezl $t8,.JF0f156bc4 /* f156ba4: 02001025 */ move $v0,$s0 /* f156ba8: 96240000 */ lhu $a0,0x0($s1) -/* f156bac: 0fc5b967 */ jal func0f16e3fc +/* f156bac: 0fc5b967 */ jal lang0f16e3fc /* f156bb0: 2484ff80 */ addiu $a0,$a0,-128 /* f156bb4: 8fa90058 */ lw $t1,0x58($sp) /* f156bb8: 8faa005c */ lw $t2,0x5c($sp) @@ -11544,7 +11544,7 @@ glabel textRender /* f1571c4: 24040002 */ addiu $a0,$zero,0x2 /* f1571c8: 24990080 */ addiu $t9,$a0,0x80 .L0f1571cc: -/* f1571cc: 0fc5b8ff */ jal func0f16e3fc +/* f1571cc: 0fc5b8ff */ jal lang0f16e3fc /* f1571d0: a3b90074 */ sb $t9,0x74($sp) /* f1571d4: 8fab00e8 */ lw $t3,0xe8($sp) /* f1571d8: 8e6d0000 */ lw $t5,0x0($s3) diff --git a/src/game/lang.c b/src/game/lang.c index c701ded22..7f13cb8bc 100644 --- a/src/game/lang.c +++ b/src/game/lang.c @@ -53,12 +53,12 @@ u8 *g_LangBuffer = NULL; u8 *g_LangBufferPos = NULL; s32 g_LangBufferSize = 0; u32 *g_LangBanks[69]; -void *var800aabb4; +struct var800aabb4 *var800aabb4; struct var800aabb8 *var800aabb8; s32 g_LanguageId = LANGUAGE_NTSC_EN; #else u32 *g_LangBanks[69]; -void *var800aabb4; +struct var800aabb4 *var800aabb4; struct var800aabb8 *var800aabb8; bool g_Jpn = false; #endif @@ -217,7 +217,7 @@ u32 var80084810jf = 0; u32 var80084814jf = 8; GLOBAL_ASM( -glabel func0f16e3fc +glabel lang0f16e3fc /* f16e59c: 27bdffd0 */ addiu $sp,$sp,-48 /* f16e5a0: afb00018 */ sw $s0,0x18($sp) /* f16e5a4: 308e2000 */ andi $t6,$a0,0x2000 @@ -456,7 +456,7 @@ glabel func0f16e3fc ); #else GLOBAL_ASM( -glabel func0f16e3fc +glabel lang0f16e3fc /* f16e3fc: 27bdffc8 */ addiu $sp,$sp,-56 /* f16e400: afb00018 */ sw $s0,0x18($sp) /* f16e404: 308e2000 */ andi $t6,$a0,0x2000 @@ -658,6 +658,76 @@ glabel func0f16e3fc ); #endif +extern u8 _jpndata1; +extern u8 _jpndata2; + +// Mismatch: Regalloc. The if (1) solves a-regalloc but not t-regalloc, +// and moving it down one line solves t-regalloc but not a-regalloc. +//struct var800aabb4 *lang0f16e3fc(s32 arg0) +//{ +// s32 i; +// s32 t2 = -1; +// s32 t3 = -1; +// bool t0 = false; +// +// if (arg0 & 0x2000) { +// t0 = true; +// } +// +// for (i = 0; i < 0x7c; i++) { +// if ((t0 || (arg0 >> 1) != var800aabb8[i].unk00_02) +// && (!t0 || i + 1 >= 0x7c +// || (arg0 >> 1) != var800aabb8[i + 0].unk00_02 +// || (arg0 >> 1) != var800aabb8[i + 1].unk00_02)) { +// if (var800aabb8[i].unk00_00 == 0) { +// if (1); +// t2 = i; +// } +// +// if (var800aabb8[i].unk00_00 == 0 && var800aabb8[i + 1].unk00_00 == 0 && i + 1 < 0x7c) { +// t3 = i; +// } +// } else { +// break; +// } +// } +// +// if (i < 0x7c) { +// if (!t0) { +// var800aabb8[i].unk00_00 = 2; +// +// return &var800aabb4[i]; +// } else { +// var800aabb8[i + 0].unk00_00 = 2; +// var800aabb8[i + 1].unk00_00 = 2; +// +// return &var800aabb4[i]; +// } +// } +// +// if (!t0 && t2 >= 0) { +// var800aabb8[t2].unk00_00 = 2; +// var800aabb8[t2].unk00_02 = arg0 >> 1; +// +// dmaExec(&var800aabb4[t2], (u32)&_jpndata1 + (arg0 >> 1) * 0x60, 0x60); +// +// return &var800aabb4[t2]; +// } +// +// if (t0 && t3 >= 0) { +// var800aabb8[t3 + 0].unk00_00 = 2; +// var800aabb8[t3 + 1].unk00_00 = 2; +// var800aabb8[t3 + 0].unk00_02 = arg0 >> 1; +// var800aabb8[t3 + 1].unk00_02 = arg0 >> 1; +// +// dmaExec(&var800aabb4[t3], (u32)&_jpndata2 + ((arg0 & 0x1fff) >> 1) * 0x80, 0x80); +// +// return &var800aabb4[t3]; +// } +// +// return &var800aabb4[0]; +//} + /** * NTSC only supports English, while PAL supports 4 languages and JPN has its * own. Each English file is followed immediately by the other translations. diff --git a/src/include/bss.h b/src/include/bss.h index da432f8a7..7806d810d 100644 --- a/src/include/bss.h +++ b/src/include/bss.h @@ -248,7 +248,7 @@ extern u32 g_AudioXReasonsActive[4]; extern s32 g_MusicXReasonMinDurations[4]; extern s32 g_MusicXReasonMaxDurations[4]; extern u32 *g_LangBanks[69]; -extern void *var800aabb4; +extern struct var800aabb4 *var800aabb4; extern struct var800aabb8 *var800aabb8; extern struct texture *g_Textures; extern struct texturething var800aabc8; diff --git a/src/include/game/lang.h b/src/include/game/lang.h index 759484c48..d1f1bb630 100644 --- a/src/include/game/lang.h +++ b/src/include/game/lang.h @@ -8,7 +8,7 @@ void langInit(void); void langTick(void); u32 langGetLangBankIndexFromStagenum(s32 stagenum); -u32 func0f16e3fc(void); +struct var800aabb4 *lang0f16e3fc(s32 arg0); s32 langGetFileNumOffset(void); s32 langGetFileId(s32 bank); void langLoad(s32 bank);