* "Tools->TAS Editor" gives focus to Taseditor when it's already open; fixed the setfocus behavior for other tools as well

* Taseditor: AdjustDown operation now works faster (not rewinding anymore)
* Taseditor: AdjustLag always combines with current History item, not creating its own item in the History Log
This commit is contained in:
ansstuff 2012-09-13 16:11:03 +00:00
parent 571d3cc550
commit 95a301dbb2
19 changed files with 277 additions and 256 deletions

View File

@ -289,7 +289,8 @@ void SaveCDLogFile(){ //todo make this button work before you've saved as
return;
}
void DoCDLogger(){
void DoCDLogger()
{
if (!GameInfo) {
FCEUD_PrintError("You must have a game loaded before you can use the Code Data Logger.");
return;
@ -299,10 +300,14 @@ void DoCDLogger(){
// return;
//}
if(!hCDLogger){
if(!hCDLogger)
{
CreateDialog(fceu_hInstance,"CDLOGGER",NULL,CDLoggerCallB);
} else {
SetWindowPos(hCDLogger,HWND_TOP,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);
} else
{
//SetWindowPos(hCDLogger,HWND_TOP,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);
ShowWindow(hCDLogger, SW_SHOWNORMAL);
SetForegroundWindow(hCDLogger);
}
}

View File

@ -633,14 +633,17 @@ void ConfigCheats(HWND hParent) {
// return;
//}
if (!CheatWindow) {
if (!CheatWindow)
{
selcheat=-1;
CheatWindow=1;
if (CheatStyle) pwindow = hCheat = CreateDialog(fceu_hInstance,"CHEATCONSOLE",NULL,CheatConsoleCallB);
else DialogBox(fceu_hInstance,"CHEATCONSOLE",hParent,CheatConsoleCallB);
} else
{
ShowWindow(hCheat, SW_SHOWNORMAL);
SetForegroundWindow(hCheat);
}
else
SetFocus(hCheat);
}
void UpdateCheatList()
@ -908,9 +911,16 @@ void SetGGConvFocus(int address,int compare){
return;
}
void DoGGConv(){
if(hGGConv)return;
hGGConv = CreateDialog(fceu_hInstance,"GGCONV",NULL,GGConvCallB);
void DoGGConv()
{
if (hGGConv)
{
ShowWindow(hGGConv, SW_SHOWNORMAL);
SetForegroundWindow(hGGConv);
} else
{
hGGConv = CreateDialog(fceu_hInstance,"GGCONV",NULL,GGConvCallB);
}
return;
}

View File

@ -1870,15 +1870,19 @@ void updateGameDependentMenusDebugger(unsigned int enable) {
//EnableWindow(GetDlgItem(hDebug,DEBUGLOADDEB),(enable ? 0 : 1));
}
void DoDebug(uint8 halt) {
if (!debugger_open) {
void DoDebug(uint8 halt)
{
if (!debugger_open)
{
hDebug = CreateDialog(fceu_hInstance,"DEBUGGER",NULL,DebuggerCallB);
if(DbgSizeX != -1 && DbgSizeY != -1)
SetWindowPos(hDebug,0,0,0,DbgSizeX,DbgSizeY,SWP_NOMOVE|SWP_NOZORDER|SWP_NOOWNERZORDER);
}
if (hDebug)
{
SetWindowPos(hDebug,HWND_TOP,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);
//SetWindowPos(hDebug,HWND_TOP,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);
ShowWindow(hDebug, SW_SHOWNORMAL);
SetForegroundWindow(hDebug);
updateGameDependentMenusDebugger(GameInfo != 0);

View File

@ -125,7 +125,8 @@ void MakeLogWindow(void)
RedoText(); // XXX jeblanchard Why didn't this work in WM_INITDIALOG?
} else
{
SetFocus(logwin);
ShowWindow(logwin, SW_SHOWNORMAL);
SetForegroundWindow(logwin);
}
}

View File

@ -1684,7 +1684,8 @@ LRESULT CALLBACK MemViewCallB(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
void DoMemView() {
void DoMemView()
{
WNDCLASSEX wndclass ;
//static RECT al;
@ -1724,7 +1725,9 @@ void DoMemView() {
UpdateCaption();
} else
{
SetWindowPos(hMemView, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);
//SetWindowPos(hMemView, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);
ShowWindow(hMemView, SW_SHOWNORMAL);
SetForegroundWindow(hMemView);
UpdateCaption();
}

View File

@ -968,7 +968,8 @@ void CreateMemWatch()
if(hwndMemWatch) //If already open, give focus
{
SetFocus(hwndMemWatch);
ShowWindow(hwndMemWatch, SW_SHOWNORMAL);
SetForegroundWindow(hwndMemWatch);
return;
}

View File

@ -536,7 +536,8 @@ BOOL CALLBACK NTViewCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
return FALSE;
}
void DoNTView() {
void DoNTView()
{
if (!GameInfo) {
FCEUD_PrintError("You must have a game loaded before you can use the Name Table Viewer.");
return;
@ -546,12 +547,16 @@ void DoNTView() {
return;
}
if (!hNTView) {
if (!hNTView)
{
hNTView = CreateDialog(fceu_hInstance,"NTVIEW",NULL,NTViewCallB);
new(cache) NTCache[4]; //reinitialize NTCache
}
if (hNTView) {
SetWindowPos(hNTView,HWND_TOP,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);
if (hNTView)
{
//SetWindowPos(hNTView,HWND_TOP,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);
ShowWindow(hNTView, SW_SHOWNORMAL);
SetForegroundWindow(hNTView);
FCEUD_UpdateNTView(-1,true);
NTViewDoBlit(1);
}

View File

@ -348,7 +348,8 @@ BOOL CALLBACK PPUViewCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam
return FALSE;
}
void DoPPUView() {
void DoPPUView()
{
if(!GameInfo) {
FCEUD_PrintError("You must have a game loaded before you can use the PPU Viewer.");
return;
@ -359,9 +360,12 @@ void DoPPUView() {
}
if(!hPPUView) hPPUView = CreateDialog(fceu_hInstance,"PPUVIEW",NULL,PPUViewCallB);
if(hPPUView) {
SetWindowPos(hPPUView,HWND_TOP,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);
FCEUD_UpdatePPUView(-1,1);
PPUViewDoBlit();
if(hPPUView)
{
//SetWindowPos(hPPUView,HWND_TOP,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);
ShowWindow(hPPUView, SW_SHOWNORMAL);
SetForegroundWindow(hPPUView);
FCEUD_UpdatePPUView(-1,1);
PPUViewDoBlit();
}
}

View File

@ -165,7 +165,7 @@ BEGIN
MENUITEM "RAM Search...", ID_RAM_SEARCH
MENUITEM "RAM Watch...", ID_RAM_WATCH
MENUITEM "&Memory Watch...", MENU_MEMORY_WATCH
MENUITEM "&TAS Editor...", MENU_TASEDITOR, INACTIVE
MENUITEM "&TAS Editor...", MENU_TASEDITOR
MENUITEM "Convert &FCM...", MENU_CONVERT_MOVIE
MENUITEM SEPARATOR
POPUP "Autofire &Pattern"
@ -1216,7 +1216,7 @@ BEGIN
END
NTVIEW DIALOGEX 44, 38, 355, 402
STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Name Table Viewer"
FONT 8, "MS Sans Serif", 0, 0, 0x0
BEGIN

View File

@ -68,10 +68,16 @@ extern void UpdateCheckedMenuItems();
extern void TaseditorAutoFunction();
extern void TaseditorManualFunction();
// returns true if Taseditor is engaged at the end of the function
bool EnterTasEditor()
{
if (!FCEU_IsValidUI(FCEUI_TASEDITOR)) return false;
if (!taseditor_window.hwndTasEditor)
if (taseditor_window.hwndTasEditor)
{
// TAS Editor is already engaged, just set focus to its window
ShowWindow(taseditor_window.hwndTasEditor, SW_SHOWNORMAL);
SetForegroundWindow(taseditor_window.hwndTasEditor);
return true;
} else if (FCEU_IsValidUI(FCEUI_TASEDITOR))
{
// start TAS Editor
// create window
@ -144,8 +150,16 @@ bool EnterTasEditor()
FCEU_DispMessage("TAS Editor engaged", 0);
taseditor_window.RedrawTaseditor();
return true;
} else return false;
} else return true;
} else
{
// couldn't init window
return false;
}
} else
{
// right now TAS Editor launch is not allowed by emulator
return true;
}
}
bool ExitTasEditor()
@ -185,20 +199,9 @@ bool ExitTasEditor()
// everyframe function
void UpdateTasEditor()
{
if (!taseditor_window.hwndTasEditor)
{
// TAS Editor is not engaged... but we still should run Lua auto function
TaseditorAutoFunction();
if (emulator_must_run_taseditor)
{
char fullname[512];
strcpy(fullname, curMovieFilename);
if (EnterTasEditor())
LoadProject(fullname);
emulator_must_run_taseditor = false;
}
} else
if (taseditor_window.hwndTasEditor)
{
// TAS Editor is engaged
// update all modules that need to be updated every frame
// the order is somewhat important, e.g. Greenzone must update before Bookmark Set, Piano Roll must update before Selection
taseditor_window.update();
@ -214,7 +217,6 @@ void UpdateTasEditor()
splicer.update();
history.update();
project.update();
// run Lua functions if needed
if (taseditor_config.enable_auto_function)
TaseditorAutoFunction();
@ -223,6 +225,18 @@ void UpdateTasEditor()
TaseditorManualFunction();
must_call_manual_lua_function = false;
}
} else
{
// TAS Editor is not engaged
TaseditorAutoFunction(); // but we still should run Lua auto function
if (emulator_must_run_taseditor)
{
char fullname[512];
strcpy(fullname, curMovieFilename);
if (EnterTasEditor())
LoadProject(fullname);
emulator_must_run_taseditor = false;
}
}
}

View File

@ -58,7 +58,7 @@ void GREENZONE::reset()
void GREENZONE::update()
{
// keep collecting savestates, this function should be called at the end of every frame
if (greenZoneCount <= currFrameCounter || (int)savestates.size() <= currFrameCounter || !savestates[currFrameCounter].size() || laglog.GetSize() <= currFrameCounter)
if (greenZoneCount <= currFrameCounter || (int)savestates.size() <= currFrameCounter || !savestates[currFrameCounter].size() || laglog.GetSize() < currFrameCounter)
CollectCurrentState();
// run cleaning from time to time
@ -85,33 +85,17 @@ void GREENZONE::CollectCurrentState()
{
// lagFlag indicates that lag was in previous frame
int old_lagFlag = laglog.GetLagInfoAtFrame(currFrameCounter - 1);
// Auto-adjust Input due to lag
// Auto-adjust Input according to lag
if (taseditor_config.adjust_input_due_to_lag)
{
if (old_lagFlag && !lagFlag)
{
// there's no more lag on previous frame - shift Input up
splicer.AdjustUp(currFrameCounter - 1);
// since AdjustUp didn't restore Playback cursor, we must rewind here
bool emu_was_paused = (FCEUI_EmulationPaused() != 0);
int saved_pause_frame = playback.GetPauseFrame();
playback.jump(currFrameCounter - 1); // rewind
if (saved_pause_frame >= 0)
playback.SeekingStart(saved_pause_frame);
if (emu_was_paused)
playback.PauseEmulation();
} else if (!old_lagFlag && lagFlag)
{
// there's new lag on previous frame - shift Input down
splicer.AdjustDown(currFrameCounter - 1);
// since AdjustDown didn't restore Playback cursor, we must rewind here
bool emu_was_paused = (FCEUI_EmulationPaused() != 0);
int saved_pause_frame = playback.GetPauseFrame();
playback.jump(currFrameCounter - 1); // rewind
if (saved_pause_frame >= 0)
playback.SeekingStart(saved_pause_frame);
if (emu_was_paused)
playback.PauseEmulation();
} else
{
// old_lagFlag == lagFlag

View File

@ -102,8 +102,7 @@ char modCaptions[MODTYPES_TOTAL][20] = {" Initialization",
" LUA Marker Set",
" LUA Marker Remove",
" LUA Marker Rename",
" LUA Change",
" AdjustLag" };
" LUA Change" };
char LuaCaptionPrefix[6] = " LUA ";
char joypadCaptions[4][5] = {"(1P)", "(2P)", "(3P)", "(4P)"};
@ -415,29 +414,14 @@ int HISTORY::JumpInTime(int new_pos)
void HISTORY::undo()
{
int step = -1;
if (taseditor_config.adjust_input_due_to_lag)
{
// if we're undoing an AdjustLag operation then undo two operations
if (GetCurrentSnapshot().mod_type == MODTYPE_ADJUST_LAG)
step = -2;
}
int result = JumpInTime(history_cursor_pos + step);
int result = JumpInTime(history_cursor_pos - 1);
if (result >= 0)
greenzone.InvalidateAndCheck(result);
return;
}
void HISTORY::redo()
{
int step = 1;
if (taseditor_config.adjust_input_due_to_lag)
{
// if we're redoing an operation followed by AdjustLag then redo two operations
if (history_cursor_pos + 2 <= history_total_items)
if (snapshots[(history_start_pos + history_cursor_pos + 2) % history_size].mod_type == MODTYPE_ADJUST_LAG)
step = 2;
}
int result = JumpInTime(history_cursor_pos + step);
int result = JumpInTime(history_cursor_pos + 1);
if (result >= 0)
greenzone.InvalidateAndCheck(result);
return;
@ -525,7 +509,6 @@ int HISTORY::RegisterChanges(int mod_type, int start, int end, int size, const c
case MODTYPE_CLONE:
case MODTYPE_DELETE:
case MODTYPE_PATTERN:
case MODTYPE_ADJUST_LAG:
{
// for these changes user prefers to see frame of attempted change (Selection cursor position), not frame of actual differences
snap.keyframe = start;
@ -533,43 +516,44 @@ int HISTORY::RegisterChanges(int mod_type, int start, int end, int size, const c
}
}
// set start_frame, end_frame, consecutive_tag
if (snap.mod_type == MODTYPE_ADJUST_LAG)
// normal operations
snap.start_frame = start;
if (mod_type == MODTYPE_INSERTNUM)
{
// special operation: AdjustLag
snap.start_frame = snap.end_frame = start;
snap.consecutive_tag = size; // -1 for Adjust Up, +1 for Adjust Down
// combine Adjustment with previous snapshot if needed
bool combine = false;
if (snapshots[real_pos].mod_type == MODTYPE_ADJUST_LAG)
combine = true;
if (combine)
{
if (snap.keyframe > snapshots[real_pos].keyframe)
snap.keyframe = snapshots[real_pos].keyframe;
if (snap.start_frame > snapshots[real_pos].start_frame)
snap.start_frame = snapshots[real_pos].start_frame;
if (snap.end_frame < snapshots[real_pos].end_frame)
snap.end_frame = snapshots[real_pos].end_frame;
snap.consecutive_tag += snapshots[real_pos].consecutive_tag;
}
// set hotchanges
if (taseditor_config.enable_hot_changes)
{
if (size < 0)
// it was Adjust Up
snap.inputlog.inheritHotChanges_DeleteNum(&snapshots[real_pos].inputlog, start, 1, !combine);
else
// it was Adjust Down
snap.inputlog.inheritHotChanges_InsertNum(&snapshots[real_pos].inputlog, start, 1, !combine);
}
// add "consecutive size" to description
strcat(snap.description, " [");
if (snap.consecutive_tag > 0)
strcat(snap.description, "+");
_itoa(snap.consecutive_tag, framenum, 10);
snap.end_frame = start + size - 1;
_itoa(size, framenum, 10);
strcat(snap.description, framenum);
strcat(snap.description, "] ");
} else
{
snap.end_frame = end;
}
int first_input_changes = first_changes;
// for lag-affecting operations only: Greenzone should be invalidated after the frame of Lag changes if this frame is less than the frame of Input changes
if (first_changes > start && end == -1)
{
// check if LagLogs of these snapshots differ before the "first_changes" frame
for (int i = start; i < first_changes; ++i)
{
if (snap.laglog.GetLagInfoAtFrame(i) != snapshots[real_pos].laglog.GetLagInfoAtFrame(i))
{
// Greenzone should be invalidated from the frame
first_changes = i;
break;
}
}
}
snap.consecutive_tag = consecutive_tag;
if (consecutive_tag && taseditor_config.combine_consecutive && snapshots[real_pos].mod_type == snap.mod_type && snapshots[real_pos].consecutive_tag == snap.consecutive_tag)
{
// combine Drawing with previous snapshot
if (snap.keyframe > snapshots[real_pos].keyframe)
snap.keyframe = snapshots[real_pos].keyframe;
if (snap.start_frame > snapshots[real_pos].start_frame)
snap.start_frame = snapshots[real_pos].start_frame;
if (snap.end_frame < snapshots[real_pos].end_frame)
snap.end_frame = snapshots[real_pos].end_frame;
// add upper and lower frame to description
strcat(snap.description, " ");
_itoa(snap.start_frame, framenum, 10);
strcat(snap.description, framenum);
if (snap.end_frame > snap.start_frame)
@ -584,143 +568,118 @@ int HISTORY::RegisterChanges(int mod_type, int start, int end, int size, const c
strcat(snap.description, " ");
strncat(snap.description, comment, SNAPSHOT_DESC_MAX_LENGTH - strlen(snap.description) - 1);
}
if (combine)
// set hotchanges
if (taseditor_config.enable_hot_changes)
{
// replace current snapshot with this cloned snapshot and truncate history here
snapshots[real_pos] = snap;
history_total_items = history_cursor_pos+1;
UpdateHistoryList();
RedrawHistoryList();
} else
{
AddItemToHistory(snap);
snap.inputlog.copyHotChanges(&snapshots[real_pos].inputlog);
snap.inputlog.fillHotChanges(snapshots[real_pos].inputlog, first_input_changes, end);
}
// replace current snapshot with this cloned snapshot and truncate history here
snapshots[real_pos] = snap;
history_total_items = history_cursor_pos+1;
UpdateHistoryList();
RedrawHistoryList();
} else
{
// normal operations
snap.start_frame = start;
if (mod_type == MODTYPE_INSERTNUM)
// don't combine
// add upper and lower frame to description
strcat(snap.description, " ");
_itoa(snap.start_frame, framenum, 10);
strcat(snap.description, framenum);
if (snap.end_frame > snap.start_frame)
{
snap.end_frame = start + size - 1;
_itoa(size, framenum, 10);
strcat(snap.description, "-");
_itoa(snap.end_frame, framenum, 10);
strcat(snap.description, framenum);
} else
{
snap.end_frame = end;
}
int first_input_changes = first_changes;
// for lag-affecting operations only: Greenzone should be invalidated after the frame of Lag changes if this frame is less than the frame of Input changes
if (first_changes > start && end == -1)
// add comment if there is one specified
if (comment)
{
// check if LagLogs of these snapshots differ before the "first_changes" frame
for (int i = start; i < first_changes; ++i)
strcat(snap.description, " ");
strncat(snap.description, comment, SNAPSHOT_DESC_MAX_LENGTH - strlen(snap.description) - 1);
}
// set hotchanges
if (taseditor_config.enable_hot_changes)
{
// inherit previous hotchanges and set new changes
switch (mod_type)
{
if (snap.laglog.GetLagInfoAtFrame(i) != snapshots[real_pos].laglog.GetLagInfoAtFrame(i))
{
// Greenzone should be invalidated from the frame
first_changes = i;
case MODTYPE_DELETE:
snap.inputlog.inheritHotChanges_DeleteSelection(&snapshots[real_pos].inputlog, frameset);
break;
case MODTYPE_INSERT:
case MODTYPE_CLONE:
snap.inputlog.inheritHotChanges_InsertSelection(&snapshots[real_pos].inputlog, frameset);
break;
case MODTYPE_INSERTNUM:
snap.inputlog.inheritHotChanges_InsertNum(&snapshots[real_pos].inputlog, start, size, true);
break;
case MODTYPE_SET:
case MODTYPE_UNSET:
case MODTYPE_CLEAR:
case MODTYPE_CUT:
case MODTYPE_PASTE:
case MODTYPE_PATTERN:
snap.inputlog.inheritHotChanges(&snapshots[real_pos].inputlog);
snap.inputlog.fillHotChanges(snapshots[real_pos].inputlog, first_input_changes, end);
break;
case MODTYPE_PASTEINSERT:
snap.inputlog.inheritHotChanges_PasteInsert(&snapshots[real_pos].inputlog, frameset);
break;
case MODTYPE_TRUNCATE:
snap.inputlog.copyHotChanges(&snapshots[real_pos].inputlog);
// do not add new hotchanges and do not fade old hotchanges, because there was nothing added
break;
}
}
}
snap.consecutive_tag = consecutive_tag;
if (consecutive_tag && taseditor_config.combine_consecutive && snapshots[real_pos].mod_type == snap.mod_type && snapshots[real_pos].consecutive_tag == snap.consecutive_tag)
{
// combine Drawing with previous snapshot
if (snap.keyframe > snapshots[real_pos].keyframe)
snap.keyframe = snapshots[real_pos].keyframe;
if (snap.start_frame > snapshots[real_pos].start_frame)
snap.start_frame = snapshots[real_pos].start_frame;
if (snap.end_frame < snapshots[real_pos].end_frame)
snap.end_frame = snapshots[real_pos].end_frame;
// add upper and lower frame to description
strcat(snap.description, " ");
_itoa(snap.start_frame, framenum, 10);
strcat(snap.description, framenum);
if (snap.end_frame > snap.start_frame)
{
strcat(snap.description, "-");
_itoa(snap.end_frame, framenum, 10);
strcat(snap.description, framenum);
}
// add comment if there is one specified
if (comment)
{
strcat(snap.description, " ");
strncat(snap.description, comment, SNAPSHOT_DESC_MAX_LENGTH - strlen(snap.description) - 1);
}
// set hotchanges
if (taseditor_config.enable_hot_changes)
{
snap.inputlog.copyHotChanges(&snapshots[real_pos].inputlog);
snap.inputlog.fillHotChanges(snapshots[real_pos].inputlog, first_input_changes, end);
}
// replace current snapshot with this cloned snapshot and truncate history here
snapshots[real_pos] = snap;
history_total_items = history_cursor_pos+1;
UpdateHistoryList();
RedrawHistoryList();
} else
{
// don't combine
// add upper and lower frame to description
strcat(snap.description, " ");
_itoa(snap.start_frame, framenum, 10);
strcat(snap.description, framenum);
if (snap.end_frame > snap.start_frame)
{
strcat(snap.description, "-");
_itoa(snap.end_frame, framenum, 10);
strcat(snap.description, framenum);
}
// add comment if there is one specified
if (comment)
{
strcat(snap.description, " ");
strncat(snap.description, comment, SNAPSHOT_DESC_MAX_LENGTH - strlen(snap.description) - 1);
}
// set hotchanges
if (taseditor_config.enable_hot_changes)
{
// inherit previous hotchanges and set new changes
switch (mod_type)
{
case MODTYPE_DELETE:
snap.inputlog.inheritHotChanges_DeleteSelection(&snapshots[real_pos].inputlog, frameset);
break;
case MODTYPE_INSERT:
case MODTYPE_CLONE:
snap.inputlog.inheritHotChanges_InsertSelection(&snapshots[real_pos].inputlog, frameset);
break;
case MODTYPE_INSERTNUM:
snap.inputlog.inheritHotChanges_InsertNum(&snapshots[real_pos].inputlog, start, size, true);
break;
case MODTYPE_SET:
case MODTYPE_UNSET:
case MODTYPE_CLEAR:
case MODTYPE_CUT:
case MODTYPE_PASTE:
case MODTYPE_PATTERN:
snap.inputlog.inheritHotChanges(&snapshots[real_pos].inputlog);
snap.inputlog.fillHotChanges(snapshots[real_pos].inputlog, first_input_changes, end);
break;
case MODTYPE_PASTEINSERT:
snap.inputlog.inheritHotChanges_PasteInsert(&snapshots[real_pos].inputlog, frameset);
break;
case MODTYPE_TRUNCATE:
snap.inputlog.copyHotChanges(&snapshots[real_pos].inputlog);
// do not add new hotchanges and do not fade old hotchanges, because there was nothing added
break;
}
}
AddItemToHistory(snap);
}
AddItemToHistory(snap);
}
branches.ChangesMadeSinceBranch();
project.SetProjectChanged();
}
return first_changes;
}
void HISTORY::RegisterAdjustLag(int start, int size)
{
// create new shanshot
SNAPSHOT snap;
snap.init(currMovieData, taseditor_config.enable_hot_changes);
// check if there are Input differences from latest snapshot
int real_pos = (history_start_pos + history_cursor_pos) % history_size;
SNAPSHOT& current_snap = snapshots[real_pos];
int first_changes = snap.inputlog.findFirstChange(current_snap.inputlog, start, -1);
if (first_changes >= 0)
{
// differences found - combine Adjustment with current snapshot
// copy all properties of current snapshot
snap.keyframe = current_snap.keyframe;
snap.start_frame = current_snap.start_frame;
snap.end_frame = current_snap.end_frame;
snap.consecutive_tag = current_snap.consecutive_tag;
// make sure that consecutive Recordings work even when there's AdjustUp inbetween
//if (current_snap.mod_type == MODTYPE_RECORD && size < 0 && current_snap.consecutive_tag == first_changes)
// snap.consecutive_tag--;
snap.rec_joypad_diff_bits = current_snap.rec_joypad_diff_bits;
snap.mod_type = current_snap.mod_type;
strcpy(snap.description, current_snap.description);
// set hotchanges
if (taseditor_config.enable_hot_changes)
{
if (size < 0)
// it was Adjust Up
snap.inputlog.inheritHotChanges_DeleteNum(&snapshots[real_pos].inputlog, start, 1, false);
else
// it was Adjust Down
snap.inputlog.inheritHotChanges_InsertNum(&snapshots[real_pos].inputlog, start, 1, false);
}
// replace current snapshot with this cloned snapshot and don't truncate history
snapshots[real_pos] = snap;
UpdateHistoryList();
RedrawHistoryList();
branches.ChangesMadeSinceBranch();
project.SetProjectChanged();
}
}
void HISTORY::RegisterMarkersChange(int mod_type, int start, int end, const char* comment)
{
// create new shanshot
@ -1293,8 +1252,6 @@ int HISTORY::GetCategoryOfOperation(int mod_type)
return CATEGORY_MARKERS_CHANGE;
case MODTYPE_LUA_CHANGE:
return CATEGORY_INPUT_MARKERS_CHANGE;
case MODTYPE_ADJUST_LAG:
return CATEGORY_INPUT_MARKERS_CHANGE;
}
// if undefined

View File

@ -66,7 +66,6 @@ enum MOD_TYPES
MODTYPE_LUA_MARKER_REMOVE,
MODTYPE_LUA_MARKER_RENAME,
MODTYPE_LUA_CHANGE,
MODTYPE_ADJUST_LAG,
MODTYPES_TOTAL
};
@ -107,6 +106,7 @@ public:
void redo();
int RegisterChanges(int mod_type, int start = 0, int end =-1, int size = 0, const char* comment = NULL, int consecutive_tag = 0, SelectionFrames* frameset = NULL);
void RegisterAdjustLag(int start, int size);
void RegisterMarkersChange(int mod_type, int start = 0, int end =-1, const char* comment = 0);
void RegisterBookmarkSet(int slot, BOOKMARK& backup_copy, int old_current_branch);

View File

@ -694,9 +694,17 @@ void SPLICER::AdjustUp(int at)
playback.StartFromZero();
// reduce Piano Roll
piano_roll.UpdateItemCount();
// check and register changes
history.RegisterChanges(MODTYPE_ADJUST_LAG, at, -1, -1);
// register changes
history.RegisterAdjustLag(at, -1);
greenzone.Invalidate(at);
// rewind, because maybe next frame also needs lag removal
bool emu_was_paused = (FCEUI_EmulationPaused() != 0);
int saved_pause_frame = playback.GetPauseFrame();
playback.jump(currFrameCounter - 1);
if (saved_pause_frame >= 0)
playback.SeekingStart(saved_pause_frame);
if (emu_was_paused)
playback.PauseEmulation();
if (markers_changed)
selection.must_find_current_marker = playback.must_find_current_marker = true;
}
@ -713,9 +721,22 @@ void SPLICER::AdjustDown(int at)
if (markers_manager.insertEmpty(at, 1))
markers_changed = true;
}
// check and register changes
history.RegisterChanges(MODTYPE_ADJUST_LAG, at, -1, 1);
// register changes
history.RegisterAdjustLag(at, +1);
greenzone.Invalidate(at + 1);
/*
// this would be needed if "changes of Input in lag frames" were affecting game Output
// but since they don't affect it, we can keep current frame savestate in the Greenzone, and only truncate the Greenzone starting from next frame
greenzone.Invalidate(at);
// rewind
bool emu_was_paused = (FCEUI_EmulationPaused() != 0);
int saved_pause_frame = playback.GetPauseFrame();
playback.jump(currFrameCounter - 1);
if (saved_pause_frame >= 0)
playback.SeekingStart(saved_pause_frame);
if (emu_was_paused)
playback.PauseEmulation();
*/
if (markers_changed)
selection.must_find_current_marker = playback.must_find_current_marker = true;
}

View File

@ -1607,8 +1607,11 @@ void DoTextHooker()
CheckDlgButton( hTextHooker, 342, BST_CHECKED );
CheckDlgButton( hTextHooker, 343, BST_CHECKED );
if (hTextHooker) {
SetWindowPos(hTextHooker,HWND_TOP,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);
if (hTextHooker)
{
//SetWindowPos(hTextHooker,HWND_TOP,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);
ShowWindow(hTextHooker, SW_SHOWNORMAL);
SetForegroundWindow(hTextHooker);
UpdateTextHooker();
TextHookerDoBlit();
}

View File

@ -648,7 +648,8 @@ void ShowLogDirDialog(void){
return;
}
void DoTracer(){
void DoTracer()
{
if (!GameInfo) {
FCEUD_PrintError("You must have a game loaded before you can use the Trace Logger.");
@ -659,10 +660,14 @@ void DoTracer(){
// return;
//}
if(!hTracer){
if(!hTracer)
{
CreateDialog(fceu_hInstance,"TRACER",NULL,TracerCallB);
//hTracer gets set in WM_INITDIALOG
} else {
SetWindowPos(hTracer,HWND_TOP,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);
} else
{
//SetWindowPos(hTracer,HWND_TOP,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);
ShowWindow(hTracer, SW_SHOWNORMAL);
SetForegroundWindow(hTracer);
}
}

View File

@ -1687,11 +1687,14 @@ LRESULT FAR PASCAL AppWndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
//Lua submenu
case ID_FILE_OPENLUAWINDOW:
if(!LuaConsoleHWnd)
if (!LuaConsoleHWnd)
{
LuaConsoleHWnd = CreateDialog(fceu_hInstance, MAKEINTRESOURCE(IDD_LUA), hWnd, (DLGPROC) DlgLuaScriptDialog);
else
} else
{
ShowWindow(LuaConsoleHWnd, SW_SHOWNORMAL);
SetForegroundWindow(LuaConsoleHWnd);
}
break;
case FCEUX_CONTEXT_CLOSELUAWINDOWS:
case ID_FILE_CLOSELUAWINDOWS:
@ -1921,9 +1924,11 @@ LRESULT FAR PASCAL AppWndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
if(!RamSearchHWnd)
{
OpenRamSearch();
}
else
} else
{
ShowWindow(RamSearchHWnd, SW_SHOWNORMAL);
SetForegroundWindow(RamSearchHWnd);
}
break;
case ID_RAM_WATCH:

View File

@ -1050,7 +1050,6 @@ bool FCEU_IsValidUI(EFCEUI ui)
case FCEUI_TASEDITOR:
if(!GameInfo) return false;
if(FCEUMOV_Mode(MOVIEMODE_TASEDITOR)) return false; // can't run two TAS Editors
break;
case FCEUI_RESET:

View File

@ -761,7 +761,7 @@ struct EMUCMDTABLE FCEUI_CommandTable[]=
{ EMUCMD_MISC_DISPLAY_BG_TOGGLE, EMUCMDTYPE_MISC, BackgroundDisplayToggle, 0, 0, "Toggle Background Display", EMUCMDFLAG_TASEDITOR },
{ EMUCMD_MISC_DISPLAY_OBJ_TOGGLE, EMUCMDTYPE_MISC, ObjectDisplayToggle, 0, 0, "Toggle Object Display", EMUCMDFLAG_TASEDITOR },
{ EMUCMD_MISC_DISPLAY_LAGCOUNTER_TOGGLE,EMUCMDTYPE_MISC, LagCounterToggle, 0, 0, "Lag Counter Toggle", EMUCMDFLAG_TASEDITOR },
{ EMUCMD_MISC_OPENTASEDITOR, EMUCMDTYPE_TOOL, LaunchTasEditor, 0, 0, "Open TAS Editor", 0},
{ EMUCMD_MISC_OPENTASEDITOR, EMUCMDTYPE_TOOL, LaunchTasEditor, 0, 0, "Open TAS Editor", EMUCMDFLAG_TASEDITOR },
{ EMUCMD_TOOL_OPENMEMORYWATCH, EMUCMDTYPE_TOOL, LaunchMemoryWatch,0, 0, "Open Memory Watch", EMUCMDFLAG_TASEDITOR },
{ EMUCMD_TOOL_OPENCHEATS, EMUCMDTYPE_TOOL, LaunchCheats, 0, 0, "Open Cheats", EMUCMDFLAG_TASEDITOR },
{ EMUCMD_TOOL_OPENDEBUGGER, EMUCMDTYPE_TOOL, LaunchDebugger, 0, 0, "Open Debugger", EMUCMDFLAG_TASEDITOR },