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 "drawing.h"
|
||||
#include "video.h"
|
||||
#include "movie.h"
|
||||
|
||||
static uint8 Font6x5[594] =
|
||||
{
|
||||
|
@ -307,12 +308,12 @@ void FCEU_DrawRecordingStatus(uint8* XBuf)
|
|||
if(FCEUD_ShowStatusIcon())
|
||||
{
|
||||
bool hasPlayRecIcon = false;
|
||||
if(FCEUI_IsMovieActive()>0)
|
||||
if(FCEUMOV_Mode(MOVIEMODE_RECORD))
|
||||
{
|
||||
drawstatus(XBuf,2,28,0);
|
||||
hasPlayRecIcon = true;
|
||||
}
|
||||
else if(FCEUI_IsMovieActive()<0)
|
||||
else if(FCEUMOV_Mode(MOVIEMODE_PLAY))
|
||||
{
|
||||
drawstatus(XBuf,1,28,0);
|
||||
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_MoviePlayFromBeginning(void);
|
||||
void FCEUI_StopMovie(void);
|
||||
int FCEUI_IsMovieActive(void);
|
||||
//int FCEUI_IsMovieActive(void);
|
||||
int FCEUI_MovieGetInfo(const char* fname, MOVIE_INFO* /* [in, out] */ info);
|
||||
char* FCEUI_MovieGetCurrentName(int addSlotNumber);
|
||||
void FCEUI_MovieToggleReadOnly(void);
|
||||
|
@ -312,12 +312,12 @@ void FCEUD_OnCloseGame(void);
|
|||
void FCEUI_FrameAdvance(void);
|
||||
void FCEUI_FrameAdvanceEnd(void);
|
||||
|
||||
/* AVI Output */
|
||||
//AVI Output
|
||||
int FCEUI_AviBegin(const char* fname);
|
||||
void FCEUI_AviEnd(void);
|
||||
void FCEUI_AviVideoUpdate(const unsigned char* buffer);
|
||||
void FCEUI_AviSoundUpdate(void* soundData, int soundLen);
|
||||
int FCEUI_AviIsRecording(void);
|
||||
bool FCEUI_AviIsRecording();
|
||||
|
||||
void FCEUD_AviRecordTo(void);
|
||||
void FCEUD_AviStop(void);
|
||||
|
@ -328,7 +328,7 @@ typedef int TestCommandState(int cmd);
|
|||
void FCEUI_HandleEmuCommands(TestCommandState* testfn);
|
||||
|
||||
|
||||
/* Emulation speed */
|
||||
//Emulation speed
|
||||
enum EMUSPEED_SET
|
||||
{
|
||||
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
|
||||
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
|
||||
extern "C"
|
||||
#endif
|
||||
|
|
|
@ -408,10 +408,10 @@ void FCEUI_AviEnd()
|
|||
avi_destroy(&avi_file);
|
||||
}
|
||||
|
||||
int FCEUI_AviIsRecording()
|
||||
bool FCEUI_AviIsRecording()
|
||||
{
|
||||
if(avi_file)
|
||||
return 1;
|
||||
return true;
|
||||
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -30,7 +30,8 @@
|
|||
#include "keyboard.h"
|
||||
#include "joystick.h"
|
||||
#include "gui.h"
|
||||
#include "../../fceu.h" //mbg merge 7/17/06 added
|
||||
#include "fceu.h"
|
||||
#include "movie.h"
|
||||
|
||||
#include "keyscan.h"
|
||||
|
||||
|
@ -213,13 +214,13 @@ int DTestButton(ButtConfig *bc)
|
|||
|
||||
void UpdateGamepad()
|
||||
{
|
||||
if(FCEUI_IsMovieActive()<0)
|
||||
if(FCEUMOV_Mode(MOVIEMODE_PLAY))
|
||||
return;
|
||||
|
||||
uint32 JS=0;
|
||||
int x;
|
||||
int wg;
|
||||
if(FCEUI_IsMovieActive()>0)
|
||||
if(FCEUMOV_Mode(MOVIEMODE_RECORD))
|
||||
AutoFire();
|
||||
|
||||
for(wg=0;wg<4;wg++)
|
||||
|
|
|
@ -7,7 +7,8 @@
|
|||
//
|
||||
// Generated from the TEXTINCLUDE 2 resource.
|
||||
//
|
||||
#include "afxres.h"
|
||||
#include "afxres.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
||||
|
@ -1600,7 +1601,8 @@ IDB_TE_ARROW BITMAP "res/te_arrow.bmp"
|
|||
//
|
||||
// Generated from the TEXTINCLUDE 3 resource.
|
||||
//
|
||||
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#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.
|
||||
//add a new fceud_ function?? blehhh maybe
|
||||
bool moviePleaseLogSavestates = false;
|
||||
extern EMOVIEMODE movieMode;
|
||||
|
||||
static void GetDispInfo(NMLVDISPINFO* nmlvDispInfo)
|
||||
{
|
||||
|
@ -288,7 +288,7 @@ void KillTasEdit()
|
|||
{
|
||||
DestroyWindow(hwndTasEdit);
|
||||
hwndTasEdit = 0;
|
||||
moviePleaseLogSavestates = false;
|
||||
FCEUMOV_ExitTasEdit();
|
||||
}
|
||||
|
||||
static void Export()
|
||||
|
@ -438,7 +438,7 @@ void DoTasEdit()
|
|||
|
||||
if(hwndTasEdit)
|
||||
{
|
||||
moviePleaseLogSavestates = true;
|
||||
FCEUMOV_EnterTasEdit();
|
||||
SetWindowPos(hwndTasEdit,HWND_TOP,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -54,6 +54,7 @@
|
|||
#include "directories.h"
|
||||
#include "gui.h"
|
||||
#include "help.h"
|
||||
#include "movie.h"
|
||||
|
||||
// Extern variables
|
||||
|
||||
|
@ -71,7 +72,6 @@ void RestartMovieOrReset(unsigned int pow);
|
|||
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 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 MapInput(void);
|
||||
|
@ -141,15 +141,10 @@ void updateGameDependentMenus(unsigned int enable)
|
|||
{
|
||||
const int menu_ids[]= {
|
||||
MENU_CLOSE_FILE,
|
||||
MENU_SAVE_STATE,
|
||||
MENU_LOAD_STATE,
|
||||
MENU_RESET,
|
||||
MENU_POWER,
|
||||
MENU_INSERT_COIN,
|
||||
MENU_SWITCH_DISK,
|
||||
MENU_RECORD_MOVIE,
|
||||
MENU_REPLAY_MOVIE,
|
||||
MENU_STOP_MOVIE,
|
||||
MENU_RECORD_AVI,
|
||||
MENU_STOP_AVI,
|
||||
MENU_RECORD_WAV,
|
||||
|
@ -545,7 +540,7 @@ void LoadNewGamey(HWND hParent, const char *initialdir)
|
|||
|
||||
void GetMouseData(uint32 *md)
|
||||
{
|
||||
if(FCEUI_IsMovieActive() < 0)
|
||||
if(FCEUMOV_Mode() == MOVIEMODE_PLAY)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
@ -1155,9 +1150,13 @@ LRESULT FAR PASCAL AppWndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
|
|||
}
|
||||
goto proco;
|
||||
case WM_ENTERMENULOOP:
|
||||
EnableMenuItem(fceumenu,MENU_STOP_MOVIE,MF_BYCOMMAND | (FCEUI_IsMovieActive()?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_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_WAV,MF_BYCOMMAND | (loggingSound?MF_ENABLED:MF_GRAYED));
|
||||
default:
|
||||
proco:
|
||||
return DefWindowProc(hWnd,msg,wParam,lParam);
|
||||
|
@ -1421,7 +1420,9 @@ void FCEUD_AviRecordTo(void)
|
|||
OPENFILENAME ofn;
|
||||
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[];
|
||||
strcpy(szChoice, curMovieFilename);
|
||||
|
|
36
src/fceu.cpp
36
src/fceu.cpp
|
@ -474,7 +474,7 @@ void AutoFire(void)
|
|||
counter = (++counter) % (8*7*5*3);
|
||||
//If recording a movie, use the frame # for the autofire so the offset
|
||||
//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];
|
||||
}
|
||||
|
@ -567,19 +567,18 @@ void FCEUI_CloseGame(void)
|
|||
CloseGame();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param do_power_off Power off (1) or reset (0)
|
||||
**/
|
||||
//resets or powers off the system, as specified
|
||||
//OR, if a movie is playing or recording, possibly reloads the movie according to funny rules.
|
||||
void RestartMovieOrReset(unsigned int do_power_off)
|
||||
{
|
||||
extern bool movie_readonly;
|
||||
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);
|
||||
|
||||
if(FCEUI_IsMovieActive())
|
||||
if(FCEUMOV_Mode(MOVIEMODE_PLAY|MOVIEMODE_RECORD))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
@ -789,7 +788,8 @@ void FCEUI_ClearEmulationFrameStepped()
|
|||
|
||||
//mbg merge 7/18/06 added
|
||||
//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;
|
||||
}
|
||||
|
||||
|
@ -859,3 +859,25 @@ int FCEU_TextScanlineOffsetFromBottom(int y)
|
|||
{
|
||||
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)
|
||||
{
|
||||
if(!FCEUMOV_IsPlaying() && !BotMode)
|
||||
if(!FCEUMOV_Mode(MOVIEMODE_PLAY) && !BotMode)
|
||||
{
|
||||
int x;
|
||||
|
||||
|
@ -475,7 +475,7 @@ void FCEU_QSimpleCommand(int cmd)
|
|||
else
|
||||
{
|
||||
FCEU_DoSimpleCommand(cmd);
|
||||
if(FCEUMOV_IsRecording())
|
||||
if(FCEUMOV_Mode(MOVIEMODE_RECORD))
|
||||
FCEUMOV_AddCommand(cmd);
|
||||
}
|
||||
}
|
||||
|
|
165
src/movie.cpp
165
src/movie.cpp
|
@ -29,7 +29,6 @@ using namespace std;
|
|||
|
||||
extern char FileBase[];
|
||||
extern int EmulationPaused;
|
||||
extern bool moviePleaseLogSavestates;
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
@ -49,10 +48,7 @@ bool suppressMovieStop=false;
|
|||
|
||||
//----movie engine main state
|
||||
|
||||
static enum EMOVIEMODE
|
||||
{
|
||||
MOVIEMODE_INACTIVE, MOVIEMODE_RECORD, MOVIEMODE_PLAY
|
||||
} movieMode = MOVIEMODE_INACTIVE;
|
||||
EMOVIEMODE movieMode = MOVIEMODE_INACTIVE;
|
||||
|
||||
//this should not be set unless we are in MOVIEMODE_RECORD!
|
||||
FILE* fpRecordingMovie = 0;
|
||||
|
@ -80,7 +76,7 @@ void MovieData::clearRecordRange(int start, int len)
|
|||
|
||||
void MovieData::TryDumpIncremental()
|
||||
{
|
||||
if(moviePleaseLogSavestates)
|
||||
if(movieMode == MOVIEMODE_TASEDIT)
|
||||
{
|
||||
//only log the savestate if we are appending to the green zone
|
||||
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.
|
||||
|
@ -400,9 +401,9 @@ void FCEUI_StopMovie()
|
|||
curMovieFilename[0] = 0;
|
||||
}
|
||||
|
||||
|
||||
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.
|
||||
|
||||
static void ResetInputTypes()
|
||||
{
|
||||
#ifdef WIN32
|
||||
|
@ -420,6 +421,69 @@ static void ResetInputTypes()
|
|||
#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)
|
||||
{
|
||||
//dump the savestate to disk
|
||||
|
@ -443,6 +507,9 @@ void MovieData::dumpSavestateTo(std::vector<char>* buf, int compressionLevel)
|
|||
//begin playing an existing movie
|
||||
void FCEUI_LoadMovie(char *fname, bool _read_only, int _pauseframe)
|
||||
{
|
||||
if(!FCEU_IsValidUI(FCEUI_PLAYMOVIE))
|
||||
return;
|
||||
|
||||
assert(fname);
|
||||
|
||||
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
|
||||
// to try fixing nondeterministic playback of some games
|
||||
{
|
||||
extern char lastLoadedGameName [2048];
|
||||
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;
|
||||
poweron(false);
|
||||
}
|
||||
|
||||
//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);
|
||||
}
|
||||
|
||||
|
||||
//begin recording a new movie
|
||||
void FCEUI_SaveMovie(char *fname, uint8 flags)
|
||||
{
|
||||
if(!FCEU_IsValidUI(FCEUI_RECORDMOVIE))
|
||||
return;
|
||||
|
||||
assert(fname);
|
||||
|
||||
FCEUI_StopMovie();
|
||||
|
@ -548,27 +603,7 @@ void FCEUI_SaveMovie(char *fname, uint8 flags)
|
|||
|
||||
if(currMovieData.poweronFlag)
|
||||
{
|
||||
// make a for-movie-recording power-on clear the game's save data, too
|
||||
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;
|
||||
poweron(true);
|
||||
}
|
||||
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
|
||||
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)
|
||||
{
|
||||
//stop when we run out of frames
|
||||
|
@ -796,24 +836,23 @@ void FCEUMOV_PreLoad(void)
|
|||
load_successful=0;
|
||||
}
|
||||
|
||||
int FCEUMOV_PostLoad(void)
|
||||
bool FCEUMOV_PostLoad(void)
|
||||
{
|
||||
if(!FCEUI_IsMovieActive())
|
||||
return 1;
|
||||
if(movieMode == MOVIEMODE_INACTIVE || movieMode == MOVIEMODE_TASEDIT)
|
||||
return true;
|
||||
else
|
||||
//mbg tasedit hack!!!!!!!!!
|
||||
return load_successful || moviePleaseLogSavestates;
|
||||
return load_successful;
|
||||
}
|
||||
|
||||
int FCEUI_IsMovieActive(void)
|
||||
{
|
||||
//this is a lame method. we should change all the fceu code that uses it to call the
|
||||
//IsRecording or IsPlaying methods
|
||||
//return > 0 for recording, < 0 for playback
|
||||
if(FCEUMOV_IsRecording()) return 1;
|
||||
else if(FCEUMOV_IsPlaying()) return -1;
|
||||
else return 0;
|
||||
}
|
||||
//int FCEUI_IsMovieActive(void)
|
||||
//{
|
||||
// //this is a lame method. we should change all the fceu code that uses it to call the
|
||||
// //IsRecording or IsPlaying methods
|
||||
// //return > 0 for recording, < 0 for playback
|
||||
// if(FCEUMOV_IsRecording()) return 1;
|
||||
// else if(FCEUMOV_IsPlaying()) return -1;
|
||||
// else return 0;
|
||||
//}
|
||||
|
||||
void FCEUI_MovieToggleFrameDisplay(void)
|
||||
{
|
||||
|
|
22
src/movie.h
22
src/movie.h
|
@ -9,16 +9,30 @@
|
|||
void FCEUMOV_AddJoy(uint8 *, int SkipFlush);
|
||||
void FCEUMOV_AddCommand(int cmd);
|
||||
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);
|
||||
int FCEUMOV_GetFrame(void);
|
||||
|
||||
int FCEUMOV_WriteState(FILE* st);
|
||||
int FCEUMOV_WriteState(std::ostream* os);
|
||||
bool FCEUMOV_ReadState(FILE* st, uint32 size);
|
||||
void FCEUMOV_PreLoad(void);
|
||||
int FCEUMOV_PostLoad(void);
|
||||
void FCEUMOV_PreLoad();
|
||||
bool FCEUMOV_PostLoad();
|
||||
|
||||
void FCEUMOV_EnterTasEdit();
|
||||
void FCEUMOV_ExitTasEdit();
|
||||
|
||||
|
||||
class MovieRecord
|
||||
|
|
|
@ -305,7 +305,7 @@ static int ReadStateChunks(FILE *st, int32 totalsize)
|
|||
read_snd=1;
|
||||
break;
|
||||
case 6:
|
||||
if(FCEUI_IsMovieActive())
|
||||
if(FCEUMOV_Mode(MOVIEMODE_PLAY|MOVIEMODE_RECORD))
|
||||
{
|
||||
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,4,FCEUCTRL_STATEINFO);
|
||||
totalsize+=WriteStateChunk(os,5,FCEUSND_STATEINFO);
|
||||
if(FCEUI_IsMovieActive())
|
||||
if(FCEUMOV_Mode(MOVIEMODE_PLAY|MOVIEMODE_RECORD))
|
||||
{
|
||||
totalsize+=WriteStateChunk(os,6,FCEUMOV_STATEINFO);
|
||||
|
||||
//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!
|
||||
extern bool moviePleaseLogSavestates;
|
||||
if(!moviePleaseLogSavestates)
|
||||
if(!FCEUMOV_Mode(MOVIEMODE_TASEDIT))
|
||||
{
|
||||
uint32 size = FCEUMOV_WriteState((std::ostream*)0);
|
||||
os->put(7);
|
||||
|
@ -881,14 +880,18 @@ int FCEUI_SelectState(int w, int show)
|
|||
|
||||
void FCEUI_SaveState(char *fname)
|
||||
{
|
||||
StateShow=0;
|
||||
FCEUSS_Save(fname);
|
||||
if(!FCEU_IsValidUI(FCEUI_SAVESTATE)) return;
|
||||
|
||||
StateShow=0;
|
||||
FCEUSS_Save(fname);
|
||||
}
|
||||
|
||||
int loadStateFailed = 0; // hack, this function should return a value instead
|
||||
|
||||
void FCEUI_LoadState(char *fname)
|
||||
{
|
||||
if(!FCEU_IsValidUI(FCEUI_LOADSTATE)) return;
|
||||
|
||||
StateShow = 0;
|
||||
loadStateFailed = 0;
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@
|
|||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
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"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
|
|
Loading…
Reference in New Issue