fceux/help/taseditor-ru/Ideas.html

733 lines
186 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<html>
<head>
<title>Идеи</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
<!--[if lte IE 8]>
<link type="text/css" rel="stylesheet" media="all" href="css/ielte8.css" />
<![endif]-->
<style type="text/css">
#topic_header
{
background-color: #EFEFEF;
}
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "index.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("Ideas");
}
</script>
</head>
<body>
<div id="topic_header">
<div id="topic_header_content">
<h1>Идеи</h1>
<div id="topic_breadcrumb">
<a href="TASEditorInside.html">TAS Editor изнутри</a> &rsaquo;&rsaquo; </div>
</div>
<div id="topic_header_nav">
<a href="TASEditorInside.html"><img src="img/arrow_up.png" alt="Parent"/></a>
<a href="TASEditorInside.html"><img src="img/arrow_left.png" alt="Previous"/></a>
<a href="Implementation.html"><img src="img/arrow_right.png" alt="Next"/></a>
</div>
<div class="clear"></div>
</div>
<div id="topic_content">
<p><span class="rvts20">Идеи</span></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<p class="rvps2"><span class="rvts6"><br></span></p>
<p class="rvps10"><span class="rvts22">Тасэдитор объединяет множество экспериментальных идей в единую систему. Многие из этих идей были озвучены очень давно (см. темы на форуме в духе "</span><a class="rvts28" href="http://tasvideos.org/forum/viewtopic.php?t=4559" target="_blank">инструмент мечты</a><span class="rvts22">" и т.д.), но для их реализации в рамках единой непротиворечивой системы понадобилось немалое время.</span></p>
<p class="rvps10"><span class="rvts22">Основообразующей идеей Тасэдитора является интерфейс Piano Roll, позволяющий взаимодействовать с мувиком в интуитивно понятной форме. </span><span class="rvts22">Первые упоминания о необходимости создания инструмента для ТАСинга на основе Piano Roll звучали ещё в </span><a class="rvts28" href="http://tasvideos.org/forum/viewtopic.php?p=38496#38496" target="_blank">2005 году</a><span class="rvts22">, возможно, даже ранее. П</span><span class="rvts22">рототип под названием TASEdit был создан в 2008 году. Окончательное видение Тасэдитора сформировалось в сентябре 2011 года и дорабатывалось по ходу разработки вплоть до лета 2012. Помимо реализованных идей в</span><span class="rvts22"> это время было придумано множество перспективных, но второстепенных или сложно реализуемых идей, которые было решено отложить на будущее.</span></p>
<p class="rvps21"><span class="rvts22"><br></span></p>
<div class="rvps21"><div align="center"><table width="700" border="1" cellpadding="0" cellspacing="0" style="border-color: #000000; border-style: solid;">
<tr valign="top">
<td style="border-color: #000000; border-style: solid; background-color: #0000ff;"><p class="rvps5"><a class="rvts80" href="Ideas.html#ImplementedIdeas">Реализовано в 1.0</a></p>
</td>
<td style="border-color: #000000; border-style: solid; background-color: #0000ff;"><p class="rvps5"><a class="rvts80" href="Ideas.html#PlannedIdeas">Запланировано на 2.0</a></p>
</td>
</tr>
<tr valign="top">
<td style="border-color: #000000; border-style: solid;"><p class="rvps18"><a class="rvts60" href="Ideas.html#PianoRoll">Piano Roll</a></p>
<p class="rvps18"><a class="rvts60" href="Ideas.html#Selection">Выделение</a></p>
<p class="rvps18"><a class="rvts60" href="Ideas.html#Markers">Маркеры</a></p>
<p class="rvps18"><a class="rvts60" href="Ideas.html#HotChanges">Горячие Правки</a></p>
<p class="rvps18"><a class="rvts60" href="Ideas.html#Greenzone">Гринзона</a></p>
<p class="rvps18"><a class="rvts60" href="Ideas.html#Playback">Проигрыватель</a></p>
<p class="rvps18"><a class="rvts60" href="Ideas.html#GreenArrow">Зелёная стрелка</a></p>
<p class="rvps18"><a class="rvts60" href="Ideas.html#AutoRestoring">Автовосстановление утраченной позиции</a></p>
<p class="rvps18"><a class="rvts60" href="Ideas.html#Recorder">Мультитрекинг-рекордер</a></p>
<p class="rvps18"><a class="rvts60" href="Ideas.html#Lua">Lua-автоматизация</a></p>
<p class="rvps18"><a class="rvts60" href="Ideas.html#BookmarksBranches">Закладки и ответвления</a></p>
<p class="rvps18"><a class="rvts60" href="Ideas.html#PopupWindows">Всплывающие окна</a></p>
<p class="rvps18"><a class="rvts60" href="Ideas.html#HistoryLog">Журнал Истории</a></p>
<p class="rvps18"><a class="rvts60" href="Ideas.html#RerecordsCounter">Счётчик перезаписей</a></p>
<p class="rvps18"><a class="rvts60" href="Ideas.html#Modifiers">Система клавиш-модификаторов</a></p>
<p class="rvps18"><a class="rvts60" href="Ideas.html#Patterns">Шаблоны</a></p>
<p class="rvps18"><a class="rvts60" href="Ideas.html#CrossingGaps">Пересечение промежутков</a></p>
<p class="rvps18"><a class="rvts60" href="Ideas.html#SaveCompact">Компактное сохранение</a></p>
<p class="rvps18"><a class="rvts60" href="Ideas.html#Autosave">Автосохранение</a></p>
</td>
<td style="border-color: #000000; border-style: solid;"><p class="rvps5"><a class="rvts79" href="Ideas.html#OutputLog">Журнал Вывода</a></p>
<p class="rvps5"><a class="rvts79" href="Ideas.html#Minimap">Миникарта</a></p>
<p class="rvps5"><a class="rvts79" href="Ideas.html#VirtualJoypad">Виртуальный Джойстик</a></p>
<p class="rvps5"><a class="rvts79" href="Ideas.html#BetterSelection">Усовершенствование Выделения</a></p>
<p class="rvps5"><a class="rvts79" href="Ideas.html#BetterColumns">Гибкая настройка колонок</a></p>
<p class="rvps5"><a class="rvts79" href="Ideas.html#RerecordsHeatmap">Теплокарта перезаписей</a></p>
<p class="rvps5"><a class="rvts79" href="Ideas.html#Etc">Прочие мелочи</a></p>
<p class="rvps5"><a class="rvts79" href="Ideas.html#OtherPlatforms">Поддержка платформ, отличных от NES</a></p>
</td>
</tr>
</table>
</div></div>
<p class="rvps21"><span class="rvts22"><br></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p class="rvps2"><a name="ImplementedIdeas"></a>
<span class="rvts37"><br></span></p>
<p class="rvps10"><span class="rvts78">Реализованные идеи</span></p>
<p class="rvps10"><a name="PianoRoll"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts23">Piano Roll</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"><br></span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Представляет собой значительно переработанный компонент Список (ListView) или Таблица (GridView). Столбцы Списка соответствуют кнопкам Ввода, строки Списка соответствуют кадрам мувика. Количество строк Списка регулярно автоматически обновляется, чтобы соответствовать количеству кадров текущего мувика. Строки нумеруются сверху вниз от нуля. Номер строки равен номеру кадра, с которым ассоциируется эта строка. Количество столбцов зависит от типа мувика (от количества джойстиков и, соответственно, количества кнопок).</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Слева перед столбцами Ввода располагаются два дополнительных столбца. Самый первый столбец (шириной ~17 пикселей) отвечает за отображение иконок и за управление Курсором Проигрывателя. Текущее положение Курсора Проигрывателя отображается иконкой в виде голубой стрелки. При щелчке левой кнопкой по этому столбцу Курсор Проигрывателя посылается на соответствующий кадр, и начинается перетаскивание Курсора, пока не будет отпущена левая кнопка.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Второй столбец (шириной 75 пикселей) отвечает за отображение номеров кадров, отображение Маркеров, управление Выделением и управление Маркерами. При одинарном щелчке левой кнопкой по этому столбцу изменяется Выделение (и можно растягивать Выделение перетаскиванием). При двойном щелчке на этом кадре ставится Маркер, и начинается перетаскивание этого Маркера, пока не будет отпущена левая кнопка.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">В Заголовке Списка отображаются названия столбцов. Самый первый столбец (столбец иконок) не имеет названия, второй столбец назван "Frame#" (номер кадра), остальные столбцы обозначены символом соответствующей кнопки джойстика. Этот же символ отображается в ячейках данного столбца на тех строках, где данная кнопка является нажатой. По ячейкам Заголовка Списка можно щёлкать, изменяя Ввод соответствующей кнопки в выделенных кадрах. А при щелчке по "Frame#" изменяются Маркеры в выделенных кадрах. Кроме того, Заголовок служит индикатором зажатых кнопок джойстика, а при Записи Ввода в Заголовке вспыхивают символы, кнопки которых были только что записаны в мувик.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Столбцы Ввода отображают состояние соответствующей кнопки джойстика для каждого кадра мувика. Чтобы узнать состояние кнопки, нужно визуально найти пересечение строки требуемого кадра и столбца требуемой кнопки. Если в этой ячейке находится символ кнопки, то кнопка в данном кадре нажата. Если в этой ячейке пустота или прочерк, то кнопка отпущена. Щелчком левой кнопкой мыши по любой ячейке Ввода можно инвертировать состояние соответствующей кнопки Ввода. &nbsp;Кроме того, если зажать левую кнопку мыши, можно рисовать или стирать Ввод в соседних кадрах, перемещая курсор мыши выше или ниже. Эти и другие возможности быстрого редактирования Ввода призваны полностью заменить линейную Запись нелинейным редактированием.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Строки Piano Roll раскрашиваются разными цветами в пастельных тонах, чтобы на их фоне были чётко видны номера кадров (отображаемые чёрным цветом) и символы кнопочных нажатий (отображаемые тёмными цветами). По цвету строки Piano Roll пользователь может сразу определить, находится ли данный кадр мувика в Гринзоне, проявляется ли лаг в данном кадре, является ли данный кадр текущим (отображаемым в окне эмулятора в данный момент), является ли данный кадр выделенным. Также дополнительными цветами можно акцентировать внимание пользователя на определённых кадрах, например, на кадре окончания добегания (мигающий голубой цвет) или на ключевом кадре отката (фиолетовый цвет). Кроме того, по цвету фона ячеек с номерами кадров пользователь может определить наличие Маркера на этом кадре (жёлтый цвет).</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Расцветка ячеек Piano Roll зависит не только от строки, но и от столбца (хоть и в меньшей мере). Столбец иконок всегда отображается белым цветом. Стобец номеров кадров отображается бледным оттенком текущего цвета строки. Столбцы кнопок Ввода для первого (а также третьего) джойстика отображаются нормальным оттенком текущего цвета строки (зелёным, красным, голубым и т.д.), а столбцы кнопок Ввода для второго (а также четвёртого) джойстика отображаются немного затемнённым оттенком текущего цвета строки.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Видимая область Piano Roll может скроллироваться колесом мыши или с помощью скроллбаров, а также с помощью множества других способов </span><a class="rvts28" href="Navigation.html#scrolling-piano-roll">навигации</a><span class="rvts22">. Многообразие способов призвано ускорить навигацию к любому желаемому участку мувика, так как в видимой области отображается лишь ограниченное количество строк. Это количество зависит от текущей высоты Piano Roll в пикселах, которая зависит от текущей высоты окна TAS Editor.</span></p>
<p class="rvps10"><a name="Selection"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts23">Выделение</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22">Как и в любом другом редакторе, &nbsp;в Тасэдиторе Выделение служит для применения операций к множеству кадров одновременно. Кроме того, здесь Выделение служит в качестве указателя (курсора) на место последнего щелчка по Вводу.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Выделение хранится в виде списка номеров кадров, считающихся выделенными.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">В памяти хранится Журнал Выделений в виде массива списков. Размер массива равен размеру Журнала Истории, можно возвращаться к предыдущим выделениям с помощью </span><span class="rvts34">Ctrl + Q</span><span class="rvts22"> и </span><span class="rvts34">Ctrl + W</span><span class="rvts22">. Это полезно для быстрого отслеживания истории недавних щелчков по Piano Roll.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Для управления Выделением служит столбец с номерами кадров. Если после щелчка по номеру кадра зажать левую кнопку, можно растягивать Выделение на соседние кадры. Если зажать клавишу </span><span class="rvts34">Ctrl</span><span class="rvts22"> перед щелчком по номеру кадра, ранее выделенные кадры останутся выделенными. А при простом щелчке по номеру кадра или Ввода текущее Выделение уходит в историю Выделений, и вместо него создаётся новое Выделение, состоящее из одного кадра (по которому был сделан щелчок). Если зажать клавишу </span><span class="rvts34">Shift</span><span class="rvts22">, выделятся все кадры от начала старого Выделения до кадра щелчка. Если зажать </span><span class="rvts34">Alt</span><span class="rvts22">, создастся Выделение по шаблону. Также Выделение меняется и при щелчке по ячейкам Ввода, но только когда не зажаты клавиши модификаторы,</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Самый верхний выделенный кадр называется Курсором Выделения. Если не выделено ни одного кадра, подразумевается, что Курсор Выделения указывает на кадр с номером -1. Это нужно для некоторых ситуаций, например, при отсутствии Выделения в нижнем текстовом поле отображается Заметка нулевого Маркера.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Журнал Выделений (в том числе текущее Выделение) сохраняется и загружается из файла проекта. При изменении настройки "undo levels" происходит соответствующее изменение размера Журнала Выделений.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">При вставке и удалении кадров текущее Выделение смещается на соответственное количество строк вниз или вверх, чтобы оставаться на тех же позициях относительно Ввода, что и перед вставкой/удалением.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Текущее Выделение можно сдвигать (</span><span class="rvts34">Ctrl + Вверх</span><span class="rvts22"> / </span><span class="rvts34">Ctrl + Вниз</span><span class="rvts22"> / </span><span class="rvts34">Ctrl + Home</span><span class="rvts22"> / </span><span class="rvts34">Ctrl + End</span><span class="rvts22">). Если часть Выделения выходит за рамки Piano Roll, эта часть исчезает. То есть пользователь не может выделить кадры за пределами текущего мувика.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Курсором Выделения можно осуществлять прыжки по Маркерам (</span><span class="rvts34">Ctrl + Page Up</span><span class="rvts22"> / </span><span class="rvts34">Ctrl + Page Down</span><span class="rvts22">), при этом текущее Выделение уходит в Историю, а вместо него появляется один выделенный кадр на месте следующего Маркера.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Видимая область Piano Roll всегда следует за Выделением. При этом, если Выделение не помещается целиком на экране, Piano Roll скроллируется таким образом, чтобы Курсор Выделения был в середине, а если Выделение помещается центрирует всё Выделение.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">В нижнем текстовом поле отображается текст Заметки маркера, на участке которого находится Курсор Выделения. Этот текст обновляется при каждом изменении Выделения, а также при изменении текущих Маркеров.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">При нажатии </span><span class="rvts34">Ctrl + A</span><span class="rvts22"> текущее Выделение уходит в Историю, вместо него становятся выделенными все кадры, начиная с Маркера, на участке которого был Курсор Выделения, заканчивая следующим Маркером (не включая этот Маркер). Таким образом выделяется весь участок текущего Маркера. При следующем нажатии </span><span class="rvts34">Ctrl + A</span><span class="rvts22"> Выделение изменится на набор кадров между Маркерами, не включая верхний и нижний Маркеры. При третьем </span><span class="rvts34">Ctrl + A</span><span class="rvts22"> Выделение изменится на набор кадров между Маркерами, не включая верхний, но включая нижний Маркер. Наконец, при четвёртом нажатии </span><span class="rvts34">Ctrl + A</span><span class="rvts22"> Выделение изменится на набор кадров между Маркерами, включающий оба Маркера. При дальнейших нажатиях </span><span class="rvts34">Ctrl + A</span><span class="rvts22"> будет повторение предыдущих вариантов выделения. Это позволяет пользователю быстро выделить нужный участок, причём в большинстве случаев ТАСеру будет нужен именно первый вариант выделения между Маркерами.</span></p>
<p class="rvps15"><a name="Markers"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts23">Маркеры</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22">При редактировании больших мувиков пользователю может понадобиться установка отметок на некоторые строки Piano Roll, чтобы эти строки визуально отличались от соседних. После ряда усовершенствований эта идея вылилась в многогранную фичу.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Любой кадр мувика может быть отмечен. При желании пользователь может отметить Маркерами сразу все кадры мувика. Кроме того, пользователь может оставить отметку, например, на кадре 1200, а затем сделать усечение Ввода после кадра 1000, оставив отвязанный от Ввода Маркер за пределами мувика. Этот Маркер будет оставаться в проекте; чтобы увидеть его наличие, нужно проэмулировать мувик до кадра 1200, чтобы в Piano Roll отражалась строка с этим Маркером.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Неотмеченные строки Piano Roll отображаются обычными цветами, а в отмеченных строках ячейка с номером кадра имеет жёлтый цвет фона. Этот цвет выбран, так как Маркеры призваны акцентировать внимание пользователя на отмеченных кадрах. Также номера отмеченных кадров отображаются особым шрифтом, чтобы о наличии Маркера можно было догадаться, даже когда жёлтый фон ячейки загораживается синим цветом Выделения.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Маркеры могут быть привязаны к Вводу (тогда они отображаются бледно-жёлтым цветом), а могут быть отвязанными (отображаются более насыщенным жёлтым цветом). Когда Маркеры привязаны, на них действуют операции по смещению Ввода вверх/вниз, а также усечению Ввода.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Маркер ставится двойным щелчком левой кнопкой мыши по номеру желаемого кадра. Если сделать двойной щелчок по уже установленному Маркеру, начинается его перетаскивание (до момента отпускания левой кнопки). Так можно перенести Маркер на другой кадр или удалить, перенеся за рамки Piano Roll. При перетаскивании под курсором мыши висит образ Маркера в виде жёлтого прямоугольника с номером кадра, с которого был снят этот Маркер. Чтобы отменить перетаскивание, нужно опустить Маркер либо на ту же самую ячейку с номером кадра, либо на любую ячейку Ввода.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Также Маркеры можно устанавливать и удалять с помощью контекстного меню по правой кнопке или с помощью щелчка по Frame#.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Обычно Маркеры ставятся относительно далеко друг от друга, и между ними находятся промежутки из неотмеченных кадров. Поэтому Маркеры можно воспринимать не только как цветовое выделение особенных кадров, но и как пограничные отметки для участков мувика. Для стандартизации принята следующая терминология: каждому Маркеру соответствует участок кадров мувика, начинающийся с отмеченного кадра и заканчивающийся последним неотмеченным кадром. Например, если в мувике на кадрах 10 и 20 стоят Маркеры, то участком первого маркера является регион кадров с 10-го по 19-й, а участком второго маркера - регион с 20-го по последний кадр мувика.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Промежутки между Маркерами можно пересекать прыжками от текущего к следующему (или предыдущему). Это позволяет в ряде случаев ускорить навигацию по мувику.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">С помощью функции </span><span class="rvts26">Select between Markers</span><span class="rvts22"> (</span><span class="rvts34">Ctrl + A</span><span class="rvts22">) можно быстро выделить все кадры на участке текущего Маркера. Таким образом Маркеры позволяют ускорить не только навигацию, но и редактирование.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Каждый Маркер имеет свою текстовую Заметку. При создании она пустая. Пользователь может просматривать и редактировать Заметку с помощью любого из двух имеющихся текстовых полей. В верхнем текстовом поле отображается Заметка Маркера, на участке которого находится Курсор Проигрывателя. В нижнем текстовом поле отображается Заметка Маркера, на участке которого находится Курсор Выделения. Таким образом, чтобы отредактировать желаемую Заметку, нужно сначала поставить один из курсоров на её Маркер или на кадр под Маркером. В теории это звучит неудобно, но рабочий процесс в Тасэдиторе организован таким образом, что под нужными Маркерами обязательно стоит какой-нибудь курсор.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Объём Заметки ограничен сотней символов, так как Заметки предназначены не для хранения длинных текстов, а для коротких комментариев, тегов и тому подобных записок на салфетках. В крайнем случае можно разместить несколько Маркеров подряд, разбив длинный текст на несколько соседствующих Заметок.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">По тексту Заметок можно осуществлять обычный поиск (Find Note) и нечёткий поиск (Similar/More). Подробнее см. </span><a class="rvts28" href="AdvancedFeatures.html#UsingMarkers">Продвинутые возможности</a><span class="rvts22">.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Маркеры сохраняются и восстанавливаются из ответвлений Закладок вместе с Вводом. Каждая операция с Маркерами заносится в Журнал Истории аналогично операциям с Вводом. В файле проекта Маркеры сохраняются сразу после Ввода.</span></p>
<p class="rvps15"><a name="HotChanges"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts23">Горячие Правки</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22">Раскраска текстовых символов в ячейках Ввода разными цветами, в зависимости от давности редактирования каждой ячейки. Подробнее см. </span><a class="rvts28" href="PianoRoll.html#HotChanges">Интерфейс программы</a><span class="rvts22"> и </span><a class="rvts28" href="ProgramCustomization.html#EnableHotChanges">Настройка программы</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">В памяти хранятся значения сразу всех ячеек Ввода, даже несмотря на то, что большинство из них имеет нулевой уровень горячести. Это необходимо для тех редких случаев, когда массово изменяются почти все ячейки мувика (например, при операциях Import или Paste). Массив Горячих Правок занимает много места в оперативной памяти, но хорошо сжимается и занимает мало места на диске.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">16 градаций цвета, чтобы в одном байте умещалась информация о горячести двух ячеек. Кроме того, добавлять ещё больше градаций нет смысла, так как человеческий глаз будет хуже различать их, а ценность Горячих Правок именно в возможности быстрой визуальной оценки Ввода, не требующей длительного обдумывания.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Состояние текущей карты Горячих Правок меняется только при добавлении нового пункта в Журнал истории и при откатах Истории.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">при редактировании Ввода старые ячейки теряют один уровень горячести, а изменённые ячейки приобретают максимальный уровень</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">при удалении кадров старые ячейки теряют один уровень горячести</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">при вставке кадров старые ячейки теряют один уровень горячести, а все ячейки вставленных кадров приобретают максимальный уровень</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">при изменении Маркеров или Закладок, а также при усечении мувика Горячие Правки не меняются</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">при прыжке на Закладку во времени текущие Горячие Правки замещаются Горячими Правками из ответвления Закладки</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">при импорте Ввода старые ячейки обнуляют уровень горячести, а изменённые ячейки приобретают максимальный уровень</span></p>
<p class="rvps10"><a name="Greenzone"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts23">Гринзона</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22">Так как интерфейс Piano Roll предоставляет пользователю почти мгновенный доступ к изменению Ввода на любом кадре мувика, желательно также предоставить быстрый доступ к просмотру состояния игры на любом кадре мувика. Это реализуется с помощью кеширования данных о всех полученных состояниях игры.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Гринзона представляет собой массив информации о Выводе игры на начало каждого кадра. То есть в ячейке с номером 0 хранится состояние игры до начала эмуляции, в ячейке 1 состояние игры перед началом эмуляции второго кадра (кадра с номером 000001) и т.д. Помимо сэйва для каждого кадра хранится информация о лаге в этом кадре, теоретически возможно хранение и другой информации.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Гринзона начинается с нулевого кадра и имеет нижнюю границу (голову) &nbsp; номер кадра, начиная с которого в Гринзоне отсутствует информация о дальнейших состояниях игры. Для кадров, номер которых меньше головы, в Гринзоне может иметься информация.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Данные в Гринзону собираются в начале каждого кадра (перед эмуляцией) по следующему принципу: если в массиве Гринзоны ячейка с номером, равным текущему кадру, пустует, или же позиция головы Гринзоны меньше номера текущего кадра, то ячейка массива заполняется информацией о текущем состоянии игры (из эмулятора), а голова Гринзоны при необходимости перемещается вперёд.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Для экономии памяти Гринзона периодически разреживается, удаляя сэйвы (но не информацию о лаге) некоторых ранних кадров, от которых Курсор Проигрывателя ушёл достаточно далеко. </span><span class="rvts22">Подробнее см. </span><a class="rvts28" href="ProgramCustomization.html#SetGreenzonecapacity">Настройка программы</a><span class="rvts22">.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Вся Гринзона сохраняется и загружается из файла проекта. После загрузки проекта Тасэдитор восстанавливает состояние Курсора Проигрывателя с помощью Гринзоны.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">При любом изменении Ввода текущего мувика из Гринзоны удаляется информация о кадрах, идущих после первого изменённого кадра. Это реализуется с помощью уменьшения позиции головы Гринзоны, но сама устаревшая информация из массива не удаляется. Обычно одновременно с этим перемещается Курсор Проигрывателя, чтобы он всегда находился внутри Гринзоны (чтобы на экране FCEUX никогда не отображалось неактуальное состояние игры).</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">При создании Закладки в неё копируется информация из соответствующего кадра Гринзоны. При загрузке ответвления этой Закладки из неё копируется информация в соответствующую ячейку Гринзоны, и при необходимости передвигается позиция головы.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Информация из Гринзоны используется при раскрашивании строк Piano Roll. Информация о лаге (Журнал лага) отображается не только для кадров, содержащихся в Гринзоне, но и для отсутствующих в ней кадров. Если в Гринзоне нет информации о лаге на определённом кадре, то предполагается, что этот кадр без лага.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Информация о лаге собирается в Гринзону одновременно со сбором текущего состояния игры, то есть перед началом эмуляции текущего кадра. В этот момент эмулятор обладает информацией о лаге предыдущего кадра, поэтому на кадре с номером 000020 данные о лаге сохраняются в ячейку 19. Также именно в этот момент может сработать операция </span><a class="rvts28" href="Operations.html#AdjustLag">AdjustLag</a><span class="rvts22">, которая сдвигает весь Ввод в последующих кадрах мувика на 1 кадр вверх или вниз. Ввод сдвигается вверх, если в Журнале лага на прошлом кадре был лаг, а теперь его не стало. Ввод сдвигается вниз, если в Журнале лага на прошлом кадре не было лага, а теперь он есть. Вместе с Вводом аналогично сдвигается и все последующие ячейки Журнала лага, чтобы красные строки Piano Roll по-прежнему соответствовали сдвинувшимся пропускам во Вводе. Кроме того, после операции AdjustLag Курсор Проигрывателя насильно возвращается на предыдущий кадр (в котором изменилась информация о лаге), чтобы проэмулировать его заново. Это реализуется не простой перемоткой назад, а усечением Гринзоны после предыдущего кадра.</span></p>
<p class="rvps10"><a name="Playback"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts23">Проигрыватель</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22">Проигрыватель это собрание всех функций по просмотру Вывода (состояния игры в нужных кадрах).</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Главный атрибут Проигрывателя текущий проигрываемый кадр мувика, скриншот этого кадра отображается в окне эмулятора в данный момент времени. Этому кадру соответствует голубая строка в Piano Roll, которая носит название Курсор Проигрывателя. Так как Курсор Проигрывателя привязан к состоянию эмулируемой игры, можно использовать его не только в качестве индикатора, но и в качестве управляющего элемента. Чтобы увидеть на экране FCEUX события интересующего кадра, нужно передвинуть Курсор Проигрывателя на строку с номером этого кадра. Для этого есть </span><a class="rvts28" href="Navigation.html#playback-cursor">множество способов</a><span class="rvts22">.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Когда пользователь посылает Курсор Проигрывателя на кадр, содержащийся в Гринзоне, состояние эмулируемой игры восстанавливается из соответствующего сэйва. Так как при этом не было никакой эмуляции, Тасэдитор имитирует события "frame boundary" и "frame begin"/"frame end", чтобы сработали соответствующие функции Lua.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Когда пользователь посылает Курсор Проигрывателя на кадр, не содержащийся в Гринзоне, Тасэдитор восстанавливает состояние игры на ближайший предшествующий кадр, для которого имеется сэйв Гринзоны, а затем запускает добегание к желаемому кадру. Добегание это эмуляция, которая автоматически останавливается при достижении целевого кадра. Во время добегания на целевом кадре мигает копия голубого курсора.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Так как эмулятор обеспечивает детерминизм, состояние игры на любом кадре можно гарантированно получить, используя базовое состояние игры (состояние на начало мувика) и Ввод из мувика. Более того, можно получить требуемое состояние, используя состояние на любой предыдущий кадр (сэйв из Гринзоны) и Ввод из мувика. На этом принципе и основано добегание.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Процесс добегания отображается на прогрессбаре, чтобы в случае длительного добегания пользователь мог оценить оставшееся время ожидания. Когда добегания нет, прогрессбар полностью заполнен во время паузы и пуст во время эмуляции.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Добегание может осуществляться на максимально возможной скорости эмуляции. В этом случае для относительно небольших участков добегание будет завершено практически мгновенно.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Во многих случаях полезно автоматически останавливать эмуляцию на последнем кадре, для которого в мувике есть Ввод. Для этого служит настройка </span><a class="rvts28" href="ProgramCustomization.html#AutopauseattheendofMovie">Autopause at the end of Movie</a><span class="rvts22">, благодаря которой Курсор Проигрывателя при отпущенной паузе не будет убегать слишком далеко.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">В большинстве случаев пользователю не требуется автоматически скроллировать Piano Roll к Курсору Проигрывателя во время передвижения этого курсора. Для тех случаев, когда это всё-таки нужно, служит галочка "Follow cursor".</span></p>
<p class="rvps10"><a name="GreenArrow"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts23">Зелёная стрелка</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22">При создании спидранов ТАСер пытается обогнать свой рекорд на каждом участке. В большинстве случаев критерием оптимальности является номер кадра, на котором происходит конечное событие участка. Для его определения ТАСер перемещает Курсор Проигрывателя, одновременно просматривая экран FCEUX, и останавливает этот ручной поиск в тот момент, когда обнаружено начало интересующего события. Обычно Курсор Проигрывателя так и остаётся на найденном кадре, а ТАСер начинает изменять Ввод на участке, надеясь улучшить его и получить то же событие на более ранний кадр.</span></p>
<p class="rvps10"><span class="rvts22">Во время изменения Ввода Гринзона усекается, и Курсор Проигрывателя отступает назад. Когда ТАСер считает, что внёс во Ввод достаточно существенные изменения, он начинает проверку Вывода, чтобы определить, на каком кадре начинается целевое событие теперь. Для этого он опять перемещает Курсор Проигрывателя, одновременно просматривая экран FCEUX.</span></p>
<p class="rvps10"><span class="rvts22">Чтобы сделать вывод об улучшении, ТАСеру нужно сравнить старый номер кадра (найденный в прошлый раз) и новый номер, найденный только что. Тасэдитор визуализирует эти данные, чтобы пользователю не требовалось запоминать их в уме. На новый номер указывает Курсор Проигрывателя, на старый номер указывает зелёная стрелка.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Полное название зелёной стрелки утерянная позиция Курсора Проигрывателя.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Более адекватной заменой зелёной стрелке служат Маркеры и Закладки, устанавливаемые вручную.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Иконка зелёной стрелки отображается в столбце иконок Piano Roll.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">При рисовании иконок в Piano Roll зелёная стрелка имеет более высокий приоритет над голубой стрелкой (иконкой Курсора Проигрывателя), так как положение голубого курсора можно определить и по другим столбцам.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Зелёная стрелка появляется на кадре вместо Курсора Проигрывателя в момент усечения Гринзоны. И она остаётся на этом кадре до тех пор, пока не будет произведена следующая последовательность событий:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">1)</span>
<span class="rvts22">эмуляция хотя бы одного кадра (подразумевается, что пользователь запустил просмотр участка)</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 8pt; font-family: 'Arial'; color: #000000; width: 15px;">2)</span>
<span class="rvts22">следующее отступление Курсора Проигрывателя из-за усечения Гринзоны</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Таким образом, зелёная стрелка не меняет своё положение, когда ещё до запуска эмуляции Гринзона усекается повторно (например, ТАСер изменил Ввод на кадре 90, а затем на кадре 80, но зелёная стрелка так и осталась на кадре 100).</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Также зелёная стрелка не меняет своё положение, когда Гринзона усекается во время добегания, и эмулятор в этот момент не стоит на паузе.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Зелёная стрелка не меняет своё положение при операциях </span><a class="rvts28" href="Operations.html#AdjustLag">AdjustLag</a><span class="rvts22">, </span><a class="rvts28" href="Operations.html#Branch">Branch</a><span class="rvts22">, </span><a class="rvts28" href="Operations.html#Record">Record</a><span class="rvts22">.</span></p>
<p class="rvps15"><a name="AutoRestoring"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts23">Автоматическое восстановление последней позиции</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22">При создании любых ТАСов критерием оптимальности может быть состояние игры на одном и том же кадре, либо ход событий на одном и том же участке. ТАСер просматривает участок и оставляет Курсор Проигрывателя на последнем кадре участка, затем изменяет Ввод на участке и опять просматривает участок, останавливая Курсор Проигрывателя на том же самом кадре. Вывод об улучшении ТАСер делает либо во время просмотра событий участка, либо после остановки эмуляции, оценивая характеристики последнего кадра.</span></p>
<p class="rvps10"><span class="rvts22">Этот процесс можно автоматизировать, автоматически запуская добегание к утерянной позиции Курсора Проигрывателя после каждого усечения Гринзоны. Для этого служит галочка "Auto-restore last position".</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Когда галочка установлена, сразу после усечения Гринзоны запускается добегание к последней позиции Курсора Проигрывателя.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Если Гринзона была усечена во время добегания, при усечении будет продолжено добегание к целевому кадру, а не к текущему положению Курсора Проигрывателя. Но если во время усечения Гринзоны добегание стоит на паузе, это добегание отменяется, и будет запущено добегание к утерянной позиции Курсора Проигрывателя. Подразумевается, что если ТАСер не дождался окончания добегания, поставил эмулятор на паузу и начал изменять Ввод на участке, то он сосредоточился на подучастке, поэтому дальнейший автоматический просмотр будет запускаться именно для этого подучастка.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Автовосстановление не запускается при операциях </span><a class="rvts28" href="Operations.html#AdjustLag">AdjustLag</a><span class="rvts22">, </span><a class="rvts28" href="Operations.html#Branch">Branch</a><span class="rvts22">, </span><a class="rvts28" href="Operations.html#Record">Record</a><span class="rvts22">. При срабатывании операции </span><a class="rvts28" href="Operations.html#AdjustLag">AdjustLag</a><span class="rvts22"> продолжается проигрывание мувика.</span></p>
<p class="rvps10"><a name="Recorder"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts23">Мультитрекинг-рекордер</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22">Рекордер это собрание всех функций по редактированию Ввода на кадре под Курсором Проигрывателя. Рекордер предоставляет ТАСеру второй способ редактирования Ввода Запись.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Мультитрекинг позволяет ТАСеру в режиме Записи изменять данные только одного выбранного джойстика, оставляя данные других джойстиков на этом же кадре нетронутыми. Подробнее см. </span><a class="rvts28" href="Toolbox.html#multitracking">Панель инструментов</a><span class="rvts22">.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Когда включен режим Записи, перед началом каждого кадра эмулятор опрашивает виртуальные джойстики и записывает данные в текущий мувик. Затем сразу же передаёт управление Рекордеру.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Рекордер:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">использует данные из мувика на кадре Курсора Проигрывателя в качестве записываемых данных, либо (если идёт Запись по шаблону, и сейчас надо записывать отсутствие нажатий) использует ноль в качестве записываемых данных</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">сравнивает записываемые данные со старыми данными, хранящимися в Журнале Истории</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">накладывает на изменения фильтр, соответствующий выбранному режиму мультитрекинга</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">избирательно объединяет старые данные с новыми, в соответствии с галочкой "Superimpose"</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">сохраняет реальные изменения в текущий мувик</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">вызывает добавление пункта в Журнал Истории и усечение Гринзоны</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">затем возвращает управление эмулятору</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Эмулятор возвращает данные из текущего мувика в виртуальные джойстики, чтобы использовать эти данные для наступающего кадра. Также в этот момент эмулятор запускает записанные команды (сброс и т.д.).</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">В каждом кадре Рекордер получает от эмулятора информацию о зажатых в данный момент кнопках виртуальных джойстиков и подготавливает для Piano Roll информацию о том, какие столбцы в Заголовке Piano Roll должны загораться зелёным светом. Например, если выбрана радиокнопка "2P" и установлена галочка </span><a class="rvts28" href="ProgramCustomization.html#Use1PkeysforallsingleRecordings">Use 1P keys for all single Recordings</a><span class="rvts22">, то при нажатии кнопки </span><span class="rvts32">A</span><span class="rvts22"> на первом джойстике в Заголовке Piano Roll будет загораться столбец "A" второго джойстика. А если в предыдущем кадре кнопка </span><span class="rvts32">A</span><span class="rvts22"> не была зажата, то Рекордер воспринимает это как нажатие кнопки, и в соответствии с галочкой </span><a class="rvts28" href="ProgramCustomization.html#UseInputkeysforColumnSet">Use Input keys for Column Set</a><span class="rvts22"> вызывает либо установку/снятие Ввода в Выделении, либо установку Ввода в Выделении по шаблону (если зажат </span><span class="rvts34">Alt</span><span class="rvts22">).</span></p>
<p class="rvps10"><a name="Lua"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts23">Lua-автоматизация</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22">Lua позволяет пользователю расширить возможности Тасэдитора, в частности, предоставляет ТАСеру третий способ редактирования Ввода автоматическая генерация.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Интерпретатор Lua-функций вызывает соответствующую функцию Тасэдитора не напрямую, а через луа-шлюз Тасэдитора (taseditor_lua).</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">При срабатывании какой-либо функции из библиотеки "taseditor" луа-интерпретатор берёт входные данные из стека, при необходимости конвертирует их в формат, принимаемый луа-шлюзом Тасэдитора, и передаёт их соответствующей функции луа-шлюза Тасэдитора.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Луа-шлюз Тасэдитора вызывает соответствующие функции Тасэдитора и передаёт полученный результат обратно в луа-интерпретатор.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Луа-интерпретатор помещает полученные данные в стек, при необходимости конвертируя их в формат, принимаемый луа-кодом.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Функции </span><span class="rvts72">submitinputchange()</span><span class="rvts22">, &nbsp;</span><span class="rvts72">submitinsertframes()</span><span class="rvts22"> и </span><span class="rvts72">submitdeleteframes()</span><span class="rvts22"> не вызывают соответствующее изменение мувика, а только создают запись в массиве отложенных заданий, хранящемся в луа-шлюзе Тасэдитора. Все отложенные задания реализуются при вызове </span><span class="rvts72">applyinputchanges()</span><span class="rvts22">. Благодаря этому луа-скрипт может вносить в мувик сразу несколько изменений, создавая только один пункт Журнала Истории.</span></p>
<p class="rvps10"><a name="BookmarksBranches"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts23">Закладки и ответвления</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22">Закладки являются специализированной альтернативой Маркерам. А ответвления служат для хранения нескольких мувиков в одном проекте. Для упрощения создания и навигации по ответвлениям они привязаны к Закладкам, по аналогии с традиционными сохранениями.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">В проекте может храниться не более 10 Закладок. Это ограничение связано с количеством цифровых клавиш на клавиатуре. Также такое ограничение позволяет отображать в окне TAS Editor основную информацию сразу обо всех Закладках, без необходимости скроллинга. Кроме того, многолетний опыт традиционного ТАСинга подтверждает, что такого количества слотов для Закладок вполне достаточно для продуктивного ТАСинга. </span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Закладка может быть установлена на любой кадр мувика. Закладки не исчезают, даже когда мувик усекается. Например, если поставить Закладку на кадр 1200, а затем сделать усечение Ввода после кадра 1000, за пределами мувика останется Закладка, при прыжке на которую мувик автоматически расширится до кадра 1200.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">В Piano Roll Закладки отображаются иконкой с соответствующей цифрой (номером слота). Закладка, хранящая текущее ответвление мувика, отображается голубой цифрой, остальные Закладки отображаются зелёными цифрами.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Закладка устанавливается нажатием соответствующего хоткея (для каждого слота есть отдельный хоткей сохранения) либо щелчком правой кнопки мыши по слоту Закладки. При этом Закладка устанавливается на тот кадр, где в данный момент находится Курсор Проигрывателя. Этот номер кадра запоминается в Закладке, и в дальнейшем можно в любой момент отправить Курсор Проигрывателя на этот кадр, щёлкнув левой кнопкой мыши по слоту Закладки или нажав соответствующий хоткей (для каждого слота есть отдельный хоткей прыжка). Прыжок на Закладку не является операцией, так как никаких изменений мувика не происходит.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">В момент установки Закладки Тасэдитор проверяет, отличаются ли сохраняемые данные от уже содержащихся в этой Закладке данных. Если различий не найдено, операция </span><a class="rvts28" href="Operations.html#Bookmark">Bookmark</a><span class="rvts22"> не производится.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Помимо номера кадра в слот устанавливаемой Закладки сохраняются все данные текущего мувика (тип Ввода, Ввод, Горячие Правки, Маркеры). Тем самым в проекте сохраняется текущее ответвление из всех возможных ответвлений мувика. В дальнейшем мувик будет многократно изменён, но пользователь сможет в любой момент вернуться к состоянию мувика, сохранённому в данной Закладке.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">В слот устанавливаемой Закладки сохраняются дополнительные данные, повышающие удобство использования. В частности, скриншот экрана FCEUX на момент создания Закладки позволяет быстро узнавать содержимое Закладки без загрузки её ответвления. А копия одного сэйва из Гринзоны (на закладочном кадре) позволяет после загрузки ответвления сразу же поставить Курсор Проигрывателя на кадр Закладки.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">После установки закладки она становится текущей (отображается голубой цифрой), так как её ответвление более остальных похоже на текущий мувик.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">При смене текущего мувика на ответвление из Закладки происходит изменение Ввода, поэтому Гринзона усекается, начиная с первого отличающегося кадра. Но благодаря хранящемуся в Закладке сэйву в Гринзону возвращается один сэйв на кадре, где и установлена эта Закладка. Поэтому "прыжок на Закладку во времени" всегда мгновенно перемещает Курсор Проигрывателя на кадр Закладки, в то время как прыжок на Закладку в пространстве (без изменения мувика) может потребовать добегания.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Все операции с Закладками (установка, прыжок, загрузка) производятся после окончания эмуляции текущего кадра, даже если сигнал от пользователя сработает в середине кадра.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Для отображения основных Данных закладок используется Список (Listview) без скроллинга, содержащий 10 строк и 3 столбца. при создании нового проекта все 10 Закладок пустые, поэтому второй и третий столбец Списка Закладок будут пустовать.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">В первом столбце Списка Закладок отображается номер слота, которому соответствует данная строка. Номер отображается как и в Piano Roll с помощью цифровых иконок зелёного или голубого цвета. Нумерация слотов идёт в таком порядке: 1, 2, 3, 4, 5, 6, 7, 8, 9, 0. Этот порядок нужен, чтобы не нарушать ассоциацию с цифровыми клавишами на клавиатуре, которыми пользователь может контролировать Закладки.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Во втором столбце Списка Закладок отображается номер кадра, на который установлена Закладка.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">В третьем столбце Списка Закладок отображается реальное время установки Закладки.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Список Закладок разделяется вертикальной чертой примерно пополам. Левая часть (где располагается первый и второй столбец Списка) ассоциируется с закладочным функционалом Закладок. Правая часть (где располагается третий столбец) ассоциируется с ответвлениями, хранящимися в Закладках. Левая часть отображается более светлым оттенком, правая - более тёмным. Щелчок левой кнопкой мыши по левой половине означает прыжок на Закладку, а щелчок по правой половине загрузку ответвления.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Строки Списка Закладок окрашиваются цветами, соответствующими цветам строк Piano Roll, на которых установлены эти Закладки. Например, если Закладка установлена на кадре 1000, и на этом кадре в данный момент находится Курсор Проигрывателя, то в Списке Закладок строчка этой Закладки будет нарисована голубым цветом. Эта фича даёт пользователю дополнительную информацию о расположении Закладок в мувике.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Вместо постоянного просмотра Списка Закладок можно переключать вид на Дерево ответвлений. Переключение осуществляется щелчком по заголовку, расположенному над Списком Закладок.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Дерево ответвлений это графическое представление взаимосвязей между ответвлениями всех Закладок в проекте. Обычно Закладки создаются по мере создания мувика, поэтому более поздние Закладки хранят ответвление, начальная часть которого совпадает с ответвлениями более ранних Закладок. Для каждой Закладки можно найти "родительскую" Закладку, из мувика которой, вероятнее всего, произошёл мувик данной Закладки. В результате все Закладки выстраиваются в иерархическую структуру, в начале которой находится корень (отображается в виде тучки), являющийся родителем Закладок, для которых не нашлось родителя. Поиск родителей для Закладок осуществляется при каждом изменении любой Закладки. При поиске учитывается номер кадра, на котором установлена каждая Закладка. Благодаря этому в начале иерархии находятся Закладки с наименьшим номером кадра.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">При установке Закладки она становится текущей, и её содержимое ничем не отличается от текущего мувика. Но после внесения изменений в мувик текущая Закладка уже будет отличаться, поэтому в Дереве ответвлений появляется фаербол, сообщающий об этом. Фаербол символизирует текущий мувик, однако его родителем всегда считается текущая Закладка. Реального поиска лучшего родителя не производится, так как пришлось бы после каждой модификации мувика запускать сравнение его Ввода со всеми Закладками, что признано слишком ресурсоёмким.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Закладки в Дереве ответвлений отображаются цифровыми иконками (как и в Piano Roll). Текущая Закладка отображается голубой цифрой. Связи между Закладками отображаются тонкими линиями. Для текущей Закладки формируется последовательность красных линий, связывающих все закладки, при загрузке которых не будет изменения Ввода (то есть как минимум от начального кадра до кадра загружаемой Закладки Ввод будет совпадать с Вводом, хранящимся в текущей Закладке). Эти красные линии идут от тучки к текущей Закладке, либо ещё далее к наследникам текущей Закладки, когда ответвление текущей Закладки содержит тот же самый Ввод, который содержится в ответвлениях этих наследников вплоть до кадра Закладки.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Благодаря расположению Закладок по возрастанию их номера кадра, последовательность красных линий можно воспринимать как хронологию текущего мувика. Началом этой хронологии служит тучка, при щелчке по ней Курсор проигрывателя посылается на начало мувика. Закладки, нанизанные на красную нить, являются промежуточными этапами этой хронологии, при щелчке по ним Курсор Проигрывателя посылается на кадр указанной Закладки. Фаербол (если он есть) считается концом текущей хронологии, и при щелчке по нему Курсор Проигрывателя посылается в конец мувика. Также любое положения Курсора Проигрывателя можно проецировать на эту хронологическую линию, найдя две Закладки, между кадрами которых располагается Курсор Проигрывателя, и переведя расстояние, измеряемое в кадрах, в пиксели. В результате текущее положение Курсора Проигрывателя постоянно отображается в Дереве ответвлений в виде маленького голубого треугольника (по аналогии с иконкой Курсора Проигрывателя в Piano Roll).</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Аналогично просмотру текущей хронологии можно быстро увидеть альтернативную хронологию для любой Закладки, наведя на неё курсор мыши (будет отображаться синими линиями).</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Маркеры, содержащиеся в ответвлениях Закладок, не влияют на процесс поиска родителей и формирования Дерева.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Все данные Закладок сохраняются и загружаются из файла проекта. Для Дерева ответвлений сохраняются и загружаются только кэшированные данные о номере первого кадра различий во Вводе для каждой пары Закладок. Исходя из этих данных Тасэдитор легко восстанавливает иерархию родительских отношений между закладками. А если эти данные отсутствуют, Тасэдитору придётся произвести сравнение Ввода всех Закладок относительно друг друга.</span></p>
<p class="rvps10"><a name="PopupWindows"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts23">Всплывающие окна</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22">Служат для показа контекстозависимой информации, которая нужна только в определённые моменты времени.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">В TAS Editor 1.0 реализовано только два вида всплывающих окон: скриншоты к Закладкам и текстовые описания к Закладкам. Оба окна всплывают при наведении курсора мыши либо на правую половину Списка Закладок, либо на любую иконку (карточку) Закладки в Дереве ответвлений.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Оба окна появляются (по альфа-каналу) в течение примерно полусекунды после наведения курсора мыши на активный элемент. Исчезают так же в течение примерно полусекунды после уведении курсора от элемента.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">В </span><a class="rvts28" href="ProgramCustomization.html#DisplayBranchScreenshots">настройках</a><span class="rvts22"> можно отключить тот или другой тип всплывающих окон.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">В окне </span><span class="rvts26">скриншота</span><span class="rvts22"> отображается сохранённая в указанной Закладке копия экрана FCEUX на момент создания Закладки. В зависимости от настройки </span><a class="rvts28" href="ProgramCustomization.html#HUDinBranchscreenshots">HUD in Branch screenshots</a><span class="rvts22"> в Закладку сохраняется либо просто содержимое буфера экрана эмулируемой приставки, либо изображение экрана приставки с наложенными данными эмулятора. Скриншоты служат для быстрой оценки содержимого Закладки, а также для сравнения альтернативных стратегий.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">В окне </span><span class="rvts26">описания</span><span class="rvts22"> отображается текстовое поле, по ширине равное ширине верхнего и нижнего текстового поля для редактирования Заметок. В поле отображается текст Заметки Маркера, взятого из ответвления указанной Закладки. Маркер определяется номером кадра, на котором установлена эта Закладка.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Окно скриншота отображается сбоку от раздела Закладок, окно описания отображается под окном скриншота.</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">При перетаскивании окна TAS Editor всплывающие окна перемещаются вместе с ним (пока не погаснут).</span></p>
<p class="rvps10" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Если во время отображения всплывающих окон меняется содержимое указанной Закладки, содержимое всплывающих окон также мгновенно обновляется.</span></p>
<p class="rvps10"><a name="HistoryLog"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts23">Журнал Истории</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22">История всех существенных изменений проекта служит, главным образом, для удобного отката этих изменений, а также для визуального отслеживания этой истории.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">В каждом пункте Журнала Истории хранится полная копия Ввода и Маркеров на момент создания пункта. Также в любом пункте может храниться резервная копия Закладки, если пункт создан из-за операции </span><a class="rvts28" href="Operations.html#Bookmark">Bookmark</a><span class="rvts22">.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Данные каждого пункта хранятся в оперативной памяти одновременно в двух видах &nbsp; сжатом и несжатом. Несжатый используется при работе, сжатый сохраняется в fm3-файл. При создании нового пункта Истории он хранится только в несжатом виде, однако каждые полсекунды Тасэдитор проходится по Журналу Истории и создаёт сжатую версию для первого попавшегося пункта без сжатой версии. Таким образом, к моменту сохранения проекта на диск почти все пункты Истории уже имеют сжатую версию, а те, которые не имеют, сжимаются во время сохранения (что немного замедляет процесс сохранения). При загрузке fm3-файла пункты Журнала Истории загружаются в запакованном виде и распаковываются.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Благодаря Журналу Истории реализуется поиск первого изменившегося кадра, после которого затем усекается Гринзона. Большинство операций работают таким образом:</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Вносятся изменения в мувик.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Для большинства операций запоминаются минимальный и максимальный номер кадра, в который были внесены изменения.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Вызывается регистрация изменений с помощью Истории, минимальный и максимальный кадр передаются в качестве параметров вместе с кодом операции и другими параметрами.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">История сверяет содержимое текущего мувика с содержимым последнего пункта Журнала Истории. Если задан минимальный кадр, то сверка начинается с этого кадра, игнорируя содержимое мувика до него. Иначе проверяется всё от начала мувика. Если задан максимальный кадр, то сверка заканчивается после этого кадра (но большинство операций не передают максимальный кадр, так как, например, вставка пустого кадра передвигает весь последующий Ввод, и нужно вести проверку до самого конца мувика).</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Как только обнаруживается первое различие между Вводом/Маркерами мувика и Вводом/Маркерами последнего снимка мувика, создаётся новый пункт в Журнале Истории и заполняются все его атрибуты.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Если различия не были обнаружены, то считается, что операция не повлияла на мувик, и никаких изменений в проекте не производится. Например, если записать те же самые нажатия поверх уже имеющихся, операция </span><a class="rvts28" href="Operations.html#Record">Record</a><span class="rvts22"> не будет зарегистрирована.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Для операции </span><a class="rvts28" href="Operations.html#Record">Record</a><span class="rvts22"> регистрируется не только номер кадра с изменившимся Вводом, но и номер джойстика, кнопки которого были изменены.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Последовательно добавляемые пункты для операций </span><a class="rvts28" href="Operations.html#AdjustLag">AdjustLag</a><span class="rvts22">, </span><a class="rvts28" href="Operations.html#Record">Record</a><span class="rvts22">, </span><a class="rvts28" href="Operations.html#Set">Set</a><span class="rvts22"> и </span><a class="rvts28" href="Operations.html#Unset">Unset</a><span class="rvts22"> могут объединяться в один пункт Журнала Истории, чтобы их было удобнее откатывать в случае необходимости. Объединение производится во время заполнения атрибутов нового пункта Журнала Истории. Вместо добавления этого пункта в конец Журнала происходит замена последнего пункта на новый.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">После регистрации нового пункта История подаёт сигнал Дереву ответвлений (чтобы на нём появился фаербол) и менеджеру проекта (чтобы в заголовке окна появилась звёздочка), а затем возвращает номер кадра, на котором были обнаружено первое различие.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 40px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Вызывается усечение Гринзоны после кадра с первым обнаруженным различием. Этот номер может быть больше, чем минимальный номер кадра, в который были внесены изменения самой операцией. Например, если установить нажатия кнопки на всех кадрах в Выделении, минимальным номером кадра будет первый выделенный кадр, но Гринзона будет усечена только после того выделенного кадра, на котором раньше не было нажатия этой кнопки.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Откат Истории осуществляется как переход с текущего пункта Журнала Истории на предыдущий. Можно сразу прыгать на любой пункт Журнала Истории. Текущий мувик и текущие Маркеры восстанавливаются из данных, содержащихся в этом пункте, а сам пункт становится текущим.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Одним из атрибутов каждого пункта Истории является "номер ключевого кадра". Для большинства операций это номер кадра, где обнаружилось первое различие. Для операций, сдвигающих Ввод, это номер минимального кадра.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">При прыжках по Истории в Piano Roll на полсекунды появляется курсор-указка фиолетового цвета, акцентирующий внимание на ключевом кадре. При откате (undo) этот курсор указывает на ключевой кадр следующего пункта Истории (относительно текущего), при повторе (redo) этот курсор указывает на ключевой кадр текущего пункта истории.</span></p>
<p class="rvps10"><a name="RerecordsCounter"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts23">Счётчик перезаписей</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22">По традиции во всех ТАСерских эмуляторах ведётся учёт количества перезаписей, использованных во время создания ТАСа. Это число может использоваться для примерной оценки трудозатрат.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Счётчик перезаписей хранится в мувике (а значит и в fm3-файле проекта). При создании нового мувика (либо нового проекта в Тасэдиторе) счётчик обнуляется.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">При ТАСинге вне Тасэдитора: счётчик увеличивается на единицу каждый раз, когда ТАСер загружает сэйв в режиме Записи, чтобы изменить Ввод на уже просмотренном участке мувика. Счётчик не увеличивается, когда ТАСер записывает Ввод для кадров, события которых ему не известны.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">При ТАСинге в Тасэдиторе: счётчик увеличивается на единицу каждый раз, когда ТАСер изменяет Ввод на отгринзоненном участке мувика. Счётчик не увеличивается, когда ТАСер изменяет Ввод для кадров, находящихся дальше головы Гринзоны.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Таким образом, в обоих случаях ведётся учёт, </span><span class="rvts37">сколько раз ТАСер изменил известное ему будущее</span><span class="rvts22">. Счётчик не увеличивается, когда ТАСер меняет будущее вслепую, то есть до просмотра игровых событий на изменяемых кадрах.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">В старых эмуляторах счётчик увеличивается прямо в момент загрузки сэйва в режиме Записи, ещё до того, как ТАСер изменяет Ввод. Из-за этого возможна ситуация, когда пользователь несколько раз подряд нажимает хоткей загрузки сэйва (например, </span><span class="rvts27">F1</span><span class="rvts22">), и при каждом нажатии счётчик перезаписей будет увеличиваться. В Тасэдиторе счётчик увеличивается только в момент усечения Гринзоны, независимо от выбранного способа навигации. Поэтому при первом нажатии хоткея загрузки Закладки (например, </span><span class="rvts27">F1</span><span class="rvts22">) счётчик увеличится только в случае, если ответвление этой Закладки отличается от текущего мувика, причём расхождение должно начинаться с уже просмотренного кадра (кадра внутри Гринзоны). А при повторных нажатиях этого хоткея счётчик не будет увеличиваться, так как ответвление Закладки уже не отличается от текущего мувика, и изменения Ввода не происходит.</span></p>
<p class="rvps10"><a name="Modifiers"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts23">Система клавиш-модификаторов</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22">Для повышения интуитивности клавиатурного управления в Тасэдиторе используется строгое разделение функций клавиш модификаторов:</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts34">Shift</span><span class="rvts22"> ассоциируется с </span><a class="rvts28" href="Glossary.html#Output">Выводом</a><span class="rvts22"> мувика, а конкретно с Курсором Проигрывателя. Многие клавиатурные комбинации, содержащие эту клавишу, относятся к управлению этим курсором. Если быстро нажать </span><span class="rvts34">Shift </span><span class="rvts22">два раза подряд, Piano Roll автоматически скроллируется к Курсору Проигрывателя.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts34">Ctrl</span><span class="rvts22"> ассоциируется с </span><a class="rvts28" href="Glossary.html#Input">Вводом</a><span class="rvts22"> мувика, а конкретно &nbsp;с Курсором Выделения. Многие клавиатурные комбинации, содержащие эту клавишу, относятся к управлению этим курсором. Если быстро нажать </span><span class="rvts34">Ctrl </span><span class="rvts22">два раза подряд, Piano Roll автоматически скроллируется к Курсору Выделения.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts34">Alt</span><span class="rvts22"> ассоциируется с шаблонами и чередующимися последовательностями.</span></p>
<p class="rvps10"><a name="Patterns"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts23">Шаблоны</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22">Заготовленные последовательности &nbsp;нажатий для одной кнопки. Подробнее см. </span><a class="rvts28" href="AdvancedFeatures.html#UsingPatterns">Продвинутые возможности</a><span class="rvts22">.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Хранятся во внешнем текстовом файле в формате, доступном для редактирования в Блокноте.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Формат файла должен быть описан в самом файле. Для каждого шаблона указывается его имя, которое будет отображаться в списке шаблонов.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Загружаются из файла в оперативную память в момент открытия окна TAS Editor.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">В TAS Editor 1.0 нет встроенных средств редактирования шаблонов, так как формат очень прост, а фича не слишком востребована.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">По шаблону можно устанавливать Ввод, Маркеры и даже Выделение.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">При установке шаблона может учитываться или не учитываться лаг. Подробнее: </span><a class="rvts28" href="ProgramCustomization.html#AutofirePatternskipsLag">Настройка программы</a></p>
<p class="rvps10"><a name="CrossingGaps"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts23">Пересечение промежутков</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22">Дополнительный способ быстрой навигации по содержимому Piano Roll, облегчающий визуальное прослеживание длинных последовательностей для отдельно взятой кнопки или Маркеров.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Пересечение промежутков это вертикальный скроллинг Piano Roll, срабатывающий при вращении колеса мыши с зажатой клавишей </span><span class="rvts34">Alt</span><span class="rvts22">. Конкретная величина скроллинга не зависит от скорости вращения колеса, а рассчитывается каждый раз индивидуально, исходя из ячейки Piano Roll под курсором мыши в данный момент.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">При зажатом </span><span class="rvts34">Alt</span><span class="rvts22"> имеет значение только направление вращения колеса (вверх или вниз), а не скорость вращения.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Пересечение &nbsp;промежутков подразумевает, что пользователь хочет найти ячейку, находящуюся на расстоянии более одного кадра от ячейки под курсором мыши (иначе нет смысла использовать эту функцию, достаточно просто провести курсор мыши чуть выше).</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Таким образом, при вращении колеса мыши вверх эта функция запоминает значение ячейки, предшествующей ячейке под курсором мыши. Затем функция начинает поиск ячейки, значение которой не совпадает с данным значением. Поиск идёт снизу вверх от ячейки, предшествующей ячейке под курсором мыши. При успешном обнаружении такой ячейки Piano Roll скроллируется таким образом, чтобы курсор мыши теперь указывал на найденную ячейку. Если же поиск дошёл до начала мувика, а ячейка не найдена, то Piano Roll не скроллируется.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Аналогично при вращении колеса мыши вниз эта функция запоминает значение ячейки, следующей за ячейкой под курсором мыши. Затем функция начинает поиск ячейки, значение которой не совпадает с данным значением. Поиск идёт сверху вниз от ячейки, следующей за ячейкой под курсором мыши.</span></p>
<p class="rvps10"><a name="SaveCompact"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts23">Компактное сохранение</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22">Файл проекта Тасэдитора в первую очередь предназначен для сохранения точного снимка рабочего процесса. Чтобы использовать тот же самый формат для обмена файлами между соавторами ТАСа или для опубликования в Интернете, необходимо предоставить пользователю возможность избирательного сохранения рабочих данных в файл. При открытии такого fm3-файла отсутствующие данные будут заменяться данными по умолчанию.</span></p>
<p class="rvps10"><span class="rvts22">Подробнее см. </span><a class="rvts28" href="AdvancedFeatures.html#ProjectsSharing">Продвинутые возможности</a><span class="rvts22"> и </span><a class="rvts28" href="FM3format.html">Формат FM3</a><span class="rvts22">.</span></p>
<p class="rvps10"><a name="Autosave"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts23">Автосохранение</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22">Как и в случае с любым офисным документом, проект Тасэдитора желательно время от времени сохранять на диск, даже если не планируется выход из программы. Однако до Тасэдитора у ТАСеров не было такой привычки, поэтому имеет смысл сохранять проект автоматически, предоставив пользователю возможность настроить или отключить эту функцию.</span></p>
<p class="rvps10"><span class="rvts22">Подробнее см. </span><a class="rvts28" href="ProgramCustomization.html#SetAutosaveperiod">Настройка программы</a><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"><a name="PlannedIdeas"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts77">Запланированные идеи</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><a name="OutputLog"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts23">Журнал Вывода (Output Log)</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22">Следующий этап эволюции инструмента Memory Watch просмотр состояния игровых данных в динамике, а не только в статике. Аналогично Журналу лага, эта фича позволит легче и точнее анализировать принципы изменения игрового Вывода.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Список (ListView), вертикальный скроллинг которого синхронизирован со скроллингом Piano Roll. Высота списка равна высоте Piano Roll, количество строк также всегда равно количеству строк Piano Roll. Количество колонок Списка зависит от нужд пользователя.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Можно гибко измененять ширину Списка (перетаскиванием узкой границы между ним и Piano Roll, соответственно изменяется ширина Piano Roll, таким образом их суммарная ширина всегда остаётся одинаковой). Можно также менять Список и Piano Roll местами, либо полностью отключать отображение Журнала Вывода. При отключении отображения Журнала Piano Roll расширяется на освобождённое пространство, в точности как в TAS Editor 1.0. Отключение отображения Журнала не означает отключение журналирования данных.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">В Заголовке Списка отображаются названия журналируемых ячеек. Можно добавлять и удалять колонки, изменять названия, менять колонки местами и изменять их ширину. При создании нового проекта ни одной колонки в Журнале Вывода нет, и, соответственно, журналирование не ведётся.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">В строках списка отображаются значения ячеек, сохранённые из состояния игры на соответствующем кадре мувика. Строки Списка раскрашиваются теми же цветами, что и соответствующие строки Piano Roll. При выделении строк в Piano Roll выделяются строки в Журнале.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Помимо ячеек RAM необходимо реализовать журналирование переменных Lua. Например, предоставить Lua-скриптам Read/Write-доступ к дюжине int-ячеек Тасэдитора и дать пользователю возможность журналировать любые ячейки из этой дюжины.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Кроме того, в будущем можно реализовать добавление колонки со скриншотами игры (либо выбранной прямоугольной областью игрового экрана). Причём отображаемый размер скриншота будет зависеть от текущей ширины колонки, и как следствие, скриншоты будут отображаться не на каждой строчке Журнала, а через каждые несколько строк. Однако съёмка скриншотов всегда осуществляется на каждом кадре.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Все журналируемые данные хранятся в Гринзоне, наравне с Журналом лага. При добавлении ячейки RAM возможно автоматическое заполнение всей колонки (Тасэдитор пробегает по всем сэйвам Гринзоны, распаковывает их и берёт значение из сохранённой копии RAM). При добавлении переменной Lua значения ячеек будут неопределёнными (пустые ячейки в Списке), и для их заполнения пользователю необходимо будет заново просмотреть мувик с запущенным Lua-скриптом.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">При усечении Гринзоны старые данные, ставшие неактуальными, не удаляются, но отображаются менее ярким цветом, пока на их место не будут записаны новые данные. При удалении сэйвов из хвоста Гринзоны данные Журнала остаются и отображаются обычным цветом.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Возможна гибкая расцветка ячеек, например, подсветка одинаковых значений в Выделении, подсветка искомых значений, автоматическое изменение цвета при изменении значения, автоматическая индикация при достижении заданного значения и т.д.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Возможно чтение любых данных Гринзоны из Lua-скриптов с помощью API Тасэдитора.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Акселераторы </span><span class="rvts34">Shift + Вправо</span><span class="rvts22"> / </span><span class="rvts34">Shift + Влево</span><span class="rvts22"> теперь будут горизонтально скроллировать не Piano Roll, а Список Журнала. Скроллинг осуществляется по целым колонкам.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Необходимо также реализовать новые методы навигации по мувику в зависимости от значения ячеек. Например, с помощью </span><span class="rvts34">Alt</span><span class="rvts22"> и вращения колеса можно пересекать промежутки в Списке для поиска ближайшего неравного или, наоборот, равного значения.</span></p>
<p class="rvps10"><a name="Minimap"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts23">Миникарта</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22">Графически отображает в окне Тасэдитора весь мувик Гринзону, лаг, Курсор Проигрывателя, Выделение, Маркеры, Закладки, точки Горячих Правок, подсветку Журнала Вывода и т.д. Предоставляет пользователю мгновенный образ текущего проекта, не обладающий детальностью, зато полностью умещающийся на экране. Также усовершенствует навигацию по мувику.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Миникарта представляет собой прямоугольный bitmap-холст, по высоте равный высоте Piano Roll, по ширине равный 30 пикселей. Может располагаться слева или справа от Piano Roll и Журнала Вывода.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">В пункте View можно гибко настраивать отображаемые элементы на миникарте (устанавливать галочки напротив желаемых элементов). Также можно отключить отображение Миникарты.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Миникарта не хранит какие-либо данные проекта. Она втоматически перерисовывается с заданной периодичностью (по умолчанию раз в секунду).</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Маркеры отображаются горизонтальными линиями жёлтого цвета на левой половине Миникарты. Каждая такая линия занимает по высоте как минимум 1 пиксель, поэтому Маркеры не теряются даже при мелком масштабе Миникарты (когда в мувике намного больше кадров, чем высота Миникарты в пикселях). Ширина линии равна трети ширины Миникарты.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Горячие Правки отображаются горизонтальными линиями соответствующего цвета на правой половине Миникарты. Каждая такая линия занимает по высоте как минимум 1 пиксель.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Закладки отображаются соответствующими иконками слева от Миникарты. По этим иконкам можно щёлкать левой и правой кнопкой мыши, эффект будет аналогичен щелчкам по иконкам в Дереве Ответвлений.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Щелчок правой кнопкой мыши мгновенный скроллинг видимой области Piano Roll к указанному месту в мувике. Далее можно перетаскивать видимую область вверх/вниз по мувику, не отпуская правую кнопку.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Щелчок левой кнопкой мыши навигация Курсором Проигрывателя. Далее можно перетаскивать Курсор Проигрывателя, не отпуская левую кнопку.</span></p>
<p class="rvps10"><a name="VirtualJoypad"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts23">Виртуальный Джойстик</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22">Альтернативный способ ввода инпута. Очень похож на изменение инпута щелчками по Заголовку Piano Roll, однако более удобен и нагляден.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Виртуальный Джойстик представляет собой всплывающее немодальное окно с изменяемыми размерами. Содержимое окна автоматически масштабируется при изменении размеров окна.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Окно Виртуального Джойстика появляется под курсором мыши при щелчке правой кнопкой в Piano Roll по выделенному Вводу или Вводу под Курсором Проигрывателя. В настройках пользователь может отключить появление Виртуального Джойстика под курсором при правом щелчке. Тогда можно оставить это окно в удобном месте рабочего стола и при необходимости перемещать курсор мыши то к нему, то обратно к Piano Roll.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">По цвету рамки окна можно определить, отображает ли Виртуальный Джойстик состояние Ввода в Выделении (синяя рамка) или под Курсором Проигрывателя (голубая рамка).</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">При уведении курсора мыши за пределы окна Виртуального Джойстика это окно автоматически скрывается (если установлена настройка "Hide on mouse leave") либо остаётся на месте.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">При нажатии левой кнопкой мыши по неактивным областям начинается перетаскивание окна.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">При нажатии правой кнопкой мыши в любом месте окна окно скрывается.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">В окне расположены управляющие элементы кнопки, соответствующие кнопкам реального джойстика эмулируемой приставки. Расположение кнопок соответствует реальному прототипу. По внешнему виду кнопок можно определить, являются ли соответствующая кнопка в Выделении нажатой, отпущенной или частично нажатой (когда выделено более одного кадра).</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Содержимое окна автоматически обновляется при каждом внешнем изменении Ввода.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Виртуальный Джойстик отражает состояние только текущего джойстика (выбранного радиокнопкой в разделе Recorder).</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">При щелчке по кнопке происходит изменение Ввода текущего джойстика. Нажатая кнопка становится отпущенной, а отпущенная или частично нажатая становится нажатой. Соответственно меняется Ввод во всех выделенных кадрах или на кадре Курсора Проигрывателя.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">В дополнение к кнопкам Ввода в окне Виртуального Джойстика можно разместить несколько кнопок-слотов для хранения макросов. Щелчок по кнопке Макроса будет аналогичен нескольким щелчкам по разным кнопкам Виртуального Джойстика. Это позволит ещё быстрее менять Ввод в Выделении, например, вместо трёх щелчков по кнопкам </span><span class="rvts32">Вверх</span><span class="rvts22">, </span><span class="rvts32">Вправо</span><span class="rvts22"> и </span><span class="rvts32">B</span><span class="rvts22"> можно будет сделать один щелчок по </span><span class="rvts76">Макросу1</span><span class="rvts22">.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Если перед щелчком по кнопке Виртуального Джойстика или кнопке макроса зажать клавишу </span><span class="rvts34">Alt</span><span class="rvts22">, будет установлен Ввод по шаблону.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">После реализации Виртуального Джойстика можно изменить принцип действия щелчков по Заголовку Piano Roll. Теперь вместо изменения инпута щелчки по Заголовку будут выделять соответствующие столбцы Piano Roll.</span></p>
<p class="rvps10"><a name="BetterSelection"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts23">Усовершенствование Выделения</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22">Архитектура TAS Editor 1.0 не рассчитана на выделение столбцов Piano Roll, однако в некоторых ситуациях это может быть необходимо при ТАСинге. Например, для очистки Ввода первого джойстика без очистки Ввода второго джойстика. Либо для перемещения Ввода одной/двух кнопок без смещения остальных внопок.</span></p>
<p class="rvps10"><span class="rvts22">Кроме того, необходимо усовершенствовать процесс рисования Выделения, чтобы пользователь мог видеть цвет строк Piano Roll под полупрозрачным Выделением.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Выделение столбцов производится аналогично выделению строк при щелчке левой кнопкой мыши по Заголовку Piano Roll соответствующий столбец становится выделенным, а все остальные столбцы перестают выть выделенными. Если перед щелчком зажать клавишу </span><span class="rvts34">Ctrl</span><span class="rvts22">, выделение остальных столбцов не изменится. Если зажать </span><span class="rvts34">Shift</span><span class="rvts22">, будет выделен регион столбцов от места предыдущего щелчка. Если зажать </span><span class="rvts34">Alt</span><span class="rvts22">, выделится регион по шаблону. После щелчка можно не отпускать левую кнопку и растягивать Выделение по горизонтали.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Выделять можно только столбцы Ввода. Маркеры же зависят от настройки "Bind markers to Input".</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Выделенные столбцы отмечаются в Заголовке синим фоном в соответствующих ячейках.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Отсутствие выделенных столбцов равносильно состоянию "выделены все столбцы".</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">При рисовании строк Выделения ячейки Ввода из невыделенных столбцов рисуются с альфой ~0.4, в то время как ячейки из выделенных столбцов имеют альфу ~0.7.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">В колонке с номерами кадров выделенные строки имеют альфу ~0.4, когда Маркеры отвязаны, и ~0.7, когда Маркеры привязаны.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">В разделе Splicer отображается не только количество выделенных строк (rows), но и количество выделенных столбцов (columns).</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">При копировании в Буфер Обмена попадает только Ввод из выделенных столбцов, причём он попадает в виде прямоугольной таблицы, без пропусков между столбцами. Благодаря этому можно изменить выделенные столбцы и вставить Ввод одних кнопок на место других кнопок.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">При изменении порядка следования столбцов или скрытии/раскрытии столбцоа Выделение сбрасывается в состояние "отсутствует выделение столбцов".</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">При Записи Ввод фильтруется в соответствии с выделением столбцов. Невыделенные столбцы не будут изменяться, даже если пользователь записывает другое состояние кнопки этого столбца.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">При инициализации объекта SELECTION (то есть при запуске Тасэдитора или создании проекта) Выделение сбрасывается в состояние "отсутствует выделение столбцов".</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Выделение столбцов также сохраняется в файле проекта.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">На Историю Выделений это нововведение никак не влияет. Изменение выделения столбцов не сохраняется в Истории Выделений, так как навигация по истории изменения выделения столбцов не требуется.</span></p>
<p class="rvps10"><a name="BetterColumns"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts23">Гибкая настройка колонок</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22">В TAS Editor 1.0 столбцы Piano Roll имеют фиксированную ширину. Количество и порядок следования столбцов также фиксированы, Для команд приставки (сброс, вставка диска и т.д.) отдельные столбцы не отводятся, так как эти команды используются крайне редко. Однако при портировании Тасэдитора на другие эмуляторы количество столбцов будет возрастать (например, у PSX нужно отображать столбцы для 14 кнопок), необходимо предоставить пользователю возможность настраивать их.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Настройка должна проводиться не напрямую в Piano Roll, а в отдельном окне, вызываемом из Config.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Возможность отображать любые колонки Ввода, в том числе колонки команд.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Возможность прятать любые колонки. Однако от каждого джойстика должна оставаться отображаемой как минимум одна колонка (но если пользователь настроил проект на режим 1P, то колонки второго джойстика в любом случае не будут отображаться).</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Возможность изменять порядок следования колонок.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">При копировании в Буфер Обмена копируются только абстрактные значения вида "кнопка нажата" / "не нажата". Поэтому если после копирования изменить порядок следования столбцов и вставить Ввод из Буфера Обмена, реальный Ввод мувика изменится (кнопки изменённых столбцов поменяются местами).</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Возможность изменять ширину колонок.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Возможность одним щелчком восстановить значения по умолчанию (рекомендуемые автором).</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Все настройки сохраняются при выходе.</span></p>
<p class="rvps10"><a name="RerecordsHeatmap"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts23">Теплокарта перезаписей</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts22">Хранит и отображает статистику "изменений после просмотра" (перезаписей). Может быть полезна для выявления сложных мест в мувике.</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Хранит массив int, по одному элементу на каждый кадр мувика (в том числе за пределами инпута). Значение элемента соответствует количеству усечений Гринзоны до данного кадра.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Сохраняет и загружает свои данные из файла проекта.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">В качестве холста следует использовать холст Миникарты. При ТАСинге не имеет смысла постоянно видеть Теплокарту, пользователь может изредка (например, в конце каждого дня) переключать Миникарту в режим отображения Теплокарты и оценивать проделанный труд.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Так как эта фича несёт не столько рабочую, сколько эстетическую функцию, необходимо продумать алгоритм рисования телокарты, чтобы было не только информативно, но и красиво.</span></p>
<p class="rvps10"><a name="Etc"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts23">Прочие мелочи</span></p>
<p class="rvps10"><span class="rvts22"><br></span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Отдельный Журнал Истории для операций </span><a class="rvts28" href="Operations.html#Bookmark">Bookmark Set</a><span class="rvts22"> (</span><span class="rvts34">Alt + Z</span><span class="rvts22"> и </span><span class="rvts34">Alt + Y</span><span class="rvts22">), для отката изменений Ввода/Маркеров без отката изменений Закладок.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Возможность работать с </span><span class="rvts22">мувиками, начинающимися с сэйва.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Возможность работать с несколькими эмулируемыми играми одновременно (для Multi-TAS-проектов).</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Усовершенствование Lua API.</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Поддержка мультитач-управления.</span></p>
<p class="rvps10"><a name="OtherPlatforms"></a>
<span class="rvts22"><br></span></p>
<p class="rvps10"><span class="rvts23">Поддержка платформ, отличных от NES</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"><br></span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Продумать управляющие элементы для отображения и изменения аналогового Ввода в Piano Roll. Виртуальный Джойстик отчасти решает эту проблемы, однако должна быть возможность быстро и легко рисовать аналоговый Ввод мышкой. Например, растягивать на много кадров однократно установленное значение наклона стика, запоминать значение только что очищенной ячейки и предлагать его при рисовании. В ячейке отображается не один символ, а число от -1.0 до +1.0. При двойном щелчке по клетке можно набрать с клавиатуры точное значение этого числа. С зажатым </span><span class="rvts34">Ctrl</span><span class="rvts22"> можно растягивать значение ячейки левой кнопкой мыши вправо/влево или вверх/вниз. В столбце отображается значение наклона только по одной координатной оси (таким образом, для аналогового стика требуется две колонки Piano Roll).</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">В Виртуальном Джойстике должна быть возможность рисовать огибающую для региона кадров, а не только устанавливать одинаковое значение для всех выделенных кадров. Также необходимо переработать формат Шаблонов, чтобы они могли представлять последовательности значений уровня, в том числе с относительными значениями (например, возрастание по параболе, где начальное и конечное значение берётся из начального и конечного кадра выделенного региона).</span></p>
<p class="rvps15" style="text-indent: 30px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000; width: 15px;"></span>
<span class="rvts22">Скорее всего, потребуется переход на 64-разрядную платформу, так как объёмы Гринзоны значительно возрастут при хранении сэйвов более продвинутых приставок.</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"><br></span></p>
<p class="rvps8"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="http://www.helpndoc.com">Free HTML Help documentation generator</a></p>
</div>
<div id="topic_footer">
<div id="topic_footer_content">
Copyright &copy; 2011-2012 АнС</div>
</div>
</body>
</html>