updated docs and changed version to 2.2.0

[[Split portion of a mixed commit.]]
This commit is contained in:
ansstuff 2012-11-27 17:03:56 +00:00
parent fe45494191
commit a4a56ec5a8
93 changed files with 1647 additions and 1207 deletions

View File

@ -3,7 +3,7 @@
<head>
<title>CPU - 6502</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("6502CPU");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("6502CPU");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts65">#</span></p>
<p><span class="rvts65"># $Id: 6502_cpu.txt,v 1.1.1.1 2004/08/29 01:29:35 bryan Exp $</span></p>
<p><span class="rvts65">#</span></p>
@ -1593,7 +1597,8 @@
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Full featured multi-format Help generator</a></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Full-featured multi-format Help generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>AVI Capturing</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("AVICapturing");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("AVICapturing");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">Video &amp; Audio Capturing</span></p>
<p><span class="rvts16"><br/></span></p>
<p><span class="rvts16">Introduction</span></p>
@ -75,6 +79,7 @@
<p><br/></p>
<p>To capture audio only, navigate to File &gt; AVI/Wav &gt; Record WAV. &nbsp;Pick a filename and destination for FCEUX to begin capturing the audio to a .wav file (raw .pcm). &nbsp;To stop WAV recording, select File &gt; AVI/Wav &gt; Stop WAV.</p>
<p><br/></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Create HTML Help, DOC, PDF and print manuals from 1 single source</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Auto Fire Settings</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("AutoFireConfigurations");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("AutoFireConfigurations");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts36">Auto Fire Settings</span></p>
<p><br/></p>
<p><span class="rvts12">Autofire Pattern</span></p>
@ -68,6 +72,7 @@
<p><br/></p>
<p><br/></p>
<p>Note: All autofire patterns read the Lag Counter (see <span class="rvts18">display</span>) and skip over any frames where input is not polled. &nbsp;This means that in a laggy area, the autofire pattern will not be affected.</p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/create-ebooks-for-amazon-kindle">Produce Kindle eBooks easily</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Cheat Search</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("CheatSearch");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("CheatSearch");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">FCE Ultra Cheat Guide</span></p>
<p><span class="rvts12"><br/></span></p>
<p><span class="rvts12">Introduction</span></p>
@ -149,6 +153,7 @@
<p><br/></p>
<p><span class="rvts33">Goto In Hex Editor</span> - Opens the <a class="rvts18" href="HexEditor.html">Hex editor</a> dialog to the position of the selected RAM value.</p>
<p><br/></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Easy CHM and documentation editor</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Code/Data Logger</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("CodeDataLogger");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("CodeDataLogger");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">Code/Data Logger</span></p>
<p><br/></p>
<p><br/></p>
@ -174,6 +178,7 @@
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free HTML Help documentation generator</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Command Line Options</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("CommandLineOptions");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("CommandLineOptions");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">Command Line Options</span></p>
<p><br/></p>
<p><br/></p>
@ -222,6 +226,7 @@
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;<span class="rvts29">fceux -lua memwatch.lua</span></p>
<p><br/></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create Help documents</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Using Lua</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Commands");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Commands");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p>(written by qFox)</p>
<p><br/></p>
<p><span class="rvts28">Introduction</span></p>
@ -245,6 +249,7 @@
<p>savestate.save(state); -- save the given savestate</p>
<p><br/></p>
<p>For an up-to-date list of functions, see the <a class="rvts18" href="LuaFunctionsList.html">Lua Functions List</a>.</p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create Web Help sites</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Config</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Config");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Config");
}
});
</script>
</head>
@ -48,6 +51,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">The Config Menu</span></p>
<p><br/></p>
<p><br/></p>
@ -102,6 +106,7 @@
<p><a class="rvts35" href="MapHotkeys.html">Map Hotkeys</a></p>
<p><br/></p>
<p>Sets Hotkey assignments.</p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create Help documents</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Context Menu Items</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("ContextMenuItems");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("ContextMenuItems");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">Context Menu</span></p>
<p><br/></p>
<p>FCEUX includes a context menu that allows commonly used menu functions for various situations. &nbsp;There are some functions that appear only here.</p>
@ -183,7 +187,8 @@
</ul>
<p><br/></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/create-epub-ebooks">Full featured EBook editor</a></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/create-epub-ebooks">Full-featured EBook editor</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Convert fcm</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Covertfcm");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Covertfcm");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">Converting .fcm to .fm2 files</span></p>
<p><br/></p>
<p>FCEUX uses a new movie file format (.fm2). &nbsp;In order to use movie files frame previous FCE Ultra versions (.fcm) you will need to convert to .fm2 first.</p>
@ -59,7 +63,8 @@
<p><span class="rvts16">Using .fcm Convert</span></p>
<p><br/></p>
<p>To use it simply highlight it. &nbsp;Then select the .fcm you wish to convert (or shift+click to select multiple .fcm files). &nbsp;Then click Open to have the select files converted. &nbsp;All files selected will have a matching .fm2 file copied into the same folder.</p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Full featured Help generator</a></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Full-featured Help generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Customizing through the Config File</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("CustomizingthroughtheConfigFil");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("CustomizingthroughtheConfigFil");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">Customizing through the Config File</span></p>
<p><br/></p>
<p>There are some options that can only be done by directly editing the config (fceux.cfg) file. &nbsp;All of those options are documented here.</p>
@ -85,6 +89,7 @@
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22">These values allows are the Hex Editor color scheme values (RGB). &nbsp;The background color is 255,255,255 (white) by default. &nbsp;The foreground color (text) is 0,0,0 (black) by default. &nbsp;When an address is frozen it is 0,0,255 (blue) by default.</span></p>
<p><span class="rvts22"><br/></span></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create HTML Help documents</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Debug</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Debug");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Debug");
}
});
</script>
</head>
@ -48,6 +51,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">Debug</span></p>
<p><br/></p>
<p>Guides for the specific tools and settings under FCEUX's Debug menu.</p>
@ -88,6 +92,7 @@
<p>Allows you to add Game Genie codes to the Cheats menu, decode existing</p>
<p>ones to their component information, and (re)create a code with desired values.</p>
<p><br/></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/create-ebooks-for-amazon-kindle">Produce Kindle eBooks easily</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Debugger</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Debugger");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Debugger");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">Debugger</span></p>
<p><br/></p>
<p><br/></p>
@ -305,7 +309,8 @@
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/create-epub-ebooks">Full featured EBook editor</a></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/create-epub-ebooks">Full-featured EBook editor</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Directories</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Directories");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Directories");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">Directory Overrides</span></p>
<p><br/></p>
<p><br/></p>
@ -107,6 +111,7 @@
<p><br/></p>
<p><span class="rvts16">AVI Output</span></p>
<p>overrides which directory FCEUX will default to when saving a <a class="rvts18" href="AVICapturing.html">.avi file</a>.</p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/create-epub-ebooks">Free EPub producer</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>External Input</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("ExternalInput");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("ExternalInput");
}
});
</script>
</head>
@ -52,10 +55,12 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">Use External Input</span></p>
<p><br/></p>
<p>Use External Input release control of FCEU so that an external program (such as a TAS bot) can save/load states, frame advance, and deliver input. &nbsp;This feature was original implemented for older version of <span class="rvts18">Basic bot</span>. </p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/create-epub-ebooks">Full featured EPub generator</a></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/create-epub-ebooks">Full-featured EPub generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>FAQ / Guides</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("FAQGuides");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("FAQGuides");
}
});
</script>
</head>
@ -48,6 +51,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">FAQ / Guides</span></p>
<p><br/></p>
<p>Information regarding various concepts such as TAS, ROM Hacking, RAM Mapping.</p>
@ -73,6 +77,7 @@
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free HTML Help documentation generator</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>FCE Ultra Version History</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("FCEUltraVersionHistory");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("FCEUltraVersionHistory");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">History of FCEUX / FCE Ultra</span></p>
<p><br/></p>
<p>FCEUX was started in 2006 by zeromus and rheiny (sp) as an attempt to merge various branches of FCE Ultra into a unified emulator. &nbsp;Additional authors joined the project, including mz, adelikat, nitsujrehtona, maximus, CaH4e3, qFox, punkrockguy318, Sebastian Porst and AnS.</p>
@ -130,6 +134,7 @@
<p>FCEUX supports mappers from older versions of FCEU-mm.</p>
<p><br/></p>
<p><a class="rvts18" href="http://sourceforge.net/projects/fceumm/">FCEU-mm SourceForge page</a></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create CHM Help documents</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Famicom Disk Sytem</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("FamicomDiskSytem");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("FamicomDiskSytem");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">Famicom Disk System</span></p>
<p><br/></p>
<p>The Family Computer Disk System (FDS) was released in 1986 by Nintendo as a peripheral for the Family Computer ("Famicom") console in Japan. It was a unit that used proprietary floppy disks for data storage. It was announced, but never released, for the North American Nintendo Entertainment System.</p>
@ -92,6 +96,7 @@
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free CHM Help documentation generator</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>GUI</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("GUI");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("GUI");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">GUI</span></p>
<p><br/></p>
<p>Various toggle boxes related to the FCEUX main window.</p>
@ -101,6 +105,7 @@
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Single source CHM, PDF, DOC and HTML Help creation</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Game Genie Encoder/Decoder</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("GameGenieEncoderDecoder");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("GameGenieEncoderDecoder");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">Game Genie Decoder/Encoder</span></p>
<p><br/></p>
<p>This will take an NES address space PRG address ($8000-$FFFF), a comparison value (for 8-letter GG codes; refer to a Game Genie code FAQ for an explanation of what this does), and a Value that replaces the addressed byte.</p>
@ -81,6 +85,7 @@
<p>Once you've found a part of PRG-ROM you want to change to create a code effect, snap the <a class="rvts18" href="Debugger.html">Debugger</a> (if it's not so already) and find the code's location in the PRG-ROM's address space ($8000-$FFFF) (you'll want the debugger snapped so the game won't swap banks out from under you). Then, using the built-in <a class="rvts18" href="HexEditor.html">Hex Editor</a>, view the NES memory and go to the PRG-ROM address you wish to modify, then right-click the byte and choose "Create Game Genie Code at this Address". The Game Genie Code Decoder/Encoder will appear, with the Address and Compare boxes filled in (the Compare box represents the address's original value). Enter the new value into the "Value" box. </p>
<p><br/></p>
<p>An alternative way to enter the code is to locate the desired address in the debugger, and then middle-click on it, which will summon the GG Code Decoder/Encoder. Then enter the code as described above</p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free EPub and documentation generator</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Game file compatibility</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Gamefilecompatibility");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Gamefilecompatibility");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">File Formats/Expansion Hardware</span></p>
<p><br/></p>
<p><span class="rvts16">Valid Game Types</span></p>
@ -81,6 +85,7 @@
<p>(Some operating systems and environments will hide file extensions. Keep this in mind if you are having trouble.)</p>
<p><br/></p>
<p>Patching is supported for all supported formats (iNES, FDS, UNIF, and NSF), but it will probably only be useful for the iNES and FDS formats. UNIF files can't be patched well with the IPS format because they are chunk-based with no fixed offsets. </p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create Help documents</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>General</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("General");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("General");
}
});
</script>
</head>
@ -48,6 +51,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">General</span></p>
<p><br/></p>
<p>Guides for general uses of FCEUX.</p>
@ -75,7 +79,8 @@
<p><a class="rvts27" href="AVICapturing.html">AVI Capturing</a></p>
<p><br/></p>
<p>A guide for capturing a game/movie file into an AVI file.</p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Full featured Documentation generator</a></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Full-featured Documentation generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Getting Started</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Gettingstarted");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Gettingstarted");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">Getting Started</span></p>
<p><br/></p>
<p><span class="rvts28">Playing Games</span></p>
@ -91,6 +95,7 @@
<p>If you make a savestate, it will overwrite the existing savestate for that slot. &nbsp;You have the option to undo this and restore the previous savestate file by right-clicking and selecting undo savestate. &nbsp;Once you undo, you will have the option to redo savestate to restore the savestate that you made. &nbsp;You can also map a <a class="rvts18" href="MapHotkeys.html">hotkey</a> to this function, by default it's mapped to Ctrl+Z.</p>
<p><br/></p>
<p><br/></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/iphone-website-generation">Create iPhone web-based documentation</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Hex Editor</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("HexEditor");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("HexEditor");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">Hex Editor</span></p>
<p><br/></p>
<p><span class="rvts16">Introduction</span></p>
@ -86,6 +90,7 @@
<p><br/></p>
<p>.</p>
<p><br/></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create Help documents</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Input</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Input");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Input");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">Input Configuration</span></p>
<p><br/></p>
<p><br/></p>
@ -103,6 +107,7 @@
<p><br/></p>
<p>To turn off all auto-hold assignments press the clear auto-holds hotkey.</p>
<p><span class="rvts10"><br/></span></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/create-epub-ebooks">Generate EPub eBooks with ease</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Introduction</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Intro");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Intro");
}
});
</script>
</head>
@ -46,6 +49,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts12">Introduction</span></p>
<p><br/></p>
<p>Basic information about FCEUX and its features.</p>
@ -57,6 +61,7 @@
<p><a class="rvts11" href="FCEUltraVersionHistory.html">FCE Ultra Version History</a></p>
<p><span class="rvts11"><br/></span></p>
<p><a class="rvts11" href="WhatsNew200.html">What's Combined In FCEUX?</a></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/create-epub-ebooks">Write EPub books for the iPad</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Introduction</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Introduction");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Introduction");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts16">Welcome to the FCEUX Help menu.</span></p>
<p><br/></p>
<p>The following information is about how to use FCEUX, its commands, how to use FCEUX to its fullest, and the communities for which FCEUX is designed.</p>
@ -94,6 +98,7 @@
<p>Minor edits of lua-related text by FatRatKnight.</p>
<p>Debugger documentation edits by rainwarrior.</p>
<p><br/></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Free help authoring environment</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Lua Bot</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("LuaBot");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("LuaBot");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">LuaBot</span></p>
<p><br/></p>
<p>LuaBot employs a new concept in FCEUX Tool creation. &nbsp;It is an external lua script that creates the Basic bot GUI. &nbsp;The GUI then uses lua scripting to perform botting tasks.</p>
@ -200,6 +204,7 @@
<p>This is called immediately after the input (pressKeyX) functions have been called. Returns nothing.</p>
<p><br/></p>
<p><br/></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create Help documents</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Lua Functions List</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("LuaFunctionsList");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("LuaFunctionsList");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">Lua Functions</span></p>
<p><br/></p>
<p>The following functions are available in FCEUX, in addition to standard LUA capabilities:</p>
@ -315,7 +319,7 @@
<p><span class="rvts38"><br/></span></p>
<p><span class="rvts38">Returns a table of every game button, where each entry is true if that button is held at the moment of calling the function, or false if it is not held. This function polls keyboard input immediately, allowing Lua to interact with user even when emulator is paused.</span></p>
<p><span class="rvts38"><br/></span></p>
<p><span class="rvts38">As of FCEUX 2.1.6, the function only works in Windows. In Linux this function will return nil.</span></p>
<p><span class="rvts38">As of FCEUX 2.2.0, the function only works in Windows. In Linux this function will return nil.</span></p>
<p><span class="rvts38"><br/></span></p>
<p><span class="rvts59">table joypad.getdown(int player)</span></p>
<p><span class="rvts59">table joypad.readdown(int player)</span></p>
@ -768,6 +772,7 @@
<p><span class="rvts38"><br/></span></p>
<p><span class="rvts38">For transparancy use "clear".</span></p>
<p><span class="rvts38"><br/></span></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create EPub books</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Getting Started</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("LuaGettingStarted");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("LuaGettingStarted");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts56">Using Lua scripting</span></p>
<p><span class="rvts33"><br/></span></p>
<p>Lua is built into FCEUX as of 2.1.2, and luapack DLL files are no longer needed in this and later versions.</p>
@ -88,6 +92,7 @@
<p>end</p>
<p><br/></p>
<p>The way instructions are sent to FCEUX is through a set of specially defined functions (and variables) which are called an API, the specification of which follows.</p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create Help documents</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Lua Scripting</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("LuaScripting");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("LuaScripting");
}
});
</script>
</head>
@ -48,6 +51,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">Lua Scripting</span></p>
<p><br/></p>
<p>Lua is a scripting language similar to Perl or Python. &nbsp;It allows for logical evaluation equivalent to languages like C but in a much more dynamic way that eliminates much of the need to compile programs and worry about low level resource management like deleting objects. &nbsp;In the context of FCEUX, Lua allows for direct control of the emulator through this logical construct.</p>
@ -72,6 +76,7 @@
<p><a class="rvts55" href="LuaBot.html">Lua Bot</a></p>
<p><br/></p>
<p>How to use Luau's version of Basic bot.</p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/iphone-website-generation">Free iPhone documentation generator</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Map Hotkeys</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("MapHotkeys");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("MapHotkeys");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">Map Hotkeys</span></p>
<p><br/></p>
<p>The map hotkeys dialog allows you to assign hotkeys to various FCEUX commands.</p>
@ -61,7 +65,8 @@
<p>The filter pull down menu allows you to only see hotkey listings in various categories (the list shows all hotkey assignments by default).</p>
<p><br/></p>
<p>The Restore defaults button will change all hotkeys to their default values.</p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Full featured Help generator</a></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Full-featured Help generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Memory Watch</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("MemoryWatch");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("MemoryWatch");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">Memory Watch</span></p>
<p><span class="rvts12"><br/></span></p>
<p><span class="rvts12">Overview</span></p>
@ -114,6 +118,7 @@
<p>The ram address 001C functions as a "lag flag". &nbsp;It will remain 0, then change to a positive value on a frame that the game lags.</p>
<p><br/></p>
<p>We could put 001C in one of the 1st two memory watch edit boxes. &nbsp;Then set the corresponding formula in the memory change monitoring to "&gt; then" (greater than). &nbsp;Now the count will show us how many lag frames occur in the movie.</p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create HTML Help documents</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Movie Options</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("MovieOptions");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("MovieOptions");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">Movie Options</span></p>
<p><span class="rvts15"><br/></span></p>
<p><span class="rvts15"><br/></span></p>
@ -99,6 +103,7 @@
<p>If checked, FCEUX will not truncate movie immediately when you load its savestate in Recording mode (thus behaving similar to VBA-rr and Snes9x emulators). If unchecked, the movie will always shrink to the frame of the savestate you loaded.</p>
<p><br/></p>
<p><br/></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Single source CHM, PDF, DOC and HTML Help creation</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Movie Recording</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("MovieRecording");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("MovieRecording");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">Movie Recording</span></p>
<p><br/></p>
<p><span class="rvts16">Introduction</span></p>
@ -138,6 +142,7 @@
<p>FCEUX now supports subtitles in the .fm2 file format. &nbsp;Subtitles will be displayed on the screen automatically as a movie plays. &nbsp;You can turn on/off subtitles by navigating to Config &gt; Movie Options &gt; Display movie subtitles (see <a class="rvts18" href="MovieOptions.html">Movie options</a>).</p>
<p><br/></p>
<p>For adding subtitles to a movie see the <a class="rvts18" href="fm2.html">.fm2 documentation</a>.</p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create Web Help sites</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Movie &amp; Savestate formats</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Movieformats");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Movieformats");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">Movie and Savestate File Formats</span></p>
<p><br/></p>
<p>The Following documentation deals with the specific technical information regarding the format of movie &amp; savestate files.</p>
@ -61,6 +65,7 @@
<p><a class="rvts26" href="fcm.html">.fcm</a> - Movie file format from previous FCEU versions (compatible with FCEUX via <a class="rvts18" href="Covertfcm.html">Convert FCM</a>)</p>
<p><br/></p>
<p><a class="rvts26" href="fcs.html">.fcs</a> - Savestate file format</p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Easy CHM and documentation editor</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>NES Menu</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("NES");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("NES");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">NES</span></p>
<p><br/></p>
<p>Explains commands in the NES menu of FCEUX.</p>
@ -89,7 +93,8 @@
<p><br/></p>
<p><span class="rvts16">Turbo</span></p>
<p>Toggles turbo mode. &nbsp; In turbo mode, emulation is set its fastest settings.</p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/create-ebooks-for-amazon-kindle">Full featured Kindle eBooks generator</a></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/create-ebooks-for-amazon-kindle">Full-featured Kindle eBooks generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>NES Processing</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("NESProcessor");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("NESProcessor");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">NES Processing</span></p>
<p><br/></p>
<p>Includes Technical Specifications for the emulation of the NES CPU (6502) and the NES PPU (2C02).</p>
@ -63,6 +67,7 @@
<p><a class="rvts18" href="NESScrolling1.html">NES Scrolling part 1</a></p>
<p><br/></p>
<p><a class="rvts18" href="NESScrolling2.html">NES Scrolling part 2 </a></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create HTML Help documents</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>NES RAM (Mapping/Finding Values)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("NESRAMMappingFindingValues");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("NESRAMMappingFindingValues");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">NES Mapping</span></p>
<p><br/></p>
<p>This guide gives a map of the addresses in the NES cpu and explains each portion in detail. &nbsp;</p>
@ -260,6 +264,7 @@
<p>See also, <a class="rvts18" href="MemoryWatch.html">Memory Watch</a>, <a class="rvts18" href="HexEditor.html">Hex Editor</a>,<a class="rvts18" href="CheatSearch.html"> Cheat Search</a>, <span class="rvts18">Ram Filter</span>, <a class="rvts18" href="MovieRecording.html">Movie Making</a>, <a class="rvts18" href="ToolAssistedSpeedruns.html">Tool Assisted Speedruns</a></p>
<p><br/></p>
<p><br/></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free CHM Help documentation generator</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>NES Scrolling 1</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("NESScrolling1");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("NESScrolling1");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p>Subject: [nesdev] the skinny on nes scrolling</p>
<p>Date: Tue, 13 Apr 1999 16:42:00 -0600</p>
<p>From: loopy &lt;zxcvzxcv@netzero.net&gt;</p>
@ -107,6 +111,7 @@
<p>it.</p>
<p><br/></p>
<p><br/></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free EPub and documentation generator</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>NES Scrolling 2</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("NESScrolling2");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("NESScrolling2");
}
});
</script>
</head>
@ -50,6 +53,7 @@
</div>
<div id="topic_content">
<p></p>
<p>nes scrolling</p>
<p><br/></p>
<p>Date: Tue, 13 Apr 1999 17:48:54 -0600</p>
@ -75,6 +79,7 @@
<p>without switching bit 11. &nbsp;this explains why writing 240+ to 'Y' in 2005</p>
<p>appeared as a negative scroll value.</p>
<p><br/></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Free help authoring tool</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>NES Sound</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("NESSound");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("NESSound");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p>*******************************************</p>
<p>*2A03 sound channel hardware documentation*</p>
<p>*******************************************</p>
@ -603,6 +607,7 @@
<p><br/></p>
<p><br/></p>
<p>EOF</p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/iphone-website-generation">Create iPhone web-based documentation</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>NSF Format</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("NSFFormat");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("NSFFormat");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts28">NES Music Format Spec</span></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;---------------------</p>
<p><br/></p>
@ -389,6 +393,7 @@
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/iphone-website-generation">Free iPhone documentation generator</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Name Table Viewer</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("NameTableViewer");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("NameTableViewer");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts36">Name Table Viewer</span></p>
<p><br/></p>
<p><span class="rvts12">Introduction</span></p>
@ -77,7 +81,8 @@
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Full featured Documentation generator</a></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Full-featured Documentation generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Network Play</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("NetworkPlay");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("NetworkPlay");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">Network Play</span></p>
<p><br/></p>
<p>Allows you to play against a human opponent over the internet. &nbsp;Requires the use of FCEU server.</p>
@ -59,6 +63,7 @@
<p>Currently however, FCEU Server runs very poorly and is hardly useable. &nbsp;This issue will be resolved in a future release.</p>
<p><br/></p>
<p><br/></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create CHM Help documents</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Overview</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Overview");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Overview");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">FCEUX</span></p>
<p><br/></p>
<p>FCEUX is a cross platform, NTSC and PAL Famicom/NES emulator that is an evolution of the original FCE Ultra emulator. &nbsp;Over time FCE Ultra had separated into many separate branches. &nbsp;</p>
@ -59,6 +63,7 @@
<p>The concept behind FCEUX is to merge elements from FCEU Ultra, FCEU rerecording, FCEUXD, FCEUXDSP, FCEUXDSP CE, and FCEU-mm into a single branch of FCEU. &nbsp;As the X implies, it is an all-encompassing version of the FCEU emulator that provides the best of all worlds for the general player, the <a class="rvts18" href="ROMHacking.html">ROM-hacking community</a>, and the <a class="rvts18" href="ToolAssistedSpeedruns.html">Tool-Assisted Speedrun Community</a>.</p>
<p><br/></p>
<p><br/></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free CHM Help documentation generator</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Overview of Included Scripts</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("OverviewofIncludedScripts");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("OverviewofIncludedScripts");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p>(written by FatRatKnight)</p>
<p><br/></p>
<p><span class="rvts17">Overview of Included Scripts</span></p>
@ -110,6 +114,7 @@
<li>x_functions.lua</li>
<li>shapedefs.lua &nbsp; &nbsp; &nbsp; &nbsp;- &nbsp; &nbsp; &nbsp; &nbsp;Contains a few shape-drawing functions</li>
</ul>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Single source CHM, PDF, DOC and HTML Help creation</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>PPU - 2C02</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("PPU");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("PPU");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p>*******************************</p>
<p>*NTSC 2C02 technical operation*</p>
<p>*******************************</p>
@ -348,6 +352,7 @@
<p> Prehaps the infamous Color Dreams "Hellraiser" cart was the closest the NES ever came to seeing such sophisticated graphics. The cart was never released, but from what I've read, it was going to use some sort of frame buffer, and a Z80 CPU to do the graphical rendering. It had been rumored that the game had 3D graphics (or at least 2.5D) in it. If so (and the game was actually good), prehaps it would have raised a few eyebrows in the industry, and inspired Nintendo to develop a new MMC chip with similar capabilities, in order to keep the NES in it's profit margin for another few years (and allow it to compete somewhat with the more advanced systems of the time).</p>
<p><br/></p>
<p>EOF</p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create CHM Help documents</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>PPU Viewer</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("PPUViewer");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("PPUViewer");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">PPU Viewer</span></p>
<p><br/></p>
<p><br/></p>
@ -69,7 +73,8 @@
<p><br/></p>
<p>Right clicking on one of the PPU panels cycles the palettes it is shown with, though pattern palettes and then sprite ones</p>
<p>Putting the mouse cursor over a tile will display the tile address. &nbsp;Moving cursor over palette color will give palette address.</p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/create-epub-ebooks">Produce electonic books easily</a></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/create-epub-ebooks">Produce electronic books easily</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Palette</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Palette");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Palette");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">Palette</span></p>
<p><br/></p>
<p>Settings related to the emulator's color palette choices.</p>
@ -96,6 +100,7 @@
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free CHM Help documentation generator</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Palette Options</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("PaletteOptions");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("PaletteOptions");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">Palette Options</span></p>
<p><br/></p>
<p>FCEUX comes packaged with several palette files. This page describes details for each one.</p>
@ -85,7 +89,8 @@
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Full featured Documentation generator</a></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Full-featured Documentation generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>RAM Search</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("RAMSearch");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("RAMSearch");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">Ram Search</span></p>
<p><br/></p>
<p>Ram Search is a tool originally written for <a class="rvts18" href="http://code.google.com/p/gens-rerecording/" target="_blank">GENS rerecording</a>. &nbsp;It was ported to FCEUX in version 2.1.2. &nbsp;This dialog has also been ported to <a class="rvts18" href="http://code.google.com/p/snes9x-rr/" target="_blank">SNES9x-rr</a>, <a class="rvts18" href="http://desmume.org/" target="_blank">Desmume</a>, <a class="rvts18" href="http://code.google.com/p/pcejin/" target="_blank">PCEjin</a>, <a class="rvts18" href="http://code.google.com/p/vba-rerecording/" target="_blank">VBA-rr</a>, <a class="rvts18" href="http://code.google.com/p/pcsxrr/" target="_blank">PCSX-rr</a>, <a class="rvts18" href="http://code.google.com/p/yabause-rr/" target="_blank">Yabause</a>, <a class="rvts18" href="http://code.google.com/p/vbjin/">VBjin</a>, and <a class="rvts18" href="http://code.google.com/p/fbarr/" target="_blank">FBA-rr</a>.</p>
@ -64,6 +68,7 @@
<p><span class="rvts41">Hotkeys</span></p>
<p><br/></p>
<p><a class="rvts18" href="MapHotkeys.html">Hotkeys</a> can be assigned to common search commands so they can be easily selected while in the main window.</p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free HTML Help documentation generator</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>RAM Watch</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("RAMWatch");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("RAMWatch");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">Ram Watch</span></p>
<p><br/></p>
<p>Ram Watch is a tool originally written for <a class="rvts18" href="http://code.google.com/p/gens-rerecording/" target="_blank">GENS rerecording</a>. &nbsp;It was ported to FCEUX in version 2.1.2. &nbsp;This dialog has also been ported to <a class="rvts18" href="http://code.google.com/p/snes9x-rr/" target="_blank">SNES9x-rr</a>, <a class="rvts18" href="http://desmume.org/" target="_blank">Desmume</a>, <a class="rvts18" href="http://code.google.com/p/pcejin/" target="_blank">PCEjin</a>, <a class="rvts18" href="http://code.google.com/p/vba-rerecording/" target="_blank">VBA-rr</a>, <a class="rvts18" href="http://code.google.com/p/pcsxrr/" target="_blank">PCSX-rr</a>, <a class="rvts18" href="http://code.google.com/p/yabause-rr/" target="_blank">Yabause</a>, and <a class="rvts18" href="http://code.google.com/p/fbarr/" target="_blank">FBA-rr</a>.</p>
@ -59,6 +63,7 @@
<p>It is designed to filter ram values just like in the <a class="rvts18" href="CheatSearch.html">Cheat Search</a> dialog. &nbsp;However, it features many options that are lacking in the Cheat Search dialog. &nbsp;Among these are search undo, search preview, a modulus filter, a data size option, signed/unsigned/hex options, autosearch, and several more compare by options.</p>
<p><br/></p>
<p>Documentation on this dialog can be found on TASVideos <a class="rvts18" href="http://tasvideos.org/EmulatorResources/RamWatch.html" target="_blank">here</a>.</p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Free help authoring environment</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>ROM Hacking</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("ROMHacking");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("ROMHacking");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">ROM Hacking</span></p>
<p><br/></p>
<p><span class="rvts16">What is ROM Hacking?</span></p>
@ -79,6 +83,7 @@
<p><span class="rvts10">ROM Editing / Game Genie Codes</span></p>
<p><a class="rvts18" href="Debugger.html">Debugger</a>, <a class="rvts18" href="HexEditor.html">Hex Editor</a>, <a class="rvts18" href="CheatSearch.html">Cheat Search</a>, <a class="rvts18" href="GameGenieEncoderDecoder.html">Game Genie Decoder/Encoder</a></p>
<p><br/></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/create-epub-ebooks">Generate EPub eBooks with ease</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Sound</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Sound");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Sound");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">Sound</span></p>
<p><br/></p>
<p>Includes specifications for the NSF Format &amp; NES Sound core </p>
@ -60,6 +64,7 @@
<p><a class="rvts18" href="NSFFormat.html">NSF Format</a></p>
<p><br/></p>
<p><a class="rvts18" href="NESSound.html">NES Sound</a></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/iphone-website-generation">Create iPhone web-based documentation</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Sound</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("SoundOptions");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("SoundOptions");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">Sound Configuration</span></p>
<p><br/></p>
<p>where you can configure sound</p>
@ -96,6 +100,7 @@
<p><span class="rvts10">Restore Defaults</span></p>
<p><br/></p>
<p>Restores the master and individual sound channel volumes to their default location.</p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create Web Help sites</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>TAS Editor</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("TASEditor");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("TASEditor");
}
});
</script>
</head>
@ -52,18 +55,20 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">TAS Editor</span></p>
<p><br/></p>
<p><br/></p>
<p>TAS Editor is an overhaul in the logic of creating TAS movies (see <a class="rvts18" href="ToolAssistedSpeedruns.html">Tool Assisted Speedruns</a>). &nbsp;It is a powerful new design that takes movie making from a "recording" concept to a "creating an input file" way of thinking.</p>
<p>TAS Editor is an overhaul in the logic of creating TAS movies (see <a class="rvts18" href="ToolAssistedSpeedruns.html">Tool Assisted Speedruns</a>). It is a powerful new design that takes movie making from a "recording" concept to a "creating an input file" way of thinking.</p>
<p><br/></p>
<p>In 2.1.6 release TAS Editor was completely redesigned and rewritten, incorporating new experimental ideas.</p>
<p>Now it also has its own Manual.</p>
<p>In the 2.2.0 release the TAS Editor was completely redesigned and rewritten, incorporating new experimental ideas.</p>
<p>Now it also has its own Manual, see <span class="rvts33">taseditor.chm</span> or <a class="rvts18" href="www.fceux.com/web/help/taseditor/" target="_blank">www.fceux.com/web/help/taseditor/</a></p>
<p><br/></p>
<p>The tool is only available in Windows version of FCEUX.</p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/create-ebooks-for-amazon-kindle">Write eBooks for the Kindle</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Technical Information</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Technicalinformation");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Technicalinformation");
}
});
</script>
</head>
@ -48,6 +51,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">Technical Information</span></p>
<p><span class="rvts17"><br/></span></p>
<p>These chapters deal with documentation of specific hardware configurations of the NES and/or how the FCEU core emulates these aspects.</p>
@ -55,6 +59,7 @@
<p>More documentation about NES and Famicom hardware specifications can be found at: <a class="rvts18" href="http://nesdev.parodius.com/">http://nesdev.parodius.com/</a></p>
<p><br/></p>
<p><br/></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/create-ebooks-for-amazon-kindle">Produce Kindle eBooks easily</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Text Hooker</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("TextHooker");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("TextHooker");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">Text Hooker</span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">(written by Ugly Joe, author of the Text Hooker tool)</span></p>
@ -148,6 +152,7 @@
<p><span class="rvts10">[words]</span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">declaration. These lines are formatted in a Japanese=English manner. You should be able to have Japanese or English on either or both sides. It's nothing more than a list of values used during a search and replace function. </span></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Easy EPub and documentation editor</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Timing</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Timing");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Timing");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">Timings</span></p>
<p><br/></p>
<p>Settings related to emulation timing.</p>
@ -64,7 +68,8 @@
<p><span class="rvts16">Set High Priority Thread</span></p>
<p><br/></p>
<p>Sets processing priority. &nbsp;Enabling can help slower computers keep a steady 60fps (or 50fps) framerate.</p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/create-epub-ebooks">Full featured EBook editor</a></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/create-epub-ebooks">Full-featured EBook editor</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Menu Items &amp; Submenus</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("ToggleSwitchesHideMenuetc");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("ToggleSwitchesHideMenuetc");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts36">Config Toggle Switches</span></p>
<p><br/></p>
<p>Explains the various toggle switch commands in the top two groups of commands under the Config Menu.</p>
@ -173,6 +177,7 @@
<p><span class="rvts16">Save Config File</span></p>
<p><span class="rvts38"><br/></span></p>
<p><span class="rvts38">Saves current settings to fceux.cfg. &nbsp;Normally settings are not saved until FCEUX is closed.</span></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/iphone-website-generation">Free iPhone documentation generator</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Tool Assisted Speedruns</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("ToolAssistedSpeedruns");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("ToolAssistedSpeedruns");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">Tool Assisted Speedruns</span></p>
<p><br/></p>
<p><span class="rvts16">What is Tool Assisted Speedrunning?</span></p>
@ -106,6 +110,7 @@
<p><a class="rvts18" href="http://tasvideos.org/CommonTricks.html">http://tasvideos.org/CommonTricks.html</a></p>
<p><a class="rvts18" href="http://tasvideos.org/GenericTips.html">http://tasvideos.org/GenericTips.html</a></p>
<p><br/></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free HTML Help documentation generator</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Tools</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Tools2");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Tools2");
}
});
</script>
</head>
@ -48,6 +51,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">Tools</span></p>
<p><br/></p>
<p>Guides for the specific tools and settings under FCEUX's Tools menu.</p>
@ -90,6 +94,7 @@
<p><a class="rvts42" href="TextHooker.html">Text Hooker</a></p>
<p><br/></p>
<p>A guide for using the text hooking tool.</p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/create-ebooks-for-amazon-kindle">Free Kindle producer</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Trace Logger</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("TraceLogger");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("TraceLogger");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts47">Trace Logger</span></p>
<p><br/></p>
<p><span class="rvts16">Introduction</span></p>
@ -83,6 +87,7 @@
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/create-ebooks-for-amazon-kindle">Write eBooks for the Kindle</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Troubleshooting</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Troubleshooting");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Troubleshooting");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">Troubleshooting</span></p>
<p><br/></p>
<p><br/></p>
@ -105,7 +109,8 @@
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/create-epub-ebooks">Produce electonic books easily</a></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/create-epub-ebooks">Produce electronic books easily</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Video</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Video");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Video");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">Video Configuration</span></p>
<p><br/></p>
<p>This window sets various graphics emulation options.</p>
@ -147,6 +151,7 @@
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/iphone-website-generation">Create iPhone web-based documentation</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>What's New? 2.0.0</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("WhatsNew200");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("WhatsNew200");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">What's New? </span><span class="rvts21">2.0.0</span></p>
<p>Released August 02, 2008</p>
<p><br/></p>
@ -158,7 +162,8 @@
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Full featured Help generator</a></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Full-featured Help generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>What's New? 2.0.1 (changelog)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("WhatsNew201");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("WhatsNew201");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">What's New? </span><span class="rvts21">2.0.1</span></p>
<p>Released August 04, 2008</p>
<p><br/></p>
@ -62,7 +66,8 @@
<p>* homebrew mmc5 games now have 64KB of exwram instead of only 8KB</p>
<p>* fix crash related to player2 in lua scripts</p>
<p>* fixed player2 in lua scripts</p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/create-ebooks-for-amazon-kindle">Full featured Kindle eBooks generator</a></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/create-ebooks-for-amazon-kindle">Full-featured Kindle eBooks generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>What's New? 2.0.2 (changelog)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("WhatsNew202");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("WhatsNew202");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">What's New? </span><span class="rvts21">2.0.2</span></p>
<p>Released August 14, 2008</p>
<p><br/></p>
@ -164,6 +168,7 @@
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/create-ebooks-for-amazon-kindle">Produce Kindle eBooks easily</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>What's New? 2.0.3 (changelog)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("WhatsNew203");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("WhatsNew203");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">What's New? </span><span class="rvts21">2.0.2</span></p>
<p>Released November 02, 2008</p>
<p><br/></p>
@ -108,6 +112,7 @@
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create PDF Help documents</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>What's New? 2.1 (changelog)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("WhatsNew210");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("WhatsNew210");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">What's New? </span><span class="rvts21">2.1</span></p>
<p>Released March 29, 2009</p>
<p><br/></p>
@ -223,6 +227,9 @@
<p>*SDL Added option to mute FCEUX for avi capturing, check the documentation for more details.</p>
<p>*SDL Added --noconfig command line option</p>
<p>*SDL Frame Advance Skip Lag frames toggle implemented</p>
<p><br/></p>
<p><br/></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/create-ebooks-for-amazon-kindle">Write eBooks for the Kindle</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>What's New? 2.1.1 (changelog)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("WhatsNew211");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("WhatsNew211");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">What's New? </span><span class="rvts21">2.1.1</span></p>
<p>Released July 29, 2009</p>
<p><br/></p>
@ -133,6 +137,7 @@
<li><span class="rvts22">dropped UTFConverter.c from SDL build</span></li>
<li><span class="rvts22">added hotkey Q for toggling read-only/read+write movie playback</span></li>
</ul>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free PDF documentation generator</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>What's New? 2.1.2 (changelog)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("WhatsNew212");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("WhatsNew212");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">What's New? </span><span class="rvts21">2.1.2</span></p>
<p>Released November 3, 2009</p>
<p><br/></p>
@ -112,6 +116,7 @@
<li><span class="rvts22">A multi-track movie recording tools written by FatRatKnight. &nbsp;Allows input for different players to be recorded separately.</span></li>
<li><span class="rvts22">A rewinding tool by Antony Lavelle</span></li>
</ul>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create Help documents</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>What's New? 2.1.3 (changelog)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("WhatsNew213");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("WhatsNew213");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">What's New? </span><span class="rvts21">2.1.3</span></p>
<p>Released April 8, 2010</p>
<p><br/></p>
@ -110,7 +114,8 @@
<li><span class="rvts22">Lua no longer unpauses the emulator when a script is loaded</span></li>
</ul>
<p><span class="rvts22"><br/></span></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/create-epub-ebooks">Full featured EBook editor</a></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/create-epub-ebooks">Full-featured EBook editor</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>What's New? 2.1.4 (changelog)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("WhatsNew214");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("WhatsNew214");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">What's New? </span><span class="rvts21">2.1.4a</span></p>
<p>Released 01 June 2010</p>
<p>2.1.4 is a maintenance release that fixes these bugs in 2.1.4:</p>
@ -160,6 +164,7 @@
</ul>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22"><br/></span></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Single source CHM, PDF, DOC and HTML Help creation</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>What's New? 2.1.5 (changelog)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("WhatsNew215");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("WhatsNew215");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">What's New? </span><span class="rvts21">2.1.5</span></p>
<p>Released 04 June 2011</p>
<p><br/></p>
@ -129,6 +133,7 @@
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22"><br/></span></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Free help authoring tool</a></p>
</div>

View File

@ -1,9 +1,9 @@
<html>
<head>
<title>What's New? 2.1.6 (changelog)</title>
<title>What's New? 2.2.0 (changelog)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("WhatsNew216");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("WhatsNew216");
}
});
</script>
</head>
@ -35,7 +38,7 @@
<div id="topic_header">
<div id="topic_header_content">
<h1>What's New? 2.1.6 (changelog)</h1>
<h1>What's New? 2.2.0 (changelog)</h1>
<div id="topic_breadcrumb">
<a href="Intro.html">Introduction</a> &rsaquo;&rsaquo; </div>
@ -52,11 +55,12 @@
</div>
<div id="topic_content">
<p><span class="rvts17">What's New? </span><span class="rvts21">2.1.6</span></p>
<p>Released -- ???? 2012</p>
<p></p>
<p><span class="rvts17">What's New? </span><span class="rvts21">2.2.0</span></p>
<p>Released -- 27 November 2012</p>
<p><br/></p>
<p><br/></p>
<p>The 2.1.6 release fixes a lot of bugs and adds many new features to prior releases, <span class="rvts22">increasing game compatibility and enhancing usability of both Windows and SDL ports</span>. Some of the most notable features of Windows version are proper fullscreen support and major improvement of debugging tools. This version also introduces the new powerful toolset TAS Editor v1.0 created to boost efficiency and ease of Tool-Assisted Speedrunning.</p>
<p>The 2.2.0 release fixes a lot of bugs and adds many new features to prior releases, <span class="rvts22">increasing game compatibility and enhancing usability of both Windows and SDL ports</span>. The Windows version also includes major improvement of debugging tools and introduces the new powerful toolset TAS Editor v1.0 created to boost efficiency and ease of Tool-Assisted Speedrunning.</p>
<p><span class="rvts24"><br/></span></p>
<p><span class="rvts23">Common </span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
@ -212,8 +216,28 @@
<li><span class="rvts22">Parse cheat files with non-ASCII characters properly</span></li>
</ul>
<p><span class="rvts24"><br/></span></p>
<p><span class="rvts24">SDL</span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">gtk 2.24 now recommended</span></li>
<li><span class="rvts22">added gtk hotkey configuration dialog</span></li>
<li><span class="rvts22">updated/added various gui elements for options</span></li>
<li><span class="rvts22">new option: SDL.ShowFPS</span></li>
<li><span class="rvts22">new option: SDL.Input..EnableOppositeDirectional - allow/disallow simultaneous right+left/up+down input</span></li>
<li><span class="rvts22">fixed various build issues</span></li>
<li><span class="rvts22">fixed segfault occuring during particular sequences in the cheat menu</span></li>
<li><span class="rvts22">fixed potential segfault with gui</span></li>
<li><span class="rvts22">fixed segfault issue on debian/ubuntu with proprietary nvidia drivers</span></li>
<li><span class="rvts22">now compatible with llvm/clang++ </span></li>
<li><span class="rvts22">added build option to dynamically link lua</span></li>
<li><span class="rvts22">updated default server configuration file to "fceux-server.conf" (from "fceu-server.conf")</span></li>
<li><span class="rvts22">updated manpage and documentation</span></li>
</ul>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22"><br/></span></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free Web Help generator</a></p>
</div>

View File

@ -4,7 +4,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<title>FCEUX Help</title>
<script type="text/javascript">
var sTopic = "";

View File

@ -3,7 +3,7 @@
<head>
<title>.fcm</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("fcm");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("fcm");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts12">FCE Ultra Movie File Format</span></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;- Updated March 22, 2004</p>
<p><br/></p>
@ -82,6 +86,7 @@
<p> &nbsp; &nbsp; &nbsp; &nbsp;be used when several different buttons need to change state at the same time(same frame,</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;at least).</p>
<p><br/></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Create HTML Help, DOC, PDF and print manuals from 1 single source</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Savestate (.fcs)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("fcs");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("fcs");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p>FCE Ultra Save State Format</p>
<p> Updated: &nbsp;Mar 9, 2003</p>
<p>---------------------------------------</p>
@ -208,6 +212,7 @@
<p> &nbsp; &nbsp; &nbsp; &nbsp;MWAV &nbsp; &nbsp; &nbsp; &nbsp;uint8[32] &nbsp; &nbsp; &nbsp; &nbsp;Modulator waveform data.</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;AMPL &nbsp; &nbsp; &nbsp; &nbsp;uint8[2] &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Amplitude data.</p>
<p><br/></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Create HTML Help, DOC, PDF and print manuals from 1 single source</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>.fm2</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -19,15 +19,18 @@
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
if (top.frames.length == 0)
$(document).ready(function()
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("fm2");
}
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("fm2");
}
});
</script>
</head>
@ -52,6 +55,7 @@
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts12">FCEUX Movie File format</span></p>
<p><br/></p>
<p><br/></p>
@ -252,6 +256,7 @@
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/iphone-website-generation">Create iPhone web-based documentation</a></p>
</div>

File diff suppressed because one or more lines are too long

View File

@ -59,25 +59,25 @@
<p><span class="rvts20">Идеи</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps10"><span class="rvts22">Тасэдитор объединяет множество экспериментальных идей в единую систему. Многие из этих идей были озвучены очень давно (см. темы на форуме в духе "</span><a class="rvts28" href="http://tasvideos.org/forum/viewtopic.php?t=4559" target="_blank">инструмент мечты</a><span class="rvts22">" и т.д.), но для их реализации в рамках единой непротиворечивой системы понадобилось немалое время.</span></p>
<p class="rvps10"><span class="rvts22">Основообразующей идеей Тасэдитора является интерфейс Piano Roll, позволяющий взаимодействовать с мувиком в интуитивно понятной форме. </span><span class="rvts22">Первые упоминания о необходимости создания инструмента для ТАСинга на основе Piano Roll звучали ещё в </span><a class="rvts28" href="http://tasvideos.org/forum/viewtopic.php?p=38496#38496" target="_blank">2005 году</a><span class="rvts22">, возможно, даже ранее. П</span><span class="rvts22">рототип под названием TASEdit был создан в 2008 году. Окончательное видение Тасэдитора сформировалось в сентябре 2011 года и дорабатывалось по ходу разработки вплоть до лета 2012. Помимо реализованных идей в</span><span class="rvts22"> это время было придумано множество перспективных, но второстепенных или сложно реализуемых идей, которые было решено отложить на будущее.</span></p>
<p class="rvps10"><span class="rvts22">Тасэдитор объединяет множество экспериментальных идей в единую систему. Многие из этих идей возникли очень давно (см. темы на форуме в духе "</span><a class="rvts28" href="http://tasvideos.org/forum/viewtopic.php?t=4559" target="_blank">инструмент мечты</a><span class="rvts22">" и т.д.), но понадобилось немалое время, чтобы реализовать их в рамках непротиворечивой системы.</span></p>
<p class="rvps10"><span class="rvts22">Основообразующей идеей Тасэдитора является интерфейс Piano Roll, позволяющий взаимодействовать с мувиком в интуитивно понятной форме. </span><span class="rvts22">Первые упоминания о необходимости создания инструмента для ТАСинга на основе Piano Roll звучали ещё в </span><a class="rvts28" href="http://tasvideos.org/forum/viewtopic.php?p=38496#38496" target="_blank">2005 году</a><span class="rvts22">, возможно, даже ранее. П</span><span class="rvts22">рототип под названием TASEdit был создан в 2008 году. Окончательное видение Тасэдитора сформировалось в сентябре 2011 года и дорабатывалось по ходу разработки вплоть до лета 2012. Помимо реализованных в</span><span class="rvts22"> это время</span><span class="rvts22"> идей,</span><span class="rvts22"> было придумано множество перспективных, но второстепенных или сложно реализуемых идей, которые было решено отложить на будущее.</span></p>
<p class="rvps21"><span class="rvts22"><br/></span></p>
<div class="rvps21"><table width="700" border="1" cellpadding="0" cellspacing="0" style="border-color: #000000; border-style: solid;">
<div class="rvps21"><table width="600" border="1" cellpadding="0" cellspacing="0" style="border-color: #000000; border-style: solid;">
<tr valign="top">
<td style="border-color: #000000; border-style: solid; background-color: #0000ff;"><p class="rvps5"><a class="rvts78" href="Ideas.html#ImplementedIdeas">Реализовано в 1.0</a></p>
<td style="border-color: #000000; border-style: solid; background-color: #0000ff; width: 50%;"><p class="rvps5"><a class="rvts78" href="Ideas.html#ImplementedIdeas">Реализовано в 1.0</a></p>
</td>
<td style="border-color: #000000; border-style: solid; background-color: #0000ff;"><p class="rvps5"><a class="rvts78" href="Ideas.html#PlannedIdeas">Запланировано на 2.0</a></p>
<td style="border-color: #000000; border-style: solid; background-color: #0000ff; width: 50%;"><p class="rvps5"><a class="rvts78" href="Ideas.html#PlannedIdeas">Запланировано на 2.0</a></p>
</td>
</tr>
<tr valign="top">
<td style="border-color: #000000; border-style: solid;"><p class="rvps18"><a class="rvts63" href="Ideas.html#PianoRoll">Piano Roll</a></p>
<td style="border-color: #000000; border-style: solid; width: 50%;"><p class="rvps18"><a class="rvts63" href="Ideas.html#PianoRoll">Piano Roll</a></p>
<p class="rvps18"><a class="rvts63" href="Ideas.html#Selection">Выделение</a></p>
<p class="rvps18"><a class="rvts63" href="Ideas.html#Markers">Маркеры</a></p>
<p class="rvps18"><a class="rvts63" href="Ideas.html#HotChanges">Горячие Правки</a></p>
<p class="rvps18"><a class="rvts63" href="Ideas.html#Greenzone">Гринзона</a></p>
<p class="rvps18"><a class="rvts63" href="Ideas.html#Playback">Проигрыватель</a></p>
<p class="rvps18"><a class="rvts63" href="Ideas.html#GreenArrow">Зелёная стрелка</a></p>
<p class="rvps18"><a class="rvts63" href="Ideas.html#AutoRestoring">Автовосстановление утраченной позиции</a></p>
<p class="rvps18"><a class="rvts63" href="Ideas.html#AutoRestoring">Автовосстановление прошлой позиции</a></p>
<p class="rvps18"><a class="rvts63" href="Ideas.html#Recorder">Мультитрекинг-рекордер</a></p>
<p class="rvps18"><a class="rvts63" href="Ideas.html#Lua">Lua-автоматизация</a></p>
<p class="rvps18"><a class="rvts63" href="Ideas.html#BookmarksBranches">Закладки и ответвления</a></p>
@ -90,7 +90,7 @@
<p class="rvps18"><a class="rvts63" href="Ideas.html#SaveCompact">Компактное сохранение</a></p>
<p class="rvps18"><a class="rvts63" href="Ideas.html#Autosave">Автосохранение</a></p>
</td>
<td style="border-color: #000000; border-style: solid;"><p class="rvps5"><a class="rvts77" href="Ideas.html#OutputLog">Журнал Вывода</a></p>
<td style="border-color: #000000; border-style: solid; width: 50%;"><p class="rvps5"><a class="rvts77" href="Ideas.html#OutputLog">Журнал Вывода</a></p>
<p class="rvps5"><a class="rvts77" href="Ideas.html#Minimap">Миникарта</a></p>
<p class="rvps5"><a class="rvts77" href="Ideas.html#VirtualJoypad">Виртуальный Джойстик</a></p>
<p class="rvps5"><a class="rvts77" href="Ideas.html#BetterSelection">Усовершенствование Выделения</a></p>
@ -114,67 +114,68 @@
<p class="rvps10"><span class="rvts22">Основа Тасэдитора, вокруг этой идеи и были сформированы все остальные.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">Представляет собой значительно переработанный компонент Список (ListView) или Таблица (GridView). Столбцы Списка соответствуют кнопкам Ввода, строки Списка соответствуют кадрам мувика. Количество строк Списка регулярно автоматически обновляется, чтобы соответствовать количеству кадров текущего мувика. Строки нумеруются сверху вниз от нуля. Номер строки равен номеру кадра, с которым ассоциируется эта строка. Количество столбцов зависит от типа мувика (от количества джойстиков и, соответственно, количества кнопок).</span></li>
<li class="rvps10"><span class="rvts22">Представляет собой значительно переработанный компонент Список (ListView) или Таблица (GridView). Столбцы Списка соответствуют кнопкам Ввода, строки Списка соответствуют кадрам мувика. Количество строк Списка регулярно автоматически обновляется, чтобы соответствовать количеству кадров текущего мувика. Строки нумеруются сверху вниз от нуля. Номер строки равен номеру кадра, с которым ассоциируется эта строка. Количество столбцов зависит от типа мувика (от количества джойстиков и количества кнопок).</span></li>
<li class="rvps10"><span class="rvts22">Слева перед столбцами Ввода располагаются два дополнительных столбца. Самый первый столбец (шириной ~17 пикселей) отвечает за отображение иконок и за управление Курсором Проигрывателя. Текущее положение Курсора Проигрывателя отображается иконкой в виде голубой стрелки. При щелчке левой кнопкой по этому столбцу Курсор Проигрывателя посылается на соответствующий кадр, и начинается перетаскивание Курсора, пока не будет отпущена левая кнопка.</span></li>
<li class="rvps10"><span class="rvts22">Второй столбец (шириной 75 пикселей) отвечает за отображение номеров кадров, отображение Маркеров, управление Выделением и управление Маркерами. При одинарном щелчке левой кнопкой по этому столбцу изменяется Выделение (и можно растягивать Выделение перетаскиванием). При двойном щелчке на этом кадре ставится Маркер, и начинается перетаскивание этого Маркера, пока не будет отпущена левая кнопка.</span></li>
<li class="rvps10"><span class="rvts22">В Заголовке Списка отображаются названия столбцов. Самый первый столбец (столбец иконок) не имеет названия, второй столбец назван "Frame#" (номер кадра), остальные столбцы обозначены символом соответствующей кнопки джойстика. Этот же символ отображается в ячейках данного столбца на тех строках, где данная кнопка является нажатой. По ячейкам Заголовка Списка можно щёлкать, изменяя Ввод соответствующей кнопки в выделенных кадрах. А при щелчке по "Frame#" изменяются Маркеры в выделенных кадрах. Кроме того, Заголовок служит индикатором зажатых кнопок джойстика, а при Записи Ввода в Заголовке вспыхивают символы, кнопки которых были только что записаны в мувик.</span></li>
<li class="rvps10"><span class="rvts22">Столбцы Ввода отображают состояние соответствующей кнопки джойстика для каждого кадра мувика. Чтобы узнать состояние кнопки, нужно визуально найти пересечение строки требуемого кадра и столбца требуемой кнопки. Если в этой ячейке находится символ кнопки, то кнопка в данном кадре нажата. Если в этой ячейке пустота или прочерк, то кнопка отпущена. Щелчком левой кнопкой мыши по любой ячейке Ввода можно инвертировать состояние соответствующей кнопки Ввода. &nbsp;Кроме того, если зажать левую кнопку мыши, можно рисовать или стирать Ввод в соседних кадрах, перемещая курсор мыши выше или ниже. Эти и другие возможности быстрого редактирования Ввода призваны полностью заменить линейную Запись нелинейным редактированием.</span></li>
<li class="rvps10"><span class="rvts22">В Заголовке Списка отображаются названия столбцов. Самый первый столбец (столбец иконок) не имеет названия, второй столбец назван "Frame#" (номер кадра), остальные столбцы обозначены символом соответствующей кнопки джойстика. Этот же символ отображается в ячейках данного столбца на тех строках, где данная кнопка является нажатой. По ячейкам Заголовка Списка можно щёлкать, изменяя Ввод соответствующей кнопки в выделенных кадрах. А при щелчке по "Frame#" изменяются Маркеры в выделенных кадрах.</span></li>
<li class="rvps10"><span class="rvts22">Кроме того, Заголовок служит индикатором зажатых кнопок джойстика. А при Записи Ввода в Заголовке вспыхивают символы, кнопки которых были только что записаны в мувик.</span></li>
<li class="rvps10"><span class="rvts22">Столбцы Ввода отображают состояние каждой кнопки джойстика для каждого кадра мувика. Чтобы узнать состояние кнопки, нужно визуально найти пересечение строки требуемого кадра и столбца требуемой кнопки. Если в этой ячейке находится символ кнопки, то кнопка в данном кадре нажата. Если в этой ячейке пустота или прочерк, то кнопка отпущена. Щелчком левой кнопкой мыши по любой ячейке Ввода можно инвертировать состояние соответствующей кнопки. &nbsp;Кроме того, если зажать левую кнопку мыши, можно рисовать или стирать Ввод в соседних кадрах, перемещая курсор мыши выше или ниже.</span></li>
<li class="rvps10"><span class="rvts22">Строки Piano Roll раскрашиваются разными цветами в пастельных тонах, чтобы на их фоне были чётко видны номера кадров (отображаемые чёрным цветом) и символы кнопочных нажатий (отображаемые тёмными цветами). По цвету строки Piano Roll пользователь может сразу определить, находится ли данный кадр мувика в Гринзоне, проявляется ли лаг в данном кадре, является ли данный кадр текущим (отображаемым в окне эмулятора в данный момент), является ли данный кадр выделенным. Также дополнительными цветами можно акцентировать внимание пользователя на определённых кадрах, например, на кадре окончания добегания (мигающий голубой цвет) или на ключевом кадре отката (фиолетовый цвет). Кроме того, по цвету фона ячеек с номерами кадров пользователь может определить наличие Маркера на этом кадре (жёлтый цвет).</span></li>
<li class="rvps10"><span class="rvts22">Расцветка ячеек Piano Roll зависит не только от строки, но и от столбца (хоть и в меньшей мере). Столбец иконок всегда отображается белым цветом. Стобец номеров кадров отображается бледным оттенком текущего цвета строки. Столбцы кнопок Ввода для первого (а также третьего) джойстика отображаются нормальным оттенком текущего цвета строки (зелёным, красным, голубым и т.д.), а столбцы кнопок Ввода для второго (а также четвёртого) джойстика отображаются немного затемнённым оттенком текущего цвета строки.</span></li>
<li class="rvps10"><span class="rvts22">Видимая область Piano Roll может скроллироваться колесом мыши или с помощью скроллбаров, а также с помощью множества других способов </span><a class="rvts28" href="Navigation.html#scrolling-piano-roll">навигации</a><span class="rvts22">. Многообразие способов призвано ускорить навигацию к любому желаемому участку мувика, так как в видимой области отображается лишь ограниченное количество строк. Это количество зависит от текущей высоты Piano Roll в пикселах, которая зависит от текущей высоты окна TAS Editor.</span></li>
<li class="rvps10"><span class="rvts22">Расцветка ячеек Piano Roll зависит не только от строки, но и от столбца (хоть и в меньшей мере). Столбец иконок всегда отображается белым цветом. Стобец номеров кадров отображается бледным оттенком текущего цвета строки. Столбцы кнопок первого (а также третьего) джойстика отображаются нормальным оттенком текущего цвета строки (зелёным, красным, голубым и т.д.), а столбцы кнопок второго (а также четвёртого) джойстика отображаются немного затемнённым оттенком текущего цвета строки.</span></li>
<li class="rvps10"><span class="rvts22">Видимая область Piano Roll может скроллироваться колесом мыши или с помощью скроллбаров, а также с помощью множества других </span><a class="rvts28" href="Navigation.html#scrolling-piano-roll">способов навигации</a><span class="rvts22">. Многообразие способов призвано ускорить навигацию к любому желаемому участку мувика, так как в видимой области отображается лишь ограниченное количество строк. Это количество зависит от текущей высоты Piano Roll в пикселах, которая зависит от текущей высоты окна TAS Editor.</span></li>
</ul>
<p class="rvps10"><a name="Selection"></a>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Выделение</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Как и в любом другом редакторе, &nbsp;в Тасэдиторе Выделение служит для применения операций к множеству кадров одновременно. Кроме того, здесь Выделение служит в качестве указателя (курсора) на место последнего щелчка по Вводу.</span></p>
<p class="rvps10"><span class="rvts22">Как и в любом другом редакторе, &nbsp;в Тасэдиторе Выделение служит для применения операций к множеству кадров одновременно. Кроме того, здесь Выделение служит в качестве указателя (курсора) на место последнего редактирования Ввода.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">Выделение хранится в виде списка номеров кадров, считающихся выделенными.</span></li>
<li class="rvps10"><span class="rvts22">В памяти хранится Журнал Выделений в виде массива списков. Размер массива равен размеру Журнала Истории, можно возвращаться к предыдущим выделениям с помощью </span><span class="rvts34">Ctrl + Q</span><span class="rvts22"> и </span><span class="rvts34">Ctrl + W</span><span class="rvts22">. Это полезно для быстрого отслеживания истории недавних щелчков по Piano Roll.</span></li>
<li class="rvps10"><span class="rvts22">Для управления Выделением служит столбец с номерами кадров. Если после щелчка по номеру кадра зажать левую кнопку, можно растягивать Выделение на соседние кадры. Если зажать клавишу </span><span class="rvts34">Ctrl</span><span class="rvts22"> перед щелчком по номеру кадра, ранее выделенные кадры останутся выделенными. А при простом щелчке по номеру кадра или Ввода текущее Выделение уходит в историю Выделений, и вместо него создаётся новое Выделение, состоящее из одного кадра (по которому был сделан щелчок). Если зажать клавишу </span><span class="rvts34">Shift</span><span class="rvts22">, выделятся все кадры от начала старого Выделения до кадра щелчка. Если зажать </span><span class="rvts34">Alt</span><span class="rvts22">, создастся Выделение по шаблону. Также Выделение меняется и при щелчке по ячейкам Ввода, но только когда не зажаты клавиши модификаторы,</span></li>
<li class="rvps10"><span class="rvts22">Тасэдитор также хранит в памяти Журнал Выделений в виде массива списков. Размер массива равен размеру Журнала Истории. Можно возвращаться к предыдущим выделениям с помощью </span><span class="rvts34">Ctrl + Q</span><span class="rvts22"> и </span><span class="rvts34">Ctrl + W</span><span class="rvts22">. Это полезно для отслеживания истории недавних щелчков по Piano Roll.</span></li>
<li class="rvps10"><span class="rvts22">Для управления Выделением служит столбец Piano Roll с номерами кадров. Если после щелчка по номеру кадра зажать левую кнопку, можно растягивать Выделение на соседние кадры. Если зажать клавишу </span><span class="rvts34">Ctrl</span><span class="rvts22"> перед щелчком по номеру кадра, ранее выделенные кадры останутся выделенными, а при простом щелчке по номеру кадра или Ввода текущее Выделение уходит в историю Выделений, и вместо него создаётся новое Выделение, состоящее из одного кадра (по которому был сделан щелчок). Если зажать клавишу </span><span class="rvts34">Shift </span><span class="rvts22">перед щелчком по номеру кадра, выделятся все кадры от начала старого Выделения до кадра щелчка. Если зажать </span><span class="rvts34">Alt </span><span class="rvts22">перед щелчком по номеру кадра, создастся Выделение по шаблону. Также Выделение меняется и при щелчке по ячейкам Ввода, но только когда не зажаты клавиши модификаторы,</span></li>
<li class="rvps10"><span class="rvts22">Самый верхний выделенный кадр называется Курсором Выделения. Если не выделено ни одного кадра, подразумевается, что Курсор Выделения указывает на кадр с номером -1. Это нужно для некоторых ситуаций, например, при отсутствии Выделения в нижнем текстовом поле отображается Заметка нулевого Маркера.</span></li>
<li class="rvps10"><span class="rvts22">Журнал Выделений (в том числе текущее Выделение) сохраняется и загружается из файла проекта. При изменении настройки "undo levels" происходит соответствующее изменение размера Журнала Выделений.</span></li>
<li class="rvps10"><span class="rvts22">При вставке и удалении кадров текущее Выделение смещается на соответственное количество строк вниз или вверх, чтобы оставаться на тех же позициях относительно Ввода, что и перед вставкой/удалением.</span></li>
<li class="rvps10"><span class="rvts22">Журнал Выделений (в том числе текущее Выделение) сохраняется и загружается из файла проекта. При изменении настройки "max undo levels" происходит соответствующее изменение размера Журнала Выделений.</span></li>
<li class="rvps10"><span class="rvts22">При вставке и удалении кадров текущее Выделение смещается на соответственное количество строк вниз или вверх, чтобы оставаться на тех же позициях (относительно Ввода).</span></li>
<li class="rvps10"><span class="rvts22">Текущее Выделение можно сдвигать (</span><span class="rvts34">Ctrl + Вверх</span><span class="rvts22"> / </span><span class="rvts34">Ctrl + Вниз</span><span class="rvts22"> / </span><span class="rvts34">Ctrl + Home</span><span class="rvts22"> / </span><span class="rvts34">Ctrl + End</span><span class="rvts22">). Если часть Выделения выходит за рамки Piano Roll, эта часть исчезает. То есть пользователь не может выделить кадры за пределами текущего мувика.</span></li>
<li class="rvps10"><span class="rvts22">Курсором Выделения можно осуществлять прыжки по Маркерам (</span><span class="rvts34">Ctrl + Page Up</span><span class="rvts22"> / </span><span class="rvts34">Ctrl + Page Down</span><span class="rvts22">), при этом текущее Выделение уходит в Историю, а вместо него появляется один выделенный кадр на месте следующего Маркера.</span></li>
<li class="rvps10"><span class="rvts22">Видимая область Piano Roll всегда следует за Выделением. При этом, если Выделение не помещается целиком на экране, Piano Roll скроллируется таким образом, чтобы Курсор Выделения был в середине, а если Выделение помещается центрирует всё Выделение.</span></li>
<li class="rvps10"><span class="rvts22">Видимая область Piano Roll всегда следует за Выделением. При этом, если Выделение не помещается целиком на экране, Piano Roll скроллируется таким образом, чтобы Курсор Выделения был в середине, а если Выделение помещается отображает все выделенные кадры.</span></li>
<li class="rvps10"><span class="rvts22">В нижнем текстовом поле отображается текст Заметки маркера, на участке которого находится Курсор Выделения. Этот текст обновляется при каждом изменении Выделения, а также при изменении текущих Маркеров.</span></li>
<li class="rvps10"><span class="rvts22">При нажатии </span><span class="rvts34">Ctrl + A</span><span class="rvts22"> текущее Выделение уходит в Историю, вместо него становятся выделенными все кадры, начиная с Маркера, на участке которого был Курсор Выделения, заканчивая следующим Маркером (не включая этот Маркер). Таким образом выделяется весь участок текущего Маркера. При следующем нажатии </span><span class="rvts34">Ctrl + A</span><span class="rvts22"> Выделение изменится на набор кадров между Маркерами, не включая верхний и нижний Маркеры. При третьем </span><span class="rvts34">Ctrl + A</span><span class="rvts22"> Выделение изменится на набор кадров между Маркерами, не включая верхний, но включая нижний Маркер. Наконец, при четвёртом нажатии </span><span class="rvts34">Ctrl + A</span><span class="rvts22"> Выделение изменится на набор кадров между Маркерами, включающий оба Маркера. При дальнейших нажатиях </span><span class="rvts34">Ctrl + A</span><span class="rvts22"> будет повторение предыдущих вариантов выделения. Это позволяет пользователю быстро выделить нужный участок, причём в большинстве случаев ТАСеру будет нужен именно первый вариант выделения между Маркерами.</span></li>
<li class="rvps10"><span class="rvts22">При нажатии </span><span class="rvts34">Ctrl + A</span><span class="rvts22"> текущее Выделение уходит в Историю, вместо него становятся выделенными все кадры, начиная с Маркера, на участке которого был Курсор Выделения, заканчивая следующим Маркером (не включая этот Маркер). Таким образом выделяется весь участок текущего Маркера. При следующем нажатии </span><span class="rvts34">Ctrl + A</span><span class="rvts22"> Выделение изменится на набор кадров между Маркерами, не включая верхний и нижний Маркеры. При третьем </span><span class="rvts34">Ctrl + A</span><span class="rvts22"> Выделение изменится на набор кадров между Маркерами, не включая верхний, но включая нижний Маркер. Наконец, при четвёртом нажатии </span><span class="rvts34">Ctrl + A</span><span class="rvts22"> Выделение изменится на набор кадров между Маркерами, включающий оба Маркера. При дальнейших нажатиях </span><span class="rvts34">Ctrl + A</span><span class="rvts22"> будет повторение предыдущих вариантов выделения.</span></li>
</ul>
<p class="rvps10"><a name="Markers"></a>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Маркеры</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">При редактировании больших мувиков пользователю может понадобиться установка отметок на некоторые строки Piano Roll, чтобы эти строки визуально отличались от соседних. После ряда усовершенствований эта идея вылилась в многогранную фичу.</span></p>
<p class="rvps10"><span class="rvts22">При редактировании больших мувиков пользователю может понадобиться установка отметок на некоторые строки Piano Roll, чтобы эти строки визуально отличались от соседних. После ряда усовершенствований эта простая идея вылилась в многогранную фичу.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">Любой кадр мувика может быть отмечен. При желании пользователь может отметить Маркерами сразу все кадры мувика. Кроме того, пользователь может оставить отметку, например, на кадре 1200, а затем сделать усечение Ввода после кадра 1000, оставив отвязанный от Ввода Маркер за пределами мувика. Этот Маркер будет оставаться в проекте; чтобы увидеть его наличие, нужно проэмулировать мувик до кадра 1200, чтобы в Piano Roll отражалась строка с этим Маркером.</span></li>
<li class="rvps10"><span class="rvts22">Неотмеченные строки Piano Roll отображаются обычными цветами, а в отмеченных строках ячейка с номером кадра имеет жёлтый цвет фона. Этот цвет выбран, так как Маркеры призваны акцентировать внимание пользователя на отмеченных кадрах. Также номера отмеченных кадров отображаются особым шрифтом, чтобы о наличии Маркера можно было догадаться, даже когда жёлтый фон ячейки загораживается синим цветом Выделения.</span></li>
<li class="rvps10"><span class="rvts22">Маркеры могут быть привязаны к Вводу (тогда они отображаются бледно-жёлтым цветом), а могут быть отвязанными (отображаются более насыщенным жёлтым цветом). Когда Маркеры привязаны, на них действуют операции по смещению Ввода вверх/вниз, а также усечению Ввода.</span></li>
<li class="rvps10"><span class="rvts22">Любой кадр мувика может быть отмечен. При желании пользователь может даже отметить Маркерами все кадры мувика. Кроме того, пользователь может оставить отметку, например, на кадре 1200, а затем сделать усечение Ввода после кадра 1000, оставив отвязанный от Ввода Маркер за пределами мувика. Этот Маркер будет оставаться в проекте. Чтобы увидеть его, нужно опять проэмулировать игру до кадра 1200, чтобы в Piano Roll отразилась строка с этим Маркером.</span></li>
<li class="rvps10"><span class="rvts22">Неотмеченные строки Piano Roll отображаются обычными цветами, а в отмеченных строках ячейка с номером кадра имеет жёлтый цвет фона. Этот цвет выбран, так как Маркеры призваны обращать на себя внимание пользователя. Также номера отмеченных кадров отображаются особым шрифтом, чтобы о наличии Маркера можно было догадаться, даже когда жёлтый фон ячейки загораживается синим цветом Выделения.</span></li>
<li class="rvps10"><span class="rvts22">Маркеры могут быть привязаны к Вводу (тогда они отображаются бледно-жёлтым цветом), а могут быть отвязанными (отображаются более насыщенным жёлтым цветом). Когда Маркеры привязаны, на них действуют все операции по смещению Ввода вверх/вниз, а также усечению Ввода.</span></li>
<li class="rvps10"><span class="rvts22">Маркер ставится двойным щелчком левой кнопкой мыши по номеру желаемого кадра. Если сделать двойной щелчок по уже установленному Маркеру, начинается его перетаскивание (до момента отпускания левой кнопки). Так можно перенести Маркер на другой кадр или удалить, перенеся за рамки Piano Roll. При перетаскивании под курсором мыши висит образ Маркера в виде жёлтого прямоугольника с номером кадра, с которого был снят этот Маркер. Чтобы отменить перетаскивание, нужно опустить Маркер либо на ту же самую ячейку с номером кадра, либо на любую ячейку Ввода.</span></li>
<li class="rvps10"><span class="rvts22">Также Маркеры можно устанавливать и удалять с помощью контекстного меню по правой кнопке или с помощью щелчка по Frame#.</span></li>
<li class="rvps10"><span class="rvts22">Также Маркеры можно устанавливать и удалять с помощью контекстного меню или с помощью щелчка по надписи "Frame#".</span></li>
<li class="rvps10"><span class="rvts22">Обычно Маркеры ставятся относительно далеко друг от друга, и между ними находятся промежутки из неотмеченных кадров. Поэтому Маркеры можно воспринимать не только как цветовое выделение особенных кадров, но и как пограничные отметки для участков мувика. Для стандартизации принята следующая терминология: каждому Маркеру соответствует участок кадров мувика, начинающийся с отмеченного кадра и заканчивающийся последним неотмеченным кадром. Например, если в мувике на кадрах 10 и 20 стоят Маркеры, то участком первого маркера является регион кадров с 10-го по 19-й, а участком второго маркера регион с 20-го по последний кадр мувика.</span></li>
<li class="rvps10"><span class="rvts22">Промежутки между Маркерами можно пересекать прыжками от текущего к следующему (или предыдущему). Это позволяет в ряде случаев ускорить навигацию по мувику.</span></li>
<li class="rvps10"><span class="rvts22">С помощью функции </span><span class="rvts26">Select between Markers</span><span class="rvts22"> (</span><span class="rvts34">Ctrl + A</span><span class="rvts22">) можно быстро выделить все кадры на участке текущего Маркера. Таким образом Маркеры позволяют ускорить не только навигацию, но и редактирование.</span></li>
<li class="rvps10"><span class="rvts22">Каждый Маркер имеет свою текстовую Заметку. При создании она пустая. Пользователь может просматривать и редактировать Заметку с помощью любого из двух имеющихся текстовых полей. В верхнем текстовом поле отображается Заметка Маркера, на участке которого находится Курсор Проигрывателя. В нижнем текстовом поле отображается Заметка Маркера, на участке которого находится Курсор Выделения. Таким образом, чтобы отредактировать желаемую Заметку, нужно сначала поставить один из курсоров на её Маркер или на кадр под Маркером. В теории это звучит неудобно, но рабочий процесс в Тасэдиторе организован таким образом, что под нужными Маркерами обязательно стоит какой-нибудь курсор.</span></li>
<li class="rvps10"><span class="rvts22">Объём Заметки ограничен сотней символов, так как Заметки предназначены не для хранения длинных текстов, а для коротких комментариев, тегов и тому подобных записок на салфетках. В крайнем случае можно разместить несколько Маркеров подряд, разбив длинный текст на несколько соседствующих Заметок.</span></li>
<li class="rvps10"><span class="rvts22">По тексту Заметок можно осуществлять обычный поиск (Find Note) и нечёткий поиск (Similar/More). Подробнее см. </span><a class="rvts28" href="AdvancedFeatures.html#UsingMarkers">Продвинутые возможности</a><span class="rvts22">.</span></li>
<li class="rvps10"><span class="rvts22">Маркеры сохраняются и восстанавливаются из ответвлений Закладок вместе с Вводом. Каждая операция с Маркерами заносится в Журнал Истории аналогично операциям с Вводом. В файле проекта Маркеры сохраняются сразу после Ввода.</span></li>
<li class="rvps10"><span class="rvts22">Маркеры сохраняются и восстанавливаются из ответвлений Закладок вместе с Вводом. Каждая операция с Маркерами заносится в Журнал Истории аналогично операциям с Вводом. В файле проекта текущее состояние Маркеров сохраняется сразу после данных о Вводе.</span></li>
</ul>
<p class="rvps10"><a name="HotChanges"></a>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Горячие Правки</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Раскраска текстовых символов в ячейках Ввода разными цветами, в зависимости от давности редактирования каждой ячейки. Подробнее см. </span><a class="rvts28" href="PianoRoll.html#HotChanges">Интерфейс программы</a><span class="rvts22"> и </span><a class="rvts28" href="ProgramCustomization.html#EnableHotChanges">Настройка программы</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Тасэдитор раскрашивает текстовые символы в ячейках Ввода разными цветами, в зависимости от давности редактирования каждой ячейки. Подробнее см. </span><a class="rvts28" href="PianoRoll.html#HotChanges">Интерфейс программы</a><span class="rvts22"> и </span><a class="rvts28" href="ProgramCustomization.html#EnableHotChanges">Настройка программы</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">В памяти хранятся значения сразу всех ячеек Ввода, даже несмотря на то, что большинство из них имеет нулевой уровень горячести. Это необходимо для тех редких случаев, когда массово изменяются почти все ячейки мувика (например, при операциях Import или Paste). Массив Горячих Правок занимает много места в оперативной памяти, но хорошо сжимается и занимает мало места на диске.</span></li>
<li class="rvps10"><span class="rvts22">В памяти хранятся значения сразу всех ячеек Ввода, даже несмотря на то, что большинство из них имеет нулевой уровень горячести. Это необходимо для тех редких случаев, когда массово изменяются почти все ячейки мувика (например, при операциях </span><a class="rvts28" href="Operations.html#Import">Import</a><span class="rvts22"> или </span><a class="rvts28" href="Operations.html#Paste">Paste</a><span class="rvts22">). Массив Горячих Правок занимает много места в оперативной памяти, но хорошо сжимается и занимает мало места на диске.</span></li>
<li class="rvps10"><span class="rvts22">16 градаций цвета, чтобы в одном байте умещалась информация о горячести двух ячеек. Кроме того, добавлять ещё больше градаций нет смысла, так как человеческий глаз будет хуже различать их, а ценность Горячих Правок именно в возможности быстрой визуальной оценки Ввода, не требующей длительного обдумывания.</span></li>
<li class="rvps10"><span class="rvts22">Состояние текущей карты Горячих Правок меняется только при добавлении нового пункта в Журнал истории и при откатах Истории.</span></li>
</ul>
<ul style="text-indent: 30px; margin-left: 40px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">при редактировании Ввода старые ячейки теряют один уровень горячести, а изменённые ячейки приобретают максимальный уровень</span></li>
<li class="rvps10"><span class="rvts22">при редактировании Ввода все старые ячейки теряют один уровень горячести, а изменённые ячейки приобретают максимальный уровень</span></li>
<li class="rvps10"><span class="rvts22">при удалении кадров старые ячейки теряют один уровень горячести</span></li>
<li class="rvps10"><span class="rvts22">при вставке кадров старые ячейки теряют один уровень горячести, а все ячейки вставленных кадров приобретают максимальный уровень</span></li>
<li class="rvps10"><span class="rvts22">при изменении Маркеров или Закладок, а также при усечении мувика Горячие Правки не меняются</span></li>
@ -185,49 +186,48 @@
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Гринзона</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Так как интерфейс Piano Roll предоставляет пользователю почти мгновенный доступ к изменению Ввода на любом кадре мувика, желательно также предоставить быстрый доступ к просмотру состояния игры на любом кадре мувика. Это реализуется с помощью кеширования данных о всех полученных состояниях игры.</span></p>
<p class="rvps10"><span class="rvts22">Так как интерфейс Piano Roll предоставляет пользователю почти мгновенный доступ к изменению Ввода на любом кадре мувика, желательно также предоставить быстрый доступ к просмотру состояния игры на любом кадре мувика. Это реализуется с помощью кеширования данных о всех проэмулированных состояниях игры.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">Гринзона представляет собой массив информации о Выводе игры на начало каждого кадра. То есть в ячейке с номером 0 хранится состояние игры до начала эмуляции, в ячейке 1 состояние игры перед началом эмуляции второго кадра (кадра с номером 000001) и т.д. Помимо сэйвов Гринзона хранит Журнал лага, соответствующий Вводу текущего мувика. Теоретически возможно хранение и другой информации.</span></li>
<li class="rvps10"><span class="rvts22">Гринзона начинается с нулевого кадра и имеет нижнюю границу (голову) &nbsp; номер кадра, начиная с которого в Гринзоне отсутствует информация о дальнейших состояниях игры (однако для них может присутствовать информация в Журнале лага). Для кадров, номер которых меньше головы, в Гринзоне может иметься информация.</span></li>
<li class="rvps10"><span class="rvts22">Гринзона представляет собой массив информации о Выводе игры на начало каждого кадра. То есть в ячейке с номером 0 хранится состояние игры до начала эмуляции, в ячейке 1 состояние игры перед началом эмуляции второго кадра (кадра с номером 000001) и т.д. Помимо сэйвов Гринзона хранит Журнал лага, соответствующий Вводу текущего мувика. Также теоретически возможно хранение и другой информации.</span></li>
<li class="rvps10"><span class="rvts22">Гринзона начинается с нулевого кадра и имеет нижнюю границу (голову) &nbsp; номер кадра, начиная с которого в Гринзоне отсутствует информация о дальнейших состояниях игры (однако для них может присутствовать информация в Журнале лага).</span></li>
<li class="rvps10"><span class="rvts22">Данные в Гринзону собираются в начале каждого кадра (перед эмуляцией) по следующему принципу: если в массиве Гринзоны ячейка с номером, равным текущему кадру, пустует, или же позиция головы Гринзоны меньше номера текущего кадра, то ячейка массива заполняется информацией о текущем состоянии игры (из эмулятора), а голова Гринзоны при необходимости перемещается вперёд.</span></li>
<li class="rvps10"><span class="rvts22">Для экономии памяти Гринзона периодически разреживается, удаляя сэйвы (но не трогая Журнал лага) некоторых ранних кадров, от которых Курсор Проигрывателя ушёл достаточно далеко. </span><span class="rvts22">Подробнее см. </span><a class="rvts28" href="ProgramCustomization.html#SetGreenzonecapacity">Настройка программы</a><span class="rvts22">.</span></li>
<li class="rvps10"><span class="rvts22">Вся Гринзона вместе с Журналом лага сохраняется и загружается из файла проекта. После загрузки проекта Тасэдитор восстанавливает состояние Курсора Проигрывателя с помощью Гринзоны.</span></li>
<li class="rvps10"><span class="rvts22">При любом изменении Ввода текущего мувика из Гринзоны удаляется информация о кадрах, идущих после первого изменённого кадра. Это реализуется с помощью уменьшения позиции головы Гринзоны и удаления устаревшей информации из массива сэйвов (без освобождения памяти, так как на место старых сэйвов вскоре будут записаны новые данные примерно того же размера). Обычно одновременно с этим перемещается Курсор Проигрывателя, чтобы он всегда находился внутри Гринзоны (чтобы на экране FCEUX никогда не отображалось неактуальное состояние игры).</span></li>
<li class="rvps10"><span class="rvts22">При создании Закладки в неё копируется Журнал лага и сэйв соответствующего кадра Гринзоны. При загрузке ответвления этой Закладки из неё восстанавливается Журнал лага и сэйв в соответствующую ячейку Гринзоны, и при необходимости передвигается позиция головы.</span></li>
<li class="rvps10"><span class="rvts22">Информация из Гринзоны используется при раскрашивании строк Piano Roll и Списка Закладок. Информация из Журнала лага отображается не только для кадров, содержащихся в Гринзоне, но и для отсутствующих в ней кадров. Если в Журнале нет информации о лаге на определённом кадре, то предполагается, что это кадр без лага.</span></li>
<li class="rvps10"><span class="rvts22">Информация в Журнал лага собирается одновременно со сбором текущего состояния игры в Гринзону, то есть перед началом эмуляции текущего кадра. В этот момент эмулятор обладает информацией о лаге предыдущего кадра, поэтому на кадре с номером 000020 данные о лаге сохраняются в ячейку 19. Также именно в этот момент может сработать операция </span><a class="rvts28" href="Operations.html#AdjustLag">AdjustLag</a><span class="rvts22">, которая сдвигает весь Ввод в последующих кадрах мувика на 1 кадр вверх или вниз. Ввод сдвигается вверх, если в Журнале лага на прошлом кадре был лаг, а теперь его не стало. Ввод сдвигается вниз, если в Журнале лага на прошлом кадре не было лага, а теперь он есть. Вместе с Вводом аналогично сдвигается и все последующие ячейки Журнала лага, чтобы красные строки Piano Roll по-прежнему соответствовали сдвинувшимся пропускам во Вводе. Кроме того, после операции AdjustLag Курсор Проигрывателя насильно возвращается на предыдущий кадр (в котором изменилась информация о лаге), чтобы проэмулировать его заново. Это реализуется не простой перемоткой назад, а усечением Гринзоны после предыдущего кадра, чтобы в следующий раз повторилась проверка на несовпадение флага лага.</span></li>
<li class="rvps10"><span class="rvts22">При любом изменении Ввода текущего мувика из Гринзоны удаляется информация о кадрах, идущих после первого изменённого кадра (не включая этот кадр). Это реализуется с помощью уменьшения позиции головы Гринзоны и удаления устаревшей информации из массива сэйвов (без освобождения памяти, так как на место старых сэйвов вскоре будут записаны новые данные примерно того же размера).</span></li>
<li class="rvps10"><span class="rvts22">Курсор Проигрывателя всегда обязан находиться внутри Гринзоны, чтобы на экране FCEUX никогда не отображалось неактуальное состояние игры. Так что из-за усечения Гринзоны вполне может переместиться и Курсор Проигрывателя.</span></li>
<li class="rvps10"><span class="rvts22">При создании Закладки в неё копируется Журнал лага и сэйв соответствующего кадра Гринзоны. При загрузке этой Закладки сначала усекается Гринзона (из-за изменения Ввода), но потом из Закладки в соответствующую ячейку Гринзоны восстанавливается сэйв и часть Журнала лага, и при необходимости передвигается позиция головы Гринзоны.</span></li>
<li class="rvps10"><span class="rvts22">Информация из Гринзоны используется при раскрашивании строк Piano Roll и Списка Закладок. Информация из Журнала лага отображается не только для кадров, содержащихся в Гринзоне, но и для отсутствующих в ней кадров. Каждый элемент Журнала лага может иметь одно из трёх значений: есть лаг, нет лага, неизвестно.</span></li>
<li class="rvps10"><span class="rvts22">Информация в Журнал лага собирается одновременно со сбором текущего состояния игры в Гринзону. То есть перед началом эмуляции текущего кадра. В этот момент эмулятор обладает информацией о лаге предыдущего кадра, поэтому на кадре с номером 000020 данные о лаге сохраняются в ячейку 19. Также именно в этот момент может сработать операция </span><a class="rvts28" href="Operations.html#AdjustLag">AdjustLag</a><span class="rvts22">, которая сдвигает весь Ввод в последующих кадрах мувика вверх или вниз. Ввод сдвигается вверх, если в Журнале лага на прошлом кадре был лаг, а теперь его не стало. Ввод сдвигается вниз, если в Журнале лага на прошлом кадре не было лага, а теперь он есть. Вместе с Вводом аналогично сдвигается и все последующие ячейки Журнала лага, чтобы красные строки Piano Roll по-прежнему соответствовали сдвинувшимся пропускам во Вводе.</span></li>
</ul>
<p class="rvps10"><a name="Playback"></a>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Проигрыватель</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Проигрыватель это собрание всех функций по просмотру Вывода (состояния игры в нужных кадрах).</span></p>
<p class="rvps10"><span class="rvts22">Проигрыватель это собрание всех функций по просмотру Вывода (состояния игры).</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">Главный атрибут Проигрывателя текущий проигрываемый кадр мувика, скриншот этого кадра отображается в окне эмулятора в данный момент времени. Этому кадру соответствует голубая строка в Piano Roll, которая носит название Курсор Проигрывателя. Так как Курсор Проигрывателя привязан к состоянию эмулируемой игры, можно использовать его не только в качестве индикатора, но и в качестве управляющего элемента. Чтобы увидеть на экране FCEUX события интересующего кадра, нужно передвинуть Курсор Проигрывателя на строку с номером этого кадра. Для этого есть </span><a class="rvts28" href="Navigation.html#playback-cursor">множество способов</a><span class="rvts22">.</span></li>
<li class="rvps10"><span class="rvts22">Когда пользователь посылает Курсор Проигрывателя на кадр, содержащийся в Гринзоне, состояние эмулируемой игры восстанавливается из соответствующего сэйва. Так как при этом не было никакой эмуляции, Тасэдитор имитирует события "frame boundary" и "frame begin"/"frame end", чтобы сработали соответствующие функции Lua.</span></li>
<li class="rvps10"><span class="rvts22">Когда пользователь посылает Курсор Проигрывателя на кадр, не содержащийся в Гринзоне, Тасэдитор восстанавливает состояние игры на ближайший предшествующий кадр, для которого имеется сэйв Гринзоны, а затем запускает добегание к желаемому кадру. Добегание это эмуляция, которая автоматически останавливается при достижении целевого кадра. Во время добегания на целевом кадре мигает копия голубого курсора.</span></li>
<li class="rvps10"><span class="rvts22">Так как эмулятор обеспечивает детерминизм, состояние игры на любом кадре можно гарантированно получить, используя базовое состояние игры (состояние на начало мувика) и Ввод из мувика. Более того, можно получить требуемое состояние, используя состояние на любой предыдущий кадр (сэйв из Гринзоны) и Ввод из мувика. На этом принципе и основано добегание.</span></li>
<li class="rvps10"><span class="rvts22">Когда пользователь посылает Курсор Проигрывателя на кадр, не содержащийся в Гринзоне, Тасэдитор восстанавливает состояние игры на ближайший предшествующий кадр, для которого имеется сэйв Гринзоны, а затем запускает добегание к желаемому кадру. Добегание это эмуляция, которая автоматически останавливается при достижении целевого кадра. Во время добегания на целевом кадре в Piano Roll мигает копия голубого курсора.</span></li>
<li class="rvps10"><span class="rvts22">Добегание базируется на следующем принципе. Так как эмулятор обеспечивает детерминизм, состояние игры на любом кадре можно гарантированно получить, используя базовое состояние игры (состояние на начало мувика) и Ввод из мувика. Более того, можно получить требуемое состояние, используя состояние на любой предыдущий кадр (сэйв из Гринзоны) и Ввод из мувика.</span></li>
<li class="rvps10"><span class="rvts22">Процесс добегания отображается на прогрессбаре, чтобы в случае длительного добегания пользователь мог оценить оставшееся время ожидания. Когда добегания нет, прогрессбар полностью заполнен во время паузы и пуст во время эмуляции.</span></li>
<li class="rvps10"><span class="rvts22">Добегание может осуществляться на максимально возможной скорости эмуляции. В этом случае для относительно небольших участков добегание будет завершено практически мгновенно.</span></li>
<li class="rvps10"><span class="rvts22">Во многих случаях полезно автоматически останавливать эмуляцию на последнем кадре, для которого в мувике есть Ввод. Для этого служит настройка </span><a class="rvts28" href="ProgramCustomization.html#AutopauseattheendofMovie">Autopause at the end of Movie</a><span class="rvts22">, благодаря которой Курсор Проигрывателя при отпущенной паузе не будет убегать слишком далеко.</span></li>
<li class="rvps10"><span class="rvts22">В большинстве случаев пользователю не требуется автоматически скроллировать Piano Roll к Курсору Проигрывателя во время передвижения этого курсора. Для тех случаев, когда это всё-таки нужно, служит галочка "Follow cursor".</span></li>
<li class="rvps10"><span class="rvts22">Когда эмулятор стоит на паузе, если Курсор Проигрывателя находится не на последнем кадре мувика, Проигрыватель устанавливает флаг автоматической остановки. И если пользователь отпустит паузу, Проигрыватель автоматически остановится при достижении последнего кадра мувика.</span></li>
<li class="rvps10"><span class="rvts22">Во многих случаях полезно автоматически останавливать эмуляцию на последнем кадре, для которого в мувике есть Ввод. Для этого служит настройка </span><a class="rvts28" href="ProgramCustomization.html#AutopauseattheendofMovie">Autopause at the end of Movie</a><span class="rvts22">. Когда эмулятор стоит на паузе, если Курсор Проигрывателя находится не на последнем кадре мувика, Проигрыватель устанавливает флаг автоматической остановки. И если пользователь отпустит паузу, Проигрыватель автоматически остановится при достижении последнего кадра мувика. Благодаря этому Курсор Проигрывателя при отпущенной паузе не будет убегать за пределы мувика.</span></li>
<li class="rvps10"><span class="rvts22">В большинстве случаев пользователю не требуется автоматически скроллировать Piano Roll к Курсору Проигрывателя во время самопроизвольного передвижения этого курсора. А для тех случаев, когда это всё-таки нужно, служит галочка "Follow cursor".</span></li>
</ul>
<p class="rvps10"><a name="GreenArrow"></a>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Зелёная стрелка</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">При создании спидранов ТАСер пытается обогнать свой рекорд на каждом участке. В большинстве случаев критерием оптимальности является номер кадра, на котором происходит конечное событие участка. Для его определения ТАСер перемещает Курсор Проигрывателя, одновременно просматривая экран FCEUX, и останавливает этот ручной поиск в тот момент, когда обнаружено начало интересующего события. Обычно Курсор Проигрывателя так и остаётся на найденном кадре, а ТАСер начинает изменять Ввод на участке, надеясь улучшить его и получить то же событие на более ранний кадр.</span></p>
<p class="rvps10"><span class="rvts22">При создании спидранов ТАСер пытается обогнать свой рекорд на каждом участке. В большинстве случаев критерием оптимальности является номер</span><span class="rvts37"> кадра, на котором происходит целевое событие участка</span><span class="rvts22">. Для его определения ТАСер перемещает Курсор Проигрывателя, одновременно просматривая экран FCEUX, и останавливает этот ручной поиск в тот момент, когда обнаружено начало интересующего события. Обычно Курсор Проигрывателя так и остаётся на найденном кадре, а ТАСер начинает изменять Ввод на участке (над Курсором Проигрывателя), надеясь улучшить старый подход и получить то же событие на более раннем кадре.</span></p>
<p class="rvps10"><span class="rvts22">Во время изменения Ввода Гринзона усекается, и Курсор Проигрывателя отступает назад. Когда ТАСер считает, что внёс во Ввод достаточно существенные изменения, он начинает проверку Вывода, чтобы определить, на каком кадре начинается целевое событие теперь. Для этого он опять перемещает Курсор Проигрывателя, одновременно просматривая экран FCEUX.</span></p>
<p class="rvps10"><span class="rvts22">Чтобы сделать вывод об улучшении, ТАСеру нужно сравнить старый номер кадра (найденный в прошлый раз) и новый номер, найденный только что. Тасэдитор визуализирует эти данные, чтобы пользователю не требовалось запоминать их в уме. На новый номер указывает Курсор Проигрывателя, на старый номер указывает зелёная стрелка.</span></p>
<p class="rvps10"><span class="rvts22">Чтобы сделать вывод об улучшении, ТАСеру нужно сравнить старый номер кадра (найденный в прошлый раз) и новый номер, найденный только что. Тасэдитор визуализирует эти данные, чтобы пользователю не требовалось запоминать числа в уме. На новый номер указывает Курсор Проигрывателя, на старый номер указывает зелёная стрелка.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">Полное название зелёной стрелки утерянная позиция Курсора Проигрывателя.</span></li>
<li class="rvps10"><span class="rvts22">Более адекватной заменой зелёной стрелке служат Маркеры и Закладки, устанавливаемые вручную.</span></li>
<li class="rvps10"><span class="rvts22">Иконка зелёной стрелки отображается в столбце иконок Piano Roll.</span></li>
<li class="rvps10"><span class="rvts22">При рисовании иконок в Piano Roll зелёная стрелка имеет более высокий приоритет над голубой стрелкой (иконкой Курсора Проигрывателя), так как положение голубого курсора можно определить и по другим столбцам.</span></li>
<li class="rvps10"><span class="rvts22">Полное название зелёной стрелки прошлая (предыдущая) позиция Курсора Проигрывателя.</span></li>
<li class="rvps10"><span class="rvts22">Более универсальной заменой зелёной стрелке служат Маркеры и Закладки, устанавливаемые вручную.</span></li>
<li class="rvps10"><span class="rvts22">Иконка зелёной стрелки отображается в столбце иконок Piano Roll. При рисовании иконок в Piano Roll зелёная стрелка имеет более высокий приоритет над голубой стрелкой (иконкой Курсора Проигрывателя), так как положение голубого курсора можно определить и по другим столбцам.</span></li>
<li class="rvps10"><span class="rvts22">Зелёная стрелка появляется на кадре вместо Курсора Проигрывателя в момент усечения Гринзоны. И она остаётся на этом кадре до тех пор, пока не будет произведена следующая последовательность событий:</span></li>
</ul>
<ol style="text-indent: 30px; margin-left: 40px; list-style-position: inside;">
@ -238,19 +238,19 @@
<li class="rvps10"><span class="rvts22">Таким образом, зелёная стрелка не меняет своё положение, когда ещё до запуска эмуляции Гринзона усекается повторно (например, ТАСер изменил Ввод на кадре 90, а затем на кадре 80, но зелёная стрелка так и осталась на кадре 100).</span></li>
<li class="rvps10"><span class="rvts22">Также зелёная стрелка не меняет своё положение, когда Гринзона усекается во время добегания, и эмулятор в этот момент не стоит на паузе.</span></li>
<li class="rvps10"><span class="rvts22">Зелёная стрелка не меняет своё положение при операциях </span><a class="rvts28" href="Operations.html#AdjustLag">AdjustLag</a><span class="rvts22">, </span><a class="rvts28" href="Operations.html#Branch">Branch</a><span class="rvts22">, </span><a class="rvts28" href="Operations.html#Record">Record</a><span class="rvts22">.</span></li>
<li class="rvps10"><span class="rvts22">При нажатии средней кнопки мыши запускается добегание к зелёной стрелке, если она находится за пределами Гринзоны. Если же зелёная стрелка находится внутри Гринзоны, это означает, что текущий участок уже был просмотрен до конца, и при повторных просмотрах автоматическая пауза на зелёной стрелке не нужна.</span></li>
<li class="rvps10"><span class="rvts22">При нажатии средней кнопки мыши запускается добегание к зелёной стрелке, если она находится за пределами Гринзоны. Если же зелёная стрелка находится внутри Гринзоны, это означает, что текущий участок уже был просмотрен до конца, и автоматическая пауза на зелёной стрелке больше не нужна.</span></li>
</ul>
<p class="rvps10"><a name="AutoRestoring"></a>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Автоматическое восстановление последней позиции</span></p>
<p class="rvps10"><span class="rvts23">Автоматическое восстановление прошлой позиции</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">При создании любых ТАСов критерием оптимальности может быть состояние игры на одном и том же кадре, либо ход событий на одном и том же участке. ТАСер просматривает участок и оставляет Курсор Проигрывателя на последнем кадре участка, затем изменяет Ввод на участке и опять просматривает участок, останавливая Курсор Проигрывателя на том же самом кадре. Вывод об улучшении ТАСер делает либо во время просмотра событий участка, либо после остановки эмуляции, оценивая характеристики последнего кадра.</span></p>
<p class="rvps10"><span class="rvts22">Этот процесс можно автоматизировать, автоматически запуская добегание к утерянной позиции Курсора Проигрывателя после каждого усечения Гринзоны. Для этого служит галочка "Auto-restore last position".</span></p>
<p class="rvps10"><span class="rvts22">При создании любых ТАСов критерием оптимальности может быть </span><span class="rvts37">состояние игры на одном и том же кадре</span><span class="rvts22">, либо </span><span class="rvts37">ход событий на участке</span><span class="rvts22">. ТАСер просматривает участок и оставляет Курсор Проигрывателя на последнем кадре участка, затем изменяет Ввод на участке и опять просматривает участок, останавливая Курсор Проигрывателя на том же самом кадре. Вывод об улучшении ТАСер делает либо во время просмотра событий участка, либо после остановки эмуляции, оценивая характеристики последнего кадра.</span></p>
<p class="rvps10"><span class="rvts22">Этот процесс можно автоматизировать, автоматически запуская добегание к зелёной стрелке после каждого усечения Гринзоны. Для этого служит галочка "Auto-restore last position".</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">Когда галочка установлена, сразу после усечения Гринзоны запускается добегание к последней позиции Курсора Проигрывателя.</span></li>
<li class="rvps10"><span class="rvts22">Если Гринзона была усечена во время добегания, при усечении будет продолжено добегание к целевому кадру, а не к текущему положению Курсора Проигрывателя. Но если во время усечения Гринзоны добегание стоит на паузе, это добегание отменяется, и будет запущено добегание к утерянной позиции Курсора Проигрывателя. Подразумевается, что если ТАСер не дождался окончания добегания, поставил эмулятор на паузу и начал изменять Ввод на участке, то он сосредоточился на подучастке, поэтому дальнейший автоматический просмотр будет запускаться именно для этого подучастка.</span></li>
<li class="rvps10"><span class="rvts22">Автовосстановление не запускается при операциях </span><a class="rvts28" href="Operations.html#AdjustLag">AdjustLag</a><span class="rvts22">, </span><a class="rvts28" href="Operations.html#Branch">Branch</a><span class="rvts22">, </span><a class="rvts28" href="Operations.html#Record">Record</a><span class="rvts22">. При срабатывании операции </span><a class="rvts28" href="Operations.html#AdjustLag">AdjustLag</a><span class="rvts22"> продолжается проигрывание мувика.</span></li>
<li class="rvps10"><span class="rvts22">Если Гринзона была усечена во время добегания, при усечении будет продолжено добегание к целевому кадру. Но если во время усечения Гринзоны добегание стоит на паузе, это добегание отменяется, и будет запущено добегание к зелёной стрелке. Подразумевается, что если ТАСер не дождался окончания добегания, поставил эмулятор на паузу и начал изменять Ввод на участке, то он сосредоточился на подучастке, поэтому дальнейший автоматический просмотр будет запускаться именно для этого подучастка.</span></li>
<li class="rvps10"><span class="rvts22">Автовосстановление не запускается при операциях </span><a class="rvts28" href="Operations.html#AdjustLag">AdjustLag</a><span class="rvts22">, </span><a class="rvts28" href="Operations.html#Branch">Branch</a><span class="rvts22">, </span><a class="rvts28" href="Operations.html#Record">Record</a><span class="rvts22">. При срабатывании операции </span><a class="rvts28" href="Operations.html#AdjustLag">AdjustLag</a><span class="rvts22"> проигрывание мувика не затрагивается.</span></li>
</ul>
<p class="rvps10"><a name="Recorder"></a>
<span class="rvts22"><br/></span></p>
@ -260,21 +260,21 @@
<p class="rvps10"><span class="rvts22"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">Мультитрекинг позволяет ТАСеру в режиме Записи изменять данные только одного выбранного джойстика, оставляя данные других джойстиков на этом же кадре нетронутыми. Подробнее см. </span><a class="rvts28" href="Toolbox.html#multitracking">Панель инструментов</a><span class="rvts22">.</span></li>
<li class="rvps10"><span class="rvts22">Когда включен режим Записи, перед началом каждого кадра эмулятор опрашивает виртуальные джойстики и записывает данные в текущий мувик. Затем сразу же передаёт управление Рекордеру.</span></li>
<li class="rvps10"><span class="rvts22">Когда включен режим Записи, в начале каждого кадра эмулятор опрашивает виртуальные джойстики и записывает данные в текущий мувик. Затем сразу же передаёт управление Рекордеру.</span></li>
<li class="rvps10"><span class="rvts22">Рекордер:</span></li>
</ul>
<ul style="text-indent: 30px; margin-left: 40px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">использует данные из мувика на кадре Курсора Проигрывателя в качестве записываемых данных, либо (если идёт Запись по шаблону, и сейчас надо записывать отсутствие нажатий) использует ноль в качестве записываемых данных</span></li>
<li class="rvps10"><span class="rvts22">использует данные из мувика (данные на кадре Курсора Проигрывателя) в качестве записываемых данных, либо (если идёт Запись по шаблону, и сейчас надо записывать отсутствие нажатий) использует ноль в качестве записываемых данных</span></li>
<li class="rvps10"><span class="rvts22">сравнивает записываемые данные со старыми данными, хранящимися в Журнале Истории</span></li>
<li class="rvps10"><span class="rvts22">накладывает на изменения фильтр, соответствующий выбранному режиму мультитрекинга</span></li>
<li class="rvps10"><span class="rvts22">избирательно объединяет старые данные с новыми, в соответствии с галочкой "Superimpose"</span></li>
<li class="rvps10"><span class="rvts22">сохраняет реальные изменения в текущий мувик</span></li>
<li class="rvps10"><span class="rvts22">сохраняет итоговые изменения в текущий мувик</span></li>
<li class="rvps10"><span class="rvts22">вызывает добавление пункта в Журнал Истории и усечение Гринзоны</span></li>
<li class="rvps10"><span class="rvts22">затем возвращает управление эмулятору</span></li>
</ul>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">Эмулятор возвращает данные из текущего мувика в виртуальные джойстики, чтобы использовать эти данные для наступающего кадра. Также в этот момент эмулятор запускает записанные команды (сброс и т.д.).</span></li>
<li class="rvps10"><span class="rvts22">В каждом кадре Рекордер получает от эмулятора информацию о зажатых в данный момент кнопках виртуальных джойстиков и подготавливает для Piano Roll информацию о том, какие столбцы в Заголовке Piano Roll должны загораться зелёным светом. Например, если выбрана радиокнопка "2P" и установлена галочка </span><a class="rvts28" href="ProgramCustomization.html#Use1PkeysforallsingleRecordings">Use 1P keys for all single Recordings</a><span class="rvts22">, то при нажатии кнопки </span><span class="rvts32">A</span><span class="rvts22"> на первом джойстике в Заголовке Piano Roll будет загораться столбец "A" второго джойстика. А если в предыдущем кадре кнопка </span><span class="rvts32">A</span><span class="rvts22"> не была зажата, то Рекордер воспринимает это как нажатие кнопки, и в соответствии с галочкой </span><a class="rvts28" href="ProgramCustomization.html#UseInputkeysforColumnSet">Use Input keys for Column Set</a><span class="rvts22"> вызывает либо установку/снятие Ввода в Выделении, либо установку Ввода в Выделении по шаблону (если зажат </span><span class="rvts34">Alt</span><span class="rvts22">).</span></li>
<li class="rvps10"><span class="rvts22">Эмулятор возвращает данные из текущего мувика в виртуальные джойстики, чтобы использовать эти данные при эмуляции кадра. Также в этот момент эмулятор исполняет записанные команды (сброс и т.д.).</span></li>
<li class="rvps10"><span class="rvts22">В каждом кадре Рекордер получает от эмулятора информацию о зажатых в данный момент кнопках виртуальных джойстиков и подготавливает для Piano Roll информацию о том, какие столбцы в Заголовке Piano Roll должны загораться зелёным светом. Например, если выбрана радиокнопка "2P" и установлена галочка </span><a class="rvts28" href="ProgramCustomization.html#Use1PkeysforallsingleRecordings">Use 1P keys for all single Recordings</a><span class="rvts22">, то при нажатии кнопки </span><span class="rvts32">A</span><span class="rvts22"> на первом джойстике в Заголовке Piano Roll будет загораться столбец "A" второго джойстика. А если в предыдущем кадре кнопка </span><span class="rvts32">A</span><span class="rvts22"> не была зажата, то Рекордер воспринимает это в соответствии с галочкой </span><a class="rvts28" href="ProgramCustomization.html#UseInputkeysforColumnSet">Use Input keys for Column Set</a><span class="rvts22">.</span></li>
</ul>
<p class="rvps10"><a name="Lua"></a>
<span class="rvts22"><br/></span></p>
@ -284,10 +284,10 @@
<p class="rvps10"><span class="rvts22"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">Интерпретатор Lua-функций вызывает соответствующую функцию Тасэдитора не напрямую, а через луа-шлюз Тасэдитора (taseditor_lua).</span></li>
<li class="rvps10"><span class="rvts22">При срабатывании какой-либо функции из библиотеки "taseditor" луа-интерпретатор берёт входные данные из стека, при необходимости конвертирует их в формат, принимаемый луа-шлюзом Тасэдитора, и передаёт их соответствующей функции луа-шлюза Тасэдитора.</span></li>
<li class="rvps10"><span class="rvts22">При срабатывании какой-либо функции из библиотеки "taseditor" луа-интерпретатор берёт входные данные из стека, конвертирует их в формат, принимаемый луа-шлюзом Тасэдитора, и передаёт их соответствующей функции луа-шлюза Тасэдитора.</span></li>
<li class="rvps10"><span class="rvts22">Луа-шлюз Тасэдитора вызывает соответствующие функции Тасэдитора и передаёт полученный результат обратно в луа-интерпретатор.</span></li>
<li class="rvps10"><span class="rvts22">Луа-интерпретатор помещает полученные данные в стек, при необходимости конвертируя их в формат, принимаемый луа-кодом.</span></li>
<li class="rvps10"><span class="rvts22">Функции </span><span class="rvts70">submitinputchange()</span><span class="rvts22">, &nbsp;</span><span class="rvts70">submitinsertframes()</span><span class="rvts22"> и </span><span class="rvts70">submitdeleteframes()</span><span class="rvts22"> не вызывают соответствующее изменение мувика, а только создают запись в массиве отложенных заданий, хранящемся в луа-шлюзе Тасэдитора. Все отложенные задания реализуются при вызове </span><span class="rvts70">applyinputchanges()</span><span class="rvts22">. Благодаря этому луа-скрипт может вносить в мувик сразу несколько изменений, создавая только один пункт Журнала Истории.</span></li>
<li class="rvps10"><span class="rvts22">Функции </span><span class="rvts70">submitinputchange()</span><span class="rvts22">, &nbsp;</span><span class="rvts70">submitinsertframes()</span><span class="rvts22"> и </span><span class="rvts70">submitdeleteframes()</span><span class="rvts22"> не вызывают мгновенное изменение мувика, а только создают запись в массиве отложенных заданий, хранящемся в луа-шлюзе Тасэдитора. Все отложенные задания реализуются при вызове функции </span><span class="rvts70">applyinputchanges()</span><span class="rvts22">. Благодаря этому луа-скрипт может вносить в мувик сразу несколько изменений, создавая только один пункт Журнала Истории.</span></li>
</ul>
<p class="rvps10"><a name="BookmarksBranches"></a>
<span class="rvts22"><br/></span></p>
@ -299,12 +299,12 @@
<li class="rvps10"><span class="rvts22">В проекте может храниться не более 10 Закладок. Это ограничение связано с количеством цифровых клавиш на клавиатуре. Также такое ограничение позволяет отображать в окне TAS Editor основную информацию сразу обо всех Закладках, без необходимости скроллинга. Кроме того, многолетний опыт традиционного ТАСинга подтверждает, что такого количества слотов для Закладок вполне достаточно для продуктивного ТАСинга. </span></li>
<li class="rvps10"><span class="rvts22">Закладка может быть установлена на любой кадр мувика. Закладки не исчезают, даже когда мувик усекается. Например, если поставить Закладку на кадр 1200, а затем сделать усечение Ввода после кадра 1000, за пределами мувика останется Закладка, при прыжке на которую мувик автоматически расширится до кадра 1200.</span></li>
<li class="rvps10"><span class="rvts22">В Piano Roll Закладки отображаются иконкой с соответствующей цифрой (номером слота). Закладка, хранящая текущее ответвление мувика, отображается голубой цифрой, остальные Закладки отображаются зелёными цифрами.</span></li>
<li class="rvps10"><span class="rvts22">Закладка устанавливается нажатием соответствующего хоткея (для каждого слота есть отдельный хоткей сохранения) либо щелчком правой кнопки мыши по слоту Закладки. При этом Закладка устанавливается на тот кадр, где в данный момент находится Курсор Проигрывателя. Этот номер кадра запоминается в Закладке, и в дальнейшем можно в любой момент отправить Курсор Проигрывателя на этот кадр, щёлкнув левой кнопкой мыши по слоту Закладки или нажав соответствующий хоткей (для каждого слота есть отдельный хоткей прыжка). Прыжок на Закладку не является операцией, так как никаких изменений мувика не происходит.</span></li>
<li class="rvps10"><span class="rvts22">Закладка устанавливается нажатием соответствующего хоткея (для каждого слота есть отдельный хоткей сохранения) либо щелчком правой кнопки мыши по слоту Закладки. При этом Закладка устанавливается на тот кадр, где в данный момент находится Курсор Проигрывателя. Этот номер кадра запоминается в Закладке, и в дальнейшем можно в любой момент отправить Курсор Проигрывателя на этот кадр, щёлкнув левой кнопкой мыши по слоту Закладки или нажав соответствующий хоткей (для каждого слота есть отдельный хоткей прыжка). "Прыжок на Закладку" не является операцией, так как никаких изменений мувика не происходит.</span></li>
<li class="rvps10"><span class="rvts22">В момент установки Закладки Тасэдитор проверяет, отличаются ли сохраняемые данные от уже содержащихся в этой Закладке данных. Если различий не найдено, операция </span><a class="rvts28" href="Operations.html#Bookmark">Bookmark</a><span class="rvts22"> не производится.</span></li>
<li class="rvps10"><span class="rvts22">Помимо номера кадра в слот устанавливаемой Закладки сохраняются все данные текущего мувика (тип Ввода, Ввод, Горячие Правки, Маркеры). Тем самым в проекте сохраняется текущее ответвление из всех возможных ответвлений мувика. В дальнейшем мувик будет многократно изменён, но пользователь сможет в любой момент вернуться к состоянию мувика, сохранённому в данной Закладке.</span></li>
<li class="rvps10"><span class="rvts22">В слот устанавливаемой Закладки сохраняются дополнительные данные, повышающие удобство использования. В частности, скриншот экрана FCEUX на момент создания Закладки позволяет быстро узнавать содержимое Закладки без загрузки её ответвления. А копия одного сэйва из Гринзоны (на закладочном кадре) позволяет после загрузки ответвления сразу же поставить Курсор Проигрывателя на кадр Закладки.</span></li>
<li class="rvps10"><span class="rvts22">После установки закладки она становится текущей (отображается голубой цифрой), так как её ответвление более остальных похоже на текущий мувик.</span></li>
<li class="rvps10"><span class="rvts22">При смене текущего мувика на ответвление из Закладки происходит изменение Ввода, поэтому Гринзона усекается, начиная с первого отличающегося кадра. Но благодаря хранящемуся в Закладке сэйву в Гринзону возвращается один сэйв на кадре, где и установлена эта Закладка. Поэтому "прыжок на Закладку во времени" всегда мгновенно перемещает Курсор Проигрывателя на кадр Закладки, в то время как прыжок на Закладку в пространстве (без изменения мувика) может потребовать добегания.</span></li>
<li class="rvps10"><span class="rvts22">Помимо номера кадра в слот устанавливаемой Закладки сохраняются все данные текущего мувика (тип Ввода, Ввод, Горячие Правки, Маркеры). В дальнейшем мувик может быть многократно изменён, но пользователь сможет в любой момент вернуться к состоянию мувика, сохранённому в данной Закладке.</span></li>
<li class="rvps10"><span class="rvts22">В слот устанавливаемой Закладки сохраняется скриншот экрана FCEUX на момент создания Закладки, который позволяет быстро узнавать содержимое Закладки без загрузки её ответвления. А также сохраняется копия одного сэйва из Гринзоны (на закладочном кадре), что позволяет после загрузки ответвления сразу же поставить Курсор Проигрывателя на кадр Закладки.</span></li>
<li class="rvps10"><span class="rvts22">После установки Закладки она становится текущей (отображается голубой цифрой), так как её ответвление более остальных похоже на текущий мувик.</span></li>
<li class="rvps10"><span class="rvts22">При смене текущего мувика на ответвление из Закладки происходит изменение Ввода, поэтому Гринзона усекается, начиная с первого отличающегося кадра. Но благодаря хранящемуся в Закладке сэйву в Гринзону возвращается один сэйв на кадре, где и установлена эта Закладка. Поэтому загрузка Закладки всегда мгновенно перемещает Курсор Проигрывателя на кадр Закладки, в то время как прыжок на Закладку (без изменения мувика) может потребовать добегания.</span></li>
<li class="rvps10"><span class="rvts22">Все операции с Закладками (установка, прыжок, загрузка) производятся после окончания эмуляции текущего кадра, даже если сигнал от пользователя сработает в середине кадра.</span></li>
<li class="rvps10"><span class="rvts22">Для отображения основных Данных закладок используется Список (Listview) без скроллинга, содержащий 10 строк и 3 столбца. при создании нового проекта все 10 Закладок пустые, поэтому второй и третий столбец Списка Закладок будут пустовать.</span></li>
<li class="rvps10"><span class="rvts22">В первом столбце Списка Закладок отображается номер слота, которому соответствует данная строка. Номер отображается как и в Piano Roll с помощью цифровых иконок зелёного или голубого цвета. Нумерация слотов идёт в таком порядке: 1, 2, 3, 4, 5, 6, 7, 8, 9, 0. Этот порядок нужен, чтобы не нарушать ассоциацию с цифровыми клавишами на клавиатуре, которыми пользователь может контролировать Закладки.</span></li>
@ -313,13 +313,14 @@
<li class="rvps10"><span class="rvts22">Список Закладок разделяется вертикальной чертой примерно пополам. Левая часть (где располагается первый и второй столбец Списка) ассоциируется с закладочным функционалом Закладок. Правая часть (где располагается третий столбец) ассоциируется с ответвлениями, хранящимися в Закладках. Левая часть отображается более светлым оттенком, правая более тёмным. Щелчок левой кнопкой мыши по левой половине означает прыжок на Закладку, а щелчок по правой половине загрузку ответвления.</span></li>
<li class="rvps10"><span class="rvts22">Строки Списка Закладок окрашиваются цветами, соответствующими цветам строк Piano Roll, на которых установлены эти Закладки. Например, если Закладка установлена на кадре 1000, и на этом кадре в данный момент находится Курсор Проигрывателя, то в Списке Закладок строчка этой Закладки будет нарисована голубым цветом. Эта фича даёт пользователю дополнительную информацию о расположении Закладок в мувике.</span></li>
<li class="rvps10"><span class="rvts22">Вместо постоянного просмотра Списка Закладок можно переключать вид на Дерево ответвлений. Переключение осуществляется щелчком по заголовку, расположенному над Списком Закладок.</span></li>
<li class="rvps10"><span class="rvts22">Дерево ответвлений это графическое представление взаимосвязей между ответвлениями всех Закладок в проекте. Обычно Закладки создаются по мере создания мувика, поэтому более поздние Закладки хранят ответвление, начальная часть которого совпадает с ответвлениями более ранних Закладок. Для каждой Закладки можно найти "родительскую" Закладку, из мувика которой, вероятнее всего, произошёл мувик данной Закладки. В результате все Закладки выстраиваются в иерархическую структуру, в начале которой находится корень (отображается в виде тучки), являющийся родителем Закладок, для которых не нашлось родителя. Поиск родителей для Закладок осуществляется при каждом изменении любой Закладки. При поиске учитывается номер кадра, на котором установлена каждая Закладка. Благодаря этому в начале иерархии находятся Закладки с наименьшим номером кадра.</span></li>
<li class="rvps10"><span class="rvts22">Дерево ответвлений это графическое представление взаимосвязей между ответвлениями всех Закладок в проекте. Обычно Закладки создаются по мере создания мувика, поэтому более поздние Закладки хранят ответвление, начальная часть которого совпадает с ответвлениями более ранних Закладок. Для каждой Закладки можно найти "родительскую" Закладку, из мувика которой, вероятнее всего, произошёл мувик данной Закладки. В результате все Закладки выстраиваются в иерархическую структуру, в начале которой находится корень (отображается в виде тучки), являющийся родителем Закладок, для которых не нашлось родителя. Поиск родителей для Закладок осуществляется при каждом изменении любой Закладки. При поиске также учитывается номер кадра, на котором установлена каждая Закладка, так что в начале иерархии находятся Закладки с наименьшим номером кадра.</span></li>
<li class="rvps10"><span class="rvts22">Маркеры, содержащиеся в ответвлениях Закладок, не влияют на алгоритм поиска родителей и формирования Дерева. Родитель определяется по Вводу.</span></li>
<li class="rvps10"><span class="rvts22">При установке Закладки она становится текущей, и её содержимое ничем не отличается от текущего мувика. Но после внесения изменений в мувик текущая Закладка уже будет отличаться, поэтому в Дереве ответвлений появляется фаербол, сообщающий об этом. Фаербол символизирует текущий мувик, однако его родителем всегда считается текущая Закладка. Реального поиска лучшего родителя не производится, так как пришлось бы после каждой модификации мувика запускать сравнение его Ввода со всеми Закладками, что признано слишком ресурсоёмким.</span></li>
<li class="rvps10"><span class="rvts22">Закладки в Дереве ответвлений отображаются цифровыми иконками (как и в Piano Roll). Текущая Закладка отображается голубой цифрой. Связи между Закладками отображаются тонкими линиями. Для текущей Закладки формируется последовательность красных линий, связывающих все закладки, при загрузке которых не будет изменения Ввода (то есть как минимум от начального кадра до кадра загружаемой Закладки Ввод будет совпадать с Вводом, хранящимся в текущей Закладке). Эти красные линии идут от тучки к текущей Закладке, либо ещё далее к наследникам текущей Закладки, когда ответвление текущей Закладки содержит тот же самый Ввод, который содержится в ответвлениях этих наследников вплоть до кадра Закладки.</span></li>
<li class="rvps10"><span class="rvts22">Благодаря расположению Закладок по возрастанию их номера кадра, последовательность красных линий можно воспринимать как хронологию текущего мувика. Началом этой хронологии служит тучка, при щелчке по ней Курсор проигрывателя посылается на начало мувика. Закладки, нанизанные на красную нить, являются промежуточными этапами этой хронологии, при щелчке по ним Курсор Проигрывателя посылается на кадр указанной Закладки. Фаербол (если он есть) считается концом текущей хронологии, и при щелчке по нему Курсор Проигрывателя посылается в конец мувика. Также любое положения Курсора Проигрывателя можно проецировать на эту хронологическую линию, найдя две Закладки, между кадрами которых располагается Курсор Проигрывателя, и переведя расстояние, измеряемое в кадрах, в пиксели. В результате текущее положение Курсора Проигрывателя постоянно отображается в Дереве ответвлений в виде маленького голубого треугольника (по аналогии с иконкой Курсора Проигрывателя в Piano Roll).</span></li>
<li class="rvps10"><span class="rvts22">Аналогично просмотру текущей хронологии можно быстро увидеть альтернативную хронологию для любой Закладки, наведя на неё курсор мыши (будет отображаться синими линиями).</span></li>
<li class="rvps10"><span class="rvts22">Маркеры, содержащиеся в ответвлениях Закладок, не влияют на процесс поиска родителей и формирования Дерева.</span></li>
<li class="rvps10"><span class="rvts22">Все данные Закладок сохраняются и загружаются из файла проекта. Для Дерева ответвлений сохраняются и загружаются только кэшированные данные о номере первого кадра различий во Вводе для каждой пары Закладок. Исходя из этих данных Тасэдитор легко восстанавливает иерархию родительских отношений между закладками. А если эти данные отсутствуют, Тасэдитору придётся произвести сравнение Ввода всех Закладок относительно друг друга.</span></li>
<li class="rvps10"><span class="rvts22">Закладки в Дереве ответвлений отображаются цифровыми иконками (как и в Piano Roll). Текущая Закладка отображается голубой цифрой. Связи между Закладками отображаются тонкими линиями. Для текущей Закладки формируется последовательность красных линий, связывающих все закладки, при загрузке которых не будет изменения Ввода текущего мувика (потому что как минимум до закладочного кадра загружаемый Ввод будет совпадать с Вводом, хранящимся в текущей Закладке). Эти красные линии идут от тучки к текущей Закладке, либо ещё далее к наследникам текущей Закладки (когда текущая Закладка содержит тот же самый Ввод, который содержится в этих наследниках).</span></li>
<li class="rvps10"><span class="rvts22">Благодаря расположению Закладок по возрастанию их номера кадра, последовательность красных линий можно воспринимать как хронологию текущего мувика. Началом этой хронологии служит тучка, при щелчке по ней Курсор проигрывателя посылается на начало мувика. Закладки, нанизанные на красную нить, являются промежуточными этапами этой хронологии, при щелчке по ним Курсор Проигрывателя посылается на кадр указанной Закладки. Фаербол (если он есть) считается концом текущей хронологии, и при щелчке по нему Курсор Проигрывателя посылается в конец мувика.</span></li>
<li class="rvps10"><span class="rvts22">Таким образом, любое положения Курсора Проигрывателя можно проецировать на эту хронологическую линию, найдя две Закладки, между кадрами которых располагается Курсор Проигрывателя, и переведя расстояние, измеряемое в кадрах, в пиксели. В результате текущее положение Курсора Проигрывателя постоянно отображается в Дереве ответвлений в виде маленького голубого треугольника (по аналогии с иконкой Курсора Проигрывателя в Piano Roll).</span></li>
<li class="rvps10"><span class="rvts22">Аналогично просмотру текущей хронологии можно быстро увидеть альтернативную хронологию для любой Закладки, наведя на неё курсор мыши (хронология будет отображаться синими линиями).</span></li>
<li class="rvps10"><span class="rvts22">Все данные Закладок сохраняются и загружаются из файла проекта. Для Дерева ответвлений сохраняются и загружаются только кэшированные данные о номере первого кадра различий во Вводе для каждой пары Закладок. Исходя из этих данных Тасэдитор легко восстанавливает иерархию родительских отношений между закладками. А если эти данные отсутствуют, Тасэдитору придётся заново произвести сравнение Ввода всех Закладок относительно друг друга.</span></li>
</ul>
<p class="rvps10"><a name="PopupWindows"></a>
<span class="rvts22"><br/></span></p>
@ -328,40 +329,45 @@
<p class="rvps10"><span class="rvts22">Служат для показа контекстозависимой информации, которая нужна только в определённые моменты времени.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">В TAS Editor 1.0 реализовано только два вида всплывающих окон: скриншоты к Закладкам и текстовые описания к Закладкам. Оба окна всплывают при наведении курсора мыши либо на правую половину Списка Закладок, либо на любую иконку (карточку) Закладки в Дереве ответвлений.</span></li>
<li class="rvps10"><span class="rvts22">Оба окна появляются (по альфа-каналу) в течение примерно полусекунды после наведения курсора мыши на активный элемент. Исчезают так же в течение примерно полусекунды после уведении курсора от элемента.</span></li>
<li class="rvps10"><span class="rvts22">В TAS Editor 1.0 реализовано только два вида всплывающих окон: скриншоты к Закладкам и текстовые описания к Закладкам. Оба окна всплывают при наведении курсора мыши либо на правую половину Списка Закладок, либо на любую иконку Закладки в Дереве ответвлений.</span></li>
<li class="rvps10"><span class="rvts22">Оба окна появляются (с полупрозрачностью) в течение примерно полусекунды после наведения курсора мыши на активный элемент. Исчезают так же в течение примерно полусекунды после уведении курсора от элемента.</span></li>
<li class="rvps10"><span class="rvts22">В </span><a class="rvts28" href="ProgramCustomization.html#DisplayBranchScreenshots">настройках</a><span class="rvts22"> можно отключить тот или другой тип всплывающих окон.</span></li>
<li class="rvps10"><span class="rvts22">В окне </span><span class="rvts26">скриншота</span><span class="rvts22"> отображается сохранённая в указанной Закладке копия экрана FCEUX на момент создания Закладки. В зависимости от настройки </span><a class="rvts28" href="ProgramCustomization.html#HUDinBranchscreenshots">HUD in Branch screenshots</a><span class="rvts22"> в Закладку сохраняется либо просто содержимое буфера экрана эмулируемой приставки, либо изображение экрана приставки с наложенными данными эмулятора. Скриншоты служат для быстрой оценки содержимого Закладки, а также для сравнения альтернативных стратегий.</span></li>
<li class="rvps10"><span class="rvts22">В окне </span><span class="rvts26">описания</span><span class="rvts22"> отображается текстовое поле, по ширине равное ширине верхнего и нижнего текстового поля для редактирования Заметок. В поле отображается текст Заметки Маркера, взятого из ответвления указанной Закладки. Маркер определяется номером кадра, на котором установлена эта Закладка.</span></li>
<li class="rvps10"><span class="rvts22">Окно скриншота отображается сбоку от раздела Закладок, окно описания отображается под окном скриншота.</span></li>
<li class="rvps10"><span class="rvts22">При перетаскивании окна TAS Editor всплывающие окна перемещаются вместе с ним (пока не погаснут).</span></li>
<li class="rvps10"><span class="rvts22">При перетаскивании окна TAS Editor всплывающие окна перемещаются вместе с ним.</span></li>
<li class="rvps10"><span class="rvts22">Если во время отображения всплывающих окон меняется содержимое указанной Закладки, содержимое всплывающих окон также мгновенно обновляется.</span></li>
</ul>
<p class="rvps10"><a name="HistoryLog"></a>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Журнал Истории</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">История всех существенных изменений проекта служит, главным образом, для удобного отката этих изменений, а также для визуального отслеживания этой истории.</span></p>
<p class="rvps10"><span class="rvts22">Журналирование всех существенных изменений проекта служит, главным образом, для отката этих изменений, а также для визуального отслеживания этой истории.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">В каждом пункте Журнала Истории хранится полная копия Ввода и Маркеров на момент создания пункта. Также в любом пункте может храниться резервная копия Закладки, если пункт создан из-за операции </span><a class="rvts28" href="Operations.html#Bookmark">Bookmark</a><span class="rvts22">.</span></li>
<li class="rvps10"><span class="rvts22">В каждом пункте Журнала Истории хранится полная копия текущего Ввода, Лага и Маркеров на момент создания пункта. Также в любом пункте может храниться резервная копия Закладки, если пункт создан из-за операции </span><a class="rvts28" href="Operations.html#Bookmark">Bookmark</a><span class="rvts22">.</span></li>
<li class="rvps10"><span class="rvts22">Данные каждого пункта хранятся в оперативной памяти одновременно в двух видах &nbsp; сжатом и несжатом. Несжатый используется при работе, сжатый сохраняется в fm3-файл. При создании нового пункта Истории он хранится только в несжатом виде, однако каждые полсекунды Тасэдитор проходится по Журналу Истории и создаёт сжатую версию для первого попавшегося пункта без сжатой версии. Таким образом, к моменту сохранения проекта на диск почти все пункты Истории уже имеют сжатую версию, а те, которые не имеют, сжимаются во время сохранения (что немного замедляет процесс сохранения). При загрузке fm3-файла пункты Журнала Истории загружаются в запакованном виде и распаковываются.</span></li>
<li class="rvps10"><span class="rvts22">Благодаря Журналу Истории реализуется поиск первого изменившегося кадра, после которого затем усекается Гринзона. Большинство операций работают таким образом:</span></li>
<li class="rvps10"><span class="rvts22">Благодаря Журналу Истории реализуется поиск первого изменившегося кадра, после которого затем усекается Гринзона. Большинство </span><a class="rvts28" href="Operations.html">операций</a><span class="rvts22"> работают таким образом:</span></li>
</ul>
<ul style="text-indent: 30px; margin-left: 40px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">Вносятся изменения в мувик.</span></li>
<li class="rvps10"><span class="rvts22">Для большинства операций запоминаются минимальный и максимальный номер кадра, в который были внесены изменения.</span></li>
<li class="rvps10"><span class="rvts22">Вносятся изменения в данные текущего мувика.</span></li>
<li class="rvps10"><span class="rvts22">Запоминаются минимальный и максимальный номер кадра, в который были внесены изменения.</span></li>
<li class="rvps10"><span class="rvts22">Вызывается регистрация изменений с помощью Истории, минимальный и максимальный кадр передаются в качестве параметров вместе с кодом операции и другими параметрами.</span></li>
<li class="rvps10"><span class="rvts22">История сверяет содержимое текущего мувика с содержимым последнего пункта Журнала Истории. Если задан минимальный кадр, то сверка начинается с этого кадра, игнорируя содержимое мувика до него. Иначе проверяется всё от начала мувика. Если задан максимальный кадр, то сверка заканчивается после этого кадра (но большинство операций не передают максимальный кадр, так как, например, вставка пустого кадра передвигает весь последующий Ввод, и нужно вести проверку до самого конца мувика).</span></li>
</ul>
<ul style="text-indent: 30px; margin-left: 70px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">История сверяет содержимое текущего мувика с содержимым последнего пункта Журнала Истории. Если задан минимальный кадр, то сверка начинается с этого кадра, игнорируя содержимое мувика до него (ради ускорения работы). Иначе проверяется всё от начала мувика. Если задан максимальный кадр, то сверка заканчивается после этого кадра (но большинство операций не передают максимальный кадр, так как, например, вставка пустого кадра передвигает весь последующий Ввод, и нужно вести проверку до самого конца мувика).</span></li>
<li class="rvps10"><span class="rvts22">Как только обнаруживается первое различие между Вводом/Маркерами мувика и Вводом/Маркерами последнего снимка мувика, создаётся новый пункт в Журнале Истории и заполняются все его атрибуты.</span></li>
<li class="rvps10"><span class="rvts22">Если различия не были обнаружены, то считается, что операция не повлияла на мувик, и никаких изменений в проекте не производится. Например, если записать те же самые нажатия поверх уже имеющихся, операция </span><a class="rvts28" href="Operations.html#Record">Record</a><span class="rvts22"> не будет зарегистрирована.</span></li>
<li class="rvps10"><span class="rvts22">Если различия не были обнаружены, то считается, что операция не повлияла на мувик, и никакие изменения в проекте не регистрируются. Например, если записать те же самые нажатия поверх уже имеющихся, операция </span><a class="rvts28" href="Operations.html#Record">Record</a><span class="rvts22"> не будет зарегистрирована.</span></li>
<li class="rvps10"><span class="rvts22">Даже если операция не повлияла на Ввод/Маркеры, она могла сдвинуть Лаг, так что История также сравнивает Журналы лага и возвращает кадр первого различия.</span></li>
<li class="rvps10"><span class="rvts22">Для операции </span><a class="rvts28" href="Operations.html#Record">Record</a><span class="rvts22"> регистрируется не только номер кадра с изменившимся Вводом, но и номер джойстика, кнопки которого были изменены.</span></li>
<li class="rvps10"><span class="rvts22">Последовательно добавляемые пункты для операций </span><a class="rvts28" href="Operations.html#AdjustLag">AdjustLag</a><span class="rvts22">, </span><a class="rvts28" href="Operations.html#Record">Record</a><span class="rvts22">, </span><a class="rvts28" href="Operations.html#Set">Set</a><span class="rvts22"> и </span><a class="rvts28" href="Operations.html#Unset">Unset</a><span class="rvts22"> могут объединяться в один пункт Журнала Истории, чтобы их было удобнее откатывать в случае необходимости. Объединение производится во время заполнения атрибутов нового пункта Журнала Истории. Вместо добавления этого пункта в конец Журнала происходит замена последнего пункта на новый.</span></li>
<li class="rvps10"><span class="rvts22">После регистрации нового пункта История подаёт сигнал Дереву ответвлений (чтобы на нём появился фаербол) и менеджеру проекта (чтобы в заголовке окна появилась звёздочка), а затем возвращает номер кадра, на котором были обнаружено первое различие.</span></li>
<li class="rvps10"><span class="rvts22">Вызывается усечение Гринзоны после кадра с первым обнаруженным различием. Этот номер может быть больше, чем минимальный номер кадра, в который были внесены изменения самой операцией. Например, если установить нажатия кнопки на всех кадрах в Выделении, минимальным номером кадра будет первый выделенный кадр, но Гринзона будет усечена только после того выделенного кадра, на котором раньше не было нажатия этой кнопки.</span></li>
<li class="rvps10"><span class="rvts22">Последовательно добавляемые пункты для операций </span><a class="rvts28" href="Operations.html#AdjustLag">AdjustLag</a><span class="rvts22">, </span><a class="rvts28" href="Operations.html#Record">Record</a><span class="rvts22">, </span><a class="rvts28" href="Operations.html#Set">Set</a><span class="rvts22"> или </span><a class="rvts28" href="Operations.html#Unset">Unset</a><span class="rvts22"> могут объединяться в один пункт Журнала Истории, чтобы их было удобнее откатывать в случае необходимости. Объединение производится во время заполнения атрибутов нового пункта Журнала Истории. Вместо добавления этого пункта в конец Журнала происходит замена последнего пункта на новый.</span></li>
<li class="rvps10"><span class="rvts22">После регистрации нового пункта История подаёт сигнал Дереву ответвлений (чтобы на нём появился фаербол) и менеджеру проекта (чтобы в заголовке окна появилась звёздочка), а затем возвращает номер кадра, на котором были обнаружено первое различие. Если различий не было найдено, возвращается -1.</span></li>
</ul>
<ul style="text-indent: 30px; margin-left: 40px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">Вызывается усечение Гринзоны после кадра с первым обнаруженным различием. Этот номер может быть больше, чем минимальный номер кадра, в который были внесены изменения самой операцией. Например, если установить нажатия кнопки на всех выделенных кадрах, минимальным номером кадра будет первый выделенный кадр, но Гринзона будет усечена только после того выделенного кадра, на котором раньше не было нажатия этой кнопки.</span></li>
</ul>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">Откат Истории осуществляется как переход с текущего пункта Журнала Истории на предыдущий. Можно сразу прыгать на любой пункт Журнала Истории. Текущий мувик и текущие Маркеры восстанавливаются из данных, содержащихся в этом пункте, а сам пункт становится текущим.</span></li>
<li class="rvps10"><span class="rvts22">Откат Истории осуществляется как переход с текущего пункта Журнала Истории на предыдущий. Можно напрямую прыгать на любой пункт Журнала Истории. Текущий мувик и текущие Маркеры восстанавливаются из данных, содержащихся в этом пункте, а сам пункт становится текущим.</span></li>
<li class="rvps10"><span class="rvts22">Одним из атрибутов каждого пункта Истории является "номер ключевого кадра". Для большинства операций это номер кадра, где обнаружилось первое различие. Для операций, сдвигающих Ввод, это номер минимального кадра.</span></li>
<li class="rvps10"><span class="rvts22">При прыжках по Истории в Piano Roll на полсекунды появляется курсор-указка фиолетового цвета, акцентирующий внимание на ключевом кадре. При откате (undo) этот курсор указывает на ключевой кадр следующего пункта Истории (относительно текущего), при повторе (redo) этот курсор указывает на ключевой кадр текущего пункта истории.</span></li>
</ul>
@ -373,10 +379,10 @@
<p class="rvps10"><span class="rvts22"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">Счётчик перезаписей хранится в мувике (а значит и в fm3-файле проекта). При создании нового мувика (либо нового проекта в Тасэдиторе) счётчик обнуляется.</span></li>
<li class="rvps10"><span class="rvts22">При ТАСинге вне Тасэдитора: счётчик увеличивается на единицу каждый раз, когда ТАСер загружает сэйв в режиме Записи, чтобы изменить Ввод на уже просмотренном участке мувика. Счётчик не увеличивается, когда ТАСер записывает Ввод для кадров, события которых ему не известны.</span></li>
<li class="rvps10"><span class="rvts22">При ТАСинге в Тасэдиторе: счётчик увеличивается на единицу каждый раз, когда ТАСер изменяет Ввод на отгринзоненном участке мувика. Счётчик не увеличивается, когда ТАСер изменяет Ввод для кадров, находящихся дальше головы Гринзоны.</span></li>
<li class="rvps10"><span class="rvts37">При ТАСинге вне Тасэдитора:</span><span class="rvts22"> счётчик увеличивается на единицу каждый раз, когда ТАСер загружает сэйв в режиме Записи, чтобы изменить Ввод на уже просмотренном участке мувика. Счётчик не увеличивается, когда ТАСер записывает Ввод для кадров, события которых ему не известны.</span></li>
<li class="rvps10"><span class="rvts37">При ТАСинге в Тасэдиторе:</span><span class="rvts22"> счётчик увеличивается на единицу каждый раз, когда ТАСер изменяет Ввод на отгринзоненном участке мувика. Счётчик не увеличивается, когда ТАСер изменяет Ввод для кадров, находящихся дальше головы Гринзоны.</span></li>
<li class="rvps10"><span class="rvts22">Таким образом, в обоих случаях ведётся учёт, </span><span class="rvts37">сколько раз ТАСер изменил известное ему будущее</span><span class="rvts22">. Счётчик не увеличивается, когда ТАСер меняет будущее вслепую, то есть до просмотра игровых событий на изменяемых кадрах.</span></li>
<li class="rvps10"><span class="rvts22">В старых эмуляторах счётчик увеличивается прямо в момент загрузки сэйва в режиме Записи, ещё до того, как ТАСер изменяет Ввод. Из-за этого возможна ситуация, когда пользователь несколько раз подряд нажимает хоткей загрузки сэйва (например, </span><span class="rvts27">F1</span><span class="rvts22">), и при каждом нажатии счётчик перезаписей будет увеличиваться. В Тасэдиторе счётчик увеличивается только в момент усечения Гринзоны, независимо от выбранного способа навигации. Поэтому при первом нажатии хоткея загрузки Закладки (например, </span><span class="rvts27">F1</span><span class="rvts22">) счётчик увеличится только в случае, если ответвление этой Закладки отличается от текущего мувика, причём расхождение должно начинаться с уже просмотренного кадра (кадра внутри Гринзоны). А при повторных нажатиях этого хоткея счётчик не будет увеличиваться, так как ответвление Закладки уже не отличается от текущего мувика, и изменения Ввода не происходит.</span></li>
<li class="rvps10"><span class="rvts22">В старых эмуляторах счётчик увеличивается прямо в момент загрузки сэйва в режиме Записи, ещё до того, как ТАСер изменяет Ввод. Из-за этого возможна ситуация, когда пользователь несколько раз подряд нажимает хоткей загрузки сэйва (например, </span><span class="rvts27">F1</span><span class="rvts22">), и при каждом нажатии счётчик перезаписей будет увеличиваться. В Тасэдиторе счётчик увеличивается только в момент усечения Гринзоны, независимо от выбранного способа навигации. Поэтому при первом нажатии </span><span class="rvts27">F1</span><span class="rvts22"> счётчик увеличится только в случае, если ответвление этой Закладки отличается от текущего мувика, причём расхождение должно начинаться с отгринзоненного кадра. А при повторных нажатиях </span><span class="rvts27">F1</span><span class="rvts22"> счётчик не будет увеличиваться, так как ответвление Закладки уже не отличается от текущего мувика, и изменения Ввода не происходит.</span></li>
</ul>
<p class="rvps10"><a name="Modifiers"></a>
<span class="rvts22"><br/></span></p>
@ -385,20 +391,20 @@
<p class="rvps10"><span class="rvts22">Для повышения интуитивности клавиатурного управления в Тасэдиторе используется строгое разделение функций клавиш модификаторов:</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts34">Shift</span><span class="rvts22"> ассоциируется с </span><a class="rvts28" href="Glossary.html#Output">Выводом</a><span class="rvts22"> мувика, а конкретно с Курсором Проигрывателя. Многие клавиатурные комбинации, содержащие эту клавишу, относятся к управлению этим курсором. Если быстро нажать </span><span class="rvts34">Shift </span><span class="rvts22">два раза подряд, Piano Roll автоматически скроллируется к Курсору Проигрывателя.</span></li>
<li class="rvps10"><span class="rvts34">Shift</span><span class="rvts22"> ассоциируется с </span><a class="rvts28" href="Glossary.html#Output">Выводом</a><span class="rvts22"> мувика, а конкретно с Курсором Проигрывателя. Клавиатурные комбинации, содержащие эту клавишу, обычно управляют этим курсором. Если быстро нажать </span><span class="rvts34">Shift </span><span class="rvts22">два раза подряд, Piano Roll автоматически скроллируется к Курсору Проигрывателя.</span></li>
<li class="rvps10"><span class="rvts34">Ctrl</span><span class="rvts22"> ассоциируется с </span><a class="rvts28" href="Glossary.html#Input">Вводом</a><span class="rvts22"> мувика, а конкретно &nbsp;с Курсором Выделения. Многие клавиатурные комбинации, содержащие эту клавишу, относятся к управлению этим курсором. Если быстро нажать </span><span class="rvts34">Ctrl </span><span class="rvts22">два раза подряд, Piano Roll автоматически скроллируется к Курсору Выделения.</span></li>
<li class="rvps10"><span class="rvts34">Alt</span><span class="rvts22"> ассоциируется с шаблонами и чередующимися последовательностями.</span></li>
<li class="rvps10"><span class="rvts34">Alt</span><span class="rvts22"> ассоциируется с шаблонами и чередующимися последовательностями, в частности, с промежутками в этих последовательностях.</span></li>
</ul>
<p class="rvps10"><a name="Patterns"></a>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Шаблоны</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Заготовленные последовательности &nbsp;нажатий для одной кнопки. Подробнее см. </span><a class="rvts28" href="AdvancedFeatures.html#UsingPatterns">Продвинутые возможности</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Заготовленные последовательности состояний для одной кнопки. Подробнее см. </span><a class="rvts28" href="AdvancedFeatures.html#UsingPatterns">Продвинутые возможности</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">Хранятся во внешнем текстовом файле в формате, доступном для редактирования в Блокноте.</span></li>
<li class="rvps10"><span class="rvts22">Формат файла должен быть описан в самом файле. Для каждого шаблона указывается его имя, которое будет отображаться в списке шаблонов.</span></li>
<li class="rvps10"><span class="rvts22">Загружаются из файла в оперативную память в момент открытия окна TAS Editor.</span></li>
<li class="rvps10"><span class="rvts22">Шаблоны &nbsp;хранятся во внешнем текстовом файле в формате, доступном для редактирования в Блокноте. Формат файла должен быть описан в самом файле.</span></li>
<li class="rvps10"><span class="rvts22">Каждый шаблон должен иметь имя, которое будет отображаться в списке шаблонов.</span></li>
<li class="rvps10"><span class="rvts22">Шаблоны загружаются из файла в оперативную память в момент открытия окна TAS Editor.</span></li>
<li class="rvps10"><span class="rvts22">В TAS Editor 1.0 нет встроенных средств редактирования шаблонов, так как формат очень прост, а фича не слишком востребована.</span></li>
<li class="rvps10"><span class="rvts22">По шаблону можно устанавливать Ввод, Маркеры и даже Выделение.</span></li>
<li class="rvps10"><span class="rvts22">При установке шаблона может учитываться или не учитываться лаг. Подробнее: </span><a class="rvts28" href="ProgramCustomization.html#AutofirePatternskipsLag">Настройка программы</a></li>
@ -407,20 +413,20 @@
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Пересечение промежутков</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Дополнительный способ быстрой навигации по содержимому Piano Roll, облегчающий визуальное прослеживание длинных последовательностей для отдельно взятой кнопки или Маркеров.</span></p>
<p class="rvps10"><span class="rvts22">Дополнительный способ быстрой навигации по содержимому Piano Roll, облегчающий визуальное прослеживание длинных последовательностей для отдельно взятой кнопки или Маркеров. Также он позволяет переходить от одной Закладки к другой.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">Пересечение промежутков это вертикальный скроллинг Piano Roll, срабатывающий при вращении колеса мыши с зажатой клавишей </span><span class="rvts34">Alt</span><span class="rvts22">. Конкретная величина скроллинга не зависит от скорости вращения колеса, а рассчитывается каждый раз индивидуально, исходя из ячейки Piano Roll под курсором мыши в данный момент.</span></li>
<li class="rvps10"><span class="rvts22">При зажатом </span><span class="rvts34">Alt</span><span class="rvts22"> имеет значение только направление вращения колеса (вверх или вниз), а не скорость вращения.</span></li>
<li class="rvps10"><span class="rvts22">Пересечение промежутков это вертикальный скроллинг Piano Roll, срабатывающий при вращении колеса мыши с зажатой клавишей </span><span class="rvts34">Alt</span><span class="rvts22">. Конкретная величина скроллинга не зависит от скорости вращения колеса, а рассчитывается каждый раз индивидуально, исходя из состояния ячейки Piano Roll рядом с курсором мыши. Так что имеет значение только направление вращения колеса (вверх или вниз).</span></li>
<li class="rvps10"><span class="rvts22">Пересечение &nbsp;промежутков подразумевает, что пользователь хочет найти ячейку, находящуюся на расстоянии более одного кадра от ячейки под курсором мыши (иначе нет смысла использовать эту функцию, достаточно просто провести курсор мыши чуть выше).</span></li>
<li class="rvps10"><span class="rvts22">Таким образом, при вращении колеса мыши вверх эта функция запоминает значение ячейки, предшествующей ячейке под курсором мыши. Затем функция начинает поиск ячейки, значение которой не совпадает с данным значением. Поиск идёт снизу вверх от ячейки, предшествующей ячейке под курсором мыши. При успешном обнаружении такой ячейки Piano Roll скроллируется таким образом, чтобы курсор мыши теперь указывал на найденную ячейку. Если же поиск дошёл до начала мувика, а ячейка не найдена, то Piano Roll не скроллируется.</span></li>
<li class="rvps10"><span class="rvts22">Аналогично при вращении колеса мыши вниз эта функция запоминает значение ячейки, следующей за ячейкой под курсором мыши. Затем функция начинает поиск ячейки, значение которой не совпадает с данным значением. Поиск идёт сверху вниз от ячейки, следующей за ячейкой под курсором мыши.</span></li>
<li class="rvps10"><span class="rvts22">Запоминаемое значение имеет булев тип. То есть, например, все иконки имеют одинаковое значение (true), и все пустоты тоже одинаковое (false).</span></li>
</ul>
<p class="rvps10"><a name="SaveCompact"></a>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Компактное сохранение</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Файл проекта Тасэдитора в первую очередь предназначен для сохранения точного снимка рабочего процесса. Чтобы использовать тот же самый формат для обмена файлами между соавторами ТАСа или для опубликования в Интернете, необходимо предоставить пользователю возможность избирательного сохранения рабочих данных в файл. При открытии такого fm3-файла отсутствующие данные будут заменяться данными по умолчанию.</span></p>
<p class="rvps10"><span class="rvts22">Файл проекта Тасэдитора в первую очередь предназначен для сохранения точного снимка рабочего процесса. Чтобы использовать тот же самый формат для обмена файлами, необходимо предоставить пользователю возможность избирательного сохранения рабочих данных в файл. При открытии такого fm3-файла отсутствующие данные будут заменяться данными по умолчанию.</span></p>
<p class="rvps10"><span class="rvts22">Подробнее см. </span><a class="rvts28" href="AdvancedFeatures.html#ProjectsSharing">Продвинутые возможности</a><span class="rvts22"> и </span><a class="rvts28" href="FM3format.html">Формат FM3</a><span class="rvts22">.</span></p>
<p class="rvps10"><a name="Autosave"></a>
<span class="rvts22"><br/></span></p>
@ -436,7 +442,7 @@
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a name="OutputLog"></a>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Журнал Вывода (Output Log)</span></p>
<p class="rvps10"><span class="rvts23">Журнал Вывода</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Следующий этап эволюции инструмента Memory Watch просмотр состояния игровых данных в динамике, а не только в статике. Аналогично Журналу лага, эта фича позволит легче и точнее анализировать принципы изменения игрового Вывода.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
@ -445,9 +451,9 @@
<li class="rvps10"><span class="rvts22">Можно гибко измененять ширину Списка (перетаскиванием узкой границы между ним и Piano Roll, соответственно изменяется ширина Piano Roll, таким образом их суммарная ширина всегда остаётся одинаковой). Можно также менять Список и Piano Roll местами, либо полностью отключать отображение Журнала Вывода. При отключении отображения Журнала Piano Roll расширяется на освобождённое пространство, в точности как в TAS Editor 1.0. Отключение отображения Журнала не означает отключение журналирования данных.</span></li>
<li class="rvps10"><span class="rvts22">В Заголовке Списка отображаются названия журналируемых ячеек. Можно добавлять и удалять колонки, изменять названия, менять колонки местами и изменять их ширину. При создании нового проекта ни одной колонки в Журнале Вывода нет, и, соответственно, журналирование не ведётся.</span></li>
<li class="rvps10"><span class="rvts22">В строках списка отображаются значения ячеек, сохранённые из состояния игры на соответствующем кадре мувика. Строки Списка раскрашиваются теми же цветами, что и соответствующие строки Piano Roll. При выделении строк в Piano Roll выделяются строки в Журнале.</span></li>
<li class="rvps10"><span class="rvts22">Помимо ячеек RAM необходимо реализовать журналирование переменных Lua. Например, предоставить Lua-скриптам Read/Write-доступ к дюжине int-ячеек Тасэдитора и дать пользователю возможность журналировать любые ячейки из этой дюжины.</span></li>
<li class="rvps10"><span class="rvts22">Помимо ячеек RAM необходимо реализовать журналирование переменных Lua. Например, предоставить Lua-скриптам Read/Write-доступ к дюжине int-переменных Тасэдитора и дать пользователю возможность журналировать любые ячейки из этой дюжины.</span></li>
<li class="rvps10"><span class="rvts22">Кроме того, в будущем можно реализовать добавление колонки со скриншотами игры (либо выбранной прямоугольной областью игрового экрана). Причём отображаемый размер скриншота будет зависеть от текущей ширины колонки, и как следствие, скриншоты будут отображаться не на каждой строчке Журнала, а через каждые несколько строк. Однако съёмка скриншотов всегда осуществляется на каждом кадре.</span></li>
<li class="rvps10"><span class="rvts22">Все журналируемые данные хранятся в Гринзоне, наравне с Журналом лага. При добавлении ячейки RAM возможно автоматическое заполнение всей колонки (Тасэдитор пробегает по всем сэйвам Гринзоны, распаковывает их и берёт значение из сохранённой копии RAM). При добавлении переменной Lua значения ячеек будут неопределёнными (пустые ячейки в Списке), и для их заполнения пользователю необходимо будет заново просмотреть мувик с запущенным Lua-скриптом.</span></li>
<li class="rvps10"><span class="rvts22">Все журналируемые данные хранятся в Гринзоне, наравне с Журналом лага. При добавлении ячейки RAM возможно автоматическое заполнение всей колонки (Тасэдитор пробегает по всем сэйвам Гринзоны, распаковывает их и берёт значение из сохранённой копии RAM). При добавлении переменной Lua значения ячеек будут неопределёнными (пустые ячейки в Списке), и для их заполнения пользователю необходимо будет заново проэмулировать мувик с запущенным Lua-скриптом.</span></li>
<li class="rvps10"><span class="rvts22">При усечении Гринзоны старые данные, ставшие неактуальными, не удаляются, но отображаются менее ярким цветом, пока на их место не будут записаны новые данные. При удалении сэйвов из хвоста Гринзоны данные Журнала остаются и отображаются обычным цветом.</span></li>
<li class="rvps10"><span class="rvts22">Возможна гибкая расцветка ячеек, например, подсветка одинаковых значений в Выделении, подсветка искомых значений, автоматическое изменение цвета при изменении значения, автоматическая индикация при достижении заданного значения и т.д.</span></li>
<li class="rvps10"><span class="rvts22">Возможно чтение любых данных Гринзоны из Lua-скриптов с помощью API Тасэдитора.</span></li>
@ -458,36 +464,37 @@
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Миникарта</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Графически отображает в окне Тасэдитора весь мувик Гринзону, лаг, Курсор Проигрывателя, Выделение, Маркеры, Закладки, точки Горячих Правок, подсветку Журнала Вывода и т.д. Предоставляет пользователю мгновенный образ текущего проекта, не обладающий детальностью, зато полностью умещающийся на экране. Также усовершенствует навигацию по мувику.</span></p>
<p class="rvps10"><span class="rvts22">Графически отображает в окне Тасэдитора весь мувик Гринзону, лаг, Курсор Проигрывателя, Выделение, Маркеры, Закладки, точки Горячих Правок, подсветку Журнала Вывода и т.д. Предоставляет пользователю мгновенный образ текущего проекта, не обладающий детальностью, зато полностью умещающийся на экране. Также усовершенствует навигацию.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">Миникарта представляет собой прямоугольный bitmap-холст, по высоте равный высоте Piano Roll, по ширине равный 30 пикселей. Может располагаться слева или справа от Piano Roll и Журнала Вывода.</span></li>
<li class="rvps10"><span class="rvts22">В пункте View можно гибко настраивать отображаемые элементы на миникарте (устанавливать галочки напротив желаемых элементов). Также можно отключить отображение Миникарты.</span></li>
<li class="rvps10"><span class="rvts22">Миникарта представляет собой прямоугольный bitmap-холст, по высоте равный высоте Piano Roll, по ширине равный 30 пикселей (плюс ещё 10 на иконки Закладок). Может располагаться слева или справа от Piano Roll и Журнала Вывода.</span></li>
<li class="rvps10"><span class="rvts22">В пункте меню "View" можно гибко настраивать отображаемые элементы на миникарте (устанавливать галочки напротив желаемых элементов). Также можно совсем отключить отображение Миникарты.</span></li>
<li class="rvps10"><span class="rvts22">Миникарта не хранит какие-либо данные проекта. Она втоматически перерисовывается с заданной периодичностью (по умолчанию раз в секунду).</span></li>
<li class="rvps10"><span class="rvts22">Маркеры отображаются горизонтальными линиями жёлтого цвета на левой половине Миникарты. Каждая такая линия занимает по высоте как минимум 1 пиксель, поэтому Маркеры не теряются даже при мелком масштабе Миникарты (когда в мувике намного больше кадров, чем высота Миникарты в пикселях). Ширина линии равна трети ширины Миникарты.</span></li>
<li class="rvps10"><span class="rvts22">Горячие Правки отображаются горизонтальными линиями соответствующего цвета на правой половине Миникарты. Каждая такая линия занимает по высоте как минимум 1 пиксель.</span></li>
<li class="rvps10"><span class="rvts22">Маркеры отображаются горизонтальными линиями жёлтого цвета на левой половине Миникарты. Каждая такая линия занимает по высоте как минимум 1 пиксель, поэтому Маркеры не теряются даже при мелком масштабе Миникарты (когда в мувике намного больше кадров, чем высота Миникарты в пикселях). Ширина линии равна 9px.</span></li>
<li class="rvps10"><span class="rvts22">Горячие Правки отображаются горизонтальными линиями соответствующего цвета на правой половине Миникарты. Каждая такая линия занимает по высоте как минимум 1 пиксель. Ширина линии равна 9px.</span></li>
<li class="rvps10"><span class="rvts22">Закладки отображаются соответствующими иконками слева от Миникарты. По этим иконкам можно щёлкать левой и правой кнопкой мыши, эффект будет аналогичен щелчкам по иконкам в Дереве Ответвлений.</span></li>
<li class="rvps10"><span class="rvts22">Щелчок правой кнопкой мыши мгновенный скроллинг видимой области Piano Roll к указанному месту в мувике. Далее можно перетаскивать видимую область вверх/вниз по мувику, не отпуская правую кнопку.</span></li>
<li class="rvps10"><span class="rvts22">Щелчок левой кнопкой мыши навигация Курсором Проигрывателя. Далее можно перетаскивать Курсор Проигрывателя, не отпуская левую кнопку.</span></li>
<li class="rvps10"><span class="rvts22">При наведении курсора мыши на миникарту в этой области появляется прямоугольная лупа.</span></li>
<li class="rvps10"><span class="rvts22">Щелчок левой кнопкой мыши по миникарте мгновенный скроллинг видимой области Piano Roll к указанному месту в мувике. Далее можно перетаскивать видимую область вверх/вниз по мувику, не отпуская левую кнопку.</span></li>
<li class="rvps10"><span class="rvts34">Shift</span><span class="rvts22"> + щелчок левой кнопкой, или просто щелчок правой кнопкой мыши по миникарте навигация Курсором Проигрывателя. Далее можно перетаскивать Курсор Проигрывателя, не отпуская правую кнопку.</span></li>
</ul>
<p class="rvps10"><a name="VirtualJoypad"></a>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Виртуальный Джойстик</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Альтернативный способ ввода инпута. Очень похож на изменение инпута щелчками по Заголовку Piano Roll, однако более удобен и нагляден.</span></p>
<p class="rvps10"><span class="rvts22">Альтернативный способ ввода инпута. Очень похож на изменение инпута щелчками по Заголовку Piano Roll, однако более нагляден и интуитивен.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">Виртуальный Джойстик представляет собой всплывающее немодальное окно с изменяемыми размерами. Содержимое окна автоматически масштабируется при изменении размеров окна.</span></li>
<li class="rvps10"><span class="rvts22">Окно Виртуального Джойстика появляется под курсором мыши при щелчке правой кнопкой в Piano Roll по выделенному Вводу или Вводу под Курсором Проигрывателя. В настройках пользователь может отключить появление Виртуального Джойстика под курсором при правом щелчке. Тогда можно оставить это окно в удобном месте рабочего стола и при необходимости перемещать курсор мыши то к нему, то обратно к Piano Roll.</span></li>
<li class="rvps10"><span class="rvts22">По цвету рамки окна можно определить, отображает ли Виртуальный Джойстик состояние Ввода в Выделении (синяя рамка) или под Курсором Проигрывателя (голубая рамка).</span></li>
<li class="rvps10"><span class="rvts22">При уведении курсора мыши за пределы окна Виртуального Джойстика это окно автоматически скрывается (если установлена настройка "Hide on mouse leave") либо остаётся на месте.</span></li>
<li class="rvps10"><span class="rvts22">При нажатии левой кнопкой мыши по неактивным областям начинается перетаскивание окна.</span></li>
<li class="rvps10"><span class="rvts22">По цвету фона окна можно определить, отображает ли Виртуальный Джойстик состояние Ввода в Выделении (синий фон) или под Курсором Проигрывателя (голубой фон).</span></li>
<li class="rvps10"><span class="rvts22">При уведении курсора мыши за пределы окна Виртуального Джойстика это окно либо автоматически скрывается (если установлена настройка "Hide on mouse leave"), либо остаётся на месте.</span></li>
<li class="rvps10"><span class="rvts22">При нажатии левой кнопкой мыши над неактивными областями начинается перетаскивание окна.</span></li>
<li class="rvps10"><span class="rvts22">При нажатии правой кнопкой мыши в любом месте окна окно скрывается.</span></li>
<li class="rvps10"><span class="rvts22">В окне расположены управляющие элементы кнопки, соответствующие кнопкам реального джойстика эмулируемой приставки. Расположение кнопок соответствует реальному прототипу. По внешнему виду кнопок можно определить, являются ли соответствующая кнопка в Выделении нажатой, отпущенной или частично нажатой (когда выделено более одного кадра).</span></li>
<li class="rvps10"><span class="rvts22">Содержимое окна автоматически обновляется при каждом внешнем изменении Ввода.</span></li>
<li class="rvps10"><span class="rvts22">Виртуальный Джойстик отражает состояние только текущего джойстика (выбранного радиокнопкой в разделе Recorder).</span></li>
<li class="rvps10"><span class="rvts22">В окне расположены управляющие элементы кнопки, соответствующие кнопкам реального джойстика эмулируемой приставки. Расположение кнопок соответствует реальному прототипу. По внешнему виду кнопок можно определить, являются ли соответствующая кнопка в Выделении нажатой, отпущенной или частично нажатой (это когда выделено более одного кадра).</span></li>
<li class="rvps10"><span class="rvts22">Содержимое окна автоматически обновляется при каждом изменении Ввода, а также при изменении Выделения, если Виртуальный Джойстик показывает Ввод в Выделении.</span></li>
<li class="rvps10"><span class="rvts22">Виртуальный Джойстик отражает состояние только одного джойстика текущего джойстика, выбранного радиокнопкой в разделе Recorder.</span></li>
<li class="rvps10"><span class="rvts22">При щелчке по кнопке происходит изменение Ввода текущего джойстика. Нажатая кнопка становится отпущенной, а отпущенная или частично нажатая становится нажатой. Соответственно меняется Ввод во всех выделенных кадрах или на кадре Курсора Проигрывателя.</span></li>
<li class="rvps10"><span class="rvts22">В дополнение к кнопкам Ввода в окне Виртуального Джойстика можно разместить несколько кнопок-слотов для хранения макросов. Щелчок по кнопке Макроса будет аналогичен нескольким щелчкам по разным кнопкам Виртуального Джойстика. Это позволит ещё быстрее менять Ввод в Выделении, например, вместо трёх щелчков по кнопкам </span><span class="rvts32">Вверх</span><span class="rvts22">, </span><span class="rvts32">Вправо</span><span class="rvts22"> и </span><span class="rvts32">B</span><span class="rvts22"> можно будет сделать один щелчок по </span><span class="rvts74">Макросу1</span><span class="rvts22">.</span></li>
<li class="rvps10"><span class="rvts22">В дополнение к нормальным кнопкам Ввода в окне Виртуального Джойстика можно разместить несколько макро-кнопок. Щелчок по кнопке Макроса будет аналогичен нескольким щелчкам по нормальным кнопкам. Это позволит ещё быстрее менять Ввод в Выделении, например, вместо трёх щелчков по кнопкам </span><span class="rvts32">Вверх</span><span class="rvts22">, </span><span class="rvts32">Вправо</span><span class="rvts22"> и </span><span class="rvts32">B</span><span class="rvts22"> можно будет сделать один щелчок по </span><span class="rvts74">Макросу1</span><span class="rvts22">.</span></li>
<li class="rvps10"><span class="rvts22">Если перед щелчком по кнопке Виртуального Джойстика или кнопке макроса зажать клавишу </span><span class="rvts34">Alt</span><span class="rvts22">, будет установлен Ввод по шаблону.</span></li>
<li class="rvps10"><span class="rvts22">После реализации Виртуального Джойстика можно изменить принцип действия щелчков по Заголовку Piano Roll. Теперь вместо изменения инпута щелчки по Заголовку будут выделять соответствующие столбцы Piano Roll.</span></li>
</ul>
@ -495,21 +502,21 @@
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Усовершенствование Выделения</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Архитектура TAS Editor 1.0 не рассчитана на выделение столбцов Piano Roll, однако в некоторых ситуациях это может быть необходимо при ТАСинге. Например, для очистки Ввода первого джойстика без очистки Ввода второго джойстика. Либо для перемещения Ввода одной/двух кнопок без смещения остальных внопок.</span></p>
<p class="rvps10"><span class="rvts22">Архитектура TAS Editor 1.0 не рассчитана на выделение столбцов Piano Roll, однако в некоторых ситуациях это может быть полезно при ТАСинге. Например, для очистки Ввода первого джойстика без очистки Ввода второго джойстика. Либо для перемещения Ввода одной кнопки без смещения остальных внопок.</span></p>
<p class="rvps10"><span class="rvts22">Кроме того, необходимо усовершенствовать процесс рисования Выделения, чтобы пользователь мог видеть цвет строк Piano Roll под полупрозрачным Выделением.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">Выделение столбцов производится аналогично выделению строк при щелчке левой кнопкой мыши по Заголовку Piano Roll соответствующий столбец становится выделенным, а все остальные столбцы перестают выть выделенными. Если перед щелчком зажать клавишу </span><span class="rvts34">Ctrl</span><span class="rvts22">, выделение остальных столбцов не изменится. Если зажать </span><span class="rvts34">Shift</span><span class="rvts22">, будет выделен регион столбцов от места предыдущего щелчка. Если зажать </span><span class="rvts34">Alt</span><span class="rvts22">, выделится регион по шаблону. После щелчка можно не отпускать левую кнопку и растягивать Выделение по горизонтали.</span></li>
<li class="rvps10"><span class="rvts22">Выделение столбцов производится аналогично выделению строк при щелчке левой кнопкой мыши по Заголовку Piano Roll соответствующий столбец становится выделенным, а все остальные столбцы перестают выть выделенными. Если перед щелчком зажать клавишу </span><span class="rvts34">Ctrl</span><span class="rvts22">, выделение остальных столбцов не исчезнет. Если зажать </span><span class="rvts34">Shift</span><span class="rvts22">, будет выделен регион столбцов от места предыдущего щелчка. Если зажать </span><span class="rvts34">Alt</span><span class="rvts22">, выделится регион по шаблону. После щелчка можно не отпускать левую кнопку и растягивать Выделение по горизонтали.</span></li>
<li class="rvps10"><span class="rvts22">Выделять можно только столбцы Ввода. Маркеры же зависят от настройки "Bind markers to Input".</span></li>
<li class="rvps10"><span class="rvts22">Выделенные столбцы отмечаются в Заголовке синим фоном в соответствующих ячейках.</span></li>
<li class="rvps10"><span class="rvts22">Отсутствие выделенных столбцов равносильно состоянию "выделены все столбцы".</span></li>
<li class="rvps10"><span class="rvts22">При рисовании строк Выделения ячейки Ввода из невыделенных столбцов рисуются с альфой ~0.4, в то время как ячейки из выделенных столбцов имеют альфу ~0.7.</span></li>
<li class="rvps10"><span class="rvts22">При отображении строк Выделения ячейки Ввода из невыделенных столбцов рисуются с альфой ~0.4, в то время как ячейки из выделенных столбцов имеют альфу ~0.7.</span></li>
<li class="rvps10"><span class="rvts22">В колонке с номерами кадров выделенные строки имеют альфу ~0.4, когда Маркеры отвязаны, и ~0.7, когда Маркеры привязаны.</span></li>
<li class="rvps10"><span class="rvts22">В разделе Splicer отображается не только количество выделенных строк (rows), но и количество выделенных столбцов (columns).</span></li>
<li class="rvps10"><span class="rvts22">При копировании в Буфер Обмена попадает только Ввод из выделенных столбцов, причём он попадает в виде прямоугольной таблицы, без пропусков между столбцами. Благодаря этому можно изменить выделенные столбцы и вставить Ввод одних кнопок на место других кнопок.</span></li>
<li class="rvps10"><span class="rvts22">При инициализации объекта SELECTION (то есть при запуске Тасэдитора или создании проекта) Выделение сбрасывается в состояние "отсутствует выделение столбцов".</span></li>
<li class="rvps10"><span class="rvts22">При изменении порядка следования столбцов или скрытии/раскрытии столбцоа Выделение сбрасывается в состояние "отсутствует выделение столбцов".</span></li>
<li class="rvps10"><span class="rvts22">При Записи Ввод фильтруется в соответствии с выделением столбцов. Невыделенные столбцы не будут изменяться, даже если пользователь записывает другое состояние кнопки этого столбца.</span></li>
<li class="rvps10"><span class="rvts22">При инициализации объекта SELECTION (то есть при запуске Тасэдитора или создании проекта) Выделение сбрасывается в состояние "отсутствует выделение столбцов".</span></li>
<li class="rvps10"><span class="rvts22">Выделение столбцов также сохраняется в файле проекта.</span></li>
<li class="rvps10"><span class="rvts22">На Историю Выделений это нововведение никак не влияет. Изменение выделения столбцов не сохраняется в Истории Выделений, так как навигация по истории изменения выделения столбцов не требуется.</span></li>
</ul>
@ -520,14 +527,14 @@
<p class="rvps10"><span class="rvts22">В TAS Editor 1.0 столбцы Piano Roll имеют фиксированную ширину. Количество и порядок следования столбцов также фиксированы. Для команд приставки (сброс, вставка диска и т.д.) отдельные столбцы не отводятся, так как эти команды используются крайне редко. Однако при портировании Тасэдитора на другие эмуляторы количество столбцов будет возрастать (например, у PSX нужно отображать столбцы для 14 кнопок), необходимо предоставить пользователю возможность настраивать их.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">Так как подобная настройка обычно производится только один раз при первом запуске программы, она не обязательно должна осуществляться средствами Piano Roll, можно и в отдельном окне, вызываемом из Config.</span></li>
<li class="rvps10"><span class="rvts22">Так как подобная настройка обычно производится только один раз при первом запуске программы, она не обязательно должна осуществляться средствами Piano Roll, можно и в отдельном окне, вызываемом из меню "Config".</span></li>
<li class="rvps10"><span class="rvts22">Возможность отображать любые колонки Ввода, в том числе колонки команд.</span></li>
<li class="rvps10"><span class="rvts22">Возможность прятать любые колонки. Однако от каждого джойстика должна оставаться отображаемой как минимум одна колонка (но если пользователь настроил проект на режим 1P, то колонки второго джойстика в любом случае не будут отображаться).</span></li>
<li class="rvps10"><span class="rvts22">Возможность изменять порядок следования колонок.</span></li>
<li class="rvps10"><span class="rvts22">При копировании в Буфер Обмена копируются только абстрактные значения вида "кнопка нажата" / "не нажата". Поэтому если после копирования изменить порядок следования столбцов и вставить Ввод из Буфера Обмена, реальный Ввод мувика изменится (кнопки изменённых столбцов поменяются местами).</span></li>
<li class="rvps10"><span class="rvts22">Возможность изменять ширину колонок.</span></li>
<li class="rvps10"><span class="rvts22">При копировании в Буфер Обмена копируются только абстрактные значения вида true/false. Поэтому если после копирования изменить порядок следования столбцов и вставить Ввод из Буфера Обмена на то же место, реальный Ввод мувика может измениться (кнопки изменённых столбцов поменяются местами).</span></li>
<li class="rvps10"><span class="rvts22">Возможность изменять ширину колонок. Для платформ с множеством кнопок (например, ПК) полезно уменьшить ширину колонок до нескольких пикселей, чтобы уместить много колонок на экране.</span></li>
<li class="rvps10"><span class="rvts22">Возможность одним щелчком восстановить значения по умолчанию (рекомендуемые автором).</span></li>
<li class="rvps10"><span class="rvts22">Все настройки сохраняются при выходе.</span></li>
<li class="rvps10"><span class="rvts22">Все настройки сохраняются в config.</span></li>
</ul>
<p class="rvps10"><a name="RerecordsHeatmap"></a>
<span class="rvts22"><br/></span></p>
@ -536,7 +543,7 @@
<p class="rvps10"><span class="rvts22">Хранит и отображает статистику "изменений после просмотра" (перезаписей). Может быть полезна для выявления сложных мест в мувике.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">Хранит массив int, по одному элементу на каждый кадр мувика (в том числе за пределами инпута). Значение элемента соответствует количеству усечений Гринзоны до данного кадра.</span></li>
<li class="rvps10"><span class="rvts22">Хранит массив int, по одному элементу на каждый кадр мувика (в том числе за пределами Ввода). Значение элемента соответствует количеству усечений Гринзоны на данном кадре.</span></li>
<li class="rvps10"><span class="rvts22">Сохраняет и загружает свои данные из файла проекта.</span></li>
<li class="rvps10"><span class="rvts22">В качестве холста следует использовать холст Миникарты. При ТАСинге не имеет смысла постоянно видеть Теплокарту, пользователь может изредка (например, в конце каждого дня) переключать Миникарту в режим отображения Теплокарты и оценивать проделанный труд.</span></li>
<li class="rvps10"><span class="rvts22">Так как эта фича несёт не столько рабочую, сколько эстетическую функцию, необходимо продумать алгоритм рисования телокарты, чтобы было не только информативно, но и красиво.</span></li>
@ -546,7 +553,7 @@
<p class="rvps10"><span class="rvts23">Прочие мелочи</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">Отдельный Журнал Истории для операций </span><a class="rvts28" href="Operations.html#Bookmark">Bookmark Set</a><span class="rvts22"> (</span><span class="rvts34">Alt + Z</span><span class="rvts22"> и </span><span class="rvts34">Alt + Y</span><span class="rvts22">), для отката изменений Ввода/Маркеров без отката изменений Закладок.</span></li>
<li class="rvps10"><span class="rvts22">Отдельный Журнал Истории для операций </span><a class="rvts28" href="Operations.html#Bookmark">Bookmark Set</a><span class="rvts22"> (</span><span class="rvts34">Alt + Z</span><span class="rvts22"> и </span><span class="rvts34">Alt + Y</span><span class="rvts22">), для отката изменений Ввода/Маркеров без отката изменений Закладок, и наоборот.</span></li>
<li class="rvps10"><span class="rvts22">Возможность работать с </span><span class="rvts22">мувиками, начинающимися с сэйва.</span></li>
<li class="rvps10"><span class="rvts22">Возможность работать с несколькими эмулируемыми играми одновременно (для Multi-TAS-проектов).</span></li>
<li class="rvps10"><span class="rvts22">Усовершенствование Lua API.</span></li>
@ -562,7 +569,7 @@
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">Продумать управляющие элементы для отображения и изменения аналогового Ввода в Piano Roll. Виртуальный Джойстик отчасти решает эту проблемы, однако должна быть возможность быстро и легко рисовать аналоговый Ввод мышкой. Например, растягивать на много кадров однократно установленное значение наклона стика, запоминать значение только что очищенной ячейки и предлагать его при рисовании. В ячейке отображается не один символ, а число от -1.0 до +1.0. При двойном щелчке по клетке можно набрать с клавиатуры точное значение этого числа. С зажатым </span><span class="rvts34">Ctrl</span><span class="rvts22"> можно растягивать значение ячейки левой кнопкой мыши вправо/влево или вверх/вниз. В столбце отображается значение наклона только по одной координатной оси (таким образом, для аналогового стика требуется две колонки Piano Roll).</span></li>
<li class="rvps10"><span class="rvts22">В Виртуальном Джойстике должна быть возможность рисовать огибающую для региона кадров, а не только устанавливать одинаковое значение для всех выделенных кадров. Также необходимо переработать формат Шаблонов, чтобы они могли представлять последовательности значений уровня, в том числе с относительными значениями (например, возрастание по параболе, где начальное и конечное значение берётся из начального и конечного кадра выделенного региона).</span></li>
<li class="rvps10"><span class="rvts22">Крайне желателен переход на 64-разрядную платформу, так как объёмы Гринзоны значительно возрастут при хранении сэйвов более продвинутых приставок.</span></li>
<li class="rvps10"><span class="rvts22">Крайне желателен переход на 64-разрядную платформу, так как объёмы Гринзоны значительно возрастут при хранении сэйвов более продвинутых приставок, и 2GB оперативной памяти для Тасэдитора 2.0 будет недостаточно.</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>

View File

@ -63,7 +63,7 @@
<p class="rvps10"><span class="rvts22">Этот метод является дальнейшим развитием идей нелинейного метода ТАСинга.</span></p>
<p class="rvps10"><span class="rvts22">Во многих случаях ТАСеру требуется сразу видеть результат своих изменений </span><span class="rvts22">Ввод</span><span class="rvts22">а. В идеале он должен осознавать все последствия своего решения прямо в момент принятия решения. Но в реальности драгоценные мгновенья уходят на введение своего решения в компьютер и последующую навигацию Курсором Проигрывателя до конца участка.</span></p>
<p class="rvps10"><span class="rvts22">В таких случаях вы можете переложить навигацию Курсором Проигрывателя на Тасэдитор и сосредоточить внимание только на редактировании. Тасэдитор будет мгновенно реагировать на каждое изменение </span><span class="rvts22">Ввод</span><span class="rvts22">а и отображать новый результат, возвращая </span><span class="rvts22">Курсор Проигрывателя в конец текущего участка.</span></p>
<p class="rvps10"><span class="rvts22">Благодаря тому, что вы ощущаете воздействие каждого щелчка на игровой процесс, достигается высочайший уровень взаимосвязи между ТАСером и игрой. При таком тесном взаимодействии не только ТАСер управляет игрой, но и игра направляет действия ТАСера в нужное русло. </span><span class="rvts22">Конечно, такой высокий уровень взаимозависимости далеко не всегда полезен, ведь это суживает ваш спектр мыслей, не позволяя взглянуть на игру свысока и применить к ней логику из других игр или других сфер жизни.</span></p>
<p class="rvps10"><span class="rvts22">Благодаря тому, что вы ощущаете воздействие каждого щелчка на игровой процесс, достигается высочайший уровень взаимосвязи между ТАСером и игрой. При таком тесном взаимодействии не только ТАСер управляет игрой, но и игра направляет действия ТАСера в нужное русло. </span><span class="rvts22">Конечно, такой высокий уровень взаимозависимости далеко не всегда полезен, ведь это сужает ваш спектр мыслей, не позволяя взглянуть на игру свысока и применить к ней логику из других игр или других сфер жизни.</span></p>
<p class="rvps10"><span class="rvts22">Однако, когда текущий участок несложен, и все факторы оптимальности уже известны (и требуется только найти их идеальное сочетание), полезно отвлечься от всего остального и посвятить всё внимание перебору вариантов. Тогда вы успеете проверить гораздо больше подходов, до того как вам надоест текущий участок.</span></p>
<p class="rvps10"><span class="rvts22">Режим Записи и галочка "Follow cursor" должны быть выключены. Галочка "Auto-restore last position" должна быть включена. Галочка "Turbo seek" может быть либо включена, либо выключена.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>

View File

@ -64,7 +64,7 @@
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts37">Геймеры</span><span class="rvts22"> ошибочно считают, что для создания ТАСа достаточно просто один раз пройти игру, пользуясь сэйвами только в тех случаях, когда совершаются фатальные ошибки, приводящие к невозможности пройти текущий участок (например, смерть персонажа).</span></li>
<li class="rvps10"><span class="rvts37">ТАСеры-новички</span><span class="rvts22"> понимают, что для красивого ТАСа нужно исправлять </span><span class="rvts26">все</span><span class="rvts22"> замеченные ошибки (например, такие мелочи, как спотыкание о порог). Они тоже проходят каждый участок лишь один раз, но затрачивают на прохождение больше времени, чем простые игроки, так как сохраняются и загружают сэйвы гораздо чаще. При ТАСинге простых игр этого может быть достаточно.</span></li>
<li class="rvps10"><span class="rvts37">Опытные ТАСеры</span><span class="rvts22"> знают, что для совершенного ТАСа не достаточно исправления всех замеченных ошибок. Нужно также исправлять незамеченные ошибки. Учитывать неизвестные факторы. Подойти к задаче с неочевидной стороны. Для всего этого они проходят один и тот же участок несколько раз, исправляя все замеченные ошибки и пытаясь как-то не совершить незаметные.</span></li>
<li class="rvps10"><span class="rvts37">Опытные ТАСеры</span><span class="rvts22"> знают, что для совершенного ТАСа не достаточно исправления всех замеченных ошибок. Нужно также исправлять незамеченные ошибки. Учитывать неизвестные факторы. Подходить к задаче с неочевидной стороны. Для всего этого они проходят один и тот же участок несколько раз, исправляя все замеченные ошибки и пытаясь как-то не совершить незаметные.</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Нелегко убедить себя тратить время на альтернативные способы прохождения участка, когда он уже пройден, и в нём уже исправлены все явные ошибки. После достижения текущей внутриигровой цели хочется сразу ставить перед собой следующую цель в рамках игры. Однако следует помнить, что цель ТАСера сильно отличается от целей игрока. Поэтому нужно абстрагироваться от правил игры и не отступать от участка, пока не выполнена реальная цель, а не просто мелкая цель игрока.</span></p>

View File

@ -66,11 +66,11 @@
<p class="rvps10"><span class="rvts22">Без такой структуризации эффективный и комфортный ТАСинг невозможен. Слишком много факторов влияют на конечный результат игры, и какие-то из этих факторов дополняются или противоречат друг другу. Памяти человека не хватает, чтобы удержать в голове и просчитать все взаимосвязи игровых факторов на большом отрезке прохождения. Так что во время длительных игровых сессий у ТАСера, как и у обычного игрока, возникает естественный соблазн взять первые попавшиеся наблюдения в качестве основы для формирования решений. Обычному игроку такая беспечность сходит с рук, но ТАСер в итоге получит далёкое от идеала прохождение.</span></p>
<p class="rvps10"><span class="rvts22">Поэтому в реальном ТАСинге участки должны быть маленькими. Намного меньше, чем размеры одного уровня типовой видеоигры. Весь процесс ТАСинга можно представить таким образом: человек смотрит запись своего незавершённого прохождения игры, намечает небольшой кусочек мувика и бросает все силы на его улучшение, затем намечает другой кусочек, и так до конца игры.</span></p>
<p class="rvps10"><span class="rvts22">Конечно, это неполная картина, ведь помимо непосредственно обработки мувика ТАСеры ещё занимаются исследованиями и экспериментами с игрой (для выявления скрытых факторов), и многим другим. Но это уже выходит за рамки данного Курса.</span></p>
<p class="rvps10"><span class="rvts22">Умение выбирать адекватные участки приходит с опытом. Многие ТАСеры даже не задумываются, чем они руководствуются, когда спонтанно акцентируют своё внимание на некоем участке игры, подсознательно ограничивая начало и конец текущего этапа работ. Некоторые полагают, что просто записывают мувик кадр за кадром подряд, но если посмотреть на это со стороны, можно заметить, что посторяющиеся перезаписи происходят в рамках окна размером в 20-200 кадров, и это окно передвигается вперёд по мувику не плавно, а прыжками (конец предыдущего участка зачастую становится началом следующего). Можете посмотреть видеозаписи ТАСинга вживую, и вы заметите определённую закономерность в обращении с сэйвами.</span></p>
<p class="rvps10"><span class="rvts22">Умение выбирать адекватные участки приходит с опытом. Многие ТАСеры даже не задумываются, чем они руководствуются, когда спонтанно акцентируют своё внимание на некоем участке игры, подсознательно ограничивая начало и конец текущего этапа работ. Некоторые полагают, что просто записывают мувик кадр за кадром подряд, но если посмотреть на это со стороны, можно заметить, что повторяющиеся перезаписи происходят в рамках окна размером в 20-200 кадров, и это окно передвигается вперёд по мувику не плавно, а прыжками (конец предыдущего участка зачастую становится началом следующего). Можете посмотреть видеозаписи ТАСинга вживую, и вы заметите определённую закономерность в обращении с сэйвами.</span></p>
<p class="rvps10"><span class="rvts22">Сейчас мы попробуем проанализировать это поведение, чтобы научиться осмысленнно определять границы текущего участка. А потом уже практика ТАСинга научит вас делать это машинально.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Правильно выбранный участок (подзадача) должен давать ТАСеру чёткую непротиворечивую </span><span class="rvts22">цель</span><span class="rvts22"> и простые </span><span class="rvts22">средства</span><span class="rvts22"> для её достижения.</span></p>
<p class="rvps10"><span class="rvts26">Цель</span><span class="rvts22"> прохождения участка это обычно достижение определённого игрового события. Например, целью прохождения всей игры является появление на экране надписи "THE END". Целью прохождения одного уровня может быть событие "увеличилось значение счётчика уровней в оперативной памяти приставки" или же просто "потемнел экран в конце текущего уровня". А целью небольшого участка может быть даже просто событие типа "персонаж благополучно приземлился по ту сторону ямы". Эти промежуточные цели определяются контекстом.</span></p>
<p class="rvps10"><span class="rvts26">Цель</span><span class="rvts22"> прохождения участка это обычно достижение определённого игрового события. Например, целью прохождения всей игры является появление на экране надписи "THE END". Целью прохождения одного уровня может быть событие "увеличилось значение счётчика уровней в оперативной памяти приставки" или же "потемнел экран в конце текущего уровня". А целью небольшого участка может быть даже просто событие типа "персонаж благополучно приземлился по ту сторону ямы". Эти промежуточные цели определяются контекстом.</span></p>
<p class="rvps10"><span class="rvts22">Исходя из цели ТАСер формулирует в уме </span><span class="rvts26">критерий оптимальности</span><span class="rvts22"> правило, по которому он сможет сравнивать любые два &nbsp;прохождения текущего участка игры. При ТАСинге недостаточно просто достигнуть цели, нужно перепробовать множество разных подходов к её достижению и в итоге выбрать из них самый лучший. Например, в спидране лучшим подходом к прохождению участка обычно считается тот, в котором целевое событие наступает раньше. То есть, если в первом подходе к прохождению участка целевое событие достигается на кадре 350, а во втором на кадре 340, то второй подход лучше первого, и в финальном мувике должен остаться именно он.</span></p>
<p class="rvps10"><span class="rvts26">Средств</span><span class="rvts22"> достижения целевого события у игрока очень много. Теоретически, любой аспект геймплея (в том числе не учтённый разработчиками) может каким-то образом помочь или помешать прогрессу. Поэтому, чтобы не запутаться в этом смутном многообразии возможностей, надо рассматривать все игровые аспекты в виде </span><span class="rvts22">факторов оптимальности</span><span class="rvts22">.</span></p>
<p class="rvps10"><img align="right" alt="" style="padding : 6px;" src="lib/smb-zigzag.png"/></p>
@ -86,8 +86,8 @@
<tr valign="top">
<td valign="top" style="border-color: #000000; border-style: solid; height: 160px;"><p class="rvps10"><span class="rvts22">Возьмём пример со слишком большим участком. В спидране Super Mario Bros требуется максимально быстро добраться от начала до конца World 1-1, то есть нужно максимизировать координату X персонажа, который перемещается слева направо. Допустим, в начале уровня координата Марио равна нулю, а в конце уровня равна тысяче. С помощью кнопок джойстика можно по-разному влиять на эту координату.</span></p>
<p class="rvps10"><span class="rvts22">Если в качестве оптимизируемого участка выбрать весь уровень от момента с </span><span class="rvts37">X = 0</span><span class="rvts22"> до события </span><span class="rvts37">X = 1000</span><span class="rvts22">, то у нас есть однозначный критерий оптимальности (самым лучшим подходом будет мувик с минимальным значением счётчика кадров на момент </span><span class="rvts37">X &gt;= 1000</span><span class="rvts22">), но нет однозначных факторов. Как именно нужно нажимать кнопки, чтобы получить </span><span class="rvts37">X = 1000</span><span class="rvts22"> за наименьшее количество кадров? &nbsp;Можно применить логику и интуицию обычного игрока. При нажатии кнопки </span><span class="rvts32">R</span><span class="rvts22"> координата X обычно возрастает, а при нажатии </span><span class="rvts32">L</span><span class="rvts22"> убывает. Самое очевидное решение зажать кнопку </span><span class="rvts32">R</span><span class="rvts22"> и узнать, через сколько кадров значение X дорастёт до тысячи. При тестировании такого подхода в эмуляторе оказывается, что Марио упирается в препятствия, и координата X не растёт, хотя кнопка </span><span class="rvts32">R</span><span class="rvts22"> зажата. Тем самым обнаруживается новый фактор необходимость перепрыгивать препятствия и ямы. В результате применения кнопки </span><span class="rvts32">A</span><span class="rvts22"> Марио в итоге достигает момента с </span><span class="rvts37">X = 1000</span><span class="rvts22">, при этом по критерию оптимальности можно отсеять все подходы, где нажатия кнопки </span><span class="rvts32">A</span><span class="rvts22"> были несвоевременными (например, там, где Марио спотыкался о края труб, счётчик кадров в конце участка был больше).</span></p>
<p class="rvps10"><span class="rvts22">Тут игрок (точнее, ТАСер, застрявший в образе мышления игрока) может посчитать, что учёл все факторы оптимальности, и что участок пройден идеально. Однако это не так. В Super Mario Bros непростой физический движок. На координату X влияет текущее значение скорости, а на значение скорости влияет ускорение. На ускорение влияет кнопка </span><span class="rvts32">B</span><span class="rvts22">, буксование, направление и положение Марио в воздухе или на земле. Также существуют трубы-телепорты и полезные баги игры, вроде "flagpole glitch" и т.д. Много всего. А в рабочей памяти человека может одновременно храниться лишь </span><a class="rvts28" href="http://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D1%87%D0%B8%D1%81%D0%BB%D0%BE_%D1%81%D0%B5%D0%BC%D1%8C_%D0%BF%D0%BB%D1%8E%D1%81-%D0%BC%D0%B8%D0%BD%D1%83%D1%81_%D0%B4%D0%B2%D0%B0" target="_blank">около 7 объектов</a><span class="rvts22">, поэтому часть факторов непременно ускользает от вас во время редактирования </span><span class="rvts22">Ввода на большом участке</span><span class="rvts22">. Необходимо уменьшить участок до масштаба, при котором факторы проявляются по отдельности, или хотя бы небольшой группой.</span></p>
<p class="rvps10"><span class="rvts22">Например, если сосредоточиться на участке от </span><span class="rvts37">X = 0</span><span class="rvts22"> до </span><span class="rvts37">X = 100</span><span class="rvts22">, критерий оптимальности останется тем же. Зато з</span><span class="rvts22">десь уже становится заметно, что в первой половине участка Марио бежит медленнее, чем во второй, причём во второй половине он бежит всё время с одинаковой скоростью, которую можно принять за максимальную. Таким образом проявляется фактор ускорения, ТАСер добавляет эту ячейку RAM в просмотрщик памяти и начинает думать, как бы на повлиять на ускорение. Благодаря экспериментам с поворотами и прыжками он может обнаружить новые факторы. В результате по текущему критерию оптимальности к моменту с </span><span class="rvts37">X = 100</span><span class="rvts22"> быстрее приходит тот подход, где ТАСер в начале уровня создал сложную комбинацию из нажатий и отпусканий кнопок </span><span class="rvts32">R</span><span class="rvts22">, </span><span class="rvts32">L</span><span class="rvts22">, </span><span class="rvts32">B</span><span class="rvts22"> и </span><span class="rvts32">A</span><span class="rvts22">, а не просто зажал </span><span class="rvts32">R</span><span class="rvts22"> и </span><span class="rvts32">B</span><span class="rvts22">. И даже если новое прохождение участка быстрее старого всего на несколько кадров, оно намного ближе к совершенству.</span></p>
<p class="rvps10"><span class="rvts22">Тут игрок (точнее, ТАСер, застрявший в образе мышления игрока) может посчитать, что учёл все факторы оптимальности, и что участок пройден идеально. Однако это не так. В Super Mario Bros непростой физический движок. На координату X влияет текущее значение скорости, а на значение скорости влияет ускорение. На ускорение влияет кнопка </span><span class="rvts32">B</span><span class="rvts22">, буксование, направление и положение Марио в воздухе или на земле. Также существуют трубы-телепорты и полезные баги игры, вроде "flagpole glitch" и т.д. Много всего. А согласно некоторым исследованиям, в рабочей памяти человека может одновременно храниться лишь </span><a class="rvts28" href="http://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D1%87%D0%B8%D1%81%D0%BB%D0%BE_%D1%81%D0%B5%D0%BC%D1%8C_%D0%BF%D0%BB%D1%8E%D1%81-%D0%BC%D0%B8%D0%BD%D1%83%D1%81_%D0%B4%D0%B2%D0%B0" target="_blank">около 7 объектов</a><span class="rvts22">, поэтому часть факторов непременно ускользает от вас во время редактирования </span><span class="rvts22">Ввода на большом участке</span><span class="rvts22">. Необходимо уменьшить участок до масштаба, при котором факторы проявляются по отдельности, или хотя бы небольшой группой.</span></p>
<p class="rvps10"><span class="rvts22">Например, если сосредоточиться на участке от </span><span class="rvts37">X = 0</span><span class="rvts22"> до </span><span class="rvts37">X = 100</span><span class="rvts22">, критерий оптимальности останется тем же. Зато з</span><span class="rvts22">десь уже становится заметно, что в первой половине участка Марио бежит медленнее, чем во второй, причём во второй половине он бежит всё время с одинаковой скоростью, которую можно принять за максимальную. Таким образом проявляется фактор ускорения, ТАСер добавляет эту ячейку RAM в просмотрщик памяти и начинает думать, как бы на повлиять на ускорение. Благодаря экспериментам с поворотами и прыжками он может обнаружить новые факторы. В результате, по текущему критерию оптимальности к моменту с </span><span class="rvts37">X = 100</span><span class="rvts22"> быстрее приходит тот подход, где ТАСер в начале уровня создал сложную комбинацию из нажатий и отпусканий кнопок </span><span class="rvts32">R</span><span class="rvts22">, </span><span class="rvts32">L</span><span class="rvts22">, </span><span class="rvts32">B</span><span class="rvts22"> и </span><span class="rvts32">A</span><span class="rvts22">, а не просто зажал </span><span class="rvts32">R</span><span class="rvts22"> и </span><span class="rvts32">B</span><span class="rvts22">. И даже если новое прохождение участка быстрее старого всего на несколько кадров, оно намного ближе к совершенству.</span></p>
</td>
</tr>
</table>

View File

@ -60,7 +60,7 @@
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><img align="right" alt="" style="padding : 6px;" src="lib/toolbox-method1.png"/></p>
<p class="rvps10"><span class="rvts22">Этот метод по форме похож на простое прохождение видеоигр, однако имеет совершенно иное содержание и требует иной образ мышления.</span></p>
<p class="rvps10"><span class="rvts22">Этот метод по форме похож на простое прохождение видеоигр, однако имеет совершенно иное содержание и требует иного образа мышления.</span></p>
<p class="rvps10"><span class="rvts22">Редактирование Ввода здесь осуществляется с помощью записи нового Ввода поверх имеющегося.</span></p>
<p class="rvps10"><span class="rvts22">Для переключения между просмотром и редактированием мувика необходимо включать и выключать режим Записи (клавиша </span><span class="rvts27">Q</span><span class="rvts22"> по умолчанию). Рекомендуется установить галочку "Follow cursor", чтобы наблюдать записываемый </span><span class="rvts22">Ввод</span><span class="rvts22"> в Piano Roll.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
@ -95,7 +95,7 @@
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts27">F10</span><span class="rvts22"> указывает на начало текущего уровня игры, чтобы просматривать недавние участки без просмотра всего мувика. </span><span class="rvts37">Используется для навигации.</span></li>
<li class="rvps10"><span class="rvts27">F9</span><span class="rvts22"> отвечает за хранение наилучшего результата на текущем участке. </span><span class="rvts37">Используется для хранения.</span></li>
<li class="rvps10"><span class="rvts27">F2</span><span class="rvts22">-</span><span class="rvts27">F6</span><span class="rvts22"> используются для Закладок после каждого </span><span class="rvts31">сложно воспроизводимого действия в</span><span class="rvts22"> текущем походе к участку. Эти Закладки требуются быстрой навигации по текущему участку. Одна из них указывает на начало участка, а остальные используются по мере необходимости (могут быть вообще не использованы, если участок короткий и простой). Эти Закладки машинально создаются по мере успешной записи Ввода. </span><span class="rvts37">Используются для навигации.</span></li>
<li class="rvps10"><span class="rvts27">F2</span><span class="rvts22">-</span><span class="rvts27">F6</span><span class="rvts22"> используются для Закладок после каждого </span><span class="rvts31">сложно воспроизводимого действия в</span><span class="rvts22"> текущем походе к участку. Эти Закладки требуются для быстрой навигации по текущему участку. Одна из них указывает на начало участка, а остальные используются по мере необходимости (могут быть вообще не использованы, если участок короткий и простой). Эти Закладки машинально создаются по мере успешной записи Ввода. </span><span class="rvts37">Используются для навигации.</span></li>
<li class="rvps10"><span class="rvts27">F1</span><span class="rvts22"> хранит резервную копию мувика на последнем успешном кадре. В этот слот с параноидальной частотой сохраняется резервная копия рабочего мувика, чтобы из любой ситуации всегда можно было вернуться к последнему стабильному состоянию (например, после загрузок других Закладок, или после записи эксперимента). Так в традиционном методе реализуется простенький откат (undo). Иногда дополнительно к </span><span class="rvts27">F1</span><span class="rvts22"> используется </span><span class="rvts27">F2</span><span class="rvts22"> для обеспечения двух уровней отката, но это усложняет логику резервного сохранения (требуется чередовать слоты), и обычно одного слота вполне достаточно. </span><span class="rvts37">Используется для хранения.</span></li>
<li class="rvps10"><span class="rvts27">F7</span><span class="rvts22">-</span><span class="rvts27">F8</span><span class="rvts22"> могут хранить результаты альтернативных стратегий, которые не лучше, чем то, что хранится в </span><span class="rvts27">F9</span><span class="rvts22">, но всё же представляют интерес. В эти же слоты (либо в </span><span class="rvts27">F2</span><span class="rvts22">-</span><span class="rvts27">F6</span><span class="rvts22">) на шаге 6 временно сохраняется результат нового готового подхода, чтобы пристальнее сравнить его с лучшим результатом (быстро переключаясь между </span><span class="rvts27">F8</span><span class="rvts22"> и </span><span class="rvts27">F9</span><span class="rvts22">). </span><span class="rvts37">Используются для хранения.</span></li>
<li class="rvps10"><span class="rvts22">При создании улучшения чужого ТАСа слоты </span><span class="rvts27">F5</span><span class="rvts22">-</span><span class="rvts27">F7</span><span class="rvts22"> могут быть отведены для разных стадий старого мувика. Например, </span><span class="rvts27">F5</span><span class="rvts22"> отвечает за начало текущего уровня в чужом мувике, </span><span class="rvts27">F6</span><span class="rvts22"> за начало текущего участка в чужом мувике, </span><span class="rvts27">F7</span><span class="rvts22"> за конец участка в чужом мувике. </span><span class="rvts37">Используются для хранения и навигации по содержимому чужого мувика.</span></li>
@ -122,7 +122,7 @@
<p class="rvps10"><span class="rvts22">Минусы метода:</span></p>
<p class="rvps14"><span class="rvts52"> </span><span class="rvts22">Настойчивая игровая отдача провоцирует ТАСера отсекать некоторые нелогичные, но потенциально выигрышные подходы.</span></p>
<p class="rvps14"><span class="rvts52"></span><span class="rvts26"> </span><span class="rvts22">Медленная навигация может отвлечь от мысли и повысить утомляемость.</span></p>
<p class="rvps14"><span class="rvts52"></span><span class="rvts26"> </span><span class="rvts22">Так как количество Закладок ограничено, оазметка прошлых участков теряется при создании нового участка, так что требуется выписывать некоторые вещи в текстовый файл.</span></p>
<p class="rvps14"><span class="rvts52"></span><span class="rvts26"> </span><span class="rvts22">Так как количество Закладок ограничено, отметка прошлых участков теряется при создании нового участка, так что требуется выписывать некоторые вещи в текстовый файл.</span></p>
<p class="rvps14"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">Когда рекомендуется использовать: </span><span class="rvts22">никогда. Можно воспользоваться Записью при первом пробном прохождении участка (или всей игры), когда не важна точность. А в отшлифовке </span><span class="rvts22">Ввод</span><span class="rvts22">а этот метод значительно уступает остальным. </span><span class="rvts22">Тем не менее, имеет смысл освоить этот метод, так как инструменты для его применения есть во многих современных эмуляторах, а Тасэдитор пока есть только в FCEUX.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>

File diff suppressed because one or more lines are too long

View File

@ -59,45 +59,45 @@
<p><span class="rvts19">Ideas</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps10"><span class="rvts21">Тасэдитор объединяет множество экспериментальных идей в единую систему. Многие из этих идей были озвучены очень давно (см. темы на форуме в духе "</span><a class="rvts27" href="http://tasvideos.org/forum/viewtopic.php?t=4559" target="_blank">инструмент мечты</a><span class="rvts21">" и т.д.), но для их реализации в рамках единой непротиворечивой системы понадобилось немалое время.</span></p>
<p class="rvps10"><span class="rvts21">Основообразующей идеей Тасэдитора является интерфейс Piano Roll, позволяющий взаимодействовать с мувиком в интуитивно понятной форме. </span><span class="rvts21">Первые упоминания о необходимости создания инструмента для ТАСинга на основе Piano Roll звучали ещё в </span><a class="rvts27" href="http://tasvideos.org/forum/viewtopic.php?p=38496#38496" target="_blank">2005 году</a><span class="rvts21">, возможно, даже ранее. П</span><span class="rvts21">рототип под названием TASEdit был создан в 2008 году. Окончательное видение Тасэдитора сформировалось в сентябре 2011 года и дорабатывалось по ходу разработки вплоть до лета 2012. Помимо реализованных идей в</span><span class="rvts21"> это время было придумано множество перспективных, но второстепенных или сложно реализуемых идей, которые было решено отложить на будущее.</span></p>
<p class="rvps10"><span class="rvts21">Taseditor combines multiple experimental ideas into single system. Many of these ideas appeared long ago (see topics on the forum, like "</span><a class="rvts27" href="http://tasvideos.org/forum/viewtopic.php?t=4559" target="_blank">dream tool</a><span class="rvts21">", etc.), but it took a long time to implement them in terms of a consistent system.</span></p>
<p class="rvps10"><span class="rvts21">The underlying idea of Taseditor is the Piano Roll interface that allows user to interact with the movie in a very intuitive from. The first mention of the need for a Piano Roll-based TAS tool sounded back in </span><a class="rvts27" href="http://tasvideos.org/forum/viewtopic.php?p=38496#38496" target="_blank">2005</a><span class="rvts21">, perhaps even earlier. A prototype called TASEdit was made in 2008. The final vision of Taseditor was formed in September 2011 and was improved during the course of development until the summer of 2012. In addition to the ideas implemented at that time, many promising but minor or hard-to-implement ideas were invented and postponed for the future.</span></p>
<p class="rvps21"><span class="rvts21"><br/></span></p>
<div class="rvps21"><table width="700" border="1" cellpadding="0" cellspacing="0" style="border-color: #000000; border-style: solid;">
<tr valign="top">
<td style="border-color: #000000; border-style: solid; background-color: #0000ff;"><p class="rvps5"><a class="rvts77" href="Ideas.html#ImplementedIdeas">Реализовано в 1.0</a></p>
<td style="border-color: #000000; border-style: solid; background-color: #0000ff; width: 50%;"><p class="rvps5"><a class="rvts77" href="Ideas.html#ImplementedIdeas">Implemented in 1.0</a></p>
</td>
<td style="border-color: #000000; border-style: solid; background-color: #0000ff;"><p class="rvps5"><a class="rvts77" href="Ideas.html#PlannedIdeas">Запланировано на 2.0</a></p>
<td style="border-color: #000000; border-style: solid; background-color: #0000ff; width: 50%;"><p class="rvps5"><a class="rvts77" href="Ideas.html#PlannedIdeas">Planned for 2.0</a></p>
</td>
</tr>
<tr valign="top">
<td style="border-color: #000000; border-style: solid;"><p class="rvps18"><a class="rvts57" href="Ideas.html#PianoRoll">Piano Roll</a></p>
<p class="rvps18"><a class="rvts57" href="Ideas.html#Selection">Выделение</a></p>
<p class="rvps18"><a class="rvts57" href="Ideas.html#Markers">Маркеры</a></p>
<p class="rvps18"><a class="rvts57" href="Ideas.html#HotChanges">Горячие Правки</a></p>
<p class="rvps18"><a class="rvts57" href="Ideas.html#Greenzone">Гринзона</a></p>
<p class="rvps18"><a class="rvts57" href="Ideas.html#Playback">Проигрыватель</a></p>
<p class="rvps18"><a class="rvts57" href="Ideas.html#GreenArrow">Зелёная стрелка</a></p>
<p class="rvps18"><a class="rvts57" href="Ideas.html#AutoRestoring">Автовосстановление утраченной позиции</a></p>
<p class="rvps18"><a class="rvts57" href="Ideas.html#Recorder">Мультитрекинг-рекордер</a></p>
<p class="rvps18"><a class="rvts57" href="Ideas.html#Lua">Lua-автоматизация</a></p>
<p class="rvps18"><a class="rvts57" href="Ideas.html#BookmarksBranches">Закладки и ответвления</a></p>
<p class="rvps18"><a class="rvts57" href="Ideas.html#PopupWindows">Всплывающие окна</a></p>
<p class="rvps18"><a class="rvts57" href="Ideas.html#HistoryLog">Журнал Истории</a></p>
<p class="rvps18"><a class="rvts57" href="Ideas.html#RerecordsCounter">Счётчик перезаписей</a></p>
<p class="rvps18"><a class="rvts57" href="Ideas.html#Modifiers">Система клавиш-модификаторов</a></p>
<p class="rvps18"><a class="rvts57" href="Ideas.html#Patterns">Шаблоны</a></p>
<p class="rvps18"><a class="rvts57" href="Ideas.html#CrossingGaps">Пересечение промежутков</a></p>
<p class="rvps18"><a class="rvts57" href="Ideas.html#SaveCompact">Компактное сохранение</a></p>
<p class="rvps18"><a class="rvts57" href="Ideas.html#Autosave">Автосохранение</a></p>
<td style="border-color: #000000; border-style: solid; width: 50%;"><p class="rvps18"><a class="rvts57" href="Ideas.html#PianoRoll">Piano Roll</a></p>
<p class="rvps18"><a class="rvts57" href="Ideas.html#Selection">Selection</a></p>
<p class="rvps18"><a class="rvts57" href="Ideas.html#Markers">Markers</a></p>
<p class="rvps18"><a class="rvts57" href="Ideas.html#HotChanges">Hot Changes</a></p>
<p class="rvps18"><a class="rvts57" href="Ideas.html#Greenzone">Greenzone</a></p>
<p class="rvps18"><a class="rvts57" href="Ideas.html#Playback">Playback</a></p>
<p class="rvps18"><a class="rvts57" href="Ideas.html#GreenArrow">Green arrow</a></p>
<p class="rvps18"><a class="rvts57" href="Ideas.html#AutoRestoring">Auto-restore last position</a></p>
<p class="rvps18"><a class="rvts57" href="Ideas.html#Recorder">Multitrack Recorder</a></p>
<p class="rvps18"><a class="rvts57" href="Ideas.html#Lua">Lua automation</a></p>
<p class="rvps18"><a class="rvts57" href="Ideas.html#BookmarksBranches">Bookmarks and branches</a></p>
<p class="rvps18"><a class="rvts57" href="Ideas.html#PopupWindows">Pop-up windows</a></p>
<p class="rvps18"><a class="rvts57" href="Ideas.html#HistoryLog">History Log</a></p>
<p class="rvps18"><a class="rvts57" href="Ideas.html#RerecordsCounter">Rerecord counter</a></p>
<p class="rvps18"><a class="rvts57" href="Ideas.html#Modifiers">Modifier keys system</a></p>
<p class="rvps18"><a class="rvts57" href="Ideas.html#Patterns">Patterns</a></p>
<p class="rvps18"><a class="rvts57" href="Ideas.html#CrossingGaps">Crossing gaps</a></p>
<p class="rvps18"><a class="rvts57" href="Ideas.html#SaveCompact">Compact saving</a></p>
<p class="rvps18"><a class="rvts57" href="Ideas.html#Autosave">Autosave</a></p>
</td>
<td style="border-color: #000000; border-style: solid;"><p class="rvps5"><a class="rvts76" href="Ideas.html#OutputLog">Журнал Вывода</a></p>
<p class="rvps5"><a class="rvts76" href="Ideas.html#Minimap">Миникарта</a></p>
<p class="rvps5"><a class="rvts76" href="Ideas.html#VirtualJoypad">Виртуальный Джойстик</a></p>
<p class="rvps5"><a class="rvts76" href="Ideas.html#BetterSelection">Усовершенствование Выделения</a></p>
<p class="rvps5"><a class="rvts76" href="Ideas.html#BetterColumns">Гибкая настройка колонок</a></p>
<p class="rvps5"><a class="rvts76" href="Ideas.html#RerecordsHeatmap">Теплокарта перезаписей</a></p>
<p class="rvps5"><a class="rvts76" href="Ideas.html#Etc">Прочие мелочи</a></p>
<p class="rvps5"><a class="rvts76" href="Ideas.html#OtherPlatforms">Поддержка платформ, отличных от NES</a></p>
<td style="border-color: #000000; border-style: solid; width: 50%;"><p class="rvps5"><a class="rvts76" href="Ideas.html#OutputLog">Output Log</a></p>
<p class="rvps5"><a class="rvts76" href="Ideas.html#Minimap">Minimap</a></p>
<p class="rvps5"><a class="rvts76" href="Ideas.html#VirtualJoypad">Virtual Joypad</a></p>
<p class="rvps5"><a class="rvts76" href="Ideas.html#BetterSelection">Selection improvement</a></p>
<p class="rvps5"><a class="rvts76" href="Ideas.html#BetterColumns">Columns tweaking</a></p>
<p class="rvps5"><a class="rvts76" href="Ideas.html#RerecordsHeatmap">Rerecords heatmap</a></p>
<p class="rvps5"><a class="rvts76" href="Ideas.html#Etc">Other stuff</a></p>
<p class="rvps5"><a class="rvts76" href="Ideas.html#OtherPlatforms">Supporting platforms other than NES</a></p>
</td>
</tr>
</table>
@ -106,462 +106,472 @@
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps2"><a name="ImplementedIdeas"></a>
<span class="rvts34"><br/></span></p>
<p class="rvps10"><span class="rvts75">Реализованные идеи</span></p>
<p class="rvps10"><span class="rvts75">Implemented ideas</span></p>
<p class="rvps10"><a name="PianoRoll"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Piano Roll</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Основа Тасэдитора, вокруг этой идеи и были сформированы все остальные.</span></p>
<p class="rvps10"><span class="rvts21">The basis of Taseditor, all other ideas were developed around this one.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps14"><span class="rvts21">Представляет собой значительно переработанный компонент Список (ListView) или Таблица (GridView). Столбцы Списка соответствуют кнопкам Ввода, строки Списка соответствуют кадрам мувика. Количество строк Списка регулярно автоматически обновляется, чтобы соответствовать количеству кадров текущего мувика. Строки нумеруются сверху вниз от нуля. Номер строки равен номеру кадра, с которым ассоциируется эта строка. Количество столбцов зависит от типа мувика (от количества джойстиков и, соответственно, количества кнопок).</span></li>
<li class="rvps14"><span class="rvts21">Слева перед столбцами Ввода располагаются два дополнительных столбца. Самый первый столбец (шириной ~17 пикселей) отвечает за отображение иконок и за управление Курсором Проигрывателя. Текущее положение Курсора Проигрывателя отображается иконкой в виде голубой стрелки. При щелчке левой кнопкой по этому столбцу Курсор Проигрывателя посылается на соответствующий кадр, и начинается перетаскивание Курсора, пока не будет отпущена левая кнопка.</span></li>
<li class="rvps14"><span class="rvts21">Второй столбец (шириной 75 пикселей) отвечает за отображение номеров кадров, отображение Маркеров, управление Выделением и управление Маркерами. При одинарном щелчке левой кнопкой по этому столбцу изменяется Выделение (и можно растягивать Выделение перетаскиванием). При двойном щелчке на этом кадре ставится Маркер, и начинается перетаскивание этого Маркера, пока не будет отпущена левая кнопка.</span></li>
<li class="rvps14"><span class="rvts21">В Заголовке Списка отображаются названия столбцов. Самый первый столбец (столбец иконок) не имеет названия, второй столбец назван "Frame#" (номер кадра), остальные столбцы обозначены символом соответствующей кнопки джойстика. Этот же символ отображается в ячейках данного столбца на тех строках, где данная кнопка является нажатой. По ячейкам Заголовка Списка можно щёлкать, изменяя Ввод соответствующей кнопки в выделенных кадрах. А при щелчке по "Frame#" изменяются Маркеры в выделенных кадрах. Кроме того, Заголовок служит индикатором зажатых кнопок джойстика, а при Записи Ввода в Заголовке вспыхивают символы, кнопки которых были только что записаны в мувик.</span></li>
<li class="rvps14"><span class="rvts21">Столбцы Ввода отображают состояние соответствующей кнопки джойстика для каждого кадра мувика. Чтобы узнать состояние кнопки, нужно визуально найти пересечение строки требуемого кадра и столбца требуемой кнопки. Если в этой ячейке находится символ кнопки, то кнопка в данном кадре нажата. Если в этой ячейке пустота или прочерк, то кнопка отпущена. Щелчком левой кнопкой мыши по любой ячейке Ввода можно инвертировать состояние соответствующей кнопки Ввода. &nbsp;Кроме того, если зажать левую кнопку мыши, можно рисовать или стирать Ввод в соседних кадрах, перемещая курсор мыши выше или ниже. Эти и другие возможности быстрого редактирования Ввода призваны полностью заменить линейную Запись нелинейным редактированием.</span></li>
<li class="rvps14"><span class="rvts21">Строки Piano Roll раскрашиваются разными цветами в пастельных тонах, чтобы на их фоне были чётко видны номера кадров (отображаемые чёрным цветом) и символы кнопочных нажатий (отображаемые тёмными цветами). По цвету строки Piano Roll пользователь может сразу определить, находится ли данный кадр мувика в Гринзоне, проявляется ли лаг в данном кадре, является ли данный кадр текущим (отображаемым в окне эмулятора в данный момент), является ли данный кадр выделенным. Также дополнительными цветами можно акцентировать внимание пользователя на определённых кадрах, например, на кадре окончания добегания (мигающий голубой цвет) или на ключевом кадре отката (фиолетовый цвет). Кроме того, по цвету фона ячеек с номерами кадров пользователь может определить наличие Маркера на этом кадре (жёлтый цвет).</span></li>
<li class="rvps14"><span class="rvts21">Расцветка ячеек Piano Roll зависит не только от строки, но и от столбца (хоть и в меньшей мере). Столбец иконок всегда отображается белым цветом. Стобец номеров кадров отображается бледным оттенком текущего цвета строки. Столбцы кнопок Ввода для первого (а также третьего) джойстика отображаются нормальным оттенком текущего цвета строки (зелёным, красным, голубым и т.д.), а столбцы кнопок Ввода для второго (а также четвёртого) джойстика отображаются немного затемнённым оттенком текущего цвета строки.</span></li>
<li class="rvps14"><span class="rvts21">Видимая область Piano Roll может скроллироваться колесом мыши или с помощью скроллбаров, а также с помощью множества других способов </span><a class="rvts38" href="Navigation.html#scrolling-piano-roll">навигации</a><span class="rvts21">. Многообразие способов призвано ускорить навигацию к любому желаемому участку мувика, так как в видимой области отображается лишь ограниченное количество строк. Это количество зависит от текущей высоты Piano Roll в пикселах, которая зависит от текущей высоты окна TAS Editor.</span></li>
<li class="rvps10"><span class="rvts21">It is a significantly redesigned List (ListView) or Table (GridView) component. Columns of the List correspond to Input buttons, rows of the List correspond to movie frames. The number of rows (lines) in the List is regularly updated automatically to match the number of frames in the current movie. The lines are numbered from top to bottom, starting from zero. The line number is equal to the number of frame associated with this line. The number of columns depends on the movie type (on the number of joypads and the number of buttons).</span></li>
<li class="rvps10"><span class="rvts21">To the left from the Input columns there are two additional columns in the List. The first column (width ~17 pixels) is responsible for displaying icons and controlling the Playback cursor. Current Playback cursor position is displayed with a light-blue arrow icon. When you left-click on that column, the Playback cursor is sent to the appropriate frame, and then you can drag the cursor by moving the mouse, until you release the left button.</span></li>
<li class="rvps10"><span class="rvts21">The second column (75 pixels wide) is responsible for displaying frame numbers and Markers, and for controlling the Selection and Markers. A single left-click on the column changes the Selection (and then you can stretch it by dragging). A double-click on a frame number puts a Marker there and starts dragging this Marker until you release the left mouse button.</span></li>
<li class="rvps10"><span class="rvts21">The List Header displays names of the columns. The first column (icons column) does not have a name, the second column is called "Frame #" (frame number), the remaining columns are named with corresponding joypad button symbols. The same symbol appears in the cells of the column on the rows where the button is pressed. The user can click any cell of the List Header in order to change the appropriate button Input in the selected frames. Click the "Frame #" to change Markers in the selected frames.</span></li>
<li class="rvps10"><span class="rvts21">In addition, the Header serves as an indicator of the pressed joypad buttons. And during Input Recording, the recorded symbols flash in the Header.</span></li>
<li class="rvps10"><span class="rvts21">Input columns show the state of every joypad button for each frame of the movie. To see the state of the button of interest, you need to visually find the point of intersection of the frame row and the button column. If this cell contains a button symbol, then the button is pressed in this frame. If that cell is empty or has a dash, then the button is released. By left-clicking on any Input cell you can invert the state of the corresponding button. Also, if you hold the left mouse button, you can draw or erase Input in neighboring frames by moving your mouse up or down.</span></li>
<li class="rvps10"><span class="rvts21">Piano Roll lines are colored with different pastel colors, so the frame numbers (black symbols) and the buttonpress symbols (dark-colored symbols) are always clearly visible on the pastel background. By the color of a Piano Roll line you can immediately determine if this movie frame is inside the Greenzone, whether there is lag in that frame, whether the given frame is currently displayed in the emulator window, and is the frame selected or not. Also, additional colors can focus the user's attention on specific frames, for example, on the target frame of seeking (flashing light-blue line) or the undo keyframe (purple line). In addition, by the background color of the frame numbers the user can see if there is Marker on the frame (yellow color).</span></li>
<li class="rvps10"><span class="rvts21">The coloring of the Piano Roll cells also depends on the column (although to a lesser extent). Icon column always appears in white. Frame numbers column is displayed with pale shade of the current line color. The columns of the 1st (and 3rd) joypad buttons appear in normal shade of the current line color (green, red, blue, etc.), and the columns of the 2nd (and 4th) joypad buttons are displayed in a slightly tinted shade of this line color.</span></li>
<li class="rvps10"><span class="rvts21">The visible area of the Piano Roll can be scrolled with the mouse wheel or by using the scrollbar, or a variety of other </span><a class="rvts27" href="Navigation.html#scrolling-piano-roll">navigation methods</a><span class="rvts21">. Such multitude of methods is meant to speed up the navigation to any desired segment of the movie, since only a limited number of lines can be displayed on screen at any given moment. This number depends on the current Piano Roll height in pixels, which depends on the current TAS Editor window height.</span></li>
</ul>
<p class="rvps10"><a name="Selection"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Выделение</span></p>
<p class="rvps10"><span class="rvts22">Selection</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Как и в любом другом редакторе, &nbsp;в Тасэдиторе Выделение служит для применения операций к множеству кадров одновременно. Кроме того, здесь Выделение служит в качестве указателя (курсора) на место последнего щелчка по Вводу.</span></p>
<p class="rvps10"><span class="rvts21">As in any other editor, in Taseditor the Selection is used to apply an operation to multiple frames at once. But in addition, here the Selection also serves as a pointer (cursor) to the last edited Input location.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps14"><span class="rvts21">Выделение хранится в виде списка номеров кадров, считающихся выделенными.</span></li>
<li class="rvps14"><span class="rvts21">В памяти хранится Журнал Выделений в виде массива списков. Размер массива равен размеру Журнала Истории, можно возвращаться к предыдущим выделениям с помощью </span><span class="rvts30">Ctrl + Q</span><span class="rvts21"> и </span><span class="rvts30">Ctrl + W</span><span class="rvts21">. Это полезно для быстрого отслеживания истории недавних щелчков по Piano Roll.</span></li>
<li class="rvps14"><span class="rvts21">Для управления Выделением служит столбец с номерами кадров. Если после щелчка по номеру кадра зажать левую кнопку, можно растягивать Выделение на соседние кадры. Если зажать клавишу </span><span class="rvts30">Ctrl</span><span class="rvts21"> перед щелчком по номеру кадра, ранее выделенные кадры останутся выделенными. А при простом щелчке по номеру кадра или Ввода текущее Выделение уходит в историю Выделений, и вместо него создаётся новое Выделение, состоящее из одного кадра (по которому был сделан щелчок). Если зажать клавишу </span><span class="rvts30">Shift</span><span class="rvts21">, выделятся все кадры от начала старого Выделения до кадра щелчка. Если зажать </span><span class="rvts30">Alt</span><span class="rvts21">, создастся Выделение по шаблону. Также Выделение меняется и при щелчке по ячейкам Ввода, но только когда не зажаты клавиши модификаторы,</span></li>
<li class="rvps14"><span class="rvts21">Самый верхний выделенный кадр называется Курсором Выделения. Если не выделено ни одного кадра, подразумевается, что Курсор Выделения указывает на кадр с номером -1. Это нужно для некоторых ситуаций, например, при отсутствии Выделения в нижнем текстовом поле отображается Заметка нулевого Маркера.</span></li>
<li class="rvps14"><span class="rvts21">Журнал Выделений (в том числе текущее Выделение) сохраняется и загружается из файла проекта. При изменении настройки "undo levels" происходит соответствующее изменение размера Журнала Выделений.</span></li>
<li class="rvps14"><span class="rvts21">При вставке и удалении кадров текущее Выделение смещается на соответственное количество строк вниз или вверх, чтобы оставаться на тех же позициях относительно Ввода, что и перед вставкой/удалением.</span></li>
<li class="rvps14"><span class="rvts21">Текущее Выделение можно сдвигать (</span><span class="rvts30">Ctrl + Вверх</span><span class="rvts21"> / </span><span class="rvts30">Ctrl + Вниз</span><span class="rvts21"> / </span><span class="rvts30">Ctrl + Home</span><span class="rvts21"> / </span><span class="rvts30">Ctrl + End</span><span class="rvts21">). Если часть Выделения выходит за рамки Piano Roll, эта часть исчезает. То есть пользователь не может выделить кадры за пределами текущего мувика.</span></li>
<li class="rvps14"><span class="rvts21">Курсором Выделения можно осуществлять прыжки по Маркерам (</span><span class="rvts30">Ctrl + Page Up</span><span class="rvts21"> / </span><span class="rvts30">Ctrl + Page Down</span><span class="rvts21">), при этом текущее Выделение уходит в Историю, а вместо него появляется один выделенный кадр на месте следующего Маркера.</span></li>
<li class="rvps14"><span class="rvts21">Видимая область Piano Roll всегда следует за Выделением. При этом, если Выделение не помещается целиком на экране, Piano Roll скроллируется таким образом, чтобы Курсор Выделения был в середине, а если Выделение помещается центрирует всё Выделение.</span></li>
<li class="rvps14"><span class="rvts21">В нижнем текстовом поле отображается текст Заметки маркера, на участке которого находится Курсор Выделения. Этот текст обновляется при каждом изменении Выделения, а также при изменении текущих Маркеров.</span></li>
<li class="rvps14"><span class="rvts21">При нажатии </span><span class="rvts30">Ctrl + A</span><span class="rvts21"> текущее Выделение уходит в Историю, вместо него становятся выделенными все кадры, начиная с Маркера, на участке которого был Курсор Выделения, заканчивая следующим Маркером (не включая этот Маркер). Таким образом выделяется весь участок текущего Маркера. При следующем нажатии </span><span class="rvts30">Ctrl + A</span><span class="rvts21"> Выделение изменится на набор кадров между Маркерами, не включая верхний и нижний Маркеры. При третьем </span><span class="rvts30">Ctrl + A</span><span class="rvts21"> Выделение изменится на набор кадров между Маркерами, не включая верхний, но включая нижний Маркер. Наконец, при четвёртом нажатии </span><span class="rvts30">Ctrl + A</span><span class="rvts21"> Выделение изменится на набор кадров между Маркерами, включающий оба Маркера. При дальнейших нажатиях </span><span class="rvts30">Ctrl + A</span><span class="rvts21"> будет повторение предыдущих вариантов выделения. Это позволяет пользователю быстро выделить нужный участок, причём в большинстве случаев ТАСеру будет нужен именно первый вариант выделения между Маркерами.</span></li>
<li class="rvps10"><span class="rvts21">The Selection is stored as a list of numbers of frames that are considered selected.</span></li>
<li class="rvps10"><span class="rvts21">Taseditor also stores the Selections Log in memory, as an array of lists. The array size is equal to the the History Log size. You can return to the previous selections with </span><span class="rvts30">Ctrl + Q</span><span class="rvts21"> and </span><span class="rvts30">Ctrl + W</span><span class="rvts21">. This is useful for tracking the recent history of clicks on the Piano Roll.</span></li>
<li class="rvps10"><span class="rvts21">The Piano Roll column of frame numbers is used to control the Selection. If you hold the left button after you click on the frame number, you can stretch the Selection to adjacent frames. If you hold down the </span><span class="rvts30">Ctrl</span><span class="rvts21"> key before clicking on a frame number, the previously selected frames remain highlighted, but if you make a simple click on a frame number or on Input, the current selection disappears (moves into the Selection history), and a new selection is created instead, consisting of one frame (which was clicked). If you hold down </span><span class="rvts30">Shift </span><span class="rvts21">before clicking on a frame number, you will select all the frames starting from the old Selection to the clicked frame. If you hold down </span><span class="rvts30">Alt </span><span class="rvts21">before clicking on a frame number, a pattern-based Selection will appear. Selection also changes when you click on Input cells, but only if the modifier keys are not held.</span></li>
<li class="rvps10"><span class="rvts21">The topmost selected frame is called Selection cursor. If currently not a single frame is selected, it is implied that the Selection cursor points to the frame -1. This is necessary in some situations, for example, when there's no Selection, the bottom edit field displays the Note of the zeroth Marker.</span></li>
<li class="rvps10"><span class="rvts21">The Selection Log (including the current Selection) is saved and loaded from the project file. When you change the "max undo levels" setting, it will change both the size of the History Log and the Selection Log.</span></li>
<li class="rvps10"><span class="rvts21">While inserting and removing frames, the current Selection is automatically shifted up or down by a corresponding number of lines, in order to remain in the same position (relative to Input).</span></li>
<li class="rvps10"><span class="rvts21">Current Selection can be moved (</span><span class="rvts30">Ctrl + Up</span><span class="rvts21"> / </span><span class="rvts30">Ctrl + Down</span><span class="rvts21"> / </span><span class="rvts30">Ctrl + Home</span><span class="rvts21"> / </span><span class="rvts30">Ctrl + End</span><span class="rvts21">). If some part of the Selection goes beyond Piano Roll, this part disappears. That is, the user can not select any frame beyond the current movie.</span></li>
<li class="rvps10"><span class="rvts21">The Selection cursor can jump on Markers (</span><span class="rvts30">Ctrl + Page Up</span><span class="rvts21"> / </span><span class="rvts30">Ctrl + Page Down</span><span class="rvts21">), with each jump the current Selection goes to History and a newly selected frame appears at the next Marker.</span></li>
<li class="rvps10"><span class="rvts21">The visible area of the Piano Roll always follows the Selection. If the selection does not fit the screen, Piano Roll scrolls in such a way that the Selection cursor is in the middle, but if the selection fits, the Piano Roll shows all selected frames.</span></li>
<li class="rvps10"><span class="rvts21">The bottom text edit field displays the Note of the nearest Marker above the Selection cursor. This text is updated every time the Selection changes or you change Markers.</span></li>
<li class="rvps10"><span class="rvts21">When you press </span><span class="rvts30">Ctrl + A</span><span class="rvts21">, the current Selection goes to History, and instead it selects the frames starting with the nearest Marker above the Selection cursor and ending with the next Marker (not including that Marker). This way you can select the whole segment. At the second </span><span class="rvts30">Ctrl + A</span><span class="rvts21"> press, the Selection changes to a set of frames between the Markers, not including the upper and lower Markers. On the third </span><span class="rvts30">Ctrl + A</span><span class="rvts21"> press, the Selection will change to a set of frames between the Markers, excluding the upper but including the lower Marker. Finally, the fourth </span><span class="rvts30">Ctrl + A</span><span class="rvts21"> pressing modifies the Selection into a set of frames between the Markers, including both Markers. All the next </span><span class="rvts30">Ctrl + A</span><span class="rvts21"> presses will repeat these four versions of the selection.</span></li>
</ul>
<p class="rvps14"><a name="Markers"></a>
<p class="rvps10"><a name="Markers"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Маркеры</span></p>
<p class="rvps10"><span class="rvts22">Markers</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">При редактировании больших мувиков пользователю может понадобиться установка отметок на некоторые строки Piano Roll, чтобы эти строки визуально отличались от соседних. После ряда усовершенствований эта идея вылилась в многогранную фичу.</span></p>
<p class="rvps10"><span class="rvts21">When editing large movies, the user may need to set some marks on the Piano Roll lines, in order to distinct these lines visually from their neighbors. After a series of improvements, that simple idea evolved into a versatile feature.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps14"><span class="rvts21">Любой кадр мувика может быть отмечен. При желании пользователь может отметить Маркерами сразу все кадры мувика. Кроме того, пользователь может оставить отметку, например, на кадре 1200, а затем сделать усечение Ввода после кадра 1000, оставив отвязанный от Ввода Маркер за пределами мувика. Этот Маркер будет оставаться в проекте; чтобы увидеть его наличие, нужно проэмулировать мувик до кадра 1200, чтобы в Piano Roll отражалась строка с этим Маркером.</span></li>
<li class="rvps14"><span class="rvts21">Неотмеченные строки Piano Roll отображаются обычными цветами, а в отмеченных строках ячейка с номером кадра имеет жёлтый цвет фона. Этот цвет выбран, так как Маркеры призваны акцентировать внимание пользователя на отмеченных кадрах. Также номера отмеченных кадров отображаются особым шрифтом, чтобы о наличии Маркера можно было догадаться, даже когда жёлтый фон ячейки загораживается синим цветом Выделения.</span></li>
<li class="rvps14"><span class="rvts21">Маркеры могут быть привязаны к Вводу (тогда они отображаются бледно-жёлтым цветом), а могут быть отвязанными (отображаются более насыщенным жёлтым цветом). Когда Маркеры привязаны, на них действуют операции по смещению Ввода вверх/вниз, а также усечению Ввода.</span></li>
<li class="rvps14"><span class="rvts21">Маркер ставится двойным щелчком левой кнопкой мыши по номеру желаемого кадра. Если сделать двойной щелчок по уже установленному Маркеру, начинается его перетаскивание (до момента отпускания левой кнопки). Так можно перенести Маркер на другой кадр или удалить, перенеся за рамки Piano Roll. При перетаскивании под курсором мыши висит образ Маркера в виде жёлтого прямоугольника с номером кадра, с которого был снят этот Маркер. Чтобы отменить перетаскивание, нужно опустить Маркер либо на ту же самую ячейку с номером кадра, либо на любую ячейку Ввода.</span></li>
<li class="rvps14"><span class="rvts21">Также Маркеры можно устанавливать и удалять с помощью контекстного меню по правой кнопке или с помощью щелчка по Frame#.</span></li>
<li class="rvps14"><span class="rvts21">Обычно Маркеры ставятся относительно далеко друг от друга, и между ними находятся промежутки из неотмеченных кадров. Поэтому Маркеры можно воспринимать не только как цветовое выделение особенных кадров, но и как пограничные отметки для участков мувика. Для стандартизации принята следующая терминология: каждому Маркеру соответствует участок кадров мувика, начинающийся с отмеченного кадра и заканчивающийся последним неотмеченным кадром. Например, если в мувике на кадрах 10 и 20 стоят Маркеры, то участком первого маркера является регион кадров с 10-го по 19-й, а участком второго маркера регион с 20-го по последний кадр мувика.</span></li>
<li class="rvps14"><span class="rvts21">Промежутки между Маркерами можно пересекать прыжками от текущего к следующему (или предыдущему). Это позволяет в ряде случаев ускорить навигацию по мувику.</span></li>
<li class="rvps14"><span class="rvts21">С помощью функции </span><span class="rvts25">Select between Markers</span><span class="rvts21"> (</span><span class="rvts30">Ctrl + A</span><span class="rvts21">) можно быстро выделить все кадры на участке текущего Маркера. Таким образом Маркеры позволяют ускорить не только навигацию, но и редактирование.</span></li>
<li class="rvps14"><span class="rvts21">Каждый Маркер имеет свою текстовую Заметку. При создании она пустая. Пользователь может просматривать и редактировать Заметку с помощью любого из двух имеющихся текстовых полей. В верхнем текстовом поле отображается Заметка Маркера, на участке которого находится Курсор Проигрывателя. В нижнем текстовом поле отображается Заметка Маркера, на участке которого находится Курсор Выделения. Таким образом, чтобы отредактировать желаемую Заметку, нужно сначала поставить один из курсоров на её Маркер или на кадр под Маркером. В теории это звучит неудобно, но рабочий процесс в Тасэдиторе организован таким образом, что под нужными Маркерами обязательно стоит какой-нибудь курсор.</span></li>
<li class="rvps14"><span class="rvts21">Объём Заметки ограничен сотней символов, так как Заметки предназначены не для хранения длинных текстов, а для коротких комментариев, тегов и тому подобных записок на салфетках. В крайнем случае можно разместить несколько Маркеров подряд, разбив длинный текст на несколько соседствующих Заметок.</span></li>
<li class="rvps14"><span class="rvts21">По тексту Заметок можно осуществлять обычный поиск (Find Note) и нечёткий поиск (Similar/More). Подробнее см. </span><a class="rvts38" href="AdvancedFeatures.html#UsingMarkers">Продвинутые возможности</a><span class="rvts21">.</span></li>
<li class="rvps14"><span class="rvts21">Маркеры сохраняются и восстанавливаются из ответвлений Закладок вместе с Вводом. Каждая операция с Маркерами заносится в Журнал Истории аналогично операциям с Вводом. В файле проекта Маркеры сохраняются сразу после Ввода.</span></li>
<li class="rvps10"><span class="rvts21">Any frame of the movie can be marked. If necessary, the user can even mark all movie frames. Also, you can leave a mark, say, on a frame 1200, and then truncate the Input after frame 1000, leaving the Input-detached Marker outside the movie boundary. This Marker will remain in the project. To see it, you would need to emulate the game up to frame 1200 again, so the Piano Roll displays the marked line.</span></li>
<li class="rvps10"><span class="rvts21">Unmarked Piano Roll lines are displayed in normal colors, but in the marked lines the frame number cell is colored yellow. This color is chosen because Markers are intended to attract user's attention. Also the numbers of marked frames are written using special font, so that the Marker presence can be guessed even when the yellow background is covered by the blue Selection color.</span></li>
<li class="rvps10"><span class="rvts21">Markers can be attached to the Input (then they are displayed by pale yellow), or can be detached (displayed by more saturated yellow). When the Markers are attached, they are affected by all operations that move Input up/down, and affected by Input truncation.</span></li>
<li class="rvps10"><span class="rvts21">A Marker can be set by double-clicking (with the left mouse button) on the desired frame number. If you double-click on an already existing Marker, you will start dragging it until you release the left button. So you can move the Marker to another frame, or remove a Marker by throwing it away from the Piano Roll. When you drag it, a Marker image is hanging under the mouse cursor, looking like a yellow rectangle with the number of the frame it was taken from. To cancel the dragging, either drop the Marker on the same cell, or drop it on any Input cell.</span></li>
<li class="rvps10"><span class="rvts21">Markers can also be created and removed using the context menu or by clicking on the "Frame#" caption.</span></li>
<li class="rvps10"><span class="rvts21">Usually Markers are placed far from each other, so there are intervals of unmarked frames between them. Therefore, Markers can be used not only as color highlighting for special frames, but also as border marks for movie segments. The following terminology is used: each Marker corresponds to the movie segment that starts with the marked frame and ends with the last unmarked frame. For example, if Markers are set at the frames 10 and 20, we are calling the range of frames 10-19 as a "segment of the first Marker", and the segment of the second Marker consists of all the frames from the frame 20 to the last movie frame.</span></li>
<li class="rvps10"><span class="rvts21">The intervals between the Markers can be crossed by jumping from the current Marker to the next one (or previous). This allows to speed up the navigation through the movie in some cases.</span></li>
<li class="rvps10"><span class="rvts21">With the </span><span class="rvts25">Select between Markers</span><span class="rvts21"> function (</span><span class="rvts30">Ctrl + A</span><span class="rvts21">) the user can quickly select all frames in the current Marker segment. Thus Markers can accelerate not only navigation, but also editing.</span></li>
<li class="rvps10"><span class="rvts21">Each Marker has a text Note. After Marker creation it is empty. The user can view and edit the Note using any of the two text edit fields. In the upper edit field you can see the Note of the Marker above the current Playback cursor. The lower edit field displays the Note of the Marker above the Selection cursor. So, to edit the desired Note, you must first put one of the two cursors below desired Marker or right into the Marker. In theory it sounds awkward, but in Taseditor the general workflow ensures that one of the cursors is usually located under the needed Marker.</span></li>
<li class="rvps10"><span class="rvts21">The Note size is limited by one hundred of characters, because Notes are not intended to store long texts, they are for short comments, tags and similar kinds of napkin notes. In an extreme case you can always place multiple Markers in a row and break the long text into several adjacent Notes.</span></li>
<li class="rvps10"><span class="rvts21">You can make a regular search through Notes text (Find Note) or fuzzy search (Similar/More). See more in </span><a class="rvts27" href="AdvancedFeatures.html#UsingMarkers">Advanced Features</a><span class="rvts21">.</span></li>
<li class="rvps10"><span class="rvts21">Markers are saved and restored from the Bookmark branches along with Input. Each Marker operation is recorded to History Log the same way as Input operations. Also, the current state of Markers is saved into the project file, right after saving the Input data.</span></li>
</ul>
<p class="rvps14"><a name="HotChanges"></a>
<p class="rvps10"><a name="HotChanges"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Горячие Правки</span></p>
<p class="rvps10"><span class="rvts22">Hot Changes</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Раскраска текстовых символов в ячейках Ввода разными цветами, в зависимости от давности редактирования каждой ячейки. Подробнее см. </span><a class="rvts27" href="PianoRoll.html#HotChanges">Интерфейс программы</a><span class="rvts21"> и </span><a class="rvts27" href="ProgramCustomization.html#EnableHotChanges">Настройка программы</a><span class="rvts21">.</span></p>
<p class="rvps10"><span class="rvts21">Taseditor paints text symbols in the Input cells by different colors, depending on the time of editing the cell. For details, see </span><a class="rvts27" href="PianoRoll.html#HotChanges">Program Interface</a><span class="rvts21"> and </span><a class="rvts27" href="ProgramCustomization.html#EnableHotChanges">Program Customization</a><span class="rvts21">.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps14"><span class="rvts21">В памяти хранятся значения сразу всех ячеек Ввода, даже несмотря на то, что большинство из них имеет нулевой уровень горячести. Это необходимо для тех редких случаев, когда массово изменяются почти все ячейки мувика (например, при операциях Import или Paste). Массив Горячих Правок занимает много места в оперативной памяти, но хорошо сжимается и занимает мало места на диске.</span></li>
<li class="rvps14"><span class="rvts21">16 градаций цвета, чтобы в одном байте умещалась информация о горячести двух ячеек. Кроме того, добавлять ещё больше градаций нет смысла, так как человеческий глаз будет хуже различать их, а ценность Горячих Правок именно в возможности быстрой визуальной оценки Ввода, не требующей длительного обдумывания.</span></li>
<li class="rvps14"><span class="rvts21">Состояние текущей карты Горячих Правок меняется только при добавлении нового пункта в Журнал истории и при откатах Истории.</span></li>
<li class="rvps10"><span class="rvts21">Taseditor stores the hotness value for all the Input cells, despite the fact that majority of them has zero hotness. It is necessary for the rare occasions when almost all movie cells become mass-changed (e.g, </span><a class="rvts27" href="Operations.html#Import">Import </a><span class="rvts21">or </span><a class="rvts27" href="Operations.html#Paste">Paste</a><span class="rvts21"> operations). Thus the array of Hot Changes takes a lot of memory, but it is well compressed and takes little space on the disk.</span></li>
<li class="rvps10"><span class="rvts21">Using 16 shades of color, so that one byte can fit the data about hotness of 2 cells. Also, it makes no sense to add more grades, since the human eye will hardly distinguish them, while the value of the Hot Changes is in the ability to quickly estimate Input without long deliberation.</span></li>
<li class="rvps10"><span class="rvts21">The state of the current Hot Changes map changes only when a new item is added to the History Log (and during History undos).</span></li>
</ul>
<ul style="text-indent: 30px; margin-left: 40px; list-style-position: inside;">
<li class="rvps14"><span class="rvts21">при редактировании Ввода старые ячейки теряют один уровень горячести, а изменённые ячейки приобретают максимальный уровень</span></li>
<li class="rvps14"><span class="rvts21">при удалении кадров старые ячейки теряют один уровень горячести</span></li>
<li class="rvps14"><span class="rvts21">при вставке кадров старые ячейки теряют один уровень горячести, а все ячейки вставленных кадров приобретают максимальный уровень</span></li>
<li class="rvps14"><span class="rvts21">при изменении Маркеров или Закладок, а также при усечении мувика Горячие Правки не меняются</span></li>
<li class="rvps14"><span class="rvts21">при прыжке на Закладку во времени текущие Горячие Правки замещаются Горячими Правками из ответвления Закладки</span></li>
<li class="rvps14"><span class="rvts21">при импорте Ввода старые ячейки обнуляют уровень горячести, а изменённые ячейки приобретают максимальный уровень</span></li>
<li class="rvps10"><span class="rvts21">when changing Input, all old cells lose one level of hotness, and changed cells gain maximum level</span></li>
<li class="rvps10"><span class="rvts21">when removing frames, old cells lose one hotness level</span></li>
<li class="rvps10"><span class="rvts21">when inserting frames, old cells lose one hotness level, and all the inserted frames cells appear with maximum level</span></li>
<li class="rvps10"><span class="rvts21">when editing Markers or Bookmarks, and when truncating the movie, Hot Changes do not change</span></li>
<li class="rvps10"><span class="rvts21">when loading a Bookmark, the current Hot Changes are replaced by the Hot Changes from the Bookmark branch</span></li>
<li class="rvps10"><span class="rvts21">when importing Input, the old cells are reset to zero hotness, and changed cells gain maximum level</span></li>
</ul>
<p class="rvps10"><a name="Greenzone"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Гринзона</span></p>
<p class="rvps10"><span class="rvts22">Greenzone</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Так как интерфейс Piano Roll предоставляет пользователю почти мгновенный доступ к изменению Ввода на любом кадре мувика, желательно также предоставить быстрый доступ к просмотру состояния игры на любом кадре мувика. Это реализуется с помощью кеширования данных о всех полученных состояниях игры.</span></p>
<p class="rvps10"><span class="rvts21">Since the Piano Roll interface provides the user with almost instant editing of the Input of any frame, it is also desirable to provide the ability to instantly view the game state at any given frame. This is accomplished by caching the data on all emulated game states.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps14"><span class="rvts21">Гринзона представляет собой массив информации о Выводе игры на начало каждого кадра. То есть в ячейке с номером 0 хранится состояние игры до начала эмуляции, в ячейке 1 состояние игры перед началом эмуляции второго кадра (кадра с номером 000001) и т.д. Помимо сэйва для каждого кадра хранится информация о лаге в этом кадре, теоретически возможно хранение и другой информации.</span></li>
<li class="rvps14"><span class="rvts21">Гринзона начинается с нулевого кадра и имеет нижнюю границу (голову) &nbsp; номер кадра, начиная с которого в Гринзоне отсутствует информация о дальнейших состояниях игры. Для кадров, номер которых меньше головы, в Гринзоне может иметься информация.</span></li>
<li class="rvps14"><span class="rvts21">Данные в Гринзону собираются в начале каждого кадра (перед эмуляцией) по следующему принципу: если в массиве Гринзоны ячейка с номером, равным текущему кадру, пустует, или же позиция головы Гринзоны меньше номера текущего кадра, то ячейка массива заполняется информацией о текущем состоянии игры (из эмулятора), а голова Гринзоны при необходимости перемещается вперёд.</span></li>
<li class="rvps14"><span class="rvts21">Для экономии памяти Гринзона периодически разреживается, удаляя сэйвы (но не информацию о лаге) некоторых ранних кадров, от которых Курсор Проигрывателя ушёл достаточно далеко. </span><span class="rvts21">Подробнее см. </span><a class="rvts27" href="ProgramCustomization.html#SetGreenzonecapacity">Настройка программы</a><span class="rvts21">.</span></li>
<li class="rvps14"><span class="rvts21">Вся Гринзона сохраняется и загружается из файла проекта. После загрузки проекта Тасэдитор восстанавливает состояние Курсора Проигрывателя с помощью Гринзоны.</span></li>
<li class="rvps14"><span class="rvts21">При любом изменении Ввода текущего мувика из Гринзоны удаляется информация о кадрах, идущих после первого изменённого кадра. Это реализуется с помощью уменьшения позиции головы Гринзоны и удаления устаревшей информации из массива (но без освобождения памяти, так как на место старых сэйвов вскоре будут записаны новые данные примерно того же размера). Обычно одновременно с этим перемещается Курсор Проигрывателя, чтобы он всегда находился внутри Гринзоны (чтобы на экране FCEUX никогда не отображалось неактуальное состояние игры).</span></li>
<li class="rvps14"><span class="rvts21">При создании Закладки в неё копируется информация из соответствующего кадра Гринзоны. При загрузке ответвления этой Закладки из неё копируется информация в соответствующую ячейку Гринзоны, и при необходимости передвигается позиция головы.</span></li>
<li class="rvps14"><span class="rvts21">Информация из Гринзоны используется при раскрашивании строк Piano Roll. Информация о лаге (Журнал лага) отображается не только для кадров, содержащихся в Гринзоне, но и для отсутствующих в ней кадров. Если в Гринзоне нет информации о лаге на определённом кадре, то предполагается, что этот кадр без лага.</span></li>
<li class="rvps14"><span class="rvts21">Информация о лаге собирается в Гринзону одновременно со сбором текущего состояния игры, то есть перед началом эмуляции текущего кадра. В этот момент эмулятор обладает информацией о лаге предыдущего кадра, поэтому на кадре с номером 000020 данные о лаге сохраняются в ячейку 19. Также именно в этот момент может сработать операция </span><a class="rvts27" href="Operations.html#AdjustLag">AdjustLag</a><span class="rvts21">, которая сдвигает весь Ввод в последующих кадрах мувика на 1 кадр вверх или вниз. Ввод сдвигается вверх, если в Журнале лага на прошлом кадре был лаг, а теперь его не стало. Ввод сдвигается вниз, если в Журнале лага на прошлом кадре не было лага, а теперь он есть. Вместе с Вводом аналогично сдвигается и все последующие ячейки Журнала лага, чтобы красные строки Piano Roll по-прежнему соответствовали сдвинувшимся пропускам во Вводе. Кроме того, после операции AdjustLag Курсор Проигрывателя насильно возвращается на предыдущий кадр (в котором изменилась информация о лаге), чтобы проэмулировать его заново. Это реализуется не простой перемоткой назад, а усечением Гринзоны после предыдущего кадра.</span></li>
<li class="rvps10"><span class="rvts21">The Greenzone is an array of data about the Output of the game, retrieved at the beginning of each frame. That is, the item #0 stores the game state before any emulation started, the item #1 stores the game state before emulating the second frame (the frame with number 000001), and so on. Besides the savestates the Greenzone stores the Lag Log that corresponds to the Input of the current movie. It's also theoretically possible to store other information.</span></li>
<li class="rvps10"><span class="rvts21">The Greenzone starts with zeroth frame and has a lower boundary (head) the frame number after which the Greenzone has no information about future game states (however, there may still be some information about the Lag of those frames).</span></li>
<li class="rvps10"><span class="rvts21">The game data is collected into the Greenzone at the beginning of each frame (before emulation) in the following way: if the Greenzone array item with the number equal to the current frame is empty, or the position of the Greenzone head is smaller than the current frame number, then the array item is filled with information about the current game state (from emulator), and the Greenzone head moves forward if necessary.</span></li>
<li class="rvps10"><span class="rvts21">To save some memory, the Greenzone is rarefied periodically, removing the savestates (but not the Lag Log data) of some early frames that are left too far from the Playback cursor. For details, see </span><a class="rvts27" href="ProgramCustomization.html#SetGreenzonecapacity">Program Customization</a><span class="rvts21">.</span></li>
<li class="rvps10"><span class="rvts21">All the Greenzone data together with the Lag Log is saved and loaded from the project file. After loading the project, Taseditor restores the Playback cursor state using the Greenzone.</span></li>
<li class="rvps10"><span class="rvts21">Any change of the current movie Input forces the Greenzone remove the savestates of all frames after the first edited frame, not including the frame. This is accomplished by reducing the position of the Greenzone head and removing the outdated information from an array of savestates (but without freeing the memory, because the place of the old savestates will soon be taken by the new data of about the same size).</span></li>
<li class="rvps10"><span class="rvts21">The Playback cursor must always be is inside the Greenzone, in order to avoid displaying the irrelevant game states on the FCEUX screen. So the Greenzone truncation may also move the Playback cursor.</span></li>
<li class="rvps10"><span class="rvts21">When creating a Bookmark, the savestate of the bookmarked frame and the whole Lag Log are copied into it. When loading this Bookmark, the Greenzone is first truncated (because of the Input change), but then the bookmarked savestate and the relevant part of the bookmarked Lag Log are restored, and the Greenzone head position is moved, if necessary.</span></li>
<li class="rvps10"><span class="rvts21">The Greenzone data is used for coloring the Piano Roll lines and the Bookmarks List items. The Lag Log stores information independently from savestates stored in the Greenzone. Every item of the Lag Log can have one of the three possible values: LAG=YES, LAG=NO, LAG=DONTKNOW.</span></li>
<li class="rvps10"><span class="rvts21">The lag information for the Lag Log is collected at the same time when collecting the current game state to the Greenzone. That is, before emulating the current frame. At this point the emulator has knowledge about the previous frame lag, so at the frame 000020 we can store the lag data to the cell 19. Also, during this time the </span><a class="rvts27" href="Operations.html#AdjustLag">AdjustLag</a><span class="rvts21"> operation can fire off and shift the entire following Input up or down. The Input is shifted up, if in the previous frame the Lag Log has LAG=YES, and the emulator says there was no lag in previous frame. The Input moves down if the Lag Log has LAG=NO in the previous frame, and the emulator says there was lag. Together with the Input this operation shifts all subsequent items of the Lag Log get, so that the red lines of the Piano Roll are still consistent with the shifted Input gaps.</span></li>
</ul>
<p class="rvps10"><a name="Playback"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Проигрыватель</span></p>
<p class="rvps10"><span class="rvts22">Playback</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Проигрыватель это собрание всех функций по просмотру Вывода (состояния игры в нужных кадрах).</span></p>
<p class="rvps10"><span class="rvts21">The Playback is a meeting of all functions used for watching the game Output (the game state).</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps14"><span class="rvts21">Главный атрибут Проигрывателя текущий проигрываемый кадр мувика, скриншот этого кадра отображается в окне эмулятора в данный момент времени. Этому кадру соответствует голубая строка в Piano Roll, которая носит название Курсор Проигрывателя. Так как Курсор Проигрывателя привязан к состоянию эмулируемой игры, можно использовать его не только в качестве индикатора, но и в качестве управляющего элемента. Чтобы увидеть на экране FCEUX события интересующего кадра, нужно передвинуть Курсор Проигрывателя на строку с номером этого кадра. Для этого есть </span><a class="rvts27" href="Navigation.html#playback-cursor">множество способов</a><span class="rvts21">.</span></li>
<li class="rvps14"><span class="rvts21">Когда пользователь посылает Курсор Проигрывателя на кадр, содержащийся в Гринзоне, состояние эмулируемой игры восстанавливается из соответствующего сэйва. Так как при этом не было никакой эмуляции, Тасэдитор имитирует события "frame boundary" и "frame begin"/"frame end", чтобы сработали соответствующие функции Lua.</span></li>
<li class="rvps14"><span class="rvts21">Когда пользователь посылает Курсор Проигрывателя на кадр, не содержащийся в Гринзоне, Тасэдитор восстанавливает состояние игры на ближайший предшествующий кадр, для которого имеется сэйв Гринзоны, а затем запускает добегание к желаемому кадру. Добегание это эмуляция, которая автоматически останавливается при достижении целевого кадра. Во время добегания на целевом кадре мигает копия голубого курсора.</span></li>
<li class="rvps14"><span class="rvts21">Так как эмулятор обеспечивает детерминизм, состояние игры на любом кадре можно гарантированно получить, используя базовое состояние игры (состояние на начало мувика) и Ввод из мувика. Более того, можно получить требуемое состояние, используя состояние на любой предыдущий кадр (сэйв из Гринзоны) и Ввод из мувика. На этом принципе и основано добегание.</span></li>
<li class="rvps14"><span class="rvts21">Процесс добегания отображается на прогрессбаре, чтобы в случае длительного добегания пользователь мог оценить оставшееся время ожидания. Когда добегания нет, прогрессбар полностью заполнен во время паузы и пуст во время эмуляции.</span></li>
<li class="rvps14"><span class="rvts21">Добегание может осуществляться на максимально возможной скорости эмуляции. В этом случае для относительно небольших участков добегание будет завершено практически мгновенно.</span></li>
<li class="rvps14"><span class="rvts21">Во многих случаях полезно автоматически останавливать эмуляцию на последнем кадре, для которого в мувике есть Ввод. Для этого служит настройка </span><a class="rvts27" href="ProgramCustomization.html#AutopauseattheendofMovie">Autopause at the end of Movie</a><span class="rvts21">, благодаря которой Курсор Проигрывателя при отпущенной паузе не будет убегать слишком далеко.</span></li>
<li class="rvps14"><span class="rvts21">В большинстве случаев пользователю не требуется автоматически скроллировать Piano Roll к Курсору Проигрывателя во время передвижения этого курсора. Для тех случаев, когда это всё-таки нужно, служит галочка "Follow cursor".</span></li>
<li class="rvps10"><span class="rvts21">The main attribute of the Playback is the "currently played movie frame", the frame whose screenshot is displayed at the emulator window at the moment. This frame corresponds to the light-blue line in the Piano Roll, which is called Playback cursor. Since the Playback cursor is tied to the state of the emulated game, you can use it not only as an indicator, but as a control too. E.g. to see the frame of interest on the FCEUX screen, you need to put the Playback cursor to the line with that frame number. There are </span><a class="rvts27" href="Navigation.html#playback-cursor">many ways</a><span class="rvts21"> to do this.</span></li>
<li class="rvps10"><span class="rvts21">When the user sends the Playback cursor on a frame contained in the Greenzone, the emulated game state is recovered from the corresponding savestate. Since there was no emulation in this case, Taseditor has to simulate the events "frame boundary" and "frame begin"/"frame end", so that the respective Lua functions could fire off.</span></li>
<li class="rvps10"><span class="rvts21">When the user sends the Playback cursor on a frame outside the Greenzone, Taseditor restores the game state from the nearest preceding frame that has the Greenzone savestate, and then starts seeking to the desired frame. "Seeking" is the emulation which automatically stops when the target frame is reached. When the Playback is seeking, a copy of the light-blue cursor flashes at the target frame in the Piano Roll.</span></li>
<li class="rvps10"><span class="rvts21">Seeking is based on the following assumption. Since the emulator provides determinism, the game state for any frame is guaranteed to be obtained by using the initial game state (the movie beginning state) and the Input of the movie. Moreover, you can get the required state using the state for any previous frame (any Greenzone savestate) and the Input of the movie.</span></li>
<li class="rvps10"><span class="rvts21">The seeking process is indicated by the progressbar, in order to let the user estimate the waiting time if seeking takes too long. When there is no seeking, the progressbar is full during pause and empty during emulation.</span></li>
<li class="rvps10"><span class="rvts21">The seeking can be done at the highest possible emulation speed. In this case the seeking will be finished instantly (for relatively small segments).</span></li>
<li class="rvps10"><span class="rvts21">In many cases it is useful to automatically stop emulation at the last frame of the movie Input. The </span><a class="rvts27" href="ProgramCustomization.html#AutopauseattheendofMovie">Autopause at the end of Movie</a><span class="rvts21"> option serves for this. When the emulator is paused, if the Playback cursor is not on the last movie frame, the Playback sets the "automatic stop" flag. And if the user releases the pause, the Playback automatically stops when it reaches the last movie frame. Thanks to it, the Playback cursor will not run away when the pause is released.</span></li>
<li class="rvps10"><span class="rvts21">In most cases the user does not want to automatically scroll the Piano Roll after the Playback cursor when the cursor moves itself. But for the cases when it is needed, there is the "Follow cursor" checkbox.</span></li>
</ul>
<p class="rvps10"><a name="GreenArrow"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Зелёная стрелка</span></p>
<p class="rvps10"><span class="rvts22">Green arrow</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">При создании спидранов ТАСер пытается обогнать свой рекорд на каждом участке. В большинстве случаев критерием оптимальности является номер кадра, на котором происходит конечное событие участка. Для его определения ТАСер перемещает Курсор Проигрывателя, одновременно просматривая экран FCEUX, и останавливает этот ручной поиск в тот момент, когда обнаружено начало интересующего события. Обычно Курсор Проигрывателя так и остаётся на найденном кадре, а ТАСер начинает изменять Ввод на участке, надеясь улучшить его и получить то же событие на более ранний кадр.</span></p>
<p class="rvps10"><span class="rvts21">Во время изменения Ввода Гринзона усекается, и Курсор Проигрывателя отступает назад. Когда ТАСер считает, что внёс во Ввод достаточно существенные изменения, он начинает проверку Вывода, чтобы определить, на каком кадре начинается целевое событие теперь. Для этого он опять перемещает Курсор Проигрывателя, одновременно просматривая экран FCEUX.</span></p>
<p class="rvps10"><span class="rvts21">Чтобы сделать вывод об улучшении, ТАСеру нужно сравнить старый номер кадра (найденный в прошлый раз) и новый номер, найденный только что. Тасэдитор визуализирует эти данные, чтобы пользователю не требовалось запоминать их в уме. На новый номер указывает Курсор Проигрывателя, на старый номер указывает зелёная стрелка.</span></p>
<p class="rvps10"><span class="rvts21">When making speedruns, TASer is trying to beat his record on each segment. In most cases the optimality criterion is </span><span class="rvts34">the number of frame where the target event of the segment occurs</span><span class="rvts21">. To detect the frame, TASer moves the Playback cursor while watching the FCEUX screen, and stops this manual search when he detects the beginning of the event of interest. Then the Playback cursor is usually left at this frame, and the TASer starts to change the Input on the segment (above the Playback cursor), hoping to improve the old approach and get the same event at an earlier frame.</span></p>
<p class="rvps10"><span class="rvts21">While changing Input, the Greenzone becomes truncated and the Playback cursor jumps up. When the TASer believes that the Input was changed enough, he starts checking the game Output in order to determine at which frame the target event occurs now. For this, he moves the Playback cursor again while watching the FCEUX screen.</span></p>
<p class="rvps10"><span class="rvts21">To conclude an improvement, the TASer needs to compare the old frame number (detected last time) and the new number, detected just recently. Taseditor visualizes this data to the user, so that he doesn't need to keep the numbers in mind. The new number is indicated by the Playback cursor, the old number is shown by the green arrow.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps14"><span class="rvts21">Полное название зелёной стрелки утерянная позиция Курсора Проигрывателя.</span></li>
<li class="rvps14"><span class="rvts21">Более адекватной заменой зелёной стрелке служат Маркеры и Закладки, устанавливаемые вручную.</span></li>
<li class="rvps14"><span class="rvts21">Иконка зелёной стрелки отображается в столбце иконок Piano Roll.</span></li>
<li class="rvps14"><span class="rvts21">При рисовании иконок в Piano Roll зелёная стрелка имеет более высокий приоритет над голубой стрелкой (иконкой Курсора Проигрывателя), так как положение голубого курсора можно определить и по другим столбцам.</span></li>
<li class="rvps14"><span class="rvts21">Зелёная стрелка появляется на кадре вместо Курсора Проигрывателя в момент усечения Гринзоны. И она остаётся на этом кадре до тех пор, пока не будет произведена следующая последовательность событий:</span></li>
<li class="rvps10"><span class="rvts21">Thus the actual name of the green arrow is "last position of the Playback cursor".</span></li>
<li class="rvps10"><span class="rvts21">The more universal replacement of the green arrow would be Bookmarks and Markers that can be set manually.</span></li>
<li class="rvps10"><span class="rvts21">The icon of the green arrow appears in the icons column of the Piano Roll. When drawing icons in Piano Roll, the green arrow has priority over the blue arrow (the Playback cursor icon), since the position of the blue cursor can be defined by the other columns.</span></li>
<li class="rvps10"><span class="rvts21">The green arrow appears on the frame of the Playback cursor at the moment of Greenzone truncation. And it remains on that frame until the user performs the following sequence of actions:</span></li>
</ul>
<ol style="text-indent: 30px; margin-left: 40px; list-style-position: inside;">
<li class="rvps14"><span class="rvts21">эмуляция хотя бы одного кадра (подразумевается, что пользователь запустил просмотр участка)</span></li>
<li class="rvps14"><span class="rvts21">следующее отступление Курсора Проигрывателя из-за усечения Гринзоны</span></li>
<li class="rvps10"><span class="rvts21">emulate at least one frame (the user started viewing the segment)</span></li>
<li class="rvps10"><span class="rvts21">truncate the Greenzone and jump up with the Playback cursor again</span></li>
</ol>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps14"><span class="rvts21">Таким образом, зелёная стрелка не меняет своё положение, когда ещё до запуска эмуляции Гринзона усекается повторно (например, ТАСер изменил Ввод на кадре 90, а затем на кадре 80, но зелёная стрелка так и осталась на кадре 100).</span></li>
<li class="rvps14"><span class="rvts21">Также зелёная стрелка не меняет своё положение, когда Гринзона усекается во время добегания, и эмулятор в этот момент не стоит на паузе.</span></li>
<li class="rvps14"><span class="rvts21">Зелёная стрелка не меняет своё положение при операциях </span><a class="rvts27" href="Operations.html#AdjustLag">AdjustLag</a><span class="rvts21">, </span><a class="rvts27" href="Operations.html#Branch">Branch</a><span class="rvts21">, </span><a class="rvts27" href="Operations.html#Record">Record</a><span class="rvts21">.</span></li>
<li class="rvps14"><span class="rvts21">При нажатии средней кнопки мыши запускается добегание к зелёной стрелке, если она находится за пределами Гринзоны.</span></li>
<li class="rvps10"><span class="rvts21">Thus the green arrow will not change its position when the Greenzone is truncated twice in a row without an emulation between (e. g. the TASer changed Input on the frame 90 and then on the frame 80, but the green arrow remains on the frame 100).</span></li>
<li class="rvps10"><span class="rvts21">Also, the green arrow does not change its position when the Greenzone is truncated during seeking, granted that the emulator is unpaused at the moment.</span></li>
<li class="rvps10"><span class="rvts21">The green arrow does not change its position during operations </span><a class="rvts27" href="Operations.html#AdjustLag">AdjustLag</a><span class="rvts21">, </span><a class="rvts27" href="Operations.html#Branch">Branch</a><span class="rvts21">, </span><a class="rvts27" href="Operations.html#Record">Record</a><span class="rvts21">.</span></li>
<li class="rvps10"><span class="rvts21">When you press the middle mouse button, the Playback starts seeking to the green arrow, if the arrow is outside the Greenzone. But if the arrow is inside the Greenzone, it means the current segment has been already watched, and the automatic pause on the green arrow is not needed anymore.</span></li>
</ul>
<p class="rvps14"><a name="AutoRestoring"></a>
<p class="rvps10"><a name="AutoRestoring"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Автоматическое восстановление последней позиции</span></p>
<p class="rvps10"><span class="rvts22">Auto-restore last position</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">При создании любых ТАСов критерием оптимальности может быть состояние игры на одном и том же кадре, либо ход событий на одном и том же участке. ТАСер просматривает участок и оставляет Курсор Проигрывателя на последнем кадре участка, затем изменяет Ввод на участке и опять просматривает участок, останавливая Курсор Проигрывателя на том же самом кадре. Вывод об улучшении ТАСер делает либо во время просмотра событий участка, либо после остановки эмуляции, оценивая характеристики последнего кадра.</span></p>
<p class="rvps10"><span class="rvts21">Этот процесс можно автоматизировать, автоматически запуская добегание к утерянной позиции Курсора Проигрывателя после каждого усечения Гринзоны. Для этого служит галочка "Auto-restore last position".</span></p>
<p class="rvps10"><span class="rvts21">When making any TAS, the optimality criterion may be either </span><span class="rvts34">the game state on a certain frame</span><span class="rvts21">, or </span><span class="rvts34">the sequence of events on the segment</span><span class="rvts21">. TASer watches the segment and leaves the Playback cursor on the last frame of the segment, then he changes the segment Input and watches the segment again, stopping the Playback cursor on the same frame as last time. TASer makes the conclusion about the improvement either while watching the segment events, or after stopping the emulation and evaluating the properties of the final frame.</span></p>
<p class="rvps10"><span class="rvts21">That process can be automated by auto-starting the seeking to the green arrow after every Greenzone truncation. The "Auto-restore last position" checkbox serves for this purpose.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps14"><span class="rvts21">Когда галочка установлена, сразу после усечения Гринзоны запускается добегание к последней позиции Курсора Проигрывателя.</span></li>
<li class="rvps14"><span class="rvts21">Если Гринзона была усечена во время добегания, при усечении будет продолжено добегание к целевому кадру, а не к текущему положению Курсора Проигрывателя. Но если во время усечения Гринзоны добегание стоит на паузе, это добегание отменяется, и будет запущено добегание к утерянной позиции Курсора Проигрывателя. Подразумевается, что если ТАСер не дождался окончания добегания, поставил эмулятор на паузу и начал изменять Ввод на участке, то он сосредоточился на подучастке, поэтому дальнейший автоматический просмотр будет запускаться именно для этого подучастка.</span></li>
<li class="rvps14"><span class="rvts21">Автовосстановление не запускается при операциях </span><a class="rvts27" href="Operations.html#AdjustLag">AdjustLag</a><span class="rvts21">, </span><a class="rvts27" href="Operations.html#Branch">Branch</a><span class="rvts21">, </span><a class="rvts27" href="Operations.html#Record">Record</a><span class="rvts21">. При срабатывании операции </span><a class="rvts27" href="Operations.html#AdjustLag">AdjustLag</a><span class="rvts21"> продолжается проигрывание мувика.</span></li>
<li class="rvps10"><span class="rvts21">When the checkbox is enabled, the Playback starts seeking to the green arrow right after the Greenzone truncation.</span></li>
<li class="rvps10"><span class="rvts21">If the Greenzone was truncated during seeking, the original seeking will be resumed without changing the target frame. But if the seeking was paused at the moment of the Greenzone truncation, the original seeking is canceled and a new seeking will start, targeting the green arrow. The implication is that if TASer did not wait for the finish of seeking, and instead he paused the emulator and started to change the Input on the current segment, then TASer has focused on a subsegment, so the further auto-restore should run only for this subsegment.</span></li>
<li class="rvps10"><span class="rvts21">Auto-restoring does not start during operations </span><a class="rvts27" href="Operations.html#AdjustLag">AdjustLag</a><span class="rvts21">, </span><a class="rvts27" href="Operations.html#Branch">Branch</a><span class="rvts21">, </span><a class="rvts27" href="Operations.html#Record">Record</a><span class="rvts21">. When the </span><a class="rvts27" href="Operations.html#AdjustLag">AdjustLag</a><span class="rvts21"> operation fires off, the movie playing is not affected.</span></li>
</ul>
<p class="rvps10"><a name="Recorder"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Мультитрекинг-рекордер</span></p>
<p class="rvps10"><span class="rvts22">Multitrack Recorder</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Рекордер это собрание всех функций по редактированию Ввода на кадре под Курсором Проигрывателя. Рекордер предоставляет ТАСеру второй способ редактирования Ввода Запись.</span></p>
<p class="rvps10"><span class="rvts21">The Recorder is a meeting of all functions for editing Input on the frame pointed by the Playback cursor. The Recorder provides TASer with the second way to edit Input by recording.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps14"><span class="rvts21">Мультитрекинг позволяет ТАСеру в режиме Записи изменять данные только одного выбранного джойстика, оставляя данные других джойстиков на этом же кадре нетронутыми. Подробнее см. </span><a class="rvts27" href="Toolbox.html#multitracking">Панель инструментов</a><span class="rvts21">.</span></li>
<li class="rvps14"><span class="rvts21">Когда включен режим Записи, перед началом каждого кадра эмулятор опрашивает виртуальные джойстики и записывает данные в текущий мувик. Затем сразу же передаёт управление Рекордеру.</span></li>
<li class="rvps14"><span class="rvts21">Рекордер:</span></li>
<li class="rvps10"><span class="rvts21">Multitracking allows TASer to change the data of only one selected joypad in Recording mode, leaving the other joypads data on the same frames intact. For details, see </span><a class="rvts27" href="Toolbox.html#multitracking">Toolbox</a><span class="rvts21">.</span></li>
<li class="rvps10"><span class="rvts21">When Recording mode is on, at the beginning of every frame the emulator polls virtual joypads and writes the data to the current movie. Then it immediately passes control to the Recorder.</span></li>
<li class="rvps10"><span class="rvts21">Recorder:</span></li>
</ul>
<ul style="text-indent: 30px; margin-left: 40px; list-style-position: inside;">
<li class="rvps14"><span class="rvts21">использует данные из мувика на кадре Курсора Проигрывателя в качестве записываемых данных, либо (если идёт Запись по шаблону, и сейчас надо записывать отсутствие нажатий) использует ноль в качестве записываемых данных</span></li>
<li class="rvps14"><span class="rvts21">сравнивает записываемые данные со старыми данными, хранящимися в Журнале Истории</span></li>
<li class="rvps14"><span class="rvts21">накладывает на изменения фильтр, соответствующий выбранному режиму мультитрекинга</span></li>
<li class="rvps14"><span class="rvts21">избирательно объединяет старые данные с новыми, в соответствии с галочкой "Superimpose"</span></li>
<li class="rvps14"><span class="rvts21">сохраняет реальные изменения в текущий мувик</span></li>
<li class="rvps14"><span class="rvts21">вызывает добавление пункта в Журнал Истории и усечение Гринзоны</span></li>
<li class="rvps14"><span class="rvts21">затем возвращает управление эмулятору</span></li>
<li class="rvps10"><span class="rvts21">uses the data from the movie (from the frame under the Playback cursor) as newly recorded data, or (if recording the pattern, and "no presses" need to be recorded now) uses nil as the newly recorded data</span></li>
<li class="rvps10"><span class="rvts21">compares the newly recorded data to the old data stored in the History Log</span></li>
<li class="rvps10"><span class="rvts21">imposes the filter over the changes, according to the currently selected multitracking mode</span></li>
<li class="rvps10"><span class="rvts21">selectively combines old and new data, according to the "Superimpose" checkbox</span></li>
<li class="rvps10"><span class="rvts21">saves the resultant changes to the current movie</span></li>
<li class="rvps10"><span class="rvts21">calls the History Log to let it create a new item and then truncates the Greenzone</span></li>
<li class="rvps10"><span class="rvts21">returns control to the emulator</span></li>
</ul>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps14"><span class="rvts21">Эмулятор возвращает данные из текущего мувика в виртуальные джойстики, чтобы использовать эти данные для наступающего кадра. Также в этот момент эмулятор запускает записанные команды (сброс и т.д.).</span></li>
<li class="rvps14"><span class="rvts21">В каждом кадре Рекордер получает от эмулятора информацию о зажатых в данный момент кнопках виртуальных джойстиков и подготавливает для Piano Roll информацию о том, какие столбцы в Заголовке Piano Roll должны загораться зелёным светом. Например, если выбрана радиокнопка "2P" и установлена галочка </span><a class="rvts27" href="ProgramCustomization.html#Use1PkeysforallsingleRecordings">Use 1P keys for all single Recordings</a><span class="rvts21">, то при нажатии кнопки </span><span class="rvts29">A</span><span class="rvts21"> на первом джойстике в Заголовке Piano Roll будет загораться столбец "A" второго джойстика. А если в предыдущем кадре кнопка </span><span class="rvts29">A</span><span class="rvts21"> не была зажата, то Рекордер воспринимает это как нажатие кнопки, и в соответствии с галочкой </span><a class="rvts27" href="ProgramCustomization.html#UseInputkeysforColumnSet">Use Input keys for Column Set</a><span class="rvts21"> вызывает либо установку/снятие Ввода в Выделении, либо установку Ввода в Выделении по шаблону (если зажат </span><span class="rvts30">Alt</span><span class="rvts21">).</span></li>
<li class="rvps10"><span class="rvts21">Emulator returns the current movie data (from the frame under the Playback cursor) to virtual joypads, in order to use the data for the frame emulation. Also, at this moment the emulator executes the recorded commands (reset, etc.).</span></li>
<li class="rvps10"><span class="rvts21">Each frame, the Recorder gets information from the emulator about the currently pressed buttons of virtual joypads and prepares certain information for the Piano Roll, the information about which columns in the Piano Roll Header should glow green. For example, if you have selected the "2P" radiobutton and checked the "</span><a class="rvts27" href="ProgramCustomization.html#Use1PkeysforallsingleRecordings">Use 1P keys for all single Recordings</a><span class="rvts21">", that means when you press </span><span class="rvts29">A</span><span class="rvts21"> on the first joypad, the Piano Roll Header will highlight the "A" symbol of the second joypad. And if the </span><span class="rvts29">A</span><span class="rvts21"> button wasn't held in previous frame, the Recorder considers this in accordance with the "</span><a class="rvts27" href="ProgramCustomization.html#UseInputkeysforColumnSet">Use Input keys for Column Set"</a><span class="rvts21"> checkbox.</span></li>
</ul>
<p class="rvps10"><a name="Lua"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Lua-автоматизация</span></p>
<p class="rvps10"><span class="rvts22">Lua automation</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Lua позволяет пользователю расширить возможности Тасэдитора, в частности, предоставляет ТАСеру третий способ редактирования Ввода автоматическая генерация.</span></p>
<p class="rvps10"><span class="rvts21">Lua allows the user to expand Taseditor capabilities, in particular, it provides the TASer with the third way to edit Input by automatic generation.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps14"><span class="rvts21">Интерпретатор Lua-функций вызывает соответствующую функцию Тасэдитора не напрямую, а через луа-шлюз Тасэдитора (taseditor_lua).</span></li>
<li class="rvps14"><span class="rvts21">При срабатывании какой-либо функции из библиотеки "taseditor" луа-интерпретатор берёт входные данные из стека, при необходимости конвертирует их в формат, принимаемый луа-шлюзом Тасэдитора, и передаёт их соответствующей функции луа-шлюза Тасэдитора.</span></li>
<li class="rvps14"><span class="rvts21">Луа-шлюз Тасэдитора вызывает соответствующие функции Тасэдитора и передаёт полученный результат обратно в луа-интерпретатор.</span></li>
<li class="rvps14"><span class="rvts21">Луа-интерпретатор помещает полученные данные в стек, при необходимости конвертируя их в формат, принимаемый луа-кодом.</span></li>
<li class="rvps14"><span class="rvts21">Функции </span><span class="rvts68">submitinputchange()</span><span class="rvts21">, &nbsp;</span><span class="rvts68">submitinsertframes()</span><span class="rvts21"> и </span><span class="rvts68">submitdeleteframes()</span><span class="rvts21"> не вызывают соответствующее изменение мувика, а только создают запись в массиве отложенных заданий, хранящемся в луа-шлюзе Тасэдитора. Все отложенные задания реализуются при вызове </span><span class="rvts68">applyinputchanges()</span><span class="rvts21">. Благодаря этому луа-скрипт может вносить в мувик сразу несколько изменений, создавая только один пункт Журнала Истории.</span></li>
<li class="rvps10"><span class="rvts21">Lua interpreter calls the appropriate Taseditor function not directly but through Taseditor's gateway (taseditor_lua).</span></li>
<li class="rvps10"><span class="rvts21">When some function from the "taseditor" library fires off, Lua interpreter takes the arguments data from the stack, converts it to a format accepted by Taseditor's gateway, and sends it to the appropriate function of the Lua gateway of Taseditor.</span></li>
<li class="rvps10"><span class="rvts21">The gateway calls the appropriate functions of Taseditor and sends the result back to the Lua interpreter.</span></li>
<li class="rvps10"><span class="rvts21">Lua interpreter puts the returned data to the stack, converting the data to a format accepted by Lua code if necessary.</span></li>
<li class="rvps10"><span class="rvts21">The functions </span><span class="rvts68">submitinputchange()</span><span class="rvts21">, &nbsp;</span><span class="rvts68">submitinsertframes()</span><span class="rvts21"> and </span><span class="rvts68">submitdeleteframes()</span><span class="rvts21"> do not cause immediate change of the movie data, but only create an entry in the array of the postponed jobs, stored in Taseditor's Lua gateway. All the postponed jobs are executed when the </span><span class="rvts68">applyinputchanges()</span><span class="rvts21"> function is called. Thanks to this, a Lua script can apply many changes to the movie at once, creating only one item in the History Log.</span></li>
</ul>
<p class="rvps10"><a name="BookmarksBranches"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Закладки и ответвления</span></p>
<p class="rvps10"><span class="rvts22">Bookmarks and branches</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Закладки являются специализированной альтернативой Маркерам. А ответвления служат для хранения нескольких мувиков в одном проекте. Для упрощения создания и навигации по ответвлениям они привязаны к Закладкам, по аналогии с традиционными сохранениями.</span></p>
<p class="rvps10"><span class="rvts21">Bookmarks are a specialized alternative to Markers. And branches are needed to store several movies in a single project. So, to simplify the creation and navigation through branches, they are assigned to Bookmarks, by analogy with the traditional savestates.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps14"><span class="rvts21">В проекте может храниться не более 10 Закладок. Это ограничение связано с количеством цифровых клавиш на клавиатуре. Также такое ограничение позволяет отображать в окне TAS Editor основную информацию сразу обо всех Закладках, без необходимости скроллинга. Кроме того, многолетний опыт традиционного ТАСинга подтверждает, что такого количества слотов для Закладок вполне достаточно для продуктивного ТАСинга. </span></li>
<li class="rvps14"><span class="rvts21">Закладка может быть установлена на любой кадр мувика. Закладки не исчезают, даже когда мувик усекается. Например, если поставить Закладку на кадр 1200, а затем сделать усечение Ввода после кадра 1000, за пределами мувика останется Закладка, при прыжке на которую мувик автоматически расширится до кадра 1200.</span></li>
<li class="rvps14"><span class="rvts21">В Piano Roll Закладки отображаются иконкой с соответствующей цифрой (номером слота). Закладка, хранящая текущее ответвление мувика, отображается голубой цифрой, остальные Закладки отображаются зелёными цифрами.</span></li>
<li class="rvps14"><span class="rvts21">Закладка устанавливается нажатием соответствующего хоткея (для каждого слота есть отдельный хоткей сохранения) либо щелчком правой кнопки мыши по слоту Закладки. При этом Закладка устанавливается на тот кадр, где в данный момент находится Курсор Проигрывателя. Этот номер кадра запоминается в Закладке, и в дальнейшем можно в любой момент отправить Курсор Проигрывателя на этот кадр, щёлкнув левой кнопкой мыши по слоту Закладки или нажав соответствующий хоткей (для каждого слота есть отдельный хоткей прыжка). Прыжок на Закладку не является операцией, так как никаких изменений мувика не происходит.</span></li>
<li class="rvps14"><span class="rvts21">В момент установки Закладки Тасэдитор проверяет, отличаются ли сохраняемые данные от уже содержащихся в этой Закладке данных. Если различий не найдено, операция </span><a class="rvts38" href="Operations.html#Bookmark">Bookmark</a><span class="rvts21"> не производится.</span></li>
<li class="rvps14"><span class="rvts21">Помимо номера кадра в слот устанавливаемой Закладки сохраняются все данные текущего мувика (тип Ввода, Ввод, Горячие Правки, Маркеры). Тем самым в проекте сохраняется текущее ответвление из всех возможных ответвлений мувика. В дальнейшем мувик будет многократно изменён, но пользователь сможет в любой момент вернуться к состоянию мувика, сохранённому в данной Закладке.</span></li>
<li class="rvps14"><span class="rvts21">В слот устанавливаемой Закладки сохраняются дополнительные данные, повышающие удобство использования. В частности, скриншот экрана FCEUX на момент создания Закладки позволяет быстро узнавать содержимое Закладки без загрузки её ответвления. А копия одного сэйва из Гринзоны (на закладочном кадре) позволяет после загрузки ответвления сразу же поставить Курсор Проигрывателя на кадр Закладки.</span></li>
<li class="rvps14"><span class="rvts21">После установки закладки она становится текущей (отображается голубой цифрой), так как её ответвление более остальных похоже на текущий мувик.</span></li>
<li class="rvps14"><span class="rvts21">При смене текущего мувика на ответвление из Закладки происходит изменение Ввода, поэтому Гринзона усекается, начиная с первого отличающегося кадра. Но благодаря хранящемуся в Закладке сэйву в Гринзону возвращается один сэйв на кадре, где и установлена эта Закладка. Поэтому "прыжок на Закладку во времени" всегда мгновенно перемещает Курсор Проигрывателя на кадр Закладки, в то время как прыжок на Закладку в пространстве (без изменения мувика) может потребовать добегания.</span></li>
<li class="rvps14"><span class="rvts21">Все операции с Закладками (установка, прыжок, загрузка) производятся после окончания эмуляции текущего кадра, даже если сигнал от пользователя сработает в середине кадра.</span></li>
<li class="rvps14"><span class="rvts21">Для отображения основных Данных закладок используется Список (Listview) без скроллинга, содержащий 10 строк и 3 столбца. при создании нового проекта все 10 Закладок пустые, поэтому второй и третий столбец Списка Закладок будут пустовать.</span></li>
<li class="rvps14"><span class="rvts21">В первом столбце Списка Закладок отображается номер слота, которому соответствует данная строка. Номер отображается как и в Piano Roll с помощью цифровых иконок зелёного или голубого цвета. Нумерация слотов идёт в таком порядке: 1, 2, 3, 4, 5, 6, 7, 8, 9, 0. Этот порядок нужен, чтобы не нарушать ассоциацию с цифровыми клавишами на клавиатуре, которыми пользователь может контролировать Закладки.</span></li>
<li class="rvps14"><span class="rvts21">Во втором столбце Списка Закладок отображается номер кадра, на который установлена Закладка.</span></li>
<li class="rvps14"><span class="rvts21">В третьем столбце Списка Закладок отображается реальное время установки Закладки.</span></li>
<li class="rvps14"><span class="rvts21">Список Закладок разделяется вертикальной чертой примерно пополам. Левая часть (где располагается первый и второй столбец Списка) ассоциируется с закладочным функционалом Закладок. Правая часть (где располагается третий столбец) ассоциируется с ответвлениями, хранящимися в Закладках. Левая часть отображается более светлым оттенком, правая более тёмным. Щелчок левой кнопкой мыши по левой половине означает прыжок на Закладку, а щелчок по правой половине загрузку ответвления.</span></li>
<li class="rvps14"><span class="rvts21">Строки Списка Закладок окрашиваются цветами, соответствующими цветам строк Piano Roll, на которых установлены эти Закладки. Например, если Закладка установлена на кадре 1000, и на этом кадре в данный момент находится Курсор Проигрывателя, то в Списке Закладок строчка этой Закладки будет нарисована голубым цветом. Эта фича даёт пользователю дополнительную информацию о расположении Закладок в мувике.</span></li>
<li class="rvps14"><span class="rvts21">Вместо постоянного просмотра Списка Закладок можно переключать вид на Дерево ответвлений. Переключение осуществляется щелчком по заголовку, расположенному над Списком Закладок.</span></li>
<li class="rvps14"><span class="rvts21">Дерево ответвлений это графическое представление взаимосвязей между ответвлениями всех Закладок в проекте. Обычно Закладки создаются по мере создания мувика, поэтому более поздние Закладки хранят ответвление, начальная часть которого совпадает с ответвлениями более ранних Закладок. Для каждой Закладки можно найти "родительскую" Закладку, из мувика которой, вероятнее всего, произошёл мувик данной Закладки. В результате все Закладки выстраиваются в иерархическую структуру, в начале которой находится корень (отображается в виде тучки), являющийся родителем Закладок, для которых не нашлось родителя. Поиск родителей для Закладок осуществляется при каждом изменении любой Закладки. При поиске учитывается номер кадра, на котором установлена каждая Закладка. Благодаря этому в начале иерархии находятся Закладки с наименьшим номером кадра.</span></li>
<li class="rvps14"><span class="rvts21">При установке Закладки она становится текущей, и её содержимое ничем не отличается от текущего мувика. Но после внесения изменений в мувик текущая Закладка уже будет отличаться, поэтому в Дереве ответвлений появляется фаербол, сообщающий об этом. Фаербол символизирует текущий мувик, однако его родителем всегда считается текущая Закладка. Реального поиска лучшего родителя не производится, так как пришлось бы после каждой модификации мувика запускать сравнение его Ввода со всеми Закладками, что признано слишком ресурсоёмким.</span></li>
<li class="rvps14"><span class="rvts21">Закладки в Дереве ответвлений отображаются цифровыми иконками (как и в Piano Roll). Текущая Закладка отображается голубой цифрой. Связи между Закладками отображаются тонкими линиями. Для текущей Закладки формируется последовательность красных линий, связывающих все закладки, при загрузке которых не будет изменения Ввода (то есть как минимум от начального кадра до кадра загружаемой Закладки Ввод будет совпадать с Вводом, хранящимся в текущей Закладке). Эти красные линии идут от тучки к текущей Закладке, либо ещё далее к наследникам текущей Закладки, когда ответвление текущей Закладки содержит тот же самый Ввод, который содержится в ответвлениях этих наследников вплоть до кадра Закладки.</span></li>
<li class="rvps14"><span class="rvts21">Благодаря расположению Закладок по возрастанию их номера кадра, последовательность красных линий можно воспринимать как хронологию текущего мувика. Началом этой хронологии служит тучка, при щелчке по ней Курсор проигрывателя посылается на начало мувика. Закладки, нанизанные на красную нить, являются промежуточными этапами этой хронологии, при щелчке по ним Курсор Проигрывателя посылается на кадр указанной Закладки. Фаербол (если он есть) считается концом текущей хронологии, и при щелчке по нему Курсор Проигрывателя посылается в конец мувика. Также любое положения Курсора Проигрывателя можно проецировать на эту хронологическую линию, найдя две Закладки, между кадрами которых располагается Курсор Проигрывателя, и переведя расстояние, измеряемое в кадрах, в пиксели. В результате текущее положение Курсора Проигрывателя постоянно отображается в Дереве ответвлений в виде маленького голубого треугольника (по аналогии с иконкой Курсора Проигрывателя в Piano Roll).</span></li>
<li class="rvps14"><span class="rvts21">Аналогично просмотру текущей хронологии можно быстро увидеть альтернативную хронологию для любой Закладки, наведя на неё курсор мыши (будет отображаться синими линиями).</span></li>
<li class="rvps14"><span class="rvts21">Маркеры, содержащиеся в ответвлениях Закладок, не влияют на процесс поиска родителей и формирования Дерева.</span></li>
<li class="rvps14"><span class="rvts21">Все данные Закладок сохраняются и загружаются из файла проекта. Для Дерева ответвлений сохраняются и загружаются только кэшированные данные о номере первого кадра различий во Вводе для каждой пары Закладок. Исходя из этих данных Тасэдитор легко восстанавливает иерархию родительских отношений между закладками. А если эти данные отсутствуют, Тасэдитору придётся произвести сравнение Ввода всех Закладок относительно друг друга.</span></li>
<li class="rvps10"><span class="rvts21">A project can store up to 10 Bookmarks. This limitation is due to the number of the numeric keys on the keyboard. Also, such a restriction allows Taseditor to display basic information about all the Bookmarks at once, with no need for scrolling. In addition, the long-term experience of traditional TASing confirms that this number of slots for Bookmarks is enough for productive TASing.</span></li>
<li class="rvps10"><span class="rvts21">A Bookmark can be set at any frame of the movie. Bookmarks will not disappear even when the movie is truncated. For example, if you set a Bookmark to the frame 1200 and then truncate the Input after frame 1000, a Bookmark will remain beyond the movie boundary, and if you jump to the Bookmark, the movie will expand to frame 1200.</span></li>
<li class="rvps10"><span class="rvts21">Bookmarks are displayed in the Piano Roll as icons with corresponding digits (slot numbers). A Bookmark that corresponds the current movie branch is shown by the blue-colored digit, other Bookmarks are displayed by green digits.</span></li>
<li class="rvps10"><span class="rvts21">A Bookmark can be set by pressing the corresponding hotkey (each slot has a dedicated hotkey for saving) or by right-click on the Bookmark slot. The Bookmark is set to the frame where the Playback cursor currently is. This frame number is stored in the Bookmark, and in the future you can always send the Playback cursor on that frame by clicking with the left mouse button over the Bookmark slot, or pressing the hotkey (each slot has a dedicated hotkey for jumping). "Jump to Bookmark" is not an operation, because no change is made to the movie.</span></li>
<li class="rvps10"><span class="rvts21">When setting a Bookmark, Taseditor checks whether the newly saved data differs from the data already contained in this Bookmark slot. If there's no difference, the </span><a class="rvts27" href="Operations.html#Bookmark">Bookmark</a><span class="rvts21"> operation is not performed.</span></li>
<li class="rvps10"><span class="rvts21">In addition to storing the frame number, all movie data is also stored in the Bookmark slot (Input type, Input, Hot Changes, Markers). In future, the current movie may be changed many times, but you can always return back to the state of the movie stored in this Bookmark.</span></li>
<li class="rvps10"><span class="rvts21">In addition, each Bookmark also stores the screenshot of the FCEUX screen at the time of bookmarking, allowing you to quickly see the contents of the Bookmark without loading it. Also it stores a copy of one savestate from the Greenzone (on the bookmarked frame), allowing to immediately put the Playback cursor on the Bookmark frame after loading the branch.</span></li>
<li class="rvps10"><span class="rvts21">After setting a Bookmark, the Bookmark becomes current (shown with a blue-colored digit), because its branch is closer to the current movie than the other branches.</span></li>
<li class="rvps10"><span class="rvts21">Whenever the current movie is changed to a bookmarked branch, the Input change occurs, so the Greenzone is truncated after the first different frame. But thanks to the savestate stored inside the Bookmark, one savestate returns back to the Greenzone on the bookmarked frame. Therefore, when loading a Bookmark you always immediately move the Playback cursor to the bookmarked frame, while jumping to a Bookmark (without changing the movie) may require seeking.</span></li>
<li class="rvps10"><span class="rvts21">All Bookmark operations (setting, jumping, loading) are executed only after the emulation of the current frame, even if the signal from the user comes in the middle of the frame.</span></li>
<li class="rvps10"><span class="rvts21">To display the basic Bookmark data, Taseditor uses the Listview with disabled scrolling. The List contains 10 rows and 3 columns. When creating a new project, all 10 Bookmarks are empty, so the 2nd and the 3rd columns in the Bookmark List are empty.</span></li>
<li class="rvps10"><span class="rvts21">The 1st column of the Bookmarks List displays the slot number that corresponds to the given line. The number is displayed the same way it is displayed in the Piano Roll i.e. with digit icons of green or blue color. The numbering of slots goes in this order: 1, 2, 3, 4, 5, 6, 7, 8, 9, 0. This order is necessary, so that user doesn't lose the association with the numeric keys on the keyboard.</span></li>
<li class="rvps10"><span class="rvts21">The 2nd column of the Bookmarks List displays the bookmarked frame number.</span></li>
<li class="rvps10"><span class="rvts21">The 3rd column of the Bookmarks List displays the real time when the Bookmark was created.</span></li>
<li class="rvps10"><span class="rvts21">The Bookmarks List is divided in half with a vertical bar. The left side (which contains the 1st and the 2nd column of the List) is associated with bookmarking functionality of the Bookmarks. The right side (the 3rd column) is associated with branching functionality of the Bookmarks. The left side is displayed in a lighter shade, the right one in the darker. Left-clicking on the left side means a jump to the Bookmark, and left-click on the right side is loading the branch of the Bookmark.</span></li>
<li class="rvps10"><span class="rvts21">Bookmarks List lines are painted in colors, matching the bookmarked Piano Roll lines. For example, if the Bookmark is set on the frame 1000, and the Playback cursor is currently on that frame, this line will be drawn in light-blue color in the the Bookmarks List. This feature gives the user some additional information about the Bookmarks location in the movie.</span></li>
<li class="rvps10"><span class="rvts21">Instead of constant viewing of the Bookmarks List, the user can switch to the Branches Tree. Switching is done by clicking on the caption above the Bookmarks List.</span></li>
<li class="rvps10"><span class="rvts21">Branches Tree is a graphical representation of the relationship between the branches of all Bookmarks in the project. Bookmarks are usually set during the movie creation, so the later Bookmarks contain the branch the initial part of which coincides with earlier Bookmarks branches. For each Bookmark you can find the "parent" Bookmark, whose movie likely gave birth to this Bookmark movie. As a result, Bookmarks can be arranged in a hierarchical structure, the beginning of which is the root (shown as a cloudlet), that is a parent for Bookmarks that have no parent. Searching for Bookmarks parents re-occurs after every change in Bookmarks. The search is guided by numbers of the bookmarked frames, so the beginning of the hierarchy will contain the Bookmarks with the lowest frame number.</span></li>
<li class="rvps10"><span class="rvts21">Markers contained in the Bookmarks do not affect the algorithm of searching for parents. The parent is found by comparing the Input.</span></li>
<li class="rvps10"><span class="rvts21">When you set a Bookmark, it becomes current, and its contents are no different from the current movie. But after some editing of the movie it will become different from the current Bookmark, so the Branches Tree will show the fireball to report the difference. The fireball symbolizes the current movie, and the current Bookmark is always considered to be its parent. There's no real search for the best parent of the fireball, because such search would need to be done after every movie modification, and it would require comparing the current movie to the Input of each Bookmark, that is too resource-intensive.</span></li>
<li class="rvps10"><span class="rvts21">Bookmarks in the Branches tree are displayed as digit icons (like in the Piano Roll). Current Bookmark is displayed as a blue-colored digit. Bookmarks relation is shown in thin lines. For the current Bookmark there is a sequence of the red lines that connect all the Bookmarks which will not change the current movie Input if you load the Bookmark (because at least up to the bookmarked frame the loaded Input will be the same as the Input stored in the current Bookmark). These red lines go from the cloudlet to the current Bookmark or even further to the heirs of the current Bookmark (if the current Bookmark contains the same Input as these successors).</span></li>
<li class="rvps10"><span class="rvts21">Due to how the Bookmarks are located in ascending order of bookmarked frame numbers, the sequence of the red lines can be interpreted as a timeline of the current movie. The cloudlet is the beginning of this timeline, by clicking on it the Playback cursor is sent to the beginning of the movie. The Bookmarks sitting on the red thread are the intermediate stages of that timeline, by clicking on them the Playback cursor is sent to the bookmarked frames. The fireball (if exists) is considered to be the end of the timeline, and when you click on it the Playback cursor is sent to the end of the movie.</span></li>
<li class="rvps10"><span class="rvts21">Thus, any position of the Playback cursor can be projected onto this timeline by finding the two Bookmarks which contain the Playback cursor in between, and then converting the distance from frames to pixels. As a result, the current Playback cursor position is always displayed in the Branches Tree as a small blue triangle (similar to the Playback cursor icon in Piano Roll).</span></li>
<li class="rvps10"><span class="rvts21">If you need to see the alternative timeline of any Bookmark. hover the mouse cursor over it (the timeline will be displayed by blue lines).</span></li>
<li class="rvps10"><span class="rvts21">All Bookmarks data is saved and loaded from the project file. As for the Branches Tree, Taseditor only saves the cached data about the number of the first frame of difference in the Input for each pair of Bookmarks. Based on this data, Taseditor easily restores the hierarchy of parent relation between the Bookmarks. And if this data is not available, Taseditor will have to redo the comparison of Input.</span></li>
</ul>
<p class="rvps10"><a name="PopupWindows"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Всплывающие окна</span></p>
<p class="rvps10"><span class="rvts22">Pop-up windows</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Служат для показа контекстозависимой информации, которая нужна только в определённые моменты времени.</span></p>
<p class="rvps10"><span class="rvts21">They are used to display the context-sensitive information that is needed only at certain moments of time.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">В TAS Editor 1.0 реализовано только два вида всплывающих окон: скриншоты к Закладкам и текстовые описания к Закладкам. Оба окна всплывают при наведении курсора мыши либо на правую половину Списка Закладок, либо на любую иконку (карточку) Закладки в Дереве ответвлений.</span></li>
<li class="rvps10"><span class="rvts21">Оба окна появляются (по альфа-каналу) в течение примерно полусекунды после наведения курсора мыши на активный элемент. Исчезают так же в течение примерно полусекунды после уведении курсора от элемента.</span></li>
<li class="rvps10"><span class="rvts21">В </span><a class="rvts27" href="ProgramCustomization.html#DisplayBranchScreenshots">настройках</a><span class="rvts21"> можно отключить тот или другой тип всплывающих окон.</span></li>
<li class="rvps10"><span class="rvts21">В окне </span><span class="rvts25">скриншота</span><span class="rvts21"> отображается сохранённая в указанной Закладке копия экрана FCEUX на момент создания Закладки. В зависимости от настройки </span><a class="rvts27" href="ProgramCustomization.html#HUDinBranchscreenshots">HUD in Branch screenshots</a><span class="rvts21"> в Закладку сохраняется либо просто содержимое буфера экрана эмулируемой приставки, либо изображение экрана приставки с наложенными данными эмулятора. Скриншоты служат для быстрой оценки содержимого Закладки, а также для сравнения альтернативных стратегий.</span></li>
<li class="rvps10"><span class="rvts21">В окне </span><span class="rvts25">описания</span><span class="rvts21"> отображается текстовое поле, по ширине равное ширине верхнего и нижнего текстового поля для редактирования Заметок. В поле отображается текст Заметки Маркера, взятого из ответвления указанной Закладки. Маркер определяется номером кадра, на котором установлена эта Закладка.</span></li>
<li class="rvps10"><span class="rvts21">Окно скриншота отображается сбоку от раздела Закладок, окно описания отображается под окном скриншота.</span></li>
<li class="rvps10"><span class="rvts21">При перетаскивании окна TAS Editor всплывающие окна перемещаются вместе с ним (пока не погаснут).</span></li>
<li class="rvps10"><span class="rvts21">Если во время отображения всплывающих окон меняется содержимое указанной Закладки, содержимое всплывающих окон также мгновенно обновляется.</span></li>
<li class="rvps10"><span class="rvts21">TAS Editor 1.0 has only two types of pop-ups: screenshots for Bookmarks and text descriptions for Bookmarks. Both windows pop up when the user is hovering the mouse cursor either over the right side of the Bookmarks List or over any Bookmark icon in the Branches Tree.</span></li>
<li class="rvps10"><span class="rvts21">Both windows appear (with translucency) within about half a second after the mouse cursor was pointed to an active element. They disappear in the similar fashion after moving the cursor off the item.</span></li>
<li class="rvps10"><span class="rvts21">You can turn off one or the other type of pop-ups in the </span><a class="rvts27" href="ProgramCustomization.html#DisplayBranchScreenshots">settings</a><span class="rvts21">.</span></li>
<li class="rvps10"><span class="rvts21">The </span><span class="rvts25">screenshot</span><span class="rvts21"> pop-up window displays a copy of the FCEUX screen made at the time of bookmarking. Depending on the </span><a class="rvts27" href="ProgramCustomization.html#HUDinBranchscreenshots">HUD in Branch screenshots</a><span class="rvts21"> option, the image will be either raw emulated console screen or the console screen with the superimposed emulator on-screen display. Screenshots are used to quickly check the Bookmarks contents and to compare alternative strategies.</span></li>
<li class="rvps10"><span class="rvts21">The </span><span class="rvts25">description</span><span class="rvts21"> pop-up window displays a text field with the width equal to the width of the upper and lower edit fields. That text field shows the Marker Note text taken from the pointed Bookmark branch. The Marker is determined by the bookmarked frame number.</span></li>
<li class="rvps10"><span class="rvts21">The screenshot window is displayed to the left from the Bookmarks section, the description window appears under the screenshot window.</span></li>
<li class="rvps10"><span class="rvts21">When you drag the TAS Editor window, the pop-ups move along with it.</span></li>
<li class="rvps10"><span class="rvts21">If the contents of the displayed Bookmark change while pop-up windows still display the old contents, the pop-up windows will be instantly updated.</span></li>
</ul>
<p class="rvps10"><a name="HistoryLog"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Журнал Истории</span></p>
<p class="rvps10"><span class="rvts22">History Log</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">История всех существенных изменений проекта служит, главным образом, для удобного отката этих изменений, а также для визуального отслеживания этой истории.</span></p>
<p class="rvps10"><span class="rvts21">The logging of all significant changes of the project serves mainly for undo, as well as for visual tracking of the history.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps14"><span class="rvts21">В каждом пункте Журнала Истории хранится полная копия Ввода и Маркеров на момент создания пункта. Также в любом пункте может храниться резервная копия Закладки, если пункт создан из-за операции </span><a class="rvts27" href="Operations.html#Bookmark">Bookmark</a><span class="rvts21">.</span></li>
<li class="rvps14"><span class="rvts21">Данные каждого пункта хранятся в оперативной памяти одновременно в двух видах &nbsp; сжатом и несжатом. Несжатый используется при работе, сжатый сохраняется в fm3-файл. При создании нового пункта Истории он хранится только в несжатом виде, однако каждые полсекунды Тасэдитор проходится по Журналу Истории и создаёт сжатую версию для первого попавшегося пункта без сжатой версии. Таким образом, к моменту сохранения проекта на диск почти все пункты Истории уже имеют сжатую версию, а те, которые не имеют, сжимаются во время сохранения (что немного замедляет процесс сохранения). При загрузке fm3-файла пункты Журнала Истории загружаются в запакованном виде и распаковываются.</span></li>
<li class="rvps14"><span class="rvts21">Благодаря Журналу Истории реализуется поиск первого изменившегося кадра, после которого затем усекается Гринзона. Большинство операций работают таким образом:</span></li>
<li class="rvps10"><span class="rvts21">Each item of the History Log stores a full copy of current Input, Lag and Markers at the time of the item creation. Also, any item can store a backup copy of a Bookmark, if the item was created because of the </span><a class="rvts27" href="Operations.html#Bookmark">Bookmark</a><span class="rvts21"> operation.</span></li>
<li class="rvps10"><span class="rvts21">The data of each item is stored in memory in both compressed and uncompressed state. Uncompressed data is used during work, and its compressed version is saved in fm3 file. When creating a new item in History Log, the data of the item is only stored in an uncompressed form, but every half-second Taseditor goes through the History Log and creates a compressed version of the first found item without a compressed version. Thus, at the time of saving the project to disk, almost all History items already have compressed versions, and those that don't have it will be compressed during saving (which slows down the process of saving). When loading an fm3 file, the History Log is loaded in a compressed form, and is decompressed.</span></li>
<li class="rvps10"><span class="rvts21">Using the History Log, Taseditor implements searching for the first changed frame after which the Greenzone should be truncated. Most </span><a class="rvts27" href="Operations.html">operations</a><span class="rvts21"> work as follows:</span></li>
</ul>
<ul style="text-indent: 30px; margin-left: 40px; list-style-position: inside;">
<li class="rvps14"><span class="rvts21">Вносятся изменения в мувик.</span></li>
<li class="rvps14"><span class="rvts21">Для большинства операций запоминаются минимальный и максимальный номер кадра, в который были внесены изменения.</span></li>
<li class="rvps14"><span class="rvts21">Вызывается регистрация изменений с помощью Истории, минимальный и максимальный кадр передаются в качестве параметров вместе с кодом операции и другими параметрами.</span></li>
<li class="rvps14"><span class="rvts21">История сверяет содержимое текущего мувика с содержимым последнего пункта Журнала Истории. Если задан минимальный кадр, то сверка начинается с этого кадра, игнорируя содержимое мувика до него. Иначе проверяется всё от начала мувика. Если задан максимальный кадр, то сверка заканчивается после этого кадра (но большинство операций не передают максимальный кадр, так как, например, вставка пустого кадра передвигает весь последующий Ввод, и нужно вести проверку до самого конца мувика).</span></li>
<li class="rvps14"><span class="rvts21">Как только обнаруживается первое различие между Вводом/Маркерами мувика и Вводом/Маркерами последнего снимка мувика, создаётся новый пункт в Журнале Истории и заполняются все его атрибуты.</span></li>
<li class="rvps14"><span class="rvts21">Если различия не были обнаружены, то считается, что операция не повлияла на мувик, и никаких изменений в проекте не производится. Например, если записать те же самые нажатия поверх уже имеющихся, операция </span><a class="rvts27" href="Operations.html#Record">Record</a><span class="rvts21"> не будет зарегистрирована.</span></li>
<li class="rvps14"><span class="rvts21">Для операции </span><a class="rvts27" href="Operations.html#Record">Record</a><span class="rvts21"> регистрируется не только номер кадра с изменившимся Вводом, но и номер джойстика, кнопки которого были изменены.</span></li>
<li class="rvps14"><span class="rvts21">Последовательно добавляемые пункты для операций </span><a class="rvts27" href="Operations.html#AdjustLag">AdjustLag</a><span class="rvts21">, </span><a class="rvts27" href="Operations.html#Record">Record</a><span class="rvts21">, </span><a class="rvts27" href="Operations.html#Set">Set</a><span class="rvts21"> и </span><a class="rvts27" href="Operations.html#Unset">Unset</a><span class="rvts21"> могут объединяться в один пункт Журнала Истории, чтобы их было удобнее откатывать в случае необходимости. Объединение производится во время заполнения атрибутов нового пункта Журнала Истории. Вместо добавления этого пункта в конец Журнала происходит замена последнего пункта на новый.</span></li>
<li class="rvps14"><span class="rvts21">После регистрации нового пункта История подаёт сигнал Дереву ответвлений (чтобы на нём появился фаербол) и менеджеру проекта (чтобы в заголовке окна появилась звёздочка), а затем возвращает номер кадра, на котором были обнаружено первое различие.</span></li>
<li class="rvps14"><span class="rvts21">Вызывается усечение Гринзоны после кадра с первым обнаруженным различием. Этот номер может быть больше, чем минимальный номер кадра, в который были внесены изменения самой операцией. Например, если установить нажатия кнопки на всех кадрах в Выделении, минимальным номером кадра будет первый выделенный кадр, но Гринзона будет усечена только после того выделенного кадра, на котором раньше не было нажатия этой кнопки.</span></li>
<li class="rvps10"><span class="rvts21">Edit the current movie data.</span></li>
<li class="rvps10"><span class="rvts21">Remember the minimum and maximum number of changed frame.</span></li>
<li class="rvps10"><span class="rvts21">Call the History to register changes, passing the minimum and maximum frame as parameters, together with the operation code and other parameters.</span></li>
</ul>
<ul style="text-indent: 30px; margin-left: 70px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">The History compares the contents of the current movie with the contents of the last item of the History Log. If the minimum frame is provided, the search begins from that frame, ignoring the previous movie contents (in order to speed up the work). Otherwise everything from the movie beginning is checked. If the maximum frame is set, then the search ends on that frame (but most operations do not pass the maximum frame, since, for example, an insertion of a blank frame shifts all subsequent Input, and we need to check everything up to the end of the movie).</span></li>
<li class="rvps10"><span class="rvts21">Once the History detects the first difference between the Input/Markers of the current movie and the Input/Markers of the previous movie snapshot, it creates a new new item in the History Log and fills all its attributes.</span></li>
<li class="rvps10"><span class="rvts21">If the differences were not found, it is believed that the operation did not affect the movie, and no change in the project is registered. For example, if you record the same buttonpresses over existing ones, the </span><a class="rvts27" href="Operations.html#Record">Record</a><span class="rvts21"> operation will not be registered.</span></li>
<li class="rvps10"><span class="rvts21">Even if an operation didn't change Input/Markers, it could still shift Lag, so the History also compares Lag Logs and returns the first frame of difference.</span></li>
<li class="rvps10"><span class="rvts21">For the </span><a class="rvts27" href="Operations.html#Record">Record</a><span class="rvts21"> operation, the History registers not only the frame number of the changed Input, but also the number of the joypad whose buttons were changed.</span></li>
<li class="rvps10"><span class="rvts21">Consecutively added items for operations </span><a class="rvts27" href="Operations.html#AdjustLag">AdjustLag</a><span class="rvts21">, </span><a class="rvts27" href="Operations.html#Record">Record</a><span class="rvts21">, </span><a class="rvts27" href="Operations.html#Set">Set</a><span class="rvts21"> or </span><a class="rvts27" href="Operations.html#Unset">Unset</a><span class="rvts21"> can be combined into one item of the History Log, to make it easier to roll back when necessary. The combining is done when the History is filling the attributes of the new History Log item. Instead of appending the item to the end of the Log, it replaces the last item by the new one.</span></li>
<li class="rvps10"><span class="rvts21">After the registration of a new item, the History sends a signal to the Branches Tree (to spawn the fireball) and to the project manager (to add an asterisk to the window caption), and then exits, returning the number of the frame of the first difference found. If no difference was found, it returns -1.</span></li>
</ul>
<ul style="text-indent: 30px; margin-left: 40px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">Truncate the Greenzone after the first different frame. This number can be greater than the minimum number of the frame of the changes made by the operation. For example, if you set buttonpresses in all selected frames, the minimum frame will be the first selected frame, but the Greenzone will be truncated only after the frame where the button wasn't pressed before.</span></li>
</ul>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps14"><span class="rvts21">Откат Истории осуществляется как переход с текущего пункта Журнала Истории на предыдущий. Можно сразу прыгать на любой пункт Журнала Истории. Текущий мувик и текущие Маркеры восстанавливаются из данных, содержащихся в этом пункте, а сам пункт становится текущим.</span></li>
<li class="rvps14"><span class="rvts21">Одним из атрибутов каждого пункта Истории является "номер ключевого кадра". Для большинства операций это номер кадра, где обнаружилось первое различие. Для операций, сдвигающих Ввод, это номер минимального кадра.</span></li>
<li class="rvps14"><span class="rvts21">При прыжках по Истории в Piano Roll на полсекунды появляется курсор-указка фиолетового цвета, акцентирующий внимание на ключевом кадре. При откате (undo) этот курсор указывает на ключевой кадр следующего пункта Истории (относительно текущего), при повторе (redo) этот курсор указывает на ключевой кадр текущего пункта истории.</span></li>
<li class="rvps10"><span class="rvts21">The History can be rolled back by jumping from the current History Log item to the previous one. It's possible to directly jump to any item of the History Log. Current movie and current Markers are recovered from the data contained in this item, and the item becomes current.</span></li>
<li class="rvps10"><span class="rvts21">One of the attributes of each History item is the "key frame number". For most operations it's the frame number of the first difference. But for operations that shift Input it will be the number of the minimum frame.</span></li>
<li class="rvps10"><span class="rvts21">When jumping through History Items, a purple pointer appears in the Piano Roll for half a second, focusing the user's attention on the keyframe. When you roll back (undo), the purple cursor points to the keyframe of the next item in History (relative to the current), when you redo, this cursor points to the keyframe of the current History item.</span></li>
</ul>
<p class="rvps10"><a name="RerecordsCounter"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Счётчик перезаписей</span></p>
<p class="rvps10"><span class="rvts22">Rerecord counter</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">По традиции во всех ТАСерских эмуляторах ведётся учёт количества перезаписей, использованных во время создания ТАСа. Это число может использоваться для примерной оценки трудозатрат.</span></p>
<p class="rvps10"><span class="rvts21">By tradition, all TAS emulators keep track of rerecords used during the creation of a TAS. This number can be used to estimate the labor.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps14"><span class="rvts21">Счётчик перезаписей хранится в мувике (а значит и в fm3-файле проекта). При создании нового мувика (либо нового проекта в Тасэдиторе) счётчик обнуляется.</span></li>
<li class="rvps14"><span class="rvts21">При ТАСинге вне Тасэдитора: счётчик увеличивается на единицу каждый раз, когда ТАСер загружает сэйв в режиме Записи, чтобы изменить Ввод на уже просмотренном участке мувика. Счётчик не увеличивается, когда ТАСер записывает Ввод для кадров, события которых ему не известны.</span></li>
<li class="rvps14"><span class="rvts21">При ТАСинге в Тасэдиторе: счётчик увеличивается на единицу каждый раз, когда ТАСер изменяет Ввод на отгринзоненном участке мувика. Счётчик не увеличивается, когда ТАСер изменяет Ввод для кадров, находящихся дальше головы Гринзоны.</span></li>
<li class="rvps14"><span class="rvts21">Таким образом, в обоих случаях ведётся учёт, </span><span class="rvts34">сколько раз ТАСер изменил известное ему будущее</span><span class="rvts21">. Счётчик не увеличивается, когда ТАСер меняет будущее вслепую, то есть до просмотра игровых событий на изменяемых кадрах.</span></li>
<li class="rvps14"><span class="rvts21">В старых эмуляторах счётчик увеличивается прямо в момент загрузки сэйва в режиме Записи, ещё до того, как ТАСер изменяет Ввод. Из-за этого возможна ситуация, когда пользователь несколько раз подряд нажимает хоткей загрузки сэйва (например, </span><span class="rvts26">F1</span><span class="rvts21">), и при каждом нажатии счётчик перезаписей будет увеличиваться. В Тасэдиторе счётчик увеличивается только в момент усечения Гринзоны, независимо от выбранного способа навигации. Поэтому при первом нажатии хоткея загрузки Закладки (например, </span><span class="rvts26">F1</span><span class="rvts21">) счётчик увеличится только в случае, если ответвление этой Закладки отличается от текущего мувика, причём расхождение должно начинаться с уже просмотренного кадра (кадра внутри Гринзоны). А при повторных нажатиях этого хоткея счётчик не будет увеличиваться, так как ответвление Закладки уже не отличается от текущего мувика, и изменения Ввода не происходит.</span></li>
<li class="rvps10"><span class="rvts21">The Rerecord counter is stored in the movie (and hence in an fm3 project file too). When creating a new movie (or a new project in Taseditor) the counter is reset to 0.</span></li>
<li class="rvps10"><span class="rvts34">When TASing outside of Taseditor:</span><span class="rvts21"> the counter increments every time the TASer loads a savestate in the Recording mode, since he wants to change the Input on the previously watched segment of the movie. The counter does not increase when the TASer records Input for frames whose events he does not know.</span></li>
<li class="rvps10"><span class="rvts34">When TASing in Taseditor:</span><span class="rvts21"> the counter increments every time the TASer changes the Input of a previously greenzoned segment of the movie. The counter does not increase when the TASer changes Input for frames that are beyond the Greenzone head.</span></li>
<li class="rvps10"><span class="rvts21">Thus in both cases the emulator keeps track of </span><span class="rvts34">how many times the TASer changed the known future</span><span class="rvts21">. The counter does not increase when the TASer changes the future blindly, i.e. before watching the game events occurring at the frames he edits.</span></li>
<li class="rvps10"><span class="rvts21">In old emulators the counter increases immediately when loading the savestate in the Recording mode, even before the TASer changes Input. Because of this, it is possible that the user repeatedly presses a load savestate hotkey (e.g. </span><span class="rvts26">F1</span><span class="rvts21">), and each time the counter will increase. In Taseditor the counter increments only when truncating the Greenzone, regardless of the navigation method. Therefore, at the first press of the </span><span class="rvts26">F1</span><span class="rvts21"> the counter will increase only if the branch of this Bookmark is different from the current movie, and the difference begins from a greenzoned frame. And the second press of the </span><span class="rvts26">F1</span><span class="rvts21"> will not increase the counter, because now the Bookmark branch does not differ from the current movie, and no Input change is happening.</span></li>
</ul>
<p class="rvps10"><a name="Modifiers"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Система клавиш-модификаторов</span></p>
<p class="rvps10"><span class="rvts22">Modifier keys system</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Для повышения интуитивности клавиатурного управления в Тасэдиторе используется строгое разделение функций клавиш модификаторов:</span></p>
<p class="rvps10"><span class="rvts21">For a more intuitive keyboard control, Taseditor enforces a strict separation of modifier keys functions:</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps14"><span class="rvts30">Shift</span><span class="rvts21"> ассоциируется с </span><a class="rvts27" href="Glossary.html#Output">Выводом</a><span class="rvts21"> мувика, а конкретно с Курсором Проигрывателя. Многие клавиатурные комбинации, содержащие эту клавишу, относятся к управлению этим курсором. Если быстро нажать </span><span class="rvts30">Shift </span><span class="rvts21">два раза подряд, Piano Roll автоматически скроллируется к Курсору Проигрывателя.</span></li>
<li class="rvps14"><span class="rvts30">Ctrl</span><span class="rvts21"> ассоциируется с </span><a class="rvts27" href="Glossary.html#Input">Вводом</a><span class="rvts21"> мувика, а конкретно &nbsp;с Курсором Выделения. Многие клавиатурные комбинации, содержащие эту клавишу, относятся к управлению этим курсором. Если быстро нажать </span><span class="rvts30">Ctrl </span><span class="rvts21">два раза подряд, Piano Roll автоматически скроллируется к Курсору Выделения.</span></li>
<li class="rvps14"><span class="rvts30">Alt</span><span class="rvts21"> ассоциируется с шаблонами и чередующимися последовательностями.</span></li>
<li class="rvps10"><span class="rvts30">Shift</span><span class="rvts21"> is associated with the movie </span><a class="rvts27" href="Glossary.html#Output">Output</a><span class="rvts21">, and specifically with the Playback cursor. Key combinations involving this key usually control the Playback cursor. If you quickly press </span><span class="rvts30">Shift</span><span class="rvts21"> twice, the Piano Roll will automatically scroll to the Playback cursor.</span></li>
<li class="rvps10"><span class="rvts30">Ctrl</span><span class="rvts21"> is associated with the movie </span><a class="rvts27" href="Glossary.html#Input">Input</a><span class="rvts21">, and specifically with the Selection cursor. Key combinations involving this key usually control the Selection. If you quickly press </span><span class="rvts30">Ctrl</span><span class="rvts21"> twice, the Piano Roll will automatically scroll to the Selection cursor.</span></li>
<li class="rvps10"><span class="rvts30">Alt</span><span class="rvts21"> is associated with patterns and alternating sequences, in particular, with gaps in these sequences.</span></li>
</ul>
<p class="rvps10"><a name="Patterns"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Шаблоны</span></p>
<p class="rvps10"><span class="rvts22">Patterns</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Заготовленные последовательности &nbsp;нажатий для одной кнопки. Подробнее см. </span><a class="rvts27" href="AdvancedFeatures.html#UsingPatterns">Продвинутые возможности</a><span class="rvts21">.</span></p>
<p class="rvps10"><span class="rvts21">Prepared sequence of button states for a single button. See more in </span><a class="rvts27" href="AdvancedFeatures.html#UsingPatterns">Advanced Features</a><span class="rvts21">.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps14"><span class="rvts21">Хранятся во внешнем текстовом файле в формате, доступном для редактирования в Блокноте.</span></li>
<li class="rvps14"><span class="rvts21">Формат файла должен быть описан в самом файле. Для каждого шаблона указывается его имя, которое будет отображаться в списке шаблонов.</span></li>
<li class="rvps14"><span class="rvts21">Загружаются из файла в оперативную память в момент открытия окна TAS Editor.</span></li>
<li class="rvps14"><span class="rvts21">В TAS Editor 1.0 нет встроенных средств редактирования шаблонов, так как формат очень прост, а фича не слишком востребована.</span></li>
<li class="rvps14"><span class="rvts21">По шаблону можно устанавливать Ввод, Маркеры и даже Выделение.</span></li>
<li class="rvps14"><span class="rvts21">При установке шаблона может учитываться или не учитываться лаг. Подробнее: </span><a class="rvts27" href="ProgramCustomization.html#AutofirePatternskipsLag">Настройка программы</a></li>
<li class="rvps10"><span class="rvts21">Patterns are stored in an external text file in a format that can be edited in Notepad. The file format should be described in the file itself.</span></li>
<li class="rvps10"><span class="rvts21">Each pattern must have its name, which will appear in the list of patterns.</span></li>
<li class="rvps10"><span class="rvts21">Patterns are loaded from the file at the time of launching the TAS Editor.</span></li>
<li class="rvps10"><span class="rvts21">TAS Editor 1.0 has no built-in Pattern editing, as the format is very simple and that feature is not too much in demand.</span></li>
<li class="rvps10"><span class="rvts21">Input, Markers and even Selection can be set by pattern.</span></li>
<li class="rvps10"><span class="rvts21">When you set a pattern, the current lag log can be taken into account or disregarded. More: </span><a class="rvts27" href="ProgramCustomization.html#AutofirePatternskipsLag">Program Customization</a><span class="rvts21">.</span></li>
</ul>
<p class="rvps10"><a name="CrossingGaps"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Пересечение промежутков</span></p>
<p class="rvps10"><span class="rvts22">Crossing gaps</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Дополнительный способ быстрой навигации по содержимому Piano Roll, облегчающий визуальное прослеживание длинных последовательностей для отдельно взятой кнопки или Маркеров.</span></p>
<p class="rvps10"><span class="rvts21">This is an additional method of quick navigation through the Piano Roll contents. It helps to visually track long sequences of a single button or Markers. Also it allows to move from a Bookmark to another Bookmark.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps14"><span class="rvts21">Пересечение промежутков это вертикальный скроллинг Piano Roll, срабатывающий при вращении колеса мыши с зажатой клавишей </span><span class="rvts30">Alt</span><span class="rvts21">. Конкретная величина скроллинга не зависит от скорости вращения колеса, а рассчитывается каждый раз индивидуально, исходя из ячейки Piano Roll под курсором мыши в данный момент.</span></li>
<li class="rvps14"><span class="rvts21">При зажатом </span><span class="rvts30">Alt</span><span class="rvts21"> имеет значение только направление вращения колеса (вверх или вниз), а не скорость вращения.</span></li>
<li class="rvps14"><span class="rvts21">Пересечение &nbsp;промежутков подразумевает, что пользователь хочет найти ячейку, находящуюся на расстоянии более одного кадра от ячейки под курсором мыши (иначе нет смысла использовать эту функцию, достаточно просто провести курсор мыши чуть выше).</span></li>
<li class="rvps14"><span class="rvts21">Таким образом, при вращении колеса мыши вверх эта функция запоминает значение ячейки, предшествующей ячейке под курсором мыши. Затем функция начинает поиск ячейки, значение которой не совпадает с данным значением. Поиск идёт снизу вверх от ячейки, предшествующей ячейке под курсором мыши. При успешном обнаружении такой ячейки Piano Roll скроллируется таким образом, чтобы курсор мыши теперь указывал на найденную ячейку. Если же поиск дошёл до начала мувика, а ячейка не найдена, то Piano Roll не скроллируется.</span></li>
<li class="rvps14"><span class="rvts21">Аналогично при вращении колеса мыши вниз эта функция запоминает значение ячейки, следующей за ячейкой под курсором мыши. Затем функция начинает поиск ячейки, значение которой не совпадает с данным значением. Поиск идёт сверху вниз от ячейки, следующей за ячейкой под курсором мыши.</span></li>
<li class="rvps10"><span class="rvts21">Crossing gaps is the process of scrolling the Piano Roll vertically, triggered by rolling the mouse wheel while holding down </span><span class="rvts30">Alt</span><span class="rvts21">. The speed of rolling the wheel is irrelevant here, because the actual amount of scrolling is calculated individually based on the state of the Piano Roll cell near the mouse cursor. So only the direction of the wheel rolling is relevant (up or down).</span></li>
<li class="rvps10"><span class="rvts21">Crossing gaps implies that the user wants to find the cell at a distance of more than one frame from the cell under the mouse cursor (otherwise there is no reason to use this feature, because you could simply move your mouse right above).</span></li>
<li class="rvps10"><span class="rvts21">Thus, when the mouse wheel is scrolled up, this feature memorizes the value of the cell above the cell under the mouse cursor. Then it searches for a cell whose value is not equal to a given value. Search goes upwards from the cell above the cell under the mouse. If such a cell is successfully found, the Piano Roll scrolls up so that the mouse cursor is now pointing to the found cell. If the search reached the movie beginning, and the cell was not found, the Piano Roll does not scroll.</span></li>
<li class="rvps10"><span class="rvts21">Similarly, when the mouse wheel is rolled down, this feature memorizes the value of the cell following the cell under the mouse. Then it searches for a cell whose value is not equal to the value. Search goes down from the cell following the cell under the mouse.</span></li>
<li class="rvps10"><span class="rvts21">The memorized value is of a boolean type. E.g. the search considers all icons to have the same value (true), and all empty cells also have the same value (false).</span></li>
</ul>
<p class="rvps10"><a name="SaveCompact"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Компактное сохранение</span></p>
<p class="rvps10"><span class="rvts22">Compact saving</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Файл проекта Тасэдитора в первую очередь предназначен для сохранения точного снимка рабочего процесса. Чтобы использовать тот же самый формат для обмена файлами между соавторами ТАСа или для опубликования в Интернете, необходимо предоставить пользователю возможность избирательного сохранения рабочих данных в файл. При открытии такого fm3-файла отсутствующие данные будут заменяться данными по умолчанию.</span></p>
<p class="rvps10"><span class="rvts21">Подробнее см. </span><a class="rvts27" href="AdvancedFeatures.html#ProjectsSharing">Продвинутые возможности</a><span class="rvts21"> и </span><a class="rvts27" href="FM3format.html">Формат FM3</a><span class="rvts21">.</span></p>
<p class="rvps10"><span class="rvts21">The Taseditor project file is primarily designed to save the exact snapshot of the workflow.</span></p>
<p class="rvps10"><span class="rvts21">In order to use the same format for file sharing, the user should be able to selectively save data to the file. When you open such an fm3 file, the missing data is be replaced with default data.</span></p>
<p class="rvps10"><span class="rvts21">For details, see </span><a class="rvts27" href="AdvancedFeatures.html#ProjectsSharing">Advanced Features</a><span class="rvts21"> and </span><a class="rvts27" href="FM3format.html">FM3 Format</a><span class="rvts21">.</span></p>
<p class="rvps10"><a name="Autosave"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Автосохранение</span></p>
<p class="rvps10"><span class="rvts22">Autosave</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Как и в случае с любым офисным документом, проект Тасэдитора желательно время от времени сохранять на диск, даже если не планируется выход из программы. Однако до Тасэдитора у ТАСеров не было такой привычки, поэтому имеет смысл сохранять проект автоматически, предоставив пользователю возможность настроить или отключить эту функцию.</span></p>
<p class="rvps10"><span class="rvts21">Подробнее см. </span><a class="rvts27" href="ProgramCustomization.html#SetAutosaveperiod">Настройка программы</a><span class="rvts21">.</span></p>
<p class="rvps10"><span class="rvts21">As any office document, Taseditor project should to be saved to disk from time to time, even if you do not plan to exit the program. However, TASers are not accustomed to such habits, so it makes sense to save the project automatically, allowing the user to customize or disable this feature.</span></p>
<p class="rvps10"><span class="rvts21">For details, see </span><a class="rvts27" href="ProgramCustomization.html#SetAutosaveperiod">Program Customization</a><span class="rvts21">.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps10"><a name="PlannedIdeas"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts74">Запланированные идеи</span></p>
<p class="rvps10"><span class="rvts74">Planned ideas</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><a name="OutputLog"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Журнал Вывода (Output Log)</span></p>
<p class="rvps10"><span class="rvts22">Output Log</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Следующий этап эволюции инструмента Memory Watch просмотр состояния игровых данных в динамике, а не только в статике. Аналогично Журналу лага, эта фича позволит легче и точнее анализировать принципы изменения игрового Вывода.</span></p>
<p class="rvps10"><span class="rvts21">This is the next stage of evolution of the Memory Watch tool. It's intended to watch the game data in a dynamic way, not just static. Similarly to the Lag Log, this feature will make analyzing the game Output &nbsp;easier and more accurate.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps14"><span class="rvts21">Список (ListView), вертикальный скроллинг которого синхронизирован со скроллингом Piano Roll. Высота списка равна высоте Piano Roll, количество строк также всегда равно количеству строк Piano Roll. Количество колонок Списка зависит от нужд пользователя.</span></li>
<li class="rvps14"><span class="rvts21">Можно гибко измененять ширину Списка (перетаскиванием узкой границы между ним и Piano Roll, соответственно изменяется ширина Piano Roll, таким образом их суммарная ширина всегда остаётся одинаковой). Можно также менять Список и Piano Roll местами, либо полностью отключать отображение Журнала Вывода. При отключении отображения Журнала Piano Roll расширяется на освобождённое пространство, в точности как в TAS Editor 1.0. Отключение отображения Журнала не означает отключение журналирования данных.</span></li>
<li class="rvps14"><span class="rvts21">В Заголовке Списка отображаются названия журналируемых ячеек. Можно добавлять и удалять колонки, изменять названия, менять колонки местами и изменять их ширину. При создании нового проекта ни одной колонки в Журнале Вывода нет, и, соответственно, журналирование не ведётся.</span></li>
<li class="rvps14"><span class="rvts21">В строках списка отображаются значения ячеек, сохранённые из состояния игры на соответствующем кадре мувика. Строки Списка раскрашиваются теми же цветами, что и соответствующие строки Piano Roll. При выделении строк в Piano Roll выделяются строки в Журнале.</span></li>
<li class="rvps14"><span class="rvts21">Помимо ячеек RAM необходимо реализовать журналирование переменных Lua. Например, предоставить Lua-скриптам Read/Write-доступ к дюжине int-ячеек Тасэдитора и дать пользователю возможность журналировать любые ячейки из этой дюжины.</span></li>
<li class="rvps14"><span class="rvts21">Кроме того, в будущем можно реализовать добавление колонки со скриншотами игры (либо выбранной прямоугольной областью игрового экрана). Причём отображаемый размер скриншота будет зависеть от текущей ширины колонки, и как следствие, скриншоты будут отображаться не на каждой строчке Журнала, а через каждые несколько строк. Однако съёмка скриншотов всегда осуществляется на каждом кадре.</span></li>
<li class="rvps14"><span class="rvts21">Все журналируемые данные хранятся в Гринзоне, наравне с Журналом лага. При добавлении ячейки RAM возможно автоматическое заполнение всей колонки (Тасэдитор пробегает по всем сэйвам Гринзоны, распаковывает их и берёт значение из сохранённой копии RAM). При добавлении переменной Lua значения ячеек будут неопределёнными (пустые ячейки в Списке), и для их заполнения пользователю необходимо будет заново просмотреть мувик с запущенным Lua-скриптом.</span></li>
<li class="rvps14"><span class="rvts21">При усечении Гринзоны старые данные, ставшие неактуальными, не удаляются, но отображаются менее ярким цветом, пока на их место не будут записаны новые данные. При удалении сэйвов из хвоста Гринзоны данные Журнала остаются и отображаются обычным цветом.</span></li>
<li class="rvps14"><span class="rvts21">Возможна гибкая расцветка ячеек, например, подсветка одинаковых значений в Выделении, подсветка искомых значений, автоматическое изменение цвета при изменении значения, автоматическая индикация при достижении заданного значения и т.д.</span></li>
<li class="rvps14"><span class="rvts21">Возможно чтение любых данных Гринзоны из Lua-скриптов с помощью API Тасэдитора.</span></li>
<li class="rvps14"><span class="rvts21">Акселераторы </span><span class="rvts30">Shift + Вправо</span><span class="rvts21"> / </span><span class="rvts30">Shift + Влево</span><span class="rvts21"> теперь будут горизонтально скроллировать не Piano Roll, а Список Журнала. Скроллинг осуществляется по целым колонкам.</span></li>
<li class="rvps14"><span class="rvts21">Необходимо также реализовать новые методы навигации по мувику в зависимости от значения ячеек. Например, с помощью </span><span class="rvts30">Alt</span><span class="rvts21"> и вращения колеса можно пересекать промежутки в Списке для поиска ближайшего неравного или, наоборот, равного значения.</span></li>
<li class="rvps10"><span class="rvts21">It is a significantly redesigned ListView, whose vertical scrolling is synchronized with the Piano Roll scrolling. Its height is equal to the height of the Piano Roll, and the number of rows is always equal to the number of Piano Roll lines. The number of columns depends on the needs of the user.</span></li>
<li class="rvps10"><span class="rvts21">The user can flexibly change the width of the List by dragging the narrow border between it and the Piano Roll, thus changing the Piano Roll width as well, so their total width is always the same. You can also swap the List and the Piano Roll, or even completely disable the display of the Output Log. When you disable the Log display, the Piano Roll extends to take up the free up space, just as in TAS Editor 1.0. Note that hiding the Log does not disable logging of data.</span></li>
<li class="rvps10"><span class="rvts21">The List Header displays the names of logged cells. You can add and remove columns, change names, change places and change the columns width. When you create a new project, the Output Log has no columns, and, accordingly, nothing is logged.</span></li>
<li class="rvps10"><span class="rvts21">The rows of the List display the values of the cells. The values are saved from the game state on the appropriate movie frame. The List lines are painted with the same colors as the corresponding Piano Roll lines. When you select a line in the Piano Roll, the respective Log lines are selected too.</span></li>
<li class="rvps10"><span class="rvts21">In addition to the RAM cells, it's necessary to implement Lua variables logging. For example, to provide Lua-scripts with a read/write-access to a dozen of Taseditor's int-variables and allow the user to log any variable from the dozen.</span></li>
<li class="rvps10"><span class="rvts21">In addition, in the future a column with screenshots of the game (or selected rectangular area of the game screen) should be added. The displayed size of the screenshots will depend on the current width of the screenshots column, and as a result, the screenshots will not appear on each line of the Log, but on every few lines, even though the screenshot capturing is done every frame.</span></li>
<li class="rvps10"><span class="rvts21">All logged data is stored in the Greenzone, along with the Lag Log. When adding a RAM cell, an automatic filling of the entire column is possible (Taseditor runs through all Greenzone savestates, unpacks them and takes the value of the saved copy of RAM). When you add a Lua variable, the cell values are unknown (blank cells in the list), and to fill them you need to re-emulate the movie with the Lua-script running.</span></li>
<li class="rvps10"><span class="rvts21">When truncating the Greenzone, the old data that has become outdated will not be removed, but will appear in less bright color, until the new data takes its place. Also, when savestates are removed from the Greenzone tail, the Log data remains intact and is shown in the normal color.</span></li>
<li class="rvps10"><span class="rvts21">It should allow flexible coloring of cells, for example, highlighting the same values in the Selection, highlighting the desired values, automatic color change when the value changes, automatic indication when certain value is hit, etc.</span></li>
<li class="rvps10"><span class="rvts21">Lua scripts may read any Greenzone data using Taseditor API.</span></li>
<li class="rvps10"><span class="rvts21">The accelerators </span><span class="rvts30">Shift + Right</span><span class="rvts21"> / </span><span class="rvts30">Shift + Left</span><span class="rvts21"> will now scroll horizontally not the Piano Roll, but the Output Log. Scrolling is done by whole columns.</span></li>
<li class="rvps10"><span class="rvts21">It is also necessary to implement the new methods of navigation through the movie, depending on the cells values. For example, by using the </span><span class="rvts30">Alt</span><span class="rvts21"> key and the wheel you can cross gaps in the List to find the nearest unequal or equal value.</span></li>
</ul>
<p class="rvps10"><a name="Minimap"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Миникарта</span></p>
<p class="rvps10"><span class="rvts22">Minimap</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Графически отображает в окне Тасэдитора весь мувик Гринзону, лаг, Курсор Проигрывателя, Выделение, Маркеры, Закладки, точки Горячих Правок, подсветку Журнала Вывода и т.д. Предоставляет пользователю мгновенный образ текущего проекта, не обладающий детальностью, зато полностью умещающийся на экране. Также усовершенствует навигацию по мувику.</span></p>
<p class="rvps10"><span class="rvts21">Graphically displays the entire movie in TAS Editor window Greenzone, Lag, Playback cursor, Selection, Markers, Bookmarks, Hot Changes, highlighted Output Log values, etc. Provides the user with an instant image of the current project, which lacks details but completely fits on the screen. Also improves navigation.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps14"><span class="rvts21">Миникарта представляет собой прямоугольный bitmap-холст, по высоте равный высоте Piano Roll, по ширине равный 30 пикселей. Может располагаться слева или справа от Piano Roll и Журнала Вывода.</span></li>
<li class="rvps14"><span class="rvts21">В пункте View можно гибко настраивать отображаемые элементы на миникарте (устанавливать галочки напротив желаемых элементов). Также можно отключить отображение Миникарты.</span></li>
<li class="rvps14"><span class="rvts21">Миникарта не хранит какие-либо данные проекта. Она втоматически перерисовывается с заданной периодичностью (по умолчанию раз в секунду).</span></li>
<li class="rvps14"><span class="rvts21">Маркеры отображаются горизонтальными линиями жёлтого цвета на левой половине Миникарты. Каждая такая линия занимает по высоте как минимум 1 пиксель, поэтому Маркеры не теряются даже при мелком масштабе Миникарты (когда в мувике намного больше кадров, чем высота Миникарты в пикселях). Ширина линии равна трети ширины Миникарты.</span></li>
<li class="rvps14"><span class="rvts21">Горячие Правки отображаются горизонтальными линиями соответствующего цвета на правой половине Миникарты. Каждая такая линия занимает по высоте как минимум 1 пиксель.</span></li>
<li class="rvps14"><span class="rvts21">Закладки отображаются соответствующими иконками слева от Миникарты. По этим иконкам можно щёлкать левой и правой кнопкой мыши, эффект будет аналогичен щелчкам по иконкам в Дереве Ответвлений.</span></li>
<li class="rvps14"><span class="rvts21">Щелчок правой кнопкой мыши мгновенный скроллинг видимой области Piano Roll к указанному месту в мувике. Далее можно перетаскивать видимую область вверх/вниз по мувику, не отпуская правую кнопку.</span></li>
<li class="rvps14"><span class="rvts21">Щелчок левой кнопкой мыши навигация Курсором Проигрывателя. Далее можно перетаскивать Курсор Проигрывателя, не отпуская левую кнопку.</span></li>
<li class="rvps10"><span class="rvts21">The Minimap is a rectangular bitmap canvas, whose height is equal to the height of the Piano Roll, and the width is 30 pixels (plus 10px for Bookmark icons). Can be positioned to the left or right from the Piano Roll and the Output Log.</span></li>
<li class="rvps10"><span class="rvts21">The "View" menu item allows the user to customize the elements displayed on Minimap (set a tick near the desired items). You can also entirely disable the display of Minimap.</span></li>
<li class="rvps10"><span class="rvts21">The Minimap does not store any data of the project. It is automatically redrawn in the specified interval of time (by default, once per second).</span></li>
<li class="rvps10"><span class="rvts21">Markers are displayed as horizontal yellow lines on the left half of the Minimap. Each Marker line has the height of at least one pixel, so the Markers are not lost even on a small-scale Minimap (when the movie has a lot more frames than the height of the Minimap in pixels). The line width is 9px.</span></li>
<li class="rvps10"><span class="rvts21">Hot Changes are displayed as horizontal lines of the corresponding color on the right side of the Minimap. Each line has the height of at least one pixel. The line width is 9px.</span></li>
<li class="rvps10"><span class="rvts21">Bookmarks are displayed by corresponding icons to the left from the Minimap, and they take additional 10px. You can click these icons with left or right mouse button, the effect will be similar to clicking on the icon in the Branches Tree.</span></li>
<li class="rvps10"><span class="rvts21">When the mouse cursor hovers over the Minimap, it displays the rectangular magnifying glass.</span></li>
<li class="rvps10"><span class="rvts21">Left-click on the Minimap = instant scrolling of visible area of the Piano Roll to that place. You can then drag the visible area up/down by holding the right button.</span></li>
<li class="rvps10"><span class="rvts30">Shift</span><span class="rvts21"> + left-click, or just right-click on the Minimap = Playback cursor navigation. You can then drag the Playback cursor by holding the right button.</span></li>
</ul>
<p class="rvps10"><a name="VirtualJoypad"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Виртуальный Джойстик</span></p>
<p class="rvps10"><span class="rvts22">Virtual Joypad</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Альтернативный способ ввода инпута. Очень похож на изменение инпута щелчками по Заголовку Piano Roll, однако более удобен и нагляден.</span></p>
<p class="rvps10"><span class="rvts21">An alternative way to enter Input. Very similar to modifying Input by clicking the Piano Roll Header, but is more visual and intuitive.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps14"><span class="rvts21">Виртуальный Джойстик представляет собой всплывающее немодальное окно с изменяемыми размерами. Содержимое окна автоматически масштабируется при изменении размеров окна.</span></li>
<li class="rvps14"><span class="rvts21">Окно Виртуального Джойстика появляется под курсором мыши при щелчке правой кнопкой в Piano Roll по выделенному Вводу или Вводу под Курсором Проигрывателя. В настройках пользователь может отключить появление Виртуального Джойстика под курсором при правом щелчке. Тогда можно оставить это окно в удобном месте рабочего стола и при необходимости перемещать курсор мыши то к нему, то обратно к Piano Roll.</span></li>
<li class="rvps14"><span class="rvts21">По цвету рамки окна можно определить, отображает ли Виртуальный Джойстик состояние Ввода в Выделении (синяя рамка) или под Курсором Проигрывателя (голубая рамка).</span></li>
<li class="rvps14"><span class="rvts21">При уведении курсора мыши за пределы окна Виртуального Джойстика это окно автоматически скрывается (если установлена настройка "Hide on mouse leave") либо остаётся на месте.</span></li>
<li class="rvps14"><span class="rvts21">При нажатии левой кнопкой мыши по неактивным областям начинается перетаскивание окна.</span></li>
<li class="rvps14"><span class="rvts21">При нажатии правой кнопкой мыши в любом месте окна окно скрывается.</span></li>
<li class="rvps14"><span class="rvts21">В окне расположены управляющие элементы кнопки, соответствующие кнопкам реального джойстика эмулируемой приставки. Расположение кнопок соответствует реальному прототипу. По внешнему виду кнопок можно определить, являются ли соответствующая кнопка в Выделении нажатой, отпущенной или частично нажатой (когда выделено более одного кадра).</span></li>
<li class="rvps14"><span class="rvts21">Содержимое окна автоматически обновляется при каждом внешнем изменении Ввода.</span></li>
<li class="rvps14"><span class="rvts21">Виртуальный Джойстик отражает состояние только текущего джойстика (выбранного радиокнопкой в разделе Recorder).</span></li>
<li class="rvps14"><span class="rvts21">При щелчке по кнопке происходит изменение Ввода текущего джойстика. Нажатая кнопка становится отпущенной, а отпущенная или частично нажатая становится нажатой. Соответственно меняется Ввод во всех выделенных кадрах или на кадре Курсора Проигрывателя.</span></li>
<li class="rvps14"><span class="rvts21">В дополнение к кнопкам Ввода в окне Виртуального Джойстика можно разместить несколько кнопок-слотов для хранения макросов. Щелчок по кнопке Макроса будет аналогичен нескольким щелчкам по разным кнопкам Виртуального Джойстика. Это позволит ещё быстрее менять Ввод в Выделении, например, вместо трёх щелчков по кнопкам </span><span class="rvts29">Вверх</span><span class="rvts21">, </span><span class="rvts29">Вправо</span><span class="rvts21"> и </span><span class="rvts29">B</span><span class="rvts21"> можно будет сделать один щелчок по </span><span class="rvts73">Макросу1</span><span class="rvts21">.</span></li>
<li class="rvps14"><span class="rvts21">Если перед щелчком по кнопке Виртуального Джойстика или кнопке макроса зажать клавишу </span><span class="rvts30">Alt</span><span class="rvts21">, будет установлен Ввод по шаблону.</span></li>
<li class="rvps14"><span class="rvts21">После реализации Виртуального Джойстика можно изменить принцип действия щелчков по Заголовку Piano Roll. Теперь вместо изменения инпута щелчки по Заголовку будут выделять соответствующие столбцы Piano Roll.</span></li>
<li class="rvps10"><span class="rvts21">The Virtual Joypad is a non-modal pop-up resizable window. Contents of the window are automatically resized when the window is resized.</span></li>
<li class="rvps10"><span class="rvts21">The Virtual Joypad window appears under the mouse cursor when you right-click in the Piano Roll on the selected Input or on Input under the Playback cursor. In the settings you can disable the appearance of the Virtual Joypad under the cursor when you right click. Then you can leave the window in a convenient place on the desktop and move the mouse cursor back and forth from the Piano Roll to the Virtual Joypad.</span></li>
<li class="rvps10"><span class="rvts21">By the window background color you can determine whether the Virtual Joypad currently displays the Input state in the Selection (dark blue), or under the Playback cursor (light-blue).</span></li>
<li class="rvps10"><span class="rvts21">When the mouse cursor is moved out of the Virtual Joypad window, this window is either hidden automatically (if the "Hide on mouse leave" is checked) or left in place.</span></li>
<li class="rvps10"><span class="rvts21">When you press the left mouse button over the inactive area of the window, the window dragging starts.</span></li>
<li class="rvps10"><span class="rvts21">When you right-click anywhere in the window, it hides.</span></li>
<li class="rvps10"><span class="rvts21">Various controls can be located inside the window e.g. the buttons that correspond to the real joypad buttons. The buttons layout corresponds to the real prototype. By the buttons look you can determine whether the corresponding button in the Selection is pressed, released or partially pressed (this is for cases when more than one frame is Selected).</span></li>
<li class="rvps10"><span class="rvts21">The window contents are automatically updated every time the Input is changed, or Selection is changed and the Virtual Joypad shows the Input in the Selection.</span></li>
<li class="rvps10"><span class="rvts21">The Virtual Joypad reflects only the state of the single controller the current controller, selected by a radiobutton in the Recorder section.</span></li>
<li class="rvps10"><span class="rvts21">When you click on a button, it changes the Input of the current joypad. Pressed button becomes released, and released or partially pressed becomes pressed. The Input of all the selected frames or the frame under the Playback cursor changes accordingly.</span></li>
<li class="rvps10"><span class="rvts21">In addition to the normal Input buttons, the Virtual Joypad may contain several macro-buttons. A click on a macro button will be similar to a few clicks on different normal buttons. This will allow to change the Input in the Selection even faster than before, for example, instead of three clicks on </span><span class="rvts29">Up</span><span class="rvts21">, </span><span class="rvts29">Right</span><span class="rvts21">, and </span><span class="rvts29">B</span><span class="rvts21"> buttons, you can do one click on </span><span class="rvts73">Macro1</span><span class="rvts21">.</span></li>
<li class="rvps10"><span class="rvts21">If you hold down </span><span class="rvts30">Alt</span><span class="rvts21"> before clicking a Virtual Joypad button or a macro button, the Input will be set by pattern.</span></li>
<li class="rvps10"><span class="rvts21">After implementing the Virtual Joypad we can change the principle of clicking on the Piano Roll Header. Instead of changing the Input, the click on the Header will select the appropriate columns in the Piano Roll.</span></li>
</ul>
<p class="rvps10"><a name="BetterSelection"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Усовершенствование Выделения</span></p>
<p class="rvps10"><span class="rvts22">Selection improvement</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Архитектура TAS Editor 1.0 не рассчитана на выделение столбцов Piano Roll, однако в некоторых ситуациях это может быть необходимо при ТАСинге. Например, для очистки Ввода первого джойстика без очистки Ввода второго джойстика. Либо для перемещения Ввода одной/двух кнопок без смещения остальных внопок.</span></p>
<p class="rvps10"><span class="rvts21">Кроме того, необходимо усовершенствовать процесс рисования Выделения, чтобы пользователь мог видеть цвет строк Piano Roll под полупрозрачным Выделением.</span></p>
<p class="rvps10"><span class="rvts21">TAS Editor 1.0 architecture is not designed to support the selection of Piano Roll columns, but in some situations it may be useful in TASing. For example, to clear the Input of the first joypad without clearing the second joypad Input. Or to shift the Input for one buttons without moving the rest buttons.</span></p>
<p class="rvps10"><span class="rvts21">Besides, it's necessary to improve the process of painting the Selection, so that users will see the Piano Roll line color under the translucent Selection.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps14"><span class="rvts21">Выделение столбцов производится аналогично выделению строк при щелчке левой кнопкой мыши по Заголовку Piano Roll соответствующий столбец становится выделенным, а все остальные столбцы перестают выть выделенными. Если перед щелчком зажать клавишу </span><span class="rvts30">Ctrl</span><span class="rvts21">, выделение остальных столбцов не изменится. Если зажать </span><span class="rvts30">Shift</span><span class="rvts21">, будет выделен регион столбцов от места предыдущего щелчка. Если зажать </span><span class="rvts30">Alt</span><span class="rvts21">, выделится регион по шаблону. После щелчка можно не отпускать левую кнопку и растягивать Выделение по горизонтали.</span></li>
<li class="rvps14"><span class="rvts21">Выделять можно только столбцы Ввода. Маркеры же зависят от настройки "Bind markers to Input".</span></li>
<li class="rvps14"><span class="rvts21">Выделенные столбцы отмечаются в Заголовке синим фоном в соответствующих ячейках.</span></li>
<li class="rvps14"><span class="rvts21">Отсутствие выделенных столбцов равносильно состоянию "выделены все столбцы".</span></li>
<li class="rvps14"><span class="rvts21">При рисовании строк Выделения ячейки Ввода из невыделенных столбцов рисуются с альфой ~0.4, в то время как ячейки из выделенных столбцов имеют альфу ~0.7.</span></li>
<li class="rvps14"><span class="rvts21">В колонке с номерами кадров выделенные строки имеют альфу ~0.4, когда Маркеры отвязаны, и ~0.7, когда Маркеры привязаны.</span></li>
<li class="rvps14"><span class="rvts21">В разделе Splicer отображается не только количество выделенных строк (rows), но и количество выделенных столбцов (columns).</span></li>
<li class="rvps14"><span class="rvts21">При копировании в Буфер Обмена попадает только Ввод из выделенных столбцов, причём он попадает в виде прямоугольной таблицы, без пропусков между столбцами. Благодаря этому можно изменить выделенные столбцы и вставить Ввод одних кнопок на место других кнопок.</span></li>
<li class="rvps14"><span class="rvts21">При изменении порядка следования столбцов или скрытии/раскрытии столбцоа Выделение сбрасывается в состояние "отсутствует выделение столбцов".</span></li>
<li class="rvps14"><span class="rvts21">При Записи Ввод фильтруется в соответствии с выделением столбцов. Невыделенные столбцы не будут изменяться, даже если пользователь записывает другое состояние кнопки этого столбца.</span></li>
<li class="rvps14"><span class="rvts21">При инициализации объекта SELECTION (то есть при запуске Тасэдитора или создании проекта) Выделение сбрасывается в состояние "отсутствует выделение столбцов".</span></li>
<li class="rvps14"><span class="rvts21">Выделение столбцов также сохраняется в файле проекта.</span></li>
<li class="rvps14"><span class="rvts21">На Историю Выделений это нововведение никак не влияет. Изменение выделения столбцов не сохраняется в Истории Выделений, так как навигация по истории изменения выделения столбцов не требуется.</span></li>
<li class="rvps10"><span class="rvts21">Selecting columns should be done like selecting rows when you left-click on the Header of the corresponding Piano Roll column, the column is selected, and all other columns are deselected. If you hold down </span><span class="rvts30">Ctrl</span><span class="rvts21"> before clicking the button, Selection of the rest columns will not disappear. If you hold down </span><span class="rvts30">Shift</span><span class="rvts21">, you will select the range of columns from the previous click place. If you hold down </span><span class="rvts30">Alt</span><span class="rvts21">, the columns selection will be set by pattern. And of course after clicking you can hold the left mouse button and stretch the selection horizontally.</span></li>
<li class="rvps10"><span class="rvts21">Only Input columns can be selected. The Markers depend on the "Bind Markers to Input" setting.</span></li>
<li class="rvps10"><span class="rvts21">Selected columns are colored in the Header by blue background in the appropriate cells.</span></li>
<li class="rvps10"><span class="rvts21">The absence of selected columns is equivalent of "all columns are selected".</span></li>
<li class="rvps10"><span class="rvts21">When the selected lines are displayed, the Input cells of unselected columns are drawn with alpha ~0.4, whereas the cells of the selected columns have alpha ~0.7.</span></li>
<li class="rvps10"><span class="rvts21">In the column of frame numbers, the selected lines have alpha ~0.4, when the Markers are detached, and ~0.7, when the Markers are attached.</span></li>
<li class="rvps10"><span class="rvts21">Splicer section displays not only the number of the selected lines (rows), but the number of selected columns (columns).</span></li>
<li class="rvps10"><span class="rvts21">When you Copy, only the Input from the selected columns is copied to the Clipboard, and it appears there as a rectangular table with no gaps between columns. This allows the user to change the selected columns and insert some buttons in place of the other buttons.</span></li>
<li class="rvps10"><span class="rvts21">When the SELECTION object is initialized (i.e. at Taseditor startup or project creation), Selection is reset to "no selection of columns".</span></li>
<li class="rvps10"><span class="rvts21">If you change the order of columns or hide/disclose them, the Selection is reset to "no selection of columns".</span></li>
<li class="rvps10"><span class="rvts21">When recording, the Input is filtered to match columns selection. Unselected columns will not change, even if the user records a different button state for the column.</span></li>
<li class="rvps10"><span class="rvts21">Columns selection is also saved in the project file.</span></li>
<li class="rvps10"><span class="rvts21">This innovation does not affect the Selection History. Changing the Selection of columns is not saved in the Selection History, because there's no need to navigate through column selections history.</span></li>
</ul>
<p class="rvps10"><a name="BetterColumns"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Гибкая настройка колонок</span></p>
<p class="rvps10"><span class="rvts22">Columns tweaking</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">В TAS Editor 1.0 столбцы Piano Roll имеют фиксированную ширину. Количество и порядок следования столбцов также фиксированы, Для команд приставки (сброс, вставка диска и т.д.) отдельные столбцы не отводятся, так как эти команды используются крайне редко. Однако при портировании Тасэдитора на другие эмуляторы количество столбцов будет возрастать (например, у PSX нужно отображать столбцы для 14 кнопок), необходимо предоставить пользователю возможность настраивать их.</span></p>
<p class="rvps10"><span class="rvts21">In TAS Editor 1.0 the Piano Roll columns have fixed width. The number and order of the columns are also fixed. There's also no columns dedicated to hardware commands (reset, insert disk, etc.), because these commands are rarely used. However, porting Taseditor to another emulator will increase the number of columns (e.g. PSX needs to display columns for 14 buttons), so it's necessary to give the user the ability to customize them.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps14"><span class="rvts21">Так как подобная настройка обычно производится только один раз при первом запуске программы, она не обязательно должна осуществляться средствами Piano Roll, можно и в отдельном окне, вызываемом из Config.</span></li>
<li class="rvps14"><span class="rvts21">Возможность отображать любые колонки Ввода, в том числе колонки команд.</span></li>
<li class="rvps14"><span class="rvts21">Возможность прятать любые колонки. Однако от каждого джойстика должна оставаться отображаемой как минимум одна колонка (но если пользователь настроил проект на режим 1P, то колонки второго джойстика в любом случае не будут отображаться).</span></li>
<li class="rvps14"><span class="rvts21">Возможность изменять порядок следования колонок.</span></li>
<li class="rvps14"><span class="rvts21">При копировании в Буфер Обмена копируются только абстрактные значения вида "кнопка нажата" / "не нажата". Поэтому если после копирования изменить порядок следования столбцов и вставить Ввод из Буфера Обмена, реальный Ввод мувика изменится (кнопки изменённых столбцов поменяются местами).</span></li>
<li class="rvps14"><span class="rvts21">Возможность изменять ширину колонок.</span></li>
<li class="rvps14"><span class="rvts21">Возможность одним щелчком восстановить значения по умолчанию (рекомендуемые автором).</span></li>
<li class="rvps14"><span class="rvts21">Все настройки сохраняются при выходе.</span></li>
<li class="rvps10"><span class="rvts21">Since this setting is typically done only once (when you start using the program), it does not have to be done directly in the Piano Roll, it should be configured in a separate window called from the "Config" menu.</span></li>
<li class="rvps10"><span class="rvts21">The ability to display any Input columns, including the command columns.</span></li>
<li class="rvps10"><span class="rvts21">Ability to hide any columns. However, each joypad must be represented by at least one button column (but if the user has configured project to 1P mode, the second joypad columns in any case will not be displayed).</span></li>
<li class="rvps10"><span class="rvts21">The ability to change the order of the columns.</span></li>
<li class="rvps10"><span class="rvts21">When you Copy to the Clipboard, only the abstract values like true/false are copied. So if after copying you reorder the columns and insert the Input from the Clipboard to the same place, the real movie Input may change (because button columns are swapped).</span></li>
<li class="rvps10"><span class="rvts21">The ability to change the width of columns. For platforms with many buttons (like PC) it's useful to shrink the width of columns down to a few pixels, so that a lot of columns can fit the screen.</span></li>
<li class="rvps10"><span class="rvts21">The possibility to restore the default settings (those recommended by the author) by one click.</span></li>
<li class="rvps10"><span class="rvts21">All settings are saved in config.</span></li>
<li class="rvps10"><span class="rvts21">Все настройки сохраняются при выходе.</span></li>
</ul>
<p class="rvps10"><a name="RerecordsHeatmap"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Теплокарта перезаписей</span></p>
<p class="rvps10"><span class="rvts22">Rerecords heatmap</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Хранит и отображает статистику "изменений после просмотра" (перезаписей). Может быть полезна для выявления сложных мест в мувике.</span></p>
<p class="rvps10"><span class="rvts21">Stores and displays the statistics about "changes done after watching" (rerecords). It may be useful to identify the difficult places in the movie.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps14"><span class="rvts21">Хранит массив int, по одному элементу на каждый кадр мувика (в том числе за пределами инпута). Значение элемента соответствует количеству усечений Гринзоны до данного кадра.</span></li>
<li class="rvps14"><span class="rvts21">Сохраняет и загружает свои данные из файла проекта.</span></li>
<li class="rvps14"><span class="rvts21">В качестве холста следует использовать холст Миникарты. При ТАСинге не имеет смысла постоянно видеть Теплокарту, пользователь может изредка (например, в конце каждого дня) переключать Миникарту в режим отображения Теплокарты и оценивать проделанный труд.</span></li>
<li class="rvps14"><span class="rvts21">Так как эта фича несёт не столько рабочую, сколько эстетическую функцию, необходимо продумать алгоритм рисования телокарты, чтобы было не только информативно, но и красиво.</span></li>
<li class="rvps10"><span class="rvts21">Stores an array of int, one entry for each movie frame (including the frames beyond the current Input). The value corresponds to the number of Greenzone truncations at the frame.</span></li>
<li class="rvps10"><span class="rvts21">Saves and loads the data from the project file.</span></li>
<li class="rvps10"><span class="rvts21">As a canvas for displaying the Heatmap we can use the Minimap canvas. There's no point to constantly see the Heatmap during TASing, so you can just occasionally (e.g. at the end of every day) toggle the Minimap to the Heatmap display mode and evaluate the work.</span></li>
<li class="rvps10"><span class="rvts21">Since this feature is not as much operational as aesthetic, we'll need to think over the Heatmap drawing algorithm, so that it is not only informative but also beautiful.</span></li>
</ul>
<p class="rvps10"><a name="Etc"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Прочие мелочи</span></p>
<p class="rvps10"><span class="rvts22">Other stuff</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps14"><span class="rvts21">Отдельный Журнал Истории для операций </span><a class="rvts27" href="Operations.html#Bookmark">Bookmark Set</a><span class="rvts21"> (</span><span class="rvts30">Alt + Z</span><span class="rvts21"> и </span><span class="rvts30">Alt + Y</span><span class="rvts21">), для отката изменений Ввода/Маркеров без отката изменений Закладок.</span></li>
<li class="rvps14"><span class="rvts21">Возможность работать с </span><span class="rvts21">мувиками, начинающимися с сэйва.</span></li>
<li class="rvps14"><span class="rvts21">Возможность работать с несколькими эмулируемыми играми одновременно (для Multi-TAS-проектов).</span></li>
<li class="rvps14"><span class="rvts21">Усовершенствование Lua API.</span></li>
<li class="rvps14"><span class="rvts21">Поддержка мультитач-управления.</span></li>
<li class="rvps14"><span class="rvts21">Продумать концепцию заполнения Гринзоны в фоне (насколько она соответствует особенностям ТАСинга).</span></li>
<li class="rvps10"><span class="rvts21">Separate History Log for the </span><a class="rvts27" href="Operations.html#Bookmark">Bookmark Set</a><span class="rvts21"> operations (</span><span class="rvts30">Alt + Z</span><span class="rvts21"> and </span><span class="rvts30">Alt + Y</span><span class="rvts21">), so the user will be able to undo the Input/Markers changes without undoing Bookmarks and vice versa.</span></li>
<li class="rvps10"><span class="rvts21">Work with movies starting from savestate.</span></li>
<li class="rvps10"><span class="rvts21">Work with multiple emulated games simultaneously (for Multi-TAS projects).</span></li>
<li class="rvps10"><span class="rvts21">Lua API improvements.</span></li>
<li class="rvps10"><span class="rvts21">Support for multi-touch controls.</span></li>
<li class="rvps10"><span class="rvts21">Think out the concept of the background greenzoning (how exactly it corresponds to TASing specifics).</span></li>
</ul>
<p class="rvps10"><a name="OtherPlatforms"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Поддержка платформ, отличных от NES</span></p>
<p class="rvps10"><span class="rvts22">Supporting platforms other than NES</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Если Тасэдитор приобретёт популярность среди ТАСеров, необходимо расширить его доступность для всех эмулируемых платформ.</span></p>
<p class="rvps10"><span class="rvts21">If Taseditor gains popularity among TASers, its availability needs to be expanded to all emulated platforms.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps14"><span class="rvts21">Продумать управляющие элементы для отображения и изменения аналогового Ввода в Piano Roll. Виртуальный Джойстик отчасти решает эту проблемы, однако должна быть возможность быстро и легко рисовать аналоговый Ввод мышкой. Например, растягивать на много кадров однократно установленное значение наклона стика, запоминать значение только что очищенной ячейки и предлагать его при рисовании. В ячейке отображается не один символ, а число от -1.0 до +1.0. При двойном щелчке по клетке можно набрать с клавиатуры точное значение этого числа. С зажатым </span><span class="rvts30">Ctrl</span><span class="rvts21"> можно растягивать значение ячейки левой кнопкой мыши вправо/влево или вверх/вниз. В столбце отображается значение наклона только по одной координатной оси (таким образом, для аналогового стика требуется две колонки Piano Roll).</span></li>
<li class="rvps14"><span class="rvts21">В Виртуальном Джойстике должна быть возможность рисовать огибающую для региона кадров, а не только устанавливать одинаковое значение для всех выделенных кадров. Также необходимо переработать формат Шаблонов, чтобы они могли представлять последовательности значений уровня, в том числе с относительными значениями (например, возрастание по параболе, где начальное и конечное значение берётся из начального и конечного кадра выделенного региона).</span></li>
<li class="rvps14"><span class="rvts21">Скорее всего, потребуется переход на 64-разрядную платформу, так как объёмы Гринзоны значительно возрастут при хранении сэйвов более продвинутых приставок.</span></li>
<li class="rvps10"><span class="rvts21">Think about the ways to display and change an analog Input using the Piano Roll. The Virtual Joypad partially solves this problem, but the user should also be able to quickly and easily create an analog Input with the mouse. For example, set the "stick tilt" value for one frame and then stretch it to many frames. Also, remember the value of the newly cleared cell and offer it when drawing by mouse. The cells should be able to display not only a single character, but a fixed-point number from -1.0 to +1.0. By double-clicking on a cell you can type the exact value of this number with the keyboard. While holding </span><span class="rvts30">Ctrl</span><span class="rvts21">, you can stretch the value of the cell by holding the left button and moving the mouse left/right or up/down. A single column can correlate to only single coordinate axis (thus the analog stick requires two columns in Piano Roll).</span></li>
<li class="rvps10"><span class="rvts21">The Virtual Joypad should provide the ability to draw an envelope for a frame range. It is also necessary to remake the format of patterns file, so that they can represent the sequence of "voltage levels", including relative values (for example, increase in a parabola, where the initial and final values are taken from the initial and final frame of the selected range).</span></li>
<li class="rvps10"><span class="rvts21">Transition to a 64-bit platform is highly desirable, because the Greenzone size is going to increase dramatically when storing savestates for more advanced consoles. 2GB of RAM will not be enough for Taseditor 2.0.</span></li>
</ul>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>

View File

@ -179,7 +179,7 @@
<li class="rvps10"><span class="rvts21">Since the context menu on the rightclick at the Piano Roll is not often used, it appears only if the user clicks the selected line in the frame number column (Frame#). In all the rest cases the context menu doesn't appear, instead the rightclick-and-hold at the Piano Roll allows to drag its contents in any direction.</span></li>
<li class="rvps10"><span class="rvts21">Since the right button is often used for the Playback cursor navigation with the wheel, the user is encouraged to click it without caring about the current mouse cursor position. In theory it's possible that the user accidentally rightclicks a Bookmark. To avoid such unintended commands, the Bookmark List and the Branches Tree both require to press and release the right button over the same Bookmark. Also, if between pressing and releasing the user rotated the wheel, the Bookmark won't be changed.</span></li>
<li class="rvps10"><span class="rvts21">The user can jump to a Bookmark with a single click on the desired icon in the Branches Tree. Doing so he expects that after the click the light-blue triangle (the Playback cursor icon) will also jump to the place in the Branches Tree. It is indeed so for Bookmarks that don't contradict with the current timeline, but it's not so for Bookmarks representing alternative strategies. After jumping to the frame of such Bookmark, the Playback cursor will appear on another branch (even though it's on the same frame of the movie). To notify the user about possible misconception, the mouse cursor turns into an arrow with a question mark when the user points to such Bookmarks.</span></li>
<li class="rvps10"><span class="rvts21">When the Branches Tree transforms, hovering the mouse cursor over its elements doesn't work, because the active element area is constantly moving and running away from the mouse cursor.</span></li>
<li class="rvps10"><span class="rvts21">While the Branches Tree is transforming, hovering the mouse cursor over its elements doesn't work, because the active element area is constantly moving and running away from the mouse cursor.</span></li>
</ul>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>

View File

@ -86,7 +86,7 @@
<tr valign="top">
<td valign="top" style="border-color: #000000; border-style: solid; height: 160px;"><p class="rvps10"><span class="rvts21">Let's have an example when the segment is too large. In a Super Mario Bros speedrun you are expected to reach the end of World 1-1 as fast as possible, which means you have to maximize the X coordinate of the character moving from left to right. The basic premise is that at the beginning of the level the X value equals zero and at the end of the level it is one thousand. Using gamepad buttons you can influence the coordinate in various ways.</span></p>
<p class="rvps10"><span class="rvts21">If we take the whole level from the moment </span><span class="rvts34">X = 0</span><span class="rvts21"> to the event </span><span class="rvts34">X = 1000</span><span class="rvts21"> as our working segment, we can immediately see the optimality criterion (the best approach will be the one with minimal value of the frame counter when </span><span class="rvts34">X &gt;= 1000</span><span class="rvts21">), but we can't see definite factors. How exactly we're supposed to press buttons to get the </span><span class="rvts34">X = 1000</span><span class="rvts21"> within minimal number of frames? Well, we can apply a regular player's logic and intuition. When we press the </span><span class="rvts29">R</span><span class="rvts21"> button, the X coordinate usually increases, and with the </span><span class="rvts29">L</span><span class="rvts21"> button it decreases. So the most obvious decision is to hold the </span><span class="rvts29">R</span><span class="rvts21"> button and see how many frames is needed to grow the value of X to one thousand. When testing such approach in emulator, it appears that Mario is hampered by obstacles and the X coordinate does not grow, even though the </span><span class="rvts29">R</span><span class="rvts21"> button is held. This way a new factor comes to light the need to jump over obstacles and pits. Using the </span><span class="rvts29">A</span><span class="rvts21"> button Mario eventually reaches the </span><span class="rvts34">X = 1000</span><span class="rvts21"> event, and the optimality criterion can eliminate all alternative playthroughs where the </span><span class="rvts29">A</span><span class="rvts21"> button presses were ill-timed (e.g. where Mario stumbled &nbsp;over edges of pipes, the frame counter at the end of the segment was higher).</span></p>
<p class="rvps10"><span class="rvts21">Now the player (or rather, TASer who is stuck in player's mindset) may think that all factors are applied and the segment is perfect. But it isn't. Super Mario Bros has somewhat complex physics engine. The X coordinate is influenced by current horizontal speed, and speed is influenced by acceleration. Acceleration is affected by the </span><span class="rvts29">B</span><span class="rvts21"> button, skidding, Mario's direction and air-ground state. There are also teleporter pipes and useful glitches like the "flagpole glitch" and so on. A lot of things to bear in mind. But human working memory can only store </span><a class="rvts27" href="http://en.wikipedia.org/wiki/The_Magical_Number_Seven,_Plus_or_Minus_Two" target="_blank">about 7 objects</a><span class="rvts21">, thus some factors inevitably slip away when you're editing Input on large segment. You'd better shrink the segment to such a scale which reveals factors individually or in a small group.</span></p>
<p class="rvps10"><span class="rvts21">Now the player (or rather, TASer who is stuck in player's mindset) may think that all factors are applied and the segment is perfect. But it isn't. Super Mario Bros has somewhat complex physics engine. The X coordinate is influenced by current horizontal speed, and speed is influenced by acceleration. Acceleration is affected by the </span><span class="rvts29">B</span><span class="rvts21"> button, skidding, Mario's direction and air-ground state. There are also teleporter pipes and useful glitches like the "flagpole glitch" and so on. A lot of things to bear in mind. But, according to certain research, human working memory can only store </span><a class="rvts27" href="http://en.wikipedia.org/wiki/The_Magical_Number_Seven,_Plus_or_Minus_Two" target="_blank">about 7 objects</a><span class="rvts21">, thus some factors inevitably slip away when you're editing Input on large segment. You'd better shrink the segment to such a scale which reveals factors individually or in a small group.</span></p>
<p class="rvps10"><span class="rvts21">If we focus on the segment from </span><span class="rvts34">X = 0</span><span class="rvts21"> to </span><span class="rvts34">X = 100</span><span class="rvts21">, the optimality criterion will be the same, but now it also becomes obvious that in the first half of the segment Mario runs slower, and in the second half he runs with constant speed which can be considered maximum. This way you begin to appreciate the acceleration factor, so you add the RAM address to Memory Watch and start analyzing possible ways to influence the acceleration. After some experiments with turning and jumping you can discover more factors. </span><span class="rvts21">As a result, you're going to find an intricate combination of </span><span class="rvts29">R</span><span class="rvts21">, </span><span class="rvts29">L</span><span class="rvts21">, </span><span class="rvts29">B</span><span class="rvts21"> and </span><span class="rvts29">A</span><span class="rvts21"> buttonpresses that makes the event </span><span class="rvts34">X = 100</span><span class="rvts21"> occur faster than simply holding </span><span class="rvts29">R</span><span class="rvts21"> and </span><span class="rvts29">B</span><span class="rvts21">. And even if the new playthrough of the segment is only several frames faster than old, it's much closer to perfectness.</span></p>
</td>
</tr>

File diff suppressed because one or more lines are too long

View File

@ -4,7 +4,7 @@
<head>
<title>FCEUX Help- Table of Contents</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<meta name="generator" content="HelpNDoc Personal Edition 3.7.1.482">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/silver-theme/jquery-ui-1.8.12.custom.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/dynatree/chm/ui.dynatree.css" />
@ -32,7 +32,9 @@
$(document).ready(function()
{
var sAnchorName = top.location.href.substring(top.location.href.lastIndexOf("#") + 1, top.location.href.length);
var sAnchorName = '';
try { sAnchorName = top.location.href.substring(top.location.href.lastIndexOf("#") + 1, top.location.href.length); }
catch(err) { sAnchorName = ''; }
var nSelectedTab = 0;
if (sAnchorName == '_index') nSelectedTab = 1
else if (sAnchorName == '_search') nSelectedTab = 2;
@ -233,7 +235,7 @@
<a
href="WhatsNew216.html"
target="FrameMain">
What's New? 2.1.6 (changelog)</a>
What's New? 2.2.0 (changelog)</a>
</li><li class="" id="WhatsNew215" data="">
<a