Decompile filemgrHandleSetLanguage

This commit is contained in:
Ryan Dwyer 2022-04-16 20:19:49 +10:00
parent 7a74aa38b8
commit 3172bb3503
6 changed files with 37 additions and 76 deletions

View File

@ -40,7 +40,7 @@ bool bossfileLoadFull(void)
bossfileLoad();
#if VERSION >= VERSION_PAL_BETA
langSetEuropean(g_Vars.unk000482);
langSetEuropean(g_Vars.language);
#endif
return true;
@ -116,7 +116,7 @@ void bossfileLoad(void)
g_BossFile.unk89 = savebufferReadBits(&buffer, 1);
g_Vars.unk000482 = savebufferReadBits(&buffer, 4);
g_Vars.language = savebufferReadBits(&buffer, 4);
for (i = 0; i < 8; i++) {
savebufferReadString(&buffer, g_BossFile.teamnames[i], 1);
@ -164,7 +164,7 @@ void bossfileSave(void)
savebufferWriteGuid(&buffer, &guid);
savebufferOr(&buffer, g_BossFile.unk89, 1);
savebufferOr(&buffer, g_Vars.unk000482, 4);
savebufferOr(&buffer, g_Vars.language, 4);
for (i = 0; i < 8; i++) {
func0f0d55a4(&buffer, g_BossFile.teamnames[i]);
@ -215,7 +215,7 @@ void bossfileSetDefaults(void)
g_BossFile.locktype = MPLOCKTYPE_NONE;
g_Vars.bossfileid = 0;
g_Vars.bossdeviceserial = 0;
g_Vars.unk000482 = (PAL ? 7 : 0);
g_Vars.language = (PAL ? 7 : 0);
g_AltTitleUnlocked = 0;
g_AltTitleEnabled = false;

View File

@ -58,64 +58,25 @@ struct menudialogdef g_FilemgrRenameMenuDialog;
#endif
#if PAL
s32 func0f1088d0pf(s32 operation, struct menuitem *item, union handlerdata *data);
s32 filemgrHandleSetLanguage(s32 operation, struct menuitem *item, union handlerdata *data)
{
if (operation == MENUOP_SET) {
g_Vars.language = item->param;
langSetEuropean(g_Vars.language);
menuPopDialog();
}
#if VERSION >= VERSION_PAL_FINAL
GLOBAL_ASM(
glabel func0f1088d0pf
/* f1088d0: 27bdffe8 */ addiu $sp,$sp,-24
/* f1088d4: 24010006 */ li $at,0x6
/* f1088d8: afbf0014 */ sw $ra,0x14($sp)
/* f1088dc: 14810009 */ bne $a0,$at,.PF0f108904
/* f1088e0: afa60020 */ sw $a2,0x20($sp)
/* f1088e4: 90ae0001 */ lbu $t6,0x1($a1)
/* f1088e8: 3c02800a */ lui $v0,0x800a
/* f1088ec: 2442a510 */ addiu $v0,$v0,-23280
/* f1088f0: a44e0482 */ sh $t6,0x482($v0)
/* f1088f4: 0fc5bdd7 */ jal langSetEuropean
/* f1088f8: 31c4ffff */ andi $a0,$t6,0xffff
/* f1088fc: 0fc3cf8c */ jal menuPopDialog
/* f108900: 00000000 */ nop
.PF0f108904:
/* f108904: 8fbf0014 */ lw $ra,0x14($sp)
/* f108908: 27bd0018 */ addiu $sp,$sp,0x18
/* f10890c: 00001025 */ move $v0,$zero
/* f108910: 03e00008 */ jr $ra
/* f108914: 00000000 */ nop
);
#else
GLOBAL_ASM(
glabel func0f1088d0pf
/* f108630: 27bdffe8 */ addiu $sp,$sp,-24
/* f108634: 24010006 */ li $at,0x6
/* f108638: afbf0014 */ sw $ra,0x14($sp)
/* f10863c: 14810009 */ bne $a0,$at,.PB0f108664
/* f108640: afa60020 */ sw $a2,0x20($sp)
/* f108644: 90ae0001 */ lbu $t6,0x1($a1)
/* f108648: 3c02800a */ lui $v0,0x800a
/* f10864c: 2442e4d0 */ addiu $v0,$v0,-6960
/* f108650: a44e0482 */ sh $t6,0x482($v0)
/* f108654: 0fc5c097 */ jal langSetEuropean
/* f108658: 31c4ffff */ andi $a0,$t6,0xffff
/* f10865c: 0fc3cf12 */ jal menuPopDialog
/* f108660: 00000000 */ nop
.PB0f108664:
/* f108664: 8fbf0014 */ lw $ra,0x14($sp)
/* f108668: 27bd0018 */ addiu $sp,$sp,0x18
/* f10866c: 00001025 */ move $v0,$zero
/* f108670: 03e00008 */ jr $ra
/* f108674: 00000000 */ nop
);
#endif
return 0;
}
struct menuitem g_ChooseLanguageMenuItems[] = {
{ MENUITEMTYPE_LABEL, 0, 0x00004010, L_MPWEAPONS_261, 0x00000000, 0x00000000 }, // "Choose your language:"
{ MENUITEMTYPE_SEPARATOR, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
{ MENUITEMTYPE_SELECTABLE, LANGUAGE_PAL_EN, 0x00000020, L_MPWEAPONS_262, 0x00000000, func0f1088d0pf }, // "English"
{ MENUITEMTYPE_SELECTABLE, LANGUAGE_PAL_FR, 0x00000020, L_MPWEAPONS_263, 0x00000000, func0f1088d0pf }, // "French"
{ MENUITEMTYPE_SELECTABLE, LANGUAGE_PAL_DE, 0x00000020, L_MPWEAPONS_264, 0x00000000, func0f1088d0pf }, // "German"
{ MENUITEMTYPE_SELECTABLE, LANGUAGE_PAL_IT, 0x00000020, L_MPWEAPONS_265, 0x00000000, func0f1088d0pf }, // "Italian"
{ MENUITEMTYPE_SELECTABLE, LANGUAGE_PAL_ES, 0x00000020, L_MPWEAPONS_266, 0x00000000, func0f1088d0pf }, // "Spanish"
{ MENUITEMTYPE_SELECTABLE, LANGUAGE_PAL_EN, 0x00000020, L_MPWEAPONS_262, 0x00000000, filemgrHandleSetLanguage }, // "English"
{ MENUITEMTYPE_SELECTABLE, LANGUAGE_PAL_FR, 0x00000020, L_MPWEAPONS_263, 0x00000000, filemgrHandleSetLanguage }, // "French"
{ MENUITEMTYPE_SELECTABLE, LANGUAGE_PAL_DE, 0x00000020, L_MPWEAPONS_264, 0x00000000, filemgrHandleSetLanguage }, // "German"
{ MENUITEMTYPE_SELECTABLE, LANGUAGE_PAL_IT, 0x00000020, L_MPWEAPONS_265, 0x00000000, filemgrHandleSetLanguage }, // "Italian"
{ MENUITEMTYPE_SELECTABLE, LANGUAGE_PAL_ES, 0x00000020, L_MPWEAPONS_266, 0x00000000, filemgrHandleSetLanguage }, // "Spanish"
{ MENUITEMTYPE_END, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000 },
};

View File

@ -85,7 +85,7 @@ void fmbReset(void)
menuPushRootDialog(&g_FilemgrFileSelect4MbMenuDialog, MENUROOT_4MBFILEMGR);
#if PAL
if (g_Vars.unk000482 >= 6) {
if (g_Vars.language >= 6) {
menuPushDialog(&g_ChooseLanguageMenuDialog);
}
#endif

View File

@ -120,21 +120,21 @@ void gamefileApplyOptions(struct gamefile *file)
g_Vars.antiradaron = pakHasBitflag(GAMEFILEFLAG_ANTIRADARON, file->flags) ? 1 : 0;
#if VERSION >= VERSION_PAL_BETA
g_Vars.unk000482 = 0;
g_Vars.language = 0;
if (pakHasBitflag(GAMEFILEFLAG_44, file->flags)) {
g_Vars.unk000482 |= 0x01;
if (pakHasBitflag(GAMEFILEFLAG_LANGBIT1, file->flags)) {
g_Vars.language |= 0x01;
}
if (pakHasBitflag(GAMEFILEFLAG_45, file->flags)) {
g_Vars.unk000482 |= 0x02;
if (pakHasBitflag(GAMEFILEFLAG_LANGBIT2, file->flags)) {
g_Vars.language |= 0x02;
}
if (pakHasBitflag(GAMEFILEFLAG_46, file->flags)) {
g_Vars.unk000482 |= 0x04;
if (pakHasBitflag(GAMEFILEFLAG_LANGBIT3, file->flags)) {
g_Vars.language |= 0x04;
}
langSetEuropean(g_Vars.unk000482);
langSetEuropean(g_Vars.language);
#endif
}
@ -216,9 +216,9 @@ void gamefileLoadDefaults(struct gamefile *file)
pakSetBitflag(GAMEFILEFLAG_ANTIPLAYERNUM, file->flags, 1);
#if VERSION >= VERSION_PAL_BETA
pakSetBitflag(GAMEFILEFLAG_44, g_GameFile.flags, ((g_Vars.unk000482 & 0x01) == 0x01));
pakSetBitflag(GAMEFILEFLAG_45, g_GameFile.flags, ((g_Vars.unk000482 & 0x02) == 0x02));
pakSetBitflag(GAMEFILEFLAG_46, g_GameFile.flags, ((g_Vars.unk000482 & 0x04) == 0x04));
pakSetBitflag(GAMEFILEFLAG_LANGBIT1, g_GameFile.flags, ((g_Vars.language & 0x01) == 0x01));
pakSetBitflag(GAMEFILEFLAG_LANGBIT2, g_GameFile.flags, ((g_Vars.language & 0x02) == 0x02));
pakSetBitflag(GAMEFILEFLAG_LANGBIT3, g_GameFile.flags, ((g_Vars.language & 0x04) == 0x04));
#endif
file->unk1e = 0;
@ -455,9 +455,9 @@ s32 gamefileSave(s32 device, s32 fileid, u16 deviceserial)
pakSetBitflag(GAMEFILEFLAG_ANTIRADARON, g_GameFile.flags, g_Vars.antiradaron == 1);
#if VERSION >= VERSION_PAL_BETA
pakSetBitflag(GAMEFILEFLAG_44, g_GameFile.flags, (g_Vars.unk000482 & 0x01) == 0x01);
pakSetBitflag(GAMEFILEFLAG_45, g_GameFile.flags, (g_Vars.unk000482 & 0x02) == 0x02);
pakSetBitflag(GAMEFILEFLAG_46, g_GameFile.flags, (g_Vars.unk000482 & 0x04) == 0x04);
pakSetBitflag(GAMEFILEFLAG_LANGBIT1, g_GameFile.flags, (g_Vars.language & 0x01) == 0x01);
pakSetBitflag(GAMEFILEFLAG_LANGBIT2, g_GameFile.flags, (g_Vars.language & 0x02) == 0x02);
pakSetBitflag(GAMEFILEFLAG_LANGBIT3, g_GameFile.flags, (g_Vars.language & 0x04) == 0x04);
#endif
if (device >= 0) {

View File

@ -1091,9 +1091,9 @@
#define GAMEFILEFLAG_FOUNDTIMEDMINE 0x41
#define GAMEFILEFLAG_FOUNDPROXYMINE 0x42
#define GAMEFILEFLAG_FOUNDREMOTEMINE 0x43
#define GAMEFILEFLAG_44 0x44
#define GAMEFILEFLAG_45 0x45
#define GAMEFILEFLAG_46 0x46
#define GAMEFILEFLAG_LANGBIT1 0x44
#define GAMEFILEFLAG_LANGBIT2 0x45
#define GAMEFILEFLAG_LANGBIT3 0x46
#define GAMEFILEFLAG_HOWTO_HOVERCRATE 0x47
#define GAMEFILEFLAG_HOWTO_HOVERBIKE 0x48
#define GAMEFILEFLAG_HOWTO_DOORS 0x49

View File

@ -191,7 +191,7 @@ struct g_vars {
/*000478*/ bool aibuddiesspawned;
/*00047c*/ s32 bossfileid;
/*000480*/ u16 bossdeviceserial;
/*000482*/ u16 unk000482;
/*000482*/ u16 language;
/*000484*/ s32 mphilltime;
/*000488*/ s32 totalkills;
/*00048c*/ bool unk00048c;