ADDED option "File->Load Game->Do not change battery save" (currently GBA only)

This commit is contained in:
spacy51 2008-06-26 11:55:08 +00:00
parent 81a8b3cdd0
commit 785706fcbb
16 changed files with 108 additions and 3 deletions

View File

@ -77,6 +77,15 @@ void eepromReadGame(gzFile gzFile, int version)
} }
} }
void eepromReadGameSkip(gzFile gzFile, int version)
{
// skip the eeprom data in a save game
utilReadDataSkip(gzFile, eepromSaveData);
if(version >= SAVE_GAME_VERSION_3) {
utilGzSeek(gzFile, sizeof(int), SEEK_CUR);
utilGzSeek(gzFile, 0x2000, SEEK_CUR);
}
}
int eepromRead(u32 /* address */) int eepromRead(u32 /* address */)
{ {

View File

@ -22,6 +22,7 @@
extern void eepromSaveGame(gzFile _gzFile); extern void eepromSaveGame(gzFile _gzFile);
extern void eepromReadGame(gzFile _gzFile, int version); extern void eepromReadGame(gzFile _gzFile, int version);
extern void eepromReadGameSkip(gzFile _gzFile, int version);
extern int eepromRead(u32 address); extern int eepromRead(u32 address);
extern void eepromWrite(u32 address, u8 value); extern void eepromWrite(u32 address, u8 value);
extern void eepromInit(); extern void eepromInit();

View File

@ -97,6 +97,18 @@ void flashReadGame(gzFile gzFile, int version)
} }
} }
void flashReadGameSkip(gzFile gzFile, int version)
{
// skip the flash data in a save game
if(version < SAVE_GAME_VERSION_5)
utilReadDataSkip(gzFile, flashSaveData);
else if(version < SAVE_GAME_VERSION_7) {
utilReadDataSkip(gzFile, flashSaveData2);
} else {
utilReadDataSkip(gzFile, flashSaveData3);
}
}
void flashSetSize(int size) void flashSetSize(int size)
{ {
// log("Setting flash size to %d\n", size); // log("Setting flash size to %d\n", size);

View File

@ -22,6 +22,7 @@
extern void flashSaveGame(gzFile _gzFile); extern void flashSaveGame(gzFile _gzFile);
extern void flashReadGame(gzFile _gzFile, int version); extern void flashReadGame(gzFile _gzFile, int version);
extern void flashReadGameSkip(gzFile _gzFile, int version);
extern u8 flashRead(u32 address); extern u8 flashRead(u32 address);
extern void flashWrite(u32 address, u8 byte); extern void flashWrite(u32 address, u8 byte);
extern void flashDelayedWrite(u32 address, u8 byte); extern void flashDelayedWrite(u32 address, u8 byte);

View File

@ -50,6 +50,7 @@ bool speedHack = false;
int cpuSaveType = 0; int cpuSaveType = 0;
bool cheatsEnabled = true; bool cheatsEnabled = true;
bool mirroringEnable = false; bool mirroringEnable = false;
bool skipSaveGameBattery = false;
u8 *bios = NULL; u8 *bios = NULL;
u8 *rom = NULL; u8 *rom = NULL;

View File

@ -60,6 +60,7 @@ extern bool speedHack;
extern int cpuSaveType; extern int cpuSaveType;
extern bool cheatsEnabled; extern bool cheatsEnabled;
extern bool mirroringEnable; extern bool mirroringEnable;
extern bool skipSaveGameBattery;
extern u8 *bios; extern u8 *bios;
extern u8 *rom; extern u8 *rom;

View File

@ -57,6 +57,7 @@ extern u32 systemColorMap32[0x10000];
static int (ZEXPORT *utilGzWriteFunc)(gzFile, const voidp, unsigned int) = NULL; static int (ZEXPORT *utilGzWriteFunc)(gzFile, const voidp, unsigned int) = NULL;
static int (ZEXPORT *utilGzReadFunc)(gzFile, voidp, unsigned int) = NULL; static int (ZEXPORT *utilGzReadFunc)(gzFile, voidp, unsigned int) = NULL;
static int (ZEXPORT *utilGzCloseFunc)(gzFile) = NULL; static int (ZEXPORT *utilGzCloseFunc)(gzFile) = NULL;
static z_off_t (ZEXPORT *utilGzSeekFunc)(gzFile, z_off_t, int) = NULL;
bool utilWritePNGFile(const char *fileName, int w, int h, u8 *pix) bool utilWritePNGFile(const char *fileName, int w, int h, u8 *pix)
{ {
@ -631,6 +632,14 @@ void utilReadData(gzFile gzFile, variable_desc* data)
} }
} }
void utilReadDataSkip(gzFile gzFile, variable_desc* data)
{
while(data->address) {
utilGzSeek(gzFile, data->size, SEEK_CUR);
data++;
}
}
void utilWriteData(gzFile gzFile, variable_desc *data) void utilWriteData(gzFile gzFile, variable_desc *data)
{ {
while(data->address) { while(data->address) {
@ -644,6 +653,7 @@ gzFile utilGzOpen(const char *file, const char *mode)
utilGzWriteFunc = (int (ZEXPORT *)(void *,void * const, unsigned int))gzwrite; utilGzWriteFunc = (int (ZEXPORT *)(void *,void * const, unsigned int))gzwrite;
utilGzReadFunc = gzread; utilGzReadFunc = gzread;
utilGzCloseFunc = gzclose; utilGzCloseFunc = gzclose;
utilGzSeekFunc = gzseek;
return gzopen(file, mode); return gzopen(file, mode);
} }
@ -672,6 +682,11 @@ int utilGzClose(gzFile file)
return utilGzCloseFunc(file); return utilGzCloseFunc(file);
} }
z_off_t utilGzSeek(gzFile file, z_off_t offset, int whence)
{
return utilGzSeekFunc(file, offset, whence);
}
long utilGzMemTell(gzFile file) long utilGzMemTell(gzFile file)
{ {
return memtell(file); return memtell(file);

View File

@ -52,6 +52,7 @@ extern void utilPutDword(u8 *, u32);
extern void utilPutWord(u8 *, u16); extern void utilPutWord(u8 *, u16);
extern void utilWriteData(gzFile, variable_desc *); extern void utilWriteData(gzFile, variable_desc *);
extern void utilReadData(gzFile, variable_desc *); extern void utilReadData(gzFile, variable_desc *);
extern void utilReadDataSkip(gzFile, variable_desc *);
extern int utilReadInt(gzFile); extern int utilReadInt(gzFile);
extern void utilWriteInt(gzFile, int); extern void utilWriteInt(gzFile, int);
extern gzFile utilGzOpen(const char *file, const char *mode); extern gzFile utilGzOpen(const char *file, const char *mode);
@ -59,6 +60,7 @@ extern gzFile utilMemGzOpen(char *memory, int available, const char *mode);
extern int utilGzWrite(gzFile file, const voidp buffer, unsigned int len); extern int utilGzWrite(gzFile file, const voidp buffer, unsigned int len);
extern int utilGzRead(gzFile file, voidp buffer, unsigned int len); extern int utilGzRead(gzFile file, voidp buffer, unsigned int len);
extern int utilGzClose(gzFile file); extern int utilGzClose(gzFile file);
extern z_off_t utilGzSeek(gzFile file, z_off_t offset, int whence);
extern long utilGzMemTell(gzFile file); extern long utilGzMemTell(gzFile file);
extern void utilGBAFindSave(const u8 *, const int); extern void utilGBAFindSave(const u8 *, const int);
extern void utilUpdateSystemColorMaps(); extern void utilUpdateSystemColorMaps();

View File

@ -746,8 +746,15 @@ static bool CPUReadState(gzFile gzFile)
utilGzRead(gzFile, pix, 4*241*162); utilGzRead(gzFile, pix, 4*241*162);
utilGzRead(gzFile, ioMem, 0x400); utilGzRead(gzFile, ioMem, 0x400);
if(skipSaveGameBattery) {
// skip eeprom data
eepromReadGameSkip(gzFile, version);
// skip flash data
flashReadGameSkip(gzFile, version);
} else {
eepromReadGame(gzFile, version); eepromReadGame(gzFile, version);
flashReadGame(gzFile, version); flashReadGame(gzFile, version);
}
soundReadGame(gzFile, version); soundReadGame(gzFile, version);
if(version > SAVE_GAME_VERSION_1) { if(version > SAVE_GAME_VERSION_1) {

View File

@ -440,6 +440,8 @@ BEGIN_MESSAGE_MAP(MainWnd, CWnd)
ON_COMMAND(ID_PIXELFILTER_MULTI, &MainWnd::OnPixelfilterMultiThreading) ON_COMMAND(ID_PIXELFILTER_MULTI, &MainWnd::OnPixelfilterMultiThreading)
ON_UPDATE_COMMAND_UI(ID_PIXELFILTER_MULTI, &MainWnd::OnUpdatePixelfilterMultiThreading) ON_UPDATE_COMMAND_UI(ID_PIXELFILTER_MULTI, &MainWnd::OnUpdatePixelfilterMultiThreading)
ON_UPDATE_COMMAND_UI(ID_OPTIONS_SELECT_PLUGIN, &MainWnd::OnUpdateOptionsSelectPlugin) ON_UPDATE_COMMAND_UI(ID_OPTIONS_SELECT_PLUGIN, &MainWnd::OnUpdateOptionsSelectPlugin)
ON_COMMAND(ID_LOADGAME_DONOTCHANGEBATTERYSAVE, &MainWnd::OnLoadgameDonotchangebatterysave)
ON_UPDATE_COMMAND_UI(ID_LOADGAME_DONOTCHANGEBATTERYSAVE, &MainWnd::OnUpdateLoadgameDonotchangebatterysave)
END_MESSAGE_MAP() END_MESSAGE_MAP()

View File

@ -428,6 +428,8 @@ public:
afx_msg void OnPixelfilterMultiThreading(); afx_msg void OnPixelfilterMultiThreading();
afx_msg void OnUpdatePixelfilterMultiThreading(CCmdUI *pCmdUI); afx_msg void OnUpdatePixelfilterMultiThreading(CCmdUI *pCmdUI);
afx_msg void OnUpdateOptionsSelectPlugin(CCmdUI *pCmdUI); afx_msg void OnUpdateOptionsSelectPlugin(CCmdUI *pCmdUI);
afx_msg void OnLoadgameDonotchangebatterysave();
afx_msg void OnUpdateLoadgameDonotchangebatterysave(CCmdUI *pCmdUI);
}; };
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////

View File

@ -991,3 +991,14 @@ void MainWnd::OnUpdateFileLoadgameAutoloadmostrecent(CCmdUI* pCmdUI)
{ {
pCmdUI->SetCheck(theApp.autoLoadMostRecent); pCmdUI->SetCheck(theApp.autoLoadMostRecent);
} }
void MainWnd::OnLoadgameDonotchangebatterysave()
{
theApp.winSkipSaveGameBattery = !theApp.winSkipSaveGameBattery;
skipSaveGameBattery = theApp.winSkipSaveGameBattery;
}
void MainWnd::OnUpdateLoadgameDonotchangebatterysave(CCmdUI *pCmdUI)
{
pCmdUI->SetCheck(theApp.winSkipSaveGameBattery);
}

View File

@ -336,6 +336,7 @@ VBA::VBA()
wasPaused = false; wasPaused = false;
frameskipadjust = 0; frameskipadjust = 0;
autoLoadMostRecent = false; autoLoadMostRecent = false;
winSkipSaveGameBattery = false;
fsMaxScale = 0; fsMaxScale = 0;
romSize = 0; romSize = 0;
lastWindowed = VIDEO_3X; lastWindowed = VIDEO_3X;
@ -1761,6 +1762,9 @@ void VBA::loadSettings()
autoLoadMostRecent = regQueryDwordValue("autoLoadMostRecent", false) ? true : autoLoadMostRecent = regQueryDwordValue("autoLoadMostRecent", false) ? true :
false; false;
winSkipSaveGameBattery = regQueryDwordValue("winSkipSaveGameBattery", false) ? true : false;
skipSaveGameBattery = theApp.winSkipSaveGameBattery;
cheatsEnabled = regQueryDwordValue("cheatsEnabled", false) ? true : false; cheatsEnabled = regQueryDwordValue("cheatsEnabled", false) ? true : false;
fsMaxScale = regQueryDwordValue("fsMaxScale", 0); fsMaxScale = regQueryDwordValue("fsMaxScale", 0);
@ -2669,6 +2673,7 @@ void VBA::saveSettings()
regSetDwordValue("joypadDefault", joypadDefault); regSetDwordValue("joypadDefault", joypadDefault);
regSetDwordValue("autoLoadMostRecent", autoLoadMostRecent); regSetDwordValue("autoLoadMostRecent", autoLoadMostRecent);
regSetDwordValue("winSkipSaveGameBattery", winSkipSaveGameBattery);
regSetDwordValue("cheatsEnabled", cheatsEnabled); regSetDwordValue("cheatsEnabled", cheatsEnabled);
regSetDwordValue("fsMaxScale", fsMaxScale); regSetDwordValue("fsMaxScale", fsMaxScale);
regSetDwordValue("throttle", throttle); regSetDwordValue("throttle", throttle);

View File

@ -201,6 +201,7 @@ class VBA : public CWinApp
bool wasPaused; bool wasPaused;
int frameskipadjust; int frameskipadjust;
bool autoLoadMostRecent; bool autoLoadMostRecent;
bool winSkipSaveGameBattery;
int fsMaxScale; int fsMaxScale;
int romSize; int romSize;
VIDEO_SIZE lastWindowed; VIDEO_SIZE lastWindowed;

View File

@ -12,6 +12,38 @@
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS #undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// German (Germany) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)
#ifdef _WIN32
LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
#pragma code_page(1252)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE
BEGIN
"resource.\0"
END
3 TEXTINCLUDE
BEGIN
"\r\0"
END
#endif // APSTUDIO_INVOKED
#endif // German (Germany) resources
/////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources // English (U.S.) resources
@ -1515,6 +1547,7 @@ BEGIN
BEGIN BEGIN
MENUITEM "Most recent", ID_FILE_LOADGAME_MOSTRECENT MENUITEM "Most recent", ID_FILE_LOADGAME_MOSTRECENT
MENUITEM "Auto load most recent", ID_FILE_LOADGAME_AUTOLOADMOSTRECENT MENUITEM "Auto load most recent", ID_FILE_LOADGAME_AUTOLOADMOSTRECENT
MENUITEM "Do not change battery save", ID_LOADGAME_DONOTCHANGEBATTERYSAVE
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "Slot #1", ID_FILE_LOADGAME_SLOT1 MENUITEM "Slot #1", ID_FILE_LOADGAME_SLOT1
MENUITEM "Slot #2", ID_FILE_LOADGAME_SLOT2 MENUITEM "Slot #2", ID_FILE_LOADGAME_SLOT2

View File

@ -855,13 +855,15 @@
#define ID_FILE_OPEN_GBC 40358 #define ID_FILE_OPEN_GBC 40358
#define ID_OUTPUTAPI_XAUDIO2 40359 #define ID_OUTPUTAPI_XAUDIO2 40359
#define ID_PIXELFILTER_MULTI 40360 #define ID_PIXELFILTER_MULTI 40360
#define ID_EMULATOR_LOADSTATESHOULD 40361
#define ID_LOADGAME_DONOTCHANGEBATTERYSAVE 40362
// Next default values for new objects // Next default values for new objects
// //
#ifdef APSTUDIO_INVOKED #ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS #ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 163 #define _APS_NEXT_RESOURCE_VALUE 163
#define _APS_NEXT_COMMAND_VALUE 40361 #define _APS_NEXT_COMMAND_VALUE 40363
#define _APS_NEXT_CONTROL_VALUE 1285 #define _APS_NEXT_CONTROL_VALUE 1285
#define _APS_NEXT_SYMED_VALUE 103 #define _APS_NEXT_SYMED_VALUE 103
#endif #endif