* store all 32 matrix stack entries in savestates instead of 31.

* bump savestate version up. will break compatibility, but the alternative would be guessing the missing matrix entries somehow, so blarg.
* avoid relocating the savefile if loading a savestate fails.
This commit is contained in:
StapleButter 2018-11-05 16:14:48 +01:00
parent 9b32418367
commit fa4fa164cb
3 changed files with 19 additions and 13 deletions

View File

@ -387,8 +387,8 @@ void DoSavestate(Savestate* file)
file->VarArray(TexMatrix, 16*4);
file->VarArray(ProjMatrixStack, 16*4);
file->VarArray(PosMatrixStack, 31*16*4);
file->VarArray(VecMatrixStack, 31*16*4);
file->VarArray(PosMatrixStack, 32*16*4);
file->VarArray(VecMatrixStack, 32*16*4);
file->VarArray(TexMatrixStack, 16*4);
file->Var32((u32*)&ProjMatrixStackPointer);

View File

@ -22,7 +22,7 @@
#include <stdio.h>
#include "types.h"
#define SAVESTATE_MAJOR 1
#define SAVESTATE_MAJOR 2
#define SAVESTATE_MINOR 0
class Savestate

View File

@ -922,6 +922,8 @@ void LoadState(int slot)
NDS::DoSavestate(backup);
delete backup;
bool failed = false;
Savestate* state = new Savestate(filename, false);
if (state->Error)
{
@ -931,11 +933,14 @@ void LoadState(int slot)
// current state might be crapoed, so restore from sane backup
state = new Savestate("timewarp.mln", false);
failed = true;
}
NDS::DoSavestate(state);
delete state;
if (!failed)
{
if (Config::SavestateRelocSRAM && ROMPath[0]!='\0')
{
strncpy(PrevSRAMPath, SRAMPath, 1024);
@ -950,6 +955,7 @@ void LoadState(int slot)
SavestateLoaded = true;
uiMenuItemEnable(MenuItem_UndoStateLoad);
}
EmuRunning = prevstatus;
}