Changed rewind to auto-save
This commit is contained in:
parent
18c4e20c21
commit
3eecd0033e
|
@ -47,7 +47,7 @@ static struct
|
||||||
//{ EMUCMD_FDS_SIDE_SELECT, SCAN_F6, },
|
//{ EMUCMD_FDS_SIDE_SELECT, SCAN_F6, },
|
||||||
{ EMUCMD_MOVIE_INPUT_DISPLAY_TOGGLE, SCAN_COMMA, },
|
{ EMUCMD_MOVIE_INPUT_DISPLAY_TOGGLE, SCAN_COMMA, },
|
||||||
//{ EMUCMD_MOVIE_READONLY_TOGGLE, SCAN_8 | CMD_KEY_SHIFT, },*/
|
//{ EMUCMD_MOVIE_READONLY_TOGGLE, SCAN_8 | CMD_KEY_SHIFT, },*/
|
||||||
//{ EMUCMD_MISC_REWIND, SCAN_R, }, Removed until rewind is fixed?
|
//{ EMUCMD_MISC_AUTOSAVE, SCAN_R, }, adelikat - Since Auto-save is disabled by default, so should the hotkey mapping
|
||||||
//mbg 7/31/06 - these have been removed as defaults until we decide whether hotkey philosophy permits them
|
//mbg 7/31/06 - these have been removed as defaults until we decide whether hotkey philosophy permits them
|
||||||
{ EMUCMD_SAVE_STATE_SLOT_0, SCAN_F10 | CMD_KEY_SHIFT, },
|
{ EMUCMD_SAVE_STATE_SLOT_0, SCAN_F10 | CMD_KEY_SHIFT, },
|
||||||
{ EMUCMD_SAVE_STATE_SLOT_1, SCAN_F1 | CMD_KEY_SHIFT, },
|
{ EMUCMD_SAVE_STATE_SLOT_1, SCAN_F1 | CMD_KEY_SHIFT, },
|
||||||
|
|
|
@ -845,6 +845,7 @@ void CreateMemWatch()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (MemWatchLoadFileOnStart) OpenMemwatchRecentFile(0);
|
if (MemWatchLoadFileOnStart) OpenMemwatchRecentFile(0);
|
||||||
|
else fileChanged = false;
|
||||||
}
|
}
|
||||||
void AddMemWatch(char memaddress[32])
|
void AddMemWatch(char memaddress[32])
|
||||||
{
|
{
|
||||||
|
|
|
@ -78,7 +78,7 @@ BEGIN
|
||||||
MENUITEM "Pause After Playback", MENU_PAUSEAFTERPLAYBACK
|
MENUITEM "Pause After Playback", MENU_PAUSEAFTERPLAYBACK
|
||||||
MENUITEM "Enable Run in Background", MENU_RUN_IN_BACKGROUND
|
MENUITEM "Enable Run in Background", MENU_RUN_IN_BACKGROUND
|
||||||
MENUITEM "Enable Background Input", MENU_BACKGROUND_INPUT
|
MENUITEM "Enable Background Input", MENU_BACKGROUND_INPUT
|
||||||
MENUITEM "Enable Rewind", MENU_ENABLE_REWIND
|
MENUITEM "Enable Auto-save", MENU_ENABLE_AUTOSAVE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "Game Genie", MENU_GAME_GENIE
|
MENUITEM "Game Genie", MENU_GAME_GENIE
|
||||||
MENUITEM "PAL Emulation", MENU_PAL
|
MENUITEM "PAL Emulation", MENU_PAL
|
||||||
|
|
|
@ -221,7 +221,7 @@
|
||||||
#define IDC_LABEL_AUTHORINFO 303
|
#define IDC_LABEL_AUTHORINFO 303
|
||||||
#define IDC_BTN_CHEAT_UPD 303
|
#define IDC_BTN_CHEAT_UPD 303
|
||||||
#define IDC_VIDEOCONFIG_YSCALE 303
|
#define IDC_VIDEOCONFIG_YSCALE 303
|
||||||
#define MENU_ENABLE_REWIND 304
|
#define MENU_ENABLE_AUTOSAVE 304
|
||||||
#define IDC_LABEL_ROMUSED 304
|
#define IDC_LABEL_ROMUSED 304
|
||||||
#define IDC_BTN_CHEAT_RESET 304
|
#define IDC_BTN_CHEAT_RESET 304
|
||||||
#define IDC_VIDEOCONFIG_SCALER_FS 304
|
#define IDC_VIDEOCONFIG_SCALER_FS 304
|
||||||
|
|
|
@ -62,7 +62,7 @@
|
||||||
// Extern variables
|
// Extern variables
|
||||||
|
|
||||||
extern FCEUGI *GameInfo;
|
extern FCEUGI *GameInfo;
|
||||||
extern int EnableRewind;
|
extern int EnableAutosave;
|
||||||
|
|
||||||
// Extern functions
|
// Extern functions
|
||||||
|
|
||||||
|
@ -271,7 +271,7 @@ void UpdateCheckedMenuItems()
|
||||||
CheckMenuItem(fceumenu, MENU_ALTERNATE_AB, GetAutoFireDesynch() ? MF_CHECKED : MF_UNCHECKED);
|
CheckMenuItem(fceumenu, MENU_ALTERNATE_AB, GetAutoFireDesynch() ? MF_CHECKED : MF_UNCHECKED);
|
||||||
|
|
||||||
CheckMenuItem(fceumenu, MENU_BACKGROUND_INPUT, EnableBackgroundInput ? MF_CHECKED : MF_UNCHECKED);
|
CheckMenuItem(fceumenu, MENU_BACKGROUND_INPUT, EnableBackgroundInput ? MF_CHECKED : MF_UNCHECKED);
|
||||||
CheckMenuItem(fceumenu, MENU_ENABLE_REWIND, EnableRewind ? MF_CHECKED : MF_UNCHECKED);
|
CheckMenuItem(fceumenu, MENU_ENABLE_AUTOSAVE, EnableAutosave ? MF_CHECKED : MF_UNCHECKED);
|
||||||
|
|
||||||
int AutoFirePatternIDs[] = {
|
int AutoFirePatternIDs[] = {
|
||||||
MENU_AUTOFIRE_PATTERN_1,
|
MENU_AUTOFIRE_PATTERN_1,
|
||||||
|
@ -931,8 +931,8 @@ LRESULT FAR PASCAL AppWndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
|
||||||
UpdateCheckedMenuItems();
|
UpdateCheckedMenuItems();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MENU_ENABLE_REWIND:
|
case MENU_ENABLE_AUTOSAVE:
|
||||||
EnableRewind ^= 1;
|
EnableAutosave ^= 1;
|
||||||
UpdateCheckedMenuItems();
|
UpdateCheckedMenuItems();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
48
src/fceu.cpp
48
src/fceu.cpp
|
@ -120,11 +120,11 @@ int frameAdvanceDelay;
|
||||||
//indicates that the emulation core just frame advanced (consumed the frame advance state and paused)
|
//indicates that the emulation core just frame advanced (consumed the frame advance state and paused)
|
||||||
bool JustFrameAdvanced=false;
|
bool JustFrameAdvanced=false;
|
||||||
|
|
||||||
static int RewindStatus[4] = {0, 0, 0, 0}; //is it safe to load rewind state
|
static int AutosaveStatus[4] = {0, 0, 0, 0}; //is it safe to load Auto-savestate
|
||||||
static int RewindIndex = 0; //which rewind state we're on
|
static int AutosaveIndex = 0; //which Auto-savestate we're on
|
||||||
|
|
||||||
// Flag that indicates whether the rewind option is enabled or not
|
// Flag that indicates whether the Auto-save option is enabled or not
|
||||||
int EnableRewind = 0;
|
int EnableAutosave = 0;
|
||||||
|
|
||||||
///a wrapper for unzip.c
|
///a wrapper for unzip.c
|
||||||
extern "C" FILE *FCEUI_UTF8fopen_C(const char *n, const char *m) { return ::FCEUD_UTF8fopen(n,m); }
|
extern "C" FILE *FCEUI_UTF8fopen_C(const char *n, const char *m) { return ::FCEUD_UTF8fopen(n,m); }
|
||||||
|
@ -333,8 +333,8 @@ FCEUGI *FCEUI_LoadGame(const char *name, int OverwriteVidMode)
|
||||||
|
|
||||||
ResetGameLoaded();
|
ResetGameLoaded();
|
||||||
|
|
||||||
RewindStatus[0] = RewindStatus[1] = 0;
|
AutosaveStatus[0] = AutosaveStatus[1] = 0;
|
||||||
RewindStatus[2] = RewindStatus[3] = 0;
|
AutosaveStatus[2] = AutosaveStatus[3] = 0;
|
||||||
|
|
||||||
CloseGame();
|
CloseGame();
|
||||||
GameInfo = new FCEUGI;
|
GameInfo = new FCEUGI;
|
||||||
|
@ -485,7 +485,7 @@ void AutoFire(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdateRewind(void);
|
void UpdateAutosave(void);
|
||||||
|
|
||||||
///Emulates a single frame.
|
///Emulates a single frame.
|
||||||
|
|
||||||
|
@ -524,7 +524,7 @@ void FCEUI_Emulate(uint8 **pXBuf, int32 **SoundBuf, int32 *SoundBufSize, int ski
|
||||||
if(!FCEU_BotMode())
|
if(!FCEU_BotMode())
|
||||||
{
|
{
|
||||||
AutoFire();
|
AutoFire();
|
||||||
UpdateRewind();
|
UpdateAutosave();
|
||||||
}
|
}
|
||||||
|
|
||||||
FCEU_UpdateInput();
|
FCEU_UpdateInput();
|
||||||
|
@ -783,45 +783,45 @@ void FCEUI_FrameAdvance(void)
|
||||||
frameAdvanceDelay = 0;
|
frameAdvanceDelay = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int RewindCounter = 0;
|
static int AutosaveCounter = 0;
|
||||||
|
|
||||||
void UpdateRewind(void)
|
void UpdateAutosave(void)
|
||||||
{
|
{
|
||||||
if(!EnableRewind)
|
if(!EnableAutosave)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
char * f;
|
char * f;
|
||||||
RewindCounter = (RewindCounter + 1) % 256;
|
AutosaveCounter = (AutosaveCounter + 1) % 256;
|
||||||
if(RewindCounter == 0)
|
if(AutosaveCounter == 0)
|
||||||
{
|
{
|
||||||
RewindIndex = (RewindIndex + 1) % 4;
|
AutosaveIndex = (AutosaveIndex + 1) % 4;
|
||||||
f = strdup(FCEU_MakeFName(FCEUMKF_REWINDSTATE,RewindIndex,0).c_str());
|
f = strdup(FCEU_MakeFName(FCEUMKF_AUTOSTATE,AutosaveIndex,0).c_str());
|
||||||
FCEUSS_Save(f);
|
FCEUSS_Save(f);
|
||||||
free(f);
|
free(f);
|
||||||
RewindStatus[RewindIndex] = 1;
|
AutosaveStatus[AutosaveIndex] = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FCEUI_Rewind(void)
|
void FCEUI_Autosave(void)
|
||||||
{
|
{
|
||||||
if(!EnableRewind)
|
if(!EnableAutosave)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if(RewindStatus[RewindIndex] == 1)
|
if(AutosaveStatus[AutosaveIndex] == 1)
|
||||||
{
|
{
|
||||||
char * f;
|
char * f;
|
||||||
f = strdup(FCEU_MakeFName(FCEUMKF_REWINDSTATE,RewindIndex,0).c_str());
|
f = strdup(FCEU_MakeFName(FCEUMKF_AUTOSTATE,AutosaveIndex,0).c_str());
|
||||||
FCEUSS_Load(f);
|
FCEUSS_Load(f);
|
||||||
free(f);
|
free(f);
|
||||||
|
|
||||||
//Set pointer to previous available slot
|
//Set pointer to previous available slot
|
||||||
if(RewindStatus[(RewindIndex + 3)%4] == 1)
|
if(AutosaveStatus[(AutosaveIndex + 3)%4] == 1)
|
||||||
{
|
{
|
||||||
RewindIndex = (RewindIndex + 3)%4;
|
AutosaveIndex = (AutosaveIndex + 3)%4;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Reset time to next rewind save
|
//Reset time to next Auto-save
|
||||||
RewindCounter = 0;
|
AutosaveCounter = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@ void PowerNES(void);
|
||||||
void SetAutoFireOffset(int offset);
|
void SetAutoFireOffset(int offset);
|
||||||
void SetAutoFirePattern(int onframes, int offframes);
|
void SetAutoFirePattern(int onframes, int offframes);
|
||||||
void AutoFire(void);
|
void AutoFire(void);
|
||||||
void FCEUI_Rewind(void);
|
void FCEUI_Autosave(void);
|
||||||
|
|
||||||
//mbg 7/23/06
|
//mbg 7/23/06
|
||||||
char *FCEUI_GetAboutString();
|
char *FCEUI_GetAboutString();
|
||||||
|
|
14
src/file.cpp
14
src/file.cpp
|
@ -459,7 +459,7 @@ uint64 FCEU_ftell(FCEUFILE *fp)
|
||||||
return ftell((FILE *)fp->fp);
|
return ftell((FILE *)fp->fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FCEU_rewind(FCEUFILE *fp)
|
void FCEU_autosave(FCEUFILE *fp)
|
||||||
{
|
{
|
||||||
if(fp->type==1)
|
if(fp->type==1)
|
||||||
{
|
{
|
||||||
|
@ -470,7 +470,7 @@ void FCEU_rewind(FCEUFILE *fp)
|
||||||
((MEMWRAP *)(fp->fp))->location=0;
|
((MEMWRAP *)(fp->fp))->location=0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
/* Rewind */
|
//Autosave load
|
||||||
fseek((FILE*)fp->fp,0,SEEK_SET); //mbg merge 7/17/06 - added cast to FILE*
|
fseek((FILE*)fp->fp,0,SEEK_SET); //mbg merge 7/17/06 - added cast to FILE*
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -787,24 +787,24 @@ std::string FCEU_MakeFName(int type, int id1, char *cd1)
|
||||||
sprintf(ret,"%s"PSS"sav"PSS"%s.%s",BaseDirectory.c_str(),FileBase,cd1);
|
sprintf(ret,"%s"PSS"sav"PSS"%s.%s",BaseDirectory.c_str(),FileBase,cd1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case FCEUMKF_REWINDSTATE:
|
case FCEUMKF_AUTOSTATE:
|
||||||
if(odirs[FCEUIOD_STATES])
|
if(odirs[FCEUIOD_STATES])
|
||||||
{
|
{
|
||||||
sprintf(ret,"%s"PSS"rewind%d.fcs",odirs[FCEUIOD_STATES],id1);
|
sprintf(ret,"%s"PSS"autosave%d.fcs",odirs[FCEUIOD_STATES],id1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sprintf(ret,"%s"PSS"fcs"PSS"rewind%d.fcs",BaseDirectory.c_str(),id1);
|
sprintf(ret,"%s"PSS"fcs"PSS"autosave%d.fcs",BaseDirectory.c_str(),id1);
|
||||||
}
|
}
|
||||||
if(stat(ret,&tmpstat)==-1)
|
if(stat(ret,&tmpstat)==-1)
|
||||||
{
|
{
|
||||||
if(odirs[FCEUIOD_STATES])
|
if(odirs[FCEUIOD_STATES])
|
||||||
{
|
{
|
||||||
sprintf(ret,"%s"PSS"rewind%d.fcs",odirs[FCEUIOD_STATES],id1);
|
sprintf(ret,"%s"PSS"autosave%d.fcs",odirs[FCEUIOD_STATES],id1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sprintf(ret,"%s"PSS"fcs"PSS"rewind%d.fcs",BaseDirectory.c_str(),id1);
|
sprintf(ret,"%s"PSS"fcs"PSS"autosave%d.fcs",BaseDirectory.c_str(),id1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -14,7 +14,7 @@ uint64 FCEU_fread(void *ptr, size_t size, size_t nmemb, FCEUFILE*);
|
||||||
uint64 FCEU_fwrite(void *ptr, size_t size, size_t nmemb, FCEUFILE*);
|
uint64 FCEU_fwrite(void *ptr, size_t size, size_t nmemb, FCEUFILE*);
|
||||||
int FCEU_fseek(FCEUFILE*, long offset, int whence);
|
int FCEU_fseek(FCEUFILE*, long offset, int whence);
|
||||||
uint64 FCEU_ftell(FCEUFILE*);
|
uint64 FCEU_ftell(FCEUFILE*);
|
||||||
void FCEU_rewind(FCEUFILE*);
|
void FCEU_autosave(FCEUFILE*);
|
||||||
int FCEU_read32le(uint32 *Bufo, FCEUFILE*);
|
int FCEU_read32le(uint32 *Bufo, FCEUFILE*);
|
||||||
int FCEU_read16le(uint16 *Bufo, FCEUFILE*);
|
int FCEU_read16le(uint16 *Bufo, FCEUFILE*);
|
||||||
int FCEU_fgetc(FCEUFILE*);
|
int FCEU_fgetc(FCEUFILE*);
|
||||||
|
@ -42,7 +42,7 @@ std::string FCEU_MakeFName(int type, int id1, char *cd1);
|
||||||
#define FCEUMKF_MOVIEGLOB 12
|
#define FCEUMKF_MOVIEGLOB 12
|
||||||
#define FCEUMKF_STATEGLOB 13
|
#define FCEUMKF_STATEGLOB 13
|
||||||
#define FCEUMKF_MOVIEGLOB2 14
|
#define FCEUMKF_MOVIEGLOB2 14
|
||||||
#define FCEUMKF_REWINDSTATE 15
|
#define FCEUMKF_AUTOSTATE 15
|
||||||
#define FCEUMKF_MEMW 16
|
#define FCEUMKF_MEMW 16
|
||||||
#define FCEUMKF_BBOT 17
|
#define FCEUMKF_BBOT 17
|
||||||
#define FCEUMKF_ROMS 18
|
#define FCEUMKF_ROMS 18
|
||||||
|
|
|
@ -738,7 +738,7 @@ struct EMUCMDTABLE FCEUI_CommandTable[]=
|
||||||
{ EMUCMD_VSUNI_TOGGLE_DIP_7, EMUCMDTYPE_VSUNI, CommandToggleDip, 0, 0, "Toggle Dipswitch 7", },
|
{ EMUCMD_VSUNI_TOGGLE_DIP_7, EMUCMDTYPE_VSUNI, CommandToggleDip, 0, 0, "Toggle Dipswitch 7", },
|
||||||
{ EMUCMD_VSUNI_TOGGLE_DIP_8, EMUCMDTYPE_VSUNI, CommandToggleDip, 0, 0, "Toggle Dipswitch 8", },
|
{ EMUCMD_VSUNI_TOGGLE_DIP_8, EMUCMDTYPE_VSUNI, CommandToggleDip, 0, 0, "Toggle Dipswitch 8", },
|
||||||
{ EMUCMD_VSUNI_TOGGLE_DIP_9, EMUCMDTYPE_VSUNI, CommandToggleDip, 0, 0, "Toggle Dipswitch 9", },
|
{ EMUCMD_VSUNI_TOGGLE_DIP_9, EMUCMDTYPE_VSUNI, CommandToggleDip, 0, 0, "Toggle Dipswitch 9", },
|
||||||
{ EMUCMD_MISC_REWIND, EMUCMDTYPE_MISC, FCEUI_Rewind, 0, 0, "Rewind", },
|
{ EMUCMD_MISC_AUTOSAVE, EMUCMDTYPE_MISC, FCEUI_Autosave, 0, 0, "Auto-save", },
|
||||||
{ EMUCMD_MISC_SHOWSTATES, EMUCMDTYPE_MISC, ViewSlots, 0,0, "View save slots", },
|
{ EMUCMD_MISC_SHOWSTATES, EMUCMDTYPE_MISC, ViewSlots, 0,0, "View save slots", },
|
||||||
{ EMUCMD_MISC_USE_INPUT_PRESET_1, EMUCMDTYPE_MISC, CommandUsePreset, 0,0, "Use Input Preset 1", },
|
{ EMUCMD_MISC_USE_INPUT_PRESET_1, EMUCMDTYPE_MISC, CommandUsePreset, 0,0, "Use Input Preset 1", },
|
||||||
{ EMUCMD_MISC_USE_INPUT_PRESET_2, EMUCMDTYPE_MISC, CommandUsePreset, 0,0, "Use Input Preset 2", },
|
{ EMUCMD_MISC_USE_INPUT_PRESET_2, EMUCMDTYPE_MISC, CommandUsePreset, 0,0, "Use Input Preset 2", },
|
||||||
|
|
|
@ -221,7 +221,7 @@ enum EMUCMD
|
||||||
EMUCMD_VSUNI_TOGGLE_DIP_7,
|
EMUCMD_VSUNI_TOGGLE_DIP_7,
|
||||||
EMUCMD_VSUNI_TOGGLE_DIP_8,
|
EMUCMD_VSUNI_TOGGLE_DIP_8,
|
||||||
EMUCMD_VSUNI_TOGGLE_DIP_9,
|
EMUCMD_VSUNI_TOGGLE_DIP_9,
|
||||||
EMUCMD_MISC_REWIND,
|
EMUCMD_MISC_AUTOSAVE,
|
||||||
EMUCMD_MISC_SHOWSTATES,
|
EMUCMD_MISC_SHOWSTATES,
|
||||||
EMUCMD_MISC_USE_INPUT_PRESET_1,
|
EMUCMD_MISC_USE_INPUT_PRESET_1,
|
||||||
EMUCMD_MISC_USE_INPUT_PRESET_2,
|
EMUCMD_MISC_USE_INPUT_PRESET_2,
|
||||||
|
|
Loading…
Reference in New Issue