diff --git a/src/game/endscreen.c b/src/game/endscreen.c index fdf825bb4..6e965e21d 100644 --- a/src/game/endscreen.c +++ b/src/game/endscreen.c @@ -315,7 +315,7 @@ char *menuTitleStageCompleted(struct menuitem *item) { #if VERSION >= VERSION_NTSC_1_0 sprintf(g_StringPointer, "%s: %s\n", - langGet(g_StageNames[g_Menus[g_MpPlayerNum].data.endscreen.stageindex].name3), + langGet(g_StageNames[g_Menus[g_MpPlayerNum].endscreen.stageindex].name3), langGet(L_OPTIONS_276)); // "Completed" #else sprintf(g_StringPointer, "%s: %s\n", @@ -533,7 +533,7 @@ void endscreenHandleContinue(s32 context) menuPopDialog(); } else { if (g_Vars.stagenum == STAGE_DEEPSEA || g_Vars.stagenum == STAGE_SKEDARRUINS) { - if (context == 2 || g_Menus[g_MpPlayerNum].data.endscreen.isfirstcompletion) { + if (context == 2 || g_Menus[g_MpPlayerNum].endscreen.isfirstcompletion) { // Pressed continue if (g_Vars.stagenum == STAGE_DEEPSEA) { if (!isStageDifficultyUnlocked(g_MissionConfig.stageindex + 1, g_MissionConfig.difficulty)) { @@ -625,7 +625,7 @@ void endscreenHandleContinue(s32 context) s32 menudialogSolo2PEndscreenCompleted(s32 operation, struct menudialog *dialog, union handlerdata *data) { if (operation == MENUOP_OPEN) { - g_Menus[g_MpPlayerNum].data.endscreen.unke1c = 0; + g_Menus[g_MpPlayerNum].endscreen.unke1c = 0; } if (operation == MENUOP_TICK) { @@ -635,15 +635,15 @@ s32 menudialogSolo2PEndscreenCompleted(s32 operation, struct menudialog *dialog, struct menuinputs *inputs = data->dialog2.inputs; if (inputs->select || inputs->back || inputs->start) { - g_Menus[g_MpPlayerNum].data.endscreen.unke1c = 6; + g_Menus[g_MpPlayerNum].endscreen.unke1c = 6; } - if (g_Menus[g_MpPlayerNum].data.endscreen.unke1c) { + if (g_Menus[g_MpPlayerNum].endscreen.unke1c) { if (var8009dfc0) { - g_Menus[g_MpPlayerNum].data.endscreen.unke1c--; + g_Menus[g_MpPlayerNum].endscreen.unke1c--; } - if (g_Menus[g_MpPlayerNum].data.endscreen.unke1c == 0) { + if (g_Menus[g_MpPlayerNum].endscreen.unke1c == 0) { endscreenHandleContinue(0); } } @@ -911,7 +911,7 @@ glabel menudialogSolo2PEndscreenCompleted s32 menudialogSolo2PEndscreenFailed(s32 operation, struct menudialog *dialog, union handlerdata *data) { if (operation == MENUOP_OPEN) { - g_Menus[g_MpPlayerNum].data.endscreen.unke1c = 0; + g_Menus[g_MpPlayerNum].endscreen.unke1c = 0; } if (operation == MENUOP_TICK) { @@ -921,15 +921,15 @@ s32 menudialogSolo2PEndscreenFailed(s32 operation, struct menudialog *dialog, un struct menuinputs *inputs = data->dialog2.inputs; if (inputs->select || inputs->back || inputs->start) { - g_Menus[g_MpPlayerNum].data.endscreen.unke1c = 6; + g_Menus[g_MpPlayerNum].endscreen.unke1c = 6; } - if (g_Menus[g_MpPlayerNum].data.endscreen.unke1c) { + if (g_Menus[g_MpPlayerNum].endscreen.unke1c) { if (var8009dfc0) { - g_Menus[g_MpPlayerNum].data.endscreen.unke1c--; + g_Menus[g_MpPlayerNum].endscreen.unke1c--; } - if (g_Menus[g_MpPlayerNum].data.endscreen.unke1c == 0) { + if (g_Menus[g_MpPlayerNum].endscreen.unke1c == 0) { if (g_Vars.antiplayernum >= 0 || (g_Vars.coopplayernum >= 0 && PLAYERCOUNT() >= 2) || stageGetIndex(g_MissionConfig.stagenum) < 0 @@ -1021,14 +1021,14 @@ struct menuitem g_MissionEndscreenMenuItems[] = { s32 menuhandlerEndscreenCheats(s32 operation, struct menuitem *item, union handlerdata *data) { if (operation == MENUOP_GETCOLOUR - && ((g_Menus[g_MpPlayerNum].data.endscreen.cheatinfo & 0x200) || item->param == 5)) { + && ((g_Menus[g_MpPlayerNum].endscreen.cheatinfo & 0x200) || item->param == 5)) { // Timed cheat just got unlocked, and this item is the timed cheat name u32 weight = func0f006b08(40) * 255; func0000db30("ctcol", &g_CheatColour); if (item->param == 0 - && cheatGetTime(g_Menus[g_MpPlayerNum].data.endscreen.cheatinfo & 0xff) == 0) { + && cheatGetTime(g_Menus[g_MpPlayerNum].endscreen.cheatinfo & 0xff) == 0) { return 0; } @@ -1045,7 +1045,7 @@ s32 menuhandlerEndscreenCheats(s32 operation, struct menuitem *item, union handl if (operation == MENUOP_CHECKHIDDEN) { if (item->param == 1) { // target time - u32 info = g_Menus[g_MpPlayerNum].data.endscreen.cheatinfo; + u32 info = g_Menus[g_MpPlayerNum].endscreen.cheatinfo; if (info & 0x800) { // completion cheat just got unlocked return true; @@ -1059,19 +1059,19 @@ s32 menuhandlerEndscreenCheats(s32 operation, struct menuitem *item, union handl } return true; - } else if (item->param == 2 && (g_Menus[g_MpPlayerNum].data.endscreen.cheatinfo & 0xa00) == 0) { + } else if (item->param == 2 && (g_Menus[g_MpPlayerNum].endscreen.cheatinfo & 0xa00) == 0) { // new cheat available return true; - } else if (item->param == 3 && (g_Menus[g_MpPlayerNum].data.endscreen.cheatinfo & 0x200) == 0) { + } else if (item->param == 3 && (g_Menus[g_MpPlayerNum].endscreen.cheatinfo & 0x200) == 0) { // completion cheat name return true; - } else if (item->param == 4 && (g_Menus[g_MpPlayerNum].data.endscreen.cheatinfo & 0xa00)) { + } else if (item->param == 4 && (g_Menus[g_MpPlayerNum].endscreen.cheatinfo & 0xa00)) { // others (shots) return true; - } else if (item->param == 6 && (g_Menus[g_MpPlayerNum].data.endscreen.cheatinfo & 0xa00) == 0xa00) { + } else if (item->param == 6 && (g_Menus[g_MpPlayerNum].endscreen.cheatinfo & 0xa00) == 0xa00) { // limb shots return true; - } else if (item->param == 5 && (g_Menus[g_MpPlayerNum].data.endscreen.cheatinfo & 0x800) == 0) { + } else if (item->param == 5 && (g_Menus[g_MpPlayerNum].endscreen.cheatinfo & 0x800) == 0) { // timed cheat name return true; } @@ -1084,8 +1084,8 @@ s32 menuhandlerEndscreenCheats(s32 operation, struct menuitem *item, union handl #if VERSION >= VERSION_NTSC_1_0 char *soloMenuTextTimedCheatName(struct menuitem *item) { - if (g_Menus[g_MpPlayerNum].data.endscreen.cheatinfo & 0x00000300) { - return cheatGetName(g_Menus[g_MpPlayerNum].data.endscreen.cheatinfo & 0xff); + if (g_Menus[g_MpPlayerNum].endscreen.cheatinfo & 0x00000300) { + return cheatGetName(g_Menus[g_MpPlayerNum].endscreen.cheatinfo & 0xff); } return NULL; @@ -1095,8 +1095,8 @@ char *soloMenuTextTimedCheatName(struct menuitem *item) #if VERSION >= VERSION_NTSC_1_0 char *soloMenuTextCompletionCheatName(struct menuitem *item) { - if (g_Menus[g_MpPlayerNum].data.endscreen.cheatinfo & 0x00000800) { - return cheatGetName((g_Menus[g_MpPlayerNum].data.endscreen.cheatinfo >> 16) & 0xff); + if (g_Menus[g_MpPlayerNum].endscreen.cheatinfo & 0x00000800) { + return cheatGetName((g_Menus[g_MpPlayerNum].endscreen.cheatinfo >> 16) & 0xff); } return NULL; @@ -1162,11 +1162,11 @@ const char var7f1b38bc[] = "\n"; //{ // s32 time; // -// if ((g_Menus[g_MpPlayerNum].data.endscreen.cheatinfo & 0x00000100) == 0) { +// if ((g_Menus[g_MpPlayerNum].endscreen.cheatinfo & 0x00000100) == 0) { // return NULL; // } // -// time = cheatGetTime(g_Menus[g_MpPlayerNum].data.endscreen.cheatinfo & 0xff); +// time = cheatGetTime(g_Menus[g_MpPlayerNum].endscreen.cheatinfo & 0xff); // // if (!time) { // return NULL; @@ -1183,7 +1183,7 @@ void endscreenSetCoopCompleted(void) if (g_CheatsActiveBank0 == 0 && g_CheatsActiveBank1 == 0) { #if VERSION >= VERSION_NTSC_1_0 if (g_GameFile.coopcompletions[g_MissionConfig.difficulty] & (1 << g_MissionConfig.stageindex)) { - g_Menus[g_MpPlayerNum].data.endscreen.isfirstcompletion = true; + g_Menus[g_MpPlayerNum].endscreen.isfirstcompletion = true; } #endif @@ -1222,11 +1222,11 @@ void endscreenPrepare(void) u16 prevbest; bool nowunlocked; - g_Menus[g_MpPlayerNum].data.endscreen.stageindex = g_MissionConfig.stageindex; + g_Menus[g_MpPlayerNum].endscreen.stageindex = g_MissionConfig.stageindex; if (g_MenuData.root != MENUROOT_ENDSCREEN && g_Vars.mplayerisrunning == false) { - g_Menus[g_MpPlayerNum].data.endscreen.cheatinfo = 0; - g_Menus[g_MpPlayerNum].data.endscreen.isfirstcompletion = false; + g_Menus[g_MpPlayerNum].endscreen.cheatinfo = 0; + g_Menus[g_MpPlayerNum].endscreen.isfirstcompletion = false; g_Menus[g_MpPlayerNum].playernum = 0; // Set cheat info @@ -1237,11 +1237,11 @@ void endscreenPrepare(void) complcheatid = cheatGetByCompletedStageIndex(g_MissionConfig.stageindex); if (timedcheatid >= 0) { - g_Menus[g_MpPlayerNum].data.endscreen.cheatinfo = 0x0100 | timedcheatid; + g_Menus[g_MpPlayerNum].endscreen.cheatinfo = 0x0100 | timedcheatid; } if (complcheatid >= 0) { - g_Menus[g_MpPlayerNum].data.endscreen.cheatinfo |= 0x1000 | (complcheatid << 16); + g_Menus[g_MpPlayerNum].endscreen.cheatinfo |= 0x1000 | (complcheatid << 16); } } @@ -1263,17 +1263,17 @@ void endscreenPrepare(void) complalreadyunlocked = false; // If there's a timed cheat for this stage + difficulty - if (g_Menus[g_MpPlayerNum].data.endscreen.cheatinfo & 0x100) { - timedalreadyunlocked = cheatIsUnlocked(g_Menus[g_MpPlayerNum].data.endscreen.cheatinfo & 0xff); + if (g_Menus[g_MpPlayerNum].endscreen.cheatinfo & 0x100) { + timedalreadyunlocked = cheatIsUnlocked(g_Menus[g_MpPlayerNum].endscreen.cheatinfo & 0xff); if (timedalreadyunlocked) { - g_Menus[g_MpPlayerNum].data.endscreen.cheatinfo |= 0x400; + g_Menus[g_MpPlayerNum].endscreen.cheatinfo |= 0x400; } } // If there's a completion cheat for this stage (ie. not a special stage) - if (g_Menus[g_MpPlayerNum].data.endscreen.cheatinfo & 0x1000) { - complalreadyunlocked = cheatIsUnlocked((g_Menus[g_MpPlayerNum].data.endscreen.cheatinfo >> 16) & 0xff); + if (g_Menus[g_MpPlayerNum].endscreen.cheatinfo & 0x1000) { + complalreadyunlocked = cheatIsUnlocked((g_Menus[g_MpPlayerNum].endscreen.cheatinfo >> 16) & 0xff); } // Update total mission time @@ -1315,7 +1315,7 @@ void endscreenPrepare(void) prevbest = g_GameFile.besttimes[g_MissionConfig.stageindex][g_MissionConfig.difficulty]; if (prevbest == 0) { - g_Menus[g_MpPlayerNum].data.endscreen.isfirstcompletion = true; + g_Menus[g_MpPlayerNum].endscreen.isfirstcompletion = true; } if (secs < prevbest || prevbest == 0) { @@ -1339,19 +1339,19 @@ void endscreenPrepare(void) } } - if (g_Menus[g_MpPlayerNum].data.endscreen.cheatinfo & 0x100) { - nowunlocked = cheatIsUnlocked(g_Menus[g_MpPlayerNum].data.endscreen.cheatinfo & 0xff); + if (g_Menus[g_MpPlayerNum].endscreen.cheatinfo & 0x100) { + nowunlocked = cheatIsUnlocked(g_Menus[g_MpPlayerNum].endscreen.cheatinfo & 0xff); if (!timedalreadyunlocked && nowunlocked) { - g_Menus[g_MpPlayerNum].data.endscreen.cheatinfo |= 0x0200; + g_Menus[g_MpPlayerNum].endscreen.cheatinfo |= 0x0200; } } - if (g_Menus[g_MpPlayerNum].data.endscreen.cheatinfo & 0x1000) { - nowunlocked = cheatIsUnlocked((g_Menus[g_MpPlayerNum].data.endscreen.cheatinfo >> 16) & 0xff); + if (g_Menus[g_MpPlayerNum].endscreen.cheatinfo & 0x1000) { + nowunlocked = cheatIsUnlocked((g_Menus[g_MpPlayerNum].endscreen.cheatinfo >> 16) & 0xff); if (!complalreadyunlocked && nowunlocked) { - g_Menus[g_MpPlayerNum].data.endscreen.cheatinfo |= 0x0800; + g_Menus[g_MpPlayerNum].endscreen.cheatinfo |= 0x0800; } } @@ -1365,7 +1365,7 @@ void endscreenPrepare(void) } } - func0f1094e4(&g_GameFileGuid, FILEOP_SAVE_GAME_000, 0); + filemgrSaveOrLoad(&g_GameFileGuid, FILEOP_SAVE_GAME_000, 0); } if (g_MenuData.root == MENUROOT_ENDSCREEN) { @@ -1569,7 +1569,7 @@ glabel endscreenPrepare /* f1091c8: 3c04800a */ lui $a0,0x800a /* f1091cc: 248467b0 */ addiu $a0,$a0,0x67b0 /* f1091d0: 00002825 */ or $a1,$zero,$zero -/* f1091d4: 0fc41358 */ jal func0f1094e4 +/* f1091d4: 0fc41358 */ jal filemgrSaveOrLoad /* f1091d8: 00003025 */ or $a2,$zero,$zero /* f1091dc: 3c03800a */ lui $v1,0x800a /* f1091e0: 8c635eb4 */ lw $v1,0x5eb4($v1) @@ -1637,9 +1637,9 @@ void soloPushCoopModeEndscreen(void) g_MpPlayerNum = g_Vars.currentplayerstats->mpindex; #if VERSION >= VERSION_NTSC_1_0 - g_Menus[g_MpPlayerNum].data.endscreen.cheatinfo = 0; - g_Menus[g_MpPlayerNum].data.endscreen.isfirstcompletion = false; - g_Menus[g_MpPlayerNum].data.endscreen.stageindex = g_MissionConfig.stageindex; + g_Menus[g_MpPlayerNum].endscreen.cheatinfo = 0; + g_Menus[g_MpPlayerNum].endscreen.isfirstcompletion = false; + g_Menus[g_MpPlayerNum].endscreen.stageindex = g_MissionConfig.stageindex; #endif g_Menus[g_MpPlayerNum].playernum = g_Vars.currentplayernum; @@ -1666,7 +1666,7 @@ void soloPushCoopModeEndscreen(void) } if (g_Vars.currentplayer == g_Vars.bond) { - func0f1094e4(&g_GameFileGuid, FILEOP_SAVE_GAME_000, NULL); + filemgrSaveOrLoad(&g_GameFileGuid, FILEOP_SAVE_GAME_000, 0); } g_MpPlayerNum = prevplayernum; @@ -1781,9 +1781,9 @@ void soloPushAntiModeEndscreen(void) g_MpPlayerNum = g_Vars.currentplayerstats->mpindex; #if VERSION >= VERSION_NTSC_1_0 - g_Menus[g_MpPlayerNum].data.endscreen.cheatinfo = 0; - g_Menus[g_MpPlayerNum].data.endscreen.isfirstcompletion = false; - g_Menus[g_MpPlayerNum].data.endscreen.stageindex = g_MissionConfig.stageindex; + g_Menus[g_MpPlayerNum].endscreen.cheatinfo = 0; + g_Menus[g_MpPlayerNum].endscreen.isfirstcompletion = false; + g_Menus[g_MpPlayerNum].endscreen.stageindex = g_MissionConfig.stageindex; #endif g_Menus[g_MpPlayerNum].playernum = g_Vars.currentplayernum; @@ -1806,7 +1806,7 @@ void soloPushAntiModeEndscreen(void) } } - func0f1094e4(&g_GameFileGuid, FILEOP_SAVE_GAME_000, 0); + filemgrSaveOrLoad(&g_GameFileGuid, FILEOP_SAVE_GAME_000, 0); } else { if (g_Vars.anti->aborted == 0 && (g_Vars.bond->isdead || g_Vars.bond->aborted || objectiveIsAllComplete() == false)) { diff --git a/src/game/game_01bea0.c b/src/game/game_01bea0.c index 0f4768315..53a5b6965 100644 --- a/src/game/game_01bea0.c +++ b/src/game/game_01bea0.c @@ -970,10 +970,10 @@ glabel var7f1a863c /* f01cc3c: 00000000 */ nop .PF0f01cc40: /* f01cc40: a0590000 */ sb $t9,0x0($v0) -/* f01cc44: 0fc445cf */ jal func0f110c5c +/* f01cc44: 0fc445cf */ jal filelistCreate /* f01cc48: 24050002 */ li $a1,0x2 /* f01cc4c: 02c02025 */ move $a0,$s6 -/* f01cc50: 0fc445cf */ jal func0f110c5c +/* f01cc50: 0fc445cf */ jal filelistCreate /* f01cc54: 24050001 */ li $a1,0x1 .PF0f01cc58: /* f01cc58: 3c0e8006 */ lui $t6,0x8006 @@ -2747,10 +2747,10 @@ glabel var7f1a863c /* f01cb6c: 00000000 */ nop .L0f01cb70: /* f01cb70: a04e0000 */ sb $t6,0x0($v0) -/* f01cb74: 0fc44317 */ jal func0f110c5c +/* f01cb74: 0fc44317 */ jal filelistCreate /* f01cb78: 24050002 */ addiu $a1,$zero,0x2 /* f01cb7c: 02c02025 */ or $a0,$s6,$zero -/* f01cb80: 0fc44317 */ jal func0f110c5c +/* f01cb80: 0fc44317 */ jal filelistCreate /* f01cb84: 24050001 */ addiu $a1,$zero,0x1 .L0f01cb88: /* f01cb88: 3c188006 */ lui $t8,%hi(var80062944) @@ -4515,10 +4515,10 @@ glabel var7f1a863c /* f01c84c: 00000000 */ sll $zero,$zero,0x0 .NB0f01c850: /* f01c850: a04e0000 */ sb $t6,0x0($v0) -/* f01c854: 0fc42c33 */ jal func0f110c5c +/* f01c854: 0fc42c33 */ jal filelistCreate /* f01c858: 24050002 */ addiu $a1,$zero,0x2 /* f01c85c: 02c02025 */ or $a0,$s6,$zero -/* f01c860: 0fc42c33 */ jal func0f110c5c +/* f01c860: 0fc42c33 */ jal filelistCreate /* f01c864: 24050001 */ addiu $a1,$zero,0x1 .NB0f01c868: /* f01c868: 3c188006 */ lui $t8,0x8006 @@ -5805,8 +5805,8 @@ glabel var7f1a863c // if (var80062948 == 0 && // (g_MenuData.root == MENUROOT_MPSETUP || g_MenuData.root == MENUROOT_4MBMAINMENU)) { // var80062948 = 1; -// func0f110c5c(0, FILETYPE_MPPLAYER); -// func0f110c5c(1, FILETYPE_MPSETUP); +// filelistCreate(0, FILETYPE_MPPLAYER); +// filelistCreate(1, FILETYPE_MPSETUP); // } // // if (var80062944) { diff --git a/src/game/game_0f09f0.c b/src/game/game_0f09f0.c index 442ed2e04..c4288d249 100644 --- a/src/game/game_0f09f0.c +++ b/src/game/game_0f09f0.c @@ -4831,7 +4831,7 @@ glabel func0f0f3220 /* f0f3304: 3c04800a */ lui $a0,%hi(g_GameFileGuid) /* f0f3308: 248422c0 */ addiu $a0,$a0,%lo(g_GameFileGuid) /* f0f330c: afa80024 */ sw $t0,0x24($sp) -/* f0f3310: 0fc42539 */ jal func0f1094e4 +/* f0f3310: 0fc42539 */ jal filemgrSaveOrLoad /* f0f3314: afa9001c */ sw $t1,0x1c($sp) /* f0f3318: 3c078007 */ lui $a3,%hi(g_MpPlayerNum) /* f0f331c: 24e71448 */ addiu $a3,$a3,%lo(g_MpPlayerNum) @@ -4858,7 +4858,7 @@ glabel func0f0f3220 /* f0f3368: 24050003 */ addiu $a1,$zero,0x3 /* f0f336c: 00603025 */ or $a2,$v1,$zero /* f0f3370: afa80024 */ sw $t0,0x24($sp) -/* f0f3374: 0fc42539 */ jal func0f1094e4 +/* f0f3374: 0fc42539 */ jal filemgrSaveOrLoad /* f0f3378: afad0018 */ sw $t5,0x18($sp) /* f0f337c: 8fb90018 */ lw $t9,0x18($sp) /* f0f3380: 3c078007 */ lui $a3,%hi(g_MpPlayerNum) @@ -4909,7 +4909,7 @@ glabel func0f0f3220 /* f0efe94: 248467b0 */ addiu $a0,$a0,0x67b0 /* f0efe98: 00002825 */ or $a1,$zero,$zero /* f0efe9c: 00003025 */ or $a2,$zero,$zero -/* f0efea0: 0fc41358 */ jal func0f1094e4 +/* f0efea0: 0fc41358 */ jal filemgrSaveOrLoad /* f0efea4: afa80020 */ sw $t0,0x20($sp) /* f0efea8: 8fa80020 */ lw $t0,0x20($sp) /* f0efeac: 3c078007 */ lui $a3,0x8007 @@ -4935,7 +4935,7 @@ glabel func0f0f3220 /* f0efef8: 00601025 */ or $v0,$v1,$zero /* f0efefc: 24050003 */ addiu $a1,$zero,0x3 /* f0eff00: 00603025 */ or $a2,$v1,$zero -/* f0eff04: 0fc41358 */ jal func0f1094e4 +/* f0eff04: 0fc41358 */ jal filemgrSaveOrLoad /* f0eff08: afb8001c */ sw $t8,0x1c($sp) /* f0eff0c: 8fac001c */ lw $t4,0x1c($sp) /* f0eff10: 3c078007 */ lui $a3,0x8007 @@ -21929,7 +21929,7 @@ glabel var7f1b2ac8 /* f0fb010: afab00f0 */ sw $t3,0xf0($sp) /* f0fb014: afac012c */ sw $t4,0x12c($sp) /* f0fb018: afae00cc */ sw $t6,0xcc($sp) -/* f0fb01c: 0fc42793 */ jal func0f1094e4 +/* f0fb01c: 0fc42793 */ jal filemgrSaveOrLoad /* f0fb020: a7af00d0 */ sh $t7,0xd0($sp) /* f0fb024: 8fa80124 */ lw $t0,0x124($sp) /* f0fb028: 8fa90128 */ lw $t1,0x128($sp) @@ -22980,7 +22980,7 @@ glabel var7f1b2ac8 /* f0fa8d4: afab00f0 */ sw $t3,0xf0($sp) /* f0fa8d8: afac012c */ sw $t4,0x12c($sp) /* f0fa8dc: afae00cc */ sw $t6,0xcc($sp) -/* f0fa8e0: 0fc42539 */ jal func0f1094e4 +/* f0fa8e0: 0fc42539 */ jal filemgrSaveOrLoad /* f0fa8e4: a7af00d0 */ sh $t7,0xd0($sp) /* f0fa8e8: 8fa80124 */ lw $t0,0x124($sp) /* f0fa8ec: 8fa90128 */ lw $t1,0x128($sp) @@ -27492,7 +27492,7 @@ s32 menudialog000fcd48(s32 operation, struct menudialog *dialog, union handlerda if (operation == MENUOP_TICK) { if (g_Menus[g_MpPlayerNum].curframe && g_Menus[g_MpPlayerNum].curframe->dialog == dialog - && joy000155b4(g_Menus[g_MpPlayerNum].savedevice) == 0) { + && joy000155b4(g_Menus[g_MpPlayerNum].fm.device3) == 0) { func0f0f3704(&g_PakRemovedMenuDialog); } } @@ -27524,7 +27524,7 @@ glabel func0f0fcdd0 s32 menuhandlerRepairPak(s32 operation, struct menuitem *item, union handlerdata *data) { if (operation == MENUOP_SET) { - if (pakRepair(g_Menus[g_MpPlayerNum].savedevice)) { + if (pakRepair(g_Menus[g_MpPlayerNum].fm.device3)) { func0f0f3704(&g_PakRepairSuccessMenuDialog); } else { func0f0f3704(&g_PakRepairFailedMenuDialog); @@ -27703,8 +27703,8 @@ char *menuTextSaveDeviceName(struct menuitem *item) #endif }; - if ((u8)g_Menus[g_MpPlayerNum].savedevice < ARRAYCOUNT(devices)) { - return langGet(devices[(u8)g_Menus[g_MpPlayerNum].savedevice]); + if ((u8)g_Menus[g_MpPlayerNum].fm.device3 < ARRAYCOUNT(devices)) { + return langGet(devices[(u8)g_Menus[g_MpPlayerNum].fm.device3]); } return NULL; @@ -27717,7 +27717,7 @@ s32 menuhandlerRetrySavePak(s32 operation, struct menuitem *item, union handlerd menuPopDialog(); g_Vars.unk0004e4 &= 0xfff0; g_Vars.unk0004e4 |= 8; - g_Vars.unk0004e4 |= 1 << ((u8)g_Menus[g_MpPlayerNum].savedevice + 8); + g_Vars.unk0004e4 |= 1 << ((u8)g_Menus[g_MpPlayerNum].fm.device3 + 8); } return 0; diff --git a/src/game/game_102240.c b/src/game/game_102240.c index 2e3286ebf..e85986620 100644 --- a/src/game/game_102240.c +++ b/src/game/game_102240.c @@ -103,11 +103,11 @@ s32 menuhandlerControlStyleImpl(s32 operation, struct menuitem *item, union hand break; case MENUOP_GETOPTIONVALUE: data->list.value = optionsGetControlMode(mpindex); - g_Menus[g_MpPlayerNum].data.main.mpindex = mpindex; + g_Menus[g_MpPlayerNum].main.mpindex = mpindex; break; case MENUOP_LISTITEMFOCUS: if (g_MenuData.root == MENUROOT_MAINMENU) { - g_Menus[g_MpPlayerNum].data.main.controlmode = data->list.value; + g_Menus[g_MpPlayerNum].main.controlmode = data->list.value; } break; } @@ -4147,7 +4147,7 @@ s32 menudialog0010559c(s32 operation, struct menudialog *dialog, union handlerda break; case MENUOP_CLOSE: if ((g_Vars.modifiedfiles & MODFILE_GAME) && g_Vars.coopplayernum < 0 && g_Vars.antiplayernum < 0) { - if (func0f1094e4(&g_GameFileGuid, FILEOP_SAVE_GAME_001, 0) == 0) { + if (filemgrSaveOrLoad(&g_GameFileGuid, FILEOP_SAVE_GAME_001, 0) == 0) { data->dialog1.preventclose = true; } @@ -4248,7 +4248,7 @@ s32 menuhandlerControlStyle(s32 operation, struct menuitem *item, union handlerd s32 menuhandler001057ec(s32 operation, struct menuitem *item, union handlerdata *data) { if (operation == MENUOP_SET) { - func0f1094e4(&g_GameFileGuid, FILEOP_SAVE_GAME_002, 0); + filemgrSaveOrLoad(&g_GameFileGuid, FILEOP_SAVE_GAME_002, 0); } return 0; @@ -5786,7 +5786,7 @@ s32 menudialogMainMenu(s32 operation, struct menudialog *dialog, union handlerda { switch (operation) { case MENUOP_OPEN: - g_Menus[g_MpPlayerNum].data.main.unke2c = 0; + g_Menus[g_MpPlayerNum].main.unke2c = 0; break; case MENUOP_TICK: if (g_Menus[g_MpPlayerNum].curframe && @@ -5875,34 +5875,30 @@ bool soloChoosePauseDialog(void) } handled = true; - } else { - if (room == CIROOM_DEVICEROOM) { - if (dtdata->intraining) { - menuPushRootDialog(&g_DtDetailsMenuDialog, MENUROOT_TRAINING); - } else if (dtdata->finished) { - dtPushEndscreen(); - } else { - menuPushRootDialog(&g_DtListMenuDialog, MENUROOT_TRAINING); - } - - handled = true; + } else if (room == CIROOM_DEVICEROOM) { + if (dtdata->intraining) { + menuPushRootDialog(&g_DtDetailsMenuDialog, MENUROOT_TRAINING); + } else if (dtdata->finished) { + dtPushEndscreen(); } else { - if (dtdata->intraining) { - menuPushRootDialog(&g_DtDetailsMenuDialog, MENUROOT_TRAINING); - handled = true; - } else if (dtdata->finished) { - dtPushEndscreen(); - handled = true; - } else if (room == CIROOM_FIRINGRANGE) { - if (frIsInTraining()) { - menuPushRootDialog(&g_FrTrainingInfoInGameMenuDialog, MENUROOT_TRAINING); - } else { - menuPushRootDialog(&g_FrWeaponListMenuDialog, MENUROOT_TRAINING); - } - - handled = true; - } + menuPushRootDialog(&g_DtListMenuDialog, MENUROOT_TRAINING); } + + handled = true; + } else if (dtdata->intraining) { + menuPushRootDialog(&g_DtDetailsMenuDialog, MENUROOT_TRAINING); + handled = true; + } else if (dtdata->finished) { + dtPushEndscreen(); + handled = true; + } else if (room == CIROOM_FIRINGRANGE) { + if (frIsInTraining()) { + menuPushRootDialog(&g_FrTrainingInfoInGameMenuDialog, MENUROOT_TRAINING); + } else { + menuPushRootDialog(&g_FrWeaponListMenuDialog, MENUROOT_TRAINING); + } + + handled = true; } } diff --git a/src/game/game_107fb0.c b/src/game/game_107fb0.c index 038770e9c..45e003da0 100644 --- a/src/game/game_107fb0.c +++ b/src/game/game_107fb0.c @@ -117,7 +117,7 @@ char *filemgrGetDeviceName(s32 index) s32 filemgrDeviceNameMenuHandler(s32 operation, struct menuitem *item, union handlerdata *data) { if (operation == MENUOP_CHECKHIDDEN) { - if ((g_Menus[g_MpPlayerNum].unke3c & 0x7f) >= SAVEDEVICE_INVALID) { + if ((g_Menus[g_MpPlayerNum].fm.device1 & 0x7f) >= SAVEDEVICE_INVALID) { return true; } } @@ -127,7 +127,7 @@ s32 filemgrDeviceNameMenuHandler(s32 operation, struct menuitem *item, union han char *filemgrMenuTextDeviceName(struct menuitem *item) { - return filemgrGetDeviceName(g_Menus[g_MpPlayerNum].unke3c & 0x7f); + return filemgrGetDeviceName(g_Menus[g_MpPlayerNum].fm.device1 & 0x7f); } void filemgrGetSelectName(char *buffer, struct filelistfile *file, u32 filetype) @@ -145,11 +145,11 @@ void filemgrGetSelectName(char *buffer, struct filelistfile *file, u32 filetype) switch (filetype) { case FILETYPE_GAME: case FILETYPE_MPSETUP: - func0f0d564c(file->unk06, tmpbuffer1, false); + func0f0d564c(file->name, tmpbuffer1, false); break; case FILETYPE_MPPLAYER: // MP Player filenames have the play duration appended to the name - mpplayerfileGetOverview(file->unk06, namebuffer, &totalinseconds); + mpplayerfileGetOverview(file->name, namebuffer, &totalinseconds); pos = sprintf(tmpbuffer1, "%s-", namebuffer); if (totalinseconds >= 0x7ffffff) { // about 4.25 years @@ -179,12 +179,13 @@ void filemgrGetSelectName(char *buffer, struct filelistfile *file, u32 filetype) const char var7f1b2f28[] = "Setup: item = %x\n"; #endif -const u32 var7f1b2f3c[] = {0xa0, 0x31, 0x4e, 0x4a0}; +// game, mpsetup, mpplayer, perfect head +const u32 g_FileTypeSizes[] = {0xa0, 0x31, 0x4e, 0x4a0}; s32 filemgrFileNameMenuHandler(s32 operation, struct menuitem *item, union handlerdata *data) { if (operation == MENUOP_CHECKHIDDEN) { - if (g_Menus[g_MpPlayerNum].unke38 == 0) { + if (g_Menus[g_MpPlayerNum].fm.filetodelete == 0) { return true; } } @@ -194,60 +195,60 @@ s32 filemgrFileNameMenuHandler(s32 operation, struct menuitem *item, union handl char *filemgrMenuTextDeleteFileName(struct menuitem *item) { - if (g_Menus[g_MpPlayerNum].unke38) { + if (g_Menus[g_MpPlayerNum].fm.filetodelete) { filemgrGetSelectName(g_StringPointer, - g_Menus[g_MpPlayerNum].unke38, - g_Menus[g_MpPlayerNum].unke3d); + g_Menus[g_MpPlayerNum].fm.filetodelete, + g_Menus[g_MpPlayerNum].fm.filetypetodelete); return g_StringPointer; } return NULL; } -void func0f108324(s32 deviceserial) +void filemgrSetDevice1BySerial(s32 deviceserial) { s32 device = pakFindBySerial(deviceserial); if (device >= 0) { - g_Menus[g_MpPlayerNum].unke3c = device; + g_Menus[g_MpPlayerNum].fm.device1 = device; } else { - g_Menus[g_MpPlayerNum].unke3c = SAVEDEVICE_INVALID; + g_Menus[g_MpPlayerNum].fm.device1 = SAVEDEVICE_INVALID; } } -void func0f1083b0(struct filelistfile *file) +void filemgrSetDevice1ByFile(struct filelistfile *file) { - func0f108324(file->deviceserial); + filemgrSetDevice1BySerial(file->deviceserial); } -void func0f1083d0(struct filelistfile *file, s32 filetype) +void filemgrSetFileToDelete(struct filelistfile *file, s32 filetype) { - g_Menus[g_MpPlayerNum].unke3d = filetype; - g_Menus[g_MpPlayerNum].unke38 = file; - func0f1083b0(file); + g_Menus[g_MpPlayerNum].fm.filetypetodelete = filetype; + g_Menus[g_MpPlayerNum].fm.filetodelete = file; + filemgrSetDevice1ByFile(file); } -u16 g_PakFailReasons[] = { - L_OPTIONS_322, // "The Controller Pak was not found in any controller." - L_OPTIONS_323, // "File was not saved." - L_OPTIONS_324, // "File would not load." - L_OPTIONS_325, // "Could not delete the file." - L_OPTIONS_326, // "Out of memory." - L_OPTIONS_327, // "This player is already loaded for this game." - L_OPTIONS_328, // "has been removed." - L_OPTIONS_329, // "Controller Pak is damaged or incorrectly inserted." - L_OPTIONS_330, // "Game note delete failed." -}; - char *filemgrMenuTextFailReason(struct menuitem *item) { - return langGet(g_PakFailReasons[g_Menus[g_MpPlayerNum].errno]); + static u16 reasons[] = { + L_OPTIONS_322, // "The Controller Pak was not found in any controller." + L_OPTIONS_323, // "File was not saved." + L_OPTIONS_324, // "File would not load." + L_OPTIONS_325, // "Could not delete the file." + L_OPTIONS_326, // "Out of memory." + L_OPTIONS_327, // "This player is already loaded for this game." + L_OPTIONS_328, // "has been removed." + L_OPTIONS_329, // "Controller Pak is damaged or incorrectly inserted." + L_OPTIONS_330, // "Game note delete failed." + }; + + return langGet(reasons[g_Menus[g_MpPlayerNum].fm.errno]); } /** * Unused. */ -char *func0f108484(struct menuitem *item) +char *filemgr0f108484(struct menuitem *item) { sprintf(g_StringPointer, "location: controller pak 1\n"); return g_StringPointer; @@ -256,11 +257,11 @@ char *func0f108484(struct menuitem *item) s32 filemgrDeviceNameForErrorMenuHandler(s32 operation, struct menuitem *item, union handlerdata *data) { if (operation == MENUOP_CHECKHIDDEN) { - if ((g_Menus[g_MpPlayerNum].unke3c & 0x7f) >= SAVEDEVICE_INVALID) { + if ((g_Menus[g_MpPlayerNum].fm.device1 & 0x7f) >= SAVEDEVICE_INVALID) { return true; } - switch (g_Menus[g_MpPlayerNum].errno) { + switch (g_Menus[g_MpPlayerNum].fm.errno) { case FILEERROR_OUTOFMEMORY: case FILEERROR_ALREADYLOADED: case FILEERROR_PAKDAMAGED: @@ -280,9 +281,9 @@ s32 filemgrDeviceNameForErrorMenuHandler(s32 operation, struct menuitem *item, u char *filemgrMenuTextDeviceNameForError(struct menuitem *item) { - sprintf(g_StringPointer, "%s", filemgrGetDeviceName(g_Menus[g_MpPlayerNum].unke3c & 0x7f)); + sprintf(g_StringPointer, "%s", filemgrGetDeviceName(g_Menus[g_MpPlayerNum].fm.device1 & 0x7f)); - if (g_Menus[g_MpPlayerNum].errno != FILEERROR_PAKREMOVED) { + if (g_Menus[g_MpPlayerNum].fm.errno != FILEERROR_PAKREMOVED) { s32 i = 0; while (g_StringPointer[i] != '\0') { @@ -311,7 +312,7 @@ const char var7f1b3034[] = "PakOperationSearch>> Search for pak: %x = %d\n"; void filemgrPushErrorDialog(u16 errno) { - g_Menus[g_MpPlayerNum].errno = errno; + g_Menus[g_MpPlayerNum].fm.errno = errno; menuPushDialog(&g_FilemgrErrorMenuDialog); } @@ -332,6 +333,10 @@ struct menudialog g_FilemgrErrorMenuDialog = { NULL, }; +/** + * For a file listing, iterate the devices until the one at optionindex is found. + * Depending on operation, return the device name or index of the first file. + */ s32 filemgrGetDeviceNameOrStartIndex(s32 listnum, s32 operation, s32 optionindex) { u16 names[] = { @@ -376,7 +381,7 @@ char *filemgrMenuTextErrorTitle(struct menuitem *item) L_OPTIONS_339, // "Error" }; - switch (g_Menus[g_MpPlayerNum].fileop) { + switch (g_Menus[g_MpPlayerNum].fm.fileop) { case FILEOP_LOAD_GAME: case FILEOP_LOAD_MPSETUP: return langGet(messages[0]); @@ -412,7 +417,7 @@ char *filemgrMenuTextFileType(struct menuitem *item) L_OPTIONS_106, // "PerfectHead Files" }; - switch (g_Menus[g_MpPlayerNum].fileop) { + switch (g_Menus[g_MpPlayerNum].fm.fileop) { case FILEOP_SAVE_GAME_000: case FILEOP_SAVE_GAME_001: case FILEOP_SAVE_GAME_002: @@ -440,14 +445,14 @@ void func0f10898c(void) { func0f0f0ca0(-1, false); - switch (g_Menus[g_MpPlayerNum].fileop) { + switch (g_Menus[g_MpPlayerNum].fm.fileop) { case FILEOP_WRITE_GAME: case FILEOP_WRITE_MPSETUP: case FILEOP_WRITE_MPPLAYER: case FILEOP_READ_GAME: case FILEOP_READ_MPSETUP: case FILEOP_READ_MPPLAYER: - func00012cb4(g_Menus[g_MpPlayerNum].unke44, align16(var7f1b2f3c[g_Menus[g_MpPlayerNum].data.filemgr.filetypeplusone - 1])); + func00012cb4(g_Menus[g_MpPlayerNum].fm.unke44, align16(g_FileTypeSizes[g_Menus[g_MpPlayerNum].fm.filetypeplusone - 1])); break; case FILEOP_LOAD_GAME: case FILEOP_LOAD_MPPLAYER: @@ -467,16 +472,16 @@ void filemgrHandleSuccess(void) { func0f0f0ca0(-1, false); - switch (g_Menus[g_MpPlayerNum].fileop) { + switch (g_Menus[g_MpPlayerNum].fm.fileop) { case FILEOP_WRITE_GAME: case FILEOP_WRITE_MPSETUP: case FILEOP_WRITE_MPPLAYER: - func00012cb4(g_Menus[g_MpPlayerNum].unke44, - align16(var7f1b2f3c[g_Menus[g_MpPlayerNum].data.filemgr.filetypeplusone - 1])); + func00012cb4(g_Menus[g_MpPlayerNum].fm.unke44, + align16(g_FileTypeSizes[g_Menus[g_MpPlayerNum].fm.filetypeplusone - 1])); break; case FILEOP_LOAD_GAME: - g_Vars.bossfilenum = g_Menus[g_MpPlayerNum].filenum; - g_Vars.bossdeviceserial = g_Menus[g_MpPlayerNum].deviceserial; + g_Vars.bossfilenum = g_Menus[g_MpPlayerNum].fm.filenum; + g_Vars.bossdeviceserial = g_Menus[g_MpPlayerNum].fm.deviceserial; bossfileSave(); if (IS4MB()) { @@ -488,9 +493,9 @@ void filemgrHandleSuccess(void) case FILEOP_READ_GAME: case FILEOP_READ_MPSETUP: case FILEOP_READ_MPPLAYER: - func0f1094e4(&var800a21e8, - g_Menus[g_MpPlayerNum].fileop - 98, - g_Menus[g_MpPlayerNum].unke44); + filemgrSaveOrLoad(&var800a21e8, + g_Menus[g_MpPlayerNum].fm.fileop - 98, + g_Menus[g_MpPlayerNum].fm.mpplayernum); break; case FILEOP_SAVE_GAME_000: case FILEOP_SAVE_GAME_001: @@ -521,7 +526,7 @@ s32 filemgrSaveElsewhereYesMenuHandler(s32 operation, struct menuitem *item, uni menuCloseDialog(); - switch (g_Menus[g_MpPlayerNum].fileop) { + switch (g_Menus[g_MpPlayerNum].fm.fileop) { case FILEOP_SAVE_GAME_000: case FILEOP_SAVE_GAME_001: case FILEOP_SAVE_GAME_002: @@ -538,7 +543,7 @@ s32 filemgrSaveElsewhereYesMenuHandler(s32 operation, struct menuitem *item, uni break; } - filemgrPushSelectLocationDialog(g_Menus[g_MpPlayerNum].fileop + 9, filetype); + filemgrPushSelectLocationDialog(g_Menus[g_MpPlayerNum].fm.fileop + 9, filetype); } return 0; @@ -558,7 +563,7 @@ s32 filemgrCancelSave2MenuHandler(s32 operation, struct menuitem *item, union ha /** * Unused. */ -s32 func0f108d14(s32 operation, struct menuitem *item, union handlerdata *data) +s32 filemgr0f108d14(s32 operation, struct menuitem *item, union handlerdata *data) { if (operation == MENUOP_SET) { filemgrRetrySave(2); @@ -584,10 +589,10 @@ void filemgrEraseCorruptFile(void) s32 device; s32 i; - device = pakFindBySerial(g_Menus[g_MpPlayerNum].deviceserial); + device = pakFindBySerial(g_Menus[g_MpPlayerNum].fm.deviceserial); if (device >= 0) { - filemgrDeleteFile(device, g_Menus[g_MpPlayerNum].filenum); + filemgrDeleteFile(device, g_Menus[g_MpPlayerNum].fm.filenum); } for (i = 0; i < 4; i++) { @@ -625,7 +630,7 @@ s32 filemgrReinsertedOkMenuHandler(s32 operation, struct menuitem *item, union h s32 filemgrReinsertedCancelMenuHandler(s32 operation, struct menuitem *item, union handlerdata *data) { if (operation == MENUOP_SET) { - if (FILEOP_IS_SAVE(g_Menus[g_MpPlayerNum].fileop) && g_Menus[g_MpPlayerNum].fileop != FILEOP_SAVE_GAME_001) { + if (FILEOP_IS_SAVE(g_Menus[g_MpPlayerNum].fm.fileop) && g_Menus[g_MpPlayerNum].fm.fileop != FILEOP_SAVE_GAME_001) { func0f0f3704(&g_FilemgrSaveElsewhereMenuDialog); } else { menuPopDialog(); @@ -672,7 +677,7 @@ char *filemgrMenuTextInsertOriginalPak(struct menuitem *item) */ void filemgrRetrySave(s32 context) { - s32 device = pakFindBySerial(g_Menus[g_MpPlayerNum].deviceserial); + s32 device = pakFindBySerial(g_Menus[g_MpPlayerNum].fm.deviceserial); if (device == -1) { if (context == 1) { @@ -684,17 +689,17 @@ void filemgrRetrySave(s32 context) } } else if (filemgrAttemptOperation(device, true)) { if (context == 2) { - g_Menus[g_MpPlayerNum].unke3c = device; + g_Menus[g_MpPlayerNum].fm.device1 = device; - if (FILEOP_IS_SAVE(g_Menus[g_MpPlayerNum].fileop)) { + if (FILEOP_IS_SAVE(g_Menus[g_MpPlayerNum].fm.fileop)) { filemgrPushErrorDialog(FILEERROR_SAVEFAILED); } else { filemgrPushErrorDialog(FILEERROR_LOADFAILED); } } else { - func0f108324(g_Menus[g_MpPlayerNum].deviceserial); + filemgrSetDevice1BySerial(g_Menus[g_MpPlayerNum].fm.deviceserial); - if (FILEOP_IS_SAVE(g_Menus[g_MpPlayerNum].fileop)) { + if (FILEOP_IS_SAVE(g_Menus[g_MpPlayerNum].fm.fileop)) { func0f0f3704(&g_FilemgrSaveErrorMenuDialog); } else { #if VERSION >= VERSION_NTSC_1_0 @@ -712,65 +717,65 @@ void filemgrRetrySave(s32 context) bool filemgrAttemptOperation(s32 device, bool closeonsuccess) { s32 errno = 0; - bool showfilesaved = (g_Menus[g_MpPlayerNum].isretryingsave & 1) != 0; + bool showfilesaved = (g_Menus[g_MpPlayerNum].fm.isretryingsave & 1) != 0; const s32 sp30[] = {0x80, 0x40, 0x20, 0x08}; s32 sp2c; - switch (g_Menus[g_MpPlayerNum].fileop) { + switch (g_Menus[g_MpPlayerNum].fm.fileop) { case FILEOP_SAVE_GAME_002: showfilesaved = true; // fall through case FILEOP_SAVE_GAME_000: case FILEOP_SAVE_GAME_001: errno = gamefileSave(device, - g_Menus[g_MpPlayerNum].filenum, - g_Menus[g_MpPlayerNum].deviceserial); + g_Menus[g_MpPlayerNum].fm.filenum, + g_Menus[g_MpPlayerNum].fm.deviceserial); break; case FILEOP_SAVE_MPPLAYER: errno = mpplayerfileSave( - (s32) g_Menus[g_MpPlayerNum].unke44, device, - g_Menus[g_MpPlayerNum].filenum, - g_Menus[g_MpPlayerNum].deviceserial); + (s32) g_Menus[g_MpPlayerNum].fm.unke44, device, + g_Menus[g_MpPlayerNum].fm.filenum, + g_Menus[g_MpPlayerNum].fm.deviceserial); break; case FILEOP_SAVE_MPSETUP: errno = mpsetupfileSave(device, - g_Menus[g_MpPlayerNum].filenum, - g_Menus[g_MpPlayerNum].deviceserial); + g_Menus[g_MpPlayerNum].fm.filenum, + g_Menus[g_MpPlayerNum].fm.deviceserial); showfilesaved = true; break; case FILEOP_WRITE_GAME: case FILEOP_WRITE_MPSETUP: case FILEOP_WRITE_MPPLAYER: sp2c = 0; - func0f0d5690(g_Menus[g_MpPlayerNum].unke44, g_Menus[g_MpPlayerNum].unke53); + func0f0d5690(g_Menus[g_MpPlayerNum].fm.unke44, g_Menus[g_MpPlayerNum].fm.filename); errno = func0f116828(device, - g_Menus[g_MpPlayerNum].filenum, - sp30[g_Menus[g_MpPlayerNum].fileop - 6], - g_Menus[g_MpPlayerNum].unke44, &sp2c, 0); - var80075bd0[g_Menus[g_MpPlayerNum].fileop - 6] = 1; + g_Menus[g_MpPlayerNum].fm.filenum, + sp30[g_Menus[g_MpPlayerNum].fm.fileop - 6], + g_Menus[g_MpPlayerNum].fm.unke44, &sp2c, 0); + var80075bd0[g_Menus[g_MpPlayerNum].fm.fileop - 6] = 1; break; case FILEOP_LOAD_GAME: errno = gamefileLoad(device); break; case FILEOP_LOAD_MPPLAYER: errno = mpplayerfileLoad( - (s32) g_Menus[g_MpPlayerNum].unke44, + (s32) g_Menus[g_MpPlayerNum].fm.unke44, device, - g_Menus[g_MpPlayerNum].filenum, - g_Menus[g_MpPlayerNum].deviceserial); + g_Menus[g_MpPlayerNum].fm.filenum, + g_Menus[g_MpPlayerNum].fm.deviceserial); break; case FILEOP_LOAD_MPSETUP: errno = mpsetupfileLoad(device, - g_Menus[g_MpPlayerNum].filenum, - g_Menus[g_MpPlayerNum].deviceserial); + g_Menus[g_MpPlayerNum].fm.filenum, + g_Menus[g_MpPlayerNum].fm.deviceserial); break; case FILEOP_READ_GAME: case FILEOP_READ_MPSETUP: case FILEOP_READ_MPPLAYER: errno = func0f116800(device, - g_Menus[g_MpPlayerNum].filenum, - g_Menus[g_MpPlayerNum].unke44, 0); + g_Menus[g_MpPlayerNum].fm.filenum, + g_Menus[g_MpPlayerNum].fm.unke44, 0); break; } @@ -778,7 +783,7 @@ bool filemgrAttemptOperation(s32 device, bool closeonsuccess) menuCloseDialog(); } - if (FILEOP_IS_SAVE(g_Menus[g_MpPlayerNum].fileop)) { + if (FILEOP_IS_SAVE(g_Menus[g_MpPlayerNum].fm.fileop)) { if (errno == 0) { filemgrHandleSuccess(); } @@ -1042,43 +1047,59 @@ const char var7f1b31d8[] = "COULD NOT DELETE\n"; const char var7f1b31ec[] = "Multiplayer %d was using that file...\n"; #endif -bool func0f1094e4(struct fileguid *guid, s32 fileop, void *arg2) +/** + * Save or load the file with the specified GUID. + * If saving, it's assumed that the file has been saved previously. + * + * fileop determines the type of file, as well as whether it's a save or load + * operation. If set to -1, the previous fileop is reused (eg. for retry). + * + * playernum is used when working with MP player files, otherwise ignored. + * + * Return true if it worked, otherwise false. + */ +bool filemgrSaveOrLoad(struct fileguid *guid, s32 fileop, u32 playernum) { s32 device; if (fileop != -1) { - g_Menus[g_MpPlayerNum].fileop = fileop; - g_Menus[g_MpPlayerNum].unke44 = arg2; - g_Menus[g_MpPlayerNum].isretryingsave = 0; + // Common case - set new fileop + g_Menus[g_MpPlayerNum].fm.fileop = fileop; + g_Menus[g_MpPlayerNum].fm.mpplayernum = playernum; + g_Menus[g_MpPlayerNum].fm.isretryingsave = 0; var800a21f8.filenum = 0; } - g_Menus[g_MpPlayerNum].filenum = guid->filenum; - g_Menus[g_MpPlayerNum].deviceserial = guid->deviceserial; + g_Menus[g_MpPlayerNum].fm.filenum = guid->filenum; + g_Menus[g_MpPlayerNum].fm.deviceserial = guid->deviceserial; if (fileop != -1) { // empty } - device = pakFindBySerial(g_Menus[g_MpPlayerNum].deviceserial); + device = pakFindBySerial(g_Menus[g_MpPlayerNum].fm.deviceserial); if (device == -1) { - g_Menus[g_MpPlayerNum].isretryingsave |= 1; + // Original pak is no longer connected + g_Menus[g_MpPlayerNum].fm.isretryingsave |= 1; menuPushDialog(&g_PakNotOriginalMenuDialog); return false; } if (filemgrAttemptOperation(device, false) != 0) { - g_Menus[g_MpPlayerNum].isretryingsave |= 1; - func0f108324(g_Menus[g_MpPlayerNum].deviceserial); + // Operation failed + g_Menus[g_MpPlayerNum].fm.isretryingsave |= 1; + filemgrSetDevice1BySerial(g_Menus[g_MpPlayerNum].fm.deviceserial); - if (FILEOP_IS_SAVE(g_Menus[g_MpPlayerNum].fileop)) { + if (FILEOP_IS_SAVE(g_Menus[g_MpPlayerNum].fm.fileop)) { menuPushDialog(&g_FilemgrSaveErrorMenuDialog); } else { #if VERSION >= VERSION_NTSC_1_0 + // File couldn't be loaded - delete it filemgrEraseCorruptFile(); #else - // Argument is wrong/mismatching + // ntsc-beta shows an error instead + // Note: This argument is wrong/mismatching menuPushDialog(&g_FilemgrSaveErrorMenuDialog); #endif } @@ -1096,17 +1117,17 @@ void filemgrDeleteCurrentFile(void) s32 i; if (device >= 0) { - if (filemgrDeleteFile(device, g_FilemgrFileToDelete.filenum)) { + if (filemgrDeleteFile(device, g_FilemgrFileToDelete.filenum) != 0) { error = true; } } else { error = true; } - g_FileLists[g_Menus[g_MpPlayerNum].listnum]->timeuntilupdate = 1; + g_FileLists[g_Menus[g_MpPlayerNum].fm.listnum]->timeuntilupdate = 1; if (error) { - g_Menus[g_MpPlayerNum].unke3c = device; + g_Menus[g_MpPlayerNum].fm.device1 = device; filemgrPushErrorDialog(FILEERROR_DELETEFAILED); } else { // If deleting a loaded MP player, reset them to default @@ -1152,7 +1173,7 @@ struct menudialog g_FilemgrSaveErrorMenuDialog = { NULL, }; -struct menuitem g_FilemgrFileLoadMenuItems[] = { +struct menuitem g_FilemgrFileLostMenuItems[] = { { MENUITEMTYPE_LABEL, 0, 0x00000010, (u32)&filemgrMenuTextDeviceName, 0x00000000, filemgrDeviceNameMenuHandler }, #if VERSION >= VERSION_NTSC_1_0 { MENUITEMTYPE_LABEL, 0, 0x00000010, L_MPWEAPONS_251, 0x00000000, NULL }, // "The saved file has been erased due to corruption or damage." @@ -1164,7 +1185,7 @@ struct menuitem g_FilemgrFileLoadMenuItems[] = { struct menudialog g_FilemgrFileLostMenuDialog = { MENUDIALOGTYPE_DANGER, (u32)&filemgrMenuTextErrorTitle, - g_FilemgrFileLoadMenuItems, + g_FilemgrFileLostMenuItems, NULL, 0x000000a0, NULL, @@ -1206,23 +1227,23 @@ struct menudialog g_PakNotOriginalMenuDialog = { void func0f1097d0(s32 device) { - char *types[] = {"GAM", "MPG", "MPP", "CAM"}; - const u32 sizes[] = {0x80, 0x40, 0x20, 0x08}; + char *typenames[] = {"GAM", "MPG", "MPP", "CAM"}; + const u32 typecodes[] = {0x80, 0x40, 0x20, 0x08}; void *thing; if (g_FileLists[0]) { var800a21e8.filenum = g_FileLists[0]->deviceguids[device].filenum; var800a21e8.deviceserial = g_FileLists[0]->deviceguids[device].deviceserial; - thing = func00012ab0(align16(var7f1b2f3c[g_Menus[g_MpPlayerNum].data.filemgr.filetypeplusone - 1])); + thing = func00012ab0(align16(g_FileTypeSizes[g_Menus[g_MpPlayerNum].fm.filetypeplusone - 1])); if (thing) { - func0f1094e4(&g_FilemgrFileToCopy, g_Menus[g_MpPlayerNum].data.filemgr.filetypeplusone + 103, thing); + filemgrSaveOrLoad(&g_FilemgrFileToCopy, g_Menus[g_MpPlayerNum].fm.filetypeplusone + 103, (s32) thing); } else { filemgrPushErrorDialog(FILEERROR_OUTOFMEMORY); } - var80075bd0[g_Menus[g_MpPlayerNum].data.filemgr.filetypeplusone - 1] = 1; + var80075bd0[g_Menus[g_MpPlayerNum].fm.filetypeplusone - 1] = 1; } } @@ -1233,13 +1254,13 @@ const char var7f1b326c[] = "COULDNT GET THE RAM!\n"; const char var7f1b3284[] = "Saving...\n"; #endif -void func0f109954(s32 arg0) +void filemgrSaveGameToDevice(s32 device) { if (g_FileLists[0]) { - g_GameFileGuid.filenum = g_FileLists[0]->deviceguids[arg0].filenum; - g_GameFileGuid.deviceserial = g_FileLists[0]->deviceguids[arg0].deviceserial; + g_GameFileGuid.filenum = g_FileLists[0]->deviceguids[device].filenum; + g_GameFileGuid.deviceserial = g_FileLists[0]->deviceguids[device].deviceserial; - func0f1094e4(&g_GameFileGuid, FILEOP_SAVE_GAME_000, NULL); + filemgrSaveOrLoad(&g_GameFileGuid, FILEOP_SAVE_GAME_000, 0); } } @@ -1251,13 +1272,13 @@ void filemgrGetFileName(char *dst, struct filelistfile *file) localbuffer[0] = '\0'; - switch (g_FileLists[g_Menus[g_MpPlayerNum].listnum]->filetype) { + switch (g_FileLists[g_Menus[g_MpPlayerNum].fm.listnum]->filetype) { case FILETYPE_GAME: case FILETYPE_MPSETUP: - func0f0d564c(file->unk06, localbuffer, false); + func0f0d564c(file->name, localbuffer, false); break; case FILETYPE_MPPLAYER: - mpplayerfileGetOverview(file->unk06, localbuffer, &playtime); + mpplayerfileGetOverview(file->name, localbuffer, &playtime); break; } @@ -1273,7 +1294,7 @@ void filemgrGetRenameName(char *buffer) s32 i; s32 j; - switch (g_Menus[g_MpPlayerNum].unke3e) { + switch (g_Menus[g_MpPlayerNum].fm.unke3e) { case 0: case 9: case 10: @@ -1287,7 +1308,7 @@ void filemgrGetRenameName(char *buffer) case 15: case 16: case 17: - strcpy(buffer, g_Menus[g_MpPlayerNum].unke53); + strcpy(buffer, g_Menus[g_MpPlayerNum].fm.filename); break; case 6: case 12: @@ -1316,7 +1337,7 @@ void filemgrGetRenameName(char *buffer) #if VERSION >= VERSION_NTSC_1_0 void filemgrSetRenameName(char *name) { - switch (g_Menus[g_MpPlayerNum].unke3e) { + switch (g_Menus[g_MpPlayerNum].fm.unke3e) { case 0: case 9: case 10: @@ -1330,7 +1351,7 @@ void filemgrSetRenameName(char *name) case 15: case 16: case 17: - strcpy(g_Menus[g_MpPlayerNum].unke53, name); + strcpy(g_Menus[g_MpPlayerNum].fm.filename, name); break; case 6: case 12: @@ -1361,7 +1382,7 @@ bool filemgrIsNameAvailable(s32 device) char loopname[16]; deviceindex = lookup[device]; - filelist = g_FileLists[g_Menus[g_MpPlayerNum].listnum]; + filelist = g_FileLists[g_Menus[g_MpPlayerNum].fm.listnum]; if (filelist == NULL) { return true; @@ -1405,7 +1426,7 @@ bool filemgrIsNameAvailable(s32 device) // Iterate files for (i = startindex; i < endindex; i++) { - filemgrGetFileName(loopname, &g_FileLists[g_Menus[g_MpPlayerNum].listnum]->files[i]); + filemgrGetFileName(loopname, &g_FileLists[g_Menus[g_MpPlayerNum].fm.listnum]->files[i]); // Convert loop filename to uppercase and remove trailing line break // @dangerous: loopname can overflow if filemgrGetFileName returns a long name. @@ -1440,35 +1461,38 @@ const char var7f1b33a4[] = "()()()()()() Writing MGAME\n"; const char var7f1b33c0[] = "Write Attempt Made...\n"; const char var7f1b33d8[] = "decided location: %d\n"; -void func0f109ec4(void) +/** + * Used for both saving new files and copying files. + */ +void filemgrSaveToDevice(void) { - if (g_FileLists[g_Menus[g_MpPlayerNum].listnum]->spacesfree[g_Menus[g_MpPlayerNum].device] > 0) { - if (!filemgrIsNameAvailable(g_Menus[g_MpPlayerNum].device)) { + if (g_FileLists[g_Menus[g_MpPlayerNum].fm.listnum]->spacesfree[g_Menus[g_MpPlayerNum].fm.device2] > 0) { + if (!filemgrIsNameAvailable(g_Menus[g_MpPlayerNum].fm.device2)) { menuPushDialog(&g_FilemgrDuplicateNameMenuDialog); } else { menuPopDialog(); - if (g_Menus[g_MpPlayerNum].unke3e == 0) { - func0f109954(g_Menus[g_MpPlayerNum].device); - } else if (g_Menus[g_MpPlayerNum].unke3e == 5) { + if (g_Menus[g_MpPlayerNum].fm.unke3e == 0) { + filemgrSaveGameToDevice(g_Menus[g_MpPlayerNum].fm.device2); + } else if (g_Menus[g_MpPlayerNum].fm.unke3e == 5) { // empty - } else if (g_Menus[g_MpPlayerNum].unke3e == 6) { + } else if (g_Menus[g_MpPlayerNum].fm.unke3e == 6) { struct fileguid guid; - guid.filenum = g_FileLists[g_Menus[g_MpPlayerNum].listnum]->deviceguids[g_Menus[g_MpPlayerNum].device].filenum; - guid.deviceserial = g_FileLists[g_Menus[g_MpPlayerNum].listnum]->deviceguids[g_Menus[g_MpPlayerNum].device].deviceserial; - func0f1094e4(&guid, FILEOP_SAVE_MPPLAYER, (void *)g_MpPlayerNum); - } else if (g_Menus[g_MpPlayerNum].unke3e == 7) { + guid.filenum = g_FileLists[g_Menus[g_MpPlayerNum].fm.listnum]->deviceguids[g_Menus[g_MpPlayerNum].fm.device2].filenum; + guid.deviceserial = g_FileLists[g_Menus[g_MpPlayerNum].fm.listnum]->deviceguids[g_Menus[g_MpPlayerNum].fm.device2].deviceserial; + filemgrSaveOrLoad(&guid, FILEOP_SAVE_MPPLAYER, (u32)g_MpPlayerNum); + } else if (g_Menus[g_MpPlayerNum].fm.unke3e == 7) { struct fileguid guid; - guid.filenum = g_FileLists[g_Menus[g_MpPlayerNum].listnum]->deviceguids[g_Menus[g_MpPlayerNum].device].filenum; - guid.deviceserial = g_FileLists[g_Menus[g_MpPlayerNum].listnum]->deviceguids[g_Menus[g_MpPlayerNum].device].deviceserial; - func0f1094e4(&guid, FILEOP_SAVE_MPSETUP, NULL); - } else if (g_Menus[g_MpPlayerNum].unke3e >= 9) { + guid.filenum = g_FileLists[g_Menus[g_MpPlayerNum].fm.listnum]->deviceguids[g_Menus[g_MpPlayerNum].fm.device2].filenum; + guid.deviceserial = g_FileLists[g_Menus[g_MpPlayerNum].fm.listnum]->deviceguids[g_Menus[g_MpPlayerNum].fm.device2].deviceserial; + filemgrSaveOrLoad(&guid, FILEOP_SAVE_MPSETUP, 0); + } else if (g_Menus[g_MpPlayerNum].fm.unke3e >= 9) { struct fileguid guid; - guid.filenum = g_FileLists[g_Menus[g_MpPlayerNum].listnum]->deviceguids[g_Menus[g_MpPlayerNum].device].filenum; - guid.deviceserial = g_FileLists[g_Menus[g_MpPlayerNum].listnum]->deviceguids[g_Menus[g_MpPlayerNum].device].deviceserial; - func0f1094e4(&guid, -1, NULL); + guid.filenum = g_FileLists[g_Menus[g_MpPlayerNum].fm.listnum]->deviceguids[g_Menus[g_MpPlayerNum].fm.device2].filenum; + guid.deviceserial = g_FileLists[g_Menus[g_MpPlayerNum].fm.listnum]->deviceguids[g_Menus[g_MpPlayerNum].fm.device2].deviceserial; + filemgrSaveOrLoad(&guid, -1, 0); } else { - func0f1097d0(g_Menus[g_MpPlayerNum].device); + func0f1097d0(g_Menus[g_MpPlayerNum].fm.device2); } } } @@ -1488,7 +1512,7 @@ s32 filemgrConfirmRenameMenuHandler(s32 operation, struct menuitem *item, union filemgrSetRenameName(name); break; case MENUOP_SET: - func0f109ec4(); + filemgrSaveToDevice(); break; } @@ -1523,7 +1547,7 @@ s32 filemgrDuplicateCancelMenuHandler(s32 operation, struct menuitem *item, unio #if VERSION >= VERSION_NTSC_1_0 char *filemgrMenuTextDeviceNameContainingDuplicateFile(struct menuitem *item) { - return filemgrGetDeviceName(g_Menus[g_MpPlayerNum].device); + return filemgrGetDeviceName(g_Menus[g_MpPlayerNum].fm.device2); } #endif @@ -1592,11 +1616,11 @@ char *filemgrMenuTextLocationName2(struct menuitem *item) #endif }; - if (g_FileLists[g_Menus[g_MpPlayerNum].listnum] == NULL) { + if (g_FileLists[g_Menus[g_MpPlayerNum].fm.listnum] == NULL) { return NULL; } - if (g_FileLists[g_Menus[g_MpPlayerNum].listnum]->spacesfree[item->param] < 0) { + if (g_FileLists[g_Menus[g_MpPlayerNum].fm.listnum]->spacesfree[item->param] < 0) { return langGet(names[5]); } @@ -1664,11 +1688,11 @@ char *filemgrMenuTextSaveLocationSpaces(struct menuitem *item) { s32 spacesfree; - if (g_FileLists[g_Menus[g_MpPlayerNum].listnum] == NULL) { + if (g_FileLists[g_Menus[g_MpPlayerNum].fm.listnum] == NULL) { return NULL; } - spacesfree = g_FileLists[g_Menus[g_MpPlayerNum].listnum]->spacesfree[item->param]; + spacesfree = g_FileLists[g_Menus[g_MpPlayerNum].fm.listnum]->spacesfree[item->param]; if (spacesfree < 0) { return "\n"; @@ -1743,7 +1767,7 @@ glabel func0f1053a0nb /* f105474: 25297f60 */ addiu $t1,$t1,0x7f60 /* f105478: 14400005 */ bnez $v0,.NB0f105490 /* f10547c: 8fa70044 */ lw $a3,0x44($sp) -/* f105480: 0fc41475 */ jal func0f109954 +/* f105480: 0fc41475 */ jal filemgrSaveGameToDevice /* f105484: 90e40001 */ lbu $a0,0x1($a3) /* f105488: 1000004b */ beqz $zero,.NB0f1055b8 /* f10548c: 00001025 */ or $v0,$zero,$zero @@ -1769,7 +1793,7 @@ glabel func0f1053a0nb /* f1054d8: 000fc0c0 */ sll $t8,$t7,0x3 /* f1054dc: 0058c821 */ addu $t9,$v0,$t8 /* f1054e0: 972a02dc */ lhu $t2,0x2dc($t9) -/* f1054e4: 0fc41358 */ jal func0f1094e4 +/* f1054e4: 0fc41358 */ jal filemgrSaveOrLoad /* f1054e8: a7aa003c */ sh $t2,0x3c($sp) /* f1054ec: 10000032 */ beqz $zero,.NB0f1055b8 /* f1054f0: 00001025 */ or $v0,$zero,$zero @@ -1793,7 +1817,7 @@ glabel func0f1053a0nb /* f105534: 000a58c0 */ sll $t3,$t2,0x3 /* f105538: 004b6021 */ addu $t4,$v0,$t3 /* f10553c: 958d02dc */ lhu $t5,0x2dc($t4) -/* f105540: 0fc41358 */ jal func0f1094e4 +/* f105540: 0fc41358 */ jal filemgrSaveOrLoad /* f105544: a7ad0034 */ sh $t5,0x34($sp) /* f105548: 1000001b */ beqz $zero,.NB0f1055b8 /* f10554c: 00001025 */ or $v0,$zero,$zero @@ -1817,7 +1841,7 @@ glabel func0f1053a0nb /* f105590: 000d70c0 */ sll $t6,$t5,0x3 /* f105594: 004e7821 */ addu $t7,$v0,$t6 /* f105598: 95f802dc */ lhu $t8,0x2dc($t7) -/* f10559c: 0fc41358 */ jal func0f1094e4 +/* f10559c: 0fc41358 */ jal filemgrSaveOrLoad /* f1055a0: a7b8002c */ sh $t8,0x2c($sp) /* f1055a4: 10000004 */ beqz $zero,.NB0f1055b8 /* f1055a8: 00001025 */ or $v0,$zero,$zero @@ -1852,19 +1876,19 @@ const char var7f1b34ac[] = "Deleting files, wad %d\n"; */ s32 filemgrSelectLocationMenuHandler(s32 operation, struct menuitem *item, union handlerdata *data) { - if (g_FileLists[g_Menus[g_MpPlayerNum].listnum] == NULL) { + if (g_FileLists[g_Menus[g_MpPlayerNum].fm.listnum] == NULL) { return 0; } if (operation == MENUOP_CHECKDISABLED) { - if (g_FileLists[g_Menus[g_MpPlayerNum].listnum]->spacesfree[item->param] < 1) { + if (g_FileLists[g_Menus[g_MpPlayerNum].fm.listnum]->spacesfree[item->param] < 1) { return true; } } if (operation == MENUOP_SET) { - g_Menus[g_MpPlayerNum].device = item->param; - func0f109ec4(); + g_Menus[g_MpPlayerNum].fm.device2 = item->param; + filemgrSaveToDevice(); } return 0; @@ -1883,8 +1907,8 @@ s32 filemgrCancelSaveMenuHandler(s32 operation, struct menuitem *item, union han s32 filemgrDeleteFilesForSaveMenuHandler(s32 operation, struct menuitem *item, union handlerdata *data) { if (operation == MENUOP_SET) { - filemgrPushDeleteFileDialog(g_Menus[g_MpPlayerNum].listnum); - g_Menus[g_MpPlayerNum].data.filemgr.isdeletingforsave = true; + filemgrPushDeleteFileDialog(g_Menus[g_MpPlayerNum].fm.listnum); + g_Menus[g_MpPlayerNum].fm.isdeletingforsave = true; } return 0; @@ -1892,8 +1916,8 @@ s32 filemgrDeleteFilesForSaveMenuHandler(s32 operation, struct menuitem *item, u void filemgrPushSelectLocationDialog(s32 arg0, u32 filetype) { - g_Menus[g_MpPlayerNum].unke3e = arg0; - g_Menus[g_MpPlayerNum].listnum = func0f110cf8(filetype); + g_Menus[g_MpPlayerNum].fm.unke3e = arg0; + g_Menus[g_MpPlayerNum].fm.listnum = filelistFindOrCreate(filetype); #if VERSION >= VERSION_NTSC_1_0 filelistsTick(); @@ -2035,8 +2059,8 @@ s32 filemgrFileToCopyOrDeleteListMenuHandler(s32 operation, struct menuitem *ite s32 listnum = 0; if (item->param == 1) { - listnum = g_Menus[g_MpPlayerNum].listnum; - list = g_FileLists[g_Menus[g_MpPlayerNum].listnum]; + listnum = g_Menus[g_MpPlayerNum].fm.listnum; + list = g_FileLists[g_Menus[g_MpPlayerNum].fm.listnum]; } if (list == NULL) { @@ -2056,7 +2080,7 @@ s32 filemgrFileToCopyOrDeleteListMenuHandler(s32 operation, struct menuitem *ite struct menuitemrenderdata *renderdata = data->type19.renderdata2; struct filelistfile *file = &list->files[data->list.unk04]; - if (g_Menus[g_MpPlayerNum].data.filemgr.filetypeplusone == 4) { + if (g_Menus[g_MpPlayerNum].fm.filetypeplusone == 4) { gdl = filemgrRenderPerfectHeadThumbnail(gdl, renderdata, file->filenum, file->deviceserial); } else { u32 colour = renderdata->colour; @@ -2072,7 +2096,7 @@ s32 filemgrFileToCopyOrDeleteListMenuHandler(s32 operation, struct menuitem *ite gdl = func0f153628(gdl); if (file) { - filemgrGetSelectName(text, file, g_Menus[g_MpPlayerNum].data.filemgr.filetypeplusone - 1); + filemgrGetSelectName(text, file, g_Menus[g_MpPlayerNum].fm.filetypeplusone - 1); gdl = textRenderProjected(gdl, &x, &y, text, g_CharsHandelGothicSm, g_FontHandelGothicSm, colour, viGetWidth(), viGetHeight(), 0, 1); y = renderdata->y + 12; @@ -2102,19 +2126,19 @@ s32 filemgrFileToCopyOrDeleteListMenuHandler(s32 operation, struct menuitem *ite s32 filemgrFileToDeleteListMenuHandler(s32 operation, struct menuitem *item, union handlerdata *data) { - if (g_FileLists[g_Menus[g_MpPlayerNum].listnum] == NULL) { + if (g_FileLists[g_Menus[g_MpPlayerNum].fm.listnum] == NULL) { return 0; } if (operation == MENUOP_SET) { - struct filelistfile *file = &g_FileLists[g_Menus[g_MpPlayerNum].listnum]->files[data->list.value]; + struct filelistfile *file = &g_FileLists[g_Menus[g_MpPlayerNum].fm.listnum]->files[data->list.value]; if (file) { if (filemgrIsFileInUse(file)) { - func0f1083d0(file, g_FileLists[g_Menus[g_MpPlayerNum].listnum]->filetype); + filemgrSetFileToDelete(file, g_FileLists[g_Menus[g_MpPlayerNum].fm.listnum]->filetype); menuPushDialog(&g_FilemgrFileInUseMenuDialog); } else { - func0f1083d0(file, g_FileLists[g_Menus[g_MpPlayerNum].listnum]->filetype); + filemgrSetFileToDelete(file, g_FileLists[g_Menus[g_MpPlayerNum].fm.listnum]->filetype); g_FilemgrFileToDelete.filenum = file->filenum; g_FilemgrFileToDelete.deviceserial = file->deviceserial; menuPushDialog(&g_FilemgrConfirmDeleteMenuDialog); @@ -2141,9 +2165,9 @@ s32 filemgrFileToCopyListMenuHandler(s32 operation, struct menuitem *item, union g_FilemgrFileToCopy.deviceserial = file->deviceserial; #if VERSION >= VERSION_NTSC_1_0 - filemgrGetFileName(g_Menus[g_MpPlayerNum].unke53, file); + filemgrGetFileName(g_Menus[g_MpPlayerNum].fm.filename, file); #endif - filemgrPushSelectLocationDialog(g_Menus[g_MpPlayerNum].data.filemgr.filetypeplusone, g_Menus[g_MpPlayerNum].data.filemgr.filetypeplusone - 1); + filemgrPushSelectLocationDialog(g_Menus[g_MpPlayerNum].fm.filetypeplusone, g_Menus[g_MpPlayerNum].fm.filetypeplusone - 1); } } @@ -2153,11 +2177,11 @@ s32 filemgrFileToCopyListMenuHandler(s32 operation, struct menuitem *item, union s32 filemgrCopyOrDeleteListMenuDialog(s32 operation, struct menudialog *dialog, union handlerdata *data) { if (operation == MENUOP_CLOSE) { - if (g_Menus[g_MpPlayerNum].data.filemgr.isdeletingforsave == true) { - g_Menus[g_MpPlayerNum].data.filemgr.isdeletingforsave = false; + if (g_Menus[g_MpPlayerNum].fm.isdeletingforsave == true) { + g_Menus[g_MpPlayerNum].fm.isdeletingforsave = false; } else { - func0f110c5c(0, FILETYPE_GAME); - g_Menus[g_MpPlayerNum].data.filemgr.filetypeplusone = 0; + filelistCreate(0, FILETYPE_GAME); + g_Menus[g_MpPlayerNum].fm.filetypeplusone = 0; } } @@ -2168,14 +2192,14 @@ void filemgrPushDeleteFileDialog(s32 listnum) { struct filelist *list; - g_Menus[g_MpPlayerNum].listnum = listnum; - g_Menus[g_MpPlayerNum].data.filemgr.isdeletingforsave = false; - g_Menus[g_MpPlayerNum].data.filemgr.filetypeplusone = 1; + g_Menus[g_MpPlayerNum].fm.listnum = listnum; + g_Menus[g_MpPlayerNum].fm.isdeletingforsave = false; + g_Menus[g_MpPlayerNum].fm.filetypeplusone = 1; - list = g_FileLists[g_Menus[g_MpPlayerNum].listnum]; + list = g_FileLists[g_Menus[g_MpPlayerNum].fm.listnum]; if (list) { - g_Menus[g_MpPlayerNum].data.filemgr.filetypeplusone = list->filetype + 1; + g_Menus[g_MpPlayerNum].fm.filetypeplusone = list->filetype + 1; } menuPushDialog(&g_FilemgrDeleteMenuDialog); @@ -2184,17 +2208,17 @@ void filemgrPushDeleteFileDialog(s32 listnum) s32 pakDeleteGameNoteMenuHandler(s32 operation, struct menuitem *item, union handlerdata *data) { if (operation == MENUOP_SET) { - OSPfsState *note = &g_EditingPak->notes[g_Menus[g_MpPlayerNum].data.pak.noteindex]; + OSPfsState *note = &g_EditingPak->notes[g_Menus[g_MpPlayerNum].fm.noteindex]; s32 result; - g_Menus[g_MpPlayerNum].data.pak.unke24 = g_Menus[g_MpPlayerNum].data.pak.unke24 | (1 << g_Menus[g_MpPlayerNum].data.pak.device); + g_Menus[g_MpPlayerNum].fm.unke24 = g_Menus[g_MpPlayerNum].fm.unke24 | (1 << g_Menus[g_MpPlayerNum].fm.device); menuPopDialog(); - result = pakDeleteGameNote(g_Menus[g_MpPlayerNum].data.pak.device, + result = pakDeleteGameNote(g_Menus[g_MpPlayerNum].fm.device, note->company_code, note->game_code, note->game_name, note->ext_name); - g_Menus[g_MpPlayerNum].unke3c = g_Menus[g_MpPlayerNum].data.pak.device; + g_Menus[g_MpPlayerNum].fm.device1 = g_Menus[g_MpPlayerNum].fm.device; if (result) { filemgrPushErrorDialog(FILEERROR_DELETENOTEFAILED); @@ -2204,6 +2228,9 @@ s32 pakDeleteGameNoteMenuHandler(s32 operation, struct menuitem *item, union han return 0; } +/** + * Handler for the note listing in the controller pak menu. + */ s32 pakGameNoteListMenuHandler(s32 operation, struct menuitem *item, union handlerdata *data) { s32 x; @@ -2284,7 +2311,7 @@ s32 pakGameNoteListMenuHandler(s32 operation, struct menuitem *item, union handl break; case MENUOP_SET: if (g_EditingPak->notesinuse[data->list.value] == true) { - g_Menus[g_MpPlayerNum].data.pak.noteindex = data->list.value; + g_Menus[g_MpPlayerNum].fm.noteindex = data->list.value; menuPushDialog(&g_PakDeleteNoteMenuDialog); } break; @@ -2298,17 +2325,20 @@ const char var7f1b34dc[] = "GOT OKed!\n"; const char var7f1b34e8[] = "Try to find last opened file...\n"; #endif +/** + * Controller pak note listing dialog. + */ s32 pakGameNotesMenuDialog(s32 operation, struct menudialog *dialog, union handlerdata *data) { if (operation == MENUOP_TICK) { if (g_Menus[g_MpPlayerNum].curframe && g_Menus[g_MpPlayerNum].curframe->dialog == dialog) { - s32 value = func0f1168c4(g_Menus[g_MpPlayerNum].data.pak.device, &g_EditingPak); + s32 value = func0f1168c4(g_Menus[g_MpPlayerNum].fm.device, &g_EditingPak); if (value) { menuCloseDialog(); g_EditingPak = NULL; - g_Menus[g_MpPlayerNum].unke3c = g_Menus[g_MpPlayerNum].data.pak.device; + g_Menus[g_MpPlayerNum].fm.device1 = g_Menus[g_MpPlayerNum].fm.device; if (value == 1) { filemgrPushErrorDialog(FILEERROR_PAKREMOVED); @@ -2376,11 +2406,19 @@ char *pakMenuTextStatusMessage(struct menuitem *item) return langGet(L_OPTIONS_399); // "There is enough space for Perfect Dark note." } +/** + * Title for the note listing dialog. + */ char *pakMenuTextEditingPakName(struct menuitem *item) { - return filemgrGetDeviceName(g_Menus[g_MpPlayerNum].data.pak.device); + return filemgrGetDeviceName(g_Menus[g_MpPlayerNum].fm.device); } +/** + * A pak selection on the controller pak menu. + * + * Selecting one takes you to the note listing dialog. + */ s32 pakSelectionMenuHandler(s32 operation, struct menuitem *item, union handlerdata *data) { if (operation == MENUOP_CHECKDISABLED) { @@ -2390,7 +2428,7 @@ s32 pakSelectionMenuHandler(s32 operation, struct menuitem *item, union handlerd } if (operation == MENUOP_SET) { - g_Menus[g_MpPlayerNum].data.pak.device = item->param; + g_Menus[g_MpPlayerNum].fm.device = item->param; menuPushDialog(&g_PakGameNotesMenuDialog); } @@ -2398,12 +2436,17 @@ s32 pakSelectionMenuHandler(s32 operation, struct menuitem *item, union handlerd } #if VERSION >= VERSION_NTSC_1_0 +/** + * Controller pak menu. + * + * Lists the connected controller paks. + */ s32 pakChoosePakMenuDialog(s32 operation, struct menudialog *dialog, union handlerdata *data) { switch (operation) { case MENUOP_OPEN: joy0001398c(3); - g_Menus[g_MpPlayerNum].data.pak.unke24 = 0; + g_Menus[g_MpPlayerNum].fm.unke24 = 0; break; case MENUOP_TICK: var80062944 = 1; @@ -2413,7 +2456,7 @@ s32 pakChoosePakMenuDialog(s32 operation, struct menudialog *dialog, union handl s32 i; for (i = 0; i < 4; i++) { - if (g_Menus[g_MpPlayerNum].data.pak.unke24 & (1 << i)) { + if (g_Menus[g_MpPlayerNum].fm.unke24 & (1 << i)) { g_Vars.unk0004e4 &= 0xfff0; g_Vars.unk0004e4 |= 0x0008; g_Vars.unk0004e4 |= 1 << (i + 8); @@ -2526,13 +2569,13 @@ glabel pakChoosePakMenuDialog s32 filemgrOpenCopyFileMenuHandler(s32 operation, struct menuitem *item, union handlerdata *data) { if (operation == MENUOP_SET) { - g_Menus[g_MpPlayerNum].data.filemgr.filetypeplusone = item->param + 1; - func0f110c5c(0, item->param); + g_Menus[g_MpPlayerNum].fm.filetypeplusone = item->param + 1; + filelistCreate(0, item->param); #if VERSION >= VERSION_NTSC_1_0 - g_Menus[g_MpPlayerNum].listnum = 0; + g_Menus[g_MpPlayerNum].fm.listnum = 0; #endif - g_Menus[g_MpPlayerNum].data.filemgr.isdeletingforsave = false; + g_Menus[g_MpPlayerNum].fm.isdeletingforsave = false; menuPushDialog(&g_FilemgrCopyMenuDialog); } @@ -2543,9 +2586,9 @@ s32 filemgrOpenCopyFileMenuHandler(s32 operation, struct menuitem *item, union h s32 filemgrOpenDeleteFileMenuHandler(s32 operation, struct menuitem *item, union handlerdata *data) { if (operation == MENUOP_SET) { - g_Menus[g_MpPlayerNum].data.filemgr.filetypeplusone = item->param + 1; - func0f110c5c(0, item->param); - g_Menus[g_MpPlayerNum].unke3e = -1; + g_Menus[g_MpPlayerNum].fm.filetypeplusone = item->param + 1; + filelistCreate(0, item->param); + g_Menus[g_MpPlayerNum].fm.unke3e = -1; filemgrPushDeleteFileDialog(0); } @@ -2569,7 +2612,7 @@ s32 filemgrAgentNameKeyboardMenuHandler(s32 operation, struct menuitem *item, un break; case MENUOP_SET: filemgrPushSelectLocationDialog(0, FILETYPE_GAME); - g_Menus[g_MpPlayerNum].data.filemgr.unke2c = 1; + g_Menus[g_MpPlayerNum].fm.unke2c = 1; break; } @@ -2611,7 +2654,7 @@ s32 filemgrChooseAgentListMenuHandler(s32 operation, struct menuitem *item, unio pass = false; if (data->list.unk04 == 1) { - if (data->list.groupstartindex == 1 && g_Menus[g_MpPlayerNum].data.filemgr.unke2c == 1) { + if (data->list.groupstartindex == 1 && g_Menus[g_MpPlayerNum].fm.unke2c == 1) { for (i = 0; i < g_FileLists[0]->numfiles; i++) { if (g_GameFileGuid.filenum == g_FileLists[0]->files[i].filenum && g_GameFileGuid.deviceserial == g_FileLists[0]->files[i].deviceserial) { @@ -2619,7 +2662,7 @@ s32 filemgrChooseAgentListMenuHandler(s32 operation, struct menuitem *item, unio } } - g_Menus[g_MpPlayerNum].data.filemgr.unke2c = 0; + g_Menus[g_MpPlayerNum].fm.unke2c = 0; } if (g_FileLists[0]->updatedthisframe) { @@ -2627,7 +2670,7 @@ s32 filemgrChooseAgentListMenuHandler(s32 operation, struct menuitem *item, unio } } else { pass = true; - g_Menus[g_MpPlayerNum].data.filemgr.unke2c = 0; + g_Menus[g_MpPlayerNum].fm.unke2c = 0; } if (pass && g_Vars.bossfilenum) { @@ -2657,7 +2700,7 @@ s32 filemgrChooseAgentListMenuHandler(s32 operation, struct menuitem *item, unio file = &g_FileLists[0]->files[data->list.unk04]; if (file) { - gamefileGetOverview(file->unk06, name, &stage, &difficulty, &time); + gamefileGetOverview(file->name, name, &stage, &difficulty, &time); seconds = time % 60; time = time / 60; @@ -2767,6 +2810,7 @@ s32 filemgrChooseAgentListMenuHandler(s32 operation, struct menuitem *item, unio break; case MENUOP_SET: if (data->list.value == g_FileLists[0]->numfiles) { + // New agent gamefileLoadDefaults(&g_GameFile); menuPushDialog(&g_FilemgrEnterNameMenuDialog); } else { @@ -2775,7 +2819,7 @@ s32 filemgrChooseAgentListMenuHandler(s32 operation, struct menuitem *item, unio if (file) { g_GameFileGuid.filenum = file->filenum; g_GameFileGuid.deviceserial = file->deviceserial; - func0f1094e4(&g_GameFileGuid, FILEOP_LOAD_GAME, 0); + filemgrSaveOrLoad(&g_GameFileGuid, FILEOP_LOAD_GAME, 0); } } break; @@ -2805,9 +2849,9 @@ s32 filemgrMainMenuDialog(s32 operation, struct menudialog *dialog, union handle switch (operation) { case MENUOP_OPEN: - g_Menus[g_MpPlayerNum].data.filemgr.filetypeplusone = 0; + g_Menus[g_MpPlayerNum].fm.filetypeplusone = 0; - func0f110c5c(0, FILETYPE_GAME); + filelistCreate(0, FILETYPE_GAME); mpSetDefaultSetup(); // Set MP player names to "Player 1" through 4 if blank diff --git a/src/game/game_10c9c0.c b/src/game/game_10c9c0.c index 632270ff7..e65a8bf03 100644 --- a/src/game/game_10c9c0.c +++ b/src/game/game_10c9c0.c @@ -51,7 +51,7 @@ s32 menuhandler4MbAdvancedSetup(s32 operation, struct menuitem *item, union hand s32 menuhandler0010cabc(s32 operation, struct menuitem *item, union handlerdata *data) { if (operation == MENUOP_SET) { - mpSetCurrentChallenge(g_Menus[g_MpPlayerNum].data.main4mb.slotindex); + mpSetCurrentChallenge(g_Menus[g_MpPlayerNum].main4mb.slotindex); func0f0f820c(&g_MpQuickGo4MbMenuDialog, MENUROOT_4MBMAINMENU); } diff --git a/src/game/game_110680.c b/src/game/game_110680.c index 61d749924..687c62cc5 100644 --- a/src/game/game_110680.c +++ b/src/game/game_110680.c @@ -253,7 +253,7 @@ void func0f110bf8(void) /** * Allocate and build a file list. */ -void func0f110c5c(s32 listnum, u8 filetype) +void filelistCreate(s32 listnum, u8 filetype) { if (g_FileLists[listnum] == NULL) { func0f15e5b8(align16(sizeof(struct filelist)), 1); @@ -270,7 +270,7 @@ void func0f110c5c(s32 listnum, u8 filetype) var80062944 = 1; } -s32 func0f110cf8(u8 filetype) +s32 filelistFindOrCreate(u8 filetype) { s32 bestindex = -1; s32 i; @@ -288,7 +288,7 @@ s32 func0f110cf8(u8 filetype) } if (bestindex >= 0) { - func0f110c5c(bestindex, filetype); + filelistCreate(bestindex, filetype); return bestindex; } @@ -302,6 +302,9 @@ void func0f110d90(s32 index) } #endif +const char var7f1b39c8[] = ""; +const char var7f1b39cc[] = ""; + void filelistsTick(void) { u32 updateall; @@ -361,6 +364,7 @@ void filelistsTick(void) } if (update) { + osSyncPrintf("Rebuilding pakWad %d:\n", i); filelistUpdate(g_FileLists[i]); g_FileLists[i]->updatedthisframe = true; } @@ -372,10 +376,6 @@ void filelistsTick(void) } } -const char var7f1b39c8[] = ""; -const char var7f1b39cc[] = ""; -const char var7f1b39d0[] = "Rebuilding pakWad %d:\n"; - void filelistUpdate(struct filelist *list) { const u32 sp3a88[] = {0x80, 0x40, 0x20, 0x08}; @@ -444,7 +444,7 @@ void filelistUpdate(struct filelist *list) // Iterating files for (i = 0; i < len; i++) { struct filelistfile *file = &list->files[list->numfiles]; - s32 maybepfserr = func0f116800(filedevices[i], sp1288[i], file->unk06, 0x10); + s32 maybepfserr = func0f116800(filedevices[i], sp1288[i], file->name, sizeof(file->name)); if (maybepfserr); @@ -593,50 +593,50 @@ const char var7f1b3a14[] = "gamefile.c"; // // if (g_Menus[playernum].headtextures == NULL) { // if (textures == NULL) { -// g_Menus[playernum].unke40_01 = true; +// g_Menus[playernum].fm.unke40_01 = true; // func0f15e5b8(align16(sizeof(struct perfectheadtexturelist)), 1); -// g_Menus[playernum].headtextures = func00012ab0(align16(sizeof(struct perfectheadtexturelist))); +// g_Menus[playernum].fm.headtextures = func00012ab0(align16(sizeof(struct perfectheadtexturelist))); // } else { -// g_Menus[playernum].headtextures = textures; -// g_Menus[playernum].unke40_01 = false; +// g_Menus[playernum].fm.headtextures = textures; +// g_Menus[playernum].fm.unke40_01 = false; // } // } // -// if (g_Menus[playernum].headtextures == NULL) { +// if (g_Menus[playernum].fm.headtextures == NULL) { // faultAssert("tc != NULL", "gamefile.c", 458); // } // // for (i = 0; i != ARRAYCOUNT(g_Menus[playernum].headtextures->fileguids); i++) { -// g_Menus[playernum].headtextures->fileguids[i].filenum = 0; -// g_Menus[playernum].headtextures->fileguids[i].deviceserial = 0; +// g_Menus[playernum].fm.headtextures->fileguids[i].filenum = 0; +// g_Menus[playernum].fm.headtextures->fileguids[i].deviceserial = 0; // } // -// g_Menus[playernum].headtextures->lastupdated240 = 0; +// g_Menus[playernum].fm.headtextures->lastupdated240 = 0; // -// g_Menus[playernum].headtextures->selectedtexture.width = 16; -// g_Menus[playernum].headtextures->selectedtexture.height = 16; -// g_Menus[playernum].headtextures->selectedtexture.level = 0; -// g_Menus[playernum].headtextures->selectedtexture.format = G_IM_FMT_I; -// g_Menus[playernum].headtextures->selectedtexture.depth = 0; -// g_Menus[playernum].headtextures->selectedtexture.s = 0; -// g_Menus[playernum].headtextures->selectedtexture.t = 1; -// g_Menus[playernum].headtextures->selectedtexture.unk0b = 0; +// g_Menus[playernum].fm.headtextures->selectedtexture.width = 16; +// g_Menus[playernum].fm.headtextures->selectedtexture.height = 16; +// g_Menus[playernum].fm.headtextures->selectedtexture.level = 0; +// g_Menus[playernum].fm.headtextures->selectedtexture.format = G_IM_FMT_I; +// g_Menus[playernum].fm.headtextures->selectedtexture.depth = 0; +// g_Menus[playernum].fm.headtextures->selectedtexture.s = 0; +// g_Menus[playernum].fm.headtextures->selectedtexture.t = 1; +// g_Menus[playernum].fm.headtextures->selectedtexture.unk0b = 0; // // for (j = 0; j < 16; j++) { // for (k = 0; k < 0x80; k++) { -// g_Menus[playernum].headtextures->unk000[j][k] = k; +// g_Menus[playernum].fm.headtextures->unk000[j][k] = k; // } // } //} void pheadFreeTextures(s32 playernum) { - if (g_Menus[playernum].headtextures != NULL) { - if (g_Menus[playernum].unke40_01) { - func00012cb4(g_Menus[playernum].headtextures, align16(sizeof(struct perfectheadtexturelist))); + if (g_Menus[playernum].fm.headtextures != NULL) { + if (g_Menus[playernum].fm.unke40_01) { + func00012cb4(g_Menus[playernum].fm.headtextures, align16(sizeof(struct perfectheadtexturelist))); } - g_Menus[playernum].headtextures = NULL; + g_Menus[playernum].fm.headtextures = NULL; } } @@ -647,14 +647,14 @@ struct textureconfig *pheadGetTexture(s32 playernum, s32 filenum, u16 deviceseri s32 indextouse = -1; for (i = 0; i < 16; i++) { - if (g_Menus[playernum].headtextures->fileguids[i].filenum == filenum - && g_Menus[playernum].headtextures->fileguids[i].deviceserial == deviceserial) { + if (g_Menus[playernum].fm.headtextures->fileguids[i].filenum == filenum + && g_Menus[playernum].fm.headtextures->fileguids[i].deviceserial == deviceserial) { indextouse = i; break; } - if (g_Menus[playernum].headtextures->fileguids[i].filenum == 0) { - if (g_Menus[playernum].headtextures->fileguids[i].deviceserial == 0) { + if (g_Menus[playernum].fm.headtextures->fileguids[i].filenum == 0) { + if (g_Menus[playernum].fm.headtextures->fileguids[i].deviceserial == 0) { freeslot = i; } } @@ -671,16 +671,16 @@ struct textureconfig *pheadGetTexture(s32 playernum, s32 filenum, u16 deviceseri return NULL; } - if (g_Vars.thisframe240 - g_Menus[playernum].headtextures->lastupdated240 < 20) { + if (g_Vars.thisframe240 - g_Menus[playernum].fm.headtextures->lastupdated240 < 20) { return NULL; } - g_Menus[playernum].headtextures->lastupdated240 = g_Vars.thisframe240; + g_Menus[playernum].fm.headtextures->lastupdated240 = g_Vars.thisframe240; - func0f15015c(device, filenum, g_Menus[playernum].headtextures->unk000[freeslot]); + func0f15015c(device, filenum, g_Menus[playernum].fm.headtextures->unk000[freeslot]); - g_Menus[playernum].headtextures->fileguids[freeslot].filenum = filenum; - g_Menus[playernum].headtextures->fileguids[freeslot].deviceserial = deviceserial; + g_Menus[playernum].fm.headtextures->fileguids[freeslot].filenum = filenum; + g_Menus[playernum].fm.headtextures->fileguids[freeslot].deviceserial = deviceserial; indextouse = freeslot; } @@ -689,7 +689,7 @@ struct textureconfig *pheadGetTexture(s32 playernum, s32 filenum, u16 deviceseri return NULL; } - g_Menus[playernum].headtextures->selectedtexture.textureptr = g_Menus[playernum].headtextures->unk000[indextouse]; + g_Menus[playernum].fm.headtextures->selectedtexture.textureptr = g_Menus[playernum].fm.headtextures->unk000[indextouse]; - return &g_Menus[playernum].headtextures->selectedtexture; + return &g_Menus[playernum].fm.headtextures->selectedtexture; } diff --git a/src/game/menu/items.c b/src/game/menu/items.c index 18902e648..4ebdfee99 100644 --- a/src/game/menu/items.c +++ b/src/game/menu/items.c @@ -8215,7 +8215,7 @@ char *menuItemScrollableGetText(u32 type) { switch (type) { case DESCRIPTION_MPCONFIG: - return mpconfigGetDescription(g_Menus[g_MpPlayerNum].data.train.mpconfig); + return mpconfigGetDescription(g_Menus[g_MpPlayerNum].training.mpconfig); case DESCRIPTION_MPCHALLENGE: if (!mpIsChallengeLoaded()) { g_Menus[g_MpPlayerNum].unk850 = 0x4fac5ace; @@ -11488,17 +11488,17 @@ u16 menuControllerGetButtonAction(s32 mode, s32 buttonnum) u32 textid = var80071354[mode][buttonnum]; if (textid == L_MPWEAPONS_194 // "AIM" - && optionsGetAimControl(g_Menus[g_MpPlayerNum].data.main.mpindex) == AIMCONTROL_TOGGLE) { + && optionsGetAimControl(g_Menus[g_MpPlayerNum].main.mpindex) == AIMCONTROL_TOGGLE) { textid = L_MPWEAPONS_195; // "AIM TOGGLE" } if (textid == L_MPWEAPONS_196 // "LOOK UP" - && optionsGetForwardPitch(g_Menus[g_MpPlayerNum].data.main.mpindex) == false) { + && optionsGetForwardPitch(g_Menus[g_MpPlayerNum].main.mpindex) == false) { textid = L_MPWEAPONS_198; // "LOOK DOWN" } if (textid == L_MPWEAPONS_197 // "LOOK DOWN" - && optionsGetForwardPitch(g_Menus[g_MpPlayerNum].data.main.mpindex) == false) { + && optionsGetForwardPitch(g_Menus[g_MpPlayerNum].main.mpindex) == false) { textid = L_MPWEAPONS_199; // "LOOK UP" } @@ -11796,21 +11796,21 @@ Gfx *menuRenderItemController(Gfx *gdl, struct menurendercontext *context) func0f153d24(); // If changing modes within the same group (eg. within 1.x) - if (data->curmode != (g_Menus[g_MpPlayerNum].data.main.controlmode & 0xff)) { + if (data->curmode != (g_Menus[g_MpPlayerNum].main.controlmode & 0xff)) { data->prevmode = data->curmode; - data->curmode = g_Menus[g_MpPlayerNum].data.main.controlmode; + data->curmode = g_Menus[g_MpPlayerNum].main.controlmode; data->textfadetimer = 0; } // If changing control group (eg. 1.4 -> 2.1) if (data->controlgroup == 1) { - if (g_Menus[g_MpPlayerNum].data.main.controlmode < CONTROLMODE_21) { + if (g_Menus[g_MpPlayerNum].main.controlmode < CONTROLMODE_21) { data->controlgroup = 2; data->contfadetimer = 0; data->prevmode = -1; } } else { - if (g_Menus[g_MpPlayerNum].data.main.controlmode >= CONTROLMODE_21) { + if (g_Menus[g_MpPlayerNum].main.controlmode >= CONTROLMODE_21) { data->controlgroup = 1; data->contfadetimer = 0; data->prevmode = -1; @@ -11860,13 +11860,13 @@ Gfx *menuRenderItemController(Gfx *gdl, struct menurendercontext *context) g_MenuColourPalettes3[frame->type].unfocused, g_MenuColourPalettes2[frame->type].unfocused); - if (g_Menus[g_MpPlayerNum].data.main.controlmode >= CONTROLMODE_21) { + if (g_Menus[g_MpPlayerNum].main.controlmode >= CONTROLMODE_21) { sprintf(text, langGet(L_MPWEAPONS_213), // "Control Style %s %s" - langGet(g_ControlStyleOptions[g_Menus[g_MpPlayerNum].data.main.controlmode]), + langGet(g_ControlStyleOptions[g_Menus[g_MpPlayerNum].main.controlmode]), langGet(L_MPWEAPONS_215)); // "(Two-Handed)" } else { sprintf(text, langGet(L_MPWEAPONS_213), // "Control Style %s %s" - langGet(g_ControlStyleOptions[g_Menus[g_MpPlayerNum].data.main.controlmode]), + langGet(g_ControlStyleOptions[g_Menus[g_MpPlayerNum].main.controlmode]), langGet(L_MPWEAPONS_214)); // "(One-Handed)" } @@ -11879,16 +11879,16 @@ Gfx *menuRenderItemController(Gfx *gdl, struct menurendercontext *context) textcolour = colourBlend(colour, colour & 0xffffff00, textalpha); colour = colourBlend(colour, colour & 0xffffff00, contalpha); - if (g_Menus[g_MpPlayerNum].data.main.controlmode >= CONTROLMODE_21) { + if (g_Menus[g_MpPlayerNum].main.controlmode >= CONTROLMODE_21) { gdl = menuRenderControllerInfo(gdl, context, 0, 12, - g_Menus[g_MpPlayerNum].data.main.controlmode, + g_Menus[g_MpPlayerNum].main.controlmode, contalpha, textcolour, colour, data->prevmode); gdl = menuRenderControllerInfo(gdl, context, 0, 80, - g_Menus[g_MpPlayerNum].data.main.controlmode + 4, + g_Menus[g_MpPlayerNum].main.controlmode + 4, contalpha, textcolour, colour, data->prevmode); } else { gdl = menuRenderControllerInfo(gdl, context, 0, PAL ? 19 : 15, - g_Menus[g_MpPlayerNum].data.main.controlmode, + g_Menus[g_MpPlayerNum].main.controlmode, contalpha, textcolour, colour, data->prevmode); x = context->x; diff --git a/src/game/mplayer/ingame.c b/src/game/mplayer/ingame.c index 7e03cbe05..2692562ab 100644 --- a/src/game/mplayer/ingame.c +++ b/src/game/mplayer/ingame.c @@ -202,7 +202,7 @@ char *menutextMatchTime(s32 arg0) char *mpMenuTextWeaponDescription(struct menuitem *item) { - struct weapon *weapon = weaponFindById(g_Menus[g_MpPlayerNum].data.mppause.weaponnum); + struct weapon *weapon = weaponFindById(g_Menus[g_MpPlayerNum].mppause.weaponnum); if (weapon) { return langGet(weapon->description); diff --git a/src/game/mplayer/setup.c b/src/game/mplayer/setup.c index 67f26309e..f4f40711c 100644 --- a/src/game/mplayer/setup.c +++ b/src/game/mplayer/setup.c @@ -575,7 +575,7 @@ s32 menuhandlerMpSaveSetupOverwrite(s32 operation, struct menuitem *item, union { if (operation == MENUOP_SET) { menuPopDialog(); - func0f1094e4(&g_MpSetup.fileguid, FILEOP_SAVE_MPSETUP, NULL); + filemgrSaveOrLoad(&g_MpSetup.fileguid, FILEOP_SAVE_MPSETUP, 0); } return 0; @@ -3651,7 +3651,7 @@ glabel var7f1b818c /* f17bc40: afae0024 */ sw $t6,0x24($sp) /* f17bc44: 946d0004 */ lhu $t5,0x4($v1) /* f17bc48: 00003025 */ or $a2,$zero,$zero -/* f17bc4c: 0fc42539 */ jal func0f1094e4 +/* f17bc4c: 0fc42539 */ jal filemgrSaveOrLoad /* f17bc50: a7ad0028 */ sh $t5,0x28($sp) /* f17bc54: 8faf0034 */ lw $t7,0x34($sp) .L0f17bc58: @@ -3921,7 +3921,7 @@ glabel var7f1b818c /* f1763a0: afae0024 */ sw $t6,0x24($sp) /* f1763a4: 946d0004 */ lhu $t5,0x4($v1) /* f1763a8: 00003025 */ or $a2,$zero,$zero -/* f1763ac: 0fc41358 */ jal func0f1094e4 +/* f1763ac: 0fc41358 */ jal filemgrSaveOrLoad /* f1763b0: a7ad0028 */ sh $t5,0x28($sp) /* f1763b4: 8faf0034 */ lw $t7,0x34($sp) .NB0f1763b8: @@ -4061,14 +4061,14 @@ char *mpMenuTextMpconfigMarquee(struct menuitem *item) s32 arenanum; s32 i; - if (g_Menus[g_MpPlayerNum].data.mpsetup.slotindex < 0xffff && g_FileLists[1]) { + if (g_Menus[g_MpPlayerNum].mpsetup.slotindex < 0xffff && g_FileLists[1]) { #if VERSION >= VERSION_NTSC_1_0 arenanum = -1; #else arenanum = 0; #endif - mpsetupfileGetOverview(g_FileLists[1]->files[g_Menus[g_MpPlayerNum].data.mpsetup.slotindex].unk06, + mpsetupfileGetOverview(g_FileLists[1]->files[g_Menus[g_MpPlayerNum].mpsetup.slotindex].name, filename, &numsims, &stagenum, &scenarionum); for (i = 0; i < ARRAYCOUNT(g_MpArenas); i++) { @@ -4211,7 +4211,7 @@ glabel var7f1b81a8 /* f17c108: 3c068007 */ lui $a2,%hi(g_MpPlayerNum) /* f17c10c: 8cc61448 */ lw $a2,%lo(g_MpPlayerNum)($a2) /* f17c110: 27a40044 */ addiu $a0,$sp,0x44 -/* f17c114: 0fc42539 */ jal func0f1094e4 +/* f17c114: 0fc42539 */ jal filemgrSaveOrLoad /* f17c118: 24050065 */ addiu $a1,$zero,0x65 /* f17c11c: 10000018 */ b .L0f17c180 /* f17c120: 00001025 */ or $v0,$zero,$zero @@ -4360,7 +4360,7 @@ glabel var7f1b81a8 /* f176828: 3c068007 */ lui $a2,0x8007 /* f17682c: 8cc63af0 */ lw $a2,0x3af0($a2) /* f176830: 27a40044 */ addiu $a0,$sp,0x44 -/* f176834: 0fc41358 */ jal func0f1094e4 +/* f176834: 0fc41358 */ jal filemgrSaveOrLoad /* f176838: 24050065 */ addiu $a1,$zero,0x65 /* f17683c: 10000018 */ beqz $zero,.NB0f1768a0 /* f176840: 00001025 */ or $v0,$zero,$zero @@ -4521,7 +4521,7 @@ s32 menudialogMpReady(s32 operation, struct menudialog *dialog, union handlerdat { if (operation == MENUOP_OPEN) { if (g_MpPlayers[g_MpPlayerNum].fileguid.filenum && g_MpPlayers[g_MpPlayerNum].fileguid.deviceserial) { - func0f1094e4(&g_MpPlayers[g_MpPlayerNum].fileguid, FILEOP_SAVE_MPPLAYER, (void *)g_MpPlayerNum); + filemgrSaveOrLoad(&g_MpPlayers[g_MpPlayerNum].fileguid, FILEOP_SAVE_MPPLAYER, g_MpPlayerNum); } } @@ -4531,7 +4531,7 @@ s32 menudialogMpReady(s32 operation, struct menudialog *dialog, union handlerdat s32 menudialogMpSimulant(s32 operation, struct menudialog *dialog, union handlerdata *data) { if (operation == MENUOP_TICK) { - if ((u8)g_MpSimulants[g_Menus[g_MpPlayerNum].data.mpsetup.slotindex].base.name[0] == '\0') { + if ((u8)g_MpSimulants[g_Menus[g_MpPlayerNum].mpsetup.slotindex].base.name[0] == '\0') { menuPopDialog(); } } @@ -4977,7 +4977,7 @@ glabel var7f1b81e8 char *mpMenuTextSimulantDescription(struct menuitem *item) { - return langGet(L_MISC_106 + g_Menus[g_MpPlayerNum].data.mpsetup.unke24); + return langGet(L_MISC_106 + g_Menus[g_MpPlayerNum].mpsetup.unke24); } s32 menuhandlerMpSimulantHead(s32 operation, struct menuitem *item, union handlerdata *data) @@ -4995,28 +4995,28 @@ s32 menuhandlerMpSimulantHead(s32 operation, struct menuitem *item, union handle */ switch (operation) { case MENUOP_SET: - g_MpSimulants[g_Menus[g_MpPlayerNum].data.mpsetup.slotindex].base.mpheadnum = start + data->carousel.value; + g_MpSimulants[g_Menus[g_MpPlayerNum].mpsetup.slotindex].base.mpheadnum = start + data->carousel.value; case MENUOP_FOCUS: if (operation == MENUOP_FOCUS && item->param2 == 1 - && g_MpSimulants[g_Menus[g_MpPlayerNum].data.mpsetup.slotindex].base.mpheadnum < start) { - g_MpSimulants[g_Menus[g_MpPlayerNum].data.mpsetup.slotindex].base.mpheadnum = start; + && g_MpSimulants[g_Menus[g_MpPlayerNum].mpsetup.slotindex].base.mpheadnum < start) { + g_MpSimulants[g_Menus[g_MpPlayerNum].mpsetup.slotindex].base.mpheadnum = start; } break; } - return func0f17b4f8(operation, item, data, g_MpSimulants[g_Menus[g_MpPlayerNum].data.mpsetup.slotindex].base.mpheadnum, 0); + return func0f17b4f8(operation, item, data, g_MpSimulants[g_Menus[g_MpPlayerNum].mpsetup.slotindex].base.mpheadnum, 0); } s32 menuhandlerMpSimulantBody(s32 operation, struct menuitem *item, union handlerdata *data) { if (operation == MENUOP_SET) { - g_MpSimulants[g_Menus[g_MpPlayerNum].data.mpsetup.slotindex].base.mpbodynum = data->carousel.value; + g_MpSimulants[g_Menus[g_MpPlayerNum].mpsetup.slotindex].base.mpbodynum = data->carousel.value; } return func0f179da4(operation, item, data, - g_MpSimulants[g_Menus[g_MpPlayerNum].data.mpsetup.slotindex].base.mpbodynum, - g_MpSimulants[g_Menus[g_MpPlayerNum].data.mpsetup.slotindex].base.mpheadnum, + g_MpSimulants[g_Menus[g_MpPlayerNum].mpsetup.slotindex].base.mpbodynum, + g_MpSimulants[g_Menus[g_MpPlayerNum].mpsetup.slotindex].base.mpheadnum, 0); } @@ -5294,7 +5294,7 @@ glabel menuhandlerMpSimulantDifficulty s32 menuhandlerMpDeleteSimulant(s32 operation, struct menuitem *item, union handlerdata *data) { if (operation == MENUOP_SET) { - mpRemoveSimulant(g_Menus[g_MpPlayerNum].data.mpsetup.slotindex); + mpRemoveSimulant(g_Menus[g_MpPlayerNum].mpsetup.slotindex); menuPopDialog(); } @@ -5303,7 +5303,7 @@ s32 menuhandlerMpDeleteSimulant(s32 operation, struct menuitem *item, union hand char *mpMenuTitleEditSimulant(struct menudialog *dialog) { - sprintf(g_StringPointer, "%s", &g_MpSimulants[g_Menus[g_MpPlayerNum].data.mpsetup.slotindex].base.name); + sprintf(g_StringPointer, "%s", &g_MpSimulants[g_Menus[g_MpPlayerNum].mpsetup.slotindex].base.name); return g_StringPointer; } @@ -5313,8 +5313,8 @@ s32 menuhandlerMpChangeSimulantType(s32 operation, struct menuitem *item, union s32 i; s32 count = 0; s32 simtypeindex = mpGetSimTypeIndex( - g_MpSimulants[g_Menus[g_MpPlayerNum].data.mpsetup.slotindex].base.simtype, - g_MpSimulants[g_Menus[g_MpPlayerNum].data.mpsetup.slotindex].difficulty); + g_MpSimulants[g_Menus[g_MpPlayerNum].mpsetup.slotindex].base.simtype, + g_MpSimulants[g_Menus[g_MpPlayerNum].mpsetup.slotindex].difficulty); for (i = 0; i < simtypeindex; i++) { if (mpIsFeatureUnlocked(g_MpSimulantTypes[i].requirefeature)) { @@ -5322,7 +5322,7 @@ s32 menuhandlerMpChangeSimulantType(s32 operation, struct menuitem *item, union } } - g_Menus[g_MpPlayerNum].data.mpsetup.slotcount = count; + g_Menus[g_MpPlayerNum].mpsetup.slotcount = count; menuPushDialog(&g_MpChangeSimulantMenuDialog); } @@ -5346,7 +5346,7 @@ s32 menuhandlerMpAddSimulant(s32 operation, struct menuitem *item, union handler { switch (operation) { case MENUOP_SET: - g_Menus[g_MpPlayerNum].data.mpsetup.slotindex = -1; + g_Menus[g_MpPlayerNum].mpsetup.slotindex = -1; menuPushDialog(&g_MpAddSimulantMenuDialog); break; case MENUOP_CHECKDISABLED: @@ -5362,7 +5362,7 @@ s32 menuhandlerMpSimulantSlot(s32 operation, struct menuitem *item, union handle { switch (operation) { case MENUOP_SET: - g_Menus[g_MpPlayerNum].data.mpsetup.slotindex = item->param; + g_Menus[g_MpPlayerNum].mpsetup.slotindex = item->param; if ((g_MpSetup.chrslots & (1 << (item->param + 4))) == 0) { menuPushDialog(&g_MpAddSimulantMenuDialog); @@ -5413,7 +5413,7 @@ char *func0f17d3dc(struct menuitem *item) s32 menudialogMpSimulants(s32 operation, struct menudialog *dialog, union handlerdata *data) { if (operation == MENUOP_OPEN) { - g_Menus[g_MpPlayerNum].data.mpsetup.slotcount = 0; + g_Menus[g_MpPlayerNum].mpsetup.slotcount = 0; } return false; @@ -6313,7 +6313,7 @@ char *mpMenuTextTeamName(struct menuitem *item) s32 menuhandlerMpTeamNameSlot(s32 operation, struct menuitem *item, union handlerdata *data) { if (operation == MENUOP_SET) { - g_Menus[g_MpPlayerNum].data.mpsetup.slotindex = item->param2 - 0x5608; + g_Menus[g_MpPlayerNum].mpsetup.slotindex = item->param2 - 0x5608; menuPushDialog(&g_MpChangeTeamNameMenuDialog); } @@ -6322,7 +6322,7 @@ s32 menuhandlerMpTeamNameSlot(s32 operation, struct menuitem *item, union handle char *func0f17e318(struct menudialog *dialog) { - sprintf(g_StringPointer, langGet(L_MPMENU_056), mpGetChallengeNameBySlot(g_Menus[g_MpPlayerNum].data.mpsetup.slotindex)); + sprintf(g_StringPointer, langGet(L_MPMENU_056), mpGetChallengeNameBySlot(g_Menus[g_MpPlayerNum].mpsetup.slotindex)); return g_StringPointer; } @@ -6337,7 +6337,7 @@ s32 menuhandler0017e38c(s32 operation, struct menuitem *item, union handlerdata #endif menuPopDialog(); - mpSetCurrentChallenge(g_Menus[g_MpPlayerNum].data.mpsetup.slotindex); + mpSetCurrentChallenge(g_Menus[g_MpPlayerNum].mpsetup.slotindex); } return 0; @@ -6349,8 +6349,8 @@ s32 menudialog0017e3fc(s32 operation, struct menudialog *dialog, union handlerda case MENUOP_OPEN: g_Menus[g_MpPlayerNum].unk850 = 0; - g_Menus[g_MpPlayerNum].data.train.mpconfig = mpGetNthAvailableChallengeSomething( - g_Menus[g_MpPlayerNum].data.train.unke1c, + g_Menus[g_MpPlayerNum].training.mpconfig = mpGetNthAvailableChallengeSomething( + g_Menus[g_MpPlayerNum].training.unke1c, g_Menus[g_MpPlayerNum].mpconfigbuffer, g_Menus[g_MpPlayerNum].mpconfigbufferlen); break; @@ -7211,7 +7211,7 @@ s32 mpCombatChallengesMenuDialog(s32 operation, struct menudialog *dialog, union s32 menuhandler0017ec64(s32 operation, struct menuitem *item, union handlerdata *data) { if (operation == MENUOP_SET) { - mpSetCurrentChallenge(g_Menus[g_MpPlayerNum].data.mpsetup.slotindex); + mpSetCurrentChallenge(g_Menus[g_MpPlayerNum].mpsetup.slotindex); func0f0f820c(&g_MpQuickGoMenuDialog, 3); } @@ -7450,7 +7450,7 @@ s32 menuhandlerMpSaveSettings(s32 operation, struct menuitem *item, union handle menuPushDialog(&g_MpSaveSetupNameMenuDialog); } else { #if VERSION >= VERSION_NTSC_1_0 - func0f108324(g_MpSetup.fileguid.deviceserial); + filemgrSetDevice1BySerial(g_MpSetup.fileguid.deviceserial); #endif menuPushDialog(&g_MpSaveSetupExistsMenuDialog); diff --git a/src/game/training/menus.c b/src/game/training/menus.c index d9fb7409e..1e5ba2d4f 100644 --- a/src/game/training/menus.c +++ b/src/game/training/menus.c @@ -883,7 +883,7 @@ s32 frTrainingInfoMenuDialog(s32 operation, struct menudialog *dialog, union han switch (operation) { case MENUOP_OPEN: weaponnum = frGetWeaponBySlot(frGetSlot()); - g_Menus[g_MpPlayerNum].data.train.weaponnum = weaponnum; + g_Menus[g_MpPlayerNum].training.weaponnum = weaponnum; func0f105948(weaponnum); if (!frIsInTraining()) { @@ -4996,7 +4996,7 @@ s32 dtTrainingDetailsMenuDialog(s32 operation, struct menudialog *dialog, union s32 weaponnum = dtGetWeaponByDeviceIndex(dtGetIndexBySlot(g_DtSlot)); u16 unused[] = {64250, 38500, 25650, 25700, 12950}; func0f1a1ac0(); - g_Menus[g_MpPlayerNum].data.train.weaponnum = weaponnum; + g_Menus[g_MpPlayerNum].training.weaponnum = weaponnum; func0f105948(weaponnum); #if VERSION >= VERSION_PAL_FINAL diff --git a/src/game/training/training.c b/src/game/training/training.c index d46883ac9..2e7944524 100644 --- a/src/game/training/training.c +++ b/src/game/training/training.c @@ -3201,7 +3201,7 @@ glabel var7f1b94e4 /* f1a0ce0: 3c04800a */ lui $a0,0x800a /* f1a0ce4: 24842860 */ addiu $a0,$a0,0x2860 /* f1a0ce8: 00002825 */ move $a1,$zero -/* f1a0cec: 0fc42793 */ jal func0f1094e4 +/* f1a0cec: 0fc42793 */ jal filemgrSaveOrLoad /* f1a0cf0: 00003025 */ move $a2,$zero /* f1a0cf4: 10000339 */ b .PF0f1a19dc /* f1a0cf8: 8fbf007c */ lw $ra,0x7c($sp) @@ -4301,7 +4301,7 @@ glabel var7f1b94e4 /* f19fbcc: 3c04800a */ lui $a0,%hi(g_GameFileGuid) /* f19fbd0: 248422c0 */ addiu $a0,$a0,%lo(g_GameFileGuid) /* f19fbd4: 00002825 */ or $a1,$zero,$zero -/* f19fbd8: 0fc42539 */ jal func0f1094e4 +/* f19fbd8: 0fc42539 */ jal filemgrSaveOrLoad /* f19fbdc: 00003025 */ or $a2,$zero,$zero /* f19fbe0: 10000344 */ b .L0f1a08f4 /* f19fbe4: 8fbf007c */ lw $ra,0x7c($sp) @@ -5460,7 +5460,7 @@ glabel var7f1b94e4 /* f199c7c: 3c04800a */ lui $a0,0x800a /* f199c80: 248467b0 */ addiu $a0,$a0,0x67b0 /* f199c84: 00002825 */ or $a1,$zero,$zero -/* f199c88: 0fc41358 */ jal func0f1094e4 +/* f199c88: 0fc41358 */ jal filemgrSaveOrLoad /* f199c8c: 00003025 */ or $a2,$zero,$zero /* f199c90: 1000031c */ beqz $zero,.NB0f19a904 /* f199c94: 8fbf007c */ lw $ra,0x7c($sp) @@ -6426,7 +6426,7 @@ glabel var7f1b94e4 // case FRMENUTYPE_COMPLETED: // sndStart(var80095200, SFX_TRAINING_COMPLETE, NULL, -1, -1, -1, -1, -1); // func0f0f85e0(&g_FrCompletedMenuDialog, MENUROOT_TRAINING); -// func0f1094e4(&g_GameFileGuid, FILEOP_SAVE_GAME_000, 0); +// filemgrSaveOrLoad(&g_GameFileGuid, FILEOP_SAVE_GAME_000, 0); // break; // } // } diff --git a/src/include/game/game_107fb0.h b/src/include/game/game_107fb0.h index e0e844d46..07fd9bfb6 100644 --- a/src/include/game/game_107fb0.h +++ b/src/include/game/game_107fb0.h @@ -8,9 +8,9 @@ char *filemgrGetDeviceName(s32 index); char *filemgrMenuTextDeviceName(struct menuitem *item); void filemgrGetSelectName(char *buffer, struct filelistfile *file, u32 filetype); char *filemgrMenuTextDeleteFileName(struct menuitem *item); -void func0f108324(s32 deviceserial); -void func0f1083b0(struct filelistfile *file); -void func0f1083d0(struct filelistfile *file, s32 filetype); +void filemgrSetDevice1BySerial(s32 deviceserial); +void filemgrSetDevice1ByFile(struct filelistfile *file); +void filemgrSetFileToDelete(struct filelistfile *file, s32 filetype); char *filemgrMenuTextFailReason(struct menuitem *item); char *filemgrMenuTextDeviceNameForError(struct menuitem *item); void filemgrPushErrorDialog(u16 errno); @@ -23,15 +23,15 @@ void filemgrEraseCorruptFile(void); char *filemgrMenuTextInsertOriginalPak(struct menuitem *item); void filemgrRetrySave(s32 arg0); bool filemgrAttemptOperation(s32 device, bool closeonsuccess); -bool func0f1094e4(struct fileguid *guid, s32 fileop, void *arg2); +bool filemgrSaveOrLoad(struct fileguid *guid, s32 fileop, u32 playernum); void filemgrDeleteCurrentFile(void); void func0f1097d0(s32 device); -void func0f109954(s32 arg0); +void filemgrSaveGameToDevice(s32 device); void filemgrGetFileName(char *dst, struct filelistfile *file); void filemgrGetRenameName(char *buffer); void filemgrSetRenameName(char *name); bool filemgrIsNameAvailable(s32 arg0); -void func0f109ec4(void); +void filemgrSaveToDevice(void); char *filemgrMenuTextDeviceNameContainingDuplicateFile(struct menuitem *item); char *filemgrMenuTextDuplicateFileName(struct menuitem *item); char *filemgrMenuTextLocationName2(struct menuitem *item); diff --git a/src/include/game/game_110680.h b/src/include/game/game_110680.h index 6aae42ccb..612303af8 100644 --- a/src/include/game/game_110680.h +++ b/src/include/game/game_110680.h @@ -11,8 +11,8 @@ void bossfileSave(void); void bossfileSetDefaults(void); void func0f110bf0(void); void func0f110bf8(void); -void func0f110c5c(s32 listnum, u8 filetype); -s32 func0f110cf8(u8 filetype); +void filelistCreate(s32 listnum, u8 filetype); +s32 filelistFindOrCreate(u8 filetype); void func0f110d90(s32 index); void filelistsTick(void); void filelistUpdate(struct filelist *list); diff --git a/src/include/types.h b/src/include/types.h index 65efac0bf..1ec69e047 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -3839,27 +3839,44 @@ struct menudata_mpend { u32 unke1c; }; -// Not sure if filemgr and pak are the same struct struct menudata_filemgr { - u32 filetypeplusone; - u32 device; - u32 unke24; - u32 isdeletingforsave; - u32 unke2c; -}; - -struct menudata_pak { - u32 unke1c; - u32 device; - u32 unke24; - u32 noteindex; + /*0xe1c*/ u32 filetypeplusone; + /*0xe20*/ u32 device; + /*0xe24*/ u32 unke24; + union { + u32 isdeletingforsave; + u32 noteindex; + }; + /*0xe2c*/ u32 unke2c; + /*0xe30*/ u32 unke30; + /*0xe34*/ u16 errno; + /*0xe38*/ struct filelistfile *filetodelete; + /*0xe3c*/ u8 device1; + /*0xe3d*/ u8 filetypetodelete; + /*0xe3e*/ u8 unke3e; + /*0xe3f*/ u8 listnum; + /*0xe40*/ u16 unke40_00 : 1; + /*0xe40*/ u16 unke40_01 : 1; + /*0xe40*/ u16 unke40_02 : 14; + /*0xe42*/ u8 fileop; + union { + void *unke44; + s32 mpplayernum; + }; + /*0xe48*/ u32 filenum; + /*0xe4c*/ u32 deviceserial; + /*0xe50*/ u16 isretryingsave; + /*0xe52*/ u8 device2; + /*0xe53*/ char filename[20]; + /*0xe68*/ struct perfectheadtexturelist *headtextures; + /*0xe6c*/ s8 device3; }; struct menudata_main4mb { u32 slotindex; }; -struct menudata_train { +struct menudata_training { u32 unke1c; struct mpconfigfull *mpconfig; u32 unke24; @@ -4491,36 +4508,10 @@ struct menu { struct menudata_mpsetup mpsetup; struct menudata_mppause mppause; struct menudata_mpend mpend; - struct menudata_filemgr filemgr; - struct menudata_pak pak; + struct menudata_filemgr fm; struct menudata_main4mb main4mb; - struct menudata_train train; - } data; - - /*0xe30*/ u32 unke30; - /*0xe34*/ u16 errno; - /*0xe38*/ struct filelistfile *unke38; - /*0xe3c*/ u8 unke3c; - /*0xe3d*/ u8 unke3d; - /*0xe3e*/ u8 unke3e; - /*0xe3f*/ u8 listnum; - /*0xe40*/ u16 unke40_00 : 1; - /*0xe40*/ u16 unke40_01 : 1; - /*0xe40*/ u16 unke40_02 : 14; - /*0xe42*/ u8 fileop; - /*0xe44*/ void *unke44; - /*0xe48*/ u32 filenum; - /*0xe4c*/ u32 deviceserial; - /*0xe50*/ u16 isretryingsave; - /*0xe52*/ u8 device; - /*0xe53*/ char unke53[1]; - /*0xe54*/ u32 unke54; - /*0xe58*/ u32 unke58; - /*0xe5c*/ u32 unke5c; - /*0xe60*/ u32 unke60; - /*0xe64*/ u32 unke64; - /*0xe68*/ struct perfectheadtexturelist *headtextures; - /*0xe6c*/ s8 savedevice; // 0-3 = controller pak 1-4, 4 = game pak + struct menudata_training training; + }; }; struct gamefile { @@ -4689,10 +4680,7 @@ struct mparena { struct filelistfile { s32 filenum; u16 deviceserial; - char unk06[6]; // length unknown - u32 unk0c; - u32 unk10; - u32 unk14; + char name[16]; }; // This stores information about all files of a particular filetype across all