win32-tasedit: Added mid-movie start for start mid-movie (WIP), and to build greenzone by fast forward.
This commit is contained in:
parent
2cf4d23994
commit
e2248ca404
|
@ -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
|
||||||
|
|
||||||
|
@ -1274,6 +1275,7 @@ FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_OWNERDATA | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,11,324,364
|
CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_OWNERDATA | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,11,324,364
|
||||||
PUSHBUTTON "Truncate",IDC_HACKY1,338,46,51,16,WS_DISABLED
|
PUSHBUTTON "Truncate",IDC_HACKY1,338,46,51,16,WS_DISABLED
|
||||||
|
//PUSHBUTTON "Commit",IDC_HACKY2,404,46,51,16,WS_DISABLED
|
||||||
LTEXT "Any number of these icon buttons are pressed",IDC_STATIC,395,84,47,34
|
LTEXT "Any number of these icon buttons are pressed",IDC_STATIC,395,84,47,34
|
||||||
PUSHBUTTON "<",TASEDIT_REWIND,367,25,26,14,WS_DISABLED
|
PUSHBUTTON "<",TASEDIT_REWIND,367,25,26,14,WS_DISABLED
|
||||||
PUSHBUTTON ">",TASEDIT_FOWARD,391,25,26,14,WS_DISABLED
|
PUSHBUTTON ">",TASEDIT_FOWARD,391,25,26,14,WS_DISABLED
|
||||||
|
@ -1923,6 +1925,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
|
||||||
|
|
||||||
|
|
|
@ -108,10 +108,12 @@ static LONG CustomDraw(NMLVCUSTOMDRAW* msg)
|
||||||
case CDDS_SUBITEMPREPAINT:
|
case CDDS_SUBITEMPREPAINT:
|
||||||
SelectObject(msg->nmcd.hdc,debugSystem->hFixedFont);
|
SelectObject(msg->nmcd.hdc,debugSystem->hFixedFont);
|
||||||
if((msg->iSubItem-2)/8==0)
|
if((msg->iSubItem-2)/8==0)
|
||||||
if((int)msg->nmcd.dwItemSpec < currMovieData.greenZoneCount)
|
if((int)msg->nmcd.dwItemSpec < currMovieData.greenZoneCount &&
|
||||||
|
!currMovieData.records[msg->nmcd.dwItemSpec].savestate.empty())
|
||||||
msg->clrTextBk = RGB(192,255,192);
|
msg->clrTextBk = RGB(192,255,192);
|
||||||
else {}
|
else {}
|
||||||
else if((int)msg->nmcd.dwItemSpec < currMovieData.greenZoneCount)
|
else if((int)msg->nmcd.dwItemSpec < currMovieData.greenZoneCount &&
|
||||||
|
!currMovieData.records[msg->nmcd.dwItemSpec].savestate.empty())
|
||||||
msg->clrTextBk = RGB(144,192,144);
|
msg->clrTextBk = RGB(144,192,144);
|
||||||
else msg->clrTextBk = RGB(192,192,192);
|
else msg->clrTextBk = RGB(192,192,192);
|
||||||
return CDRF_DODEFAULT;
|
return CDRF_DODEFAULT;
|
||||||
|
@ -125,6 +127,12 @@ void UpdateTasEdit()
|
||||||
{
|
{
|
||||||
if(!hwndTasEdit) return;
|
if(!hwndTasEdit) return;
|
||||||
|
|
||||||
|
if(FCEUMOV_ShouldPause() && FCEUI_EmulationPaused()==0)
|
||||||
|
{
|
||||||
|
FCEUI_ToggleEmulationPause();
|
||||||
|
turbo = false;
|
||||||
|
}
|
||||||
|
|
||||||
//update the number of items
|
//update the number of items
|
||||||
int currLVItemCount = ListView_GetItemCount(hwndList);
|
int currLVItemCount = ListView_GetItemCount(hwndList);
|
||||||
if(currMovieData.getNumRecords() != currLVItemCount)
|
if(currMovieData.getNumRecords() != currLVItemCount)
|
||||||
|
@ -209,11 +217,80 @@ void RightClick(LPNMITEMACTIVATE info)
|
||||||
RightClickMenu(info);
|
RightClickMenu(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LockGreenZone(int newstart)
|
||||||
|
{
|
||||||
|
for (int i=1; i<newstart; ++i)
|
||||||
|
{
|
||||||
|
currMovieData.records[i].savestate.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void InvalidateGreenZone(int after)
|
void InvalidateGreenZone(int after)
|
||||||
{
|
{
|
||||||
currMovieData.greenZoneCount = std::min(after+1,currMovieData.greenZoneCount);
|
currMovieData.greenZoneCount = std::min(after+1,currMovieData.greenZoneCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* A function that tries jumping to a given frame. If unsuccessful, it than tries to jump to
|
||||||
|
a previously good frame and fastforward to it.
|
||||||
|
|
||||||
|
Returns true if a jump to the frame is made, false if nothing done.
|
||||||
|
*/
|
||||||
|
bool JumpToFrame(int index)
|
||||||
|
{
|
||||||
|
/* Work only within the greenzone. */
|
||||||
|
if (index>currMovieData.greenZoneCount)
|
||||||
|
{
|
||||||
|
return JumpToFrame(currMovieData.greenZoneCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!currMovieData.records[index].savestate.empty() &&
|
||||||
|
MovieData::loadSavestateFrom(&currMovieData.records[index].savestate))
|
||||||
|
{
|
||||||
|
currFrameCounter = index;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Disable pause. */
|
||||||
|
if (FCEUI_EmulationPaused())
|
||||||
|
FCEUI_ToggleEmulationPause();
|
||||||
|
|
||||||
|
/* Search for an earlier frame, and try warping to the current. */
|
||||||
|
for (int i=index-1; i>0; --i)
|
||||||
|
{
|
||||||
|
if (!currMovieData.records[index].savestate.empty() &&
|
||||||
|
MovieData::loadSavestateFrom(&currMovieData.records[index].savestate))
|
||||||
|
{
|
||||||
|
currFrameCounter=i;
|
||||||
|
turbo=i+256<index; // turbo unless close
|
||||||
|
pauseframe=index;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extern int disableBatteryLoading;
|
||||||
|
disableBatteryLoading = 1;
|
||||||
|
PowerNES();
|
||||||
|
disableBatteryLoading = 0;
|
||||||
|
currFrameCounter=0;
|
||||||
|
turbo = index>256;
|
||||||
|
pauseframe=index;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Simply do a reset.
|
||||||
|
if (index==0)
|
||||||
|
{
|
||||||
|
extern int disableBatteryLoading;
|
||||||
|
disableBatteryLoading = 1;
|
||||||
|
PowerNES();
|
||||||
|
disableBatteryLoading = 0;
|
||||||
|
currFrameCounter=0;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void DoubleClick(LPNMITEMACTIVATE info)
|
void DoubleClick(LPNMITEMACTIVATE info)
|
||||||
{
|
{
|
||||||
int index = info->iItem;
|
int index = info->iItem;
|
||||||
|
@ -228,8 +305,7 @@ void DoubleClick(LPNMITEMACTIVATE info)
|
||||||
//if the row is in the green zone, then move to it
|
//if the row is in the green zone, then move to it
|
||||||
if(index < currMovieData.greenZoneCount)
|
if(index < currMovieData.greenZoneCount)
|
||||||
{
|
{
|
||||||
MovieData::loadSavestateFrom(&currMovieData.records[index].savestate);
|
JumpToFrame(index);
|
||||||
currFrameCounter = index;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else //if an input column was clicked:
|
else //if an input column was clicked:
|
||||||
|
@ -244,6 +320,14 @@ void DoubleClick(LPNMITEMACTIVATE info)
|
||||||
|
|
||||||
InvalidateGreenZone(index);
|
InvalidateGreenZone(index);
|
||||||
|
|
||||||
|
// If the change is in the past, move to it.
|
||||||
|
if(index < currFrameCounter &&
|
||||||
|
index < currMovieData.greenZoneCount)
|
||||||
|
{
|
||||||
|
JumpToFrame(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//redraw everything to show the reduced green zone
|
//redraw everything to show the reduced green zone
|
||||||
RedrawList();
|
RedrawList();
|
||||||
}
|
}
|
||||||
|
@ -522,6 +606,7 @@ void KillTasEdit()
|
||||||
//TODO: determine if project has changed, and ask to save changes
|
//TODO: determine if project has changed, and ask to save changes
|
||||||
DestroyWindow(hwndTasEdit);
|
DestroyWindow(hwndTasEdit);
|
||||||
hwndTasEdit = 0;
|
hwndTasEdit = 0;
|
||||||
|
turbo=false;
|
||||||
FCEUMOV_ExitTasEdit();
|
FCEUMOV_ExitTasEdit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -809,6 +894,12 @@ BOOL CALLBACK WndprocTasEdit(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
|
||||||
UpdateTasEdit();
|
UpdateTasEdit();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case IDC_HACKY2:
|
||||||
|
//hacky2: delete earlier savestates (conserve memory)
|
||||||
|
LockGreenZone(currFrameCounter);
|
||||||
|
UpdateTasEdit();
|
||||||
|
break;
|
||||||
|
|
||||||
case ACCEL_CTRL_B:
|
case ACCEL_CTRL_B:
|
||||||
case ID_EDIT_BRANCH:
|
case ID_EDIT_BRANCH:
|
||||||
case ID_CONTEXT_SELECTED_BRANCH:
|
case ID_CONTEXT_SELECTED_BRANCH:
|
||||||
|
|
|
@ -265,6 +265,7 @@ extern struct EMUCMDTABLE FCEUI_CommandTable[];
|
||||||
extern unsigned int lagCounter;
|
extern unsigned int lagCounter;
|
||||||
extern bool lagCounterDisplay;
|
extern bool lagCounterDisplay;
|
||||||
extern char lagFlag;
|
extern char lagFlag;
|
||||||
|
extern bool turbo;
|
||||||
void LagCounterReset();
|
void LagCounterReset();
|
||||||
|
|
||||||
#endif //_INPUT_H_
|
#endif //_INPUT_H_
|
||||||
|
|
|
@ -133,6 +133,9 @@ void MovieData::TryDumpIncremental()
|
||||||
|
|
||||||
MovieData::dumpSavestateTo(&currMovieData.records[currFrameCounter].savestate,Z_DEFAULT_COMPRESSION);
|
MovieData::dumpSavestateTo(&currMovieData.records[currFrameCounter].savestate,Z_DEFAULT_COMPRESSION);
|
||||||
currMovieData.greenZoneCount++;
|
currMovieData.greenZoneCount++;
|
||||||
|
} else if (currFrameCounter < currMovieData.greenZoneCount || !movie_readonly)
|
||||||
|
{
|
||||||
|
MovieData::dumpSavestateTo(&currMovieData.records[currFrameCounter].savestate,Z_DEFAULT_COMPRESSION);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -678,19 +681,26 @@ static void poweron(bool shouldDisableBatteryLoading)
|
||||||
|
|
||||||
void FCEUMOV_EnterTasEdit()
|
void FCEUMOV_EnterTasEdit()
|
||||||
{
|
{
|
||||||
//stop any current movie activity
|
if (movieMode == MOVIEMODE_INACTIVE)
|
||||||
FCEUI_StopMovie();
|
{
|
||||||
|
//stop any current movie activity
|
||||||
|
FCEUI_StopMovie();
|
||||||
|
|
||||||
//clear the current movie
|
//clear the current movie
|
||||||
currFrameCounter = 0;
|
currFrameCounter = 0;
|
||||||
currMovieData = MovieData();
|
currMovieData = MovieData();
|
||||||
currMovieData.guid.newGuid();
|
currMovieData.guid.newGuid();
|
||||||
currMovieData.palFlag = FCEUI_GetCurrentVidSystem(0,0)!=0;
|
currMovieData.palFlag = FCEUI_GetCurrentVidSystem(0,0)!=0;
|
||||||
currMovieData.romChecksum = GameInfo->MD5;
|
currMovieData.romChecksum = GameInfo->MD5;
|
||||||
currMovieData.romFilename = FileBase;
|
currMovieData.romFilename = FileBase;
|
||||||
|
|
||||||
//reset the rom
|
//reset the rom
|
||||||
poweron(false);
|
poweron(false);
|
||||||
|
} else {
|
||||||
|
FCEUI_StopMovie();
|
||||||
|
|
||||||
|
currMovieData.greenZoneCount=currFrameCounter;
|
||||||
|
}
|
||||||
|
|
||||||
//todo - think about this
|
//todo - think about this
|
||||||
//ResetInputTypes();
|
//ResetInputTypes();
|
||||||
|
|
|
@ -243,6 +243,7 @@ extern bool subtitlesOnAVI;
|
||||||
extern bool freshMovie;
|
extern bool freshMovie;
|
||||||
extern bool movie_readonly;
|
extern bool movie_readonly;
|
||||||
extern bool autoMovieBackup;
|
extern bool autoMovieBackup;
|
||||||
|
extern int pauseframe;
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
bool CheckFileExists(const char* filename); //Receives a filename (fullpath) and checks to see if that file exists
|
bool CheckFileExists(const char* filename); //Receives a filename (fullpath) and checks to see if that file exists
|
||||||
void FCEUI_MakeBackupMovie(bool dispMessage);
|
void FCEUI_MakeBackupMovie(bool dispMessage);
|
||||||
|
|
Loading…
Reference in New Issue