* saving and loading tweakCount in .tas and fm2

* Added string "Tweak Count" to Replay loading dialog
* Tasedit: View - "Show Tweak count"
* Tasedit: rewrote project save/load functions
* Tasedit: fixed old bug caused by not initializing input ports
* Tasedit: checking movie fourscore flag when creating/opening project; only show columns for pads 3 and 4 if fourscore is attached
This commit is contained in:
ansstuff 2011-09-12 12:23:48 +00:00
parent 5a2d97662f
commit e0e0f72d2f
12 changed files with 324 additions and 207 deletions

View File

@ -420,7 +420,7 @@ void DrawTextTransWH(uint8 *dest, uint32 width, uint8 *textmsg, uint8 fgcolor, i
wid = JoedCharWidth(*textmsg); wid = JoedCharWidth(*textmsg);
int newx = x+wid; int newx = x+wid;
if(newx >= width) { x=beginx; y+=8; } if(newx >= (int)width) { x=beginx; y+=8; }
for(int ny=0; ny<7; ++ny) for(int ny=0; ny<7; ++ny)
{ {

View File

@ -69,6 +69,7 @@ extern bool fullSaveStateLoads;
extern int frameSkipAmt; extern int frameSkipAmt;
extern bool TASEdit_follow_playback; extern bool TASEdit_follow_playback;
extern bool TASEdit_show_lag_frames; extern bool TASEdit_show_lag_frames;
extern bool TASEdit_show_tweak_count;
//window positions and sizes: //window positions and sizes:
extern int ChtPosX,ChtPosY; extern int ChtPosX,ChtPosY;
@ -286,6 +287,7 @@ static CFGSTRUCT fceuconfig[] = {
AC(DesynchAutoFire), AC(DesynchAutoFire),
AC(TASEdit_follow_playback), AC(TASEdit_follow_playback),
AC(TASEdit_show_lag_frames), AC(TASEdit_show_lag_frames),
AC(TASEdit_show_tweak_count),
AC(lagCounterDisplay), AC(lagCounterDisplay),
AC(oldInputDisplay), AC(oldInputDisplay),
AC(movieSubtitles), AC(movieSubtitles),

View File

@ -463,10 +463,12 @@ void InitInputPorts(bool fourscore)
int attrib; int attrib;
if(fourscore) { if(fourscore)
{
FCEUI_SetInput(0,SI_GAMEPAD,&JSreturn,0); FCEUI_SetInput(0,SI_GAMEPAD,&JSreturn,0);
FCEUI_SetInput(1,SI_GAMEPAD,&JSreturn,0); FCEUI_SetInput(1,SI_GAMEPAD,&JSreturn,0);
} else { } else
{
for(int i=0;i<2;i++) for(int i=0;i<2;i++)
{ {
attrib=0; attrib=0;

View File

@ -177,6 +177,8 @@ void UpdateReplayDialog(HWND hwndDlg)
sprintf(tmp, "%u", (unsigned)info.rerecord_count); sprintf(tmp, "%u", (unsigned)info.rerecord_count);
SetWindowTextA(GetDlgItem(hwndDlg,IDC_LABEL_UNDOCOUNT), tmp); // rerecord SetWindowTextA(GetDlgItem(hwndDlg,IDC_LABEL_UNDOCOUNT), tmp); // rerecord
sprintf(tmp, "%u", (unsigned)info.tweak_count);
SetWindowTextA(GetDlgItem(hwndDlg,IDC_LABEL_TWEAKCOUNT), tmp);
SendDlgItemMessage(hwndDlg,IDC_CHECK_READONLY,BM_SETCHECK,(replayReadOnlySetting ? BST_CHECKED : BST_UNCHECKED), 0); SendDlgItemMessage(hwndDlg,IDC_CHECK_READONLY,BM_SETCHECK,(replayReadOnlySetting ? BST_CHECKED : BST_UNCHECKED), 0);
@ -271,6 +273,7 @@ void UpdateReplayDialog(HWND hwndDlg)
SetWindowText(GetDlgItem(hwndDlg,IDC_LABEL_LENGTH),""); SetWindowText(GetDlgItem(hwndDlg,IDC_LABEL_LENGTH),"");
SetWindowText(GetDlgItem(hwndDlg,IDC_LABEL_FRAMES),""); SetWindowText(GetDlgItem(hwndDlg,IDC_LABEL_FRAMES),"");
SetWindowText(GetDlgItem(hwndDlg,IDC_LABEL_UNDOCOUNT),""); SetWindowText(GetDlgItem(hwndDlg,IDC_LABEL_UNDOCOUNT),"");
SetWindowText(GetDlgItem(hwndDlg,IDC_LABEL_TWEAKCOUNT),"");
SetWindowText(GetDlgItem(hwndDlg,IDC_LABEL_ROMUSED),""); SetWindowText(GetDlgItem(hwndDlg,IDC_LABEL_ROMUSED),"");
SetWindowText(GetDlgItem(hwndDlg,IDC_LABEL_ROMCHECKSUM),""); SetWindowText(GetDlgItem(hwndDlg,IDC_LABEL_ROMCHECKSUM),"");
SetWindowText(GetDlgItem(hwndDlg,IDC_LABEL_RECORDEDFROM),""); SetWindowText(GetDlgItem(hwndDlg,IDC_LABEL_RECORDEDFROM),"");

View File

@ -12,13 +12,11 @@
#undef APSTUDIO_READONLY_SYMBOLS #undef APSTUDIO_READONLY_SYMBOLS
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// Neutral resources // Íåéòðàëüíûé resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU) #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU)
#ifdef _WIN32
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
#pragma code_page(1252) #pragma code_page(1251)
#endif //_WIN32
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// //
@ -246,7 +244,8 @@ BEGIN
END END
POPUP "&View" POPUP "&View"
BEGIN BEGIN
MENUITEM "Show &lag frames", ID_VIEW_SHOW_LAG_FRAMES MENUITEM "Highlight &lag frames", ID_VIEW_SHOW_LAG_FRAMES
MENUITEM "Show T&weak count", ID_VIEW_SHOW_TWEAK_COUNT
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "&Follow playback", ID_VIEW_FOLLOW_PLAYBACK MENUITEM "&Follow playback", ID_VIEW_FOLLOW_PLAYBACK
END END
@ -1296,41 +1295,43 @@ BEGIN
RTEXT "Author:",65502,18,43,34,10,SS_CENTERIMAGE | NOT WS_GROUP,WS_EX_RIGHT RTEXT "Author:",65502,18,43,34,10,SS_CENTERIMAGE | NOT WS_GROUP,WS_EX_RIGHT
END END
IDD_REPLAYINP DIALOGEX 0, 0, 300, 218 IDD_REPLAYINP DIALOGEX 0, 0, 300, 215
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Play Movie" CAPTION "Play Movie"
FONT 8, "MS Shell Dlg", 0, 0, 0x0 FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN BEGIN
DEFPUSHBUTTON "OK",1,193,192,50,14 DEFPUSHBUTTON "OK",1,187,197,50,14
GROUPBOX "",65497,3,0,293,183 GROUPBOX "",65497,3,0,293,192
RTEXT "File:",65498,8,11,24,10,SS_CENTERIMAGE | NOT WS_GROUP RTEXT "File:",65498,8,11,24,10,SS_CENTERIMAGE | NOT WS_GROUP
COMBOBOX IDC_COMBO_FILENAME,35,10,257,128,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_COMBO_FILENAME,35,10,257,128,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Cancel",2,247,192,50,14 PUSHBUTTON "Cancel",2,241,197,50,14
RTEXT "Length:",64397,10,67,59,8 RTEXT "Length:",64397,10,67,59,8
RTEXT "Frames:",65496,10,78,59,8 RTEXT "Frames:",65496,10,78,59,8
RTEXT "Record Count:",65495,10,89,59,8 RTEXT "Record Count:",65495,10,89,59,8
RTEXT "ROM Used:",65493,10,111,59,8 RTEXT "ROM Used:",65493,10,122,59,8
RTEXT "ROM Checksum:",65492,10,121,59,8 RTEXT "ROM Checksum:",65492,10,133,59,8
RTEXT "Recorded From:",65491,10,100,59,8 RTEXT "Recorded From:",65491,10,111,59,8
RTEXT "Emulator Used:",65490,10,143,59,8 RTEXT "Emulator Used:",65490,10,155,59,8
RTEXT "Current ROM Sum:",65489,8,132,61,8 RTEXT "Current ROM Sum:",65489,8,144,61,8
CONTROL "Pause movie at frame",IDC_CHECK_STOPMOVIE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,49,83,10 CONTROL "Pause movie at frame",IDC_CHECK_STOPMOVIE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,49,83,10
EDITTEXT IDC_EDIT_STOPFRAME,103,47,35,12,ES_AUTOHSCROLL | ES_NUMBER EDITTEXT IDC_EDIT_STOPFRAME,103,47,35,12,ES_AUTOHSCROLL | ES_NUMBER
GROUPBOX "Parameters",IDC_STATIC,13,25,278,40 GROUPBOX "Parameters",IDC_STATIC,13,25,278,40
PUSHBUTTON "Metadata...",IDC_BUTTON_METADATA,239,71,50,14 PUSHBUTTON "Metadata...",IDC_BUTTON_METADATA,239,71,50,14
EDITTEXT IDC_LABEL_EMULATORUSED,76,143,155,12,ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP EDITTEXT IDC_LABEL_EMULATORUSED,76,155,155,12,ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP
EDITTEXT IDC_LABEL_CURRCHECKSUM,76,132,155,12,ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP EDITTEXT IDC_LABEL_CURRCHECKSUM,76,144,155,12,ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP
EDITTEXT IDC_LABEL_ROMCHECKSUM,76,122,155,12,ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP EDITTEXT IDC_LABEL_ROMCHECKSUM,76,133,155,12,ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP
EDITTEXT IDC_LABEL_ROMUSED,76,111,187,12,ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP EDITTEXT IDC_LABEL_ROMUSED,76,122,187,12,ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP
EDITTEXT IDC_LABEL_RECORDEDFROM,76,100,123,12,ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP EDITTEXT IDC_LABEL_RECORDEDFROM,76,111,123,12,ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP
CONTROL "Open &Read-Only",IDC_CHECK_READONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,36,69,10 CONTROL "Open &Read-Only",IDC_CHECK_READONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,36,69,10
EDITTEXT IDC_LABEL_UNDOCOUNT,76,89,59,12,ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP EDITTEXT IDC_LABEL_UNDOCOUNT,76,89,59,12,ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP
EDITTEXT IDC_LABEL_FRAMES,76,78,59,12,ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP EDITTEXT IDC_LABEL_FRAMES,76,78,59,12,ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP
EDITTEXT IDC_LABEL_LENGTH,76,67,59,12,ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP EDITTEXT IDC_LABEL_LENGTH,76,67,59,12,ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP
RTEXT "Pal:",65494,10,153,59,8 RTEXT "Pal:",65494,10,166,59,8
EDITTEXT IDC_LABEL_PALUSED,76,153,155,12,ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP EDITTEXT IDC_LABEL_PALUSED,76,166,155,12,ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP
RTEXT "New PPU:",65499,10,164,59,8 RTEXT "New PPU:",65499,10,177,59,8
EDITTEXT IDC_LABEL_NEWPPUUSED,76,164,155,12,ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP EDITTEXT IDC_LABEL_NEWPPUUSED,76,177,155,12,ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP
RTEXT "Tweak Count:",65500,10,100,59,8
EDITTEXT IDC_LABEL_TWEAKCOUNT,76,100,59,12,ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP
END END
TASEDIT DIALOGEX 0, 0, 474, 383 TASEDIT DIALOGEX 0, 0, 474, 383
@ -1712,6 +1713,18 @@ BEGIN
TOPMARGIN, 8 TOPMARGIN, 8
END END
"DWBDIALOG", DIALOG
BEGIN
END
"FKBDIALOG", DIALOG
BEGIN
END
"GAMEPADDIALOG", DIALOG
BEGIN
END
"GUICONFIG", DIALOG "GUICONFIG", DIALOG
BEGIN BEGIN
LEFTMARGIN, 10 LEFTMARGIN, 10
@ -1728,6 +1741,14 @@ BEGIN
BOTTOMMARGIN, 191 BOTTOMMARGIN, 191
END END
"MAHJONGDIALOG", DIALOG
BEGIN
END
"MAPINPUT", DIALOG
BEGIN
END
"MESSAGELOG", DIALOG "MESSAGELOG", DIALOG
BEGIN BEGIN
BOTTOMMARGIN, 184 BOTTOMMARGIN, 184
@ -1773,6 +1794,10 @@ BEGIN
BOTTOMMARGIN, 208 BOTTOMMARGIN, 208
END END
"DWBDIALOGSIMPLE", DIALOG
BEGIN
END
"MEMWATCH", DIALOG "MEMWATCH", DIALOG
BEGIN BEGIN
RIGHTMARGIN, 260 RIGHTMARGIN, 260
@ -1791,6 +1816,10 @@ BEGIN
BOTTOMMARGIN, 121 BOTTOMMARGIN, 121
END END
"GGCONV", DIALOG
BEGIN
END
"MONITOR", DIALOG "MONITOR", DIALOG
BEGIN BEGIN
LEFTMARGIN, 7 LEFTMARGIN, 7
@ -1814,7 +1843,7 @@ BEGIN
"IDD_REPLAYINP", DIALOG "IDD_REPLAYINP", DIALOG
BEGIN BEGIN
BOTTOMMARGIN, 214 BOTTOMMARGIN, 211
END END
"TASEDIT", DIALOG "TASEDIT", DIALOG
@ -1841,6 +1870,10 @@ BEGIN
BOTTOMMARGIN, 66 BOTTOMMARGIN, 66
END END
"CDLOGGER", DIALOG
BEGIN
END
"ARCHIVECHOOSERDIALOG", DIALOG "ARCHIVECHOOSERDIALOG", DIALOG
BEGIN BEGIN
LEFTMARGIN, 7 LEFTMARGIN, 7
@ -1875,18 +1908,16 @@ BEGIN
END END
#endif // APSTUDIO_INVOKED #endif // APSTUDIO_INVOKED
#endif // Neutral resources #endif // Íåéòðàëüíûé resources
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources // Àíãëèéñêèé (ÑØÀ) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252) #pragma code_page(1252)
#endif //_WIN32
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// //
@ -1986,7 +2017,7 @@ END
// //
IDB_TE_ARROW BITMAP "res/te_arrow.bmp" IDB_TE_ARROW BITMAP "res/te_arrow.bmp"
#endif // English (U.S.) resources #endif // Àíãëèéñêèé (ÑØÀ) resources
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////

View File

@ -261,6 +261,7 @@
#define IDC_LABEL_NEWPPUUSED 310 #define IDC_LABEL_NEWPPUUSED 310
#define MENU_PAL 311 #define MENU_PAL 311
#define IDC_DEBUGGER_VAL_SPR 311 #define IDC_DEBUGGER_VAL_SPR 311
#define IDC_LABEL_TWEAKCOUNT 311
#define IDC_DEBUGGER_BOOKMARK 312 #define IDC_DEBUGGER_BOOKMARK 312
#define MENU_DIRECTORIES 320 #define MENU_DIRECTORIES 320
#define MENU_INPUT 321 #define MENU_INPUT 321
@ -809,6 +810,7 @@
#define FCEUX_CONTEXT_GUICONFIG 40418 #define FCEUX_CONTEXT_GUICONFIG 40418
#define ID_VIEW_FOLLOW_PLAYBACK 40419 #define ID_VIEW_FOLLOW_PLAYBACK 40419
#define ID_VIEW_SHOW_LAG_FRAMES 40420 #define ID_VIEW_SHOW_LAG_FRAMES 40420
#define ID_VIEW_SHOW_TWEAK_COUNT 40421
#define IDC_DEBUGGER_ICONTRAY 55535 #define IDC_DEBUGGER_ICONTRAY 55535
#define MW_ValueLabel2 65423 #define MW_ValueLabel2 65423
#define MW_ValueLabel1 65426 #define MW_ValueLabel1 65426
@ -818,7 +820,7 @@
#ifdef APSTUDIO_INVOKED #ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS #ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 160 #define _APS_NEXT_RESOURCE_VALUE 160
#define _APS_NEXT_COMMAND_VALUE 40421 #define _APS_NEXT_COMMAND_VALUE 40422
#define _APS_NEXT_CONTROL_VALUE 1261 #define _APS_NEXT_CONTROL_VALUE 1261
#define _APS_NEXT_SYMED_VALUE 101 #define _APS_NEXT_SYMED_VALUE 101
#endif #endif

View File

@ -24,14 +24,16 @@ using namespace std;
int TasEdit_wndx, TasEdit_wndy; int TasEdit_wndx, TasEdit_wndy;
bool TASEdit_follow_playback = true; bool TASEdit_follow_playback = true;
bool TASEdit_show_lag_frames = true; bool TASEdit_show_lag_frames = true;
bool TASEdit_show_tweak_count = false;
string tasedithelp = "{16CDE0C4-02B0-4A60-A88D-076319909A4D}"; //Name of TASEdit Help page string tasedithelp = "{16CDE0C4-02B0-4A60-A88D-076319909A4D}"; //Name of TASEdit Help page
char buttonNames[NUM_JOYPAD_BUTTONS][2] = {"A", "B", "S", "T", "U", "D", "L", "R"};
HWND hwndTasEdit = 0; HWND hwndTasEdit = 0;
static HMENU hmenu, hrmenu; static HMENU hmenu, hrmenu;
static int lastCursor; static int lastCursor;
static HWND hwndList, hwndHeader; static HWND hwndList, hwndHeader, hwndTweakCount;
static WNDPROC hwndHeader_oldWndproc, hwndList_oldWndProc; static WNDPROC hwndHeader_oldWndproc, hwndList_oldWndProc;
typedef std::set<int> TSelectionFrames; typedef std::set<int> TSelectionFrames;
@ -169,8 +171,32 @@ static LONG CustomDraw(NMLVCUSTOMDRAW* msg)
} }
} }
void CreateProject(MovieData data) void EnterTasEdit()
{ {
if (movieMode == MOVIEMODE_INACTIVE)
{
FCEUI_StopMovie();
CreateCleanMovie();
//reset the rom
poweron(true);
currFrameCounter = 0;
}
else
{
//use current movie to create a new project
FCEUI_StopMovie();
}
// pause the emulator and enter tasedit mode
FCEUI_SetEmulationPaused(1);
movieMode = MOVIEMODE_TASEDIT;
currMovieData.TryDumpIncremental();
FCEU_DispMessage("Tasedit engaged",0);
}
void ExitTasEdit()
{
movieMode = MOVIEMODE_INACTIVE;
FCEU_DispMessage("Tasedit disengaged",0);
CreateCleanMovie();
} }
// called from the rest of the emulator when things happen and the tasedit should change to reflect it // called from the rest of the emulator when things happen and the tasedit should change to reflect it
@ -224,6 +250,10 @@ void RedrawList()
{ {
InvalidateRect(hwndList,0,FALSE); InvalidateRect(hwndList,0,FALSE);
} }
void RedrawTasedit()
{
InvalidateRect(hwndTasEdit,0,FALSE);
}
enum ECONTEXTMENU enum ECONTEXTMENU
{ {
@ -273,14 +303,6 @@ void RightClick(LPNMITEMACTIVATE info)
RightClickMenu(info); RightClickMenu(info);
} }
void LockGreenZone(int newstart)
{
for (int i=1; i<newstart; ++i)
{
currMovieData.savestates[i].clear();
}
}
void InvalidateGreenZone(int after) void InvalidateGreenZone(int after)
{ {
if (currMovieData.greenZoneCount > after+1) if (currMovieData.greenZoneCount > after+1)
@ -288,7 +310,7 @@ void InvalidateGreenZone(int after)
currMovieData.greenZoneCount = after+1; currMovieData.greenZoneCount = after+1;
// increase tweakCount // increase tweakCount
currMovieData.tweakCount++; currMovieData.tweakCount++;
InvalidateRect(hwndTasEdit,0,FALSE); RedrawTasedit();
if (currFrameCounter >= currMovieData.greenZoneCount) if (currFrameCounter >= currMovieData.greenZoneCount)
JumpToFrame(currMovieData.greenZoneCount-1); JumpToFrame(currMovieData.greenZoneCount-1);
} }
@ -354,7 +376,11 @@ void DoubleClick(LPNMITEMACTIVATE info)
return; return;
//if the icon or frame columns were double clicked: //if the icon or frame columns were double clicked:
if(info->iSubItem == COLUMN_ARROW || info->iSubItem == COLUMN_FRAMENUM || info->iSubItem == COLUMN_FRAMENUM2) if(info->iSubItem == COLUMN_ARROW)
{
// set bookmark (of current bookmark slot) here
} else if(info->iSubItem == COLUMN_FRAMENUM || info->iSubItem == COLUMN_FRAMENUM2)
{ {
JumpToFrame(index); JumpToFrame(index);
} }
@ -794,8 +820,28 @@ static void InitDialog()
ListView_InsertColumn(hwndList, colidx++, &lvc); ListView_InsertColumn(hwndList, colidx++, &lvc);
// pads columns // pads columns
lvc.cx = 20; lvc.cx = 20;
char buttonNames[NUM_JOYPAD_BUTTONS][2] = {"A", "B", "S", "T", "U", "D", "L", "R"}; // add pads 1 and 2
for (int joy = 0; joy < NUM_JOYPADS; ++joy) for (int joy = 0; joy < 2; ++joy)
{
for (int btn = 0; btn < NUM_JOYPAD_BUTTONS; ++btn)
{
lvc.pszText = buttonNames[btn];
ListView_InsertColumn(hwndList, colidx++, &lvc);
}
}
// add pads 3 and 4 and frame_number2
if (currMovieData.fourscore) AddFourscoreColumns();
//the initial update
UpdateTasEdit();
}
void AddFourscoreColumns()
{
LVCOLUMN lvc;
lvc.mask = LVCF_WIDTH | LVCF_TEXT;
lvc.cx = 20;
int colidx = COLUMN_JOYPAD3_A;
for (int joy = 0; joy < 2; ++joy)
{ {
for (int btn = 0; btn < NUM_JOYPAD_BUTTONS; ++btn) for (int btn = 0; btn < NUM_JOYPAD_BUTTONS; ++btn)
{ {
@ -807,10 +853,13 @@ static void InitDialog()
lvc.cx = 92; lvc.cx = 92;
lvc.pszText = "Frame#"; lvc.pszText = "Frame#";
ListView_InsertColumn(hwndList, colidx++, &lvc); ListView_InsertColumn(hwndList, colidx++, &lvc);
//----------------------------- }
void RemoveFourscoreColumns()
//the initial update {
UpdateTasEdit(); for (int i = COLUMN_FRAMENUM2; i >= COLUMN_JOYPAD3_A; --i)
{
ListView_DeleteColumn (hwndList, i);
}
} }
bool CheckSaveChanges() bool CheckSaveChanges()
@ -821,23 +870,20 @@ bool CheckSaveChanges()
void KillTasEdit() void KillTasEdit()
{ {
if (!CheckSaveChanges()) if (!CheckSaveChanges()) return;
return;
DestroyWindow(hwndTasEdit); DestroyWindow(hwndTasEdit);
hwndTasEdit = 0; hwndTasEdit = 0;
turbo=false; turbo = false;
FCEUMOV_ExitTasEdit(); ExitTasEdit();
} }
//Creates a new TASEdit Project //Creates a new TASEdit Project
static void NewProject() static void NewProject()
{ {
//determine if current project changed //determine if current project changed
//if so, ask to save changes //if so, ask to save changes
//close current project //close current project
if (!CheckSaveChanges()) return;
if (!CheckSaveChanges())
return;
//TODO: close current project instance, create a new one with a non-parameterized constructor //TODO: close current project instance, create a new one with a non-parameterized constructor
} }
@ -871,7 +917,8 @@ static void OpenProject()
string initdir = FCEU_GetPath(FCEUMKF_MOVIE); string initdir = FCEU_GetPath(FCEUMKF_MOVIE);
ofn.lpstrInitialDir=initdir.c_str(); ofn.lpstrInitialDir=initdir.c_str();
if(GetOpenFileName(&ofn)){ //If it is a valid filename if(GetOpenFileName(&ofn)) //If it is a valid filename
{
std::string tempstr = nameo; //Make a temporary string for filename std::string tempstr = nameo; //Make a temporary string for filename
char drv[512], dir[512], name[512], ext[512]; //For getting the filename! char drv[512], dir[512], name[512], ext[512]; //For getting the filename!
if(tempstr.rfind(".tas") == std::string::npos) //If they haven't put ".tas" after it if(tempstr.rfind(".tas") == std::string::npos) //If they haven't put ".tas" after it
@ -887,13 +934,21 @@ static void OpenProject()
filename.append(ext); //Stick extension back on... filename.append(ext); //Stick extension back on...
project.SetProjectFile(filename); //And update the project's filename. project.SetProjectFile(filename); //And update the project's filename.
} }
project.SetProjectName(GetRomName()); //Set the project's name to the ROM name //Set the project's name to the ROM name
project.SetProjectName(GetRomName());
//Set the fm2 name
std::string thisfm2name = project.GetProjectName(); std::string thisfm2name = project.GetProjectName();
thisfm2name.append(".fm2"); //Setup the fm2 name thisfm2name.append(".fm2");
project.SetFM2Name(thisfm2name); //Set the project's fm2 name project.SetFM2Name(thisfm2name);
// load project and change number of listview columns if needed
bool last_fourscore = currMovieData.fourscore;
project.LoadProject(project.GetProjectFile()); project.LoadProject(project.GetProjectFile());
if (last_fourscore && !currMovieData.fourscore)
RemoveFourscoreColumns();
else if (!last_fourscore && currMovieData.fourscore)
AddFourscoreColumns();
FollowPlayback();
} }
} }
// Saves current project // Saves current project
@ -997,7 +1052,7 @@ static void Truncate()
currMovieData.truncateAt(frame+1); currMovieData.truncateAt(frame+1);
InvalidateGreenZone(frame); InvalidateGreenZone(frame);
currMovieData.TryDumpIncremental(); //currMovieData.TryDumpIncremental();
UpdateTasEdit(); UpdateTasEdit();
} }
@ -1051,8 +1106,12 @@ BOOL CALLBACK WndprocTasEdit(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
case WM_PAINT: case WM_PAINT:
{ {
char temp[128]; char temp[128];
sprintf(temp,"TweakCount: %d\n",currMovieData.tweakCount); if (TASEdit_show_tweak_count)
SetWindowText(GetDlgItem(hwndDlg,IDC_TWEAKCOUNT),temp); sprintf(temp,"Tweak count: %d\n",currMovieData.tweakCount);
else
sprintf(temp,"");
SetWindowText(hwndTweakCount,temp);
RedrawTasedit();
} }
break; break;
case WM_INITDIALOG: case WM_INITDIALOG:
@ -1061,6 +1120,7 @@ BOOL CALLBACK WndprocTasEdit(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
SetWindowPos(hwndDlg,0,TasEdit_wndx,TasEdit_wndy,0,0,SWP_NOSIZE|SWP_NOZORDER|SWP_NOOWNERZORDER); SetWindowPos(hwndDlg,0,TasEdit_wndx,TasEdit_wndy,0,0,SWP_NOSIZE|SWP_NOZORDER|SWP_NOOWNERZORDER);
hwndList = GetDlgItem(hwndDlg,IDC_LIST1); hwndList = GetDlgItem(hwndDlg,IDC_LIST1);
hwndTweakCount = GetDlgItem(hwndDlg,IDC_TWEAKCOUNT);
InitDialog(); InitDialog();
break; break;
@ -1272,11 +1332,18 @@ BOOL CALLBACK WndprocTasEdit(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
FollowPlayback(); FollowPlayback();
break; break;
case ID_VIEW_SHOW_LAG_FRAMES: case ID_VIEW_SHOW_LAG_FRAMES:
//switch "Show lag frames" flag //switch "Highlight lag frames" flag
TASEdit_show_lag_frames ^= 1; TASEdit_show_lag_frames ^= 1;
CheckMenuItem(hmenu, ID_VIEW_SHOW_LAG_FRAMES, TASEdit_show_lag_frames?MF_CHECKED : MF_UNCHECKED); CheckMenuItem(hmenu, ID_VIEW_SHOW_LAG_FRAMES, TASEdit_show_lag_frames?MF_CHECKED : MF_UNCHECKED);
RedrawList(); RedrawList();
break; break;
case ID_VIEW_SHOW_TWEAK_COUNT:
//switch "Show Tweak count" flag
TASEdit_show_tweak_count ^= 1;
CheckMenuItem(hmenu, ID_VIEW_SHOW_TWEAK_COUNT, TASEdit_show_tweak_count?MF_CHECKED : MF_UNCHECKED);
//RedrawList();
break;
} }
break; break;
@ -1300,23 +1367,23 @@ void FollowPlayback()
void DoTasEdit() void DoTasEdit()
{ {
if(!FCEU_IsValidUI(FCEUI_TASEDIT)) if(!FCEU_IsValidUI(FCEUI_TASEDIT)) return;
return;
lastCursor = -1; lastCursor = -1;
if(!hwndTasEdit) EnterTasEdit();
hwndTasEdit = CreateDialog(fceu_hInstance,"TASEDIT",hAppWnd,WndprocTasEdit);
if(!hwndTasEdit) hwndTasEdit = CreateDialog(fceu_hInstance,"TASEDIT",hAppWnd,WndprocTasEdit);
if(hwndTasEdit)
{
KeyboardSetBackgroundAccessBit(KEYBACKACCESS_TASEDIT);
JoystickSetBackgroundAccessBit(JOYBACKACCESS_TASEDIT);
hmenu = GetMenu(hwndTasEdit); hmenu = GetMenu(hwndTasEdit);
hrmenu = LoadMenu(fceu_hInstance,"TASEDITCONTEXTMENUS"); hrmenu = LoadMenu(fceu_hInstance,"TASEDITCONTEXTMENUS");
// check option ticks // check option ticks
CheckMenuItem(hmenu, ID_VIEW_FOLLOW_PLAYBACK, TASEdit_follow_playback?MF_CHECKED : MF_UNCHECKED); CheckMenuItem(hmenu, ID_VIEW_FOLLOW_PLAYBACK, TASEdit_follow_playback?MF_CHECKED : MF_UNCHECKED);
CheckMenuItem(hmenu, ID_VIEW_SHOW_LAG_FRAMES, TASEdit_show_lag_frames?MF_CHECKED : MF_UNCHECKED); CheckMenuItem(hmenu, ID_VIEW_SHOW_LAG_FRAMES, TASEdit_show_lag_frames?MF_CHECKED : MF_UNCHECKED);
CheckMenuItem(hmenu, ID_VIEW_SHOW_TWEAK_COUNT, TASEdit_show_tweak_count?MF_CHECKED : MF_UNCHECKED);
if(hwndTasEdit)
{
KeyboardSetBackgroundAccessBit(KEYBACKACCESS_TASEDIT);
JoystickSetBackgroundAccessBit(JOYBACKACCESS_TASEDIT);
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);
} }
} }

