From 3b4451a2d18144618c983c8ccd27d4ba375a69d1 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sun, 25 Jun 2023 22:33:57 +1000 Subject: [PATCH] Name more pak symbols --- src/game/camdraw.c | 30 +- src/game/filelist.c | 34 +- src/game/filemgr.c | 26 +- src/game/gamefile.c | 10 +- src/game/lv.c | 14 +- src/game/menu.c | 53 ++- src/game/menustop.c | 2 +- src/game/menutick.c | 4 +- src/game/pak.c | 805 +++++++++++++++++------------------- src/include/constants.h | 78 ++-- src/include/data.h | 2 +- src/include/game/filelist.h | 2 +- src/include/game/menu.h | 8 +- src/include/game/pak.h | 24 +- src/include/lib/joy.h | 18 +- src/include/types.h | 18 +- src/lib/joy.c | 137 +++--- src/lib/main.c | 2 +- 18 files changed, 612 insertions(+), 655 deletions(-) diff --git a/src/game/camdraw.c b/src/game/camdraw.c index 58592eba4..97498ec6e 100644 --- a/src/game/camdraw.c +++ b/src/game/camdraw.c @@ -948,7 +948,7 @@ void func0f14aee0(void) thing->unk078 = 0; pak0f117150(i, thing->unk0d8); - pak0f1171b4(SAVEDEVICE_CONTROLLERPAK1, 3, 0); + pak0f1171b4(SAVEDEVICE_CONTROLLERPAK1, PAK00C_03, 0); func0f14aed0(i); thing->unk094 = 0; @@ -1200,7 +1200,7 @@ void func0f14b8ac(s32 index) } switch (pakGetUnk008(func0f14a5a4())) { - case 12: + case PAK008_12: func0f14a95c(); func0f14aa48(); func0f14e790(var800a45a0->unk470); @@ -1209,10 +1209,10 @@ void func0f14b8ac(s32 index) func0f14a16c(1); func0f14bc04(); break; - case 1: + case PAK008_01: pak0f11d4dc(func0f14a5a4()); break; - case 11: + case PAK008_11: pak0f11d9c4(func0f14a5a4(), var800a45a0->unk470, 0, 0); func0f14d064(index, var800a45a0->unk470); pak0f11d478(func0f14a5a4()); @@ -1320,7 +1320,7 @@ void func0f14bd34(s32 index) struct var8007f8dc *thing = &var8007f8dc[index]; if (thing->unk080 != -1) { - pak0f1171b4(func0f14a5a4(), 3, 0); + pak0f1171b4(func0f14a5a4(), PAK00C_03, 0); pak0f11d540(func0f14a5a4(), thing->unk0b6[thing->unk080]); } } @@ -1402,7 +1402,7 @@ void func0f14bec8(s32 index) for (i = 0; i < ARRAYCOUNT(thing->unk0b6); i++); - pak0f1171b4(func0f14a5a4(), 3, 0); + pak0f1171b4(func0f14a5a4(), PAK00C_03, 0); pak0f11d478(func0f14a5a4()); break; case 3: @@ -1446,7 +1446,7 @@ void func0f14c1cc(s32 index) switch (thing->unk0f4) { case 0: - pak0f1171b4(func0f14a5a4(), 0, 0); + pak0f1171b4(func0f14a5a4(), PAK00C_00, 0); pak0f11d5b0(func0f14a5a4()); thing->unk0f4 = 1; break; @@ -1510,13 +1510,13 @@ void func0f14c3a4(s32 index) pak0f11d620(func0f14a5a4()); switch (pakGetUnk008(func0f14a5a4())) { - case 1: + case PAK008_01: func0f14c1cc(index); break; - case 11: + case PAK008_11: func0f14bec8(index); break; - case 12: + case PAK008_12: func0f14bdbc(index); break; } @@ -1712,7 +1712,7 @@ void func0f14cdb8(s32 index, u8 *arg1) void func0f14ce84(void) { if (pak0f11d3f8(func0f14a5a4())) { - if (pakGetUnk008(func0f14a5a4()) != 12) { + if (pakGetUnk008(func0f14a5a4()) != PAK008_12) { var8007f8dc[func0f14a5a4()].unk0f8 = 1; var8007f8dc[func0f14a5a4()].unk0d4_00 = false; @@ -1739,7 +1739,7 @@ void func0f14cf6c(void) case 4: case 5: case 6: - pak0f1171b4(func0f14a5a4(), 3, 0); + pak0f1171b4(func0f14a5a4(), PAK00C_03, 0); g_MpPlayerNum = 0; menuSetBanner(-1, false); break; @@ -1762,7 +1762,7 @@ void func0f14d064(s32 index, u8 *arg1) g_MpPlayerNum = index; menuSetBanner(MENUBANNER_CALIBRATINGCAMERA, false); func0f14a16c(1); - pak0f1171b4(func0f14a5a4(), 1, 1); + pak0f1171b4(func0f14a5a4(), PAK00C_01, 1); thing->unk0f8 = 3; return; } @@ -1801,12 +1801,12 @@ void func0f14d064(s32 index, u8 *arg1) } if (thing->unk0f8 == 6) { - pak0f1171b4(func0f14a5a4(), 3, 0); + pak0f1171b4(func0f14a5a4(), PAK00C_03, 0); thing->unk0f8 = 6; thing->unk100 = thing->unk0fc; g_MpPlayerNum = index; menuSetBanner(-1, false); - pak0f1171b4(func0f14a5a4(), 3, 0); + pak0f1171b4(func0f14a5a4(), PAK00C_03, 0); var8007f8dc[var800a45a0->unk000].unk0d4_04 = true; thing->unk0f8 = 0; } diff --git a/src/game/filelist.c b/src/game/filelist.c index bdeebcc0a..1cfe79936 100644 --- a/src/game/filelist.c +++ b/src/game/filelist.c @@ -22,7 +22,7 @@ #include "data.h" #include "types.h" -s32 var800a2330[5]; +s32 g_FilelistKnownPlugCounts[5]; struct filelist *g_FileLists[MAX_PLAYERS] = { NULL }; bool var80075bd0[] = { true, true, true, true }; @@ -60,7 +60,7 @@ void filelistCreate(s32 listnum, u8 filetype) g_FileLists[listnum]->filetype = filetype; if (var80062944 == 0) { - joy0001398c(3); + joySetPfsPollInterval(3); } var80062944 = 1; @@ -92,9 +92,9 @@ s32 filelistFindOrCreate(u8 filetype) } #if VERSION >= VERSION_NTSC_1_0 -void func0f110d90(s32 device) +void filelistInvalidatePak(s32 device) { - var800a2330[device] = -1; + g_FilelistKnownPlugCounts[device] = -1; } #endif @@ -103,36 +103,36 @@ void filelistsTick(void) u32 updateall; u32 update; s32 i; - static bool var80075bf4 = false; + static bool doneinit = false; - if (!var80075bf4) { - for (i = 0; i < ARRAYCOUNT(var800a2330); i++) { - var800a2330[i] = -1; + if (!doneinit) { + for (i = 0; i < ARRAYCOUNT(g_FilelistKnownPlugCounts); i++) { + g_FilelistKnownPlugCounts[i] = -1; } - var80075bf4 = true; + doneinit = true; } #if VERSION >= VERSION_NTSC_1_0 - for (i = 0, updateall = false; i < ARRAYCOUNT(var800a2330); i++) { - if (pak0f1167d8(i) && var800a2330[i] != pakGetUnk264(i)) { + for (i = 0, updateall = false; i < ARRAYCOUNT(g_FilelistKnownPlugCounts); i++) { + if (pak0f1167d8(i) && pakGetPlugCount(i) != g_FilelistKnownPlugCounts[i]) { updateall = true; - var800a2330[i] = pakGetUnk264(i); + g_FilelistKnownPlugCounts[i] = pakGetPlugCount(i); } } #else - for (i = 0, updateall = false; i < ARRAYCOUNT(var800a2330); i++) { - s32 tmp = pakGetUnk264(i); + for (i = 0, updateall = false; i < ARRAYCOUNT(g_FilelistKnownPlugCounts); i++) { + s32 plugcount = pakGetPlugCount(i); pak0f11698c(i); if (pak0f1167d8(i)) { - tmp = 0; + plugcount = 0; } - if (var800a2330[i] != tmp) { + if (g_FilelistKnownPlugCounts[i] != plugcount) { updateall = true; - var800a2330[i] = tmp; + g_FilelistKnownPlugCounts[i] = plugcount; } } #endif diff --git a/src/game/filemgr.c b/src/game/filemgr.c index 43566b180..d39f51c5c 100644 --- a/src/game/filemgr.c +++ b/src/game/filemgr.c @@ -2187,7 +2187,7 @@ MenuItemHandlerResult pakDeleteGameNoteMenuHandler(s32 operation, struct menuite g_Menus[g_MpPlayerNum].fm.device1 = g_Menus[g_MpPlayerNum].fm.device; - if (result) { + if (result != PAK_ERR1_OK) { filemgrPushErrorDialog(FILEERROR_DELETENOTEFAILED); } } @@ -2314,14 +2314,14 @@ MenuDialogHandlerResult pakGameNotesMenuDialog(s32 operation, struct menudialogd if (operation == MENUOP_TICK) { if (g_Menus[g_MpPlayerNum].curdialog && g_Menus[g_MpPlayerNum].curdialog->definition == dialogdef) { - s32 value = pak0f1168c4(g_Menus[g_MpPlayerNum].fm.device, &g_EditingPak); + PakErr1 ret = pak0f1168c4(g_Menus[g_MpPlayerNum].fm.device, &g_EditingPak); - if (value) { + if (ret != PAK_ERR1_OK) { menuCloseDialog(); g_EditingPak = NULL; g_Menus[g_MpPlayerNum].fm.device1 = g_Menus[g_MpPlayerNum].fm.device; - if (value == 1) { + if (ret == PAK_ERR1_NOPAK) { filemgrPushErrorDialog(FILEERROR_PAKREMOVED); } @@ -2403,7 +2403,7 @@ char *pakMenuTextEditingPakName(struct menuitem *item) MenuItemHandlerResult pakSelectionMenuHandler(s32 operation, struct menuitem *item, union handlerdata *data) { if (operation == MENUOP_CHECKDISABLED) { - if (!pakIsMemoryPak((s8)item->param)) { + if (!mempakIsOkay((s8)item->param)) { return true; } } @@ -2426,7 +2426,7 @@ MenuDialogHandlerResult pakChoosePakMenuDialog(s32 operation, struct menudialogd #if VERSION >= VERSION_NTSC_1_0 switch (operation) { case MENUOP_OPEN: - joy0001398c(3); + joySetPfsPollInterval(3); g_Menus[g_MpPlayerNum].fm.unke24 = 0; break; case MENUOP_TICK: @@ -2438,20 +2438,20 @@ MenuDialogHandlerResult pakChoosePakMenuDialog(s32 operation, struct menudialogd for (i = 0; i < MAX_PLAYERS; i++) { if (g_Menus[g_MpPlayerNum].fm.unke24 & (1 << i)) { - g_Vars.unk0004e4 &= 0xfff0; - g_Vars.unk0004e4 |= 0x0008; - g_Vars.unk0004e4 |= 1 << (i + 8); + g_Vars.pakstocheck &= 0xfff0; + g_Vars.pakstocheck |= 0x0008; + g_Vars.pakstocheck |= 1 << (i + 8); } } } - joy000139c8(); + joySetDefaultPfsPollInterval(); break; } #else switch (operation) { case MENUOP_OPEN: - joy0001398c(3); - joy0001398c(-1); + joySetPfsPollInterval(3); + joySetPfsPollInterval(-1); g_Menus[g_MpPlayerNum].fm.unke24 = 0; break; case MENUOP_TICK: @@ -2467,7 +2467,7 @@ MenuDialogHandlerResult pakChoosePakMenuDialog(s32 operation, struct menudialogd } } } - joy000139c8(); + joySetDefaultPfsPollInterval(); pak0f1189d0(); break; } diff --git a/src/game/gamefile.c b/src/game/gamefile.c index 5061e77d9..992cf95ad 100644 --- a/src/game/gamefile.c +++ b/src/game/gamefile.c @@ -166,7 +166,7 @@ void gamefileLoadDefaults(struct gamefile *file) pakSetBitflag(GAMEFILEFLAG_P1_FORWARDPITCH, file->flags, false); pakSetBitflag(GAMEFILEFLAG_P1_AUTOAIM, file->flags, true); - pakSetBitflag(GAMEFILEFLAG_P1_AIMCONTROL, file->flags, AIMCONTROL_HOLD); + pakSetBitflag(GAMEFILEFLAG_P1_AIMCONTROL, file->flags, false); pakSetBitflag(GAMEFILEFLAG_P1_SIGHTONSCREEN, file->flags, true); pakSetBitflag(GAMEFILEFLAG_P1_LOOKAHEAD, file->flags, true); pakSetBitflag(GAMEFILEFLAG_P1_AMMOONSCREEN, file->flags, true); @@ -180,7 +180,7 @@ void gamefileLoadDefaults(struct gamefile *file) pakSetBitflag(GAMEFILEFLAG_P2_FORWARDPITCH, file->flags, false); pakSetBitflag(GAMEFILEFLAG_P2_AUTOAIM, file->flags, true); - pakSetBitflag(GAMEFILEFLAG_P2_AIMCONTROL, file->flags, AIMCONTROL_HOLD); + pakSetBitflag(GAMEFILEFLAG_P2_AIMCONTROL, file->flags, false); pakSetBitflag(GAMEFILEFLAG_P2_SIGHTONSCREEN, file->flags, true); pakSetBitflag(GAMEFILEFLAG_P2_LOOKAHEAD, file->flags, true); pakSetBitflag(GAMEFILEFLAG_P2_AMMOONSCREEN, file->flags, true); @@ -198,8 +198,8 @@ void gamefileLoadDefaults(struct gamefile *file) pakSetBitflag(GAMEFILEFLAG_P2_SHOWMISSIONTIME, file->flags, false); pakSetBitflag(GAMEFILEFLAG_P2_PAINTBALL, file->flags, false); - pakSetBitflag(GAMEFILEFLAG_SCREENSPLIT, file->flags, SCREENSPLIT_HORIZONTAL); - pakSetBitflag(GAMEFILEFLAG_SCREENRATIO, file->flags, SCREENRATIO_NORMAL); + pakSetBitflag(GAMEFILEFLAG_SCREENSPLIT, file->flags, false); + pakSetBitflag(GAMEFILEFLAG_SCREENRATIO, file->flags, false); pakSetBitflag(GAMEFILEFLAG_SCREENSIZE_CINEMA, file->flags, false); pakSetBitflag(GAMEFILEFLAG_SCREENSIZE_WIDE, file->flags, false); @@ -215,7 +215,7 @@ void gamefileLoadDefaults(struct gamefile *file) pakSetBitflag(GAMEFILEFLAG_COOPRADARON, file->flags, true); pakSetBitflag(GAMEFILEFLAG_COOPFRIENDLYFIRE, file->flags, true); pakSetBitflag(GAMEFILEFLAG_ANTIRADARON, file->flags, true); - pakSetBitflag(GAMEFILEFLAG_ANTIPLAYERNUM, file->flags, 1); + pakSetBitflag(GAMEFILEFLAG_ANTIPLAYERNUM, file->flags, true); #if VERSION >= VERSION_PAL_BETA pakSetBitflag(GAMEFILEFLAG_LANGBIT1, g_GameFile.flags, ((g_Vars.language & 0x01) == 0x01)); diff --git a/src/game/lv.c b/src/game/lv.c index 57a3feb6f..6d5516152 100644 --- a/src/game/lv.c +++ b/src/game/lv.c @@ -241,7 +241,7 @@ void lvReset(s32 stagenum) var80084010 = 0; #if VERSION >= VERSION_NTSC_1_0 - joy00013900(); + joyLockCyclicPolling(); g_Vars.joydisableframestogo = 10; #else @@ -252,8 +252,8 @@ void lvReset(s32 stagenum) } #endif - g_Vars.paksconnected2 = 0; - g_Vars.paksconnected = 0; + g_Vars.paksneededforgame = 0; + g_Vars.paksneededformenu = 0; g_Vars.stagenum = stagenum; cheatsReset(); @@ -1997,7 +1997,7 @@ void lvTick(void) lvCheckPauseStateChanged(); #if VERSION >= VERSION_NTSC_1_0 - if (g_Vars.unk0004e4) { + if (g_Vars.pakstocheck) { paksTick(); } #endif @@ -2006,7 +2006,7 @@ void lvTick(void) g_Vars.joydisableframestogo--; } else if (g_Vars.joydisableframestogo == 0) { #if VERSION >= VERSION_NTSC_1_0 - joy00013938(); + joyUnlockCyclicPolling(); #else if (!joyIsCyclicPollingEnabled()) { joyEnableCyclicPolling(3278, "lv.c"); @@ -2017,9 +2017,9 @@ void lvTick(void) || g_Vars.stagenum == STAGE_BOOTPAKMENU || g_Vars.stagenum == STAGE_CREDITS || g_Vars.stagenum == STAGE_4MBMENU) { - g_Vars.paksconnected2 = 0; + g_Vars.paksneededforgame = 0; } else { - g_Vars.paksconnected2 = 31; + g_Vars.paksneededforgame = 0x1f; pakEnableRumbleForAllPlayers(); } diff --git a/src/game/menu.c b/src/game/menu.c index e01eb8403..dda89d9a8 100644 --- a/src/game/menu.c +++ b/src/game/menu.c @@ -5623,7 +5623,7 @@ MenuDialogHandlerResult menudialog000fcd48(s32 operation, struct menudialogdef * if (operation == MENUOP_TICK) { if (g_Menus[g_MpPlayerNum].curdialog && g_Menus[g_MpPlayerNum].curdialog->definition == dialogdef - && joy000155b4(g_Menus[g_MpPlayerNum].fm.device3) == 0) { + && joyGetPakState(g_Menus[g_MpPlayerNum].fm.device3) == PAKSTATE_NOPAK) { func0f0f3704(&g_PakRemovedMenuDialog); } } @@ -5655,12 +5655,12 @@ MenuItemHandlerResult menuhandlerRepairPak(s32 operation, struct menuitem *item, return 0; } -void func0f0fce8c(struct menudialogdef *dialogdef, s32 playernum, s32 arg2) +void menuPushPakDialogForPlayer(struct menudialogdef *dialogdef, s32 playernum, s32 paknum) { s32 prevplayernum = g_MpPlayerNum; g_MpPlayerNum = playernum; - g_Menus[g_MpPlayerNum].fm.device3 = arg2; + g_Menus[g_MpPlayerNum].fm.device3 = paknum; if (g_Menus[g_MpPlayerNum].curdialog == NULL) { if (PLAYERCOUNT() == 1) { @@ -5880,11 +5880,11 @@ MenuItemHandlerResult menuhandlerRetrySavePak(s32 operation, struct menuitem *it menuPopDialog(); #if VERSION >= VERSION_NTSC_1_0 - g_Vars.unk0004e4 &= 0xfff0; - g_Vars.unk0004e4 |= 8; - g_Vars.unk0004e4 |= 1 << ((u8)g_Menus[g_MpPlayerNum].fm.device3 + 8); + g_Vars.pakstocheck &= 0xfff0; + g_Vars.pakstocheck |= 0x0008; + g_Vars.pakstocheck |= 1 << ((u8)g_Menus[g_MpPlayerNum].fm.device3 + 8); #else - pak0f1169c8(g_Menus[g_MpPlayerNum].fm.device3, 0); + pak0f1169c8(g_Menus[g_MpPlayerNum].fm.device3, false); #endif } @@ -5904,18 +5904,18 @@ MenuItemHandlerResult menuhandlerWarnRepairPak(s32 operation, struct menuitem *i return 0; } -u32 func0f0fd118(u32 playernum) +s32 menuPakNumToPlayerNum(s32 paknum) { u32 result = 0; if (g_Vars.normmplayerisrunning) { - if (g_MpSetup.chrslots & (1 << playernum)) { - result = playernum; + if (g_MpSetup.chrslots & (1 << paknum)) { + result = paknum; } } else { if ((g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) && PLAYERCOUNT() >= 2 - && playernum == 1) { + && paknum == 1) { result = 1; } } @@ -5923,9 +5923,9 @@ u32 func0f0fd118(u32 playernum) return result; } -bool func0f0fd1f4(s32 arg0, s32 arg1) +bool menuIsReadyForPakError(s32 paknum, s32 pakerrordialog) { - s32 playernum = func0f0fd118(arg0); + s32 playernum = menuPakNumToPlayerNum(paknum); bool result = true; if (g_Vars.lvframenum < 20) { @@ -5950,8 +5950,7 @@ bool func0f0fd1f4(s32 arg0, s32 arg1) || g_Menus[playernum].curdialog->definition == &g_PakAttemptRepairMenuDialog || g_Menus[playernum].curdialog->definition == &g_PakRemovedMenuDialog || g_Menus[playernum].curdialog->definition == &g_PakRepairSuccessMenuDialog - || g_Menus[playernum].curdialog->definition == &g_PakRepairFailedMenuDialog - ) { + || g_Menus[playernum].curdialog->definition == &g_PakRepairFailedMenuDialog) { result = false; } } else if (g_MenuData.nextbg != 255 || g_MenuData.bg || g_MenuData.unk5d4) { @@ -5961,21 +5960,21 @@ bool func0f0fd1f4(s32 arg0, s32 arg1) return result; } -void func0f0fd320(s32 arg0, s32 arg1) +void menuPushPakErrorDialog(s32 paknum, s32 pakerrordialog) { s32 prevplayernum = g_MpPlayerNum; - s32 playernum = func0f0fd118(arg0); + s32 playernum = menuPakNumToPlayerNum(paknum); bool found; s32 i; g_MpPlayerNum = playernum; - switch (arg1) { - case 1: - case 2: - func0f0fce8c(&g_PakDamagedMenuDialog, playernum, arg0); + switch (pakerrordialog) { + case PAKERRORDIALOG_CORRUPT: + case PAKERRORDIALOG_DEVICEERROR: + menuPushPakDialogForPlayer(&g_PakDamagedMenuDialog, playernum, paknum); break; - case 0: + case PAKERRORDIALOG_FULL: found = false; for (i = 0; i < g_Menus[g_MpPlayerNum].depth; i++) { @@ -5986,15 +5985,15 @@ void func0f0fd320(s32 arg0, s32 arg1) } if (!found) { - func0f0fce8c(&g_PakFullMenuDialog, playernum, arg0); + menuPushPakDialogForPlayer(&g_PakFullMenuDialog, playernum, paknum); } break; #if VERSION >= VERSION_NTSC_1_0 - case 3: - func0f0fce8c(&g_PakCannotReadGameBoyMenuDialog, playernum, arg0); + case PAKERRORDIALOG_GB_UNREADABLE: + menuPushPakDialogForPlayer(&g_PakCannotReadGameBoyMenuDialog, playernum, paknum); break; - case 4: - func0f0fce8c(&g_PakDataLostMenuDialog, playernum, arg0); + case PAKERRORDIALOG_DATALOST: + menuPushPakDialogForPlayer(&g_PakDataLostMenuDialog, playernum, paknum); break; #endif } diff --git a/src/game/menustop.c b/src/game/menustop.c index d0100308b..a58773847 100644 --- a/src/game/menustop.c +++ b/src/game/menustop.c @@ -32,7 +32,7 @@ void menuStop(void) if (var80062944) { var80062944 = 0; var80062948 = 0; - joy000139c8(); + joySetDefaultPfsPollInterval(); func0f110bf8(); } } diff --git a/src/game/menutick.c b/src/game/menutick.c index 758bb5879..f1e713d35 100644 --- a/src/game/menutick.c +++ b/src/game/menutick.c @@ -697,7 +697,7 @@ void menuTick(void) } } - g_Vars.paksconnected = 0; + g_Vars.paksneededformenu = 0; for (i = 0; i < PLAYERCOUNT(); i++) { s32 mpindex = -1; @@ -731,7 +731,7 @@ void menuTick(void) case MENUROOT_4MBMAINMENU: case MENUROOT_TRAINING: if (g_Menus[mpindex].curdialog) { - g_Vars.paksconnected = 0x1f; + g_Vars.paksneededformenu = 0x1f; } break; } diff --git a/src/game/pak.c b/src/game/pak.c index 0361f980d..88e461dc4 100644 --- a/src/game/pak.c +++ b/src/game/pak.c @@ -214,6 +214,16 @@ #define JOYARGS(line) line, "pak.c" #endif +#if VERSION >= VERSION_NTSC_1_0 +#define SETBANNER(banner) if (var80075d14) { menuSetBanner(banner, true); } +#else +#define SETBANNER(banner) menuSetBanner(banner, true) +#endif + +#define PAKFEATURE_MEMORY 0x01 +#define PAKFEATURE_RUMBLE 0x02 +#define PAKFEATURE_GAMEBOY 0x04 + const char g_N64FontCodeMap[] = "\0************** 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ!\"#'*+,-./:=?@"; const char var7f1b3ad4[] = "Pak %d -> Pak_UpdateAndGetPakNoteInfo - ERROR - ekPakErrorPakFatal\n"; const char var7f1b3b18[] = "Pak %d -> Pak_UpdateAndGetPakNoteInfo - ERROR - ekPakErrorNoPakPresent\n"; @@ -313,7 +323,7 @@ char g_PakNoteGameName[] = { char g_PakNoteExtName[] = {0, 0, 0, 0}; u32 var80075d0c = 0x00000000; -u8 var80075d10 = 0; +u8 g_PaksPlugged = 0; #if VERSION >= VERSION_NTSC_1_0 bool var80075d14 = true; @@ -363,15 +373,15 @@ u32 pakGenerateSerial(s8 device) } #endif -bool pakIsMemoryPak(s8 device) +bool mempakIsOkay(s8 device) { if (g_Paks[device].type == PAKTYPE_MEMORY) { - switch (g_Paks[device].unk010) { - case PAK010_14: - case PAK010_15: - case PAK010_19: - case PAK010_20: - case PAK010_22: + switch (g_Paks[device].state) { + case PAKSTATE_MEM_ENTER_DEVICEERROR: + case PAKSTATE_MEM_ENTER_CORRUPT: + case PAKSTATE_MEM_DEVICEERROR: + case PAKSTATE_MEM_CORRUPT: + case PAKSTATE_22: return false; } @@ -406,12 +416,12 @@ bool pakDeleteFile(s8 device, s32 fileid) return _pakDeleteFile(device, fileid); } -s32 pakDeleteGameNote(s8 device, u16 company_code, u32 game_code, char *game_name, char *ext_name) +PakErr1 pakDeleteGameNote(s8 device, u16 company_code, u32 game_code, char *game_name, char *ext_name) { return _pakDeleteGameNote(device, company_code, game_code, game_name, ext_name); } -s32 pak0f1168c4(s8 device, struct pakdata **arg1) +PakErr1 pak0f1168c4(s8 device, struct pakdata **arg1) { return pak0f116df0(device, arg1); } @@ -445,7 +455,7 @@ void pak0f11698c(s8 device) void pak0f116994(void) { if (g_Vars.stagenum == STAGE_BOOTPAKMENU) { - g_Vars.unk0004e4 = 0xf8; + g_Vars.pakstocheck = 0xf8; } } #endif @@ -457,68 +467,68 @@ void pak0f1169bc(u32 arg0, u32 arg1) } #endif -void pak0f1169c8(s8 device, s32 arg1) +void pak0f1169c8(s8 device, bool tick) { #if VERSION >= VERSION_NTSC_1_0 - u8 prevvalue = g_Vars.paksconnected; + u8 prevvalue = g_Vars.paksneededformenu; - g_Vars.paksconnected = 0x1f; + g_Vars.paksneededformenu = 0x1f; - if ((g_Vars.paksconnected2 | g_Vars.paksconnected) & (1 << device)) { - var80075d10 &= ~(1 << device); + if ((g_Vars.paksneededforgame | g_Vars.paksneededformenu) & (1 << device)) { + g_PaksPlugged &= ~(1 << device); - pak0f11ca30(); - pak0f11ca30(); + pakCheckPlugged(); + pakCheckPlugged(); - if (arg1) { - var8005eedc = false; + if (tick) { + g_JoyPfsPollMasterEnabled = false; - pak0f11df94(device); - pak0f11df94(device); - pak0f11df94(device); - pak0f11df94(device); - pak0f11df94(device); - pak0f11df94(device); - pak0f11df94(device); + pakTickState(device); + pakTickState(device); + pakTickState(device); + pakTickState(device); + pakTickState(device); + pakTickState(device); + pakTickState(device); - var8005eedc = true; + g_JoyPfsPollMasterEnabled = true; } } - g_Vars.paksconnected = prevvalue; + g_Vars.paksneededformenu = prevvalue; #else - if ((g_Vars.paksconnected2 | g_Vars.paksconnected) & (1 << device)) { - var80075d10 &= ~(1 << device); + if ((g_Vars.paksneededforgame | g_Vars.paksneededformenu) & (1 << device)) { + g_PaksPlugged &= ~(1 << device); - pak0f11ca30(); + pakCheckPlugged(); - if (arg1) { - pak0f11df94(device); - pak0f11df94(device); - pak0f11df94(device); - pak0f11df94(device); - pak0f11df94(device); - pak0f11df94(device); - pak0f11df94(device); + if (tick) { + pakTickState(device); + pakTickState(device); + pakTickState(device); + pakTickState(device); + pakTickState(device); + pakTickState(device); + pakTickState(device); } } #endif } -bool pak0f116aec(s8 device) +bool mempakIsReady(s8 device) { - if (g_Paks[device].unk010 == PAK010_11 && g_Paks[device].type == PAKTYPE_MEMORY) { + if (g_Paks[device].state == PAKSTATE_READY && g_Paks[device].type == PAKTYPE_MEMORY) { return true; } return false; } -bool pak0f116b5c(s8 device) +bool mempakIsReadyOrFull(s8 device) { - if ((g_Paks[device].unk010 == PAK010_11 - || g_Paks[device].unk010 == PAK010_16 - || g_Paks[device].unk010 == PAK010_21) + if ((g_Paks[device].state == PAKSTATE_READY + || g_Paks[device].state == PAKSTATE_MEM_ENTER_FULL + || g_Paks[device].state == PAKSTATE_MEM_FULL) && g_Paks[device].type == PAKTYPE_MEMORY) { return true; } @@ -532,7 +542,7 @@ void pak0f116bdc(s8 device, u8 *arg1, u8 *arg2) *arg2 = g_Paks[device].unk2bb; } -void pak0f116c2c(s8 index) +void pakSetTemporarilyPlugged(s8 index) { joySetPfsTemporarilyPlugged(index); } @@ -559,45 +569,45 @@ ubool pak0f116d4c(s8 device) return g_Paks[device].unk2b8_05 && !g_Paks[device].isgbcamera; } -void pakSetUnk010(s8 device, s32 value) +void pakSetState(s8 device, s32 state) { - g_Paks[device].unk010 = value; + g_Paks[device].state = state; } -s32 pak0f116df0(s8 device, struct pakdata **pakdata) +PakErr1 pak0f116df0(s8 device, struct pakdata **pakdata) { *pakdata = NULL; - if (pak0f116b5c(device)) { + if (mempakIsReadyOrFull(device)) { if (pakQueryTotalUsage(device)) { *pakdata = &g_Paks[device].pakdata; - return 0; + return PAK_ERR1_OK; } - return 2; + return PAK_ERR1_NEWPAK; } - return 1; + return PAK_ERR1_NOPAK; } -s32 _pakDeleteGameNote(s8 device, u16 company_code, u32 game_code, char *game_name, char *ext_name) +PakErr1 _pakDeleteGameNote(s8 device, u16 company_code, u32 game_code, char *game_name, char *ext_name) { s32 result; - if (pak0f116b5c(device)) { + if (mempakIsReadyOrFull(device)) { joyDisableCyclicPolling(JOYARGS(738)); result = pakDeleteGameNote3(PFS(device), company_code, game_code, game_name, ext_name); joyEnableCyclicPolling(JOYARGS(740)); if (pakHandleResult(result, device, true, LINE_825)) { g_Paks[device].unk2b8_02 = 1; - return 0; + return PAK_ERR1_OK; } - return 2; + return PAK_ERR1_NEWPAK; } - return 1; + return PAK_ERR1_NOPAK; } #if VERSION >= VERSION_NTSC_1_0 @@ -657,9 +667,9 @@ s32 _pakDeleteFile(s8 device, s32 fileid) } #endif -s32 pakGetUnk264(s8 device) +s32 pakGetPlugCount(s8 device) { - return g_Paks[device].unk264; + return g_Paks[device].plugcount; } u32 pakGetMaxFileSize(s8 device) @@ -1078,7 +1088,7 @@ PakErr1 _pakReadWriteBlock(OSPfs *pfs, s32 file_no, u8 flag, u32 address, u32 le u32 newaddress; #if VERSION >= VERSION_NTSC_1_0 - joyCheckPfs(2); + joyPollPfs(2); #endif if (pfs) { @@ -1441,7 +1451,7 @@ bool pakResizeNote(s8 device, s32 numpages) void pak0f1184d8(s8 device, u32 *arg1, bool *arg2) { if (device != SAVEDEVICE_GAMEPAK) { - if (g_Paks[device].type != PAKTYPE_MEMORY || g_Paks[device].unk010 != PAK010_11) { + if (!(g_Paks[device].type == PAKTYPE_MEMORY && g_Paks[device].state == PAKSTATE_READY)) { pak0f1185e0(device, g_Paks[SAVEDEVICE_GAMEPAK].unk2bd & 0x0f, 1); device = SAVEDEVICE_GAMEPAK; } @@ -1574,7 +1584,7 @@ u32 pak0f118674(s8 device, u32 filetype, s32 *outfileid) return 4; } - g_Paks[device].unk010 = PAK010_16; + g_Paks[device].state = PAKSTATE_MEM_ENTER_FULL; g_Paks[device].type = PAKTYPE_MEMORY; return 4; @@ -1588,53 +1598,53 @@ void pak0f1189d0(void) void paksInit(void) { #if VERSION >= VERSION_NTSC_1_0 - u8 prevvalue = g_Vars.paksconnected; + u8 prevvalue = g_Vars.paksneededformenu; s8 i; - g_Vars.unk0004e4 = 0; + g_Vars.pakstocheck = 0; for (i = 0; i < ARRAYCOUNT(g_Paks); i++) { - pakInit(i); + pakSetDefaults(i); } for (i = 0; i < ARRAYCOUNT(g_Paks); i++) { #if VERSION >= VERSION_JPN_FINAL - pak0f11a32c(i, 7, 2054, "pak/pak.c"); + pakSetFeatures(i, PAKFEATURE_MEMORY | PAKFEATURE_RUMBLE | PAKFEATURE_GAMEBOY, 2054, "pak/pak.c"); #elif VERSION >= VERSION_PAL_BETA - pak0f11a32c(i, 7, 2049, "pak.c"); + pakSetFeatures(i, PAKFEATURE_MEMORY | PAKFEATURE_RUMBLE | PAKFEATURE_GAMEBOY, 2049, "pak.c"); #elif VERSION >= VERSION_NTSC_FINAL - pak0f11a32c(i, 7, 2049, "pak/pak.c"); + pakSetFeatures(i, PAKFEATURE_MEMORY | PAKFEATURE_RUMBLE | PAKFEATURE_GAMEBOY, 2049, "pak/pak.c"); #else - pak0f11a32c(i, 7, 2016, "pak.c"); + pakSetFeatures(i, PAKFEATURE_MEMORY | PAKFEATURE_RUMBLE | PAKFEATURE_GAMEBOY, 2016, "pak.c"); #endif } pakProbeEeprom(); joyRecordPfsState(0x10); - g_Vars.paksconnected = 0x10; + g_Vars.paksneededformenu = 0x10; - pak0f1169c8(SAVEDEVICE_GAMEPAK, 1); + pak0f1169c8(SAVEDEVICE_GAMEPAK, true); bossfileLoadFull(); gamefileLoadDefaults(&g_GameFile); gamefileApplyOptions(&g_GameFile); g_GameFileGuid.deviceserial = 0; - g_Vars.unk0004e4 = 0xf5; - g_Vars.paksconnected = prevvalue; + g_Vars.pakstocheck = 0xf5; + g_Vars.paksneededformenu = prevvalue; #else s8 i; s32 j; for (i = 0; i < ARRAYCOUNT(g_Paks); i++) { - pakInit(i); + pakSetDefaults(i); } - g_Vars.paksconnected2 = 0x1f; + g_Vars.paksneededforgame = 0x1f; for (i = 0; i < ARRAYCOUNT(g_Paks); i++) { - pak0f11a32c(i, 7, 1929, "pak.c"); + pakSetFeatures(i, PAKFEATURE_MEMORY | PAKFEATURE_RUMBLE | PAKFEATURE_GAMEBOY, 1929, "pak.c"); } pakProbeEeprom(); @@ -1665,7 +1675,7 @@ void paksInit(void) gamefileApplyOptions(&g_GameFile); g_GameFileGuid.deviceserial = 0; - g_Vars.paksconnected2 = 0; + g_Vars.paksneededforgame = 0; #endif } @@ -1923,18 +1933,18 @@ u32 pak0f119298(s8 device) return 1; } - switch (g_Paks[device].unk010) { - case PAK010_11: + switch (g_Paks[device].state) { + case PAKSTATE_READY: return 0; - case PAK010_17: + case PAKSTATE_17: return 14; - case PAK010_18: + case PAKSTATE_18: return 4; - case PAK010_03: - case PAK010_04: - case PAK010_05: - case PAK010_06: - case PAK010_07: + case PAKSTATE_MEM_DISPATCH: + case PAKSTATE_MEM_PRE_PREPARE: + case PAKSTATE_MEM_PREPARE: + case PAKSTATE_MEM_POST_PREPARE: + case PAKSTATE_07: return 13; } @@ -2750,17 +2760,17 @@ void paksReset(void) // empty } -s32 pakGetUnk014(s8 device) +s32 pakGetFeatures(s8 device) { - return g_Paks[device].unk014; + return g_Paks[device].features; } -void pak0f11a32c(s8 device, u8 arg1, u32 line, char *file) +void pakSetFeatures(s8 device, u8 features, u32 line, char *file) { - if (g_Paks[device].unk014 == 0) { - g_Paks[device].unk014 = arg1; + if (g_Paks[device].features == 0) { + g_Paks[device].features = features; - if ((g_Paks[device].unk014 & 1) && g_Paks[device].headercache == NULL) { + if ((g_Paks[device].features & PAKFEATURE_MEMORY) && g_Paks[device].headercache == NULL) { g_Paks[device].headercachecount = 0; g_Paks[device].headercache = mempAlloc(align32(sizeof(struct pakheadercache) * MAX_HEADERCACHE_ENTRIES), MEMPOOL_PERMANENT); @@ -2771,15 +2781,13 @@ void pak0f11a32c(s8 device, u8 arg1, u32 line, char *file) } } -void pak0f11a3dc(s8 device, u32 arg1, u32 arg2) +void pakRemoveAllFeatures(s8 device, u32 arg1, u32 arg2) { - if (g_Paks[device].unk014) { - g_Paks[device].unk014 = 0; + if (g_Paks[device].features) { + g_Paks[device].features = 0; } - if (g_Paks[device].unk014) { - // empty - } + if (g_Paks[device].features); } const char var7f1b4294[] = "Pak %d - Pak_StartOne called from line %d in %s -> Flags = %0x\n"; @@ -2814,25 +2822,25 @@ const char var7f1b43f8[] = "Pak -> Pak_MakeOne - Id=%d is finished\n"; const char var7f1b43f8[] = "Pak -> Pak_MakeOne - Id=%d is finished"; #endif -void pakInit(s8 device) +void pakSetDefaults(s8 device) { g_Paks[device].unk274 = 3; - g_Paks[device].unk014 = 0; + g_Paks[device].features = 0; g_Paks[device].type = PAKTYPE_NONE; - g_Paks[device].unk008 = 1; + g_Paks[device].unk008 = PAK008_01; g_Paks[device].rumblestate = RUMBLESTATE_1; - g_Paks[device].unk00c = 3; - g_Paks[device].unk010 = PAK010_00; + g_Paks[device].unk00c = PAK00C_03; + g_Paks[device].state = PAKSTATE_NOPAK; g_Paks[device].pdnoteindex = -1; g_Paks[device].unk2b8_01 = 0; g_Paks[device].unk2b8_05 = 0; g_Paks[device].isgbcamera = 0; g_Paks[device].unk2b8_02 = 0; g_Paks[device].unk2bd = 128; - g_Paks[device].unk264 = 0; + g_Paks[device].plugcount = 0; g_Paks[device].unk2b8_06 = 0; #if VERSION >= VERSION_NTSC_1_0 - g_Paks[device].unk2b8_07 = 0; + g_Paks[device].showdatalost = false; #endif g_Paks[device].headercache = NULL; g_Paks[device].unk2c4 = NULL; @@ -2889,7 +2897,7 @@ bool pakQueryTotalUsage(s8 device) return false; } - for (i = 0; i < 16; i++) { + for (i = 0; i < ARRAYCOUNT(noteerrors); i++) { noteerrors[i] = pakQueryNoteState(PFS(device), i, &pak->pakdata.notes[i]); if (noteerrors[i] != PAK_ERR1_OK) { @@ -2899,7 +2907,7 @@ bool pakQueryTotalUsage(s8 device) } } - for (i = 0, pak->pakdata.pagesused = 0; i < 16; i++) { + for (i = 0, pak->pakdata.pagesused = 0; i < ARRAYCOUNT(noteerrors); i++) { if (noteerrors[i] == PAK_ERR1_OK) { pak->pakdata.pagesused += (pak->pakdata.notes[i].file_size + 255) >> 8; } @@ -2954,7 +2962,7 @@ bool pak0f1147b8nb(s8 device) return false; } - g_Paks[device].unk010 = 3; + g_Paks[device].state = PAKSTATE_MEM_DISPATCH; if (device == SAVEDEVICE_GAMEPAK) { pakExecuteDebugOperations(); @@ -3008,7 +3016,7 @@ bool mempakPrepare(s8 device) pakQueryTotalUsage(device); #if VERSION >= VERSION_NTSC_1_0 - if (g_Paks[device].unk010 == PAK010_01) { + if (g_Paks[device].state == PAKSTATE_UNPLUGGING) { return false; } #endif @@ -3045,11 +3053,11 @@ bool mempakPrepare(s8 device) pakQueryPdSize(device); #if VERSION >= VERSION_NTSC_1_0 - g_Paks[device].unk2b8_07 = false; + g_Paks[device].showdatalost = false; #endif g_Paks[device].headercachecount = 0; - g_Paks[device].unk010 = PAK010_11; + g_Paks[device].state = PAKSTATE_READY; if (device && device && device); @@ -3077,7 +3085,7 @@ bool mempakPrepare(s8 device) } if (device != SAVEDEVICE_GAMEPAK) { - g_Paks[device].unk2b8_07 = true; + g_Paks[device].showdatalost = true; } } } @@ -3089,18 +3097,18 @@ bool mempakPrepare(s8 device) g_Paks[device].maxfileid = maxfileid; if (pakGetFileIdsByType(device, PAKFILETYPE_TERMINATOR, fileids) == 0 && pakCreateInitialFiles(device)) { - g_Paks[device].unk010 = (device == SAVEDEVICE_GAMEPAK) ? PAK010_11 : PAK010_06; + g_Paks[device].state = (device == SAVEDEVICE_GAMEPAK) ? PAKSTATE_READY : PAKSTATE_MEM_POST_PREPARE; - func0f110d90(device); + filelistInvalidatePak(device); return true; } } } - g_Paks[device].unk010 = PAK010_22; + g_Paks[device].state = PAKSTATE_22; - func0f110d90(device); + filelistInvalidatePak(device); return false; #else @@ -3121,7 +3129,7 @@ bool mempakPrepare(s8 device) pakGetFileIdsByType(device, PAKFILETYPE_TERMINATOR, fileids); pakCreateInitialFiles(device); - g_Paks[device].unk010 = (device == SAVEDEVICE_GAMEPAK) ? PAK010_11 : PAK010_06; + g_Paks[device].state = (device == SAVEDEVICE_GAMEPAK) ? PAKSTATE_READY : PAKSTATE_MEM_POST_PREPARE; return true; #endif @@ -3145,7 +3153,7 @@ bool pakProbe(s8 device) ret = pakInitPak(&g_PiMesgQueue, PFS(device), device, NULL); if (pakHandleResult(ret, device, true, LINE_3829)) { - g_Paks[device].unk010 = PAK010_03; + g_Paks[device].state = PAKSTATE_MEM_DISPATCH; if (device == SAVEDEVICE_GAMEPAK) { pakExecuteDebugOperations(); @@ -3171,9 +3179,9 @@ bool pakProbe(s8 device) if (pakHandleResult(ret, device, false, LINE_3865)) { g_Paks[device].type = PAKTYPE_RUMBLE; - g_Paks[device].unk010 = PAK010_11; + g_Paks[device].state = PAKSTATE_READY; g_Paks[device].rumblestate = RUMBLESTATE_1; - g_Paks[device].unk264++; + g_Paks[device].plugcount++; plugged = true; done = true; @@ -3189,12 +3197,12 @@ bool pakProbe(s8 device) if (pakHandleResult(ret, device, false, LINE_3889)) { if (IS4MB()) { g_Paks[device].type = PAKTYPE_NONE; - g_Paks[device].unk010 = PAK010_22; + g_Paks[device].state = PAKSTATE_22; } else { g_Paks[device].type = PAKTYPE_GAMEBOY; - g_Paks[device].unk010 = PAK010_08; + g_Paks[device].state = PAKSTATE_GB_PRE_PREPARE; g_Paks[device].unk2b8_01 = false; - g_Paks[device].unk264++; + g_Paks[device].plugcount++; } plugged = true; @@ -3254,21 +3262,21 @@ void pak0f114dd4nb(s8 device) pak->pdnoteindex = -1; pak->unk2b8_01 = false; pak->type = PAKTYPE_NONE; - pak->unk008 = 1; + pak->unk008 = PAK008_01; pak->rumblestate = RUMBLESTATE_1; - pak->unk00c = 3; + pak->unk00c = PAK00C_03; if (pakProbe(device)) { - if (pak->unk014 & 1) { + if (pak->features & PAKFEATURE_MEMORY) { if (pak0f1147b8nb(device)) { - pak->unk264++; + pak->plugcount++; return; } if (1); } - if (pak->unk014 & 2) { + if (pak->features & PAKFEATURE_RUMBLE) { if (device != SAVEDEVICE_GAMEPAK) { joyDisableCyclicPolling(3514, "pak.c"); ret = osMotorProbe(&g_PiMesgQueue, PFS(device), device); @@ -3276,8 +3284,8 @@ void pak0f114dd4nb(s8 device) if (pakHandleResult(ret, device, 1, 3518)) { pak->type = PAKTYPE_RUMBLE; - pak->unk010 = PAK010_11; - pak->unk264++; + pak->state = PAKSTATE_READY; + pak->plugcount++; return; } } else { @@ -3285,10 +3293,10 @@ void pak0f114dd4nb(s8 device) } } - if (pak->unk014 & 4) { - pak->unk010 = PAK010_08; + if (pak->features & PAKFEATURE_GAMEBOY) { + pak->state = PAKSTATE_GB_PRE_PREPARE; pak->unk2b8_01 = false; - pak->unk264++; + pak->plugcount++; } } } @@ -3445,7 +3453,7 @@ s32 pakCreateFilesystem(s8 device) s32 pak0f11b6ec(s8 device) { - if (g_Paks[device].unk010 == PAK010_11 && g_Paks[device].type == PAKTYPE_MEMORY) { + if (g_Paks[device].state == PAKSTATE_READY && g_Paks[device].type == PAKTYPE_MEMORY) { return 3; } @@ -4265,9 +4273,9 @@ bool pakRepair(s8 device) { s32 result; - switch (g_Paks[device].unk010) { - case PAK010_14: - case PAK010_19: + switch (g_Paks[device].state) { + case PAKSTATE_MEM_ENTER_DEVICEERROR: + case PAKSTATE_MEM_DEVICEERROR: break; default: joyDisableCyclicPolling(JOYARGS(4425)); @@ -4275,20 +4283,20 @@ bool pakRepair(s8 device) joyEnableCyclicPolling(JOYARGS(4427)); if (result == PAK_ERR1_OK) { - g_Paks[device].unk010 = PAK010_02; + g_Paks[device].state = PAKSTATE_PROBE; return true; } pakHandleResult(result, device, false, LINE_4801); #if VERSION >= VERSION_NTSC_1_0 - g_Paks[device].unk010 = PAK010_22; + g_Paks[device].state = PAKSTATE_22; #endif break; } #if VERSION < VERSION_NTSC_1_0 - g_Paks[device].unk010 = PAK010_22; + g_Paks[device].state = PAKSTATE_22; #endif return false; @@ -4314,22 +4322,22 @@ bool pakHandleResult(s32 err1, s8 device, bool arg2, u32 line) #if VERSION >= VERSION_NTSC_1_0 case PAK_ERR1_NOPAK: g_Paks[device].type = PAKTYPE_MEMORY; - g_Paks[device].unk010 = PAK010_01; + g_Paks[device].state = PAKSTATE_UNPLUGGING; break; #endif case PAK_ERR1_DEVICE: g_Paks[device].type = PAKTYPE_MEMORY; - g_Paks[device].unk010 = PAK010_14; + g_Paks[device].state = PAKSTATE_MEM_ENTER_DEVICEERROR; break; case PAK_ERR1_INCONSISTENT: case PAK_ERR1_IDFATAL: g_Paks[device].type = PAKTYPE_MEMORY; - g_Paks[device].unk010 = PAK010_15; + g_Paks[device].state = PAKSTATE_MEM_ENTER_CORRUPT; break; case PAK_ERR1_DATAFULL: case PAK_ERR1_DIRFULL: g_Paks[device].type = PAKTYPE_MEMORY; - g_Paks[device].unk010 = PAK010_16; + g_Paks[device].state = PAKSTATE_MEM_ENTER_FULL; break; } } @@ -4364,40 +4372,40 @@ void paksTick(void) { s32 i; - if (g_Vars.unk0004e4) { + if (g_Vars.pakstocheck) { g_MpPlayerNum = 0; menuSetBanner(MENUBANNER_CHECKINGPAK, true); var80075d14 = false; - if (g_Vars.unk0004e4 & 0x0f) { - joy00013974(0); + if (g_Vars.pakstocheck & 0x0f) { + joySetPfsPollEnabled(0); // Waiting for some timer - if ((g_Vars.unk0004e4 & 0x0f) > 9) { + if ((g_Vars.pakstocheck & 0x0f) >= 10) { if ((g_Vars.lvframenum % 7) == 0) { - g_Vars.unk0004e4--; + g_Vars.pakstocheck--; } } else { - g_Vars.unk0004e4--; + g_Vars.pakstocheck--; } } else { - joyCheckPfs(2); + joyPollPfs(2); for (i = 0; i < 4; i++) { - if (g_Vars.unk0004e4 & (1 << (i + 4))) { + if (g_Vars.pakstocheck & (1 << (i + 4))) { pak0f1169c8(i, true); - g_Vars.unk0004e4 &= ~(1 << (i + 4)); - } else if (g_Vars.unk0004e4 & (1 << (i + 8))) { + g_Vars.pakstocheck &= ~(1 << (i + 4)); + } else if (g_Vars.pakstocheck & (1 << (i + 8))) { pak0f1169c8(i, false); - g_Vars.unk0004e4 &= ~(1 << (i + 8)); + g_Vars.pakstocheck &= ~(1 << (i + 8)); } } - if (!joy00013980()) { - joy00013974(1); - joy000139c8(); + if (!joyIsPfsPollEnabled()) { + joySetPfsPollEnabled(true); + joySetDefaultPfsPollInterval(); } menuSetBanner(-1, true); @@ -4414,21 +4422,21 @@ void pak0f11c6d0(void) s32 i; for (i = 0; i < MAX_PLAYERS; i++) { - switch (g_Paks[i].unk010) { - case PAK010_02: - case PAK010_03: - case PAK010_04: - case PAK010_05: - case PAK010_06: - g_Paks[i].unk010 = PAK010_01; - var80075d10 &= ~(1 << i); + switch (g_Paks[i].state) { + case PAKSTATE_PROBE: + case PAKSTATE_MEM_DISPATCH: + case PAKSTATE_MEM_PRE_PREPARE: + case PAKSTATE_MEM_PREPARE: + case PAKSTATE_MEM_POST_PREPARE: + g_Paks[i].state = PAKSTATE_UNPLUGGING; + g_PaksPlugged &= ~(1 << i); g_MpPlayerNum = i; menuSetBanner(-1, true); break; } } - var8005eedc = true; + g_JoyPfsPollMasterEnabled = true; } #endif @@ -4436,7 +4444,7 @@ void pakExecuteDebugOperations(void) { #if VERSION >= VERSION_NTSC_1_0 static u32 g_PakDebugDumpEeprom = 0; - s32 pass = false; + bool disablepolling = false; s8 i; mainOverrideVariable("forcescrub", &g_PakDebugForceScrub); @@ -4482,30 +4490,30 @@ void pakExecuteDebugOperations(void) g_PakDebugForceScrub = false; } - pak0f11ca30(); + pakCheckPlugged(); for (i = 0; i < ARRAYCOUNT(g_Paks); i++) { - if (g_Paks[i].unk014) { - pak0f11df94(i); + if (g_Paks[i].features) { + pakTickState(i); } } for (i = 0; i < ARRAYCOUNT(g_Paks); i++) { - switch (g_Paks[i].unk010) { - case PAK010_02: - case PAK010_03: - case PAK010_04: - case PAK010_05: - case PAK010_06: - pass = true; + switch (g_Paks[i].state) { + case PAKSTATE_PROBE: + case PAKSTATE_MEM_DISPATCH: + case PAKSTATE_MEM_PRE_PREPARE: + case PAKSTATE_MEM_PREPARE: + case PAKSTATE_MEM_POST_PREPARE: + disablepolling = true; break; } } - if (pass) { - var8005eedc = false; + if (disablepolling) { + g_JoyPfsPollMasterEnabled = false; } else { - var8005eedc = true; + g_JoyPfsPollMasterEnabled = true; } #else static u32 g_PakDebugDumpEeprom = 0; @@ -4547,12 +4555,12 @@ void pakExecuteDebugOperations(void) g_PakDebugForceScrub = false; } - pak0f11ca30(); + pakCheckPlugged(); pakDumpPak(); for (i = 0; i < ARRAYCOUNT(g_Paks); i++) { - if (g_Paks[i].unk014) { - pak0f11df94(i); + if (g_Paks[i].features) { + pakTickState(i); } } #endif @@ -4602,62 +4610,66 @@ const char var7f1ae9acnb[] = "Pak -> Connector Check Failed"; const char var7f1ae9ccnb[] = "Pak -> osGbpakReadId - Failed"; #endif -void pak0f11ca30(void) +void pakCheckPlugged(void) { #if VERSION >= VERSION_NTSC_1_0 if (g_Vars.tickmode != TICKMODE_CUTSCENE || g_MenuData.count > 0) { - u8 oldvalue = var80075d10; - u8 newvalue = var80075d10; - u8 thing = 0xff; + u8 oldplugged = g_PaksPlugged; + u8 newplugged = g_PaksPlugged; + u8 paksconnected = 0xff; s32 i; - if ((g_Vars.unk0004e4 & 0xf) == 0) { + if ((g_Vars.pakstocheck & 0xf) == 0) { for (i = 0; i < ARRAYCOUNT(g_Paks); i++) { - if ((g_Vars.paksconnected2 | g_Vars.paksconnected) & (1 << i)) { - if (thing == 0xff) { - thing = joyShiftPfsStates(); + if ((g_Vars.paksneededforgame | g_Vars.paksneededformenu) & (1 << i)) { + if (paksconnected == 0xff) { + paksconnected = joyShiftPfsStates(); } - if (((thing & (1 << i)) != (oldvalue & (1 << i)))) { - if ((thing & (1 << i))) { - g_Paks[i].unk010 = PAK010_02; - newvalue |= (1 << i); + if (((paksconnected & (1 << i)) != (oldplugged & (1 << i)))) { + if ((paksconnected & (1 << i))) { + // pak connected + g_Paks[i].state = PAKSTATE_PROBE; + newplugged |= (1 << i); } else { - g_Paks[i].unk010 = PAK010_01; - newvalue &= ~(1 << i); - func0f110d90(i); + // pak unplugged + g_Paks[i].state = PAKSTATE_UNPLUGGING; + newplugged &= ~(1 << i); + filelistInvalidatePak(i); } } } } - var80075d10 = newvalue; + g_PaksPlugged = newplugged; } } #else if (g_Vars.tickmode != TICKMODE_CUTSCENE) { - u32 thing = joy00013980(); - u8 oldvalue = var80075d10; - u8 newvalue = var80075d10; + u32 paksconnected = joyShiftPfsStates(); + u8 oldplugged = g_PaksPlugged; + u8 newplugged = g_PaksPlugged; s32 i; for (i = 0; i < ARRAYCOUNT(g_Paks); i++) { u32 thisbit = 1 << i; - if ((g_Vars.paksconnected2 | g_Vars.paksconnected) & thisbit) { - if ((thing & thisbit) != (oldvalue & thisbit)) { - if (thing & thisbit) { - g_Paks[i].unk010 = PAK010_02; - newvalue |= thisbit; + if ((g_Vars.paksneededforgame | g_Vars.paksneededformenu) & thisbit) { + if ((paksconnected & thisbit) != (oldplugged & thisbit)) { + if (paksconnected & thisbit) { + // pak connected + g_Paks[i].state = PAKSTATE_PROBE; + newplugged |= thisbit; } else { - g_Paks[i].unk010 = PAK010_01; - newvalue &= ~thisbit; + // pak unplugged + g_Paks[i].state = PAKSTATE_UNPLUGGING; + newplugged &= ~thisbit; } } } } - var80075d10 = newvalue; + g_PaksPlugged = newplugged; } #endif } @@ -4913,7 +4925,7 @@ bool gbpak0f11cef8(s8 device) } } - pak->unk008 = 1; + pak->unk008 = PAK008_01; return true; } @@ -5054,7 +5066,7 @@ u32 var80075d5c = 0x00000000; s32 pak0f11d3f8(s8 device) { if (g_Paks[device].type == PAKTYPE_GAMEBOY - && (g_Paks[device].unk010 == PAK010_11 || g_Paks[device].unk010 == PAK010_12 || g_Paks[device].unk010 == PAK010_13)) { + && (g_Paks[device].state == PAKSTATE_READY || g_Paks[device].state == PAKSTATE_12 || g_Paks[device].state == PAKSTATE_13)) { return true; } @@ -5063,8 +5075,8 @@ s32 pak0f11d3f8(s8 device) bool pak0f11d478(s8 device) { - if (g_Paks[device].unk008 == 11) { - g_Paks[device].unk008 = 1; + if (g_Paks[device].unk008 == PAK008_11) { + g_Paks[device].unk008 = PAK008_01; return true; } @@ -5073,8 +5085,8 @@ bool pak0f11d478(s8 device) bool pak0f11d4dc(s8 device) { - if (g_Paks[device].unk008 == 1 || g_Paks[device].unk008 == 0) { - g_Paks[device].unk008 = 2; + if (g_Paks[device].unk008 == PAK008_01 || g_Paks[device].unk008 == PAK008_00) { + g_Paks[device].unk008 = PAK008_02; g_Paks[device].unk270 = 0; } @@ -5083,8 +5095,8 @@ bool pak0f11d4dc(s8 device) s32 pak0f11d540(s8 device, s32 arg1) { - if (g_Paks[device].unk008 == 1 || g_Paks[device].unk008 == 0) { - g_Paks[device].unk008 = 4; + if (g_Paks[device].unk008 == PAK008_01 || g_Paks[device].unk008 == PAK008_00) { + g_Paks[device].unk008 = PAK008_04; g_Paks[device].unk270 = arg1; return true; } @@ -5094,8 +5106,8 @@ s32 pak0f11d540(s8 device, s32 arg1) s32 pak0f11d5b0(s8 device) { - if (g_Paks[device].unk008 == 1 || g_Paks[device].unk008 == 0) { - g_Paks[device].unk008 = 4; + if (g_Paks[device].unk008 == PAK008_01 || g_Paks[device].unk008 == PAK008_00) { + g_Paks[device].unk008 = PAK008_04; g_Paks[device].unk270 = 1; return true; } @@ -5105,8 +5117,8 @@ s32 pak0f11d5b0(s8 device) void pak0f11d620(s8 device) { - if (g_Paks[device].unk010 == PAK010_11) { - g_Paks[device].unk010 = PAK010_12; + if (g_Paks[device].state == PAKSTATE_READY) { + g_Paks[device].state = PAKSTATE_12; } } @@ -5140,20 +5152,20 @@ bool gbpak0f11d680(s8 device, bool arg1) u16 size; switch (g_Paks[device].unk00c) { - case 0: + case PAK00C_00: offset = 0x1a0; size = 0x40; arg1 = true; break; - case 1: + case PAK00C_01: offset = g_Paks[device].unk278 * 0x100 + 0x660; size = 0x40; break; - case 2: + case PAK00C_02: offset = g_Paks[device].unk278 * 0x100 + 0x440; size = 0x80; break; - case 3: + case PAK00C_03: offset = g_Paks[device].unk278 * var80075ccc; size = var80075ccc; break; @@ -5172,22 +5184,22 @@ bool gbpak0f11d680(s8 device, bool arg1) bool pak0f11d7c4(s8 device) { switch (g_Paks[device].unk00c) { - case 0: + case PAK00C_00: if (g_Paks[device].unk278 == 1) { return true; } break; - case 1: + case PAK00C_01: if (g_Paks[device].unk278 == 4) { return true; } break; - case 2: + case PAK00C_02: if (g_Paks[device].unk278 == 8) { return true; } break; - case 3: + case PAK00C_03: if (g_Paks[device].unk278 == 0x1000 / var80075ccc) { return true; } @@ -5255,7 +5267,7 @@ void pak0f11d9c4(s8 device, u8 *arg1, u8 *arg2, u32 arg3) u32 j; switch (g_Paks[device].unk00c) { - case 0: + case PAK00C_00: if (arg2 != NULL) { u8 *src = &g_Paks[device].unk2c4[0x1b2]; s32 i; @@ -5265,7 +5277,7 @@ void pak0f11d9c4(s8 device, u8 *arg1, u8 *arg2, u32 arg3) } } break; - case 1: + case PAK00C_01: if (arg1 != NULL) { pakConvertFromGbcImage(g_Paks[device].unk2c4, sp60); @@ -5276,7 +5288,7 @@ void pak0f11d9c4(s8 device, u8 *arg1, u8 *arg2, u32 arg3) } } break; - case 2: + case PAK00C_02: if (arg1 != NULL) { pakConvertFromGbcImage(g_Paks[device].unk2c4, sp60); @@ -5287,7 +5299,7 @@ void pak0f11d9c4(s8 device, u8 *arg1, u8 *arg2, u32 arg3) } } break; - case 3: + case PAK00C_03: if (arg1 != NULL) { pakConvertFromGbcImage(g_Paks[device].unk2c4, arg1); } @@ -5327,7 +5339,7 @@ void pak0f11d9c4(s8 device, u8 *arg1, u8 *arg2, u32 arg3) #if VERSION >= VERSION_NTSC_1_0 void pakRumble(s32 device, f32 numsecs, s32 onduration, s32 offduration) { - if (g_Paks[device].unk010 == PAK010_11 + if (g_Paks[device].state == PAKSTATE_READY && g_Paks[device].type == PAKTYPE_RUMBLE && g_Paks[device].rumblestate != RUMBLESTATE_DISABLED_STOPPING && g_Paks[device].rumblestate != RUMBLESTATE_DISABLED_STOPPED @@ -5344,7 +5356,7 @@ void pakRumble(s8 device, f32 numsecs, s32 onduration, s32 offduration) { u8 index = g_Vars.playertojoymap[device]; - if (g_Paks[index].unk010 == PAK010_11 + if (g_Paks[index].state == PAKSTATE_READY && g_Paks[index].type == PAKTYPE_RUMBLE && g_Paks[index].rumblestate != RUMBLESTATE_DISABLED_STOPPING && g_Paks[index].rumblestate != RUMBLESTATE_DISABLED_STOPPED @@ -5469,96 +5481,78 @@ void pakDumpPak(void) void pak0f117f94nb(s8 device); -void pak0f11df94(s8 device) +void pakTickState(s8 device) { #if VERSION == VERSION_NTSC_1_0 - if (g_Paks[device].unk2b8_07) { - if (var80075d14) { - menuSetBanner(-1, true); - } + if (g_Paks[device].showdatalost) { + SETBANNER(-1); - if (func0f0fd1f4(device, 4)) { - func0f0fd320(device, 4); - g_Paks[device].unk2b8_07 = false; + if (menuIsReadyForPakError(device, PAKERRORDIALOG_DATALOST)) { + menuPushPakErrorDialog(device, PAKERRORDIALOG_DATALOST); + g_Paks[device].showdatalost = false; } } #endif - switch (g_Paks[device].unk010) { - case PAK010_00: + switch (g_Paks[device].state) { + case PAKSTATE_NOPAK: break; - case PAK010_01: - g_Paks[device].unk010 = PAK010_00; - g_Paks[device].unk264++; + case PAKSTATE_UNPLUGGING: + g_Paks[device].state = PAKSTATE_NOPAK; + g_Paks[device].plugcount++; #if VERSION >= VERSION_NTSC_FINAL - g_Paks[device].unk2b8_07 = false; + g_Paks[device].showdatalost = false; #endif g_Paks[device].type = PAKTYPE_NONE; -#if VERSION >= VERSION_NTSC_1_0 - if (var80075d14) { - menuSetBanner(-1, true); - } -#else - menuSetBanner(-1, true); -#endif - + SETBANNER(-1); func0f14aed0(device); break; - case PAK010_02: + case PAKSTATE_PROBE: #if VERSION >= VERSION_NTSC_1_0 - if (var80075d14) { - menuSetBanner(-1, true); - } - + SETBANNER(-1); pakProbe(device); #else pak0f114dd4nb(device); #endif func0f14aed0(device); break; - case PAK010_03: + case PAKSTATE_MEM_DISPATCH: #if VERSION >= VERSION_NTSC_1_0 - if (g_Vars.paksconnected & (1 << device)) + if (g_Vars.paksneededformenu & (1 << device)) #else - if ((g_Vars.paksconnected2 | g_Vars.paksconnected) & (1 << device)) + if ((g_Vars.paksneededforgame | g_Vars.paksneededformenu) & (1 << device)) #endif { if (device == SAVEDEVICE_GAMEPAK) { - g_Paks[device].unk010 = PAK010_05; + g_Paks[device].state = PAKSTATE_MEM_PREPARE; } else { - g_Paks[device].unk010 = PAK010_04; + g_Paks[device].state = PAKSTATE_MEM_PRE_PREPARE; } } else { - g_Paks[device].unk010 = PAK010_07; + g_Paks[device].state = PAKSTATE_07; } break; - case PAK010_07: + case PAKSTATE_07: #if VERSION >= VERSION_NTSC_1_0 - if (g_Vars.paksconnected & (1 << device)) + if (g_Vars.paksneededformenu & (1 << device)) #else - if ((g_Vars.paksconnected2 | g_Vars.paksconnected) & (1 << device)) + if ((g_Vars.paksneededforgame | g_Vars.paksneededformenu) & (1 << device)) #endif { - g_Paks[device].unk010 = PAK010_02; + g_Paks[device].state = PAKSTATE_PROBE; } break; default: break; - case PAK010_04: + case PAKSTATE_MEM_PRE_PREPARE: g_MpPlayerNum = device; -#if VERSION >= VERSION_NTSC_1_0 - if (var80075d14) { - menuSetBanner(MENUBANNER_CHECKINGPAK, true); - } -#else - menuSetBanner(MENUBANNER_CHECKINGPAK, true); -#endif + SETBANNER(MENUBANNER_CHECKINGPAK); - g_Paks[device].unk010 = PAK010_05; + g_Paks[device].state = PAKSTATE_MEM_PREPARE; break; - case PAK010_05: + case PAKSTATE_MEM_PREPARE: #if VERSION >= VERSION_NTSC_1_0 joyDisableCyclicPolling(); mempakPrepare(device); @@ -5567,26 +5561,19 @@ void pak0f11df94(s8 device) mempakPrepare(device); #endif break; - case PAK010_06: -#if VERSION >= VERSION_NTSC_1_0 - if (var80075d14) { - menuSetBanner(-1, true); - } -#else - menuSetBanner(-1, true); -#endif - - g_Paks[device].unk010 = PAK010_11; + case PAKSTATE_MEM_POST_PREPARE: + SETBANNER(-1); + g_Paks[device].state = PAKSTATE_READY; break; - case PAK010_08: + case PAKSTATE_GB_PRE_PREPARE: if (func0f14aea0(device)) { - g_Paks[device].unk010 = PAK010_09; + g_Paks[device].state = PAKSTATE_GB_PREPARE; } break; - case PAK010_09: + case PAKSTATE_GB_PREPARE: #if VERSION >= VERSION_NTSC_1_0 - g_Paks[device].unk008 = 0; - g_Paks[device].unk010 = PAK010_10; + g_Paks[device].unk008 = PAK008_00; + g_Paks[device].state = PAKSTATE_GB_POST_PREPARE1; #else { s32 ret; @@ -5597,151 +5584,113 @@ void pak0f11df94(s8 device) if (ret == 0) { g_Paks[device].type = PAKTYPE_GAMEBOY; - g_Paks[device].unk008 = 0; - g_Paks[device].unk010 = PAK010_10; + g_Paks[device].unk008 = PAK008_00; + g_Paks[device].state = PAKSTATE_GB_POST_PREPARE1; } else { gbpakHandleError(ret); g_Paks[device].type = PAKTYPE_GAMEBOY_ERROR; - g_Paks[device].unk010 = PAK010_00; + g_Paks[device].state = PAKSTATE_NOPAK; } } #endif break; - case PAK010_10: - g_Paks[device].unk010 = PAK010_24; + case PAKSTATE_GB_POST_PREPARE1: + g_Paks[device].state = PAKSTATE_GB_POST_PREPARE2; break; - case PAK010_24: - g_Paks[device].unk010 = PAK010_25; + case PAKSTATE_GB_POST_PREPARE2: + g_Paks[device].state = PAKSTATE_GB_POST_PREPARE3; break; - case PAK010_25: - g_Paks[device].unk010 = PAK010_11; + case PAKSTATE_GB_POST_PREPARE3: + g_Paks[device].state = PAKSTATE_READY; break; - case PAK010_12: + case PAKSTATE_12: #if VERSION >= VERSION_NTSC_1_0 - g_Paks[device].unk010 = PAK010_11; + g_Paks[device].state = PAKSTATE_READY; #else if (g_Paks[device].type == PAKTYPE_GAMEBOY) { joyDisableCyclicPolling(5960, "pak.c"); pak0f117f94nb(device); joyEnableCyclicPolling(5962, "pak.c"); - g_Paks[device].unk010 = PAK010_13; + g_Paks[device].state = PAKSTATE_13; } else { - g_Paks[device].unk010 = PAK010_11; + g_Paks[device].state = PAKSTATE_READY; } #endif break; - case PAK010_13: + case PAKSTATE_13: break; - case PAK010_15: + case PAKSTATE_MEM_ENTER_CORRUPT: + SETBANNER(-1); + #if VERSION >= VERSION_NTSC_1_0 - if (var80075d14) { - menuSetBanner(-1, true); - } - - if ((g_Vars.paksconnected & (1 << device)) && func0f0fd1f4(device, 1)) { - func0f0fd320(device, 1); - g_Paks[device].unk010 = PAK010_20; - } else { - // empty - } -#else - menuSetBanner(-1, true); - - if (func0f0fd1f4(device, 1)) { - func0f0fd320(device, 1); - g_Paks[device].unk010 = PAK010_20; - } else { - // empty - } + if ((g_Vars.paksneededformenu & (1 << device))) #endif + { + if (menuIsReadyForPakError(device, PAKERRORDIALOG_CORRUPT)) { + menuPushPakErrorDialog(device, PAKERRORDIALOG_CORRUPT); + g_Paks[device].state = PAKSTATE_MEM_CORRUPT; + } else { + // empty + } + } break; #if VERSION >= VERSION_NTSC_1_0 - case PAK010_26: - if (func0f0fd1f4(device, 3)) { - func0f0fd320(device, 3); - g_Paks[device].unk010 = PAK010_27; + case PAKSTATE_GB_OPEN_UNREADABLE: + if (menuIsReadyForPakError(device, PAKERRORDIALOG_GB_UNREADABLE)) { + menuPushPakErrorDialog(device, PAKERRORDIALOG_GB_UNREADABLE); + g_Paks[device].state = PAKSTATE_GB_IDLE_UNREADABLE; } break; - case PAK010_27: - g_Paks[device].unk010 = PAK010_11; + case PAKSTATE_GB_IDLE_UNREADABLE: + g_Paks[device].state = PAKSTATE_READY; break; #endif - case PAK010_14: -#if VERSION >= VERSION_NTSC_1_0 - if (var80075d14) { - menuSetBanner(-1, true); - } + case PAKSTATE_MEM_ENTER_DEVICEERROR: + SETBANNER(-1); - if (((g_Vars.paksconnected & (1 << device))) && func0f0fd1f4(device, 2)) { - func0f0fd320(device, 2); - g_Paks[device].unk010 = PAK010_19; - } else { - // empty - } -#else - menuSetBanner(-1, true); - - if (func0f0fd1f4(device, 2)) { - func0f0fd320(device, 2); - g_Paks[device].unk010 = PAK010_19; - } else { - // empty - } -#endif - break; - case PAK010_16: #if VERSION >= VERSION_NTSC_1_0 - if (var80075d14) { - menuSetBanner(-1, true); - } - - if ((g_Vars.paksconnected & (1 << device)) && func0f0fd1f4(device, 0)) { - func0f0fd320(device, 0); - g_Paks[device].unk010 = PAK010_21; - } else { - // empty - } -#else - menuSetBanner(-1, true); - - if (func0f0fd1f4(device, 0)) { - func0f0fd320(device, 0); - g_Paks[device].unk010 = PAK010_21; - } else { - // empty - } + if (g_Vars.paksneededformenu & (1 << device)) #endif + { + if (menuIsReadyForPakError(device, PAKERRORDIALOG_DEVICEERROR)) { + menuPushPakErrorDialog(device, PAKERRORDIALOG_DEVICEERROR); + g_Paks[device].state = PAKSTATE_MEM_DEVICEERROR; + } else { + // empty + } + } break; - case PAK010_21: + case PAKSTATE_MEM_ENTER_FULL: + SETBANNER(-1); + #if VERSION >= VERSION_NTSC_1_0 - if (var80075d14) { - menuSetBanner(-1, true); - } -#else - menuSetBanner(-1, true); + if (g_Vars.paksneededformenu & (1 << device)) #endif + { + if (menuIsReadyForPakError(device, PAKERRORDIALOG_FULL)) { + menuPushPakErrorDialog(device, PAKERRORDIALOG_FULL); + g_Paks[device].state = PAKSTATE_MEM_FULL; + } else { + // empty + } + } break; - case PAK010_22: -#if VERSION >= VERSION_NTSC_1_0 - if (var80075d14) { - menuSetBanner(-1, true); - } -#else - menuSetBanner(-1, true); -#endif + case PAKSTATE_MEM_FULL: + SETBANNER(-1); + break; + case PAKSTATE_22: + SETBANNER(-1); break; } #if VERSION >= VERSION_NTSC_FINAL - if (g_Paks[device].unk2b8_07) { - if (var80075d14) { - menuSetBanner(-1, true); - } + if (g_Paks[device].showdatalost) { + SETBANNER(-1); - if (func0f0fd1f4(device, 4)) { - func0f0fd320(device, 4); - g_Paks[device].unk2b8_07 = false; + if (menuIsReadyForPakError(device, PAKERRORDIALOG_DATALOST)) { + menuPushPakErrorDialog(device, PAKERRORDIALOG_DATALOST); + g_Paks[device].showdatalost = false; } } #endif @@ -5786,57 +5735,57 @@ void pak0f117f94nb(s8 device) if (pak); if (pak); - if (pak->unk008 == 12) { + if (pak->unk008 == PAK008_12) { pak->unk2b8_05 = gbpakIdentifyGame(device); if (pak->unk2b8_05 && pak->isgbcamera) { - pak->unk008 = 0; + pak->unk008 = PAK008_00; } } if (!pak->unk2b8_05) { func0f14cf6c(); - pak->unk008 = 12; + pak->unk008 = PAK008_12; return; } - if (pak->unk008 != 1) { - if (pak->unk008 == 0) { + if (pak->unk008 != PAK008_01) { + if (pak->unk008 == PAK008_00) { gbpak0f11cef8(device); return; } - if (pak->unk008 == 2) { + if (pak->unk008 == PAK008_02) { gbpak0f11cef8(device); - pak->unk008 = 3; + pak->unk008 = PAK008_03; } - if (pak->unk008 == 3) { + if (pak->unk008 == PAK008_03) { if (pak0f116d1cnb(device) == 0) { - pak->unk008 = 4; + pak->unk008 = PAK008_04; } } - if (pak->unk008 == 4) { - pak->unk008 = pak->unk2b8_06 ? 5 : 8; + if (pak->unk008 == PAK008_04) { + pak->unk008 = pak->unk2b8_06 ? PAK008_05 : PAK008_08; } - if (pak->unk008 == 5) { + if (pak->unk008 == PAK008_05) { gbpak0f11cef8(device); - pak->unk008 = 6; + pak->unk008 = PAK008_06; } - if (pak->unk008 == 6) { + if (pak->unk008 == PAK008_06) { if (pak0f116d1cnb(device) == 0) { - pak->unk008 = 7; + pak->unk008 = PAK008_07; } } - if (pak->unk008 == 7) { - pak->unk008 = 8; + if (pak->unk008 == PAK008_07) { + pak->unk008 = PAK008_08; } - if (pak->unk008 == 8) { + if (pak->unk008 == PAK008_08) { s32 i; for (i = 0; i < 0x1000; i++) { @@ -5844,12 +5793,12 @@ void pak0f117f94nb(s8 device) } gbpak0f1172c8nb(device, pak->unk270); - pak->unk008 = 9; + pak->unk008 = PAK008_09; } - if (pak->unk008 == 9) { + if (pak->unk008 == PAK008_09) { if (gbpak0f11d680(device, pakGetUnk270(device)) && pak0f11d7c4(device)) { - pakSetUnk008(device, 11); + pakSetUnk008(device, PAK008_11); } } } @@ -5858,7 +5807,7 @@ void pak0f117f94nb(s8 device) void pak0f11e3bc(s8 device) { - g_Paks[device].unk008 = 0; + g_Paks[device].unk008 = PAK008_00; } void pakProbeEeprom(void) @@ -6005,7 +5954,7 @@ s8 pakFindBySerial(s32 findserial) s32 i; for (i = 0; i < ARRAYCOUNT(g_Paks); i++) { - if (pak0f116aec(i)) { + if (mempakIsReady(i)) { s32 serial = pakGetSerial(i); if (findserial == serial) { @@ -6135,7 +6084,7 @@ s32 gbpakIdentifyGame(s8 device) return game; } - g_Paks[device].unk010 = PAK010_26; + g_Paks[device].state = PAKSTATE_GB_OPEN_UNREADABLE; return GBGAME_OTHER; #else OSGbpakId id; diff --git a/src/include/constants.h b/src/include/constants.h index ef0efb033..b7bb670e7 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -3264,33 +3264,57 @@ #define PADFLAG_AIDUCK 0x10000 #define PADFLAG_AIBOTINUSE 0x20000 -#define PAK010_00 0 -#define PAK010_01 1 -#define PAK010_02 2 -#define PAK010_03 3 -#define PAK010_04 4 -#define PAK010_05 5 -#define PAK010_06 6 -#define PAK010_07 7 -#define PAK010_08 8 -#define PAK010_09 9 -#define PAK010_10 10 -#define PAK010_11 11 -#define PAK010_12 12 -#define PAK010_13 13 -#define PAK010_14 14 -#define PAK010_15 15 -#define PAK010_16 16 -#define PAK010_17 17 -#define PAK010_18 18 -#define PAK010_19 19 -#define PAK010_20 20 -#define PAK010_21 21 -#define PAK010_22 22 -#define PAK010_24 24 -#define PAK010_25 25 -#define PAK010_26 26 -#define PAK010_27 27 +#define PAK008_00 0 +#define PAK008_01 1 +#define PAK008_02 2 +#define PAK008_03 3 +#define PAK008_04 4 +#define PAK008_05 5 +#define PAK008_06 6 +#define PAK008_07 7 +#define PAK008_08 8 +#define PAK008_09 9 +#define PAK008_11 11 +#define PAK008_12 12 + +#define PAK00C_00 0 +#define PAK00C_01 1 +#define PAK00C_02 2 +#define PAK00C_03 3 + +#define PAKERRORDIALOG_FULL 0 +#define PAKERRORDIALOG_CORRUPT 1 +#define PAKERRORDIALOG_DEVICEERROR 2 +#define PAKERRORDIALOG_GB_UNREADABLE 3 +#define PAKERRORDIALOG_DATALOST 4 + +#define PAKSTATE_NOPAK 0 +#define PAKSTATE_UNPLUGGING 1 +#define PAKSTATE_PROBE 2 +#define PAKSTATE_MEM_DISPATCH 3 +#define PAKSTATE_MEM_PRE_PREPARE 4 +#define PAKSTATE_MEM_PREPARE 5 +#define PAKSTATE_MEM_POST_PREPARE 6 +#define PAKSTATE_07 7 +#define PAKSTATE_GB_PRE_PREPARE 8 +#define PAKSTATE_GB_PREPARE 9 +#define PAKSTATE_GB_POST_PREPARE1 10 +#define PAKSTATE_READY 11 +#define PAKSTATE_12 12 +#define PAKSTATE_13 13 +#define PAKSTATE_MEM_ENTER_DEVICEERROR 14 +#define PAKSTATE_MEM_ENTER_CORRUPT 15 +#define PAKSTATE_MEM_ENTER_FULL 16 +#define PAKSTATE_17 17 +#define PAKSTATE_18 18 +#define PAKSTATE_MEM_DEVICEERROR 19 +#define PAKSTATE_MEM_CORRUPT 20 +#define PAKSTATE_MEM_FULL 21 +#define PAKSTATE_22 22 +#define PAKSTATE_GB_POST_PREPARE2 24 +#define PAKSTATE_GB_POST_PREPARE3 25 +#define PAKSTATE_GB_OPEN_UNREADABLE 26 +#define PAKSTATE_GB_IDLE_UNREADABLE 27 #define PAK_ERR1_OK 0 #define PAK_ERR1_NOPAK PFS_ERR_NOPACK /* no memory card is plugged */ diff --git a/src/include/data.h b/src/include/data.h index 96be2ddc3..aeb9ae36e 100644 --- a/src/include/data.h +++ b/src/include/data.h @@ -38,7 +38,7 @@ extern s32 g_SoundMode; extern s32 g_SndNumPlaying; extern struct audiorussmapping g_AudioRussMappings[]; extern struct audioconfig g_AudioConfigs[]; -extern bool var8005eedc; +extern bool g_JoyPfsPollMasterEnabled; extern f32 var8005ef10[2]; extern s32 g_NumGlobalAilists; extern s32 g_NumLvAilists; diff --git a/src/include/game/filelist.h b/src/include/game/filelist.h index 54760dc09..b22811613 100644 --- a/src/include/game/filelist.h +++ b/src/include/game/filelist.h @@ -8,7 +8,7 @@ void func0f110bf0(void); void func0f110bf8(void); void filelistCreate(s32 listnum, u8 filetype); s32 filelistFindOrCreate(u8 filetype); -void func0f110d90(s32 device); +void filelistInvalidatePak(s32 device); void filelistsTick(void); void filelistUpdate(struct filelist *list); diff --git a/src/include/game/menu.h b/src/include/game/menu.h index 5f8b6f90e..b4af1b93b 100644 --- a/src/include/game/menu.h +++ b/src/include/game/menu.h @@ -97,11 +97,11 @@ Gfx *menuRenderBackgroundLayer2(Gfx *gdl, u8 bg, f32 frac); Gfx *menuRender(Gfx *gdl); u32 menuChooseMusic(void); u32 menuGetRoot(void); -void func0f0fce8c(struct menudialogdef *dialogdef, s32 playernum, s32 arg2); +void menuPushPakDialogForPlayer(struct menudialogdef *dialogdef, s32 playernum, s32 arg2); char *menuTextSaveDeviceName(struct menuitem *item); -u32 func0f0fd118(u32 arg0); -bool func0f0fd1f4(s32 device, s32 arg1); -void func0f0fd320(s32 arg0, s32 arg1); +s32 menuPakNumToPlayerNum(s32 paknum); +bool menuIsReadyForPakError(s32 device, s32 arg1); +void menuPushPakErrorDialog(s32 arg0, s32 arg1); void func0f0fd494(struct coord *pos); void func0f0fd548(s32 arg0); struct menudialog *menuIsDialogOpen(struct menudialogdef *dialogdef); diff --git a/src/include/game/pak.h b/src/include/game/pak.h index af25246f0..327fcfd1a 100644 --- a/src/include/game/pak.h +++ b/src/include/game/pak.h @@ -9,29 +9,29 @@ u32 pakAlign(s8 device, u32 size); s32 pakGetAlignedFileLenByBodyLen(s8 device, u32 bodylen); u32 pakGetBodyLenByFileLen(u32 filelen); u32 pakGenerateSerial(s8 device); -bool pakIsMemoryPak(s8 device); +bool mempakIsOkay(s8 device); s32 pakGetFileIdsByType(s8 device, u32 filetype, u32 *fileids); s32 pak0f1167d8(s8 device); s32 pakReadBodyAtGuid(s8 device, s32 fileid, u8 *body, s32 arg3); s32 pakSaveAtGuid(s8 device, s32 fileid, s32 filetype, u8 *body, s32 *outfileid, u8 *olddata); 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); +PakErr1 pakDeleteGameNote(s8 device, u16 company_code, u32 game_code, char *game_name, char *ext_name); +PakErr1 pak0f1168c4(s8 device, struct pakdata **arg1); s32 pakGetType(s8 device); s32 pakGetSerial(s8 device); void pak0f11698c(s8 device); void pak0f116994(void); -void pak0f1169c8(s8 device, s32 arg1); -bool pak0f116aec(s8 device); -bool pak0f116b5c(s8 device); +void pak0f1169c8(s8 device, bool tick); +bool mempakIsReady(s8 device); +bool mempakIsReadyOrFull(s8 device); void pak0f116bdc(s8 device, u8 *arg1, u8 *arg2); u16 _pakGetSerial(s8 device); u32 _pakGetType(s8 device); -void pakSetUnk010(s8 device, s32 value); +void pakSetState(s8 device, s32 value); s32 pak0f116df0(s8 device, struct pakdata **arg1); s32 _pakDeleteGameNote(s8 device, u16 company_code, u32 game_code, char *game_name, char *ext_name); s32 _pakDeleteFile(s8 device, s32 fileid); -s32 pakGetUnk264(s8 device); +s32 pakGetPlugCount(s8 device); u32 pakGetMaxFileSize(s8 device); s32 pakGetBodyLenByType(s8 device, u32 filetype); void pak0f117150(s8 device, u8 *ptr); @@ -91,8 +91,8 @@ void pakCreateInitialFiles(s8 device); s32 pakFindMaxFileId(s8 device); void pakMergeBlanks(s8 device); void paksReset(void); -void pak0f11a32c(s8 device, u8 arg1, u32 line, char *file); -void pakInit(s8 arg0); +void pakSetFeatures(s8 device, u8 features, u32 line, char *file); +void pakSetDefaults(s8 arg0); PakErr1 pakReadWriteBlock(s8 device, OSPfs *pfs, s32 file_no, u8 flag, u32 address, u32 len, u8 *buffer); bool pakQueryTotalUsage(s8 device); void pakQueryPdSize(s8 device); @@ -111,7 +111,7 @@ bool pakHandleResult(s32 err1, s8 device, bool arg2, u32 line); void paksTick(void); void pak0f11c6d0(void); void pakExecuteDebugOperations(void); -void pak0f11ca30(void); +void pakCheckPlugged(void); void gbpakHandleError(u32 arg0); bool gbpakRead(s8 device, u16 address, u8 *buffer, u16 size); bool gbpakWrite(s8 device, u16 address, u8 *buffer, u16 size); @@ -140,7 +140,7 @@ void pakEnableRumbleForPlayer(s8 playernum); void pakDisableRumbleForAllPlayers(void); void pakEnableRumbleForAllPlayers(void); void pakDumpPak(void); -void pak0f11df94(s8 device); +void pakTickState(s8 device); void pak0f11e3bc(s8 device); void pakProbeEeprom(void); PakErr1 pakReadEeprom(u8 address, u8 *buffer, u32 len); diff --git a/src/include/lib/joy.h b/src/include/lib/joy.h index c50727b22..adff70a59 100644 --- a/src/include/lib/joy.h +++ b/src/include/lib/joy.h @@ -4,15 +4,15 @@ #include "data.h" #include "types.h" -void joy00013900(void); -void joy00013938(void); -void joy00013974(u32 value); -u32 joy00013980(void); -void joy0001398c(s32 value); -void joy000139c8(void); +void joyLockCyclicPolling(void); +void joyUnlockCyclicPolling(void); +void joySetPfsPollEnabled(bool enabled); +bool joyIsPfsPollEnabled(void); +void joySetPfsPollInterval(s32 value); +void joySetDefaultPfsPollInterval(void); s32 joyShiftPfsStates(void); void joyRecordPfsState(u8 pfsstate); -void joyCheckPfs(s32 arg0); +void joyPollPfs(s32 force); void joySetPfsTemporarilyPlugged(s8 index); void joyInit(void); void joyDisableTemporarily(void); @@ -49,8 +49,8 @@ void joyEnableCyclicPolling(s32 line, char *file); void joyDestroy(void); void joyGetContpadNumsForPlayer(s8 playernum, s32 *pad1, s32 *pad2); void joyStopRumble(s8 device, bool disablepolling); -s32 joy000155b4(s8 device); -s32 joy000155f4(s8 device); +s32 joyGetPakState(s8 device); +s32 joyGetPakState2(s8 device); void joysTickRumble(void); #endif diff --git a/src/include/types.h b/src/include/types.h index 9d9929c51..7d591494c 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -223,8 +223,8 @@ struct g_vars { /*0x4b8*/ struct prop *aibuddies[4]; /*0x4c8*/ u32 dontplaynrg; // allow X music to be played (NRG = energy track) /*0x4cc*/ s32 in_cutscene; - /*0x4d0*/ u8 paksconnected; - /*0x4d1*/ u8 paksconnected2; + /*0x4d0*/ u8 paksneededformenu; + /*0x4d1*/ u8 paksneededforgame; /*0x4d2*/ s8 autocutnum; // cutscene scene number (0, 1 or 2), set to -1 while loading cutscene /*0x4d3*/ s8 autocutplaying; // true if playing a cutscene via the menu, false when a button is pressed /*0x4d4*/ s8 autocutgroupcur; // index into g_Cutscenes @@ -239,9 +239,9 @@ struct g_vars { /*0x4e3*/ u8 langfilteron; // 000f = Counter: if 10-15 then ticks down 1 per 7 frames, if under 10 then 1 per frame. - // 00f0 = One bit per pak. Does something with the pak if counter expired. - // 0f00 = One bit per pak. Does something with the pak if counter expired (likely opposite of the above). - /*0x4e4*/ u16 unk0004e4; + // 00f0 = One bit per pak. These paks are checked and ticked. + // 0f00 = One bit per pak. These paks are checked but not ticked. + /*0x4e4*/ u16 pakstocheck; /*0x4e8*/ u32 unk0004e8; /*0x4ec*/ u32 unk0004ec; @@ -4688,12 +4688,12 @@ struct pak { /*0x004*/ u32 rumblestate; /*0x008*/ u32 unk008; /*0x00c*/ u32 unk00c; - /*0x010*/ s32 unk010; - /*0x014*/ u8 unk014; + /*0x010*/ s32 state; + /*0x014*/ u8 features; /*0x018*/ struct pakdata pakdata; /*0x25c*/ u32 maxfileid; /*0x260*/ u32 serial; - /*0x264*/ u32 unk264; + /*0x264*/ u32 plugcount; /*0x268*/ u32 unk268; /*0x26c*/ u32 unk26c; /*0x270*/ u32 unk270; @@ -4720,7 +4720,7 @@ struct pak { /*0x2b8*/ u8 isgbpd : 1; /*0x2b8*/ u8 unk2b8_05 : 1; /*0x2b8*/ u8 unk2b8_06 : 1; - /*0x2b8*/ u8 unk2b8_07 : 1; + /*0x2b8*/ u8 showdatalost : 1; /*0x2b9*/ u8 unk2b9; /*0x2ba*/ u8 unk2ba; /*0x2bb*/ u8 unk2bb; diff --git a/src/lib/joy.c b/src/lib/joy.c index ae8650210..4c212444f 100644 --- a/src/lib/joy.c +++ b/src/lib/joy.c @@ -101,84 +101,66 @@ u32 var8005eed4 = 0; u8 var8005eed8 = 0; #if VERSION >= VERSION_NTSC_1_0 -bool var8005eedc = true; -s32 var8005eee0 = 0; -s32 var8005eee4 = -1; -u32 var8005eee8 = 0; -u32 var8005eeec = 0; -u32 var8005eef0 = 1; +bool g_JoyPfsPollMasterEnabled = true; +s32 g_JoyPfsPollInterval = 0; +s32 g_JoyPfsPollTimeRemaining = -1; +u32 g_JoyPfsPollCount = 0; +bool g_JoyPfsPollEnabled = false; +bool g_JoyCyclicPollingLocked = true; #else u32 var800612c8nb = 3; u8 var800612ccnb = 0; #endif #if VERSION >= VERSION_NTSC_1_0 -void joy00013900(void) +void joyLockCyclicPolling(void) { - if (var8005eef0) { + if (g_JoyCyclicPollingLocked) { joyDisableCyclicPolling(); - var8005eef0 = false; + g_JoyCyclicPollingLocked = false; } } -void joy00013938(void) +void joyUnlockCyclicPolling(void) { - if (!var8005eef0) { + if (!g_JoyCyclicPollingLocked) { joyEnableCyclicPolling(); - var8005eef0 = true; + g_JoyCyclicPollingLocked = true; } } -void joy00013974(u32 value) +void joySetPfsPollEnabled(bool enabled) { - var8005eeec = value; + g_JoyPfsPollEnabled = enabled; +} + +bool joyIsPfsPollEnabled(void) +{ + return g_JoyPfsPollEnabled; } #endif -#if VERSION >= VERSION_NTSC_1_0 -u32 joy00013980(void) -{ - return var8005eeec; -} -#endif - -/** - * Note: Some of the variables in this file are misnamed in NTSC beta. - * @TODO: Untangle these. - */ -void joy0001398c(s32 value) +void joySetPfsPollInterval(s32 value) { #if VERSION >= VERSION_NTSC_1_0 - var8005eee4 = var8005eee0 = value * 11000; + g_JoyPfsPollTimeRemaining = g_JoyPfsPollInterval = value * 11000; #else g_JoyNextPfsStateIndex = value; #endif } -void joy000139c8(void) +void joySetDefaultPfsPollInterval(void) { - joy0001398c(VERSION >= VERSION_NTSC_1_0 ? 10 : 30); + joySetPfsPollInterval(VERSION >= VERSION_NTSC_1_0 ? 10 : 30); } -#if VERSION < VERSION_NTSC_1_0 -// Same function as the one a couple above, just relocated -u32 joy00013980(void) -{ -#if VERSION >= VERSION_NTSC_1_0 - return var8005eeec; -#else - return var8005eed8; -#endif -} -#endif - -#if VERSION >= VERSION_NTSC_1_0 /** * Remove an item from the beginning of the g_JoyPfsStates array, * shift the rest of the array back and return the removed item. */ s32 joyShiftPfsStates(void) { +#if VERSION >= VERSION_NTSC_1_0 s32 pfsstate = 0; s32 i; @@ -195,8 +177,10 @@ s32 joyShiftPfsStates(void) } return pfsstate; -} +#else + return var8005eed8; #endif +} #if VERSION >= VERSION_NTSC_1_0 void joyRecordPfsState(u8 pfsstate) @@ -215,68 +199,69 @@ void joyRecordPfsState(u8 pfsstate) #if VERSION >= VERSION_NTSC_1_0 /** * Scan controllers for controller paks, but only under certain conditions. - * Seems to be timer based, or can be forced by passing 2 as arg0. + * + * force 0 = poll based on the configured poll frequency and if not disabled + * force 1 = poll based on the configured poll frequency even if disabled + * force 2 = poll now */ -void joyCheckPfs(s32 arg0) +void joyPollPfs(s32 force) { - static u32 thiscount = 0; // 8005eef4 - static u32 prevcount = 0; // 8005eef8 - static u32 doingit = false; // 8005eefc + static u32 thiscount = 0; + static u32 prevcount = 0; + static u32 doingit = false; u32 diffcount; u32 value; - if (var8005eedc - && (arg0 == 2 || (var8005eee0 && (arg0 || ((g_JoyCyclicPollDisableCount == 0 || var8005eef0 == 0) && var8005eeec)))) + if (g_JoyPfsPollMasterEnabled + && (force == 2 || (g_JoyPfsPollInterval && (force || ((g_JoyCyclicPollDisableCount == 0 || !g_JoyCyclicPollingLocked) && g_JoyPfsPollEnabled)))) && !doingit) { doingit = true; prevcount = thiscount; thiscount = osGetCount(); diffcount = (thiscount - prevcount) / 256; - value = var8005eee0 * 2; + value = g_JoyPfsPollInterval * 2; if (diffcount > value) { diffcount = value; } - var8005eee4 -= diffcount; + g_JoyPfsPollTimeRemaining -= diffcount; - if (var8005eee4 < 0 - || arg0 == 2 - || (arg0 == 1 && var8005eee4 < 0 && var8005eee0 < -var8005eee4)) { + if (g_JoyPfsPollTimeRemaining < 0 + || force == 2 + || (force == 1 && g_JoyPfsPollTimeRemaining < 0 && -g_JoyPfsPollTimeRemaining > g_JoyPfsPollInterval)) { u8 bitpattern = 0; - var8005eee8++; + g_JoyPfsPollCount++; - if (arg0) { + if (force) { joyDisableCyclicPolling(); } osPfsIsPlug(&g_PiMesgQueue, &bitpattern); - if (arg0) { + if (force) { joyEnableCyclicPolling(); } - bitpattern |= 0x10; + bitpattern |= 0x10; // eeprom joyRecordPfsState(bitpattern); - var8005eee4 = var8005eee0; + g_JoyPfsPollTimeRemaining = g_JoyPfsPollInterval; } doingit = false; } #if VERSION < VERSION_PAL_BETA - if (arg0) { - // empty - } + if (force); #endif } #endif /** - * "Temporarily" because the next time joyCheckPfs runs, the true state will be + * "Temporarily" because the next time joyPollPfs runs, the true state will be * recorded. * * Note that var8005eed8 is always zero, so this record will suggest that this @@ -527,8 +512,8 @@ void joy00014238(void) doingit = true; for (i = 0; i < NUM_PADS; i++) { - if (joy000155f4(i) == PAK010_13) { - pakSetUnk010(i, PAK010_11); + if (joyGetPakState2(i) == PAKSTATE_13) { + pakSetState(i, PAKSTATE_READY); } } @@ -551,8 +536,8 @@ void joyDebugJoy(void) #endif #if VERSION >= VERSION_NTSC_1_0 - if (g_Vars.paksconnected) { - joyCheckPfs(1); + if (g_Vars.paksneededformenu) { + joyPollPfs(1); } #endif @@ -652,7 +637,7 @@ void joysHandleRetrace(void) var8005ee68++; #if VERSION >= VERSION_NTSC_1_0 - joyCheckPfs(0); + joyPollPfs(0); #endif return; } @@ -678,7 +663,7 @@ void joysHandleRetrace(void) if (g_JoyInitDone) { #if VERSION >= VERSION_NTSC_1_0 if (var8005ee68) { - joyCheckPfs(0); + joyPollPfs(0); return; } #endif @@ -701,7 +686,7 @@ void joysHandleRetrace(void) joy00014238(); #if VERSION >= VERSION_NTSC_1_0 - joyCheckPfs(0); + joyPollPfs(0); #else joy0001509cnb(); #endif @@ -1078,14 +1063,14 @@ void joyStopRumble(s8 arg0, bool disablepolling) } } -s32 joy000155b4(s8 device) +s32 joyGetPakState(s8 device) { - return g_Paks[device].unk010; + return g_Paks[device].state; } -s32 joy000155f4(s8 device) +s32 joyGetPakState2(s8 device) { - return joy000155b4(device); + return joyGetPakState(device); } void joysTickRumble(void) @@ -1093,7 +1078,7 @@ void joysTickRumble(void) s32 i; for (i = 0; i < NUM_PADS; i++) { - if (g_Paks[i].unk010 == PAK010_11 && g_Paks[i].type == PAKTYPE_RUMBLE) { + if (g_Paks[i].state == PAKSTATE_READY && g_Paks[i].type == PAKTYPE_RUMBLE) { switch (g_Paks[i].rumblestate) { case RUMBLESTATE_ENABLED_STARTING: g_Paks[i].rumblestate = RUMBLESTATE_ENABLED_RUMBLING; diff --git a/src/lib/main.c b/src/lib/main.c index be7d63a73..91f21573b 100644 --- a/src/lib/main.c +++ b/src/lib/main.c @@ -768,7 +768,7 @@ void mainLoop(void) if (g_DoBootPakMenu) { #if VERSION >= VERSION_NTSC_1_0 - g_Vars.unk0004e4 = 0xfd; + g_Vars.pakstocheck = 0xfd; #endif g_StageNum = STAGE_BOOTPAKMENU; }