updated docs

[[Split portion of a mixed commit.]]
This commit is contained in:
ansstuff 2013-05-07 14:53:50 +00:00
parent 6c2c160958
commit 382995f111
39 changed files with 507 additions and 517 deletions

View File

@ -93,7 +93,7 @@
<p><br/></p>
<p><br/></p>
<p>Help menu created by adelikat.</p>
<p>Updated &amp; recompiled by AnS.</p>
<p>Updated &amp; maintained by AnS.</p>
<p>Information collected and/or written/edited by adelikat and AnS.</p>
<p>Minor edits of lua-related text by FatRatKnight.</p>
<p>Debugger documentation edits by rainwarrior.</p>

View File

@ -61,7 +61,7 @@
<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">SNELS9x-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>
<p><br/></p>
<p><br/></p>
<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>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/RamSearch.html" target="_blank">here</a>.</p>
<p><br/></p>

View File

@ -62,9 +62,9 @@
<p><br/></p>
<p>A tool-assisted speedrun (commonly abbreviated TAS) is a speedrun movie or performance produced with the use of tools such as slow motion and re-recording. The basic premise of these runs is that a "tool" (such as an emulator that provides the author with features that are unavailable in regular playing) is used in order to overcome human limitations such as skill and reflex.</p>
<p><br/></p>
<p>Creating a tool-assisted speed run is the process of finding the ideal set of inputs to complete a given criterion - usually completing a game as fast as possible. No limits are imposed on the tools used for this search, but the result has to be a set of timed key-presses that, when played back on the actual console, achieves the target criterion. Traditionally, the only available tool for this was an emulator with re-recording - the ability to use savestate while recording key-presses. However, due to advances in the field, it is now often expected that frame-advance, stepping through emulation one frame at a time, is used. A tool-assisted speed run done without this technique may be criticised as "sloppy play". Before frame-advance became common, playing in slow motion was a common technique, but frame-advance has displaced this.</p>
<p>Creating a tool-assisted speed run is the process of finding the ideal set of inputs to complete a given criterion - usually completing a game as fast as possible. No limits are imposed on the tools used for this search, but the result has to be a set of timed key-presses that, when played back on the actual console, achieves the target criterion. Traditionally, the only available tool for this was an emulator with re-recording - the ability to use savestate while recording key-presses. However, due to advances in the field, it is now often expected that frame-advance, stepping through emulation one frame at a time, is used. A tool-assisted speed run done without this technique may be criticised as "sloppy play". Before Frame Advance became common, playing in slow motion was a common technique, but Frame Advance has displaced this.</p>
<p><br/></p>
<p>In essence, Tool Assistance allows one to overcome human limitations of skill and reflex in order push a game to its limits. &nbsp;One important thing to remember is that TAS movies are not competing in terms of playing skill, nor do they claim to. </p>
<p>In essence, Tool Assistance allows one to overcome human limitations of skill and reflex in order to push a game to its limits. &nbsp;One important thing to remember is that TAS movies are not competing in terms of playing skill, nor do they claim to. </p>
<p><br/></p>
<p>For more info on Tool Assisted Speedruns:</p>
<p><a class="rvts18" href="http://tasvideos.org/">http://tasvideos.org/</a></p>
@ -84,7 +84,7 @@
<p><span class="rvts10">Automated Movie Making Processes</span></p>
<p><span class="rvts18">Macros &amp; &nbsp;Multi-tracking</span>, <span class="rvts18">Lua scripting</span>, <span class="rvts18">Basic Bot</span>, </p>
<p><br/></p>
<p><span class="rvts10">Finding Ram values:</span></p>
<p><span class="rvts10">Finding RAM values:</span></p>
<p><a class="rvts18" href="CheatSearch.html">Cheat Search</a>, <span class="rvts18">RAM Filter</span>, <a class="rvts18" href="HexEditor.html">Hex Editor</a>, <a class="rvts18" href="Debugger.html">Debugger</a>, <a class="rvts18" href="NESRAMMappingFindingValues.html">NES RAM Guide</a></p>
<p><br/></p>
<p><span class="rvts10">RAM Monitoring:</span></p>
@ -110,6 +110,8 @@
<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><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

@ -63,14 +63,8 @@
<p><br/></p>
<p><span class="rvts40">Slow emulation / Sound crackle</span></p>
<p><br/></p>
<p>FCEUX may not run well on slower CPUs.</p>
<p>Try enabling hardware acceleration in the <a class="rvts18" href="Video.html">Video config</a> dialog.</p>
<p>Also ensure that you're using the Old PPU, because the New PPU engine is very slow. Check Config -&gt; PPU -&gt; Old PPU.</p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts40">Emulated picture is blurred (similar to the bilinear filter)</span></p>
<p><br/></p>
<p>Disable hardware acceleration in the <a class="rvts18" href="Video.html">Video config</a> dialog.</p>
<p>FCEUX may not run well on slow CPUs.</p>
<p>Ensure that you're using the Old PPU, because the New PPU engine is very slow. Check Config -&gt; PPU -&gt; Old PPU.</p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts40">Sound crackle</span></p>
@ -78,6 +72,11 @@
<p>If you enable hardware acceleration and VSync, and your monitor has a framerate different from 60FPS, you may experience minor sound cracle. This is a known issue and will probably be resolved in a future release.</p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts40">Emulated picture is blurred (similar to the bilinear filter)</span></p>
<p><br/></p>
<p>Enable the "Create surface in system memory" option in the <a class="rvts18" href="Video.html">Video</a> config dialog.</p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts40">Slow savestates when recording movies</span></p>
<p><br/></p>
<p>On slower computers, savestates can be slow with long movies. &nbsp;A small speedup can be done by disabling Config -&gt; Enable -&gt; Backup savestates.</p>

View File

@ -64,7 +64,8 @@
<p><span class="rvts12">Full Screen Settings</span></p>
<p><br/></p>
<p><span class="rvts40">Full Screen</span></p>
<p>If checked, FCEUX will enter full screen mode when it is loaded.</p>
<p>Check this checkbox to enter full screen mode.</p>
<p>Alternatively, you can use a hotkey (Alt+Enter by default) or a double-click (if the "Switch fullscreen by double-click" option is enabled in <a class="rvts18" href="GUI.html">GUI options</a>).</p>
<p><br/></p>
<p><span class="rvts40">Enter full screen mode after game is loaded</span></p>
<p>If checked, FCEUX will enter full screen mode when a game is loaded.</p>
@ -83,8 +84,8 @@
<p><span class="rvts40">Sync Method</span></p>
<p>If the emulator is running poorly, trying out these sync options can help make it run smoother (fix image tearing).</p>
<p><br/></p>
<p><span class="rvts40">Disable Hardware Acceleration</span></p>
<p>If full screen is causing problems, checking this might fix it.</p>
<p><span class="rvts40">Create surface in system memory</span></p>
<p>If full screen is causing problems (for example, the image is blurry), checking this might fix it.</p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts12">Windowed Settings</span></p>
@ -105,8 +106,13 @@
<p><span class="rvts40">Sync Method</span></p>
<p>If the emulator is running poorly, trying out these sync options can help make it run smoother (fix image tearing).</p>
<p><br/></p>
<p><span class="rvts40">Disable Hardware Acceleration</span></p>
<p>This is checked by default. Slower computers may experience slow emulation and should uncheck this option. On WIndows XP the picture may be somewhat blurred with this option checked.</p>
<p><span class="rvts40">Create surface in system memory</span></p>
<p>If the image is blurry, checking this might fix it.</p>
<p><br/></p>
<p><br/></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p><br/></p>
<p>The following options affect both Fullscreen and windowed mode.</p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts27">Aspect ratio</span></p>
@ -114,12 +120,15 @@
<p><span class="rvts40">Best Fit</span></p>
<p>This is checked by default, so FCEUX will automatically maintain correct aspect ratio for any size of the window. If you uncheck this, the image will be stretched to fill the whole window area.</p>
<p><br/></p>
<p><span class="rvts40">TV Aspect (4:3)</span></p>
<p>Check this if you prefer TV aspect ratio (4:3).</p>
<p><br/></p>
<p><span class="rvts40">Use console BG color for empty areas</span></p>
<p><span class="rvts40">BG color</span></p>
<p>When window size is wider or taller than image size, empty areas of the window are colored black by default. Checking this option will color these areas according to current "background" color of NES palette.</p>
<p><br/></p>
<p><span class="rvts40">Square pixels</span></p>
<p>This is checked by default, so FCEUX will limit the max size of the image to make all pixels share the same width/height. If you uncheck this, the image will be stretched to fill the whole width or height of the window area.</p>
<p><br/></p>
<p><span class="rvts40">TV Aspect</span></p>
<p>Check this if you want to change the image aspect ratio (e.g. to 4:3). You can enter different values in adjacent text fields.</p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts27">Drawing Area</span></p>
<p><br/></p>
@ -130,7 +139,7 @@
<p>Sets the last scan line for NTSC and PAL Modes. This should be left on the default of 231 for NTSC and 239 for PAL.</p>
<p><br/></p>
<p><span class="rvts40">Clip left and right sides</span><span class="rvts32"> (8 px on each)</span></p>
<p>If enabled, 8 pixels from each side of the windows will be removed. Some NES games (even on real hardware) show grapical artifacts on the sides of screen when scrolling, so you may hide those artifacts by checking the option.</p>
<p>If enabled, 8 pixels from each side of the windows will be removed. Some NES games show grapical artifacts on the sides of screen when scrolling (on real hardware too!), so you may hide those artifacts by checking the option.</p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts27">Emulation</span></p>

File diff suppressed because one or more lines are too long

View File

@ -87,7 +87,7 @@
<p class="rvps10"><span class="rvts22">При наведении курсором мыши на правую половину любой Закладки (в Списке Закладок) сбоку появляется скриншот из игры, соответствующий происходящему на экране в кадре Закладки в указанном ответвлении мувика. Под скриншотом появляется текстовое описание данного ответвления.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">B. </span><span class="rvts37">Отображение информации о Закладке</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>
<p class="rvps10"><span class="rvts26">C. </span><span class="rvts37">Подсвечивание символов кнопок в Заголовке Piano Roll</span></p>
<p class="rvps10"><span class="rvts22">При наведении курсором мыши на любой символ в Заголовке Piano Roll этот символ подсвечивается зелёным светом, если в Piano Roll есть выделенные строки. Свет подсказывает, что можно щёлкнуть по этому символу для изменения </span><span class="rvts22">Ввод</span><span class="rvts22">а или Маркеров в выделенных кадрах.</span></p>
@ -96,7 +96,7 @@
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts52">Левая кнопка</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>
<p class="rvps10"><span class="rvts26">A. </span><span class="rvts37">Стандартные операции в Windows</span></p>
<p class="rvps10"><span class="rvts22">Большинство элементов окна TAS Editor управляется так же, как в других Windows-программах:</span></p>
@ -121,11 +121,11 @@
<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></p>
<p class="rvps10"><span class="rvts22">Если </span><span class="rvts22">зажать левую кнопку мыши и</span><span class="rvts22"> перемещать курсор мыши</span><span class="rvts22">, м</span><span class="rvts22">ожно рисовать и стирать Ввод в других ячейках Piano Roll, проводя по ним курсором мыши. Рисование начинается при щелчке по пустой клетке, стирание начинается при щелчке по заполненной клетке.</span></p>
<p class="rvps10"><span class="rvts22">Если перед щелчком за жать клавишу </span><span class="rvts34">Shift</span><span class="rvts22">, при щелчке изменится состояние указанной кнопки во всех кадрах, начиная с Курсора Выделения и заканчивая кадром щелчка. Состояние Выделения при этом не изменится.</span></p>
<p class="rvps10"><span class="rvts22">Если перед щелчком зажать клавишу </span><span class="rvts34">Alt</span><span class="rvts22">, </span><span class="rvts22">состояние указанной кнопки во всех кадрах, начиная с Курсора Выделения, будет установлено по шаблону. Состояние Выделения при этом не изменится.</span></p>
<p class="rvps10"><span class="rvts22">Если перед щелчком за жать клавишу </span><span class="rvts34">Shift</span><span class="rvts22">, при щелчке изменится состояние указанной кнопки во всех кадрах, начиная с Курсора Выделения и заканчивая кадром щелчка.</span></p>
<p class="rvps10"><span class="rvts22">Если перед щелчком зажать клавишу </span><span class="rvts34">Alt</span><span class="rvts22">, </span><span class="rvts22">состояние указанной кнопки во всех кадрах, начиная с Курсора Выделения, будет установлено по шаблону.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">E. </span><span class="rvts37">Установка/снятие Ввода с помощью Заголовка Piano Roll</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></p>
<p class="rvps10"><span class="rvts22">Если перед щелчком зажать и держать клавишу </span><span class="rvts34">Alt</span><span class="rvts22">, в выделенных кадрах будет установлен </span><span class="rvts22">Ввод</span><span class="rvts22"> по шаблону.</span></p>
<p class="rvps10"><span class="rvts22">Если щёлкать по "Frame#", вместо </span><span class="rvts22">Ввод</span><span class="rvts22">а в Выделении будут установлены или удалены Маркеры.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
@ -154,7 +154,7 @@
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts52">Правая кнопка</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>
<p class="rvps10"><span class="rvts26">A. </span><span class="rvts37">Навигация Курсором Проигрывателя с помощью колеса</span></p>
<p class="rvps10"><span class="rvts22">Зажать правую кнопку и вращать колесом мыши вверх/вниз. При этом курсор мыши не обязательно должен находиться над Piano Roll, он может быть на любом пустом месте окна TAS Editor или даже над окном эмулятора.</span></p>
@ -280,11 +280,11 @@
<p class="rvps10"><span class="rvts34">Ctrl + Insert</span><span class="rvts22"> = клонировать выделенные кадры</span></p>
<p class="rvps10"><span class="rvts34">Ctrl + </span><span class="rvts34">Shift + Insert</span><span class="rvts22"> = вставить пустые кадры на место выделения</span></p>
<p class="rvps10"><span class="rvts58"><br/></span></p>
<p class="rvps10"><span class="rvts34">Ctrl + F</span><span class="rvts22"> = вызвать окно Find Note</span></p>
<p class="rvps10"><span class="rvts34">Ctrl + F</span><span class="rvts22"> = вызвать окно "Find Note"</span></p>
<p class="rvps10"><span class="rvts58"><br/></span></p>
<p class="rvps10"><span class="rvts34">Ctrl + PageUp</span><span class="rvts22"> / </span><span class="rvts34">Ctrl + </span><span class="rvts34">Page</span><span class="rvts34">Down</span><span class="rvts22"> = прыгать Курсором Выделения по Маркерам</span></p>
<p class="rvps10"><span class="rvts34">Ctrl + Home</span><span class="rvts22"> / </span><span class="rvts34">Ctrl + </span><span class="rvts34">End</span><span class="rvts22"> </span><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="rvts34">Ctrl + Вверх</span><span class="rvts22"> / </span><span class="rvts34">Ctrl + Вниз</span><span class="rvts22"> = переместить Выделение на 1 кадр выше / ниже</span></p>
<p class="rvps10"><span class="rvts34">Ctrl + Home</span><span class="rvts22"> / </span><span class="rvts34">Ctrl + </span><span class="rvts34">End</span><span class="rvts22"> </span><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="rvts34">Ctrl + Вверх</span><span class="rvts22"> / </span><span class="rvts34">Ctrl + Вниз</span><span class="rvts22"> = переместить текущее Выделение на 1 кадр выше / ниже</span></p>
<p class="rvps10"><span class="rvts34">Ctrl + Вправо</span><span class="rvts22"> / </span><span class="rvts34">Ctrl + Влево</span><span class="rvts22"> = скроллировать Piano Roll вправо и влево</span></p>
<p class="rvps10"><span class="rvts58"><br/></span></p>
<p class="rvps10"><span class="rvts34">Shift + </span><span class="rvts34">Page</span><span class="rvts34">Up</span><span class="rvts22"> / </span><span class="rvts34">Shift + </span><span class="rvts34">PageD</span><span class="rvts34">own</span><span class="rvts22"> </span><span class="rvts22">=</span><span class="rvts22"> прыгать Курсором Проигрывателя по Маркерам</span></p>
@ -473,14 +473,14 @@
<p class="rvps10"><span class="rvts27">Esc</span><span class="rvts22"> выход из режима редактирования без сохранения изменений</span></p>
<p class="rvps10"><span class="rvts27">Tab</span><span class="rvts22"> переключение между нижним и верхним полем</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">3. Кнопки виртуальных джойстиков не действуют. Замечание: они будут действовать в том случае, если в настройках FCEUX стоит галочка Config -&gt; Enable -&gt; Background Input, не рекомендуется её устанавливать.</span></p>
<p class="rvps10"><span class="rvts22">3. Кнопки виртуальных джойстиков не действуют. Замечание: они будут действовать в том случае, если в настройках FCEUX стоит галочка Config -&gt; Enable -&gt; Background Input, поэтому не рекомендуется её устанавливать.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">4. Управление мышью остаётся без изменений. Любой щелчок за пределами поля редактирования (кроме щелчков средней кнопкой) завершает редактирование Заметки, сохраняя изменения. Также, если во время редактирования увести Курсор Проигрывателя или Курсор Выделения из области редактируемого Маркера, изменения сохранятся, и начнётся редактирование Заметки другого Маркера. Поэтому рекомендуется редактировать Заметки, только когда эмулятор стоит на паузе.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">4. Управление мышью остаётся без изменений. Любой щелчок за пределами поля редактирования (кроме щелчков средней кнопкой) завершает редактирование Заметки, сохраняя изменения. Также, если во время редактирования увести Курсор Проигрывателя или Курсор Выделения из области редактируемого Маркера, изменения сохранятся, и начнётся редактирование Заметки другого Маркера.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com/feature-tour/create-ebooks-for-amazon-kindle">Full-featured Kindle eBooks generator</a></p>
</div>

View File

@ -116,7 +116,7 @@
<p class="rvps10"><span class="rvts22">Для дополнительного удобства рекомендуется при создании каждой Закладки вводить в качестве Заметки краткое текстовое обозначение, например, скопипастить название мувика.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Почему fm3-файлы занимают так много места?</span></p>
<p class="rvps10"><span class="rvts22">В fm3-файле обычно сохраняется мгновенный снимок рабочего процесса ТАСера, в том числе вся Гринзона (которая и занимает большую часть файла). Подробнее см. </span><a class="rvts28" href="AdvancedFeatures.html#ProjectsSharing">Продвинутые возможности</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">В fm3-файле обычно сохраняется мгновенный снимок рабочего процесса ТАСера, в том числе вся Гринзона (которая и занимает большую часть файла). Подробнее см. </span><a class="rvts28" href="AdvancedFeatures.html#ProjectsSharing">Продвинутые возможности</a><span class="rvts22">. Параметры сохранения можно </span><a class="rvts28" href="ProgramCustomization.html#Projectfilesavingoptions">настроить</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Почему в этом Руководстве так много текста?</span></p>
<p class="rvps10"><span class="rvts22">Помимо сухого перечисления спецификаций здесь находится обучающий Курс, в котором систематизируются принципы эффективного подхода к ТАСингу. Ранее не существовало попыток сформулировать ТАСерский опыт в виде учебника, поэтому автор посчитал, что многословность является меньшим злом, чем неточность изложения.</span></p>

View File

@ -121,13 +121,13 @@
<p class="rvps10"><span class="rvts26">Segment Участок</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></p>
<p class="rvps10"><span class="rvts22">Размер участка измеряется в кадрах, а границы участка обычно определяются игровыми событиями. Начальное событие отсекает все предыдущие задачи и концентрирует внимание ТАСера на ближайшем наборе условий. Конечное событие служит для оценки оптимальности всех вариантов решения текущей задачи.</span></p>
<p class="rvps10"><span class="rvts22">Подробнее: </span><a class="rvts28" href="TASingProcess.html">Процесс ТАСинга</a></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">Optimization Оптимизация</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></p>
<p class="rvps10"><span class="rvts22">Процесс оптимизация ТАСа заключается в редактировании Ввода и оценке получающегося Вывода. Когда ТАСер получает от игры более предпочтительный результат, он отмечает текущий Ввод в качестве основного, пока не найдёт ещё более оптимальный Ввод. В финальном ТАСе для каждой подзадачи оставлен наилучший вариант решения.</span></p>
<p class="rvps10"><span class="rvts22">Подробнее: </span><a class="rvts28" href="TASingMethodology.html">Методология ТАСинга</a></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">Improvement Улучшение</span></p>
@ -135,7 +135,7 @@
<p class="rvps10"><span class="rvts22">Примеры улучшений в спидранах: устранение неточностей, использование неиспользованного таймсэйвера, повышение эффективности использования таймсэйвера, повышение развлекательности мувика без потери скорости.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">Timesaver Таймсэйвер</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></p>
<p class="rvps10"><span class="rvts22">Примеры таймсэйверов: фичи игры, баги игры, манипуляция удачей.</span></p>
<p class="rvps10"><span class="rvts22">Замечание: иногда ТАСер сознательно отказывается от использования некоторых таймсэйверов, в этом случае для его ТАСа отводится отдельная категория на сайте. Например: спидран Super Mario Bros без использования кнопки </span><span class="rvts32">B</span><span class="rvts22"> (отказ от фичи), спидран Sonic the Hedgehog без прохождения сквозь стены (отказ от бага).</span></p>
@ -237,12 +237,13 @@
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">Bookmark Закладка</span></p>
<p class="rvps10"><span class="rvts22">Номерная отметка для кадра мувика.</span></p>
<p class="rvps10"><span class="rvts22">В Тасэдиторе есть 10 слотов для Закладок.</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><a class="rvts28" href="Toolbox.html#bookmarks">Панель инструментов</a><span class="rvts22">, </span><a class="rvts28" href="Ideas.html#BookmarksBranches">Спецификации Закладок</a></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">Branch Ответвление</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></p>
<p class="rvps10"><span class="rvts22">С помощью ответвлений можно одновременно хранить в проекте несколько разных мувиков и мгновенно переключаться между ними:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
@ -264,9 +265,9 @@
<p class="rvps10"><span class="rvts22">Подробнее: </span><a class="rvts28" href="AdvancedFeatures.html#UsingLua">Продвинутые возможности</a><span class="rvts22">, </span><a class="rvts28" href="Ideas.html#Lua">Луа-автоматизация</a><span class="rvts22">, </span><a class="rvts28" href="LuaAPI.html">Lua-функции</a></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">Bot Бот</span><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></p>
<p class="rvps10"><span class="rvts22">В наши дни практично использовать ботов только для исчерпывающего перебора вариантов на коротком участке мувика. И в большинстве случаев ТАСеру проще перебрать варианты вручную, интуитивно отсеивая тупиковые варианты в уме, чем заниматься написанием бота и долгим ожиданием результатов полного перебора.</span></p>
<p class="rvps10"><span class="rvts22">В наши дни практично использовать ботов только для исчерпывающего перебора вариантов на очень коротком участке мувика. И в большинстве случаев ТАСеру проще перебрать варианты вручную, интуитивно отсеивая тупиковые варианты в уме, чем заниматься написанием бота и долгим ожиданием результатов полного перебора.</span></p>
<p class="rvps10"><span class="rvts22">Для создания ботов требуется умение программировать. Обычно боты либо пишутся на Lua, либо встраиваются в эмуляторы с помощью модификации исходного кода.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">Pattern Шаблон</span></p>

View File

@ -61,7 +61,8 @@
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Первоначально TAS Editor базировался на коде экспериментального инструмента TASEdit из FCEUX 2.1.5.</span></p>
<p class="rvps10"><span class="rvts22">TASEdit представлял из себя редактор Ввода (в духе TAS Movie Editor), встроенный в эмулятор, чтобы сократить время между редактированием и просмотром участков. Так как при разработке TASEdit не проводилось исследование принципов и закономерностей ТАСинга, у авторов TASEdit не было чёткого видения финального инструмента, и имеющийся код не был расширяемым. Поэтому вскоре после начала разработки TAS Editor его код был полностью переписан, чтобы облегчить дальнейшее расширение функционала.</span></p>
<p class="rvps10"><span class="rvts22">Нижеописанная архитектура Тасэдитора спроектирована, исходя из авторских представлений о методическом ТАСинге и о необходимом функционале для облегчения такого ТАСинга.</span></p>
<p class="rvps10"><span class="rvts22">TAS Editor представляет из себя инструмент, который лучше традиционных перезаписей подходит для редактирования Ввода, а также создания Ввода и, самое главное, шлифовки (оптимизации).</span></p>
<p class="rvps10"><span class="rvts22">Нижеописанная архитектура Тасэдитора спроектирована, исходя из авторских представлений о методичном ТАСинге и о необходимом функционале для облегчения такого ТАСинга.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps10"><span class="rvts22"><br/></span></p>
@ -343,18 +344,18 @@
<li class="rvps10"><span class="rvts22">вызывать центральную функцию Тасэдитора после эмуляции каждого кадра, а также, когда эмулятор на паузе. Частота вызова должна быть не менее 20 раз в секунду (это требуется для плавности анимаций)</span></li>
<li class="rvps10"><span class="rvts22">передавать системные сообщения окну Тасэдитора, в том числе сообщения клавиатурных акселераторов</span></li>
<li class="rvps10"><span class="rvts22">если эмулятор не использует колесо мыши, он должен пересылать WM_MOUSEWHEEL Тасэдитору, а не игнорировать это сообщение. То же самое с обработкой средней кнопки</span></li>
<li class="rvps10"><span class="rvts22">при выходе из эмулятора, если запущен Тасэдитор, необходимо вызывать функцию AskSave(), чтобы Тасэдитор проверил наличие несохранённых изменений и позволил пользователю сохранить их. Если функция AskSave() возвращает </span><span class="rvts72">false</span><span class="rvts22">, отменять выход из эмулятора (это означает, что пользователь выбрал Отмену)</span></li>
<li class="rvps10"><span class="rvts22">при выходе из эмулятора, если запущен Тасэдитор, необходимо вызывать функцию </span><span class="rvts21">askSave()</span><span class="rvts22">, чтобы Тасэдитор проверил наличие несохранённых изменений и позволил пользователю сохранить их. Если функция </span><span class="rvts21">askSave()</span><span class="rvts22"> возвращает </span><span class="rvts72">false</span><span class="rvts22">, отменять выход из эмулятора (это означает, что пользователь выбрал Отмену)</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">В модуль, ответственный за </span><span class="rvts26">Movie</span><span class="rvts22">:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">предоставлять полный доступ к данным текущего мувика (создание/чтение/запись/любая модификация). Мувик должен быть промежуточным слоем между пользовательским вводом (генерируемым с помощью виртуальных джойстиков) и эмулируемой игрой. Игра ни на каком этапе эмуляции не должна брать Ввод напрямую из виртуальных джойстиков. Альтернатива (как реализовано в FCEUX): при любом изменении Ввода мувика на текущем кадре эмулятор должен изменять состояние виртуальных джойстиков, используя данные из мувика. В любом случае, Тасэдитор взаимодействует с игрой, читая и модифицируя данные мувика, и не опрашивает виртуальные джойстики. В Piano Roll отображаются данные из текущего мувика, и при редактировании Ввода изменяются данные текущего мувика</span></li>
<li class="rvps10"><span class="rvts22">предоставлять полный доступ к данным текущего мувика (создание/чтение/запись/любая модификация). Мувик должен быть промежуточным слоем между пользовательским вводом (генерируемым с помощью виртуальных джойстиков) и эмулируемой игрой. Игра ни на каком этапе эмуляции не должна брать Ввод напрямую из виртуальных джойстиков. Альтернатива (как реализовано в FCEUX): при любом изменении Ввода мувика на текущем кадре эмулятор должен изменять состояние виртуальных джойстиков, используя данные из мувика. В любом случае, Тасэдитор взаимодействует с игрой, читая и модифицируя данные мувика, и не опрашивает виртуальные джойстики. В Piano Roll отображаются данные из текущего мувика, и при редактировании Ввода изменяются только данные текущего мувика</span></li>
<li class="rvps10"><span class="rvts22">в режиме Записи в начале каждого кадра (сразу после чтения данных из виртуальных джойстиков в мувик) отправлять сигнал Рекордеру (и Рекордер может изменить данные этого кадра в мувике)</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">В модуль, ответственный за </span><span class="rvts26">Input</span><span class="rvts22">:</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)</span></li>
<li class="rvps10"><span class="rvts22">Сброс/выключение и другие команды эмулируемой платформы не должны срабатывать сразу по команде пользователя. Они должны работать подобно копкам виртуальных джойстиков, чтобы у Тасэдитора была возможность разрешить или запретить выполнение вызванной команды. А когда режим Записи отключен, у пользователя вообще не должно быть возможности вызвать команды эмулируемой платформы</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
@ -382,15 +383,15 @@
<p class="rvps10"><span class="rvts22">В модуль, ответственный за </span><span class="rvts26">Lua engine</span><span class="rvts22">:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts22">поддерживать библиотеку </span><span class="rvts21">taseditor</span><span class="rvts22">. Логика функций реализуется самим Тасэдитором, а от эмулятора требуется брать входные данные из стека и передавать их соответствующей функции Тасэдитора, а затем принимать выходные данные и помещать их в стек Луа</span></li>
<li class="rvps10"><span class="rvts22">поддерживать регистрацию не более одной </span><a class="rvts28" href="LuaAPI.html#registermanual">Manual-функции</a><span class="rvts22"> и как минимум одной </span><a class="rvts28" href="LuaAPI.html#registerauto">Автофункции</a></li>
<li class="rvps10"><span class="rvts22">подавать сигнал Тасэдитору об изменении статуса Manual-функции (регистрация/удаление), чтобы тот изменял состояние кнопки "</span><span class="rvts32">Run function</span><span class="rvts22">"</span></li>
<li class="rvps10"><span class="rvts22">поддерживать регистрацию </span><a class="rvts28" href="LuaAPI.html#registermanual">Manual-функции</a><span class="rvts22"> и </span><a class="rvts28" href="LuaAPI.html#registerauto">Автофункции</a></li>
<li class="rvps10"><span class="rvts22">подавать сигнал Тасэдитору об изменении статуса Manual-функции (регистрация/удаление), чтобы тот изменял внешний вид кнопки "</span><span class="rvts32">Run function</span><span class="rvts22">"</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">В модуль, ответственный за </span><span class="rvts26">Replay</span><span class="rvts22">:</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">определять тип проигрываемого мувика (обычный мувик или мувик с данными Тасэдитора в конце). Если это проект Тасэдитора, то при попытке редактирования его содержимого (при загрузке сэйва в режиме Read+Write) эмулятор должен отказываться от редактирования и предлагать запуск Тасэдитора, а в случае запуска сразу передавать Тасэдитору ссылку на проигрываемый файл</span></li>
<li class="rvps10"><span class="rvts22">уметь определять тип проигрываемого мувика (обычный мувик или мувик с данными Тасэдитора в конце). Если это проект Тасэдитора, то при попытке редактирования его содержимого (при загрузке сэйва в режиме Read+Write) эмулятор должен отказываться от редактирования и предлагать запуск Тасэдитора, а в случае запуска сразу передавать Тасэдитору ссылку на проигрываемый файл</span></li>
</ul>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts26">Остальное</span><span class="rvts22">:</span></p>

View File

@ -62,13 +62,13 @@
<p class="rvps10"><img align="right" alt="" style="padding : 6px;" src="lib/famtasia-smb3j.png"/></p>
<p class="rvps10"><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">Поначалу ТАСинг, как и обычные спидраны, не так уж сильно отличался от нормального процесса прохождения видеоигры. ТАСер просто запускал эмулятор, включал режим записи кнопок и проходил игру, часто сохраняясь и загружаясь для исправления наиболее очевидных ошибок, а в наиболее насыщенные моменты замедляя игровой процесс, чтобы компенсировать медленную реакцию человеческого организма.</span></p>
<p class="rvps10"><span class="rvts22">Возможность исправлять свои ошибки раскрепощает фантазию человека и побуждает его экспериментировать. Иллюзии конкретной игры уже менее ограничивают спектр мыслей ТАСера. Но на ход мыслей всё ещё оказывают влияние стереотипы реального физического мира. Например, если опасный объект убивает персонажа, то логично предположить, что он убивает всегда. Хотя на самом деле может оказаться, он убивает только в чётные кадры или только при обнулении дробной части координат. Но об этом невозможно догадаться, используя одни лишь сэйвы и замедление. Нужно сначала перестать быть игроком, чтобы стать независимым исследователем.</span></p>
<p class="rvps10"><span class="rvts22">Большим прорывом в истории развития ТАСинга стал </span><span class="rvts26">Frame Advance</span><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></p>
<p class="rvps10"><span class="rvts22">Нужно перестать быть игроком и стать исследователем. И есть инструменты, предназначенные именно для такой умственной трансформации.</span></p>
<p class="rvps10"><span class="rvts22">Большим прорывом в истории развития ТАСинга стал </span><span class="rvts26">Frame Advance</span><span class="rvts22"> покадровая эмуляция игр. Теперь при ТАСинге игра постоянно стоит на паузе, предоставляя ТАСеру возможность размеренно анализировать каждый аспект геймплея по отдельности. Раньше (при простом замедлении) игра не переставала быть связным потоком событий, которые игрок вынужден воспринимать как единый коктейль переживаний и эмоций. А теперь при покадровой игре ТАСер может обособить в голове любое отдельно взятое событие текущего кадра. Это значительно меняет принципы восприятия игровой информации. Стереотипы материального мира уже не диктуют ТАСеру, как действовать в мире виртуальном, и человек видит игру более объективно, а значит, может обнаружить несовершенства и лазейки в её правилах.</span></p>
<p class="rvps10"><span class="rvts22">Конечно, сама игра по-прежнему пытается навязать игроку типовые шаблоны поведения, и новичку справляться с этим сложнее, чем опытному ТАСеру. Именно поэтому опытным ТАСерам гораздо легче обогнать чужой спидран (или даже свой старый) не из-за ловкого владения инструментами, а из-за </span><span class="rvts31">"профессиональной деформации"</span><span class="rvts22">, позволяющей легко замечать уязвимости в играх.</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>
<p class="rvps10"><span class="rvts22">Разработка инструментального комплекса под названием "TAS Editor" преследует две основные цели:</span></p>
<ol style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
@ -119,10 +119,9 @@
<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">У программистов есть ценная традиция повышение читабельности кода с помощью комментариев. Это позволяет держать в голове более чёткую картину проекта и обходиться без постоянной перепроверки результатов, потому что в большинстве случаев результат весьма предсказуем, когда известен контекст.</span></p>
<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><a class="rvts28" href="http://tasvideos.org" target="_blank">TASVideos.org</a><span class="rvts22"> поддерживает загрузку и публикацию проектов Тасэдитора (fm3-файлов), так что вы можете делиться не только готовым мувиком, но и своими наработками, поощряя атмосферу открытости и взаимопомощи. Если не хотите делиться, можете экспортировать данные в формат fm2 и опубликовать только его.</span></p>
<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><a class="rvts28" href="http://tasvideos.org" target="_blank">TASVideos.org</a><span class="rvts22"> поддерживает загрузку проектов Тасэдитора (fm3-файлов), так что вы можете опубликовать не только готовый мувик, но и свои наработки, поощряя атмосферу открытости и взаимопомощи. Если не хотите делиться, можете экспортировать данные в формат fm2 и опубликовать только его.</span></p>
<p class="rvps10"><span class="rvts22">FM3-файлы проигрываются эмулятором FCEUX начиная с версии 2.2.0 точно так же, как FM2-файлы. В более ранних версиях FCEUX fm3-файлы также можно проиграть, предварительно поменяв расширение файла на fm2.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">В следующей главе: </span><a class="rvts29" href="ProgramInterface.html">обучение основам обращения с программой</a><span class="rvts22">.</span></p>

View File

@ -59,7 +59,9 @@
<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">Экран FCEUX может отображать лишь события одного кадра. Piano Roll может отображать в окне содержимое нескольких десятков кадров. </span><span class="rvts22">Но мувик среднестатистического ТАСа содержит десятки тысяч кадров. Поэтому ТАСеру постоянно необходимо перемещаться по мувику вверх и вниз, чтобы отобразить в окне Piano Roll интересующий его участок мувика, либо чтобы отобразить на экране FCEUX события интересующего кадра мувика.</span></p>
<p class="rvps10"><span class="rvts22">Экран эмулятора может отображать лишь события одного кадра.</span></p>
<p class="rvps10"><span class="rvts22">Piano Roll может отображать в окне содержимое нескольких десятков кадров.</span></p>
<p class="rvps10"><span class="rvts22">Но мувик среднестатистического ТАСа содержит десятки тысяч кадров. Поэтому ТАСеру постоянно необходимо перемещаться по мувику вверх и вниз, чтобы отобразить в окне Piano Roll интересующий его участок мувика, либо чтобы отобразить на экране FCEUX события интересующего кадра мувика.</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"><br/></span></p>
@ -212,7 +214,7 @@
<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">Если в панели Playback установлена галочка "Follow cursor", то Piano Roll автоматически скроллируется вслед за Курсором Проигрывателя.</span></p>
<p class="rvps10"><span class="rvts22">Если в панели Playback установлена галочка "Follow cursor", то Piano Roll автоматически скроллируется вслед за Курсором Проигрывателя (но только не во время добегания).</span></p>
<p class="rvps10"><a name="frame-advance-rewind"></a>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">1. Покадровое перемещение</span></p>

View File

@ -71,7 +71,7 @@
<li class="rvps10"><span class="rvts22">Н</span><span class="rvts22">авигация курсором мыши к любому кадру текущего участка осуществляется практически мгновенно.</span></li>
<li class="rvps10"><span class="rvts22">Отредактировать участок мышью. М</span><span class="rvts22">ожно менять Ввод либо вслепую, либо время от времени перемещать Курсор Проигрывателя, чтобы свериться с игрой. </span><span class="rvts22">Шаги 3 и 4 непрерывно чередуются, пока редактирование не считается законченным.</span></li>
<li class="rvps10"><span class="rvts22">Определить кадр конца участка, поставив Курсора Проигрывателя на целевое событие.</span></li>
<li class="rvps10"><span class="rvts22">[</span><span class="rvts37">необязательный шаг</span><span class="rvts22">] </span><span class="rvts22">Сохранить готовый подход в любую свободную Закладку, например, в слот </span><span class="rvts27">8</span><span class="rvts22">.</span></li>
<li class="rvps10"><span class="rvts22">[</span><span class="rvts37">необязательный шаг</span><span class="rvts22">] </span><span class="rvts22">Сохранить готовый подход в любую свободную Закладку, например, в слот </span><span class="rvts27">8</span><span class="rvts22"> или </span><span class="rvts27">7</span><span class="rvts22">.</span></li>
<li class="rvps10"><span class="rvts22">Если это не первый подход к прохождению участка, с</span><span class="rvts22">равнить новый</span><span class="rvts22"> результат с лучшим </span><span class="rvts22">старым</span><span class="rvts22"> результатом, используя критерий оптимальности. Если новый подход оказался лучше</span><span class="rvts22"> (или это первый </span><span class="rvts22">подход</span><span class="rvts22">),</span><span class="rvts22"> следует </span><span class="rvts22">сохранить его в Закладку </span><span class="rvts27">9</span><span class="rvts22">. </span><span class="rvts22">Слот </span><span class="rvts27">9</span><span class="rvts22"> будет отвечать за хранение самого лучшего результата шлифовки участка.</span></li>
<li class="rvps10"><span class="rvts22">Если осталось желание испробовать другие подходы, следует вернуться к шагу 2, и так до тех пор пока не иссякнут идеи по данному участку.</span></li>
<li class="rvps10"><span class="rvts22">[</span><span class="rvts37">необязательный шаг</span><span class="rvts22">]</span><span class="rvts22"> </span><span class="rvts22">Когда идеи начинают иссякать, </span><span class="rvts22">можно почерпнуть информацию из прошлого или будущего: пересмотреть несколько участков, перетаскивая Курсор Проигрывателя или отпустив паузу эмулятора. При необходимости можно по-быстрому дорисовать </span><span class="rvts22">Ввод</span><span class="rvts22"> для просмотра предстоящих событий игры.</span></li>
@ -81,12 +81,12 @@
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<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"> в Закладки (шаги 6 и 7), а просто один раз дойти до конечного события, а затем экспериментировать с этим Вводом, постепенно улучшая его (а если вместо улучшения получилось ухудшение сразу же откатывать изменения). Такой поверхностный способ ТАСинга, в принципе, имеет право на жизнь, но не рекомендуется, так как он не позволяет вам мыслить далеко за рамками первоначального подхода (из-за подсознательного страха потерять наилучший старый подход, если уйти от него слишком далеко).</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></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><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><span class="rvts22">а конечное событие изменилось. Зачастую непрактично тратить время на перетаскивание, поэтому вместо замыкающего Маркера можно обойтись вышеописанной установкой Закладки, в которой сохраняется полученный вариант прохождения участка, и при этом она служит отметкой конца участка.</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"><a name="GreenArrow"></a>
<span class="rvts22">Ну а для простых участков можно вообще никак не отмечать конечный кадр, полагаясь на собственную память и на зелёную стрелку Тасэдитора. С помощью зелёной стрелки Тасэдитор может подсказать, на каком кадре вы остановили просмотр участка в прошлый раз (до того как начали изменять </span><span class="rvts22">Ввод</span><span class="rvts22"> участка). Обычно это и есть кадр, в котором происходило конечное событие в предыдущем подходе. Так что вы можете проиграть и обновлённый участок до этого кадра. Если после изменения </span><span class="rvts22">Ввод</span><span class="rvts22">а конечное событие стало детектироваться на 2 кадра выше зелёной стрелки, это означает, что вы обогнали предыдущий результат на 2 кадра, значит, новый </span><span class="rvts22">Ввод</span><span class="rvts22"> лучше (если ваш критерий скорость). Вся эта логическая цепочка пролетает в уме за один миг при взгляде на Piano Roll после просмотра результата недавнего изменения Ввода.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
@ -136,7 +136,7 @@
<p class="rvps10"><span class="rvts22">Плюсы метода:</span></p>
<p class="rvps14"><span class="rvts23">+ </span><span class="rvts22">Мгновенная навигация.</span></p>
<p class="rvps14"><span class="rvts23">+ </span><span class="rvts22">Возможность пропускать ненужные сцены.</span></p>
<p class="rvps14"><span class="rvts23">+ </span><span class="rvts22">Отстранённость ТАСера от игрового потока повышает объективность.</span></p>
<p class="rvps14"><span class="rvts23">+ </span><span class="rvts22">Отстранённость от игрового потока повышает объективность анализа.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Минусы метода:</span></p>
<p class="rvps14"><span class="rvts23"> </span><span class="rvts22">Отсутствие отдачи, присущей обычному игровому процессу.</span></p>

View File

@ -631,7 +631,7 @@
<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><span class="rvts26">PasteInsert</span><span class="rvts22"> перед самым концом мувика, за которым нет нажатий, но есть Маркер</span></li>
<li class="rvps10"><span class="rvts22">скопировать в Буфер Обмена пустой кадр, затем сделать </span><a class="rvts28" href="Operations.html#PasteInsert">PasteInsert</a><span class="rvts22"> перед самым концом мувика, за которым нет нажатий, но есть Маркер</span></li>
</ul>
<p class="rvps22"><span class="rvts44">Пример:</span></p>
<p class="rvps22"><span class="rvts44">20:31:44 Marker Shift 21</span></p>

View File

@ -74,7 +74,7 @@
<span class="rvts22">Теперь откройте пункт "View" (Вид).</span></p>
<p class="rvps10"><img align="left" alt="" style="padding : 6px;" src="lib/view-menu.png"/></p>
<p class="rvps10"><span class="rvts22">Подпункт "Find Note window" вызывает окно поиска текста в Заметках Маркеров. Эта функция будет полезной, если вы документируете свой мувик с помощью Заметок. Она описана в следующей главе.</span></p>
<p class="rvps10"><span class="rvts22">Далее в меню "View" идут галочки настроек внешнего вида программы. Чтобы опробовать все возможности, прямо сейчас создайте пробный проект (просто открыв Тасэдитор) и экспериментируйте с ним.</span></p>
<p class="rvps10"><span class="rvts22">Далее в меню "View" идут галочки настроек внешнего вида программы. Чтобы опробовать все возможности, создайте пробный проект и экспериментируйте с ним.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a name="DisplayBranchScreenshots"></a>
<span class="rvts22"><br/></span></p>
@ -87,7 +87,7 @@
<p class="rvps10"><span class="rvts23">View -&gt; Display Branch Descriptions</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="rvts31">тут я прошёл уровень поверху</span><span class="rvts22">". После этого следует создать Закладку на этом кадре, сохранив в неё текущий мувик. Затем можно удалить этот Маркер вместе с частью </span><span class="rvts22">Ввод</span><span class="rvts22">а и записать другую стратегию прохождения текущего участка. В конце, после просмотра альтернативного подхода нужно поставить новый Маркер с Заметкой в духе "</span><span class="rvts31">тут я прошёл уровень понизу</span><span class="rvts22">" и сохранить текущее ответвление мувика в другую Закладку. После этого вы можете сохранить проект и, скажем, выключить Тасэдитор. На следующий день вы легко вспомните плюсы и минусы двух записанных стратегий прохождения. </span><span class="rvts22">При наведении на первую Закладку будет появляться скриншот финального кадра уровня (где был поставлен Курсор Проигрывателя при создании первой Закладки) и надпись "</span><span class="rvts31">тут я прошёл уровень поверху</span><span class="rvts22">", а при наведении на вторую Закладку будет тоже появляться скриншот финального кадра уровня (где был оставлен голубой курсор при создании второй Закладки) и надпись "</span><span class="rvts31">тут я прошёл уровень понизу</span><span class="rvts22">". В данном случае по скриншоту трудно отличить два ответвления, т.к. обе стратегии заканчиваются на одном и том же событии игры. А по текстовым описаниям это сделать легко.</span></p>
<p class="rvps10"><span class="rvts22">Таким образом, при тестировании альтернативных стратегий прохождения для большого участка (например, для целого уровня игры) вы можете перед сохранением очередной стратегии в отдельное ответвление поставить Маркер на Курсор Проигрывателя и ввести текстовое описание созданной стратегии, например "</span><span class="rvts31">тут я прошёл уровень поверху</span><span class="rvts22">". После этого следует создать Закладку на этом кадре, сохранив в неё текущий мувик. Затем можно удалить этот Маркер вместе с частью </span><span class="rvts22">Ввод</span><span class="rvts22">а и записать другую стратегию прохождения участка. В конце, после просмотра альтернативного подхода нужно поставить новый Маркер с Заметкой в духе "</span><span class="rvts31">тут я прошёл уровень понизу</span><span class="rvts22">" и сохранить текущее ответвление мувика в другую Закладку. После этого вы можете сохранить проект и, скажем, выключить Тасэдитор. На следующий день вы легко вспомните плюсы и минусы двух записанных стратегий прохождения. </span><span class="rvts22">При наведении на первую Закладку будет появляться скриншот финального кадра уровня (где был поставлен Курсор Проигрывателя при создании первой Закладки) и надпись "</span><span class="rvts31">тут я прошёл уровень поверху</span><span class="rvts22">", а при наведении на вторую Закладку будет тоже появляться скриншот финального кадра уровня (где был оставлен голубой курсор при создании второй Закладки) и надпись "</span><span class="rvts31">тут я прошёл уровень понизу</span><span class="rvts22">". В данном случае по скриншоту трудно отличить два ответвления, т.к. обе стратегии заканчиваются на одном и том же событии игры. А по текстовым описаниям это сделать легко.</span></p>
<p class="rvps10"><span class="rvts22">По умолчанию эта опция включена. Если отключить, текстовые описания не будут появляться при наведении.</span></p>
<p class="rvps10"><span class="rvts22">Рекомендуется включить эту функцию, если вас не раздражают всплывающие текстовые поля.</span></p>
<p class="rvps10"><a name="EnableHotChanges"></a>
@ -127,6 +127,12 @@
<p class="rvps10"><span class="rvts22">По умолчанию установлено значение периода автосохранения в 15 минут. Это означает, что если вы совершили в проекте какие-нибудь существенные изменения (например, изменили </span><span class="rvts22">Ввод</span><span class="rvts22">, и в заголовке окна Тасэдитора появилась звёздочка), а потом в течение 15 минут так и не сохранили проект на диск, Тасэдитор либо напомнит вам об этом, либо запустит сохранение самостоятельно, в зависимости от галочки "silently". </span><span class="rvts22">Если галочка установлена, Тасэдитор молча сохраняет проект на диск под тем же именем. </span><span class="rvts22">Если галочка снята, по истечении периода Тасэдитор выводит на экран диалог сохранения файла (Save As), где вы можете либо подтвердить сохранение, либо отменить его. В последнем случае Тасэдитор подождёт ещё один период, прежде чем напомнить о наличии несохранённых данных.</span></p>
<p class="rvps10"><span class="rvts22">Функция автоматического сохранения работает, только когда текущему проекту уже присвоено файловое имя на диске.</span></p>
<p class="rvps10"><span class="rvts22">Максимально возможное значение периода равно 1440 минут (24 часа). Вы можете отключить эту функцию, сняв галочку "Autosave project", но делать это не рекомендуется.</span></p>
<p class="rvps10"><a name="Setmaxundolevels"></a>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Config -&gt; Set max undo levels</span></p>
<p class="rvps10"><span class="rvts22">Определяет количество уровней отката изменений. Столько раз вы сможете возвратить проект на предыдущее состояние нажатием </span><span class="rvts34">Ctrl + Z</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Журналу Истории требуется много оперативной памяти и немного места на диске для сохранения FM3-проекта. Весь Журнал сохраняется в файле проекта в сжатом виде, сжатие производится постепенно во моменты простоев в работе, незаметно для пользователя. Благодаря этому на время сохранения проекта объём Журнала Истории влияет незначительно.</span></p>
<p class="rvps10"><span class="rvts22">С помощью этой настройки можно регулировать используемый объём памяти. </span><span class="rvts22">По умолчанию установлено 100 уровней отката. Это значит, что вы сможете отменить 100 совершённых с мувиком действий. Это не очень много, ведь в реальном ТАСинге действия совершаются очень быстро, а время летит незаметно. Если в вашем компьютере достаточно оперативной памяти, можете увеличить значение "max undo levels" вплоть до максимально возможного 1000 уровней.</span></p>
<p class="rvps10"><a name="SetGreenzonecapacity"></a>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><img align="right" alt="" style="padding : 6px;" src="lib/greenzone-capacity.png"/></p>
@ -141,13 +147,7 @@
<p class="rvps10"><span class="rvts22">В качестве пробы выберите пункт "</span><span class="rvts22">Set greenzone capacity</span><span class="rvts22">", появится окошко для ввода числа, введите 100 и нажмите OK. Это означает, что вверх от текущего положения голубого курсора первая сотня кадров Гринзоны не будет очищаться. На этом пространстве любое перемещение Курсора Проигрывателя будет мгновенным, и вы можете перетаскивать его и использовать обратную перемотку с максимальным удобством. После первой сотни начнётся удаление каждого второго кадра вы заметите чередование зелёных и бледно-зелёных строк на Piano Roll. Это чередование продлится на протяжении около 200 кадров. На этом пространстве перемещение Курсора Проигрывателя тоже будет практически мгновенным.</span></p>
<p class="rvps10"><span class="rvts22">Таким образом Гринзона будет способна охватить 100 + 200 = 300 кадров, хотя в памяти хранится лишь информация о 100 + 100 = 200 кадров. Дальше на протяжении ещё 400 кадров будут чередоваться одна заполненная строка и три очищенных, и так далее. В итоге общий объём Гринзоны может занимать в памяти 500 кадров (чуть больше 5 мегабайт), но при этом в зоне доступа будет оставаться область в 3100 кадров (чуть меньше минуты).</span></p>
<p class="rvps10"><span class="rvts22">По умолчанию объём Гринзоны составляет 10000 кадров. Этого должно быть достаточно для большинства ТАСов. В реальной работе рекомендуется использовать значение не ниже 1000, так как дальнейшая экономия будет незначительной.</span></p>
<p class="rvps10"><span class="rvts22">Минимальное значение этого параметра равно единице (исключительно для тестов), максимальное значение 50000.</span></p>
<p class="rvps10"><a name="Setmaxundolevels"></a>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Config -&gt; Set max undo levels</span></p>
<p class="rvps10"><span class="rvts22">Определяет количество уровней отката изменений. Столько раз вы сможете возвратить проект на предыдущее состояние нажатием </span><span class="rvts34">Ctrl + Z</span><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Журналу Истории требуется много оперативной памяти и немного места на диске для сохранения FM3-проекта. Весь Журнал сохраняется в файле проекта в сжатом виде, сжатие производится постепенно во моменты простоев в работе, незаметно для пользователя. Благодаря этому на время сохранения проекта объём Журнала Истории влияет незначительно.</span></p>
<p class="rvps10"><span class="rvts22">С помощью этой настройки можно регулировать используемый объём памяти. </span><span class="rvts22">По умолчанию установлено 100 уровней отката. Это значит, что вы сможете отменить 100 совершённых с мувиком действий. Это не очень много, ведь в реальном ТАСинге действия совершаются очень быстро, а время летит незаметно. Если в вашем компьютере достаточно оперативной памяти, можете увеличить значение "max undo levels" вплоть до максимально возможного 1000 уровней.</span></p>
<p class="rvps10"><span class="rvts22">Максимальное значение этого параметра равно 50000.</span></p>
<p class="rvps10"><a name="EnableGreenzoning"></a>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Config -&gt; Enable Greenzoning</span></p>
@ -158,7 +158,7 @@
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Config -&gt; Autofire Pattern skips Lag</span></p>
<p class="rvps10"><span class="rvts22">Принимает во внимание лаг при использовании шаблонов (</span><span class="rvts34">Alt</span><span class="rvts22"> + щелчки по </span><span class="rvts22">Вводу</span><span class="rvts22">).</span></p>
<p class="rvps10"><span class="rvts22">Если галочка снята, при использовании шаблона в Piano Roll появится последовательность нажатий и отпусканий, в точности соответствующая выбранному шаблону (например, для шаблона "Alternating (1010...)" нажатия будут строго чередоваться с отпусканиями).</span></p>
<p class="rvps10"><span class="rvts22">Если галочка снята, при использовании шаблона в Piano Roll появится последовательность нажатий и отпусканий, в точности соответствующая выбранному шаблону (например, для шаблона "</span><span class="rvts31">Alternating (1010...)</span><span class="rvts22">" нажатия будут строго чередоваться с отпусканиями).</span></p>
<p class="rvps10"><span class="rvts22">Если галочка установлена, последовательность нажатий/отпусканий в Piano Roll может отличаться от шаблона (на лаговых кадрах будут дополнительные пропуски, которых не было в шаблоне).</span></p>
<p class="rvps10"><span class="rvts22">Так как лаговые кадры в большинстве игр не учитываются, нужно пропускать красные строки Piano Roll для правильного подсчёта пустых расстояний между нажатиями. Например, если между каждым нажатием должно пройти ровно 3 пустых кадра (шаблон вида "10001000"), но посреди участка оказался один кадр лага, то требуется добавить ещё один пустой кадр (100</span><span class="rvts26">0</span><span class="rvts22">01000).</span></p>
<p class="rvps10"><span class="rvts22">По умолчанию эта галочка установлена. Рекомендуется оставить её включенной, так как в большинстве случаев требуется пропускать лаговые кадры, чтобы подстраивать кнопочные нажатия под то, как игра воспринимает </span><span class="rvts22">Ввод</span><span class="rvts22">.</span></p>
@ -174,7 +174,7 @@
<p class="rvps10"><a name="DrawInputbydragging"></a>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Config -&gt; Draw Input by dragging</span></p>
<p class="rvps10"><span class="rvts22">Позволяет рисовать </span><span class="rvts22">Ввод</span><span class="rvts22">, зажав левую кнопку мыши и перемещая курсор мыши над поверхностью Piano Roll.</span></p>
<p class="rvps10"><span class="rvts22">Позволяет буквально рисовать </span><span class="rvts22">Ввод</span><span class="rvts22">, зажав левую кнопку мыши и перемещая курсор мыши над поверхностью Piano Roll.</span></p>
<p class="rvps10"><span class="rvts22">По умолчанию эта функция подключена, и вы можете быстро добавить или стереть длительное зажатие какой-нибудь кнопки.</span></p>
<p class="rvps10"><span class="rvts22">Рисование/стирание </span><span class="rvts22">Ввода обычно</span><span class="rvts22"> ограничено одним столбцом, чтобы можно было совершать размашистые движения мышью. Однако, если во время рисования зажать клавишу </span><span class="rvts34">Shift</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><span class="rvts22">а в Piano Roll, а рисование будет отключено. Это может пригодиться, если у вас дрожат руки, и способ рисования </span><span class="rvts22">Ввод</span><span class="rvts22">а вам не подходит. В остальных случаях рекомендуется включить эту функцию.</span></p>
@ -183,7 +183,7 @@
<p class="rvps10"><span class="rvts23">Config -&gt; Combine consecutive Recordings/Draws</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="rvts22">По умолчанию галочка снята. В режиме Recording каждый записанный кадр будет создавать отдельный пункт в Журнале Истории, и вы сможете откатывать изменения для каждого кадра. А при рисовании </span><span class="rvts22">Ввода</span><span class="rvts22"> каждый новый штрих будет создавать новый пункт в Журнале Истории, и вы сможете откатывать штрихи поодиночке.</span></p>
<p class="rvps10"><span class="rvts22">Однако в реальной работе такая точность отката не требуется. Поэтому для существенной экономии места в Журнале Истории рекомендуется включить эту галочку.</span></p>
<p class="rvps10"><span class="rvts22">Однако в реальной работе такая точность отката не требуется. Зачастую она только раздражает, заставляя вас откатывать каждое нажатие по отдельности. Поэтому для существенной экономии места в Журнале Истории рекомендуется включить эту галочку.</span></p>
<p class="rvps10"><a name="Use1PkeysforallsingleRecordings"></a>
<span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Config -&gt; Use 1P keys for all single Recordings</span></p>
@ -257,7 +257,7 @@
<p class="rvps10"><span class="rvts22">Некоторые хоткеи в FCEUX не имеют значений по умолчанию (то есть ещё не назначены ни на одну клавишу), вы можете их настроить следующим образом. В меню эмулятора нужно выбрать </span><span class="rvts26">Config -&gt; Map Hotkeys</span><span class="rvts22">. Появится окно с длинным списком всех возможных хоткеев эмулятора. Выберите нужный хоткей и сделайте двойной щелчок по нему, а затем нажмите желаемую клавишу на клавиатуре.</span></p>
<p class="rvps10"><span class="rvts22">Во-первых, найдите в списке пункт "</span><span class="rvts26">Open TAS Editor</span><span class="rvts22">" и выберите его двойным щелчком. Появится окно, тут нужно нажать клавишу, которая будет в дальнейшем запускать Тасэдитор.</span></p>
<p class="rvps10"><span class="rvts22">Во-вторых, найдите пункт "</span><span class="rvts27">Reload ROM or TAS Editor Project</span><span class="rvts22">" и настройте его, либо запомните комбинацию, настроенную по умолчанию (</span><span class="rvts27">Ctrl + F1</span><span class="rvts22">). Это поможет вам быстро возвращаться к прерванной работе достаточно будет запустить FCEUX, нажать хоткей </span><span class="rvts27">Reload ROM</span><span class="rvts22">, затем вышеописанный хоткей </span><span class="rvts26">Open TAS Editor</span><span class="rvts22">, потом опять </span><span class="rvts27">Reload ROM</span><span class="rvts22"> (сработает уже как </span><span class="rvts27">Reload TAS Editor Project</span><span class="rvts22">). В итоге всего за секунду вы вернётесь в то же состояние, в котором оставили работу вчера.</span></p>
<p class="rvps10"><span class="rvts22">Далее присмотритесь к хоткеям "</span><span class="rvts27">Frame Advance</span><span class="rvts22">" и "</span><span class="rvts27">Frame Rewind</span><span class="rvts22">". Эти хоткеи нужны для навигации Курсором Проигрывателя. По умолчанию они настроены на клавиши "</span><span class="rvts27">\</span><span class="rvts22">" и "</span><span class="rvts27">Backspace</span><span class="rvts22">". Вы можете перенастроить их на более удобные клавиши, либо пользоваться вместо них колесом мыши для покадрового перемещения Курсора Проигрывателя.</span></p>
<p class="rvps10"><span class="rvts22">Теперь присмотритесь к хоткеям "</span><span class="rvts27">Frame Advance</span><span class="rvts22">" и "</span><span class="rvts27">Frame Rewind</span><span class="rvts22">". Эти хоткеи нужны для навигации Курсором Проигрывателя. По умолчанию они настроены на клавиши "</span><span class="rvts27">\</span><span class="rvts22">" и "</span><span class="rvts27">Backspace</span><span class="rvts22">". Вы можете перенастроить их на более удобные клавиши, либо пользоваться вместо них колесом мыши для покадрового перемещения Курсора Проигрывателя.</span></p>
<p class="rvps10"><span class="rvts22">Также обратите внимание на хоткеи "</span><span class="rvts27">Speed Down</span><span class="rvts22">" и "</span><span class="rvts27">Speed Up</span><span class="rvts22">". Возможно, стоит переназначить их на серые клавиши "</span><span class="rvts26">-</span><span class="rvts22">" и "</span><span class="rvts26">+</span><span class="rvts22">" на Numpad'е.</span></p>
<p class="rvps10"><span class="rvts22">Хоткеи "</span><span class="rvts27">Pause</span><span class="rvts22">" и "</span><span class="rvts27">Restore Playback</span><span class="rvts22">" по умолчанию назначены на клавиши "</span><span class="rvts27">Pause/Break</span><span class="rvts22">" и "</span><span class="rvts27">Пробел</span><span class="rvts22">", но в большинстве случаев вместо них проще использовать среднюю кнопку мыши, а клавишу "Пробел" можно переназначить на что-нибудь другое.</span></p>
<p class="rvps10"><span class="rvts22">Напоследок стоит отметить хоткей "</span><span class="rvts27">Cancel Seeking</span><span class="rvts22">" (клавиша "</span><span class="rvts27">Esc</span><span class="rvts22">" по умолчанию). Нажатие этой клавиши является аналогом щелчка по прогрессбару Тасэдитора если Проигрыватель занимался добеганием к целевому кадру, добегание будет отменено.</span></p>

View File

@ -65,7 +65,7 @@
<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></p>
<p class="rvps10"><span class="rvts22">Режим Записи и галочка "Follow cursor" должны быть выключены. Галочка "Auto-restore last position" должна быть включена. Галочка "Turbo seek" может быть либо включена, либо выключена.</span></p>
<p class="rvps10"><span class="rvts22">Режим Записи должен быть выключен. Галочка "Auto-restore last position" должна быть включена. </span><span class="rvts22">Галочки "Turbo seek" и "Follow cursor" обычно отключены, и включаются по мере необходимости.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts23">Основное занятие:</span></p>
<p class="rvps10"><span class="rvts54"><br/></span></p>
@ -75,7 +75,7 @@
<li class="rvps10"><span class="rvts22">Предположить наличие ошибки на участке, взвесить имеющиеся факторы оптимальности и прикинуть способ исправления ошибки.</span></li>
<li class="rvps10"><span class="rvts22">Н</span><span class="rvts22">авигация курсором мыши к любому кадру </span><span class="rvts22">текущего участка</span><span class="rvts22"> осуществляется </span><span class="rvts22">практически</span><span class="rvts22"> мгновенно.</span></li>
<li class="rvps10"><span class="rvts22">Редактировать участок мышью. </span><span class="rvts22">После каждого вносимого изменения Курсор Проигрывателя будет автоматически проигрывать участок и останавливаться на кадре, который считался концом участка. При необходимости можно передвигать текущий конец участка, перемещая Курсор Проигрывателя вручную (колесом). </span><span class="rvts22">Шаги 4 и 5 непрерывно чередуются, пока редактирование не считается законченным в соответствии с критерием оптимальности.</span></li>
<li class="rvps10"><span class="rvts22">[</span><span class="rvts37">необязательный шаг</span><span class="rvts22">] </span><span class="rvts22">Сохранить готовый подход в любую свободную Закладку, например, в слот </span><span class="rvts27">8</span><span class="rvts22">.</span></li>
<li class="rvps10"><span class="rvts22">[</span><span class="rvts37">необязательный шаг</span><span class="rvts22">] </span><span class="rvts22">Сохранить готовый подход в любую свободную Закладку, например, в слот </span><span class="rvts27">8</span><span class="rvts22"> или </span><span class="rvts27">7</span><span class="rvts22">.</span></li>
<li class="rvps10"><span class="rvts22">Если это не первый подход к прохождению участка, с</span><span class="rvts22">равнить новый</span><span class="rvts22"> результат с лучшим </span><span class="rvts22">старым</span><span class="rvts22"> результатом, используя критерий оптимальности. Если новый подход оказался лучше</span><span class="rvts22"> (или это первый </span><span class="rvts22">подход</span><span class="rvts22">),</span><span class="rvts22"> следует </span><span class="rvts22">сохранить его в Закладку </span><span class="rvts27">9</span><span class="rvts22">. </span><span class="rvts22">Слот </span><span class="rvts27">9</span><span class="rvts22"> будет отвечать за хранение самого лучшего результата шлифовки участка.</span></li>
<li class="rvps10"><span class="rvts22">Если осталось желание испробовать другую серию подходов, следует вернуться к шагу 3, и так до тех пор пока не иссякнут идеи по данному участку.</span></li>
<li class="rvps10"><span class="rvts22">[</span><span class="rvts37">необязательный шаг</span><span class="rvts22">]</span><span class="rvts22"> Когда идеи начинают иссякать, можно почерпнуть информацию из прошлого или будущего: пересмотреть несколько участков, перетаскивая Курсор Проигрывателя или отпустив паузу эмулятора.&nbsp;</span><span class="rvts22"> При необходимости можно по-быстрому дорисовать </span><span class="rvts22">Ввод</span><span class="rvts22"> для просмотра предстоящих событий игры. Но п</span><span class="rvts22">ри возвращении к редактированию участка нужно вернуть Курсор Проигрывателя на кадр целевого события.</span></li>

View File

@ -80,7 +80,7 @@
<li class="rvps10"><span class="rvts22">состояние игры на одном и том же кадре нового и старого мувика </span><span class="rvts72">(string)</span></li>
</ul>
<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"><a class="rvts28" href="SpeedrunningSynopsis.html#CompareEvent">1. &nbsp;Сравнение наличия/отсутствия события.</a></p>
<p class="rvps33"><a class="rvts63" href="SpeedrunningSynopsis.html#CompareEvent-A">А. По памяти</a></p>
<p class="rvps33"><a class="rvts63" href="SpeedrunningSynopsis.html#CompareEvent-B">B. С помощью Закладок</a></p>
@ -98,7 +98,7 @@
<p class="rvps10"><span class="rvts26">1. Сравнение наличия/отсутствия события.</span></p>
<p class="rvps10"><span class="rvts22">Выигрывает подход, где требуемое событие происходит в рамках текущего участка (а вредное событие, соответственно, не происходит). Появление требуемого события это всего лишь первый (и зачастую лёгкий) этап при создании Ввода, а следующим этапом будут попытки ускорить момент появления этого события.</span></p>
<p class="rvps10"><span class="rvts31">Перебор подходов продолжается до первого успешного подхода, либо пока не надоест (тогда событие признаётся недостижимым).</span></p>
<p class="rvps10"><span class="rvts22">Аналогия с программированием: сравнение двух Boolean (переменная логического типа), сравнение двух массивов Boolean.</span></p>
<p class="rvps10"><span class="rvts72">Аналогия с программированием: сравнение двух Boolean (переменная логического типа), сравнение двух массивов Boolean.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a name="CompareEvent-A"></a>
<span class="rvts22">A. В большинстве случаев достаточно просто помнить тот факт, что требуемого события не удалось добиться в прошлых подходах. Пример: </span><a class="rvts28" href="SemiautomaticTASing.html#FindStartButtonPress">нажатие кнопки </a><a class="rvts73" href="SemiautomaticTASing.html#FindStartButtonPress">Start</a><span class="rvts22">.</span></p>
@ -111,7 +111,7 @@
<p class="rvps10"><span class="rvts26">2. Сравнение времени наступления события.</span></p>
<p class="rvps10"><span class="rvts22">Выигрывает подход, где целевое событие наступает раньше. Время наступления целевого события определяется кадром, перед которым целевого события в игре ещё не было, а на этом кадре оно уже есть. Номер этого кадра определяется при наведении на него Курсора Проигрывателя и просмотре экрана FCEUX (или Memory Watch) для подтверждения.</span></p>
<p class="rvps10"><span class="rvts31">Перебор подходов продолжается до тех пор, пока не надоест, либо пока не исчерпаются все возможные типы подходов (тогда текущий лучший подход признаётся идеальным (frame perfect), пока не обнаружены новые факторы).</span></p>
<p class="rvps10"><span class="rvts22">Аналогия с программированием: сравнение двух целых чисел.</span></p>
<p class="rvps10"><span class="rvts72">Аналогия с программированием: сравнение двух целых чисел.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a name="CompareTime-A"></a>
<span class="rvts22">A. Для простейших участков и маленьких подучастков бывает достаточно запомнить лучший номер кадра в уме и сравнивать результаты всех новых подходов с этим числом. Но в целом полагаться на человеческую память не рекомендуется. Подробнее: </span><a class="rvts28" href="TASingProcess.html#EndOfSegment">Процесс ТАСинга</a><span class="rvts22">.</span></p>
@ -120,7 +120,7 @@
<span class="rvts22">B. На несложных участках можно сверяться с зелёной стрелкой Тасэдитора. При её использовании подразумевается, что вы каждый раз оставляете Курсор Проигрывателя на кадре целевого события (это естественное поведение). Поэтому, если новый кадр целевого события находится выше зелёной стрелки, то новый подход быстрее предыдущего. Подробнее: </span><a class="rvts28" href="NonlinearTASing.html#GreenArrow">Методология ТАСинга</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a name="CompareTime-C"></a>
<span class="rvts22">C. На сложных участках используйте отвязанный Маркер, который будет всегда указывать на текущий лучший номер кадра в Piano Roll. При каждом улучшении старого результата этот Маркер вручную перетаскивается повыше. Поэтому, если новый кадр целевого события находится выше Маркера, то новый подход быстрее наилучшего старого. Подробнее: </span><a class="rvts28" href="ProgramCustomization.html#BindMarkerstoInput">Настройка программы</a><span class="rvts22">.</span></p>
<span class="rvts22">C. На сложных участках используйте отвязанный Маркер, который будет всегда указывать на текущий лучший номер кадра в Piano Roll. При каждом улучшении старого результата этот Маркер вручную перетаскивается повыше. Поэтому, если новый кадр целевого события находится выше Маркера, то новый подход быстрее наилучшего старого.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a name="CompareTime-D"></a>
<span class="rvts22">D. На участках любой степени сложности рекомендуется использовать Закладки, отображаемые в столбце иконок Piano Roll. При каждом улучшении старого результата текущий подход вручную сохраняется в ту же Закладку, замещая собой наилучший старый подход. Поэтому, если новый кадр целевого события находится выше иконки Закладки, то новый подход быстрее наилучшего старого.</span></p>
@ -131,7 +131,7 @@
<p class="rvps10"><span class="rvts22">Выигрывает подход, в котором у игры в целом более выгодные характеристики. Этот тип сравнений актуально использовать для оценки сложных и многогранных игровых ситуаций. Например, в гонках Формула-1 приходится заботиться одновременно и о скорости, и о минимальной изношенности шин, поэтому на каждом участке трассы нужно искать оптимальный баланс, а не просто торопиться.</span></p>
<p class="rvps10"><span class="rvts22">Здесь у участка есть чётко определённый кадр окончания, и каждый новый тест должен проиграть участок до этого кадра. Тасэдитор запоминает номер этого кадра в виде зелёной стрелки, которая автоматически останавливает эмуляцию при просмотре новых вариантов. Так что от ТАСера требуется только изменять Ввод (создавая новые подходы), запускать просмотр, дожидаться остановки и оценивать результат (по экрану FCEUX или Memory Watch).</span></p>
<p class="rvps10"><span class="rvts31">Перебор подходов продолжается до тех пор, пока не надоест, либо пока не исчерпаются все возможные типы подходов (тогда текущий лучший подход признаётся идеальным, пока не обнаружены новые факторы).</span></p>
<p class="rvps10"><span class="rvts22">Аналогия с программированием: сравнение двух строк, сравнение двух массивов целых чисел.</span></p>
<p class="rvps10"><span class="rvts72">Аналогия с программированием: сравнение двух строк, сравнение двух массивов целых чисел.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><a name="CompareState-A"></a>
<span class="rvts22">A. Для простых участков бывает достаточно запомнить значение главной характеристики состояния игры, достигнутого в наилучшем подходе. Это значение сравнивается с характеристиками нового состояния игры, достигнутого в конце просмотра нового подхода. Если решено, что новое значение лучше, необходимо запомнить его вместо старого. Пример: </span><a class="rvts28" href="NonlinearTASing.html#LuckManipulation">манипуляция удачей</a><span class="rvts22">.</span></p>

View File

@ -56,8 +56,8 @@
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps10"><span class="rvts22">В этом разделе документации описываются все идеи, заложенные в основу Тасэдитора, а также раскрываются основные детали итоговой реализации TAS Editor 1.0. Для получения полной информации об алгоритмах, используемых в Тасэдиторе, вы можете изучить его исходники на языке C++.</span></p>
<p class="rvps10"><span class="rvts22">Тасэдитор является программой с открытым исходным кодом (open source). Он распространяется по лицензии </span><a class="rvts28" href="http://ru.wikipedia.org/wiki/MIT_License" target="_blank">MIT</a><span class="rvts22">, которая позволяет вам распоряжаться исходным кодом без ограничений. Выбор лицензии обусловлен желанием поощрить модификацию и портирование Тасэдитора на другие платформы.</span></p>
<p class="rvps10"><span class="rvts22">Загрузить исходные коды эмулятора FCEUX 2.2.0 со встроенным Тасэдитором вы можете из официального SVN-репозитория: </span><a class="rvts28" href="http://sourceforge.net/p/fceultra/code/" target="_blank">http://sourceforge.net/p/fceultra/code/</a></p>
<p class="rvps10"><span class="rvts22">Тасэдитор является программой с открытым исходным кодом (open source). Он распространяется по лицензии </span><a class="rvts28" href="http://ru.wikipedia.org/wiki/MIT_License" target="_blank">MIT</a><span class="rvts22">, которая позволяет вам распоряжаться исходным кодом без ограничений. Выбор лицензии обусловлен желанием поощрить модификацию и портирование на другие платформы.</span></p>
<p class="rvps10"><span class="rvts22">Загрузить исходные коды эмулятора FCEUX со встроенным Тасэдитором вы можете из официального SVN-репозитория: </span><a class="rvts28" href="http://sourceforge.net/p/fceultra/code/" target="_blank">http://sourceforge.net/p/fceultra/code/</a></p>
<p class="rvps10"><span class="rvts22">Для работы с SVN вам потребуется SVN-клиент, например, </span><a class="rvts28" href="http://ru.wikipedia.org/wiki/Tortoise_SVN" target="_blank">TortoiseSVN</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22">Исходный код Тасэдитора достаточно подробно откомментирован, и для понимания большинства нюансов будет достаточно базовых навыков программирования на C++ под </span><span class="rvts22">Win32 API.</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>

View File

@ -72,7 +72,7 @@
<li class="rvps10"><span class="rvts22">Осуществить навигацию к месту исправления ошибки (загрузить Закладку и, при необходимости, быстро повторить имеющийся Ввод до нужного кадра).</span></li>
<li class="rvps10"><span class="rvts22">В режиме Read+Write пройти игру </span><span class="rvts22">до наступления целевого события, записав </span><span class="rvts22">Ввод, отличающийся от уже имевшегося на этом участке</span><span class="rvts22">. По ходу записи следует периодически создавать Закладки в свободных слотах для ускорения навигации.</span></li>
<li class="rvps10"><span class="rvts22">Если во время печати Ввода совершена ошибка, вернуться к шагу 3. Если же достичь целевого события с помощью выбранного подхода никак не удаётся, можно сдаться и перейти к шагу 8.</span></li>
<li class="rvps10"><span class="rvts22">[</span><span class="rvts37">необязательный шаг</span><span class="rvts22">] </span><span class="rvts22">Сохранить готовый подход во временную Закладку, например, в слот </span><span class="rvts27">8</span><span class="rvts22">.</span></li>
<li class="rvps10"><span class="rvts22">[</span><span class="rvts37">необязательный шаг</span><span class="rvts22">] </span><span class="rvts22">Сохранить готовый подход во временную Закладку, например, в слот </span><span class="rvts27">8</span><span class="rvts22"> или </span><span class="rvts27">7</span><span class="rvts22">.</span></li>
<li class="rvps10"><span class="rvts22">Если это не первый подход к прохождению участка, сравнить новый результат с лучшим старым результатом, используя критерий оптимальности. Если новый подход оказался лучше (или это первый подход), сохранить результат в Закладку </span><span class="rvts27">9</span><span class="rvts22">. </span><span class="rvts22">Слот </span><span class="rvts27">9</span><span class="rvts22"> будет отвечать за хранение самого лучшего результата шлифовки участка.</span></li>
<li class="rvps10"><span class="rvts22">Если осталось желание испробовать другие подходы, следует вернуться к шагу 2, и так до тех пор пока не иссякнут идеи по данному участку.</span></li>
<li class="rvps10"><span class="rvts22">[</span><span class="rvts37">необязательный шаг</span><span class="rvts22">] </span><span class="rvts22">Когда идеи начинают иссякать, </span><span class="rvts22">можно почерпнуть информацию из прошлого, переиграв несколько предыдущих участков мувика (например, загрузить Закладку </span><span class="rvts27">0</span><span class="rvts22">, поставленную на начало уровня). Также можно получить пищу для ума из будущего, сыграв в события игры, идущие после окончания текущего участка.</span></li>
@ -88,7 +88,7 @@
<p class="rvps10"><a name="savestates"></a>
<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><span class="rvts22">не глядя</span><span class="rvts22"> находят нужный слот.</span></p>
<p class="rvps10"><span class="rvts22">Эта виртуозность приходит со временем, обычно уже после завершения парочки ТАСов. Вырабатываются определённые привычки, один палец прирастает к </span><span class="rvts27">Frame Advance</span><span class="rvts22">, логически распределяются типовые обязанности между десятью слотами Закладок, чтобы в нужные моменты пальцы тянулись к нужным клавишам. Например, у некоторых ТАСеров слоты распределяются так:</span></p>
<p class="rvps10"><span class="rvts22">Эта виртуозность приходит со временем, обычно уже после завершения парочки ТАСов. Вырабатываются определённые привычки, один палец прирастает к клавише </span><span class="rvts27">Frame Advance</span><span class="rvts22">, логически распределяются типовые обязанности между десятью слотами Закладок, чтобы в нужные моменты пальцы сами тянулись к нужным клавишам. Например, у некоторых ТАСеров слоты распределяются так:</span></p>
<p class="rvps21"><span class="rvts22"><br/></span></p>
<p class="rvps21"><img alt="" style="padding : 1px;" src="lib/savestate_slots.png"/></p>
<p class="rvps21"><span class="rvts22"><br/></span></p>
@ -117,7 +117,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="rvts22">Постоянная отдача позволяет адаптироваться к игре на ходу, корректировать свои решения и преждевременно отсекать в уме ошибочные подходы.</span></p>
<p class="rvps14"><span class="rvts52">+ </span><span class="rvts22">Границы текущего участка всегда отмечаются с помощью Закладок (ради навигации), тем самым приучая ТАСера к порядку.</span></p>
<p class="rvps14"><span class="rvts52">+ </span><span class="rvts22">Границы текущего участка всегда отмечаются с помощью Закладок (ради навигации), тем самым приучая ТАСера к порядку (который ещё пригодится).</span></p>
<p class="rvps10"><span class="rvts22"><br/></span></p>
<p class="rvps10"><span class="rvts22">Минусы метода:</span></p>
<p class="rvps14"><span class="rvts52"> </span><span class="rvts22">Настойчивая игровая отдача провоцирует ТАСера отсекать некоторые нелогичные, но потенциально выигрышные подходы.</span></p>

File diff suppressed because one or more lines are too long

View File

@ -62,7 +62,7 @@
<p class="rvps10"><span class="rvts21">Taseditor is controlled by </span><a class="rvts27" href="Controls.html#mouse">mouse</a><span class="rvts21"> and </span><a class="rvts27" href="Controls.html#keyboard">keyboard</a><span class="rvts21">.</span></p>
<p class="rvps10"><span class="rvts21">Every operation can be done in several alternative ways (via menu, hotkey or GUI element).</span></p>
<p class="rvps10"><span class="rvts21">Any action can be done using mouse, but some are faster to do with keyboard. The Manual assumes that one hand of user is holding the mouse and other hand is placed on a side of the keyboard, occasionally holding </span><span class="rvts30">Shift</span><span class="rvts21">/</span><span class="rvts30">Ctrl</span><span class="rvts21">/</span><span class="rvts30">Alt</span><span class="rvts21"> or pressing a key combination.</span></p>
<p class="rvps10"><span class="rvts21">Some actions (e.g. switching </span><span class="rvts21">"Follow cursor")</span><span class="rvts21"> can be done by mouse only.</span></p>
<p class="rvps10"><span class="rvts21">Some actions (e.g. switching the </span><span class="rvts21">"Follow cursor")</span><span class="rvts21"> can be done by mouse only.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps2"><a name="mouse"></a>
@ -85,84 +85,86 @@
<p class="rvps10"><span class="rvts21">Hover mouse cursor over the right half of Bookmarks List to see the game screenshot of the bookmarked frame in the movie branch you're pointing at. Optionally there can be a description of the branch under the screenshot.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">B. </span><span class="rvts34">Displaying information of the Bookmark</span></p>
<p class="rvps10"><span class="rvts21">Hover mouse cursor over an icon of any Bookmark in the Branches Tree to see the information about the Bookmark (real time of creation, bookmarked frame, full timeline, screenshot and description). When you point at a Bookmark that doesn't belong to the timeline of current movie branch, mouse cursor changes to arrow with question mark.</span></p>
<p class="rvps10"><span class="rvts21">Hover mouse cursor over an icon of any Bookmark in the Branches Tree to see the information about the Bookmark (real time of creation, bookmarked frame, full timeline, screenshot and description). When you point at a Bookmark that doesn't belong to the timeline of current movie branch, the mouse cursor changes to "arrow with question mark".</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">C. </span><span class="rvts34">Illuminating button symbols in the Piano Roll Header</span></p>
<p class="rvps10"><span class="rvts21">Hover mouse cursor over a button symbol in the Piano Roll Header to see if you can change the movie by clicking this symbol. When some rows of Piano Roll are selected, symbols in the Header will illuminate on mouse hover.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><a name="leftbutton"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts46">Left &nbsp;mouse button</span></p>
<p class="rvps10"><span class="rvts46">Left mouse button</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">The main button.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">A. </span><span class="rvts34">Standard Windows actions</span></p>
<p class="rvps10"><span class="rvts21">Most of GUI elements of TAS Editor window are controlled the same way as in other Windows applications.</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">press a button by left-click (also works with progressbar, "Bookmarks/Branches" caption and "Marker #" labels)</span><span class="rvts21"> fires on button press</span></li>
<li class="rvps10"><span class="rvts21">press a button by left-click (also works with the progressbar, "Bookmarks/Branches" caption and "Marker #" labels)</span><span class="rvts21"> fires on button press</span></li>
<li class="rvps10"><span class="rvts21">check/uncheck checkboxes and radiobuttons</span><span class="rvts21"> fires on button release</span></li>
<li class="rvps10"><span class="rvts21">open the window menu, choose menu item, set/remove ticks from menu items</span></li>
<li class="rvps10"><span class="rvts21">scroll Piano Roll or History Log using progressbars</span></li>
<li class="rvps10"><span class="rvts21">scroll Piano Roll or History Log using scrollbars</span></li>
<li class="rvps10"><span class="rvts21">move or resize TAS Editor window</span></li>
</ul>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">B. </span><span class="rvts34">Moving Playback cursor</span></p>
<p class="rvps10"><span class="rvts21">Click on any row in the "Icons" column of Piano Roll to send Playback cursor to the frame pointed. If you hold the left mouse button, you can drag the Playback cursor up and down. This way you can even move Playback cursor into frames outside currently visible area of the movie. Just try dragging the cursor below or above Piano Roll the farther you lead the mouse, the faster will be scrolling and Playback rewinding.</span></p>
<p class="rvps10"><span class="rvts25">B. </span><span class="rvts34">Moving the Playback cursor</span></p>
<p class="rvps10"><span class="rvts21">Click on any row in the "Icons" column of the Piano Roll to send the Playback cursor to the frame pointed. If you hold the left mouse button, you can drag the Playback cursor up and down. This way you can also move the Playback cursor to frames outside the currently visible area of the movie drag the cursor below or above the Piano Roll, the farther you lead the mouse, the faster will be scrolling and Playback rewinding.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">C. </span><span class="rvts34">Selecting rows in Piano Roll</span></p>
<p class="rvps10"><span class="rvts21">Click on a frame number in the "Frame#" column of Piano Roll to select this frame and remove selection from other frames (if there was any selection before). </span><span class="rvts21">If you hold the left mouse button, you can stretch the selection by moving mouse up or down.</span></p>
<p class="rvps10"><span class="rvts21">If you need to append new selection to an already existing selection, hold </span><span class="rvts30">Ctrl</span><span class="rvts21"> while clicking on a frame number. This way you can select several non-overlapping segments. Also this way you can remove some parts of existing Selection, just hold </span><span class="rvts30">Ctrl</span><span class="rvts21"> while clicking on a selected frame.</span></p>
<p class="rvps10"><span class="rvts25">C. </span><span class="rvts34">Selecting rows in the Piano Roll</span></p>
<p class="rvps10"><span class="rvts21">Click on a frame number in the "Frame#" column of the Piano Roll to select this frame and remove selection from other frames (if there was any selection before). </span><span class="rvts21">If you hold the left mouse button, you can stretch the selection by moving mouse up or down.</span></p>
<p class="rvps10"><span class="rvts21">If you need to append new selection to the already existing selection, hold </span><span class="rvts30">Ctrl</span><span class="rvts21"> while clicking on a frame number. This way you can select several non-overlapping segments. Also this way you can remove some parts of existing Selection, by holding </span><span class="rvts30">Ctrl</span><span class="rvts21"> while clicking on a selected frame.</span></p>
<p class="rvps10"><span class="rvts21">If you hold </span><span class="rvts30">Shift</span><span class="rvts21"> instead of </span><span class="rvts30">Ctrl</span><span class="rvts21">, the click will select a region of frames starting from the beginning of previous Selection.</span></p>
<p class="rvps10"><span class="rvts21">If you hold </span><span class="rvts30">Alt</span><span class="rvts21">, the click will select rows using current Pattern.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">D. </span><span class="rvts34">Setting/unsetting Input in Piano Roll</span></p>
<p class="rvps10"><span class="rvts21">Point mouse cursor at needed cell of Input (find crossing point of needed frame row and needed button column) and press left mouse button. The Input in this cell changes at the moment you press the button. Empty cell will become occupied and vice versa.</span></p>
<p class="rvps10"><span class="rvts21">The row containing this cell will become selected, and other Piano Roll rows will become unselected. This feature ensures that Selection cursor always appears in the context of Input editing.</span></p>
<p class="rvps10"><span class="rvts21">If you hold the left mouse button, you can draw or erase Input in other cells of Piano Roll by moving mouse cursor over them. Drawing starts when you click on an empty cell, erasing starts by clicking on an occupied cell.</span></p>
<p class="rvps10"><span class="rvts21">If you hold </span><span class="rvts30">Shift</span><span class="rvts21"> while clicking on a cell, the Input change will apply to all frames from Selection cursor to the row containing the cell. Selection cursor won't move this time.</span></p>
<p class="rvps10"><span class="rvts21">If you hold </span><span class="rvts30">Alt</span><span class="rvts21"> instead of </span><span class="rvts30">Shift</span><span class="rvts21">. the click will set Input (</span><span class="rvts21">from Selection cursor to the row containing the cell) </span><span class="rvts21">as on current Pattern. </span><span class="rvts21">Selection cursor won't move this time.</span></p>
<p class="rvps10"><span class="rvts25">D. </span><span class="rvts34">Setting/unsetting Input in the Piano Roll</span></p>
<p class="rvps10"><span class="rvts21">Point mouse cursor at needed cell of Input (find crossing point of the needed frame row and the needed button column) and press left mouse button. The Input in this cell changes at the moment you press the button. Empty cell will become occupied and vice versa.</span></p>
<p class="rvps10"><span class="rvts21">The row containing this cell will also become selected, and other rows of the Piano Roll will become unselected. This feature ensures that Selection cursor always appears in the context of Input editing.</span></p>
<p class="rvps10"><span class="rvts21">If you hold the left mouse button, you can draw or erase Input in other cells of the Piano Roll by moving mouse cursor over them. Drawing starts when you click on an empty cell, erasing starts by clicking on an occupied cell.</span></p>
<p class="rvps10"><span class="rvts21">If you hold </span><span class="rvts30">Shift</span><span class="rvts21"> while clicking on a cell, the Input change will apply to all frames from the Selection cursor to the row containing the cell.</span></p>
<p class="rvps10"><span class="rvts21">If you hold </span><span class="rvts30">Alt</span><span class="rvts21"> instead of </span><span class="rvts30">Shift</span><span class="rvts21">. the click will set Input (</span><span class="rvts21">from the Selection cursor to the row containing the cell) using</span><span class="rvts21"> current Pattern.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">E. </span><span class="rvts34">Setting/unsetting Input using the Header of Piano Roll</span></p>
<p class="rvps10"><span class="rvts21">Click on a button symbol </span><span class="rvts21">in the Piano Roll Header to change the Input of this button in selected frames. If no frames are selected, nothing will happen. If in some of the selected frames the button in not set, the click will set the button in all selected frames. If the button is set in all selected frames, the click will unset the button in all selected frames.</span></p>
<p class="rvps10"><span class="rvts21">If you hold </span><span class="rvts30">Alt </span><span class="rvts21">while clicking on a button symbol, </span><span class="rvts21">the click will the button Input in selected frames </span><span class="rvts21">as on current Pattern</span><span class="rvts21">.</span></p>
<p class="rvps10"><span class="rvts25">E. </span><span class="rvts34">Setting/unsetting Input using the Header of the Piano Roll</span></p>
<p class="rvps10"><span class="rvts21">Click on a button symbol </span><span class="rvts21">in the Piano Roll Header to change Input of this button in selected frames. If no frames are selected, nothing will happen. If in some of the selected frames the button in not set, your click will set the button in all selected frames, otherwise the click will unset the button in all selected frames.</span></p>
<p class="rvps10"><span class="rvts21">If you hold </span><span class="rvts30">Alt </span><span class="rvts21">while clicking on a button symbol, </span><span class="rvts21">the click will set the button in selected frames using</span><span class="rvts21"> current Pattern</span><span class="rvts21">.</span></p>
<p class="rvps10"><span class="rvts21">If you click on the </span><span class="rvts21">"Frame#" label, the click will apply to Markers instead of Input.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">F. </span><span class="rvts34">Creating and moving Markers</span></p>
<p class="rvps10"><span class="rvts21">Double-click on a frame number in Piano Roll to set Marker to this frame. </span><span class="rvts21">If you hold the left mouse button, you can drag the Marker freely. Release the button to leave the Marker at the frame number it was held over. This way you can move Markers from place to place. If you release the Marker over Input columns, the dragging will be cancelled, and the Marker will return to the frame it was picked from. If you release the Marker over another Marker, those two Markers will switch places.</span></p>
<p class="rvps10"><span class="rvts21">If you release the Marker outside Piano Roll, this Marker will be dumped. Thus, to remove a Marker, double-click on it and drag it somewhere outside TAS Editor window.</span></p>
<p class="rvps10"><span class="rvts21">Double-click on a frame number in the Piano Roll to set a Marker to this frame. </span><span class="rvts21">If you hold the left mouse button, you can drag the Marker freely. Release the button to leave the Marker at the frame number it was held over. This way you can move Markers from place to place. If you release the Marker over Input columns, the dragging will be cancelled, and the Marker will return to the frame it was picked from. If you release the Marker over another Marker, those two Markers will switch places.</span></p>
<p class="rvps10"><span class="rvts21">If you release the Marker outside the Piano Roll, this Marker will be dumped. Thus, to remove a Marker, double-click on it and drag it somewhere outside TAS Editor window.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">G. </span><span class="rvts34">Entering/exiting Note editing mode</span></p>
<p class="rvps10"><span class="rvts21">Click on the upper or the lower edit field to start editing Note text displayed in this field at the moment.</span></p>
<p class="rvps10"><span class="rvts21">To finish editing (and save changes) click on anything outside the edit field.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">H. </span><span class="rvts34">Controlling the Bookmarks List</span></p>
<p class="rvps10"><span class="rvts21">Click on a frame number in Bookmarks List (on the left side of the list) to send Playback cursor to the frame.</span></p>
<p class="rvps10"><span class="rvts21">Click on a time indicator in Bookmarks List (on the right side of the list) to restore movie state saved into the Bookmark and send Playback cursor to the bookmarked frame.</span></p>
<p class="rvps10"><span class="rvts21">Those operations fire on the left button release.</span></p>
<p class="rvps10"><span class="rvts21">Click on a frame number in the Bookmarks List (on the left side of the list) to send the Playback cursor to the bookmarked frame.</span></p>
<p class="rvps10"><span class="rvts21">Click on a timestamp in the Bookmarks List (on the right side of the list) to restore movie state saved into the Bookmark and send the Playback cursor to the bookmarked frame.</span></p>
<p class="rvps10"><span class="rvts21">Those operations fire on the button release.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">I. </span><span class="rvts34">Controlling the Branches Tree</span></p>
<p class="rvps10"><span class="rvts21">Click on icon of a Bookmark to send Playback cursor to the bookmarked frame.</span></p>
<p class="rvps10"><span class="rvts21">Double-click on icon of a Bookmark to restore movie state saved into the Bookmark and send Playback cursor to the bookmarked frame.</span></p>
<p class="rvps10"><span class="rvts21">Those operations fire on the left button press.</span></p>
<p class="rvps10"><span class="rvts21">Click on icon of a Bookmark to send the Playback cursor to the bookmarked frame.</span></p>
<p class="rvps10"><span class="rvts21">Double-click on icon of a Bookmark to restore movie state saved into the Bookmark and send the Playback cursor to the bookmarked frame.</span></p>
<p class="rvps10"><span class="rvts21">Those operations fire on the button press.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">J. </span><span class="rvts34">Controlling the History Log</span></p>
<p class="rvps10"><span class="rvts21">Click on any row of the History Log to </span><span class="rvts21">restore movie state to the point of time when the Log record was created.</span></p>
<p class="rvps10"><span class="rvts21">Click on any row of the History Log to </span><span class="rvts21">restore movie state to the point of time registered in the Log record.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><a name="rightbutton"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts46">Right mouse button</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">A. </span><span class="rvts34">Moving Playback cursor with mouse wheel</span></p>
<p class="rvps10"><span class="rvts21">Hold right button and roll the mouse wheel up or down to move Playback cursor respectively.</span></p>
<p class="rvps10"><span class="rvts21">Mouse cursor can be anywhere over the TAS Editor window or emulator main window.</span></p>
<p class="rvps10"><span class="rvts21">Auxiliary button.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">A. </span><span class="rvts34">Moving the Playback cursor with mouse wheel</span></p>
<p class="rvps10"><span class="rvts21">Hold the right button and roll the mouse wheel up or down to move the Playback cursor respectively.</span></p>
<p class="rvps10"><span class="rvts21">The mouse cursor can be anywhere over the TAS Editor window or emulator main window.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">B. </span><span class="rvts34">Scrolling the Piano Roll</span></p>
<p class="rvps10"><span class="rvts21">Place mouse cursor over the Piano Roll, hold right button and move mouse cursor anywhere outside the Piano Roll to scroll visible area to the side. This is especially useful for horizontal scrolling, because using scrollbar would be too slow.</span></p>
<p class="rvps10"><span class="rvts21">Place mouse cursor over the Piano Roll, hold right button and move mouse cursor anywhere outside the Piano Roll to scroll visible area to that side. This is especially useful for horizontal scrolling, because using scrollbar would be too slow.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">C. </span><span class="rvts34">Setting a Bookmark</span></p>
<p class="rvps10"><span class="rvts21">Right-click on a row of the Bookmarks List to set the Bookmark to the frame where Playback cursor currently is.</span></p>
<p class="rvps10"><span class="rvts21">Alternatively, right-click on icon of a Bookmark in the Branches Tree to set the Bookmark to the frame where Playback cursor currently is.</span></p>
<p class="rvps10"><span class="rvts21">Those operations fire on the right button release.</span></p>
<p class="rvps10"><span class="rvts21">Right-click on a row of the Bookmarks List to set the Bookmark to the frame where the Playback cursor currently is.</span></p>
<p class="rvps10"><span class="rvts21">Alternatively, right-click on icon of a Bookmark in the Branches Tree to set the Bookmark to the frame where the Playback cursor currently is.</span></p>
<p class="rvps10"><span class="rvts21">Those operations fire on the button release.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">D. </span><span class="rvts34">Context menu</span></p>
<p class="rvps10"><span class="rvts21">Right-click on a frame number of any selected frame in the Piano Roll to bring the context menu containing the following items:</span></p>
@ -188,11 +190,11 @@
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">The middle mouse button serves one major role to pause and unpause emulator, no matter where mouse cursor is &nbsp;The button</span><span class="rvts21"> fires on button press.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">When emulator is paused, pressing the middle mouse button will unpause it (same as pressing </span><span class="rvts26">Pause</span><span class="rvts21"> hotkey). Moreover, if there is the green arrow outside Greenzone in Piano Roll, the middle-click will launch seeking to the frame with the green arrow (same as pressing </span><span class="rvts26">Restore Playback</span><span class="rvts21"> hotkey).</span></p>
<p class="rvps10"><span class="rvts21">When the emulator is paused, pressing the middle mouse button will unpause it (same was as pressing </span><span class="rvts26">Pause</span><span class="rvts21"> hotkey). Moreover, if there is the green arrow outside the Greenzone in the Piano Roll, the middle-click will launch seeking to the frame of the green arrow (same way as pressing </span><span class="rvts26">Restore Playback</span><span class="rvts21"> hotkey).</span></p>
<p class="rvps10"><span class="rvts21">If you hold </span><span class="rvts30">Shift </span><span class="rvts21">while mid-clicking, this will launch seeking to the nearest Marker.</span></p>
<p class="rvps10"><span class="rvts21">If you hold </span><span class="rvts30">Ctrl </span><span class="rvts21">while mid-clicking, this will either launch seeking to Selection cursor (if it's below Playback cursor) or re-watch the movie segment starting from Selection cursor (if it's above Playback cursor).</span></p>
<p class="rvps10"><span class="rvts21">If you hold </span><span class="rvts30">Ctrl </span><span class="rvts21">while mid-clicking, this will either launch seeking to the Selection cursor (if it's below the Playback cursor) or re-watch the movie segment starting from the Selection cursor (if it's above the Playback cursor).</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">When emulator is unpaused, </span><span class="rvts21">pressing the middle mouse button will pause it (same as pressing </span><span class="rvts26">Pause</span><span class="rvts21"> hotkey).</span></p>
<p class="rvps10"><span class="rvts21">When the emulator is unpaused, </span><span class="rvts21">pressing the middle mouse button will pause it (same way as pressing </span><span class="rvts26">Pause</span><span class="rvts21"> hotkey).</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Usually the middle mouse button is the mouse wheel.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
@ -202,22 +204,22 @@
<p class="rvps10"><span class="rvts46"><br/></span></p>
<p class="rvps10"><span class="rvts21">The wheel can be rolled up and down with different speed. When you need precision, roll the wheel slowly. When you need speed, roll the wheel quickly.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">A. </span><span class="rvts34">Scrolling the Piano Roll or History Log</span></p>
<p class="rvps10"><span class="rvts25">A. </span><span class="rvts34">Scrolling the Piano Roll or the History Log</span></p>
<p class="rvps10"><span class="rvts21">When mouse cursor is over the History Log, roll the mouse wheel to scroll visible area of the History Log.</span></p>
<p class="rvps10"><span class="rvts21">When mouse cursor is anywhere else, roll the mouse wheel to scroll visible area of the Piano Roll.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">B. </span><span class="rvts34">Moving Playback cursor</span></p>
<p class="rvps10"><span class="rvts21">Hold right mouse button and roll the mouse wheel up or down to move Playback cursor respectively.</span></p>
<p class="rvps10"><span class="rvts21">If you want to always see the Playback cursor position in Piano Roll, check the "Follow cursor" checkbox in the Playback section of TAS Editor window.</span></p>
<p class="rvps10"><span class="rvts25">B. </span><span class="rvts34">Moving the Playback cursor</span></p>
<p class="rvps10"><span class="rvts21">Hold right mouse button and roll the mouse wheel up or down to move the Playback cursor respectively.</span></p>
<p class="rvps10"><span class="rvts21">If you want to always see the Playback cursor position in the Piano Roll, check the "Follow cursor" checkbox in the Playback section of TAS Editor window.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">C. </span><span class="rvts34">Jumping on Markers</span></p>
<p class="rvps10"><span class="rvts21">This is similar to pressing </span><span class="rvts29">&lt;&lt;</span><span class="rvts21"> and </span><span class="rvts29">&gt;&gt;</span><span class="rvts21"> buttons or using </span><span class="rvts30">Ctrl</span><span class="rvts21">/</span><span class="rvts30">Shift</span><span class="rvts21"> + </span><span class="rvts30">Page Up</span><span class="rvts21">/</span><span class="rvts30">Page Down </span><span class="rvts21">hotkeys.</span></p>
<p class="rvps10"><span class="rvts21">Hold the </span><span class="rvts30">Shift</span><span class="rvts21"> key and roll the wheel to make jumps with Playback cursor. The Piano Roll will follow it if </span><span class="rvts21">the "Follow cursor" checkbox</span><span class="rvts21"> is checked.</span></p>
<p class="rvps10"><span class="rvts21">Hold the </span><span class="rvts30">Ctrl</span><span class="rvts21"> key and roll the wheel to make jumps with Selection cursor. The Piano Roll will follow it automatically.</span></p>
<p class="rvps10"><span class="rvts21">Hold </span><span class="rvts30">Shift</span><span class="rvts21"> and roll the wheel to make jumps with the Playback cursor. The Piano Roll will follow it if </span><span class="rvts21">the "Follow cursor" checkbox</span><span class="rvts21"> is checked.</span></p>
<p class="rvps10"><span class="rvts21">Hold </span><span class="rvts30">Ctrl</span><span class="rvts21"> and roll the wheel to make jumps with the Selection cursor. The Piano Roll will follow it automatically.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">D. </span><span class="rvts34">Crossing gaps</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Point mouse cursor to any member of a long column of buttonpresses or to an empty cell among other empty cells in its neighborhood, then hold the </span><span class="rvts30">Alt</span><span class="rvts21"> key and roll the wheel up or down to scroll the Piano Roll in such a manner that mouse cursor immediately appears before the upper end or after the lower end of the column / emptiness.</span></p>
<p class="rvps10"><span class="rvts21">Point mouse cursor to any member of a long column of buttonpresses or to an empty cell among other empty cells in its neighborhood, then hold the </span><span class="rvts30">Alt</span><span class="rvts21"> key and roll the wheel up or down to scroll the Piano Roll in such a manner that mouse cursor immediately points at the upper end or the lower end of the column / emptiness.</span></p>
<p class="rvps10"><span class="rvts21">This allows you to quickly navigate among long sequences of Input.</span></p>
<p class="rvps10"><span class="rvts21">The same approach can be used to find previous/next Markers (when mouse cursor is over the column with frame numbers) and Bookmarks (when it's over the icons column).</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
@ -239,16 +241,16 @@
<span class="rvts6"><br/></span></p>
<p class="rvps10"><span class="rvts46">Modifiers (Shift, Ctrl, Alt)</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">When you hold one of these keys the functions of left mouse button and mouse wheel change.</span></p>
<p class="rvps10"><span class="rvts21">When you hold one of these keys, the functions of left mouse button and mouse wheel are modified.</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="rvts30">Shift</span><span class="rvts21"> is responsible for Playback cursor navigation and for selecting whole region of frames.</span></li>
<li class="rvps10"><span class="rvts30">Ctrl</span><span class="rvts21"> </span><span class="rvts21">is responsible for Selection cursor navigation and for appending frames to current Selection</span><span class="rvts21">.</span></li>
<li class="rvps10"><span class="rvts30">Shift</span><span class="rvts21"> is responsible for the Playback cursor navigation and for selecting whole region of frames.</span></li>
<li class="rvps10"><span class="rvts30">Ctrl</span><span class="rvts21"> </span><span class="rvts21">is responsible for the Selection cursor navigation and for appending frames to current Selection</span><span class="rvts21">.</span></li>
<li class="rvps10"><span class="rvts30">Alt</span><span class="rvts21"> </span><span class="rvts21">is responsible for Patterns and for crossing gaps using mouse wheel.</span></li>
</ul>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">If you tap the </span><span class="rvts30">Shift </span><span class="rvts21">key twice in a row, the Piano Roll will automatically scroll to Playback cursor</span><span class="rvts21">.</span></p>
<p class="rvps10"><span class="rvts21">If you tap the </span><span class="rvts30">Ctrl </span><span class="rvts21">key twice in a row, the Piano Roll will automatically scroll to Selection cursor</span><span class="rvts21">.</span></p>
<p class="rvps10"><span class="rvts21">If you tap the </span><span class="rvts30">Shift </span><span class="rvts21">key twice in a row, the Piano Roll will automatically scroll to the Playback cursor</span><span class="rvts21">.</span></p>
<p class="rvps10"><span class="rvts21">If you tap the </span><span class="rvts30">Ctrl </span><span class="rvts21">key twice in a row, the Piano Roll will automatically scroll to the Selection cursor</span><span class="rvts21">.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">When you're drawing/erasing Input, hold </span><span class="rvts30">Shift</span><span class="rvts21"> key to remove the "single-column" confinement.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
@ -267,34 +269,34 @@
<p class="rvps10"><span class="rvts52"><br/></span></p>
<p class="rvps10"><span class="rvts30">Ctrl + Q</span><span class="rvts21"> = restore previous Selection (Selection undo)</span></p>
<p class="rvps10"><span class="rvts30">Ctrl + W</span><span class="rvts21"> = </span><span class="rvts21">restore next Selection</span><span class="rvts21"> (Selection redo)</span></p>
<p class="rvps10"><span class="rvts30">Ctrl + A</span><span class="rvts21"> = select all frames between two Markers surrounding Selection cursor</span></p>
<p class="rvps10"><span class="rvts30">Ctrl + A</span><span class="rvts21"> = select all frames between two Markers surrounding the Selection cursor</span></p>
<p class="rvps10"><span class="rvts30">Ctrl + B</span><span class="rvts21"> = reselect frames that contain Input that was copied to the Clipboard</span></p>
<p class="rvps10"><span class="rvts52"><br/></span></p>
<p class="rvps10"><span class="rvts30">Ctrl + C</span><span class="rvts21"> = copy selected Input to the Clipboard (Copy)</span></p>
<p class="rvps10"><span class="rvts30">Ctrl + X</span><span class="rvts21"> = </span><span class="rvts21">copy selected Input to the Clipboard and then clear selected frames (Cut)</span></p>
<p class="rvps10"><span class="rvts30">Ctrl + V</span><span class="rvts21"> = paste Input from the Clipboard to Selection cursor (Paste)</span></p>
<p class="rvps10"><span class="rvts30">Ctrl + </span><span class="rvts30">Shift + V</span><span class="rvts21"> = insert</span><span class="rvts21"> Input from the Clipboard to Selection cursor (PasteInsert)</span></p>
<p class="rvps10"><span class="rvts30">Ctrl + </span><span class="rvts30">Shift + V</span><span class="rvts21"> = insert</span><span class="rvts21"> Input from the Clipboard to the Selection cursor (PasteInsert)</span></p>
<p class="rvps10"><span class="rvts52"><br/></span></p>
<p class="rvps10"><span class="rvts30">Delete</span><span class="rvts21"> = clear selected frames</span></p>
<p class="rvps10"><span class="rvts30">Ctrl + Delete</span><span class="rvts21"> = remove selected frames from the movie</span></p>
<p class="rvps10"><span class="rvts30">Insert</span><span class="rvts21"> = insert given number of blank frames before Selection cursor</span></p>
<p class="rvps10"><span class="rvts30">Insert</span><span class="rvts21"> = insert given number of blank frames before the Selection cursor</span></p>
<p class="rvps10"><span class="rvts30">Ctrl + Insert</span><span class="rvts21"> = clone selected frames</span></p>
<p class="rvps10"><span class="rvts30">Ctrl + </span><span class="rvts30">Shift + Insert</span><span class="rvts21"> = insert blank frames before selected frames</span></p>
<p class="rvps10"><span class="rvts52"><br/></span></p>
<p class="rvps10"><span class="rvts30">Ctrl + F</span><span class="rvts21"> = bring Find Note dialog</span></p>
<p class="rvps10"><span class="rvts30">Ctrl + F</span><span class="rvts21"> = bring the "Find Note" dialog</span></p>
<p class="rvps10"><span class="rvts52"><br/></span></p>
<p class="rvps10"><span class="rvts30">Ctrl + PageUp</span><span class="rvts21"> / </span><span class="rvts30">Ctrl + </span><span class="rvts30">Page</span><span class="rvts30">Down</span><span class="rvts21"> = jump on Markers with Selection cursor</span></p>
<p class="rvps10"><span class="rvts30">Ctrl + Home</span><span class="rvts21"> / </span><span class="rvts30">Ctrl + </span><span class="rvts30">End</span><span class="rvts21"> </span><span class="rvts21">=</span><span class="rvts21"> move Selection to the beginning / to the end of the movie</span></p>
<p class="rvps10"><span class="rvts30">Ctrl + Up</span><span class="rvts21"> / </span><span class="rvts30">Ctrl + Down</span><span class="rvts21"> = transpose Selection 1 frame up / down</span></p>
<p class="rvps10"><span class="rvts30">Ctrl + Right</span><span class="rvts21"> / </span><span class="rvts30">Ctrl + Left</span><span class="rvts21"> = scroll Piano Roll right / left</span></p>
<p class="rvps10"><span class="rvts30">Ctrl + PageUp</span><span class="rvts21"> / </span><span class="rvts30">Ctrl + </span><span class="rvts30">Page</span><span class="rvts30">Down</span><span class="rvts21"> = jump on Markers with the Selection cursor</span></p>
<p class="rvps10"><span class="rvts30">Ctrl + Home</span><span class="rvts21"> / </span><span class="rvts30">Ctrl + </span><span class="rvts30">End</span><span class="rvts21"> </span><span class="rvts21">=</span><span class="rvts21"> move current Selection to the beginning / to the end of the movie</span></p>
<p class="rvps10"><span class="rvts30">Ctrl + Up</span><span class="rvts21"> / </span><span class="rvts30">Ctrl + Down</span><span class="rvts21"> = transpose current Selection 1 frame up / down</span></p>
<p class="rvps10"><span class="rvts30">Ctrl + Right</span><span class="rvts21"> / </span><span class="rvts30">Ctrl + Left</span><span class="rvts21"> = scroll the Piano Roll right / left</span></p>
<p class="rvps10"><span class="rvts52"><br/></span></p>
<p class="rvps10"><span class="rvts30">Shift + </span><span class="rvts30">Page</span><span class="rvts30">Up</span><span class="rvts21"> / </span><span class="rvts30">Shift + </span><span class="rvts30">PageD</span><span class="rvts30">own</span><span class="rvts21"> </span><span class="rvts21">=</span><span class="rvts21"> </span><span class="rvts21">jump on Markers with Playback cursor</span></p>
<p class="rvps10"><span class="rvts30">Shift + Home</span><span class="rvts21"> / </span><span class="rvts30">Shift + </span><span class="rvts30">End</span><span class="rvts21"> </span><span class="rvts21">=</span><span class="rvts21"> send</span><span class="rvts21"> Playback cursor </span><span class="rvts21">to the beginning / to the end of the movie</span></p>
<p class="rvps10"><span class="rvts30">Shift + Up</span><span class="rvts21"> / </span><span class="rvts30">Shift</span><span class="rvts30"> + Down</span><span class="rvts21"> = move Playback cursor 1 frame up / down</span></p>
<p class="rvps10"><span class="rvts30">Shift + Right</span><span class="rvts21"> / </span><span class="rvts30">Shift</span><span class="rvts30"> + Left</span><span class="rvts21"> = scroll Piano Roll right / left</span></p>
<p class="rvps10"><span class="rvts30">Shift + </span><span class="rvts30">Page</span><span class="rvts30">Up</span><span class="rvts21"> / </span><span class="rvts30">Shift + </span><span class="rvts30">PageD</span><span class="rvts30">own</span><span class="rvts21"> </span><span class="rvts21">=</span><span class="rvts21"> </span><span class="rvts21">jump on Markers with the Playback cursor</span></p>
<p class="rvps10"><span class="rvts30">Shift + Home</span><span class="rvts21"> / </span><span class="rvts30">Shift + </span><span class="rvts30">End</span><span class="rvts21"> </span><span class="rvts21">=</span><span class="rvts21"> send the</span><span class="rvts21"> Playback cursor </span><span class="rvts21">to the beginning / to the end of the movie</span></p>
<p class="rvps10"><span class="rvts30">Shift + Up</span><span class="rvts21"> / </span><span class="rvts30">Shift</span><span class="rvts30"> + Down</span><span class="rvts21"> = move the Playback cursor 1 frame up / down</span></p>
<p class="rvps10"><span class="rvts30">Shift + Right</span><span class="rvts21"> / </span><span class="rvts30">Shift</span><span class="rvts30"> + Left</span><span class="rvts21"> = scroll the Piano Roll right / left</span></p>
<p class="rvps10"><span class="rvts52"><br/></span></p>
<p class="rvps10"><span class="rvts30">PageUp</span><span class="rvts21"> / </span><span class="rvts30">Page</span><span class="rvts30">Down</span><span class="rvts21"> = scroll Piano Roll up / down</span></p>
<p class="rvps10"><span class="rvts30">Home</span><span class="rvts21"> / </span><span class="rvts30">End</span><span class="rvts21"> = scroll Piano Roll </span><span class="rvts21">to the beginning / to the end of the movie</span></p>
<p class="rvps10"><span class="rvts30">PageUp</span><span class="rvts21"> / </span><span class="rvts30">Page</span><span class="rvts30">Down</span><span class="rvts21"> = scroll the Piano Roll up / down</span></p>
<p class="rvps10"><span class="rvts30">Home</span><span class="rvts21"> / </span><span class="rvts30">End</span><span class="rvts21"> = scroll the Piano Roll </span><span class="rvts21">to the beginning / to the end of the movie</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><a name="hotkeys"></a>
<span class="rvts21"><br/></span></p>
@ -318,11 +320,11 @@
<p class="rvps10"><span class="rvts26">=</span><span class="rvts21"> (white "plus") = increase emulation speed</span></p>
<p class="rvps10"><span class="rvts26">Tab</span><span class="rvts21"> = Turbo speed (applies as long as the key is being held)</span></p>
<p class="rvps10"><span class="rvts52"><br/></span></p>
<p class="rvps10"><span class="rvts26">F1</span><span class="rvts26">-</span><span class="rvts26">F10</span><span class="rvts21"> = load movie branch from respective Bookmark slot (1-10)</span></p>
<p class="rvps10"><span class="rvts26">F1</span><span class="rvts26">-</span><span class="rvts26">F10</span><span class="rvts21"> = load movie branch from the respective Bookmark slot (1-10)</span></p>
<p class="rvps10"><span class="rvts26">1-0</span><span class="rvts21"> = </span><span class="rvts21">jump to the frame of the Bookmark (1-10)</span></p>
<p class="rvps10"><span class="rvts26">Shift + F1-F10</span><span class="rvts21"> = set Bookmark (1-10)</span></p>
<p class="rvps10"><span class="rvts26">I </span><span class="rvts21">= set currently selected Bookmark (deprecated)</span></p>
<p class="rvps10"><span class="rvts26">P</span><span class="rvts21"> = </span><span class="rvts21">load movie branch from </span><span class="rvts21">currently selected Bookmark (deprecated)</span></p>
<p class="rvps10"><span class="rvts26">I </span><span class="rvts21">= set currently selected Bookmark</span></p>
<p class="rvps10"><span class="rvts26">P</span><span class="rvts21"> = </span><span class="rvts21">load movie branch from </span><span class="rvts21">currently selected Bookmark</span></p>
<p class="rvps10"><span class="rvts52"><br/></span></p>
<p class="rvps10"><span class="rvts26">M</span><span class="rvts21"> = show/hide rerecord counter</span></p>
<p class="rvps10"><span class="rvts26">, </span><span class="rvts21">(comma) = switch Input display</span></p>
@ -434,8 +436,8 @@
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts46">Virtual gamepad</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Emulator also allows to map keyboard keys to buttons of emulated console. You can use these keys for Input Recording and for changing Input in Selection, see the </span><a class="rvts27" href="ProgramCustomization.html#fceux-config">Program Customization</a><span class="rvts21"> chapter.</span></p>
<p class="rvps10"><span class="rvts21">By default these keys are mapped to Player 1 buttons:</span></p>
<p class="rvps10"><span class="rvts21">Emulator also allows to map keyboard keys to buttons of emulated console. You can use these keys for Input Recording and for </span><a class="rvts27" href="ProgramCustomization.html#fceux-config">Changing Input in Selection</a><span class="rvts21"> chapter.</span></p>
<p class="rvps10"><span class="rvts21">By default, the following keys are mapped to the Player 1 buttons:</span></p>
<p class="rvps10"><span class="rvts25">D</span><span class="rvts21"> </span><span class="rvts29">B</span></p>
<p class="rvps10"><span class="rvts25">F</span><span class="rvts21"> </span><span class="rvts29">A</span></p>
<p class="rvps10"><span class="rvts25">Enter</span><span class="rvts21"> </span><span class="rvts29">Start</span></p>
@ -453,7 +455,7 @@
<li class="rvps10"><span class="rvts34">NES -&gt; Switch Disk Side</span><span class="rvts21"> or "</span><span class="rvts55">Switch FDS Disk Side</span><span class="rvts21">"</span><span class="rvts21"> hotkey to invoke the disk command (only useful for an Famicom Disk System game)</span></li>
</ul>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">These commands work only when Recording mode is on. And after invoking a command you need to advance at least 1 frame to actually activate the command and insert it into the movie.</span></p>
<p class="rvps10"><span class="rvts21">These commands work only when Recording mode is on. After invoking a command you need to advance at least 1 frame to actually activate the command and insert it into the movie.</span></p>
<p class="rvps10"><span class="rvts21">Since in </span><span class="rvts21">TAS Editor 1.0 the Piano Roll doesn't have columns for displaying hardware commands (they are rarely used), it's recommended to set Markers to frames where a command was inserted.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
@ -476,7 +478,7 @@
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">3. Virtual gamepad keys do not work. Note: they will work if you check the </span><span class="rvts21">Config -&gt; Enable -&gt; Background Input in FCEUX menu, so it's not recommended to enable the feature.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">4. Mouse controls are the same as usual. &nbsp;Any click outside the text edit field (except for mid-clicks) will exit Note editing mode and save text changes. Also, if the Playback cursor or Selection cursor move away from the Marker while you're editing its Note, the text changes will be saved and you'll begin editing another Marker's Note.</span></p>
<p class="rvps10"><span class="rvts21">4. Mouse controls are the same as usual. &nbsp;Any click outside the text edit field (except for mid-clicks) will exit Note editing mode and save text changes. Also, if the Playback cursor or the Selection cursor move away from the Marker while you're editing its Note, the text changes will be saved and you'll begin editing another Marker's Note. So it's recommended to only edit Notes when the emulator is paused.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>

View File

@ -67,7 +67,7 @@
<p class="rvps10"><span class="rvts21">Post a message in the </span><a class="rvts27" href="http://tasvideos.org/forum/viewforum.php?f=15" target="_blank">FCEUX</a><span class="rvts21"> subforum of TASVideos. Try to explain the issue precisely, to help author reproduce the situation. Attach a screenshot if you think it reflects the essence of the problem.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Is it possible to use Taseditor with other emulators?</span></p>
<p class="rvps10"><span class="rvts21">No. Even though the program code of Taseditor is isolated from the emulator code, it is by no means a plug-in. So it's necessary to manually port its source code and modify it according to specifications of target platform.</span></p>
<p class="rvps10"><span class="rvts21">No. Even though the program code of Taseditor is mostly isolated from the emulator code, it is by no means a plug-in. So it's necessary to manually port its source code and modify it according to specifications of target platform.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">How can I TAS the traditional way, yet with Taseditor interface?</span></p>
<p class="rvps10"><span class="rvts21">Basically, you can start traditional TASing right away, no additional settings are required. But if you must keep some old habits intact, you can fine-tune the program. Try the following options:</span></p>
@ -80,8 +80,8 @@
<p class="rvps10"><span class="rvts21">Also, it's recommended to switch the Bookmarks List to the "Branches Tree" view.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Why the right-click on the FCEUX window doesn't prompt the usual context menu?</span></p>
<p class="rvps10"><span class="rvts21">It's done to facilitate the </span><a class="rvts27" href="Navigation.html#rewinding-by-wheel">Playback cursor navigation with mouse wheel</a><span class="rvts21">.</span></p>
<p class="rvps10"><span class="rvts21">Usually users move the mouse cursor in such a manner that it's in sight. Thus when TASer is watching the game events the cursor will often be inside the FCEUX window. Context menus would obstruct the view when you want to rewind the Playback by holding right mouse button and rolling the mouse wheel. Since there's no important items in the menu while TAS Editor is engaged, the menu was removed.</span></p>
<p class="rvps10"><span class="rvts21">It's done to facilitate the </span><a class="rvts27" href="Navigation.html#rewinding-by-wheel">Playback cursor navigation with the mouse wheel</a><span class="rvts21">.</span></p>
<p class="rvps10"><span class="rvts21">Usually users move the mouse cursor in such a manner that it's in sight. Thus when TASer is watching the game events the cursor will often be inside the FCEUX window. Context menus would obstruct the view when you want to rewind the Playback by holding the right mouse button and rolling the mouse wheel. So, since there's no important items in the menu while TAS Editor is engaged, the menu was removed.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Why the right-click on the Piano Roll sometimes prompts a context menu and sometimes doesn't?</span></p>
<p class="rvps10"><span class="rvts21">Taseditor's context menu only appears when you right-click on the number of a selected frame. If you right-click on a frame that is not selected, or you right-click on the Input of a selected frame, the menu won't appear.</span></p>
@ -89,7 +89,7 @@
<p class="rvps10"><span class="rvts21">Generally, it's recommended to use keyboard shortcuts and other means of accessing Taseditor features instead of using context menu.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">How do I insert a Reset command into the movie?</span></p>
<p class="rvps10"><span class="rvts21">You should use Input Recording here. Place the Playback cursor to the target frame, switch on Recording, then choose </span><span class="rvts25">NES -&gt; Reset</span><span class="rvts21"> in FCEUX main menu and press </span><span class="rvts26">Frame Advance</span><span class="rvts21">. Also, it's recommended to set a Marker to this frame, since there's no other way to mark a Reset/Power switch in the Piano Roll (there's no columns for commands, only for joypad buttons).</span></p>
<p class="rvps10"><span class="rvts21">You should use Input Recording here. Place the Playback cursor to the target frame, switch on Recording, then choose </span><span class="rvts25">NES -&gt; Reset</span><span class="rvts21"> in FCEUX main menu and press </span><span class="rvts26">Frame Advance</span><span class="rvts21">. Also, it's recommended to set a Marker to this frame, since there's no other way to mark a Reset/Power switch in the Piano Roll (there's no columns for commands, only for buttons).</span></p>
<p class="rvps10"><span class="rvts21">Then you can switch Recording off and continue usual movie editing. The frame with the Reset command can be transposed up or down by inserting or deleting frames above it.</span></p>
<p class="rvps10"><span class="rvts21">Other hardware commands are invoked the same way, see </span><a class="rvts27" href="Controls.html#virtual_joypad">Controls</a><span class="rvts21">.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
@ -97,9 +97,9 @@
<p class="rvps10"><span class="rvts21">Unfortunately, this feature is not supported in TAS Editor 1.0. &nbsp;This will be </span><a class="rvts27" href="Ideas.html#BetterColumns">fixed</a><span class="rvts21"> in next versions.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">How do I change the number of players (joypads) in my movie?</span></p>
<p class="rvps10"><span class="rvts21">You should create a new project, copying the Input and Markers from current one.</span></p>
<p class="rvps10"><span class="rvts21">You should create a new project, copying the Input and Markers from the current one.</span></p>
<p class="rvps10"><span class="rvts21">Choose </span><span class="rvts25">File -&gt; New</span><span class="rvts21"> in TAS Editor main menu. In the "Create New Project" window: choose the needed Input type, check "Copy current Input" and "Copy current Markers" checkboxes and click "OK".</span></p>
<p class="rvps10"><span class="rvts21">Old project's Bookmarks won't be copied to the new project this way. You can recreate them using export/import Input features.</span></p>
<p class="rvps10"><span class="rvts21">Old project's Bookmarks won't be copied to the new project this way. But you can recreate them using Input export/import features.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">How can I quickly compare two movies?</span></p>
<ol style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
@ -113,13 +113,13 @@
<li class="rvps10"><span class="rvts21">new buttonpresses (added by the 2nd movie) are colored bright-red</span></li>
<li class="rvps10"><span class="rvts21">deleted buttonpresses are marked by dash</span></li>
</ul>
<p class="rvps10"><span class="rvts21">For extra convenience it's recommended to name both Bookmarks, e.g. copy/paste the filename of the imported movie into the upper Marker Note just before creating a Bookmark.</span></p>
<p class="rvps10"><span class="rvts21">For extra convenience it's recommended to name both Bookmarks, for example, copy/paste the filename of the imported movie into the upper Marker Note just before creating a Bookmark.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Why are those fm3 files so large?</span></p>
<p class="rvps10"><span class="rvts21">An FM3 file usually contains full snapshot of the working process, including the Greenzone data (which takes the most part of the file). See </span><a class="rvts27" href="AdvancedFeatures.html#ProjectsSharing">Advanced Features</a><span class="rvts21"> for details.</span></p>
<p class="rvps10"><span class="rvts21">An FM3 file usually contains full snapshot of the working process, including the Greenzone data (which takes the most part of the file). See </span><a class="rvts27" href="AdvancedFeatures.html#ProjectsSharing">Advanced Features</a><span class="rvts21"> for details. You can customize this in the </span><a class="rvts27" href="ProgramCustomization.html#Projectfilesavingoptions">Config</a><span class="rvts21">.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Why is the Manual so long?</span></p>
<p class="rvps10"><span class="rvts21">Because besides the program specifications the Manual contains comprehensive tutorial (the </span><a class="rvts27" href="BeginnersGuide.html">Beginner's Guide</a><span class="rvts21">) which systematizes known principles of effective TASing. Since there was no similar endeavours before, the author decided that lengthy explanations are the lesser evil than possible inexactitude.</span></p>
<p class="rvps10"><span class="rvts21">Because besides the program specifications the Manual contains a comprehensive tutorial (the </span><a class="rvts27" href="BeginnersGuide.html">Beginner's Guide</a><span class="rvts21">) which systematizes known principles of effective TASing. Since there was no similar endeavors before, the author decided that lengthy explanations are the lesser evil than possible inexactitude.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>

View File

@ -81,7 +81,7 @@
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">Playthrough / Walkthrough </span><span class="rvts21">(Solution)</span></p>
<p class="rvps10"><span class="rvts21">A sequence of player's actions needed for successful completion of the game.</span></p>
<p class="rvps10"><span class="rvts21">This sequence is inputted into the game using an input device (e.g. gamepad). The sequence can be either performed live (created in real-time) or constructed in advance in a form of reproducible recording (e.g. a log of button presses). The latter form allows editing of the sequence.</span></p>
<p class="rvps10"><span class="rvts21">This sequence is inputted into the game using an input device (e.g. gamepad). The sequence can be either performed live (created in real-time) or constructed in advance in a form of reproducible recording (e.g. log of button presses). The latter form allows editing of the sequence.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">Speedrun</span></p>
<p class="rvps10"><span class="rvts21">A walkthrough aimed on fastest completion of the game.</span></p>
@ -99,29 +99,29 @@
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">Movie</span><span class="rvts21"> (replay)</span></p>
<p class="rvps10"><span class="rvts21">Container for storing Input and associated data.</span></p>
<p class="rvps10"><span class="rvts21">Unlike video containers, the movies don't contain Output (game footage). The Output appears only when user applies the movie Input to appropriate game file.</span></p>
<p class="rvps10"><span class="rvts21">Unlike video containers, the TAS movies don't contain Output (game footage). The Output appears only when user applies the movie Input to an appropriate game file.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">Lag</span></p>
<p class="rvps10"><span class="rvts21">The term used when the delay between Input and Output is greater than normally.</span></p>
<p class="rvps10"><span class="rvts21">The loop of interaction between player and game usually establishes fixed amount of time between polling Input and updating Output, for example 60 times per second.</span></p>
<p class="rvps10"><span class="rvts21">A computer processor can only make fixed amount of operations in this fixed amount of time. But videogames try to mimic the unboundedness of real life, so the quantity of in-game objects may vary greatly. Thus it's possible that processing all objects takes more time than allotted. In such cases the Output update will be delayed, and next Input polling will be delayed too.</span></p>
<p class="rvps10"><span class="rvts21">The loop of interaction between player and game usually establishes some fixed amount of time between polling Input and updating Output, for example 60 times per second.</span></p>
<p class="rvps10"><span class="rvts21">A computer processor can only make fixed amount of operations in this fixed amount of time. But videogames try to mimic the unboundedness of real life, so the quantity of in-game objects may vary greatly. Thus it's possible that processing all objects will take more time than allotted. In such cases the Output update will be delayed, and next Input polling will be delayed too.</span></p>
<p class="rvps10"><span class="rvts21">Speedrunners try to avoid excessive delays, and the lag is often considered as a factor when TASing. Usually TASers try to minimize the number of "frames containing lag".</span></p>
<p class="rvps10"><span class="rvts21">Emulators can detect lag in a frame right after finishing the frame emulation. The criterion is simple: if the game didn't poll Input during the frame then it's the lag frame. If it did poll Input then this is normal frame. Taseditor highlights lag frames with red color, and it's useless to draw any Input on these frames.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">Desync</span></p>
<p class="rvps10"><span class="rvts21">Discrepancy between expected and received Output, which results in player's Input not syncing with the logic of the game.</span></p>
<p class="rvps10"><span class="rvts21">Desync may appear when the Input made for one game is applied to another game, using different emulator version or different settings. Also desyncs appear when emulator doesn't support deterministic emulation.</span></p>
<p class="rvps10"><span class="rvts21">Desync may appear when the Input made for one game is applied to another game, or using different emulator version or different settings. Also, desyncs appear when emulator doesn't support deterministic emulation.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">Segment</span></p>
<p class="rvps10"><span class="rvts21">Part of the movie, representing the period of time between two in-game events.</span></p>
<p class="rvps10"><span class="rvts21">Breaking the movie into segments is used to decompose huge task to small subtasks.</span></p>
<p class="rvps10"><span class="rvts21">The size of a segment can be measured in frames, but the limits of a segment are defined by in-game events. The beginning event cuts all previous tasks and concentrates TASer's attention on the nearest set of conditions. The ending event serves as an optimality criterion for all possible approaches for current task solution.</span></p>
<p class="rvps10"><span class="rvts21">A part of the movie, representing the period of time between two in-game events.</span></p>
<p class="rvps10"><span class="rvts21">Breaking the movie into segments is used to decompose big tasks to smaller subtasks.</span></p>
<p class="rvps10"><span class="rvts21">The size of a segment can be measured in frames, but the limits of a segment are usually defined by in-game events. The beginning event cuts all previous tasks and concentrates TASer's attention on the nearest set of conditions. The ending event serves as an optimality criterion for all possible approaches to the current task solution.</span></p>
<p class="rvps10"><span class="rvts21">More: </span><a class="rvts27" href="TASingProcess.html">TASing Process</a></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">Optimization</span></p>
<p class="rvps10"><span class="rvts21">The process of searching for optimal (the best) solution of the task in current segment.</span></p>
<p class="rvps10"><span class="rvts21">Almost any task in videogames can be solved in a variety of ways. Every way has its own pluses and minuses. When starting a project, TASer chooses his goal (e.g. pacifist speedrun), thus setting priorities to those pluses and minuses, so all the ways of solving a task can be evaluated and compared to each other to determine which one is better.</span></p>
<p class="rvps10"><span class="rvts21">Optimization of a TAS consists of editing Input and evaluating resulting Output. When TASer gets better result, he marks current Input as the best until he finds even more optimal Input. Final product (TAS movie) contains best solution for every subtask.</span></p>
<p class="rvps10"><span class="rvts21">The process of searching for the optimal (the best) solution of the task in current segment.</span></p>
<p class="rvps10"><span class="rvts21">Almost any task in videogames can be solved in a variety of ways. Every way has its own pros and cons. When starting a project, TASer chooses his goal (e.g. pacifist speedrun), thus assigning priorities to those pros and cons, therefore all the ways of solving a task can be evaluated and compared to each other to determine which one is better.</span></p>
<p class="rvps10"><span class="rvts21">Actual process of TAS optimization consists of editing Input and evaluating resulting Output. When TASer gets better result, he marks current Input as the best, until he finds an even more optimal Input. The final product (TAS movie) contains the best solution for every subtask.</span></p>
<p class="rvps10"><span class="rvts21">More: </span><a class="rvts27" href="TASingMethodology.html">TASing Methodology</a></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">Improvement</span></p>
@ -129,14 +129,14 @@
<p class="rvps10"><span class="rvts21">Examples of improvements in speedruns: removing inaccuracy, applying unused timesaver, increasing the usefulness of an old timesaver, adding entertainment without losing speed.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">Timesaver</span></p>
<p class="rvps10"><span class="rvts21">An in-game trick that can save time.</span></p>
<p class="rvps10"><span class="rvts21">Any in-game trick that can save time.</span></p>
<p class="rvps10"><span class="rvts21">When making a speedrun, TASer is supposed to use every unprohibited opportunity to make the walkthrough become as fast as possible. One thing is polishing the Input to find the best outcome from current knowledge about the game. Another important activity is expanding this knowledge base finding and applying tricks. True TASer strives to gather the maximum information about the game and use all known tricks to full extent, so that his record wouldn't be easily beaten.</span></p>
<p class="rvps10"><span class="rvts21">Examples of timesavers: features of the game, bugs of the game, luck manipulation.</span></p>
<p class="rvps10"><span class="rvts21">Note: sometimes TASers deliberately refuse certain timesavers, in this case the TAS aims for extra category. Examples: Super Mario Bros TAS without using B button (denying one feature of the game), Sonic the Hedgehog TAS without zipping (denying one bug of the game).</span></p>
<p class="rvps10"><span class="rvts21">Note: sometimes TASers deliberately refuse certain timesavers, in this case the TAS aims for extra category. Examples: Super Mario Bros TAS without using </span><span class="rvts29">B</span><span class="rvts21"> button (denying certain feature of the game), Sonic the Hedgehog TAS without zipping (denying certain bug of the game).</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">Feature</span></p>
<p class="rvps10"><span class="rvts21">An intended aspect of the game. </span></p>
<p class="rvps10"><span class="rvts21">Some features are unimportant (or even unnoticeable) for an ordinary player, but substantial for a TASer. So before optimizing Input it's recommended to make a research of the game engine.</span></p>
<p class="rvps10"><span class="rvts21">Some features are unimportant (or even unnoticeable) for an ordinary player, but substantial for a TASer. So, before optimizing Input it's recommended to research the game engine.</span></p>
<p class="rvps10"><span class="rvts21">Examples of such features: damage boost, forced waiting for score countdown, coordinate subpixels, AI peculiarities, etc...</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">Bug / Glitch</span></p>
@ -153,16 +153,16 @@
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">Subpixels</span></p>
<p class="rvps10"><span class="rvts21">The term used when in-game objects have coordinates with fractional parts.</span></p>
<p class="rvps10"><span class="rvts21">Generally, there's difference between on-screen coordinates of a sprite and in-game coordinates of the object this sprite represents. In some games those coordinates have the same scale and their values coincide, but usually on-screen images represent a rough outline of the real state of things. So, to get max precision TASers observe the memory of emulated console, using Memory Watch tool or custom Lua HUD. This way even allows to see hidden variables of the game, that aren't displayed on-screen normally.</span></p>
<p class="rvps10"><span class="rvts21">Generally, there's difference between on-screen coordinates of a sprite and in-game coordinates of the object this sprite represents. In some games those coordinates have the same scale and their values coincide, but usually on-screen images represent a rough outline of the real state of things. So, to get max precision TASers observe the memory of emulated console, using Memory Watch tool or custom Lua HUD. This way also allows to see hidden variables of the game, those that aren't displayed on screen normally.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">Recording</span></p>
<p class="rvps10"><span class="rvts21">One of ways to create Input for a movie.</span></p>
<p class="rvps10"><span class="rvts21">One of possible ways to create Input for a movie.</span></p>
<p class="rvps10"><span class="rvts21">It consists of appending new Input sequentially to the end of current movie, while watching interim results of the Input.</span></p>
<p class="rvps10"><span class="rvts21">Another way would be drawing Input directly in the movie.</span></p>
<p class="rvps10"><span class="rvts21">More: </span><a class="rvts27" href="Toolbox.html#recorder">Toolbox</a><span class="rvts21">, </span><a class="rvts27" href="TASingMethodology.html#linear-tasing">TASing Methodology</a><span class="rvts21">, </span><a class="rvts27" href="TraditionalTASing.html">Traditional TASing</a></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">Rerecording</span></p>
<p class="rvps10"><span class="rvts21">One of ways to edit Input in a movie.</span></p>
<p class="rvps10"><span class="rvts21">One of possible ways to edit Input in a movie.</span></p>
<p class="rvps10"><span class="rvts21">It consists of rewriting old Input sequentially from starting frame to ending frame, while watching interim results of the Input changes.</span></p>
<p class="rvps10"><span class="rvts21">Another way would be direct modification of existing Input in the movie.</span></p>
<p class="rvps10"><span class="rvts21">More: </span><a class="rvts27" href="TASingMethodology.html#linear-tasing">TASing Methodology</a><span class="rvts21">, </span><a class="rvts27" href="TraditionalTASing.html">Traditional TASing</a><span class="rvts21">, </span><a class="rvts27" href="Ideas.html#RerecordsCounter">Rerecords counter</a></p>
@ -179,25 +179,25 @@
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">Turbo</span><span class="rvts21"> (turbo speed)</span></p>
<p class="rvps10"><span class="rvts21">The feature of speeding up emulation to the maximum possible speed.</span></p>
<p class="rvps10"><span class="rvts21">Used for skipping meaningless in-game events and reducing waiting time when emulator is seeking.</span></p>
<p class="rvps10"><span class="rvts21">Most emulators allow to customize emulation speed, slowing it down or speeding up when needed. Turbo speed means the fastest speed possible, which depends on your computer performance.</span></p>
<p class="rvps10"><span class="rvts21">Used for skipping meaningless in-game events and reducing waiting time when the emulator is seeking.</span></p>
<p class="rvps10"><span class="rvts21">Most emulators allow to customize emulation speed, slowing it down or speeding up when needed. Turbo speed means the fastest speed possible, which is only limited by your computer speed.</span></p>
<p class="rvps10"><span class="rvts21">More: </span><a class="rvts27" href="Toolbox.html#turbo-seek">Toolbox</a><span class="rvts21">, </span><a class="rvts27" href="NonlinearTASing.html#turbo-seeking">Nonlinear TASing</a><span class="rvts21">, </span><a class="rvts27" href="SemiautomaticTASing.html#turbo-seeking">Semiautomatic TASing</a></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">Savestate</span></p>
<p class="rvps10"><span class="rvts21">A snapshot of the emulated system's state at that current moment.</span></p>
<p class="rvps10"><span class="rvts21">Unlike in-game saves, savestate contains comprehensive data on the state of emulated hardware.</span></p>
<p class="rvps10"><span class="rvts21">Unlike in-game saves, a savestate contains all the comprehensive data on the state of emulated hardware.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">Piano Roll</span></p>
<p class="rvps10"><span class="rvts21">A type of visual representation of data, similar to table or grid view.</span></p>
<p class="rvps10"><span class="rvts21">A medium for visual representation of data, similar to table or grid view.</span></p>
<p class="rvps10"><span class="rvts21">The interface is used in many music editing programs (MIDI sequencers and MOD trackers). Its name and basic concept was derived from existing storage medium used to operate a mechanic piano (paper rolls).</span></p>
<p class="rvps10"><span class="rvts21">Taseditor's Piano Roll displays current movie data (Input and Markers) and allows editing the data by mouse clicks. It also displays auxillary information like pointers, Bookmarks, Lag log, etc.</span></p>
<p class="rvps10"><span class="rvts21">Taseditor's Piano Roll displays current movie data (Input and Markers) and allows to edit the data by mouse clicks. It also displays auxiliary information like pointers, Bookmarks, Lag log, etc.</span></p>
<p class="rvps10"><span class="rvts21">Every row of the Piano Roll corresponds to one frame of the movie.</span></p>
<p class="rvps10"><span class="rvts21">More: </span><a class="rvts27" href="PianoRoll.html">Piano Roll</a><span class="rvts21">, </span><a class="rvts27" href="Ideas.html#PianoRoll">Piano Roll specs</a></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">Playback cursor</span></p>
<p class="rvps10"><span class="rvts21">Pointer at currently played frame of the movie.</span></p>
<p class="rvps10"><span class="rvts21">Pointer to currently played frame of the movie.</span></p>
<p class="rvps10"><span class="rvts21">Events of this frame are displayed in emulator's main window as current screenshot. Piano Roll marks respective row with light-blue color and the "Play" symbol (light-blue arrow).</span></p>
<p class="rvps10"><span class="rvts21">Only one frame of the movie can be seen at any given moment. To see the screenshot of upcoming events you'll have to move Playback cursor forward (down in Piano Roll). To see the screenshot of previous events you'll have to move Playback cursor backward (up in Piano Roll).</span></p>
<p class="rvps10"><span class="rvts21">Only one frame of the movie can be seen at any given moment. To see the screenshot of upcoming events you'll have to move the Playback cursor forward (down in the Piano Roll). To see the screenshot of previous events you'll have to move the Playback cursor backward (up in the Piano Roll).</span></p>
<p class="rvps10"><span class="rvts21">More: </span><a class="rvts27" href="PianoRoll.html">Piano Roll</a><span class="rvts21">, </span><a class="rvts27" href="Navigation.html#playback-cursor">Playback cursor Navigation</a></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">Greenzone </span><span class="rvts21">(access zone)</span></p>
@ -206,16 +206,16 @@
<p class="rvps10"><span class="rvts21">More: </span><a class="rvts27" href="Toolbox.html#progressbar">Toolbox</a><span class="rvts21">, </span><a class="rvts27" href="ProgramCustomization.html#SetGreenzonecapacity">Program Customization</a><span class="rvts21">, </span><a class="rvts27" href="Ideas.html#Greenzone">Greenzone specs</a></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">Selection</span></p>
<p class="rvps10"><span class="rvts21">Set of rows in Piano Roll that are highlighted by special color (usually dark-blue).</span></p>
<p class="rvps10"><span class="rvts21">Any row of Piano Roll (and respective frame of the movie) can be either selected or not selected.</span></p>
<p class="rvps10"><span class="rvts21">Selection allows to operate with many frames at once, for example, delete whole section of the movie instead of deleting every single frame in it.</span></p>
<p class="rvps10"><span class="rvts21">Upper row of the Selection is called "Selection cursor".</span></p>
<p class="rvps10"><span class="rvts21">Selection cursor automatically follows the process of Input editing.</span></p>
<p class="rvps10"><span class="rvts21">Set of rows in the Piano Roll that are highlighted by special color (usually dark-blue).</span></p>
<p class="rvps10"><span class="rvts21">Any row of the Piano Roll (and thus any frame of the movie) can be either selected or not selected.</span></p>
<p class="rvps10"><span class="rvts21">Selection allows to operate with many frames at once, for example, delete a whole section of the movie at once instead of deleting every single frame in it.</span></p>
<p class="rvps10"><span class="rvts21">The upper row of the Selection is called "Selection cursor".</span></p>
<p class="rvps10"><span class="rvts21">The Selection cursor automatically follows the process of Input editing.</span></p>
<p class="rvps10"><span class="rvts21">More: </span><a class="rvts27" href="PianoRoll.html">Piano Roll</a><span class="rvts21">, </span><a class="rvts27" href="Navigation.html#selection-cursor">Selection cursor Navigation</a></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">Marker</span></p>
<p class="rvps10"><span class="rvts21">Yellow mark for a row in Piano Roll that emphasizes the frame among its neighbors.</span></p>
<p class="rvps10"><span class="rvts21">Any row in the Piano Roll can be marked. Markers can improve the distinctness of movie data.</span></p>
<p class="rvps10"><span class="rvts21">Any row in the Piano Roll can be marked. Markers allow to improve the distinctness of movie data.</span></p>
<p class="rvps10"><span class="rvts21">Markers can be used to:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">organize the Input</span></li>
@ -226,18 +226,19 @@
<p class="rvps10"><span class="rvts21">More: </span><a class="rvts27" href="PianoRoll.html#markers">Piano Roll</a><span class="rvts21">, </span><a class="rvts27" href="Ideas.html#Markers">Markers specs</a></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">Note</span></p>
<p class="rvps10"><span class="rvts21">Single line of text accompanying every Marker.</span></p>
<p class="rvps10"><span class="rvts21">A single line of text accompanying every Marker.</span></p>
<p class="rvps10"><span class="rvts21">More: </span><a class="rvts27" href="PianoRoll.html#markers">Piano Roll</a><span class="rvts21">, </span><a class="rvts27" href="Controls.html#notes">Controls</a><span class="rvts21">, </span><a class="rvts27" href="AdvancedFeatures.html#UsingMarkers">Advanced Features</a></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">Bookmark</span></p>
<p class="rvps10"><span class="rvts21">A numbered mark for a frame of the movie.</span></p>
<p class="rvps10"><span class="rvts21">Bookmark stores all necessary data about the frame it was placed on. Including the movie branch that contains Input that definitely leads the game to events of this frame.</span></p>
<p class="rvps10"><span class="rvts21">Taseditor has 10 slots for Bookmarks.</span></p>
<p class="rvps10"><span class="rvts21">A Bookmark stores all necessary data about the frame it was placed on. Including the movie branch that contains an Input that definitely leads the game to the events of this frame.</span></p>
<p class="rvps10"><span class="rvts21">Bookmarks can be used for Playback cursor navigation, but their main purpose is to store branches.</span></p>
<p class="rvps10"><span class="rvts21">More: </span><a class="rvts27" href="Toolbox.html#bookmarks">Toolbox</a><span class="rvts21">, </span><a class="rvts27" href="Ideas.html#BookmarksBranches">Bookmarks specs</a></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">Branch</span></p>
<p class="rvps10"><span class="rvts21">A copy of the movie, storing its state at the moment of creating the Bookmark.</span></p>
<p class="rvps10"><span class="rvts21">Current movie can be replaced by the branch when necessary, thus restoring saved state of the movie.</span></p>
<p class="rvps10"><span class="rvts21">A full copy of the movie, storing its state at the moment of creating the Bookmark.</span></p>
<p class="rvps10"><span class="rvts21">The current movie can be replaced by the branch when necessary, thus restoring saved state of the movie.</span></p>
<p class="rvps10"><span class="rvts21">With branches you can have many different movies in one project, and you can instantly switch among them:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">to compare alternative strategies of walkthrough</span></li>
@ -248,19 +249,19 @@
<p class="rvps10"><span class="rvts21">More: </span><a class="rvts27" href="Toolbox.html#bookmarks">Toolbox</a><span class="rvts21">, </span><a class="rvts27" href="ProgramCustomization.html#BranchesrestoreentireMovie">Program Customization</a><span class="rvts21">, </span><a class="rvts27" href="Ideas.html#BookmarksBranches">Branches specs</a></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">Project</span></p>
<p class="rvps10"><span class="rvts21">Container for storing work data in Taseditor.</span></p>
<p class="rvps10"><span class="rvts21">Container for storing working data in Taseditor.</span></p>
<p class="rvps10"><span class="rvts21">More: </span><a class="rvts27" href="AdvancedFeatures.html#ProjectsSharing">Advanced Features</a></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">Lua</span></p>
<p class="rvps10"><span class="rvts21">A programming language used in many TAS-friendly emulators.</span></p>
<p class="rvps10"><span class="rvts21">Useful for making custom tools and data visualization.</span></p>
<p class="rvps10"><span class="rvts21">Programming language used in many TAS-friendly emulators.</span></p>
<p class="rvps10"><span class="rvts21">Useful for making custom tools and for data visualization.</span></p>
<p class="rvps10"><span class="rvts21">More: </span><a class="rvts27" href="AdvancedFeatures.html#UsingLua">Advanced Features</a><span class="rvts21">, </span><span class="rvts27">Lua</span><span class="rvts21">, </span><a class="rvts27" href="LuaAPI.html">Lua API</a></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">Bot </span><span class="rvts21">(robot)</span></p>
<p class="rvps10"><span class="rvts21">A program made for automation of a task.</span></p>
<p class="rvps10"><span class="rvts21">Bots are created to free humans from tedious work that doesn't require high intelligence. Unlike humans, bots don't invent the solution, they just methodically test all possible approaches within given limits, following strict algorithm made by the programmer.</span></p>
<p class="rvps10"><span class="rvts21">Nowadays bots are only practical for running exhaustive search within a small segment of the movie. Most of time it's faster to search for best solution manually, using human intuition to eliminate dead ends without unnecessary tests.</span></p>
<p class="rvps10"><span class="rvts21">Making bots requires programming skills. TASing bots are either written in Lua or built-in into emulators by modifying open source code.</span></p>
<p class="rvps10"><span class="rvts21">A program made for automation of a specific task.</span></p>
<p class="rvps10"><span class="rvts21">Bots are created to free humans from tedious work that doesn't require high intelligence. Unlike humans, bots don't invent the solution, they just methodically test all possible approaches within given limits, following an algorithm made by the programmer.</span></p>
<p class="rvps10"><span class="rvts21">Nowadays bots are only practical for running exhaustive search within a very small segment of the movie. Most of time it's faster to search for best solution manually, using human intuition to eliminate dead ends without unnecessary tests.</span></p>
<p class="rvps10"><span class="rvts21">Making bots requires programming skills. TASing bots are either written in Lua or built-in into emulators by modifying an open source code.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">Pattern</span></p>
<p class="rvps10"><span class="rvts21">A predefined sequence of Input values for a button.</span></p>

View File

@ -61,6 +61,7 @@
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">At first the TAS Editor was based on the codebase of experimental tool named TASEdit, using FCEUX 2.1.5 as a kick-start.</span></p>
<p class="rvps10"><span class="rvts21">The premise of TASEdit was to build an input editor (like TAS Movie Editor) into emulator, so that the delay between editing and checking results would greatly shrink. Since there was no research done on typical behaviors in TASing process, the concept was vague and the code wasn't scalable. Thus, soon after formulating the new vision of the editing tool the code of TAS Editor was fully rewritten to make adding new features easier.</span></p>
<p class="rvps10"><span class="rvts21">The premise of TAS Editor is to create a tool that is more handy than traditional rerecording tools, not just for Input editing/splicing, but also for Input creation and, most importantly, polishing (optimizing).</span></p>
<p class="rvps10"><span class="rvts21">The following architecture of TAS Editor was designed according to author's notion of a methodical TASing and of features needed for such TASing.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
@ -340,22 +341,22 @@
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">Main</span><span class="rvts21">/</span><span class="rvts25">Window</span><span class="rvts21">:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">call Taseditor's update() function after every emulated frame and when emulation is paused, no less than 20 times per second (necessary for adequate animations and controls in TAS Editor window)</span></li>
<li class="rvps10"><span class="rvts21">call Taseditor's update() function after every emulated frame and when emulation is paused, no less than 20 times per second (necessary for smooth animations and controls in TAS Editor window)</span></li>
<li class="rvps10"><span class="rvts21">dispatch OS messages to Taseditor window, including accelerator table commands</span></li>
<li class="rvps10"><span class="rvts21">if emulator doesn't make use of mouse wheel, it should resend WM_MOUSEWHEEL to Taseditor, same with middle mouse clicks on emulator's own window</span></li>
<li class="rvps24" style="text-indent: 30px"><span class="rvts21">on exit: emulator should ask Taseditor, so it can check unsaved changes in current project and allow user to save it before quitting. If the </span><span class="rvts20">AskSave()</span><span class="rvts21"> function returns </span><span class="rvts70">false</span><span class="rvts21">, the exit should be cancelled (means that user chose "Cancel")</span></li>
<li class="rvps24" style="text-indent: 30px"><span class="rvts21">on exit: emulator should ask Taseditor, so it can check unsaved changes in current project and allow user to save before quitting. If the </span><span class="rvts20">askSave()</span><span class="rvts21"> function returns </span><span class="rvts70">false</span><span class="rvts21">, the exit should be cancelled (means that user chose "Cancel")</span></li>
</ul>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">Movie</span><span class="rvts21">:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">there should be an interface for full control over current movie data (creating/reading/writing/any modification). The movie should be the last layer between user's input and emulated game, which means that the game should not take input from virtual pads, only from movie data. Alternative (FCEUX example) would be to always sync changes into virtual pads every time the movie data changes. Either way, Taseditor interacts with the game by reading and modifying movie data and doesn't poll virtual pads. Piano Roll displays current movie data and edits Input of current movie data</span></li>
<li class="rvps10"><span class="rvts21">there should be an interface for full control over the current movie data (creating/reading/writing/any modification). The movie should be the last layer between user's input and emulated game, which means that the game should not take input from virtual pads, only from movie data. An alternative (FCEUX example) would be to always sync changes into virtual pads every time the movie data changes. Either way, Taseditor interacts with the game by reading and modifying movie data and doesn't poll virtual pads. The Piano Roll displays current movie data and edits Input of current movie data only</span></li>
<li class="rvps10"><span class="rvts21">in Recording mode: at the very beginning of a frame (right after the Input for the frame is written into current movie data) emulator should call Taseditor's Recorder function (and Recorder may change the movie data)</span></li>
</ul>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">Input</span><span class="rvts21">:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">provide an interface for reading which buttons are currently held (for Piano Roll's Header)</span></li>
<li class="rvps10"><span class="rvts21">hardware commands (Reset/Power/etc) should not be executed immediately after user invokes them, they should work as well as buttons input from virtual pads, meaning that when Taseditor is on it may either allow or prohibit the commands. Also when Taseditor is on and is not Recording, user should not be able to even invoke hardware commands</span></li>
<li class="rvps10"><span class="rvts21">provide an interface for knowing which buttons are currently held (it's necessary for the Piano Roll Header)</span></li>
<li class="rvps10"><span class="rvts21">hardware commands (Reset/Power/etc) should not be executed immediately after user invokes them, they should work as well as buttons input from virtual pads, meaning that when Taseditor is engaged it may either allow or prohibit the commands. In fact, when Taseditor is engaged and is not Recording, user should not be able to even invoke hardware commands</span></li>
</ul>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">Output</span><span class="rvts21">:</span></p>
@ -366,37 +367,37 @@
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">SaveStates</span><span class="rvts21">:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">have public function for making savestate in RAM and function for loading the state from RAM</span></li>
<li class="rvps10"><span class="rvts21">have public function for making a savestate in RAM and function for loading the state from RAM array</span></li>
<li class="rvps10"><span class="rvts21">savestates must restore the game state precisely</span></li>
<li class="rvps10"><span class="rvts21">saving and loading should not take too much time, because the Greenzone automatically creates new savestate for every frame, which should be transparent for user</span></li>
<li class="rvps10"><span class="rvts21">saving and loading should not take too much time, because the Greenzone automatically creates a new savestate for every frame, which should be transparent for user</span></li>
<li class="rvps10"><span class="rvts21">savestates should be stored in compressed form, so that they don't take too much space, because for a comfortable work in Taseditor the Greenzone should have at least 1000 savestates for nearby frames</span></li>
<li class="rvps10"><span class="rvts21">savestates should not store current movie data (that would be a waste of space)</span></li>
<li class="rvps10"><span class="rvts21">Greenzone savestates should not store current movie data (that would be a waste of space)</span></li>
</ul>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">Config</span><span class="rvts21">:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">on emulator start: emulator should load </span><span class="rvts70">taseditor_config</span><span class="rvts21"> data from the common settings file. If the file is not found, no changes should be made to </span><span class="rvts70">taseditor_config</span><span class="rvts21"> (it will have its settings by default)</span></li>
<li class="rvps10"><span class="rvts21">on emulator start: emulator should load </span><span class="rvts70">taseditor_config</span><span class="rvts21"> data from the common settings file. If the file is not found, no changes should be made to </span><span class="rvts70">taseditor_config</span><span class="rvts21"> (it will have its default settings)</span></li>
<li class="rvps10"><span class="rvts21">on emulator exit: save </span><span class="rvts70">taseditor_config</span><span class="rvts21"> data to the common settings file</span></li>
</ul>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">Lua engine</span><span class="rvts21">:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">add support for </span><span class="rvts20">taseditor</span><span class="rvts21"> library. The core of each function is implemented by Taseditor, but emulator should take parameters from Lua stack and send them to respective function of Taseditor's Lua gate, then receive returned data and push it into Lua stack</span></li>
<li class="rvps10"><span class="rvts21">add support for no more than one </span><a class="rvts27" href="LuaAPI.html#registermanual">Manual function</a><span class="rvts21"> and at least one </span><a class="rvts27" href="LuaAPI.html#registerauto">Auto function</a></li>
<li class="rvps10"><span class="rvts21">notify Taseditor about changing Manual function status (registered/re-registered/empty) so that it can change the state of the "</span><span class="rvts29">Run function</span><span class="rvts21">" button</span></li>
<li class="rvps10"><span class="rvts21">add support for </span><a class="rvts27" href="LuaAPI.html#registermanual">Manual function</a><span class="rvts21"> and </span><a class="rvts27" href="LuaAPI.html#registerauto">Auto function</a></li>
<li class="rvps10"><span class="rvts21">notify Taseditor about changing the Manual function status (registered/re-registered/empty) so that it can change the appearance of the "</span><span class="rvts29">Run function</span><span class="rvts21">" button</span></li>
</ul>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">Replay</span><span class="rvts21">:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">emulator should be able to replay Taseditor project files as usual movie files, ignoring the additional data at the end of the file</span></li>
<li class="rvps10"><span class="rvts21">since Taseditor project file can be huge, emulator shouldn't load it into memory when opening</span></li>
<li class="rvps10"><span class="rvts21">emulator must distinguish between normal movie and Taseditor project file. If it's a project file: when user tries to rerecord, emulator should refuse and suggest launching TAS Editor instead. If user agrees, emulator should send Taseditor the reference to the project file</span></li>
<li class="rvps10"><span class="rvts21">emulator should be able to distinguish between a normal movie and a Taseditor project file. If it's a project file: when user tries to rerecord, emulator should refuse and suggest launching TAS Editor instead. If user agrees, emulator should send Taseditor the reference to the project file</span></li>
</ul>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">Other</span><span class="rvts21">:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">emulator environment should be stable and deterministic. Desyncs will invalidate Playback cursor navigation and make TASing unfeasible</span></li>
<li class="rvps10"><span class="rvts21">it's recommended to implement all the points mentioned in </span><a class="rvts27" href="MistakeProofing.html">Mistake-proofing</a><span class="rvts21"> that are related to emulator modification. In particular, Taseditor should be able to change certain settings, and user shouldn't be able to change them while Taseditor is on</span></li>
<li class="rvps10"><span class="rvts21">emulator must be stable and deterministic. Desyncs will totally break Playback cursor navigation and make TASing unfeasible</span></li>
<li class="rvps10"><span class="rvts21">it's recommended to implement all the points mentioned in </span><a class="rvts27" href="MistakeProofing.html">Mistake-proofing</a><span class="rvts21"> that are related to emulator modification. In particular, Taseditor should be able to change certain settings, and user shouldn't be able to change them while Taseditor is engaged</span></li>
<li class="rvps10"><span class="rvts21">good emulation speed is necessary for adequate </span><a class="rvts27" href="NonlinearTASing.html#turbo-seeking">Turbo seeking</a><span class="rvts21"> feature. Also there should be an option to mute sound when turbo is on.</span></li>
</ul>
<p class="rvps10"><span class="rvts21"><br/></span></p>

View File

@ -61,14 +61,14 @@
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps10"><img align="right" alt="" style="padding : 6px;" src="lib/famtasia-smb3j.png"/></p>
<p class="rvps10"><span class="rvts21">TASing the process of creating an extraordinary game playthrough. For a true TASer, just simply beating the game is not enough. You must do something unique, something that would justify the use of tools.</span></p>
<p class="rvps10"><span class="rvts21">And that requires a non-standard way of thinking. During the regular play, almost entire flow of our thoughts is determined by the gameplay rules, and those who try to question the rules are quickly fined with a game over and other means. These trivial psychological methods help the game to direct player's fantasy to an intended path, in order to give him a credible atmosphere of integral world and to keep him within a craftily devised comfort zone.</span></p>
<p class="rvps10"><span class="rvts21">And that requires a non-standard way of thinking. During a regular playing, almost entire flow of our thoughts is determined by the gameplay rules, and those who try to question the rules are quickly fined with a game over and other means. These trivial psychological methods help the game to direct player's fantasy to an intended path, giving him a credible atmosphere of integral world and keeping him within a craftily devised comfort zone.</span></p>
<p class="rvps10"><span class="rvts21">So, to create an extraordinary playthrough, TASer needs to both use emulator tools masterfully and be able to mentally abstract from the original game rules, while still obeying them physically (because TASing is not cheating, we won't influence the game other way than by joypad input).</span></p>
<p class="rvps10"><span class="rvts21">Early TASing, just as regular speedrunning, was not much far away from the "normal" gaming process. TASer simply launched an emulator, switched on buttons logging and played a game, saving and loading often enough to fix the most obvious mistakes, slowing down the gameplay at the most intense moments, thus compensating for the slow reaction of the human organism.</span></p>
<p class="rvps10"><span class="rvts21">The ability to fix mistakes emancipates man's imagination and incites him to experiment. Illusions of the game realm now confine his mind much less than before. But real-world stereotypes still affect his thinking. For instance, if a harmful object usually kills you, it's only natural to assume it always kills. But in truth it may appear to be killing only while even frame numbers, or when the subpixel value is equal to zero. But how would you guess it using only savestates and slowdown? First you have to stop being a gamer and become a researcher.</span></p>
<p class="rvps10"><span class="rvts21">A huge breakthrough in the TASing history was the introduction of </span><span class="rvts25">Frame Advance</span><span class="rvts21"> a frame-by-frame emulation. Now when you're TASing, the game is constantly being held paused, thus allowing to analyze every in-game aspect separately. Until then the game still appeared as a coherent stream of events (with simple slowdown). The stream that the player had to perceive as a complex emotional cocktail. And now with frame-by-frame play TASer can mentally isolate any given event of the current frame. This drastically alters the principles of consuming the in-game information. Material world stereotypes don't dictate how to act in the virtual world anymore, and you see the game more objectively, thus finding imperfections/loopholes in its rules.</span></p>
<p class="rvps10"><span class="rvts21">Of course the game still keeps trying to impose typical behavior templates, and they are harder to resist when you're newbie rather than experienced TASer. That's the exact reason why a skilled TASer can beat someone's speedrun (even his own old TAS) not because of handling the tools better, but owing to "Déformation professionnelle" that helps to notice vulnerabilities in games.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Many more TASing tools were invented since then, but the very way of interaction between a TASer and a game remained the same. Using rerecords, TASer edits Input in the same succession as the flow of in-game time. This linearity of TASing process builds certain limits in TASer's thinking. When you get used to receiving the game reaction on each button press, you involuntarily associate yourself with a game character. This makes it harder to try to look at the events from an outsider's viewpoint. And yet TASer is expected to have the most objective point of view possible!</span></p>
<p class="rvps10"><span class="rvts21">Early TASing, just as regular speedrunning, was not too far away from the "normal" gaming process. TASer simply launched an emulator, switched on buttons logging and played a game, saving and loading often enough to fix the most obvious mistakes, slowing down the gameplay at the most intense moments, thus compensating for the slow reaction of the human organism.</span></p>
<p class="rvps10"><span class="rvts21">The ability to fix mistakes emancipates man's imagination and incites him to experiment. Illusions of the game realm now confine his mind much less than before. But real-world stereotypes still affect his thinking. For instance, if a harmful object usually kills you, it's only natural to assume it always kills. But in truth it may appear to be killing only at even frame numbers, or when the subpixel value is equal to zero. But how would you guess it using only savestates and slowdown?</span></p>
<p class="rvps10"><span class="rvts21">You have to stop being a gamer and become a researcher. And there are tools made exactly for this mental transformation.</span></p>
<p class="rvps10"><span class="rvts21">A huge breakthrough in the TASing history was the introduction of </span><span class="rvts25">Frame Advance</span><span class="rvts21"> a frame-by-frame emulation. Now when you're TASing, the game is constantly being held paused, thus allowing to analyze every in-game aspect separately. Before, even with a strong slowdown the game still appeared as a coherent stream of events. The stream that the player had to perceive as a complex emotional cocktail. And now with frame-by-frame play TASer can mentally isolate any given event of the current frame. This drastically changes the principles of consuming an in-game information. Material world stereotypes don't dictate how to act in the virtual world anymore, and you see the game more objectively, thus finding imperfections and loopholes in its rules.</span></p>
<p class="rvps10"><span class="rvts21">Of course the game still keeps trying to impose typical behavior templates, and they are harder to resist when you're newbie rather than experienced TASer. That's the main reason why a skilled TASer can beat someone's speedrun (even his own old TAS) not because of handling the tools better, but because of "Déformation professionnelle" that helps to notice vulnerabilities in games.</span></p>
<p class="rvps10"><span class="rvts21">Many more TASing tools were invented since then, but the very way of interaction between a TASer and a game remained the same. Using rerecords, TASer edits Input in the same succession as the flow of in-game time. This linearity of TASing process builds certain limits in TASer's thinking. When you get used to receiving the game reaction on each button press, you involuntarily associate yourself with a game character. This makes it harder to look at the events from an outsider's viewpoint. And yet a TASer is expected to have the most objective point of view possible. Thus we need further transformation of TASer's way of perception.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">The development of the toolset named "TAS Editor" aims for 2 main goals:</span></p>
<ol style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
@ -79,7 +79,7 @@
<p class="rvps10"><span class="rvts21">The first goal is achieved by detailed visualization of all major aspects of TASing.</span></p>
<p class="rvps10"><span class="rvts21">The second goal is achieved by switching from linear recording of movie segments to non-linear Input editing. The higher level of abstracting from in-game rules is reached by giving the TASer the following new abilities:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps15"><span class="rvts0"><span class="rvts21">changing Input in an arbitrary order (not just in the order the events flow in the game) thanks to Piano Roll interface</span></span></li>
<li class="rvps15"><span class="rvts0"><span class="rvts21">changing Input in any arbitrary order (not just in the order the events flow in the game) thanks to Piano Roll interface</span></span></li>
<li class="rvps15"><span class="rvts0"><span class="rvts21">watching game events in an arbitrary order (not just frame by frame) thanks to Greenzone</span></span></li>
<li class="rvps15"><span class="rvts0"><span class="rvts21">emphasizing the Cause-Effect relation between Input and its remote consequences (not just the nearest ones) thanks to Turbo-seeking</span></span></li>
<li class="rvps15"><span class="rvts0"><span class="rvts21">enforcing custom logic of the movie segmentation (not just dividing into TV frames or into in-game levels) thanks to Markers</span></span></li>
@ -99,8 +99,8 @@
<p class="rvps14"><span class="rvts21"><br/></span></p>
<p class="rvps14"><span class="rvts21">When launching Taseditor, get ready to control the game from bird's eye view. The following chapters of this tutorial will explain you almost everything a prolific TASer needs to know. If you already have an experience in traditional TASing, some learning aspects should come easier, but some may appear more difficult to you than to a newcomer. Either way, try to finish the whole Guide, and you will likely learn a thing or two about TASing in general.</span></p>
<p class="rvps14"><span class="rvts21">One of the most unconventional features of TASing with Taseditor is the stress on mouse control. Mouse allows high speed of Input editing and unparalleled convenience of Playback navigation. Even though most of Taseditor functions also have keyboard shortcuts, the comfortable work would be impossible without a mouse.</span></p>
<p class="rvps14"><span class="rvts21">The gamepad is useful when you need to quickly record an Input without caring about accuracy. But most of his time TASer spends on various manipulations with once created Input. And here the mouse or keyboard becomes much more handy than gamepad. For example, using a key combination you can move any part of Input one frame back or forth. And when you need to adjust the jump height (the duration of holding the </span><span class="rvts29">A</span><span class="rvts21"> button), it's easier to do with single click, than to switch Recording on and retype the whole range of frames.</span></p>
<p class="rvps10"><span class="rvts21">Nevertheless, it's still possible to work in Taseditor the same way people were TASing before. The program interface supports all essential aspects of the traditional TASing method. If you were to use the TAS Editor window only as an informational panel left in a corner of the desktop, you probably would not even notice any difference from usual flow of TASing. It can be good reason to smoothly move from the old method of TASing to the new one. At first you may only like some accessory features of Taseditor, such as the Lag visualization or the Branches Tree. Then you'll need some Input copy/paste, and Taseditor is the best alternative to an external editor. After some time you'll notice that direct Input editing turns out faster than rerecording.</span></p>
<p class="rvps14"><span class="rvts21">The gamepad is useful when you need to quickly record an Input without caring about accuracy. But most of his time TASer spends on various manipulations with once created Input. And here the mouse or keyboard becomes much more handy than gamepad. For example, using a key combination you can move any part of Input one frame back or forth. And when you need to adjust the jump height (the duration of holding the </span><span class="rvts29">A</span><span class="rvts21"> button), it's easier to do it with single click, than to switch Recording on and retype the whole range of frames.</span></p>
<p class="rvps10"><span class="rvts21">Nevertheless, it's still possible to work in Taseditor the same way people were TASing before. The program interface supports all essential aspects of the traditional TASing method. If you were to use the TAS Editor window only as an informational panel left in a corner of the desktop, you probably would not even notice any difference from usual flow of TASing. It can be good reason to smoothly move from the old method of TASing to the new one. At first you may only like some accessory features of Taseditor, such as the Lag visualization or the Branches Tree. Then you'll need some Input copy/paste, and Taseditor is better alternative to an external editor. After some time you'll notice that direct Input editing turns out faster than rerecording.</span></p>
<p class="rvps10"><img align="right" alt="" style="padding : 6px;" src="lib/chip-and-dale.png"/></p>
<p class="rvps10"><span class="rvts21">Advantages of the new method reveal themselves quicker when you're making a TAS controlling 2 and more players simultaneously. In old times people invented plenty of hacks and workarounds to make such kind of TASing easier, e.g. binding several buttons to one key, using "Auto-hold", macros and custom multitracking scripts. Now all of this is irrelevant with Taseditor, because here TASer does not play the role of a gamer that associates himself with the controlled character. Now you are not playing the game, you are meditating over the decomposed continuum of the game, while creating a scenario of events via Input. And thus it's does not matter whether you control 1 character, or 2, or many.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
@ -108,7 +108,7 @@
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Interesting facts:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">During the development of TAS Editor, the actual programming took less time than was spent on thinking out the ways to improve the TASing process.</span></li>
<li class="rvps10"><span class="rvts21">During the development of TAS Editor the actual programming took less time than was spent on figuring out the ways to improve the TASing process.</span></li>
<li class="rvps10"><span class="rvts21">Most of the actions in Taseditor can be done multiple ways.</span></li>
<li class="rvps10"><span class="rvts21">Any operation can be undone and redone.</span></li>
<li class="rvps10"><span class="rvts21">You can totally ignore any part of Taseditor's functionality, using only the features you actually like.</span></li>
@ -119,10 +119,9 @@
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Besides the new approach to TASing, Taseditor offers simple means for organization of your working process. Because of unsystematic approach to TASing many newcomers waste their time ineffectively, dissipate the effort and get tired quickly, then start to save the energy by reducing the amount of tests. As a result, they end up with a very suboptimal TAS. Then, as the time goes, they acquire a set of methods and habits, become experienced TASers. But every newbie had to learn by his own mistakes. In this Guide we will try to formulate a clear notion on a methodical TASing (both traditional and new), so that newcomers can realize the essence of the process faster.</span></p>
<p class="rvps10"><span class="rvts21">Working with Taseditor is pretty similar to an interactive programming using an interpreted language. You just edit the code and instantly see the result of its execution on the screen. TASer can either immediately observe the effect of his interim actions, or he can get carried away by the construction of a code section and watch the result only after the section is finished.</span></p>
<p class="rvps10"><span class="rvts21">Programmers have the valuable ability to increase the code readability with comments. It allows to keep more clear picture of the project in mind, and proceed without constant re-inspection of results, because in most cases the result is rather predictable, when the context is known.</span></p>
<p class="rvps10"><span class="rvts21">Also, good code readability allows to quickly refresh all necessary memories when you return to a project delayed long ago. Granted that this project was well documented.</span></p>
<p class="rvps10"><span class="rvts21">Taseditor helps to document TAS project on the fly write comments, assign clear names to structures (patterns and Input sections), test different code versions in separate branches of the repository (see "Branches Tree") and efficiently work in co-authorship. And no, there's no strict conventions to follow. You set your own rules for when and how to shape your project. For example, if you didn't hesitate to describe a trick used in the first level, in next levels you'll be able to quickly duplicate the trick Input by several key strokes. If you didn't you'll have to search the trick location manually. In simple TASes you can disregard comments and any long-term plans, but in complicated projects this program functionality should be very appropriate.</span></p>
<p class="rvps10"><a class="rvts27" href="http://tasvideos.org" target="_blank">TASVideos.org</a><span class="rvts21"> site supports uploading and publishing Taseditor projects (.fm3 files), so you may share not just the TAS movie, but your groundwork as well, encouraging the spirit of openness and mutual aid. If you don't want to share, export the data to .fm2 format and upload that.</span></p>
<p class="rvps10"><span class="rvts21">Programmers have the valuable ability to increase the code readability with comments. It allows to keep more clear picture of the project in mind, and proceed without constant re-inspection of results, because in most cases the result is rather predictable, when the context is known. </span><span class="rvts21">Also, good code readability allows to quickly refresh all necessary memories when you return to a project delayed long ago. Granted that this project was well documented.</span></p>
<p class="rvps10"><span class="rvts21">Taseditor encourages documenting of TAS projects on the fly you can write comments, assign clear names to structures (patterns and Input sections), test different code versions in separate branches of the repository (see "Branches Tree") and efficiently work in co-authorship. And no, there's no strict conventions to follow. You set your own rules for when and how to shape your project. For example, if you didn't hesitate to describe a trick used in the first level, in next levels you'll be able to quickly duplicate the trick's Input by several key strokes. If you didn't you'll have to search the trick location manually. In simple TASes you can disregard comments and any long-term plans, but in complicated projects this program functionality should be very appropriate.</span></p>
<p class="rvps10"><a class="rvts27" href="http://tasvideos.org" target="_blank">TASVideos.org</a><span class="rvts21"> site supports uploading and publishing Taseditor projects (.fm3 files), so you can publish not just the TAS movie, but your groundwork as well, encouraging the spirit of openness and mutual aid. If you don't want to share, export the data to .fm2 format and upload that.</span></p>
<p class="rvps10"><span class="rvts21">FM3 files are played back by FCEUX emulator since version 2.2.0 the same way as FM2 files. Older versions of FCEUX can also play such files if you change the extension to fm2.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Next chapter: </span><a class="rvts28" href="ProgramInterface.html">learning the basics of the program usage</a><span class="rvts21">.</span></p>

View File

@ -59,14 +59,16 @@
<p><span class="rvts19">Navigation</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">FCEUX main window can only display data of one frame of a movie at any given moment. Piano Roll can cover data for tens of frames at the same time. But average movie has thousands of frames. So TASer constantly needs to scroll the Piano Roll up and down or rewind emulator playback to get the data about needed frame or group of frames.</span></p>
<p class="rvps10"><span class="rvts21">Throughout the documentation this is called "movie navigation". It takes major part of TASing, and Taseditor introduces many new ways of navigation, striving to make it as fast as possible. Depending on the situation some of them are better then others, so it's not recommended to stick to a single one.</span></p>
<p class="rvps10"><span class="rvts21">Ideally, the navigation skills should move to muscle memory, allowing you to always appear in necessary place of the movie without interrupting the analysis of current task.</span></p>
<p class="rvps10"><span class="rvts21">Emulator's main window can only display data of a single frame of the movie at any given moment.</span></p>
<p class="rvps10"><span class="rvts21">The Piano Roll can cover data for tens of frames at the same time.</span></p>
<p class="rvps10"><span class="rvts21">But an average movie has tens of thousands of frames. So TASer must often scroll the Piano Roll up and down to see the data about needed segment, and rewind emulator playback to see the data about needed frame.</span></p>
<p class="rvps10"><span class="rvts21">Throughout the documentation this behavior is called "movie navigation". It takes major part of TASing, and Taseditor introduces many new ways of navigation, striving to make it as fast as possible. Depending on the situation some of them are better then others, so it's not recommended to stick to a single method.</span></p>
<p class="rvps10"><span class="rvts21">Ideally, the navigation skills should move to your muscle memory, allowing you to always appear at the necessary place of the movie without interrupting the mental analysis of the current task.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts46">All ways of navigating a movie:</span></p>
<p class="rvps10"><span class="rvts52"><br/></span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><a class="rvts57" href="Navigation.html#scrolling-piano-roll">Scrolling Piano Roll</a></li>
<li class="rvps10"><a class="rvts57" href="Navigation.html#scrolling-piano-roll">Scrolling the Piano Roll</a></li>
</ul>
<ol style="text-indent: 32px; margin-left: 20px; list-style-position: inside;">
<li class="rvps10" style="text-indent: 32px"><a class="rvts57" href="Navigation.html#scrollbar-drag">Using vertical scrollbar</a></li>
@ -74,8 +76,8 @@
<li class="rvps10" style="text-indent: 32px"><a class="rvts57" href="Navigation.html#crossing-gaps">Crossing gaps</a></li>
<li class="rvps10" style="text-indent: 32px"><a class="rvts57" href="Navigation.html#jumping-by-pages">Paging through</a></li>
<li class="rvps10" style="text-indent: 32px"><a class="rvts57" href="Navigation.html#jump-home-end">Jumping to the beginning / to the end of the movie</a></li>
<li class="rvps10" style="text-indent: 32px"><a class="rvts57" href="Navigation.html#scroll-to-playback">Jumping to Playback cursor</a></li>
<li class="rvps10" style="text-indent: 32px"><a class="rvts57" href="Navigation.html#scroll-to-selection">Jumping to Selection cursor</a></li>
<li class="rvps10" style="text-indent: 32px"><a class="rvts57" href="Navigation.html#scroll-to-playback">Jumping to the Playback cursor</a></li>
<li class="rvps10" style="text-indent: 32px"><a class="rvts57" href="Navigation.html#scroll-to-selection">Jumping to the Selection cursor</a></li>
<li class="rvps10" style="text-indent: 32px"><a class="rvts57" href="Navigation.html#scroll-to-playback-marker">Jumping to the Marker above Playback cursor</a></li>
<li class="rvps10" style="text-indent: 32px"><a class="rvts57" href="Navigation.html#scroll-to-selection-marker">Jumping to the Marker above Selection cursor</a></li>
</ol>
@ -104,21 +106,21 @@
<li class="rvps10"><a class="rvts59" href="Navigation.html#special">Special</a></li>
</ul>
<ol style="text-indent: 32px; margin-left: 20px; list-style-position: inside;">
<li class="rvps10" style="text-indent: 32px"><a class="rvts57" href="Navigation.html#find-note">Finding Markers with given text</a></li>
<li class="rvps10" style="text-indent: 32px"><a class="rvts57" href="Navigation.html#find-note">Finding Markers with a given text</a></li>
<li class="rvps10" style="text-indent: 32px"><a class="rvts57" href="Navigation.html#similar-note">Jumping to segment with similar description</a></li>
</ol>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps2"><a name="scrolling-piano-roll"></a>
<span class="rvts21"><br/></span></p>
<p><span class="rvts53">Scrolling Piano Roll</span></p>
<p><span class="rvts53">Scrolling the Piano Roll</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><a name="scrollbar-drag"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts46">1. Using vertical scrollbar</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Click on the scrollbar or drag its thumb to scroll Piano Roll like any other list.</span></p>
<p class="rvps10"><span class="rvts21">Playback cursor and Selection cursor positions are not affected by Piano Roll scrolling.</span></p>
<p class="rvps10"><span class="rvts21">Click on the scrollbar or drag its thumb to scroll the Piano Roll like any other list.</span></p>
<p class="rvps10"><span class="rvts21">Playback cursor and Selection cursor positions are not affected by the Piano Roll scrolling.</span></p>
<p class="rvps10"><span class="rvts21">When to use:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">when you need to get to a far away section of the movie. The scrollbar allows to traverse thousands of frames at once</span></li>
@ -128,22 +130,22 @@
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts46">2. Rolling mouse wheel</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Roll mouse wheel up or down </span><span class="rvts21">to scroll Piano Roll like any other list.</span></p>
<p class="rvps10"><span class="rvts21">Mouse cursor can be pointing anywhere except History Log window.</span></p>
<p class="rvps10"><span class="rvts21">Roll mouse wheel up or down </span><span class="rvts21">to scroll the Piano Roll like any other list.</span></p>
<p class="rvps10"><span class="rvts21">The mouse cursor can be pointing anywhere, except History Log window.</span></p>
<p class="rvps10"><span class="rvts21">When to use:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">when you're observing a segment that doesn't fit into Piano Roll visible area</span></li>
<li class="rvps10"><span class="rvts21">when you're observing a segment that doesn't fit into the Piano Roll visible area</span></li>
<li class="rvps10"><span class="rvts21">when you're searching for a nearby segment</span></li>
</ul>
<p><a name="crossing-gaps"></a>
<span class="rvts62"><br/></span></p>
<p class="rvps10"><span class="rvts22">3. Crossing gaps</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Point mouse cursor to any cell in Input/Markers/icons, hold </span><span class="rvts30">Alt</span><span class="rvts21"> and roll the mouse wheel up or down to scroll the Piano Roll to the closest cell that contains data different from the data of adjacent cell.</span></p>
<p class="rvps10"><span class="rvts21">Point mouse cursor to any cell in Input/Markers/icons, hold </span><span class="rvts30">Alt</span><span class="rvts21"> and roll the mouse wheel up or down to scroll the Piano Roll to the closest cell that contains a data different from the data of adjacent cell.</span></p>
<p class="rvps10"><span class="rvts21">When to use:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">when you see an emptiness in specific button column and want to find nearest frame where the button is pressed</span></li>
<li class="rvps10"><span class="rvts21">when you see the specific button is held for many frames and want to find exactly the first frame where the button was pressed, or the frame where it will be released</span></li>
<li class="rvps10"><span class="rvts21">when you see an emptiness in specific button column and you want to find the nearest frame where the button becomes pressed</span></li>
<li class="rvps10"><span class="rvts21">when you see the specific button is held for many frames and you want to find exactly the first frame where the button was pressed, or the frame where it will be released</span></li>
<li class="rvps10"><span class="rvts21">when you need to find previous/next Marker</span></li>
<li class="rvps10"><span class="rvts21">when you need to find previous/next buttonpress</span></li>
<li class="rvps10"><span class="rvts21">when you need to find the Bookmark above/below (in the icons column)</span></li>
@ -152,10 +154,10 @@
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts46">4. Paging through</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Press</span><span class="rvts21"> </span><span class="rvts30">Page Up</span><span class="rvts21"> or </span><span class="rvts30">Page Down</span><span class="rvts21"> key </span><span class="rvts21">to scroll Piano Roll like any other list. The amount of scrolling depends on the size of Piano Roll visible area.</span></p>
<p class="rvps10"><span class="rvts21">Press</span><span class="rvts21"> </span><span class="rvts30">Page Up</span><span class="rvts21"> or </span><span class="rvts30">Page Down</span><span class="rvts21"> key </span><span class="rvts21">to scroll the Piano Roll like any other list. The amount of scrolling depends on the size of the Piano Roll visible area.</span></p>
<p class="rvps10"><span class="rvts21">When to use:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">when you're searching for a segment which is probably somewhere nearby</span></li>
<li class="rvps10"><span class="rvts21">when you're searching for a segment which is likely somewhere nearby</span></li>
</ul>
<p class="rvps10"><a name="jump-home-end"></a>
<span class="rvts21"><br/></span></p>
@ -164,46 +166,46 @@
<p class="rvps10"><span class="rvts21">Press</span><span class="rvts21"> </span><span class="rvts30">Home</span><span class="rvts21"> or </span><span class="rvts30">End</span><span class="rvts21"> </span><span class="rvts21">to scroll Piano Roll to the beginning or to the end of the movie.</span></p>
<p class="rvps10"><span class="rvts21">When to use:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">w</span><span class="rvts21">hen you need to go to </span><span class="rvts21">the beginning or to the end of the movie</span></li>
<li class="rvps10"><span class="rvts21">w</span><span class="rvts21">hen you need to observe </span><span class="rvts21">the beginning or the end of the movie</span></li>
</ul>
<p class="rvps10"><a name="scroll-to-playback"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts46">6. Jumping to Playback cursor</span></p>
<p class="rvps10"><span class="rvts46">6. Jumping to the Playback cursor</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Click on the upper "Marker #" label (colored light-blue) to immediately scroll Piano Roll to Playback cursor position. Alternative way to do it is to press </span><span class="rvts30">Shift</span><span class="rvts21"> key twice within a short amount of time.</span></p>
<p class="rvps10"><span class="rvts21">Click on the upper "Marker #" label (colored light-blue) to immediately scroll the Piano Roll to the Playback cursor position. Alternative way to do it is to press </span><span class="rvts30">Shift</span><span class="rvts21"> key twice within a short amount of time.</span></p>
<p class="rvps10"><span class="rvts21">When to use:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">w</span><span class="rvts21">hen you need to see the context of currently played frame of the movie</span></li>
<li class="rvps10"><span class="rvts21">w</span><span class="rvts21">hen you wish to return to currently played segment from any other place</span></li>
<li class="rvps10"><span class="rvts21">w</span><span class="rvts21">hen you wish to return to the currently played segment from any other place</span></li>
</ul>
<p class="rvps10"><a name="scroll-to-selection"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts46">7. Jumping to Selection cursor</span></p>
<p class="rvps10"><span class="rvts46">7. Jumping to the Selection cursor</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Click on the lower "Marker #" label to immediately scroll Piano Roll to Selection cursor position. Alternative way to do it is to press </span><span class="rvts30">Ctrl</span><span class="rvts21"> key twice within a short amount of time.</span></p>
<p class="rvps10"><span class="rvts21">Click on the lower "Marker #" label to immediately scroll the Piano Roll to the Selection cursor position. Alternative way to do it is to press </span><span class="rvts30">Ctrl</span><span class="rvts21"> key twice within a short amount of time.</span></p>
<p class="rvps10"><span class="rvts21">When to use:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">w</span><span class="rvts21">hen you wish to return to currently edited segment from any other place</span></li>
<li class="rvps10"><span class="rvts21">w</span><span class="rvts21">hen you wish to return to the currently edited segment from any other place</span></li>
</ul>
<p class="rvps10"><a name="scroll-to-playback-marker"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts46">8. Jumping to the Marker above Playback cursor</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Click on the upper edit field to immediately scroll Piano Roll to the Marker which Note is going to be edited.</span></p>
<p class="rvps10"><span class="rvts21">Click on the upper edit field to immediately scroll the Piano Roll to the Marker which Note is going to be edited.</span></p>
<p class="rvps10"><span class="rvts21">Works only when the </span><a class="rvts27" href="ProgramCustomization.html#FollowMarkerNotecontext">View -&gt; Follow Marker Note context</a><span class="rvts21"> option is enabled.</span></p>
<p class="rvps10"><span class="rvts21">When to use:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">w</span><span class="rvts21">hen you need to see the beginning of </span><span class="rvts21">currently played segment</span></li>
<li class="rvps10"><span class="rvts21">w</span><span class="rvts21">hen you need to see the beginning of the </span><span class="rvts21">currently played segment</span></li>
</ul>
<p class="rvps14"><a name="scroll-to-selection-marker"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">9. Jumping to the Marker above Selection cursor</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Click on the lower edit field to immediately scroll Piano Roll to the Marker which Note is going to be edited.</span></p>
<p class="rvps10"><span class="rvts21">Click on the lower edit field to immediately scroll the Piano Roll to the Marker which Note is going to be edited.</span></p>
<p class="rvps10"><span class="rvts21">Works only when the </span><a class="rvts27" href="ProgramCustomization.html#FollowMarkerNotecontext">View -&gt; Follow Marker Note context</a><span class="rvts21"> option is enabled.</span></p>
<p class="rvps10"><span class="rvts21">When to use:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">w</span><span class="rvts21">hen you need to see the beginning of </span><span class="rvts21">currently edited segment</span></li>
<li class="rvps10"><span class="rvts21">w</span><span class="rvts21">hen you need to see the beginning of the </span><span class="rvts21">currently edited segment</span></li>
</ul>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><a name="playback-cursor"></a>
@ -212,12 +214,12 @@
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">The Playback cursor is always bound to current state of emulated game. This means that emulator affects this cursor when emulating the game, and vice versa, when you move this cursor, you affect the emulator.</span></p>
<p class="rvps10"><span class="rvts21">There's one limitation in the controlling of the cursor: sometimes it can't immediately move to the desired frame, seeking takes some time.</span></p>
<p class="rvps10"><span class="rvts21">When the "Follow cursor" checkbox in the Playback panel is checked, the Piano Roll automatically scrolls after the Playback cursor.</span></p>
<p class="rvps10"><span class="rvts21">When the "Follow cursor" checkbox in the Playback panel is checked, the Piano Roll automatically scrolls after the Playback cursor (except when seeking).</span></p>
<p class="rvps10"><a name="frame-advance-rewind"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">1. Frame-by-frame shift</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Click on </span><span class="rvts29">&lt;</span><span class="rvts21"> or </span><span class="rvts29">&gt;</span><span class="rvts21"> button in the Playback panel, or press </span><span class="rvts30">Shift + Up</span><span class="rvts21"> or </span><span class="rvts30">Shift + Down</span><span class="rvts21">, or use </span><span class="rvts26">Frame Rewind </span><span class="rvts21">or </span><span class="rvts26">Frame Advance</span><span class="rvts21"> hotkey to move Playback cursor 1 frame back of forward.</span></p>
<p class="rvps10"><span class="rvts21">Click on </span><span class="rvts29">&lt;</span><span class="rvts21"> or </span><span class="rvts29">&gt;</span><span class="rvts21"> button in the Playback panel, or press </span><span class="rvts30">Shift + Up</span><span class="rvts21"> or </span><span class="rvts30">Shift + Down</span><span class="rvts21">, or use </span><span class="rvts26">Frame Rewind </span><span class="rvts21">or </span><span class="rvts26">Frame Advance</span><span class="rvts21"> hotkey to move the Playback cursor 1 frame back of forward.</span></p>
<p class="rvps10"><span class="rvts21">When to use:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">w</span><span class="rvts21">hen you need to explore events of current segment carefully</span></li>
@ -226,8 +228,8 @@
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">2. Rewinding by mouse wheel</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Hold right mouse button and r</span><span class="rvts21">oll mouse wheel up or down </span><span class="rvts21">to move Playback cursor.</span></p>
<p class="rvps10"><span class="rvts21">Mouse cursor can be pointing anywhere.</span></p>
<p class="rvps10"><span class="rvts21">Hold the right mouse button and r</span><span class="rvts21">oll mouse wheel up or down </span><span class="rvts21">to move the Playback cursor.</span></p>
<p class="rvps10"><span class="rvts21">The mouse cursor can be pointing anywhere.</span></p>
<p class="rvps10"><span class="rvts21">When to use:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">w</span><span class="rvts21">hen you need to explore events of current segment carefully/quickly</span></li>
@ -245,17 +247,17 @@
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">4. Jumping on Markers</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Click on </span><span class="rvts29">&lt;&lt;</span><span class="rvts21"> or </span><span class="rvts29">&gt;&gt;</span><span class="rvts21"> button in the Playback panel, or press </span><span class="rvts30">Shift + Page Up</span><span class="rvts21"> or </span><span class="rvts30">Shift + Page Down</span><span class="rvts21">, or hold </span><span class="rvts30">Shift</span><span class="rvts21"> and roll the mouse wheel to move Playback cursor to previous or next Marker.</span></p>
<p class="rvps10"><span class="rvts21">Click on </span><span class="rvts29">&lt;&lt;</span><span class="rvts21"> or </span><span class="rvts29">&gt;&gt;</span><span class="rvts21"> button in the Playback panel, or press </span><span class="rvts30">Shift + Page Up</span><span class="rvts21"> or </span><span class="rvts30">Shift + Page Down</span><span class="rvts21">, or hold </span><span class="rvts30">Shift</span><span class="rvts21"> and roll the mouse wheel to move the Playback cursor to previous or next Marker.</span></p>
<p class="rvps10"><span class="rvts21">When to use:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">w</span><span class="rvts21">hen you need to set Playback cursor to the beginning of currently played segment (provided that the frame of the beginning is marked)</span></li>
<li class="rvps10"><span class="rvts21">w</span><span class="rvts21">hen you need to set the Playback cursor to the beginning of currently played segment (provided that the frame of the beginning is marked)</span></li>
<li class="rvps10"><span class="rvts21">when you want to see </span><span class="rvts21">events of previous/next segments</span></li>
</ul>
<p class="rvps10"><a name="jump-bookmark"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">5. Jumping to Bookmarks</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Press the hotkey (</span><span class="rvts26">0-9</span><span class="rvts21">) corresponding to the number of desired Bookmark, or click on a frame number in Bookmarks List, or click on a Bookmark icon in the Branches Tree to send Playback cursor to the bookmarked frame.</span></p>
<p class="rvps10"><span class="rvts21">Press the hotkey (</span><span class="rvts26">0-9</span><span class="rvts21">) corresponding to the number of desired Bookmark, or click on a frame number in Bookmarks List, or click on a Bookmark icon in the Branches Tree to send the Playback cursor to the bookmarked frame.</span></p>
<p class="rvps10"><span class="rvts21">When to use:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">w</span><span class="rvts21">hen you need to re-watch events of the movie starting from a bookmarked frame (e.g. watch the movie from the beginning of Level 2)</span></li>
@ -265,11 +267,11 @@
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">6. Jumping to the beginning / to the end of the movie</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Press </span><span class="rvts30">Shift + </span><span class="rvts30">Home</span><span class="rvts21"> or </span><span class="rvts30">Shift + </span><span class="rvts30">End</span><span class="rvts21">, or click the cloudlet or the fireball in the Branches Tree to move Playback cursor to the beginning or to the end of the movie.</span></p>
<p class="rvps10"><span class="rvts21">You can also press the </span><span class="rvts26">Play movie from the beginning</span><span class="rvts21"> hotkey (</span><span class="rvts26">Shift + R</span><span class="rvts21"> by default) to move Playback cursor to the beginning of the movie.</span></p>
<p class="rvps10"><span class="rvts21">Press </span><span class="rvts30">Shift + </span><span class="rvts30">Home</span><span class="rvts21"> or </span><span class="rvts30">Shift + </span><span class="rvts30">End</span><span class="rvts21">, or click the cloudlet or the fireball in the Branches Tree to move the Playback cursor to the beginning or to the end of the movie.</span></p>
<p class="rvps10"><span class="rvts21">You can also press the </span><span class="rvts26">Play movie from the beginning</span><span class="rvts21"> hotkey (</span><span class="rvts26">Shift + R</span><span class="rvts21"> by default) to move the Playback cursor to the beginning of the movie.</span></p>
<p class="rvps10"><span class="rvts21">When to use:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">w</span><span class="rvts21">hen you want to replay the movie from the very beginning</span></li>
<li class="rvps10"><span class="rvts21">w</span><span class="rvts21">hen you want to watch the movie from the very beginning</span></li>
<li class="rvps10"><span class="rvts21">w</span><span class="rvts21">hen you need to fill all movie frames with Greenzone data</span></li>
</ul>
<p class="rvps10"><span class="rvts21"><br/></span></p>
@ -304,7 +306,7 @@
<p class="rvps10"><span class="rvts21">Click on </span><span class="rvts29">&lt;&lt;</span><span class="rvts21"> or </span><span class="rvts29">&gt;&gt;</span><span class="rvts21"> button at the bottom of the Toolbox, or press </span><span class="rvts30">Ctrl + Page Up</span><span class="rvts21"> or </span><span class="rvts30">Ctrl + Page Down</span><span class="rvts21">, or hold </span><span class="rvts30">Ctrl</span><span class="rvts21"> and roll the mouse wheel</span><span class="rvts21"> to move Selection cursor </span><span class="rvts21">to previous or next Marker.</span></p>
<p class="rvps10"><span class="rvts21">When to use:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">when you need to set Selection cursor to the beginning of currently edited segment (provided that the frame of the beginning is marked)</span></li>
<li class="rvps10"><span class="rvts21">when you need to set the Selection cursor to the beginning of currently edited segment (provided that the frame of the beginning is marked)</span></li>
<li class="rvps10"><span class="rvts21">w</span><span class="rvts21">hen you want to move to </span><span class="rvts21">previous/next segments</span></li>
</ul>
<p class="rvps10"><a name="selection-history"></a>
@ -312,7 +314,7 @@
<p class="rvps10"><span class="rvts22">4. Tracking the Selection History</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Press </span><span class="rvts30">Ctrl + Q</span><span class="rvts21"> or </span><span class="rvts30">Ctrl + W</span><span class="rvts21"> to revert Selection to its previous or next state.</span></p>
<p class="rvps10"><span class="rvts21">This method of navigation allows to return to previously edited segments and quickly remember the sequence of recent changes. </span></p>
<p class="rvps10"><span class="rvts21">This method of navigation allows to return to previously edited segments and quickly recollect the sequence of recent changes. </span></p>
<p class="rvps10"><span class="rvts21">When to use:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">w</span><span class="rvts21">hen you need to return to previously edited segment</span></li>
@ -334,22 +336,22 @@
<p><span class="rvts21"><br/></span></p>
<p class="rvps10"><a name="find-note"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">1. Finding Markers with given text</span></p>
<p class="rvps10"><span class="rvts22">1. Finding Markers with a given text</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Open the </span><span class="rvts25">Find Note</span><span class="rvts21"> window, enter the text to search and click </span><span class="rvts29">Find next</span><span class="rvts21"> or press Enter key to set Selection cursor to the closest Marker which Note contains the text. </span><span class="rvts21">The Piano Roll automatically scrolls after the Selection. You can search up or down from current position of Selection cursor.</span></p>
<p class="rvps10"><span class="rvts21">Open the </span><span class="rvts25">Find Note</span><span class="rvts21"> window, enter the text to search and click </span><span class="rvts29">Find next</span><span class="rvts21"> or press Enter key to set the Selection cursor to the closest Marker which Note contains the text. </span><span class="rvts21">The Piano Roll automatically scrolls after the Selection. You can search up or down from the current position of the Selection cursor.</span></p>
<p class="rvps10"><span class="rvts21">When to use:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">when you need to find the segment, knowing some of the text it is labeled with</span></li>
<li class="rvps10"><span class="rvts21">when you need to find the segment, knowing some of the exact text it is labeled with</span></li>
</ul>
<p class="rvps10"><a name="similar-note"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">2. Jumping to segment with similar description</span></p>
<p class="rvps10"><span class="rvts22">2. Jumping to the segment with similar description</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Leave Playback cursor in current segment and click the </span><span class="rvts29">Similar</span><span class="rvts21"> or </span><span class="rvts29">More</span><span class="rvts21"> button to set Selection cursor to the Marker containing the most relevant Note. </span><span class="rvts21">The Piano Roll automatically scrolls after the Selection.</span></p>
<p class="rvps10"><span class="rvts21">Leave the Playback cursor in the current segment and click the </span><span class="rvts29">Similar</span><span class="rvts21"> or </span><span class="rvts29">More</span><span class="rvts21"> button to set the Selection cursor to the Marker containing the most relevant Note. </span><span class="rvts21">The Piano Roll automatically scrolls after the Selection.</span></p>
<p class="rvps10"><span class="rvts21">This method is described in the </span><a class="rvts27" href="AdvancedFeatures.html#UsingMarkers">Advanced Features</a><span class="rvts21"> chapter.</span></p>
<p class="rvps10"><span class="rvts21">When to use:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">when you need to find the segment with description similar to currently played segment.</span></li>
<li class="rvps10"><span class="rvts21">when you need to find the segment with a description similar to currently played segment.</span></li>
</ul>
<p class="rvps14"><span class="rvts21"><br/></span></p>
<p class="rvps14"><span class="rvts21"><br/></span></p>

View File

@ -71,7 +71,7 @@
<li class="rvps10"><span class="rvts21">The mouse cursor navigation to any frame of the current segment is practically instant.</span></li>
<li class="rvps10"><span class="rvts21">Edit the segment with the mouse. You can either change the Input blindly, or move the Playback cursor from time to time in order to check with the game. The steps 3 and 4 are constantly alternating until you consider the editing complete.</span></li>
<li class="rvps10"><span class="rvts21">Detect the end of the segment by putting the Playback cursor at the target event.</span></li>
<li class="rvps10"><span class="rvts21">[</span><span class="rvts34">optional step</span><span class="rvts21">] Save the finished approach to any free Bookmark, e.g. to slot </span><span class="rvts26">8</span><span class="rvts21">.</span></li>
<li class="rvps10"><span class="rvts21">[</span><span class="rvts34">optional step</span><span class="rvts21">] Save the finished approach to any free Bookmark, e.g. to slot </span><span class="rvts26">8</span><span class="rvts21"> or </span><span class="rvts26">7</span><span class="rvts21">.</span></li>
<li class="rvps10"><span class="rvts21">If this isn't the first approach to the segment, compare the new result to the best old result, using the optimality criterion. If the new approach is better (or it's the first approach), save the result to the Bookmark </span><span class="rvts26">9</span><span class="rvts21">. The slot </span><span class="rvts26">9</span><span class="rvts21"> will be used for keeping the best result of polishing the segment.</span></li>
<li class="rvps10"><span class="rvts21">If you still want to try different approaches, return to step 2, until you run out of ideas.</span></li>
<li class="rvps10"><span class="rvts21">[</span><span class="rvts34">optional step</span><span class="rvts21">] If you need more ideas, you can get some information from the past or the future by moving the Playback cursor to different segments of the movie or unpausing the emulator. When necessary, you can quickly draw a rough Input for watching the upcoming events of the game.</span></li>
@ -81,14 +81,14 @@
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Since all created approaches to playing the segment are automatically saved in the History Log, you could follow the temptation to rely on the Log and not save the approaches to Bookmarks (steps 6 and 7), instead just reach the target event once and then experiment with this Input, gradually improving it (and simply undoing all the changes that are for the worse). Such perfunctory way of TASing is technically possible, but not recommended, because it doesn't let you think far outside the terms of the first approach (because you subconsciously fear to lose the old best approach by leaving it too far away).</span></p>
<p class="rvps10"><span class="rvts21">Even if the outcome of the latest modification of the Input made the game behave worse, you should not immediately revert to the previous state of the movie, better try to examine the cause of the worsening and continue the modification to turn it into an improvement. And in order to never be afraid to lose the previous successful playthrough in the depths of the History Log, you should do exactly like they do in the traditional TASing allot a special slot for storing the best result and set this Bookmark to the end of the segment every time you improve the result.</span></p>
<p class="rvps10"><span class="rvts21">Even if the outcome of the latest modification of the Input made the game behave worse, you should not immediately forget it and revert to the previous state of the movie, better try to examine the cause of the worsening and continue the modification to turn it into an improvement. And in order to never be afraid to lose the previous successful playthrough in the depths of the History Log, you should do exactly like they do in the traditional TASing allot a special slot for storing the best result and set this Bookmark to the end of the segment every time you improve the result.</span></p>
<p class="rvps10"><span class="rvts21">And you can do the same with those promising approaches that are somewhat better, but somewhat worse than the current best result. When you're saving all alternative approaches to separate Bookmarks, you can safely remove their Input from the working movie or change it beyond recognition, because you can return to any of them with a single key press, and no need to search within the History Log.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Unlike the traditional TASing method, here you may lose sight of dividing the movie into logical segments, because now you don't have to mark the beginning and the end of the current segment with Bookmarks. However, it's still recommended to keep an order and mark the beginning of every important segment with Markers, in order to limit the number of optimality factors.</span></p>
<p class="rvps10"><span class="rvts21">The beginning and the end of a segment are usually associated with certain events of the game, and not with a soulless frame number. But since the starting event of the segment is not affected by modifying the Input of the segment, this event will always occur in the same frame, so you can lock the frame with a Marker.</span></p>
<p class="rvps10"><span class="rvts21">The ending event of the segment may occur in various points of time, depending on the Input in the segment. So if you mark the end with a Marker, you will need to move the Marker up or down every time you change the target event by modifying the Input. Often it's impractical to spend time on dragging, so instead of the trailing Marker you can use aforementioned Bookmark which both stores the best approach and serves as a mark of the end of current segment.</span></p>
<p class="rvps10"><span class="rvts21">The beginning and the end of a segment are usually associated with certain events of the game, and not with a soulless frame number. But since the starting event of the segment is not affected by modifying the Input of the segment, this event will always occur at the same frame, so you can lock the frame with a Marker.</span></p>
<p class="rvps10"><span class="rvts21">The ending event of the segment may occur in various points of time, depending on the Input in the segment. So if you mark the end with a Marker, you will need to move the Marker up or down every time you change the target event by modifying the Input. Often it's impractical to spend time on dragging Markers, so instead of the trailing Marker you can use the aforementioned Bookmark which stores the best approach and its icon serves as a mark of the end of current segment.</span></p>
<p class="rvps10"><a name="GreenArrow"></a>
<span class="rvts21">As for simple segments, you can polish them without marking the ending frame at all, by simply relying on your own memory and on the green arrow provided by Taseditor. With this green arrow the Taseditor hints you the frame where you've stopped watching the segment the last time (before you started modifying the Input of the segment). Usually this is the frame where the target event was detected in previous approach. So you may as well replay the updated segment up to the frame and compare the new result with the old one. If the target event is now detected 2 frames above the green arrow, it means you've outran previous result by 2 frames, so the new Input is better (if your criterion is speed). This entire logical chain pops in your mind once you glance at the Piano Roll after watching the outcome of the recent Input modification.</span></p>
<span class="rvts21">As for simple segments, you can polish them without marking the ending frame at all, by simply relying on your own memory and on the green arrow provided by Taseditor. With this green arrow the Taseditor hints you the frame where you've stopped watching the segment the last time (before you started modifying the Input of the segment). Usually this is the frame where the target event was detected in previous approach. So you may as well replay the updated segment up to the frame and compare the new result with the old one. For example, if the target event is now detected 2 frames above the green arrow, it means you've outran previous result by 2 frames, so the new Input is better (if your criterion is speed). This entire logical chain pops in your mind once you glance at the Piano Roll after watching the outcome of the recent Input modification.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">The process of polishing the Input in the nonlinear method is a constant alternation of editing and watching the segment. You analyze the situation during the watching and right after stopping the watching.</span></p>
<p class="rvps10"><span class="rvts21">Possible ways to watch the outcome of Input:</span></p>
@ -98,17 +98,17 @@
<li class="rvps10"><span class="rvts21">start seeking to the nearest Marker by holding </span><span class="rvts30">Shift</span><span class="rvts21"> and pressing the middle mouse button</span></li>
<li class="rvps10"><span class="rvts21">start seeking to the Selection cursor by holding </span><span class="rvts30">Ctrl </span><span class="rvts21">and pressing the middle mouse button, granted that the Selection cursor is below the Playback cursor</span></li>
<li class="rvps10"><span class="rvts21">rewatch the segment from the Selection cursor position to the Playback cursor position by by holding </span><span class="rvts30">Ctrl </span><span class="rvts21">and pressing the middle mouse button, granted that the Selection cursor is above the Playback cursor</span></li>
<li class="rvps10"><span class="rvts21">drag the Playback cursor manually, using the mouse cursor</span></li>
<li class="rvps10"><span class="rvts21">just drag the Playback cursor manually, using the mouse cursor</span></li>
<li class="rvps10"><span class="rvts21">move the Playback cursor by holding the right mouse button and rolling the mouse wheel</span></li>
<li class="rvps10"><span class="rvts21">shift the Playback cursor frame-by-frame using </span><span class="rvts26">Frame Rewind</span><span class="rvts21"> and </span><span class="rvts26">Frame Advance</span><span class="rvts21"> hotkeys or </span><span class="rvts29">&lt;</span><span class="rvts21"> and </span><span class="rvts29">&gt; </span><span class="rvts21">buttons or </span><span class="rvts30">Shift + Up</span><span class="rvts21"> и </span><span class="rvts30">Shift + Down</span><span class="rvts21"> keys</span></li>
<li class="rvps10"><span class="rvts21">and there are other </span><a class="rvts27" href="Navigation.html#playback-cursor">ways of navigation with the Playback cursor</a><span class="rvts21">.</span></li>
</ul>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Most often you are going to either click the middle mouse button or move the Playback cursor by scrolling the mouse wheel. Don't attach yourself to a single one of the ways, learn to use them depending on a situation.</span></p>
<p class="rvps10"><span class="rvts21">Most often you are going to either click the middle mouse button or move the Playback cursor by scrolling the mouse wheel. Don't attach yourself to a single one of the ways, learn to use them depending on the situation.</span></p>
<p class="rvps10"><span class="rvts21">The ratio between the time spent on editing and on watching depends on the complexity of the current segment and on the volume of your knowledge about the game. The more you TAS a single game, the better you are aware of its regularities. So near the end of your project you'll be able to foresee the outcome of your Input modifications before even attempting to edit them in. Then you'll only need to watch the segment in order to confirm your guess.</span></p>
<p class="rvps10"><span class="rvts21">In some cases you can judge about the optimality of an Input by seeing its interim results and not even watching the segment to the end. For example, if the character bumps into a wall and nullifies his speed in the middle of the segment, you can immediately guess that he is going to reach the target event later than previous time. So sometimes you want to only watch a few frames and continue the editing. However, such a hurry may lead you to reject a solution that is suboptimal at first glance but has a potential to be very successful in another segment. For example, after bumping the wall Mario may accidentally enter inside and go through it. That's why it's recommended to never hurry when TASing, and to watch the current segment to the end, where you can be sure the optimality criterion won't let you down.</span></p>
<p class="rvps10"><span class="rvts21">Technically you can watch and edit the Input simultaneously. When the </span><span class="rvts21">"Follow cursor" checkbox is disabled, the Piano Roll stays still, while the movie is played, so you can draw buttonpresses right when they are executed (replayed). For example, when Mario jumps over an obstacle, try to change the height of the jump by drawing and erasing the </span><span class="rvts29">A</span><span class="rvts21"> button presses without pausing the emulation. You can slow the emulation down by the </span><span class="rvts26">-</span><span class="rvts21"> and </span><span class="rvts26">=</span><span class="rvts21"> hotkeys, in order to have more time for clicking while watching.</span></p>
<p class="rvps10"><span class="rvts21">But when you need to have enough time both for clicking and for thinking, better pause the emulator and TAS properly.</span></p>
<p class="rvps10"><span class="rvts21">But when you need to have enough time not just for clicking, but also for thinking, better pause the emulator and TAS properly.</span></p>
<p class="rvps10"><a name="turbo-seeking"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">The emulation speed can be both decreased and increased. Before Taseditor, speeding up the emulation was used only for quick replay of the finished part of the movie. But now the </span><span class="rvts37">turbo emulation</span><span class="rvts21"> also serves as an original way of TASing. With an extremely fast emulation you can feel the interconnection between a buttonpress and its distant outcome.</span></p>
@ -120,13 +120,13 @@
<p class="rvps10"><span class="rvts21">This way turbo allows to automatically filter useless information that is produced by the game in the middle of the segment, and only consume the necessary data that appears at the end of the segment.</span></p>
<p class="rvps10"><span class="rvts21">Here's how you do it:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">Switch on the "Turbo seek" checkbox. Switch of the </span><span class="rvts21">"Follow cursor".</span></li>
<li class="rvps10"><span class="rvts21">Switch on the "Turbo seek" checkbox. Switch off the </span><span class="rvts21">"Follow cursor".</span></li>
<li class="rvps10"><span class="rvts21">Set a trial buttonpress of the </span><span class="rvts29">B</span><span class="rvts21"> at the beginning of the segment where you can shoot the enemy.</span></li>
<li class="rvps10"><span class="rvts21">Watch how the bullet hits the enemy and leave the Playback cursor at the frame where the item is supposedly laying on the ground for a second or two. That will be the end of current segment.</span></li>
<li class="rvps10"><span class="rvts21">So we assume that the first try didn't bring you the needed item, but you know that killing the enemy a bit later may change the outcome. </span><span class="rvts21">Move the </span><span class="rvts29">B</span><span class="rvts21"> buttonpress forward one frame (just insert a blank frame before the old position of the buttonpress).</span></li>
<li class="rvps10"><span class="rvts21">This action makes Taseditor rewind the game back, and on FCEUX screen you can see the moment before shooting.</span></li>
<li class="rvps10"><span class="rvts21">Press the middle mouse button or </span><span class="rvts26">Spacebar</span><span class="rvts21"> (the key assigned to the </span><span class="rvts26">Restore Playback</span><span class="rvts21"> hotkey). The game events will replay like a flash, and you'll almost immediately see which item now falls from the enemy.</span></li>
<li class="rvps10"><span class="rvts21">If the result is not satisfying, press </span><span class="rvts30">Ctrl + Shift + Insert</span><span class="rvts21"> again, thus inserting another blank frame before the existing </span><span class="rvts29">B</span><span class="rvts21"> buttonpress. The shot is delayed one more frame. Restore Playback again to see the new result.</span></li>
<li class="rvps10"><span class="rvts21">Press the middle mouse button or </span><span class="rvts26">Spacebar</span><span class="rvts21"> (the key assigned to the </span><span class="rvts26">Restore Playback</span><span class="rvts21"> hotkey). The game events will replay like a flash, and you'll almost immediately see which item the enemy drops now.</span></li>
<li class="rvps10"><span class="rvts21">If the result is not satisfying, press </span><span class="rvts30">Ctrl + Shift + Insert</span><span class="rvts21"> again, thus inserting another frame before the existing </span><span class="rvts29">B</span><span class="rvts21"> buttonpress. The shot is delayed by one more frame. Restore Playback again to see the new result.</span></li>
<li class="rvps10"><span class="rvts21">Continue until you find the frame where shooting the enemy brings you the needed item. This way you can test a hundred of options within a minute, by simply pressing the hotkeys and only watching the FCEUX screen.</span></li>
</ul>
<p class="rvps10"><span class="rvts21"><br/></span></p>
@ -135,13 +135,13 @@
<p class="rvps10"><span class="rvts21">Pros of the method:</span></p>
<p class="rvps14"><span class="rvts22">+ </span><span class="rvts21">Instant navigation.</span></p>
<p class="rvps14"><span class="rvts22">+ </span><span class="rvts21">Possibility to skip useless scenes.</span></p>
<p class="rvps14"><span class="rvts22">+ </span><span class="rvts21">Detachment from the game flow increases the objectivity.</span></p>
<p class="rvps14"><span class="rvts22">+ </span><span class="rvts21">Detachment from the game flow increases the objectivity of analysis.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Cons of the method:</span></p>
<p class="rvps14"><span class="rvts22"> </span><span class="rvts21">Lack of the feedback inherent to normal game-player interaction.</span></p>
<p class="rvps14"><span class="rvts22"> </span><span class="rvts21">Emphasis on the mouse controls.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">When the method is recommended to use:</span><span class="rvts21"> most of time. Combine this method with the next method in order to create the full picture of the in-game possibilities.</span></p>
<p class="rvps10"><span class="rvts25">When the method is recommended to use:</span><span class="rvts21"> most of time. Combine this method with the next method in order to construct the full picture of the in-game possibilities.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><a class="rvts27" href="SemiautomaticTASing.html">The next method</a><span class="rvts21"> fixes the main disadvantage of this method.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>

View File

@ -60,7 +60,7 @@
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps10"><span class="rvts21">All modifications of the movie are registered in History Log. Every record of the Log contains the time when the modification was done and the keyframe (or starting and ending frames of the section) to which the modification was applied.</span></p>
<p class="rvps10"><span class="rvts21">Here you can find the list of </span><span class="rvts24">all possible types of History records and corresponding operations with the movie.</span></p>
<p class="rvps10"><span class="rvts21">Here you can find the list of </span><span class="rvts24">all possible types of History Log records and corresponding operations with the movie.</span></p>
<p class="rvps21"><span class="rvts21"><br/></span></p>
<div class="rvps21"><table width="420" border="1" cellpadding="0" cellspacing="0" style="border-color: #000000 #ffffff #ffffff #000000; border-style: solid;">
<tr valign="middle">
@ -197,13 +197,12 @@
<span class="rvts21"><br/></span></p>
<p class="rvps11"><span class="rvts22">Initialization</span></p>
<p class="rvps10"><span class="rvts42">Category: other</span></p>
<p class="rvps10"><span class="rvts21">The record is created automatically when new History Log is created.</span></p>
<p class="rvps10"><span class="rvts21">Instances:</span></p>
<p class="rvps10"><span class="rvts21">The record is created automatically when a new History Log is created.</span></p>
<p class="rvps10"><span class="rvts21">Examples:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">when creating a new project</span></li>
<li class="rvps10"><span class="rvts21">when loading a compactly saved project that has no History Log</span></li>
</ul>
<p class="rvps22"><span class="rvts39">Example:</span></p>
<p class="rvps22"><span class="rvts39">20:24:53 Initialization</span></p>
<p class="rvps10"><span class="rvts21">Used: </span><span class="rvts37">very rarely</span></p>
<p class="rvps10"><span class="rvts64">Greenzone is truncated after zeroth frame.</span></p>
@ -220,15 +219,14 @@
<p class="rvps11"><span class="rvts22">Set</span></p>
<p class="rvps10"><span class="rvts42">Category: Input change</span></p>
<p class="rvps10"><span class="rvts21">The record is created when one or more buttonpresses appear in one or several frames.</span></p>
<p class="rvps10"><span class="rvts21">Instances:</span></p>
<p class="rvps10"><span class="rvts21">Examples:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps27" style="text-indent: 30px"><span class="rvts21">click on an empty Input cell of the Piano Roll</span></li>
<li class="rvps27" style="text-indent: 30px"><span class="rvts21">draw a new stroke by dragging mouse after the click on an empty Input cell</span></li>
<li class="rvps27" style="text-indent: 30px"><span class="rvts21">draw a new stroke by dragging the mouse after clicking on an empty Input cell</span></li>
<li class="rvps27" style="text-indent: 30px"><span class="rvts30">Shift</span><span class="rvts21"> + click on an empty Input cell</span></li>
<li class="rvps27" style="text-indent: 30px"><span class="rvts21">select some frames and then click on a button symbol in the Header of the Piano Roll</span></li>
<li class="rvps27" style="text-indent: 30px"><span class="rvts21">select some frames and then press a key assigned to a virtual gamepad button</span></li>
</ul>
<p class="rvps22"><span class="rvts39">Example:</span></p>
<p class="rvps22"><span class="rvts39">20:25:18 Set 15-21</span></p>
<p class="rvps10"><span class="rvts21">Used: </span><span class="rvts37">very often</span></p>
<p class="rvps10"><span class="rvts64">Greenzone is truncated after the first frame where Input was changed.</span></p>
@ -238,15 +236,14 @@
<p class="rvps11"><span class="rvts22">Unset</span></p>
<p class="rvps10"><span class="rvts42">Category: Input change</span></p>
<p class="rvps10"><span class="rvts21">The record is created when one or more buttonpresses disappear from one or several frames.</span></p>
<p class="rvps10"><span class="rvts21">Instances:</span></p>
<p class="rvps10"><span class="rvts21">Examples:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps27" style="text-indent: 30px"><span class="rvts21">click on an occupied Input cell of the Piano Roll</span></li>
<li class="rvps27" style="text-indent: 30px"><span class="rvts21">erase some Input by dragging mouse after the click on an occupied Input cell</span></li>
<li class="rvps27" style="text-indent: 30px"><span class="rvts21">erase some Input by dragging the mouse after clicking on an occupied Input cell</span></li>
<li class="rvps27" style="text-indent: 30px"><span class="rvts30">Shift</span><span class="rvts21"> + click on an occupied Input cell</span></li>
<li class="rvps27" style="text-indent: 30px"><span class="rvts21">select some frames and then click on a button symbol in the Header of the Piano Roll</span></li>
<li class="rvps27" style="text-indent: 30px"><span class="rvts21">select some frames and then press a key assigned to a virtual gamepad button</span></li>
</ul>
<p class="rvps22"><span class="rvts39">Example:</span></p>
<p class="rvps22"><span class="rvts39">20:25:22 Unset 21</span></p>
<p class="rvps10"><span class="rvts21">Used: </span><span class="rvts37">very often</span></p>
<p class="rvps10"><span class="rvts64">Greenzone is truncated after the first frame where Input was changed.</span></p>
@ -257,14 +254,13 @@
<p class="rvps10"><span class="rvts42">Category: Input change</span></p>
<p class="rvps10"><span class="rvts21">The record is created when a sequence of buttonpresses changes to currently chosen pattern.</span></p>
<p class="rvps10"><span class="rvts21">The name of the pattern is added to the text of the record.</span></p>
<p class="rvps10"><span class="rvts21">Instances:</span></p>
<p class="rvps10"><span class="rvts21">Examples:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps24" style="text-indent: 30px"><span class="rvts30">Alt</span><span class="rvts21"> + click on an Input cell of the Piano Roll</span></li>
<li class="rvps27" style="text-indent: 30px"><span class="rvts30">Alt</span><span class="rvts21"> + dragging mouse after the click on an Input cell</span></li>
<li class="rvps27" style="text-indent: 30px"><span class="rvts30">Alt</span><span class="rvts21"> + dragging the mouse after clicking on an Input cell</span></li>
<li class="rvps10"><span class="rvts21">select some frames and then </span><span class="rvts30">Alt</span><span class="rvts21"> + click on a button symbol in the Header of the Piano Roll</span></li>
<li class="rvps27" style="text-indent: 30px"><span class="rvts21">select some frames and then </span><span class="rvts30">Alt</span><span class="rvts21"> + press a key assigned to a virtual gamepad button</span></li>
</ul>
<p class="rvps22"><span class="rvts39">Example:</span></p>
<p class="rvps22"><span class="rvts39">20:25:40 Pattern 21-30 Alternating (1010...)</span></p>
<p class="rvps10"><span class="rvts21">Used: </span><span class="rvts37">rarely</span></p>
<p class="rvps10"><span class="rvts64">Greenzone is truncated after the first frame where Input was changed.</span></p>
@ -274,13 +270,12 @@
<p class="rvps11"><span class="rvts22">Clear</span></p>
<p class="rvps10"><span class="rvts42">Category: Input change</span></p>
<p class="rvps10"><span class="rvts21">The record is created when all buttonpresses disappear from one or several frames.</span></p>
<p class="rvps10"><span class="rvts21">Instances:</span></p>
<p class="rvps10"><span class="rvts21">Examples:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">select some frames and then press </span><span class="rvts30">Delete</span></li>
<li class="rvps10"><span class="rvts21">select some frames and then choose </span><span class="rvts25">Edit -&gt; Clear</span><span class="rvts21"> in TAS Editor menu</span></li>
<li class="rvps10"><span class="rvts21">right-click on a selected frame number and choose </span><span class="rvts25">Clear</span></li>
<li class="rvps10"><span class="rvts21">right-click on a selected frame number and choose </span><span class="rvts25">Clear </span><span class="rvts21">in the context menu</span></li>
</ul>
<p class="rvps22"><span class="rvts39">Example:</span></p>
<p class="rvps22"><span class="rvts39">20:26:51 Clear 15-20</span></p>
<p class="rvps10"><span class="rvts21">Used: </span><span class="rvts37">moderately</span></p>
<p class="rvps10"><span class="rvts64">Greenzone is truncated after the first frame where Input was changed.</span></p>
@ -290,14 +285,13 @@
<p class="rvps11"><span class="rvts22">Cut</span></p>
<p class="rvps10"><span class="rvts42">Category: Input change</span></p>
<p class="rvps10"><span class="rvts21">The record is created when all buttonpresses disappear from one or several frames, caused by "Cut" operation.</span></p>
<p class="rvps10"><span class="rvts21">This is identical to </span><a class="rvts27" href="Operations.html#Clear">Clear</a><span class="rvts21"> operation, except that buttonpresses are copied to the Clipboard before clearing.</span></p>
<p class="rvps10"><span class="rvts21">This is identical to the </span><a class="rvts27" href="Operations.html#Clear">Clear</a><span class="rvts21"> operation, except that buttonpresses are copied to the Clipboard before deleting them.</span></p>
<p class="rvps10"><span class="rvts34">Note:</span><span class="rvts21"> although you can undo this operation, the Clipboard contents won't revert.</span></p>
<p class="rvps10"><span class="rvts21">Instances:</span></p>
<p class="rvps10"><span class="rvts21">Examples:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">select some frames and then press </span><span class="rvts30">Ctrl + X</span></li>
<li class="rvps10"><span class="rvts21">select some frames and then choose </span><span class="rvts25">Edit -&gt; Cut</span><span class="rvts21"> in TAS Editor menu</span></li>
</ul>
<p class="rvps22"><span class="rvts39">Example:</span></p>
<p class="rvps22"><span class="rvts39">20:27:05 Cut 21-23</span></p>
<p class="rvps10"><span class="rvts21">Used: </span><span class="rvts37">rarely</span></p>
<p class="rvps10"><span class="rvts64">Greenzone is truncated after the first frame where Input was changed.</span></p>
@ -307,13 +301,12 @@
<p class="rvps11"><span class="rvts22">Paste</span></p>
<p class="rvps10"><span class="rvts42">Category: Input change</span></p>
<p class="rvps10"><span class="rvts21">The record is created when a Clipboard data is pasted into the movie.</span></p>
<p class="rvps10"><span class="rvts21">Depending on the "Superimpose" checkbox the old Input on those frames is either erased or combined with the new Input. The Piano Roll Header briefly flashes symbols of those buttons that were added in the Paste process.</span></p>
<p class="rvps10"><span class="rvts21">Instances:</span></p>
<p class="rvps10"><span class="rvts21">Depending on the "Superimpose" checkbox, the old Input on those frames is either erased or combined with the new Input. The Piano Roll Header briefly flashes symbols of those buttons that were added in the Paste process.</span></p>
<p class="rvps10"><span class="rvts21">Examples:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">select some frames and then press </span><span class="rvts30">Ctrl + V</span></li>
<li class="rvps10"><span class="rvts21">select some frames and then choose </span><span class="rvts25">Edit -&gt; Paste</span><span class="rvts21"> in TAS Editor menu</span></li>
</ul>
<p class="rvps22"><span class="rvts39">Example:</span></p>
<p class="rvps22"><span class="rvts39">20:27:11 Paste 21</span></p>
<p class="rvps10"><span class="rvts21">Used: </span><span class="rvts37">moderately/rarely</span></p>
<p class="rvps10"><span class="rvts64">Greenzone is truncated after the first frame where Input was changed.</span></p>
@ -324,12 +317,11 @@
<p class="rvps10"><span class="rvts42">Category: Input change, Markers change</span></p>
<p class="rvps10"><span class="rvts21">The record is created when a Clipboard data is inserted into the movie.</span></p>
<p class="rvps10"><span class="rvts21">Old Input and Markers are shifted down to make place for the Input from Clipboard.</span></p>
<p class="rvps10"><span class="rvts21">Instances:</span></p>
<p class="rvps10"><span class="rvts21">Examples:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">select some frames and then press </span><span class="rvts30">Ctrl + Shift + V</span></li>
<li class="rvps10"><span class="rvts21">select some frames and then choose </span><span class="rvts25">Edit -&gt; PasteInsert</span><span class="rvts21"> in TAS Editor menu</span></li>
</ul>
<p class="rvps22"><span class="rvts39">Example:</span></p>
<p class="rvps22"><span class="rvts39">20:27:16 PasteInsert 21</span></p>
<p class="rvps10"><span class="rvts21">Used: </span><span class="rvts37">rarely</span></p>
<p class="rvps10"><span class="rvts64">Greenzone is truncated after the first frame where Input or Lag was changed.</span></p>
@ -339,13 +331,12 @@
<p class="rvps11"><span class="rvts22">Clone</span></p>
<p class="rvps10"><span class="rvts42">Category: Input change, Markers change</span></p>
<p class="rvps10"><span class="rvts21">The record is created when copies of one or several frames are inserted into the movie, shifting the following Input and Markers down.</span></p>
<p class="rvps10"><span class="rvts21">Instances:</span></p>
<p class="rvps10"><span class="rvts21">Examples:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">select some frames and then press </span><span class="rvts30">Ctrl + Insert</span></li>
<li class="rvps10"><span class="rvts21">select some frames and then choose </span><span class="rvts25">Edit -&gt; Clone</span><span class="rvts21"> in TAS Editor menu</span></li>
<li class="rvps10"><span class="rvts21">right-click on a selected frame number and choose </span><span class="rvts25">Clone</span></li>
<li class="rvps10"><span class="rvts21">right-click on a selected frame number and choose </span><span class="rvts25">Clone </span><span class="rvts21">in the context menu</span></li>
</ul>
<p class="rvps22"><span class="rvts39">Example:</span></p>
<p class="rvps22"><span class="rvts39">20:27:34 Clone 23</span></p>
<p class="rvps10"><span class="rvts21">Used: </span><span class="rvts37">often</span></p>
<p class="rvps10"><span class="rvts64">Greenzone is truncated after the first frame where Input or Lag was changed.</span></p>
@ -355,13 +346,12 @@
<p class="rvps11"><span class="rvts22">Insert</span></p>
<p class="rvps10"><span class="rvts42">Category: Input change, Markers change</span></p>
<p class="rvps10"><span class="rvts21">The record is created when one or several blank frames are inserted into the movie, shifting the following Input and Markers down.</span></p>
<p class="rvps10"><span class="rvts21">Instances:</span></p>
<p class="rvps10"><span class="rvts21">Examples:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">select some frames and then press </span><span class="rvts30">Ctrl + Shift + Insert</span></li>
<li class="rvps10"><span class="rvts21">select some frames and then choose </span><span class="rvts25">Edit -&gt; Insert</span><span class="rvts21"> in TAS Editor menu</span></li>
<li class="rvps10"><span class="rvts21">right-click on a selected frame number and choose </span><span class="rvts25">Insert</span></li>
<li class="rvps10"><span class="rvts21">right-click on a selected frame number and choose </span><span class="rvts25">Insert </span><span class="rvts21">in the context menu</span></li>
</ul>
<p class="rvps22"><span class="rvts39">Example:</span></p>
<p class="rvps22"><span class="rvts39">20:25:58 Insert 21</span></p>
<p class="rvps10"><span class="rvts21">Used: </span><span class="rvts37">moderately</span></p>
<p class="rvps10"><span class="rvts64">Greenzone is truncated after the first frame where Input or Lag was changed.</span></p>
@ -370,16 +360,15 @@
<span class="rvts21"><br/></span></p>
<p class="rvps11"><span class="rvts22">Insert#</span></p>
<p class="rvps10"><span class="rvts42">Category: Input change, Markers change</span></p>
<p class="rvps10"><span class="rvts21">The record is created when specific number of blank frames is inserted into the movie, shifting the following Input and Markers down.</span></p>
<p class="rvps10"><span class="rvts21">If there's Selection in the Piano Roll, this operation inserts frames before the Selection, otherwise it inserts frames before Playback cursor.</span></p>
<p class="rvps10"><span class="rvts21">The record is created when a specific number of blank frames is inserted into the movie, shifting the following Input and Markers down.</span></p>
<p class="rvps10"><span class="rvts21">If there's Selection in the Piano Roll, this operation inserts frames before the Selection, otherwise it inserts frames before the Playback cursor.</span></p>
<p class="rvps10"><span class="rvts21">The number of inserted frames is added to the text of the record.</span></p>
<p class="rvps10"><span class="rvts21">Instances:</span></p>
<p class="rvps10"><span class="rvts21">Examples:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">press </span><span class="rvts30">Insert</span><span class="rvts21"> and enter the number of frames to insert</span></li>
<li class="rvps10"><span class="rvts21">choose </span><span class="rvts25">Edit -&gt; Insert # of Frames</span><span class="rvts21"> in TAS Editor menu</span></li>
<li class="rvps10"><span class="rvts21">right-click on a selected frame number and choose </span><span class="rvts25">Insert # of Frames</span></li>
<li class="rvps10"><span class="rvts21">right-click on a selected frame number and choose </span><span class="rvts25">Insert # of Frames </span><span class="rvts21">in the context menu</span></li>
</ul>
<p class="rvps22"><span class="rvts39">Example:</span></p>
<p class="rvps22"><span class="rvts39">20:26:09 Insert#4 29</span></p>
<p class="rvps10"><span class="rvts21">Used: </span><span class="rvts37">rarely</span></p>
<p class="rvps10"><span class="rvts64">Greenzone is truncated after the first frame where Input or Lag was changed.</span></p>
@ -389,13 +378,12 @@
<p class="rvps11"><span class="rvts22">Delete</span></p>
<p class="rvps10"><span class="rvts42">Category: Input change, Markers change</span></p>
<p class="rvps10"><span class="rvts21">The record is created when one or several frames are deleted from the movie, shifting the following Input and Markers up.</span></p>
<p class="rvps10"><span class="rvts21">Instances:</span></p>
<p class="rvps10"><span class="rvts21">Examples:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">select some frames and then press </span><span class="rvts30">Ctrl + Delete</span></li>
<li class="rvps10"><span class="rvts21">select some frames and then choose </span><span class="rvts25">Edit -&gt; Delete</span><span class="rvts21"> in TAS Editor menu</span></li>
<li class="rvps10"><span class="rvts21">right-click on a selected frame number and choose </span><span class="rvts25">Delete</span></li>
<li class="rvps10"><span class="rvts21">right-click on a selected frame number and choose </span><span class="rvts25">Delete </span><span class="rvts21">in the context menu</span></li>
</ul>
<p class="rvps22"><span class="rvts39">Example:</span></p>
<p class="rvps22"><span class="rvts39">20:26:12 Delete 33</span></p>
<p class="rvps10"><span class="rvts21">Used: </span><span class="rvts37">often</span></p>
<p class="rvps10"><span class="rvts64">Greenzone is truncated after the first frame where Input or Lag was changed.</span></p>
@ -404,13 +392,12 @@
<span class="rvts21"><br/></span></p>
<p class="rvps11"><span class="rvts22">Truncate</span></p>
<p class="rvps10"><span class="rvts42">Category: Input change, Markers change</span></p>
<p class="rvps10"><span class="rvts21">The record is created when the tail of the movie is truncated, deleting all Input (and Markers) starting from either the Selection cursor or Playback cursor (if there's no Selection in Piano Roll).</span></p>
<p class="rvps10"><span class="rvts21">Instances:</span></p>
<p class="rvps10"><span class="rvts21">The record is created when the tail of the movie is truncated, deleting all Input (and Markers) starting from either the Selection cursor or the Playback cursor (when there's no Selection).</span></p>
<p class="rvps10"><span class="rvts21">Examples:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">choose </span><span class="rvts25">Edit -&gt; Truncate movie</span><span class="rvts21"> in TAS Editor menu</span></li>
<li class="rvps10"><span class="rvts21">right-click on a selected frame number and choose </span><span class="rvts25">Truncate movie</span></li>
<li class="rvps10"><span class="rvts21">right-click on a selected frame number and choose </span><span class="rvts25">Truncate movie </span><span class="rvts21">in the context menu</span></li>
</ul>
<p class="rvps22"><span class="rvts39">Example:</span></p>
<p class="rvps22"><span class="rvts39">20:26:28 Truncate 42</span></p>
<p class="rvps10"><span class="rvts21">Used: </span><span class="rvts37">very rarely</span></p>
<p class="rvps10"><span class="rvts64">Greenzone is truncated after the frame of movie truncation.</span></p>
@ -419,16 +406,14 @@
<span class="rvts21"><br/></span></p>
<p class="rvps11"><span class="rvts22">Record</span></p>
<p class="rvps10"><span class="rvts42">Category: Input change</span></p>
<p class="rvps10"><span class="rvts21">The record is created when emulator is recording Input using virtual gamepads.</span></p>
<p class="rvps10"><span class="rvts21">The new Input appears in the Playback cursor frame. Depending on the "Superimpose" checkbox the old Input the frame is either erased or combined with the new Input. The Piano Roll Header briefly flashes symbols of those buttons that were added in the Recording process.</span></p>
<p class="rvps10"><span class="rvts21">The record is created when the emulator is recording Input using gamepads.</span></p>
<p class="rvps10"><span class="rvts21">The new Input appears at the Playback cursor frame. Depending on the "Superimpose" checkbox, the old Input of the frame is either overwritten or combined with the new Input. The Piano Roll Header briefly flashes symbols of those buttons that were added in the Recording process.</span></p>
<p class="rvps10"><span class="rvts21">IDs of gamepads whose Input was changed are added to the text of the record.</span></p>
<p class="rvps10"><span class="rvts21">Instances:</span></p>
<p class="rvps10"><span class="rvts21">Examples:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">switch Recording mode on, unpause the emulator and press any keys assigned to buttons of virtual pads</span></li>
<li class="rvps10"><span class="rvts21">switch Recording mode on, unpause the emulator and do not press any keys assigned to buttons of virtual pads</span></li>
<li class="rvps10"><span class="rvts21">switch Recording mode on, unpause the emulator and press any keys assigned to buttons of gamepads</span></li>
<li class="rvps10"><span class="rvts21">when emulator is paused, switch Recording mode on, hold any keys assigned to buttons of virtual pads and press </span><span class="rvts26">Frame Advance</span></li>
</ul>
<p class="rvps22"><span class="rvts39">Example:</span></p>
<p class="rvps22"><span class="rvts39">20:28:01 Record(1P) 18-24</span></p>
<p class="rvps10"><span class="rvts21">Used: </span><span class="rvts37">moderately</span></p>
<p class="rvps10"><span class="rvts64">Greenzone is truncated after the Playback cursor position.</span></p>
@ -437,14 +422,13 @@
<span class="rvts21"><br/></span></p>
<p class="rvps11"><span class="rvts22">Import</span></p>
<p class="rvps10"><span class="rvts42">Category: Input change</span></p>
<p class="rvps10"><span class="rvts21">The record is created when an Input of another FM2/FM3 movie is imported to current project.</span></p>
<p class="rvps10"><span class="rvts21">The record is created when an Input from another FM2/FM3 movie is imported into the current project.</span></p>
<p class="rvps10"><span class="rvts21">Current movie Input is substituted by the Input of imported file. Markers are not changed.</span></p>
<p class="rvps10"><span class="rvts21">The filename of the Input source is added to the text of the record. </span></p>
<p class="rvps10"><span class="rvts21">Instances:</span></p>
<p class="rvps10"><span class="rvts21">Examples:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">choose </span><span class="rvts25">File -&gt; Import Input</span><span class="rvts21"> in TAS Editor menu and open the file which should be the source of Input</span></li>
</ul>
<p class="rvps22"><span class="rvts39">Example:</span></p>
<p class="rvps22"><span class="rvts39">20:28:53 Import Battletoads-WIP1.fm2</span></p>
<p class="rvps10"><span class="rvts21">Used: </span><span class="rvts37">very rarely</span></p>
<p class="rvps10"><span class="rvts64">Greenzone is truncated after the first frame where Input was changed.</span></p>
@ -463,15 +447,14 @@
<p class="rvps11"><span class="rvts22">Bookmark9</span></p>
<p class="rvps10"><span class="rvts42">Category: other</span></p>
<p class="rvps10"><span class="rvts21">The record is created when the data of a Bookmark slot is changed.</span></p>
<p class="rvps10"><span class="rvts21">Re-saving a Bookmark into the same slot only works when the new Bookmark data differs from the data stored in the slot, e.g. when the Bookmark is set to another frame or when current movie Input is different from the Input stored in the slot.</span></p>
<p class="rvps10"><span class="rvts21">When a Bookmark is successfully saved, its Branch becomes "current branch of the movie", and emulator shows the "Branch # saved." message.</span></p>
<p class="rvps10"><span class="rvts21">Instances:</span></p>
<p class="rvps10"><span class="rvts34">Note:</span><span class="rvts21"> re-saving a Bookmark into the same slot only works when the new Bookmark data differs from the data stored in the slot, e.g. when the Bookmark is placed to another frame or when the current movie Input differs from the Input stored in the slot.</span></p>
<p class="rvps10"><span class="rvts21">When a Bookmark is successfully saved, its Branch becomes "the current branch of the movie", and the emulator shows the message "Branch # saved."</span></p>
<p class="rvps10"><span class="rvts21">Examples:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">press a "Save state" hotkey: </span><span class="rvts25">Shift + </span><span class="rvts21">key in the row from </span><span class="rvts26">F1</span><span class="rvts21"> to </span><span class="rvts26">F10</span></li>
<li class="rvps10"><span class="rvts21">right-click on the Bookmarks List</span></li>
<li class="rvps10"><span class="rvts21">right-click anywhere inside the Bookmarks List</span></li>
<li class="rvps10"><span class="rvts21">right-click on a Bookmark icon in the Branches Tree</span></li>
</ul>
<p class="rvps22"><span class="rvts39">Example:</span></p>
<p class="rvps22"><span class="rvts39">20:28:53 Bookmark1 10</span></p>
<p class="rvps10"><span class="rvts21">Used: </span><span class="rvts37">often</span></p>
<p class="rvps10"><span class="rvts64">Greenzone is not truncated.</span></p>
@ -489,16 +472,15 @@
<p class="rvps11"><span class="rvts22">Branch8 to</span></p>
<p class="rvps11"><span class="rvts22">Branch9 to</span></p>
<p class="rvps10"><span class="rvts42">Category: Input change, Markers change</span></p>
<p class="rvps10"><span class="rvts21">The record is created when current movie is substituted with the data of a Bookmark slot. Both Input and Markers are substituted.</span></p>
<p class="rvps10"><span class="rvts21">The time of the Bookmark creation is added to the text of the record, because the movie is in fact being reverted to its state at that time.</span></p>
<p class="rvps10"><span class="rvts21">When a Bookmark is successfully loaded, its Branch becomes "current branch of the movie", and emulator shows the "Branch # loaded." message.</span></p>
<p class="rvps10"><span class="rvts21">Instances:</span></p>
<p class="rvps10"><span class="rvts21">The record is created when the current movie is substituted with the data of a Bookmark slot. Both Input and Markers are substituted.</span></p>
<p class="rvps10"><span class="rvts21">The time of the Bookmark creation is added to the text of the record, because the movie is actually reverted to its own state at that time.</span></p>
<p class="rvps10"><span class="rvts21">When a Bookmark is successfully loaded, its Branch becomes "the current branch of the movie", and the emulator shows the message "Branch # loaded."</span></p>
<p class="rvps10"><span class="rvts21">Examples:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">press a "Load state" hotkey: </span><span class="rvts25">Shift + </span><span class="rvts21">key in the row from </span><span class="rvts26">F1</span><span class="rvts21"> to </span><span class="rvts26">F10</span></li>
<li class="rvps10"><span class="rvts21">click on the right half of the Bookmarks List</span></li>
<li class="rvps10"><span class="rvts21">double-click on the a Bookmark icon in the Branches Tree</span></li>
<li class="rvps10"><span class="rvts21">double-click on a Bookmark icon in the Branches Tree</span></li>
</ul>
<p class="rvps22"><span class="rvts39">Example:</span></p>
<p class="rvps22"><span class="rvts39">20:29:02 Branch1 to 20:28:15</span></p>
<p class="rvps10"><span class="rvts21">Used: </span><span class="rvts37">moderately</span></p>
<p class="rvps10"><span class="rvts64">Greenzone is truncated after the first frame where Input or Lag was changed.</span></p>
@ -516,14 +498,13 @@
<p class="rvps11"><span class="rvts22">Marker Branch8 to</span></p>
<p class="rvps11"><span class="rvts22">Marker Branch9 to</span></p>
<p class="rvps10"><span class="rvts42">Category: Markers change</span></p>
<p class="rvps10"><span class="rvts21">The record is created when current movie is substituted with the data of a Bookmark slot, but new Input was identical to old Input, and only Markers were different.</span></p>
<p class="rvps10"><span class="rvts21">Instances:</span></p>
<p class="rvps10"><span class="rvts21">The record is created when current movie is substituted with the data of a Bookmark slot, but the new Input was identical to the old Input, and only Markers were different.</span></p>
<p class="rvps10"><span class="rvts21">Examples:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">press a "Load state" hotkey: </span><span class="rvts25">Shift + </span><span class="rvts21">key in the row from </span><span class="rvts26">F1</span><span class="rvts21"> to </span><span class="rvts26">F10</span></li>
<li class="rvps10"><span class="rvts21">click on the right half of the Bookmarks List</span></li>
<li class="rvps10"><span class="rvts21">double-click on the a Bookmark icon in the Branches Tree</span></li>
</ul>
<p class="rvps22"><span class="rvts39">Example:</span></p>
<p class="rvps22"><span class="rvts39">20:29:33 Marker Branch1 to 20:28:15</span></p>
<p class="rvps10"><span class="rvts21">Used: </span><span class="rvts37">very rarely</span></p>
<p class="rvps10"><span class="rvts64">Greenzone is not truncated.</span></p>
@ -533,13 +514,12 @@
<p class="rvps11"><span class="rvts22">Marker Set</span></p>
<p class="rvps10"><span class="rvts42">Category: Markers change</span></p>
<p class="rvps10"><span class="rvts21">The record is created when a Marker appears on one or several frames.</span></p>
<p class="rvps10"><span class="rvts21">Instances:</span></p>
<p class="rvps10"><span class="rvts21">Examples:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">double-click on a non-marked frame number in the Piano Roll</span></li>
<li class="rvps10"><span class="rvts21">select some frames and then click on the "Frame#" in the Piano Roll Header (granted that some selected frames don't have Markers)</span></li>
<li class="rvps10"><span class="rvts21">right-click on a selected frame number and choose </span><span class="rvts25">Set Markers</span></li>
<li class="rvps10"><span class="rvts21">select some frames and then click on the "Frame#" in the Header of the Piano Roll</span></li>
<li class="rvps10"><span class="rvts21">right-click on a selected frame number and choose </span><span class="rvts25">Set Markers </span><span class="rvts21">in the context menu</span></li>
</ul>
<p class="rvps22"><span class="rvts39">Example:</span></p>
<p class="rvps22"><span class="rvts39">20:29:47 Marker Set 15-18</span></p>
<p class="rvps10"><span class="rvts21">Used: </span><span class="rvts37">often</span></p>
<p class="rvps10"><span class="rvts64">Greenzone is not truncated.</span></p>
@ -549,13 +529,12 @@
<p class="rvps11"><span class="rvts22">Marker Remove</span></p>
<p class="rvps10"><span class="rvts42">Category: Markers change</span></p>
<p class="rvps10"><span class="rvts21">The record is created when Markers disappear from one or several frames.</span></p>
<p class="rvps10"><span class="rvts21">Instances:</span></p>
<p class="rvps10"><span class="rvts21">Examples:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">double-click on a marked frame number in the Piano Roll, drag the Marker outside the Piano Roll and release it</span></li>
<li class="rvps10"><span class="rvts21">select some frames and then click on the "Frame#" in the Piano Roll Header (granted that all selected frames have Markers)</span></li>
<li class="rvps10"><span class="rvts21">right-click on a selected frame number and choose </span><span class="rvts25">Remove Markers</span></li>
<li class="rvps10"><span class="rvts21">select some frames and then click on the "Frame#" in the Header of the Piano Roll</span></li>
<li class="rvps10"><span class="rvts21">right-click on a selected frame number and choose </span><span class="rvts25">Remove Markers </span><span class="rvts21">in the context menu</span></li>
</ul>
<p class="rvps22"><span class="rvts39">Example:</span></p>
<p class="rvps22"><span class="rvts39">20:29:52 Marker Remove 16-18</span></p>
<p class="rvps10"><span class="rvts21">Used: </span><span class="rvts37">moderately</span></p>
<p class="rvps10"><span class="rvts64">Greenzone is not truncated.</span></p>
@ -566,11 +545,10 @@
<p class="rvps10"><span class="rvts42">Category: Markers change</span></p>
<p class="rvps10"><span class="rvts21">The record is created when a sequence of Markers is created using currently chosen pattern.</span></p>
<p class="rvps10"><span class="rvts21">The name of the pattern is added to the text of the record.</span></p>
<p class="rvps10"><span class="rvts21">Instances:</span></p>
<p class="rvps10"><span class="rvts21">Examples:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">select some frames and then </span><span class="rvts30">Alt</span><span class="rvts21"> + click on the "Frame#" in the Piano Roll Header</span></li>
<li class="rvps10"><span class="rvts21">select some frames and then </span><span class="rvts30">Alt</span><span class="rvts21"> + click on the "Frame#" in the Header of the Piano Roll</span></li>
</ul>
<p class="rvps22"><span class="rvts39">Example:</span></p>
<p class="rvps22"><span class="rvts39">20:30:11 Marker Pattern 20-30 One Quarter (10001000...)</span></p>
<p class="rvps10"><span class="rvts21">Used: </span><span class="rvts37">very rarely</span></p>
<p class="rvps10"><span class="rvts64">Greenzone is not truncated.</span></p>
@ -581,13 +559,12 @@
<p class="rvps10"><span class="rvts42">Category: Markers change</span></p>
<p class="rvps10"><span class="rvts21">The record is created when Note of a Marker is changed.</span></p>
<p class="rvps10"><span class="rvts21">The new text of the Note is added to the text of the record.</span></p>
<p class="rvps10"><span class="rvts21">Instances:</span></p>
<p class="rvps10"><span class="rvts21">Examples:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">type the text of the Note right after creating the new Marker by double-click</span></li>
<li class="rvps10"><span class="rvts21">click on the upper edit field, erase old text and type new, then press </span><span class="rvts25">Enter</span><span class="rvts21"> or click anywhere outside the edit field</span></li>
<li class="rvps10"><span class="rvts21">click on the lower edit field, erase old text and type new, then press </span><span class="rvts25">Enter</span><span class="rvts21"> or click anywhere outside the edit field</span></li>
</ul>
<p class="rvps22"><span class="rvts39">Example:</span></p>
<p class="rvps22"><span class="rvts39">20:31:01 Marker Rename 20 Testing...</span></p>
<p class="rvps10"><span class="rvts21">Used: </span><span class="rvts37">often</span></p>
<p class="rvps10"><span class="rvts64">Greenzone is not truncated.</span></p>
@ -596,13 +573,12 @@
<span class="rvts64"><br/></span></p>
<p class="rvps11"><span class="rvts22">Marker Drag</span></p>
<p class="rvps10"><span class="rvts42">Category: Markers change</span></p>
<p class="rvps10"><span class="rvts21">The record is created when moving a Marker from one frame to another.</span></p>
<p class="rvps10"><span class="rvts21">The old and new frame number, as well as the Note of the Marker is added to the text of the record.</span></p>
<p class="rvps10"><span class="rvts21">Instances:</span></p>
<p class="rvps10"><span class="rvts21">The record is created after moving a Marker from one frame to another.</span></p>
<p class="rvps10"><span class="rvts21">The old and new frame number, as well as the Note of the Marker, are added to the text of the record.</span></p>
<p class="rvps10"><span class="rvts21">Examples:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">double-click on a marked frame number in the Piano Roll, drag the Marker to a non-marked frame number and release</span></li>
</ul>
<p class="rvps22"><span class="rvts39">Example:</span></p>
<p class="rvps22"><span class="rvts39">20:31:08 Marker Drag 20=&gt;15 Testing...</span></p>
<p class="rvps10"><span class="rvts21">Used: </span><span class="rvts37">moderately</span></p>
<p class="rvps10"><span class="rvts64">Greenzone is not truncated.</span></p>
@ -612,12 +588,11 @@
<p class="rvps11"><span class="rvts22">Marker Swap</span></p>
<p class="rvps10"><span class="rvts42">Category: Markers change</span></p>
<p class="rvps10"><span class="rvts21">The record is created when two Markers switch places.</span></p>
<p class="rvps10"><span class="rvts21">The old and new frame number of the dragged Marker, as well as its Note is added to the text of the record.</span></p>
<p class="rvps10"><span class="rvts21">Instances:</span></p>
<p class="rvps10"><span class="rvts21">The old and new frame number of the dragged Marker, as well as its Note, are added to the text of the record.</span></p>
<p class="rvps10"><span class="rvts21">Examples:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">double-click on a marked frame number in the Piano Roll, drag the Marker to another marked frame number and release</span></li>
</ul>
<p class="rvps22"><span class="rvts39">Example:</span></p>
<p class="rvps22"><span class="rvts39">20:31:14 Marker Swap 24&lt;=&gt;28</span></p>
<p class="rvps10"><span class="rvts21">Used: </span><span class="rvts37">rarely</span></p>
<p class="rvps10"><span class="rvts64">Greenzone is not truncated.</span></p>
@ -626,14 +601,13 @@
<span class="rvts21"><br/></span></p>
<p class="rvps11"><span class="rvts22">Marker Shift</span></p>
<p class="rvps10"><span class="rvts42">Category: Markers change</span></p>
<p class="rvps10"><span class="rvts21">The record is created when an operation didn't change Input but still shifted some Markers up or down.</span></p>
<p class="rvps10"><span class="rvts21">Instances:</span></p>
<p class="rvps10"><span class="rvts21">The record is created when a splicing operation didn't change Input but still shifted some Markers up or down.</span></p>
<p class="rvps10"><span class="rvts21">Examples:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">insert blank frame near the end of the movie (granted that there's no buttonpresses after the frame, yet there is at least one Marker)</span></li>
<li class="rvps10"><span class="rvts21">clone a blank frame near the end of the movie (granted that there's no buttonpresses after the frame, yet there is at least one Marker)</span></li>
<li class="rvps10"><span class="rvts21">copy a blank frame to the Clipboard and </span><span class="rvts25">PasteInsert</span><span class="rvts21"> it somewhere near the end of the movie (granted that there's no buttonpresses, yet there is at least one Marker)</span></li>
<li class="rvps10"><span class="rvts21">copy a blank frame to the Clipboard and </span><a class="rvts27" href="Operations.html#PasteInsert">PasteInsert</a><span class="rvts21"> it somewhere near the end of the movie (granted that there's no buttonpresses, yet there is at least one Marker)</span></li>
</ul>
<p class="rvps22"><span class="rvts39">Example:</span></p>
<p class="rvps22"><span class="rvts39">20:31:44 Marker Shift 21</span></p>
<p class="rvps10"><span class="rvts21">Used: </span><span class="rvts37">very rarely</span></p>
<p class="rvps10"><span class="rvts64">Greenzone is not truncated.</span></p>
@ -643,11 +617,10 @@
<p class="rvps11"><span class="rvts22">LUA Marker Set</span></p>
<p class="rvps10"><span class="rvts42">Category: Markers change</span></p>
<p class="rvps10"><span class="rvts21">The record is created when a Marker appears on a frame as a result of using </span><span class="rvts20">taseditor.setmarker()</span><span class="rvts21"> function.</span></p>
<p class="rvps10"><span class="rvts21">Instances:</span></p>
<p class="rvps10"><span class="rvts21">Examples:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">run a Lua script with a </span><span class="rvts20">taseditor.setmarker(framenum)</span><span class="rvts21"> line</span></li>
</ul>
<p class="rvps22"><span class="rvts39">Example:</span></p>
<p class="rvps22"><span class="rvts39">20:35:14 LUA Marker Set 0</span></p>
<p class="rvps10"><span class="rvts21">Used: </span><span class="rvts37">rarely</span></p>
<p class="rvps10"><span class="rvts64">Greenzone is not truncated.</span></p>
@ -657,11 +630,10 @@
<p class="rvps11"><span class="rvts22">LUA Marker Remove</span></p>
<p class="rvps10"><span class="rvts42">Category: Markers change</span></p>
<p class="rvps10"><span class="rvts21">The record is created when a Marker disappears from one frame as a result of using </span><span class="rvts20">taseditor.removemarker()</span><span class="rvts21"> function.</span></p>
<p class="rvps10"><span class="rvts21">Instances:</span></p>
<p class="rvps10"><span class="rvts21">Examples:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">run a Lua script with a </span><span class="rvts20">taseditor.removemarker(framenum)</span><span class="rvts21"> line</span></li>
</ul>
<p class="rvps22"><span class="rvts39">Example:</span></p>
<p class="rvps22"><span class="rvts39">20:36:12 LUA Marker Remove 0</span></p>
<p class="rvps10"><span class="rvts21">Used: </span><span class="rvts37">rarely</span></p>
<p class="rvps10"><span class="rvts64">Greenzone is not truncated.</span></p>
@ -672,11 +644,11 @@
<p class="rvps10"><span class="rvts42">Category: Markers change</span></p>
<p class="rvps10"><span class="rvts21">The record is created when Note of a Marker is changed as a result of using </span><span class="rvts20">taseditor.setnote()</span><span class="rvts21"> function.</span></p>
<p class="rvps10"><span class="rvts21">The new text of the Note is added to the text of the record.</span></p>
<p class="rvps10"><span class="rvts21">Instances:</span></p>
<p class="rvps10"><span class="rvts21">Examples:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">run a Lua script with a </span><span class="rvts20">taseditor.setnote(markernum, newtext)</span><span class="rvts21"> line</span></li>
</ul>
<p class="rvps22"><span class="rvts39">Example:</span></p>
<p class="rvps22"><span class="rvts39"><br/></span></p>
<p class="rvps22"><span class="rvts39">20:37:03 LUA Marker Rename 0 Hello from Lua!</span></p>
<p class="rvps10"><span class="rvts21">Used: </span><span class="rvts37">rarely</span></p>
<p class="rvps10"><span class="rvts64">Greenzone is not truncated.</span></p>
@ -687,12 +659,11 @@
<p class="rvps10"><span class="rvts42">Category: Input change, Markers change</span></p>
<p class="rvps10"><span class="rvts21">The record is created when Input or Markers were changed as a result of using </span><span class="rvts20">taseditor.applyinputchanges()</span><span class="rvts21"> function.</span></p>
<p class="rvps10"><span class="rvts21">Instead of the word "Change" the operation can be named with any other text provided by the parameter of </span><span class="rvts20">taseditor.applyinputchanges()</span><span class="rvts21"> function.</span></p>
<p class="rvps10"><span class="rvts21">Instances:</span></p>
<p class="rvps10"><span class="rvts21">Examples:</span></p>
<ul style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">run a Lua script containing such lines as </span><span class="rvts20">taseditor.submitinputchange(frame, joypad, input)</span><span class="rvts21"> and </span><span class="rvts20">taseditor.applyinputchanges(name)</span></li>
<li class="rvps10"><span class="rvts21">run a Lua script containing such lines as </span><span class="rvts20">taseditor.submitinsertframes(frame, number)</span><span class="rvts21"> or </span><span class="rvts20">taseditor.submitdeleteframes(frame, number)</span><span class="rvts21"> and </span><span class="rvts20">taseditor.applyinputchanges(name)</span></li>
</ul>
<p class="rvps22"><span class="rvts39">Example:</span></p>
<p class="rvps22"><span class="rvts39">20:39:56 LUA Corruptor 10</span></p>
<p class="rvps10"><span class="rvts21">Used: </span><span class="rvts37">rarely</span></p>
<p class="rvps10"><span class="rvts64">Greenzone is truncated after the first frame where Input or Lag was changed.</span></p>

View File

@ -60,7 +60,7 @@
<p class="rvps5"><span class="rvts36"><br/></span></p>
<p class="rvps5"><img alt="" style="padding : 1px;" src="lib/taseditor-smb.png"/></p>
<p class="rvps21"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Taseditor's workspace is similar to the interface used in music-sequencing programs. Piano Roll is a table containing the most necessary data about the edited project. Users can both observe that data and edit it by mouse clicks on various cells of the table.</span></p>
<p class="rvps10"><span class="rvts21">Taseditor's workspace is similar to the interface found in many music-sequencing programs. Piano Roll is a table containing the most necessary data about the edited project. Users can both observe that data and edit it by mouse clicks on various cells of the table.</span></p>
<p class="rvps10"><span class="rvts21">If you just opened the Taseditor window you will most likely see an empty project that contains only the starting (zeroth) frame of the movie. So, before you begin any experiments, you should temporarily unpause the emulator to let the movie reach at least the title screen of the game, the point where players can already affect the game with buttons Input. By default the hotkey to pause/unpause emulator is the </span><span class="rvts26">Pause</span><span class="rvts21"> key on the keyboard, but in Taseditor you can use </span><span class="rvts34">middle mouse button</span><span class="rvts21"> (the wheel) instead. Try watching the running game for a couple of seconds, then again press the </span><span class="rvts26">Pause</span><span class="rvts21"> key or make the middle-click (anywhere) to stop emulation.</span></p>
<p class="rvps10"><span class="rvts21">During the emulation, Piano Roll contents become filled with the information about the processed frames. Each line in the Piano Roll list is responsible for a single frame. The index number of the frame is shown at the beginning of the line, the numeration goes top-down. When the window size is not enough to display all the frames, the list gets a vertical scrollbar.</span></p>
<p class="rvps10"><span class="rvts21">By the color of each line you can tell the following data about the corresponding frame:</span></p>
@ -72,7 +72,7 @@
<li class="rvps10"><span class="rvts21">A purple line appears for a brief moment when you use the Undo feature. This way the program shows you the exact place of the reverted changes. A huge convenience of Taseditor is that absolutely any change can be reverted with the standard key combination </span><span class="rvts30">Ctrl + Z</span><span class="rvts21">, so don't be afraid to experiment.</span></li>
</ul>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">To start adding and changing the movie Input, click cells of those columns to the right of the column with frame numbers. If you click an empty cell, a symbol corresponding to the real joypad button will appear there.</span></p>
<p class="rvps10"><span class="rvts21">To start adding and changing the movie Input, click cells of those columns to the right from the column with frame numbers. If you click an empty cell, a symbol corresponding to the real joypad button will appear there.</span></p>
<div class="rvps21"><table width="600" border="0" cellpadding="6" cellspacing="0" style="border-width: 0px;">
<tr valign="middle">
<td style="width: 586px; height: 14px;"><p class="rvps14"><span class="rvts25">A</span><span class="rvts21"> </span><span class="rvts29">A </span><span class="rvts21">button</span></p>
@ -94,16 +94,16 @@
<p class="rvps10"><span class="rvts21">When working in Taseditor, the most of time is spent on that very process of setting and removing buttons at different frames. This way you form the </span><span class="rvts34">sequence of button states</span><span class="rvts21">, which is then fed to the game and reflected by actions of the game character(s). For example, if you put the letter "A" to a chosen Piano Roll cell at the middle of Super Mario Bros gameplay, Mario will perform a low jump, because a short </span><span class="rvts29">A</span><span class="rvts21"> button press occurred in the movie. And if you set several "A" symbols in a row (vertically), Mario will do a high jump, because </span><span class="rvts29">A</span><span class="rvts21"> was held longer.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Every time you change the Input above the line with the Playback cursor, the light-blue cursor steps back (up in the Piano Roll) also clearing some part of the Greenzone. This happens because the change of Input leads to a change in the game events, so the game data memorized inside the Greenzone becomes irrelevant. Thus after you change Input you need to replay some frames of the movie again either by unpausing the emulator, or by manually dragging the Playback cursor to the frame of interest and you will see results of the latest Input changes on FCEUX screen (and also restore a part of the Greenzone).</span></p>
<p class="rvps10"><span class="rvts21">Besides, you can hold the </span><span class="rvts25">right mouse button</span><span class="rvts21"> and roll the mouse wheel down to move the Playback cursor to the needed frame manually. Wheel-based navigation is the most responsive way to observe a little segment of the movie. You may use a single hand, and the mouse pointer may be anywhere, e.g. it may be left over the edited cells. Try this method, it's a very effective way to rewind back and forth. Just hold the right mouse button with one finger and roll the wheel with another finger while looking at the FCEUX window.</span></p>
<p class="rvps10"><span class="rvts21">Besides, you can hold the </span><span class="rvts25">right mouse button</span><span class="rvts21"> and roll the mouse wheel down to move the Playback cursor to the needed frame manually. Wheel-based navigation is the most responsive way to observe a little segment of the movie. You may use a single hand, and the mouse pointer may be anywhere, e.g. it may be left over the edited Input cells. Try this method, it's a very effective way to rewind back and forth. Just hold the right mouse button with one finger and roll the wheel with another finger while looking at the FCEUX window.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">In addition to single cell clicks, you can also change button states in many frames at once. For instance, if you want the </span><span class="rvts29">R</span><span class="rvts21"> button (</span><span class="rvts29">Right</span><span class="rvts21">) to be pressed for 20 straight frames, you don't have to click all 20 cells. You can just click on one of them, hold the left mouse button and move the mouse cursor up or down it will leave a trail of symbols, thus you will draw a vertical row of buttonpresses. Similarly, you can quickly erase a row of symbols by clicking the first one and moving the eraser up or down. As you may notice, erasing starts when you click an occupied cell, and drawing starts when you click an empty cell.</span></p>
<p class="rvps10"><span class="rvts21">Moreover, you can hold the </span><span class="rvts30">Shift</span><span class="rvts21"> key before clicking on the Input to spread the effect of the click across all frames between the point of click and the Selection cursor. For example, you can set "R" in the first frame, then scroll the Piano Roll to the end, hold </span><span class="rvts30">Shift</span><span class="rvts21"> and set "R" in the last frame the </span><span class="rvts29">R</span><span class="rvts21"> button press will appear in all frames.</span></p>
<p class="rvps10"><img align="right" alt="" style="padding : 6px;" src="lib/piano-roll-header-l.png"/></p>
<p class="rvps10"><span class="rvts21">There's one more way to mass set or mass remove buttonpresses. First, select several frames, for example, the 5th, the 10th and the 20th (to do it you have to hold </span><span class="rvts30">Ctrl</span><span class="rvts21"> while clicking on numbers </span><span class="rvts21">0000005, 0000010 and 0000020)</span><span class="rvts21">. Then click on the "L" letter in the Piano Roll Header. If the selected frames didn't have the </span><span class="rvts29">Left</span><span class="rvts21"> button symbols, they will get it. And if all of the frames had the </span><span class="rvts29">Left</span><span class="rvts21"> button already pressed, the click will clear it.</span></p>
<p class="rvps10"><span class="rvts21">Later you will find a few other ways to edit the Input, but these were the main ones. At first it might look unnatural to draw buttonpresses with the mouse instead of simulating them using keyboard keys. But this discomfort feeling will disappear soon after you devote a few some days to Taseditor.</span></p>
<p class="rvps10"><span class="rvts21">Later you will find a few other ways to edit the Input, but these were the main ones. At first it might look unnatural to draw buttonpresses with the mouse instead of simulating them using keyboard keys. But this discomfort feeling will disappear soon after you devote a few days to Taseditor.</span></p>
<p class="rvps10"><a name="HotChanges"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">When drawing the Input you've probably noticed that previously drawn letters have different color, and as you add new buttonpresses old letters change their color from orange to violet and blue, eventually becoming standard black. This is one of experimental features of Taseditor, called "Hot Changes". It was invented to unobtrusively increase TASer's awareness about recent changes. Every time you modify the Input, the latest buttonpresses receive the hottest color (bright orange), and all the previous edits cool down by one level, becoming less bright.</span></p>
<p class="rvps10"><span class="rvts21">When drawing the Input you've probably noticed that previously drawn letters have different color, and as you add new buttonpresses the old letters change their color from orange to violet and blue, eventually becoming standard black. This is one of experimental features of Taseditor, called "Hot Changes". It was invented to unobtrusively increase TASer's awareness about recent changes. Every time you modify the Input, the latest buttonpresses receive the hottest color (bright orange), and all the previous edits cool down by one level, becoming less bright.</span></p>
<p class="rvps10"><span class="rvts21">Because of the coloring, even a cursory glance on the Piano Roll is enough to get the idea which buttonpresses were added just recently and which were set long ago. Also, you can see which of them were recently removed (they are replaced with a dash).</span></p>
<p class="rvps10"><span class="rvts21">If you don't like this feature, you can disable it, but within this Guide we'll imply that you have the "Hot Changes" enabled.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
@ -122,7 +122,8 @@
<p class="rvps10"><span class="rvts21">Markers are automatically numbered by the order they are located in the movie top-down from first to last. In the upper left corner of TAS Editor window you can see the number of the Marker that is located just above the Playback cursor in the movie (light-blue "Marker </span><span class="rvts37">#</span><span class="rvts21">" label). This label both informs you and serves as a button for auto-scrolling. E.g. if you left the Playback cursor in one part of the movie and scrolled the Piano Roll far from that point, you can immediately return to the light-blue cursor anytime by clicking the "Marker" label (or tapping the </span><span class="rvts30">Shift</span><span class="rvts21"> key twice). You are definitely going to need this feature when editing large movies.</span></p>
<p class="rvps10"><span class="rvts21">A similar button can be found in the lower left corner of Taseditor. The "Marker </span><span class="rvts37">#</span><span class="rvts21">" label of a dark blue color (the same color as the Selection cursor) displays the number of the Marker located just above the Selection. If you click this label, the Piano Roll will automatically jump to Selection. This button is going to be used as often as the upper one. Its keyboard alternative is tapping the </span><span class="rvts30">Ctrl</span><span class="rvts21"> key twice.</span></p>
<p class="rvps10"><span class="rvts21">It should be easy to remember that the </span><span class="rvts30">Shift</span><span class="rvts21"> key is almost always used to control the Playback cursor, while the </span><span class="rvts30">Ctrl</span><span class="rvts21"> key is to control the Selection cursor.</span></p>
<p class="rvps10"><span class="rvts21">If both Playback and Selection cursors are below the same Marker, the numbers in both corners will obviously be the same.</span></p>
<p class="rvps10"><span class="rvts21">If both Playback and Selection cursors are under the same Marker, the numbers in both corners will obviously be the same.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Markers can do more than just divide the movie into logical parts. They may also contain text records (comments and work notes). The Marker </span><span class="rvts25">Note</span><span class="rvts21"> is displayed right near its number. The upper edit field contains the Note of the Marker above the Playback Cursor, and the lower field shows the Note of the Marker above the Selection cursor.</span></p>
<p class="rvps10"><span class="rvts21">By default, every new Marker contains an empty Note. When you create a new Marker by double-click, the lower edit field automatically becomes active, because the Selection cursor points to the just marked frame. So you may quickly type any text for the Note of that Marker and then resume your work with the movie. Text changes are saved automatically.</span></p>
<p class="rvps10"><span class="rvts21">You can edit an old Marker Note in any of the following ways:</span></p>

View File

@ -60,10 +60,10 @@
<p class="rvps2"><span class="rvts36"><br/></span></p>
<p class="rvps2"><span class="rvts36"><br/></span></p>
<p class="rvps10"><span class="rvts21">Certain useful features of Taseditor are disabled by default, because using them requires understanding of their working principles. This chapter describes all Taseditor options and settings, as well as FCEUX settings that affect your work in Taseditor.</span></p>
<p class="rvps10"><span class="rvts21">Settings are kept in the </span><span class="rvts37">fceux.cfg</span><span class="rvts21"> file in emulator's main folder. If you delete this file, all settings will reset to default values when you launch FCEUX.</span></p>
<p class="rvps10"><span class="rvts21">Settings are kept in the </span><span class="rvts37">fceux.cfg</span><span class="rvts21"> file in the emulator's main folder. If you delete this file, all settings will reset to default values when you launch FCEUX.</span></p>
<div class="rvps10"><table width="100%" border="0" cellpadding="4" cellspacing="0" style="border-width: 0px;">
<tr valign="top">
<td style="width: 847px;"><p class="rvps10"><span class="rvts21">First, if you've already read </span><a class="rvts27" href="ProgramInterface.html">chapter 2</a><span class="rvts21"> and understood the purpose of all GUI elements, you should disable pop-up tooltips (intended for newbies only). Go to "Help" submenu of Taseditor main menu and uncheck the option "Enable Tooltips". Before doing it you may want to actually read all the tooltips by pointing the mouse cursor at different elements of TAS Editor window, and thus consolidate your knowledge of the GUI.</span></p>
<td style="width: 847px;"><p class="rvps10"><span class="rvts21">First, if you've already read the </span><a class="rvts27" href="ProgramInterface.html">chapter 2</a><span class="rvts21"> and understood the purpose of all GUI elements, you should disable pop-up tooltips (intended for newbies only). Go to the "Help" submenu of Taseditor main menu and uncheck the option "Enable Tooltips". Before doing it you may want to actually read all the tooltips by pointing the mouse cursor at different elements of TAS Editor window, and thus consolidate your knowledge of the GUI.</span></p>
</td>
<td valign="top" style="width: 148px;"><p class="rvps19"><img alt="" style="padding : 1px;" src="lib/help-menu.png"/></p>
</td>
@ -73,20 +73,20 @@
<p class="rvps10"><span class="rvts21">Now open the "View" submenu.</span></p>
<p class="rvps10"><img align="left" alt="" style="padding : 6px;" src="lib/view-menu.png"/></p>
<p class="rvps10"><span class="rvts21">The "Find Note window" brings up the window dedicated to searching text in Marker Notes. This function is useful when you're documenting your movie with Notes. It's described in the next chapter.</span></p>
<p class="rvps10"><span class="rvts21">Then there are several checkboxes allowing to customize the program interface. To try the customization possibilities, create a test project right now (just open Taseditor) and experiment with it.</span></p>
<p class="rvps10"><span class="rvts21">Then there are several checkboxes allowing to customize the program interface. To try the customization possibilities, create a test project and experiment with it.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><a name="DisplayBranchScreenshots"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">View -&gt; Display Branch Screenshots</span></p>
<p class="rvps10"><span class="rvts21">Displays pop-up screenshots when you point mouse cursor over Bookmarks. The screenshot helps you to recall movie events saved to the Bookmark, which simplifies searching for the needed branch of the movie, as you don't have to load the Bookmark to have an idea on its contents. This way you can also quickly compare results of several alternative approaches.</span></p>
<p class="rvps10"><span class="rvts21">Displays pop-up screenshots when you point mouse cursor over Bookmarks. The screenshot helps you to recall movie events saved to the Bookmark, which simplifies searching for the needed branch of the movie, as you don't have to actually load the Bookmark when you need to have an idea on its contents. This way you can also quickly compare results of several alternative approaches.</span></p>
<p class="rvps10"><span class="rvts21">This option is enabled by default. If disabled, no screenshots will pop up on mouse hover.</span></p>
<p class="rvps10"><span class="rvts21">It's recommended to have it enabled, unless you're annoyed with pop-up pictures, partially obstructing the view on Piano Roll.</span></p>
<p class="rvps10"><span class="rvts21">It's recommended to have it enabled, unless you're annoyed with pop-up pictures partially obstructing the view on the Piano Roll.</span></p>
<p class="rvps10"><a name="DisplayBranchDescriptions"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">View -&gt; Display Branch Descriptions</span></p>
<p class="rvps10"><span class="rvts21">Displays pop-up descriptions </span><span class="rvts21">when you point mouse cursor over Bookmarks.</span><span class="rvts21"> The text, as well as the screenshot, gives you additional information about the contents of the Bookmark, helping to decide whether this branch should be loaded or not.</span></p>
<p class="rvps10"><span class="rvts21">The description text is taken from the Marker above the frame of that Bookmark. The Marker itself may be actually removed from the working movie long ago, but if the Bookmark was created while the Marked existed, then this Marker still exists in the branch of this Bookmark. And if you load this Bookmark, the Marker will reappear on its place.</span></p>
<p class="rvps10"><span class="rvts21">So, when trying alternative strategies of playing through a large segment (e.g. whole level of the game), before saving every approach to a separate branch, you can make a name for the approach by setting a Marker at the Playback cursor position and typing a text message like "</span><span class="rvts37">here I chose upper way</span><span class="rvts21">". After that, save a Bookmark on that frame. Then you can remove the Marker together with the Input of the old approach and create next approach by applying another strategy of playing current segment. When the new approach if finished and replayed, you can again create a Marker with a Note like "</span><span class="rvts37">here I chose lower way</span><span class="rvts21">" and save all that to another Bookmark. After that you can save the project and, say, close Taseditor. Next day you can easily recall all pros and cons of the two strategies you tried. Each Bookmark will show you the screenshot of the bookmarked frame and the text you wrote for that Bookmark. While it can be hard to distinguish the strategies by screenshots (since both approaches end at the same event of the game), but text descriptions will make them easy to recognize.</span></p>
<p class="rvps10"><span class="rvts21">So, when trying alternative strategies of playing through a large segment (e.g. whole level of the game), before saving every approach to a separate branch, you can make a name for the approach by setting a Marker at the Playback cursor position and typing a text message like "</span><span class="rvts37">here I chose upper way</span><span class="rvts21">" or just "</span><span class="rvts37">upper way</span><span class="rvts21">". After that, save a Bookmark on that frame. Then you can remove the Marker together with the Input of the old approach and create next approach by applying another strategy of playing the segment. When the new approach if finished and replayed, you can again create a Marker with a Note like "</span><span class="rvts37">here I chose lower way</span><span class="rvts21">" and save all that to another Bookmark. After that you can save the project and, say, close Taseditor. Next day you can easily recall all pros and cons of the two strategies you tried. Each Bookmark will show you the screenshot of the bookmarked frame and the text you wrote for that Bookmark. While it can be hard to distinguish the strategies by screenshots (since both approaches end at the same event of the game), but text descriptions will make them easy to recognize.</span></p>
<p class="rvps10"><span class="rvts21">This option is enabled by default. </span><span class="rvts21">If disabled, no descriptions will pop up on mouse hover.</span></p>
<p class="rvps10"><span class="rvts21">It's recommended to have it enabled, unless you're annoyed with pop-up text fields.</span></p>
<p class="rvps10"><a name="EnableHotChanges"></a>
@ -101,7 +101,7 @@
<p class="rvps10"><span class="rvts21">Also, with Hot Changes you can see which buttonpresses were recently removed instead of an empty cell there will be a dash of the corresponding color. The dash also changes its color while cooling down, and after 15 levels it finally disappears.</span></p>
<p class="rvps10"><span class="rvts21">The same dashes appear when you insert new frames in the movie.</span></p>
<p class="rvps10"><span class="rvts21">It's recommended to </span><span class="rvts21">enable this feature to increase the usability of Taseditor. In theory it should even increase your working speed, because this way you never have to recall which actions you did a minute ago. Of course even without Hot Changes you can always remind the sequence of last actions by reverting History (making several </span><span class="rvts30">Ctrl + Z</span><span class="rvts21"> keypresses) and then returning the movie to normal state again (making as many </span><span class="rvts30">Ctrl + Y</span><span class="rvts21"> keypresses). But in this case you will also truncate the Greenzone. So better just leave the Hot Changes enabled.</span></p>
<p class="rvps10"><span class="rvts21">The only downside of this feature is that Hot Changes data will be stored in the History Log and in FM3 project file, thus increasing the occupied memory.</span></p>
<p class="rvps10"><span class="rvts21">The only downside of this feature is that Hot Changes data will be stored in the History Log and in FM3 project file, thus increasing the amount of occupied memory.</span></p>
<p class="rvps10"><a name="Followundocontext"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">View -&gt; Follow undo context</span></p>
@ -126,27 +126,27 @@
<p class="rvps10"><span class="rvts21">The default autosave period is 15 minutes. This means, if you've made some substantial changes to the project (e.g. you edited Input, and an asterisk appeared in the TAS Editor window caption), and then didn't save project for 15 minutes, Taseditor will remind you about that or just execute saving itself, depending on the state of the "silently" checkbox. </span><span class="rvts21">If the checkbox is enabled, Taseditor silently saves the project to disk under the same filename. If it is disabled, Taseditor brings up the "Save As" dialog, where you can confirm the saving or cancel it. In the latter case Taseditor will wait another period of time until reminding you about the unsaved data.</span></p>
<p class="rvps10"><span class="rvts21">The autosave function only works when current project already has a filename.</span></p>
<p class="rvps10"><span class="rvts21">Maximum possible value of the period is 1440 minutes (24 hours). You can disable this function by switching off the "Autosave project" checkbox, but that's not recommended.</span></p>
<p class="rvps10"><a name="Setmaxundolevels"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Config -&gt; Set max undo levels</span></p>
<p class="rvps10"><span class="rvts21">Specifies</span><span class="rvts21"> the maximum number of undo steps, how many times you can restore previous state of the project by pressing </span><span class="rvts30">Ctrl + Z</span><span class="rvts21">.</span></p>
<p class="rvps10"><span class="rvts21">The History Log needs a lot of computer memory and takes some disk space to save FM3 files. The whole Log is stored in project files in compressed state. The compression is done in background when the emulator is idle, Taseditor gradually compresses new items of the History Log. Thanks to this behavior, the History Log size doesn't affect FM3 saving time much.</span></p>
<p class="rvps10"><span class="rvts21">With this setting you can adjust the amount of memory occupied by History Log. By default you have 100 undo levels, which means you can revert up to hundred of recent movie edits. It's not very much, because during real TASing you make lots of various edits within a small time span, as the time runs imperceptibly. If your computer has enough RAM, you can increase the "max undo levels" value up to the maximum possible number 1000.</span></p>
<p class="rvps10"><a name="SetGreenzonecapacity"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><img align="right" alt="" style="padding : 6px;" src="lib/greenzone-capacity.png"/></p>
<p class="rvps10"><span class="rvts22">Config -&gt; Set Greenzone capacity</span></p>
<p class="rvps10"><span class="rvts21">Defines the maximum size of the Greenzone. The Greenzone is used for easier Playback cursor navigation, allowing to instantly return to any frame that was emulated. It needs a lot of computer memory to store emulator's information and disk space for saving FM3 projects.</span></p>
<p class="rvps10"><span class="rvts21">Defines the maximum size of the Greenzone. The Greenzone is used for easier Playback cursor navigation, allowing to instantly return to any frame that has been emulated. It needs a lot of computer memory to store emulator's information and a lot of disk space for saving FM3 projects.</span></p>
<p class="rvps10"><span class="rvts21">The more of green and red frames there are in the Piano Roll, the more memory the Greenzone occupies. For most NES games 1 frame costs about 10 kilobytes (compressed data). So, big movie projects may take hundreds of megabytes. It affects the project loading and saving time.</span></p>
<p class="rvps10"><span class="rvts21">To decrease the amount of needed memory, Taseditor regularly cleans the Greenzone tail, forgetting the info about segments that are too far from from the Playback cursor.</span></p>
<p class="rvps10"><span class="rvts21">To decrease the amount of needed memory, Taseditor regularly cleans the Greenzone tail, forgetting the info about segments that are too far from the Playback cursor.</span></p>
<p class="rvps10"><span class="rvts21">This cleaning doesn't mean the Greenzone becomes inaccessible (white) on those frames. That would be very inconvenient, because to replay these frames you would need to wait until the emulation runs from the beginning of the movie. </span><span class="rvts21">To avoid such inconvenience and still free some memory from old Greenzone sections, Taseditor uses </span><span class="rvts37">gradual rarefication</span><span class="rvts21"> of the Greenzone tail.</span></p>
<p class="rvps10"><span class="rvts21">This process works like shown in the picture to the right. The light-blue cursor runs down along the Piano Roll. The cursor is the head of the Greenzone. It leaves green/red lines behind, but far above it some of the lines become pale again. At first, every odd frame is cleared, then 3 of every 4, then 7 of 8, and finally 15 of 16.</span></p>
<p class="rvps10"><span class="rvts21">This process works like shown on the picture to the right. The light-blue cursor runs down along the Piano Roll. The cursor is the head of the Greenzone. It leaves green/red lines behind, but far above it some of the lines become pale again. At first, every odd frame is cleared, then 3 of every 4, then 7 of 8, and finally 15 of 16.</span></p>
<p class="rvps10"><span class="rvts21">Thus the Greenzone tail contains many hollow sections. And if you decide to send emulator to a frame inside such hollow section, you'll need to wait while emulation runs to it from the nearest bright Greenzone frame. But since bright frames alternate every 2 or 4 frames, the waiting will only last a split second, so you won't likely notice the difference between jumping to a regular Greenzone frame (instant jump) and jumping to a cleared tail (instant seeking).</span></p>
<p class="rvps10"><span class="rvts21">By adjusting the "</span><span class="rvts21">Set greenzone capacity</span><span class="rvts21">" setting you can specify how many Greenzone frames (starting from its head) must stay untouched. On the picture to the right this number is 8.</span></p>
<p class="rvps10"><span class="rvts21">For an experiment, choose the "</span><span class="rvts21">Set greenzone capacity</span><span class="rvts21">" item, a dialog window will appear asking you to enter a number, type 100 and press OK. This will mean that first hundred of frames above the Playback cursor should not be cleaned. Any cursor navigation along this area will be instant, so you may drag the light-blue cursor and use rewind with maximum comfort. After the first hundred of frames the cleaning will be removing every other frame you'll see alternation of bright and pale lines in the Piano Roll. This alternation will last for about 200 frames. The Playback cursor navigation along the area of 200 frames will also be almost instant.</span></p>
<p class="rvps10"><span class="rvts21">This way the Greenzone covers 100 + 200 = 300 frames, while only 100 + 100 = 200 frames are stored in memory. Then, during next 400 frames, every filled line will alternate with 3 cleared lines, and so on. In total, the Greenzone will only occupy memory needed for storing the data of 500 frames (about 5 MB), while the accessible area will be 3100 frames (about a minute).</span></p>
<p class="rvps10"><span class="rvts21">By default, the Greenzone capacity is 10000 frames. This should be enough for most TASes. </span><span class="rvts21">It's recommended to TAS with</span><span class="rvts21"> no less than 1000 frames of Greenzone capacity, because the further economy would be impractical.</span></p>
<p class="rvps10"><span class="rvts21">The minimum number for that parameter is 1 (just for tests), the maximum number is 50000.</span></p>
<p class="rvps10"><a name="Setmaxundolevels"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Config -&gt; Set max undo levels</span></p>
<p class="rvps10"><span class="rvts21">Specifies</span><span class="rvts21"> the maximum number of undo steps, how many times you can restore previous state of the project by pressing </span><span class="rvts30">Ctrl + Z</span><span class="rvts21">.</span></p>
<p class="rvps10"><span class="rvts21">The History Log needs a lot of computer memory and takes some disk space to save FM3 files. The whole Log is stored in project files in compressed state. The compression is done in background when the emulator is idle, Taseditor &nbsp;gradually compresses new items of the History Log. Thanks to this behavior, the History Log size doesn't affect FM3 saving time much.</span></p>
<p class="rvps10"><span class="rvts21">With this setting you can adjust the amount of memory occupied by History Log. By default you have 100 undo levels, which means you can revert up to hundred of recent movie edits. It's not very much, because during real TASing you make lots of various edits within a small time span, as the time runs imperceptibly. If your computer has enough RAM, you can increase the "max undo levels" value up to the maximum possible number 1000.</span></p>
<p class="rvps10"><span class="rvts21">The maximum number for that parameter is 50000.</span></p>
<p class="rvps10"><a name="EnableGreenzoning"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Config -&gt; Enable Greenzoning</span></p>
@ -157,23 +157,23 @@
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Config -&gt; Autofire Pattern skips Lag</span></p>
<p class="rvps10"><span class="rvts21">Accounts for lag when you're using patterns (</span><span class="rvts30">Alt</span><span class="rvts21"> + clicks on Input).</span></p>
<p class="rvps10"><span class="rvts21">If the option is disabled, patterns appear in the Piano Roll exactly (e.g. for the "Alternating (1010...)" pattern the buttonpresses will actually alternate one after another).</span></p>
<p class="rvps10"><span class="rvts21">If the option is disabled, patterns appear in the Piano Roll exactly like they were coded (e.g. for the pattern "</span><span class="rvts37">Alternating (1010...)</span><span class="rvts21">" the new buttonpresses will indeed alternate one after another).</span></p>
<p class="rvps10"><span class="rvts21">If </span><span class="rvts21">the option is</span><span class="rvts21"> enabled, the resulting sequence of buttonpresses may differ from original pattern (lag frames will have additional gaps not present in the pattern).</span></p>
<p class="rvps10"><span class="rvts21">Since lag frames aren't accounted by most games, you have to skip red lines of the Piano Roll to correctly calculate the space between presses. For instance, if there must be exactly 3 blank frames between every buttonpress (pattern "10001000"), but there's also one lag frame in the middle of current segment, you have to add 1 more blank frame &nbsp;(100</span><span class="rvts25">0</span><span class="rvts21">01000).</span></p>
<p class="rvps10"><span class="rvts21">This option is enabled by default.</span><span class="rvts21"> It's recommended to leave it enabled, because in vast majority of cases you need to skip lag frames, in order to adapt buttonpresses to how the game interprets Input.</span></p>
<p class="rvps10"><span class="rvts21">Since lag frames aren't accounted by most games, you have to skip red lines of the Piano Roll to correctly calculate the gaps between presses. For instance, if there must be exactly 3 blank frames between every buttonpress (pattern "10001000"), but there's also one lag frame in the middle of current segment, you have to add 1 more blank frame &nbsp;(100</span><span class="rvts25">0</span><span class="rvts21">01000).</span></p>
<p class="rvps10"><span class="rvts21">This option is enabled by default.</span><span class="rvts21"> It's recommended to leave it enabled, because in vast majority of cases you'll need to skip lag frames, in order to adapt buttonpresses to how the game interprets Input.</span></p>
<p class="rvps10"><a name="AutoAdjustInputAccordingtoLag"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Config -&gt; Auto-adjust Input according to Lag</span></p>
<p class="rvps10"><span class="rvts21">Enables automatic adjustment of Input according to changes of lag data.</span></p>
<p class="rvps10"><span class="rvts21">Basically, games only care about Input at green lines of the Piano Roll. It's pointless to draw any Input on red lines, because during lag frames the game doesn't poll Input. Those frames simply don't exist from the point of view of the game engine.</span></p>
<p class="rvps10"><span class="rvts21">When you edit Input, you change the flow of game events, and lag may appear on different frames too. If those frames previously had a meaningful Input, this Input must be shifted to the frames without lag, to allow it to affect the game.</span></p>
<p class="rvps10"><span class="rvts21">If this checkbox is enabled, you won't have to adjust the Input manually every time the Lag appears on different frames. Taseditor will insert an extra line at every new lag frame, thus shifting Input 1 frame down. And when an old lag frame disappears, Taseditor will remove respective frames from the movie, thus shifting Input up. As a result, you can be sure that the game will perceive your old Input correctly, no matter any Lag changes.</span></p>
<p class="rvps10"><span class="rvts21">If this checkbox is enabled, you won't have to adjust the Input manually every time the Lag appears on different frames. Taseditor will insert an extra line at every new lag frame, thus shifting Input 1 frame down. And when an old lag frame disappears, Taseditor will remove respective frames from the movie, thus shifting Input up. As a result, you can be sure that the game will always perceive your old Input correctly, no matter any Lag changes.</span></p>
<p class="rvps10"><span class="rvts21">Auto-adjustment operations are done by Taseditor only when you're watching (emulating) a segment, i.e. when Playback cursor runs through pale Piano Roll lines. The result of these operations is saved into the current History Log item.</span></p>
<p class="rvps10"><span class="rvts21">This feature is enabled by default, and it's recommended to always work with the function enabled. It significantly increases the comfort of TASing, especially when dealing with lag-heavy games.</span></p>
<p class="rvps10"><a name="DrawInputbydragging"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Config -&gt; Draw Input by dragging</span></p>
<p class="rvps10"><span class="rvts21">Allows to draw Input by holding the left mouse button and moving the mouse cursor over the Piano Roll.</span></p>
<p class="rvps10"><span class="rvts21">Allows to literally draw Input by holding the left mouse button and moving the mouse cursor over the Piano Roll.</span></p>
<p class="rvps10"><span class="rvts21">This option is enabled by default, so you can </span><span class="rvts21">quickly draw or erase a long line of buttonpresses.</span></p>
<p class="rvps10"><span class="rvts21">Drawing/erasing is usually constrained by single column, which allows user to do sweeping motions with the mouse. But if you hold the </span><span class="rvts30">Shift</span><span class="rvts21"> key while drawing, you will be able to draw/erase Input freely (it's rather impractical, but fun).</span></p>
<p class="rvps10"><span class="rvts21">If you disable this option, your clicks will only set/unset single buttonpresses. It may be necessary, for example, if you have trembling hands. But otherwise enabling this feature is recommended.</span></p>
@ -182,19 +182,19 @@
<p class="rvps10"><span class="rvts22">Config -&gt; Combine consecutive Recordings/Draws</span></p>
<p class="rvps10"><span class="rvts21">Combines consecutive operations of Input Recording into single item of the History Log. Also combines all Input drawn with the same press of mouse button.</span></p>
<p class="rvps10"><span class="rvts21">This feature is disabled by default. So when you're recording Input, </span><span class="rvts21">every recorded frame will create a separate item in the History Log, and you can undo changes for any frame. Also, when you're drawing Input, every new stroke will create a new History Log item, and you can undo each of them separately.</span></p>
<p class="rvps10"><span class="rvts21">However, in real TASing you don't need such precision of the undo. So, to save considerable amount of space in History Log, it's recommended to enable this option.</span></p>
<p class="rvps10"><span class="rvts21">However, in real TASing you don't need such precision of the undo. In fact, it may even become irritating when you have to undo every buttonpress separately. So, to save considerable amount of space in History Log, it's recommended to enable this option.</span></p>
<p class="rvps10"><a name="Use1PkeysforallsingleRecordings"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Config -&gt; Use 1P keys for all single Recordings</span></p>
<p class="rvps10"><span class="rvts21">Allows to record any joypad Input using only the first gamepad (1P). This function is used when you record Input traditional way using multitracking method to take turns for different players, e.g. first you record a short segment of Input for player one (1P), then record the Input for 2P and so on.</span></p>
<p class="rvps10"><span class="rvts21">Thanks to multitracking, you don't have to press buttons on both controllers at once. And with the "Use 1P keys for all single Recordings" option you don't even have to confugure 2P controls, because the same keys used for 1P can be used for all the rest joypads too.</span></p>
<p class="rvps10"><span class="rvts21">Thanks to multitracking, you don't have to press buttons on both controllers at once. And with the "Use 1P keys for all single Recordings" option you don't even have to configure 2P controls, because the same keys used for 1P can be used for all the rest joypads too.</span></p>
<p class="rvps10"><span class="rvts21">The option is enabled by default. If you disable it, emulator will use the second controller keys for recording 2P.</span></p>
<p class="rvps10"><span class="rvts21">It's recommended to have it enabled, in order to save the space on the keyboard.</span></p>
<p class="rvps10"><a name="UseInputkeysforColumnSet"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Config -&gt; Use Input keys for Column Set</span></p>
<p class="rvps10"><span class="rvts21">Allows editing Input in selected frames by pressing corresponding joypad keys.</span></p>
<p class="rvps10"><span class="rvts21">This feature is intended to speed up the Input editing process. To mass-set/mass-unset buttonpresses in a given segment, you usually either draw with mouse, or select a range of frames and click the necessary symbol in the Piano Roll Header the symbol flashes and the respective Input changes in all selected frames.</span></p>
<p class="rvps10"><span class="rvts21">This feature is intended to speed up the Input editing process. To mass-set/mass-unset buttonpresses in a given segment, you usually either draw with mouse, or select a range of frames and click the necessary symbol in the Piano Roll Header the symbol flashes and the respective Input changes in all the selected frames.</span></p>
<p class="rvps10"><span class="rvts21">With the "Use Input keys for Column Set" option you can press real keys (assigned to joypads) instead of clicking the Piano Roll Header. The result will be the same.</span></p>
<p class="rvps10"><span class="rvts21">The option is disabled by default. </span><span class="rvts21">Turn it on if you mostly use the new TASing methods and don't record Input traditional way. But when you're using Recording, either disable it or just remove the Selection to avoid Input changes on the selected frames when pressing joypad buttons.</span></p>
<p class="rvps10"><span class="rvts21">With this feature you can record joypad buttons even when Recording is off. Put the Selection cursor to the frame you want to apply Input to, and press the needed joypad buttons.</span></p>
@ -203,7 +203,7 @@
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Config -&gt; Bind Markers to Input</span></p>
<p class="rvps10"><span class="rvts21">Attaches Markers to Input. If the option is enabled, various Input editing functions will also affect Markers. For example, inserting blank frames into the movie will shift down both Input and Markers.</span></p>
<p class="rvps10"><span class="rvts21">Usually Markers are set to frames where certain in-game events occur. And when you improve previous result and reach the given place earlier than before, the corresponding Marker (set there after previous attempt) must point to an earlier frame now. Sometimes you have to drag such Markers manually. But thanks to the binding feature, Markers will shift themselves during Input modifications, so the manual adjustment of Markers is rarely needed.</span></p>
<p class="rvps10"><span class="rvts21">Usually Markers are set to frames where certain in-game events occur. And when you improve previous result and reach the given place earlier than before, the corresponding Marker (set there after previous attempt) should point to an earlier frame now. Sometimes you have to drag such Markers manually. But thanks to the binding feature, Markers will shift themselves during Input modifications, so the manual adjustment of Markers is rarely needed.</span></p>
<p class="rvps10"><span class="rvts21">Detaching Markers may be necessary when you need to edit Input without shifting Markers. For example, when you need to remove a part of Input, leaving Markers intact.</span></p>
<p class="rvps10"><span class="rvts21">The option is on by default. It's</span><span class="rvts21"> recommended to work with attached Markers most of the time, temporarily detaching them when necessary.</span></p>
<p class="rvps10"><span class="rvts21">For clarification, Taseditor highlights attached Markers with a pale yellow color, and detached Markers with more bright yellow.</span></p>
@ -211,23 +211,23 @@
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Config -&gt; Empty new Marker Notes</span></p>
<p class="rvps10"><span class="rvts21">Defines the default Notes text. If the option is set, each newly created Marker will have an empty Note. If not set, the new Marker will copy the above Marker's Note text.</span></p>
<p class="rvps10"><span class="rvts21">The option is enabled by default. It's</span><span class="rvts21"> recommended to </span><span class="rvts21">left it on, and type original Notes for important Markers, thus not leaving all Notes blank.</span></p>
<p class="rvps10"><span class="rvts21">The option is enabled by default. It's</span><span class="rvts21"> recommended to </span><span class="rvts21">left it on and type original Notes for important Markers, thus not leaving all Notes blank.</span></p>
<p class="rvps10"><a name="OldcontrolschemeforBranching"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Config -&gt; Old control scheme for Branching</span></p>
<p class="rvps10"><span class="rvts21">Imitates certain limitations of the traditional TASing method, particularly related to handling the Bookmarks (savestates).</span></p>
<p class="rvps10"><span class="rvts21">The option is disabled by default</span><span class="rvts21">, so hotkeys </span><span class="rvts26">F1</span><span class="rvts21">-</span><span class="rvts26">F10</span><span class="rvts21"> are used to load branch of the the corresponding Bookmarks, and the numeric keys </span><span class="rvts26">1</span><span class="rvts21">-</span><span class="rvts26">10</span><span class="rvts21"> are used for simple jumps to bookmarked frames without changing the movie.</span></p>
<p class="rvps10"><span class="rvts21">Besides, Input Recording is switched on with a simple press of the </span><span class="rvts26">Toggle Read-Only</span><span class="rvts21"> hotkey.</span></p>
<p class="rvps10"><span class="rvts21">Also, Input Recording is switched on with a simple press of the </span><span class="rvts26">Toggle Read-Only</span><span class="rvts21"> hotkey.</span></p>
<p class="rvps10"><span class="rvts21">But if you enable this option, the controls scheme will be the same as in old emulators. Pressing </span><span class="rvts26">F1</span><span class="rvts21">-</span><span class="rvts26">F10</span><span class="rvts21"> will work depending on the Recording mode. When the Recording is off, functional keys jump to respective Bookmark frame, and when Recording is on, </span><span class="rvts26">F1</span><span class="rvts21">-</span><span class="rvts26">F10</span><span class="rvts21"> keys load the branch of the Bookmark.</span></p>
<p class="rvps10"><span class="rvts21">Besides, Input Recording won't work until you load some Bookmark. This behavior allows you to press the </span><span class="rvts26">Toggle Read-Only</span><span class="rvts21"> hotkey in the middle of watching the movie, without overwriting old Input until you actually load a savestate.</span></p>
<p class="rvps10"><span class="rvts21">Also, there will be a red frame around the "current slot" number in the Bookmarks List. Press numeric keys </span><span class="rvts26">1</span><span class="rvts21">-</span><span class="rvts26">10</span><span class="rvts21"> to switch the current slot.</span></p>
<p class="rvps10"><span class="rvts21">This option is left to help old TASers move to TASing in Taseditor. However, it's not recommended to use it, because the new controls scheme much better fits the specifics of TASing process in Taseditor.</span></p>
<p class="rvps10"><span class="rvts21">Also, Input Recording won't work until you load some Bookmark. This behavior allows you to press the </span><span class="rvts26">Toggle Read-Only</span><span class="rvts21"> hotkey in the middle of watching the movie, without overwriting old Input until you actually load a savestate.</span></p>
<p class="rvps10"><span class="rvts21">Plus, there will be a red frame around the "current slot" number in the Bookmarks List. Press numeric keys </span><span class="rvts26">1</span><span class="rvts21">-</span><span class="rvts26">10</span><span class="rvts21"> to switch the current slot.</span></p>
<p class="rvps10"><span class="rvts21">This option is only left here to help old TASers move to Taseditor. But it's recommended to use the new controls scheme, because it fits the specifics of TASing process in Taseditor much better.</span></p>
<p class="rvps10"><a name="BranchesrestoreentireMovie"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">Config -&gt; Branches restore entire Movie</span></p>
<p class="rvps10"><span class="rvts21">Defines the way the branch is restored when you load a Bookmark.</span></p>
<p class="rvps10"><span class="rvts21">Defines the way a branch is restored when you load its Bookmark.</span></p>
<p class="rvps10"><span class="rvts21">The option is enabled by default, so </span><span class="rvts21">when you're loading a Bookmark, you replace the current movie with the movie state stored in that Bookmark.</span></p>
<p class="rvps10"><span class="rvts21">If this option is disabled, when you're loading a Bookmark, the current movie is replaced with a truncated version of the bookmarked movie state. The movie will be truncated at the bookmarked frame, thus imitating the traditional behavior of loading a savestate: savestates only recover the part of the movie before the Playback cursor, and the rest frames (from the light-blue cursor to the movie end) aren't loaded. This makes sense when TASing traditional way, because after loading a savestate TASer usually records a new Input starting from the position of the Playback cursor, so there's no need to load the data that will be overwritten anyway. But in Taseditor the movie is edited independently from the Playback cursor position, so you can load the entire movie state from Bookmarks, without caring if the Playback cursor is in the end of the movie or it is in the middle.</span></p>
<p class="rvps10"><span class="rvts21">If this option is disabled, when you're loading a Bookmark, the current movie is replaced with a truncated version of the bookmarked movie state. The movie will be truncated at the bookmarked frame, thus imitating the traditional behavior of loading a savestate: savestates only recover the part of the movie before the Playback cursor, and the rest frames (from the light-blue cursor to the movie end) aren't loaded. This makes sense when TASing traditional way, because after loading a savestate TASer usually records a new Input starting from the position of the Playback cursor, so there's no need to load the data that is going to be be overwritten anyway. But in Taseditor the movie is edited independently from the Playback cursor position, so you can load the entire movie state from Bookmarks, without caring if the Playback cursor is in the end of the movie or it is in the middle.</span></p>
<p class="rvps10"><span class="rvts21">It's recommended to leave this option enabled.</span></p>
<p class="rvps10"><a name="HUDinBranchscreenshots"></a>
<span class="rvts21"><br/></span></p>
@ -249,17 +249,17 @@
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">If you are going to TAS traditional way, it's obligatory to set the first controller buttons to such keys that would be easy to press together with the </span><span class="rvts26">Frame Advance</span><span class="rvts21"> hotkey. While FCEUX supports binding the virtual NES joypad to a real PC gamepad, it's recommended to use the keyboard for recording Input, in order to have fast access to </span><span class="rvts26">Frame Advance</span><span class="rvts21">, </span><span class="rvts26">Frame Rewind</span><span class="rvts21">, </span><span class="rvts26">Pause</span><span class="rvts21">, and to all 10 savestate slots.</span></p>
<p class="rvps10"><span class="rvts21">However, if you use Taseditor as intended, you won't need to use Recording too much, and even in cases when you use it (for example, when recording a test playthrough of a level), an access to functional keys isn't critical. So, you can reassign the game controls to a USB gamepad, if you have one.</span></p>
<p class="rvps10"><span class="rvts21">Virtual controller buttons are configured in FCEUX the following way. Choose </span><span class="rvts25">Config -&gt; Input</span><span class="rvts21"> in emulator main menu. In the appeared dialog, select the "Gamepad" item from the leftmost drop-down listbox (it's usually already selected). Click the left </span><span class="rvts29">Configure</span><span class="rvts21"> button (since you need to configure the first gamepad). In the new window click the </span><span class="rvts29">Up</span><span class="rvts21"> button, then a small window will appear, now press the keyboard key you want to set for the virtual </span><span class="rvts29">Up</span><span class="rvts21"> button. Press that key 2nd time to confirms your choice, or just click </span><span class="rvts29">Close</span><span class="rvts21">. Then you need to do the same for the rest buttons of NES gamepad </span><span class="rvts29">Down</span><span class="rvts21">, </span><span class="rvts29">Left</span><span class="rvts21">, </span><span class="rvts29">Right</span><span class="rvts21">, </span><span class="rvts29">Select</span><span class="rvts21">, </span><span class="rvts29">Start</span><span class="rvts21">, </span><span class="rvts29">B</span><span class="rvts21">, </span><span class="rvts29">A</span><span class="rvts21">. After you're done with the first controller buttons (Virtual Gamepad 1), you may close both windows: Gamepad and Input Configuration.</span></p>
<p class="rvps10"><span class="rvts21">Virtual controller buttons are configured in FCEUX the following way. Choose </span><span class="rvts25">Config -&gt; Input</span><span class="rvts21"> in emulator main menu. In the appeared dialog, select the "Gamepad" item from the leftmost drop-down listbox (usually it's already selected). Click the left </span><span class="rvts29">Configure</span><span class="rvts21"> button (since you need to configure the first gamepad). In the new window click the </span><span class="rvts29">Up</span><span class="rvts21"> button, then a small window will appear, now press the keyboard key you want to set for the virtual </span><span class="rvts29">Up</span><span class="rvts21"> button. Press that key 2nd time to confirms your choice, or just click </span><span class="rvts29">Close</span><span class="rvts21">. Then you need to do the same for the rest buttons of NES gamepad </span><span class="rvts29">Down</span><span class="rvts21">, </span><span class="rvts29">Left</span><span class="rvts21">, </span><span class="rvts29">Right</span><span class="rvts21">, </span><span class="rvts29">Select</span><span class="rvts21">, </span><span class="rvts29">Start</span><span class="rvts21">, </span><span class="rvts29">B</span><span class="rvts21">, </span><span class="rvts29">A</span><span class="rvts21">. After you're done with the first controller buttons (Virtual Gamepad 1), you may close both windows: Gamepad and Input Configuration.</span></p>
<p class="rvps10"><span class="rvts21">You can check the assigned buttons while playing the game or while Taseditor is engaged as you press them, the corresponding symbols in the Piano Roll Header will shine with green color. Besides, if you enable Input display (FCEUX: </span><span class="rvts25">Config -&gt; Display -&gt; Input Display -&gt; 2 player</span><span class="rvts21">), FCEUX screen will show you the pressed buttons too.</span></p>
<p class="rvps10"><span class="rvts21">In addition to recording the regular gaming session, virtual gamepad buttons may be used to quickly set Input when editing movie (see </span><a class="rvts27" href="ProgramCustomization.html#UseInputkeysforColumnSet">Config -&gt; Use Input keys for Column Set</a><span class="rvts21">). Select a range of frames where you want to change Input and press the key you assigned to a button of the virtual gamepad.</span></p>
<p class="rvps10"><span class="rvts21">When you map the virtual buttons to keyboard keys, make sure none of the emulator or Taseditor hotkeys are already assigned to those keys. The full list of default hotkeys can be found in </span><a class="rvts27" href="Controls.html#hotkeys">Reference</a><span class="rvts21">.</span></p>
<p class="rvps10"><span class="rvts21">Some FCEUX hotkeys don't have default mapping (they're not mapped to any key yet), you can configure them this way. In the emulator main menu choose </span><span class="rvts25">Config -&gt; Map Hotkeys</span><span class="rvts21">. A window listing all possible emulator hotkeys will appear. Choose the necessary hotkey, double-click it and then press the desired keyboard key.</span></p>
<p class="rvps10"><span class="rvts21">First of all, find the item called "</span><span class="rvts25">Open TAS Editor</span><span class="rvts21">" and double-click it. In the appearing window press the key that you will always use to quickly launch Taseditor.</span></p>
<p class="rvps10"><span class="rvts21">Second, find the item "</span><span class="rvts26">Reload ROM or TAS Editor Project</span><span class="rvts21">" and either remap it or remember the default combination (</span><span class="rvts26">Ctrl + F1</span><span class="rvts21">). This hotkey will help you quickly return to your interrupted work just launch FCEUX, press the </span><span class="rvts26">Reload ROM</span><span class="rvts21"> hotkey, then the aforementioned </span><span class="rvts25">Open TAS Editor</span><span class="rvts21"> hotkey, and then again </span><span class="rvts26">Reload ROM</span><span class="rvts21"> (this time it will work as </span><span class="rvts26">Reload TAS Editor Project</span><span class="rvts21">). This way you'll return to the state of your paused work in a split second.</span></p>
<p class="rvps10"><span class="rvts21">Then look at the hotkeys "</span><span class="rvts26">Frame Advance</span><span class="rvts21">" и "</span><span class="rvts26">Frame Rewind</span><span class="rvts21">". They are used for Playback cursor navigation. By default they are mapped to "</span><span class="rvts26">\</span><span class="rvts21">" and "</span><span class="rvts26">Backspace</span><span class="rvts21">". You can reconfigure them to more handy keys or just ignore and use just the mouse wheel for Playback cursor navigation.</span></p>
<p class="rvps10"><span class="rvts21">When you map the virtual buttons to keyboard keys, make sure none of the emulator or Taseditor hotkeys are already assigned to those keys. The full list of default hotkeys can be found in the </span><a class="rvts27" href="Controls.html#hotkeys">Reference</a><span class="rvts21">.</span></p>
<p class="rvps10"><span class="rvts21">Some FCEUX hotkeys don't have default mapping (they're not mapped to any key yet). You can configure them the following way. In the emulator main menu choose </span><span class="rvts25">Config -&gt; Map Hotkeys</span><span class="rvts21">. A window listing all possible emulator hotkeys will appear. Choose the necessary hotkey, double-click it and then press the desired keyboard key.</span></p>
<p class="rvps10"><span class="rvts21">First of all, find the item called "</span><span class="rvts25">Open TAS Editor</span><span class="rvts21">" and double-click it. In the appeared window press the key that you will always use to quickly launch Taseditor.</span></p>
<p class="rvps10"><span class="rvts21">Second, find the item "</span><span class="rvts26">Reload ROM or TAS Editor Project</span><span class="rvts21">" and either remap it or remember the default combination (</span><span class="rvts26">Ctrl + F1</span><span class="rvts21">). This hotkey will help you quickly return to your interrupted work just launch FCEUX, press the </span><span class="rvts26">Reload ROM</span><span class="rvts21"> hotkey, then press the aforementioned </span><span class="rvts25">Open TAS Editor</span><span class="rvts21"> hotkey, and then again </span><span class="rvts26">Reload ROM</span><span class="rvts21"> (this time it will work as </span><span class="rvts26">Reload TAS Editor Project</span><span class="rvts21">). This way you'll return to the state of your paused work in a split second.</span></p>
<p class="rvps10"><span class="rvts21">Now look at the hotkeys "</span><span class="rvts26">Frame Advance</span><span class="rvts21">" и "</span><span class="rvts26">Frame Rewind</span><span class="rvts21">". They are used for Playback cursor navigation. By default they are mapped to "</span><span class="rvts26">\</span><span class="rvts21">" and "</span><span class="rvts26">Backspace</span><span class="rvts21">". You can reconfigure them to more handy keys or just use the mouse wheel for the Playback cursor frame-by-frame navigation.</span></p>
<p class="rvps10"><span class="rvts21">Also see the "</span><span class="rvts26">Speed Down</span><span class="rvts21">" and "</span><span class="rvts26">Speed Up</span><span class="rvts21">" hotkeys. You may consider remapping them to Numpad keys "</span><span class="rvts25">+</span><span class="rvts21">" and "</span><span class="rvts25">-</span><span class="rvts21">".</span></p>
<p class="rvps10"><span class="rvts21">The "</span><span class="rvts26">Pause</span><span class="rvts21">" и "</span><span class="rvts26">Restore Playback</span><span class="rvts21">" hotkeys are set to "</span><span class="rvts26">Pause/Break</span><span class="rvts21">" and "</span><span class="rvts26">Spacebar</span><span class="rvts21">" keys by default, but in most cases it's easier to use the middle mouse button instead of these hotkeys, so you can even reassign the "</span><span class="rvts26">Spacebar</span><span class="rvts21">" for something else if you wish.</span></p>
<p class="rvps10"><span class="rvts21">Finally, there is the "</span><span class="rvts26">Cancel Seeking</span><span class="rvts21">" hotkey ("</span><span class="rvts26">Esc</span><span class="rvts21">" key by default). Pressing it is the same as clicking the Taseditor progressbar if the Playback was seeking to a target frame, the seeking will be canceled.</span></p>
<p class="rvps10"><span class="rvts21">Finally, there is the "</span><span class="rvts26">Cancel Seeking</span><span class="rvts21">" hotkey ("</span><span class="rvts26">Esc</span><span class="rvts21">" key by default). Pressing it is the same as clicking the Taseditor progressbar if the Playback was seeking to a target frame, the seeking will be aborted.</span></p>
<p class="rvps10"><span class="rvts21">Some FCEUX hotkeys don't work when Taseditor is engaged. For example, the "</span><span class="rvts25">Open ROM</span><span class="rvts21">" won't work you have to load ROM before running Taseditor. This is done for </span><a class="rvts27" href="MistakeProofing.html#DisabledHotkeys">mistake-proofing</a><span class="rvts21">.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">The next chapter describes </span><a class="rvts27" href="AdvancedFeatures.html">additional features of Taseditor</a><span class="rvts21">. You may postpone reading it until you are used to main features. Anyway, now you're ready enough for productive work in Taseditor.</span></p>

View File

@ -69,7 +69,7 @@
<li class="rvps14"><span class="rvts21">open Taseditor window (Tools -&gt; TAS Editor)</span></li>
</ol>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">When you engage Taseditor, the game is reset, and the emulator pauses. It shall stand paused as you TAS, to prevent the game from urging you on and distracting from analysis of information.</span></p>
<p class="rvps10"><span class="rvts21">When you engage Taseditor, the game is reset, and the emulator pauses. It shall stay paused as you TAS, to prevent the game from urging you on and distracting from analysis of information.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps18"><img alt="" style="padding : 1px;" src="lib/Monitor-example.png"/></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>

View File

@ -63,9 +63,9 @@
<p class="rvps10"><span class="rvts21">This method further develops the ideas of the nonlinear TASing method.</span></p>
<p class="rvps10"><span class="rvts21">In many cases TASer needs to see the result of the Input modification immediately. Ideally, he should realize all the consequences of his decision right at the moment of making the decision. But in reality he has to spend precious time on inputting the decision and navigating with the Playback cursor to the end of the segment.</span></p>
<p class="rvps10"><span class="rvts21">In these cases you can leave the Playback navigation to Taseditor and just focus on editing. Taseditor will immediately react on any Input modification and display the new result.by bringing the Playback cursor to the end of the current segment.</span></p>
<p class="rvps10"><span class="rvts21">Since you feel the influence of every click, you build very high level of interconnection between TASer and the game. In such close interaction both TASer controls the game and the game urges TASer's actions into right direction. Of course, such high level of interdependency is not always useful, because it narrows your spectrum of thoughts, not allowing to look down on the game and apply the logic from different games and other fields of life.</span></p>
<p class="rvps10"><span class="rvts21">When you feel the influence of every click, you build very high level of interconnection between TASer and the game. In such close interaction both TASer controls the game and the game urges TASer's actions into right direction. Of course, such high level of interdependency is not always useful, because it narrows your spectrum of thoughts, not allowing to look down on the game and apply a logic from different games and other fields of life.</span></p>
<p class="rvps10"><span class="rvts21">However, when the current segment is simple and all optimality factors are already known (and you only need to find the perfect combination of them), it's useful to abstract from everything else and devote full attention to going over the possible options. This way you can test a lot of approaches before you become bored with the current segment.</span></p>
<p class="rvps10"><span class="rvts21">The Recording mode and the </span><span class="rvts21">"Follow cursor" checkbox</span><span class="rvts21"> should be off. The </span><span class="rvts21">"Auto-restore last position" checkbox should be on. The "Turbo seek" checkbox can be either disabled or enabled.</span></p>
<p class="rvps10"><span class="rvts21">The Recording mode should be off. The </span><span class="rvts21">"Auto-restore last position" checkbox should be on. </span><span class="rvts21">The "Turbo seek" and "Follow cursor" checkboxes are usually disabled, but may be enabled when necessary.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">General activity:</span></p>
<p class="rvps10"><span class="rvts48"><br/></span></p>
@ -74,8 +74,8 @@
<li class="rvps10"><span class="rvts21">Detect the end of the segment and leave the Playback cursor there.</span></li>
<li class="rvps10"><span class="rvts21">Suppose there's a mistake in the segment, weigh known factors of optimality and figure out the way to fix the mistake.</span></li>
<li class="rvps10"><span class="rvts21">The mouse cursor navigation to any frame of the current segment is practically instant.</span></li>
<li class="rvps10"><span class="rvts21">Edit the segment with the mouse. After every Input modification the Playback cursor will automatically replay the segment and stop at the frame that was considered to be the end of the segment. If necessary, you can shift the end of the segment by moving the Playback cursor manually (using the wheel). The steps 4 and 5 are constantly alternating until you consider the editing complete, according to the optimality criterion.</span></li>
<li class="rvps10"><span class="rvts21">[</span><span class="rvts34">optional step</span><span class="rvts21">] Save the finished approach to any free Bookmark, e.g. to slot </span><span class="rvts26">8</span><span class="rvts21">.</span></li>
<li class="rvps10"><span class="rvts21">Edit the segment with the mouse. After every Input modification the Playback cursor will automatically replay the segment and stop at the frame that was considered to be the end of the segment. If necessary, you can shift the end of the segment by moving the Playback cursor manually (e.g. using the mouse wheel). The steps 4 and 5 are constantly alternating until you consider the editing complete, according to the optimality criterion.</span></li>
<li class="rvps10"><span class="rvts21">[</span><span class="rvts34">optional step</span><span class="rvts21">] Save the finished approach to any free Bookmark, e.g. to slot </span><span class="rvts26">8</span><span class="rvts21"> or </span><span class="rvts26">7</span><span class="rvts21">.</span></li>
<li class="rvps10"><span class="rvts21">If this isn't the first approach to the segment, compare the new result to the best old result, using the optimality criterion. If the new approach is better (or it's the first approach), save the result to the Bookmark </span><span class="rvts26">9</span><span class="rvts21">. The slot </span><span class="rvts26">9</span><span class="rvts21"> will be used for keeping the best result of polishing the segment.</span></li>
<li class="rvps10"><span class="rvts21">If you still want to try different series of approaches, return to step 3, until you run out of ideas.</span></li>
<li class="rvps10"><span class="rvts21">[</span><span class="rvts34">optional step</span><span class="rvts21">] If you need more ideas, you can get some information from the past or the future by moving the Playback cursor to different segments of the movie or unpausing the emulator. When necessary, you can quickly draw a rough Input for watching the upcoming events of the game. But when returning to the segment modification you have to return the Playback cursor to the frame of the target event.</span></li>
@ -87,9 +87,9 @@
<p class="rvps10"><span class="rvts21">The main difference between this and previous method is that here the Playback cursor is generally located at the end of the current segment, and not at the beginning. Every time the Greenzone truncates, the Playback cursor seeks to the end of the segment, or rather to the frame where the segment end was before you modified the Input. If the Input modification also changed the frame of the target event, you can additionally move the light-blue cursor by mouse wheel if needed. But often there's no need for precise positioning, because you may only need to know the sequence of events occurring in the segment due to the Input modification.</span></p>
<p class="rvps10"><span class="rvts21">The replay of the current segment is automatically launched after every interim step of the Input modifications, even when you haven't finished the thought yet and are not ready to compare the current result to the result of the previous approach. Fortunately, when TASer is carried away by the editing process, he doesn't look at FCEUX screen and only clicks the Piano Roll, until his idea is implemented in the form of a full-fledged button combination. And when the Input is starting to become interesting, TASer pays attention to the emulator screen or the Memory Watch window.</span></p>
<p class="rvps10"><span class="rvts21">For example, when you need to create a jump over a pit, you first draw a long row of the </span><span class="rvts29">R</span><span class="rvts21"> button presses, and you don't care that at the same time the FCEUX screen displays how Mario runs and falls into the pit. You just draw some </span><span class="rvts29">A</span><span class="rvts21"> buttonpresses, then look at the emulator window and erase or draw additional </span><span class="rvts29">A</span><span class="rvts21"> buttonpresses, thus changing the beginning and the duration of the jump while watching the trajectory of Mario sprite.</span></p>
<p class="rvps10"><span class="rvts21">So, the process of polishing the Input in this method is a simultaneous editing and watching the segment. TASer gets in close informational contact with the game and soon starts to think synchronously with its responses. The game starts to help TASer filter and accept decisions. As a result, you may lose impartiality of your mind and stick to obvious decisions encouraged by the game. That's why you shouldn't use this method all the time, it's recommended to alternate it with the previous one.</span></p>
<p class="rvps10"><span class="rvts21">So, the process of polishing the Input in this method is a simultaneous editing and watching the segment. TASer gets in close informational contact with the game and soon starts to think synchronously with its responses. The game starts to help you filter and accept decisions. As a result, you may lose impartiality of your mind and stick to obvious decisions encouraged by the game. That's why you shouldn't use this method all the time, it's recommended to alternate it with the previous one.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">As with the simple nonlinear method, you can change the speed of emulation and get different variations of the semiautomatic method:</span></p>
<p class="rvps10"><span class="rvts21">Like with the simple nonlinear method, you can change the speed of emulation and get different variations of the semiautomatic method:</span></p>
<ol style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">editing and watching the changes in real time</span></li>
<li class="rvps10"><span class="rvts21">editing and watching the changes in slow motion</span></li>
@ -130,11 +130,11 @@
<p class="rvps14"><span class="rvts22"> </span><span class="rvts21">The insistent game feedback provokes TASer to discard some illogical but potentially advantageous approaches.</span></p>
<p class="rvps14"><span class="rvts22"> </span><span class="rvts21">Emphasis on the mouse controls.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">When the method is recommended to use:</span><span class="rvts21"> when you need to polish the segment already knowing its all optimality factors. E.g. for quick resyncing of the old Input this method is better than previous. Also it may be better for making an initial playthrough of a segment.</span></p>
<p class="rvps10"><span class="rvts25">When the method is recommended to use:</span><span class="rvts21"> when you need to polish the segment already knowing all of its optimality factors. E.g. for quick resyncing of the old Input this method is better than previous. Also it may be better for making an initial playthrough of a segment.</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"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Now that you know the main principles of working in Taseditor, you can begin TASing your game of interest. Practice is the best teacher, so you'll only learn all intricacies of the activity by engaging in real development of your own TAS.</span></p>
<p class="rvps10"><span class="rvts21">Now that you know the main principles of working in Taseditor, you can begin TASing your game of interest. Practice is the best teacher, so you'll only learn all intricacies of the activity by engaging in a real development of your own TAS.</span></p>
<p class="rvps10"><span class="rvts21">After several weeks of practical TASing it's recommended to reread the 3rd and 4th chapters of this Guide, in order to understand the text on a deeper level.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">In the next chapter: </span><a class="rvts27" href="ProgramCustomization.html">tweaking the program</a><span class="rvts21">.</span></p>

View File

@ -59,7 +59,7 @@
<p><span class="rvts19">Speedrunning synopsis</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">Thanks to the definite goal, creating tool-assisted speedruns is the easiest application of TASing, and relevant techniques are examined pretty well. Here you can find the summary of generic tasks emerging in the process of polishing the Input for a speedrun. Before reading this, make sure you've learned the materials in </span><a class="rvts27" href="TASingProcess.html">TASing Process</a><span class="rvts21"> and </span><a class="rvts27" href="TASingMethodology.html">TASing Methodology</a><span class="rvts21">.</span></p>
<p class="rvps10"><span class="rvts21">Thanks to having a definite goal, creating tool-assisted speedruns is the easiest application of TASing, and all relevant techniques are examined pretty well. Here you can find the summary of generic tasks emerging in the process of polishing the Input for a speedrun. Before reading this, make sure you've learned the materials in </span><a class="rvts27" href="TASingProcess.html">TASing Process</a><span class="rvts21"> and </span><a class="rvts27" href="TASingMethodology.html">TASing Methodology</a><span class="rvts21">.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Speedrunners have to search for the shortest way of completing every segment of the game. This process of searching consists of testing a multitude of approaches for playing the segment and finally choosing the best approach. Here we will discuss only the problem of choice.</span></p>
<p class="rvps10"><span class="rvts21">To simplify the problem, TASers usually compare only two approaches: the </span><span class="rvts25">new working</span><span class="rvts21"> approach and the </span><span class="rvts25">old best</span><span class="rvts21"> approach; all other old approaches are promptly forgotten (although the interesting ones can always be saved in the Bookmarks).</span></p>
@ -80,7 +80,7 @@
<li class="rvps10"><span class="rvts21">the state of the game at the same frame in the new and old movie </span><span class="rvts70">(string)</span></li>
</ul>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Respectively, when you're comparing any pair of approaches you are doing one of the three:</span></p>
<p class="rvps10"><span class="rvts21">Respectively, when you're comparing any pair of approaches you are doing one of the three possible actions:</span></p>
<p class="rvps10"><a class="rvts27" href="SpeedrunningSynopsis.html#CompareEvent">1. Comparing presence/absence of the event.</a></p>
<p class="rvps31"><a class="rvts57" href="SpeedrunningSynopsis.html#CompareEvent-A">A. By memory</a></p>
<p class="rvps31"><a class="rvts57" href="SpeedrunningSynopsis.html#CompareEvent-B">B. Using Bookmarks</a></p>
@ -89,7 +89,7 @@
<p class="rvps31"><a class="rvts57" href="SpeedrunningSynopsis.html#CompareTime-B">B. Using the green arrow</a></p>
<p class="rvps31"><a class="rvts57" href="SpeedrunningSynopsis.html#CompareTime-C">C. Using a Marker</a></p>
<p class="rvps31"><a class="rvts57" href="SpeedrunningSynopsis.html#CompareTime-D">D. Using Bookmarks</a></p>
<p class="rvps10"><a class="rvts27" href="SpeedrunningSynopsis.html#CompareState">3. Comparing the state of the game at the same frame.</a></p>
<p class="rvps10"><a class="rvts27" href="SpeedrunningSynopsis.html#CompareState">3. Comparing the state of the game at one and the same frame.</a></p>
<p class="rvps31"><a class="rvts57" href="SpeedrunningSynopsis.html#CompareState-A">A. By memory</a></p>
<p class="rvps31"><a class="rvts57" href="SpeedrunningSynopsis.html#CompareState-B">B. Using Bookmarks</a></p>
<p class="rvps30"><span class="rvts42"><br/></span></p>
@ -98,7 +98,7 @@
<p class="rvps10"><span class="rvts25">1. Comparing presence/absence of the event.</span></p>
<p class="rvps10"><span class="rvts21">Choose the approach where the needed event happens / unneeded event doesn't happen. The occurrence of the event is only the first (and often easy) step in creating the Input for current segment, and next step is to try speeding up the time of the occurrence.</span></p>
<p class="rvps10"><span class="rvts37">The search for approaches goes on until the first successful approach is found, or until you're tired (then the event is considered to be unfeasible).</span></p>
<p class="rvps10"><span class="rvts21">Programming analogy: comparing two Booleans, comparing &nbsp;two arrays of Booleans.</span></p>
<p class="rvps10"><span class="rvts70">Programming analogy: comparing two Booleans, comparing &nbsp;two arrays of Booleans.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><a name="CompareEvent-A"></a>
<span class="rvts21">A. Most of time it's enough to simply keep in mind the fact that target event didn't occur in previous approaches. Example: </span><a class="rvts27" href="SemiautomaticTASing.html#FindStartButtonPress">finding the </a><a class="rvts72" href="SemiautomaticTASing.html#FindStartButtonPress">Start buttonpress</a><span class="rvts21">.</span></p>
@ -111,41 +111,41 @@
<p class="rvps10"><span class="rvts25">2. Comparing the time of occurrence.</span></p>
<p class="rvps10"><span class="rvts21">Choose the approach where the target event occurs earlier. The time of occurrence is defined by the frame in which the event can be detected, while in previous frame it cannot be detected. The number of this frame is found by bringing the Playback cursor to the frame and watching the FCEUX screen (or Memory Watch) for confirming.</span></p>
<p class="rvps10"><span class="rvts37">The search for approaches goes on until you're tired, or until all possible types of approaches are exhausted (then the current best approach is considered to be frame perfect, until new factors are found).</span></p>
<p class="rvps10"><span class="rvts21">Programming analogy: comparing two Integer Numbers.</span></p>
<p class="rvps10"><span class="rvts70">Programming analogy: comparing two Integer Numbers.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><a name="CompareTime-A"></a>
<span class="rvts21">A. For simplest segments and small subsegments it may be enough to just keep in mind current fastest frame number and compare results of all new approaches with this number. But in general it's not recommended to rely on human memory. Details: </span><a class="rvts27" href="TASingProcess.html#EndOfSegment">TASing Process</a><span class="rvts21">.</span></p>
<span class="rvts21">A. For simplest segments and small subsegments it may be enough to just keep in mind the current fastest frame number and compare results of all new approaches with this number. But in general it's not recommended to rely on human memory. Details: </span><a class="rvts27" href="TASingProcess.html#EndOfSegment">TASing Process</a><span class="rvts21">.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><a name="CompareTime-B"></a>
<span class="rvts21">B. On simple segments you can refer to the green arrow of Taseditor. When using it you're supposed to always leave the Playback cursor at the frame of target event (which is only natural). Thus if the new frame of target event is located above the green arrow, it means the new approach is faster than previous approach. Details:</span><a class="rvts27" href="NonlinearTASing.html#GreenArrow">TASing Methodology</a><span class="rvts21">.</span></p>
<span class="rvts21">B. On simple segments you can refer to the green arrow of Taseditor. When using it, you're supposed to always leave the Playback cursor at the frame of target event (which is only natural). Thus if the new frame of target event is located above the green arrow, it means the new approach is faster than previous approach. Details:</span><a class="rvts27" href="NonlinearTASing.html#GreenArrow">TASing Methodology</a><span class="rvts21">.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><a name="CompareTime-C"></a>
<span class="rvts21">C. On complex segments use an unbound Marker that always points at current fastest frame number in the Piano Roll. Every time you beat the old result you're supposed to manually move the Marker higher. Thus if the new frame of target event is located above the Marker, it means the new approach is faster than the old best approach. Details: </span><a class="rvts27" href="ProgramCustomization.html#BindMarkerstoInput">Program Customization</a><span class="rvts21">.</span></p>
<span class="rvts21">C. On complex segments use an unbound Marker that always points at the current fastest frame number in the Piano Roll. Every time you beat the old result you're supposed to manually move the Marker higher. Thus if the new frame of target event is located above the Marker, it means the new approach is faster than the old best approach.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><a name="CompareTime-D"></a>
<span class="rvts21">D. On segments of any level of complexity it's recommended to use Bookmarks that are displayed in the icons column of the Piano Roll. Every time you beat the old result you're supposed to manually save current approach to the same Bookmark slot, replacing the old best approach stored there. Thus if the new frame of target event is located above the Bookmark icon, it means the new approach is faster than the old best approach.</span></p>
<span class="rvts21">D. On segments of any level of complexity it's recommended to use Bookmarks that are displayed in the icons column of the Piano Roll. Every time you beat the old result you're supposed to manually save the current approach to the same Bookmark slot, replacing the old best approach stored there. Thus if the new frame of target event is located above the Bookmark icon, it means the new approach is faster than the old best approach.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><a name="CompareState"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">3. Comparing the state of the game at the same frame.</span></p>
<p class="rvps10"><span class="rvts21">Choose the approach where properties of the game are more advantageous in a whole. This type of comparison is useful when you need to evaluate compound in-game situations. For example, in Formula 1 racing you have to care both about being as fast as possible and wearing tyres as little as possible, so you need to find an optimal balance on each segment of the track instead of just simply hurrying up.</span></p>
<p class="rvps10"><span class="rvts21">Here the segment has defined end frame, and every new test is supposed to replay the segment up to that frame. Taseditor stores this frame number in the form of the green arrow, which automatically pauses emulation when you watch new approaches. So TASer only needs to edit Input (creating new approaches), launch replaying, wait for the stopping and evaluate the result (judging by FCEUX screen or Memory Watch).</span></p>
<p class="rvps10"><span class="rvts21">Choose the approach where properties of the game are more advantageous in a whole. This type of comparison is useful when you need to evaluate compound in-game situations. For example, in Formula 1 racing you have to care both about being as fast as possible and wearing tyres as little as possible, so you need to find an optimal balance on each segment of the track instead of simply rushing.</span></p>
<p class="rvps10"><span class="rvts21">Here our segment has defined end frame, and every new test is supposed to replay the segment up to that frame. Taseditor stores this frame number in the form of the green arrow, which automatically pauses emulation when you watch new approaches. So TASer only needs to edit Input (creating new approaches), launch replaying, wait for the stopping and evaluate the result (judging by FCEUX screen or Memory Watch).</span></p>
<p class="rvps10"><span class="rvts37">The search of approaches goes on until you're tired, or until all possible types of approaches are exhausted (then the current best approach is considered to be perfect, until new factors are found).</span></p>
<p class="rvps10"><span class="rvts21">Programming analogy: comparing two Strings, comparing &nbsp;two arrays of Integer Numbers.</span></p>
<p class="rvps10"><span class="rvts70">Programming analogy: comparing two Strings, comparing &nbsp;two arrays of Integer Numbers.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><a name="CompareState-A"></a>
<span class="rvts21">A. For simple segments it may be enough to just keep in mind the value of the most important property of the game state achieved in the old best approach. Every time you watch the replaying of a new approach, you can compare results of the new approach with this value. If you decide the new value is better, you have to memorize it in place of old value. Example: </span><a class="rvts27" href="NonlinearTASing.html#LuckManipulation">luck manipulation</a><span class="rvts21">.</span></p>
<p class="rvps10"><span class="rvts21">When there's more than one important property, it's not recommended to rely on human memory.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><a name="CompareState-B"></a>
<span class="rvts21">B. On complex segments and especially on gigantic segments (with the size of a whole level of the game) use Bookmarks that store alternative branches of the movie. The best approach for playing the segment is saved into one Bookmark slot and the new approach is saved into another slot. Then you can easily switch between these slots and compare values of each property of the game state. In addition, you can point the mouse cursor to respective Bookmarks to see screenshots of the game state and visually compare their properties with current image on FCEUX screen.</span></p>
<p class="rvps10"><span class="rvts21">To display important RAM data on screenshots you should use Lua graphical output, then Memory Watch window won't be required to judge important properties, and you will be able to successfully judge by screenshots only. Details: </span><a class="rvts27" href="ProgramCustomization.html#DisplayBranchScreenshots">Program Customization</a><span class="rvts21">.</span></p>
<span class="rvts21">B. On complex segments and especially on gigantic segments (e.g. with the size of a whole level of the game) use Bookmarks that store alternative branches of the movie. The best approach for playing the segment is saved into one Bookmark slot and the new approach is saved into another slot. Then you can easily switch between these slots and compare values of each property of the game state. In addition, you can point the mouse cursor to respective Bookmarks to see screenshots of the game state and visually compare their properties with current image on FCEUX screen.</span></p>
<p class="rvps10"><span class="rvts21">To display important RAM data on screenshots you should use Lua graphical output, then Memory Watch window won't be required to judge about hidden properties, and you will be able to successfully judge by screenshots only. Details: </span><a class="rvts27" href="ProgramCustomization.html#DisplayBranchScreenshots">Program Customization</a><span class="rvts21">.</span></p>
<p class="rvps10"><span class="rvts21">In the situation when some properties in the new approach are better and some others are worse you'll have to thoroughly weigh all of them (either in your mind or using a Lua-powered aggregate formula) and then decide which state of the game is better.</span></p>
<p class="rvps10"><span class="rvts21">Every time you beat the old result you're supposed to manually save the new approach to the same Bookmark slot, replacing the old best approach stored there.</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"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">After finding the fastest approach of playing the segment a good TASer is expected to improve the entertainment value of the play through the segment. The optimality criteria in such activity may be very diverse, but the general requirement is to keep the same time of playing through the segment.</span></p>
<p class="rvps10"><span class="rvts21">After finding the fastest approach of playing the segment, a good TASer is expected to improve the entertainment value of the play through the segment. The optimality criteria in such activity may be very diverse, but the general requirement is to keep the same time of playing through the segment.</span></p>
<p class="rvps10"><span class="rvts21">Alternatively, you can postpone the entertainment improvement of the segment and proceed to the next.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>

View File

@ -56,8 +56,8 @@
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps10"><span class="rvts21">This section of the documentation describes all ideas put into the Taseditor and reveals major details of the final implementation of TAS Editor 1.0. For more details check the source code of the program (in C++).</span></p>
<p class="rvps10"><span class="rvts21">Taseditor is an open source program and is distributed under the </span><a class="rvts27" href="http://en.wikipedia.org/wiki/MIT_License" target="_blank">MIT</a><span class="rvts21"> license which allows unrestricted use. The license was chosen to encourage a modification and porting Taseditor to another platforms.</span></p>
<p class="rvps10"><span class="rvts21">You can download the source code of the FCEUX 2.2.0 emulator with built-in Taseditor from the official SVN repository: </span><a class="rvts27" href="http://sourceforge.net/p/fceultra/code/" target="_blank">http://sourceforge.net/p/fceultra/code/</a></p>
<p class="rvps10"><span class="rvts21">Taseditor is an open source program and is distributed under the </span><a class="rvts27" href="http://en.wikipedia.org/wiki/MIT_License" target="_blank">MIT</a><span class="rvts21"> license which allows unrestricted use. The license was chosen to encourage modification and porting to another platforms.</span></p>
<p class="rvps10"><span class="rvts21">You can download the source code of the FCEUX emulator with built-in Taseditor from the official SVN repository: </span><a class="rvts27" href="http://sourceforge.net/p/fceultra/code/" target="_blank">http://sourceforge.net/p/fceultra/code/</a></p>
<p class="rvps10"><span class="rvts21">To work with SVN you'll need some SVN client program, like </span><a class="rvts27" href="http://en.wikipedia.org/wiki/Tortoise_SVN" target="_blank">TortoiseSVN</a><span class="rvts21">.</span></p>
<p class="rvps10"><span class="rvts21">The source code of Taseditor is well-commented, and to understand the code you only need basic skills of programming in C++ under Win32 API.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>

View File

@ -59,12 +59,12 @@
<p><span class="rvts19">TASing Methodology</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">This chapter is dedicated to the principal activity in TASing the way of creating an optimal Input for any given segment of the movie. TASes look so shiny exactly because of persistent manual polishing of Input. The size of the segment can be anything, criteria and factors of optimality can vary, but the method is basically one and the same</span><span class="rvts21">: retry all sorts of approaches and choose the best one. The only question is how to do it with minimum time and effort.</span></p>
<p class="rvps10"><span class="rvts21">This chapter is dedicated to the principal activity in TASing the way of creating an optimal Input for any given segment of the movie. TASes look so shiny exactly because of persistent manual polishing of Input. The size of working segment can be anything, criteria and factors of optimality can vary, but the method is basically one and the same</span><span class="rvts21">: retry all sorts of approaches and choose the best one. The only question is how to do it with minimum time and effort.</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="rvts34">Gamers</span><span class="rvts21"> erroneously think that to make a TAS you only have to complete the game once, using savestates when you make some fatal mistakes resulting in inability to complete current segment (for example, death of the character).</span></li>
<li class="rvps10"><span class="rvts34">Newbie TASers</span><span class="rvts21"> understand that to make a beautiful TAS you have to revert and fix all noticed mistakes (e.g. such minor flaws as stumbling over a threshold). They also complete each segment only once, but spend more time than regular players, because of saving and loading savestates much more often. For TASing simple games this can be sufficient.</span></li>
<li class="rvps10"><span class="rvts34">Experienced TASers</span><span class="rvts21"> know that to make a perfect TAS it's not enough to fix all noticed mistakes. You also have to fix unnoticed mistakes. Consider unknown factors. Approach the task from an unobvious side. To do all this they play through the same segment several times, both fixing all noticed mistakes and somehow trying not to make unnoticeable mistakes.</span></li>
<li class="rvps10"><span class="rvts34">Gamers</span><span class="rvts21"> erroneously think that to make a TAS you only have to complete the game once, using savestates when you make some fatal mistakes (those resulting in inability to complete current segment, for example, death of the character).</span></li>
<li class="rvps10"><span class="rvts34">Newbie TASers</span><span class="rvts21"> understand that to make a beautiful TAS you have to revert and fix </span><span class="rvts25">all</span><span class="rvts21"> noticed mistakes (e.g. even such minor flaws as stumbling over a threshold). They also complete each segment only once, but spend more time than regular players, because of saving and loading savestates much more often. For TASing simple games this can be sufficient.</span></li>
<li class="rvps10"><span class="rvts34">Experienced TASers</span><span class="rvts21"> know that to make a perfect TAS it's not enough to fix all noticed mistakes. You also have to fix unnoticed mistakes. Consider unknown factors. Approach the task from an unobvious side. To do all this they play through the same segment several times, both fixing all noticed mistakes and trying to somehow avert unnoticeable mistakes.</span></li>
</ul>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">It's rather difficult to convince yourself to spend time on alternative ways to play through the segment once it's already completed and all obvious mistakes are already fixed. After achieving the current in-game goal people usually want to set another in-game goal. But you must remember that TASer's goal is different from player's goals. So try to abstract away from the game rules and not to retreat from the segment until you complete real goal, not just player's small goal.</span></p>
@ -86,37 +86,37 @@
<p class="rvps10"><span class="rvts25">1. </span><span class="rvts21">Realizing a mistake happens either when watching the movie in Read-Only mode or right when recording/editing the Input.</span></p>
<div class="rvps10"><table width="100%" border="1" cellpadding="6" cellspacing="2" style="border-color: #000000; border-style: solid;">
<tr valign="top">
<td style="border-color: #000000; border-style: solid; height: 15px;"><p class="rvps10"><span class="rvts41">Comment: </span><span class="rvts42">Instead of detecting a tangible mistake TASers often just assume that current segment is still improvable. It's always wise to doubt the perfectness of current result and try experimenting with the Input sometimes you indeed find unrealized possibilities.</span></p>
<td style="border-color: #000000; border-style: solid; height: 15px;"><p class="rvps10"><span class="rvts41">Comment: </span><span class="rvts42">Instead of detecting a tangible mistake TASers often just assume that current segment is still improvable. It's always wise to doubt the perfectness of current result and try experimenting with the Input sometimes you indeed find unused possibilities.</span></p>
</td>
</tr>
</table>
</div>
<p class="rvps10"><a name="loop"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">2. </span><span class="rvts21">The means of solving the mistake are either immediately obvious or are found experimentally. In rare cases you have to resort to calculations and comparisons. A correctly chosen segment usually encompasses all key factors of optimality. The information from previous or next segments is rarely required.</span></p>
<p class="rvps10"><span class="rvts25">2. </span><span class="rvts21">The means of solving the mistake are either immediately obvious or are found experimentally. In rare cases you have to resort to calculations and comparisons. A correctly chosen segment usually encompasses all key factors of optimality. The information from previous or next segments is rarely needed.</span></p>
<div class="rvps10"><table width="100%" border="1" cellpadding="6" cellspacing="2" style="border-color: #000000; border-style: solid;">
<tr valign="top">
<td style="border-color: #000000; border-style: solid; height: 15px;"><p class="rvps10"><span class="rvts41">Comment: </span><span class="rvts42">Sometimes while fixing one mistake we unwittingly create another mistake. In this case the optimization process would go in wrong direction, but fortunately such situations are extremely rare in TASing, because videogames are much more obvious and linear than real life, so player can find all factors and correct criterion of optimality. Taseditor additionally simplifies the process by data visualization.</span></p>
<td style="border-color: #000000; border-style: solid; height: 15px;"><p class="rvps10"><span class="rvts41">Comment: </span><span class="rvts42">Sometimes while fixing one mistake we unwittingly create another mistake. In this case the optimization process would go in wrong direction, but fortunately such situations are extremely rare in TASing, because videogames are much more straightforward than real life, so player can find all factors and an unambiguous criterion of optimality. Taseditor additionally simplifies the process by data visualization.</span></p>
</td>
</tr>
</table>
</div>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">3. </span><span class="rvts21">The ability to navigate to the place of making the mistake is the essential distinction between TASing and normal speedrunning. Regular players can detect the mistake, but it's TASers who always return back to correct it.</span></p>
<p class="rvps10"><span class="rvts21">In traditional method of TASing the navigation may take noticeable amount of time and effort. Taseditor makes the navigation lightning fast.</span></p>
<p class="rvps10"><span class="rvts25">3. </span><span class="rvts21">The ability to navigate to the place of making the mistake is the essential distinction between TASing and normal speedrunning. Regular players can detect the mistake post factum, but it's TASers who always return back to correct it.</span></p>
<p class="rvps10"><span class="rvts21">In traditional method of TASing the navigation may take noticeable amount of time and effort. Taseditor makes the navigation much faster.</span></p>
<div class="rvps10"><table width="100%" border="1" cellpadding="6" cellspacing="2" style="border-color: #000000; border-style: solid;">
<tr valign="top">
<td style="border-color: #000000; border-style: solid; height: 15px;"><p class="rvps10"><span class="rvts41">Comment: </span><span class="rvts42">Sometimes the place of making the mistake is located long before the segment where it is revealed. In this case you have to find the segment affecting the mistake and edit it according to the information given by the played segment. And in this case the speed of navigation is even more important.</span></p>
<td style="border-color: #000000; border-style: solid; height: 15px;"><p class="rvps10"><span class="rvts41">Comment: </span><span class="rvts42">Sometimes the place of making the mistake is located long before the segment where it is revealed. In this case you have to find the segment affecting the mistake and edit it according to the information given by the played segment. And in this case the speed of navigation between those two segments is even more important.</span></p>
</td>
</tr>
</table>
</div>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts25">4. </span><span class="rvts21">Applying modifications to Input is how you make your thoughts real. The less the delay between an idea and its implementation is, the better.</span></p>
<p class="rvps10"><span class="rvts21">In traditional method of TASing the Input modification takes longer, because in addition to rewriting erroneous frames you also have to rewrite adjacent frames &nbsp;In Taseditor this is mostly not necessary.</span></p>
<p class="rvps10"><span class="rvts21">In the traditional method of TASing the Input modification generally takes longer, because in addition to rewriting erroneous frames you also have to rewrite adjacent frames &nbsp;In Taseditor this is often not necessary.</span></p>
<div class="rvps10"><table width="100%" border="1" cellpadding="6" cellspacing="2" style="border-color: #000000; border-style: solid;">
<tr valign="top">
<td style="border-color: #000000; border-style: solid; height: 15px;"><p class="rvps10"><span class="rvts41">Comment: </span><span class="rvts42">Since any Input modification entails a change in game flow, sometimes you still have to resync the old Input that follows the place of of fixing the mistake.</span></p>
<td style="border-color: #000000; border-style: solid; height: 15px;"><p class="rvps10"><span class="rvts41">Comment: </span><span class="rvts42">Since any Input modification entails a change in the game flow, sometimes even in Taseditor you have to resync the old Input that follows the place of fixing mistake.</span></p>
</td>
</tr>
</table>
@ -125,13 +125,13 @@
<p class="rvps10"><span class="rvts25">5. </span><span class="rvts21">To see the outcome you need to resume playing the movie from the beginning of current segment of right from the frame of fixing the mistake. There's no need to re-check previous segments of the movie, because the mistake fixing affects only subsequent events.</span></p>
<div class="rvps10"><table width="100%" border="1" cellpadding="6" cellspacing="2" style="border-color: #000000; border-style: solid;">
<tr valign="top">
<td style="border-color: #000000; border-style: solid; height: 15px;"><p class="rvps10"><span class="rvts41">Comment: </span><span class="rvts42">Although, when you're making an entertaining playthrough instead of a pure speedrun, after fixing a mistake (e.g. making the movement trajectory more smooth) you should ensure that this correction fits it with the general sequence of in-game events, so it's advised to rewatch some previous events together with current segment.</span></p>
<td style="border-color: #000000; border-style: solid; height: 15px;"><p class="rvps10"><span class="rvts41">Comment: </span><span class="rvts42">Although, when you're making an entertaining playthrough instead of a pure speedrun, after fixing a mistake (e.g. making the movement trajectory more smooth) you should ensure that this correction fits with the general sequence of in-game events, so it's recommended to rewatch some previous events together with the current segment.</span></p>
</td>
</tr>
</table>
</div>
<p class="rvps10"><span class="rvts21">You have to watch current segment up to its end, that is, to the moment when the target event occurs, so that you can safely apply the optimality criterion. Because the correction may seem profitable at first but appear worse in the end.</span></p>
<p class="rvps10"><span class="rvts21">After evaluating the outcome the mistake is either considered to be fixed/non-existent, or you have to return to </span><a class="rvts27" href="TASingMethodology.html#loop">step 2</a><span class="rvts21"> and rethink the situation.</span></p>
<p class="rvps10"><span class="rvts21">You almost always have to watch the current segment up to its end, that is, to the moment when the target event occurs, so that you can confidently apply the optimality criterion. Because the correction may seem profitable at first but appear worse in the end.</span></p>
<p class="rvps10"><span class="rvts21">After evaluating the outcome, the mistake is either considered to be fixed/non-existent, or you have to return to </span><a class="rvts27" href="TASingMethodology.html#loop">step 2</a><span class="rvts21"> and rethink the situation.</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="linear-tasing"></a>
@ -142,10 +142,10 @@
<li class="rvps10"><span class="rvts21">TASer sequentially types the Input into frames pointed by the Playback cursor. You see the outcome of the committed Input next frame (or sometimes in several frames). Experienced TASers create a new savestate after each </span><span class="rvts37">hard-to-reproduce action</span><span class="rvts21">, so they are able to return back without the need to replay the whole segment from the beginning.</span></li>
<li class="rvps10"><span class="rvts21">To correct a mistake, TASer returns to the supposed place of making the mistake and rerecords the whole Input, starting from the frame that needs to be changed. If there was a savestate created at this frame, you can instantly load the savestate in Read+Write mode and begin typing buttonpresses right away. But if you only have a savestate created at some distance before the frame, there are two options. </span><span class="rvts34">Option 1:</span><span class="rvts21"> load the nearest savestate in Read-Only mode and replay the movie up to the needed frame, then switch back to Read+Write mode and start the correction, thus not touching the Input in the interval from the savestate frame to the mistake frame. </span><span class="rvts34">Option 2:</span><span class="rvts21"> just load the nearest savestate in Read+Write mode and repeat the old Input by memory, thus rewriting it up to the needed frame, and then start the correction. The 2nd way is used more often, because after the nearest savestate there's usually an </span><span class="rvts37">easy-to-reproduce Input</span><span class="rvts21"> (e.g. simply holding </span><span class="rvts29">R + B</span><span class="rvts21">). Also, upon arriving to the supposed frame of the mistake, an experienced TASer mechanically creates a savestate (just in case!), so next time he will be able to return directly to the frame, without wasting time on navigation. Such a prudence makes sense, because mistakes are seldom fixed at the first attempt, usually you need to repeatedly rerecord the same section of Input, starting from about the same frame.</span></li>
<li class="rvps10"><span class="rvts21">The disadvantages of the traditional method clearly reveal when you need to see a distant result of your Input (for example, you press the button now, but the roulette only stops in several seconds). In such cases TASer makes a savestate before entering the Input, records the decisive Input and makes a savestate after it, then unpauses the emulator and carelessly (suboptimally) plays through the game up to the point of seeing the result. If the result is satisfactory, TASer loads the savestate made after the decisive Input and records an optimal playthrough, already being sure in successful outcome. And if the result is unsatisfactory, TASer loads the initial savestate, changes the decisive Input and repeats previous actions (creates a savestate after the Input and hastily plays up to the result). And this process may go for a long while.</span></li>
<li class="rvps10"><span class="rvts21">In order to copy an old Input (for example, the intricate acceleration of Mario at the beginning of every level), TASer either learns the button combination by heart or copies it in parts by making several jumps between the source and the destination. First the game is sent to the place of old Input (by loading the savestate prepared at that frame) to watch the replay in Read-Only mode and memorize a few buttonpresses, then it's sent to the current segment (by loading the latest savestate in Read+Write mode) to lay out the buttonpresses. This way sounds tiresome, but if you keep moving both savestates a bit forward after every jump, the navigation between source and destination becomes rather quick. Still, when TASers need to copy a long sequence of buttonpresses, they use an external editor of Input, allowing to copy/paste. But the downside is that switching contexts is very distracting, so often it's less troublesome to just copy the Input manually.</span></li>
<li class="rvps10"><span class="rvts21">To examine the current progress, TASer makes a savestate, turns off the Recording and loads the savestate left at the beginning of current level (usually it's the slot assigned to a rarely used key, such as </span><span class="rvts26">F10</span><span class="rvts21">). Then he unpaused the emulator and watches the movie like an outsider. To continue the recording, he switches to Read+Write mode and returns directly to the latest recorded frame by loading the latest savestate (usually it's the most used slot, like </span><span class="rvts26">F1</span><span class="rvts21">). If while watching TASer decides to modify the old Input, he makes a savestate at this point, switches to Read+Write and loads the just created savestate. Beforehand, you should make sure the last state of the movie is saved to both </span><span class="rvts26">F1</span><span class="rvts21"> and another slot that won't be used in your experiments with the old Input. This is necessary in case your experiments fail, so you could restore the old movie even if the </span><span class="rvts26">F1</span><span class="rvts21"> slot becomes overwritten in the course of the experiments.</span></li>
<li class="rvps10"><span class="rvts21">So, the majority of the 10 available slots is used for navigation between different moments of the game. Or, using Taseditor's terms, they are used for Playback cursor navigation along the movie. The 10 slots are more than enough to teleport among all places of interest, even when current segment is very large. Usually 3-5 slots are enough. Experienced TASers juggle these slots with astounding speed.</span></li>
<li class="rvps10"><span class="rvts21">A couple of another slots are used to store alternative strategies of playing. When you don't know which approach to playing a large segment (e.g. a whole level of the game) will be better, you first polish the 1st approach and save it to a separate slot (say, </span><span class="rvts26">F8</span><span class="rvts21">), then you polish the 2nd approach and save it to an adjacent slot (e.g. </span><span class="rvts26">F7</span><span class="rvts21">). After that you alternately load these slots (or even alternately watch the two branches of the movie) and choose the best one, save it to </span><span class="rvts26">F1</span><span class="rvts21"> and continue TASing in this branch.</span></li>
<li class="rvps10"><span class="rvts21">In order to copy an old Input (for example, the complex acceleration of Mario at the beginning of every level), TASer either learns the button combination by heart or copies it in parts by making several jumps between the source and the destination. First the game is sent to the place of old Input (by loading the savestate prepared at that frame) to watch the replay in Read-Only mode and memorize a few buttonpresses, then it's sent to the current segment (by loading the latest savestate in Read+Write mode) to lay out the buttonpresses. This way sounds tiresome, but if you keep moving both savestates a bit forward after every jump, the navigation between source and destination becomes rather quick. Still, when TASers need to copy a long sequence of buttonpresses, they use an external editor of Input, allowing to copy/paste. But the downside is that switching contexts is very distracting, so often it's less troublesome to just copy the Input manually.</span></li>
<li class="rvps10"><span class="rvts21">To examine the current progress, TASer makes a savestate, turns off the Recording and loads the savestate left at the beginning of current level (usually it's the slot assigned to a rarely used key, such as </span><span class="rvts26">F10</span><span class="rvts21">). Then he unpaused the emulator and watches the movie like an outsider. To continue the recording, he switches to Read+Write mode and returns directly to the latest recorded frame by loading the latest savestate (usually it's the most often used slot, like </span><span class="rvts26">F1</span><span class="rvts21">). If while watching TASer decides to modify the old Input, he makes a savestate at this point, switches to Read+Write and loads the just created savestate. Beforehand, you should make sure the last state of the movie is saved to both </span><span class="rvts26">F1</span><span class="rvts21"> and another slot that won't be used in your experiments with the old Input. This is necessary in case your experiments fail, so you could restore the old movie even if the </span><span class="rvts26">F1</span><span class="rvts21"> slot becomes overwritten in the course of the experiments.</span></li>
<li class="rvps10"><span class="rvts21">So, the majority of the 10 available slots is used for navigation between different moments of the game. Or, using Taseditor's terms, they are used for Playback cursor navigation along the movie. The 10 slots are more than enough to teleport back and forth among all places of interest, even when current segment is very large. Usually 3-5 slots are enough. Experienced TASers juggle these slots with astounding speed.</span></li>
<li class="rvps10"><span class="rvts21">A couple of another slots are used to store alternative strategies of playing. When you don't know which approach to playing a large segment (e.g. a whole level of the game) will be better, you first polish the 1st approach and save it into a separate slot (say, </span><span class="rvts26">F8</span><span class="rvts21">), then you polish the 2nd approach and save it into an adjacent slot (e.g. </span><span class="rvts26">F7</span><span class="rvts21">). After that you can alternately load these slots (or even alternately watch the two branches of the movie) and choose the best one, save it to </span><span class="rvts26">F1</span><span class="rvts21"> and continue TASing in this branch.</span></li>
</ul>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">As you see, almost everything in the traditional method of TASing is done using savestates (Bookmarks). In Taseditor some of their functions are replaced by the Greenzone and the History Log, yet Bookmarks still play important role, allowing to keep alternative branches of the movie in a single project. The Playback cursor navigation now can be done faster by either drag'n'drop or mouse wheel. In fact, now you don't need to put Playback cursor to the frame of modification, you can just scroll the Piano Roll to the place and change the Input by mouse.</span></p>

View File

@ -71,8 +71,8 @@
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">An adequate segment (subtask) is supposed to give TASer a consistent goal and simple means to reach it.</span></p>
<p class="rvps10"><span class="rvts21">The </span><span class="rvts25">goal</span><span class="rvts21"> of a segment playthrough is usually to achieve certain in-game event. For example, the goal of playing through the whole game is the event when "THE END" text appears on the screen. The goal of one level can be such event as "the value of the level counter in RAM was increased" or simply "the screen faded at the end of current level". And the goal of a small segment may be something like "the character successfully landed on the other side of the pit". These intermediate goals are defined by the context.</span></p>
<p class="rvps10"><span class="rvts21">Based on the goal, TASer defines the </span><span class="rvts25">optimality criterion</span><span class="rvts21"> in mind. The criterion is the rule which let's you compare any two versions of playing through the current segment of the game. When you're TASing, it's not enough to simply reach the goal, you have to try many approaches to reaching it, and then choose the best approach of all. For example, in a speedrun the best approach to playing a segment is usually the one in which the target event occurs as early as possible. E.g. if the 1st approach to playing the segment made the event occur at frame 350, and the 2nd approach made it appear at frame 340, then the 2nd approach is better than the 1st, and the final movie should contain exactly the 2nd approach.</span></p>
<p class="rvps10"><span class="rvts21">There are too many </span><span class="rvts25">means</span><span class="rvts21"> for reaching the target event. In theory, any gameplay aspect (including those not planned by developers) may help or impede the progress in some way. So, to cope with this vague multitude of possibilities you should regard all aspects of the game as </span><span class="rvts21">optimality factors</span><span class="rvts21">.</span></p>
<p class="rvps10"><span class="rvts21">Based on the goal, TASer defines the </span><span class="rvts25">optimality criterion</span><span class="rvts21"> in mind. The criterion is the rule which lets you compare any two versions of playing through the current segment of the game. When you're TASing, it's not enough to simply reach the goal, you have to try many approaches to reaching it, and then choose the best approach of all. For example, in a speedrun the best approach to playing a segment is usually the one in which the target event occurs as early as possible. E.g. if the 1st approach to playing the segment made the event occur at frame 350, and the 2nd approach made it appear at frame 340, then the 2nd approach is better than the 1st, and the final movie should contain exactly the 2nd approach.</span></p>
<p class="rvps10"><span class="rvts21">There's a lot of </span><span class="rvts25">means</span><span class="rvts21"> for reaching the target event. In theory, any gameplay aspect (including those not planned by developers) may help or impede the progress in some way. So, to cope with this vague multitude of possibilities you should regard all aspects of the game as </span><span class="rvts21">optimality factors</span><span class="rvts21">.</span></p>
<p class="rvps10"><img align="right" alt="" style="padding : 6px;" src="lib/smb-zigzag.png"/></p>
<p class="rvps10"><span class="rvts21">An </span><span class="rvts25">optimality factor</span><span class="rvts21"> is an aspect of the game that directly affects optimality of playing current segment. The word "directly" implies a monotonous dependence of outcome from applying the factor. For example, on this picture there's no monotonous dependence between the distance to finish and the duration of holding </span><span class="rvts29">Right</span><span class="rvts21">. Pressing the same </span><span class="rvts29">R</span><span class="rvts21"> button either makes Mario be closer to the finish, or moves him away, depending on his position.</span></p>
<p class="rvps10"><span class="rvts21">When people perceive such segment in a whole, it's difficult to guess the best moment to release the </span><span class="rvts29">R</span><span class="rvts21"> button, when to press the </span><span class="rvts29">L</span><span class="rvts21"> button and so on. So, in order to simplify the understanding of complex dependencies (and thus reveal factors), such segments should be broken into several subsegments.</span></p>
@ -85,7 +85,7 @@
<div class="rvps10"><table width="100%" border="1" cellpadding="6" cellspacing="2" style="border-color: #000000; border-style: solid;">
<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">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 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, 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>
@ -98,7 +98,7 @@
<td valign="top" style="border-color: #000000; border-style: solid; height: 426px;"><p class="rvps10"><span class="rvts21">Now let's take a look at another extreme. When segment is too small, its optimality criterion may contradict the final goal of the TAS.</span></p>
<p class="rvps10"><span class="rvts21">First, if you get carried away by maximizing speed and acceleration in equal intervals between </span><span class="rvts34">every next hundred of pixels</span><span class="rvts21">, you may forget about the shortcut pipe, because diving into pipes resets speed value to zero, which contradicts with the goal of current segment. In short term the diving factor is disadvantageous for a speedrunner, and its long-term profit may be overlooked when you're busy with habitual actions.</span></p>
<p class="rvps10"><img align="right" alt="" style="padding : 6px;" src="lib/smb-segments.gif"/></p>
<p class="rvps10"><span class="rvts21">In this case the segment was chosen without much foresight, and as a consequence it sprouted wrong criterion of optimality ("the frame counter at the event </span><span class="rvts34">X = 200</span><span class="rvts21"> must be minimal"). Here the segment should end at the moment when </span><span class="rvts34">any </span><span class="rvts40">Down</span><span class="rvts34"> button press will start diving animation</span><span class="rvts21">.</span></p>
<p class="rvps10"><span class="rvts21">In this case the segment was chosen without much foresight, and as a consequence it sprouted wrong criterion of optimality ("the frame counter at the event </span><span class="rvts34">X = 200</span><span class="rvts21"> must be minimal"). Instead, the segment should end at the moment when </span><span class="rvts34">any </span><span class="rvts40">Down</span><span class="rvts34"> button press starts diving animation</span><span class="rvts21">.</span></p>
<p class="rvps10"><span class="rvts21">Of course such mistakes are often noticed when replaying finished movie on a fresh mind, but sometimes the situation is less obvious and is only revealed after publishing.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Second, in the same SMB game after diving into the pipe (World 1-1) you have to reach the exit to the right. It may seem necessary to start maximizing speed from the very beginning. But as you may see in the picture, within first dozen of frames it's better to hold the </span><span class="rvts29">L</span><span class="rvts21"> button instead of </span><span class="rvts29">R</span><span class="rvts21">, so that Mario lands slightly aloof from the wall that needs to be jumped over. If you hold </span><span class="rvts29">R</span><span class="rvts21"> too early, Mario will land close to the wall and will have to jump vertically, thus losing gathered speed.</span></p>
@ -130,7 +130,7 @@
<p class="rvps10"><span class="rvts21">When you're confident you've found perfect solution of the segment, move to the next segment. Don't remove old Markers, since they may be useful in future, in case you begin doubting the perfectness of your decisions (e.g. after finding a new trick). The logic of movie dividing will most likely remain the same even after finding the new factor (the trick).</span></p>
<p class="rvps10"><span class="rvts21">Also, if in the middle of optimization process you become confident you've found perfect Input for the first half (or a third) of current segment, you can divide the segment in two and focus on optimizing the remaining section. Such situations often rise when the initially chosen segment was too large and its logical parts naturally emerged in the process of editing the Input.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">So, if you don't like to keep things organized, you can avoid Markers and Bookmarks whatsoever, working mostly in terms of fuzzy in-game concepts and imagining segments as some emotional sequences of events. Unfortunately, the data about fuzzy goals also occupies part of human working memory, and as a result you won't have enough resources to keep all optimality factors in mind. And you won't even notice how you're losing a multitude of possibilities.</span></p>
<p class="rvps10"><span class="rvts21">So, if you don't like to keep things organized, you can avoid Markers and Bookmarks whatsoever, working mostly in terms of fuzzy in-game concepts and imagining segments as some emotional sequences of events. Unfortunately, the data about fuzzy goals also occupies part of human working memory, and as a result you won't have enough resources to keep all optimality factors in mind. And you won't even notice how you've overlooked a multitude of possibilities.</span></p>
<p class="rvps10"><span class="rvts21">On the contrary, if you like to keep an order, it's recommended to accompany Markers with text Notes, either before, or during, or after the optimization of the current segment. For example, make up a name for the segment or put a tag. This way you document the development of the TAS during actual TASing, give an objective meaning to the Input appearing in the process. This is especially useful when TASing in co-authorship. But even when working alone, you may notice the documentation from previous levels motivates you to carry on. It only takes seconds to type that kind of texts, and then it helps not to abandon the project.</span></p>
<p class="rvps10"><span class="rvts21">Notes also help to better unlock the potential of tricks and bugs of the game. By writing the text you actually formalize your knowledge about the described phenomenon. When the essence of the trick is kept in your mind, you may think that you already know everything about it, and that your current TAS uses the trick the best way possible. But when you construct an objective model (a verbal description of the trick) you often find its new sides.</span></p>
<p class="rvps10"><span class="rvts21">It's not uncommon for TASVideos.org to see how one TASer read the description of a trick in the submission text written by another TASer and found a way to use the trick better than original author. There were also cases when author himself reads his recent submission, facepalms and urgently records an improvement.</span></p>
@ -147,7 +147,7 @@
<p class="rvps10"><span class="rvts21">You should learn not to feel sorry when you have to throw away results of your hard work. In TASing you're expected to reconsider even polished parts of the movie from time to time. The traditional method of TASing quickly makes you accustomed to inevitable losses of time, because any inattention or slipped finger requires you to rerecord part of current segment. Taseditor averts such minor losses, but doesn't change the fact that you have to retry new approaches after finding new optimality factors.</span></p>
<p class="rvps10"><span class="rvts21">For example, when polishing the Input near the end of World 1-3, you've suddenly found a new trick allowing you to get a mushroom, and it also appears to work in the World 1-1. Now you have to redo both 1-1, 1-3 and even 1-2, because you now play World 1-2 with big Mario. Of course, TASing the same levels second time is easier, but the fact of wasted time may dispirit you at first. Sometimes it may seem that fixing the old mistake is not worth spending additional time. At this point you'd better stop thinking too much and just choose one of the two options either immediately start fixing, or postpone it for an indefinite period (and leave the Marker with a note describing the issue). If at the end of the project you accumulate a critical mass of such postponed plans, the movie should be called a "test run" and probably also published, at least as a WIP (work in progress). Then take some considerable rest until you feel like redoing the TAS (making an improvement).</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Despite all the difficulties, TASing can bring enjoyment both to viewers and authors. TASes are made by people who consider this kind of work to be balanced by the excitement from intermediate and final results. In many senses TASing is similar to a special meta-videogame with a unique gameplay mechanic. And until games bring fun, people play them no matter how hardcore they are.</span></p>
<p class="rvps10"><span class="rvts21">Despite all the difficulties, TASing can bring enjoyment both to viewers and authors. TASes are made by people who consider this kind of work to be balanced (paid off) by the excitement from intermediate and final results. In many senses TASing is similar to a special meta-videogame with a unique gameplay mechanic. And until games bring fun, people play them no matter how hardcore they are.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">In the next chapter: </span><a class="rvts27" href="TASingMethodology.html">descriptions of Input optimization methods</a><span class="rvts21">.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>

View File

@ -76,7 +76,7 @@
<p class="rvps2"><a name="playback"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><img align="right" alt="" style="padding : 6px;" src="lib/toolbox-playback.png"/></p>
<p class="rvps10"><span class="rvts21">The top section is allotted to the Playback controls. The </span><span class="rvts25">Playback</span><span class="rvts21"> is the component of Taseditor dedicated to handle the game emulation: keep it paused, replay in any direction, rewind to desired frame and so on. It allows to treat video games as straightforwardly as if they were regular video recordings, disregarding the interactivity element inherent to them.</span></p>
<p class="rvps10"><span class="rvts21">The top section is allotted to the Playback controls. The </span><span class="rvts25">Playback</span><span class="rvts21"> is the component of Taseditor dedicated to handle game emulation: keep it paused, replay in any direction, rewind to desired frame and so on. It allows to treat video games as straightforwardly as if they were regular video recordings, disregarding the interactivity element inherent to them.</span></p>
<p class="rvps10"><span class="rvts21">There are 5 buttons at the top of the window.</span></p>
<p class="rvps10"><span class="rvts21">The "</span><span class="rvts29">||</span><span class="rvts21">" button (pause/resume) is simple graphical analog of the </span><span class="rvts26">Pause Emulation</span><span class="rvts21"> hotkey. When you click it, the game emulation either pauses or resumes. However, if your mouse has a middle button, it's easier to press it instead of clicking the "</span><span class="rvts29">||</span><span class="rvts21">" button, in this case you won't need to move the mouse cursor to the Playback section.</span></p>
<p class="rvps10"><span class="rvts21">The "</span><span class="rvts29">&gt;</span><span class="rvts21">" button (step forward / advance 1 frame) moves the light-blue cursor 1 frame down, forcing FCEUX to emulate one frame if necessary. You can either click that button or click and hold it to make several steps forward. This button's keyboard analog is </span><span class="rvts30">Shift + Down</span><span class="rvts21">. If your mouse has a wheel, it's easier to hold the right mouse button and scroll the wheel 1 step down instead of using the "</span><span class="rvts29">&gt;</span><span class="rvts21">" button.</span></p>
@ -91,7 +91,7 @@
<p class="rvps10"><span class="rvts21">So, when you send the Playback cursor to a frame far from the Greenzone, instead of immediate jump the light-blue cursor starts </span><span class="rvts37">seeking</span><span class="rvts21"> to that frame. A shadow of the light-blue cursor will be blinking at the target line of the Piano Roll, and the game images on the FCEUX screen will rapidly change as the Playback cursor runs to the target.</span></p>
<p class="rvps10"><span class="rvts21">In this case you'll have to wait. The seek time depends on the distance between the target frame and the end of the Greenzone, on your computer power and a few other factors. The progress bar helps to estimate the waiting time. If you don't want to wait, left-click on the progress bar (in addition to being an indicator, it's also a button) or use the </span><span class="rvts26">Cancel Seeking</span><span class="rvts21"> hotkey (</span><span class="rvts26">Esc</span><span class="rvts21"> by default). Then the target frame will quit blinking, the light-blue cursor will stop and the emulation will be paused.</span></p>
<p class="rvps10"><span class="rvts21">While Playback is seeking you may change the target by clicking on the desired frame row in the icons column of the Piano Roll. If you pause the emulator during seeking, the light-blue cursor will freeze and the target frame blinking will slow down, but the seeking won't be cancelled when you unpause, the Playback cursor will continue running to the target and stop automatically after hitting it.</span></p>
<p class="rvps10"><span class="rvts21">Progress bar is also used when loading and saving Taseditor project files to disk.</span></p>
<p class="rvps10"><span class="rvts21">This Progress bar is also used when loading and saving Taseditor project files to disk.</span></p>
<p class="rvps10"><a name="turbo-seek"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">The "</span><span class="rvts25">Turbo seek</span><span class="rvts21">" checkbox allows to change the seeking speed. When the Turbo is on, FCEUX emulates the game on the highest speed possible, reducing the seeking time tenfold. So, if you seek to a distant frame, check that option. But during the TASing process its often necessary to see all the intermediate frames, not just the last one. In such cases you should uncheck the checkbox and maybe even slow down the emulation with the </span><span class="rvts26">-</span><span class="rvts21"> and </span><span class="rvts26">=</span><span class="rvts21"> hotkeys to ensure you're not missing any important detail of the gameplay.</span></p>
@ -99,7 +99,7 @@
<p class="rvps10"><span class="rvts21">The "</span><span class="rvts25">Follow cursor</span><span class="rvts21">" checkbox forces the Piano Roll to follow the movement of the Playback cursor and autoscroll the view so that the light-blue cursor is always visible. This allows you to observe the Input played back when the emulator is unpaused. But when you edit the movie you should uncheck this option to prevent the Piano Roll from running away from the edited spot.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">The "</span><span class="rvts25">Auto-restore last position</span><span class="rvts21">" checkbox makes the Playback automatically start seeking when the Playback cursor was moved back by the Greenzone. Every time you change an Input, the Greenzone is truncated after the first changed frame, forgetting old events that became irrelevant after that change. The Playback cursor must always be inside the Greenzone, so it steps back along with it. With the auto-restore checkbox you can instantly see new events on these frames. When the checkbox is checked, any Input modification triggers the replaying of the changed segment, helping you to compare different scenarios of the game events.</span></p>
<p class="rvps10"><span class="rvts21">Thanks to auto-restore TASers can focus on Input editing and rapidly go over many approaches to playing current segment of the movie. This method of TASing will be described later.</span></p>
<p class="rvps10"><span class="rvts21">Thanks to auto-restore, TASers can focus on Input editing and rapidly go over many approaches to playing current segment of the movie. This method of TASing will be described later.</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="rvps2"><a name="recorder"></a>
@ -153,7 +153,7 @@
</ul>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">When TASing in Taseditor you're going to most often use </span><span class="rvts30">Ctrl + Delete</span><span class="rvts21"> (</span><span class="rvts22">Delete Frames</span><span class="rvts21">) and </span><span class="rvts30">Ctrl + Insert</span><span class="rvts21"> (</span><span class="rvts22">Clone Frames</span><span class="rvts21">) to quickly move edited segments up/down in the frame list, thus performing certain in-game actions sooner or later.</span></p>
<p class="rvps10"><span class="rvts21">Unlike FCEUX hotkeys, these key combinations can't be reassigned, so if you have some other emulator functions assigned to </span><span class="rvts30">Ctrl</span><span class="rvts21">, </span><span class="rvts30">Insert</span><span class="rvts21"> or </span><span class="rvts30">Delete</span><span class="rvts21">, you'll have to change emulator settings.</span></p>
<p class="rvps10"><span class="rvts21">Unlike FCEUX hotkeys, these key combinations can't be changed, so if you have some other emulator functions assigned to </span><span class="rvts30">Ctrl</span><span class="rvts21">, </span><span class="rvts30">Insert</span><span class="rvts21"> or </span><span class="rvts30">Delete</span><span class="rvts21">, you'll have to change emulator settings.</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="rvps2"><a name="lua"></a>

View File

@ -62,17 +62,17 @@
<p class="rvps10"><img align="right" alt="" style="padding : 6px;" src="lib/toolbox-method1.png"/></p>
<p class="rvps10"><span class="rvts21">This method is similar in form to normal videogames playing, however it is completely different in content and requires different way of thinking.</span></p>
<p class="rvps10"><span class="rvts21">Editing Input is done here by recording a new Input over existing Input.</span></p>
<p class="rvps10"><span class="rvts21">To switch between movie watching and editing you have to turn the Recording mode on and off (default hotkey is </span><span class="rvts26">Q</span><span class="rvts21">). It's recommended to enable the "Follow cursor" checkbox, in order to observe the recorded Input in the Piano Roll.</span></p>
<p class="rvps10"><span class="rvts21">To switch between movie watching and editing you have to turn the Recording mode off and on (default hotkey is </span><span class="rvts26">Q</span><span class="rvts21">). It's recommended to enable the "Follow cursor" checkbox, in order to observe the recorded Input in the Piano Roll.</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts22">General activity:</span></p>
<p class="rvps10"><span class="rvts48"><br/></span></p>
<ol style="text-indent: 30px; margin-left: 0px; list-style-position: inside;">
<li class="rvps10"><span class="rvts21">Put the Playback cursor at the beginning of the edited segment, create a Bookmark, define the goal.</span></li>
<li class="rvps10"><span class="rvts21">Suppose there's a mistake in the segment, weigh known factors of optimality and figure out the way to fix the mistake.</span></li>
<li class="rvps10"><span class="rvts21">Navigate to the place of fixing the mistake (load a Bookmark and, if necessary, quickly repeat the existing Input up to the needed frame).</span></li>
<li class="rvps10"><span class="rvts21">Navigate to the place of fixing the mistake (e.g. load a Bookmark and, if necessary, quickly repeat the existing Input up to the needed frame).</span></li>
<li class="rvps10"><span class="rvts21">Play the game in Read+Write mode up to the moment when the target event occurs. The newly recorded Input should be different from old Input in this segment. While recording, create Bookmarks in free slots from time to time to speed up navigation.</span></li>
<li class="rvps10"><span class="rvts21">If you make a mistake while typing the Input, return to step 3. If you can not reach the target event using the chosen approach, you can retreat and go to step 8.</span></li>
<li class="rvps10"><span class="rvts21">[</span><span class="rvts34">optional step</span><span class="rvts21">] Save the finished approach to a temporary Bookmark, e.g. to slot </span><span class="rvts26">8</span><span class="rvts21">.</span></li>
<li class="rvps10"><span class="rvts21">If you make a mistake while typing the Input, return to step 3. If you fail to reach the target event using the chosen approach, you can retreat and go to step 8.</span></li>
<li class="rvps10"><span class="rvts21">[</span><span class="rvts34">optional step</span><span class="rvts21">] Save the finished approach to a temporary Bookmark, e.g. to slot </span><span class="rvts26">8</span><span class="rvts21"> or </span><span class="rvts26">7</span><span class="rvts21">.</span></li>
<li class="rvps10"><span class="rvts21">If this isn't the first approach to the segment, compare the new result to the best old result, using the optimality criterion. If the new approach is better (or it's the first approach), save the result to the Bookmark </span><span class="rvts26">9</span><span class="rvts21">. The slot </span><span class="rvts26">9</span><span class="rvts21"> will be used for keeping the best result of polishing the segment.</span></li>
<li class="rvps10"><span class="rvts21">If you still want to try different approaches, return to step 2, until you run out of ideas.</span></li>
<li class="rvps10"><span class="rvts21">[</span><span class="rvts34">optional step</span><span class="rvts21">] If you need more ideas, you can get some information from the past by replaying the old segments of the movie (e.g. load the Bookmark </span><span class="rvts26">0</span><span class="rvts21"> left at the beginning of current level). Also you can get some food for the mind from the future, by playing with the game events happening after the current segment.</span></li>
@ -81,22 +81,22 @@
<p class="rvps14"><span class="rvts21"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p class="rvps2"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">When you're making a test playthrough of the game (i.e. playing with savestates, but without polishing), you only do steps 3 5. And you are satisfied with any successful accomplishment of a segment, so after reaching the target for the first time you proceed to the next segment right away. In this kind of playing you only use savestates to speed up navigation in case you make a fatal mistake (e.g. didn't press the </span><span class="rvts29">A</span><span class="rvts21"> button in time and fell into the pit), because you don't want to rewrite existing Input from the very beginning of the game.</span></p>
<p class="rvps10"><span class="rvts21">When you're making a test playthrough of the game (i.e. playing with savestates, but without polishing), you only do steps 3 5. And you are satisfied with any successful accomplishment of a segment, so after reaching the target for the first time you proceed to the next segment right away. In this kind of playing you only use savestates to speed up navigation in case you make a fatal mistake (e.g. didn't press the </span><span class="rvts29">A</span><span class="rvts21"> button in time and fell into the pit), only because you don't want to rewrite existing Input from the very beginning of the game.</span></p>
<p class="rvps10"><span class="rvts21">But when you're seriously TASing the game, you need to try many different approaches in order to find the best one. So you have to repeat steps 2 8 many times, until you think the segment is played perfectly. The steps 6 9 are what distinguishes real TASing from casual playing with savestates.</span></p>
<p class="rvps10"><span class="rvts21">The process of Input Recording (step 4) means that you're editing the Input right while watching the results. That is, when watching the game state at the frame 200 you prepare the Input for the frame 201 (lay fingers on necessary buttons) and then pass the Input to the game using </span><span class="rvts26">Frame Advance</span><span class="rvts21">, and immediately see the outcome the game state at the frame 201 (granted that you look at the Memory Watch, because the game screen rendering is one frame behind). Usually this outcome is only an intermediate result, which means you can use it to estimate your progress (step 5) but should not use it to compare current and previous approaches of playing the segment (step 7). So you shouldn't apply the optimality criterion after every frame. Even if at the beginning of the segment you outrun the previous approach, you may fall behind somewhere in the middle. Only when you reach the end of the segment (step 6) you get an objective base for comparing.</span></p>
<p class="rvps10"><span class="rvts21">The process of Input Recording (step 4) means that you're editing the Input right while watching the results. That is, when watching the paused game state at the frame 200 you prepare the Input for the frame 201 (lay fingers on necessary buttons) and then pass the Input to the game using </span><span class="rvts26">Frame Advance</span><span class="rvts21">, and immediately see the outcome the game state at the frame 201 (granted that you look at the Memory Watch, because the game screen rendering is one frame behind). Usually this outcome is only an intermediate result, which means you can use it to estimate your progress (step 5) but should not use it to compare current and previous approaches of playing the segment (step 7). So you shouldn't apply the optimality criterion after every frame. Even if at the beginning of the segment you outrun the previous approach, you may fall behind somewhere in the middle. Only when you reach the end of the segment (step 6) you get an objective base for comparing.</span></p>
<p class="rvps10"><span class="rvts21">Steps 3 and 4 take the most of time in this cycle. Often before reaching the target event you have to repeat steps 3, 5 and 5 several times in a row, recording and discarding decisions that are obviously wrong even without comparing them to old approaches. For example, if in the middle of acceleration Mario gets killed by an enemy, there's no point in entering the remaining buttons needed for acceleration. You have to return back and rewrite the Input in such a way that the enemy misses. In a tough situation it's even better to break current segment into two subsegments (before and after the interaction with the enemy), in order to optimize them separately. If you don't do so, you will probably become tired after finishing the first approach, and you'll decide to leave the segment as it is. See, you've got to manage your effort optimally as well!</span></p>
<p class="rvps10"><a name="savestates"></a>
<span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Since the Input editing in this method is done using the Playback cursor (and not the mouse cursor), for an effective work you must learn to quickly deliver the light-blue cursor to any frame necessary. Upon gaining an experience, TASers accustom themselves to "juggle" with Bookmarks using the motor memory. They mechanically create intermediate and auxillary Bookmarks while recording the Input, and find the necessary Bookmark slot without looking.</span></p>
<p class="rvps10"><span class="rvts21">This virtuosity comes with time, usually after having finished a couple of TASes. You cultivate certain habits, one finger adheres to </span><span class="rvts26">Frame Advance</span><span class="rvts21">, Bookmark slots become logically distributed according to their duties, so that fingers press right keys at right moments. For example, that's how some TASers distribute 10 slots:</span></p>
<p class="rvps10"><span class="rvts21">Since the Input editing in this method is done using the Playback cursor (and not the mouse cursor), for an effective work you must learn to quickly deliver the light-blue cursor to any frame necessary. Upon gaining an experience, TASers accustom themselves to "juggle" with Bookmarks using the motor memory. They mechanically create intermediate and auxiliary Bookmarks while recording the Input, and find the necessary Bookmark slot without looking.</span></p>
<p class="rvps10"><span class="rvts21">This virtuosity comes with time, usually after having finished a couple of TASes. You cultivate certain habits, one finger adheres to </span><span class="rvts26">Frame Advance</span><span class="rvts21"> key, Bookmark slots become logically distributed according to their duties, so that fingers press right keys at right moments on their own. For example, that's how some TASers distribute 10 slots:</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps21"><img alt="" style="padding : 1px;" src="lib/savestate_slots.png"/></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="rvts26">F10</span><span class="rvts21"> points to the beginning of current level of the game, so you can rewatch recent segments without watching whole movie. </span><span class="rvts34">Used for navigation.</span></li>
<li class="rvps10"><span class="rvts26">F10</span><span class="rvts21"> points to the beginning of current level of the game, so you can see recent segments without rewatching the whole movie. </span><span class="rvts34">Used for navigation.</span></li>
<li class="rvps10"><span class="rvts26">F9</span><span class="rvts21"> is responsible for keeping the best result of current segment. </span><span class="rvts34">Used for storing.</span></li>
<li class="rvps10"><span class="rvts26">F2</span><span class="rvts21">-</span><span class="rvts26">F6</span><span class="rvts21"> serve as Bookmarks left after every </span><span class="rvts37">hard-to-reproduce action</span><span class="rvts21"> of the current approach to the segment. These Bookmarks are needed for a quick navigation along the current segment. One of them points to the beginning of the segment, and other are used when necessary (may be left unused, if the segment is short and simple). These Bookmarks are created automatically while successfully progressing with Input Recording. </span><span class="rvts34">Used for navigation.</span></li>
<li class="rvps10"><span class="rvts26">F1</span><span class="rvts21"> stores a backup copy of the movie at the last successful frame. Current movie state is saved to this slot with paranoid frequency, so you could always return to this stable state from any situation (e.g. after loading some other Bookmarks, or after recording an experiment). This is how the traditional method implements the simple undo feature. Sometimes in addition to the </span><span class="rvts26">F1</span><span class="rvts21"> people use </span><span class="rvts26">F2</span><span class="rvts21"> to provide two levels of undo, but this complicates the logic of backups (as you'd have to alternate the slots), and usually one slot is sufficient. </span><span class="rvts34">Used for storing.</span></li>
<li class="rvps10"><span class="rvts26">F2</span><span class="rvts21">-</span><span class="rvts26">F6</span><span class="rvts21"> serve as Bookmarks left after every </span><span class="rvts37">hard-to-reproduce action</span><span class="rvts21"> of the current approach to the segment. These Bookmarks are needed for a quick navigation along the current segment. One of them points to the beginning of the segment, and other are used when necessary (may be left unused, if the segment is short and simple). These Bookmarks are created mechanically while successfully progressing with Input Recording. </span><span class="rvts34">Used for navigation.</span></li>
<li class="rvps10"><span class="rvts26">F1</span><span class="rvts21"> stores a backup copy of the movie at the last successful frame. Current movie state is saved to this slot with paranoid frequency, so you could always return to this stable state from any situation (e.g. after loading some other Bookmarks, or after recording an experiment). This is how the traditional method implements simple undo feature. Sometimes in addition to the </span><span class="rvts26">F1</span><span class="rvts21"> people use </span><span class="rvts26">F2</span><span class="rvts21"> to provide two levels of undo, but this complicates the logic of backups (as you'd have to alternate the slots), and usually one slot is sufficient. </span><span class="rvts34">Used for storing.</span></li>
<li class="rvps10"><span class="rvts26">F7</span><span class="rvts21">-</span><span class="rvts26">F8</span><span class="rvts21"> may store results of alternative strategies that aren't better than the contents of the </span><span class="rvts26">F9</span><span class="rvts21">, yet they are of some interest. Also, one of these slots (or one of </span><span class="rvts26">F2</span><span class="rvts21">-</span><span class="rvts26">F6</span><span class="rvts21">) is used during step 6 to temporarily save the result of the newly finished approach, in order to compare it to the old best result more precisely (by quickly switching between </span><span class="rvts26">F8</span><span class="rvts21"> and </span><span class="rvts26">F9</span><span class="rvts21">). </span><span class="rvts34">Used for storing.</span></li>
<li class="rvps10"><span class="rvts21">When creating an improvement for someone else's TAS, slots </span><span class="rvts26">F5</span><span class="rvts21">-</span><span class="rvts26">F7</span><span class="rvts21"> may be allotted for various points of the old movie. For example, </span><span class="rvts26">F5</span><span class="rvts21"> is responsible for the beginning of current level in old movie, </span><span class="rvts26">F6</span><span class="rvts21"> for the beginning of current segment in old movie, </span><span class="rvts26">F7</span><span class="rvts21"> for the end of the current segment in old movie. </span><span class="rvts34">Used for storing and navigating the old movie contents.</span></li>
</ul>
@ -117,7 +117,7 @@
<p class="rvps10"><span class="rvts21">Pros of the method:</span></p>
<p class="rvps14"><span class="rvts46">+ </span><span class="rvts21">The process is intuitive for any gamer.</span></p>
<p class="rvps14"><span class="rvts46">+ </span><span class="rvts21">Constant feedback allows to adapt to the game while editing the Input, adjust your decisions and discard incorrect approaches prematurely.</span></p>
<p class="rvps14"><span class="rvts46">+ </span><span class="rvts21">The boundaries of current segment are always marked with Bookmarks (for navigation), thus training TASer to be orderly.</span></p>
<p class="rvps14"><span class="rvts46">+ </span><span class="rvts21">The boundaries of current segment are always marked with Bookmarks (for navigation), thus training TASer to be orderly (which will pay off).</span></p>
<p class="rvps10"><span class="rvts21"><br/></span></p>
<p class="rvps10"><span class="rvts21">Cons of the method:</span></p>
<p class="rvps14"><span class="rvts46"> </span><span class="rvts21">The insistent game feedback provokes TASer to discard some illogical but potentially advantageous approaches.</span></p>

File diff suppressed because one or more lines are too long