View File

@ -39,6 +39,7 @@
#define COLUMN_JOYPAD4_L 32 #define COLUMN_JOYPAD4_L 32
#define COLUMN_JOYPAD4_R 33 #define COLUMN_JOYPAD4_R 33
#define COLUMN_FRAMENUM2 34 #define COLUMN_FRAMENUM2 34
// listview colors // listview colors
#define NORMAL_FRAMENUM_COLOR 0xFFFFFF #define NORMAL_FRAMENUM_COLOR 0xFFFFFF
#define CUR_FRAMENUM_COLOR 0xFCF1CE #define CUR_FRAMENUM_COLOR 0xFCF1CE
@ -56,8 +57,11 @@
// ----------------------------- // -----------------------------
void DoTasEdit(); void DoTasEdit();
void UpdateTasEdit(); void UpdateTasEdit();
void CreateProject(MovieData data);
void InvalidateGreenZone(int after); void InvalidateGreenZone(int after);
bool JumpToFrame(int index); bool JumpToFrame(int index);
int FindBeginningOfGreenZone(int starting_index); int FindBeginningOfGreenZone(int starting_index);
void FollowPlayback(); void FollowPlayback();
void AddFourscoreColumns();
void RemoveFourscoreColumns();
void EnterTasEdit();
void ExitTasEdit();

