break tasedit. but on the way to making it better!

This commit is contained in:
zeromus 2008-06-05 06:49:11 +00:00
parent b4021afc58
commit 9a7da827a2
13 changed files with 204 additions and 111 deletions

View File

@ -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;

View File

@ -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

View File

@ -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;
}

View File

@ -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++)

View File

@ -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

View File

@ -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);
}
}

View File

@ -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);

View File

@ -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;
}

View File

@ -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);
}
}

View File

@ -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)
{

View File

@ -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

View File

@ -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;

View File

@ -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"