mirror of
https://gitlab.com/ryandwyer/perfect-dark
synced 2026-06-05 11:17:23 -04:00
Decompile pak0f118bc8, discover pakfileheader and rename many pak symbols
This commit is contained in:
+10
-10
@@ -60,25 +60,25 @@ void func0f1106f4(u8 *dst)
|
||||
|
||||
u32 func0f110720(void)
|
||||
{
|
||||
struct pakthing16 sp840;
|
||||
struct pakfileheader header;
|
||||
u32 sp3c[513];
|
||||
u32 sp38 = 0;
|
||||
s32 i;
|
||||
|
||||
if (pak0f1167b0(SAVEDEVICE_GAMEPAK, 0x10, sp3c) == 0) {
|
||||
if (pak0f1167b0(SAVEDEVICE_GAMEPAK, PAKFILETYPE_BOSS, sp3c) == 0) {
|
||||
for (i = 0; sp3c[i] != 0; i++) {
|
||||
pak0f119368(SAVEDEVICE_GAMEPAK, sp3c[i], &sp840);
|
||||
pakFindFile(SAVEDEVICE_GAMEPAK, sp3c[i], &header);
|
||||
|
||||
if (sp840.unk0c_22 == 0) {
|
||||
if (!header.occupied) {
|
||||
sp38 = sp3c[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; sp3c[i] != 0; i++) {
|
||||
pak0f119368(SAVEDEVICE_GAMEPAK, sp3c[i], &sp840);
|
||||
pakFindFile(SAVEDEVICE_GAMEPAK, sp3c[i], &header);
|
||||
|
||||
if (sp840.unk0c_22) {
|
||||
if (header.occupied) {
|
||||
sp38 = sp3c[i];
|
||||
break;
|
||||
}
|
||||
@@ -113,7 +113,7 @@ void bossfileLoad(void)
|
||||
|
||||
savebufferReadGuid(&buffer, &guid);
|
||||
|
||||
g_Vars.bossfilenum = guid.filenum;
|
||||
g_Vars.bossfileid = guid.fileid;
|
||||
g_Vars.bossdeviceserial = guid.deviceserial;
|
||||
|
||||
g_BossFile.unk89 = savebufferReadBits(&buffer, 1);
|
||||
@@ -160,7 +160,7 @@ void bossfileSave(void)
|
||||
|
||||
savebufferClear(&buffer);
|
||||
|
||||
guid.filenum = g_Vars.bossfilenum;
|
||||
guid.fileid = g_Vars.bossfileid;
|
||||
guid.deviceserial = g_Vars.bossdeviceserial;
|
||||
|
||||
savebufferWriteGuid(&buffer, &guid);
|
||||
@@ -194,7 +194,7 @@ void bossfileSave(void)
|
||||
faultAssert("fileGuid", "bossfile.c", PAL ? 377 : 375);
|
||||
}
|
||||
|
||||
if (pak0f116828(SAVEDEVICE_GAMEPAK, tmp, 0x10, buffer.bytes, NULL, 0)) {
|
||||
if (pak0f116828(SAVEDEVICE_GAMEPAK, tmp, PAKFILETYPE_BOSS, buffer.bytes, NULL, 0)) {
|
||||
sp12c = true;
|
||||
}
|
||||
}
|
||||
@@ -215,7 +215,7 @@ void bossfileSetDefaults(void)
|
||||
g_BossFile.usingmultipletunes = false;
|
||||
g_BossFile.unk89 = 0;
|
||||
g_BossFile.locktype = MPLOCKTYPE_NONE;
|
||||
g_Vars.bossfilenum = 0;
|
||||
g_Vars.bossfileid = 0;
|
||||
g_Vars.bossdeviceserial = 0;
|
||||
g_Vars.unk000482 = (PAL ? 7 : 0);
|
||||
g_AltTitleUnlocked = 0;
|
||||
|
||||
+3
-3
@@ -2640,7 +2640,7 @@ glabel var7f1b72f0
|
||||
/* f14ba2c: 00000000 */ nop
|
||||
/* f14ba30: 00022600 */ sll $a0,$v0,0x18
|
||||
/* f14ba34: 00046603 */ sra $t4,$a0,0x18
|
||||
/* f14ba38: 0fc45c84 */ jal pak0f117210
|
||||
/* f14ba38: 0fc45c84 */ jal pakGetUnk008
|
||||
/* f14ba3c: 01802025 */ or $a0,$t4,$zero
|
||||
/* f14ba40: 24010001 */ addiu $at,$zero,0x1
|
||||
/* f14ba44: 1041001b */ beq $v0,$at,.L0f14bab4
|
||||
@@ -3389,7 +3389,7 @@ glabel var7f1b7338
|
||||
/* f14c450: 00000000 */ nop
|
||||
/* f14c454: 00022600 */ sll $a0,$v0,0x18
|
||||
/* f14c458: 00045e03 */ sra $t3,$a0,0x18
|
||||
/* f14c45c: 0fc45c84 */ jal pak0f117210
|
||||
/* f14c45c: 0fc45c84 */ jal pakGetUnk008
|
||||
/* f14c460: 01602025 */ or $a0,$t3,$zero
|
||||
/* f14c464: 24010001 */ addiu $at,$zero,0x1
|
||||
/* f14c468: 10410007 */ beq $v0,$at,.L0f14c488
|
||||
@@ -4118,7 +4118,7 @@ glabel func0f14cdb8
|
||||
/* f14ceb0: 00000000 */ nop
|
||||
/* f14ceb4: 00022600 */ sll $a0,$v0,0x18
|
||||
/* f14ceb8: 00047e03 */ sra $t7,$a0,0x18
|
||||
/* f14cebc: 0fc45c84 */ jal pak0f117210
|
||||
/* f14cebc: 0fc45c84 */ jal pakGetUnk008
|
||||
/* f14cec0: 01e02025 */ or $a0,$t7,$zero
|
||||
/* f14cec4: 2401000c */ addiu $at,$zero,0xc
|
||||
/* f14cec8: 1041001e */ beq $v0,$at,.L0f14cf44
|
||||
|
||||
+20
-14
@@ -118,12 +118,12 @@ void filelistsTick(void)
|
||||
|
||||
for (; i < 5; i++) {
|
||||
#if VERSION >= VERSION_NTSC_1_0
|
||||
if (pak0f1167d8(i) && var800a2330[i] != pak0f11702c(i)) {
|
||||
if (pak0f1167d8(i) && var800a2330[i] != pakGetUnk264(i)) {
|
||||
updateall = true;
|
||||
var800a2330[i] = pak0f11702c(i);
|
||||
var800a2330[i] = pakGetUnk264(i);
|
||||
}
|
||||
#else
|
||||
s32 tmp = pak0f11702c(i);
|
||||
s32 tmp = pakGetUnk264(i);
|
||||
|
||||
pak0f11698c(i);
|
||||
|
||||
@@ -171,7 +171,13 @@ void filelistsTick(void)
|
||||
|
||||
void filelistUpdate(struct filelist *list)
|
||||
{
|
||||
const u32 sp3a88[] = {0x80, 0x40, 0x20, 0x08};
|
||||
const u32 sp3a88[] = {
|
||||
PAKFILETYPE_GAME,
|
||||
PAKFILETYPE_MPSETUP,
|
||||
PAKFILETYPE_MPPLAYER,
|
||||
PAKFILETYPE_008,
|
||||
};
|
||||
|
||||
s32 sp1288[2560];
|
||||
u32 spa88[512];
|
||||
s8 filedevices[2560];
|
||||
@@ -218,7 +224,7 @@ void filelistUpdate(struct filelist *list)
|
||||
list->spacesfree[dis2dev[i]] = pak0f118148(dis2dev[i]);
|
||||
}
|
||||
|
||||
list->deviceguids[dis2dev[i]].filenum = 0;
|
||||
list->deviceguids[dis2dev[i]].fileid = 0;
|
||||
list->deviceguids[dis2dev[i]].deviceserial = pakGetDeviceSerial(dis2dev[i]);
|
||||
} else {
|
||||
// PFS error?
|
||||
@@ -249,7 +255,7 @@ void filelistUpdate(struct filelist *list)
|
||||
}
|
||||
|
||||
file->deviceserial = pakGetDeviceSerial(filedevices[i]);
|
||||
file->filenum = sp1288[i];
|
||||
file->fileid = sp1288[i];
|
||||
|
||||
list->numfiles++;
|
||||
} else if (maybepfserr == 10) {
|
||||
@@ -259,8 +265,8 @@ void filelistUpdate(struct filelist *list)
|
||||
if (list->unk305[filedevices[i]] >= 2) {
|
||||
list->spacesfree[filedevices[i]]++;
|
||||
|
||||
if (list->deviceguids[filedevices[i]].filenum == 0) {
|
||||
list->deviceguids[filedevices[i]].filenum = sp1288[i];
|
||||
if (list->deviceguids[filedevices[i]].fileid == 0) {
|
||||
list->deviceguids[filedevices[i]].fileid = sp1288[i];
|
||||
list->deviceguids[filedevices[i]].deviceserial = pakGetDeviceSerial(filedevices[i]);
|
||||
}
|
||||
}
|
||||
@@ -400,7 +406,7 @@ const char var7f1b3a14[] = "gamefile.c";
|
||||
// }
|
||||
//
|
||||
// for (i = 0; i != ARRAYCOUNT(g_Menus[playernum].headtextures->fileguids); i++) {
|
||||
// g_Menus[playernum].fm.headtextures->fileguids[i].filenum = 0;
|
||||
// g_Menus[playernum].fm.headtextures->fileguids[i].fileid = 0;
|
||||
// g_Menus[playernum].fm.headtextures->fileguids[i].deviceserial = 0;
|
||||
// }
|
||||
//
|
||||
@@ -433,20 +439,20 @@ void pheadFreeTextures(s32 playernum)
|
||||
}
|
||||
}
|
||||
|
||||
struct textureconfig *pheadGetTexture(s32 playernum, s32 filenum, u16 deviceserial)
|
||||
struct textureconfig *pheadGetTexture(s32 playernum, s32 fileid, u16 deviceserial)
|
||||
{
|
||||
s32 i;
|
||||
s32 freeslot = -1;
|
||||
s32 indextouse = -1;
|
||||
|
||||
for (i = 0; i < 16; i++) {
|
||||
if (g_Menus[playernum].fm.headtextures->fileguids[i].filenum == filenum
|
||||
if (g_Menus[playernum].fm.headtextures->fileguids[i].fileid == fileid
|
||||
&& g_Menus[playernum].fm.headtextures->fileguids[i].deviceserial == deviceserial) {
|
||||
indextouse = i;
|
||||
break;
|
||||
}
|
||||
|
||||
if (g_Menus[playernum].fm.headtextures->fileguids[i].filenum == 0) {
|
||||
if (g_Menus[playernum].fm.headtextures->fileguids[i].fileid == 0) {
|
||||
if (g_Menus[playernum].fm.headtextures->fileguids[i].deviceserial == 0) {
|
||||
freeslot = i;
|
||||
}
|
||||
@@ -470,9 +476,9 @@ struct textureconfig *pheadGetTexture(s32 playernum, s32 filenum, u16 deviceseri
|
||||
|
||||
g_Menus[playernum].fm.headtextures->lastupdated240 = g_Vars.thisframe240;
|
||||
|
||||
func0f15015c(device, filenum, g_Menus[playernum].fm.headtextures->unk000[freeslot]);
|
||||
func0f15015c(device, fileid, g_Menus[playernum].fm.headtextures->unk000[freeslot]);
|
||||
|
||||
g_Menus[playernum].fm.headtextures->fileguids[freeslot].filenum = filenum;
|
||||
g_Menus[playernum].fm.headtextures->fileguids[freeslot].fileid = fileid;
|
||||
g_Menus[playernum].fm.headtextures->fileguids[freeslot].deviceserial = deviceserial;
|
||||
|
||||
indextouse = freeslot;
|
||||
|
||||
+34
-34
@@ -481,7 +481,7 @@ void filemgrHandleSuccess(void)
|
||||
align16(g_FileTypeSizes[g_Menus[g_MpPlayerNum].fm.filetypeplusone - 1]));
|
||||
break;
|
||||
case FILEOP_LOAD_GAME:
|
||||
g_Vars.bossfilenum = g_Menus[g_MpPlayerNum].fm.filenum;
|
||||
g_Vars.bossfileid = g_Menus[g_MpPlayerNum].fm.fileid;
|
||||
g_Vars.bossdeviceserial = g_Menus[g_MpPlayerNum].fm.deviceserial;
|
||||
bossfileSave();
|
||||
|
||||
@@ -593,7 +593,7 @@ void filemgrEraseCorruptFile(void)
|
||||
device = pakFindBySerial(g_Menus[g_MpPlayerNum].fm.deviceserial);
|
||||
|
||||
if (device >= 0) {
|
||||
pakDeleteFile(device, g_Menus[g_MpPlayerNum].fm.filenum);
|
||||
pakDeleteFile(device, g_Menus[g_MpPlayerNum].fm.fileid);
|
||||
}
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
@@ -730,18 +730,18 @@ bool filemgrAttemptOperation(s32 device, bool closeonsuccess)
|
||||
case FILEOP_SAVE_GAME_000:
|
||||
case FILEOP_SAVE_GAME_001:
|
||||
errno = gamefileSave(device,
|
||||
g_Menus[g_MpPlayerNum].fm.filenum,
|
||||
g_Menus[g_MpPlayerNum].fm.fileid,
|
||||
g_Menus[g_MpPlayerNum].fm.deviceserial);
|
||||
break;
|
||||
case FILEOP_SAVE_MPPLAYER:
|
||||
errno = mpplayerfileSave(
|
||||
(s32) g_Menus[g_MpPlayerNum].fm.unke44, device,
|
||||
g_Menus[g_MpPlayerNum].fm.filenum,
|
||||
g_Menus[g_MpPlayerNum].fm.fileid,
|
||||
g_Menus[g_MpPlayerNum].fm.deviceserial);
|
||||
break;
|
||||
case FILEOP_SAVE_MPSETUP:
|
||||
errno = mpsetupfileSave(device,
|
||||
g_Menus[g_MpPlayerNum].fm.filenum,
|
||||
g_Menus[g_MpPlayerNum].fm.fileid,
|
||||
g_Menus[g_MpPlayerNum].fm.deviceserial);
|
||||
showfilesaved = true;
|
||||
break;
|
||||
@@ -751,7 +751,7 @@ bool filemgrAttemptOperation(s32 device, bool closeonsuccess)
|
||||
sp2c = 0;
|
||||
func0f0d5690(g_Menus[g_MpPlayerNum].fm.unke44, g_Menus[g_MpPlayerNum].fm.filename);
|
||||
errno = pak0f116828(device,
|
||||
g_Menus[g_MpPlayerNum].fm.filenum,
|
||||
g_Menus[g_MpPlayerNum].fm.fileid,
|
||||
sp30[g_Menus[g_MpPlayerNum].fm.fileop - 6],
|
||||
g_Menus[g_MpPlayerNum].fm.unke44, &sp2c, 0);
|
||||
var80075bd0[g_Menus[g_MpPlayerNum].fm.fileop - 6] = 1;
|
||||
@@ -763,19 +763,19 @@ bool filemgrAttemptOperation(s32 device, bool closeonsuccess)
|
||||
errno = mpplayerfileLoad(
|
||||
(s32) g_Menus[g_MpPlayerNum].fm.unke44,
|
||||
device,
|
||||
g_Menus[g_MpPlayerNum].fm.filenum,
|
||||
g_Menus[g_MpPlayerNum].fm.fileid,
|
||||
g_Menus[g_MpPlayerNum].fm.deviceserial);
|
||||
break;
|
||||
case FILEOP_LOAD_MPSETUP:
|
||||
errno = mpsetupfileLoad(device,
|
||||
g_Menus[g_MpPlayerNum].fm.filenum,
|
||||
g_Menus[g_MpPlayerNum].fm.fileid,
|
||||
g_Menus[g_MpPlayerNum].fm.deviceserial);
|
||||
break;
|
||||
case FILEOP_READ_GAME:
|
||||
case FILEOP_READ_MPSETUP:
|
||||
case FILEOP_READ_MPPLAYER:
|
||||
errno = pak0f116800(device,
|
||||
g_Menus[g_MpPlayerNum].fm.filenum,
|
||||
g_Menus[g_MpPlayerNum].fm.fileid,
|
||||
g_Menus[g_MpPlayerNum].fm.unke44, 0);
|
||||
break;
|
||||
}
|
||||
@@ -1068,10 +1068,10 @@ bool filemgrSaveOrLoad(struct fileguid *guid, s32 fileop, u32 playernum)
|
||||
g_Menus[g_MpPlayerNum].fm.fileop = fileop;
|
||||
g_Menus[g_MpPlayerNum].fm.mpplayernum = playernum;
|
||||
g_Menus[g_MpPlayerNum].fm.isretryingsave = 0;
|
||||
var800a21f8.filenum = 0;
|
||||
var800a21f8.fileid = 0;
|
||||
}
|
||||
|
||||
g_Menus[g_MpPlayerNum].fm.filenum = guid->filenum;
|
||||
g_Menus[g_MpPlayerNum].fm.fileid = guid->fileid;
|
||||
g_Menus[g_MpPlayerNum].fm.deviceserial = guid->deviceserial;
|
||||
|
||||
if (fileop != -1) {
|
||||
@@ -1118,7 +1118,7 @@ void filemgrDeleteCurrentFile(void)
|
||||
s32 i;
|
||||
|
||||
if (device >= 0) {
|
||||
if (pakDeleteFile(device, g_FilemgrFileToDelete.filenum) != 0) {
|
||||
if (pakDeleteFile(device, g_FilemgrFileToDelete.fileid) != 0) {
|
||||
error = true;
|
||||
}
|
||||
} else {
|
||||
@@ -1133,7 +1133,7 @@ void filemgrDeleteCurrentFile(void)
|
||||
} else {
|
||||
// If deleting a loaded MP player, reset them to default
|
||||
for (i = 0; i < 4; i++) {
|
||||
if (g_FilemgrFileToDelete.filenum == g_MpPlayers[i].fileguid.filenum
|
||||
if (g_FilemgrFileToDelete.fileid == g_MpPlayers[i].fileguid.fileid
|
||||
&& g_FilemgrFileToDelete.deviceserial == g_MpPlayers[i].fileguid.deviceserial) {
|
||||
mpPlayerSetDefaults(i, true);
|
||||
}
|
||||
@@ -1233,7 +1233,7 @@ void func0f1097d0(s32 device)
|
||||
void *thing;
|
||||
|
||||
if (g_FileLists[0]) {
|
||||
var800a21e8.filenum = g_FileLists[0]->deviceguids[device].filenum;
|
||||
var800a21e8.fileid = g_FileLists[0]->deviceguids[device].fileid;
|
||||
var800a21e8.deviceserial = g_FileLists[0]->deviceguids[device].deviceserial;
|
||||
|
||||
thing = func00012ab0(align16(g_FileTypeSizes[g_Menus[g_MpPlayerNum].fm.filetypeplusone - 1]));
|
||||
@@ -1258,7 +1258,7 @@ const char var7f1b3284[] = "Saving...\n";
|
||||
void filemgrSaveGameToDevice(s32 device)
|
||||
{
|
||||
if (g_FileLists[0]) {
|
||||
g_GameFileGuid.filenum = g_FileLists[0]->deviceguids[device].filenum;
|
||||
g_GameFileGuid.fileid = g_FileLists[0]->deviceguids[device].fileid;
|
||||
g_GameFileGuid.deviceserial = g_FileLists[0]->deviceguids[device].deviceserial;
|
||||
|
||||
filemgrSaveOrLoad(&g_GameFileGuid, FILEOP_SAVE_GAME_000, 0);
|
||||
@@ -1479,17 +1479,17 @@ void filemgrSaveToDevice(void)
|
||||
// empty
|
||||
} else if (g_Menus[g_MpPlayerNum].fm.unke3e == 6) {
|
||||
struct fileguid guid;
|
||||
guid.filenum = g_FileLists[g_Menus[g_MpPlayerNum].fm.listnum]->deviceguids[g_Menus[g_MpPlayerNum].fm.device2].filenum;
|
||||
guid.fileid = g_FileLists[g_Menus[g_MpPlayerNum].fm.listnum]->deviceguids[g_Menus[g_MpPlayerNum].fm.device2].fileid;
|
||||
guid.deviceserial = g_FileLists[g_Menus[g_MpPlayerNum].fm.listnum]->deviceguids[g_Menus[g_MpPlayerNum].fm.device2].deviceserial;
|
||||
filemgrSaveOrLoad(&guid, FILEOP_SAVE_MPPLAYER, (u32)g_MpPlayerNum);
|
||||
} else if (g_Menus[g_MpPlayerNum].fm.unke3e == 7) {
|
||||
struct fileguid guid;
|
||||
guid.filenum = g_FileLists[g_Menus[g_MpPlayerNum].fm.listnum]->deviceguids[g_Menus[g_MpPlayerNum].fm.device2].filenum;
|
||||
guid.fileid = g_FileLists[g_Menus[g_MpPlayerNum].fm.listnum]->deviceguids[g_Menus[g_MpPlayerNum].fm.device2].fileid;
|
||||
guid.deviceserial = g_FileLists[g_Menus[g_MpPlayerNum].fm.listnum]->deviceguids[g_Menus[g_MpPlayerNum].fm.device2].deviceserial;
|
||||
filemgrSaveOrLoad(&guid, FILEOP_SAVE_MPSETUP, 0);
|
||||
} else if (g_Menus[g_MpPlayerNum].fm.unke3e >= 9) {
|
||||
struct fileguid guid;
|
||||
guid.filenum = g_FileLists[g_Menus[g_MpPlayerNum].fm.listnum]->deviceguids[g_Menus[g_MpPlayerNum].fm.device2].filenum;
|
||||
guid.fileid = g_FileLists[g_Menus[g_MpPlayerNum].fm.listnum]->deviceguids[g_Menus[g_MpPlayerNum].fm.device2].fileid;
|
||||
guid.deviceserial = g_FileLists[g_Menus[g_MpPlayerNum].fm.listnum]->deviceguids[g_Menus[g_MpPlayerNum].fm.device2].deviceserial;
|
||||
filemgrSaveOrLoad(&guid, -1, 0);
|
||||
} else {
|
||||
@@ -1955,11 +1955,11 @@ char *filemgrMenuTextFileInUseDescription(struct menuitem *item)
|
||||
* but filemgrRenderPerfectHeadThumbnail will only match if
|
||||
* it's an s32 with a 0xffff mask.
|
||||
*/
|
||||
struct textureconfig *pheadGetTexture(s32 playernum, s32 filenum, s32 deviceserial);
|
||||
struct textureconfig *pheadGetTexture(s32 playernum, s32 fileid, s32 deviceserial);
|
||||
|
||||
Gfx *filemgrRenderPerfectHeadThumbnail(Gfx *gdl, struct menuitemrenderdata *renderdata, s32 filenum, s32 deviceserial)
|
||||
Gfx *filemgrRenderPerfectHeadThumbnail(Gfx *gdl, struct menuitemrenderdata *renderdata, s32 fileid, s32 deviceserial)
|
||||
{
|
||||
struct textureconfig *texture = pheadGetTexture(g_MpPlayerNum, filenum, deviceserial & 0xffff);
|
||||
struct textureconfig *texture = pheadGetTexture(g_MpPlayerNum, fileid, deviceserial & 0xffff);
|
||||
|
||||
if (texture) {
|
||||
gSPDisplayList(gdl++, &var800613a0);
|
||||
@@ -2009,7 +2009,7 @@ bool filemgrIsFileInUse(struct filelistfile *file)
|
||||
|
||||
#if VERSION >= VERSION_NTSC_1_0
|
||||
if (menuIsDialogOpen(&g_FilemgrCopyMenuDialog)
|
||||
&& file->filenum == g_FilemgrFileToCopy.filenum
|
||||
&& file->fileid == g_FilemgrFileToCopy.fileid
|
||||
&& file->deviceserial == g_FilemgrFileToCopy.deviceserial) {
|
||||
return true;
|
||||
}
|
||||
@@ -2020,7 +2020,7 @@ bool filemgrIsFileInUse(struct filelistfile *file)
|
||||
#else
|
||||
if (g_MenuData.root == MENUROOT_FILEMGR
|
||||
&& menuIsDialogOpen(&g_FilemgrCopyMenuDialog)
|
||||
&& file->filenum == g_FilemgrFileToCopy.filenum
|
||||
&& file->fileid == g_FilemgrFileToCopy.fileid
|
||||
&& file->deviceserial == g_FilemgrFileToCopy.deviceserial) {
|
||||
return true;
|
||||
}
|
||||
@@ -2030,17 +2030,17 @@ bool filemgrIsFileInUse(struct filelistfile *file)
|
||||
return false;
|
||||
}
|
||||
|
||||
if (file->filenum == g_GameFileGuid.filenum && file->deviceserial == g_GameFileGuid.deviceserial) {
|
||||
if (file->fileid == g_GameFileGuid.fileid && file->deviceserial == g_GameFileGuid.deviceserial) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (file->filenum == g_MpSetup.fileguid.filenum && file->deviceserial == g_MpSetup.fileguid.deviceserial) {
|
||||
if (file->fileid == g_MpSetup.fileguid.fileid && file->deviceserial == g_MpSetup.fileguid.deviceserial) {
|
||||
return true;
|
||||
}
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
if ((g_MpSetup.chrslots & (1 << i))
|
||||
&& g_MpPlayers[i].fileguid.filenum == file->filenum
|
||||
&& g_MpPlayers[i].fileguid.fileid == file->fileid
|
||||
&& g_MpPlayers[i].fileguid.deviceserial == file->deviceserial) {
|
||||
return true;
|
||||
}
|
||||
@@ -2082,7 +2082,7 @@ s32 filemgrFileToCopyOrDeleteListMenuHandler(s32 operation, struct menuitem *ite
|
||||
struct filelistfile *file = &list->files[data->list.unk04];
|
||||
|
||||
if (g_Menus[g_MpPlayerNum].fm.filetypeplusone == 4) {
|
||||
gdl = filemgrRenderPerfectHeadThumbnail(gdl, renderdata, file->filenum, file->deviceserial);
|
||||
gdl = filemgrRenderPerfectHeadThumbnail(gdl, renderdata, file->fileid, file->deviceserial);
|
||||
} else {
|
||||
u32 colour = renderdata->colour;
|
||||
char text[32];
|
||||
@@ -2140,7 +2140,7 @@ s32 filemgrFileToDeleteListMenuHandler(s32 operation, struct menuitem *item, uni
|
||||
menuPushDialog(&g_FilemgrFileInUseMenuDialog);
|
||||
} else {
|
||||
filemgrSetFileToDelete(file, g_FileLists[g_Menus[g_MpPlayerNum].fm.listnum]->filetype);
|
||||
g_FilemgrFileToDelete.filenum = file->filenum;
|
||||
g_FilemgrFileToDelete.fileid = file->fileid;
|
||||
g_FilemgrFileToDelete.deviceserial = file->deviceserial;
|
||||
menuPushDialog(&g_FilemgrConfirmDeleteMenuDialog);
|
||||
}
|
||||
@@ -2162,7 +2162,7 @@ s32 filemgrFileToCopyListMenuHandler(s32 operation, struct menuitem *item, union
|
||||
struct filelistfile *file = &list->files[data->list.value];
|
||||
|
||||
if (file) {
|
||||
g_FilemgrFileToCopy.filenum = file->filenum;
|
||||
g_FilemgrFileToCopy.fileid = file->fileid;
|
||||
g_FilemgrFileToCopy.deviceserial = file->deviceserial;
|
||||
|
||||
#if VERSION >= VERSION_NTSC_1_0
|
||||
@@ -2657,7 +2657,7 @@ s32 filemgrChooseAgentListMenuHandler(s32 operation, struct menuitem *item, unio
|
||||
if (data->list.unk04 == 1) {
|
||||
if (data->list.groupstartindex == 1 && g_Menus[g_MpPlayerNum].fm.unke2c == 1) {
|
||||
for (i = 0; i < g_FileLists[0]->numfiles; i++) {
|
||||
if (g_GameFileGuid.filenum == g_FileLists[0]->files[i].filenum
|
||||
if (g_GameFileGuid.fileid == g_FileLists[0]->files[i].fileid
|
||||
&& g_GameFileGuid.deviceserial == g_FileLists[0]->files[i].deviceserial) {
|
||||
data->list.value = i;
|
||||
}
|
||||
@@ -2674,12 +2674,12 @@ s32 filemgrChooseAgentListMenuHandler(s32 operation, struct menuitem *item, unio
|
||||
g_Menus[g_MpPlayerNum].fm.unke2c = 0;
|
||||
}
|
||||
|
||||
if (pass && g_Vars.bossfilenum) {
|
||||
if (pass && g_Vars.bossfileid) {
|
||||
for (j = 0; j < g_FileLists[0]->numfiles; j++) {
|
||||
if (g_Vars.bossfilenum == g_FileLists[0]->files[j].filenum
|
||||
if (g_Vars.bossfileid == g_FileLists[0]->files[j].fileid
|
||||
&& g_Vars.bossdeviceserial == g_FileLists[0]->files[j].deviceserial) {
|
||||
data->list.value = j;
|
||||
g_Vars.bossfilenum = 0;
|
||||
g_Vars.bossfileid = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2818,7 +2818,7 @@ s32 filemgrChooseAgentListMenuHandler(s32 operation, struct menuitem *item, unio
|
||||
struct filelistfile *file = &g_FileLists[0]->files[data->list.value];
|
||||
|
||||
if (file) {
|
||||
g_GameFileGuid.filenum = file->filenum;
|
||||
g_GameFileGuid.fileid = file->fileid;
|
||||
g_GameFileGuid.deviceserial = file->deviceserial;
|
||||
filemgrSaveOrLoad(&g_GameFileGuid, FILEOP_LOAD_GAME, 0);
|
||||
}
|
||||
|
||||
+6
-6
@@ -908,8 +908,8 @@ s32 gamefileLoad(s32 device)
|
||||
|
||||
if (device >= 0) {
|
||||
savebufferClear(&buffer);
|
||||
tmp = pak0f116800(device, g_GameFileGuid.filenum, buffer.bytes, 0);
|
||||
var800a21f8.filenum = tmp;
|
||||
tmp = pak0f116800(device, g_GameFileGuid.fileid, buffer.bytes, 0);
|
||||
var800a21f8.fileid = tmp;
|
||||
|
||||
if (tmp == 0) {
|
||||
cheatsDisableAll();
|
||||
@@ -998,7 +998,7 @@ s32 gamefileLoad(s32 device)
|
||||
return -1;
|
||||
}
|
||||
|
||||
s32 gamefileSave(s32 device, s32 filenum, u16 deviceserial)
|
||||
s32 gamefileSave(s32 device, s32 fileid, u16 deviceserial)
|
||||
{
|
||||
u32 stack;
|
||||
s32 sp140;
|
||||
@@ -1133,11 +1133,11 @@ s32 gamefileSave(s32 device, s32 filenum, u16 deviceserial)
|
||||
|
||||
func0f0d54c4(&buffer);
|
||||
|
||||
tmp = pak0f116828(device, filenum, 0x80, buffer.bytes, &sp140, 0);
|
||||
var800a21f8.filenum = tmp;
|
||||
tmp = pak0f116828(device, fileid, PAKFILETYPE_GAME, buffer.bytes, &sp140, 0);
|
||||
var800a21f8.fileid = tmp;
|
||||
|
||||
if (tmp == 0) {
|
||||
g_GameFileGuid.filenum = sp140;
|
||||
g_GameFileGuid.fileid = sp140;
|
||||
g_GameFileGuid.deviceserial = deviceserial;
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -601,7 +601,7 @@ 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].fileguid.filenum == 0
|
||||
&& g_MpPlayers[g_MpPlayerNum].fileguid.fileid == 0
|
||||
&& g_MpPlayers[g_MpPlayerNum].fileguid.deviceserial == 0) {
|
||||
g_MpPlayers[g_MpPlayerNum].options |= OPTION_ASKEDSAVEPLAYER;
|
||||
menuPushDialog(&g_MpEndscreenSavePlayerMenuDialog);
|
||||
|
||||
+21
-21
@@ -408,7 +408,7 @@ 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].fileguid.filenum = 0;
|
||||
g_MpPlayers[playernum].fileguid.fileid = 0;
|
||||
g_MpPlayers[playernum].fileguid.deviceserial = 0;
|
||||
|
||||
if (autonames) {
|
||||
@@ -484,7 +484,7 @@ void mpSetDefaultSetup(void)
|
||||
|
||||
func0f187fec();
|
||||
|
||||
g_MpSetup.fileguid.filenum = 0;
|
||||
g_MpSetup.fileguid.fileid = 0;
|
||||
g_MpSetup.fileguid.deviceserial = 0;
|
||||
|
||||
strcpy(g_MpSetup.name, "");
|
||||
@@ -8570,10 +8570,10 @@ void mpplayerfileLoadWad(s32 playernum, struct savebuffer *buffer, s32 arg2)
|
||||
savebufferReadGuid(buffer, &guid);
|
||||
|
||||
if (g_MpPlayers[playernum].base.mpheadnum >= mpGetNumHeads2()) {
|
||||
if (guid.filenum != 0 && guid.deviceserial != 0) {
|
||||
if (guid.fileid != 0 && guid.deviceserial != 0) {
|
||||
if (g_MenuData.unk668 < 11) {
|
||||
g_MenuData.unk668++;
|
||||
g_MenuData.unk5d8[g_MenuData.unk668].fileguid.filenum = guid.filenum;
|
||||
g_MenuData.unk5d8[g_MenuData.unk668].fileguid.fileid = guid.fileid;
|
||||
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;
|
||||
@@ -8641,7 +8641,7 @@ void mpplayerfileSaveWad(s32 playernum, struct savebuffer *buffer)
|
||||
} else {
|
||||
struct fileguid guid;
|
||||
guid.deviceserial = 0;
|
||||
guid.filenum = 0;
|
||||
guid.fileid = 0;
|
||||
savebufferWriteGuid(buffer, &guid);
|
||||
}
|
||||
|
||||
@@ -8762,7 +8762,7 @@ void mpplayerfileGetOverview(char *arg0, char *name, u32 *playtime)
|
||||
s32 mpplayerfileSave(s32 playernum, s32 device, s32 arg2, u16 deviceserial)
|
||||
{
|
||||
s32 tmp;
|
||||
s32 filenum;
|
||||
s32 fileid;
|
||||
struct savebuffer buffer;
|
||||
|
||||
if (device >= 0) {
|
||||
@@ -8772,22 +8772,22 @@ s32 mpplayerfileSave(s32 playernum, s32 device, s32 arg2, u16 deviceserial)
|
||||
|
||||
var80075bd0[2] = true;
|
||||
|
||||
tmp = pak0f116828(device, arg2, 0x20, buffer.bytes, &filenum, 0);
|
||||
tmp = pak0f116828(device, arg2, PAKFILETYPE_MPPLAYER, buffer.bytes, &fileid, 0);
|
||||
|
||||
if (tmp == 0) {
|
||||
g_MpPlayers[playernum].fileguid.filenum = filenum;
|
||||
g_MpPlayers[playernum].fileguid.fileid = fileid;
|
||||
g_MpPlayers[playernum].fileguid.deviceserial = deviceserial;
|
||||
return 0;
|
||||
}
|
||||
|
||||
var800a21f8.filenum = tmp;
|
||||
var800a21f8.fileid = tmp;
|
||||
return -1;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
s32 mpplayerfileLoad(s32 playernum, s32 device, s32 filenum, u16 deviceserial)
|
||||
s32 mpplayerfileLoad(s32 playernum, s32 device, s32 fileid, u16 deviceserial)
|
||||
{
|
||||
s32 tmp;
|
||||
struct savebuffer buffer;
|
||||
@@ -8795,10 +8795,10 @@ s32 mpplayerfileLoad(s32 playernum, s32 device, s32 filenum, u16 deviceserial)
|
||||
if (device >= 0) {
|
||||
savebufferClear(&buffer);
|
||||
|
||||
tmp = pak0f116800(device, filenum, buffer.bytes, 0);
|
||||
tmp = pak0f116800(device, fileid, buffer.bytes, 0);
|
||||
|
||||
if (tmp == 0) {
|
||||
g_MpPlayers[playernum].fileguid.filenum = filenum;
|
||||
g_MpPlayers[playernum].fileguid.fileid = fileid;
|
||||
g_MpPlayers[playernum].fileguid.deviceserial = deviceserial;
|
||||
|
||||
mpplayerfileLoadWad(playernum, &buffer, 1);
|
||||
@@ -8808,7 +8808,7 @@ s32 mpplayerfileLoad(s32 playernum, s32 device, s32 filenum, u16 deviceserial)
|
||||
return 0;
|
||||
}
|
||||
|
||||
var800a21f8.filenum = tmp;
|
||||
var800a21f8.fileid = tmp;
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -9457,7 +9457,7 @@ void mpsetupfileGetOverview(char *arg0, char *filename, u16 *numsims, u16 *stage
|
||||
*scenarionum = savebufferReadBits(&buffer, 3);
|
||||
}
|
||||
|
||||
s32 mpsetupfileSave(s32 device, s32 filenum, u16 deviceserial)
|
||||
s32 mpsetupfileSave(s32 device, s32 fileid, u16 deviceserial)
|
||||
{
|
||||
s32 tmp;
|
||||
s32 sp100;
|
||||
@@ -9468,33 +9468,33 @@ s32 mpsetupfileSave(s32 device, s32 filenum, u16 deviceserial)
|
||||
mpsetupfileSaveWad(&buffer);
|
||||
func0f0d54c4(&buffer);
|
||||
|
||||
tmp = pak0f116828(device, filenum, 0x40, buffer.bytes, &sp100, 0);
|
||||
tmp = pak0f116828(device, fileid, PAKFILETYPE_MPSETUP, buffer.bytes, &sp100, 0);
|
||||
var80075bd0[1] = true;
|
||||
|
||||
if (tmp == 0) {
|
||||
g_MpSetup.fileguid.filenum = sp100;
|
||||
g_MpSetup.fileguid.fileid = sp100;
|
||||
g_MpSetup.fileguid.deviceserial = deviceserial;
|
||||
return 0;
|
||||
}
|
||||
|
||||
var800a21f8.filenum = tmp;
|
||||
var800a21f8.fileid = tmp;
|
||||
return -1;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
s32 mpsetupfileLoad(s32 device, s32 filenum, u16 deviceserial)
|
||||
s32 mpsetupfileLoad(s32 device, s32 fileid, u16 deviceserial)
|
||||
{
|
||||
s32 tmp;
|
||||
struct savebuffer buffer;
|
||||
|
||||
if (device >= 0) {
|
||||
savebufferClear(&buffer);
|
||||
tmp = pak0f116800(device, filenum, buffer.bytes, 0);
|
||||
tmp = pak0f116800(device, fileid, buffer.bytes, 0);
|
||||
|
||||
if (tmp == 0) {
|
||||
g_MpSetup.fileguid.filenum = filenum;
|
||||
g_MpSetup.fileguid.fileid = fileid;
|
||||
g_MpSetup.fileguid.deviceserial = deviceserial;
|
||||
|
||||
mpsetupfileLoadWad(&buffer);
|
||||
@@ -9503,7 +9503,7 @@ s32 mpsetupfileLoad(s32 device, s32 filenum, u16 deviceserial)
|
||||
return 0;
|
||||
}
|
||||
|
||||
var800a21f8.filenum = tmp;
|
||||
var800a21f8.fileid = tmp;
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -4520,7 +4520,7 @@ 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].fileguid.filenum && g_MpPlayers[g_MpPlayerNum].fileguid.deviceserial) {
|
||||
if (g_MpPlayers[g_MpPlayerNum].fileguid.fileid && g_MpPlayers[g_MpPlayerNum].fileguid.deviceserial) {
|
||||
filemgrSaveOrLoad(&g_MpPlayers[g_MpPlayerNum].fileguid, FILEOP_SAVE_MPPLAYER, 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].fileguid.filenum == 0) {
|
||||
if (g_MpPlayers[g_MpPlayerNum].fileguid.fileid == 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].fileguid.filenum == 0) {
|
||||
if (g_MpPlayers[g_MpPlayerNum].fileguid.fileid == 0) {
|
||||
return langGet(L_MPMENU_038); // "Save Player"
|
||||
}
|
||||
|
||||
@@ -7446,7 +7446,7 @@ 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.fileguid.filenum == 0) {
|
||||
if (g_MpSetup.fileguid.fileid == 0) {
|
||||
menuPushDialog(&g_MpSaveSetupNameMenuDialog);
|
||||
} else {
|
||||
#if VERSION >= VERSION_NTSC_1_0
|
||||
|
||||
+310
-443
File diff suppressed because it is too large
Load Diff
@@ -919,13 +919,13 @@ glabel func0f0d5690
|
||||
|
||||
void savebufferWriteGuid(struct savebuffer *buffer, struct fileguid *guid)
|
||||
{
|
||||
savebufferOr(buffer, guid->filenum, 7);
|
||||
savebufferOr(buffer, guid->fileid, 7);
|
||||
savebufferOr(buffer, guid->deviceserial, 13);
|
||||
}
|
||||
|
||||
void savebufferReadGuid(struct savebuffer *buffer, struct fileguid *guid)
|
||||
{
|
||||
guid->filenum = savebufferReadBits(buffer, 7);
|
||||
guid->fileid = savebufferReadBits(buffer, 7);
|
||||
guid->deviceserial = savebufferReadBits(buffer, 13);
|
||||
}
|
||||
|
||||
|
||||
+86
-76
@@ -924,6 +924,82 @@
|
||||
#define GAILIST_INIT_SEARCH 0x002c // unused
|
||||
#define GAILIST_INVINCIBLE_AND_IDLE (VERSION >= VERSION_NTSC_1_0 ? 0x002d : 0x002c)
|
||||
|
||||
#define GAMEFILEFLAG_P1_FORWARDPITCH 0x00
|
||||
#define GAMEFILEFLAG_P1_AUTOAIM 0x01
|
||||
#define GAMEFILEFLAG_P1_AIMCONTROL 0x02
|
||||
#define GAMEFILEFLAG_P1_SIGHTONSCREEN 0x03
|
||||
#define GAMEFILEFLAG_P1_LOOKAHEAD 0x04
|
||||
#define GAMEFILEFLAG_P1_AMMOONSCREEN 0x05
|
||||
#define GAMEFILEFLAG_SCREENSIZE_WIDE 0x06
|
||||
#define GAMEFILEFLAG_SCREENRATIO 0x07
|
||||
#define GAMEFILEFLAG_SCREENSIZE_CINEMA 0x08
|
||||
#define GAMEFILEFLAG_P1_HEADROLL 0x09
|
||||
#define GAMEFILEFLAG_P1_SHOWGUNFUNCTION 0x0a
|
||||
#define GAMEFILEFLAG_INGAMESUBTITLES 0x0b
|
||||
#define GAMEFILEFLAG_P2_FORWARDPITCH 0x0c
|
||||
#define GAMEFILEFLAG_P2_AUTOAIM 0x0d
|
||||
#define GAMEFILEFLAG_P2_AIMCONTROL 0x0e
|
||||
#define GAMEFILEFLAG_P2_SIGHTONSCREEN 0x0f
|
||||
#define GAMEFILEFLAG_P2_LOOKAHEAD 0x10
|
||||
#define GAMEFILEFLAG_P2_AMMOONSCREEN 0x11
|
||||
#define GAMEFILEFLAG_P2_HEADROLL 0x12
|
||||
#define GAMEFILEFLAG_P2_SHOWGUNFUNCTION 0x13
|
||||
#define GAMEFILEFLAG_CUTSCENESUBTITLES 0x14
|
||||
#define GAMEFILEFLAG_P1_ALWAYSSHOWTARGET 0x15
|
||||
#define GAMEFILEFLAG_P2_ALWAYSSHOWTARGET 0x16
|
||||
#define GAMEFILEFLAG_P1_SHOWZOOMRANGE 0x17
|
||||
#define GAMEFILEFLAG_P2_SHOWZOOMRANGE 0x18
|
||||
#define GAMEFILEFLAG_SCREENSPLIT 0x19
|
||||
#define GAMEFILEFLAG_P1_SHOWMISSIONTIME 0x1a
|
||||
#define GAMEFILEFLAG_P2_SHOWMISSIONTIME 0x1b
|
||||
#define GAMEFILEFLAG_COOPRADARON 0x1c
|
||||
#define GAMEFILEFLAG_COOPFRIENDLYFIRE 0x1d
|
||||
#define GAMEFILEFLAG_ANTIRADARON 0x1e
|
||||
#define GAMEFILEFLAG_ANTIPLAYERNUM 0x1f
|
||||
#define GAMEFILEFLAG_P1_PAINTBALL 0x20
|
||||
#define GAMEFILEFLAG_P2_PAINTBALL 0x21
|
||||
#define GAMEFILEFLAG_HIRES 0x22
|
||||
#define GAMEFILEFLAG_USED_TRANSFERPAK 0x23
|
||||
#define GAMEFILEFLAG_CI_TOUR_DONE 0x24
|
||||
#define GAMEFILEFLAG_CI_HOLO7_DONE 0x29
|
||||
#define GAMEFILEFLAG_CI_HOLO6_DONE 0x2a
|
||||
#define GAMEFILEFLAG_CI_HOLO5_DONE 0x2b
|
||||
#define GAMEFILEFLAG_CI_HOLO4_DONE 0x2c
|
||||
#define GAMEFILEFLAG_CI_HOLO3_DONE 0x2d
|
||||
#define GAMEFILEFLAG_CI_HOLO2_DONE 0x2e
|
||||
#define GAMEFILEFLAG_CI_HOLO1_DONE 0x2f
|
||||
#define GAMEFILEFLAG_CI_CLOAK_DONE 0x30
|
||||
#define GAMEFILEFLAG_CI_DISGUISE_DONE 0x31
|
||||
#define GAMEFILEFLAG_CI_XRAY_DONE 0x32
|
||||
#define GAMEFILEFLAG_CI_IR_DONE 0x33
|
||||
#define GAMEFILEFLAG_CI_RTRACKER_DONE 0x34
|
||||
#define GAMEFILEFLAG_CI_DOORDECODER_DONE 0x35
|
||||
#define GAMEFILEFLAG_CI_NIGHTVISION_DONE 0x36
|
||||
#define GAMEFILEFLAG_CI_CAMSPY_DONE 0x37
|
||||
#define GAMEFILEFLAG_CI_ECMMINE_DONE 0x38
|
||||
#define GAMEFILEFLAG_CI_UPLINK_DONE 0x39
|
||||
#define GAMEFILEFLAG_CI_TOUR_STARTED 0x3a
|
||||
#define GAMEFILEFLAG_CRASHSITE_BIKE 0x3b
|
||||
#define GAMEFILEFLAG_DEFENSE_JON 0x3c
|
||||
#define GAMEFILEFLAG_AF1_ENTRY 0x3d
|
||||
#define GAMEFILEFLAG_RESCUE_MECHANIC_DEAD 0x3e
|
||||
#define GAMEFILEFLAG_G5_MINE 0x3f // true if thrown on top door
|
||||
#define GAMEFILEFLAG_LANGFILTERON 0x40
|
||||
#define GAMEFILEFLAG_FOUNDTIMEDMINE 0x41
|
||||
#define GAMEFILEFLAG_FOUNDPROXYMINE 0x42
|
||||
#define GAMEFILEFLAG_FOUNDREMOTEMINE 0x43
|
||||
#define GAMEFILEFLAG_44 0x44
|
||||
#define GAMEFILEFLAG_45 0x45
|
||||
#define GAMEFILEFLAG_46 0x46
|
||||
#define GAMEFILEFLAG_HOWTO_HOVERCRATE 0x47
|
||||
#define GAMEFILEFLAG_HOWTO_HOVERBIKE 0x48
|
||||
#define GAMEFILEFLAG_HOWTO_DOORS 0x49
|
||||
#define GAMEFILEFLAG_HOWTO_ELEVATORS 0x4a
|
||||
#define GAMEFILEFLAG_HOWTO_TERMINALS 0x4b
|
||||
#define GAMEFILEFLAG_4C 0x4c
|
||||
#define GAMEFILEFLAG_4D 0x4d
|
||||
#define GAMEFILEFLAG_4E 0x4e
|
||||
|
||||
#define GOPOSFLAG_SPEED 0x03 // bits 0x01 and 0x02 combined
|
||||
#define GOPOSFLAG_INIT 0x04
|
||||
#define GOPOSFLAG_FORPATHSTART 0x08
|
||||
@@ -2996,6 +3072,16 @@
|
||||
#define PAKERROR_EEPROM_INVALIDOP 0x83
|
||||
#define PAKERROR_EEPROM_INVALIDARG 0x84
|
||||
|
||||
#define PAKFILETYPE_001 0x001
|
||||
#define PAKFILETYPE_002 0x002
|
||||
#define PAKFILETYPE_004 0x004
|
||||
#define PAKFILETYPE_008 0x008 // suspected to be PerfectHead
|
||||
#define PAKFILETYPE_BOSS 0x010
|
||||
#define PAKFILETYPE_MPPLAYER 0x020
|
||||
#define PAKFILETYPE_MPSETUP 0x040
|
||||
#define PAKFILETYPE_GAME 0x080
|
||||
#define PAKFILETYPE_100 0x100
|
||||
|
||||
#define PATHFLAG_CIRCULAR 1
|
||||
#define PATHFLAG_FLYING 2
|
||||
#define PATHFLAG_INUSE 4
|
||||
@@ -3151,82 +3237,6 @@
|
||||
#define SAVEDEVICE_GAMEPAK 4
|
||||
#define SAVEDEVICE_INVALID 5
|
||||
|
||||
#define GAMEFILEFLAG_P1_FORWARDPITCH 0x00
|
||||
#define GAMEFILEFLAG_P1_AUTOAIM 0x01
|
||||
#define GAMEFILEFLAG_P1_AIMCONTROL 0x02
|
||||
#define GAMEFILEFLAG_P1_SIGHTONSCREEN 0x03
|
||||
#define GAMEFILEFLAG_P1_LOOKAHEAD 0x04
|
||||
#define GAMEFILEFLAG_P1_AMMOONSCREEN 0x05
|
||||
#define GAMEFILEFLAG_SCREENSIZE_WIDE 0x06
|
||||
#define GAMEFILEFLAG_SCREENRATIO 0x07
|
||||
#define GAMEFILEFLAG_SCREENSIZE_CINEMA 0x08
|
||||
#define GAMEFILEFLAG_P1_HEADROLL 0x09
|
||||
#define GAMEFILEFLAG_P1_SHOWGUNFUNCTION 0x0a
|
||||
#define GAMEFILEFLAG_INGAMESUBTITLES 0x0b
|
||||
#define GAMEFILEFLAG_P2_FORWARDPITCH 0x0c
|
||||
#define GAMEFILEFLAG_P2_AUTOAIM 0x0d
|
||||
#define GAMEFILEFLAG_P2_AIMCONTROL 0x0e
|
||||
#define GAMEFILEFLAG_P2_SIGHTONSCREEN 0x0f
|
||||
#define GAMEFILEFLAG_P2_LOOKAHEAD 0x10
|
||||
#define GAMEFILEFLAG_P2_AMMOONSCREEN 0x11
|
||||
#define GAMEFILEFLAG_P2_HEADROLL 0x12
|
||||
#define GAMEFILEFLAG_P2_SHOWGUNFUNCTION 0x13
|
||||
#define GAMEFILEFLAG_CUTSCENESUBTITLES 0x14
|
||||
#define GAMEFILEFLAG_P1_ALWAYSSHOWTARGET 0x15
|
||||
#define GAMEFILEFLAG_P2_ALWAYSSHOWTARGET 0x16
|
||||
#define GAMEFILEFLAG_P1_SHOWZOOMRANGE 0x17
|
||||
#define GAMEFILEFLAG_P2_SHOWZOOMRANGE 0x18
|
||||
#define GAMEFILEFLAG_SCREENSPLIT 0x19
|
||||
#define GAMEFILEFLAG_P1_SHOWMISSIONTIME 0x1a
|
||||
#define GAMEFILEFLAG_P2_SHOWMISSIONTIME 0x1b
|
||||
#define GAMEFILEFLAG_COOPRADARON 0x1c
|
||||
#define GAMEFILEFLAG_COOPFRIENDLYFIRE 0x1d
|
||||
#define GAMEFILEFLAG_ANTIRADARON 0x1e
|
||||
#define GAMEFILEFLAG_ANTIPLAYERNUM 0x1f
|
||||
#define GAMEFILEFLAG_P1_PAINTBALL 0x20
|
||||
#define GAMEFILEFLAG_P2_PAINTBALL 0x21
|
||||
#define GAMEFILEFLAG_HIRES 0x22
|
||||
#define GAMEFILEFLAG_USED_TRANSFERPAK 0x23
|
||||
#define GAMEFILEFLAG_CI_TOUR_DONE 0x24
|
||||
#define GAMEFILEFLAG_CI_HOLO7_DONE 0x29
|
||||
#define GAMEFILEFLAG_CI_HOLO6_DONE 0x2a
|
||||
#define GAMEFILEFLAG_CI_HOLO5_DONE 0x2b
|
||||
#define GAMEFILEFLAG_CI_HOLO4_DONE 0x2c
|
||||
#define GAMEFILEFLAG_CI_HOLO3_DONE 0x2d
|
||||
#define GAMEFILEFLAG_CI_HOLO2_DONE 0x2e
|
||||
#define GAMEFILEFLAG_CI_HOLO1_DONE 0x2f
|
||||
#define GAMEFILEFLAG_CI_CLOAK_DONE 0x30
|
||||
#define GAMEFILEFLAG_CI_DISGUISE_DONE 0x31
|
||||
#define GAMEFILEFLAG_CI_XRAY_DONE 0x32
|
||||
#define GAMEFILEFLAG_CI_IR_DONE 0x33
|
||||
#define GAMEFILEFLAG_CI_RTRACKER_DONE 0x34
|
||||
#define GAMEFILEFLAG_CI_DOORDECODER_DONE 0x35
|
||||
#define GAMEFILEFLAG_CI_NIGHTVISION_DONE 0x36
|
||||
#define GAMEFILEFLAG_CI_CAMSPY_DONE 0x37
|
||||
#define GAMEFILEFLAG_CI_ECMMINE_DONE 0x38
|
||||
#define GAMEFILEFLAG_CI_UPLINK_DONE 0x39
|
||||
#define GAMEFILEFLAG_CI_TOUR_STARTED 0x3a
|
||||
#define GAMEFILEFLAG_CRASHSITE_BIKE 0x3b
|
||||
#define GAMEFILEFLAG_DEFENSE_JON 0x3c
|
||||
#define GAMEFILEFLAG_AF1_ENTRY 0x3d
|
||||
#define GAMEFILEFLAG_RESCUE_MECHANIC_DEAD 0x3e
|
||||
#define GAMEFILEFLAG_G5_MINE 0x3f // true if thrown on top door
|
||||
#define GAMEFILEFLAG_LANGFILTERON 0x40
|
||||
#define GAMEFILEFLAG_FOUNDTIMEDMINE 0x41
|
||||
#define GAMEFILEFLAG_FOUNDPROXYMINE 0x42
|
||||
#define GAMEFILEFLAG_FOUNDREMOTEMINE 0x43
|
||||
#define GAMEFILEFLAG_44 0x44
|
||||
#define GAMEFILEFLAG_45 0x45
|
||||
#define GAMEFILEFLAG_46 0x46
|
||||
#define GAMEFILEFLAG_HOWTO_HOVERCRATE 0x47
|
||||
#define GAMEFILEFLAG_HOWTO_HOVERBIKE 0x48
|
||||
#define GAMEFILEFLAG_HOWTO_DOORS 0x49
|
||||
#define GAMEFILEFLAG_HOWTO_ELEVATORS 0x4a
|
||||
#define GAMEFILEFLAG_HOWTO_TERMINALS 0x4b
|
||||
#define GAMEFILEFLAG_4C 0x4c
|
||||
#define GAMEFILEFLAG_4D 0x4d
|
||||
#define GAMEFILEFLAG_4E 0x4e
|
||||
|
||||
#define SCREENRATIO_NORMAL 0
|
||||
#define SCREENRATIO_16_9 1
|
||||
|
||||
|
||||
+25
-25
@@ -4,17 +4,17 @@
|
||||
#include "data.h"
|
||||
#include "types.h"
|
||||
|
||||
u32 pak0f1165d0(s8 device);
|
||||
u32 pak0f1165f8(s8 device, u32 arg1);
|
||||
s32 pak0f116658(s8 arg0, s32 arg1);
|
||||
u32 pakGetAlignment(s8 device);
|
||||
u32 pakAlign(s8 device, u32 size);
|
||||
s32 pakGetAlignedFileLenByBodyLen(s8 device, s32 bodylen);
|
||||
u32 pak0f116684(u32 arg0);
|
||||
u32 pakGenerateSerial(s8 device);
|
||||
bool pakIsConnected(s8 device);
|
||||
s32 pak0f1167b0(s8 device, u32 arg1, u32 *buffer1024);
|
||||
s32 pak0f1167b0(s8 device, u32 filetype, u32 *buffer1024);
|
||||
u32 pak0f1167d8(s8 arg0);
|
||||
s32 pak0f116800(s8 arg0, s32 arg1, void *arg2, s32 arg3);
|
||||
s32 pak0f116828(s8 device, s32 arg1, s32 arg2, void *arg3, s32 *filenum, s32 arg5);
|
||||
bool pakDeleteFile(s8 device, s32 filenum);
|
||||
s32 pak0f116800(s8 device, s32 fileid, u8 *body, s32 arg3);
|
||||
s32 pak0f116828(s8 device, s32 fileid, s32 filetype, u8 *body, s32 *outfileid, s32 arg5);
|
||||
bool pakDeleteFile(s8 device, s32 fileid);
|
||||
s32 pakDeleteGameNote(s8 device, u16 company_code, u32 game_code, char *game_name, char *ext_name);
|
||||
s32 pak0f1168c4(s8 device, struct pakdata **arg1);
|
||||
u32 pak0f116914(s8 device);
|
||||
@@ -26,22 +26,22 @@ bool pak0f116aec(s8 device);
|
||||
bool pak0f116b5c(s8 device);
|
||||
void pak0f116bdc(s8 device, u8 *arg1, u8 *arg2);
|
||||
u16 pakGetSerial(s8 device);
|
||||
u32 pak0f116c94(s8 device);
|
||||
void pak0f116db0(s8 device, s32 value);
|
||||
u32 pakGetUnk000(s8 device);
|
||||
void pakSetUnk010(s8 device, s32 value);
|
||||
s32 pak0f116df0(s8 device, struct pakdata **arg1);
|
||||
s32 pakDeleteGameNote2(s8 device, u16 company_code, u32 game_code, char *game_name, char *ext_name);
|
||||
s32 pakDeleteFile2(s8 device, s32 filenum);
|
||||
s32 pak0f11702c(s8 device);
|
||||
s32 pakDeleteFile2(s8 device, s32 fileid);
|
||||
s32 pakGetUnk264(s8 device);
|
||||
u32 pak0f11706c(s8 device);
|
||||
s32 pak0f117094(s8 device, u32 arg1);
|
||||
s32 pakGetBodyLenByType(s8 device, u32 filetype);
|
||||
void pak0f117150(s8 device, u8 *ptr);
|
||||
void pak0f1171b4(s8 device, s32 arg1, s32 arg2);
|
||||
s32 pak0f117210(s8 device);
|
||||
s32 pakGetUnk008(s8 device);
|
||||
u32 pak0f117430(void);
|
||||
u32 pak0f117520(s8 device, u32 arg1, struct pakthing16 *arg2);
|
||||
u32 pakReadHeaderAtOffset(s8 device, u32 arg1, struct pakfileheader *header);
|
||||
void pakDumpBuffer(u8 *buffer, u32 len, char *name);
|
||||
void pakDumpEeprom(void);
|
||||
s32 pak0f11789c(s8 device, s32 arg1, s32 arg2, void *arg3, s32 *arg4, s32 arg5);
|
||||
s32 pak0f11789c(s8 device, s32 fileid, s32 filetype, u8 *body, s32 *outfileid, s32 arg5);
|
||||
|
||||
#if VERSION >= VERSION_NTSC_1_0
|
||||
s32 pakInitPak(OSMesgQueue *mq, OSPfs *pfs, s32 channel, s32 *arg3);
|
||||
@@ -55,10 +55,10 @@ s32 pakFreeBlocks(OSPfs *pfs, s32 *bytes_not_used);
|
||||
s32 pakFileState(OSPfs *pfs, s32 file_no, OSPfsState *note);
|
||||
s32 pakAllocateFile(OSPfs *pfs, u16 company_code, u32 game_code, char *game_name, char *ext_name, s32 size, s32 *file_no);
|
||||
u32 pakDeleteGameNote3(OSPfs *pfs, u16 company_code, u32 game_code, char *game_name, char *ext_name);
|
||||
s32 pakFindFile(OSPfs *pfs, u16 company_code, u32 game_code, char *game_name, char *ext_name, s32 *file_no);
|
||||
s32 pakFindNote(OSPfs *pfs, u16 company_code, u32 game_code, char *game_name, char *ext_name, s32 *file_no);
|
||||
s32 pak0f117ec0(OSPfs *pfs, u16 company_code, u32 game_code, u8 *game_name, u8 *ext_name, u32 numbytes);
|
||||
s32 pak0f117f80(s8 device);
|
||||
s32 pak0f117fc0(s8 device);
|
||||
s32 pakGetUnk2a8(s8 device);
|
||||
u32 pakGetNoteLen(s8 device);
|
||||
s32 pak0f118000(s8 device);
|
||||
s32 pak0f11807c(s8 device);
|
||||
s32 pak0f118148(s8 device);
|
||||
@@ -66,14 +66,14 @@ s32 pak0f118230(s8 device, s32 arg1);
|
||||
s32 pak0f118334(s8 device, s32 numpages);
|
||||
void pak0f1185e0(s8 device, s32 arg1, s32 param_3);
|
||||
u32 pak0f118674(s8 arg0, u32 arg1, u32 arg2);
|
||||
void pak0f1189d8(void);
|
||||
void pakInitAll(void);
|
||||
void pakCalculateChecksum(u8 *arg0, u8 *arg1, u16 *arg2);
|
||||
s32 pak0f118bc8(s8 arg0, s32 arg1, void *arg2, s32 arg3);
|
||||
s32 pak0f118d18(s8 device, u32 arg1, u32 *buffer1024);
|
||||
s32 pak0f118bc8(s8 device, s32 fileid, u8 *body, s32 arg3);
|
||||
s32 pak0f118d18(s8 device, u32 filetype, u32 *buffer1024);
|
||||
s32 pak0f1190bc(s8 device, s32 arg1, s32 *arg2);
|
||||
u32 pak0f119298(s8 device);
|
||||
void pak0f119340(u32 arg0);
|
||||
s32 pak0f119368(s8 device, u32 arg1, struct pakthing16 *pakthing16);
|
||||
s32 pakFindFile(s8 device, u32 fileid, struct pakfileheader *header);
|
||||
#if VERSION >= VERSION_NTSC_FINAL
|
||||
bool pak0f119478(u32 arg0, u32 arg1, u32 *arg2);
|
||||
#endif
|
||||
@@ -85,7 +85,7 @@ u32 pak0f11a0e8(void);
|
||||
u32 pak0f11a1d0(void);
|
||||
void pak0f11a2e4(void);
|
||||
void pak0f11a32c(s8 device, u8 arg1, u32 line, char *file);
|
||||
void pak0f11a434(s8 arg0);
|
||||
void pakInit(s8 arg0);
|
||||
s32 pak0f11a504(s8 device, OSPfs *pfs, s32 file_no, u8 flag, u32 address, u32 len, u8 *buffer);
|
||||
s32 pak0f11a574(s8 device);
|
||||
u32 pak0f11a7dc(void);
|
||||
@@ -96,9 +96,9 @@ u32 pak0f11b178(void);
|
||||
u32 pak0f11b488(void);
|
||||
s32 pakScrub(s8 device);
|
||||
bool pak0f11b75c(s8 device, u32 *arg1);
|
||||
u32 pak0f11b86c(void);
|
||||
s32 pak0f11b86c(s32 device, u32 uVar2, u8 *data, struct pakfileheader *header, s32 arg3);
|
||||
u32 pak0f11bbd8(void);
|
||||
s32 pak0f11bc54(s8 device, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6, s32 arg7, s32 arg8);
|
||||
s32 pak0f11bc54(s8 device, s32 arg1, s32 filetype, s32 arg3, s32 arg4, s32 arg5, s32 arg6, s32 arg7, s32 arg8);
|
||||
bool pakRepair(s8 device);
|
||||
u32 pak0f11c39c(u32 arg0, s8 device, u32 ar2, u32 arg3);
|
||||
void pak0f11c54c(void);
|
||||
|
||||
+14
-14
@@ -87,7 +87,7 @@ struct playerstats {
|
||||
};
|
||||
|
||||
struct fileguid {
|
||||
s32 filenum;
|
||||
s32 fileid;
|
||||
u16 deviceserial;
|
||||
};
|
||||
|
||||
@@ -202,7 +202,7 @@ struct g_vars {
|
||||
/*000470*/ s32 perfectbuddynum;
|
||||
/*000474*/ s32 numaibuddies;
|
||||
/*000478*/ bool aibuddiesspawned;
|
||||
/*00047c*/ s32 bossfilenum;
|
||||
/*00047c*/ s32 bossfileid;
|
||||
/*000480*/ u16 bossdeviceserial;
|
||||
/*000482*/ u16 unk000482;
|
||||
/*000484*/ s32 mphilltime;
|
||||
@@ -3863,7 +3863,7 @@ struct menudata_filemgr {
|
||||
void *unke44;
|
||||
s32 mpplayernum;
|
||||
};
|
||||
/*0xe48*/ u32 filenum;
|
||||
/*0xe48*/ u32 fileid;
|
||||
/*0xe4c*/ u32 deviceserial;
|
||||
/*0xe50*/ u16 isretryingsave;
|
||||
/*0xe52*/ u8 device2;
|
||||
@@ -4678,7 +4678,7 @@ struct mparena {
|
||||
};
|
||||
|
||||
struct filelistfile {
|
||||
s32 filenum;
|
||||
s32 fileid;
|
||||
u16 deviceserial;
|
||||
char name[16];
|
||||
};
|
||||
@@ -5045,7 +5045,7 @@ struct pak {
|
||||
/*0x294*/ u32 unk294;
|
||||
/*0x298*/ u32 unk298;
|
||||
/*0x29c*/ s32 noteindex;
|
||||
/*0x2a0*/ u32 unk2a0;
|
||||
/*0x2a0*/ u32 notelen;
|
||||
/*0x2a4*/ u32 unk2a4;
|
||||
/*0x2a8*/ u32 unk2a8;
|
||||
/*0x2ac*/ u32 unk2ac;
|
||||
@@ -6674,17 +6674,17 @@ struct pakthing {
|
||||
u16 unk10;
|
||||
};
|
||||
|
||||
struct pakthing16 {
|
||||
struct pakfileheader {
|
||||
u32 unk00;
|
||||
u32 unk04;
|
||||
u32 unk08_01 : 9;
|
||||
u32 unk08_10 : 3;
|
||||
u32 unk08_13 : 8;
|
||||
u32 unk08_21 : 12;
|
||||
u32 unk0c_01 : 13;
|
||||
u32 unk0c_14 : 7;
|
||||
u16 sum1;
|
||||
u16 sum2;
|
||||
u32 filetype : 9; // PAKFILETYPE constant
|
||||
u32 bodylen : 11; // not aligned
|
||||
u32 filelen : 12; // aligned to 0x10
|
||||
u32 deviceserial : 13;
|
||||
u32 fileid : 7;
|
||||
u32 unk0c_21 : 9;
|
||||
u32 unk0c_22 : 1;
|
||||
u32 occupied : 1;
|
||||
};
|
||||
|
||||
struct var80067e6c {
|
||||
|
||||
+1
-1
@@ -555,7 +555,7 @@ void joy00014238(void)
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
if (joy000155f4(i) == 13) {
|
||||
pak0f116db0(i, 11);
|
||||
pakSetUnk010(i, 11);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+4
-4
@@ -660,7 +660,7 @@ glabel mainInit
|
||||
/* d7b0: 00000000 */ nop
|
||||
/* d7b4: 0fc52bf6 */ jal func0f14a328
|
||||
/* d7b8: 00000000 */ nop
|
||||
/* d7bc: 0fc4652e */ jal pak0f1189d8
|
||||
/* d7bc: 0fc4652e */ jal pakInitAll
|
||||
/* d7c0: 00000000 */ nop
|
||||
/* d7c4: 0fc52c1b */ jal func0f14a3bc
|
||||
/* d7c8: 00000000 */ nop
|
||||
@@ -1063,7 +1063,7 @@ glabel mainInit
|
||||
/* da74: 00000000 */ nop
|
||||
/* da78: 0fc528ca */ jal func0f14a328
|
||||
/* da7c: 00000000 */ nop
|
||||
/* da80: 0fc46276 */ jal pak0f1189d8
|
||||
/* da80: 0fc46276 */ jal pakInitAll
|
||||
/* da84: 00000000 */ nop
|
||||
/* da88: 0fc528ef */ jal func0f14a3bc
|
||||
/* da8c: 00000000 */ nop
|
||||
@@ -1436,7 +1436,7 @@ glabel mainInit
|
||||
/* df84: 00000000 */ sll $zero,$zero,0x0
|
||||
/* df88: 0fc512be */ jal func0f14a328
|
||||
/* df8c: 00000000 */ sll $zero,$zero,0x0
|
||||
/* df90: 0fc44b4c */ jal pak0f1189d8
|
||||
/* df90: 0fc44b4c */ jal pakInitAll
|
||||
/* df94: 00000000 */ sll $zero,$zero,0x0
|
||||
/* df98: 0fc512e3 */ jal func0f14a3bc
|
||||
/* df9c: 00000000 */ sll $zero,$zero,0x0
|
||||
@@ -1665,7 +1665,7 @@ const char var70053aa0[] = " -ml0 -me0 -mgfx100 -mvtx50 -mt700 -ma400";
|
||||
// stub0f000840();
|
||||
// mpSetDefaultSetup();
|
||||
// func0f14a328();
|
||||
// pak0f1189d8();
|
||||
// pakInitAll();
|
||||
// func0f14a3bc();
|
||||
// func000233c0();
|
||||
// func0f000100();
|
||||
|
||||
Reference in New Issue
Block a user