View File

@ -86,12 +86,13 @@ bool TASEDIT_PROJECT::LoadProject(std::string PFN)
char branchname; char branchname;
branchname = ifs.fgetc(); // TODO: Add main branch name. branchname = ifs.fgetc(); // TODO: Add main branch name.
currMovieData.loadGreenzone(&ifs, true); currMovieData.clearGreenzone();
if (!currMovieData.loadGreenzone(&ifs, true))
{
// there was some error while loading greenzone - reset playback to frame 0
poweron(true); poweron(true);
currFrameCounter = currMovieData.greenZoneCount; currFrameCounter = 0;
currMovieData.TryDumpIncremental(); }
changed=false; changed=false;
return true; return true;
} }

View File

@ -652,7 +652,7 @@ struct EMUCMDTABLE FCEUI_CommandTable[]=
{ EMUCMD_PAUSE, EMUCMDTYPE_MISC, FCEUI_ToggleEmulationPause, 0, 0, "Pause", EMUCMDFLAG_TASEDIT }, { EMUCMD_PAUSE, EMUCMDTYPE_MISC, FCEUI_ToggleEmulationPause, 0, 0, "Pause", EMUCMDFLAG_TASEDIT },
{ EMUCMD_FRAME_ADVANCE, EMUCMDTYPE_MISC, FCEUI_FrameAdvance, FCEUI_FrameAdvanceEnd, 0, "Frame Advance", EMUCMDFLAG_TASEDIT }, { EMUCMD_FRAME_ADVANCE, EMUCMDTYPE_MISC, FCEUI_FrameAdvance, FCEUI_FrameAdvanceEnd, 0, "Frame Advance", EMUCMDFLAG_TASEDIT },
{ EMUCMD_SCREENSHOT, EMUCMDTYPE_MISC, FCEUI_SaveSnapshot, 0, 0, "Screenshot", EMUCMDFLAG_TASEDIT }, { EMUCMD_SCREENSHOT, EMUCMDTYPE_MISC, FCEUI_SaveSnapshot, 0, 0, "Screenshot", EMUCMDFLAG_TASEDIT },
{ EMUCMD_HIDE_MENU_TOGGLE, EMUCMDTYPE_MISC, FCEUD_HideMenuToggle, 0, 0, "Hide Menu Toggle", EMUCMDFLAG_TASEDIT }, { EMUCMD_HIDE_MENU_TOGGLE, EMUCMDTYPE_MISC, FCEUD_HideMenuToggle, 0, 0, "Hide Menu Toggle", 0 },
{ EMUCMD_EXIT, EMUCMDTYPE_MISC, FCEUI_DoExit, 0, 0, "Exit", 0}, { EMUCMD_EXIT, EMUCMDTYPE_MISC, FCEUI_DoExit, 0, 0, "Exit", 0},
{ EMUCMD_SPEED_SLOWEST, EMUCMDTYPE_SPEED, CommandEmulationSpeed, 0, 0, "Slowest Speed", EMUCMDFLAG_TASEDIT }, { EMUCMD_SPEED_SLOWEST, EMUCMDTYPE_SPEED, CommandEmulationSpeed, 0, 0, "Slowest Speed", EMUCMDFLAG_TASEDIT },
{ EMUCMD_SPEED_SLOWER, EMUCMDTYPE_SPEED, CommandEmulationSpeed, 0, 0, "Speed Down", EMUCMDFLAG_TASEDIT }, { EMUCMD_SPEED_SLOWER, EMUCMDTYPE_SPEED, CommandEmulationSpeed, 0, 0, "Speed Down", EMUCMDFLAG_TASEDIT },

