Discover file GUIDs

This commit is contained in:
Ryan Dwyer
2021-09-15 22:06:29 +10:00
parent 5354574e37
commit 9b4be0961d
20 changed files with 253 additions and 264 deletions
+3 -3
View File
@@ -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)) {
+6 -6
View File
@@ -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(
+2 -2
View File
@@ -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)
+2 -2
View File
@@ -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;
+101 -100
View File
@@ -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;
+32 -32
View File
@@ -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) {
+10 -10
View File
@@ -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;
}
+2 -2
View File
@@ -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);
}
+42 -42
View File
@@ -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;
}
+7 -7
View File
@@ -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);
+7 -7
View File
@@ -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;
}
}
+3 -3
View File
@@ -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;
// }
// }
+2 -2
View File
@@ -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;
+2 -2
View File
@@ -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[];
+2 -2
View File
@@ -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);
+4 -4
View File
@@ -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);
+2 -2
View File
@@ -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
+4 -4
View File
@@ -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);
+4 -4
View File
@@ -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);
+16 -28
View File
@@ -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;