From 9b4be0961d61ccd72ae065241e90d32e5f6a6275 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Wed, 15 Sep 2021 22:06:29 +1000 Subject: [PATCH] Discover file GUIDs --- src/game/endscreen.c | 6 +- src/game/game_0d4690.c | 12 +- src/game/game_0f09f0.c | 4 +- src/game/game_102240.c | 4 +- src/game/game_107fb0.c | 201 +++++++++++++++-------------- src/game/game_110680.c | 64 ++++----- src/game/gamefile.c | 20 +-- src/game/mplayer/ingame.c | 4 +- src/game/mplayer/mplayer.c | 84 ++++++------ src/game/mplayer/setup.c | 14 +- src/game/pak/pak.c | 14 +- src/game/training/training.c | 6 +- src/include/bss.h | 4 +- src/include/game/camdraw.h | 4 +- src/include/game/game_0d4690.h | 4 +- src/include/game/game_107fb0.h | 8 +- src/include/game/gamefile.h | 4 +- src/include/game/mplayer/mplayer.h | 8 +- src/include/game/pak/pak.h | 8 +- src/include/types.h | 44 +++---- 20 files changed, 253 insertions(+), 264 deletions(-) diff --git a/src/game/endscreen.c b/src/game/endscreen.c index 341545a44..fdf825bb4 100644 --- a/src/game/endscreen.c +++ b/src/game/endscreen.c @@ -1365,7 +1365,7 @@ void endscreenPrepare(void) } } - func0f1094e4(&g_FilemgrLoadedMainFile, FILEOP_SAVE_GAME_000, 0); + func0f1094e4(&g_GameFileGuid, FILEOP_SAVE_GAME_000, 0); } if (g_MenuData.root == MENUROOT_ENDSCREEN) { @@ -1666,7 +1666,7 @@ void soloPushCoopModeEndscreen(void) } if (g_Vars.currentplayer == g_Vars.bond) { - func0f1094e4(&g_FilemgrLoadedMainFile, FILEOP_SAVE_GAME_000, NULL); + func0f1094e4(&g_GameFileGuid, FILEOP_SAVE_GAME_000, NULL); } g_MpPlayerNum = prevplayernum; @@ -1806,7 +1806,7 @@ void soloPushAntiModeEndscreen(void) } } - func0f1094e4(&g_FilemgrLoadedMainFile, FILEOP_SAVE_GAME_000, 0); + func0f1094e4(&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_0d4690.c b/src/game/game_0d4690.c index 2afcf7742..9575b202e 100644 --- a/src/game/game_0d4690.c +++ b/src/game/game_0d4690.c @@ -917,16 +917,16 @@ glabel func0f0d5690 //} #endif -void func0f0d575c(struct savebuffer *buffer, struct maybesavelocation_2d8 *arg1) +void savebufferWriteGuid(struct savebuffer *buffer, struct fileguid *guid) { - savebufferOr(buffer, arg1->unk00, 7); - savebufferOr(buffer, arg1->unk04, 13); + savebufferOr(buffer, guid->filenum, 7); + savebufferOr(buffer, guid->deviceserial, 13); } -void func0f0d579c(struct savebuffer *buffer, struct maybesavelocation_2d8 *arg1) +void savebufferReadGuid(struct savebuffer *buffer, struct fileguid *guid) { - arg1->unk00 = savebufferReadBits(buffer, 7); - arg1->unk04 = savebufferReadBits(buffer, 13); + guid->filenum = savebufferReadBits(buffer, 7); + guid->deviceserial = savebufferReadBits(buffer, 13); } GLOBAL_ASM( diff --git a/src/game/game_0f09f0.c b/src/game/game_0f09f0.c index f9fc0a95b..442ed2e04 100644 --- a/src/game/game_0f09f0.c +++ b/src/game/game_0f09f0.c @@ -4828,8 +4828,8 @@ glabel func0f0f3220 /* f0f32fc: 24080001 */ addiu $t0,$zero,0x1 .L0f0f3300: /* f0f3300: 11000009 */ beqz $t0,.L0f0f3328 -/* f0f3304: 3c04800a */ lui $a0,%hi(g_FilemgrLoadedMainFile) -/* f0f3308: 248422c0 */ addiu $a0,$a0,%lo(g_FilemgrLoadedMainFile) +/* 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 /* f0f3314: afa9001c */ sw $t1,0x1c($sp) diff --git a/src/game/game_102240.c b/src/game/game_102240.c index 1d2794f98..2e3286ebf 100644 --- a/src/game/game_102240.c +++ b/src/game/game_102240.c @@ -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_FilemgrLoadedMainFile, FILEOP_SAVE_GAME_001, 0) == 0) { + if (func0f1094e4(&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_FilemgrLoadedMainFile, FILEOP_SAVE_GAME_002, 0); + func0f1094e4(&g_GameFileGuid, FILEOP_SAVE_GAME_002, 0); } return 0; diff --git a/src/game/game_107fb0.c b/src/game/game_107fb0.c index 17ca91bde..08554cf92 100644 --- a/src/game/game_107fb0.c +++ b/src/game/game_107fb0.c @@ -19,13 +19,13 @@ #include "types.h" // bss -struct savelocation_2d8 g_FilemgrFileToCopy; -struct savelocation_2d8 var800a21e8; -struct savelocation_2d8 g_FilemgrFileToDelete; -struct savelocation_2d8 var800a21f8; +struct fileguid g_FilemgrFileToCopy; +struct fileguid var800a21e8; +struct fileguid g_FilemgrFileToDelete; +struct fileguid var800a21f8; struct gamefile g_GameFile; u32 var800a22bc; -struct savelocation_2d8 g_FilemgrLoadedMainFile; +struct fileguid g_GameFileGuid; // These might be able to be removed by relocating their symbols struct menudialog g_FilemgrCopyMenuDialog; @@ -204,12 +204,12 @@ char *filemgrMenuTextDeleteFileName(struct menuitem *item) return NULL; } -void func0f108324(s32 arg0) +void func0f108324(s32 deviceserial) { - s32 index = pakSearch(arg0); + s32 device = pakFindBySerial(deviceserial); - if (index >= 0) { - g_Menus[g_MpPlayerNum].unke3c = index; + if (device >= 0) { + g_Menus[g_MpPlayerNum].unke3c = device; } else { g_Menus[g_MpPlayerNum].unke3c = SAVEDEVICE_INVALID; } @@ -217,7 +217,7 @@ void func0f108324(s32 arg0) void func0f1083b0(struct filelistfile *file) { - func0f108324(file->unk04); + func0f108324(file->deviceserial); } void func0f1083d0(struct filelistfile *file, s32 filetype) @@ -475,8 +475,8 @@ void filemgrHandleSuccess(void) align16(var7f1b2f3c[g_Menus[g_MpPlayerNum].data.filemgr.filetypeplusone - 1])); break; case FILEOP_LOAD_GAME: - g_Vars.unk00047c = g_Menus[g_MpPlayerNum].unke48; - g_Vars.unk000480 = g_Menus[g_MpPlayerNum].unke4c; + g_Vars.bossfilenum = g_Menus[g_MpPlayerNum].filenum; + g_Vars.bossdeviceserial = g_Menus[g_MpPlayerNum].deviceserial; bossfileSave(); if (IS4MB()) { @@ -581,13 +581,13 @@ s32 filemgrAcknowledgeFileLostMenuHandler(s32 operation, struct menuitem *item, #if VERSION >= VERSION_NTSC_1_0 void filemgrEraseCorruptFile(void) { - s32 value; + s32 device; s32 i; - value = pakSearch(g_Menus[g_MpPlayerNum].unke4c); + device = pakFindBySerial(g_Menus[g_MpPlayerNum].deviceserial); - if (value >= 0) { - filemgrDeleteFile(value, g_Menus[g_MpPlayerNum].unke48); + if (device >= 0) { + filemgrDeleteFile(device, g_Menus[g_MpPlayerNum].filenum); } for (i = 0; i < 4; i++) { @@ -672,9 +672,9 @@ char *filemgrMenuTextInsertOriginalPak(struct menuitem *item) */ void filemgrRetrySave(s32 context) { - s32 index = pakSearch(g_Menus[g_MpPlayerNum].unke4c); + s32 device = pakFindBySerial(g_Menus[g_MpPlayerNum].deviceserial); - if (index == -1) { + if (device == -1) { if (context == 1) { filemgrPushErrorDialog(FILEERROR_NOPAK); } @@ -682,9 +682,9 @@ void filemgrRetrySave(s32 context) if (context == 2) { func0f0f3704(&g_PakNotOriginalMenuDialog); } - } else if (filemgrAttemptOperation(index, true)) { + } else if (filemgrAttemptOperation(device, true)) { if (context == 2) { - g_Menus[g_MpPlayerNum].unke3c = index; + g_Menus[g_MpPlayerNum].unke3c = device; if (FILEOP_IS_SAVE(g_Menus[g_MpPlayerNum].fileop)) { filemgrPushErrorDialog(FILEERROR_SAVEFAILED); @@ -692,7 +692,7 @@ void filemgrRetrySave(s32 context) filemgrPushErrorDialog(FILEERROR_LOADFAILED); } } else { - func0f108324(g_Menus[g_MpPlayerNum].unke4c); + func0f108324(g_Menus[g_MpPlayerNum].deviceserial); if (FILEOP_IS_SAVE(g_Menus[g_MpPlayerNum].fileop)) { func0f0f3704(&g_FilemgrSaveErrorMenuDialog); @@ -709,7 +709,7 @@ void filemgrRetrySave(s32 context) } #if VERSION >= VERSION_NTSC_1_0 -bool filemgrAttemptOperation(s32 arg0, bool closeonsuccess) +bool filemgrAttemptOperation(s32 device, bool closeonsuccess) { s32 errno = 0; bool showfilesaved = (g_Menus[g_MpPlayerNum].isretryingsave & 1) != 0; @@ -723,20 +723,20 @@ bool filemgrAttemptOperation(s32 arg0, bool closeonsuccess) // fall through case FILEOP_SAVE_GAME_000: case FILEOP_SAVE_GAME_001: - errno = gamefileSave(arg0, - g_Menus[g_MpPlayerNum].unke48, - g_Menus[g_MpPlayerNum].unke4c); + errno = gamefileSave(device, + g_Menus[g_MpPlayerNum].filenum, + g_Menus[g_MpPlayerNum].deviceserial); break; case FILEOP_SAVE_MPPLAYER: errno = mpplayerfileSave( - (s32) g_Menus[g_MpPlayerNum].unke44, arg0, - g_Menus[g_MpPlayerNum].unke48, - g_Menus[g_MpPlayerNum].unke4c); + (s32) g_Menus[g_MpPlayerNum].unke44, device, + g_Menus[g_MpPlayerNum].filenum, + g_Menus[g_MpPlayerNum].deviceserial); break; case FILEOP_SAVE_MPSETUP: - errno = mpsetupfileSave(arg0, - g_Menus[g_MpPlayerNum].unke48, - g_Menus[g_MpPlayerNum].unke4c); + errno = mpsetupfileSave(device, + g_Menus[g_MpPlayerNum].filenum, + g_Menus[g_MpPlayerNum].deviceserial); showfilesaved = true; break; case FILEOP_WRITE_GAME: @@ -744,32 +744,32 @@ bool filemgrAttemptOperation(s32 arg0, bool closeonsuccess) case FILEOP_WRITE_MPPLAYER: sp2c = 0; func0f0d5690(g_Menus[g_MpPlayerNum].unke44, g_Menus[g_MpPlayerNum].unke53); - errno = func0f116828(arg0, - g_Menus[g_MpPlayerNum].unke48, + 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; break; case FILEOP_LOAD_GAME: - errno = gamefileLoad(arg0); + errno = gamefileLoad(device); break; case FILEOP_LOAD_MPPLAYER: errno = mpplayerfileLoad( (s32) g_Menus[g_MpPlayerNum].unke44, - arg0, - g_Menus[g_MpPlayerNum].unke48, - g_Menus[g_MpPlayerNum].unke4c); + device, + g_Menus[g_MpPlayerNum].filenum, + g_Menus[g_MpPlayerNum].deviceserial); break; case FILEOP_LOAD_MPSETUP: - errno = mpsetupfileLoad(arg0, - g_Menus[g_MpPlayerNum].unke48, - g_Menus[g_MpPlayerNum].unke4c); + errno = mpsetupfileLoad(device, + g_Menus[g_MpPlayerNum].filenum, + g_Menus[g_MpPlayerNum].deviceserial); break; case FILEOP_READ_GAME: case FILEOP_READ_MPSETUP: case FILEOP_READ_MPPLAYER: - errno = func0f116800(arg0, - g_Menus[g_MpPlayerNum].unke48, + errno = func0f116800(device, + g_Menus[g_MpPlayerNum].filenum, g_Menus[g_MpPlayerNum].unke44, 0); break; } @@ -1042,35 +1042,35 @@ const char var7f1b31d8[] = "COULD NOT DELETE\n"; const char var7f1b31ec[] = "Multiplayer %d was using that file...\n"; #endif -bool func0f1094e4(struct savelocation_2d8 *arg0, s32 fileop, void *arg2) +bool func0f1094e4(struct fileguid *guid, s32 fileop, void *arg2) { - s32 value; + s32 device; if (fileop != -1) { g_Menus[g_MpPlayerNum].fileop = fileop; g_Menus[g_MpPlayerNum].unke44 = arg2; g_Menus[g_MpPlayerNum].isretryingsave = 0; - var800a21f8.unk00 = 0; + var800a21f8.filenum = 0; } - g_Menus[g_MpPlayerNum].unke48 = arg0->unk00; - g_Menus[g_MpPlayerNum].unke4c = arg0->unk04; + g_Menus[g_MpPlayerNum].filenum = guid->filenum; + g_Menus[g_MpPlayerNum].deviceserial = guid->deviceserial; if (fileop != -1) { // empty } - value = pakSearch(g_Menus[g_MpPlayerNum].unke4c); + device = pakFindBySerial(g_Menus[g_MpPlayerNum].deviceserial); - if (value == -1) { + if (device == -1) { g_Menus[g_MpPlayerNum].isretryingsave |= 1; menuPushDialog(&g_PakNotOriginalMenuDialog); return false; } - if (filemgrAttemptOperation(value, false) != 0) { + if (filemgrAttemptOperation(device, false) != 0) { g_Menus[g_MpPlayerNum].isretryingsave |= 1; - func0f108324(g_Menus[g_MpPlayerNum].unke4c); + func0f108324(g_Menus[g_MpPlayerNum].deviceserial); if (FILEOP_IS_SAVE(g_Menus[g_MpPlayerNum].fileop)) { menuPushDialog(&g_FilemgrSaveErrorMenuDialog); @@ -1092,11 +1092,11 @@ bool func0f1094e4(struct savelocation_2d8 *arg0, s32 fileop, void *arg2) void filemgrDeleteCurrentFile(void) { bool error = false; - s8 index = pakSearch(g_FilemgrFileToDelete.unk04); + s8 device = pakFindBySerial(g_FilemgrFileToDelete.deviceserial); s32 i; - if (index >= 0) { - if (filemgrDeleteFile(index, g_FilemgrFileToDelete.unk00)) { + if (device >= 0) { + if (filemgrDeleteFile(device, g_FilemgrFileToDelete.filenum)) { error = true; } } else { @@ -1106,12 +1106,13 @@ void filemgrDeleteCurrentFile(void) g_FileLists[g_Menus[g_MpPlayerNum].listnum]->timeuntilupdate = 1; if (error) { - g_Menus[g_MpPlayerNum].unke3c = index; + g_Menus[g_MpPlayerNum].unke3c = device; filemgrPushErrorDialog(FILEERROR_DELETEFAILED); } else { + // If deleting a loaded MP player, reset them to default for (i = 0; i < 4; i++) { - if (g_FilemgrFileToDelete.unk00 == g_MpPlayers[i].unk4c.unk00 - && g_FilemgrFileToDelete.unk04 == g_MpPlayers[i].unk4c.unk04) { + if (g_FilemgrFileToDelete.filenum == g_MpPlayers[i].fileguid.filenum + && g_FilemgrFileToDelete.deviceserial == g_MpPlayers[i].fileguid.deviceserial) { mpPlayerSetDefaults(i, true); } } @@ -1210,8 +1211,8 @@ void func0f1097d0(s32 device) void *thing; if (g_FileLists[0]) { - var800a21e8.unk00 = g_FileLists[0]->unk2d8[device].unk00; - var800a21e8.unk04 = g_FileLists[0]->unk2d8[device].unk04; + 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])); @@ -1235,10 +1236,10 @@ const char var7f1b3284[] = "Saving...\n"; void func0f109954(s32 arg0) { if (g_FileLists[0]) { - g_FilemgrLoadedMainFile.unk00 = g_FileLists[0]->unk2d8[arg0].unk00; - g_FilemgrLoadedMainFile.unk04 = g_FileLists[0]->unk2d8[arg0].unk04; + g_GameFileGuid.filenum = g_FileLists[0]->deviceguids[arg0].filenum; + g_GameFileGuid.deviceserial = g_FileLists[0]->deviceguids[arg0].deviceserial; - func0f1094e4(&g_FilemgrLoadedMainFile, FILEOP_SAVE_GAME_000, NULL); + func0f1094e4(&g_GameFileGuid, FILEOP_SAVE_GAME_000, NULL); } } @@ -1452,20 +1453,20 @@ void func0f109ec4(void) } else if (g_Menus[g_MpPlayerNum].unke3e == 5) { // empty } else if (g_Menus[g_MpPlayerNum].unke3e == 6) { - struct savelocation_2d8 thing; - thing.unk00 = g_FileLists[g_Menus[g_MpPlayerNum].listnum]->unk2d8[g_Menus[g_MpPlayerNum].device].unk00; - thing.unk04 = g_FileLists[g_Menus[g_MpPlayerNum].listnum]->unk2d8[g_Menus[g_MpPlayerNum].device].unk04; - func0f1094e4(&thing, FILEOP_SAVE_MPPLAYER, (void *)g_MpPlayerNum); + 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) { - struct savelocation_2d8 thing; - thing.unk00 = g_FileLists[g_Menus[g_MpPlayerNum].listnum]->unk2d8[g_Menus[g_MpPlayerNum].device].unk00; - thing.unk04 = g_FileLists[g_Menus[g_MpPlayerNum].listnum]->unk2d8[g_Menus[g_MpPlayerNum].device].unk04; - func0f1094e4(&thing, FILEOP_SAVE_MPSETUP, NULL); + 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) { - struct savelocation_2d8 thing; - thing.unk00 = g_FileLists[g_Menus[g_MpPlayerNum].listnum]->unk2d8[g_Menus[g_MpPlayerNum].device].unk00; - thing.unk04 = g_FileLists[g_Menus[g_MpPlayerNum].listnum]->unk2d8[g_Menus[g_MpPlayerNum].device].unk04; - func0f1094e4(&thing, -1, NULL); + 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); } else { func0f1097d0(g_Menus[g_MpPlayerNum].device); } @@ -1929,11 +1930,11 @@ char *filemgrMenuTextFileInUseDescription(struct menuitem *item) * but filemgrRenderPerfectHeadThumbnail will only match if * it's an s32 with a 0xffff mask. */ -struct textureconfig *filelistGetPerfectHeadTexture(s32 playernum, s32 arg1, s32 arg2); +struct textureconfig *filelistGetPerfectHeadTexture(s32 playernum, s32 filenum, s32 deviceserial); -Gfx *filemgrRenderPerfectHeadThumbnail(Gfx *gdl, struct menuitemrenderdata *renderdata, s32 arg2, s32 arg3) +Gfx *filemgrRenderPerfectHeadThumbnail(Gfx *gdl, struct menuitemrenderdata *renderdata, s32 filenum, s32 deviceserial) { - struct textureconfig *texture = filelistGetPerfectHeadTexture(g_MpPlayerNum, arg2, arg3 & 0xffff); + struct textureconfig *texture = filelistGetPerfectHeadTexture(g_MpPlayerNum, filenum, deviceserial & 0xffff); if (texture) { gSPDisplayList(gdl++, &var800613a0); @@ -1969,7 +1970,7 @@ Gfx *filemgrRenderPerfectHeadThumbnail(Gfx *gdl, struct menuitemrenderdata *rend gDPTileSync(gdl++); gDPPipeSync(gdl++); - if (arg3) { + if (deviceserial) { // empty } } @@ -1983,8 +1984,8 @@ bool filemgrIsFileInUse(struct filelistfile *file) #if VERSION >= VERSION_NTSC_1_0 if (menuIsDialogOpen(&g_FilemgrCopyMenuDialog) - && file->unk00 == g_FilemgrFileToCopy.unk00 - && file->unk04 == g_FilemgrFileToCopy.unk04) { + && file->filenum == g_FilemgrFileToCopy.filenum + && file->deviceserial == g_FilemgrFileToCopy.deviceserial) { return true; } @@ -1994,8 +1995,8 @@ bool filemgrIsFileInUse(struct filelistfile *file) #else if (g_MenuData.root == MENUROOT_FILEMGR && menuIsDialogOpen(&g_FilemgrCopyMenuDialog) - && file->unk00 == g_FilemgrFileToCopy.unk00 - && file->unk04 == g_FilemgrFileToCopy.unk04) { + && file->filenum == g_FilemgrFileToCopy.filenum + && file->deviceserial == g_FilemgrFileToCopy.deviceserial) { return true; } #endif @@ -2004,18 +2005,18 @@ bool filemgrIsFileInUse(struct filelistfile *file) return false; } - if (file->unk00 == g_FilemgrLoadedMainFile.unk00 && file->unk04 == g_FilemgrLoadedMainFile.unk04) { + if (file->filenum == g_GameFileGuid.filenum && file->deviceserial == g_GameFileGuid.deviceserial) { return true; } - if (file->unk00 == g_MpSetup.unk20.unk00 && file->unk04 == g_MpSetup.unk20.unk04) { + if (file->filenum == g_MpSetup.fileguid.filenum && file->deviceserial == g_MpSetup.fileguid.deviceserial) { return true; } for (i = 0; i < 4; i++) { if ((g_MpSetup.chrslots & (1 << i)) - && g_MpPlayers[i].unk4c.unk00 == file->unk00 - && g_MpPlayers[i].unk4c.unk04 == file->unk04) { + && g_MpPlayers[i].fileguid.filenum == file->filenum + && g_MpPlayers[i].fileguid.deviceserial == file->deviceserial) { return true; } } @@ -2056,7 +2057,7 @@ s32 filemgrFileToCopyOrDeleteListMenuHandler(s32 operation, struct menuitem *ite struct filelistfile *file = &list->files[data->list.unk04]; if (g_Menus[g_MpPlayerNum].data.filemgr.filetypeplusone == 4) { - gdl = filemgrRenderPerfectHeadThumbnail(gdl, renderdata, file->unk00, file->unk04); + gdl = filemgrRenderPerfectHeadThumbnail(gdl, renderdata, file->filenum, file->deviceserial); } else { u32 colour = renderdata->colour; char text[32]; @@ -2114,8 +2115,8 @@ s32 filemgrFileToDeleteListMenuHandler(s32 operation, struct menuitem *item, uni menuPushDialog(&g_FilemgrFileInUseMenuDialog); } else { func0f1083d0(file, g_FileLists[g_Menus[g_MpPlayerNum].listnum]->filetype); - g_FilemgrFileToDelete.unk00 = file->unk00; - g_FilemgrFileToDelete.unk04 = file->unk04; + g_FilemgrFileToDelete.filenum = file->filenum; + g_FilemgrFileToDelete.deviceserial = file->deviceserial; menuPushDialog(&g_FilemgrConfirmDeleteMenuDialog); } } @@ -2136,8 +2137,8 @@ s32 filemgrFileToCopyListMenuHandler(s32 operation, struct menuitem *item, union struct filelistfile *file = &list->files[data->list.value]; if (file) { - g_FilemgrFileToCopy.unk00 = file->unk00; - g_FilemgrFileToCopy.unk04 = file->unk04; + g_FilemgrFileToCopy.filenum = file->filenum; + g_FilemgrFileToCopy.deviceserial = file->deviceserial; #if VERSION >= VERSION_NTSC_1_0 filemgrGetFileName(g_Menus[g_MpPlayerNum].unke53, file); @@ -2612,8 +2613,8 @@ s32 filemgrChooseAgentListMenuHandler(s32 operation, struct menuitem *item, unio if (data->list.unk04 == 1) { if (data->list.groupstartindex == 1 && g_Menus[g_MpPlayerNum].data.filemgr.unke2c == 1) { for (i = 0; i < g_FileLists[0]->numfiles; i++) { - if (g_FilemgrLoadedMainFile.unk00 == g_FileLists[0]->files[i].unk00 - && g_FilemgrLoadedMainFile.unk04 == g_FileLists[0]->files[i].unk04) { + if (g_GameFileGuid.filenum == g_FileLists[0]->files[i].filenum + && g_GameFileGuid.deviceserial == g_FileLists[0]->files[i].deviceserial) { data->list.value = i; } } @@ -2629,12 +2630,12 @@ s32 filemgrChooseAgentListMenuHandler(s32 operation, struct menuitem *item, unio g_Menus[g_MpPlayerNum].data.filemgr.unke2c = 0; } - if (pass && g_Vars.unk00047c) { + if (pass && g_Vars.bossfilenum) { for (j = 0; j < g_FileLists[0]->numfiles; j++) { - if (g_Vars.unk00047c == g_FileLists[0]->files[j].unk00 - && g_Vars.unk000480 == g_FileLists[0]->files[j].unk04) { + if (g_Vars.bossfilenum == g_FileLists[0]->files[j].filenum + && g_Vars.bossdeviceserial == g_FileLists[0]->files[j].deviceserial) { data->list.value = j; - g_Vars.unk00047c = 0; + g_Vars.bossfilenum = 0; } } } @@ -2772,9 +2773,9 @@ s32 filemgrChooseAgentListMenuHandler(s32 operation, struct menuitem *item, unio struct filelistfile *file = &g_FileLists[0]->files[data->list.value]; if (file) { - g_FilemgrLoadedMainFile.unk00 = file->unk00; - g_FilemgrLoadedMainFile.unk04 = file->unk04; - func0f1094e4(&g_FilemgrLoadedMainFile, FILEOP_LOAD_GAME, 0); + g_GameFileGuid.filenum = file->filenum; + g_GameFileGuid.deviceserial = file->deviceserial; + func0f1094e4(&g_GameFileGuid, FILEOP_LOAD_GAME, 0); } } break; diff --git a/src/game/game_110680.c b/src/game/game_110680.c index c1a447592..2927012c7 100644 --- a/src/game/game_110680.c +++ b/src/game/game_110680.c @@ -103,7 +103,7 @@ void bossfileLoad(void) struct savebuffer buffer; s32 i; s32 tmp; - struct maybesavelocation_2d8 thing; + struct fileguid guid; tmp = func0f110720(); @@ -112,7 +112,7 @@ void bossfileLoad(void) } else { savebufferClear(&buffer); - if (func0f116800(4, tmp, buffer.bytes, 0)) { + if (func0f116800(SAVEDEVICE_GAMEPAK, tmp, buffer.bytes, 0)) { failed = true; } } @@ -120,10 +120,10 @@ void bossfileLoad(void) if (!failed) { u8 tracknum; - func0f0d579c(&buffer, &thing); + savebufferReadGuid(&buffer, &guid); - g_Vars.unk00047c = thing.unk00; - g_Vars.unk000480 = thing.unk04; + g_Vars.bossfilenum = guid.filenum; + g_Vars.bossdeviceserial = guid.deviceserial; g_BossFile.unk89 = savebufferReadBits(&buffer, 1); @@ -162,17 +162,17 @@ void bossfileSave(void) { volatile bool sp12c = false; struct savebuffer buffer; - struct maybesavelocation_2d8 thing; + struct fileguid guid; u32 stack; s32 i; s32 tmp; savebufferClear(&buffer); - thing.unk00 = g_Vars.unk00047c; - thing.unk04 = g_Vars.unk000480; + guid.filenum = g_Vars.bossfilenum; + guid.deviceserial = g_Vars.bossdeviceserial; - func0f0d575c(&buffer, &thing); + savebufferWriteGuid(&buffer, &guid); savebufferOr(&buffer, g_BossFile.unk89, 1); savebufferOr(&buffer, g_Vars.unk000482, 4); @@ -203,7 +203,7 @@ void bossfileSave(void) func0000bfd0("fileGuid", "bossfile.c", PAL ? 377 : 375); } - if (func0f116828(4, tmp, 0x10, buffer.bytes, NULL, 0)) { + if (func0f116828(SAVEDEVICE_GAMEPAK, tmp, 0x10, buffer.bytes, NULL, 0)) { sp12c = true; } } @@ -224,8 +224,8 @@ void bossfileSetDefaults(void) g_BossFile.usingmultipletunes = false; g_BossFile.unk89 = 0; g_BossFile.locktype = MPLOCKTYPE_NONE; - g_Vars.unk00047c = 0; - g_Vars.unk000480 = 0; + g_Vars.bossfilenum = 0; + g_Vars.bossdeviceserial = 0; g_Vars.unk000482 = (PAL ? 7 : 0); g_AltTitleUnlocked = 0; g_AltTitleEnabled = false; @@ -425,8 +425,8 @@ void filelistUpdate(struct filelist *list) list->spacesfree[dis2dev[i]] = func0f118148(dis2dev[i]); } - list->unk2d8[dis2dev[i]].unk00 = 0; - list->unk2d8[dis2dev[i]].unk04 = func0f11693c(dis2dev[i]); + list->deviceguids[dis2dev[i]].filenum = 0; + list->deviceguids[dis2dev[i]].deviceserial = pakGetDeviceSerial(dis2dev[i]); } else { // PFS error? list->spacesfree[dis2dev[i]] = -1; @@ -455,8 +455,8 @@ void filelistUpdate(struct filelist *list) list->devicestartindexes[dev2dis[filedevices[i]]] = list->numfiles; } - file->unk04 = func0f11693c(filedevices[i]); - file->unk00 = sp1288[i]; + file->deviceserial = pakGetDeviceSerial(filedevices[i]); + file->filenum = sp1288[i]; list->numfiles++; } else if (maybepfserr == 10) { @@ -466,9 +466,9 @@ void filelistUpdate(struct filelist *list) if (list->unk305[filedevices[i]] >= 2) { list->spacesfree[filedevices[i]]++; - if (list->unk2d8[filedevices[i]].unk00 == 0) { - list->unk2d8[filedevices[i]].unk00 = sp1288[i]; - list->unk2d8[filedevices[i]].unk04 = func0f11693c(filedevices[i]); + if (list->deviceguids[filedevices[i]].filenum == 0) { + list->deviceguids[filedevices[i]].filenum = sp1288[i]; + list->deviceguids[filedevices[i]].deviceserial = pakGetDeviceSerial(filedevices[i]); } } } @@ -617,34 +617,34 @@ glabel func0f111260 /* f11145c: 00000000 */ nop ); -struct textureconfig *filelistGetPerfectHeadTexture(s32 playernum, s32 arg1, u16 arg2) +struct textureconfig *filelistGetPerfectHeadTexture(s32 playernum, s32 filenum, u16 deviceserial) { s32 i; - s32 bestcandidate = -1; + s32 freeslot = -1; s32 indextouse = -1; for (i = 0; i < 16; i++) { - if (g_Menus[playernum].headtextures->unk800[i].unk00 == arg1 - && g_Menus[playernum].headtextures->unk800[i].unk04 == arg2) { + if (g_Menus[playernum].headtextures->fileguids[i].filenum == filenum + && g_Menus[playernum].headtextures->fileguids[i].deviceserial == deviceserial) { indextouse = i; break; } - if (g_Menus[playernum].headtextures->unk800[i].unk00 == 0) { - if (g_Menus[playernum].headtextures->unk800[i].unk04 == 0) { - bestcandidate = i; + if (g_Menus[playernum].headtextures->fileguids[i].filenum == 0) { + if (g_Menus[playernum].headtextures->fileguids[i].deviceserial == 0) { + freeslot = i; } } } if (indextouse == -1) { - s8 device = pakSearch(arg2); + s8 device = pakFindBySerial(deviceserial); if (device < 0) { return NULL; } - if (bestcandidate == -1) { + if (freeslot == -1) { return NULL; } @@ -654,12 +654,12 @@ struct textureconfig *filelistGetPerfectHeadTexture(s32 playernum, s32 arg1, u16 g_Menus[playernum].headtextures->lastupdated240 = g_Vars.thisframe240; - func0f15015c(device, arg1, g_Menus[playernum].headtextures->unk000[bestcandidate]); + func0f15015c(device, filenum, g_Menus[playernum].headtextures->unk000[freeslot]); - g_Menus[playernum].headtextures->unk800[bestcandidate].unk00 = arg1; - g_Menus[playernum].headtextures->unk800[bestcandidate].unk04 = arg2; + g_Menus[playernum].headtextures->fileguids[freeslot].filenum = filenum; + g_Menus[playernum].headtextures->fileguids[freeslot].deviceserial = deviceserial; - indextouse = bestcandidate; + indextouse = freeslot; } if (indextouse == -1) { diff --git a/src/game/gamefile.c b/src/game/gamefile.c index f5abfa057..4cba0a3bf 100644 --- a/src/game/gamefile.c +++ b/src/game/gamefile.c @@ -892,7 +892,7 @@ const char var7f1b395c[] = "pdoptions.c"; const char var7f1b3968[] = "MAX_FUDGE_DATA_SIZE>=sizeof(PakFileTypeGameSetup_s)"; const char var7f1b399c[] = "pdoptions.c"; -s32 gamefileLoad(s32 arg0) +s32 gamefileLoad(s32 device) { s32 p1index; s32 p2index; @@ -906,10 +906,10 @@ s32 gamefileLoad(s32 arg0) p1index = g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0 ? 0 : 4; p2index = g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0 ? 1 : 5; - if (arg0 >= 0) { + if (device >= 0) { savebufferClear(&buffer); - tmp = func0f116800(arg0, g_FilemgrLoadedMainFile.unk00, buffer.bytes, 0); - var800a21f8.unk00 = tmp; + tmp = func0f116800(device, g_GameFileGuid.filenum, buffer.bytes, 0); + var800a21f8.filenum = tmp; if (tmp == 0) { cheatsDisableAll(); @@ -998,7 +998,7 @@ s32 gamefileLoad(s32 arg0) return -1; } -s32 gamefileSave(s32 arg0, s32 arg1, u16 arg2) +s32 gamefileSave(s32 device, s32 filenum, u16 deviceserial) { u32 stack; s32 sp140; @@ -1087,7 +1087,7 @@ s32 gamefileSave(s32 arg0, s32 arg1, u16 arg2) pakSetBitflag(GAMEFILEFLAG_46, g_GameFile.flags, (g_Vars.unk000482 & 0x04) == 0x04); #endif - if (arg0 >= 0) { + if (device >= 0) { savebufferClear(&buffer); func0f0d55a4(&buffer, g_GameFile.name); @@ -1133,12 +1133,12 @@ s32 gamefileSave(s32 arg0, s32 arg1, u16 arg2) func0f0d54c4(&buffer); - tmp = func0f116828(arg0, arg1, 0x80, buffer.bytes, &sp140, 0); - var800a21f8.unk00 = tmp; + tmp = func0f116828(device, filenum, 0x80, buffer.bytes, &sp140, 0); + var800a21f8.filenum = tmp; if (tmp == 0) { - g_FilemgrLoadedMainFile.unk00 = sp140; - g_FilemgrLoadedMainFile.unk04 = arg2; + g_GameFileGuid.filenum = sp140; + g_GameFileGuid.deviceserial = deviceserial; return 0; } diff --git a/src/game/mplayer/ingame.c b/src/game/mplayer/ingame.c index cc4f0c9d5..7e03cbe05 100644 --- a/src/game/mplayer/ingame.c +++ b/src/game/mplayer/ingame.c @@ -601,8 +601,8 @@ void mpPushEndscreenDialog(u32 arg0, u32 playernum) #if VERSION >= VERSION_NTSC_1_0 if ((g_MpPlayers[g_MpPlayerNum].options & OPTION_ASKEDSAVEPLAYER) == 0 - && g_MpPlayers[g_MpPlayerNum].unk4c.unk00 == false - && g_MpPlayers[g_MpPlayerNum].unk4c.unk04 == 0) { + && g_MpPlayers[g_MpPlayerNum].fileguid.filenum == 0 + && g_MpPlayers[g_MpPlayerNum].fileguid.deviceserial == 0) { g_MpPlayers[g_MpPlayerNum].options |= OPTION_ASKEDSAVEPLAYER; menuPushDialog(&g_MpEndscreenSavePlayerMenuDialog); } diff --git a/src/game/mplayer/mplayer.c b/src/game/mplayer/mplayer.c index 3f816e450..661545237 100644 --- a/src/game/mplayer/mplayer.c +++ b/src/game/mplayer/mplayer.c @@ -408,8 +408,8 @@ void mpPlayerSetDefaults(s32 playernum, bool autonames) g_MpPlayers[playernum].base.mpheadnum = mpGetMpheadnumByMpbodynum(g_MpPlayers[playernum].base.mpbodynum); g_MpPlayers[playernum].base.displayoptions = MPDISPLAYOPTION_RADAR | MPDISPLAYOPTION_HIGHLIGHTTEAMS; - g_MpPlayers[playernum].unk4c.unk00 = 0; - g_MpPlayers[playernum].unk4c.unk04 = 0; + g_MpPlayers[playernum].fileguid.filenum = 0; + g_MpPlayers[playernum].fileguid.deviceserial = 0; if (autonames) { // "Player 1" etc @@ -484,8 +484,8 @@ void mpSetDefaultSetup(void) func0f187fec(); - g_MpSetup.unk20.unk00 = 0; - g_MpSetup.unk20.unk04 = 0; + g_MpSetup.fileguid.filenum = 0; + g_MpSetup.fileguid.deviceserial = 0; strcpy(g_MpSetup.name, ""); @@ -8555,7 +8555,7 @@ void mpplayerfileSaveGunFuncs(struct savebuffer *buffer, s32 playernum) void mpplayerfileLoadWad(s32 playernum, struct savebuffer *buffer, s32 arg2) { - struct maybesavelocation_2d8 thing; + struct fileguid guid; u32 stack; s32 i; s32 j; @@ -8567,14 +8567,14 @@ void mpplayerfileLoadWad(s32 playernum, struct savebuffer *buffer, s32 arg2) g_MpPlayers[playernum].base.mpheadnum = savebufferReadBits(buffer, 7); g_MpPlayers[playernum].base.mpbodynum = savebufferReadBits(buffer, 7); - func0f0d579c(buffer, &thing); + savebufferReadGuid(buffer, &guid); if (g_MpPlayers[playernum].base.mpheadnum >= mpGetNumHeads2()) { - if (thing.unk00 != 0 && thing.unk04 != 0) { + if (guid.filenum != 0 && guid.deviceserial != 0) { if (g_MenuData.unk668 < 11) { g_MenuData.unk668++; - g_MenuData.unk5d8[g_MenuData.unk668].unk00 = thing.unk00; - g_MenuData.unk5d8[g_MenuData.unk668].unk04 = thing.unk04; + g_MenuData.unk5d8[g_MenuData.unk668].fileguid.filenum = guid.filenum; + g_MenuData.unk5d8[g_MenuData.unk668].fileguid.deviceserial = guid.deviceserial; g_MenuData.unk5d8[g_MenuData.unk668].unk08 = g_MpPlayerNum; g_MenuData.unk5d8[g_MenuData.unk668].unk09 = g_MpPlayerNum; } @@ -8585,7 +8585,7 @@ void mpplayerfileLoadWad(s32 playernum, struct savebuffer *buffer, s32 arg2) } else { savebufferReadBits(buffer, 7); savebufferReadBits(buffer, 7); - func0f0d579c(buffer, &thing); + savebufferReadGuid(buffer, &guid); } g_MpPlayers[playernum].base.displayoptions = savebufferReadBits(buffer, 8); @@ -8635,14 +8635,14 @@ void mpplayerfileSaveWad(s32 playernum, struct savebuffer *buffer) savebufferOr(buffer, g_MpPlayers[playernum].base.mpbodynum, 7); if (g_MpPlayers[playernum].base.mpheadnum >= mpGetNumHeads2()) { - struct maybesavelocation_2d8 thing; - func0f1507b4(g_MpPlayers[playernum].base.mpheadnum - mpGetNumHeads2(), &thing); - func0f0d575c(buffer, &thing); + struct fileguid guid; + func0f1507b4(g_MpPlayers[playernum].base.mpheadnum - mpGetNumHeads2(), &guid); + savebufferWriteGuid(buffer, &guid); } else { - struct maybesavelocation_2d8 thing; - thing.unk04 = 0; - thing.unk00 = 0; - func0f0d575c(buffer, &thing); + struct fileguid guid; + guid.deviceserial = 0; + guid.filenum = 0; + savebufferWriteGuid(buffer, &guid); } savebufferOr(buffer, g_MpPlayers[playernum].base.displayoptions, 8); @@ -8759,47 +8759,47 @@ void mpplayerfileGetOverview(char *arg0, char *name, u32 *playtime) *playtime = savebufferReadBits(&buffer, 28); } -s32 mpplayerfileSave(s32 playernum, s32 arg1, s32 arg2, u16 arg3) +s32 mpplayerfileSave(s32 playernum, s32 device, s32 arg2, u16 deviceserial) { s32 tmp; - s32 uStack8; + s32 filenum; struct savebuffer buffer; - if (arg1 >= 0) { + if (device >= 0) { savebufferClear(&buffer); mpplayerfileSaveWad(playernum, &buffer); func0f0d54c4(&buffer); var80075bd0[2] = true; - tmp = func0f116828(arg1, arg2, 0x20, buffer.bytes, &uStack8, 0); + tmp = func0f116828(device, arg2, 0x20, buffer.bytes, &filenum, 0); if (tmp == 0) { - g_MpPlayers[playernum].unk4c.unk00 = uStack8; - g_MpPlayers[playernum].unk4c.unk04 = arg3; + g_MpPlayers[playernum].fileguid.filenum = filenum; + g_MpPlayers[playernum].fileguid.deviceserial = deviceserial; return 0; } - var800a21f8.unk00 = tmp; + var800a21f8.filenum = tmp; return -1; } return -1; } -s32 mpplayerfileLoad(s32 playernum, s32 arg1, s32 arg2, u16 arg3) +s32 mpplayerfileLoad(s32 playernum, s32 device, s32 filenum, u16 deviceserial) { s32 tmp; struct savebuffer buffer; - if (arg1 >= 0) { + if (device >= 0) { savebufferClear(&buffer); - tmp = func0f116800(arg1, arg2, buffer.bytes, 0); + tmp = func0f116800(device, filenum, buffer.bytes, 0); if (tmp == 0) { - g_MpPlayers[playernum].unk4c.unk00 = arg2; - g_MpPlayers[playernum].unk4c.unk04 = arg3; + g_MpPlayers[playernum].fileguid.filenum = filenum; + g_MpPlayers[playernum].fileguid.deviceserial = deviceserial; mpplayerfileLoadWad(playernum, &buffer, 1); func0f0d54c4(&buffer); @@ -8808,7 +8808,7 @@ s32 mpplayerfileLoad(s32 playernum, s32 arg1, s32 arg2, u16 arg3) return 0; } - var800a21f8.unk00 = tmp; + var800a21f8.filenum = tmp; return -1; } @@ -9457,45 +9457,45 @@ void mpsetupfileGetOverview(char *arg0, char *filename, u16 *numsims, u16 *stage *scenarionum = savebufferReadBits(&buffer, 3); } -s32 mpsetupfileSave(s32 arg0, s32 arg1, u16 arg2) +s32 mpsetupfileSave(s32 device, s32 filenum, u16 deviceserial) { s32 tmp; s32 sp100; struct savebuffer buffer; - if (arg0 >= 0) { + if (device >= 0) { savebufferClear(&buffer); mpsetupfileSaveWad(&buffer); func0f0d54c4(&buffer); - tmp = func0f116828(arg0, arg1, 0x40, buffer.bytes, &sp100, 0); + tmp = func0f116828(device, filenum, 0x40, buffer.bytes, &sp100, 0); var80075bd0[1] = true; if (tmp == 0) { - g_MpSetup.unk20.unk00 = sp100; - g_MpSetup.unk20.unk04 = arg2; + g_MpSetup.fileguid.filenum = sp100; + g_MpSetup.fileguid.deviceserial = deviceserial; return 0; } - var800a21f8.unk00 = tmp; + var800a21f8.filenum = tmp; return -1; } return -1; } -s32 mpsetupfileLoad(s32 arg0, s32 arg1, u16 arg2) +s32 mpsetupfileLoad(s32 device, s32 filenum, u16 deviceserial) { s32 tmp; struct savebuffer buffer; - if (arg0 >= 0) { + if (device >= 0) { savebufferClear(&buffer); - tmp = func0f116800(arg0, arg1, buffer.bytes, 0); + tmp = func0f116800(device, filenum, buffer.bytes, 0); if (tmp == 0) { - g_MpSetup.unk20.unk00 = arg1; - g_MpSetup.unk20.unk04 = arg2; + g_MpSetup.fileguid.filenum = filenum; + g_MpSetup.fileguid.deviceserial = deviceserial; mpsetupfileLoadWad(&buffer); func0f0d54c4(&buffer); @@ -9503,7 +9503,7 @@ s32 mpsetupfileLoad(s32 arg0, s32 arg1, u16 arg2) return 0; } - var800a21f8.unk00 = tmp; + var800a21f8.filenum = tmp; return -1; } diff --git a/src/game/mplayer/setup.c b/src/game/mplayer/setup.c index fca662fd5..67f26309e 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.unk20, FILEOP_SAVE_MPSETUP, NULL); + func0f1094e4(&g_MpSetup.fileguid, FILEOP_SAVE_MPSETUP, NULL); } return 0; @@ -4520,8 +4520,8 @@ s32 menuhandlerMpRestoreHandicapDefaults(s32 operation, struct menuitem *item, u s32 menudialogMpReady(s32 operation, struct menudialog *dialog, union handlerdata *data) { if (operation == MENUOP_OPEN) { - if (g_MpPlayers[g_MpPlayerNum].unk4c.unk00 && g_MpPlayers[g_MpPlayerNum].unk4c.unk04) { - func0f1094e4(&g_MpPlayers[g_MpPlayerNum].unk4c, FILEOP_SAVE_MPPLAYER, (void *)g_MpPlayerNum); + 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); } } @@ -7407,7 +7407,7 @@ s32 menuhandlerMpLock(s32 operation, struct menuitem *item, union handlerdata *d s32 menuhandlerMpSavePlayer(s32 operation, struct menuitem *item, union handlerdata *data) { if (operation == MENUOP_SET) { - if (g_MpPlayers[g_MpPlayerNum].unk4c.unk00 == false) { + if (g_MpPlayers[g_MpPlayerNum].fileguid.filenum == 0) { filemgrPushSelectLocationDialog(6, FILETYPE_MPPLAYER); } else { menuPushDialog(&g_MpSavePlayerMenuDialog); @@ -7419,7 +7419,7 @@ s32 menuhandlerMpSavePlayer(s32 operation, struct menuitem *item, union handlerd char *mpMenuTextSavePlayerOrCopy(struct menuitem *item) { - if (g_MpPlayers[g_MpPlayerNum].unk4c.unk00 == false) { + if (g_MpPlayers[g_MpPlayerNum].fileguid.filenum == 0) { return langGet(L_MPMENU_038); // "Save Player" } @@ -7446,11 +7446,11 @@ s32 menuhandler0017ef30(s32 operation, struct menuitem *item, union handlerdata s32 menuhandlerMpSaveSettings(s32 operation, struct menuitem *item, union handlerdata *data) { if (operation == MENUOP_SET) { - if (g_MpSetup.unk20.unk00 == false) { + if (g_MpSetup.fileguid.filenum == 0) { menuPushDialog(&g_MpSaveSetupNameMenuDialog); } else { #if VERSION >= VERSION_NTSC_1_0 - func0f108324(g_MpSetup.unk20.unk04); + func0f108324(g_MpSetup.fileguid.deviceserial); #endif menuPushDialog(&g_MpSaveSetupExistsMenuDialog); diff --git a/src/game/pak/pak.c b/src/game/pak/pak.c index d8bc14983..ea416a056 100644 --- a/src/game/pak/pak.c +++ b/src/game/pak/pak.c @@ -254,9 +254,9 @@ s32 func0f116800(s8 arg0, s32 arg1, void *arg2, s32 arg3) return func0f118bc8(arg0, arg1, arg2, arg3); } -s32 func0f116828(s8 arg0, s32 arg1, s32 arg2, void *arg3, s32 *arg4, s32 arg5) +s32 func0f116828(s8 device, s32 arg1, s32 arg2, void *arg3, s32 *arg4, s32 arg5) { - return func0f11789c(arg0, arg1, arg2, arg3, arg4, arg5); + return func0f11789c(device, arg1, arg2, arg3, arg4, arg5); } bool filemgrDeleteFile(s8 arg0, s32 arg1) @@ -284,7 +284,7 @@ u32 func0f116914(s8 device) return func0f116c94(device); } -s32 func0f11693c(s8 device) +s32 pakGetDeviceSerial(s8 device) { return func0f116c54(device); } @@ -3014,7 +3014,7 @@ void func0f1189d8(void) gamefileLoadDefaults(&g_GameFile); gamefileApplyOptions(&g_GameFile); - g_FilemgrLoadedMainFile.unk04 = 0; + g_GameFileGuid.deviceserial = 0; g_Vars.unk0004e4 = 0xf5; g_Vars.paksconnected = prevvalue; } @@ -16918,16 +16918,16 @@ glabel func0f11e618 /* f11e6ac: 00000000 */ sll $zero,$zero,0x0 ); -s8 pakSearch(s32 arg0) +s8 pakFindBySerial(s32 findserial) { s8 device = -1; s32 i; for (i = 0; i < 5; i++) { if (func0f116aec(i)) { - s32 value = func0f11693c(i); + s32 serial = pakGetDeviceSerial(i); - if (arg0 == value) { + if (findserial == serial) { device = i; } } diff --git a/src/game/training/training.c b/src/game/training/training.c index cf4ead9de..d46883ac9 100644 --- a/src/game/training/training.c +++ b/src/game/training/training.c @@ -4298,8 +4298,8 @@ glabel var7f1b94e4 /* f19fbc0: 2484907c */ addiu $a0,$a0,%lo(g_FrCompletedMenuDialog) /* f19fbc4: 0fc3e178 */ jal func0f0f85e0 /* f19fbc8: 2405000d */ addiu $a1,$zero,0xd -/* f19fbcc: 3c04800a */ lui $a0,%hi(g_FilemgrLoadedMainFile) -/* f19fbd0: 248422c0 */ addiu $a0,$a0,%lo(g_FilemgrLoadedMainFile) +/* 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 /* f19fbdc: 00003025 */ or $a2,$zero,$zero @@ -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_FilemgrLoadedMainFile, FILEOP_SAVE_GAME_000, 0); +// func0f1094e4(&g_GameFileGuid, FILEOP_SAVE_GAME_000, 0); // break; // } // } diff --git a/src/include/bss.h b/src/include/bss.h index a017ce753..c7528d62e 100644 --- a/src/include/bss.h +++ b/src/include/bss.h @@ -197,9 +197,9 @@ extern u32 g_CheatsActiveBank0; extern u32 g_CheatsActiveBank1; extern u32 g_CheatsEnabledBank0; extern u32 g_CheatsEnabledBank1; -extern struct savelocation_2d8 var800a21f8; +extern struct fileguid var800a21f8; extern struct gamefile g_GameFile; -extern struct savelocation_2d8 g_FilemgrLoadedMainFile; +extern struct fileguid g_GameFileGuid; extern s8 g_AltTitleUnlocked; extern u8 g_AltTitleEnabled; extern struct padsfileheader *g_PadsFile; diff --git a/src/include/game/camdraw.h b/src/include/game/camdraw.h index 42b3eb58a..b9f23ac41 100644 --- a/src/include/game/camdraw.h +++ b/src/include/game/camdraw.h @@ -85,8 +85,8 @@ u32 func0f14fbfc(void); u32 func0f14fdb0(void); u32 func0f14ff94(void); u32 func0f150068(void); -s32 func0f15015c(s32 arg0, s32 arg1, u8 *arg2); -void func0f1507b4(s32 arg0, struct maybesavelocation_2d8 *arg1); +s32 func0f15015c(s32 device, s32 filenum, u8 *arg2); +void func0f1507b4(s32 arg0, struct fileguid *guid); extern const char var7f1b6050[]; extern const char var7f1b6058[]; diff --git a/src/include/game/game_0d4690.h b/src/include/game/game_0d4690.h index 7e60a3354..5d5a1f6c1 100644 --- a/src/include/game/game_0d4690.h +++ b/src/include/game/game_0d4690.h @@ -21,8 +21,8 @@ void savebufferReadString(struct savebuffer *buffer, char *dst, bool addlinebrea void func0f0d55a4(struct savebuffer *buffer, char *src); void func0f0d564c(u8 *data, char *dst, bool addlinebreak); void func0f0d5690(u8 *dst, char *buffer); -void func0f0d575c(struct savebuffer *buffer, struct maybesavelocation_2d8 *arg1); -void func0f0d579c(struct savebuffer *buffer, struct maybesavelocation_2d8 *arg1); +void savebufferWriteGuid(struct savebuffer *buffer, struct fileguid *guid); +void savebufferReadGuid(struct savebuffer *buffer, struct fileguid *guid); void formatTime(char *dst, s32 time, u32 arg2); void func0f0d5a7c(void); diff --git a/src/include/game/game_107fb0.h b/src/include/game/game_107fb0.h index bd6f28aac..e0e844d46 100644 --- a/src/include/game/game_107fb0.h +++ b/src/include/game/game_107fb0.h @@ -8,7 +8,7 @@ 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 arg0); +void func0f108324(s32 deviceserial); void func0f1083b0(struct filelistfile *file); void func0f1083d0(struct filelistfile *file, s32 filetype); char *filemgrMenuTextFailReason(struct menuitem *item); @@ -22,8 +22,8 @@ void filemgrHandleSuccess(void); void filemgrEraseCorruptFile(void); char *filemgrMenuTextInsertOriginalPak(struct menuitem *item); void filemgrRetrySave(s32 arg0); -bool filemgrAttemptOperation(s32 arg0, bool closeonsuccess); -bool func0f1094e4(struct savelocation_2d8 *arg0, s32 fileop, void *arg2); +bool filemgrAttemptOperation(s32 device, bool closeonsuccess); +bool func0f1094e4(struct fileguid *guid, s32 fileop, void *arg2); void filemgrDeleteCurrentFile(void); void func0f1097d0(s32 device); void func0f109954(s32 arg0); @@ -38,7 +38,7 @@ char *filemgrMenuTextLocationName2(struct menuitem *item); char *filemgrMenuTextSaveLocationSpaces(struct menuitem *item); void filemgrPushSelectLocationDialog(s32 arg0, u32 filetype); char *filemgrMenuTextFileInUseDescription(struct menuitem *item); -Gfx *filemgrRenderPerfectHeadThumbnail(Gfx *gdl, struct menuitemrenderdata *renderdata, s32 arg2, s32 arg3); +Gfx *filemgrRenderPerfectHeadThumbnail(Gfx *gdl, struct menuitemrenderdata *renderdata, s32 filenum, s32 deviceserial); bool filemgrIsFileInUse(struct filelistfile *file); s32 filemgrFileToCopyOrDeleteListMenuHandler(s32 operation, struct menuitem *item, union handlerdata *data, bool isdelete); void filemgrPushDeleteFileDialog(s32 listnum); diff --git a/src/include/game/gamefile.h b/src/include/game/gamefile.h index b11221ed4..62fa97830 100644 --- a/src/include/game/gamefile.h +++ b/src/include/game/gamefile.h @@ -10,8 +10,8 @@ void gamefileUnsetFlag(u32 value); void gamefilePrintFlags(void); void gamefileApplyOptions(struct gamefile *file); void gamefileLoadDefaults(struct gamefile *file); -s32 gamefileLoad(s32 arg0); -s32 gamefileSave(s32 arg0, s32 arg1, u16 arg2); +s32 gamefileLoad(s32 device); +s32 gamefileSave(s32 device, s32 filenum, u16 deviceserial); void gamefileGetOverview(char *arg0, char *name, u8 *stage, u8 *difficulty, u32 *time); #endif diff --git a/src/include/game/mplayer/mplayer.h b/src/include/game/mplayer/mplayer.h index 1d696a881..b0143b8cc 100644 --- a/src/include/game/mplayer/mplayer.h +++ b/src/include/game/mplayer/mplayer.h @@ -102,8 +102,8 @@ void mpplayerfileSaveGunFuncs(struct savebuffer *buffer, s32 playernum); void mpplayerfileLoadWad(s32 playernum, struct savebuffer *buffer, s32 arg2); void mpplayerfileSaveWad(s32 playernum, struct savebuffer *buffer); void mpplayerfileGetOverview(char *arg0, char *name, u32 *playtime); -s32 mpplayerfileSave(s32 playernum, s32 arg1, s32 arg2, u16 arg3); -s32 mpplayerfileLoad(s32 playernum, s32 arg1, s32 arg2, u16 arg3); +s32 mpplayerfileSave(s32 playernum, s32 device, s32 arg2, u16 deviceserial); +s32 mpplayerfileLoad(s32 playernum, s32 device, s32 arg2, u16 deviceserial); s32 mpGetNumPresets(void); bool mpIsPresetUnlocked(s32 presetnum); s32 mpGetNumUnlockedPresets(void); @@ -113,8 +113,8 @@ u32 func0f18dec4(void); void mpsetupfileLoadWad(struct savebuffer *buffer); void mpsetupfileSaveWad(struct savebuffer *buffer); void mpsetupfileGetOverview(char *arg0, char *filename, u16 *numsims, u16 *stagenum, u16 *scenarionum); -s32 mpsetupfileSave(s32 arg0, s32 arg1, u16 arg2); -s32 mpsetupfileLoad(s32 arg0, s32 arg1, u16 arg2); +s32 mpsetupfileSave(s32 device, s32 filenum, u16 deviceserial); +s32 mpsetupfileLoad(s32 device, s32 filenum, u16 deviceserial); void func0f18e558(void); struct modelfiledata *func0f18e57c(s32 index, s32 *headnum); diff --git a/src/include/game/pak/pak.h b/src/include/game/pak/pak.h index 975633ccf..f0039e149 100644 --- a/src/include/game/pak/pak.h +++ b/src/include/game/pak/pak.h @@ -13,12 +13,12 @@ bool pakIsConnected(s8 device); s32 func0f1167b0(s8 device, u32 arg1, u32 *buffer1024); u32 func0f1167d8(s8 arg0); s32 func0f116800(s8 arg0, s32 arg1, void *arg2, s32 arg3); -s32 func0f116828(s8 arg0, s32 arg1, s32 arg2, void *arg3, s32 *arg4, s32 arg5); +s32 func0f116828(s8 device, s32 arg1, s32 arg2, void *arg3, s32 *filenum, s32 arg5); bool filemgrDeleteFile(s8 arg0, s32 arg1); s32 pakDeleteGameNote(s8 device, u16 company_code, u32 game_code, char *game_name, char *ext_name); s32 func0f1168c4(s8 device, struct pakdata **arg1); u32 func0f116914(s8 device); -s32 func0f11693c(s8 device); +s32 pakGetDeviceSerial(s8 device); void func0f11698c(s8 device); void func0f116994(void); void func0f1169c8(s8 device, s32 arg1); @@ -41,7 +41,7 @@ u32 func0f117430(void); u32 func0f117520(s8 arg0, u32 arg1, u32 *arg2); void pakDumpBuffer(u8 *buffer, u32 len, char *name); void pakDumpEeprom(void); -s32 func0f11789c(s8 arg0, s32 arg1, s32 arg2, void *arg3, s32 *arg4, s32 arg5); +s32 func0f11789c(s8 device, s32 arg1, s32 arg2, void *arg3, s32 *arg4, s32 arg5); #if VERSION >= VERSION_NTSC_1_0 s32 pakInitPak(OSMesgQueue *mq, OSPfs *pfs, s32 channel, s32 *arg3); @@ -137,7 +137,7 @@ void pakSetBitflag(s32 flagnum, u8 *bitstream, bool set); bool pakHasBitflag(u32 flagnum, u8 *stream); void pakClearAllBitflags(u8 *flags); void func0f11e618(char *src, char *dst, u32 len); -s8 pakSearch(s32 arg0); +s8 pakFindBySerial(s32 deviceserial); s32 func0f11e750(s8 arg0); bool func0f11e78c(void); bool func0f11e7f0(char *a, char *b); diff --git a/src/include/types.h b/src/include/types.h index 25a24b524..b7a33b580 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -86,6 +86,11 @@ struct playerstats { /*0x7c*/ f32 damtransmitted; }; +struct fileguid { + s32 filenum; + u16 deviceserial; +}; + struct g_vars { /*000000*/ s32 diffframe60; /*000004*/ f32 diffframe60f; @@ -197,8 +202,8 @@ struct g_vars { /*000470*/ s32 perfectbuddynum; /*000474*/ s32 numaibuddies; /*000478*/ bool aibuddiesspawned; - /*00047c*/ u32 unk00047c; - /*000480*/ u16 unk000480; + /*00047c*/ s32 bossfilenum; + /*000480*/ u16 bossdeviceserial; /*000482*/ u16 unk000482; /*000484*/ s32 mphilltime; /*000488*/ s32 totalkills; @@ -3875,14 +3880,9 @@ struct textureconfig { u8 t; }; -struct menu_e68_800 { - s32 unk00; - u16 unk04; -}; - struct perfectheadtexturelist { u8 unk000[16][0x80]; - struct menu_e68_800 unk800[16]; + struct fileguid fileguids[16]; s32 lastupdated240; struct textureconfig selectedtexture; }; @@ -4507,8 +4507,8 @@ struct menu { /*0xe41*/ u8 unke41; /*0xe42*/ u8 fileop; /*0xe44*/ void *unke44; - /*0xe48*/ u32 unke48; - /*0xe4c*/ u32 unke4c; + /*0xe48*/ u32 filenum; + /*0xe4c*/ u32 deviceserial; /*0xe50*/ u16 isretryingsave; /*0xe52*/ u8 device; /*0xe53*/ char unke53[1]; @@ -4560,20 +4560,10 @@ struct mpchr { /*0x47*/ u8 simtype; }; -struct savelocation_2d8 { - u32 unk00; - u16 unk04; -}; - -struct maybesavelocation_2d8 { - u32 unk00; - u16 unk04; -}; - struct mpplayer { /*0x00*/ struct mpchr base; /*0x48*/ u16 options; - /*0x4c*/ struct savelocation_2d8 unk4c; + /*0x4c*/ struct fileguid fileguid; /*0x54*/ u32 kills; /*0x58*/ u32 deaths; /*0x5c*/ u32 gamesplayed; @@ -4642,7 +4632,7 @@ struct mpsetup { /*0x800acb9e*/ u16 chrslots; /*0x800acba0*/ u8 weapons[6]; /*0x800acba6*/ u8 paused; - /*0x800acba8*/ struct savelocation_2d8 unk20; + /*0x800acba8*/ struct fileguid fileguid; }; struct bossfile { @@ -4695,8 +4685,8 @@ struct mparena { }; struct filelistfile { - u32 unk00; - u16 unk04; + s32 filenum; + u16 deviceserial; char unk06[6]; // length unknown u32 unk0c; u32 unk10; @@ -4710,7 +4700,7 @@ struct filelist { /*0x000*/ struct filelistfile files[30]; /*0x2d0*/ s16 numfiles; /*0x2d2*/ s8 spacesfree[5]; // per device - controller paks then game pak - /*0x2d8*/ struct savelocation_2d8 unk2d8[5]; + /*0x2d8*/ struct fileguid deviceguids[5]; /*0x300*/ s8 devicestartindexes[5]; // game pak then controller paks /*0x308*/ s8 unk305[5]; // controller paks then game pak - error count? /*0x30a*/ u8 numdevices; @@ -5344,9 +5334,7 @@ struct frdata { }; struct menudata_5d8 { - s32 unk00; - u16 unk04; - u16 unk06; + struct fileguid fileguid; u8 unk08; u8 unk09; u8 unk0a;