savestate undo 2.0rc1: error message if undo fails (nothing to be undone) & fixed/oops: dont undo the last savestate
This commit is contained in:
parent
a1f2f7634f
commit
aaf17df733
|
@ -284,6 +284,15 @@ INT32 BurnStateSaveEmbed(FILE* fp, INT32 nOffset, INT32 bAll)
|
|||
return nDefLen;
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
int FileExists(const TCHAR *fileName)
|
||||
{
|
||||
DWORD dwAttrib = GetFileAttributes(fileName);
|
||||
return (dwAttrib != INVALID_FILE_ATTRIBUTES &&
|
||||
!(dwAttrib & FILE_ATTRIBUTE_DIRECTORY));
|
||||
}
|
||||
#endif
|
||||
|
||||
#define MAX_STATEBACKUPS 10
|
||||
// SaveState Undo - restores the last savestate backup file. Windows-only at the moment.
|
||||
INT32 BurnStateUNDO(TCHAR* szName)
|
||||
|
@ -296,26 +305,33 @@ INT32 BurnStateUNDO(TCHAR* szName)
|
|||
derp.fs.backup2 -> derpfs.backup1
|
||||
derp.fs.backup3 -> derpfs.backup2
|
||||
*/
|
||||
INT32 cantundo = 0;
|
||||
|
||||
for (INT32 i = 0; i <= MAX_STATEBACKUPS; i++) {
|
||||
TCHAR szBackupNameTo[1024] = _T("");
|
||||
TCHAR szBackupNameFrom[1024] = _T("");
|
||||
TCHAR szBackupNamePrev[1024] = _T("");
|
||||
|
||||
if (i == 0) {
|
||||
_stprintf(szBackupNameTo, _T("%s.UNDO"), szName);// game.fs -> game.fs.UNDO
|
||||
DeleteFileW(szBackupNameTo);
|
||||
MoveFileW(szName, szBackupNameTo);
|
||||
_stprintf(szBackupNamePrev, _T("%s.backup0"), szName);
|
||||
if (FileExists(szName) && FileExists(szBackupNamePrev)) {
|
||||
DeleteFileW(szBackupNameTo);
|
||||
MoveFileW(szName, szBackupNameTo);
|
||||
} else {
|
||||
cantundo = 1;
|
||||
}
|
||||
|
||||
_stprintf(szBackupNameTo, _T("%s"), szName);// game.fs
|
||||
} else {
|
||||
_stprintf(szBackupNameTo, _T("%s.backup%d"), szName, i - 1); //game.fs.backup0
|
||||
}
|
||||
_stprintf(szBackupNameFrom, _T("%s.backup%d"), szName, i); //game.fs.backup1
|
||||
//bprintf(0, _T("%s -> %s\n"), szBackupNameFrom, szBackupNameTo);
|
||||
//bprintf(0, _T("%d: %s -> %s\n"), i, szBackupNameFrom, szBackupNameTo);
|
||||
MoveFileW(szBackupNameFrom, szBackupNameTo);
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
return cantundo;
|
||||
}
|
||||
|
||||
// State save
|
||||
|
|
|
@ -373,7 +373,7 @@ int InpcCreate();
|
|||
extern int bDrvSaveAll;
|
||||
int StatedAuto(int bSave);
|
||||
int StatedLoad(int nSlot);
|
||||
void StatedUNDO(int nSlot);
|
||||
int StatedUNDO(int nSlot);
|
||||
int StatedSave(int nSlot);
|
||||
|
||||
// numdial.cpp
|
||||
|
|
|
@ -1080,16 +1080,18 @@ static void OnCommand(HWND /*hDlg*/, int id, HWND /*hwndCtl*/, UINT codeNotify)
|
|||
PausedRedraw();
|
||||
break;
|
||||
}
|
||||
case MENU_STATE_UNDO: {
|
||||
case MENU_STATE_UNDO:
|
||||
if (bDrvOkay) {
|
||||
TCHAR szString[256] = _T("state undo");
|
||||
|
||||
StatedUNDO(nSavestateSlot);
|
||||
VidSNewShortMsg(szString);
|
||||
PausedRedraw();
|
||||
TCHAR szStringFailed[256] = _T("state: nothing to undo");
|
||||
if (!StatedUNDO(nSavestateSlot)) {
|
||||
VidSNewShortMsg(szString);
|
||||
} else {
|
||||
VidSNewShortMsg(szStringFailed);
|
||||
}
|
||||
break;
|
||||
PausedRedraw();
|
||||
}
|
||||
break;
|
||||
case MENU_STATE_LOAD_SLOT:
|
||||
if (bDrvOkay && !kNetGame) {
|
||||
if (StatedLoad(nSavestateSlot) == 0) {
|
||||
|
|
|
@ -45,12 +45,13 @@ static void CreateStateName(int nSlot)
|
|||
_stprintf(szChoice, _T("./savestates/%s slot %02x.fs"), BurnDrvGetText(DRV_NAME), nSlot);
|
||||
}
|
||||
|
||||
void StatedUNDO(int nSlot)
|
||||
int StatedUNDO(int nSlot)
|
||||
{
|
||||
if (nSlot) {
|
||||
CreateStateName(nSlot);
|
||||
BurnStateUNDO(szChoice);
|
||||
}
|
||||
if (nSlot) {
|
||||
CreateStateName(nSlot);
|
||||
return BurnStateUNDO(szChoice);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int StatedLoad(int nSlot)
|
||||
|
|
Loading…
Reference in New Issue