View File

@ -390,10 +390,10 @@ MovieData::MovieData()
, palFlag(false) , palFlag(false)
, PPUflag(false) , PPUflag(false)
, rerecordCount(0) , rerecordCount(0)
, tweakCount(0)
, binaryFlag(false) , binaryFlag(false)
, greenZoneCount(0) , greenZoneCount(0)
, microphone(false) , microphone(false)
, tweakCount(0)
{ {
memset(&romChecksum,0,sizeof(MD5DATA)); memset(&romChecksum,0,sizeof(MD5DATA));
} }
@ -416,6 +416,8 @@ void MovieData::installValue(std::string& key, std::string& val)
installInt(val,emuVersion); installInt(val,emuVersion);
else if(key == "rerecordCount") else if(key == "rerecordCount")
installInt(val,rerecordCount); installInt(val,rerecordCount);
else if(key == "tweakCount")
installInt(val,tweakCount);
else if(key == "palFlag") else if(key == "palFlag")
installBool(val,palFlag); installBool(val,palFlag);
else if(key == "romFilename") else if(key == "romFilename")
@ -462,6 +464,7 @@ int MovieData::dump(EMUFILE *os, bool binary)
os->fprintf("version %d\n", version); os->fprintf("version %d\n", version);
os->fprintf("emuVersion %d\n", emuVersion); os->fprintf("emuVersion %d\n", emuVersion);
os->fprintf("rerecordCount %d\n", rerecordCount); os->fprintf("rerecordCount %d\n", rerecordCount);
os->fprintf("tweakCount %d\n", tweakCount);
os->fprintf("palFlag %d\n" , (palFlag?1:0) ); os->fprintf("palFlag %d\n" , (palFlag?1:0) );
os->fprintf("romFilename %s\n" , romFilename.c_str() ); os->fprintf("romFilename %s\n" , romFilename.c_str() );
os->fprintf("romChecksum %s\n" , BytesToString(romChecksum.data,MD5DATA::size).c_str() ); os->fprintf("romChecksum %s\n" , BytesToString(romChecksum.data,MD5DATA::size).c_str() );
@ -471,8 +474,8 @@ int MovieData::dump(EMUFILE *os, bool binary)
os->fprintf("port0 %d\n" , ports[0] ); os->fprintf("port0 %d\n" , ports[0] );
os->fprintf("port1 %d\n" , ports[1] ); os->fprintf("port1 %d\n" , ports[1] );
os->fprintf("port2 %d\n" , ports[2] ); os->fprintf("port2 %d\n" , ports[2] );
os->fprintf("FDS %d\n" , isFDS?1:0 ); os->fprintf("FDS %d\n" , fds?1:0 );
os->fprintf("NewPPU %d\n" , newppu?1:0 ); os->fprintf("NewPPU %d\n" , PPUflag?1:0 );
for(uint32 i=0;i<comments.size();i++) for(uint32 i=0;i<comments.size();i++)
os->fprintf("comment %s\n" , wcstombs(comments[i]).c_str() ); os->fprintf("comment %s\n" , wcstombs(comments[i]).c_str() );
@ -504,47 +507,89 @@ int MovieData::dump(EMUFILE *os, bool binary)
return end-start; return end-start;
} }
void MovieData::clearGreenzone()
{
int size = currMovieData.savestates.size();
for (int i = 1; i < size; ++i)
{
currMovieData.savestates[i].clear();
}
greenZoneCount = 1;
currMovieData.frames_flags.resize(1);
// reset lua_colorings
// reset monitorings
}
int MovieData::dumpGreenzone(EMUFILE *os, bool binary) int MovieData::dumpGreenzone(EMUFILE *os, bool binary)
{ {
// save savestates
int start = os->ftell(); int start = os->ftell();
int frame, size; int frame, size;
for (int i=0; i<(int)savestates.size(); ++i) write32le(greenZoneCount, os);
for (frame = 0; frame < greenZoneCount; ++frame)
{ {
if (savestates[i].empty()) if (savestates[frame].empty()) continue;
continue;
frame=i;
size=savestates[i].size();
write32le(frame, os); write32le(frame, os);
size = savestates[frame].size();
write32le(size, os); write32le(size, os);
// write savestate
os->fwrite(&savestates[frame][0], size);
// write frames_flags
os->fwrite(&frames_flags[frame], 1);
// write lua_colorings
// write monitorings
os->fwrite(&savestates[i][0], size);
} }
frame=-1; // write -1 as eof for greenzone
size=currMovieData.greenZoneCount; write32le(-1, os);
write32le(frame, os); // finally write playback cursor position
write32le(size, os); write32le(currFrameCounter, os);
int end= os->ftell();
int end = os->ftell();
return end-start; return end-start;
} }
int MovieData::loadGreenzone(EMUFILE *is, bool binary) bool MovieData::loadGreenzone(EMUFILE *is, bool binary)
{ {
int frame, size; clearGreenzone();
int frame = 0, prev_frame = 0, size = 0;
if (read32le((uint32 *)&size, is))
{
greenZoneCount = size;
frames_flags.resize(size);
savestates.resize(size);
while(1) while(1)
{ {
if (!read32le((uint32 *)&frame, is)) {size=0; break;} if (!read32le((uint32 *)&frame, is)) break;
if (!read32le((uint32 *)&size, is)) {size=0; break;} if (frame == -1) break;
if (frame==-1) break; if (!read32le((uint32 *)&size, is)) break;
int pos = is->ftell();
FCEUSS_LoadFP(is, SSLOADPARAM_NOBACKUP);
storeTasSavestate(frame, Z_DEFAULT_COMPRESSION);
is->fseek(pos+size,SEEK_SET);
}
greenZoneCount=size;
return 1; if ((int)savestates.size() <= frame) savestates.resize(frame+1);
// load savestate
savestates[frame].resize(size);
if ((int)is->fread((char*)&savestates[frame][0],size) < size) break;
// load frames_flags
if ((int)is->fread(&frames_flags[frame],1) != 1) break;
// load lua_colorings
// load monitorings
prev_frame = frame;
}
greenZoneCount = prev_frame+1; // cut greenZoneCount to last good frame
if (frame == -1)
{
// everything went fine - load savestate at cursor position
if (read32le((uint32 *)&currFrameCounter, is) && currMovieData.loadTasSavestate(currFrameCounter))
{
return true;
}
} else
{
// there was some error while reading greenzone
}
}
return false;
} }
@ -636,6 +681,8 @@ bool LoadFM2(MovieData& movieData, EMUFILE* fp, int size, bool stopAfterHeader)
std::string a("length"), b("-1"); std::string a("length"), b("-1");
// Non-TAS projects consume until EOF // Non-TAS projects consume until EOF
movieData.installValue(a, b); movieData.installValue(a, b);
std::string a1("tweakCount"), b1("0");
movieData.installValue(a1, b1);
//first, look for an fcm signature //first, look for an fcm signature
char fcmbuf[3]; char fcmbuf[3];
@ -824,59 +871,23 @@ void poweron(bool shouldDisableBatteryLoading)
disableBatteryLoading = 0; disableBatteryLoading = 0;
} }
void CreateCleanMovie()
void FCEUMOV_EnterTasEdit()
{ {
//If no movie, start a new project, currMovieData will serve as the "main branch" file, so give it a filename and save that into the project
//Dump all header info int ot the project file
//Else use the currentmovie to create a new project
//BIG TODO: Why is this tasedit stuff in movie.cpp? Let's movie it out, it is win32 only anyway
if (movieMode == MOVIEMODE_INACTIVE)
{
//stop any current movie activity
FCEUI_StopMovie();
//clear the current movie
currFrameCounter = 0;
currMovieData = MovieData(); currMovieData = MovieData();
currMovieData.guid.newGuid();
currMovieData.palFlag = FCEUI_GetCurrentVidSystem(0,0)!=0; currMovieData.palFlag = FCEUI_GetCurrentVidSystem(0,0)!=0;
currMovieData.romChecksum = GameInfo->MD5;
currMovieData.romFilename = FileBase; currMovieData.romFilename = FileBase;
currMovieData.romChecksum = GameInfo->MD5;
//reset the rom currMovieData.guid.newGuid();
poweron(false); currMovieData.fourscore = FCEUI_GetInputFourscore();
} currMovieData.microphone = FCEUI_GetInputMicrophone();
else //currMovieData.ports[0] = InputType[0];
{ //currMovieData.ports[1] = InputType[1];
FCEUI_StopMovie(); //currMovieData.ports[2] = InputType[2];
currMovieData.greenZoneCount=currFrameCounter; currMovieData.ports[0] = joyports[0].type;
} currMovieData.ports[1] = joyports[1].type;
currMovieData.ports[2] = portFC.type;
//todo - think about this currMovieData.fds = isFDS;
//ResetInputTypes(); currMovieData.PPUflag = (newppu != 0);
//todo - maybe this instead
//FCEUD_SetInput(currMovieData.fourscore,currMovieData.microphone,(ESI)currMovieData.ports[0],(ESI)currMovieData.ports[1],(ESIFC)currMovieData.ports[2]);
#ifdef WIN32
CreateProject(currMovieData);
#endif
FCEUI_SetEmulationPaused(1); //pause the emulator
//and enter tasedit mode
movieMode = MOVIEMODE_TASEDIT;
currMovieData.TryDumpIncremental();
FCEU_DispMessage("Tasedit engaged",0);
}
void FCEUMOV_ExitTasEdit()
{
movieMode = MOVIEMODE_INACTIVE;
FCEU_DispMessage("Tasedit disengaged",0);
currMovieData = MovieData();
} }
bool FCEUMOV_FromPoweron() bool FCEUMOV_FromPoweron()
@ -985,8 +996,7 @@ bool FCEUI_LoadMovie(const char *fname, bool _read_only, bool tasedit, int _paus
{ {
currFrameCounter = 0; currFrameCounter = 0;
pauseframe = _pauseframe; pauseframe = _pauseframe;
//currMovieData.TryDumpIncremental();
currMovieData.TryDumpIncremental();
} }
else else
{ {
@ -1045,19 +1055,9 @@ void FCEUI_SaveMovie(const char *fname, EMOVIE_FLAG flags, std::wstring author)
currFrameCounter = 0; currFrameCounter = 0;
LagCounterReset(); LagCounterReset();
CreateCleanMovie();
currMovieData = MovieData();
currMovieData.guid.newGuid();
if(author != L"") currMovieData.comments.push_back(L"author " + author); if(author != L"") currMovieData.comments.push_back(L"author " + author);
currMovieData.palFlag = FCEUI_GetCurrentVidSystem(0,0)!=0;
currMovieData.romChecksum = GameInfo->MD5;
currMovieData.romFilename = FileBase;
currMovieData.fourscore = FCEUI_GetInputFourscore();
currMovieData.microphone = FCEUI_GetInputMicrophone();
currMovieData.ports[0] = joyports[0].type;
currMovieData.ports[1] = joyports[1].type;
currMovieData.ports[2] = portFC.type;
if(flags & MOVIE_FLAG_FROM_POWERON) if(flags & MOVIE_FLAG_FROM_POWERON)
{ {
@ -1635,6 +1635,7 @@ bool FCEUI_MovieGetInfo(FCEUFILE* fp, MOVIE_INFO& info, bool skipFrameCount)
info.emu_version_used = md.emuVersion; info.emu_version_used = md.emuVersion;
info.name_of_rom_used = md.romFilename; info.name_of_rom_used = md.romFilename;
info.rerecord_count = md.rerecordCount; info.rerecord_count = md.rerecordCount;
info.tweak_count = md.tweakCount;
info.comments = md.comments; info.comments = md.comments;
info.subtitles = md.subtitles; info.subtitles = md.subtitles;

View File

@ -13,6 +13,8 @@
#include "utils/guid.h" #include "utils/guid.h"
#include "utils/md5.h" #include "utils/md5.h"
extern int InputType[3];
struct FCEUFILE; struct FCEUFILE;
enum EMOVIE_FLAG enum EMOVIE_FLAG
@ -39,6 +41,7 @@ typedef struct
int movie_version; // version of the movie format in the file int movie_version; // version of the movie format in the file
uint32 num_frames; uint32 num_frames;
uint32 rerecord_count; uint32 rerecord_count;
uint32 tweak_count;
bool poweron, pal, nosynchack, ppuflag; bool poweron, pal, nosynchack, ppuflag;
bool reset; //mbg 6/21/08 - this flag isnt used anymore.. but maybe one day we can scan it out of the first record in the movie file bool reset; //mbg 6/21/08 - this flag isnt used anymore.. but maybe one day we can scan it out of the first record in the movie file
uint32 emu_version_used; // 9813 = 0.98.13 uint32 emu_version_used; // 9813 = 0.98.13
@ -90,10 +93,10 @@ bool FCEUMOV_ReadState(EMUFILE* is, uint32 size);
void FCEUMOV_PreLoad(); void FCEUMOV_PreLoad();
bool FCEUMOV_PostLoad(); bool FCEUMOV_PostLoad();
void FCEUMOV_EnterTasEdit();
void FCEUMOV_ExitTasEdit();
bool FCEUMOV_FromPoweron(); bool FCEUMOV_FromPoweron();
void CreateCleanMovie();
class MovieData; class MovieData;
class MovieRecord class MovieRecord
{ {
@ -231,8 +234,9 @@ public:
void truncateAt(int frame); void truncateAt(int frame);
void installValue(std::string& key, std::string& val); void installValue(std::string& key, std::string& val);
int dump(EMUFILE* os, bool binary); int dump(EMUFILE* os, bool binary);
void clearGreenzone();
int dumpGreenzone(EMUFILE *os, bool binary); int dumpGreenzone(EMUFILE *os, bool binary);
int loadGreenzone(EMUFILE *is, bool binary); bool loadGreenzone(EMUFILE *is, bool binary);
void clearRecordRange(int start, int len); void clearRecordRange(int start, int len);
void insertEmpty(int at, int frames); void insertEmpty(int at, int frames);