break tasedit. but on the way to making it better!
This commit is contained in:
parent
b4021afc58
commit
9a7da827a2
|
@ -2,6 +2,7 @@
|
||||||
#include "fceu.h"
|
#include "fceu.h"
|
||||||
#include "drawing.h"
|
#include "drawing.h"
|
||||||
#include "video.h"
|
#include "video.h"
|
||||||
|
#include "movie.h"
|
||||||
|
|
||||||
static uint8 Font6x5[594] =
|
static uint8 Font6x5[594] =
|
||||||
{
|
{
|
||||||
|
@ -307,12 +308,12 @@ void FCEU_DrawRecordingStatus(uint8* XBuf)
|
||||||
if(FCEUD_ShowStatusIcon())
|
if(FCEUD_ShowStatusIcon())
|
||||||
{
|
{
|
||||||
bool hasPlayRecIcon = false;
|
bool hasPlayRecIcon = false;
|
||||||
if(FCEUI_IsMovieActive()>0)
|
if(FCEUMOV_Mode(MOVIEMODE_RECORD))
|
||||||
{
|
{
|
||||||
drawstatus(XBuf,2,28,0);
|
drawstatus(XBuf,2,28,0);
|
||||||
hasPlayRecIcon = true;
|
hasPlayRecIcon = true;
|
||||||
}
|
}
|
||||||
else if(FCEUI_IsMovieActive()<0)
|
else if(FCEUMOV_Mode(MOVIEMODE_PLAY))
|
||||||
{
|
{
|
||||||
drawstatus(XBuf,1,28,0);
|
drawstatus(XBuf,1,28,0);
|
||||||
hasPlayRecIcon = true;
|
hasPlayRecIcon = true;
|
||||||
|
|
18
src/driver.h
18
src/driver.h
|
@ -213,7 +213,7 @@ void FCEUI_SaveMovie(char *fname, uint8 flags);
|
||||||
void FCEUI_LoadMovie(char *fname, bool read_only, int _stopframe);
|
void FCEUI_LoadMovie(char *fname, bool read_only, int _stopframe);
|
||||||
void FCEUI_MoviePlayFromBeginning(void);
|
void FCEUI_MoviePlayFromBeginning(void);
|
||||||
void FCEUI_StopMovie(void);
|
void FCEUI_StopMovie(void);
|
||||||
int FCEUI_IsMovieActive(void);
|
//int FCEUI_IsMovieActive(void);
|
||||||
int FCEUI_MovieGetInfo(const char* fname, MOVIE_INFO* /* [in, out] */ info);
|
int FCEUI_MovieGetInfo(const char* fname, MOVIE_INFO* /* [in, out] */ info);
|
||||||
char* FCEUI_MovieGetCurrentName(int addSlotNumber);
|
char* FCEUI_MovieGetCurrentName(int addSlotNumber);
|
||||||
void FCEUI_MovieToggleReadOnly(void);
|
void FCEUI_MovieToggleReadOnly(void);
|
||||||
|
@ -312,12 +312,12 @@ void FCEUD_OnCloseGame(void);
|
||||||
void FCEUI_FrameAdvance(void);
|
void FCEUI_FrameAdvance(void);
|
||||||
void FCEUI_FrameAdvanceEnd(void);
|
void FCEUI_FrameAdvanceEnd(void);
|
||||||
|
|
||||||
/* AVI Output */
|
//AVI Output
|
||||||
int FCEUI_AviBegin(const char* fname);
|
int FCEUI_AviBegin(const char* fname);
|
||||||
void FCEUI_AviEnd(void);
|
void FCEUI_AviEnd(void);
|
||||||
void FCEUI_AviVideoUpdate(const unsigned char* buffer);
|
void FCEUI_AviVideoUpdate(const unsigned char* buffer);
|
||||||
void FCEUI_AviSoundUpdate(void* soundData, int soundLen);
|
void FCEUI_AviSoundUpdate(void* soundData, int soundLen);
|
||||||
int FCEUI_AviIsRecording(void);
|
bool FCEUI_AviIsRecording();
|
||||||
|
|
||||||
void FCEUD_AviRecordTo(void);
|
void FCEUD_AviRecordTo(void);
|
||||||
void FCEUD_AviStop(void);
|
void FCEUD_AviStop(void);
|
||||||
|
@ -328,7 +328,7 @@ typedef int TestCommandState(int cmd);
|
||||||
void FCEUI_HandleEmuCommands(TestCommandState* testfn);
|
void FCEUI_HandleEmuCommands(TestCommandState* testfn);
|
||||||
|
|
||||||
|
|
||||||
/* Emulation speed */
|
//Emulation speed
|
||||||
enum EMUSPEED_SET
|
enum EMUSPEED_SET
|
||||||
{
|
{
|
||||||
EMUSPEED_SLOWEST=0,
|
EMUSPEED_SLOWEST=0,
|
||||||
|
@ -365,6 +365,16 @@ void FCEUD_UpdatePPUView(int scanline, int drawall);
|
||||||
///I am dissatisfied with this method of getting an option from the driver to the core. but that is what we're using for now
|
///I am dissatisfied with this method of getting an option from the driver to the core. but that is what we're using for now
|
||||||
bool FCEUD_PauseAfterPlayback();
|
bool FCEUD_PauseAfterPlayback();
|
||||||
|
|
||||||
|
enum EFCEUI
|
||||||
|
{
|
||||||
|
FCEUI_STOPAVI, FCEUI_SAVESTATE, FCEUI_LOADSTATE,
|
||||||
|
FCEUI_STOPMOVIE, FCEUI_RECORDMOVIE, FCEUI_PLAYMOVIE
|
||||||
|
};
|
||||||
|
|
||||||
|
//checks whether an EFCEUI is valid right now
|
||||||
|
bool FCEU_IsValidUI(EFCEUI ui);
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C"
|
extern "C"
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -408,10 +408,10 @@ void FCEUI_AviEnd()
|
||||||
avi_destroy(&avi_file);
|
avi_destroy(&avi_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
int FCEUI_AviIsRecording()
|
bool FCEUI_AviIsRecording()
|
||||||
{
|
{
|
||||||
if(avi_file)
|
if(avi_file)
|
||||||
return 1;
|
return true;
|
||||||
|
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,8 @@
|
||||||
#include "keyboard.h"
|
#include "keyboard.h"
|
||||||
#include "joystick.h"
|
#include "joystick.h"
|
||||||
#include "gui.h"
|
#include "gui.h"
|
||||||
#include "../../fceu.h" //mbg merge 7/17/06 added
|
#include "fceu.h"
|
||||||
|
#include "movie.h"
|
||||||
|
|
||||||
#include "keyscan.h"
|
#include "keyscan.h"
|
||||||
|
|
||||||
|
@ -213,13 +214,13 @@ int DTestButton(ButtConfig *bc)
|
||||||
|
|
||||||
void UpdateGamepad()
|
void UpdateGamepad()
|
||||||
{
|
{
|
||||||
if(FCEUI_IsMovieActive()<0)
|
if(FCEUMOV_Mode(MOVIEMODE_PLAY))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
uint32 JS=0;
|
uint32 JS=0;
|
||||||
int x;
|
int x;
|
||||||
int wg;
|
int wg;
|
||||||
if(FCEUI_IsMovieActive()>0)
|
if(FCEUMOV_Mode(MOVIEMODE_RECORD))
|
||||||
AutoFire();
|
AutoFire();
|
||||||
|
|
||||||
for(wg=0;wg<4;wg++)
|
for(wg=0;wg<4;wg++)
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
// Generated from the TEXTINCLUDE 2 resource.
|
// Generated from the TEXTINCLUDE 2 resource.
|
||||||
//
|
//
|
||||||
#include "afxres.h"
|
#include "afxres.h"
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
#undef APSTUDIO_READONLY_SYMBOLS
|
#undef APSTUDIO_READONLY_SYMBOLS
|
||||||
|
|
||||||
|
@ -1601,6 +1602,7 @@ IDB_TE_ARROW BITMAP "res/te_arrow.bmp"
|
||||||
// Generated from the TEXTINCLUDE 3 resource.
|
// Generated from the TEXTINCLUDE 3 resource.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
#endif // not APSTUDIO_INVOKED
|
#endif // not APSTUDIO_INVOKED
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@ static TSelectionFrames selectionFrames;
|
||||||
|
|
||||||
//hacky.. we need to think about how to convey information from the driver to the movie code.
|
//hacky.. we need to think about how to convey information from the driver to the movie code.
|
||||||
//add a new fceud_ function?? blehhh maybe
|
//add a new fceud_ function?? blehhh maybe
|
||||||
bool moviePleaseLogSavestates = false;
|
extern EMOVIEMODE movieMode;
|
||||||
|
|
||||||
static void GetDispInfo(NMLVDISPINFO* nmlvDispInfo)
|
static void GetDispInfo(NMLVDISPINFO* nmlvDispInfo)
|
||||||
{
|
{
|
||||||
|
@ -288,7 +288,7 @@ void KillTasEdit()
|
||||||
{
|
{
|
||||||
DestroyWindow(hwndTasEdit);
|
DestroyWindow(hwndTasEdit);
|
||||||
hwndTasEdit = 0;
|
hwndTasEdit = 0;
|
||||||
moviePleaseLogSavestates = false;
|
FCEUMOV_ExitTasEdit();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void Export()
|
static void Export()
|
||||||
|
@ -438,7 +438,7 @@ void DoTasEdit()
|
||||||
|
|
||||||
if(hwndTasEdit)
|
if(hwndTasEdit)
|
||||||
{
|
{
|
||||||
moviePleaseLogSavestates = true;
|
FCEUMOV_EnterTasEdit();
|
||||||
SetWindowPos(hwndTasEdit,HWND_TOP,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);
|
SetWindowPos(hwndTasEdit,HWND_TOP,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,6 +54,7 @@
|
||||||
#include "directories.h"
|
#include "directories.h"
|
||||||
#include "gui.h"
|
#include "gui.h"
|
||||||
#include "help.h"
|
#include "help.h"
|
||||||
|
#include "movie.h"
|
||||||
|
|
||||||
// Extern variables
|
// Extern variables
|
||||||
|
|
||||||
|
@ -71,7 +72,6 @@ void RestartMovieOrReset(unsigned int pow);
|
||||||
int KeyboardSetBackgroundAccess(int on); //mbg merge 7/17/06 YECH had to add
|
int KeyboardSetBackgroundAccess(int on); //mbg merge 7/17/06 YECH had to add
|
||||||
void SetJoystickBackgroundAccess(int background); //mbg merge 7/17/06 YECH had to add
|
void SetJoystickBackgroundAccess(int background); //mbg merge 7/17/06 YECH had to add
|
||||||
void ShowNetplayConsole(void); //mbg merge 7/17/06 YECH had to add
|
void ShowNetplayConsole(void); //mbg merge 7/17/06 YECH had to add
|
||||||
int FCEUMOV_IsPlaying(void); //mbg merge 7/17/06 YECH had to add
|
|
||||||
void DoPPUView();//mbg merge 7/19/06 yech had to add
|
void DoPPUView();//mbg merge 7/19/06 yech had to add
|
||||||
|
|
||||||
void MapInput(void);
|
void MapInput(void);
|
||||||
|
@ -141,15 +141,10 @@ void updateGameDependentMenus(unsigned int enable)
|
||||||
{
|
{
|
||||||
const int menu_ids[]= {
|
const int menu_ids[]= {
|
||||||
MENU_CLOSE_FILE,
|
MENU_CLOSE_FILE,
|
||||||
MENU_SAVE_STATE,
|
|
||||||
MENU_LOAD_STATE,
|
|
||||||
MENU_RESET,
|
MENU_RESET,
|
||||||
MENU_POWER,
|
MENU_POWER,
|
||||||
MENU_INSERT_COIN,
|
MENU_INSERT_COIN,
|
||||||
MENU_SWITCH_DISK,
|
MENU_SWITCH_DISK,
|
||||||
MENU_RECORD_MOVIE,
|
|
||||||
MENU_REPLAY_MOVIE,
|
|
||||||
MENU_STOP_MOVIE,
|
|
||||||
MENU_RECORD_AVI,
|
MENU_RECORD_AVI,
|
||||||
MENU_STOP_AVI,
|
MENU_STOP_AVI,
|
||||||
MENU_RECORD_WAV,
|
MENU_RECORD_WAV,
|
||||||
|
@ -545,7 +540,7 @@ void LoadNewGamey(HWND hParent, const char *initialdir)
|
||||||
|
|
||||||
void GetMouseData(uint32 *md)
|
void GetMouseData(uint32 *md)
|
||||||
{
|
{
|
||||||
if(FCEUI_IsMovieActive() < 0)
|
if(FCEUMOV_Mode() == MOVIEMODE_PLAY)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1155,7 +1150,11 @@ LRESULT FAR PASCAL AppWndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
|
||||||
}
|
}
|
||||||
goto proco;
|
goto proco;
|
||||||
case WM_ENTERMENULOOP:
|
case WM_ENTERMENULOOP:
|
||||||
EnableMenuItem(fceumenu,MENU_STOP_MOVIE,MF_BYCOMMAND | (FCEUI_IsMovieActive()?MF_ENABLED:MF_GRAYED));
|
EnableMenuItem(fceumenu,MENU_RECORD_MOVIE,MF_BYCOMMAND | (FCEU_IsValidUI(FCEUI_RECORDMOVIE)?MF_ENABLED:MF_GRAYED));
|
||||||
|
EnableMenuItem(fceumenu,MENU_REPLAY_MOVIE,MF_BYCOMMAND | (FCEU_IsValidUI(FCEUI_PLAYMOVIE)?MF_ENABLED:MF_GRAYED));
|
||||||
|
EnableMenuItem(fceumenu,MENU_STOP_MOVIE,MF_BYCOMMAND | (FCEU_IsValidUI(FCEUI_STOPMOVIE)?MF_ENABLED:MF_GRAYED));
|
||||||
|
EnableMenuItem(fceumenu,MENU_SAVE_STATE,MF_BYCOMMAND | (FCEU_IsValidUI(FCEUI_SAVESTATE)?MF_ENABLED:MF_GRAYED));
|
||||||
|
EnableMenuItem(fceumenu,MENU_LOAD_STATE,MF_BYCOMMAND | (FCEU_IsValidUI(FCEUI_LOADSTATE)?MF_ENABLED:MF_GRAYED));
|
||||||
EnableMenuItem(fceumenu,MENU_STOP_AVI,MF_BYCOMMAND | (FCEUI_AviIsRecording()?MF_ENABLED:MF_GRAYED));
|
EnableMenuItem(fceumenu,MENU_STOP_AVI,MF_BYCOMMAND | (FCEUI_AviIsRecording()?MF_ENABLED:MF_GRAYED));
|
||||||
EnableMenuItem(fceumenu,MENU_STOP_WAV,MF_BYCOMMAND | (loggingSound?MF_ENABLED:MF_GRAYED));
|
EnableMenuItem(fceumenu,MENU_STOP_WAV,MF_BYCOMMAND | (loggingSound?MF_ENABLED:MF_GRAYED));
|
||||||
default:
|
default:
|
||||||
|
@ -1421,7 +1420,9 @@ void FCEUD_AviRecordTo(void)
|
||||||
OPENFILENAME ofn;
|
OPENFILENAME ofn;
|
||||||
char szChoice[MAX_PATH];
|
char szChoice[MAX_PATH];
|
||||||
|
|
||||||
if(FCEUMOV_IsPlaying())
|
//if we are playing a movie, construct the filename from the current movie.
|
||||||
|
//else construct it from the filename.
|
||||||
|
if(FCEUMOV_Mode(MOVIEMODE_PLAY|MOVIEMODE_RECORD))
|
||||||
{
|
{
|
||||||
extern char curMovieFilename[];
|
extern char curMovieFilename[];
|
||||||
strcpy(szChoice, curMovieFilename);
|
strcpy(szChoice, curMovieFilename);
|
||||||
|
|
36
src/fceu.cpp
36
src/fceu.cpp
|
@ -474,7 +474,7 @@ void AutoFire(void)
|
||||||
counter = (++counter) % (8*7*5*3);
|
counter = (++counter) % (8*7*5*3);
|
||||||
//If recording a movie, use the frame # for the autofire so the offset
|
//If recording a movie, use the frame # for the autofire so the offset
|
||||||
//doesn't get screwed up when loading.
|
//doesn't get screwed up when loading.
|
||||||
if(FCEUMOV_IsPlaying() || FCEUMOV_IsRecording())
|
if(FCEUMOV_Mode(MOVIEMODE_RECORD | MOVIEMODE_PLAY))
|
||||||
{
|
{
|
||||||
rapidAlternator= AutoFirePattern[(AutoFireOffset + FCEUMOV_GetFrame())%AutoFirePatternLength];
|
rapidAlternator= AutoFirePattern[(AutoFireOffset + FCEUMOV_GetFrame())%AutoFirePatternLength];
|
||||||
}
|
}
|
||||||
|
@ -567,19 +567,18 @@ void FCEUI_CloseGame(void)
|
||||||
CloseGame();
|
CloseGame();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
//resets or powers off the system, as specified
|
||||||
* @param do_power_off Power off (1) or reset (0)
|
//OR, if a movie is playing or recording, possibly reloads the movie according to funny rules.
|
||||||
**/
|
|
||||||
void RestartMovieOrReset(unsigned int do_power_off)
|
void RestartMovieOrReset(unsigned int do_power_off)
|
||||||
{
|
{
|
||||||
extern bool movie_readonly;
|
extern bool movie_readonly;
|
||||||
extern char curMovieFilename[512];
|
extern char curMovieFilename[512];
|
||||||
|
|
||||||
if(FCEUMOV_IsPlaying() || FCEUMOV_IsRecording() && movie_readonly)
|
if(FCEUMOV_Mode(MOVIEMODE_PLAY) || FCEUMOV_Mode(MOVIEMODE_RECORD) && movie_readonly)
|
||||||
{
|
{
|
||||||
FCEUI_LoadMovie(curMovieFilename, movie_readonly, 0);
|
FCEUI_LoadMovie(curMovieFilename, movie_readonly, 0);
|
||||||
|
|
||||||
if(FCEUI_IsMovieActive())
|
if(FCEUMOV_Mode(MOVIEMODE_PLAY|MOVIEMODE_RECORD))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -789,7 +788,8 @@ void FCEUI_ClearEmulationFrameStepped()
|
||||||
|
|
||||||
//mbg merge 7/18/06 added
|
//mbg merge 7/18/06 added
|
||||||
//ideally maybe we shouldnt be using this, but i need it for quick merging
|
//ideally maybe we shouldnt be using this, but i need it for quick merging
|
||||||
void FCEUI_SetEmulationPaused(int val) {
|
void FCEUI_SetEmulationPaused(int val)
|
||||||
|
{
|
||||||
EmulationPaused = val;
|
EmulationPaused = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -859,3 +859,25 @@ int FCEU_TextScanlineOffsetFromBottom(int y)
|
||||||
{
|
{
|
||||||
return (FSettings.LastSLine-y)*256;
|
return (FSettings.LastSLine-y)*256;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool FCEU_IsValidUI(EFCEUI ui)
|
||||||
|
{
|
||||||
|
switch(ui)
|
||||||
|
{
|
||||||
|
case FCEUI_RECORDMOVIE:
|
||||||
|
case FCEUI_PLAYMOVIE:
|
||||||
|
if(!GameInfo) return false;
|
||||||
|
if(FCEUMOV_Mode(MOVIEMODE_TASEDIT)) return false;
|
||||||
|
break;
|
||||||
|
case FCEUI_STOPMOVIE:
|
||||||
|
return FCEUMOV_Mode(MOVIEMODE_PLAY|MOVIEMODE_RECORD);
|
||||||
|
case FCEUI_STOPAVI:
|
||||||
|
return FCEUI_AviIsRecording();
|
||||||
|
case FCEUI_SAVESTATE:
|
||||||
|
case FCEUI_LOADSTATE:
|
||||||
|
if(FCEUMOV_Mode(MOVIEMODE_TASEDIT)) return false;
|
||||||
|
if(!GameInfo) return false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
|
@ -249,7 +249,7 @@ void FCEU_UpdateBot()
|
||||||
|
|
||||||
void FCEU_UpdateInput(void)
|
void FCEU_UpdateInput(void)
|
||||||
{
|
{
|
||||||
if(!FCEUMOV_IsPlaying() && !BotMode)
|
if(!FCEUMOV_Mode(MOVIEMODE_PLAY) && !BotMode)
|
||||||
{
|
{
|
||||||
int x;
|
int x;
|
||||||
|
|
||||||
|
@ -475,7 +475,7 @@ void FCEU_QSimpleCommand(int cmd)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
FCEU_DoSimpleCommand(cmd);
|
FCEU_DoSimpleCommand(cmd);
|
||||||
if(FCEUMOV_IsRecording())
|
if(FCEUMOV_Mode(MOVIEMODE_RECORD))
|
||||||
FCEUMOV_AddCommand(cmd);
|
FCEUMOV_AddCommand(cmd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
165
src/movie.cpp
165
src/movie.cpp
|
@ -29,7 +29,6 @@ using namespace std;
|
||||||
|
|
||||||
extern char FileBase[];
|
extern char FileBase[];
|
||||||
extern int EmulationPaused;
|
extern int EmulationPaused;
|
||||||
extern bool moviePleaseLogSavestates;
|
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
@ -49,10 +48,7 @@ bool suppressMovieStop=false;
|
||||||
|
|
||||||
//----movie engine main state
|
//----movie engine main state
|
||||||
|
|
||||||
static enum EMOVIEMODE
|
EMOVIEMODE movieMode = MOVIEMODE_INACTIVE;
|
||||||
{
|
|
||||||
MOVIEMODE_INACTIVE, MOVIEMODE_RECORD, MOVIEMODE_PLAY
|
|
||||||
} movieMode = MOVIEMODE_INACTIVE;
|
|
||||||
|
|
||||||
//this should not be set unless we are in MOVIEMODE_RECORD!
|
//this should not be set unless we are in MOVIEMODE_RECORD!
|
||||||
FILE* fpRecordingMovie = 0;
|
FILE* fpRecordingMovie = 0;
|
||||||
|
@ -80,7 +76,7 @@ void MovieData::clearRecordRange(int start, int len)
|
||||||
|
|
||||||
void MovieData::TryDumpIncremental()
|
void MovieData::TryDumpIncremental()
|
||||||
{
|
{
|
||||||
if(moviePleaseLogSavestates)
|
if(movieMode == MOVIEMODE_TASEDIT)
|
||||||
{
|
{
|
||||||
//only log the savestate if we are appending to the green zone
|
//only log the savestate if we are appending to the green zone
|
||||||
if(currFrameCounter == currMovieData.greenZoneCount)
|
if(currFrameCounter == currMovieData.greenZoneCount)
|
||||||
|
@ -270,14 +266,19 @@ bool FCEUMOV_ShouldPause(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int FCEUMOV_IsPlaying(void)
|
EMOVIEMODE FCEUMOV_Mode()
|
||||||
{
|
{
|
||||||
return movieMode == MOVIEMODE_PLAY;
|
return movieMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
int FCEUMOV_IsRecording(void)
|
bool FCEUMOV_Mode(EMOVIEMODE modemask)
|
||||||
{
|
{
|
||||||
return movieMode == MOVIEMODE_RECORD;
|
return (movieMode&modemask)!=0;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FCEUMOV_Mode(int modemask)
|
||||||
|
{
|
||||||
|
return FCEUMOV_Mode((EMOVIEMODE)modemask);
|
||||||
}
|
}
|
||||||
|
|
||||||
//yuck... another custom text parser.
|
//yuck... another custom text parser.
|
||||||
|
@ -400,9 +401,9 @@ void FCEUI_StopMovie()
|
||||||
curMovieFilename[0] = 0;
|
curMovieFilename[0] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ParseGIInput(FCEUGI *GI); //mbg merge 7/17/06 - had to add. gross.
|
void ParseGIInput(FCEUGI *GI); //mbg merge 7/17/06 - had to add. gross.
|
||||||
void InitOtherInput(void); //mbg merge 7/17/06 - had to add. gross.
|
void InitOtherInput(void); //mbg merge 7/17/06 - had to add. gross.
|
||||||
|
|
||||||
static void ResetInputTypes()
|
static void ResetInputTypes()
|
||||||
{
|
{
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
|
@ -420,6 +421,69 @@ static void ResetInputTypes()
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void poweron(bool shouldDisableBatteryLoading)
|
||||||
|
{
|
||||||
|
// make a for-movie-recording power-on clear the game's save data, too
|
||||||
|
extern char lastLoadedGameName [2048];
|
||||||
|
extern int disableBatteryLoading, suppressAddPowerCommand;
|
||||||
|
suppressAddPowerCommand=1;
|
||||||
|
if(shouldDisableBatteryLoading) disableBatteryLoading=1;
|
||||||
|
suppressMovieStop=true;
|
||||||
|
{
|
||||||
|
//we need to save the pause state through this process
|
||||||
|
int oldPaused = EmulationPaused;
|
||||||
|
|
||||||
|
// NOTE: this will NOT write an FCEUNPCMD_POWER into the movie file
|
||||||
|
FCEUGI* gi = FCEUI_LoadGame(lastLoadedGameName, 0);
|
||||||
|
//mbg 5/23/08 - wtf? why would this return null?
|
||||||
|
//if(!gi) PowerNES();
|
||||||
|
assert(gi);
|
||||||
|
|
||||||
|
EmulationPaused = oldPaused;
|
||||||
|
}
|
||||||
|
suppressMovieStop=false;
|
||||||
|
if(shouldDisableBatteryLoading) disableBatteryLoading=0;
|
||||||
|
suppressAddPowerCommand=0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void FCEUMOV_EnterTasEdit()
|
||||||
|
{
|
||||||
|
//stop any current movie activity
|
||||||
|
FCEUI_StopMovie();
|
||||||
|
|
||||||
|
//clear the current movie
|
||||||
|
currFrameCounter = 0;
|
||||||
|
currMovieData = MovieData();
|
||||||
|
currMovieData.guid.newGuid();
|
||||||
|
currMovieData.palFlag = FCEUI_GetCurrentVidSystem(0,0)!=0;
|
||||||
|
currMovieData.poweronFlag = true;
|
||||||
|
currMovieData.romChecksum = GameInfo->MD5;
|
||||||
|
currMovieData.romFilename = FileBase;
|
||||||
|
|
||||||
|
//reset the rom
|
||||||
|
poweron(false);
|
||||||
|
|
||||||
|
//todo - think about this
|
||||||
|
ResetInputTypes();
|
||||||
|
|
||||||
|
//pause the emulator
|
||||||
|
FCEUI_SetEmulationPaused(1);
|
||||||
|
|
||||||
|
//and enter tasedit mode
|
||||||
|
movieMode = MOVIEMODE_TASEDIT;
|
||||||
|
FCEU_DispMessage("Tasedit engaged");
|
||||||
|
}
|
||||||
|
|
||||||
|
void FCEUMOV_ExitTasEdit()
|
||||||
|
{
|
||||||
|
movieMode = MOVIEMODE_INACTIVE;
|
||||||
|
FCEU_DispMessage("Tasedit disengaged");
|
||||||
|
currMovieData = MovieData();
|
||||||
|
}
|
||||||
|
|
||||||
bool MovieData::loadSavestateFrom(std::vector<char>* buf)
|
bool MovieData::loadSavestateFrom(std::vector<char>* buf)
|
||||||
{
|
{
|
||||||
//dump the savestate to disk
|
//dump the savestate to disk
|
||||||
|
@ -443,6 +507,9 @@ void MovieData::dumpSavestateTo(std::vector<char>* buf, int compressionLevel)
|
||||||
//begin playing an existing movie
|
//begin playing an existing movie
|
||||||
void FCEUI_LoadMovie(char *fname, bool _read_only, int _pauseframe)
|
void FCEUI_LoadMovie(char *fname, bool _read_only, int _pauseframe)
|
||||||
{
|
{
|
||||||
|
if(!FCEU_IsValidUI(FCEUI_PLAYMOVIE))
|
||||||
|
return;
|
||||||
|
|
||||||
assert(fname);
|
assert(fname);
|
||||||
|
|
||||||
FCEUI_StopMovie();
|
FCEUI_StopMovie();
|
||||||
|
@ -458,23 +525,7 @@ void FCEUI_LoadMovie(char *fname, bool _read_only, int _pauseframe)
|
||||||
// fully reload the game to reinitialize everything before playing any movie
|
// fully reload the game to reinitialize everything before playing any movie
|
||||||
// to try fixing nondeterministic playback of some games
|
// to try fixing nondeterministic playback of some games
|
||||||
{
|
{
|
||||||
extern char lastLoadedGameName [2048];
|
poweron(false);
|
||||||
extern int disableBatteryLoading, suppressAddPowerCommand;
|
|
||||||
suppressAddPowerCommand=1;
|
|
||||||
suppressMovieStop=true;
|
|
||||||
{
|
|
||||||
//we need to save the pause state through this process
|
|
||||||
int oldPaused = EmulationPaused;
|
|
||||||
|
|
||||||
FCEUGI * gi = FCEUI_LoadGame(lastLoadedGameName, 0);
|
|
||||||
//mbg 5/23/08 - wtf? why would this return null?
|
|
||||||
//if(!gi) PowerNES();
|
|
||||||
assert(gi);
|
|
||||||
|
|
||||||
EmulationPaused = oldPaused;
|
|
||||||
}
|
|
||||||
suppressMovieStop=false;
|
|
||||||
suppressAddPowerCommand=0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//todo - if reset flag is set, will the poweron flag be set?
|
//todo - if reset flag is set, will the poweron flag be set?
|
||||||
|
@ -526,9 +577,13 @@ static void openRecordingMovie(const char* fname)
|
||||||
strcpy(curMovieFilename, fname);
|
strcpy(curMovieFilename, fname);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//begin recording a new movie
|
//begin recording a new movie
|
||||||
void FCEUI_SaveMovie(char *fname, uint8 flags)
|
void FCEUI_SaveMovie(char *fname, uint8 flags)
|
||||||
{
|
{
|
||||||
|
if(!FCEU_IsValidUI(FCEUI_RECORDMOVIE))
|
||||||
|
return;
|
||||||
|
|
||||||
assert(fname);
|
assert(fname);
|
||||||
|
|
||||||
FCEUI_StopMovie();
|
FCEUI_StopMovie();
|
||||||
|
@ -548,27 +603,7 @@ void FCEUI_SaveMovie(char *fname, uint8 flags)
|
||||||
|
|
||||||
if(currMovieData.poweronFlag)
|
if(currMovieData.poweronFlag)
|
||||||
{
|
{
|
||||||
// make a for-movie-recording power-on clear the game's save data, too
|
poweron(true);
|
||||||
extern char lastLoadedGameName [2048];
|
|
||||||
extern int disableBatteryLoading, suppressAddPowerCommand;
|
|
||||||
suppressAddPowerCommand=1;
|
|
||||||
disableBatteryLoading=1;
|
|
||||||
suppressMovieStop=true;
|
|
||||||
{
|
|
||||||
//we need to save the pause state through this process
|
|
||||||
int oldPaused = EmulationPaused;
|
|
||||||
|
|
||||||
// NOTE: this will NOT write an FCEUNPCMD_POWER into the movie file
|
|
||||||
FCEUGI* gi = FCEUI_LoadGame(lastLoadedGameName, 0);
|
|
||||||
//mbg 5/23/08 - wtf? why would this return null?
|
|
||||||
//if(!gi) PowerNES();
|
|
||||||
assert(gi);
|
|
||||||
|
|
||||||
EmulationPaused = oldPaused;
|
|
||||||
}
|
|
||||||
suppressMovieStop=false;
|
|
||||||
disableBatteryLoading=0;
|
|
||||||
suppressAddPowerCommand=0;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -598,6 +633,11 @@ void FCEUI_SaveMovie(char *fname, uint8 flags)
|
||||||
//either dumps the current joystick state or loads one state from the movie
|
//either dumps the current joystick state or loads one state from the movie
|
||||||
void FCEUMOV_AddJoy(uint8 *js, int SkipFlush)
|
void FCEUMOV_AddJoy(uint8 *js, int SkipFlush)
|
||||||
{
|
{
|
||||||
|
//todo - for tasedit, either dump or load depending on whether input recording is enabled
|
||||||
|
//or something like that
|
||||||
|
//(input recording is just like standard read+write movie recording with input taken from gamepad)
|
||||||
|
//otherwise, it will come from the tasedit data.
|
||||||
|
|
||||||
if(movieMode == MOVIEMODE_PLAY)
|
if(movieMode == MOVIEMODE_PLAY)
|
||||||
{
|
{
|
||||||
//stop when we run out of frames
|
//stop when we run out of frames
|
||||||
|
@ -796,24 +836,23 @@ void FCEUMOV_PreLoad(void)
|
||||||
load_successful=0;
|
load_successful=0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int FCEUMOV_PostLoad(void)
|
bool FCEUMOV_PostLoad(void)
|
||||||
{
|
{
|
||||||
if(!FCEUI_IsMovieActive())
|
if(movieMode == MOVIEMODE_INACTIVE || movieMode == MOVIEMODE_TASEDIT)
|
||||||
return 1;
|
return true;
|
||||||
else
|
else
|
||||||
//mbg tasedit hack!!!!!!!!!
|
return load_successful;
|
||||||
return load_successful || moviePleaseLogSavestates;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int FCEUI_IsMovieActive(void)
|
//int FCEUI_IsMovieActive(void)
|
||||||
{
|
//{
|
||||||
//this is a lame method. we should change all the fceu code that uses it to call the
|
// //this is a lame method. we should change all the fceu code that uses it to call the
|
||||||
//IsRecording or IsPlaying methods
|
// //IsRecording or IsPlaying methods
|
||||||
//return > 0 for recording, < 0 for playback
|
// //return > 0 for recording, < 0 for playback
|
||||||
if(FCEUMOV_IsRecording()) return 1;
|
// if(FCEUMOV_IsRecording()) return 1;
|
||||||
else if(FCEUMOV_IsPlaying()) return -1;
|
// else if(FCEUMOV_IsPlaying()) return -1;
|
||||||
else return 0;
|
// else return 0;
|
||||||
}
|
//}
|
||||||
|
|
||||||
void FCEUI_MovieToggleFrameDisplay(void)
|
void FCEUI_MovieToggleFrameDisplay(void)
|
||||||
{
|
{
|
||||||
|
|
22
src/movie.h
22
src/movie.h
|
@ -9,16 +9,30 @@
|
||||||
void FCEUMOV_AddJoy(uint8 *, int SkipFlush);
|
void FCEUMOV_AddJoy(uint8 *, int SkipFlush);
|
||||||
void FCEUMOV_AddCommand(int cmd);
|
void FCEUMOV_AddCommand(int cmd);
|
||||||
void FCEU_DrawMovies(uint8 *);
|
void FCEU_DrawMovies(uint8 *);
|
||||||
int FCEUMOV_IsPlaying(void);
|
|
||||||
int FCEUMOV_IsRecording(void);
|
enum EMOVIEMODE
|
||||||
|
{
|
||||||
|
MOVIEMODE_INACTIVE = 1,
|
||||||
|
MOVIEMODE_RECORD = 2,
|
||||||
|
MOVIEMODE_PLAY = 4,
|
||||||
|
MOVIEMODE_TASEDIT = 8
|
||||||
|
};
|
||||||
|
|
||||||
|
EMOVIEMODE FCEUMOV_Mode();
|
||||||
|
bool FCEUMOV_Mode(EMOVIEMODE modemask);
|
||||||
|
bool FCEUMOV_Mode(int modemask);
|
||||||
|
|
||||||
bool FCEUMOV_ShouldPause(void);
|
bool FCEUMOV_ShouldPause(void);
|
||||||
int FCEUMOV_GetFrame(void);
|
int FCEUMOV_GetFrame(void);
|
||||||
|
|
||||||
int FCEUMOV_WriteState(FILE* st);
|
int FCEUMOV_WriteState(FILE* st);
|
||||||
int FCEUMOV_WriteState(std::ostream* os);
|
int FCEUMOV_WriteState(std::ostream* os);
|
||||||
bool FCEUMOV_ReadState(FILE* st, uint32 size);
|
bool FCEUMOV_ReadState(FILE* st, uint32 size);
|
||||||
void FCEUMOV_PreLoad(void);
|
void FCEUMOV_PreLoad();
|
||||||
int FCEUMOV_PostLoad(void);
|
bool FCEUMOV_PostLoad();
|
||||||
|
|
||||||
|
void FCEUMOV_EnterTasEdit();
|
||||||
|
void FCEUMOV_ExitTasEdit();
|
||||||
|
|
||||||
|
|
||||||
class MovieRecord
|
class MovieRecord
|
||||||
|
|
|
@ -305,7 +305,7 @@ static int ReadStateChunks(FILE *st, int32 totalsize)
|
||||||
read_snd=1;
|
read_snd=1;
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
if(FCEUI_IsMovieActive())
|
if(FCEUMOV_Mode(MOVIEMODE_PLAY|MOVIEMODE_RECORD))
|
||||||
{
|
{
|
||||||
if(!ReadStateChunk(st,FCEUMOV_STATEINFO,size)) ret=0;
|
if(!ReadStateChunk(st,FCEUMOV_STATEINFO,size)) ret=0;
|
||||||
}
|
}
|
||||||
|
@ -393,14 +393,13 @@ bool FCEUSS_SaveMS(std::ostream* outstream, int compressionLevel)
|
||||||
totalsize+=WriteStateChunk(os,3,FCEUPPU_STATEINFO);
|
totalsize+=WriteStateChunk(os,3,FCEUPPU_STATEINFO);
|
||||||
totalsize+=WriteStateChunk(os,4,FCEUCTRL_STATEINFO);
|
totalsize+=WriteStateChunk(os,4,FCEUCTRL_STATEINFO);
|
||||||
totalsize+=WriteStateChunk(os,5,FCEUSND_STATEINFO);
|
totalsize+=WriteStateChunk(os,5,FCEUSND_STATEINFO);
|
||||||
if(FCEUI_IsMovieActive())
|
if(FCEUMOV_Mode(MOVIEMODE_PLAY|MOVIEMODE_RECORD))
|
||||||
{
|
{
|
||||||
totalsize+=WriteStateChunk(os,6,FCEUMOV_STATEINFO);
|
totalsize+=WriteStateChunk(os,6,FCEUMOV_STATEINFO);
|
||||||
|
|
||||||
//MBG tasedit HACK HACK HACK!
|
//MBG tasedit HACK HACK HACK!
|
||||||
//do not save the movie state if we are in tasedit! that is a huge waste of time and space!
|
//do not save the movie state if we are in tasedit! that is a huge waste of time and space!
|
||||||
extern bool moviePleaseLogSavestates;
|
if(!FCEUMOV_Mode(MOVIEMODE_TASEDIT))
|
||||||
if(!moviePleaseLogSavestates)
|
|
||||||
{
|
{
|
||||||
uint32 size = FCEUMOV_WriteState((std::ostream*)0);
|
uint32 size = FCEUMOV_WriteState((std::ostream*)0);
|
||||||
os->put(7);
|
os->put(7);
|
||||||
|
@ -881,6 +880,8 @@ int FCEUI_SelectState(int w, int show)
|
||||||
|
|
||||||
void FCEUI_SaveState(char *fname)
|
void FCEUI_SaveState(char *fname)
|
||||||
{
|
{
|
||||||
|
if(!FCEU_IsValidUI(FCEUI_SAVESTATE)) return;
|
||||||
|
|
||||||
StateShow=0;
|
StateShow=0;
|
||||||
FCEUSS_Save(fname);
|
FCEUSS_Save(fname);
|
||||||
}
|
}
|
||||||
|
@ -889,6 +890,8 @@ int loadStateFailed = 0; // hack, this function should return a value instead
|
||||||
|
|
||||||
void FCEUI_LoadState(char *fname)
|
void FCEUI_LoadState(char *fname)
|
||||||
{
|
{
|
||||||
|
if(!FCEU_IsValidUI(FCEUI_LOADSTATE)) return;
|
||||||
|
|
||||||
StateShow = 0;
|
StateShow = 0;
|
||||||
loadStateFailed = 0;
|
loadStateFailed = 0;
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="0"
|
Optimization="0"
|
||||||
AdditionalIncludeDirectories="../src/drivers/win/zlib;../src/drivers/win/directx"
|
AdditionalIncludeDirectories="../src/drivers/win/zlib;../src/drivers/win/directx;../src"
|
||||||
PreprocessorDefinitions="WIN32;_DEBUG;MSVC;_CRT_SECURE_NO_DEPRECATE;_WIN32_WINDOWS=0x0410;WINVER=0x0410;NETWORK;LSB_FIRST;_USE_32BIT_TIME_T;FCEUDEF_DEBUGGER;_USE_SHARED_MEMORY_;NOMINMAX"
|
PreprocessorDefinitions="WIN32;_DEBUG;MSVC;_CRT_SECURE_NO_DEPRECATE;_WIN32_WINDOWS=0x0410;WINVER=0x0410;NETWORK;LSB_FIRST;_USE_32BIT_TIME_T;FCEUDEF_DEBUGGER;_USE_SHARED_MEMORY_;NOMINMAX"
|
||||||
MinimalRebuild="true"
|
MinimalRebuild="true"
|
||||||
BasicRuntimeChecks="3"
|
BasicRuntimeChecks="3"
|
||||||
|
|
Loading…
Reference in New Issue