diff --git a/src/game/bossfile.c b/src/game/bossfile.c index 00f1d98d0..3838a5f4b 100644 --- a/src/game/bossfile.c +++ b/src/game/bossfile.c @@ -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; diff --git a/src/game/filemgr.c b/src/game/filemgr.c index 2a41b2fa9..e8e5f1ef6 100644 --- a/src/game/filemgr.c +++ b/src/game/filemgr.c @@ -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 }, }; diff --git a/src/game/fmb.c b/src/game/fmb.c index 0abe9fb7b..18b1f7a69 100644 --- a/src/game/fmb.c +++ b/src/game/fmb.c @@ -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 diff --git a/src/game/gamefile.c b/src/game/gamefile.c index 3c821e8ef..07fe54a2c 100644 --- a/src/game/gamefile.c +++ b/src/game/gamefile.c @@ -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) { diff --git a/src/include/constants.h b/src/include/constants.h index 7a4ff8d91..884efb0fa 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -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 diff --git a/src/include/types.h b/src/include/types.h index 9afba6cfe..a3f74262d 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -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;