<pclass="rvps10"><spanclass="rvts22">При запуске этого скрипта FCEUX зарегистрирует функцию doCopy() на событие нажатия кнопки </span><spanclass="rvts32">Run function</span><spanclass="rvts22">(registermanual). Теперь при каждом нажатии этой кнопки будет запускаться код этой функции, который состоит из девяти строк. Сначала функция получает от тасэдитора информацию о Выделении, и если оно не пустое (то есть выделен хотя бы один кадр в Piano Roll), то запускается цикл "for", перебирающий все выделенные кадры по порядку, начиная с первого и заканчивая последним. Для каждого выделенного кадра функция запрашивает у Тасэдитора Ввод первого игрока (и сохраняет в переменную </span><spanclass="rvts55">joypad1data</span><spanclass="rvts22">), затем делает заявку на изменение Ввода второго игрока в этом же кадре. Все заявки накапливаются в памяти Тасэдитора до завершения цикла for, после чего они все разом исполняются с помощью вызова applyinputchanges(). В итоге Ввод второго джойстика в выделенных кадрах будет совпадать с Вводом первого джойстика.</span></p>
<pclass="rvps10"><spanclass="rvts22">При запуске этого скрипта FCEUX зарегистрирует функцию doCopy() на событие нажатия кнопки </span><spanclass="rvts32">Run function</span><spanclass="rvts22">(registermanual). Теперь при каждом нажатии этой кнопки будет запускаться код этой функции, который состоит из девяти строк. Сначала функция получает от Тасэдитора информацию о Выделении, и если оно не пустое (то есть выделен хотя бы один кадр в Piano Roll), то запускается цикл "for", перебирающий все выделенные кадры по порядку, начиная с первого и заканчивая последним. Для каждого выделенного кадра функция запрашивает у Тасэдитора Ввод первого игрока (и сохраняет в переменную </span><spanclass="rvts55">joypad1data</span><spanclass="rvts22">), затем делает заявку на изменение Ввода второго игрока в этом же кадре. Все заявки накапливаются в памяти Тасэдитора до завершения цикла for, после чего они все разом исполняются с помощью вызова applyinputchanges(). В итоге Ввод второго джойстика в выделенных кадрах будет совпадать с Вводом первого джойстика.</span></p>
<pclass="rvps10"><spanclass="rvts22">Этот весьма простой скрипт уже представляет из себя полезный инструмент, который может пригодиться вам при создании ТАСов с управлением двумя игроками одновременно. После запуска этого скрипта вы во время ТАСинга сможете выделять в Piano Roll ряд кадров и нажимать кнопку </span><spanclass="rvts32">Run function</span><spanclass="rvts22"> (или хоткей "</span><spanclass="rvts26">Run Manual Lua function</span><spanclass="rvts22">") для синхронизации обоих игроков. Когда в результате действий этого скрипта изменится Ввод, произойдёт естественное усечение Гринзоны и добавление записи в Журнал Истории, чтобы при необходимости вы могли откатить произведённые скриптом изменения. Таким образом вы получаете полностью интегрированную в Тасэдитор фичу, логику которой запрограммировали сами.</span></p>
<pclass="rvps10"><spanclass="rvts22">Хотя вы можете успешно ТАСить и без знания языка Lua, его использование может значительно сэкономить вам время и даже натолкнуть на неочевидные решения при оптимизации Ввода и анализе игрового Вывода.</span></p>
<pclass="rvps10"><spanclass="rvts22">У средней кнопки мыши есть только одна функция – ставить и снимать паузу эмуляции. Не имеет значения, где находится курсор мыши в момент щелчка средней кнопкой.</span></p>
<pclass="rvps10"><spanclass="rvts22">Когда эмулятор стоит на паузе, нажатие средней кнопки снимет паузу (аналогично нажатию хоткея </span><spanclass="rvts27">Pause</span><spanclass="rvts22">). Более того, если в Piano Roll есть зелёная стрелка, при щелчке по средней кнопке запустится добегание к зелёной стрелке (аналогично нажатию хоткея </span><spanclass="rvts27">Restore Playback</span><spanclass="rvts22">).</span></p>
<pclass="rvps10"><spanclass="rvts22">Когда эмулятор стоит на паузе, нажатие средней кнопки снимет паузу (аналогично нажатию хоткея </span><spanclass="rvts27">Pause</span><spanclass="rvts22">). Более того, если в Piano Roll за пределами Гринзоны находится зелёная стрелка, при щелчке по средней кнопке запустится добегание к зелёной стрелке (аналогично нажатию хоткея </span><spanclass="rvts27">Restore Playback</span><spanclass="rvts22">).</span></p>
<pclass="rvps10"><spanclass="rvts22">Если перед щелчком зажать клавишу </span><spanclass="rvts34">Shift</span><spanclass="rvts22">, запустится добегание к ближайшему Маркеру.</span></p>
<pclass="rvps10"><spanclass="rvts22">Если перед щелчком зажать клавишу </span><spanclass="rvts34">Ctrl</span><spanclass="rvts22">, запустится добегание к Курсору Выделения (если он расположен ниже Курсора Проигрывателя) или же начнётся повторный просмотр участка, начиная сКурсора Выделения (если он расположен выше Курсора Проигрывателя).</span></p>
<pclass="rvps10"><spanclass="rvts22">При сохранении проекта Тасэдитор поочерёдно вызывает все модули, требующие сохранения данных. В зависимости от настроек компактного сохранения каждый модуль осуществляет выборочную сериализацию своих данных в файловый поток. Порядок сохранения модулей всегда одинаков (Маркеры, Закладки, Гринзона, История, Piano Roll, Выделение). При загрузке проекта Тасэдитор вызывает модули в той же очерёдности, и они загружают свои данные из файлового потока, перемещая вперёд указатель на текущую позицию в файле.</span></p>
<pclass="rvps10"><spanclass="rvts22">Чтобы оценить целостность загружаемых данных, каждый модуль при сохранении записывает в файл строку-идентификатор своих данных. И если перед началом загрузки своих данных модуль не обнаружит эту строку на текущей позиции в файловом потоке, он откажется от загрузки и создаст данные по умолчанию, передав тасэдитору сообщение об ошибке загрузки. Кроме того, если вместо строки-идентификатора сохранения он обнаружит строку-идентификатор отсутствия данных, он откажется от загрузки и создаст данные по умолчанию, без генерации сообщения об ошибке.</span></p>
<pclass="rvps10"><spanclass="rvts22">Чтобы оценить целостность загружаемых данных, каждый модуль при сохранении записывает в файл строку-идентификатор своих данных. И если перед началом загрузки своих данных модуль не обнаружит эту строку на текущей позиции в файловом потоке, он откажется от загрузки и создаст данные по умолчанию, передав Тасэдитору сообщение об ошибке загрузки. Кроме того, если вместо строки-идентификатора сохранения он обнаружит строку-идентификатор отсутствия данных, он откажется от загрузки и создаст данные по умолчанию, без генерации сообщения об ошибке.</span></p>
<pclass="rvps10"><spanclass="rvts22">Данные о действиях игрока, воспринимаемые игрой и влияющие на её поведение.</span></p>
<pclass="rvps10"><spanclass="rvts22">Из-за многозначности слова "Ввод" среди русскоязычных ТАСеров чаще используется англицизм "Инпут", который можно перевести как "Вводимые данные".</span></p>
<pclass="rvps10"><spanclass="rvts22">ТАСинг базируется на допущении, что поведение игры однозначно зависит от Ввода игрока и начального состояния игры, и ни от чего более (т.н. детерминизм).</span></p>
<pclass="rvps10"><spanclass="rvts22">Примеры существующих типов Ввода: нажатие кнопки джойстика, наклон аналогового стика, прикосновение стилуса, крик в микрофон и т.д.</span></p>
<pclass="rvps10"><spanclass="rvts22">В Тасэдиторе используется представление Ввода в формате "последовательность кнопочных состояний".</span></p>
<pclass="rvps10"><spanclass="rvts22">Замечание: когда игрок не нажимает ни одной кнопки, этот факт так же является Вводом.</span></p>
<pclass="rvps10"><spanclass="rvts22">Данные, выдаваемые игрой в ответ на Ввод игрока.</span></p>
<pclass="rvps10"><spanclass="rvts22">Из-за многозначности слова "Вывод" в данном Руководстве используются слова "результат", "реакция игры" и т.п.</span></p>
<pclass="rvps10"><spanclass="rvts22">Взаимодействие игрока с игрой можно представить в виде схемы, где игрок является субъектом, а игра – объектом взаимодействия.</span></p>
<pclass="rvps10"><spanclass="rvts22">Процесс игры в любую видеоигру можно представить в виде зацикленного взаимодействия между субъектом (игроком) и объектом (игрой).</span></p>
<pclass="rvps10"><spanclass="rvts22">Примеры существующих типов Вывода: изображение, звук, вибрация джойстика, изменение просматриваемой ячейки памяти, информация о лаге и т.д.</span></p>
<pclass="rvps10"><spanclass="rvts22">Последовательность действий для успешного завершения игры. Эту последовательность игрок вводит в игру для достижения желаемой цели. Последовательность может быть записана вживую (real-time – в реальном времени) либо приготовлена в виде воспроизводимых данных (например, журнал нажатых кнопок). Во втором случае эту последовательность можно неоднократно редактировать.</span></p>
<pclass="rvps10"><spanclass="rvts22">Последовательность действий для успешного завершения игры.</span></p>
<pclass="rvps10"><spanclass="rvts22">Эта последовательность вводится в игру с помощью устройства ввода (например, джойстика). Последовательность может быть либо исполнена вживую (real-time – в реальном времени), либо приготовлена в виде воспроизводимых данных (например, журнал нажатых кнопок). Во втором случае эту последовательность можно редактировать.</span></p>
<pclass="rvps10"><spanclass="rvts22">Прохождение с целью самого быстрого завершения игры.</span></p>
<pclass="rvps10"><spanclass="rvts22">Часто используется англицизм "cпидран".</span></p>
<pclass="rvps10"><spanclass="rvts22">В некоторых играх присутствует встроенный режим под названием "Speedrun" или "Time Attack", при котором игра ведёт учёт затраченного времени на прохождение. Для других игр можно использовать внешний таймер, измеряя время в секундах или TV-кадрах (обычно подразумевается 60 кадров в секунду).</span></p>
<pclass="rvps10"><spanclass="rvts22">Прохождение, при создании которого были использованы инструменты для редактирования совершаемых действий игрока. Благодаря редактированию можно создавать крайне неординарные прохождения видеоигр.</span></p>
<pclass="rvps10"><spanclass="rvts22">Прохождение, при создании которого были использованы инструменты для редактирования совершаемых действий игрока.</span></p>
<pclass="rvps10"><spanclass="rvts22">Процесс создания ТАСа называется ТАСингом, а авторы зовутся ТАСерами.</span></p>
<pclass="rvps10"><spanclass="rvts22">Целью ТАСа может быть не только спидран, но и развлекательный видеоролик (playaround).</span></p>
<pclass="rvps10"><spanclass="rvts22">Благодаря редактированию Ввода ТАСер освобождается от некоторых человеческих ограничений (например, слабой реакции) и может направить все усилия на создание крайне неординарных прохождений видеоигр. Это может быть не только спидран, но и развлекательный видеоролик (playaround).</span></p>
<pclass="rvps10"><spanclass="rvts22">Контейнер для хранения Ввода и сопутствующих данных.</span></p>
<pclass="rvps10"><spanclass="rvts22">В отличие от видеороликов, игровой Вывод (изображение и звук) в мувике не хранится, он появляется на экране только в результате применения Ввода мувика к соответствующей игре.</span></p>
<pclass="rvps10"><spanclass="rvts22">Также мувиком называется файл (movie file), в котором хранится Ввод и сопутствующие данные.</span></p>
<pclass="rvps10"><spanclass="rvts22">Особая ситуация в игре, вызванная повышенной нагрузкой на процессор.</span></p>
<pclass="rvps10"><spanclass="rvts22">Процессор может производить строго фиксированное количество операций в единицу времени (например, за 1 кадр). Но игра пытается имитировать безграничность реальной жизни, поэтому количество взаимодействующих объектов в ней может сильно варьироваться. Как следствие, возможны ситуации, когда обработка объектов занимает больше времени, чем предусмотрено. В таких ситуациях задерживается обработка Ввода и Вывода, что невыгодно при создании спидрана. Поэтому лаг зачастую выступает в качестве одного из факторов оптимальности, который нужно учитывать во время тестирования вариантов Ввода. Обычно требуется минимизировать количество кадров с лагом.</span></p>
<pclass="rvps10"><spanclass="rvts22">Наличие лага в кадре определяется эмулятором после окончания обработки данного кадра. Если во время обработки кадра игра опросила Ввод, считается, что лага в кадре нет. Если игра не опросила Ввод – лаг в кадре есть. В Тасэдиторе кадры с лагом отмечаются красными строками. Рисовать Ввод на этих кадрах бесполезно.</span></p>
<pclass="rvps10"><spanclass="rvts22">Превышение нормы при задержке между Вводом и Выводом.</span></p>
<pclass="rvps10"><spanclass="rvts22">При зацикленном взаимодействии между игроком и игрой обычно устанавливается режим Ввода и Вывода через равные промежутки времени, например, ровно 60 раз в секунду.</span></p>
<pclass="rvps10"><spanclass="rvts22">Процессор может производить строго фиксированное количество операций в единицу времени. Но игра пытается имитировать безграничность реальной жизни, поэтому количество игровых объектов может сильно варьироваться. Как следствие, возможны ситуации, когда обработка объектов занимает больше времени, чем отведено. В таких ситуациях задерживается генерация Вывода и опрашивание следующего Ввода.</span></p>
<pclass="rvps10"><spanclass="rvts22">Лишние задержки не выгодны при создании спидрана. Поэтому лаг зачастую выступает в качестве одного из факторов, который нужно учитывать во время создания Ввода. Обычно требуется минимизировать количество кадров с лагом.</span></p>
<pclass="rvps10"><spanclass="rvts22">Наличие лага в кадре определяется эмулятором сразу после окончания обработки данного кадра. Если во время эмуляции кадра игра опросила Ввод, считается, что лага в кадре нет. Если игра не опросила Ввод – лаг в кадре есть. В Тасэдиторе кадры с лагом отмечаются красными строками. Рисовать Ввод на этих кадрах бесполезно.</span></p>
<pclass="rvps10"><spanclass="rvts22">Отличие Вывода от ожидаемого образца, в результате чего действия игрока расходятся с логикой игры.</span></p>
<pclass="rvps10"><spanclass="rvts22">Может произойти в случае, если Ввод проигрывается на другой игре, другом эмуляторе или с другими настройками синхронизирования. Также может произойти, если эмулятор не обеспечивает детерминизм должным образом.</span></p>
<pclass="rvps10"><spanclass="rvts22">Часть мувика, соответствующая промежутку времени между двумя игровыми событиями.</span></p>
<pclass="rvps10"><spanclass="rvts22">Разбиение мувика на участки – это разложение большой задачи на мелкие подзадачи.</span></p>
<pclass="rvps10"><spanclass="rvts22">Границы участка определяются игровыми событиями. Начальное событие отсекает все предыдущие задачи и концентрирует внимание ТАСера на ближайшем наборе условий. Конечное событие служит для оценки оптимальности всех вариантов решения текущей задачи.</span></p>
<pclass="rvps10"><spanclass="rvts22">Размер участка измеряется в кадрах, аграницы участка определяются игровыми событиями. Начальное событие отсекает все предыдущие задачи и концентрирует внимание ТАСера на ближайшем наборе условий. Конечное событие служит для оценки оптимальности всех вариантов решения текущей задачи.</span></p>
<pclass="rvps10"><spanclass="rvts22">В ТАСинге: Процесс постепенного улучшения целевых характеристик мувика.</span></p>
<pclass="rvps10"><spanclass="rvts22">Большинство задач в видеоиграх решаются множеством разнообразных способов. У каждого способа есть свои плюсы и минусы. ТАСер перед началом работы выбирает свои цели (например, сделать пацифистский спидран), тем самым расставляя приоритеты среди вышеупомянутых плюсов и минусов. Поэтому любые способы решения можно оценить и сравнить между собой, чтобы определить лучший и худший.</span></p>
<pclass="rvps10"><spanclass="rvts22">Оптимизация ТАСа заключается в редактировании Ввода и оценке получающегося Вывода. Когда ТАСер получает от игры более предпочтительный результат, он оставляет текущий Ввод в качестве основного, пока не найдёт ещё более оптимальный Ввод. В финальном ТАСе для каждой подзадачи оставлен наилучший вариант решения.</span></p>
<pclass="rvps10"><spanclass="rvts22">Процесс поиска оптимального (наилучшего) решения задачи на текущем участке.</span></p>
<pclass="rvps10"><spanclass="rvts22">Почти любую задачу в видеоиграх можно решить множеством разнообразных способов. У каждого способа есть свои плюсы и минусы. ТАСер перед началом работы выбирает свои цели (например, сделать пацифистский спидран), тем самым расставляя приоритеты среди вышеупомянутых плюсов и минусов. Поэтому любые способы решения можно оценить и сравнить между собой, чтобы определить лучший и худший.</span></p>
<pclass="rvps10"><spanclass="rvts22">Оптимизация ТАСа заключается в редактировании Ввода и оценке получающегося Вывода. Когда ТАСер получает от игры более предпочтительный результат, он отмечает текущий Ввод в качестве основного, пока не найдёт ещё более оптимальный Ввод. В финальном ТАСе для каждой подзадачи оставлен наилучший вариант решения.</span></p>
<pclass="rvps10"><spanclass="rvts22">Возможность решить задачу более оптимально. Например, достичь такого же результата с меньшими затратами, или улучшить результат без увеличения затрат.</span></p>
<pclass="rvps10"><spanclass="rvts22">Примеры улучшений в ТАСинге: использование неиспользованного таймсэйвера, повышение эффективности использования таймсэйвера, повышение развлекательности мувика без потери скорости.</span></p>
<pclass="rvps10"><spanclass="rvts22">Возможность решить задачу более оптимально.</span></p>
<pclass="rvps10"><spanclass="rvts22">Примеры улучшений в спидранах: устранение неточностей, использование неиспользованного таймсэйвера, повышение эффективности использования таймсэйвера, повышение развлекательности мувика без потери скорости.</span></p>
<pclass="rvps10"><spanclass="rvts22">Жаргонный термин, используемый для обозначения ключевой категории трюков в спидранах.</span></p>
<pclass="rvps10"><spanclass="rvts22">При создании спидрана ТАСеру необходимо использовать все незапрещённые возможности для максимально быстрого прохождения игры. В первую очередь это грамотная шлифовка Ввода, во вторую– поиск и применение трюков. ТАСер пытается использовать все известные ему трюки максимально эффективно, чтобы его рекорд скорости нельзя было легко побить.</span></p>
<pclass="rvps10"><spanclass="rvts22">При создании спидрана ТАСеру необходимо использовать все незапрещённые возможности для максимально быстрого прохождения игры. В первую очередь это шлифовка Ввода с целью найти наилучшее решение, исходя из имеющихся знаний об игре. Во вторую очередь это расширение базы знаний– поиск и применение трюков. НастоящийТАСер пытается собрать максимум информации об игре и использовать все известные трюки максимально эффективно, чтобы его рекорд скорости нельзя было легко побить.</span></p>
<pclass="rvps10"><spanclass="rvts22">Примеры таймсэйверов: фичи игры, баги игры, манипуляция удачей.</span></p>
<pclass="rvps10"><spanclass="rvts22">Иногда ТАСер сознательно отказывается от использования некоторых таймсэйверов, в этом случае для егоТАСа отводится отдельная категория на сайте. Например: спидран SMB без использования кнопки </span><spanclass="rvts32">B</span><spanclass="rvts22"> (отказ от фичи), спидран Sonic the Hedgehog без прохождения сквозь стены (отказ от бага).</span></p>
<pclass="rvps10"><spanclass="rvts22">Замечание: иногда ТАСер сознательно отказывается от использования некоторых таймсэйверов, в этом случае для егоТАСа отводится отдельная категория на сайте. Например: спидран Super Mario Bros без использования кнопки </span><spanclass="rvts32">B</span><spanclass="rvts22"> (отказ от фичи), спидран Sonic the Hedgehog без прохождения сквозь стены (отказ от бага).</span></p>
<pclass="rvps10"><spanclass="rvts22">Запланированный разработчиками аспект игры, который необходимо учитывать в качестве фактора оптимальности при создании Ввода мувика.</span></p>
<pclass="rvps10"><spanclass="rvts22">Некоторые фичи не существенны для простого игрока, но существенны для ТАСера. Поэтому перед оптимизацией Ввода рекомендуется провести исследования игрового движка.</span></p>
<pclass="rvps10"><spanclass="rvts22">Некоторые фичи не существенны (а иногда и незаметны) для простого игрока, но существенны для ТАСера. Поэтому перед оптимизацией Ввода рекомендуется провести исследования игрового движка.</span></p>
<pclass="rvps10"><spanclass="rvts22">Примеры существеных для ТАСера фич: ускорение при ранении (damage boost), вынужденное ожидание при подсчёте очков, наличие субпикселей у координат персонажа, особенности искусственного интеллекта врагов и т.д.</span></p>
<pclass="rvps10"><spanclass="rvts22">Незапланированный разработчиками аспект игры, который необходимо учитывать в качестве фактора оптимальности при создании Ввода мувика.</span></p>
<pclass="rvps10"><spanclass="rvts22">Баги игры должны быть воспроизводимыми (хотя бы теоретически) на настоящей приставке. Использование багов, специфичных для эмулятора, не разрешается.</span></p>
<pclass="rvps10"><spanclass="rvts22">Многие баги обнаруживаются даже при обычной игре без использования инструментов. Некоторые же требуют тщательного исследования поведения игры и изучения её исполняемого кода.</span></p>
<pclass="rvps10"><spanclass="rvts22">Используемые ТАСером баги должны быть воспроизводимыми (хотя бы теоретически) на настоящей приставке. Использование багов, специфичных для эмулятора, не разрешается.</span></p>
<pclass="rvps10"><spanclass="rvts22">Многие баги обнаруживаются даже при обычной игре без использования инструментов. Некоторые требуют тщательного исследования поведения игры и изучения её исполняемого кода.</span></p>
<pclass="rvps10"><spanclass="rvts22">Примеры багов: упрощённая проверка коллизий, отсутствие проверки испорченных данных в сохранении, непредусмотренное изменение ячеек оперативной памяти, ошибка в порядке очерёдности проверок и т.д.</span></p>
<pclass="rvps10"><spanclass="rvts22">Категория трюков, основанных на неограниченной эксплуатации фич, использование которых при нормальной игре сдерживается нехваткой знаний и способностей игрока.</span></p>
<pclass="rvps10"><spanclass="rvts22">По сути любая оптимизация Ввода является манипуляцией с игровыми фичами. Но некоторые аспекты игры кажутся обычным игрокам особенно непредсказуемыми. Алгоритмы их функционирования нарочно скрыты разработчиками от невооружённого глаза, игроку они показаны как случайные и неконтролируемые.</span></p>
<pclass="rvps10"><spanclass="rvts22">Однако на самом деле все аспекты видеоигр являются детерминированными (однозначно зависящими от Ввода). Использование инструментов и вдумчивого анализа позволяет выявить скрытые закономерности и использовать их при создании Ввода мувика.</span></p>
<pclass="rvps10"><spanclass="rvts22">А в некоторых случаях вместо исследования алгоритмов достаточно воспользоваться методом перебора, натыкаясь на удачный исход событий методом проб и ошибок, а затем оставляя в мувике именно тот Ввод, который приводит игру к удачному результату.</span></p>
<pclass="rvps10"><spanclass="rvts22">Неограниченная эксплуатация фич, использование которых при нормальной игре сдерживается нехваткой знаний у игрока.</span></p>
<pclass="rvps10"><spanclass="rvts22">По сути любые эксперименты с изменением Ввода являются манипуляцией с игровыми фичами. Но некоторые аспекты игр кажутся обычным игрокам особенно непредсказуемыми. Алгоритмы их функционирования нарочно скрыты разработчиками от невооружённого глаза, игроку они показаны как случайные и неконтролируемые.</span></p>
<pclass="rvps10"><spanclass="rvts22">Однако на самом деле все аспекты видеоигр являются детерминированными (однозначно зависящими от Ввода). Использование инструментов и вдумчивого анализа позволяет выявить скрытые закономерности и использовать их при создании Ввода мувика. А в некоторых случаях вместо исследования алгоритмов достаточно воспользоваться методом перебора, натыкаясь на удачный исход событий методом проб и ошибок, а затем оставляя в мувике именно тот Ввод, который приводит игру к удачному результату.</span></p>
<pclass="rvps10"><spanclass="rvts22">Subpixels – Субпиксели (дробная часть пикселя)</span></p>
<pclass="rvps10"><spanclass="rvts26">Subpixels – Субпиксели</span><spanclass="rvts22"> (дробная часть пикселя)</span></p>
<pclass="rvps10"><spanclass="rvts22">Наличие не только целых, но и дробных значений у координат персонажа в игре.</span></p>
<pclass="rvps10"><spanclass="rvts22">В общем случае ТАСеру следует понимать отличие между экранными координатами спрайта и реальными координатами физического объекта в игре. Только в простейших играх эти координаты совпадают, обычно же на экран выводится приблизительное положение вещей, где проекции всех объектов выравнены по сетке пикселей. Чтобы узнать реальные координаты (и другие скрытые от глаз игрока данные), нужно просматривать ячейки оперативной памяти эмулируемой платформы. Это делается с помощью просмотрщика памяти (Memory Watch) или Lua.</span></p>
<pclass="rvps10"><spanclass="rvts22">Один из способов создания Ввода в мувике.</span></p>
<pclass="rvps10"><spanclass="rvts22">Заключается в последовательном добавлении Ввода в конец мувика, одновременно с просмотром промежуточных результатов.</span></p>
<pclass="rvps10"><spanclass="rvts22">Другим способом является рисование Ввода непосредственно в мувике.</span></p>
<pclass="rvps10"><spanclass="rvts22">Подробнее: </span><aclass="rvts28"href="Toolbox.html#recorder">Панель инструментов</a><spanclass="rvts22">, </span><aclass="rvts28"href="TASingMethodology.html#linear-tasing">Методология ТАСинга</a><spanclass="rvts22">, </span><aclass="rvts28"href="TraditionalTASing.html">Традиционный метод ТАСинга</a></p>
<pclass="rvps10"><spanclass="rvts22">Один из способов редактирования Ввода в мувике.</span></p>
<pclass="rvps10"><spanclass="rvts22">Заключается в последовательном изменении Ввода, начиная с определённого кадра, одновременно с просмотром промежуточных результатов.</span></p>
<pclass="rvps10"><spanclass="rvts22">Другим способом является непосредственная модификация Ввода в мувике.</span></p>
<pclass="rvps10"><spanclass="rvts22">Подробнее: </span><aclass="rvts28"href="TASingMethodology.html#linear-tasing">Методология ТАСинга</a><spanclass="rvts22">, </span><aclass="rvts28"href="TraditionalTASing.html">Традиционный метод ТАСинга</a><spanclass="rvts22">, </span><aclass="rvts28"href="Ideas.html#RerecordsCounter">Счётчик перезаписей</a></p>
<pclass="rvps10"><spanclass="rvts22">Пошаговая эмуляция игры минимальными порциями (единицами измерения времени) – кадрами.</span></p>
<pclass="rvps10"><spanclass="rvts22">Используется для ручного управления ходом времени, является более эффективной заменой простому замедлению эмуляции.</span></p>
<pclass="rvps10"><spanclass="rvts22">Ускорение эмуляции игры до максимально возможной скорости.</span></p>
<pclass="rvps10"><spanclass="rvts22">Используется для пропуска несущественных игровых событий и уменьшения времени ожидания при добегании к дальнему кадру мувика.</span></p>
<pclass="rvps10"><spanclass="rvts22">С помощью настроек эмулятора можно гибко варьировать скорость эмуляции, замедляя или ускоряя её при необходимости. Под Турбо понимается максимально возможная скорость эмуляции. Этот предел зависит от скорости вашего компьютера.</span></p>
<pclass="rvps10"><spanclass="rvts22">С помощью настроек эмулятора можно гибко варьировать скорость эмуляции, замедляя или ускоряя её при необходимости. Под Турбо понимается максимально возможная скорость эмуляции. Этот предел зависит от производительности вашего компьютера.</span></p>
<pclass="rvps10"><spanclass="rvts22">Снимок состояния эмулируемой платформы.</span></p>
<pclass="rvps10"><spanclass="rvts22">В отличие от встроенных игровых сохранений, здесь сохраняется и восстанавливается исчерпывающая информация о состоянии эмулируемой системы. Это необходимо для обеспечения детерминизма при навигации по мувику (в частности, при Перезаписи Ввода).</span></p>
<pclass="rvps10"><spanclass="rvts22">В отличие от встроенных игровых сохранений, здесь сохраняется и восстанавливается исчерпывающая информация о состоянии эмулируемой системы.</span></p>
<pclass="rvps10"><spanclass="rvts22">Piano Roll – Piano Roll (перфолента)</span></p>
<pclass="rvps10"><spanclass="rvts22">Особый тип визуального представления данных, похожий на представление в виде таблицы.</span></p>
<pclass="rvps10"><spanclass="rvts22">Подобный интерфейс используется в редакторах музыки (MIDI-секвенсорах и MOD-трекерах). Его имя и принцип действия унаследован из физического аналога (давно существовавшие свёртки перфорированной бумаги для механических клавесинов).</span></p>
<pclass="rvps10"><spanclass="rvts26">Piano Roll – Piano Roll</span><spanclass="rvts22"> (перфолента)</span></p>
<pclass="rvps10"><spanclass="rvts22">Тип визуального представления данных, похожий на представление в виде таблицы.</span></p>
<pclass="rvps10"><spanclass="rvts22">Этот интерфейс используется в редакторах музыки (MIDI-секвенсорах и MOD-трекерах). Его имя и принцип действия унаследован из физического аналога (давно существовавшие свёртки перфорированной бумаги для механических клавесинов).</span></p>
<pclass="rvps10"><spanclass="rvts22">В Piano Roll Тасэдитора отображаются и редактируются данные мувика (Ввод и Маркеры), а также отображаются некоторые данные эмулируемой игры (текущий кадр, Журнал лага, Закладки и т.д.).</span></p>
<pclass="rvps10"><spanclass="rvts22">Каждая строка Piano Roll соотносится с одним кадром мувика.</span></p>
<pclass="rvps10"><spanclass="rvts22">Подробнее: </span><aclass="rvts28"href="PianoRoll.html">Интерфейс Piano Roll</a><spanclass="rvts22">, </span><aclass="rvts28"href="Ideas.html#PianoRoll">Piano Roll</a></p>
<pclass="rvps10"><spanclass="rvts22">Подробнее: </span><aclass="rvts28"href="PianoRoll.html">Интерфейс Piano Roll</a><spanclass="rvts22">, </span><aclass="rvts28"href="Ideas.html#PianoRoll">Спецификации Piano Roll</a></p>
<pclass="rvps10"><spanclass="rvts22">Текущий проигрываемый кадр мувика. События этого кадра отображаются в окне эмулятора в виде скриншота, а в Piano Roll соответствующая строка обозначается голубым цветом и значком "Play" (голубая стрелка).</span></p>
<pclass="rvps10"><spanclass="rvts22">Указатель на текущий проигрываемый кадр мувика.</span></p>
<pclass="rvps10"><spanclass="rvts22">События этого кадра отображаются в окне эмулятора в виде скриншота, а в Piano Roll соответствующая строка обозначается голубым цветом и значком "Play" (голубая стрелка).</span></p>
<pclass="rvps10"><spanclass="rvts22">Одновременно можно видеть только события одного кадра мувика. Чтобы увидеть скриншот последующих событий мувика, нужно переместить голубой Курсор Проигрывателя вперёд (вниз по Piano Roll), чтобы увидеть скриншот предыдущих событий, нужно переместить курсор назад (вверх по Piano Roll).</span></p>
<pclass="rvps10"><spanclass="rvts22">Подробнее: </span><aclass="rvts28"href="PianoRoll.html">Интерфейс Piano Roll</a><spanclass="rvts22">, </span><aclass="rvts28"href="Navigation.html#playback-cursor">Навигация Курсором Проигрывателя</a></p>
<pclass="rvps10"><spanclass="rvts22">Хранилище данных, специально разработанное для ускорения навигации Курсором Проигрывателя по мувику.</span></p>
<pclass="rvps10"><spanclass="rvts22">В это хранилище Тасэдитор собирает сэйвы для каждого кадра мувика во время эмуляции, а при необходимости использует эти сэйвы для мгновенного прыжка Курсором Проигрывателя на любой кадр.</span></p>
<pclass="rvps10"><spanclass="rvts22">Это хранилище автоматически собирает сэйвы для каждого кадра мувика во время эмуляции, а при необходимости использует эти сэйвы для мгновенного прыжка Курсором Проигрывателя на любой кадр.</span></p>
<pclass="rvps10"><spanclass="rvts22">Набор строк Piano Roll, отмеченных специальным цветом (обычно синим).</span></p>
<pclass="rvps10"><spanclass="rvts22">Любая строка (и, соответственно, любой кадр мувика) является либо выделенной, либо не выделенной.</span></p>
<pclass="rvps10"><spanclass="rvts22">Выделение позволяет оперировать одновременно с несколькими кадрами, например, удалить целый регион кадров вместо удаления каждого кадра поодиночке.</span></p>
<pclass="rvps10"><spanclass="rvts22">Самый верхний выделенный кадр называется Курсором Выделения.</span></p>
<pclass="rvps10"><spanclass="rvts22">Курсор Выделения автоматически следует за процессом редактирования Ввода, поэтому сего помощью можно осуществлять навигацию по местам редактирования.</span></p>
<pclass="rvps10"><spanclass="rvts22">Курсор Выделения автоматически следует за процессом редактирования Ввода.</span></p>
<pclass="rvps10"><spanclass="rvts22">Подробнее: </span><aclass="rvts28"href="PianoRoll.html">Интерфейс Piano Roll</a><spanclass="rvts22">, </span><aclass="rvts28"href="Navigation.html#selection-cursor">Навигация Курсором Выделения</a></p>
<pclass="rvps10"><spanclass="rvts22">Жёлтая отметка для строки в Piano Roll, акцентирующая внимание на этом кадре.</span></p>
<pclass="rvps10"><spanclass="rvts22">Маркером можно отметить любой кадр в Piano Roll. С помощью установки и удаления Маркеров можно повысить наглядность и удобство работы.</span></p>
<pclass="rvps10"><spanclass="rvts22">Цели использования Маркеров:</span></p>
<pclass="rvps10"><spanclass="rvts22">Подробнее: </span><aclass="rvts28"href="PianoRoll.html#markers">Интерфейс Piano Roll</a><spanclass="rvts22">, </span><aclass="rvts28"href="Ideas.html#Markers">Маркеры</a></p>
<pclass="rvps10"><spanclass="rvts22">Подробнее: </span><aclass="rvts28"href="PianoRoll.html#markers">Интерфейс Piano Roll</a><spanclass="rvts22">, </span><aclass="rvts28"href="Ideas.html#Markers">Спецификации Маркеров</a></p>
<pclass="rvps10"><spanclass="rvts22">Отметка для кадра в Piano Roll, хранящая информацию о данном кадре, в том числе ответвление мувика, которое однозначно приводит игру к событиям данного кадра.</span></p>
<pclass="rvps10"><spanclass="rvts22">Закладки могут использоваться для навигации Курсором Проигрывателя, но в Тасэдиторе они в основном используются для хранения ответвлений.</span></p>
<pclass="rvps10"><spanclass="rvts22">Подробнее: </span><aclass="rvts28"href="Toolbox.html#bookmarks">Панель инструментов</a><spanclass="rvts22">, </span><aclass="rvts28"href="Ideas.html#BookmarksBranches">Закладки и ответвления</a></p>
<pclass="rvps10"><spanclass="rvts22">Номерная отметка для кадра мувика.</span></p>
<pclass="rvps10"><spanclass="rvts22">Закладка сохраняет всю необходимую информацию о кадре, на который она установлена. В том числе то ответвление мувика, которое однозначно приводит игру к событиям данного кадра.</span></p>
<pclass="rvps10"><spanclass="rvts22">Закладки могут использоваться для навигации Курсором Проигрывателя, но в основном они используются для хранения ответвлений.</span></p>
<pclass="rvps10"><spanclass="rvts22">Копия мувика, хранящая его состояние на момент создания Закладки.</span></p>
<pclass="rvps10"><spanclass="rvts22">При желании текущий мувик может быть заменён на это ответвление, тем самым восстанавливается состояние мувика из копии.</span></p>
<pclass="rvps10"><spanclass="rvts22">С помощью ответвлений можно одновременно хранить в проекте несколько разных мувиков и мгновенно переключаться между ними:</span></p>
<pclass="rvps10"><spanclass="rvts22">Интерпретируемый язык программирования, использующийся во многих ТАСерских эмуляторах для визуализации данных и создания индивидуальных инструментов.</span></p>
<pclass="rvps10"><spanclass="rvts22">Средство для автоматизации определённых действий.</span></p>
<pclass="rvps10"><spanclass="rvts22">Обычно программы-боты используются для избавления человека от рутинных действий, не требующих высокой гибкости ума. В отличие от человека, боты не изобретают путь решения задачи, а методично перебирают варианты решения, следуя фиксированному алгоритму, заложенному программистом.</span></p>
<pclass="rvps10"><spanclass="rvts22">Сами по себе боты не способны создать экстраординарное прохождение видеоигры. Их практично использовать только для исчерпывающего перебора вариантов на коротком участке мувика. И в большинстве случаев ТАСеру проще перебрать варианты вручную, интуитивно отсеивая тупиковые варианты в уме, чем заниматься написанием бота и долгим ожиданием результатов полного перебора.</span></p>
<pclass="rvps10"><spanclass="rvts22">Средство для автоматизации действий.</span></p>
<pclass="rvps10"><spanclass="rvts22">Обычно программы-боты используются для избавления человека от рутинных действий, не требующих высокой гибкости ума. В отличие от человека, боты не изобретают путь решения задачи, а методично перебирают варианты решения, следуя алгоритму, заложенному программистом.</span></p>
<pclass="rvps10"><spanclass="rvts22">В наши дни практично использовать ботов только для исчерпывающего перебора вариантов на коротком участке мувика. И в большинстве случаев ТАСеру проще перебрать варианты вручную, интуитивно отсеивая тупиковые варианты в уме, чем заниматься написанием бота и долгим ожиданием результатов полного перебора.</span></p>
<pclass="rvps10"><spanclass="rvts22">Для создания ботов требуется умение программировать. Обычно боты либо пишутся на Lua, либо встраиваются в эмуляторы с помощью модификации исходного кода.</span></p>
<liclass="rvps15"><spanclass="rvts22">Данные в Гринзону собираются в начале каждого кадра (перед эмуляцией) по следующему принципу: если в массиве Гринзоны ячейка с номером, равным текущему кадру, пустует, или же позиция головы Гринзоны меньше номера текущего кадра, то ячейка массива заполняется информацией о текущем состоянии игры (из эмулятора), а голова Гринзоны при необходимости перемещается вперёд.</span></li>
<liclass="rvps15"><spanclass="rvts22">Для экономии памяти Гринзона периодически разреживается, удаляя сэйвы (но не информацию о лаге) некоторых ранних кадров, от которых Курсор Проигрывателя ушёл достаточно далеко. </span><spanclass="rvts22">Подробнее см. </span><aclass="rvts28"href="ProgramCustomization.html#SetGreenzonecapacity">Настройка программы</a><spanclass="rvts22">.</span></li>
<liclass="rvps15"><spanclass="rvts22">Вся Гринзона сохраняется и загружается из файла проекта. После загрузки проекта Тасэдитор восстанавливает состояние Курсора Проигрывателя с помощью Гринзоны.</span></li>
<liclass="rvps15"><spanclass="rvts22">При любом изменении Ввода текущего мувика из Гринзоны удаляется информация о кадрах, идущих после первого изменённого кадра. Это реализуется с помощью уменьшения позиции головы Гринзоны, но сама устаревшая информация из массива не удаляется. Обычно одновременно с этим перемещается Курсор Проигрывателя, чтобы он всегда находился внутри Гринзоны (чтобы на экране FCEUX никогда не отображалось неактуальное состояние игры).</span></li>
<liclass="rvps15"><spanclass="rvts22">При любом изменении Ввода текущего мувика из Гринзоны удаляется информация о кадрах, идущих после первого изменённого кадра. Это реализуется с помощью уменьшения позиции головы Гринзоны и удаления устаревшей информации из массива (но без освобождения памяти, так как на место старых сэйвов вскоре будут записаны новые данные примерно того же размера). Обычно одновременно с этим перемещается Курсор Проигрывателя, чтобы он всегда находился внутри Гринзоны (чтобы на экране FCEUX никогда не отображалось неактуальное состояние игры).</span></li>
<liclass="rvps15"><spanclass="rvts22">При создании Закладки в неё копируется информация из соответствующего кадра Гринзоны. При загрузке ответвления этой Закладки из неё копируется информация в соответствующую ячейку Гринзоны, и при необходимости передвигается позиция головы.</span></li>
<liclass="rvps15"><spanclass="rvts22">Информация из Гринзоны используется при раскрашивании строк Piano Roll. Информация о лаге (Журнал лага) отображается не только для кадров, содержащихся в Гринзоне, но и для отсутствующих в ней кадров. Если в Гринзоне нет информации о лаге на определённом кадре, то предполагается, что этот кадр без лага.</span></li>
<liclass="rvps15"><spanclass="rvts22">Информация о лаге собирается в Гринзону одновременно со сбором текущего состояния игры, то есть перед началом эмуляции текущего кадра. В этот момент эмулятор обладает информацией о лаге предыдущего кадра, поэтому на кадре с номером 000020 данные о лаге сохраняются в ячейку 19. Также именно в этот момент может сработать операция </span><aclass="rvts28"href="Operations.html#AdjustLag">AdjustLag</a><spanclass="rvts22">, которая сдвигает весь Ввод в последующих кадрах мувика на 1 кадр вверх или вниз. Ввод сдвигается вверх, если в Журнале лага на прошлом кадре был лаг, а теперь его не стало. Ввод сдвигается вниз, если в Журнале лага на прошлом кадре не было лага, а теперь он есть. Вместе с Вводом аналогично сдвигается и все последующие ячейки Журнала лага, чтобы красные строки Piano Roll по-прежнему соответствовали сдвинувшимся пропускам во Вводе. Кроме того, после операции AdjustLag Курсор Проигрывателя насильно возвращается на предыдущий кадр (в котором изменилась информация о лаге), чтобы проэмулировать его заново. Это реализуется не простой перемоткой назад, а усечением Гринзоны после предыдущего кадра.</span></li>
@ -233,6 +233,7 @@
<liclass="rvps15"><spanclass="rvts22">Таким образом, зелёная стрелка не меняет своё положение, когда ещё до запуска эмуляции Гринзона усекается повторно (например, ТАСер изменил Ввод на кадре 90, а затем на кадре 80, но зелёная стрелка так и осталась на кадре 100).</span></li>
<liclass="rvps15"><spanclass="rvts22">Также зелёная стрелка не меняет своё положение, когда Гринзона усекается во время добегания, и эмулятор в этот момент не стоит на паузе.</span></li>
<liclass="rvps15"><spanclass="rvts22">Зелёная стрелка не меняет своё положение при операциях </span><aclass="rvts28"href="Operations.html#AdjustLag">AdjustLag</a><spanclass="rvts22">, </span><aclass="rvts28"href="Operations.html#Branch">Branch</a><spanclass="rvts22">, </span><aclass="rvts28"href="Operations.html#Record">Record</a><spanclass="rvts22">.</span></li>
<liclass="rvps15"><spanclass="rvts22">При нажатии средней кнопки мыши запускается добегание к зелёной стрелке, если она находится за пределами Гринзоны.</span></li>
<pclass="rvps10"><spanclass="rvts22">Так как все создаваемые варианты прохождения участка автоматически сохраняются в Журнале Истории, уТАСера-новичка может возникнуть соблазн не сохранять варианты в Закладки, а просто один раз дойти до конечного события, а затем экспериментировать с этим Вводом, постепенно улучшая его (а если вместо улучшения получилось ухудшение – сразу же откатывать изменения с помощью </span><spanclass="rvts34">Ctrl + Z</span><spanclass="rvts22">). Такой способ ТАСинга крайне не рекомендуется, так как он не позволяет вам мыслить далеко за рамками первоначального варианта (из-за подсознательного страха потерять имеющийся лучший вариант, если уйти от него слишком далеко). Даже если в результате последнего изменения Ввода у вас получилось ухудшение прохождения участка, нужно не откатываться к старому варианту, а пытаться разобраться в причинах ухудшения и продолжать осмысленную модификацию, чтобы получить улучшение.</span></p>
<pclass="rvps10"><spanclass="rvts22">Чтобы не бояться, что предыдущее успешное прохождение участка затеряется в глубинах Журнала Истории, рекомендуется поступать так же, как делают в традиционном методе – отвести специальный слот для лучшего варианта прохождения участка и каждый раз ставить эту Закладку на конец участка, когда результат стал ещё лучше. </span></p>
<pclass="rvps10"><spanclass="rvts22">Чтобы не бояться, что предыдущее успешное прохождение участка затеряется в глубине Журнала Истории, рекомендуется поступать так же, как делают в традиционном методе – отвести специальный слот для лучшего варианта прохождения участка и каждый раз ставить эту Закладку на конец участка, когда результат стал ещё лучше. </span></p>
<pclass="rvps10"><spanclass="rvts22">Точно так же нужно поступать с перспективными вариантами прохождения участка, которые в чём-то лучше, а в чём-то хуже друг друга. Если вы сохраняете все альтернативные варианты в отдельные Закладки, вы можете со спокойной душой удалять их из мувика или изменять до неузнаваемости – для возврата к ним вам потребуется всего одно нажатие клавиши, а не долгий поиск по Журналу Истории.</span></p>
<pclass="rvps10"><spanclass="rvts22">В этом методе ТАСинга, в отличие от традиционного, можно не заметить разделение мувика на логические участки, так как не требуется постоянно обозначать начало и конец текущего участка Закладками. Однако рекомендуется всё-таки соблюдать порядок и отмечать хотя бы начало участка Маркером (чтобы ограничить количество факторов оптимальности и не править </span><spanclass="rvts22">Ввод</span><spanclass="rvts22"> на предыдущих участках).</span></p>
@ -91,16 +91,16 @@
<pclass="rvps10"><spanclass="rvts22">Пункты 3 и 4. Одним махом вы рисуете зажатие кнопки </span><spanclass="rvts32">R</span><spanclass="rvts22"> на протяжении пары десятков кадров.</span></p>
<pclass="rvps10"><spanclass="rvts22">Пункт 5: Отпустили паузу эмуляции (средняя кнопка) и заметили, что Марио пробежал только до X=30, а потом остановился и стоит бесконечно долго. Ставим эмулятор на паузу и возвращаемся к пункту 2.</span></p>
<pclass="rvps10"><spanclass="rvts22">Пункт 2. Очевидно, ошибка в том, что надо дольше жать </span><spanclass="rvts32">R</span><spanclass="rvts22">.</span></p>
<pclass="rvps10"><spanclass="rvts22">Пункты 3 и 4. Дорисовали зажатие кнопки </span><spanclass="rvts32">R</span><spanclass="rvts22"> ещё на сотню кадров, чтобы уж точно хватило.</span></p>
<pclass="rvps10"><spanclass="rvts22">Пункты 3 и 4. Дорисовали зажатие кнопки </span><spanclass="rvts32">R</span><spanclass="rvts22"> ещё на сотню кадров, чтобы уж наверняка хватило.</span></p>
<pclass="rvps10"><spanclass="rvts22">Пункт 5: Отпустили паузу эмуляции и увидели, как Марио пробежал до X=100 и даже дальше.</span></p>
<pclass="rvps10"><spanclass="rvts22">Пункты 6, 7 и 8: Поставили эмулятор на паузу и отвели Курсор Проигрывателя немного назад, на кадр с X=100. Это будет конец участка, допустим, это оказался кадр с номером 200.</span></p>
<pclass="rvps10"><spanclass="rvts22">Пункт 2. Очевидно, надо ещё держать </span><spanclass="rvts32">B</span><spanclass="rvts22">.</span></p>
<pclass="rvps10"><spanclass="rvts22">Пункты 3 и 4. Дорисовали зажатие кнопки </span><spanclass="rvts32">B</span><spanclass="rvts22"> параллельно столбику из нажатий </span><spanclass="rvts32">R</span><spanclass="rvts22"> на участке от начального Маркера до конечного. Курсор Проигрывателя во время рисования отпрыгнул в начало участка, а на его месте в конце участка осталась зелёная стрелка.</span></p>
<pclass="rvps10"><spanclass="rvts22">Пункт 5: Отпустили паузу эмуляции (средняя кнопка) и увидели, как Марио пробежал быстрее, достиг X=100 и бежит дальше. Если вы не нажали на паузу самостоятельно, эмулятор остановится на кадре с зелёной стрелкой.</span></p>
<pclass="rvps10"><spanclass="rvts22">Пункты 6, 7 и 8: Отвели Курсор Проигрывателя на кадр с X=100, допустим, это кадр с номером 150. Зелёная стрелка напоминает, что в прошлый раз концом участка был кадр 200, значит новый вариант прохождения лучше старого. Можно даже не считать, на сколько кадров было улучшено прохождение, а просто выделить регион кадров от Курсора Проигрывателя до зелёной стрелки и увидеть размер Выделения в панели Splicer.</span></p>
<pclass="rvps10"><spanclass="rvts22">Пункт 2. Очевидно, надо бы ещё держать </span><spanclass="rvts32">B</span><spanclass="rvts22">во время бега.</span></p>
<pclass="rvps10"><spanclass="rvts22">Пункты 3 и 4. Дорисовали зажатие кнопки </span><spanclass="rvts32">B</span><spanclass="rvts22"> параллельно столбику из нажатий </span><spanclass="rvts32">R</span><spanclass="rvts22"> на участке от начального Маркера до конца участка или даже дальше. Курсор Проигрывателя во время рисования отпрыгнул в начало участка, а на его месте в конце участка осталась зелёная стрелка.</span></p>
<pclass="rvps10"><spanclass="rvts22">Пункт 5: Отпустили паузу эмуляции (средняя кнопка) и увидели, как Марио пробежал быстрее, достиг X=100 и бежит дальше. Если вы не нажали на паузу самостоятельно, эмулятор автоматически остановится на кадре с зелёной стрелкой.</span></p>
<pclass="rvps10"><spanclass="rvts22">Пункты 6, 7 и 8: После остановки эмулятора отводим Курсор Проигрывателя на кадр с X=100. Допустим, это кадр с номером 150. Зелёная стрелка напоминает, что в прошлый раз концом участка был кадр 200, значит новый вариант прохождения лучше старого. Можно даже не считать, на сколько кадров было улучшено прохождение, а просто выделить регион кадров от Курсора Проигрывателя до зелёной стрелки и увидеть размер Выделения в панели Splicer.</span></p>
<pclass="rvps10"><spanclass="rvts22">Пункт 2. Надо бы поэкспериментировать с прыжками и т.д...</span></p>
<pclass="rvps10"><spanclass="rvts22">Курсор Проигрывателя каждый раз будет автоматически отпрыгивать вверх, а на его месте будет оставаться зелёная стрелка.</span></p>
<pclass="rvps10"><spanclass="rvts22">Кроме того, вы можете сосредоточиться на первой части участка, мысленно определив подучасток, задачей которого будет наибыстрейшее получение максимума горизонтальной скорости. Для создания такого подучастка нужно перемотать Курсор Проигрывателя на кадр, в котором скорость достигает максимума в текущей стратегии прохождения участка, а затем просто начать редактирование </span><spanclass="rvts22">Ввод</span><spanclass="rvts22">а над этим кадром. При усечении Гринзоны зелёная стрелка перескочит на этот кадр, автоматически обозначив конец подучастка, и вы сможете сравнивать результат новой стратегии с результатом старой.</span></p>
<pclass="rvps10"><spanclass="rvts22">Кроме того, вы можете сосредоточиться на первой части участка, мысленно определив подучасток, задачей которого будет, например, наибыстрейшее получение максимума горизонтальной скорости. Для создания такого подучастка нужно перемотать Курсор Проигрывателя на кадр, в котором скорость (согласно окну Memory Watch) достигает максимума в текущей стратегии прохождения участка, а затем просто начать редактирование </span><spanclass="rvts22">Ввод</span><spanclass="rvts22">а над этим кадром. При усечении Гринзоны зелёная стрелка перескочит на этот кадр, автоматически обозначив конец подучастка, и вы сможете, как обычно, сравнивать результат новой стратегии с результатом старой.</span></p>
<pclass="rvps10"><spanclass="rvts22">Процесс создания </span><spanclass="rvts22">Ввод</span><spanclass="rvts22">а в нелинейном методе представляет собой постоянное чередование редактирования и просмотра участка. Анализ ситуации происходит как во время просмотра, так и во время редактирования.</span></p>
<pclass="rvps10"><spanclass="rvts22">Оптимальное соотношение времени на редактирование и просмотр формируется само по себе в процессе ТАСинга. Более того, это соотношение может меняться в процессе работы над проектом. Чем больше вы ТАСите одну игру, тем лучше вы ощущаете её закономерности. Поэтому ближе к концу своего мувика вы сможете интуитивно предсказывать результаты изменений </span><spanclass="rvts22">Ввод</span><spanclass="rvts22">а ещё во время редактирования, или даже раньше – во время обдумывания их в голове. А просмотр участка будет нужен только для подтверждения догадки.</span></p>
@ -109,7 +109,7 @@
<pclass="rvps10"><spanclass="rvts22">Способы просмотра результатов </span><spanclass="rvts22">Ввод</span><spanclass="rvts22">а на участке:</span></p>
<liclass="rvps15"><spanclass="rvts22">отпускание паузы хоткеем </span><spanclass="rvts27">Pause</span><spanclass="rvts22"> или нажатием средней кнопки мыши. После окончания участка требуется вручную поставить эмулятор на паузу (обычно не страшно, если вышло чуть позже, в крайнем случае можно потом отмотать наверх)</span></li>
<liclass="rvps15"><spanclass="rvts22">запуск добегания к зелёной стрелке хоткеем </span><spanclass="rvts27">Restore Playback </span><spanclass="rvts22">или нажатием средней кнопки, когда есть зелёная стрелка</span></li>
<liclass="rvps15"><spanclass="rvts22">запуск добегания к зелёной стрелке хоткеем </span><spanclass="rvts27">Restore Playback </span><spanclass="rvts22">или нажатием средней кнопки мыши, когда зелёная стрелка находится за пределами Гринзоны</span></li>
<liclass="rvps15"><spanclass="rvts22">запуск добегания к ближайшему Маркеру нажатием средней кнопки при зажатой клавише </span><spanclass="rvts34">Shift</span><spanclass="rvts22">, если в конце участка поставлен Маркер</span></li>
<liclass="rvps15"><spanclass="rvts22">запуск добегания к Курсору Выделения нажатием средней кнопки при зажатой клавише </span><spanclass="rvts34">Ctrl</span><spanclass="rvts22">, если Курсор Выделения стоит ниже Курсора Проигрывателя</span></li>
<liclass="rvps15"><spanclass="rvts22">повторный просмотр участка от Курсора Выделения до Курсора Проигрывателя нажатием средней кнопки при зажатой клавише </span><spanclass="rvts34">Ctrl</span><spanclass="rvts22">, если Курсор Выделения стоит выше Курсора Проигрывателя</span></li>
<pclass="rvps10"><spanclass="rvts22">При внесении любых изменений в мувик Тасэдитор регистрирует эти изменения в Журнале Истории. В текст каждой записи Журнала добавляется время внесения изменений, а также номер ключевого кадра (или начало и конец региона кадров), где произошли изменения.</span></p>
<spanclass="rvts22">С концом участка дело обстоит немного иначе. Определившись с целью (например, довести координату X до значения 50) можно зафиксировать конец участка, установив второй Маркер/Закладку на кадре, где текущее неидеальное прохождение достигает этой цели. При шлифовке </span><spanclass="rvts22">Ввод</span><spanclass="rvts22">а мы постараемся достичь той же цели (</span><spanclass="rvts37">X = 50</span><spanclass="rvts22">) на более ранний кадр, или хотя бы на тот же. И если в ходе редактирования и тестов </span><spanclass="rvts22">Ввод</span><spanclass="rvts22">а обнаружится, что цель действительно можно достигнуть раньше, необходимо будет передвинуть замыкающий Маркер/Закладку выше (отметив улучшенный конец участка), а затем продолжить тестирование других вариантов в поисках ещё лучшего. В традиционном методе ТАСинга именно так постепенно передвигается вверх главная Закладка, хранящая лучшее на данный момент прохождение участка.</span></p>
<pclass="rvps10"><spanclass="rvts22">В принципе, в Тасэдиторе вы можете дать волю своей лени и не отмечать конец участка ни Закладкой, ни Маркером, а просто держать цель в уме и примерно помнить, на каком кадре проявляется конечное событие в лучшем варианте. Эта мелочная экономия времени имеет смысл, когда участок очень прост, и его не потребуется многократно переделывать. Также, вместо замыкающего Маркера во многих случаях можно ориентироваться по зелёной стрелке, автоматически остающейся на кадре прошлого конца участка.</span></p>
<pclass="rvps10"><spanclass="rvts22">Однако в сложных ТАСах, где голова заполнена обдумыванием множества факторов оптимальности, лучше не торопиться, а методично отмечать текущий конец участка Маркером, перетаскивая этот Маркер в случае улучшения Ввода на участке. Ведь в сложных ТАСах улучшение участка – это большое достижение, так что слишком часто изменять отметку конца участка вам не придётся.</span></p>
<pclass="rvps10"><spanclass="rvts22">Однако в сложных ТАСах, где голова заполнена обдумыванием множества факторов оптимальности, лучше не торопиться, а методично отмечать текущий конец участка Закладкой, перестанавливая эту Закладку в случае улучшения Ввода на участке. Ведь в сложных ТАСах улучшение участка – это большое достижение, так что слишком часто изменять отметку конца участка вам не придётся.</span></p>
<pclass="rvps10"><spanclass="rvts22">Когда появляется уверенность, что найдено наилучшее решение из всех возможных, надо переходить к следующему участку. Не нужно просто так удалять старые Маркеры, они могут пригодиться в будущем, когда вы усомнитесь в идеальности тех или иных решений (например, найдя новый трюк) и захотите отредактировать Ввод в ранее пройденных уровнях. Скорее всего, логика разбиения останется той же даже после появлении нового фактора (нового трюка), и готовое разбиение сэкономит вам время.</span></p>
<pclass="rvps10"><spanclass="rvts22">Если в процессе тестирования вариантов Ввода на участке у вас появляется уверенность, что найдена наилучшая последовательность Ввода для первой половины (или трети) участка, имеет смысл разбить участок надвое и заняться только оставшимся вторым. Часто такие ситуации возникают, когда изначально взят слишком большой участок, и только при редактировании проявились логические подучастки в его составе. Это обычная практика.</span></p>
<pclass="rvps10"><spanclass="rvts22">Итак, если ваш характер не приемлет порядка, вы можете вовсе не ставить Маркеры и Закладки во время работы, представляя участки умозрительно. Но учтите, что эта информация тоже занимает часть рабочей памяти человека, так что в результате может не хватить места для каких-то факторов оптимальности, и вы этого даже не заметите.</span></p>
<pclass="rvps10"><spanclass="rvts22">Если же вы, наоборот, любите порядок, рекомендуется после завершения шлифовки участка (а можно и до или во время шлифовки) добавлять к Маркерам текстовые Заметки. Желательно оставлять комментарий хотя бы к Маркеру в начале участка, например, название участка или тег. Таким образом вы одновременно с ТАСингом документируете его разработку, оформляете появляющийся Ввод и придаёте ему объективный смысл. Это особенно полезно при работе в соавторстве, но и при ТАСинге в одиночку вы можете заметить, что "документация" из прошлых уровней мотивирует продолжать ТАСинг следующих. Отнимая секунды на печать текста, Маркеры дают силы не забросить проект на годы.</span></p>
<pclass="rvps10"><spanclass="rvts22">Если же вы, наоборот, любите порядок, рекомендуется после завершения шлифовки участка (а можно и до или во время шлифовки) добавлять к Маркерам текстовые Заметки! Желательно оставлять комментарий хотя бы к Маркеру в начале участка, например, название участка или тег. Таким образом вы одновременно с ТАСингом документируете его разработку, оформляете появляющийся Ввод и придаёте ему объективный смысл. Это особенно полезно при работе в соавторстве, но и при ТАСинге в одиночку вы можете заметить, что "документация" из прошлых уровней мотивирует продолжать ТАСинг следующих. Отнимая секунды на печать текста, Маркеры дают силы не забросить проект на годы.</span></p>
<pclass="rvps10"><spanclass="rvts22">Также Заметки помогают полнее раскрыть потенциал хитроумных трюков и багов игры. Дело в том, что во время написания текста Заметки, вы формализуете собственные знания об описываемом явлении. Когда суть трюка хранится в голове, вам будет казаться, что вы знаете о нём всё, и что в текущем ТАСе он уже и так используется максимально эффективно. Но когда появляется объективная модель в виде словесного описания трюка, нередко раскрываются новые грани вещей, казавшихся очевидными. На сайте TASVideos.org часто были случаи, когда один ТАСер прочитал описание какого-то трюка в сабмишене другого ТАСера и обнаружил способ использовать этот трюк лучше автора. Также были случаи, когда сам автор, перечитав свой свежий сабмишен, хлопал себя по лбу и срочно записывал улучшение.</span></p>
<pclass="rvps10"><spanclass="rvts22">Несмотря на всю полезность Маркеров и организации рабочего процесса, основной целью ТАСинга является создание Ввода. На поиск идеальной последовательности нажатий на каждом участке уходит намного больше времени, чем на всё остальное.</span></p>