diff --git a/help/taseditor-ru/AdvancedFeatures.html b/help/taseditor-ru/AdvancedFeatures.html new file mode 100644 index 00000000..da980fb7 --- /dev/null +++ b/help/taseditor-ru/AdvancedFeatures.html @@ -0,0 +1,225 @@ + + +
+Продвинутые возможности
+3. Эффективное использование Маркеров
+ +1. Как делиться проектами
+Проект Тасэдитора сохраняется на диске в виде fm3-файла. В этом файле сохраняются все существенные аспекты состояния работы, чтобы можно было в точности восстановить отложенное состояние рабочего процесса. Размер этого "мгновенного снимка" может занимать немало места (в зависимости от объёма Гринзоны он может составлять сотни мегабайт).
+Поэтому в случаях, когда вам нужно выложить проект в Интернете (например, для опубликования), имеет смысл сохранять в проекте не полный снимок рабочего процесса, а только необходимую информацию. Для этого нужно выбрать в меню Тасэдитора пункт File -> Save Compact. Появится окно, где можно выбрать, какие аспекты рабочего процесса следует сохранить в файл.
+Binary format of Input – сохранять Ввод мувика в двоичном формате. Эта настройка относится к формату fm2-мувиков, расширением которого является fm3-формат. По умолчанию галочка установлена. Если снять её, Ввод будет записан в fm3-файл в текстовом формате, что увеличит размер файла, но позволит редактировать его в любом текстовом редакторе. Однако Тасэдитор гораздо лучше приспособлен к редактированию мувиков, поэтому рекомендуется оставить эту галочку установленной и воздержаться от изменений содержимого fm3-файлов вне Тасэдитора. В некомпактных fm3-проектах (сохраняемых обычным способом) Ввод сохраняется в двоичном формате.
+Markers – сохранять Маркеры в файл. Ввод будет сохраняться в любом случае, так как без Ввода невозможно будет открыть fm3-файлы в эмуляторе. Без Маркеров проигрывание fm3-мувиков возможно, но такие проекты не многим будут отличаться от fm2-мувиков. Рекомендуется оставить эту галочку установленной, чтобы передать в компактном проекте все текущие Маркеры и их Заметки. Размер файла при этом увеличится незначительно.
+Bookmarks – сохранять Закладки в файл. Сохраняются данные всех имеющихся в проекте Закладок и их ответвлений. Рекомендуется оставить эту галочку установленной. Размер файла увеличится незначительно.
+Greenzone – сохранять Гринзону в файл. Сохраняются все сэйвы, а также Журнал лага. Размер файла значительно увеличится! Именно из-за Гринзоны проекты занимают так много места на диске. Поэтому рекомендуется оставить эту галочку снятой. Если Курсор Проигрывателя в момент компактного сохранения проекта находится на начальном кадре мувика, Гринзона в компактный fm3 вообще не попадает. Но если Курсор Проигрывателя остался внутри мувика, в fm3 попадает один сэйв Гринзоны, позволяющий при открытии проекта восстановить состояние эмулятора на кадр Курсора Проигрывателя. Один сэйв занимает очень мало места, поэтому файл остаётся компактным.
+History – сохранять Журнал Истории в файл. Размер файла увеличится на несколько мегабайт. Обычно нет смысла публиковать данные для отката изменений. Поэтому рекомендуется оставить эту галочку снятой. Когда вы открываете fm3-проект без журнала Истории, Тасэдитор создаёт его автоматически.
+Piano Roll – сохранять текущую позицию вертикального скроллинга Piano Roll, чтобы при открытии проекта сразу увидеть тот же самый участок. Размер файла увеличится незначительно, поэтому можно оставить галочку установленной.
+Selection – сохранять все данные Выделения в файл. Сохраняется как текущее Выделение (если есть), так и История Выделений. Размер файла увеличится незначительно, однако обычно нет смысла оставлять эти рабочие данные в публикуемом проекте. Поэтому рекомендуется оставить эту галочку снятой.
+В результате компактного сохранения вы можете получить fm3-проект размером менее полумегабайта, при этом передавая в файле не только текущий мувик, но и все существенные данные, которые могут понадобиться получателю. Например, если вы работаете в соавторстве с другим ТАСером, нужно обмениваться не только Вводом, но и Маркерами, и Закладками. А Гринзону получатель файла сможет воссоздать самостоятельно, просто запустив просмотр в Тасэдиторе.
+При сохранении компактного проекта к имени файла добавляется суффикс "-compact". Компактное сохранение проекта не заменяет обычное сохранение, поэтому, если в проекте имеются несохранённые изменения, звёздочка из заголовка окна не исчезнет после Save Compact.
+Помимо компактного сохранения проекта вы ещё можете экспортировать данные мувика в формат fm2, принятый на сайте TASVideos задолго до возникновения Тасэдитора. В этом формате вы передаёте только Ввод. Для этого нужно выбрать в меню Тасэдитора пункт File -> Export to FM2. Появится окно, где можно выбрать формат целевого мувика (1P, 2P или Fourscore).
+Так как формат FM2 поддерживает хранение текстовых субтитров, можно использовать Заметки Маркеров в качестве материала для субтитров. Для этого нужно установить галочку "Convert Marker Notes to Movie Subtitles". Тогда при просмотре полученного fm2-мувика зрители будут видеть текстовые субтитры, появляющиеся на тех кадрах, где стояли соответствующие Маркеры в вашему проекте. А при необходимости можно далее конвертировать fm2-субтитры в общепринятый формат ".srt" для выкладывания ТАСа на Youtube. Для этого надо при проигрывании fm2 в FCEUX щёлкнуть правой кнопкой по игровому окну и в появившемся контекстном меню выбрать пункт "Dump Subtitles to SRT file".
+FM2-файлы можно открывать в Тасэдиторе точно так же, как FM3-проекты. Для этого в окне выбора файла (File -> Open) нужно применить фильтр "All Files (*.*)" и выбрать требуемый fm2-мувик. Тасэдитор выдаст сообщение о том, что данный файл не является проектом и потребует подтверждения загрузки. При положительном ответе Тасэдитор создаст новый проект, используя Ввод и настройки (1P/2P/Fourscore) из данного fm2-файла.
+Кроме того, вы можете импортировать Ввод из любого fm2 или fm3-файла с помощью File -> Import Input. При этом не создаётся новый проект, просто текущий Ввод вашего проекта массово заменяется на Ввод из файла. Эта операция похожа на операцию "Вставка из Буфера Обмена", она заносится в Журнал Истории вашего проекта, и её можно откатить с помощью Ctrl + Z.
+2. Использование шаблонов
+При редактировании Ввода для каждой кнопки джойстика ТАСер составляет свою последовательность нажатий и отпусканий. Каждое нажатие можно нарисовать всего одним щелчком мыши (для создания длинного зажатия надо потянуть мышь вверх или вниз, не отпуская левую кнопку). Таким образом можно расставить последовательность какой угодно сложности.
+Для ускорения работы можно ещё запомнить типичные и часто используемые последовательности в виде шаблонов, чтобы устанавливать их парой щелчков, не рисуя каждое нажатие по отдельности.
+Шаблоны полезны в нескольких случаях:
+● +когда одинаковая последовательность часто используется в мувике (например, размеренное чередование нажатий и отпускания кнопки B)
+● +когда одну и ту же последовательность требуется рисовать для нескольких кнопок
+● +когда одну и ту же последовательность требуется перерисовывать много раз
+Чтобы добавить свой шаблон, нужно отредактировать в любом текстовом редакторе (например, в Блокноте) файл taseditor_patterns.txt, находящийся в подпапке /tools папки FCEUX. Каждая нечётная строчка этого файла обозначает название шаблона, каждая чётная строчка содержит закодированную последовательность состояний кнопки. Кодировка очень простая – единицей обозначается состояние "кнопка нажата", нулём обозначается состояние "кнопка отпущена".
+Каждый шаблон является зацикленным, то есть, когда Ввод по короткому шаблону устанавливается в длинный промежуток кадров, шаблон повторяется нужное количество раз, чтобы заполнить требуемый промежуток.
+Несколько наиболее очевидных шаблонов уже добавлено в файл автором. При добавлении или изменении шаблона необходимо перезапустить Тасэдитор, чтобы новые данные были прочитаны из файла. Список доступных шаблонов находится в верхнем правом углу окна TAS Editor. Для смены текущего шаблона нужно зайти в это меню и щёлкнуть по названию желаемого шаблона. Для простоты ориентирования в шаблонах рекомендуется отражать в названии каждого шаблона его игровую суть, или даже скопировать закодированную последовательность в название.
+Для установки шаблона Тасэдитору нужно знать начало и конец промежутка, в котором указанная кнопка будет нажиматься и отпускаться по заданному правилу. Существует 3 способа применения шаблона:
+1 способ. Щёлкнуть по начальному кадру левой кнопкой мыши (в любой колонке Piano Roll), чтобы этот кадр стал выделенным. Затем зажать клавишу Alt и щёлкнуть левой кнопкой мыши по конечному кадру в колонке редактируемой кнопки. В промежутке от выделенного до щёлкнутого кадра появится требуемая последовательность нажатий и отпусканий указанной кнопки. Этот способ удобно использовать, когда начальный кадр уже и так выделен из-за предыдущих щелчков по Piano Roll, и остаётся только зажать Alt и сделать один щелчок по конечному кадру.
+2 способ. Щёлкнуть по начальному кадру левой кнопкой мыши (в любой колонке Piano Roll) и зажать левую кнопку мыши, начав рисование. Зажать клавишу Alt и переместить курсор мыши вверх или вниз. Таким образом вы будете рисовать шаблонную последовательность нажатий и отпусканий указанной кнопки.
+3 способ. Выделить регион кадров, а затем зажать клавишу Alt и щёлкнуть левой кнопкой мыши по символу редактируемой кнопки в Заголовке Piano Roll. В выделенной области появится требуемая последовательность нажатий и отпусканий указанной кнопки.
+При использовании традиционного метода ТАСинга вы также можете применять шаблоны к записываемым последовательностям. Для этого нужно установить галочку Use pattern в панели Рекордера. При этом вам может сначала потребоваться запись кнопок, которые не нужно чередовать (их следует записать без галочки Use pattern), а затем на том же участке с помощью Superimpose можно записать остальные кнопки по шаблону.
+Например, вам нужно записать стрельбу очередью во время перепрыгивания ямы. Сначала запишите процесс перепрыгивания без стрельбы, затем вернитесь Курсором Проигрывателя в начало участка (прыжком на Закладку), включите галочки Superimpose и Use pattern, зажмите кнопку B и отпустите паузу эмуляции. На текущем участке произойдёт объединение Ввода прыжка с шаблонным Вводом стрельбы.
+До Тасэдитора вместо шаблонов существовала похожая концепция "Autofire". Однако из-за неудобств метода Записи она почти не использовалась, потому что во время впечатывания Ввода обычно проще нажимать и отпускать нужные кнопки вручную. Поэтому при использовании традиционного метода вы, скорее всего, не будете пользоваться шаблонами. Однако в нелинейном и полуавтоматическом методе шаблоны рисуются так же легко, как простые зажатия кнопок, и здесь они действительно могут повысить скорость работы.
+Шаблоны используются при создании последовательностей для любой отдельно взятой кнопки. А когда нужно вставить типовую комбинацию сразу нескольких кнопок, следует воспользоваться функциями Copy/Paste.
+3. Эффективное использование Маркеров
+Не ленитесь ставить Маркеры и писать комментарии.
+В первую очередь Маркеры предназначены для упрощения сложных ситуаций за счёт структуризации проблемы. Когда в игре требуется проделать несколько комплексных взаимосвязанных действий, следует разбить большой участок на отдельные участки, чтобы чётко понимать, когда заканчивается одно действие и начинается другое. Даже если первоначальное разбиение окажется ошибочным, оно поможет привести ваши мысли в порядок.
+Естественно, не имеет смысла ставить Маркеры на ничем не примечательных участках, которые даже не требуется шлифовать (где достаточно, например, просто зажать R). А вот ключевые и памятные моменты мувика следует не только отмечать Маркерами, но и комментировать Заметками. Это позволит вам легко держать в голове мысленный образ всего проекта, а также осуществлять быструю навигацию по тексту Заметок.
+Причём не требуется писать литературные произведения, можно ограничиться простыми словами-метками, наподобие тегов. Слова придумаете на ходу, тут главное – соблюдать системный подход. То есть, если в начале первого уровня (на экране перехода) вы поставили Маркер с Заметкой "level 1 start", то и в начале второго уровня следует написать "level 2 start", а не что-нибудь вроде "act II begin". Во время создания ТАСа у вас в голове формируется уникальный глоссарий, состоящий из понятий, актуальных для данной игры. И чем более системный подход вы применяете к написанию Заметок, тем проще будет охарактеризовать очередной участок, а значит, понять очередную задачу. И тем проще будет перемещаться между однотипными событиями мувика, а также находить старые участки Ввода, помня только их примерный результат в игре.
+Задачи, предлагаемые игроку в видеоиграх, очень часто повторяются. Детали и антураж могут меняться, но действия игрока остаются теми же. В особенно типовых случаях можно просто скопировать Ввод (решение подобной задачи из предыдущего уровня), и он успешно синхронизируется с новой игровой ситуацией (ну или понадобится небольшая модификация). Только после копипаста рекомендуется всё же разнообразить Ввод, чтобы зрители ТАСа не заскучали.
+Например, в начале многих уровней Super Mario Bros ТАСеру необходимо использовать одинаковую последовательность нажатий кнопок, чтобы оптимально разогнаться до максимальной скорости. Предположим, что вы добросовестно комментируете Ввод по ходу ТАСинга. Значит, в первом уровне на месте разгона вы оставили Заметку со словами вроде "acceleration" или тому подобными фразами по своему усмотрению. Теперь, когда в новом уровне вы начинаете создавать Ввод для участка с той же самой задачей, вы ставите в начало участка Маркер и пишете к нему Заметку, характеризующую текущую задачу. Очевидно, что в тексте Заметки тоже окажется слово "acceleration", потому что требуется разгон.
+И здесь уже можно воспользоваться функцией автоматического поиска похожих Заметок. Оставляете Курсор Проигрывателя на текущем участке и нажимаете кнопку Similar в самом низу панели инструментов. Курсор Выделения сразу же прыгнет к Маркеру, который содержит наиболее похожую Заметку, по мнению Тасэдитора. Скорее всего, это будет Маркер в начале участка, отвечающего за разгон в первом уровне. Поэтому вы можете сразу выделить весь Ввод на этом участке, нажав Ctrl + A, скопировать его в Буфер Обмена (Ctrl + C), а затем вернуться к текущему участку (дважды нажать Shift) и вставить из Буфера Обмена (Ctrl + V).
+Если первый результат поиска не подходит, можно нажимать кнопку More, чтобы переходить к следующим вариантам похожих Заметок. Обычно нужный участок обнаруживается в числе первых предложенных вариантов, конечно, при условии, что этот участок был отмечен Маркером с разумной Заметкой.
+Важно заметить, что при написании Заметки к второму разгону слово "acceleration" появляется в тексте не нарочно, а потому что одинаковые игровые ситуации описываются одинаковыми словами. Поэтому запоминать текст старых Заметок совершенно не требуется – в нужное время адекватные слова придут в голову сами.
+Таким образом, благодаря функции автопоиска вы прямо в процессе ТАСинга формируете библиотеку полезных комбинаций Ввода, наподобие вышеописанного списка Шаблонов, только без необходимости явно заготавливать последовательности кнопок – они появляются естественным путём во время оптимизации участков и хранятся прямо в мувике. А при улучшении какой-либо комбинации (например, если вы найдёте более быстрый способ осуществлять разгон)можно будет быстро найти и исправить все участки, где используется эта комбинация. Также здесь вам не требуется помнить точное описание каждой последовательности, ведь если вы соблюдаете системный подход к формулировке задач, используемые слова будут частично совпадать (а полное совпадение не требуется, алгоритм автопоиска достаточно умный).
+Автопоиск также удобно использовать для прыжков между двумя (и более) взаимосвязанными участками, разнесёнными в мувике достаточно далеко. Скроллировать Piano Roll колесом мыши или прыгать через десятки Маркеров от одного участка к другому будет не столь оперативно, как сделать щелчок по кнопке Similar или More. Чтобы участки-близнецы (или участок-источник и участок-приёмник) находились сразу же, имеет смысл написать в их заметках уникальное слово, которое не используется в других местах.
+Например, в игре Megaman с каждым робот-мастером необходимо драться дважды (во второй раз в конце игры). Логично предположить, что обе битвы будут озаглавлены Маркерами с Заметками, содержащими имя робота и слова "boss" или "fight", или что-то в этом духе. В результате, когда Курсор Проигрывателя находится на одном из этих двух мест, нажатие кнопки Similar перебросит вас к другому.
+В этом примере нужные слова при написании Заметки нашлись автоматически, и они достаточно уникальны, чтобы не повторяться в других местах мувика (по крайней мере не в том же наборе слов), поэтому автопоиск сработает идеально. В каком-нибудь другом примере, возможно, придётся специально придумывать уникальное слово-метку, но чаще всего будет достаточно первого пришедшего в голову описания происходящей в игре ситуации.
+В некоторых случаях может пригодиться ручной поиск текста в Заметках. Например, полезно в ходе ТАСинга оставлять в некоторых местах Заметку со словом "TODO" (или что-нибудь подобное) – там, где нет уверенности, что найдено окончательное решение задачи (самый оптимальный Ввод на участке). И когда у вас появится настроение провести работу над ошибками, можно будет пройтись по всем Маркерам с этим тегом, вызвав окно Find Note (Ctrl + F) и введя слово "TODO" для поиска.
+Если вам не нравится вся эта затея с Маркерами, вы вполне можете обойтись без них. В конце концов, большинство игр ставят перед ТАСером довольно простые задачи, которые не требуют высокоорганизованного подхода к процессу решения. Если задачу можно решить с наскока, конечно, не нужно тратить время на подготовку и укрепление позиций. Маркеры дают примущества в долгосрочных целях, а не в краткосрочных.
+Поэтому, как и в программировании, в большинстве случаев вы можете успешно писать так называемый "грязный код" (в нашем случае это мувик без Маркеров и Заметок), который быстро создаётся, но плохо поддерживается и расширяется. Либо вы можете создавать любовно оформленный проект, который приятно просматривать и модифицировать.
+Только важно понимать, что модифицировать свой мувик в попытках побить вчерашний рекорд ТАСерам приходится очень часто, поэтому затраты сегодняшнего времени на оформление проекта завтра могут окупиться тем, что сам внешний вид проекта мотивирует продолжать над ним работу.
+4. Использование Lua
+На языке Lua можно писать скрипты, исполняемые эмулятором FCEUX одновременно с эмуляцией игры. Для написания скриптов требуются минимальные навыки программирования, при этом спектр доступных возможностей чрезвычайно широк. Можно создавать собственные инструменты для ТАСинга, модифицировать игру во время её исполнения, получать доступ к изображению и звуку на лету, передавать данные по сети или записывать на диск и т.д. А также с помощью Lua-скриптов можно писать расширения для Тасэдитора.
+Для полного освоения языка Lua потребуется прочесть его документацию, однако для простых скриптов будет достаточно чтения этого Руководства, а также раздела о Lua в Документации FCEUX. Для начала попробуйте запустить примеры чужих скриптов, созданные ТАСерами для FCEUX. Они находятся в подпапке /luaScripts. Каждый скрипт представляет собой текстовый файл с расширением .lua, который можно создавать и редактировать в любом текстовом редакторе. Перед запуском скриптов нужно открыть ROM любой игры. Чтобы запустить скрипт, нужно открыть Lua-консоль (File -> Lua -> New Lua Script Window), в появившемся окне нажать кнопку Browse и загрузить желаемый скрипт, затем нажать кнопку Run. Если эмулятор при этом стоит на паузе, требуется либо снять паузу на короткое время, либо сделать Frame Advance, чтобы скрипт начал работать. А саму Lua-консоль можно скрыть, чтобы не загораживала экран.
+Программный код в Lua-скриптах для FCEUX обычно делится на две части – одна часть скрипта выполняется сразу в момент запуска скрипта, другая выполняется при наступлении определённых событий, таких как окончание эмуляции очередного кадра, загрузка или создание сэйва и т.д.
+Та часть кода, которая исполняется в момент запуска скрипта, обычно выполняется однократно (если, конечно, вы не организовали бесконечный цикл). Код выполняется построчно, сверху вниз. Чаще всего основная задача этой части кода – инициализировать глобальные переменные и зарегистрировать функции, которые затем будут автоматически запускаться эмулятором FCEUX при наступлении определённых событий. В этих функциях (чаще всего в одной функции) обычно и задаётся код основных действий скрипта.
+Например, так может выглядеть код рисования хитбокса Марио для игры SMB:
+marioWidth = 16 +marioHeight = 32 +function everyframe() +marioX = memory.readbyte(0x3AD) +marioY = memory.readbyte(0xCE) +gui.drawbox(marioX, marioY, marioX + marioWidth, marioY + marioHeight) +end +emu.registerafter(everyframe) + |
+
При запуске этого скрипта FCEUX создаст и инициализирует две переменные marioWidth и marioHeight, а затем зарегистрирует функцию everyframe() на событие окончания каждого кадра (registerafter). После этого текст в скрипте заканчивается, и скрипт перестаёт выполняться, однако зарегистрированная функция остаётся в памяти эмулятора, и если теперь вы отпустите паузу или начнёте нажимать Frame Advance, после каждого кадра будет запускаться код из функции everyframe(). Этот код состоит из трёх строк – первые две создают переменные, отвечающие за координаты хитбокса, и инициализируют их значениями из оперативной памяти (RAM) эмулируемой приставки.
+Конкретные адреса ячеек оперативной памяти можно взять из публичных источников (например, http://tasvideos.org/GameResources/NES/SuperMarioBros.html) или найти самостоятельно методом отсеивания с помощью инструмента Cheat Search, встроенного в FCEUX. В данном случае нам известно, что по адресу 0x3AD в игре хранится координата X Марио, а по адресу 0xCE – координата Y. Поэтому от скрипта требуется только взять эти значения и нарисовать прямоугольник на соответствующем месте экрана.
+Про функции readbyte() и drawbox(), а также про другие полезные функции написано в документации эмулятора FCEUX. Про функции, доступные при запущенном Тасэдиторе, написано в Справочнике. Используя эти знания, можно не только рисовать и выводить надписи поверх экрана приставки, но и контролировать Курсор Проигрывателя и Выделение, а главное – манипулировать Вводом и Маркерами мувика.
+Например, так может выглядеть код, копирующий Ввод первого джойстика на место второго джойстика:
+function doCopy() +selection_table = taseditor.getselection() +if (selection_table ~= nil) then +for i = 1, #selection_table do +selected_frame = selection_table[i] +joypad1data = taseditor.getinput(selected_frame, 1) +taseditor.submitinputchange(selected_frame, 2, joypad1data) +end +taseditor.applyinputchanges("Copy 1P->2P") +end +end +taseditor.registermanual(doCopy, "Copy 1P to 2P") + |
+
При запуске этого скрипта FCEUX зарегистрирует функцию doCopy() на событие нажатия кнопки Run function(registermanual). Теперь при каждом нажатии этой кнопки будет запускаться код этой функции, который состоит из девяти строк. Сначала функция получает от тасэдитора информацию о Выделении, и если оно не пустое (то есть выделен хотя бы один кадр в Piano Roll), то запускается цикл "for", перебирающий все выделенные кадры по порядку, начиная с первого и заканчивая последним. Для каждого выделенного кадра функция запрашивает у Тасэдитора Ввод первого игрока (и сохраняет в переменную joypad1data), затем делает заявку на изменение Ввода второго игрока в этом же кадре. Все заявки накапливаются в памяти Тасэдитора до завершения цикла for, после чего они все разом исполняются с помощью вызова applyinputchanges(). В итоге Ввод второго джойстика в выделенных кадрах будет совпадать с Вводом первого джойстика.
+Этот весьма простой скрипт уже представляет из себя полезный инструмент, который может пригодиться вам при создании ТАСов с управлением двумя игроками одновременно. После запуска этого скрипта вы во время ТАСинга сможете выделять в Piano Roll ряд кадров и нажимать кнопку Run function (или хоткей "Run Manual Lua function") для синхронизации обоих игроков. Когда в результате действий этого скрипта изменится Ввод, произойдёт естественное усечение Гринзоны и добавление записи в Журнал Истории, чтобы при необходимости вы могли откатить произведённые скриптом изменения. Таким образом вы получаете полностью интегрированную в Тасэдитор фичу, логику которой запрограммировали сами.
+Хотя вы можете успешно ТАСить и без знания языка Lua, его использование может значительно сэкономить вам время и даже натолкнуть на неочевидные решения при оптимизации Ввода и анализе игрового Вывода.
+Очень часто игра скрывает от игрока существенные детали происходящего, и ТАСеру приходится просматривать состояние памяти напрямую, чтобы ориентироваться в ситуации и ощущать факторы оптимальности во время шлифовки участков. Например, во многих играх счётчик жизней босса не показывается на экране. Поэтому, чтобы точно знать данные о нанесении урона, ТАСеру необходимо просматривать числовое значение соответствующей ячейки RAM с помощью инструмента Memory Watch.
+А когда таких скрытых факторов много (например, несколько таймеров неуязвимости и атак босса, а также особые счётчики самого игрового персонажа), ТАСеру приходится просматривать и анализировать множество ячеек памяти, значения которых колеблются по разнообразным законам. В этом случае большим подспорьем будет визуализация некоторых данных на экране эмулятора, а не только в виде чисел в окне Memory Watch. Например, счётчик жизней босса можно изобразить в виде полоски над его головой (используя тот же метод drawbox), причём цвет полоски может быть индикатором нанесения урона или ещё каких-нибудь событий. В результате вы неплохо разгружаете голову, переходя от формата данных, который требуется переваривать, к формату, который сразу доводит основную мысль (например, "удар по боссу сработал").
+Поэтому рекомендуется освоить Lua хотя бы на уровне осмысленной модификации чужих скриптов. За время существования FCEUX было написано и опубликовано множество скриптов, выполняющих самые разные цели, и возможно, вам потребуется только изменить в чужом скрипте адреса ячеек RAM, подстроив его под свою игру. В некоторых случаях имеет смысл попросить помощи на форуме TASVideos.
+Курс по изучению Тасэдитора подошёл к концу. Если вы добросовестно подошли к чтению, теперь вы знаете почти всё, что нужно знать ТАСеру. Осталось лишь набраться опыта в реальной работе, довести большинство действий до автоматизма, чтобы не чувствовать рутину, а просто получать удовольствие от процесса вооружённого прохождения и исследования видеоигр.
+Created with the Personal Edition of HelpNDoc: Free help authoring environment
+Курс для новичка
+Эта часть документации представлена в виде учебника по ТАСингу.
+Здесь изложены принципы практического использования Тасэдитора. Также здесь систематизируются знания, накопленные в сообществе ТАСеров, и объясняется суть общепринятых методов ТАСинга.
+Курс будет полезен как людям, не имеющим представления о ТАСинге, так и опытным ТАСерам, желающим освоить новейшие разработки в этой сфере, а также структурировать и усовершенствовать свои знания.
+Общая характеристика TAS Editor и цели его создания
+Обучение основам взаимодействия пользователя с программой
+ + +Авторское видение грамотного рабочего процесса
+ + +Описание методов эффективного редактирования Ввода
+ + +Детальный обзор всех настроек
+Описание приёмов работы, не попавших в предыдущие главы
+Created with the Personal Edition of HelpNDoc: Free CHM Help documentation generator
+Управление
+Тасэдитор управляется с помощью мыши и клавиатуры.
+Для каждой операции в Тасэдиторе существует несколько вариантов её осуществления (через меню, либо с помощью хоткея, либо с помощью элемента оконного интерфейса).
+С помощью одной мыши можно совершить практически любое действие, но некоторые функции быстрее запускаются с помощью клавиатуры. В данном Руководстве подразумевается, что правая рука пользователя всё время управляет мышью, а левая рука лежит на клавиатуре, периодически зажимая Shift/Ctrl/Alt или нажимая комбинацию клавиш.
+Некоторые действия (например, включение/выключение функции "Auto-adjust Input due to lag") можно совершить только с помощью мыши.
+Управление мышью
+● +левая кнопка
+ + +● +колесо
+Наведение курсором
+Курсор мыши служит указателем на элементы оконного интерфейса.
+A. Отображение скриншотов и описаний для Закладок
+При наведении курсором мыши на правую половину любой Закладки (в Списке Закладок) появляется скриншот из игры, соответствующий происходящему на экране в кадре Закладки в указанном ответвлении мувика. Под скриншотом появляется текстовое описание (Заметка Маркера в данном ответвлении).
+B. Отображение информации о Закладке
+При наведении курсором мыши на иконку любой Закладки (в Дереве ответвлений) появляется информация об указанном ответвлении, а также появляется скриншот и описание. При наведении на Закладки, не принадлежащие хронологии текущего ответвления, курсор мыши изменяется на стрелку с вопросительным знаком.
+C. Подсвечивание кнопок в Заголовке Piano Roll
+При наведении курсором мыши на любой символ в Заголовке Piano Roll этот символ подсвечивается зелёным светом, если в Piano Roll есть выделенные строки. Свет подсказывает, что можно щёлкнуть по этому символу для изменения Ввода или Маркеров в выделенных кадрах.
+Левая кнопка
+Левая кнопка выполняет основную роль.
+A. Стандартные операции в Windows
+Большинство элементов окна TAS Editor управляется так же, как в других Windows-программах:
+● +нажатие кнопок в GUI, в том числе щелчки по прогрессбару, по надписи "Bookmarks/Branches" или по "Marker N" – действует в момент нажатия
+● +установка/снятие галочек в GUI – действует в момент отпускания
+● +раскрытие меню программы, выбор команды в меню, установка/снятие галочек в меню
+● +скроллинг обозримой области Piano Roll или Журнала Истории с помощью скроллбаров
+● +перетаскивание окна TAS Editor и изменение размеров окна
+B. Управление Курсором Проигрывателя
+При щелчке левой кнопкой мыши по колонке иконок Piano Roll вы посылаете Курсор Проигрывателя на указанный кадр. Если не отпускать левую кнопку, можно перетаскивать Курсор Проигрывателя вверх и вниз. Можно даже перетаскивать Курсор Проигрывателя на кадры за пределами видимой области Piano Roll, для этого нужно потащить его выше или ниже границ Piano Roll. При этом чем дальше от границы уводится перетаскивающий курсор мыши, тем выше будет скорость перемотки.
+C. Выделение строк в Piano Roll
+Когда вы щёлкаете левой кнопкой мыши по номеру кадра в любой строке Piano Roll, эта строка становится выделенной, а если до этого были выделены какие-либо другие строки, с них выделение снимается. Можно выделить регион кадров, зажав левую кнопку мыши и растянув Выделение вверх или вниз.
+Если вы хотите вдобавок к новому выделению оставить старое выделение, перед щелчком зажмите клавишу Ctrl. Так можно выделить несколько непересекающихся участков.
+Если вместо Ctrl зажать перед щелчком Shift, выделится область кадров от верхнего кадра старого Выделения до места щелчка.
+Если перед щелчком зажать Alt, появится Выделение по шаблону.
+D. Установка/снятие Ввода в Piano Roll
+Навести курсор мыши на нужную ячейку (выбрав пересечение строки нужного кадра со столбцом нужной кнопки) и нажать левую кнопку мыши. Ввод изменяется сразу же в момент нажатия. Если в данной клетке не было нажатия, оно устанавливается, если было, то снимается.
+При этом выбранная строка Piano Roll становится выделенной, а с других строк выделение снимается. Благодаря этой особенности Курсор Выделения всегда появляется там, где редактируется Ввод.
+Если перед щелчком зажать клавишу Shift, при щелчке изменится состояние указанной кнопки во всех кадрах, начиная с Курсора Выделения и заканчивая кадром щелчка. Состояние Выделения при этом не изменится.
+Если перед щелчком зажать клавишу Alt, состояние указанной кнопки во всех кадрах, начиная с Курсора Выделения, будет установлено по шаблону. Состояние Выделения при этом не изменится.
+Если в настройках установлена галочка Config -> Draw Input by dragging, можно рисовать и стирать Ввод, зажав левую кнопку мыши и перемещая курсор мыши вверх или вниз. Рисование начинается при щелчке по пустой клетке, стирание начинается при щелчке по заполненной клетке.
+E. Щелчки по кнопкам в Заголовке Piano Roll
+Если никакие строки Piano Roll не выделены, ничего не произойдёт. Нужно сначала выделить несколько кадров, к ним и будет применена операция при щелчке по Заголовку. Операция выполняется сразу же в момент нажатия левой кнопки.
+Если в некоторых выделенных кадрах нажатие выбранной кнопки отсутствует, после щелчка нажатия появляются во всех выделенных кадрах.
+Если же во всех выделенных строках соответствующая кнопка уже нажата, при щелчке все нажатия снимаются.
+Если перед щелчком зажать и держать клавишу Alt, в выделенных кадрах будет установлен Ввод по шаблону.
+Если щёлкать по "Frame#", вместо Ввода в Выделении будут установлены или удалены Маркеры.
+F. Установка и перетаскивание Маркеров
+При двойном щелчке по любому номеру кадра в Piano Roll вы устанавливаете на этот кадр Маркер и одновременно начинаете его перетаскивание. При отпускании левой кнопки Маркер физически переносится на кадр, над номером которого он был отпущен. Если отпустить Маркер над колонками Ввода, перетаскивание будет отменено, и Маркер останется на старом месте. Если отпустить Маркер прямо над другим Маркером, эти Маркеры будут поменяны местами.
+Если отпустить Маркер за пределами Piano Roll, этот Маркер будет выброшен. Таким образом, чтобы удалить существующий Маркер, нужно дважды щёлкнуть по нему и перенести его за пределы окна Тасэдитора.
+G. Вход/выход из поля редактирования Заметки
+При щелчке по верхнему или нижнему текстовому полю начинается редактирование Заметки, отображаемой в этом поле в данный момент.
+Для выхода (с сохранением изменений) нужно щёлкнуть по любому другому элементу окна TAS Editor.
+H. Щелчки по Списку Закладок
+При щелчке по номеру кадра в Списке Закладок (левая половина любой строчки) будет произведён прыжок Курсором Проигрывателя на этот кадр (так называемый "прыжок на Закладку").
+При щелчке по индикатору времени в Списке Закладок (правая половина любой строчки) будет произведено восстановление состояния мувика из Закладки ("прыжок во времени"), а также прыжок Курсором Проигрывателя на кадр Закладки.
+Эти операции срабатывают в момент отпускания левой кнопки мыши.
+I. Щелчки по Дереву ответвлений
+При одинарном щелчке по иконке Закладки будет произведён прыжок Курсором Проигрывателя на кадр этой Закладки (так называемый "прыжок на Закладку").
+При двойном щелчке по иконке Закладки будет произведено восстановление состояния мувика из этой Закладки ("прыжок во времени"), а также прыжок Курсором Проигрывателя на кадр этой Закладки.
+Эти операции срабатывают в момент нажатия левой кнопки мыши.
+J. Щелчки по Журналу Истории
+С помощью щелчка левой кнопкой по любой строке в Журнале Истории вы можете вернуть мувик на момент времени, отмеченный в начале указанной строки.
+Правая кнопка
+Правая кнопка мыши используется реже, чем левая.
+A. Навигация Курсором Проигрывателя с помощью колеса
+Зажать правую кнопку и вращать колесом мыши вверх/вниз. При этом курсор мыши не обязательно должен находиться над Piano Roll, он может быть на любом пустом месте окна TAS Editor или даже над окном FCEUX.
+B. Скроллинг обозримой области Piano Roll
+Если зажать правую кнопку, когда курсор мыши находится над Piano Roll, можно скроллировать Piano Roll вправо/влево и вверх/вниз простым перемещением мыши за границы Piano Roll. Благодаря этому отпадает необходимость использовать горизонтальный скроллбар Piano Roll.
+C. Установка Закладки
+При щелчке правой кнопкой мыши по Списку Закладок на текущем месте нахождения Курсора Проигрывателя ставится Закладка.
+Точно так же Закладка устанавливается при щелчке правой кнопкой по иконке этой Закладки в Дереве ответвлений.
+Эта операция срабатывает в момент отпускания правой кнопки мыши.
+D. Контекстное меню
+Когда курсор мыши находится над номером выделенного кадра (в колонке "Frame#" Списка Piano Roll), щелчок правой кнопкой вызывает контекстное меню. Меню появляется в момент отпускания правой кнопки мыши. Если щёлкнуть правой кнопкой по не выделенному кадру, ничего не произойдёт.
+Контекстное меню содержит следующие пункты:
+● +Set Markers
+● +Remove Markers
+● +Deselect
+● +Select between Markers
+● +Clear
+● +Delete
+● +Insert
+● +Insert # of Frames
+● +Clone
+● +Truncate movie
+Также свои контекстные меню есть у текстовых полей (при редактировании Заметок) и у скроллбаров.
+Средняя кнопка
+У средней кнопки мыши есть только одна функция – ставить и снимать паузу эмуляции. Не имеет значения, где находится курсор мыши в момент щелчка средней кнопкой.
+Когда эмулятор стоит на паузе, нажатие средней кнопки снимет паузу (аналогично нажатию хоткея Pause). Более того, если в Piano Roll есть зелёная стрелка, при щелчке по средней кнопке запустится добегание к зелёной стрелке (аналогично нажатию хоткея Restore Playback).
+Если перед щелчком зажать клавишу Shift, запустится добегание к ближайшему Маркеру.
+Если перед щелчком зажать клавишу Ctrl, запустится добегание к Курсору Выделения (если он расположен ниже Курсора Проигрывателя) или же начнётся повторный просмотр участка, начиная с Курсора Выделения (если он расположен выше Курсора Проигрывателя).
+Когда эмулятор не стоит на паузе, нажатие средней кнопки поставит его на паузу.
+В современных компьютерных мышках средней кнопкой является её колесо.
+Колесо
+Колесо можно вращать вверх и вниз с различной скоростью. Когда требуется высокая точность, вращайте колесо медленно. Когда требуется быстрое перемещение, вращайте колесо быстро.
+A. Скроллинг обозримой области Piano Roll
+Если курсор мыши при вращении колеса находится над Журналом Истории, то осуществляется скроллинг Журнала Истории. Во всех остальных случаях осуществляется скроллинг Piano Roll.
+B. Навигация Курсором Проигрывателя
+Зажать правую кнопку и вращать колесом мыши. Курсор Проигрывателя будет перемещаться в соответствии с вращением колеса, одновременно прокручивая на экране FCEUX события игры в ту или иную сторону.
+Чтобы всегда видеть текущее положение голубого курсора в Piano Roll, нужно установить галочку "Follow cursor" в разделе Playback.
+C. Прыжки по Маркерам
+Аналогично кнопкам << и >>, а также хоткеям Ctrl/Shift + Page Up/Page Down.
+Если зажать клавишу Shift, при прокручивании колеса Курсор Проигрывателя будет прыгать по Маркерам, позволяя быстро перейти к любому кадру Гринзоны. Piano Roll будет следовать за Курсором Проигрывателя, если установлена галочка "Follow cursor".
+Если зажать клавишу Ctrl, при прокручивании колеса Курсор Выделения будет прыгать по Маркерам, позволяя быстро перейти к любому кадру мувика. Piano Roll всегда будет следовать за Курсором Выделения.
+D. Пересечение промежутков во Вводе или Маркерах
+Зажать клавишу Alt, навести курсор мыши на середину длинного ряда кнопочных нажатий (или, наоборот, на пустоту) и сделать одинарный поворот колеса вверх или вниз. Piano Roll проскроллируется соответственно вверх или вниз на некое количество кадров, рассчитав расстояние так, чтобы курсор мыши указывал на кадр перед началом или после окончания этого длинного ряда кнопочных нажатий (или на начало/окончание пустоты). После этого можно либо дорисовать продолжение этого ряда, либо укоротить ряд.
+Управление клавиатурой
+● +модификаторы (Shift, Ctrl и Alt)
+ +● +хоткеи FCEUX
+● +кнопки виртуальных джойстиков
+Модификаторы (Shift, Ctrl и Alt)
+Зажатие этих клавиш изменяет функции щелчка левой кнопкой мыши, а также функции вращения колеса.
+● +Shift отвечает за выделение региона кадров, а также за навигацию Курсором Проигрывателя.
+● +Ctrl отвечает за выделение добавочных кадров, а также за навигацию Курсором Выделения.
+● +Alt отвечает за генерацию Ввода/Маркеров/выделения по шаблону, а также за пересечение промежутков колесом.
+Если быстро нажать Shift два раза подряд, Piano Roll автоматически скроллируется к Курсору Проигрывателя.
+Если быстро нажать Ctrl два раза подряд, Piano Roll автоматически скроллируется к Курсору Выделения.
+Во время рисования/стирания Ввода зажатие клавиши Shift позволяет рисовать в произвольных столбцах, а не только в одном.
+Клавиатурные акселераторы
+Это жёстко определённые комбинации клавиш, типичные для большинства Windows-программ. В данном руководстве эти комбинации отмечаются красным цветом.
+Ctrl + S = сохранить проект на диск
+Ctrl + Z = откат последнего изменения (undo)
+Ctrl + Y = возврат к отменённым изменениям (redo)
+Ctrl + Q = восстановление предыдущего Выделения (selection undo)
+Ctrl + W = восстановление следующего Выделения (selection redo)
+Ctrl + A = выделить все кадры между двумя соседними Маркерами
+Ctrl + B = выделить участок, ранее скопированный в Буфер Обмена
+Ctrl + C = копировать выделенный Ввод в Буфер Обмена
+Ctrl + X = вырезать выделенный Ввод в Буфер Обмена
+Ctrl + V = вставить Ввод из Буфера Обмена поверх старого Ввода
+Ctrl + Shift + V = вставить Ввод из Буфера Обмена с раздвиганием старого Ввода
+Delete = очистить выделенный Ввод
+Ctrl + Delete = удалить выделенные кадры из мувика
+Insert = вставить заданное число кадров в мувик
+Ctrl + Insert = клонировать выделенные кадры
+Ctrl + Shift + Insert = вставить пустые кадры на место выделения
+Ctrl + F = вызвать окно Find Note
+Ctrl + PageUp / Ctrl + PageDown = прыгать Курсором Выделения по Маркерам
+Ctrl + Home / Ctrl + End = переместить Выделение в начало / в конец мувика
+Ctrl + Вверх / Ctrl + Вниз = переместить Выделение на 1 кадр выше / ниже
+Ctrl + Вправо / Ctrl + Влево = скроллировать Piano Roll вправо и влево
+Shift + PageUp / Shift + PageDown = прыгать Курсором Проигрывателя по Маркерам
+Shift + Home / Shift + End = прыгать Курсором Проигрывателя в начало / в конец мувика
+Shift + Вверх / Shift + Вниз = переместить Курсор Проигрывателя на 1 кадр выше / ниже
+Shift + Вправо / Shift + Влево = скроллировать Piano Roll вправо и влево
+PageUp / PageDown = скроллировать Piano Roll постранично вверх / вниз
+Home / End = скроллировать Piano Roll в начало / в конец мувика
+Хоткеи FCEUX
+Настраиваемые клавиши эмулятора. См. главу Настройка программы. Клавиши, уже настроенные по умолчанию, в данном Руководстве отмечаются голубым цветом.
+Ctrl + F1 = открыть последний проект
+Pause = пауза эмулятора
+Esc = отменить добегание
+Пробел = восстановить позицию Курсора Проигрывателя
+Ctrl + Пробел = переключить галочку "Auto-restore last position"
+\ (обратная косая черта) = Frame Advance (продвинуться на 1 кадр вперёд)
+Backspace = перемотать на 1 кадр назад
+Shift + R = запустить проигрывание мувика с начала
+- (белая клавиша "минус") = снизить скорость эмуляции
+= (белая клавиша "равно") = повысить скорость эмуляции
+Tab = Турбо (действует, пока клавиша зажата)
+F1-F10 = загрузка ответвления из Закладки
+1-0 = прыжок на Закладку
+Shift + F1-F10 = установить Закладку
+I = сохранить мувик в текущую Закладку-ответвление
+P = загрузить мувик из текущей Закладки-ответвления
+M = показ счётчика перезаписей
+, (запятая) = показ виртуальных джойстиков
+. (точка) = показ счётчика кадров
+/ (дробь) = показ счётчика лага
+Shift + L = перезагрузить текущий Lua-скрипт
+Q = включение/выключение режима Записи
+W = переключение текущего джойстика для записи методом мультитрекинга
+Ctrl + R = команда Reset
+Полный список хоткеев FCEUX, работающих при запущенном Тасэдиторе:
+● +Power
+● +Reset
+● +Pause
+● +Frame Advance
+● +Screenshot
+● +Exit
+● +Slowest Speed
+● +Speed Down
+● +Normal Speed
+● +Speed Up
+● +Turbo
+● +Turbo Toggle
+● +Savestate Slot 0
+● +Savestate Slot 1
+● +Savestate Slot 2
+● +Savestate Slot 3
+● +Savestate Slot 4
+● +Savestate Slot 5
+● +Savestate Slot 6
+● +Savestate Slot 7
+● +Savestate Slot 8
+● +Savestate Slot 9
+● +Next Savestate Slot
+● +Previous Savestate Slot
+● +Save State
+● +Save State to Slot 0
+● +Save State to Slot 1
+● +Save State to Slot 2
+● +Save State to Slot 3
+● +Save State to Slot 4
+● +Save State to Slot 5
+● +Save State to Slot 6
+● +Save State to Slot 7
+● +Save State to Slot 8
+● +Save State to Slot 9
+● +Load State
+● +Load State from Slot 0
+● +Load State from Slot 1
+● +Load State from Slot 2
+● +Load State from Slot 3
+● +Load State from Slot 4
+● +Load State from Slot 5
+● +Load State from Slot 6
+● +Load State from Slot 7
+● +Load State from Slot 8
+● +Load State from Slot 9
+● +Play Movie From Beginning
+● +Toggle Read-Only
+● +Toggle Frame Display
+● +Toggle Input Display
+● +Toggle Status Icon
+● +Reload current Lua script
+● +Sound Mute Toggle
+● +Sound Volume Up
+● +Sound Volume Down
+● +Sound Volume Normal
+● +Record AVI As...
+● +Stop AVI
+● +Eject or Insert FDS Disk
+● +Switch FDS Disk Side
+● +Use Input Preset 1
+● +Use Input Preset 2
+● +Use Input Preset 3
+● +Toggle Background Display
+● +Toggle Object Display
+● +Lag Counter Toggle
+● +Open Memory Watch
+● +Open Cheats
+● +Open Debugger
+● +Open Hex Editor
+● +Open PPU Viewer
+● +Open Name Table Viewer
+● +Open Trace Logger
+● +Open Code/Data Logger
+● +Frame Adv.-Skip Lag
+● +Reload ROM or TAS Editor Project
+● +Toggle Movie Subtitles
+● +Open Ram Watch
+● +Open Ram Search
+● +Toggle Rerecord Display
+● +Frame Rewind
+● +Restore Playback
+● +Cancel Seeking
+● +Switch Auto-restore last position
+● +Switch current Multitracking mode
+● +Run Manual Lua function
+Остальные хоткеи FCEUX не будут работать при запущенном Тасэдиторе (см. главу Защита от ошибок).
+Кнопки виртуальных джойстиков
+Аналоги кнопок настоящего геймпада приставки, настраиваемые либо на клавиши клавиатуры, либо на кнопки реального джойстика. См. главу Настройка программы.
+Если вам нужно помимо кнопок джойстика ещё вводить команды приставки, используйте меню FCEUX или хоткеи:
+● +NES -> Reset или хоткей "Reset" (по умолчанию Ctrl + R) – для команды "Сброс"
+● +NES -> Power или хоткей "Power" – для команды "Включение" (в реальной работе не требуется)
+● +NES -> Eject/Insert Disk или хоткей "Eject or Insert FDS Disk" – для команды "Вытащить/Вставить диск" (актуально только для Famicom Disk System)
+● +NES -> Switch Disk Side или хоткей "Switch FDS Disk Side" – для команды "Поменять сторону диска" (актуально только для Famicom Disk System)
+Эти команды срабатывают только в режиме Записи, причём для отображения результата на экране FCEUX необходимо после запуска команды (например, после нажатия Ctrl + R) ещё дополнительно нажать Frame Advance либо отпустить паузу эмулятора, чтобы впечатать команду в мувик.
+Так как в TAS Editor 1.0 в Piano Roll нет колонок, отображающих записанные нажатия команд, рекомендуется сразу же после записи команды ставить на этот кадр Маркер с Заметкой о наличии здесь команды.
+Управление при редактировании Заметок
+При редактировании Заметок клавиатура используется для печатания текста.
+1. Следующие акселераторы действуют иначе:
+Ctrl + A – выделяет весь текст Заметки
+Ctrl + Z – откатывает последний введённый символ
+Ctrl + X, Ctrl + C, Ctrl + V – копипаст текста
+Delete – удаляет выделенный текст или один символ после курсора
+Home/End – перемещают курсор в начало и конец текста
+2. Хоткеи FCEUX вообще не действуют.
+Backspace – удаление символа перед курсором
+Esc – выход из режима редактирования без сохранения изменений
+Tab – переключение между нижним и верхним полем
+4. Кнопки виртуальных джойстиков не действуют (но будут действовать в том случае, если в настройках FCEUX стоит галочка Config -> Enable -> Background Input).
+5. Управление мышью остаётся без изменений. Щелчок за пределами поля редактирования завершает редактирование Заметки, сохраняя изменения. Также, если во время редактирования увести соответствующий курсор из области редактируемого Маркера, изменения сохранятся, и начнётся редактирование Заметки другого Маркера.
+Created with the Personal Edition of HelpNDoc: Single source CHM, PDF, DOC and HTML Help creation
+Ответы на вопросы
+Здесь подобран ряд вопросов, которые могут возникнуть у вас при работе с Тасэдитором даже после прочтения Курса для новичка.
+Если у вас возникнет вопрос, на который вы не смогли найти ответ в данном Руководстве, задайте этот вопрос на форуме TASVideos.
+Что делать, если обнаружился баг или странное поведение Тасэдитора?
+Сообщите об этом в разделе FCEUX форума TASVideos. Постарайтесь сформулировать суть проблемы максимально точно, чтобы автор мог смоделировать проблемную ситуацию. Приложите скриншот, если суть проблемы наглядно отражается на экране.
+Можно ли использовать Тасэдитор для других эмуляторов?
+Нет. Несмотря на то, что программный код Тасэдитора достаточно изолирован от кода эмулятора FCEUX, он всё же не является плагином или фронтендом. Поэтому понадобится вручную портировать исходный код Тасэдитора, при необходимости дорабатывая его в соответствии с особенностями конкретных эмулируемых платформ.
+Как использовать Тасэдитор для традиционного метода ТАСинга?
+Вы можете использовать этот метод сразу же, без дополнительных настроек. Однако, если вам морально требуются некоторые ограничения старого подхода (без которых вы чувствуете себя неуютно), можно сделать следующее:
+● +установить галочку Config -> Old control scheme for Branching
+● +снять галочку Config -> Branches restore entire Movie
+● +установить галочку Config -> Combine consecutive Recordings/Draws
+● +снять галочку Config -> Use Input keys for Column Set
+Также рекомендуется переключить Список закладок в вид Дерева ответвлений.
+Почему не работает меню по правой кнопке в окне FCEUX?
+Это сделано специально для удобства навигации Курсором Проигрывателя с помощью колеса мыши.
+Замечено, что курсор мыши зачастую движется синхронно с взглядом человека, работающего за компьютером. Поэтому при просмотре изображения на экране FCEUX курсор мыши будет нередко находиться в рамках окна FCEUX, и при зажимании правой кнопки мыши (для перемотки колесом) контекстное меню будет загораживать часть экрана и раздражать. Так как в этом меню нет никаких существенных пунктов, решено было его убрать.
+Почему иногда при щелчке правой кнопкой по Piano Roll появляется контекстное меню, а иногда не появляется?
+Контекстное меню появляется при щелчке правой кнопкой мыши по номеру любого выделенного кадра. Если щёлкнуть по не выделенному кадру или по ячейке Ввода, меню не появится. Это сделано для удобства перетаскивания содержимого Piano Roll (особенно для скроллинга по горизонтали) с помощью щелчка и зажимания правой кнопки.
+Рекомендуется вместо использования контекстного меню применять клавиатурные комбинации и другие более быстрые способы доступа к функциям Тасэдитора.
+Почему сразу после остановки под Курсором Проигрывателя был зелёный кадр без лага, а после отжатия паузы там оказался красный?
+Информация о лаге появляется у эмулятора только после завершения эмуляции кадра (при переходе на следующий кадр). Курсор Проигрывателя указывает на текущий кадр, и в это время эмулятор обладает информацией о лаге предыдущего кадра, а о лаге текущего кадра ещё ничего не знает. Поэтому кадр в голове Гринзоны всегда рисуется зелёным цветом (если отодвинуть с него Курсор Проигрывателя).
+Почему при ручном откате операций "AdjustLag" в Тасэдиторе может самопроизвольно происходить повторное срабатывание этой операции?
+Если вы одновременно с галочкой "Auto-adjust Input due to lag" включили функцию "Auto-restore last position", Тасэдитор будет заново эмулировать участок сразу же после отката Журнала Истории (например, нажатия Ctrl + Z), а во время эмуляции работает функция авто-подгонки Ввода по лагу.
+Поэтому в случаях, когда требуется откатить изменения с помощью Журнала Истории, рекомендуется отключать либо галочку "Auto-adjust Input due to lag", либо "Auto-restore last position", чтобы не возникал конфликт этих трёх функций.
+Как вставить в мувик команду Сброса?
+Поставить Курсор Проигрывателя на нужный кадр, включить режим Записи, выбрать в меню FCEUX пункт NES -> Reset и нажать Frame Advance. Затем рекомендуется поставить на этот кадр Маркер, так как в Piano Roll нет колонок Ввода для команд Reset/Power и т.д. После этого можно выключить режим Записи и продолжить редактирование Мувика. Кадр с записанным Сбросом можно сдвигать вниз/вверх с помощью вставки/удаления пустых строк перед этим кадром.
+Точно так же записываются остальные команды приставки. Подробнее см. Управление.
+Почему fm3-файлы занимают так много места?
+В fm3-файле обычно сохраняется мгновенный снимок рабочего процесса ТАСера, в том числе вся Гринзона, которая и занимает большую часть файла. Подробнее см. Продвинутые возможности.
+Почему в этом Руководстве так много текста?
+Помимо сухого перечисления спецификаций здесь находится обучающий Курс, в котором систематизируются принципы эффективного подхода к ТАСингу. Ранее не существовало попыток сформулировать ТАСерский опыт в виде учебника. Поэтому автор посчитал, что многословность является меньшим злом, чем возможная неточность изложения.
+Created with the Personal Edition of HelpNDoc: Free iPhone documentation generator
+Формат FM3
+Формат FM3 является расширенной версией старого формата FM2. В FM2 хранятся данные, необходимые для воспроизведения мувика, а FM3 добавляет к ним данные о состоянии рабочего процесса в Тасэдиторе.
+Спецификации формата FM2 можно прочитать в Справке FCEUX, а также на официальном сайте эмулятора.
+Любой FM3-файл состоит из трёх частей:
+● +Заголовок (как в fm2)
+● +Журнал Ввода (как в fm2)
+ +Заголовок
+Заголовок хранится в текстовом формате, в кодировке ASCII.
+Он состоит из нескольких строк вида "ключевое слово + значение".
+Символом перевода строки может быть как \r\n, так и \n.
+Если в начале очередной строки идёт символ "|" (вертикальная черта), это значит, что Заголовок закончился, и начался Журнал Ввода.
+В начале каждой строки Заголовка находится ключевое слово, после которого стоит пробел, а затем идёт текстовое представление значения.
+В первой строке Заголовка должно идти ключевое слово version, остальные ключевые слова могут располагаться в какой угодно последовательности.
+Значение заканчивается переводом строки.
+Значение следует разбирать в зависимости от ключевого слова – либо как целочисленное значение, либо как строку текста.
+Список ключевых слов с целочисленным значением:
+(включая значения для переменных типа Boolean, где 1 = true, 0 = false)
+(числовое значение должно умещаться в переменную типа int32)
+● +version (наличие обязательно) – номер версии формата мувика; на данный момент это 3
+● +emuVersion (обязательно) – версия эмулятора, в котором был создан этот файл (например, 21060)
+● +rerecordCount (наличие не обязательно) – счётчик перезаписей
+● +palFlag (bool) (не обязательно) – true, если мувик использует тайминг PAL, а по умолчанию используется NTSC
+● +NewPPU (bool) (не обязательно) – true, если мувик использует New PPU
+● +FDS (bool) (не обязательно) – true, если мувик создан для игры с Famicom Disk System
+● +fourscore (bool) – true, если мувик создан с использованием устройства fourscore. Если fourscore не использовалось, то в Заголовке обязательно наличие значений для ключевых слов port0 и port1.
+● +port0 – тип устройства ввода, настроенного на порт 0 приставки. Возможны следующие значения:
+● +SI_NONE = 0 (ничего не подключено)
+● +SI_GAMEPAD = 1 (подключен стандартный геймпад NES)
+● +SI_ZAPPER = 2 (подключен пистолет)
+● +port1 – тип устройства ввода, настроенного на порт 1 приставки. Возможны следующие значения:
+● +SI_NONE = 0 (ничего не подключено)
+● +SI_GAMEPAD = 1 (подключен стандартный геймпад NES)
+● +SI_ZAPPER = 2 (подключен пистолет)
+● +port2 (обязательно) – тип устройства ввода, настроенного на порт FCExp приставки. Возможны следующие значения:
+● +SIFC_NONE = 0 (ничего не подключено)
+● +binary (bool) (не обязательно) – true, если Журнал Ввода сохранён в двоичном формате. FM2-файлы обычно хранят Ввод в текстовом формате, чтобы его было удобно редактировать в текстовых редакторах. FM3-файлы обычно хранят Ввод в двоичном формате, чтобы сэкономить место на диске
+● +length (обязательно для fm3) – размер мувика (количество кадров в сохранённом Журнале Ввода). Если в Заголовке есть это ключевое слово, и его значение >= 0, то Журнал Ввода оканчивается после означенного количества записей, а затем следуют данные Тасэдитора. Именно наличие этого ключевого слова в Заголовке отличает FM3-файлы от FM2-файлов.
+Список ключевых слов со строковым значением:
+(эти строки не могут содержать символ перевода строки, так как он служит индикатором окончания значения)
+romFilename (обязательно) – имя файла, использованного при создании проекта
+romChecksum (обязательно) – MD5-чексумма РОМа, использованного при создании мувика
+comment (не обязательно) – комментарий. По традиции автор мувика обозначается комментарием вида "author имя". Пример: "comment author AnS"
+subtitle (не обязательно) – сообщение, которое будет выводиться на экран эмулятора во время проигрывания этого мувика. Сразу после слова subtitle через пробел должно следовать целочисленное значение, определяющее номер кадра, на котором должно появиться сообщение. После этого числа через пробел следует текст выводимого сообщения. Пример: "subtitle 100 Level Two" – на сотом кадре мувика появится сообщение "Level Two"
+guid (обязательно) – уникальный идентификатор мувика, сгенерированный при его создании
+Журнал Ввода
+Журнал Ввода состоит из последовательности записей о состоянии Ввода на каждом кадре мувика. Эти записи могут храниться в виде текстовых строк или в виде двоичных данных.
+Текстовый формат:
+Каждый кадр мувика представлен текстовой строкой, в начале и конце которой находится символ "|".
+Если не используется fourscore, строка имеет следующий вид:
+|команды|port0|port1|port2|
+В поле команды должно находиться десятичное целое число, интерпретируемое как битовая карта состояний команд приставки:
+● +бит 0 (значение числа = 1) – Сброс
+● +бит 1 (значение числа = 2) – Power
+● +бит 2 (значение числа = 4) – Eject/Insert Disk
+● +бит 3 (значение числа = 8) – Switch Disk Side
+Формат полей port0, port1 и port2 зависит от типа устройства ввода, настроенного на данный порт.
+● +SI_NONE: поле должно быть пустым
+● +SI_GAMEPAD: Поле состоит из восьми текстовых символов, соответствующих восьми кнопкам джойстика. Если символ равен " " (пробел) или "." (точка), это означает, что соответствующая кнопка на данном кадре отпущена. Любой другой символ означает, что соответствующая кнопка на данном кадре нажата. Для простоты запоминания, какой столбец какой кнопке соответствует, рекомендуется использовать символы в следующей последовательности: RLDUTSBA (Вправо, Влево, Вниз, Вверх, Start, Select, B, A).
+● +SI_ZAPPER: Поле состоит из последовательности текстовых символов вида XXX YYY B Q Z
+● +XXX: %03d – координата X мыши
+● +YYY: %03d – координата Y мыши
+● +B: %1d – 1 = кнопка мыши нажата, 0 = не нажата
+● +Q: %1d – значение, необходимое для эмуляции пистолета
+● +Z: %d – значение, необходимое для эмуляции пистолета, количество разрядов у этого числа может варьироваться
+Если используется fourscore, все устройства ввода считаются геймпадами, и каждая запись представлена строкой вида:
+|команды|RLDUTSBA|RLDUTSBA|RLDUTSBA|RLDUTSBA|port2|
+(команды, игрок 1, игрок 2, игрок 3, игрок 4, пустота)
+Двоичный формат:
+Перед началом Журнала Ввода располагается символ "|".
+Каждый кадр мувика представлен записью в виде последовательности байтов. Размер каждой записи одинаков и зависит от устройств ввода, настроенных на порты приставки.
+В первом байте каждой записи хранится битовая карта состояний команд приставки:
+● +бит 0 – Сброс
+● +бит 1 – Power
+● +бит 2 – Eject/Insert Disk
+● +бит 3 – Switch Disk Side
+Если не используется fourscore, остальное содержание записи зависит от устройств ввода, настреонных на порт 0 и порт 1:
+● +SI_NONE: 0 байтов добавляется к размеру записи
+● +SI_GAMEPAD: 1 байт добавляется к размеру записи. Каждый бит этого байта отражает состояние сооветствующей кнопки джойстика (бит 0 = A, бит 1 = B, бит 2 = Select, бит 3 = Start, бит 4 = Вверх, бит 5 = Вниз, бит 6 = Влево, бит 7 = Вправо). Если бит установлен, кнопка считается нажатой на данном кадре, иначе она считается отпущенной
+● +SI_ZAPPER: 12 байтов добавляется к размеру записи.
+● +первый байт – координата X мыши
+● +второй байт – координата Y мыши
+● +третий байт – 1 = кнопка мышки нажата, 0 = не нажата
+● +четвёртый байт – значение, необходимое для эмуляции пистолета
+● +байты с 5-го по 12-й (uint64) – значение, необходимое для эмуляции пистолета
+Если используется fourscore, все устройства ввода считаются геймпадами, и к размеру записи добавляется 4 байта. Биты первого байта отражают состояние сооветствующей кнопки первого джойстика (бит 0 = A, бит 1 = B, бит 2 = Select, бит 3 = Start, бит 4 = Вверх, бит 5 = Вниз, бит 6 = Влево, бит 7 = Вправо). Биты второго байта отражают состояние сооветствующей кнопки второго джойстика, и т.д.
+Данные Тасэдитора
+4 байта + |
+unsigned int32 + |
+FM3 version + |
+
4 байта + |
+unsigned int32 + |
+saved modules + |
+
??? + |
+stream + |
+MARKERS DATA + |
+
??? + |
+stream + |
+BOOKMARKS DATA + |
+
??? + |
+stream + |
+GREENZONE DATA + |
+
??? + |
+stream + |
+HISTORY DATA + |
+
??? + |
+stream + |
+PIANO ROLL DATA + |
+
??? + |
+stream + |
+SELECTION DATA + |
+
Данные Тасэдитора начинаются сразу после окончания последней записи в Журнале Ввода.
+Если во время загрузки fm3-файла сразу после окончания последней записи в Журнале Ввода обнаруживается конец файла, Тасэдитор воспримет этот файл как fm2-файл.
+Первые 4 байта данных содержат номер версии формата проекта. Релизная версия TAS Editor 1.0 имеет версию формата под номером 1.
+Следующие 4 байта содержат битовую карту, которая может использоваться для определения, какие модули Тасэдитора сохранили свои данные в этот файл:
+● +бит 0 – в файле сохранены Маркеры
+● +бит 1 – в файле сохранены Закладки
+● +бит 2 – в файле сохранена вся Гринзона
+● +бит 3 – в файле сохранен Журнал Истории
+● +бит 4 – в файле сохранены данные Piano Roll
+● +бит 5 – в файле сохранена История Выделений
+При сохранении проекта Тасэдитор поочерёдно вызывает все модули, требующие сохранения данных. В зависимости от настроек компактного сохранения каждый модуль осуществляет выборочную сериализацию своих данных в файловый поток. Порядок сохранения модулей всегда одинаков (Маркеры, Закладки, Гринзона, История, Piano Roll, Выделение). При загрузке проекта Тасэдитор вызывает модули в той же очерёдности, и они загружают свои данные из файлового потока, перемещая вперёд указатель на текущую позицию в файле.
+Чтобы оценить целостность загружаемых данных, каждый модуль при сохранении записывает в файл строку-идентификатор своих данных. И если перед началом загрузки своих данных модуль не обнаружит эту строку на текущей позиции в файловом потоке, он откажется от загрузки и создаст данные по умолчанию, передав тасэдитору сообщение об ошибке загрузки. Кроме того, если вместо строки-идентификатора сохранения он обнаружит строку-идентификатор отсутствия данных, он откажется от загрузки и создаст данные по умолчанию, без генерации сообщения об ошибке.
+Модуль + |
+Идентификатор +сохранённых данных + |
+Идентификатор +отсутствия данных + |
+
Маркеры + |
+MARKERS + |
+MARKERX + |
+
Закладки + |
+BOOKMARKS + |
+BOOKMARKX + |
+
Гринзона + |
+GREENZONE + |
+GREENZONX + |
+
История + |
+HISTORY + |
+HISTORX + |
+
Piano Roll + |
+PIANO_ROLL + |
+PIANO_ROLX + |
+
Выделение + |
+SELECTION + |
+SELECTIOX + |
+
Created with the Personal Edition of HelpNDoc: Free help authoring tool
+Глоссарий
+Здесь перечислено большинство используемых в данном Руководстве терминов, и приведена их краткая характеристика. Более подробное описание некоторых терминов дано в Курсе новичка.
+Рекомендуется сразу прочитать весь глоссарий целиком, так как многие термины тесно связаны друг с другом.
+Почти все термины имеют англоязычный первоисточник, так как ТАСерские традиции вырабатывались в среде англоговорящих игроков.
+Input – Ввод
+Данные о действиях игрока, воспринимаемые игрой и влияющие на её поведение.
+Из-за многозначности слова "Ввод" среди русскоязычных ТАСеров чаще используется англицизм "Инпут", который можно перевести как "Вводимые данные".
+ТАСинг базируется на допущении, что поведение игры однозначно зависит от Ввода игрока и начального состояния игры, и ни от чего более (т.н. детерминизм).
+Примеры существующих типов Ввода: нажатие кнопки джойстика, наклон аналогового стика, прикосновение стилуса, крик в микрофон и т.д.
+В Тасэдиторе используется представление Ввода в формате "последовательность кнопочных состояний".
+ +Output – Вывод
+Данные, выдаваемые игрой в ответ на Ввод игрока.
+Из-за многозначности слова "Вывод" в данном Руководстве используются слова "результат", "реакция игры" и т.п.
+Взаимодействие игрока с игрой можно представить в виде схемы, где игрок является субъектом, а игра – объектом взаимодействия.
+Примеры существующих типов Вывода: изображение, звук, вибрация джойстика, изменение просматриваемой ячейки памяти, информация о лаге и т.д.
+Walkthrough – Прохождение (прохождение видеоигры)
+Последовательность действий для успешного завершения игры. Эту последовательность игрок вводит в игру для достижения желаемой цели. Последовательность может быть записана вживую (real-time – в реальном времени) либо приготовлена в виде воспроизводимых данных (например, журнал нажатых кнопок). Во втором случае эту последовательность можно неоднократно редактировать.
+Speedrun – Пробег
+Соревновательное прохождение на скорость. Часто используется англицизм "cпидран".
+В некоторых играх присутствует встроенный режим под названием "Speedrun" или "Time Attack", при котором игра ведёт учёт затраченного времени на прохождение. Для других игр можно использовать внешний таймер, измеряя время в секундах или TV-кадрах (обычно подразумевается 60 кадров в секунду).
+TAS (Tool-Assisted Superplay / Tool-Assisted Speedrun) – ТАС
+Прохождение, при создании которого были использованы инструменты для редактирования совершаемых действий игрока. Благодаря редактированию можно создавать крайне неординарные прохождения видеоигр.
+Процесс создания ТАСа называется ТАСингом, а авторы зовутся ТАСерами.
+Целью ТАСа может быть не только спидран, но и развлекательный видеоролик (playaround).
+ТАСы распространяются:
+● +в виде готовых видеороликов с Выводом (youtube, AVI-файлы и т.д.)
+● +в виде исходных мувиков с Вводом (fm2 и т.д.)
+Movie – Мувик (фильм)
+Контейнер для хранения Ввода и сопутствующих данных.
+В отличие от видеороликов, игровой Вывод (изображение и звук) в мувике не хранится, он появляется на экране только в результате применения Ввода мувика к соответствующей игре.
+Также мувиком называется файл (movie file), в котором хранится Ввод и сопутствующие данные.
+Lag – Лаг (задержка)
+Особая ситуация в игре, вызванная повышенной нагрузкой на процессор.
+Процессор может производить строго фиксированное количество операций в единицу времени (например, за 1 кадр). Но игра пытается имитировать безграничность реальной жизни, поэтому количество взаимодействующих объектов в ней может сильно варьироваться. Как следствие, возможны ситуации, когда обработка объектов занимает больше времени, чем предусмотрено. В таких ситуациях задерживается обработка Ввода и Вывода, что невыгодно при создании спидрана. Поэтому лаг зачастую выступает в качестве одного из факторов оптимальности, который нужно учитывать во время тестирования вариантов Ввода. Обычно требуется минимизировать количество кадров с лагом.
+Наличие лага в кадре определяется эмулятором после окончания обработки данного кадра. Если во время обработки кадра игра опросила Ввод, считается, что лага в кадре нет. Если игра не опросила Ввод – лаг в кадре есть. В Тасэдиторе кадры с лагом отмечаются красными строками. Рисовать Ввод на этих кадрах бесполезно.
+Desync – Рассинхронизация (расхождение)
+Отличие Вывода от ожидаемого образца.
+Может произойти в случае, если Ввод проигрывается на другой игре, другом эмуляторе или с другими настройками синхронизирования. Также может произойти, если эмулятор не обеспечивает детерминизм должным образом.
+Segment – Участок
+Условная единица разбиения мувика на логические составляющие.
+Разбиение мувика на участки – это разложение большой задачи на мелкие подзадачи.
+Границы участка определяются игровыми событиями. Начальное событие отсекает все предыдущие задачи и концентрирует внимание ТАСера на ближайшем наборе условий. Конечное событие служит для оценки оптимальности всех вариантов решения текущей задачи.
+Подробнее: Процесс ТАСинга
+Optimization – Оптимизация
+В ТАСинге: Процесс постепенного улучшения целевых характеристик мувика.
+Большинство задач в видеоиграх решаются множеством разнообразных способов. У каждого способа есть свои плюсы и минусы. ТАСер перед началом работы выбирает свои цели (например, сделать пацифистский спидран), тем самым расставляя приоритеты среди вышеупомянутых плюсов и минусов. Поэтому любые способы решения можно оценить и сравнить между собой, чтобы определить лучший и худший.
+Оптимизация ТАСа заключается в редактировании Ввода и оценке получающегося Вывода. Когда ТАСер получает от игры более предпочтительный результат, он оставляет текущий Ввод в качестве основного, пока не найдёт ещё более оптимальный Ввод. В финальном ТАСе для каждой подзадачи оставлен наилучший вариант решения.
+Подробнее: Методология ТАСинга
+Improvement – Улучшение
+Возможность решить задачу более оптимально. Например, достичь такого же результата с меньшими затратами, или улучшить результат без увеличения затрат.
+Примеры улучшений в ТАСинге: использование неиспользованного таймсэйвера, повышение эффективности использования таймсэйвера, повышение развлекательности мувика без потери скорости.
+Timesaver – Таймсэйвер (экономия времени)
+Жаргонный термин, используемый для обозначения ключевой категории трюков в спидранах.
+При создании спидрана ТАСеру необходимо использовать все не запрещённые возможности для максимально быстрого прохождения игры. В первую очередь это грамотная шлифовка Ввода, во вторую – поиск и применение трюков. ТАСер пытается использовать все известные ему трюки максимально эффективно, чтобы его рекорд скорости нельзя было легко побить.
+Примеры таймсэйверов: фичи игры, баги игры, манипуляция удачей.
+Иногда ТАСер сознательно отказывается от использования некоторых таймсэйверов, в этом случае для его ТАСа отводится отдельная категория на сайте. Например: спидран SMB без использования кнопки B (отказ от фичи), спидран Sonic the Hedgehog без прохождения сквозь стены (отказ от бага).
+Feature – Фича (особенность)
+Запланированный разработчиками аспект игры, который необходимо учитывать в качестве фактора оптимальности при создании Ввода мувика.
+Некоторые фичи не существенны для простого игрока, но существенны для ТАСера. Поэтому перед оптимизацией Ввода рекомендуется провести исследования игрового движка.
+Примеры существеных для ТАСера фич: ускорение при ранении (damage boost), вынужденное ожидание при подсчёте очков, наличие субпикселей у координат персонажа, особенности искусственного интеллекта врагов и т.д.
+Bug – Баг (ошибка)
+Не запланированный разработчиками аспект игры, который необходимо учитывать в качестве фактора оптимальности при создании Ввода мувика.
+Баги игры должны быть воспроизводимыми (хотя бы теоретически) на настоящей приставке. Использование багов, специфичных для эмулятора, не разрешается.
+Многие баги обнаруживаются даже при обычной игре без использования инструментов. Некоторые же требуют тщательного исследования поведения игры и изучения её исполняемого кода.
+Примеры багов: упрощённая проверка коллизий, отсутствие проверки испорченных данных в сохранении, непредусмотренное изменение ячеек оперативной памяти, ошибка в порядке очерёдности проверок и т.д.
+Luck Manipulation – Манипуляция удачей
+Категория трюков, основанных на неограниченной эксплуатации фич, использование которых при нормальной игре сдерживается нехваткой знаний и способностей игрока.
+По сути любая оптимизация Ввода является манипуляцией с игровыми фичами. Но некоторые аспекты игры кажутся обычным игрокам особенно непредсказуемыми. Алгоритмы их функционирования нарочно скрыты разработчиками от невооружённого глаза, игроку они показаны как случайные и неконтролируемые.
+Однако на самом деле все аспекты видеоигр являются детерминированными (однозначно зависящими от Ввода). Использование инструментов и вдумчивого анализа позволяет выявить скрытые закономерности и использовать их при создании Ввода мувика.
+А в некоторых случаях вместо исследования алгоритмов достаточно воспользоваться методом перебора, натыкаясь на удачный исход событий методом проб и ошибок, а затем оставляя в мувике именно тот Ввод, который приводит игру к удачному результату.
+Подробнее: Нелинейный ТАСинг (пример манипуляции)
+Subpixels – Субпиксели (дробная часть пикселя)
+Наличие не только целых, но и дробных значений у координат персонажа в игре.
+В общем случае ТАСеру следует понимать отличие между экранными координатами спрайта и реальными координатами физического объекта в игре. Только в простейших играх эти координаты совпадают, обычно же на экран выводится приблизительное положение вещей, где проекции всех объектов выравнены по сетке пикселей. Чтобы узнать реальные координаты (и другие скрытые от глаз игрока данные), нужно просматривать ячейки оперативной памяти эмулируемой платформы. Это делается с помощью просмотрщика памяти (Memory Watch) или Lua.
+Recording – Запись
+Один из видов создания Ввода в мувике.
+Заключается в последовательном добавлении Ввода в конец мувика, одновременно с просмотром промежуточных результатов.
+Подробнее: Панель инструментов, Методология ТАСинга, Традиционный метод ТАСинга
+Rerecording – Перезапись (повторная запись)
+Один из видов редактирования Ввода в мувике.
+Заключается в последовательном изменении Ввода, начиная с определённого кадра, одновременно с просмотром промежуточных результатов.
+Подробнее: Методология ТАСинга, Традиционный метод ТАСинга, Счётчик перезаписей
+Multitracking – Мультитрекинг (многодорожечная запись)
+Один из способов записи Ввода при прохождении игр в режиме нескольких игроков.
+Заключается в поочерёдной записи Ввода на одном участке для каждого игрока отдельно.
+Подробнее: Панель инструментов
+Turbo – Турбо (повышенная скорость)
+Ускорение эмуляции игры до максимально возможной скорости.
+Используется для пропуска несущественных игровых событий и уменьшения времени ожидания при добегании к дальнему кадру мувика.
+С помощью настроек эмулятора можно гибко варьировать скорость эмуляции, замедляя или ускоряя её при необходимости. Под Турбо понимается максимально возможная скорость эмуляции. Этот предел зависит от скорости вашего компьютера.
+Подробнее: Панель инструментов, Нелинейный ТАСинг, Полуавтоматический ТАСинг
+Savestate – Сэйв (сохранение)
+Снимок состояния эмулируемой платформы.
+В отличие от встроенных игровых сохранений, здесь сохраняется и восстанавливается исчерпывающая информация о состоянии эмулируемой системы. Это необходимо для обеспечения детерминизма при навигации по мувику (в частности, при Перезаписи Ввода).
+Piano Roll – Piano Roll (перфолента)
+Особый тип визуального представления данных, похожий на представление в виде таблицы.
+Подобный интерфейс используется в редакторах музыки (MIDI-секвенсорах и MOD-трекерах). Его имя и принцип действия унаследован из физического аналога (давно существовавшие свёртки перфорированной бумаги для механических клавесинов).
+В Piano Roll Тасэдитора отображаются и редактируются данные мувика (Ввод и Маркеры), а также отображаются некоторые данные эмулируемой игры (текущий кадр, Журнал лага, Закладки и т.д.).
+Каждая строка Piano Roll соотносится с одним кадром мувика.
+Подробнее: Интерфейс Piano Roll, Piano Roll
+Playback cursor – Курсор Проигрывателя
+Текущий проигрываемый кадр мувика. События этого кадра отображаются в окне эмулятора в виде скриншота, а в Piano Roll соответствующая строка обозначается голубым цветом и значком "Play" (голубая стрелка).
+Одновременно можно видеть только события одного кадра мувика. Чтобы увидеть скриншот последующих событий мувика, нужно переместить голубой Курсор Проигрывателя вперёд (вниз по Piano Roll), чтобы увидеть скриншот предыдущих событий, нужно переместить курсор назад (вверх по Piano Roll).
+Подробнее: Интерфейс Piano Roll, Навигация Курсором Проигрывателя
+Greenzone – Гринзона (зона мгновенного доступа)
+Хранилище данных, специально разработанное для ускорения навигации Курсором Проигрывателя по мувику.
+В это хранилище Тасэдитор собирает сэйвы для каждого кадра мувика во время эмуляции, а при необходимости использует эти сэйвы для мгновенного прыжка Курсором Проигрывателя на любой кадр.
+Подробнее: Панель инструментов, Настройка программы, Гринзона
+Selection – Выделение
+Набор строк Piano Roll, отмеченных специальным цветом (обычно синим).
+Любая строка (и, соответственно, любой кадр мувика) является либо выделенной, либо не выделенной.
+Выделение позволяет оперировать одновременно с несколькими кадрами, например, удалить целый регион кадров вместо удаления каждого кадра поодиночке.
+Самый верхний выделенный кадр называется Курсором Выделения.
+Курсор Выделения автоматически следует за процессом редактирования Ввода, поэтому с его помощью можно осуществлять навигацию по местам редактирования.
+Подробнее: Интерфейс Piano Roll, Навигация Курсором Выделения
+Marker – Маркер
+Жёлтая отметка для кадра в Piano Roll, акцентирующая на нём внимание.
+Маркером можно отметить любой кадр в Piano Roll. С помощью установки и удаления Маркеров можно повысить наглядность и удобство работы.
+Цели использования Маркеров:
+● +структуризация Ввода
+● +формализация знаний (с помощью Заметок)
+● +ускорение навигации
+● +быстрое выделение участков (Ctrl + A)
+Подробнее: Интерфейс Piano Roll, Маркеры
+Note – Заметка
+Однострочная текстовая запись, прилагаемая к каждому Маркеру.
+Подробнее: Интерфейс Piano Roll, Управление, Продвинутые возможности
+Bookmark – Закладка
+Отметка для кадра в Piano Roll, хранящая информацию о данном кадре, в том числе ответвление мувика, которое однозначно приводит игру к событиям данного кадра.
+Закладки могут использоваться для навигации Курсором Проигрывателя, но в Тасэдиторе они в основном используются для хранения ответвлений.
+Подробнее: Панель инструментов, Закладки и ответвления
+Branch – Ответвление
+Резервная копия мувика, хранящая его состояние на момент создания Закладки.
+Текущий мувик заменяется на требуемое ответвление с помощью загрузки соответствующей Закладки.
+С помощью ответвлений можно одновременно хранить в проекте несколько разных мувиков и мгновенно переключаться между ними:
+● +для сравнения альтернативных стратегий прохождения
+● +для хранения текущего лучшего варианта при тестировании других вариантов на участке
+● +для запоминания ещё неиспользованных трюков, которые могут пригодиться в будущем
+● +для сравнения своего мувика с чужим (при создании обгона)
+Подробнее: Панель инструментов, Настройка программы, Закладки и ответвления
+Project – Проект
+Контейнер для хранения рабочих данных при использовании в Тасэдиторе.
+Также проектом называется файл (project file), в котором хранятся рабочие данные пользователя.
+Подробнее: Продвинутые возможности
+Lua – Lua
+Интерпретируемый язык программирования, использующийся во многих ТАСерских эмуляторах для визуализации данных и создания индивидуальных инструментов.
+Подробнее: Продвинутые возможности, Луа-автоматизация, Lua-функции
+Bot – Бот (робот)
+Средство для автоматизации определённых действий.
+Обычно программы-боты используются для избавления человека от рутинных действий, не требующих высокой гибкости ума. В отличие от человека, боты не изобретают путь решения задачи, а методично перебирают варианты решения, следуя фиксированному алгоритму, заложенному программистом.
+Сами по себе боты не способны создать экстраординарное прохождение видеоигры. Их практично использовать только для исчерпывающего перебора вариантов на коротком участке мувика. И в большинстве случаев ТАСеру проще перебрать варианты вручную, интуитивно отсеивая тупиковые варианты в уме, чем заниматься написанием бота и долгим ожиданием результатов полного перебора.
+Для создания ботов требуется умение программировать. Обычно боты либо пишутся на Lua, либо встраиваются в эмуляторы с помощью модификации исходного кода.
+Pattern – Шаблон
+В Тасэдиторе: заданная последовательность значений Ввода для одной (любой) кнопки.
+Подробнее: Продвинутые возможности, Шаблоны
+Created with the Personal Edition of HelpNDoc: Free HTML Help documentation generator
+Идеи
+Тасэдитор объединяет множество экспериментальных идей в единую систему. Многие из этих идей были озвучены очень давно (см. темы на форуме в духе "инструмент мечты" и т.д.), но для их реализации в рамках единой непротиворечивой системы понадобилось немалое время.
+Основообразующей идеей Тасэдитора является интерфейс Piano Roll, позволяющий взаимодействовать с мувиком в интуитивно понятной форме. Первые упоминания о необходимости создания инструмента для ТАСинга на основе Piano Roll звучали ещё в 2005 году, возможно, даже ранее. Прототип под названием TASEdit был создан в 2008 году. Окончательное видение Тасэдитора сформировалось в сентябре 2011 года и дорабатывалось по ходу разработки вплоть до лета 2012. Помимо реализованных идей в это время было придумано множество перспективных, но второстепенных или сложно реализуемых идей, которые было решено отложить на будущее.
++ | ++ | +
+ + + + + + + + + + + + + + + + + + + | ++ + + + + + + + | +
Реализованные идеи
+ +Piano Roll
+Основа Тасэдитора, вокруг этой идеи и были сформированы все остальные.
+● +Представляет собой значительно переработанный компонент Список (ListView) или Таблица (GridView). Столбцы Списка соответствуют кнопкам Ввода, строки Списка соответствуют кадрам мувика. Количество строк Списка регулярно автоматически обновляется, чтобы соответствовать количеству кадров текущего мувика. Строки нумеруются сверху вниз от нуля. Номер строки равен номеру кадра, с которым ассоциируется эта строка. Количество столбцов зависит от типа мувика (от количества джойстиков и, соответственно, количества кнопок).
+● +Слева перед столбцами Ввода располагаются два дополнительных столбца. Самый первый столбец (шириной ~17 пикселей) отвечает за отображение иконок и за управление Курсором Проигрывателя. Текущее положение Курсора Проигрывателя отображается иконкой в виде голубой стрелки. При щелчке левой кнопкой по этому столбцу Курсор Проигрывателя посылается на соответствующий кадр, и начинается перетаскивание Курсора, пока не будет отпущена левая кнопка.
+● +Второй столбец (шириной 75 пикселей) отвечает за отображение номеров кадров, отображение Маркеров, управление Выделением и управление Маркерами. При одинарном щелчке левой кнопкой по этому столбцу изменяется Выделение (и можно растягивать Выделение перетаскиванием). При двойном щелчке на этом кадре ставится Маркер, и начинается перетаскивание этого Маркера, пока не будет отпущена левая кнопка.
+● +В Заголовке Списка отображаются названия столбцов. Самый первый столбец (столбец иконок) не имеет названия, второй столбец назван "Frame#" (номер кадра), остальные столбцы обозначены символом соответствующей кнопки джойстика. Этот же символ отображается в ячейках данного столбца на тех строках, где данная кнопка является нажатой. По ячейкам Заголовка Списка можно щёлкать, изменяя Ввод соответствующей кнопки в выделенных кадрах. А при щелчке по "Frame#" изменяются Маркеры в выделенных кадрах. Кроме того, Заголовок служит индикатором зажатых кнопок джойстика, а при Записи Ввода в Заголовке вспыхивают символы, кнопки которых были только что записаны в мувик.
+● +Столбцы Ввода отображают состояние соответствующей кнопки джойстика для каждого кадра мувика. Чтобы узнать состояние кнопки, нужно визуально найти пересечение строки требуемого кадра и столбца требуемой кнопки. Если в этой ячейке находится символ кнопки, то кнопка в данном кадре нажата. Если в этой ячейке пустота или прочерк, то кнопка отпущена. Щелчком левой кнопкой мыши по любой ячейке Ввода можно инвертировать состояние соответствующей кнопки Ввода. Кроме того, если зажать левую кнопку мыши, можно рисовать или стирать Ввод в соседних кадрах, перемещая курсор мыши выше или ниже. Эти и другие возможности быстрого редактирования Ввода призваны полностью заменить линейную Запись нелинейным редактированием.
+● +Строки Piano Roll раскрашиваются разными цветами в пастельных тонах, чтобы на их фоне были чётко видны номера кадров (отображаемые чёрным цветом) и символы кнопочных нажатий (отображаемые тёмными цветами). По цвету строки Piano Roll пользователь может сразу определить, находится ли данный кадр мувика в Гринзоне, проявляется ли лаг в данном кадре, является ли данный кадр текущим (отображаемым в окне эмулятора в данный момент), является ли данный кадр выделенным. Также дополнительными цветами можно акцентировать внимание пользователя на определённых кадрах, например, на кадре окончания добегания (мигающий голубой цвет) или на ключевом кадре отката (фиолетовый цвет). Кроме того, по цвету фона ячеек с номерами кадров пользователь может определить наличие Маркера на этом кадре (жёлтый цвет).
+● +Расцветка ячеек Piano Roll зависит не только от строки, но и от столбца (хоть и в меньшей мере). Столбец иконок всегда отображается белым цветом. Стобец номеров кадров отображается бледным оттенком текущего цвета строки. Столбцы кнопок Ввода для первого (а также третьего) джойстика отображаются нормальным оттенком текущего цвета строки (зелёным, красным, голубым и т.д.), а столбцы кнопок Ввода для второго (а также четвёртого) джойстика отображаются немного затемнённым оттенком текущего цвета строки.
+● +Видимая область Piano Roll может скроллироваться колесом мыши или с помощью скроллбаров, а также с помощью множества других способов навигации. Многообразие способов призвано ускорить навигацию к любому желаемому участку мувика, так как в видимой области отображается лишь ограниченное количество строк. Это количество зависит от текущей высоты Piano Roll в пикселах, которая зависит от текущей высоты окна TAS Editor.
+ +Выделение
+Как и в любом другом редакторе, в Тасэдиторе Выделение служит для применения операций к множеству кадров одновременно. Кроме того, здесь Выделение служит в качестве указателя (курсора) на место последнего щелчка по Вводу.
+● +Выделение хранится в виде списка номеров кадров, считающихся выделенными.
+● +В памяти хранится Журнал Выделений в виде массива списков. Размер массива равен размеру Журнала Истории, можно возвращаться к предыдущим выделениям с помощью Ctrl + Q и Ctrl + W. Это полезно для быстрого отслеживания истории недавних щелчков по Piano Roll.
+● +Для управления Выделением служит столбец с номерами кадров. Если после щелчка по номеру кадра зажать левую кнопку, можно растягивать Выделение на соседние кадры. Если зажать клавишу Ctrl перед щелчком по номеру кадра, ранее выделенные кадры останутся выделенными. А при простом щелчке по номеру кадра или Ввода текущее Выделение уходит в историю Выделений, и вместо него создаётся новое Выделение, состоящее из одного кадра (по которому был сделан щелчок). Если зажать клавишу Shift, выделятся все кадры от начала старого Выделения до кадра щелчка. Если зажать Alt, создастся Выделение по шаблону. Также Выделение меняется и при щелчке по ячейкам Ввода, но только когда не зажаты клавиши модификаторы,
+● +Самый верхний выделенный кадр называется Курсором Выделения. Если не выделено ни одного кадра, подразумевается, что Курсор Выделения указывает на кадр с номером -1. Это нужно для некоторых ситуаций, например, при отсутствии Выделения в нижнем текстовом поле отображается Заметка нулевого Маркера.
+● +Журнал Выделений (в том числе текущее Выделение) сохраняется и загружается из файла проекта. При изменении настройки "undo levels" происходит соответствующее изменение размера Журнала Выделений.
+● +При вставке и удалении кадров текущее Выделение смещается на соответственное количество строк вниз или вверх, чтобы оставаться на тех же позициях относительно Ввода, что и перед вставкой/удалением.
+● +Текущее Выделение можно сдвигать (Ctrl + Вверх / Ctrl + Вниз / Ctrl + Home / Ctrl + End). Если часть Выделения выходит за рамки Piano Roll, эта часть исчезает. То есть пользователь не может выделить кадры за пределами текущего мувика.
+● +Курсором Выделения можно осуществлять прыжки по Маркерам (Ctrl + Page Up / Ctrl + Page Down), при этом текущее Выделение уходит в Историю, а вместо него появляется один выделенный кадр на месте следующего Маркера.
+● +Видимая область Piano Roll всегда следует за Выделением. При этом, если Выделение не помещается целиком на экране, Piano Roll скроллируется таким образом, чтобы Курсор Выделения был в середине, а если Выделение помещается – центрирует всё Выделение.
+● +В нижнем текстовом поле отображается текст Заметки маркера, на участке которого находится Курсор Выделения. Этот текст обновляется при каждом изменении Выделения, а также при изменении текущих Маркеров.
+● +При нажатии Ctrl + A текущее Выделение уходит в Историю, вместо него становятся выделенными все кадры, начиная с Маркера, на участке которого был Курсор Выделения, заканчивая следующим Маркером (не включая этот Маркер). Таким образом выделяется весь участок текущего Маркера. При следующем нажатии Ctrl + A Выделение изменится на набор кадров между Маркерами, не включая верхний и нижний Маркеры. При третьем Ctrl + A Выделение изменится на набор кадров между Маркерами, не включая верхний, но включая нижний Маркер. Наконец, при четвёртом нажатии Ctrl + A Выделение изменится на набор кадров между Маркерами, включающий оба Маркера. При дальнейших нажатиях Ctrl + A будет повторение предыдущих вариантов выделения. Это позволяет пользователю быстро выделить нужный участок, причём в большинстве случаев ТАСеру будет нужен именно первый вариант выделения между Маркерами.
+ +Маркеры
+При редактировании больших мувиков пользователю может понадобиться установка отметок на некоторые строки Piano Roll, чтобы эти строки визуально отличались от соседних. После ряда усовершенствований эта идея вылилась в многогранную фичу.
+● +Любой кадр мувика может быть отмечен. При желании пользователь может отметить Маркерами сразу все кадры мувика. Кроме того, пользователь может оставить отметку, например, на кадре 1200, а затем сделать усечение Ввода после кадра 1000, оставив отвязанный от Ввода Маркер за пределами мувика. Этот Маркер будет оставаться в проекте; чтобы увидеть его наличие, нужно проэмулировать мувик до кадра 1200, чтобы в Piano Roll отражалась строка с этим Маркером.
+● +Неотмеченные строки Piano Roll отображаются обычными цветами, а в отмеченных строках ячейка с номером кадра имеет жёлтый цвет фона. Этот цвет выбран, так как Маркеры призваны акцентировать внимание пользователя на отмеченных кадрах. Также номера отмеченных кадров отображаются особым шрифтом, чтобы о наличии Маркера можно было догадаться, даже когда жёлтый фон ячейки загораживается синим цветом Выделения.
+● +Маркеры могут быть привязаны к Вводу (тогда они отображаются бледно-жёлтым цветом), а могут быть отвязанными (отображаются более насыщенным жёлтым цветом). Когда Маркеры привязаны, на них действуют операции по смещению Ввода вверх/вниз, а также усечению Ввода.
+● +Маркер ставится двойным щелчком левой кнопкой мыши по номеру желаемого кадра. Если сделать двойной щелчок по уже установленному Маркеру, начинается его перетаскивание (до момента отпускания левой кнопки). Так можно перенести Маркер на другой кадр или удалить, перенеся за рамки Piano Roll. При перетаскивании под курсором мыши висит образ Маркера в виде жёлтого прямоугольника с номером кадра, с которого был снят этот Маркер. Чтобы отменить перетаскивание, нужно опустить Маркер либо на ту же самую ячейку с номером кадра, либо на любую ячейку Ввода.
+● +Также Маркеры можно устанавливать и удалять с помощью контекстного меню по правой кнопке или с помощью щелчка по Frame#.
+● +Обычно Маркеры ставятся относительно далеко друг от друга, и между ними находятся промежутки из неотмеченных кадров. Поэтому Маркеры можно воспринимать не только как цветовое выделение особенных кадров, но и как пограничные отметки для участков мувика. Для стандартизации принята следующая терминология: каждому Маркеру соответствует участок кадров мувика, начинающийся с отмеченного кадра и заканчивающийся последним неотмеченным кадром. Например, если в мувике на кадрах 10 и 20 стоят Маркеры, то участком первого маркера является регион кадров с 10-го по 19-й, а участком второго маркера - регион с 20-го по последний кадр мувика.
+● +Промежутки между Маркерами можно пересекать прыжками от текущего к следующему (или предыдущему). Это позволяет в ряде случаев ускорить навигацию по мувику.
+● +С помощью функции Select between Markers (Ctrl + A) можно быстро выделить все кадры на участке текущего Маркера. Таким образом Маркеры позволяют ускорить не только навигацию, но и редактирование.
+● +Каждый Маркер имеет свою текстовую Заметку. При создании она пустая. Пользователь может просматривать и редактировать Заметку с помощью любого из двух имеющихся текстовых полей. В верхнем текстовом поле отображается Заметка Маркера, на участке которого находится Курсор Проигрывателя. В нижнем текстовом поле отображается Заметка Маркера, на участке которого находится Курсор Выделения. Таким образом, чтобы отредактировать желаемую Заметку, нужно сначала поставить один из курсоров на её Маркер или на кадр под Маркером. В теории это звучит неудобно, но рабочий процесс в Тасэдиторе организован таким образом, что под нужными Маркерами обязательно стоит какой-нибудь курсор.
+● +Объём Заметки ограничен сотней символов, так как Заметки предназначены не для хранения длинных текстов, а для коротких комментариев, тегов и тому подобных записок на салфетках. В крайнем случае можно разместить несколько Маркеров подряд, разбив длинный текст на несколько соседствующих Заметок.
+● +По тексту Заметок можно осуществлять обычный поиск (Find Note) и нечёткий поиск (Similar/More). Подробнее см. Продвинутые возможности.
+● +Маркеры сохраняются и восстанавливаются из ответвлений Закладок вместе с Вводом. Каждая операция с Маркерами заносится в Журнал Истории аналогично операциям с Вводом. В файле проекта Маркеры сохраняются сразу после Ввода.
+ +Горячие Правки
+Раскраска текстовых символов в ячейках Ввода разными цветами, в зависимости от давности редактирования каждой ячейки. Подробнее см. Интерфейс программы и Настройка программы.
+● +В памяти хранятся значения сразу всех ячеек Ввода, даже несмотря на то, что большинство из них имеет нулевой уровень горячести. Это необходимо для тех редких случаев, когда массово изменяются почти все ячейки мувика (например, при операциях Import или Paste). Массив Горячих Правок занимает много места в оперативной памяти, но хорошо сжимается и занимает мало места на диске.
+● +16 градаций цвета, чтобы в одном байте умещалась информация о горячести двух ячеек. Кроме того, добавлять ещё больше градаций нет смысла, так как человеческий глаз будет хуже различать их, а ценность Горячих Правок именно в возможности быстрой визуальной оценки Ввода, не требующей длительного обдумывания.
+● +Состояние текущей карты Горячих Правок меняется только при добавлении нового пункта в Журнал истории и при откатах Истории.
+● +при редактировании Ввода старые ячейки теряют один уровень горячести, а изменённые ячейки приобретают максимальный уровень
+● +при удалении кадров старые ячейки теряют один уровень горячести
+● +при вставке кадров старые ячейки теряют один уровень горячести, а все ячейки вставленных кадров приобретают максимальный уровень
+● +при изменении Маркеров или Закладок, а также при усечении мувика Горячие Правки не меняются
+● +при прыжке на Закладку во времени текущие Горячие Правки замещаются Горячими Правками из ответвления Закладки
+● +при импорте Ввода старые ячейки обнуляют уровень горячести, а изменённые ячейки приобретают максимальный уровень
+ +Гринзона
+Так как интерфейс Piano Roll предоставляет пользователю почти мгновенный доступ к изменению Ввода на любом кадре мувика, желательно также предоставить быстрый доступ к просмотру состояния игры на любом кадре мувика. Это реализуется с помощью кеширования данных о всех полученных состояниях игры.
+● +Гринзона представляет собой массив информации о Выводе игры на начало каждого кадра. То есть в ячейке с номером 0 хранится состояние игры до начала эмуляции, в ячейке 1 – состояние игры перед началом эмуляции второго кадра (кадра с номером 000001) и т.д. Помимо сэйва для каждого кадра хранится информация о лаге в этом кадре, теоретически возможно хранение и другой информации.
+● +Гринзона начинается с нулевого кадра и имеет нижнюю границу (голову) – номер кадра, начиная с которого в Гринзоне отсутствует информация о дальнейших состояниях игры. Для кадров, номер которых меньше головы, в Гринзоне может иметься информация.
+● +Данные в Гринзону собираются в начале каждого кадра (перед эмуляцией) по следующему принципу: если в массиве Гринзоны ячейка с номером, равным текущему кадру, пустует, или же позиция головы Гринзоны меньше номера текущего кадра, то ячейка массива заполняется информацией о текущем состоянии игры (из эмулятора), а голова Гринзоны при необходимости перемещается вперёд.
+● +Для экономии памяти Гринзона периодически разреживается, удаляя сэйвы (но не информацию о лаге) некоторых ранних кадров, от которых Курсор Проигрывателя ушёл достаточно далеко. Подробнее см. Настройка программы.
+● +Вся Гринзона сохраняется и загружается из файла проекта. После загрузки проекта Тасэдитор восстанавливает состояние Курсора Проигрывателя с помощью Гринзоны.
+● +При любом изменении Ввода текущего мувика из Гринзоны удаляется информация о кадрах, идущих после первого изменённого кадра. Это реализуется с помощью уменьшения позиции головы Гринзоны, но сама устаревшая информация из массива не удаляется. Обычно одновременно с этим перемещается Курсор Проигрывателя, чтобы он всегда находился внутри Гринзоны (чтобы на экране FCEUX никогда не отображалось неактуальное состояние игры).
+● +При создании Закладки в неё копируется информация из соответствующего кадра Гринзоны. При загрузке ответвления этой Закладки из неё копируется информация в соответствующую ячейку Гринзоны, и при необходимости передвигается позиция головы.
+● +Информация из Гринзоны используется при раскрашивании строк Piano Roll. Информация о лаге (Журнал лага) отображается не только для кадров, содержащихся в Гринзоне, но и для отсутствующих в ней кадров. Если в Гринзоне нет информации о лаге на определённом кадре, то предполагается, что этот кадр без лага.
+● +Информация о лаге собирается в Гринзону одновременно со сбором текущего состояния игры, то есть перед началом эмуляции текущего кадра. В этот момент эмулятор обладает информацией о лаге предыдущего кадра, поэтому на кадре с номером 000020 данные о лаге сохраняются в ячейку 19. Также именно в этот момент может сработать операция AdjustLag, которая сдвигает весь Ввод в последующих кадрах мувика на 1 кадр вверх или вниз. Ввод сдвигается вверх, если в Журнале лага на прошлом кадре был лаг, а теперь его не стало. Ввод сдвигается вниз, если в Журнале лага на прошлом кадре не было лага, а теперь он есть. Вместе с Вводом аналогично сдвигается и все последующие ячейки Журнала лага, чтобы красные строки Piano Roll по-прежнему соответствовали сдвинувшимся пропускам во Вводе. Кроме того, после операции AdjustLag Курсор Проигрывателя насильно возвращается на предыдущий кадр (в котором изменилась информация о лаге), чтобы проэмулировать его заново. Это реализуется не простой перемоткой назад, а усечением Гринзоны после предыдущего кадра.
+ +Проигрыватель
+Проигрыватель – это собрание всех функций по просмотру Вывода (состояния игры в нужных кадрах).
+● +Главный атрибут Проигрывателя – текущий проигрываемый кадр мувика, скриншот этого кадра отображается в окне эмулятора в данный момент времени. Этому кадру соответствует голубая строка в Piano Roll, которая носит название Курсор Проигрывателя. Так как Курсор Проигрывателя привязан к состоянию эмулируемой игры, можно использовать его не только в качестве индикатора, но и в качестве управляющего элемента. Чтобы увидеть на экране FCEUX события интересующего кадра, нужно передвинуть Курсор Проигрывателя на строку с номером этого кадра. Для этого есть множество способов.
+● +Когда пользователь посылает Курсор Проигрывателя на кадр, содержащийся в Гринзоне, состояние эмулируемой игры восстанавливается из соответствующего сэйва. Так как при этом не было никакой эмуляции, Тасэдитор имитирует события "frame boundary" и "frame begin"/"frame end", чтобы сработали соответствующие функции Lua.
+● +Когда пользователь посылает Курсор Проигрывателя на кадр, не содержащийся в Гринзоне, Тасэдитор восстанавливает состояние игры на ближайший предшествующий кадр, для которого имеется сэйв Гринзоны, а затем запускает добегание к желаемому кадру. Добегание – это эмуляция, которая автоматически останавливается при достижении целевого кадра. Во время добегания на целевом кадре мигает копия голубого курсора.
+● +Так как эмулятор обеспечивает детерминизм, состояние игры на любом кадре можно гарантированно получить, используя базовое состояние игры (состояние на начало мувика) и Ввод из мувика. Более того, можно получить требуемое состояние, используя состояние на любой предыдущий кадр (сэйв из Гринзоны) и Ввод из мувика. На этом принципе и основано добегание.
+● +Процесс добегания отображается на прогрессбаре, чтобы в случае длительного добегания пользователь мог оценить оставшееся время ожидания. Когда добегания нет, прогрессбар полностью заполнен во время паузы и пуст во время эмуляции.
+● +Добегание может осуществляться на максимально возможной скорости эмуляции. В этом случае для относительно небольших участков добегание будет завершено практически мгновенно.
+● +Во многих случаях полезно автоматически останавливать эмуляцию на последнем кадре, для которого в мувике есть Ввод. Для этого служит настройка Autopause at the end of Movie, благодаря которой Курсор Проигрывателя при отпущенной паузе не будет убегать слишком далеко.
+● +В большинстве случаев пользователю не требуется автоматически скроллировать Piano Roll к Курсору Проигрывателя во время передвижения этого курсора. Для тех случаев, когда это всё-таки нужно, служит галочка "Follow cursor".
+ +Зелёная стрелка
+При создании спидранов ТАСер пытается обогнать свой рекорд на каждом участке. В большинстве случаев критерием оптимальности является номер кадра, на котором происходит конечное событие участка. Для его определения ТАСер перемещает Курсор Проигрывателя, одновременно просматривая экран FCEUX, и останавливает этот ручной поиск в тот момент, когда обнаружено начало интересующего события. Обычно Курсор Проигрывателя так и остаётся на найденном кадре, а ТАСер начинает изменять Ввод на участке, надеясь улучшить его и получить то же событие на более ранний кадр.
+Во время изменения Ввода Гринзона усекается, и Курсор Проигрывателя отступает назад. Когда ТАСер считает, что внёс во Ввод достаточно существенные изменения, он начинает проверку Вывода, чтобы определить, на каком кадре начинается целевое событие теперь. Для этого он опять перемещает Курсор Проигрывателя, одновременно просматривая экран FCEUX.
+Чтобы сделать вывод об улучшении, ТАСеру нужно сравнить старый номер кадра (найденный в прошлый раз) и новый номер, найденный только что. Тасэдитор визуализирует эти данные, чтобы пользователю не требовалось запоминать их в уме. На новый номер указывает Курсор Проигрывателя, на старый номер указывает зелёная стрелка.
+● +Полное название зелёной стрелки – утерянная позиция Курсора Проигрывателя.
+● +Более адекватной заменой зелёной стрелке служат Маркеры и Закладки, устанавливаемые вручную.
+● +Иконка зелёной стрелки отображается в столбце иконок Piano Roll.
+● +При рисовании иконок в Piano Roll зелёная стрелка имеет более высокий приоритет над голубой стрелкой (иконкой Курсора Проигрывателя), так как положение голубого курсора можно определить и по другим столбцам.
+● +Зелёная стрелка появляется на кадре вместо Курсора Проигрывателя в момент усечения Гринзоны. И она остаётся на этом кадре до тех пор, пока не будет произведена следующая последовательность событий:
+1) +эмуляция хотя бы одного кадра (подразумевается, что пользователь запустил просмотр участка)
+2) +следующее отступление Курсора Проигрывателя из-за усечения Гринзоны
+● +Таким образом, зелёная стрелка не меняет своё положение, когда ещё до запуска эмуляции Гринзона усекается повторно (например, ТАСер изменил Ввод на кадре 90, а затем на кадре 80, но зелёная стрелка так и осталась на кадре 100).
+● +Также зелёная стрелка не меняет своё положение, когда Гринзона усекается во время добегания, и эмулятор в этот момент не стоит на паузе.
+● +Зелёная стрелка не меняет своё положение при операциях AdjustLag, Branch, Record.
+ +Автоматическое восстановление последней позиции
+При создании любых ТАСов критерием оптимальности может быть состояние игры на одном и том же кадре, либо ход событий на одном и том же участке. ТАСер просматривает участок и оставляет Курсор Проигрывателя на последнем кадре участка, затем изменяет Ввод на участке и опять просматривает участок, останавливая Курсор Проигрывателя на том же самом кадре. Вывод об улучшении ТАСер делает либо во время просмотра событий участка, либо после остановки эмуляции, оценивая характеристики последнего кадра.
+Этот процесс можно автоматизировать, автоматически запуская добегание к утерянной позиции Курсора Проигрывателя после каждого усечения Гринзоны. Для этого служит галочка "Auto-restore last position".
+● +Когда галочка установлена, сразу после усечения Гринзоны запускается добегание к последней позиции Курсора Проигрывателя.
+● +Если Гринзона была усечена во время добегания, при усечении будет продолжено добегание к целевому кадру, а не к текущему положению Курсора Проигрывателя. Но если во время усечения Гринзоны добегание стоит на паузе, это добегание отменяется, и будет запущено добегание к утерянной позиции Курсора Проигрывателя. Подразумевается, что если ТАСер не дождался окончания добегания, поставил эмулятор на паузу и начал изменять Ввод на участке, то он сосредоточился на подучастке, поэтому дальнейший автоматический просмотр будет запускаться именно для этого подучастка.
+● +Автовосстановление не запускается при операциях AdjustLag, Branch, Record. При срабатывании операции AdjustLag продолжается проигрывание мувика.
+ +Мультитрекинг-рекордер
+Рекордер – это собрание всех функций по редактированию Ввода на кадре под Курсором Проигрывателя. Рекордер предоставляет ТАСеру второй способ редактирования Ввода – Запись.
+● +Мультитрекинг позволяет ТАСеру в режиме Записи изменять данные только одного выбранного джойстика, оставляя данные других джойстиков на этом же кадре нетронутыми. Подробнее см. Панель инструментов.
+● +Когда включен режим Записи, перед началом каждого кадра эмулятор опрашивает виртуальные джойстики и записывает данные в текущий мувик. Затем сразу же передаёт управление Рекордеру.
+● +Рекордер:
+● +использует данные из мувика на кадре Курсора Проигрывателя в качестве записываемых данных, либо (если идёт Запись по шаблону, и сейчас надо записывать отсутствие нажатий) использует ноль в качестве записываемых данных
+● +сравнивает записываемые данные со старыми данными, хранящимися в Журнале Истории
+● +накладывает на изменения фильтр, соответствующий выбранному режиму мультитрекинга
+● +избирательно объединяет старые данные с новыми, в соответствии с галочкой "Superimpose"
+● +сохраняет реальные изменения в текущий мувик
+● +вызывает добавление пункта в Журнал Истории и усечение Гринзоны
+● +затем возвращает управление эмулятору
+● +Эмулятор возвращает данные из текущего мувика в виртуальные джойстики, чтобы использовать эти данные для наступающего кадра. Также в этот момент эмулятор запускает записанные команды (сброс и т.д.).
+● +В каждом кадре Рекордер получает от эмулятора информацию о зажатых в данный момент кнопках виртуальных джойстиков и подготавливает для Piano Roll информацию о том, какие столбцы в Заголовке Piano Roll должны загораться зелёным светом. Например, если выбрана радиокнопка "2P" и установлена галочка Use 1P keys for all single Recordings, то при нажатии кнопки A на первом джойстике в Заголовке Piano Roll будет загораться столбец "A" второго джойстика. А если в предыдущем кадре кнопка A не была зажата, то Рекордер воспринимает это как нажатие кнопки, и в соответствии с галочкой Use Input keys for Column Set вызывает либо установку/снятие Ввода в Выделении, либо установку Ввода в Выделении по шаблону (если зажат Alt).
+ +Lua-автоматизация
+Lua позволяет пользователю расширить возможности Тасэдитора, в частности, предоставляет ТАСеру третий способ редактирования Ввода – автоматическая генерация.
+● +Интерпретатор Lua-функций вызывает соответствующую функцию Тасэдитора не напрямую, а через луа-шлюз Тасэдитора (taseditor_lua).
+● +При срабатывании какой-либо функции из библиотеки "taseditor" луа-интерпретатор берёт входные данные из стека, при необходимости конвертирует их в формат, принимаемый луа-шлюзом Тасэдитора, и передаёт их соответствующей функции луа-шлюза Тасэдитора.
+● +Луа-шлюз Тасэдитора вызывает соответствующие функции Тасэдитора и передаёт полученный результат обратно в луа-интерпретатор.
+● +Луа-интерпретатор помещает полученные данные в стек, при необходимости конвертируя их в формат, принимаемый луа-кодом.
+● +Функции submitinputchange(), submitinsertframes() и submitdeleteframes() не вызывают соответствующее изменение мувика, а только создают запись в массиве отложенных заданий, хранящемся в луа-шлюзе Тасэдитора. Все отложенные задания реализуются при вызове applyinputchanges(). Благодаря этому луа-скрипт может вносить в мувик сразу несколько изменений, создавая только один пункт Журнала Истории.
+ +Закладки и ответвления
+Закладки являются специализированной альтернативой Маркерам. А ответвления служат для хранения нескольких мувиков в одном проекте. Для упрощения создания и навигации по ответвлениям они привязаны к Закладкам, по аналогии с традиционными сохранениями.
+● +В проекте может храниться не более 10 Закладок. Это ограничение связано с количеством цифровых клавиш на клавиатуре. Также такое ограничение позволяет отображать в окне TAS Editor основную информацию сразу обо всех Закладках, без необходимости скроллинга. Кроме того, многолетний опыт традиционного ТАСинга подтверждает, что такого количества слотов для Закладок вполне достаточно для продуктивного ТАСинга.
+● +Закладка может быть установлена на любой кадр мувика. Закладки не исчезают, даже когда мувик усекается. Например, если поставить Закладку на кадр 1200, а затем сделать усечение Ввода после кадра 1000, за пределами мувика останется Закладка, при прыжке на которую мувик автоматически расширится до кадра 1200.
+● +В Piano Roll Закладки отображаются иконкой с соответствующей цифрой (номером слота). Закладка, хранящая текущее ответвление мувика, отображается голубой цифрой, остальные Закладки отображаются зелёными цифрами.
+● +Закладка устанавливается нажатием соответствующего хоткея (для каждого слота есть отдельный хоткей сохранения) либо щелчком правой кнопки мыши по слоту Закладки. При этом Закладка устанавливается на тот кадр, где в данный момент находится Курсор Проигрывателя. Этот номер кадра запоминается в Закладке, и в дальнейшем можно в любой момент отправить Курсор Проигрывателя на этот кадр, щёлкнув левой кнопкой мыши по слоту Закладки или нажав соответствующий хоткей (для каждого слота есть отдельный хоткей прыжка). Прыжок на Закладку не является операцией, так как никаких изменений мувика не происходит.
+● +В момент установки Закладки Тасэдитор проверяет, отличаются ли сохраняемые данные от уже содержащихся в этой Закладке данных. Если различий не найдено, операция Bookmark не производится.
+● +Помимо номера кадра в слот устанавливаемой Закладки сохраняются все данные текущего мувика (тип Ввода, Ввод, Горячие Правки, Маркеры). Тем самым в проекте сохраняется текущее ответвление из всех возможных ответвлений мувика. В дальнейшем мувик будет многократно изменён, но пользователь сможет в любой момент вернуться к состоянию мувика, сохранённому в данной Закладке.
+● +В слот устанавливаемой Закладки сохраняются дополнительные данные, повышающие удобство использования. В частности, скриншот экрана FCEUX на момент создания Закладки позволяет быстро узнавать содержимое Закладки без загрузки её ответвления. А копия одного сэйва из Гринзоны (на закладочном кадре) позволяет после загрузки ответвления сразу же поставить Курсор Проигрывателя на кадр Закладки.
+● +После установки закладки она становится текущей (отображается голубой цифрой), так как её ответвление более остальных похоже на текущий мувик.
+● +При смене текущего мувика на ответвление из Закладки происходит изменение Ввода, поэтому Гринзона усекается, начиная с первого отличающегося кадра. Но благодаря хранящемуся в Закладке сэйву в Гринзону возвращается один сэйв на кадре, где и установлена эта Закладка. Поэтому "прыжок на Закладку во времени" всегда мгновенно перемещает Курсор Проигрывателя на кадр Закладки, в то время как прыжок на Закладку в пространстве (без изменения мувика) может потребовать добегания.
+● +Все операции с Закладками (установка, прыжок, загрузка) производятся после окончания эмуляции текущего кадра, даже если сигнал от пользователя сработает в середине кадра.
+● +Для отображения основных Данных закладок используется Список (Listview) без скроллинга, содержащий 10 строк и 3 столбца. при создании нового проекта все 10 Закладок пустые, поэтому второй и третий столбец Списка Закладок будут пустовать.
+● +В первом столбце Списка Закладок отображается номер слота, которому соответствует данная строка. Номер отображается как и в Piano Roll – с помощью цифровых иконок зелёного или голубого цвета. Нумерация слотов идёт в таком порядке: 1, 2, 3, 4, 5, 6, 7, 8, 9, 0. Этот порядок нужен, чтобы не нарушать ассоциацию с цифровыми клавишами на клавиатуре, которыми пользователь может контролировать Закладки.
+● +Во втором столбце Списка Закладок отображается номер кадра, на который установлена Закладка.
+● +В третьем столбце Списка Закладок отображается реальное время установки Закладки.
+● +Список Закладок разделяется вертикальной чертой примерно пополам. Левая часть (где располагается первый и второй столбец Списка) ассоциируется с закладочным функционалом Закладок. Правая часть (где располагается третий столбец) ассоциируется с ответвлениями, хранящимися в Закладках. Левая часть отображается более светлым оттенком, правая - более тёмным. Щелчок левой кнопкой мыши по левой половине означает прыжок на Закладку, а щелчок по правой половине – загрузку ответвления.
+● +Строки Списка Закладок окрашиваются цветами, соответствующими цветам строк Piano Roll, на которых установлены эти Закладки. Например, если Закладка установлена на кадре 1000, и на этом кадре в данный момент находится Курсор Проигрывателя, то в Списке Закладок строчка этой Закладки будет нарисована голубым цветом. Эта фича даёт пользователю дополнительную информацию о расположении Закладок в мувике.
+● +Вместо постоянного просмотра Списка Закладок можно переключать вид на Дерево ответвлений. Переключение осуществляется щелчком по заголовку, расположенному над Списком Закладок.
+● +Дерево ответвлений – это графическое представление взаимосвязей между ответвлениями всех Закладок в проекте. Обычно Закладки создаются по мере создания мувика, поэтому более поздние Закладки хранят ответвление, начальная часть которого совпадает с ответвлениями более ранних Закладок. Для каждой Закладки можно найти "родительскую" Закладку, из мувика которой, вероятнее всего, произошёл мувик данной Закладки. В результате все Закладки выстраиваются в иерархическую структуру, в начале которой находится корень (отображается в виде тучки), являющийся родителем Закладок, для которых не нашлось родителя. Поиск родителей для Закладок осуществляется при каждом изменении любой Закладки. При поиске учитывается номер кадра, на котором установлена каждая Закладка. Благодаря этому в начале иерархии находятся Закладки с наименьшим номером кадра.
+● +При установке Закладки она становится текущей, и её содержимое ничем не отличается от текущего мувика. Но после внесения изменений в мувик текущая Закладка уже будет отличаться, поэтому в Дереве ответвлений появляется фаербол, сообщающий об этом. Фаербол символизирует текущий мувик, однако его родителем всегда считается текущая Закладка. Реального поиска лучшего родителя не производится, так как пришлось бы после каждой модификации мувика запускать сравнение его Ввода со всеми Закладками, что признано слишком ресурсоёмким.
+● +Закладки в Дереве ответвлений отображаются цифровыми иконками (как и в Piano Roll). Текущая Закладка отображается голубой цифрой. Связи между Закладками отображаются тонкими линиями. Для текущей Закладки формируется последовательность красных линий, связывающих все закладки, при загрузке которых не будет изменения Ввода (то есть как минимум от начального кадра до кадра загружаемой Закладки Ввод будет совпадать с Вводом, хранящимся в текущей Закладке). Эти красные линии идут от тучки к текущей Закладке, либо ещё далее – к наследникам текущей Закладки, когда ответвление текущей Закладки содержит тот же самый Ввод, который содержится в ответвлениях этих наследников вплоть до кадра Закладки.
+● +Благодаря расположению Закладок по возрастанию их номера кадра, последовательность красных линий можно воспринимать как хронологию текущего мувика. Началом этой хронологии служит тучка, при щелчке по ней Курсор проигрывателя посылается на начало мувика. Закладки, нанизанные на красную нить, являются промежуточными этапами этой хронологии, при щелчке по ним Курсор Проигрывателя посылается на кадр указанной Закладки. Фаербол (если он есть) считается концом текущей хронологии, и при щелчке по нему Курсор Проигрывателя посылается в конец мувика. Также любое положения Курсора Проигрывателя можно проецировать на эту хронологическую линию, найдя две Закладки, между кадрами которых располагается Курсор Проигрывателя, и переведя расстояние, измеряемое в кадрах, в пиксели. В результате текущее положение Курсора Проигрывателя постоянно отображается в Дереве ответвлений в виде маленького голубого треугольника (по аналогии с иконкой Курсора Проигрывателя в Piano Roll).
+● +Аналогично просмотру текущей хронологии можно быстро увидеть альтернативную хронологию для любой Закладки, наведя на неё курсор мыши (будет отображаться синими линиями).
+● +Маркеры, содержащиеся в ответвлениях Закладок, не влияют на процесс поиска родителей и формирования Дерева.
+● +Все данные Закладок сохраняются и загружаются из файла проекта. Для Дерева ответвлений сохраняются и загружаются только кэшированные данные о номере первого кадра различий во Вводе для каждой пары Закладок. Исходя из этих данных Тасэдитор легко восстанавливает иерархию родительских отношений между закладками. А если эти данные отсутствуют, Тасэдитору придётся произвести сравнение Ввода всех Закладок относительно друг друга.
+ +Всплывающие окна
+Служат для показа контекстозависимой информации, которая нужна только в определённые моменты времени.
+● +В TAS Editor 1.0 реализовано только два вида всплывающих окон: скриншоты к Закладкам и текстовые описания к Закладкам. Оба окна всплывают при наведении курсора мыши либо на правую половину Списка Закладок, либо на любую иконку (карточку) Закладки в Дереве ответвлений.
+● +Оба окна появляются (по альфа-каналу) в течение примерно полусекунды после наведения курсора мыши на активный элемент. Исчезают так же в течение примерно полусекунды после уведении курсора от элемента.
+● +В настройках можно отключить тот или другой тип всплывающих окон.
+● +В окне скриншота отображается сохранённая в указанной Закладке копия экрана FCEUX на момент создания Закладки. В зависимости от настройки HUD in Branch screenshots в Закладку сохраняется либо просто содержимое буфера экрана эмулируемой приставки, либо изображение экрана приставки с наложенными данными эмулятора. Скриншоты служат для быстрой оценки содержимого Закладки, а также для сравнения альтернативных стратегий.
+● +В окне описания отображается текстовое поле, по ширине равное ширине верхнего и нижнего текстового поля для редактирования Заметок. В поле отображается текст Заметки Маркера, взятого из ответвления указанной Закладки. Маркер определяется номером кадра, на котором установлена эта Закладка.
+● +Окно скриншота отображается сбоку от раздела Закладок, окно описания отображается под окном скриншота.
+● +При перетаскивании окна TAS Editor всплывающие окна перемещаются вместе с ним (пока не погаснут).
+● +Если во время отображения всплывающих окон меняется содержимое указанной Закладки, содержимое всплывающих окон также мгновенно обновляется.
+ +Журнал Истории
+История всех существенных изменений проекта служит, главным образом, для удобного отката этих изменений, а также для визуального отслеживания этой истории.
+● +В каждом пункте Журнала Истории хранится полная копия Ввода и Маркеров на момент создания пункта. Также в любом пункте может храниться резервная копия Закладки, если пункт создан из-за операции Bookmark.
+● +Данные каждого пункта хранятся в оперативной памяти одновременно в двух видах – сжатом и несжатом. Несжатый используется при работе, сжатый сохраняется в fm3-файл. При создании нового пункта Истории он хранится только в несжатом виде, однако каждые полсекунды Тасэдитор проходится по Журналу Истории и создаёт сжатую версию для первого попавшегося пункта без сжатой версии. Таким образом, к моменту сохранения проекта на диск почти все пункты Истории уже имеют сжатую версию, а те, которые не имеют, сжимаются во время сохранения (что немного замедляет процесс сохранения). При загрузке fm3-файла пункты Журнала Истории загружаются в запакованном виде и распаковываются.
+● +Благодаря Журналу Истории реализуется поиск первого изменившегося кадра, после которого затем усекается Гринзона. Большинство операций работают таким образом:
+● +Вносятся изменения в мувик.
+● +Для большинства операций запоминаются минимальный и максимальный номер кадра, в который были внесены изменения.
+● +Вызывается регистрация изменений с помощью Истории, минимальный и максимальный кадр передаются в качестве параметров вместе с кодом операции и другими параметрами.
+● +История сверяет содержимое текущего мувика с содержимым последнего пункта Журнала Истории. Если задан минимальный кадр, то сверка начинается с этого кадра, игнорируя содержимое мувика до него. Иначе проверяется всё от начала мувика. Если задан максимальный кадр, то сверка заканчивается после этого кадра (но большинство операций не передают максимальный кадр, так как, например, вставка пустого кадра передвигает весь последующий Ввод, и нужно вести проверку до самого конца мувика).
+● +Как только обнаруживается первое различие между Вводом/Маркерами мувика и Вводом/Маркерами последнего снимка мувика, создаётся новый пункт в Журнале Истории и заполняются все его атрибуты.
+● +Если различия не были обнаружены, то считается, что операция не повлияла на мувик, и никаких изменений в проекте не производится. Например, если записать те же самые нажатия поверх уже имеющихся, операция Record не будет зарегистрирована.
+● +Для операции Record регистрируется не только номер кадра с изменившимся Вводом, но и номер джойстика, кнопки которого были изменены.
+● +Последовательно добавляемые пункты для операций AdjustLag, Record, Set и Unset могут объединяться в один пункт Журнала Истории, чтобы их было удобнее откатывать в случае необходимости. Объединение производится во время заполнения атрибутов нового пункта Журнала Истории. Вместо добавления этого пункта в конец Журнала происходит замена последнего пункта на новый.
+● +После регистрации нового пункта История подаёт сигнал Дереву ответвлений (чтобы на нём появился фаербол) и менеджеру проекта (чтобы в заголовке окна появилась звёздочка), а затем возвращает номер кадра, на котором были обнаружено первое различие.
+● +Вызывается усечение Гринзоны после кадра с первым обнаруженным различием. Этот номер может быть больше, чем минимальный номер кадра, в который были внесены изменения самой операцией. Например, если установить нажатия кнопки на всех кадрах в Выделении, минимальным номером кадра будет первый выделенный кадр, но Гринзона будет усечена только после того выделенного кадра, на котором раньше не было нажатия этой кнопки.
+● +Откат Истории осуществляется как переход с текущего пункта Журнала Истории на предыдущий. Можно сразу прыгать на любой пункт Журнала Истории. Текущий мувик и текущие Маркеры восстанавливаются из данных, содержащихся в этом пункте, а сам пункт становится текущим.
+● +Одним из атрибутов каждого пункта Истории является "номер ключевого кадра". Для большинства операций это номер кадра, где обнаружилось первое различие. Для операций, сдвигающих Ввод, это номер минимального кадра.
+● +При прыжках по Истории в Piano Roll на полсекунды появляется курсор-указка фиолетового цвета, акцентирующий внимание на ключевом кадре. При откате (undo) этот курсор указывает на ключевой кадр следующего пункта Истории (относительно текущего), при повторе (redo) этот курсор указывает на ключевой кадр текущего пункта истории.
+ +Счётчик перезаписей
+По традиции во всех ТАСерских эмуляторах ведётся учёт количества перезаписей, использованных во время создания ТАСа. Это число может использоваться для примерной оценки трудозатрат.
+● +Счётчик перезаписей хранится в мувике (а значит и в fm3-файле проекта). При создании нового мувика (либо нового проекта в Тасэдиторе) счётчик обнуляется.
+● +При ТАСинге вне Тасэдитора: счётчик увеличивается на единицу каждый раз, когда ТАСер загружает сэйв в режиме Записи, чтобы изменить Ввод на уже просмотренном участке мувика. Счётчик не увеличивается, когда ТАСер записывает Ввод для кадров, события которых ему не известны.
+● +При ТАСинге в Тасэдиторе: счётчик увеличивается на единицу каждый раз, когда ТАСер изменяет Ввод на отгринзоненном участке мувика. Счётчик не увеличивается, когда ТАСер изменяет Ввод для кадров, находящихся дальше головы Гринзоны.
+● +Таким образом, в обоих случаях ведётся учёт, сколько раз ТАСер изменил известное ему будущее. Счётчик не увеличивается, когда ТАСер меняет будущее вслепую, то есть до просмотра игровых событий на изменяемых кадрах.
+● +В старых эмуляторах счётчик увеличивается прямо в момент загрузки сэйва в режиме Записи, ещё до того, как ТАСер изменяет Ввод. Из-за этого возможна ситуация, когда пользователь несколько раз подряд нажимает хоткей загрузки сэйва (например, F1), и при каждом нажатии счётчик перезаписей будет увеличиваться. В Тасэдиторе счётчик увеличивается только в момент усечения Гринзоны, независимо от выбранного способа навигации. Поэтому при первом нажатии хоткея загрузки Закладки (например, F1) счётчик увеличится только в случае, если ответвление этой Закладки отличается от текущего мувика, причём расхождение должно начинаться с уже просмотренного кадра (кадра внутри Гринзоны). А при повторных нажатиях этого хоткея счётчик не будет увеличиваться, так как ответвление Закладки уже не отличается от текущего мувика, и изменения Ввода не происходит.
+ +Система клавиш-модификаторов
+Для повышения интуитивности клавиатурного управления в Тасэдиторе используется строгое разделение функций клавиш модификаторов:
+● +Shift ассоциируется с Выводом мувика, а конкретно с Курсором Проигрывателя. Многие клавиатурные комбинации, содержащие эту клавишу, относятся к управлению этим курсором. Если быстро нажать Shift два раза подряд, Piano Roll автоматически скроллируется к Курсору Проигрывателя.
+● +Ctrl ассоциируется с Вводом мувика, а конкретно с Курсором Выделения. Многие клавиатурные комбинации, содержащие эту клавишу, относятся к управлению этим курсором. Если быстро нажать Ctrl два раза подряд, Piano Roll автоматически скроллируется к Курсору Выделения.
+● +Alt ассоциируется с шаблонами и чередующимися последовательностями.
+ +Шаблоны
+Заготовленные последовательности нажатий для одной кнопки. Подробнее см. Продвинутые возможности.
+● +Хранятся во внешнем текстовом файле в формате, доступном для редактирования в Блокноте.
+● +Формат файла должен быть описан в самом файле. Для каждого шаблона указывается его имя, которое будет отображаться в списке шаблонов.
+● +Загружаются из файла в оперативную память в момент открытия окна TAS Editor.
+● +В TAS Editor 1.0 нет встроенных средств редактирования шаблонов, так как формат очень прост, а фича не слишком востребована.
+● +По шаблону можно устанавливать Ввод, Маркеры и даже Выделение.
+● +При установке шаблона может учитываться или не учитываться лаг. Подробнее: Настройка программы
+ +Пересечение промежутков
+Дополнительный способ быстрой навигации по содержимому Piano Roll, облегчающий визуальное прослеживание длинных последовательностей для отдельно взятой кнопки или Маркеров.
+● +Пересечение промежутков – это вертикальный скроллинг Piano Roll, срабатывающий при вращении колеса мыши с зажатой клавишей Alt. Конкретная величина скроллинга не зависит от скорости вращения колеса, а рассчитывается каждый раз индивидуально, исходя из ячейки Piano Roll под курсором мыши в данный момент.
+● +При зажатом Alt имеет значение только направление вращения колеса (вверх или вниз), а не скорость вращения.
+● +Пересечение промежутков подразумевает, что пользователь хочет найти ячейку, находящуюся на расстоянии более одного кадра от ячейки под курсором мыши (иначе нет смысла использовать эту функцию, достаточно просто провести курсор мыши чуть выше).
+● +Таким образом, при вращении колеса мыши вверх эта функция запоминает значение ячейки, предшествующей ячейке под курсором мыши. Затем функция начинает поиск ячейки, значение которой не совпадает с данным значением. Поиск идёт снизу вверх от ячейки, предшествующей ячейке под курсором мыши. При успешном обнаружении такой ячейки Piano Roll скроллируется таким образом, чтобы курсор мыши теперь указывал на найденную ячейку. Если же поиск дошёл до начала мувика, а ячейка не найдена, то Piano Roll не скроллируется.
+● +Аналогично при вращении колеса мыши вниз эта функция запоминает значение ячейки, следующей за ячейкой под курсором мыши. Затем функция начинает поиск ячейки, значение которой не совпадает с данным значением. Поиск идёт сверху вниз от ячейки, следующей за ячейкой под курсором мыши.
+ +Компактное сохранение
+Файл проекта Тасэдитора в первую очередь предназначен для сохранения точного снимка рабочего процесса. Чтобы использовать тот же самый формат для обмена файлами между соавторами ТАСа или для опубликования в Интернете, необходимо предоставить пользователю возможность избирательного сохранения рабочих данных в файл. При открытии такого fm3-файла отсутствующие данные будут заменяться данными по умолчанию.
+Подробнее см. Продвинутые возможности и Формат FM3.
+ +Автосохранение
+Как и в случае с любым офисным документом, проект Тасэдитора желательно время от времени сохранять на диск, даже если не планируется выход из программы. Однако до Тасэдитора у ТАСеров не было такой привычки, поэтому имеет смысл сохранять проект автоматически, предоставив пользователю возможность настроить или отключить эту функцию.
+Подробнее см. Настройка программы.
+Запланированные идеи
+Журнал Вывода (Output Log)
+Следующий этап эволюции инструмента Memory Watch – просмотр состояния игровых данных в динамике, а не только в статике. Аналогично Журналу лага, эта фича позволит легче и точнее анализировать принципы изменения игрового Вывода.
+● +Список (ListView), вертикальный скроллинг которого синхронизирован со скроллингом Piano Roll. Высота списка равна высоте Piano Roll, количество строк также всегда равно количеству строк Piano Roll. Количество колонок Списка зависит от нужд пользователя.
+● +Можно гибко измененять ширину Списка (перетаскиванием узкой границы между ним и Piano Roll, соответственно изменяется ширина Piano Roll, таким образом их суммарная ширина всегда остаётся одинаковой). Можно также менять Список и Piano Roll местами, либо полностью отключать отображение Журнала Вывода. При отключении отображения Журнала Piano Roll расширяется на освобождённое пространство, в точности как в TAS Editor 1.0. Отключение отображения Журнала не означает отключение журналирования данных.
+● +В Заголовке Списка отображаются названия журналируемых ячеек. Можно добавлять и удалять колонки, изменять названия, менять колонки местами и изменять их ширину. При создании нового проекта ни одной колонки в Журнале Вывода нет, и, соответственно, журналирование не ведётся.
+● +В строках списка отображаются значения ячеек, сохранённые из состояния игры на соответствующем кадре мувика. Строки Списка раскрашиваются теми же цветами, что и соответствующие строки Piano Roll. При выделении строк в Piano Roll выделяются строки в Журнале.
+● +Помимо ячеек RAM необходимо реализовать журналирование переменных Lua. Например, предоставить Lua-скриптам Read/Write-доступ к дюжине int-ячеек Тасэдитора и дать пользователю возможность журналировать любые ячейки из этой дюжины.
+● +Кроме того, в будущем можно реализовать добавление колонки со скриншотами игры (либо выбранной прямоугольной областью игрового экрана). Причём отображаемый размер скриншота будет зависеть от текущей ширины колонки, и как следствие, скриншоты будут отображаться не на каждой строчке Журнала, а через каждые несколько строк. Однако съёмка скриншотов всегда осуществляется на каждом кадре.
+● +Все журналируемые данные хранятся в Гринзоне, наравне с Журналом лага. При добавлении ячейки RAM возможно автоматическое заполнение всей колонки (Тасэдитор пробегает по всем сэйвам Гринзоны, распаковывает их и берёт значение из сохранённой копии RAM). При добавлении переменной Lua значения ячеек будут неопределёнными (пустые ячейки в Списке), и для их заполнения пользователю необходимо будет заново просмотреть мувик с запущенным Lua-скриптом.
+● +При усечении Гринзоны старые данные, ставшие неактуальными, не удаляются, но отображаются менее ярким цветом, пока на их место не будут записаны новые данные. При удалении сэйвов из хвоста Гринзоны данные Журнала остаются и отображаются обычным цветом.
+● +Возможна гибкая расцветка ячеек, например, подсветка одинаковых значений в Выделении, подсветка искомых значений, автоматическое изменение цвета при изменении значения, автоматическая индикация при достижении заданного значения и т.д.
+● +Возможно чтение любых данных Гринзоны из Lua-скриптов с помощью API Тасэдитора.
+● +Акселераторы Shift + Вправо / Shift + Влево теперь будут горизонтально скроллировать не Piano Roll, а Список Журнала. Скроллинг осуществляется по целым колонкам.
+● +Необходимо также реализовать новые методы навигации по мувику в зависимости от значения ячеек. Например, с помощью Alt и вращения колеса можно пересекать промежутки в Списке для поиска ближайшего неравного или, наоборот, равного значения.
+ +Миникарта
+Графически отображает в окне Тасэдитора весь мувик – Гринзону, лаг, Курсор Проигрывателя, Выделение, Маркеры, Закладки, точки Горячих Правок, подсветку Журнала Вывода и т.д. Предоставляет пользователю мгновенный образ текущего проекта, не обладающий детальностью, зато полностью умещающийся на экране. Также усовершенствует навигацию по мувику.
+● +Миникарта представляет собой прямоугольный bitmap-холст, по высоте равный высоте Piano Roll, по ширине равный 30 пикселей. Может располагаться слева или справа от Piano Roll и Журнала Вывода.
+● +В пункте View можно гибко настраивать отображаемые элементы на миникарте (устанавливать галочки напротив желаемых элементов). Также можно отключить отображение Миникарты.
+● +Миникарта не хранит какие-либо данные проекта. Она втоматически перерисовывается с заданной периодичностью (по умолчанию раз в секунду).
+● +Маркеры отображаются горизонтальными линиями жёлтого цвета на левой половине Миникарты. Каждая такая линия занимает по высоте как минимум 1 пиксель, поэтому Маркеры не теряются даже при мелком масштабе Миникарты (когда в мувике намного больше кадров, чем высота Миникарты в пикселях). Ширина линии равна трети ширины Миникарты.
+● +Горячие Правки отображаются горизонтальными линиями соответствующего цвета на правой половине Миникарты. Каждая такая линия занимает по высоте как минимум 1 пиксель.
+● +Закладки отображаются соответствующими иконками слева от Миникарты. По этим иконкам можно щёлкать левой и правой кнопкой мыши, эффект будет аналогичен щелчкам по иконкам в Дереве Ответвлений.
+● +Щелчок правой кнопкой мыши – мгновенный скроллинг видимой области Piano Roll к указанному месту в мувике. Далее можно перетаскивать видимую область вверх/вниз по мувику, не отпуская правую кнопку.
+● +Щелчок левой кнопкой мыши – навигация Курсором Проигрывателя. Далее можно перетаскивать Курсор Проигрывателя, не отпуская левую кнопку.
+ +Виртуальный Джойстик
+Альтернативный способ ввода инпута. Очень похож на изменение инпута щелчками по Заголовку Piano Roll, однако более удобен и нагляден.
+● +Виртуальный Джойстик представляет собой всплывающее немодальное окно с изменяемыми размерами. Содержимое окна автоматически масштабируется при изменении размеров окна.
+● +Окно Виртуального Джойстика появляется под курсором мыши при щелчке правой кнопкой в Piano Roll по выделенному Вводу или Вводу под Курсором Проигрывателя. В настройках пользователь может отключить появление Виртуального Джойстика под курсором при правом щелчке. Тогда можно оставить это окно в удобном месте рабочего стола и при необходимости перемещать курсор мыши то к нему, то обратно к Piano Roll.
+● +По цвету рамки окна можно определить, отображает ли Виртуальный Джойстик состояние Ввода в Выделении (синяя рамка) или под Курсором Проигрывателя (голубая рамка).
+● +При уведении курсора мыши за пределы окна Виртуального Джойстика это окно автоматически скрывается (если установлена настройка "Hide on mouse leave") либо остаётся на месте.
+● +При нажатии левой кнопкой мыши по неактивным областям начинается перетаскивание окна.
+● +При нажатии правой кнопкой мыши в любом месте окна окно скрывается.
+● +В окне расположены управляющие элементы – кнопки, соответствующие кнопкам реального джойстика эмулируемой приставки. Расположение кнопок соответствует реальному прототипу. По внешнему виду кнопок можно определить, являются ли соответствующая кнопка в Выделении нажатой, отпущенной или частично нажатой (когда выделено более одного кадра).
+● +Содержимое окна автоматически обновляется при каждом внешнем изменении Ввода.
+● +Виртуальный Джойстик отражает состояние только текущего джойстика (выбранного радиокнопкой в разделе Recorder).
+● +При щелчке по кнопке происходит изменение Ввода текущего джойстика. Нажатая кнопка становится отпущенной, а отпущенная или частично нажатая становится нажатой. Соответственно меняется Ввод во всех выделенных кадрах или на кадре Курсора Проигрывателя.
+● +В дополнение к кнопкам Ввода в окне Виртуального Джойстика можно разместить несколько кнопок-слотов для хранения макросов. Щелчок по кнопке Макроса будет аналогичен нескольким щелчкам по разным кнопкам Виртуального Джойстика. Это позволит ещё быстрее менять Ввод в Выделении, например, вместо трёх щелчков по кнопкам Вверх, Вправо и B можно будет сделать один щелчок по Макросу1.
+● +Если перед щелчком по кнопке Виртуального Джойстика или кнопке макроса зажать клавишу Alt, будет установлен Ввод по шаблону.
+● +После реализации Виртуального Джойстика можно изменить принцип действия щелчков по Заголовку Piano Roll. Теперь вместо изменения инпута щелчки по Заголовку будут выделять соответствующие столбцы Piano Roll.
+ +Усовершенствование Выделения
+Архитектура TAS Editor 1.0 не рассчитана на выделение столбцов Piano Roll, однако в некоторых ситуациях это может быть необходимо при ТАСинге. Например, для очистки Ввода первого джойстика без очистки Ввода второго джойстика. Либо для перемещения Ввода одной/двух кнопок без смещения остальных внопок.
+Кроме того, необходимо усовершенствовать процесс рисования Выделения, чтобы пользователь мог видеть цвет строк Piano Roll под полупрозрачным Выделением.
+● +Выделение столбцов производится аналогично выделению строк – при щелчке левой кнопкой мыши по Заголовку Piano Roll соответствующий столбец становится выделенным, а все остальные столбцы перестают выть выделенными. Если перед щелчком зажать клавишу Ctrl, выделение остальных столбцов не изменится. Если зажать Shift, будет выделен регион столбцов от места предыдущего щелчка. Если зажать Alt, выделится регион по шаблону. После щелчка можно не отпускать левую кнопку и растягивать Выделение по горизонтали.
+● +Выделять можно только столбцы Ввода. Маркеры же зависят от настройки "Bind markers to Input".
+● +Выделенные столбцы отмечаются в Заголовке синим фоном в соответствующих ячейках.
+● +Отсутствие выделенных столбцов равносильно состоянию "выделены все столбцы".
+● +При рисовании строк Выделения ячейки Ввода из невыделенных столбцов рисуются с альфой ~0.4, в то время как ячейки из выделенных столбцов имеют альфу ~0.7.
+● +В колонке с номерами кадров выделенные строки имеют альфу ~0.4, когда Маркеры отвязаны, и ~0.7, когда Маркеры привязаны.
+● +В разделе Splicer отображается не только количество выделенных строк (rows), но и количество выделенных столбцов (columns).
+● +При копировании в Буфер Обмена попадает только Ввод из выделенных столбцов, причём он попадает в виде прямоугольной таблицы, без пропусков между столбцами. Благодаря этому можно изменить выделенные столбцы и вставить Ввод одних кнопок на место других кнопок.
+● +При изменении порядка следования столбцов или скрытии/раскрытии столбцоа Выделение сбрасывается в состояние "отсутствует выделение столбцов".
+● +При Записи Ввод фильтруется в соответствии с выделением столбцов. Невыделенные столбцы не будут изменяться, даже если пользователь записывает другое состояние кнопки этого столбца.
+● +При инициализации объекта SELECTION (то есть при запуске Тасэдитора или создании проекта) Выделение сбрасывается в состояние "отсутствует выделение столбцов".
+● +Выделение столбцов также сохраняется в файле проекта.
+● +На Историю Выделений это нововведение никак не влияет. Изменение выделения столбцов не сохраняется в Истории Выделений, так как навигация по истории изменения выделения столбцов не требуется.
+ +Гибкая настройка колонок
+В TAS Editor 1.0 столбцы Piano Roll имеют фиксированную ширину. Количество и порядок следования столбцов также фиксированы, Для команд приставки (сброс, вставка диска и т.д.) отдельные столбцы не отводятся, так как эти команды используются крайне редко. Однако при портировании Тасэдитора на другие эмуляторы количество столбцов будет возрастать (например, у PSX нужно отображать столбцы для 14 кнопок), необходимо предоставить пользователю возможность настраивать их.
+● +Настройка должна проводиться не напрямую в Piano Roll, а в отдельном окне, вызываемом из Config.
+● +Возможность отображать любые колонки Ввода, в том числе колонки команд.
+● +Возможность прятать любые колонки. Однако от каждого джойстика должна оставаться отображаемой как минимум одна колонка (но если пользователь настроил проект на режим 1P, то колонки второго джойстика в любом случае не будут отображаться).
+● +Возможность изменять порядок следования колонок.
+● +При копировании в Буфер Обмена копируются только абстрактные значения вида "кнопка нажата" / "не нажата". Поэтому если после копирования изменить порядок следования столбцов и вставить Ввод из Буфера Обмена, реальный Ввод мувика изменится (кнопки изменённых столбцов поменяются местами).
+● +Возможность изменять ширину колонок.
+● +Возможность одним щелчком восстановить значения по умолчанию (рекомендуемые автором).
+● +Все настройки сохраняются при выходе.
+ +Теплокарта перезаписей
+Хранит и отображает статистику "изменений после просмотра" (перезаписей). Может быть полезна для выявления сложных мест в мувике.
+● +Хранит массив int, по одному элементу на каждый кадр мувика (в том числе за пределами инпута). Значение элемента соответствует количеству усечений Гринзоны до данного кадра.
+● +Сохраняет и загружает свои данные из файла проекта.
+● +В качестве холста следует использовать холст Миникарты. При ТАСинге не имеет смысла постоянно видеть Теплокарту, пользователь может изредка (например, в конце каждого дня) переключать Миникарту в режим отображения Теплокарты и оценивать проделанный труд.
+● +Так как эта фича несёт не столько рабочую, сколько эстетическую функцию, необходимо продумать алгоритм рисования телокарты, чтобы было не только информативно, но и красиво.
+ +Прочие мелочи
+● +Отдельный Журнал Истории для операций Bookmark Set (Alt + Z и Alt + Y), для отката изменений Ввода/Маркеров без отката изменений Закладок.
+● +Возможность работать с мувиками, начинающимися с сэйва.
+● +Возможность работать с несколькими эмулируемыми играми одновременно (для Multi-TAS-проектов).
+● +Усовершенствование Lua API.
+● +Поддержка мультитач-управления.
+ +Поддержка платформ, отличных от NES
+Если Тасэдитор приобретёт популярность среди ТАСеров, необходимо расширить его доступность для всех эмулируемых платформ.
+● +Продумать управляющие элементы для отображения и изменения аналогового Ввода в Piano Roll. Виртуальный Джойстик отчасти решает эту проблемы, однако должна быть возможность быстро и легко рисовать аналоговый Ввод мышкой. Например, растягивать на много кадров однократно установленное значение наклона стика, запоминать значение только что очищенной ячейки и предлагать его при рисовании. В ячейке отображается не один символ, а число от -1.0 до +1.0. При двойном щелчке по клетке можно набрать с клавиатуры точное значение этого числа. С зажатым Ctrl можно растягивать значение ячейки левой кнопкой мыши вправо/влево или вверх/вниз. В столбце отображается значение наклона только по одной координатной оси (таким образом, для аналогового стика требуется две колонки Piano Roll).
+● +В Виртуальном Джойстике должна быть возможность рисовать огибающую для региона кадров, а не только устанавливать одинаковое значение для всех выделенных кадров. Также необходимо переработать формат Шаблонов, чтобы они могли представлять последовательности значений уровня, в том числе с относительными значениями (например, возрастание по параболе, где начальное и конечное значение берётся из начального и конечного кадра выделенного региона).
+● +Скорее всего, потребуется переход на 64-разрядную платформу, так как объёмы Гринзоны значительно возрастут при хранении сэйвов более продвинутых приставок.
+Created with the Personal Edition of HelpNDoc: Free HTML Help documentation generator
+Реализация
+Первоначально TAS Editor базировался на коде экспериментального инструмента TASEdit из FCEUX 2.1.5.
+TASEdit представлял из себя редактор Ввода (в духе TAS Movie Editor), встроенный в эмулятор, чтобы сократить время между редактированием и просмотром участков. Так как при разработке TASEdit не проводилось исследование принципов и закономерностей ТАСинга, у авторов TASEdit не было чёткого видения финального инструмента, и имеющийся код не был расширяемым. Поэтому вскоре после начала разработки TAS Editor его код был полностью переписан, чтобы облегчить дальнейшее расширение функционала.
+Архитектура Тасэдитора спроектирована, исходя из авторских представлений о методическом ТАСинге и о необходимом функционале для облегчения такого ТАСинга.
+Программные модули (классы)
+taseditor.cpp
+Main - главный шлюз между эмулятором и Тасэдитором (Main gate between emulator and Taseditor)
+[единичный экземпляр]
+● +точка запуска Тасэдитора эмулятором
+● +точка выхода из Тасэдитора
+● +Регулярно (раз в кадр) вызывает обновление всех модулей, требующих регулярного обновления
+● +реализует функции раздела File: создание нового проекта, открытие файла, сохранение, компактное сохранение, импорт, экспорт
+● +обрабатывает некоторые хоткеи FCEUX
+taseditor_window.cpp
+Window - пользовательский интерфейс (User Interface)
+[единичный экземпляр]
+● +реализует все операции с окном Тасэдитора: создание, перерисовка, изменение размера, перетаскивание окна, всплывающие подсказки, щелчки
+● +реализует обработчики для всех кнопок и чекбоксов в GUI Тасэдитора, чтобы запретить срабатывание клавиши Пробел, а также обрабатывать щелчок средней кнопкой мыши
+● +обрабатывает системные сообщения и передаёт сигналы от пользователя другим модулям Тасэдитора (а для некоторых простейших команд реализует логику на месте, например, диалог ввода настроек Greenzone capacity и т.п.)
+● +включает/выключает передачу клавиатурного управления эмулятору при получении/потере фокуса окна
+● +по требованию: обновляет текст заголовка окна; обновляет иконку курсора мыши
+● +обновляет состояние галочек при изменении соответствующих настроек
+● +хранит информацию о 10 последних проектах (File->Recent) и обновляет её при загрузках/сохранениях файлов
+● +Хранит ресурсы: текст заголовка окна, имя файла справки, размер, координаты и другие свойства всех элементов GUI
+bookmarks.cpp
+Bookmarks - Менеджер Закладок (Manager of Bookmarks)
+[единичный экземпляр]
+● +хранит 10 Закладок
+● +реализует все операции с Закладками: ининициализация, установка Закладки, прыжок на Закладку, загрузка Ответвления Закладки
+● +сохраняет и загружает данные всех Закладок из файла проекта. При ошибке: сбрасывает список Закладок и Ответвлений
+● +реализует всю логику работы Списка Закладок: создание, перерисовка, наведение мышью, щелчки
+● +Регулярно обновляет состояние анимированных вспышек в Списке Закладок
+● +по требованию: обновляет расцветку строк Списка закладок, поддерживая актуальное состояние каждой ячейки Списка
+● +Хранит ресурсы: идентификатор сохранения, идентификаторы команд по работе с Закладками, текст заголовка панели, градиенты анимированных вспышек, номер слота по умолчанию
+branches.cpp
+Branches - Менеджер Ответвлений (Manager of Branches)
+[единичный экземпляр]
+● +хранит информацию об Ответвлениях (родственных связах Закладок), а также номер текущего Ответвления
+● +дополнительно хранит время последнего изменения проекта (см. файерболл), а также время начала проекта (см. тучка)
+● +кеширует и хранит данные, использованные при рассчётах (кадр первого расхождения нпута для каждой пары Закладок; номер самой дальней Закладки, соответвтвующей хронологии определённой Закладки)
+● +сохраняет и загружает свои данные из файла проекта. При ошибке: передаёт сигнал выше
+● +реализует всю логику работы Дерева Ответвлений: создание, пересчёт связей, анимация, перерисовка, наведение мышью, щелчки
+● +по требованию: реагирует на изменение Закладок или текущего мувика, изменяя структуру Дерева Ответвлений
+● +Регулярно анимирует Дерево Ответвлений и рассчитывает положение Курсора Проигрывателя на этом Дереве
+● +Хранит ресурсы: координаты элементов Дерева Ответвлений, тайминги анимаций
+bookmark.cpp
+Bookmark - данные одной Закладки (Single Bookmark data)
+● +хранит всю информацию одной конкретной Закладки: снимок состояния мувика, копию сэйва одного кадра Гринзоны, скриншот этого кадра, состояние вспышки данной Закладки
+● +сохраняет и загружает свои данные из файла проекта. При ошибке: передаёт сигнал выше
+● +реализует процедуру установки Закладки: создание снимка мувика, установка ключевого кадра снимка на текущее положение Проигрывателя, копирование сэйва из Гринзоны, взятие и компрессия скриншота с экрана, запуск анимации вспышки
+● +запускает соответствующие вспышки при прыжке на Закладку и при загрузке Ответвления
+snapshot.cpp
+Snapshot - Моментальный снимок всех редактируемых данных (Snapshot of all edited data)
+● +хранит всю информацию одного снимка мувика: размер и содержимое инпута (инпут = кнопочные нажатия + команды), снимок состояния Маркеров на момент создания снимка, номер ключевого кадра, начальный и конечный кадр операции, тип операции и текстовое описание снимка (включая время создания)
+● +дополнительно хранит информацию о последовательной Записи/рисовании инпута
+● +опционально может хранить или не хранить карту Горячих Правок
+● +реализует детали создания снимка: копирование инпута, опциональное копирование карты горячих правок, копирование Маркеров, запоминание времени создания
+● +реализует детали полного/частичного восстановления данных из снимка: инпута, карты горячих правок, Маркеров
+● +реализует компрессию и декомпрессию хранимых данных
+● +сохраняет и загружает свои данные из файла проекта, при ошибке загрузки передаёт сигнал выше
+● +реализует поиск первого несовпадения в содержимом двух снимков или в содержимом данного снимка и текущего состояния мувика
+● +предоставляет интерфейс для чтения отдельно взятых данных: чтение инпута отдельного кадра, чтение любой ячейки карты горячих правок
+● +реализует все операции с картами Горячих Правок: копирование, частичное копирование, обновление/угасание, установка новых точек на карте горячих правок, сравнением инпута двух снимков
+markers.cpp
+Markers - Моментальный снимок состояния маркеров (Snapshot of Markers state)
+● +хранит данные о состоянии Маркеров: массив распределения Маркеров по кадрам и массив Заметок
+● +реализует компрессию и декомпрессию хранимых данных
+● +сохраняет и загружает свои данные из файла проекта, при ошибке загрузки передаёт сигнал выше
+● +Хранит ресурсы: максимальная длина Заметки
+popup_display.cpp
+Popup display - Менеджер всплывающих окон (Manager of popup windows)
+[единичный экземпляр]
+● +реализует все операции с всплывающими окнами: инициализацию, перерисовку, центрирование, декомпрессию и конвертирование скриншотов
+● +Регулярно отслеживает изменения Менеджера закладок и запускает/обновляет/закрывает всплывающие окна
+● +по требованию: обновляет содержимое всплывающих окон
+● +Хранит ресурсы: координаты и внешний вид всплывающих окон, тайминги всплывания/исчезания
+history.cpp
+History - История изменений мувика (History of movie modifications)
+[единичный экземпляр]
+● +хранит массив записей в Журнал Истории (снимки мувика, резервные копии Закладок, резервные копии номера текущей Закладки) и указатель на текущий снимок
+● +сохраняет и загружает массив снимков из файла проекта, при ошибке загрузки очищает массив и начинает новую историю со снимка текущего состояния мувика
+● +по требованию: проверяет различия между последним снимком и текущим мувиком, принимает решение о необходимости создания новой точки отката. А в особых случаях может создать точку отката без проверки изменений, полагаясь, что вызывающий модуль сам проверил различия
+● +реализует все операции восстановления состояния мувика: откат (undo), повторение (redo), возврат на произвольный снимок из массива
+● +дополнительно хранит состояние курсора-указки
+● +Регулярно следит за обновлением состояние курсора-указки
+● +Регулярно (во время паузы эмулятора) ищет в Журнале несжатые пункты и сжимает первый попавшийся
+● +реализует всю логику работы Списка истории: создание, перерисовка, щелчки, автоскроллинг
+● +Хранит ресурсы: идентификатор сохранения, идентификаторы и текстовые обозначения всех возможных типов изменения мувика, тайминг указки
+piano_roll.cpp
+Piano Roll - интерфейс в виде перфоленты (Piano Roll interface)
+[единичный экземпляр]
+● +реализует всю логику работы Списка Piano Roll: создание, перерисовка, скроллинг, наведение, щелчки, перетаскивание
+● +регулярно обновляет размер Списка в соответствии с размером инпута мувика
+● +по требованию: скроллирует видимую область Списка к указанному элементу или позиции: к Курсору Проигрывателя, к Курсору Выделения, к курсору-указке, к целевому кадру Проигрывателя, к Маркеру
+● +сохраняет и загружает текущую позицию вертикального скроллинга из файла проекта, при ошибке загрузки скроллирует список в начало
+● +реализует все операции с Заголовком Списка: создание, перерисовка, анимация, наведение мышью, щелчки
+● +регулярно подсвечивает символы Заголовка в соответствии с текущими данными от Рекордера
+● +по требованию: запускает вспышки символов Заголовка
+● +реализует всю логику работы колеса мыши: скроллинг Списка, навигация Курсором Проигрывателя, навигация Курсором Выделения, пересечение пустот колесом
+● +реализует контекстное меню по правому щелчку
+● +Хранит ресурсы: идентификатор сохранения, идентификаторы колонок списка, ширины колонок списка, таблицы цветов ячеек, градиент карты Горячих Правок, градиент вспышек символов Заголовка, тайминги вспышек, все шрифты Тасэдитора, изображения
+selection.cpp
+Selection - Менеджер выделений (Manager of selections)
+[единичный экземпляр]
+● +содержит определение типа данных "Набор выделенных кадров"
+● +хранит массив наборов выделенных кадров ("история выделений")
+● +сохраняет и загружает массив выделений из файла проекта, при ошибке загрузки очищает массив и начинает новую историю с пустого выделения
+● +постоянно отслеживает изменения выделенных строк в Списке и принимает решение о необходимости создания новой точки отката выделений
+● +реализует все операции восстановления состояния выделения: откат выделения (selection undo), повторение выделения (selection redo)
+● +по требованию: изменяет текущее выделение: очистить выделение, прыгнуть Курсором Выделения на указанный кадр, выделить регион, выделить всё, выделить между Маркерами, выделить содержимое Буфера Обмена
+● +Регулярно проверяет выход текущего выделения за рамки Списка и при необходимости корректирует текущее выделение, определяет факт перехода выделения на другой Маркер и обновляет Заметку в нижнем текстовом поле
+● +реализует логику работы нижних кнопок << и >> (прыжки Курсора Выделения по Маркерам)
+● +здесь же размещается код нижнего текстового поля для редактирования Заметок
+● +Хранит ресурсы: идентификатор сохранения, префикс подписи к нижнему полю
+editor.cpp
+Editor - Инструмент для редактирования (Tool for editing)
+[единичный экземпляр]
+● +реализует операции изменения инпута: установка/снятие инпута на заданном участке, установка по шаблону, установка в Выделении, установка по шаблону в Выделении
+● +реализует операции изменения Маркеров: установка/снятие в Выделении, установка по шаблону в Выделении, установка всех в Выделении, снятие всех в Выделении
+● +Хранит данные Шаблонов и код их загрузки/генерации
+● +Хранит ресурсы: имя файла шаблонов, идентификатор нажатия кнопки в шаблонах
+splicer.cpp
+Splicer - Инструмент для монтажа (Tool for montage)
+[единичный экземпляр]
+● +реализует все операции массового редактирования инпута: копипаст, клонирование, очистка региона, вставка и удаление кадров, обрезка
+● +хранит данные о выделении, использованном при последнем копировании в Буфер Обмена
+● +Регулярно проверяет состояние текущего выделения и выводит информацию о нём на панель, также выводит информацию о данных в Буфере Обмена
+● +при запуске Тасэдитора проверяет содержимое Буфера Обмена
+● +Хранит ресурсы: символьные коды кнопок инпута, текст для информационной панели Splicer
+taseditor_config.cpp
+Config - текущая конфигурация (Current settings)
+[единичный экземпляр]
+● +хранит состояние всех настроек Тасэдитора
+● +все модули Тасэдитора могут обращаться к этому классу для получения или изменения текущих настроек
+● +при запуске FCEUX эмулятор записывает данные из файла fceux.cfg в этот класс, при выходе считывает данные из этого класса в файл fceux.cfg
+● +Хранит ресурсы: значения настроек по умолчанию, предельные значения настроек
+playback.cpp
+Playback - проигрыватель состояний эмулятора (Player of emulation states)
+[единичный экземпляр]
+● +реализует функции проигрывателя мувика: показ любого кадра (прыжок), запуск/отмена добегания к указанному кадру, пауза, перемотка
+● +Регулярно следит за изменениями текущего кадра эмуляции (и управляет эмулятором), вызывает перерисовку соответствующих ячеек Списка, останавливает добегание при достижении цели, анимирует перерисовку кадра цели, обеспечивает следование Списка за курсором, определяет факт перехода курсора на другой маркер и обновляет текст в верхнем поле
+● +реализует логику работы верхних кнопок << и >> (прыжки курсора по маркерам)
+● +реализует логику работы кнопок < и > (покадровое перемещение курсора)
+● +реализует логику работы кнопки || (пауза) и средней кнопки мыши, а также реагирует на внешние изменения паузы эмуляции
+● +реализует все операции с прогрессбаром: сброс, установка значений, щелчки (отмена добегания)
+● +здесь же размещается код верхнего поля для редактирования Заметок
+● +Хранит ресурсы: префикс подписи к верхнему полю, тайминги анимации кадра цели, длительность задержки перед повторным срабатыванием зажатых кнопок GUI, масштаб прогрессбара
+greenzone.cpp
+Greenzone - зона доступа (Access zone)
+[единичный экземпляр]
+● +хранит массив сэйвов, используемых для ускорения перехода Проигрывателя на любой указанный кадр
+● +также хранит журнал проявлений лага в кадрах
+● +сохраняет и загружает массив сэйвов и историю лага из файла проекта, при ошибке загрузки гринзона усекается до последнего успешно загруженного сэйва
+● +Регулярно проверяет наличие сэйва для текущего кадра в своём массиве, при отсутствии создаёт его, а также записывает информацию о проявлении лага в предыдущем кадре
+● +реализует авто-подгонку Ввода по лагу
+● +Регулярно производит постепенную очистку массива сэйвов для экономии памяти, удаляя самые старые сэйвы
+● +по требованию: (при изменении инпута мувика) усекает размеры гринзоны, удаляя сэйвы, ставшие неактуальными вследствие изменения инпута. После усечения может также переместить Курсор Проигрывателя (который обязан всегда находиться внутри Гринзоны), а также запустить добегание к цели
+● +Хранит ресурсы: идентификатор сохранения, настройки постепенной очистки, тайминг очистки
+recorder.cpp
+Recorder - инструмент для записи инпута (Tool for input recording)
+[единичный экземпляр]
+● +в момент записи кнопочных нажатий в мувик (в самом конце кадра) по сигналу эмулятора перехватывает запись и накладывает свои фильтры мультитрекинга, а затем отражает изменения инпута в Истории и Гринзоне
+● +Регулярно отслеживает нажатые кнопки виртуальных джойстиков и предоставляет данные для подсветки символов Заголовка Списка. Также реагирует на использование хоткея Switch Read Only и обновляет элементы интерфейса на панели Recorder и заголовок панели Закладок
+● +реализует функцию редактирования инпута в режиме Read Only (ColumnSet кнопками виртуального джойстика)
+● +Хранит ресурсы: идентификаторы и текстовые обозначения режимов мультитрекинга, суффиксы для заголовка окна TAS Editor
+markers_manager.cpp
+Markers_manager - Менеджер Маркеров (Manager of Markers)
+[единичный экземпляр]
+● +хранит один снимок состояния Маркеров, отвечающий за текущее (актуальное) состояние Маркеров в проекте
+● +сохраняет и загружает свои данные из файла проекта, при ошибке загрузки очищает данные
+● +Регулярно следит, чтобы размер массива Маркеров был не меньше количества кадров в мувике
+● +реализует все операции с Маркерами: установка Маркера на кадр, удаление Маркера, вставка и удаление кадров между Маркерами, усечение массива Маркеров, изменение Заметок, поиск кадра по номеру Маркера, интерфейс доступа к данным внутри снимка состояния Маркеров
+● +реализует копирование данных между снимками состояния Маркеров (в том числе частичное копирование) и поиск первого несовпадения в содержимом двух снимков состояния Маркеров
+● +здесь же размещается код поиска "похожих" Заметок
+● +здесь же размещается код редактирования Заметок к Маркерам
+● +здесь же размещается код диалога Find Note
+● +Хранит ресурсы: идентификатор сохранения, настройки поиска похожих Заметок
+taseditor_lua.cpp
+Lua - Менеджер возможностей Луа (Manager of Lua features)
+[единичный экземпляр]
+● +реализует логику всех функций Lua-библиотеки taseditor
+● +содержит список отложенных изменений инпута
+● +по требованию (от FCEUX Lua engine): обновляет кнопку "Run function"
+● +Хранит ресурсы: идентификаторы джойпадов для изменений инпута, максимальная длина имени для функции applychanges(), текст для кнопки "Run function" по умолчанию
+taseditor_project.cpp
+Project - заголовок рабочего проекта (Header of working project)
+[единичный экземпляр]
+● +хранит информацию о файловом имени проекта и о наличии несохранённых изменений
+● +реализует сохранение и загрузку проектов из файловой системы
+● +реализует функцию автоматического сохранения проекта
+● +Хранит ресурсы: масштаб настройки автосохранения, имя проекта по умолчанию
+Модификация эмулятора
+Тасэдитор требует внесения следующих модификаций в код самого эмулятора.
+В модули Main/Window:
+● +вызывать центральную функцию Тасэдитора после эмуляции каждого кадра, а также, когда эмулятор на паузе. Частота вызова должна быть не менее 20 раз в секунду (это требуется для плавности анимаций)
+● +передавать системные сообщения окну Тасэдитора. Также передавать Тасэдитору сообщения таблицы клавиатурных акселераторов
+● +если эмулятор не использует колесо мыши, он должен пересылать WM_MOUSEWHEEL Тасэдитору, а не игнорировать это сообщение. То же самое с обработкой средней кнопки
+● +при выходе из эмулятора, если запущен Тасэдитор, необходимо вызывать функцию AskSave(), чтобы Тасэдитор проверил наличие несохранённых изменений и позволил пользователю сохранить их. Если функция AskSave() возвращает false, отменять выход из эмулятора (это означает, что пользователь выбрал Отмену)
+В модуль, ответственный за Movie:
+● +предоставлять полный доступ к данным текущего мувика (создание/чтение/запись/любая модификация). Мувик должен быть промежуточным слоем между пользовательским вводом (генерируемым с помощью виртуальных джойстиков) и эмулируемой игрой. Игра ни на каком этапе эмуляции не должна брать инпут напрямую из виртуальных джойстиков. Альтернатива (как реализовано в FCEUX): при любом изменении Ввода мувика на текущем кадре эмулятор должен изменять состояние виртуальных джойстиков, используя данные из мувика. В любом случае, Тасэдитор взаимодействует с игрой, модифицируя данные мувика, и ничего не знает про виртуальные джойстики. В Piano Roll отображаются данные из текущего мувика (хотя у Тасэдитора есть и своё внутреннее представление инпута - класс "Snapshot"), и при редактировании Ввода изменяются данные текущего мувика
+● +в режиме Записи в начале каждого кадра (сразу после чтения данных из виртуальных джойстиков в мувик) отправлять сигнал Рекордеру; быть готовым, что Рекордер изменит данные этого кадра в мувике
+В модуль, ответственный за Input:
+● +предоставлять интерфейс для чтения нажатых в данный момент кнопок виртуального джойстика
+● +когда запущен Тасэдитор, сброс/выключение и другие команды эмулируемой платформы не должны срабатывать сразу по команде пользователя. Они должны лишь подавать сигнал Рекордеру (в начале кадра - вместе с новым инпутом), и он сам применит их после записи соответствующих данных в мувик. А когда режим Записи отключен, у пользователя вообще не должно быть возможности вызвать команды эмулируемой платформы
+В модуль, ответственный за Output:
+● +предоставлять доступ к текущему значению флага лага (в конце каждого кадра)
+● +иметь функцию записи скриншота в память (в том числе с записью HUD)
+В модуль, ответственный за SaveStates:
+● +сэйвы должны восстанавливать состояние игры в точности
+● +сохранение и загрузка сэйва не должны занимать много процессорного времени, так как Гринзона автоматически создаёт сэйв в конце каждого кадра, и это не должно быть заметным для пользователя
+● +объём сэйва (в сжатом состоянии) не должен занимать слишком много места, так как для комфортной работы в Тасэдиторе требуется хранить Гринзону как минимум для 1000 ближайших кадров
+● +в отличие от традиционных сэйвов, в сэйвах Гринзоны не должно быть мувика (это лишняя трата места)
+В модуль, ответственный за Config:
+● +при запуске эмулятор должен загружать данные taseditor_config из файла общих настроек эмулятора, если же файл не найден, не трогать Taseditor_config (тогда в нём останутся настроки по умолчанию)
+● +при выходе эмулятор должен сохранять данные taseditor_config в файл общих настроек
+В модуль, ответственный за Lua engine:
+● +поддерживать библиотеку taseditor. Логика функций реализуется самим Тасэдитором, а от эмулятора требуется брать входные данные из стека и передавать их соответствующей функции Тасэдитора, а затем принимать выходные данные и помещать их в стек Луа
+● +поддерживать регистрацию не более одной Manual-функции и как минимум одной Автофункции
+● +подавать сигнал Тасэдитору об изменении статуса Manual-функции (регистрация/удаление), чтобы тот изменял состояние кнопки "Run function"
+В модуль, ответственный за Replay:
+● +эмулятор должен уметь проигрывать проекты Тасэдитора как обычные мувики, игнорируя дополнительные данные в конце файла
+● +так как размеры проектов Тасэдитора могут быть огромными, при открытии файла не нужно загружать их в память полностью
+● +определять тип проигрываемого мувика (обычный мувик или мувик с данными Тасэдитора в конце). Если это проект Тасэдитора, то при попытке редактирования его содержимого (при загрузке сэйва в режиме Read+Write) эмулятор должен отказываться от редактирования и предлагать запуск Тасэдитора, а в случае запуска сразу передавать Тасэдитору ссылку на проигрываемый файл
+Остальное:
+● +эмулятор обязан быть стабильным и детерминированным. Основой работы Проигрывателя Тасэдитора является строгая детерминированность игрового процесса. Если при загрузках сэйвов состояние игры будет хоть немного отличаться от состояния в момент сохранения, это повлечёт много проблем, в частности, навигация Курсором Проигрывателя будет неадекватной
+● +необходимо учесть все пункты Защиты от ошибок, относящиеся к модификации эмулятора. В частности при запуске Тасэдитор должен иметь возможность временно отключать ряд настроек эмулятора и восстанавливать их значение при выходе. Эмулятор должен обеспечить невозможность редактирования пользователем этих настроек во время работы Тасэдитора
+● +желательна высокая производительность эмуляции, позволяющая ускорять эмуляцию (функция "турбо") во много раз. Неплохо также иметь возможность автоматически отключать звук при турбо-эмуляции.
+Created with the Personal Edition of HelpNDoc: Single source CHM, PDF, DOC and HTML Help creation
+Введение
+ТАСинг – это процесс создания экстраординарного прохождения игры. Для настоящего ТАСера недостаточно просто пройти игру до конца, требуется сделать нечто настолько необычное, что это оправдает использование инструментов.
+Для этого и мыслить требуется нестандартно. Во время нормальной игры практически весь ход наших мыслей определяется игровыми правилами, за несоблюдение которых игра штрафует геймовером и другими средствами. Несложными психологическими приёмами игра направляет фантазию игрока в нужное русло, чтобы дать ему правдоподобную атмосферу целостного мира и удержать его в запланированной разработчиками зоне комфорта.
+Поэтому для успешного создания неординарного прохождения ТАСеру необходимо не только в совершенстве владеть инструментами эмулятора, но и уметь мысленно абстрагироваться от правил игры, при этом физически оставаясь в рамках этих правил (ведь ТАСинг – это не читерство, нельзя воздействовать на игру иначе как кнопками джойстика).
+Раньше ТАСинг, как и обычные спидраны, мало чем отличался от нормального процесса прохождения видеоигры. ТАСер просто запускал эмулятор, включал режим записи кнопок и проходил игру, часто сохраняясь и загружаясь, а в наиболее насыщенные моменты замедляя игровой процесс, чтобы компенсировать медленную реакцию человеческого организма.
+Возможность исправлять свои ошибки раскрепощает фантазию человека и побуждает его экспериментировать. Иллюзии конкретной игры уже менее ограничивают спектр мыслей ТАСера. Но на ход мыслей всё ещё оказывают влияние стереотипы реального физического мира. Например, если опасный объект убивает персонажа, то логично предположить, что он убивает всегда. Хотя на самом деле может оказаться, он убивает только в чётные кадры или только при обнулении дробной части координат. Но об этом невозможно догадаться, используя одни лишь сэйвы и замедление. Нужно сначала перестать быть игроком, чтобы стать независимым исследователем.
+Большим прорывом в истории развития ТАСинга стал Frame Advance – покадровая эмуляция игр. Теперь при ТАСинге игра постоянно стоит на паузе, предоставляя ТАСеру возможность размеренно анализировать каждый аспект геймплея по отдельности. Раньше (при простом замедлении) игра не переставала быть связным потоком событий, которые игрок вынужден воспринимать как единый коктейль переживаний и эмоций. А теперь при покадровой игре ТАСер может обособить в голове любое отдельно взятое событие текущего кадра. Это значительно меняет принципы восприятия игровой информации. Стереотипы материального мира уже не диктуют ТАСеру, как действовать в мире виртуальном, и человек видит игру более объективно, а значит, может обнаружить несовершенства/лазейки в её правилах.
+Хотя сама игра по-прежнему пытается навязать игроку типовые шаблоны поведения, и новичку справляться с этим сложнее, чем опытному ТАСеру. Именно поэтому опытным ТАСерам гораздо легче обогнать чужой спидран – не из-за ловкого владения инструментами, а из-за "профессиональной деформации", позволяющей легко замечать уязвимости в играх.
+С тех пор было изобретено ещё много инструментов ТАСинга, однако сам способ взаимодействия ТАСера с игрой оставался без изменений. ТАСер редактирует Ввод в той же последовательности, в которой течёт время в игре. Эта линейность процесса формирует определённые ограничения в мышлении ТАСера. Когда вы привыкаете после каждого нажатия кнопки получать от игры визуальное подтверждение срабатывания этой кнопки, вы ассоциируете себя с игровым персонажем. Из-за этого вам гораздо труднее взглянуть на происходящее "со стороны". А ведь от ТАСера требуется максимально объективный взгляд на игру.
+Разработка инструментального комплекса под названием "TAS Editor" преследует две основные цели:
+1) +понизить порог вхождения в ТАСинг для новичков
+2) +повысить объективность оценки игрового процесса
+Первая цель достигается с помощью детальной визуализации всех аспектов ТАСинга.
+Вторая цель достигается с помощью перехода от линейного переписывания отрезков мувика к нелинейному редактированию Ввода. Более высокий уровень абстрагирования от правил проходимой игры достигается за счёт появления у ТАСера новых возможностей:
+В дополнение к этому в TAS Editor 1.0 реализован новый уровень большинство старых инструментов ТАСинга:
+● +журнал лага – эволюция Счётчика лага
+● +журнал нажатых кнопок – эволюция Индикатора Ввода
+● +пошаговый откат – в дополнение к загрузкам старого состояния мувика
+● +встроенный редактор – вместо хекс-редактора и Блокнота
+● +номер и название текущего логического блока – в дополнение к номеру текущего кадра
+● +счётчик Выделения (линейка) – в дополнение к счётчику кадров
+● +шаблоны – вместо настроек Autofire
+● +Superimpose (наложение) – вместо настроек Auto-hold
+Запуская Тасэдитор, приготовьтесь к управлению игрой с высоты птичьего полёта. Если вы уже имеете опыт ТАСинга традиционным способом, некоторые аспекты обучения покажутся вам проще, а некоторые сложнее, чем для новичка. Старые привычки могут помешать взглянуть на ТАСинг под другим углом зрения. Однако постарайтесь прочитать весь Курс до конца, вы наверняка узнаете много нового о ТАСинге в целом.
+Одной из наиболее непривычных особенностей ТАСинга в Тасэдиторе является упор на мышиное управление. Мышка даёт пользователю высокую скорость редактирования Ввода и удобство перемотки Проигрывателя. Хотя большинство функций Тасэдитора имеют свои аналоги на клавиатуре, без мыши комфортная и эффективная работа невозможна.
+Традиционный метод ТАСинга не так уж далеко ушёл от обычного прохождения игры с геймпадом или клавиатурой в руках. Геймпад является эффективным средством для создания кнопочного Ввода. Однако основную часть времени ТАСер проводит за различными манипуляциями с однажды совершённым Вводом. И здесь уже удобнее использовать не геймпад, а клавиатуру или мышку. Например, нажатиями одной клавиши вы сможете передвинуть часть Ввода, чтобы она воспринималась игрой на кадр позже или раньше. А когда требуется изменить высоту прыжка (то есть длительность зажатия кнопки A), проще сделать это одним щелчком, чем переключаться в режим Записи и набирать весь диапазон кадров заново.
+Тем не менее, при желании можно работать в Тасэдиторе точно так же, как делали мувики раньше. Тасэдитор поддерживает все существенные аспекты традиционного метода ТАСинга. Если использовать окно Тасэдитора только в качестве информационной панели где-нибудь у края экрана, вы можете даже не заметить никаких изменений в своей работе. Это хорошая причина для плавного перехода от устаревшего метода ТАСинга к новому. Поначалу вам могут приглянуться второстепенные фичи Тасэдитора, такие как визуализация лага и Дерево ответвлений. Позже может потребоваться небольшой копипаст Ввода, при котором Тасэдитор послужит быстрой заменой внешнему редактору. И через некоторое время вы обнаружите, что непосредственное редактирование Ввода работает быстрее перезаписи.
+Преимущество нового метода ТАСинга перед традиционным очевиднее всего проявляется при создании ТАСов с управлением двумя и более игроками одновременно. В своё время для традиционного ТАСинга были придуманы различные костыли вроде автозажатия (Auto-hold), назначения нескольких кнопок на одну клавишу, создания макросов и скриптов для мультитрекинга. С Тасэдитором всё это становится неактуальным, так как ТАСер больше не вынужден вживаться в роль игрока, который ассоциирует себя с управляемым персонажем. Теперь вы не играете, а размышляете над разложенной по полочкам игрушкой и создаёте сценарий действий в виде Ввода. Так что нет большой разницы, находится ли под вашим управлением один, два или множество персонажей.
+Тасэдитор также задуман как средство борьбы с рутиной. В ТАСинге всегда было много нудных повторяющихся действий. Конечно, программа не избавляет от необходимости проверять все возможные варианты развития игровой ситуации, но она автоматизирует ряд вещей и даёт прирост эффективности в мелочах, позволяя ТАСеру сохранять терпение дольше, чем при полностью ручном ТАСинге.
+Интересные факты:
+● +Во время создания Тасэдитора на продумывание деталей и способов усовершенствования рабочего процесса ушло больше времени, чем на написание кода.
+● +Большинство действий в Тасэдиторе можно совершить несколькими способами.
+● +Любую совершённую операцию можно откатить или повторить.
+● +Можно полностью игнорировать любую часть функционала Тасэдитора, используя только приглянувшиеся фичи.
+Особое внимание было уделено пользовательскому интерфейсу. Когда наберётесь опыта, сможете совершать многие действия машинально, не отвлекаясь от анализа игровой ситуации.
+Если у вас появится какая-нибудь идея по уменьшению рутинности ТАСинга – пишите на форум TASVideos. Многие идеи, воплощённые в Тасэдиторе, когда-то были озвучены на этом форуме в качестве "инструментов мечты".
+Помимо нового подхода к ТАСингу Тасэдитор также предлагает средства для организации рабочего процесса. Из-за бессистемного подхода многие новички тратят большую часть времени неэффективно, распыляют силы, быстро устают и в итоге получают далёкий от идеала ТАС. Со временем они вырабатывают некий набор приёмов и привычек, становятся опытными ТАСерами. Но приёмы традиционного метода довольно плохо поддаются словесному объяснению (до сих пор они не были формализованы), поэтому каждому новому ТАСеру приходится учиться на собственных ошибках. В этом Курсе мы попытаемся сформировать чёткое представление о методичном ТАСинге, как традиционном, так и новом.
+Рабочий процесс в Тасэдиторе во многом похож на программирование с использованием интерпретируемого языка. Вы редактируете код и одновременно видите результат исполнения кода на экране. ТАСер может мгновенно увидеть результат своих промежуточных действий на экране, а может увлечься конструированием одного участка "кода" и просмотреть результат лишь после завершения конструкции.
+У программистов есть ценная традиция – повышение читабельности кода с помощью комментариев. Это позволяет держать в голове более чёткую картину проекта и обходиться без постоянной перепроверки результатов, потому что в большинстве случаев результат весьма предсказуем, когда известен контекст. Более того, высокая читабельность кода позволяет при возвращении к отложенному проекту быстро освежить все необходимые воспоминания. Конечно, если программист добросовестно документировал свой код во время его написания.
+Теперь и ТАСер может документировать свой проект прямо в процессе создания – писать комментарии, присваивать структурам (шаблонам и блокам Ввода) понятные имена, тестировать различные версии кода в отдельных ветках репозитория (Дерева ответвлений), продуктивно работать в соавторстве с другим ТАСером. При этом от пользователя не требуется соблюдать какие-либо конвенции. Вы сами определяете правила оформления своего проекта. Например, если вы не поленились в первом уровне дать название использованному трюку, в следующих уровнях вы сможете продублировать нужную последовательность кнопок всего несколькими нажатиями клавиш, если поленились – придётся отыскать место выполнения трюка вручную. В простеньких ТАСах можно обойтись без комментариев и долгосрочных планов, однако в сложных проектах этот функционал Тасэдитора может весьма пригодиться.
+Сайт TASVideos.org поддерживает загрузку проектов Тасэдитора (fm3-файлов) в сабмишенах, так что вы можете делиться не только готовым мувиком, но и своими наработками, поощряя атмосферу открытости и взаимопомощи. Если не хотите делиться, можете экспортировать данные в формат fm2 и опубликовать только его.
+FM3-файлы проигрываются эмулятором FCEUX начиная с версии 2.1.6 точно так же, как FM2-файлы. В более ранних версиях FCEUX fm3-файлы также можно проиграть, предварительно поменяв расширение файла на fm2.
+В следующей главе: обзор интерфейса и обучение основам работы с программой.
+Created with the Personal Edition of HelpNDoc: Full featured Documentation generator
+Lua-функции
+TAS Editor 1.0 предоставляет библиотеку из 24 функций, доступных для использования в Lua-скриптах, запускаемых в эмуляторе FCEUX. С помощью Lua-скриптов вы можете автоматизировать некоторые аспекты работы в Тасэдиторе и даже создать свои инструменты для обработки мувика.
+В папке FCEUX есть папка /luaScripts, в которой находится подпапка /taseditor. Там можно найти несколько скриптов с примерами использования функций этой библиотеки.
+Если вы не знаете, как создавать и запускать Lua-скрипты в эмуляторах, прочитайте раздел Продвинутые возможности, а также соответствующий раздел в документации FCEUX.
+Полный список функций:
+taseditor.registerauto(function func)
+taseditor.registermanual(function func, [string name])
+bool taseditor.markedframe(int frame)
+int taseditor.getmarker(int frame)
+int taseditor.setmarker(int frame)
+taseditor.clearmarker(int frame)
+string taseditor.getnote(int index)
+taseditor.setnote(int index, string newtext)
+int taseditor.getcurrentbranch()
+string taseditor.getrecordermode()
+int taseditor.getsuperimpose()
+int taseditor.getlostplayback()
+int taseditor.getplaybacktarget()
+taseditor.setplayback(int frame)
+ +table taseditor.getselection()
+taseditor.setselection(table new_set)
+int taseditor.getinput(int frame, int joypad)
+taseditor.submitinputchange(int frame, int joypad, int input)
+taseditor.submitinsertframes(int frame, int number)
+taseditor.submitdeleteframes(int frame, int number)
+int taseditor.applyinputchanges([string name])
+ + +taseditor.registerauto(function func)
+Регистрирует функцию ("Auto Function", Автофункция), которая будет периодически вызываться эмулятором. Можно зарегистрировать и исполнять Автофункцию, даже когда Тасэдитор не запущен.
+Когда FCEUX эмулирует игру, Автофункция запускается по окончании каждого кадра (то есть 60 раз в секунду в NTSC-играх и 50 раз в PAL).
+Когда FCEUX стоит на паузе, Автофункция запускается 20 раз в секунду.
+Пользователь может включать и отключать вызовы Автофункции с помощью галочки "Auto function" в интерфейсе Тасэдитора.
+Как и в случае с остальными регистрируемыми Луа-функциями в FCEUX, одновременно может быть зарегистрирована только одна Автофункция. Если вы зарегистрируете две Автофункции, вторая заменит первую, причём второй вызов taseditor.registerauto() возвратит ссылку на код старой Автофункции. Вы можете удалить зарегистрированную Автофункцию, вызвав taseditor.registerauto(nil).
+Если скрипт заканчивает свою работу, а зарегистрированные функции остались, FCEUX не удаляет скрипт из памяти, чтобы была возможность вызывать эти функции. Скрипт завершается, если пользователь останавливает его вручную, или же если все зарегистрированные функции оказываются удалены.
+ +taseditor.registermanual(function func, [string name])
+Регистрирует функцию ("Manual Function", Ручная функция), которая может быть вызвана пользователем Тасэдитора вручную. Можно зарегистрировать Ручную функцию даже когда Тасэдитор не запущен.
+Ручная функция не зависит от состояния паузы эмуляции. Она будет вызвана в конце кадра, в течение которого пользователь нажал кнопку Run function в интерфейсе Тасэдитора.
+Вы можете указать название, которое будет отображаться на кнопке вместо текста "Run function".
+Ручную функцию невозможно вызвать чаще, чем частота обновления окна Тасэдитора (60/50 FPS или 20FPS во время паузы).
+Выполнение Ручной функции расположено в коде FCEUX сразу после выполнения Автофункции.
+С помощью регистрации Луа-функций вы можете создавать новые инструменты для Тасэдитора. Например, можно написать скрипт, который инвертирует выделенный Ввод, так что пользователь сможет в любой момент выделить регион мувика и нажать кнопку Run function для инвертирования Ввода в этом регионе.
+Как и в случае с остальными регистрируемыми Луа-функциями в FCEUX, одновременно может быть зарегистрирована только одна Ручная функция. Если вы зарегистрируете две Ручные функции, вторая заменит первую, причём второй вызов taseditor.registermanual() возвратит ссылку на старую Ручную функцию. Вы можете удалить зарегистрированную Ручную функцию, вызвав taseditor.registermanual(nil).
+Если скрипт заканчивает свою работу, а зарегистрированные функции остались, FCEUX не удаляет скрипт из памяти, чтобы была возможность вызывать эти функции. Скрипт завершается, если пользователь останавливает его вручную, или же если все зарегистрированные функции оказываются удалены.
+bool taseditor.engaged()
+Возвращает true, если Тасэдитор в данный момент запущен, иначе возвращает false.
+Кроме того, когда Тасэдитор запущен, вызов функции movie.mode() возвращает строку "taseditor".
+ +bool taseditor.markedframe(int frame)
+Возвращает true, если в текущем мувике на указанном кадре установлен Маркер, иначе возвращает false.
+Если Тасэдитор не запущен, возвращает false.
+ +int taseditor.getmarker(int frame)
+Возвращает порядковый номер Маркера, под которым находится указанный кадр.
+Если Тасэдитор не запущен, возвращает -1.
+ +int taseditor.setmarker(int frame)
+Устанавливает Маркер на указанный кадр. Возвращает порядковый номер установленного Маркера.
+Если на этом кадре уже есть Маркер, никаких изменений не производится, будет возвращён номер существующего Маркера на указанном кадре.
+Можно устанавливать Маркеры даже за пределами Ввода.
+Если Тасэдитор не запущен, возвращает -1.
+ +taseditor.clearmarker(int frame)
+Удаляет Маркер с указанного кадра. Если на этом кадре не было Маркера, никаких изменений не производится.
+Если Тасэдитор не запущен, никаких изменений не производится.
+ +string taseditor.getnote(int index)
+Возвращает строку с текстом Заметки указанного Маркера.
+Если Тасэдитор не запущен, возвращает nil.
+Если указанный Маркер не существует, возвращает текст Заметки нулевого Маркера.
+ +taseditor.setnote(int index, string newtext)
+Изменяет текст Заметки указанного Маркера.
+Если указанный Маркер не существует, никаких изменений не производится.
+Если Тасэдитор не запущен, никаких изменений не производится.
+ +int taseditor.getcurrentbranch()
+Возвращает число от 0 до 9, представляющее собой номер текущего ответвления.
+Если в проекте отсутствуют ответвления, возвращает -1.
+Если Тасэдитор не запущен, возвращает -1.
+ +string taseditor.getrecordermode()
+Возвращает строку, соответствующую текущему режиму Рекордера:
+● +"All"
+● +"1P"
+● +"2P"
+● +"3P"
+● +"4P"
+Если Тасэдитор не запущен, возвращает nil.
+Когда вам требуется узнать состояние Записи (Read-only или Read+Write), воспользуйтесь функцией emu.readonly().
+ +int taseditor.getsuperimpose()
+Возвращает текущее состояние галочки "Superimpose" в интерфейсе Тасэдитора.
+0 – галочка не установлена (пустой чекбокс)
+1 – галочка установлена
+2 – неопределённое состояние (можно трактовать это как "галочка наполовину установлена")
+Если Тасэдитор не запущен, возвращает -1.
+ +int taseditor.getlostplayback()
+Возвращает номер кадра, на котором находился Курсор Проигрывателя до изменения Ввода.
+Если Курсор Проигрывателя не терял позицию при усечении Гринзоны, возвращает -1.
+Если Тасэдитор не запущен, возвращает -1.
+ +int taseditor.getplaybacktarget()
+Если Проигрыватель Тасэдитора в данный момент добегает (seek) к целевому кадру, эта функция возвращает номер целевого кадра.
+Если же Проигрыватель не занят добеганием, возвращает -1.
+Если Тасэдитор не запущен, возвращает -1.
+ +taseditor.setplayback(int frame)
+Посылает Курсор Проигрывателя на указанный кадр.
+Если указанный кадр не находится в Гринзоне, Проигрыватель Тасэдитора начинает добегание к этому кадру.
+Если Тасэдитор не запущен, ничего не производится.
+ +taseditor.stopseeking()
+Прекращает добегание и ставит эмулятор на паузу.
+Если Проигрыватель не занят добеганием, просто ставит эмулятор на паузу.
+Если Тасэдитор не запущен, ничего не производится.
+ +table taseditor.getselection()
+Возвращает таблицу (массив), содержащую номера выделенных в данынй момент кадров. Эти номера отсортированы по возрастанию.
+Если выделенных кадров в данный момент нет, возвращает nil.
+Если Тасэдитор не запущен, возвращает nil.
+ +taseditor.setselection(table new_set)
+Изменяет текущее Выделение на указанный набор кадров. Номера кадров в вашей таблице не обязательно отсортировывать.
+Если нужно очистить Выделение, используйте taseditor.setselection(nil).
+Если Тасэдитор не запущен, ничего не производится.
+ +int taseditor.getinput(int frame, int joypad)
+Возвращает число, представляющее собой Ввод указанного джойстика на указанном кадре.
+Если указан отрицательный номер кадра, возвращает -1.
+Если указан номер кадра за пределами текущего Ввода мувика, возвращает 0, что может трактоваться как отсутствие нажатий на этом кадре.
+Указываемое вами значение джойстика (joypad) должно быть одним из следующих чисел:
+0 – если нужно получить приставочные команды (бит 0 = сброс, бит 1 = включение консоли, бит 2 = вставка диска FDS, бит 3 = смена стороны диска FDS)
+1 – чтобы получить кнопки 1 пада (бит 0 = A, бит 1 = B, бит 2 = Select, бит 3 = Start, бит 4 = Вверх, бит 5 = Вниз, бит 6 = Влево, бит 7 = Вправо)
+2 – чтобы получить кнопки 2 пада
+3 – чтобы получить кнопки 3 пада
+4 – чтобы получить кнопки 4 пада
+Возвратившееся число (если оно не равно -1) следует рассматривать как байт, каждый бит которого отвечает за одну кнопку (например, если младший бит установлен, это означает, что кнопка A нажата). Используйте битовые операции, чтобы получить состояние нужных кнопок.
+Если указанный джойстик не является числом в пределах [0-4], возвращает -1.
+Если Тасэдитор не запущен, возвращает -1.
+ +taseditor.submitinputchange(int frame, int joypad, int input)
+Отправляет запрос Тасэдитору, требуя изменить Ввод указанного джойстика на указанном кадре.
+Сам Ввод мувика будет изменён только после вызова taseditor.applyinputchanges().
+Таким образом вы можете изменить сразу несколько кадров мувика, сделав несколько последовательных вызовов taseditor.submitinputchange(), а затем применив все накопившиеся запросы к мувику одним вызовом taseditor.applyinputchanges().
+В момент применения списка запросов Тасэдитор исполняет их в порядке поступления.
+Если указан отрицательный номер кадра, Тасэдитор проигнорирует этот запрос.
+Если указан номер кадра за пределами Ввода мувика, Тасэдитор расширит границы мувика во время applyinputchanges() до указанного кадра.
+Если указанный джойстик не является числом в пределах [0-4], Тасэдитор проигнорирует этот запрос.
+Указанный Ввод должен быть числом, которое Тасэдитор сможет представить в виде последовательности битов, отражающих состояние соответствующих кнопок указанного джойстика (бит 0 = A, бит 1 = B, бит 2 = Select, бит 3 = Start, бит 4 = Вверх, бит 5 = Вниз, бит 6 = Влево, бит 7 = Вправо).
+Если Тасэдитор не запущен, ничего не производится.
+ +taseditor.submitinsertframes(int frame, int number)
+Отправляет запрос Тасэдитору, требуя вставить указанное количество пустых кадров перед указанным номером кадра мувика.
+Сам Ввод мувика будет изменён только после вызова taseditor.applyinputchanges().
+Вставка пустых кадров сдвигает вниз часть старого Ввода, а также сдвигает вниз часть Маркеров (если установлена галочка "Bind Markers to Input").
+Если указанное количество кадров для вставки меньше или равно нулю, Тасэдитор проигнорирует этот запрос.
+Если указан отрицательный номер кадра, Тасэдитор проигнорирует этот запрос.
+Если указан номер кадра за пределами Ввода мувика, Тасэдитор расширит границы мувика во время applyinputchanges() до указанного кадра.
+Если Тасэдитор не запущен, ничего не производится.
+ +taseditor.submitdeleteframes(int frame, int number)
+Отправляет запрос Тасэдитору, требуя удалить из мувика указанное количество кадров, начиная с указанного кадра.
+Сам Ввод мувика будет изменён только после вызова taseditor.applyinputchanges().
+Удаление кадров сдвигает вверх часть старого Ввода, а также сдвигает вверх часть Маркеров (если установлена галочка "Bind Markers to Input").
+Если указанное количество кадров для удаления меньше или равно нулю, Тасэдитор проигнорирует этот запрос.
+Если указан отрицательный номер кадра, Тасэдитор проигнорирует этот запрос.
+Если указан номер кадра за пределами Ввода мувика, Тасэдитор расширит границы мувика во время applyinputchanges() до указанного кадра.
+Если Тасэдитор не запущен, ничего не производится.
+ +int taseditor.applyinputchanges([string name])
+Моментально применяет список накопившихся запросов к текущему мувику. Если эти запросы действительно внесли какие-то изменения во Ввод мувика, в Журнале Истории появится новый пункт (чтобы пользователь мог откатить эти изменения), как следствие, Гринзона может быть усечена, Курсор Проигрывателя может отступить назад и запустить автоматическое добегание.
+Возвращает номер кадра, на котором были обнаружен первый факт изменения Ввода.
+Если изменений не обнаружено (например, вы запросили Тасэдитор установить нажатия для кнопок, которые и так уже нажаты), возвращает -1.
+Если список запросов был пуст, возвращает -1.
+Вы можете указать имя, которое будет присвоено найденным изменениям Ввода. Это имя отразится в Журнале Истории. Если вы не указываете имя, Тасэдитор использует имя по умолчанию ("Change").
+После применения всех запросов Тасэдитор очищает список запросов.
+Если Тасэдитор не запущен, ничего не производится.
+ +taseditor.clearinputchanges()
+Очищает список накопившихся запросов, позволяя отменить их до вызова applyinputchanges().
+Рекомендуется вызывать эту функцию перед формированием нового списка запросов, чтобы быть уверенным, что в список не попадут какие-нибудь старые запросы.
+Если Тасэдитор не запущен, ничего не производится.
+Created with the Personal Edition of HelpNDoc: Create HTML Help, DOC, PDF and print manuals from 1 single source
+Защита от ошибок
+Здесь приведён список всевозможных мелочей, призванных улучшить взаимодействие пользователя с программой. Все эти детали следует учесть при портировании Тасэдитора на другие платформы.
+● +Когда пользователь выходит из эмулятора, тот сначала подаёт запрос Тасэдитору, чтобы Тасэдитор мог сохранить текущий проект. Если в проекте имеются несохранённые данные, Тасэдитор выводит диалог Yes/No/Cancel. Пользователь может либо сохранить изменения, либо не сохранять их, либо отменить выход из эмулятора.
+● +При проигрывании fm3-проектов вне Тасэдитора (в виде обычных мувиков) пользователь может переключить эмулятор в режим Записи и попытаться осуществить перезапись. В этом случае эмулятор сообщает пользователю, что текущий мувик является проектом Тасэдитора, и предлагает начать его редактирование. В случае отказа эмулятор отключает режим Записи и продолжает проигрывание Ввода из файла проекта. В случае согласия эмулятор подаёт сигнал Тасэдитору, и в конце текущего кадра тот запустится и загрузит текущий проигрываемый проект.
+● +Когда в эмулятор загружен РОМ, запустить Тасэдитор можно в любой момент. Если открыть окно Тасэдитора во время записи или проигрывания мувика, Тасэдитор автоматически создаст безымянный проект, содержащий Ввод из этого мувика. При этом, если мувик начинается с сэйва, Тасэдитор выдаст предупреждение об отсутствии поддержки таких мувиков и создаст чистый мувик.
+● +Пока проекту не присвоено имя, функция автоматического сохранения не работает.
+● +При первом сохранении безымянного проекта Тасэдитор предлагает в качестве имени fm3-файла имя текущего РОМа с расширением, изменённым на fm3.
+● +Так как формат fm3 является надстройкой над форматом fm2, пользователь может открывать fm2-файлы как обычные проекты – через диалог "Open TAS Editor Project", выбрав фильтр "All Files (*.*)". При открытии fm2-файлов Тасэдитор дополнительно информирует об этом с помощью диалога Yes/No. Пользователь может либо загрузить fm2-файл в качестве проекта, либо отменить загрузку.
+● +После открытия fm2-файла или запорченного fm3-файла этот проект считается безымянным, хотя в заголовке окна Тасэдитора отображается имя загруженного файла. При первом сохранении (Ctrl + S) появится диалог SaveAs, где в качестве имени будет предложено имя загруженного fm2/fm3-файла с расширением, изменённым на fm3. Пользователь может либо сохранить проект под этим именем, либо изменить имя. Таким образом Тасэдитор акцентирует внимание пользователя на том, что сохраняемый проект значительно отличается от имеющегося на диске файла под тем же именем.
+● +В fm3-проектах хранится номер версии используемого fm3-формата. Разные версии могут быть полностью или частично не совместимы между собой. Если при загрузке проекта его версия не совпадает с текущей поддерживаемой версией, проект считается запорченным. Тасэдитор выводит диалог Yes/No/Cancel. Пользователь может либо продолжить попытку загрузки всего проекта (не рекомендуется), либо загрузить из проекта только fm2-данные о Вводе (рекомендуется), либо отменить загрузку.
+● +Формат fm2 (а значит, и fm3) поддерживает хранение MD5-чексуммы РОМа, использованного при создании мувика/проекта. При загрузке проектов Тасэдитор сверяет чексумму текущего РОМа с чексуммой из проекта, и если они не совпадают, выводит диалог Yes/No, отображающий оригинальное и текущее имя РОМа. Пользователь может либо продолжить загрузку, либо отменить её. Далее, при сохранении этого проекта Тасэдитор вновь обнаружит несовпадение чексумм и предложит заменить в сохраняемом файле имя РОМа и его MD5-чексумму. Пользователь может либо подтвердить замену, либо сохранить проект со старым именем и чексуммой, либо отменить сохранение.
+● +При загрузке запорченных файлов проектов Тасэдитор в меру сил пытается не допустить зависание эмулятора. При обнаружении ошибки во время загрузки дальнейшая загрузка прекращается, и незагруженные данные заменяются данными по умолчанию. В частности, если ошибка произошла во время загрузки Гринзоны, в проекте останутся только кадры Гринзоны, успешно вытащенные из файла, остальные кадры будут бледными. Сообщения об ошибках, произошедших при загрузке проекта, помещаются в Message Log эмулятора FCEUX.
+● +Во время загрузки проекта Тасэдитор принимает во внимание текущие настройки "Greenzone capacity" и "Undo levels". Например, если при сохранении проекта Greenzone capacity = 5000, а при загрузке Greenzone capacity = 3000, часть кадров во время загрузки будет пропущена. Это необходимо для того, чтобы проекты, сохранённые на более мощном компьютере, легко загружались на слабом компьютере, у которого могло бы не хватить памяти для загрузки проекта в том же виде, в котором он был сохранён.
+● +При запуске Тасэдитор загружает данные о шаблонах из файла taseditor_patterns.txt. Если этот файл невозможно открыть (например, он удалён), Тасэдитор создаёт небольшой набор шаблонов по умолчанию, чтобы меню Patterns никогда не пустовало.
+● +Сохранения, используемые Гринзоной, немного отличаются от обычных сохранений. Они не содержат данные мувика, так как для Гринзоны это лишняя информация. Кроме того, они всегда сжаты. Это необходимо для экономии памяти.
+● +Если в результате операции Delete или Lua Change пользователь удалит весь Ввод из мувика, Тасэдитор в тот же момент создаст один пустой кадр в начале мувика.
+● +Во время выделения региона кадров с помощью растягивания мышкой пользователь может второй рукой нажимать акселераторы и хоткеи. Чтобы не было конфликта, во время DRAG_MODE_SELECTION не срабатывают функции, свзанные с изменением выделения:
+● +ClearSelection()
+● +SelectAll()
+● +SelectBetweenMarkers() – Ctrl + A
+● +selection.undo() – Ctrl + Q
+● +selection.redo() – Ctrl + W
+● +ReselectClipboard() – Ctrl + B
+● +selection.Transpose() – Ctrl + Вверх, Ctrl + Вниз, Ctrl + Home, Ctrl + End
+● +selection.JumpPrevMarker() – Ctrl + Page Up
+● +selection.JumpNextMarker() – Ctrl + Page Down
+● +При перетаскивании Курсора Проигрывателя действует небольшое ограничение, связанное с добеганием. Обычно в Тасэдиторе сразу после щелчка левой кнопкой по столбцу иконок начинается перетаскивание (DRAG_MODE_PLAYBACK), при котором Курсор Проигрывателя перемещается на строку, на которую указывает курсор мыши при зажатой левой кнопке. Однако возможна ситуация, когда пользователь щёлкнул по кадру далеко от головы Гринзоны и не хочет тащить голубой курсор туда вручную. При щелчке запустилось добегание к этому кадру, и началось перетаскивание голубого курсора, но из-за галочки "Follow cursor" Piano Roll прыгнул к текущему положению голубого курсора, и курсор мыши стал указывать уже на другой кадр. Пользователь может не успеть отпустить левую кнопку мыши до момента, когда курсор мыши стал указывать на другой кадр. Чтобы разрешить данную ситуацию, Тасэдитор при перетаскивании считает, что самое первое добегание имеет более высокий приоритет, чем перетаскивание Курсора Проигрывателя. Поэтому во время первого добегания, запущенного при щелчке по столбцу иконок, пользователь не может перетаскивать голубой курсор вверх и вниз. Он может только отменить перетаскивание, отпустив левую кнопку мыши, а затем сделать новый щелчок по столбцу иконок, если требуется. Во время первого добегания курсор мыши заменяется на стрелку с песочными часами. Как только первое добегание окончено, перетаскивание Курсора Проигрывателя будет полноценным.
+● +Так как столбец иконок в Piano Roll довольно узкий, пользователь может случайно промахнуться во время щелчка по этому столбцу. При щелчке по левой границе Piano Roll, а также по пространству слева Piano Roll Тасэдитор считает, что был осуществлён щелчок по колонке иконок. В результате пользователю не нужно точно прицеливаться, когда требуется передвинуть Курсор Проигрывателя или начать его перетаскивание. Благодаря этому возрастает скорость и комфортность работы.
+● +Когда эмулятор стоит на паузе, средняя кнопка мыши работает только при условии, что правая кнопка мыши отпущена. Так как средняя кнопка обычно является колесом, пользователь может случайно надавить её при вращении колеса с зажатой правой кнопкой (перемещение Курсора Проигрывателя). Вращение колеса с зажатыми клавишами-модификаторами используется гораздо реже, поэтому для них защита не требуется.
+● +Щелчок средней кнопкой по окну FCEUX передаётся окну Тасэдитора. Точно так же передаётся сообщение в вращении колеса, когда фокус у окна FCEUX. А щелчок правой кнопкой по окну FCEUX никак не действует. Благодаря этому пользователь может использовать среднюю кнопку (колесо мыши), даже когда курсор мыши находится над окном FCEUX.
+● +Даже если включен режим Записи, во время добегания Тасэдитор не будет менять Ввод. Благодаря этой особенности можно свободно перетаскивать Курсор Проигрывателя без выключения режима Записи, не опасаясь затереть Ввод.
+● +Когда запущен Тасэдитор, следующие команды в меню FCEUX доступны только в режиме Записи и при отсутствии добегания:
+● +NES -> Reset
+● +NES -> Power
+● +NES -> Eject/insert Disk
+● +NES -> Switch Disk Side
+● +Когда запущен Тасэдитор, следующие команды в меню FCEUX не доступны:
+● +File -> Open ROM
+● +File -> Close
+● +File -> Recent
+● +File -> Savestate -> Load State
+● +File -> Savestate -> Save State
+● +File -> Savestate -> Load State From
+● +File -> Savestate -> Save State As
+● +File -> Savestate -> Next save slot
+● +File -> Savestate -> Previous save slot
+● +File -> Savestate -> View save slots
+● +File -> Movie -> Recent
+● +File -> Movie -> Record Movie
+● +File -> Movie -> Play Movie
+● +File -> Movie -> Stop Movie
+● +Config -> Enable -> Auto-savestates (всегда отключено во время работы Тасэдитора)
+● +Config -> Enable -> Backup Savestates (всегда отключено во время работы Тасэдитора)
+● +Config -> Enable -> Compress Savestates (всегда включено во время работы Тасэдитора)
+● +Config -> PAL Emulation (следует настроить это до запуска Тасэдитора)
+● +Config -> PPU -> New PPU / Old PPU (следует настроить это до запуска Тасэдитора)
+● +Tools -> Open TAS Editor
+● +Также необходимо, чтобы пользователь не изменял настройки синхронизации мувика во время редактирования проекта. Когда запущен Тасэдитор, следующие элементы GUI в окне "Input Configuration" заблокированы:
+● +галочка "Attach four-score"
+● +галочка "Replace port 2 Start With Microphone"
+● +ListBox с выбором port0
+● +ListBox с выбором port1
+● +ListBox с выбором port2
+● +Когда запущен Тасэдитор, следующие хоткеи не работают:
+● +Hide Menu Toggle
+● +Fastest Speed
+● +Save State As...
+● +Load State From...
+● +Record Movie To...
+● +Play Movie From...
+● +Stop Movie
+● +Insert Coin / Toggle Dipswitch – эти команды пока не поддерживаются форматом fm2
+● +Load Last Auto-save
+● +View save slots
+● +Open TAS Editor
+● +Open ROM
+● +Close ROM
+● +Undo/Redo Savestate
+● +Toggle Fullscreen
+● +Хоткеи, поведение которых меняется при запущенном Тасэдиторе:
+● +Power
+● +Reset
+● +Eject or Insert FDS Disk
+● +Switch FDS Disk Side
+● +Savestate Slot 0 – Savestate Slot 9
+● +Save State
+● +Save State to Slot 0 – Save State to Slot 9
+● +Load State
+● +Load State from Slot 0 – Load State from Slot 9
+● +Play Movie From Beginning
+● +Reload ROM or TAS Editor Project
+● +Так как клавиши Alt и F10 активно используются при работе в Тасэдиторе, их стандартное действие (открытие меню программы) отключено.
+● +Так как клавиша Пробел по умолчанию используется в качестве хоткея, её стандартное действие (симуляция щелчка по элементу GUI, на котором находится фокус клавиатуры) отключена. Также для каждого элемента GUI в окне Тасэдитора реализована обработка щелчка средней кнопкой мыши, чтобы этот щелчок срабатывал независимо от положения курсора мыши.
+● +Так как контекстное меню при щелчке правой кнопкой по Piano Roll почти никогда не требуется, оно появляется только когда пользователь щёлкает по выделенной строке в столбце номеров кадров (Frame#). В остальных случаях контекстное меню не появляется, зато при щелчке правой кнопкой по Piano Roll начинается удобное перетаскивание содержимого Piano Roll во все стороны.
+● +Так как правая кнопка часто используется для перемещения Курсора Проигрывателя колесом, пользователь может щёлкать ею без оглядки на текущее положение курсора мыши. При этом возможен случайный щелчок по Закладке и, соответственно, перезапись Закладки. Чтобы этого не допустить, Список Закладок и Дерево ответвлений требуют от пользователя нажать и отпустить правую кнопку на одной и той же Закладке. При этом, если между нажатием и отпусканием правой кнопки пользователь совершил вращение колесом, установка Закладки отменяется.
+● +Пользователь может осуществлять прыжки на Закладки одинарным щелчком по желаемой иконке в Дереве ответвлений. При этом он ожидает, что голубой треугольник (Курсор Проигрывателя) после щелчка окажется на этом месте в Дереве ответвлений. Это справедливо для Закладок, ответвления которых находятся в текущей хронологии, но это не так для Закладок, представляющих альтернативные стратегии прохождения. При прыжках на кадры этих Закладок Курсор Проигрывателя будет находиться в другом ответвлении (хотя и на том же самом кадре). Чтобы заранее уведомить пользователя о возможном недопонимании с его стороны, при наведении на иконки таких Закладок курсор мыши превращается в стрелку с вопросительным знаком.
+● +Во время трансформации Дерева ответвлений наведение курсора мыши на его элементы не работает, потому что активная область элементов постоянно перемещается и убегает от курсора мыши. Наведение начинает работать сразу после остановки всех иконок.
+Created with the Personal Edition of HelpNDoc: Create HTML Help, DOC, PDF and print manuals from 1 single source
+Навигация
+Экран FCEUX может отображать лишь события одного кадра. Piano Roll может отображать в окне содержимое нескольких десятков кадров. Но мувик среднестатистического ТАСа содержит десятки тысяч кадров. Поэтому ТАСеру постоянно необходимо перемещаться по мувику вверх и вниз, чтобы отобразить в окне Piano Roll интересующий его участок мувика, либо чтобы отобразить на экране FCEUX события интересующего кадра мувика.
+Эта деятельность называется навигацией по мувику. Во время ТАСинга на неё тратится много времени, и её можно значительно оптимизировать.
+В Тасэдиторе предусмотрено множество способов навигации. В зависимости от конкретной ситуации более удобным будет являться тот или иной способ, поэтому для максимальной эффективности ТАСинга необходимо в совершенстве овладеть всеми. В идеале все навыки навигации должны переместиться в моторную память, тогда вы сможете молниеносно появляться в нужной точке мувика, при этом не переставая обдумывать текущую задачу.
+Все способы навигации по мувику:
+3. +Листание страниц
+4. +Прыжок в начало/конец мувика
+5. +Прыжок к Курсору Проигрывателя
+6. +Прыжок к Курсору Выделения
+7. +Прыжок к Маркеру над Курсором Проигрывателя
+8. +Прыжок к Маркеру над Курсором Выделения
+● +Навигация Курсором Проигрывателя
+ + +3. +Перетаскивание Курсора Проигрывателя
+ + +6. +Прыжок в начало/конец мувика
+● +Навигация Курсором Выделения
+1. +Смещение Выделения стрелками
+2. +Смещение Выделения в начало/конец мувика
+ + +5. +Прыжок на место последнего копирования в Буфер Обмена
+ +1. +Пересечение промежутков во Вводе и Маркерах
+2. +Прыжок на Маркер с искомой Заметкой
+3. +Прыжок на Маркер с похожей Заметкой
+Скроллинг Piano Roll
+1. Перетаскивание скроллбара
+С помощью скроллбара можно скроллировать Список Piano Roll, просматривая содержимое мувика.
+Курсор Проигрывателя и Выделение останутся на своих местах, и при необходимости можно будет либо вернуться к ним, либо наоборот, перенести их в новое место мувика (одинарный щелчок меняет Выделение, двойной щелчок перемещает Курсор Проигрывателя).
+Когда предпочтительнее использовать:
+● +когда нужно попасть в дальнюю точку мувика, рядом с которой нет Закладки или Маркера. Одним махом можно проскроллировать Piano Roll на сотню тысяч кадров вперёд или назад
+● +при ручном поиске нужного участка Ввода, расположение которого не известно и может быть где угодно в мувике
+ +2. Скроллинг колесом
+С помощью колеса можно также скроллировать содержимое Piano Roll, но скорость скроллинга будет ограничена (в отличие от скроллбара), поэтому этот способ больше подходит для внимательного просмотра данных в окрестностях одного участка.
+Курсор мыши при скроллировании может быть где угодно, кроме Журнала Истории.
+Когда предпочтительнее использовать:
+● +при ручном поиске нужного участка Ввода, расположение которого может быть где угодно поблизости
+ +3. Листание страниц
+Нажатие клавиш Page Up и Page Down скроллирует содержимое Piano Roll вверх и вниз на целую страницу (зависит от размера окна Piano Roll).
+Когда предпочтительнее использовать:
+● +при ручном поиске нужного участка Ввода, расположение которого может быть где угодно поблизости
+ +4. Прыжок в начало/конец мувика
+Нажатие клавиш Home и End скроллирует содержимое Piano Roll в начало и конец мувика.
+Когда предпочтительнее использовать:
+● +когда нужно попасть в начало или конец мувика
+ +5. Прыжок к Курсору Проигрывателя
+При щелчке левой кнопкой мыши по верхнему номеру Маркера Piano Roll автоматически скроллируется к Курсору Проигрывателя. Кроме того, вместо щелчка можно быстро дважды нажать клавишу Shift.
+Когда предпочтительнее использовать:
+● +когда нужно осмотреть контекст текущего кадра в мувике
+● +когда нужно вернуться к проигрываемому участку издалека
+ +6. Прыжок к Курсору Выделения
+При щелчке левой кнопкой мыши по нижнему номеру Маркера Piano Roll автоматически скроллируется к началу Выделения. Кроме того, вместо щелчка можно быстро дважды нажать клавишу Ctrl.
+Когда предпочтительнее использовать:
+● +когда нужно вернуться к редактируемому участку
+ +7. Прыжок к Маркеру над Курсором Проигрывателя
+При щелчке по верхнему полю для редактирования Заметок Piano Roll автоматически скроллируется к Маркеру, Заметка которого сейчас будет редактироваться.
+Работает, только если установлена галочка View -> Follow Marker Note context.
+Когда предпочтительнее использовать:
+● +когда нужно увидеть начало просматриваемого участка (при условии, что там стоит Маркер)
+ +8. Прыжок к Маркеру над Курсором Выделения
+При щелчке по нижнему полю для редактирования Заметок Piano Roll автоматически скроллируется к Маркеру, Заметка которого сейчас будет редактироваться.
+Работает, только если установлена галочка View -> Follow Marker Note context.
+Когда предпочтительнее использовать:
+● +когда нужно увидеть начало редактируемого участка (при условии, что там стоит Маркер)
+Навигация Курсором Проигрывателя
+Курсор Проигрывателя привязан к событиям игры. При его перемещении будет изменяться изображение на экране FCEUX. Он не всегда может мгновенно переместиться в указанный кадр, иногда может потребоваться добегание.
+Если в панели Playback установлена галочка "Follow cursor", то Piano Roll автоматически скроллируется вслед за Курсором Проигрывателя.
+ +1. Покадровое перемещение
+Нажатие кнопок < и > в панели Playback, либо нажатие акселераторов Shift + Вверх и Shift + Вниз, либо нажатие хоткеев Frame Rewind и Frame Advance перемещает Курсор Проигрывателя на 1 кадр назад и вперёд.
+Когда предпочтительнее использовать:
+● +когда нужно тщательно просматривать события каждого кадра на маленьком участке
+ +2. Перемотка колесом мыши
+При зажатой правой кнопке мыши колесо мыши вместо скроллинга Piano Roll будет перемещать Курсор Проигрывателя вверх или вниз.
+В этом способе сочетается покадровая точность перемещения и возможность гибко варьировать скорость перемещения, вращая колесо быстрее или медленнее.
+Когда предпочтительнее использовать:
+● +когда нужно просматривать события каждого кадра на участке
+ +3. Перетаскивание Курсора Проигрывателя
+С помощью курсора мыши можно перетаскивать Курсор Проигрывателя вверх и вниз по мувику. Для этого нужно щёлкнуть левой кнопкой по любой клетке в самом левом столбце Piano Roll (колонка с иконками) и, не отпуская левую кнопку, переместить курсор мыши вверх или вниз. Этот способ позволяет не только смотреть события игры на экране FCEUX, но и скроллировать Piano Roll.
+Когда предпочтительнее использовать:
+● +при поиске игровых событий в мувике
+● +при ручном поиске нужного участка Ввода, расположение которого может быть где угодно
+ +4. Прыжки по Маркерам
+Нажатие кнопок << и >> в панели Playback, либо нажатие акселераторов Shift + Page Up и Shift + Page Down перемещает Курсор Проигрывателя на Маркер вверх и вниз.
+Аналогично можно вращать колесо мыши с зажатой клавишей Shift – Курсор Проигрывателя будет прыгать по Маркерам.
+Когда предпочтительнее использовать:
+● +когда нужно вернуться на начало просматриваемого участка (при условии, что там стоит Маркер)
+● +когда нужно быстро перейти на соседние участки, чтобы просмотреть их события
+ +5. Прыжки по Закладкам
+Нажатие хоткея, соответствующего номеру Закладки (0-9), посылает Курсор Проигрывателя на кадр этой Закладки.
+Когда предпочтительнее использовать:
+● +когда нужно просмотреть события мувика, на которых была оставлена Закладка (например, начало текущего уровня)
+ +6. Прыжок в начало/конец мувика
+Нажатие акселераторов Shift + Home и Shift + End перемещает Курсор Проигрывателя в начало и в конец мувика.
+Также при нажатии хоткея "Play movie from the beginning" (по умолчанию Shift + R) Курсор Проигрывателя прыгает на начальный кадр мувика.
+Когда предпочтительнее использовать:
+● +когда нужно просмотреть события мувика с самого начала
+● +когда нужно заполнить весь мувик Гринзоной до конца
+Навигация Курсором Выделения
+Курсор Выделения всегда может переместиться в указанный кадр.
+Когда в Piano Roll выделено более одной строки, Курсором Выделения считается самая верхняя из них.
+ +1. Смещение Выделения стрелками
+Нажатие клавиатурных акселераторов Ctrl + Вверх и Ctrl + Вниз перемещает Выделение на 1 кадр вверх и вниз. Piano Roll автоматически скроллируется вслед за ним.
+Когда предпочтительнее использовать:
+● +когда нужно передвинуть Курсор Выделения чуть выше или чуть ниже
+ +2. Смещение Выделения в начало/конец мувика
+Нажатие акселераторов Ctrl + Home и Ctrl + End перемещает Выделение в начало и в конец мувика. Piano Roll автоматически скроллируется вслед за ним.
+Когда предпочтительнее использовать:
+● +когда нужно выделить регион в начале или конце мувика
+ +3. Прыжки по Маркерам
+Нажатие кнопок << и >> в самом низу Панели Инструментов, либо нажатие акселераторов Ctrl + Page Up и Ctrl + Page Down перемещает Курсор Выделения на Маркер вверх и вниз. Piano Roll автоматически скроллируется вслед за ним.
+Аналогично можно вращать колесо мыши с зажатой клавишей Ctrl – Курсор Выделения будет прыгать по Маркерам.
+Когда предпочтительнее использовать:
+● +когда нужно вернуться на начало редактируемого участка (при условии, что там стоит Маркер)
+● +когда нужно быстро перейти на соседние участки, чтобы просмотреть или отредактировать их Ввод
+ +4. Откаты истории Выделения
+Нажатие акселераторов Ctrl + Q и Ctrl + W возвращает Выделение на состояние, предшествующее текущему или следующее за текущим. Piano Roll автоматически скроллируется вслед за ним.
+Это уникальный способ навигации, позволяющий вернуться к ранее отредактированным участкам и напомнить всю последовательность редактирования.
+Когда предпочтительнее использовать:
+● +когда нужно вернуться к недавно отредактированному участку, точное расположение которого уже забыто
+ +5. Прыжок на место последнего копирования в Буфер Обмена
+Нажатие акселератора Ctrl + B возвращает Выделение на место последнего копирования в Буфер Обмена. Piano Roll автоматически скроллируется вслед за ним.
+Когда предпочтительнее использовать:
+● +когда нужно вернуться на место, откуда был недавно скопирован Ввод
+Особые способы навигации
+ +1. Пересечение промежутков во Вводе и Маркерах
+Если навести курсор мыши на любую клетку Ввода, зажать Alt и прокрутить колесо мыши вверх, Piano Roll проскроллируется вверх таким образом, чтобы курсор мыши указывал на вышестоящее нажатие указанной кнопки либо на первое встреченное "отсутствие нажатия" указанной кнопки. Если прокрутить колесо вниз, Piano Roll проскроллируется вниз таким образом, чтобы курсор мыши указывал на нижестоящее нажатие указанной кнопки либо на первое встреченное "отсутствие нажатия" указанной кнопки.
+Если навести курсор мыши на колонку с номерами кадров, зажать Alt и прокрутить колесо мыши вверх, Piano Roll проскроллируется вверх таким образом, чтобы курсор мыши указывал на вышестоящий Маркер. Если прокрутить колесо вниз, Piano Roll проскроллируется вниз таким образом, чтобы курсор мыши указывал на нижестоящий Маркер.
+Когда предпочтительнее использовать:
+● +когда нужно найти начало или конец длинного ряда нажатий
+● +когда нужно найти вышестоящее или нижестоящее нажатие кнопки
+● +когда нужно найти вышестоящий или нижестоящий Маркер
+ +2. Прыжок на Маркер с искомой Заметкой
+При нажатии кнопки "Find next" (или клавиши Enter) в окне Find Note Piano Roll автоматически скроллируется к первому найденному Маркеру, Заметка которого включает искомый текст. Искать можно либо вверх от текущего положения Курсора Выделения, либо вниз.
+Курсор Выделения будет установлен на найденный Маркер, чтобы в нижнем текстовом поле была видна его Заметка.
+Когда предпочтительнее использовать:
+● +когда нужно найти участок, расположение которого не известно и может быть где угодно в мувике, но известна часть текста из Заметки Маркера, стоящего рядом с этим участком
+ +3. Прыжок на Маркер с похожей Заметкой
+При щелчке по кнопке "Similar" или "More" Piano Roll автоматически скроллируется к Маркеру, Заметка которого очень похожа на Заметку у текущего просматриваемого участка.
+Курсор Выделения будет установлен на этот Маркер, чтобы в нижнем текстовом поле была видна Заметка.
+Этот способ описан в главе Продвинутые возможности. Он работает только в проектах, где ТАСер прилежно ставит Маркеры и кратко описывает в Заметках суть Ввода под каждым Маркером.
+Когда предпочтительнее использовать:
+● +когда нужно быстро найти участок, расположение которого не известно и может быть где угодно в мувике, но известно, что суть Ввода на том участке выражается теми же словами, что и суть Ввода на текущем просматриваемом участке.
+Created with the Personal Edition of HelpNDoc: Free help authoring environment
+Нелинейный ТАСинг
+Это основной метод при работе в Тасэдиторе. Для полного осознания всех его преимуществ вам потребуется несколько дней практики. Особенно долгим может быть переход, если вы уже прочно привязались к традиционному методу и не любите изучать новые технологии.
+При работе с этим методом режим Записи должен быть всегда выключен. Галочка "Auto-restore last position" должна быть выключена. Галочки "Turbo seek" и "Follow cursor" по умолчанию отключены и включаются по мере необходимости.
+Основное занятие ТАСера:
+1. +Проскроллировать Piano Roll к началу редактируемого участка мувика, доставить сюда Курсор Проигрывателя, определиться с целью. Полезно также отметить начало участка Маркером.
+2. +Предположить наличие ошибки на участке, взвесить имеющиеся факторы оптимальности и прикинуть способ исправления ошибки (как именно требуется изменить Ввод, на каких кадрах и т.д.).
+3. +Навигация курсором мыши к любому кадру мувика осуществляется почти мгновенно.
+4. +Отредактировать участок мышью. Можно менять Ввод либо вслепую (не просматривая состояние игры), либо время от времени перемещать Курсор Проигрывателя, чтобы засвидетельствовать изменения мувика.
+5. +Просмотреть участок до момента наступления конечного события. Если целевое событие в игре не наступает в разумные сроки, вернуться к пункту 2.
+6. +[необязательный пункт] Определить кадр конца участка, поставив Курсор Проигрывателя на начальный кадр целевого события. Полезно также отметить конец участка Маркером. Рекомендуется сохранить полученный вариант прохождения участка в любую свободную Закладку.
+7. +Сравнить полученный результат с лучшим результатом, используя критерий оптимальности (например, сравнить номер кадра нового и старого конца участка). Если новый вариант оказался лучше (или если это ваш первый вариант прохождения участка), рекомендуется сохранить результат в Закладку 9. Слот 9 будет отвечать за хранение самого лучшего результата шлифовки участка. Если не сохранять лучший вариант в Закладку, он останется только в текущем мувике и в Журнале Истории.
+8. +Вернуться к пункту 2 и опробовать ещё варианты, до тех пор пока не иссякнут идеи по данному участку.
+9. +[необязательный пункт] Если идеи иссякают, можно почерпнуть информацию из прошлого или будущего: пересмотреть несколько участков, перетаскивая Курсор Проигрывателя или отпустив паузу эмулятора. При необходимости можно по-быстрому дорисовать Ввод для событий игры, идущих после окончания текущего участка.
+10. +Когда идеи полностью иссякли, восстановить лучший вариант прохождения из Журнала Истории или из Закладки 9 в текущий мувик, определиться со следующим участком и вернуться к пункту 1.
+Так как все создаваемые варианты прохождения участка автоматически сохраняются в Журнале Истории, у ТАСера-новичка может возникнуть соблазн не сохранять варианты в Закладки, а просто один раз дойти до конечного события, а затем экспериментировать с этим Вводом, постепенно улучшая его (а если вместо улучшения получилось ухудшение – сразу же откатывать изменения с помощью Ctrl + Z). Такой способ ТАСинга крайне не рекомендуется, так как он не позволяет вам мыслить далеко за рамками первоначального варианта (из-за подсознательного страха потерять имеющийся лучший вариант, если уйти от него слишком далеко). Даже если в результате последнего изменения Ввода у вас получилось ухудшение прохождения участка, нужно не откатываться к старому варианту, а пытаться разобраться в причинах ухудшения и продолжать осмысленную модификацию, чтобы получить улучшение.
+Чтобы не бояться, что предыдущее успешное прохождение участка затеряется в глубинах Журнала Истории, рекомендуется поступать так же, как делают в традиционном методе – отвести специальный слот для лучшего варианта прохождения участка и каждый раз ставить эту Закладку на конец участка, когда результат стал ещё лучше.
+Точно так же нужно поступать с перспективными вариантами прохождения участка, которые в чём-то лучше, а в чём-то хуже друг друга. Если вы сохраняете все альтернативные варианты в отдельные Закладки, вы можете со спокойной душой удалять их из мувика или изменять до неузнаваемости – для возврата к ним вам потребуется всего одно нажатие клавиши, а не долгий поиск по Журналу Истории.
+В этом методе ТАСинга, в отличие от традиционного, можно не заметить разделение мувика на логические участки, так как не требуется постоянно обозначать начало и конец текущего участка Закладками. Однако рекомендуется всё-таки соблюдать порядок и отмечать хотя бы начало участка Маркером (чтобы ограничить количество факторов оптимальности и не править Ввод на предыдущих участках).
+Начало и конец участка обычно ассоциируются не с номером кадра, а с определёнными событиями игры. Но так как на начальное событие редактируемый Ввод участка никак не влияет, то начальный кадр участка не изменяется в процессе оптимизации, и этот кадр можно однозначно зафиксировать Маркером.
+Конечное событие участка может наступить в разное время – в зависимости от Ввода на участке. Поэтому, если вы отмечаете конец участка Маркером, необходимо будет перетаскивать этот Маркер выше или ниже, когда из-за изменения Ввода конечное событие изменилось. Если вам лень это делать, можно обойтись установкой Закладки, в которой заодно сохранится полученный вариант прохождения участка. Ну а для самых простых участков можно вообще никак не отмечать конечный кадр, полагаясь на собственную память и на зелёную стрелку Тасэдитора.
++С помощью зелёной стрелки Тасэдитор может подсказать, на каком кадре вы остановили просмотр участка в прошлый раз (до того как начали изменять Ввод участка). Обычно это и есть кадр, в котором происходило конечное событие до недавних изменений Ввода. Так что, если после изменения Ввода конечное событие стало детектироваться на 2 кадра выше зелёной стрелки, это означает, что вы обогнали прошлый результат на 2 кадра, значит, новый Ввод лучше старого (если ваш критерий – скорость). Вся эта логическая цепочка пролетает в голове за один миг при взгляде на Piano Roll после просмотра результата Ввода.
+Возьмём пример из Super Mario Bros.
+Пункт 1. При просмотре готовой части мувика вы остановили Курсор Проигрывателя в момент появления Марио на экране. Решили создать участок от этого места до события, когда координата X будет равна 100. Критерий – чем быстрее, тем лучше. Поставили на начальный кадр Маркер, возможно даже ввели Заметку в духе "start running".
+Пункт 2. Сразу понятна первая ошибка во Вводе на участке – нет ни одного нажатия.
+Пункты 3 и 4. Одним махом вы рисуете зажатие кнопки R на протяжении пары десятков кадров.
+Пункт 5: Отпустили паузу эмуляции (средняя кнопка) и заметили, что Марио пробежал только до X=30, а потом остановился и стоит бесконечно долго. Ставим эмулятор на паузу и возвращаемся к пункту 2.
+Пункт 2. Очевидно, ошибка в том, что надо дольше жать R.
+Пункты 3 и 4. Дорисовали зажатие кнопки R ещё на сотню кадров, чтобы уж точно хватило.
+Пункт 5: Отпустили паузу эмуляции и увидели, как Марио пробежал до X=100 и даже дальше.
+Пункты 6, 7 и 8: Поставили эмулятор на паузу и отвели Курсор Проигрывателя немного назад, на кадр с X=100. Это будет конец участка, допустим, это оказался кадр с номером 200.
+Пункт 2. Очевидно, надо ещё держать B.
+Пункты 3 и 4. Дорисовали зажатие кнопки B параллельно столбику из нажатий R на участке от начального Маркера до конечного. Курсор Проигрывателя во время рисования отпрыгнул в начало участка, а на его месте в конце участка осталась зелёная стрелка.
+Пункт 5: Отпустили паузу эмуляции (средняя кнопка) и увидели, как Марио пробежал быстрее, достиг X=100 и бежит дальше. Если вы не нажали на паузу самостоятельно, эмулятор остановится на кадре с зелёной стрелкой.
+Пункты 6, 7 и 8: Отвели Курсор Проигрывателя на кадр с X=100, допустим, это кадр с номером 150. Зелёная стрелка напоминает, что в прошлый раз концом участка был кадр 200, значит новый вариант прохождения лучше старого. Можно даже не считать, на сколько кадров было улучшено прохождение, а просто выделить регион кадров от Курсора Проигрывателя до зелёной стрелки и увидеть размер Выделения в панели Splicer.
+Пункт 2. Надо бы поэкспериментировать с прыжками и т.д...
+Курсор Проигрывателя каждый раз будет автоматически отпрыгивать вверх, а на его месте будет оставаться зелёная стрелка.
+Кроме того, вы можете сосредоточиться на первой части участка, мысленно определив подучасток, задачей которого будет наибыстрейшее получение максимума горизонтальной скорости. Для создания такого подучастка нужно перемотать Курсор Проигрывателя на кадр, в котором скорость достигает максимума в текущей стратегии прохождения участка, а затем просто начать редактирование Ввода над этим кадром. При усечении Гринзоны зелёная стрелка перескочит на этот кадр, автоматически обозначив конец подучастка, и вы сможете сравнивать результат новой стратегии с результатом старой.
+Процесс создания Ввода в нелинейном методе представляет собой постоянное чередование редактирования и просмотра участка. Анализ ситуации происходит как во время просмотра, так и во время редактирования.
+Оптимальное соотношение времени на редактирование и просмотр формируется само по себе в процессе ТАСинга. Более того, это соотношение может меняться в процессе работы над проектом. Чем больше вы ТАСите одну игру, тем лучше вы ощущаете её закономерности. Поэтому ближе к концу своего мувика вы сможете интуитивно предсказывать результаты изменений Ввода ещё во время редактирования, или даже раньше – во время обдумывания их в голове. А просмотр участка будет нужен только для подтверждения догадки.
+В некоторых случаях можно судить об оптимальности Ввода по промежуточным результатам, даже не просматривая участок до конца. Например, если персонаж на середине участка спотыкается об уступ и обнуляет скорость, можно сразу догадаться, что к концу участка он дойдёт позже, чем в прошлый раз. Поэтому не всегда хочется просматривать участок полностью, зачастую достаточно просмотреть пару актуальных кадров и продолжить редактирование. Однако такая спешка чревата тем, что вы мимоходом отвергнете решение, которое на первый взгляд кажется неоптимальным, хотя имеет огромный потенциал для успеха. Например, споткнувшись об уступ, Марио может случайно проникнуть внутрь стенки и пройти насквозь быстрее, чем обычно. Поэтому на всякий случай рекомендуется не торопиться, а досматривать участок до конца, когда критерий оптимальности уж наверняка не подведёт.
+Способы просмотра результатов Ввода на участке:
+● +отпускание паузы хоткеем Pause или нажатием средней кнопки мыши. После окончания участка требуется вручную поставить эмулятор на паузу (обычно не страшно, если вышло чуть позже, в крайнем случае можно потом отмотать наверх)
+● +запуск добегания к зелёной стрелке хоткеем Restore Playback или нажатием средней кнопки, когда есть зелёная стрелка
+● +запуск добегания к ближайшему Маркеру нажатием средней кнопки при зажатой клавише Shift, если в конце участка поставлен Маркер
+● +запуск добегания к Курсору Выделения нажатием средней кнопки при зажатой клавише Ctrl, если Курсор Выделения стоит ниже Курсора Проигрывателя
+● +повторный просмотр участка от Курсора Выделения до Курсора Проигрывателя нажатием средней кнопки при зажатой клавише Ctrl, если Курсор Выделения стоит выше Курсора Проигрывателя
+● +перетаскивание Курсора Проигрывателя курсором мыши вручную на нужный кадр
+● +перемещение Курсора Проигрывателя колесом мыши с зажатой правой кнопкой
+● +покадровое перемещение Курсора Проигрывателя хоткеями Frame Rewind и Frame Advance, либо кнопками < и > или акселераторами Shift + Вверх и Shift + Вниз
+● +а также остальные способы навигации Курсором Проигрывателя
+Не стоит привязываться к одному из этих способов, лучше чередовать их в зависимости от ситуации. Для тестирования мелких изменений проще использовать колесо мыши или Frame Advance/Rewind. А для просмотра всего участка уже имеет смысл перетащить Курсор Проигрывателя в начало и нажать среднюю кнопку или Pause/Restore Playback.
+Важно отметить, что вы можете просматривать и редактировать Ввод одновременно. Когда галочка "Follow cursor" снята, Piano Roll во время проигрывания мувика остаётся на месте редактирования, и вы можете дорисовывать нажатия кнопок прямо в момент их выполнения. Например, попробуйте во время исполнения прыжка Марио начать изменять высоту этого прыжка, дорисовывая или стирая лишние нажатия A на текущем участке. Останавливать эмуляцию при этом не требуется.
+При необходимости можно замедлить эмуляцию хоткеями - и =, чтобы во время просмотра было достаточно времени для неспешных щелчков мышью. Однако, когда требуется не только пощёлкать, но ещё и подумать, следует вернуть эмулятор на паузу.
+Процесс эмуляции можно не только замедлять, но и ускорять. Раньше ускорение эмуляции использовалось только для быстрой навигации Курсором Проигрывателя к нужному уровню в игре. В Тасэдиторе турбо-эмуляция ещё используется в качестве оригинального способа ТАСинга.
+С помощью ускоренной эмуляции можно наглядно ощутить взаимосвязь не только между нажатием и следующим кадром, но также между нажатием и отдалённым событием.
++Возьмём в качестве примера манипуляцию удачей.
+Без турбо-добегания вы можете увидеть взаимосвязь между нажатием кнопки B и появлением пули в следующем кадре. Соответственно, в голове появляется ассоциация "B = выстрел", и мысли идут в направлении "чем позже поставлю нажатие B, тем позже вылетит пуля".
+А с турбо вы можете сразу после установки B увидеть выпавший из убитого врага приз, пропустив неважные промежуточные шаги (выстрел, полёт пули, столкновение, смерть врага и т.д.). В голове появляется ассоциация "B = вероятность приза", и мысли идут в направлении "от времени нажатия B зависит тип приза".
+Таким образом турбо позволяет автоматически отфильтровать ненужную информацию, идущую посреди участка, и сразу получить только нужную, появляющуюся в конце участка.
+Делается это так:
+● +Включаете галочку "Turbo seek". Отключаете галочку "Follow cursor", чтобы Piano Roll не убегал вслед за Курсором Проигрывателя.
+● +Устанавливаете пробное нажатие кнопки B в начало участка, на котором требуется стрелять во врага.
+● +Просматриваете попадение пули во врага и выпадение/отсутствие приза, оставляете Курсор Проигрывателя на этом месте (когда приз уже пару секунд должен лежать на земле) – это и будет конец участка.
+● +Допустим, с первого раза выпал неудачный приз, но вы знаете, что в этой игре можно манипулировать удачей, выстрелив во врага чуть раньше или позже.
+● +Переносите нажатие на один кадр вперёд (достаточно вставить перед старым нажатием пустой кадр с помощью Ctrl + Shift + Insert).
+● +В этот момент события игры автоматически откатываются назад, на экране FCEUX можно увидеть момент перед выстрелом.
+● +Нажимаете среднюю кнопку мыши или Пробел (ту клавишу, которая назначена на хоткей Restore Playback). События игры мгновенно прокрутятся на максимально возможной скорости, и вы практически сразу увидите, какой из врага выпадает приз теперь.
+● +Если приз опять не тот, вновь нажимаете Ctrl + Shift + Insert для вставки ещё одного пустого кадра (а значит выстрел откладывается ещё на один кадр) и вновь нажимаете Restore Playback, чтобы увидеть новый вариант.
+● +Так можно продолжать, пока не будет найден номер кадра, на котором нажатие выстрела будет давать игроку требуемый приз. Всего за одну минуту можно успеть протестировать более сотни вариантов, машинально нажимая хоткеи и глядя только на экран FCEUX.
+Если у вас очень медленный компьютер, ассоциирование выстрела с выпавшим призом может не сработать, так как турбо-перемотка будет работать медленно, и вам придётся ждать результат, теряя концентрацию внимания. К счастью, FCEUX – очень быстрый эмулятор (при использовании Old PPU).
+Итак, второй метод ТАСинга можно разделить на три подвида:
+1) +редактирование на паузе
+2) +редактирование во время просмотра (в частности, замедленного просмотра)
+3) +редактирование на паузе с просмотром итогового результата (с помощью турбо-добегания)
+Выбор конкретного метода зависит от текущей задачи ТАСера. Начинать обучение следует с редактирования во время паузы эмулятора. Можно осуществлять полный или частичный просмотр после каждого мелкого изменения, а можно перерисовать весь участок и только потом просмотреть получившийся результат.
+Плюсы нелинейного ТАСинга:
++ Мгновенная навигация к месту редактирования.
++ Возможность пропускать ненужные сцены и ассоциировать действие с итогом.
++ Отстранённость ТАСера от игрового потока позволяет изучать поведение игры более объективно.
+Минусы метода:
+– Отсутствие геймерской "отдачи" при редактировании на паузе. Для объективности это полезно, но нередко требуется слиться с игрой более плотно.
+– Упор на мышиное управление. Клавиатура/джойстик в этом методе могут помочь быстро генерировать Ввод, но их возможности для навигации очень ограничены. А во время шлифовки навигация требуется очень часто.
+Когда использовать: в большинстве случаев оптимизации участков. Полезно также комбинировать этот метод со следующим методом, переключаясь между ними для формирования в голове наиболее объективной картины игровых возможностей.
+Следующий метод исправляет главный минус этого метода и в ряде случаев полностью заменяет его.
+Created with the Personal Edition of HelpNDoc: Free help authoring tool
+Операции над мувиком
+При внесении любых изменений в мувик Тасэдитор регистрирует эти изменения в Журнале Истории. В текст каждой записи Журнала добавляется время внесения изменений, а также номер ключевого кадра (или начало и конец региона кадров), где произошли изменения.
+Здесь перечислены все возможные типы записей в Журнал Истории, а также дана примерная оценка частоты использования соответствующих операций.
+Изменение Ввода + |
+Изменение Маркеров + |
+Прочее + |
+
+ | ++ | +Initialization + |
+
+ | ++ | ++ | +
+ | ++ | +|
+ | +||
+ | +||
+ | +||
+ | +||
+ | +||
+ | +||
+ | +||
+ | +||
+ | +||
+ | +||
+ | +||
+ | +||
+ | ++ | +|
+ | +||
+ | +||
+ | +||
+ | +||
+ | +||
+ | +||
+ | +||
+ | +||
+ | +
Initialization
+Категория: прочее
+Эта запись создаётся автоматически при создании Журнала Истории.
+Журнал Истории создаётся при создании нового проекта, либо при открытии компактно сохранённого проекта, в котором нет Журнала Истории.
+Пример:
+20:24:53 Initialization
+Частота использования: крайне редко.
+Гринзона усекается: после нулевого кадра.
+Undefined
+Категория: прочее
+Неопределённое изменение. В Тасэдиторе 1.0 эта запись не используется.
+Частота использования: никогда.
+Set
+Категория: изменение Ввода
+Запись создаётся при установке нажатия одной кнопки в один или несколько кадров.
+Варианты:
+● +щелчок по пустой клетке Ввода в Piano Roll – устанавливается одно нажатие в эту клетку
+● +рисование Ввода при помощи щелчка по пустой клетке и дальнейшего перемещения курсора мыши без отпускания левой кнопки – устанавливается целый ряд нажатий вдоль линии рисования
+● +Shift + щелчок по пустой клетке Ввода в Piano Roll – устанавливается целый ряд от места щелчка до Курсора Выделения
+● +щелчок по символу в Заголовке Piano Roll (при условии, что в Piano Roll есть Выделение, и в выделенных кадрах есть пустоты в данной колонке) – устанавливается в Выделении
+● +нажатие кнопки виртуального джойстика (при условии, что в Piano Roll есть Выделение, и в выделенных кадрах есть пустоты в данной колонке) – устанавливается в Выделении
+Пример:
+20:25:18 Set 15-21
+Частота использования: очень часто.
+Гринзона усекается: после первого же кадра, где изменился Ввод.
+Unset
+Категория: изменение Ввода
+Запись создаётся при снятии нажатия одной кнопки в одном или нескольких кадрах.
+Варианты:
+● +щелчок по заполненной клетке Ввода в Piano Roll – убирается нажатие из этой клетки
+● +стирание Ввода при помощи щелчка по заполненной клетке и дальнейшего перемещения курсора мыши без отпускания левой кнопки – убирается целый ряд нажатий вдоль линии стирания
+● +Shift + щелчок по заполненной клетке Ввода в Piano Roll – убираются все имеющиеся нажатия этой кнопки в Выделении
+● +Ctrl + щелчок по заполненной клетке Ввода в Piano Roll – убираются нажатия этой кнопки в выделенных кадрах
+● +щелчок по символу в Заголовке Piano Roll (при условии, что в Piano Roll есть Выделение, и во всех выделенных кадрах есть нажатия в данной колонке) – убираются все нажатия этой кнопки в Выделении
+● +нажатие кнопки виртуального джойстика (при условии, что в Piano Roll есть Выделение, и во всех выделенных кадрах есть нажатия в данной колонке) – убираются все нажатия этой кнопки в Выделении
+Пример:
+20:25:22 Unset 21
+Частота использования: очень часто.
+Гринзона усекается: после первого же кадра, где изменился Ввод.
+Pattern
+Категория: изменение Ввода
+Запись создаётся при установке нажатий/отпусканий одной кнопки по шаблону.
+В текст записи добавляется название использованного шаблона.
+Варианты:
+● +Alt + щелчок по любой клетке Ввода в Piano Roll – в промежутке от кадра щелчка до Курсора Выделения последовательность нажатий указанной кнопки заменяется на последовательность, соответствующую текущему шаблону
+● +Alt + рисование Ввода при помощи щелчка и дальнейшего перемещения курсора мыши без отпускания левой кнопки – в промежутке от кадра, на который указывает курсор мыши, до Курсора Выделения последовательность нажатий указанной кнопки заменяется на последовательность, соответствующую текущему шаблону
+● +Alt + щелчок по символу в Заголовке Piano Roll (при условии, что в Piano Roll есть Выделение) – последовательность нажатий указанной кнопки в выделенных кадрах заменяется на последовательность, соответствующую текущему шаблону
+● +Alt + нажатие кнопки виртуального джойстика (при условии, что в Piano Roll есть Выделение) – последовательность нажатий этой кнопки в выделенных кадрах заменяется на последовательность, соответствующую текущему шаблону
+Пример:
+20:25:40 Pattern 21-30 Alternating (1010...)
+Частота использования: редко.
+Гринзона усекается: после первого же кадра, где изменился Ввод.
+Insert
+Категории: изменение Ввода, изменение Маркеров
+Запись создаётся при вставке одного или нескольких пустых кадров посреди мувика, что приводит к сдвиганию Ввода (и Маркеров, если они привязаны к Вводу) вниз.
+Варианты:
+● +нажатие клавиатурного акселератора Shift + Insert (при условии, что в Piano Roll есть Выделение) – перед выделенными строками появляются пустые строки, выделение вместе с Вводом сдвигается вниз
+● +выбор в меню Тасэдитора пункта Edit -> Insert (при условии, что в Piano Roll есть Выделение) – перед выделенными строками появляются пустые строки, выделение вместе с Вводом сдвигается вниз
+● +щелчок правой кнопкой в любом месте колонки Frame# и выбор в контекстном меню пункта Insert (пункт доступен только когда в Piano Roll есть Выделение) – перед выделенными строками появляются пустые строки, выделение вместе с Вводом сдвигается вниз
+Пример:
+20:25:58 Insert 21
+Частота использования: часто.
+Гринзона усекается: после первого же кадра, где изменился Ввод. Это может быть кадр, находящийся ниже, чем место вставки.
+Insert#
+Категории: изменение Ввода, изменение Маркеров
+Запись создаётся при вставке заданного количества пустых кадров посреди мувика, что приводит к сдвиганию Ввода (и Маркеров, если они привязаны к Вводу) вниз.
+В текст записи добавляется количество вставленных кадров.
+Варианты:
+● +нажатие клавиши Insert и введение требуемого числа кадров – если в Piano Roll есть Выделение, перед самым первым выделенным кадром появляется требуемое количество пустых строк, выделение вместе с Вводом сдвигается вниз. Если выделения нет, то требуемое количество пустых строк появляется перед Курсором Проигрывателя
+● +выбор в меню Тасэдитора пункта Edit -> Insert # of Frames – если в Piano Roll есть Выделение, перед самым первым выделенным кадром появляется требуемое количество пустых строк, выделение вместе с Вводом сдвигается вниз. Если выделения нет, то требуемое количество пустых строк появляется перед Курсором Проигрывателя
+● +щелчок правой кнопкой в любом месте колонки Frame# и выбор в контекстном меню пункта Insert # of Frames (пункт доступен всегда) – если в Piano Roll есть Выделение, перед самым первым выделенным кадром появляется требуемое количество пустых строк, выделение вместе с Вводом сдвигается вниз. Если выделения нет, то требуемое количество пустых строк появляется перед Курсором Проигрывателя
+Пример:
+20:26:09 Insert#4 29
+Частота использования: редко.
+Гринзона усекается: после первого же кадра, где изменился Ввод. Это может быть кадр, находящийся ниже, чем место вставки.
+Delete
+Категории: изменение Ввода, изменение Маркеров
+Запись создаётся при удалении одного или нескольких кадров посреди мувика, что приводит к сдвиганию Ввода (и Маркеров, если они привязаны к Вводу) вверх.
+Варианты:
+● +нажатие клавиатурного акселератора Ctrl + Delete (при условии, что в Piano Roll есть Выделение) – содержимое выделенных строк исчезает, само выделение остаётся на месте, Ввод в последующих кадрах сдвигается вверх
+● +выбор в меню Тасэдитора пункта Edit -> Delete (при условии, что в Piano Roll есть Выделение) – содержимое выделенных строк исчезает, само выделение остаётся на месте, Ввод в последующих кадрах сдвигается вверх
+● +щелчок правой кнопкой в любом месте колонки Frame# и выбор в контекстном меню пункта Delete (пункт доступен только когда в Piano Roll есть Выделение) – содержимое выделенных строк исчезает, само выделение остаётся на месте, Ввод в последующих кадрах сдвигается вверх
+Пример:
+20:26:12 Delete 33
+Частота использования: часто.
+Гринзона усекается: после первого же кадра, где изменился Ввод. Это может быть кадр, находящийся ниже, чем место удаления.
+Truncate
+Категории: изменение Ввода, изменение Маркеров
+Запись создаётся при усечении хвоста мувика, что приводит удалению Ввода (и Маркеров, если они привязаны к Вводу), начиная с указанной строки.
+Варианты:
+● +выбор в меню Тасэдитора пункта Edit -> Truncate movie – если в Piano Roll есть Выделение, мувик усекается сразу после первого выделенного кадра. Если выделения нет, то мувик усекается сразу после Курсора Проигрывателя
+● +щелчок правой кнопкой в любом месте колонки Frame# и выбор в контекстном меню пункта Truncate movie (пункт доступен всегда) – если в Piano Roll есть Выделение, мувик усекается сразу после первого выделенного кадра. Если выделения нет, то мувик усекается сразу после Курсора Проигрывателя
+Пример:
+20:26:28 Truncate 42
+Частота использования: крайне редко.
+Гринзона усекается: после кадра усечения мувика.
+AdjustLag
+Категории: изменение Ввода, изменение Маркеров
+Запись создаётся при автоматическом сдвигании Ввода (и Маркеров, если они привязаны к Вводу) во время проигрывания мувика с включенной галочкой "Auto-adjust Input due to lag".
+В текст записи добавляется число, обозначающее количество вставленных или удалённых кадров.
+Варианты:
+● +изменить Ввод на участке и запустить просмотр участка, отпустив паузу – если во время эмуляции лаг проявляется иначе, чем при предыдущем просмотре, весь последующий Ввод сдвигается таким образом, чтобы учесть это изменение.
+● +записать новый Ввод поверх старого – если во время записи очередного кадра лаг на этом кадре проявляется иначе, чем при предыдущем просмотре, весь последующий Ввод сдвигается таким образом, чтобы учесть это изменение.
+Пример:
+20:26:39 AdjustLag [+1] 30
+Частота использования: часто.
+Гринзона усекается: после кадра, в котором изменилось поведение лага.
+Clear
+Категория: изменение Ввода
+Запись создаётся при снятии нажатий всех кнопок с одного или нескольких кадров.
+Варианты:
+● +нажатие клавиши Delete (при условии, что в Piano Roll есть Выделение) – все имеющиеся нажатия всех кнопок в выделенных строках снимаются, само выделение остаётся на месте
+● +выбор в меню Тасэдитора пункта Edit -> Clear (при условии, что в Piano Roll есть Выделение) – все имеющиеся нажатия всех кнопок в выделенных строках снимаются, само выделение остаётся на месте
+● +щелчок правой кнопкой в любом месте колонки Frame# и выбор контекстном меню пункта Clear (пункт доступен только когда в Piano Roll есть Выделение) – все имеющиеся нажатия всех кнопок в выделенных строках снимаются, само выделение остаётся на месте
+Пример:
+20:26:51 Clear 15-20
+Частота использования: средне.
+Гринзона усекается: после первого же кадра, где изменился Ввод.
+Cut
+Категория: изменение Ввода
+Запись создаётся при совершении операции Cut ("Вырезать" – копирование данных в Буфер Обмена с одновременным удалением этих данных из источника). Эта операция приводит к снятию нажатий всех кнопок с одного или нескольких кадров.
+Эта операция идентична операции Clear, за исключением того, что Ввод перед удалением попадают в Буфер Обмена.
+Замечание: хотя последствия операции Cut можно откатить с помощью Ctrl + Z, данные в Буфере Обмена при этом не будут откатываться.
+Варианты:
+● +нажатие клавиатурного акселератора Ctrl + X (при условии, что в Piano Roll есть Выделение) – все имеющиеся нажатия всех кнопок в выделенных строках снимаются, само выделение остаётся на месте
+● +выбор в меню Тасэдитора пункта Edit -> Cut (при условии, что в Piano Roll есть Выделение) – все имеющиеся нажатия всех кнопок в выделенных строках снимаются, само выделение остаётся на месте
+Пример:
+20:27:05 Cut 21-23
+Частота использования: редко.
+Гринзона усекается: после первого же кадра, где изменился Ввод.
+Paste
+Категория: изменение Ввода
+Запись создаётся при вставке данных из Буфера Обмена в мувик (поверх старых данных).
+Варианты:
+● +нажатие клавиатурного акселератора Ctrl + V (при условии, что в Piano Roll есть Выделение) – Ввод из Буфера Обмена вставляется поверх Ввода мувика. В зависимости от состояния галочки Superimpose старый Ввод на этих кадрах либо очищается, либо объединяется с новым. В Заголовке Piano Roll вспыхивают символы кнопок, для которых было установлено хотя бы одно нажатие в выделенных кадрах
+● +выбор в меню Тасэдитора пункта Edit -> Paste (при условии, что в Piano Roll есть Выделение) – Ввод из Буфера Обмена вставляется поверх Ввода мувика. В зависимости от состояния галочки Superimpose старый Ввод на этих кадрах либо очищается, либо объединяется с новым. В Заголовке Piano Roll вспыхивают символы кнопок, для которых было установлено хотя бы одно нажатие в выделенных кадрах
+Пример:
+20:27:11 Paste 21
+Частота использования: ниже среднего.
+Гринзона усекается: после первого же кадра, где изменился Ввод.
+PasteInsert
+Категории: изменение Ввода, изменение Маркеров
+Запись создаётся при вставке данных из Буфера Обмена в мувик (с раздвиганием старых данных).
+Варианты:
+● +нажатие клавиатурного акселератора Shift + V (при условии, что в Piano Roll есть Выделение) – Ввод из Буфера Обмена вставляется в мувик, старый Ввод на этих кадрах смещаются вниз. Также смещаются вниз Маркеры, если они привязаны
+● +выбор в меню Тасэдитора пункта Edit -> PasteInsert (при условии, что в Piano Roll есть Выделение) – Ввод из Буфера Обмена вставляется в мувик, старый Ввод на этих кадрах смещаются вниз. Также смещаются вниз Маркеры, если они привязаны
+Пример:
+20:27:16 PasteInsert 21
+Частота использования: редко.
+Гринзона усекается: после первого же кадра, где изменился Ввод. Это может быть кадр, находящийся ниже, чем место вставки.
+Clone
+Категория: изменение Ввода, изменение Маркеров
+Запись создаётся при вставке одного или нескольких кадров посреди мувика, что приводит к сдвиганию Ввода (и Маркеров, если они привязаны к Вводу) вниз.
+Ввод в появившихся кадрах будет являться копией Ввода из сдвинутых ниже кадров.
+Варианты:
+● +нажатие клавиатурного акселератора Ctrl + Insert (при условии, что в Piano Roll есть Выделение) – перед выделенными строками появляются их копии, выделение вместе с Вводом сдвигается вниз
+● +выбор в меню Тасэдитора пункта Edit -> Clone (при условии, что в Piano Roll есть Выделение) – перед выделенными строками появляются их копии, выделение вместе с Вводом сдвигается вниз
+● +щелчок правой кнопкой в любом месте колонки Frame# и выбор в контекстном меню пункта Clone (пункт доступен только когда в Piano Roll есть Выделение) – перед выделенными строками появляются их копии, выделение вместе с Вводом сдвигается вниз
+Пример:
+20:27:34 Clone 23
+Частота использования: часто.
+Гринзона усекается: после первого же кадра, где изменился Ввод. Это может быть кадр, находящийся ниже, чем место вставки.
+Record
+Категория: изменение Ввода
+Эта запись в Журнал Истории создаётся при Записывании Ввода в мувик с помощью виртуальных джойстиков в режиме Recording.
+В текст записи добавляются номера виртуальных джойстиков, Ввод которых был изменён.
+Варианты:
+● +нажатие кнопок виртуального джойстика (когда отжата пауза эмулятора, и включен режим Recording) – новые нажатия появляются на кадрах, где находится Курсор Проигрывателя. В зависимости от состояния галочки Superimpose старый Ввод на этих кадрах либо очищается, либо объединяется с новым
+● +нажатие кнопок виртуального джойстика одновременно с нажатием хоткея Frame Advance (когда эмулятор стоит на паузе, и включен режим Recording) – новые нажатия появляются на кадрах, где находится Курсор Проигрывателя. В зависимости от состояния галочки Superimpose старый Ввод на этих кадрах либо очищается, либо объединяется с новым
+Пример:
+20:28:01 Record(1P) 18-24
+Частота использования: ниже среднего.
+Гринзона усекается: после Курсора Проигрывателя.
+Import
+Категория: изменение Ввода
+Эта запись в Журнал Истории создаётся при импорте Ввода из любого другого fm2/fm3-файла.
+В текст записи добавляется имя файла, из которого был взят Ввод. Номер кадра в этих записях отсутствует, так как заменяется весь Ввод, начиная с нулевого кадра.
+Варианты:
+● +выбор пункта меню File -> Import Input и открытие файла-источника. Текущий Ввод проекта полностью заменяется на Ввод из выбранного файла, Маркеры остаются без изменений
+Пример:
+20:28:53 Import Battletoads-WIP1.fm2
+Частота использования: крайне редко.
+Гринзона усекается: после первого же кадра, где началось расхождение между новым и старым Вводом.
+Bookmark0
+Bookmark1
+Bookmark2
+Bookmark3
+Bookmark4
+Bookmark5
+Bookmark6
+Bookmark7
+Bookmark8
+Bookmark9
+Категория: прочее
+Эта запись создаётся при изменении данных одной Закладки.
+Пересохранение Закладки в уже заполненный слот срабатывает, только если новые данные отличаются от имеющихся в данном слоте. Например, если отличается кадр Закладки или мувик её ответвления.
+Варианты:
+● +нажатие хоткея Shift + клавиша в ряду от F1 до F10 – на кадре, где находится Курсор Проигрывателя, будет установлена Закладка, хранящая в своём ответвлении копию текущего мувика
+● +щелчок правой кнопкой мыши по любой строке Списка Закладок – на кадре, где находится Курсор Проигрывателя, будет установлена Закладка, хранящая в своём ответвлении копию текущего мувика
+● +щелчок правой кнопкой мыши по любой иконке Закладок в Дереве ответвлений – на кадре, где находится Курсор Проигрывателя, будет установлена Закладка, хранящая в своём ответвлении копию текущего мувика
+При успешном сохранении Закладки её ответвление становится текущим, а в окне эмулятора появляется сообщение "Branch N saved."
+Пример:
+20:28:53 Bookmark1 10
+Частота использования: часто.
+Гринзона не усекается.
+Branch0 to
+Branch1 to
+Branch2 to
+Branch3 to
+Branch4 to
+Branch5 to
+Branch6 to
+Branch7 to
+Branch8 to
+Branch9 to
+Категории: изменение Ввода, изменение Маркеров
+Запись создаётся при загрузке ответвления соответствующей Закладки (0-9).
+В текст записи добавляется время этой Закладки, так как содержимое мувика возвращается во времени на тот момент, когда создавалась данная Закладка.
+Номер кадра в этих записях отсутствует, так как заменяется либо весь Ввод (при установленной галочке Branches restore entire Movie), либо Ввод с нулевого кадра до кадра Закладки (не включая этот кадр).
+Варианты:
+● +нажатие хоткея в ряду клавиш от F1 до F10 – Ввод и Маркеры текущего мувика заменяются на Ввод и Маркеры из соответствующего ответвления
+● +щелчок левой кнопкой мыши по правой половине Списка закладок – Ввод и Маркеры текущего мувика заменяются на Ввод и Маркеры из соответствующего ответвления
+При успешной загрузке Закладки её ответвление становится текущим, а в окне эмулятора появляется сообщение "Branch N loaded."
+Пример:
+20:29:02 Branch1 to 20:28:15
+Частота использования: средне.
+Гринзона усекается: после первого же кадра, где началось расхождение между новым и старым Вводом.
+Marker Branch0 to
+Marker Branch1 to
+Marker Branch2 to
+Marker Branch3 to
+Marker Branch4 to
+Marker Branch5 to
+Marker Branch6 to
+Marker Branch7 to
+Marker Branch8 to
+Marker Branch9 to
+Категория: изменение Маркеров
+Запись создаётся при загрузке ответвления соответствующей Закладки (0-9) в случае, когда Ввод ответвления был идентичен текущему Вводу, а Маркеры ответвления отличались от текущих Маркеров (или отличались их Заметки).
+Варианты:
+● +нажатие хоткея в ряду клавиш от F1 до F10 – Маркеры текущего мувика заменяются на Маркеры из ответвления. Данное ответвление становится текущим
+● +щелчок левой кнопкой мыши по правой половине Списка закладок – Маркеры текущего мувика заменяются на Маркеры из ответвления. Данное ответвление становится текущим
+Пример:
+20:29:33 Marker Branch1 to 20:28:15
+Частота использования: крайне редко.
+Гринзона не усекается.
+Marker Set
+Категория: изменение Маркеров
+Запись создаётся при установке Маркера на один или несколько кадров.
+Варианты:
+● +двойной щелчок по номеру кадра в Piano Roll (при условии, что на этом кадре ещё нет Маркера) – на этот кадр устанавливается Маркер
+● +щелчок по Frame# в Заголовке Piano Roll (при условии, что в Piano Roll есть Выделение, и среди выделенных кадров есть кадры без Маркеров) – Маркеры устанавливаются на всех кадрах в выделении
+● +щелчок правой кнопкой в любом месте колонки Frame# и выбор в контекстном меню пункта Set Marker (пункт доступен только когда в Piano Roll есть Выделение) – Маркеры устанавливаются на всех кадрах в выделении
+Пример:
+20:29:47 Marker Set 15-18
+Частота использования: часто.
+Гринзона не усекается.
+Marker Remove
+Категория: изменение Маркеров
+Запись создаётся при снятии Маркера с одного или нескольких кадров.
+Варианты:
+● +двойной щелчок по номеру кадра в Piano Roll (при условии, что на этом кадре есть Маркер), перетаскивание Маркера за пределы Piano Roll и отпускание – этот Маркер удаляется
+● +щелчок по Frame# в Заголовке Piano Roll (при условии, что в Piano Roll есть Выделение, и на всех выделенных кадрах есть Маркеры) – со всех выделенных кадров удаляются Маркеры
+● +щелчок правой кнопкой в любом месте колонки Frame# и выбор в контекстном меню пункта Remove Marker (пункт доступен только когда в Piano Roll есть Выделение) – со всех выделенных кадров удаляются Маркеры
+Пример:
+20:29:52 Marker Remove 16-18
+Частота использования: средне.
+Гринзона не усекается.
+Marker Pattern
+Категория: изменение Маркеров
+Запись создаётся при установке Маркеров по шаблону.
+В текст записи добавляется название использованного шаблона.
+Варианты:
+● +Alt + щелчок по Frame# в Заголовке Piano Roll (при условии, что в Piano Roll есть Выделение) – последовательность Маркеров в выделенных кадрах заменяется на последовательность, соответствующую текущему шаблону
+Пример:
+20:30:11 Marker Pattern 20-30 One Quarter (10001000...)
+Частота использования: крайне редко.
+Гринзона не усекается.
+Marker Rename
+Категория: изменение Маркеров
+Запись создаётся при изменении текста Заметки одного Маркера.
+В текст записи добавляется новый текст Заметки.
+Варианты:
+● +щёлкнуть мышью по верхнему текстовому полю, стереть старый текст и ввести новый текст, затем нажать Enter или щёлкнуть по Piano Roll – изменится текст Заметки Маркера, под которым в данный момент находится Курсор Проигрывателя
+● +щёлкнуть мышью по нижнему текстовому полю, ввести новый текст, затем нажать Enter или щёлкнуть по любому месту окна TAS Editor – изменится текст Заметки Маркера, под которым в данный момент находится начало Выделения
+Пример:
+20:31:01 Marker Rename 20 Testing...
+Частота использования: часто.
+Гринзона не усекается.
+Marker Drag
+Категория: изменение Маркеров
+Запись создаётся после перетаскивания Маркера на новое место.
+В текст записи помещается старый и новый номер кадра данного Маркера, а также текст его Заметки.
+Варианты:
+● +навести курсор мыши на номер кадра с Маркером, зажать левую кнопку и перетащить Маркер на другой кадр, на котором нет Маркера, отпустить левую кнопку – Маркер переместится с одного кадра на другой
+Пример:
+20:31:08 Marker Drag 20=>15 Testing...
+Частота использования: средне.
+Гринзона не усекается.
+Marker Swap
+Категория: изменение Маркеров
+Запись создаётся после перетаскивания Маркера на кадр с другим Маркером, в результате чего они меняются местами.
+В текст записи помещается старый и новый номер кадра данного Маркера, а также текст его Заметки.
+Варианты:
+● +навести курсор мыши на номер кадра с Маркером, зажать левую кнопку и перетащить Маркер на другой кадр, на котором есть Маркер, отпустить левую кнопку – Маркеры поменяются местами
+Пример:
+20:31:14 Marker Swap 24<=>28
+Частота использования: редко.
+Гринзона не усекается.
+Marker Shift
+Категория: изменение Маркеров
+Запись создаётся при изменении мувика, которое не изменило Ввод, но привело к смещению Маркеров вверх или вниз.
+Варианты:
+● +вставить пустой кадр перед самым концом мувика, за которым нет нажатий, но есть Маркер – размер Ввода увеличится на один пустой кадр, изменений Ввода зарегистрировано не будет, но Маркер сместится на один кадр вниз
+● +склонировать пустой кадр перед самым концом мувика, за которым нет нажатий, но есть Маркер – размер Ввода увеличится на один пустой кадр, изменений Ввода зарегистрировано не будет, но Маркер сместится на оидн кадр вниз
+● +скопировать в Буфер Обмена пустой кадр, затем сделать PasteInsert перед самым концом мувика, за которым нет нажатий, но есть Маркер – размер Ввода увеличится на один пустой кадр, изменений Ввода зарегистрировано не будет, но Маркер сместится на один кадр вниз
+Пример:
+20:31:44 Marker Shift 21
+Частота использования: крайне редко.
+Гринзона не усекается.
+LUA Marker Set
+Категория: изменение Маркеров
+Запись создаётся при установке Маркера на один кадр с помощью вызова функции taseditor.setmarker() из Луа-скрипта.
+Варианты:
+● +исполнить Луа-скрипт со строкой taseditor.setmarker(framenum) – на кадре с номером framenum появится Маркер (если же Маркер там уже был, то запись в журнале Истории не появится)
+Пример:
+20:35:14 LUA Marker Set 0
+Частота использования: редко.
+Гринзона не усекается.
+LUA Marker Remove
+Категория: изменение Маркеров
+Запись создаётся при снятии Маркера с одного кадра с помощью вызова функции taseditor.clearmarker() из Луа-скрипта.
+Варианты:
+● +написать и исполнить Луа-скрипт со строкой taseditor.clearmarker(framenum) – с кадра с номером framenum снимется Маркер
+Пример:
+20:36:12 LUA Marker Remove 0
+Частота использования: редко.
+Гринзона не усекается.
+LUA Marker Rename
+Категория: изменение Маркеров
+Запись создаётся при изменении текста Заметки одного Маркера с помощью вызова функции taseditor.setnote() из Луа-скрипта.
+В текст записи добавляется новый текст Заметки.
+Варианты:
+● +написать и исполнить Луа-скрипт со строкой taseditor.setnote(markernum, newtext) – текст Заметки Маркера под номером markernum изменится на содержимое строки newtext
+Пример:
+20:37:03 LUA Marker Rename 0 Hello from Lua!
+Частота использования: редко.
+Гринзона не усекается.
+LUA Change
+Категории: изменение Ввода, изменение Маркеров
+Запись создаётся при изменении Ввода/Маркеров одного или нескольких кадров с помощью вызова функции taseditor.applyinputchanges() из Луа-скрипта.
+Вместо слова "Change" в тексте записи может фигурировать любое другое слово или словосочетание, которое указывается в качестве параметра функции taseditor.applyinputchanges().
+Варианты:
+● +написать и исполнить Луа-скрипт со строками taseditor.submitinputchange(frame, joypad, input) и taseditor.applyinputchanges(name) – Ввод мувика изменится в соответствии с параметрами вызванных функций submitinputchange()
+● +написать и исполнить Луа-скрипт со строками taseditor.submitinsertframes(frame, number), а также taseditor.submitdeleteframes(frame, number) и taseditor.applyinputchanges(name) – Ввод и Маркеры мувика сместятся вверх или вниз в соответствии с параметрами вызванных функций submitinsertframes() и submitdeleteframes()
+Пример:
+20:39:56 LUA Corruptor 10
+Частота использования: редко.
+Гринзона усекается: после первого же кадра, где изменился Ввод.
+Created with the Personal Edition of HelpNDoc: Easily create Web Help sites
+Piano Roll
+Рабочее пространство Тасэдитора похоже на интерфейс большинства программ для написания музыки – Piano Roll (перфолента). Piano Roll представляет из себя таблицу, содержащую все необходимые данные о редактируемом проекте. Пользователь может не только просматривать эти данные, но и редактировать их с помощью щелчков мыши по клеткам таблицы.
+При первом открытии Тасэдитора вы, скорее всего, увидите пустой проект, содержащий лишь стартовый (нулевой) кадр мувика. Поэтому перед началом экспериментов нужно временно отключить паузу эмуляции, чтобы мувик дошёл хотя бы до титульного экрана игры, где уже можно воздействовать на игру с помощью Ввода. По умолчанию для управления паузой эмулятора служит клавиша Pause на клавиатуре, но в Тасэдиторе вы можете использовать вместо неё среднюю кнопку мыши (колесо). Попробуйте просмотреть запущенную видеоигру пару секунд, затем вновь нажмите Pause или среднюю кнопку мыши, чтобы остановить эмулятор.
+Во время эмуляции содержимое Piano Roll заполняется информацией о пройденных кадрах. Каждая строка Списка Piano Roll отвечает за один кадр. Порядковый номер этого кадра указан в начале каждой строки, нумерация идёт сверху вниз. Когда экранных размеров не хватает для отображения всех кадров мувика, у Списка появляется вертикальный скроллбар.
+По цвету каждой строки можно узнать информацию о соответствующем кадре игрового процесса:
+● +Бледные (почти белые) строки означают, что эти кадры мувика не содержатся в Гринзоне. Обычно это значит, что эмулятор ещё не доходил в игре до данных кадров мувика и ничего не знает о происходящем в игре на этих кадрах. Например, если бы вы загрузите в Тасэдитор готовый мувик, в Piano Roll будут сразу отображаться все кадры этого мувика, но до запуска проигрывания они будут белёсыми. На верхней картинке эти строки начинаются с кадра 24, потому что Гринзона заканчивается на кадре 23.
+● +Зелёные и красные строки означают, что эти кадры содержатся в Гринзоне, эмулятор уже проиграл эту часть мувика, и вы уже видели на экране FCEUX, что именно происходит в игре в этих кадрах. Красным цветом отмечены кадры с лагом, в остальном же разницы между красными и зелёными строками нет.
+● +Голубая строка (на картинке это 18-й кадр) показывает текущий кадр эмуляции. События этого кадра отображаются на экране FCEUX в данный момент времени. Эта строка всегда в единственном экземпляре. В дальнейшем эту строчку мы будем называть Курсор Проигрывателя (Playback cursor). Во время паузы этот курсор стоит на одном кадре, а когда игра эмулируется, курсор бежит вниз, оставляя за собой след из зелёных и красных кадров Гринзоны. Вы можете ставить Курсор Проигрывателя на любой кадр мувика, чтобы узнать события игры в этом кадре. Для этого щёлкните левой кнопкой мыши по желаемой строчке в самом левом столбце Piano Roll (по которому перемещается голубая треугольная стрелка) – голубая стрелка перепрыгнет на эту строку вместе с Курсором Проигрывателя, а содержимое экрана FCEUX обновится, отобразив состояние игры на этом кадре. Если теперь не отпускать левую кнопку мыши, можно свободно перетаскивать голубой курсор вверх и вниз.
+● +Синяя строка – выделенный участок мувика. Цвет выделения может быть и другим, это зависит от ваших настроек Windows (от выбранной Визуальной темы). Строки Piano Roll выделяются при щелчках по ним левой кнопкой мыши. На картинке показано выделение 28-го кадра, но при необходимости можно выделить любой другой, и даже несколько строк одновременно. Для выделения региона нужно щёлкнуть по номеру кадра и, не отпуская кнопку, переместить мышь вверх или вниз, растягивая Выделение как угодно. Замечание: строки Piano Roll выделяются не только при щелчках по номерам кадров, но также при щелчках по Вводу (то есть по любому столбцу справа от колонки с номерами кадров). В дальнейшем мы будем называть все синие строки Выделением (Selection), а в случае, когда выделена только одна строчка, будем называть её Курсором Выделения (Selection cursor). В отличие от Курсора Проигрывателя, Курсор Выделения не привязан к состоянию эмулируемой игры. Чтобы полностью убрать Выделение, можно щёлкнуть правой кнопкой мыши по номеру выделенного кадра и в появившемся контекстном меню выбрать пункт "Deselect". Впрочем, обычно нет нужды убирать оставшееся от прошлой операции Выделение, так как при следующей операции над мувиком оно всё равно появится в новом месте.
+● +Фиолетовая строка – появляется на краткий миг при использовании Отката (Undo). Таким образом программа показывает конкретное место отменённых изменений. Большое удобство Тасэдитора состоит в том, что абсолютно любое изменение мувика можно откатывать с помощью стандартной комбинации клавиш Ctrl + Z, поэтому не бойтесь экспериментировать.
+Чтобы добавлять и изменять Ввод мувика, щёлкайте мышкой по клеткам в столбцах Piano Roll, находящихся правее столбика с номерами кадров. Если щёлкнуть по пустой клетке, то на ней появится символ, соответствующий кнопке реального джойстика эмулируемой приставки (NES).
+A – кнопка A +B – кнопка B +S – кнопка Select +T – кнопка Start +U – крестовина Вверх +D – крестовина Вниз +L – крестовина Влево +R – крестовина Вправо + |
+
Если щёлкнуть по уже заполненной клетке, то она очистится, и соответствующая кнопка будет считаться отпущенной на этом кадре. Других состояний у кнопок нет – только эти два: нажата/отпущена.
+Если вам непривычно соотносить эти 8 символов с кнопками реального джойстика, попробуйте просто нажимать в Тасэдиторе клавиши, настроенные в эмуляторе на джойстик первого игрока. Во время нажатия кнопок будут загораться зелёным светом соответствующие буквы в Заголовке Piano Roll, и вы легко ассоциируете столбцы Piano Roll с кнопками геймпада.
+Основная часть работы в Тасэдиторе проходит именно за этим занятием – установкой и снятием нажатий кнопок на разных кадрах. Тем самым вы формируете последовательность состояний кнопок, которая передаётся в игру и отражается на действиях управляемого персонажа. Например, если в Super Mario Bros посреди игрового процесса поставить в одну клетку Piano Roll один символ A, Марио сделает маленький прыжок (произошло короткое нажатие кнопки A). Если же поставить несколько символов A подряд (в столбик), Марио сделает большой прыжок (длительное зажатие кнопки A).
+Когда вы изменяете Ввод выше строки, в которой стоит Курсор Проигрывателя, голубой курсор отступает назад (назад по мувику = вверх по Piano Roll), при этом очищая часть Гринзоны. Это происходит в связи с тем, что ваши изменения Ввода ведут к изменениям хода игровых событий, так что ранее запомненное в Гринзоне состояние игры становится не актуальным. После изменения Ввода вам необходимо будет снова проиграть несколько кадров – то есть либо снять на время паузу эмулятора, либо схватить Курсор Проигрывателя за треугольную стрелку и перетащить вниз до интересующего кадра. При этом вы увидите на экране FCEUX результаты модификации Ввода, а заодно восстановите часть Гринзоны.
+Кроме того, вы ещё можете зажать правую кнопку мыши и покрутить колесо мыши вниз, чтобы вручную довести Курсор Проигрывателя к нужному кадру. Управление колесом является самым отзывчивым способом навигации по малому участку Ввода. Задействуется только одна рука, и при этом курсор мыши может находиться где угодно, например, оставаться над клетками редактируемого Ввода. Попробуйте, это очень эффективный способ перемотки назад и вперёд. Удобно зажимать средним пальцем правую кнопку мыши, а указательным вращать колесо, не отрывая взгляд от экрана FCEUX.
+Помимо одиночных щелчков по клеткам Piano Roll можно также менять состояние кнопок сразу в нескольких кадрах. Например, если вы хотите, чтобы кнопка R (Вправо) была зажата на протяжении 20 кадров подряд, не обязательно 20 раз щёлкать по соответствующим клеткам Piano Roll сверху вниз. Достаточно щёлкнуть по начальному кадру избранного участка и, не отпуская левую кнопку мыши, переместить курсор мыши вверх или вниз – при движении курсор мыши будет оставлять за собой след, и таким образом вы нарисуете вертикальный ряд нажатий. Аналогично можно стереть несколько нажатий, щёлкнув по первому удаляемому символу и переместив "ластик" выше или ниже. Стирание начинается при щелчке по заполненной клетке Ввода, а при щелчке по пустой клетке начинается рисование.
+Кроме этого, можно также зажать клавишу Shift перед щелчком по Вводу, тогда влияние щелчка распространится не только на ту клетку, по которой вы щёлкнули, но и на все клетки в этом столбце, начиная с Курсора Выделения. Таким образом, вы можете сначала сделать обычный щелчок по начальной клетке запланированного ряда нажатий, а потом зажать Shift и сделать щелчок по конечной клетке – появится запланированный ряд нажатий.
+Существует ещё один способ массовой установки и снятия нажатий. Выделите несколько отдельных строк, например, пятую строку, десятую и двадцатую. Затем щёлкните по букве L в Заголовке Piano Roll. Если на выделенных кадрах не было нажатий кнопки L (Влево), то они там появятся. Если же во всех выделенных кадрах кнопка L уже проставлена, щелчок по заголовку очистит эти нажатия.
+Позже вы освоите ещё несколько методов редактирования Ввода, но это основные из них. Поначалу может показаться, что слишком неестественно рисовать кнопочные нажатия мышкой, вместо того, чтобы привычно симулировать их нажатиями клавиш на клавиатуре. Однако это чувство дискомфорта вскоре пройдёт, если вы посвятите Тасэдитору хотя бы несколько дней.
+Особенность ТАСинга всегда была в том, что на первоначальный ввод кнопок уходит крайне мало времени, зато почти всё время уходит на последующие микро-модификации этого Ввода – где-то требуется удлинить время зажатия кнопки, где-то переставить нажатие кнопки на кадр раньше, где-то поменять U и D местами, и так далее. Преимущество Тасэдитора проявляется именно в процессе оптимизации мувика, а к рисованию Ввода мышкой нужно просто привыкнуть. Вы наверняка освоитесь с этим уже к концу чтения данного Курса.
+ +При установке нажатий вы должны были заметить, что проставляемые вами буквы различаются по цвету, более того, по мере добавления новых кнопок старые буквы меняют свой цвет от оранжевого к фиолетовому и синему, пока не становятся стандартно-чёрными. Это экспериментальная фича Тасэдитора, созданная для повышения интуитивности ввода. Фича называется "Горячие Правки" (Hot Changes). Когда вы вносите изменения в Ввод мувика, самые последние нажатия отображаются наиболее горячим цветом (оранжевым). Если после этого вы производите изменения в другом месте мувика (скажем, меняете другую кнопку на этом же кадре или ставите нажатие на другом кадре), то предыдущая правка немного остывает, становясь менее яркой.
+Таким образом, вы всегда можете по беглому взгляду на Piano Roll догадаться, какие нажатия были установлены недавно, а какие давно. Кроме того, вы сможете увидеть, какие нажатия были недавно удалены (на их месте остаётся чёрточка).
+Если эта фича вам не нравится, вы сможете её потом отключить, однако в рамках учебного курса мы будем подразумевать, что "горячие правки" у вас подключены.
+Узкая колонка перед колонкой с номерами кадров служит не только для перетаскивания Курсора Проигрывателя. В ней ещё отображаются информационные иконки. Голубая стрелка в этом столбце всегда указывает на кадр, где находится Курсор Проигрывателя. Зелёная стрелка показывает место, где находился Курсор Проигрывателя до того, как над ним изменился Ввод. А цифровыми карточками в этой колонке обозначаются Закладки, о них будет рассказано чуть позже.
+ +Жёлтые прямоугольники под номером некоторых кадров (на картинке это номера 12 и 23) – это Маркеры. Помимо жёлтого цвета о наличии Маркера на этих кадрах говорит и широкий шрифт, которым напечатан номер кадра.
+Маркеры предназначены для упрощения навигации по мувику, а также для самоорганизации ТАСера. Вы сами выбираете принцип их использования: можете ставить их на начало каждого уровня игры, а можете ставить и на каждый прыжок, выстрел или другое игровое событие, которое имеет свой кадр начала и кадр окончания. С помощью установки Маркеров вы логически разбиваете мувик на блоки, и потом вы сможете мгновенно перемещаться по мувику не только от кадра к кадру, но и от блока к блоку.
+Структуризация помогает держать в голове более чёткий образ всего мувика. Такой мысленный образ формируется в голове у каждого ТАСера, но обычно он весьма расплывчатый – то есть ТАСер помнит примерную последовательность действий, но не помнит детали (зачастую это и не требуется). Когда ТАСер выключает эмулятор, образ начинает постепенно забываться, становится всё более расплывчатым. Поэтому при следующем включении обычно требуется просмотреть текущий мувик с начала, чтобы освежить воспоминания. Иногда это требуется делать даже чаще – в зависимости от степени расплывчатости образа. Поэтому рекомендуется закреплять этот образ расстановкой реальных Маркеров.
+Маркер может быть установлен на любом кадре мувика. В отличие от Ввода, Маркеры не влияют на события игры. Есть 3 способа для установки Маркеров:
+1 способ. Сделать двойной щелчок левой кнопкой мыши по номеру кадра. Если на этом кадре не было Маркера, он там появится. Если Маркер уже есть, с зажатой левой кнопкой можно перетаскивать этот Маркер куда угодно, например, переместить его на соседний кадр или вообще выбросить за пределы Piano Roll, тем самым удалив его.
+2 способ. Выделить с помощью щелчков по номерам кадров одну или несколько строк в Piano Roll, а затем щёлкнуть по Заголовку Piano Roll на слово "Frame#". Если среди выделенных строк были строки без Маркеров, то на них будут установлены Маркеры. Если же все выделенные строки содержат Маркеры, все Маркеры с них будут удалены. Таким образом можно массово удалять или устанавливать Маркеры, точно так же, как Ввод.
+3 способ. Выделить один или несколько кадров в Piano Roll, затем щёлкнуть правой кнопкой по любому выделенному номеру кадра и в появившемся меню выбрать пункт "Set Markers" (Установить Маркеры) или "Remove Markers" (Удалить Маркеры). Этот наименее удобный способ, вместо него рекомендуется использовать первый или второй.
+Все операции с Маркерами можно откатывать (Ctrl + Z) точно так же, как и операции с Вводом.
+Маркеры автоматически нумеруются Тасэдитором по порядку их расположения в мувике – сверху вниз от первого до последнего. В верхнем левом углу окна Тасэдитора вы можете увидеть номер Маркера, под которым в данный момент находится Курсор Проигрывателя (надпись "Marker N" голубого цвета). Эта надпись не только информирует, но и является кнопкой для автоскроллинга. Если вы оставили Курсор Проигрывателя в одной части мувика, а потом проскроллировали Piano Roll подальше от этого курсора, вы всегда можете мгновенно вернуться к голубому курсору, щёлкнув по голубой надписи "Marker" (или быстро нажав клавишу Shift дважды). Эта особенность вам неоднократно понадобится в процессе редактирования больших мувиков.
+Точно такая же надпись-кнопка есть в нижнем левом углу Тасэдитора. Надпись "Marker N" синего цвета (такого же цвета, как и Курсор Выделения) показывает номер Маркера, под которым находится Выделение. При щелчке по этой надписи Piano Roll автоматически прыгает к Выделению. Эта кнопка пригодится вам так же часто, как верхняя. Её клавиатурный аналог – двойное нажатие клавиши Ctrl.
+Легко запомнить, что клавиша Shift часто используется для управления Курсором Проигрывателя, а клавиша Ctrl – для Курсора Выделения.
+Когда Курсор Проигрывателя и Курсор Выделения находятся под одним и тем же Маркером, номера вверху и внизу будут, естественно, совпадать.
+Маркеры не только разделяют мувик на логические блоки, но и содержат текстовые записи (комментарии и рабочие заметки). Текст Заметки Маркера отображается сразу же после его номера. В верхнем текстовом поле отображается Заметка Маркера, под которым в данный момент находится Курсор Проигрывателя, а в нижнем текстовом поле отображается Заметка Маркера, под которым находится Курсор Выделения.
+По умолчанию каждый новый Маркер содержит пустую Заметку. При создании Маркера двойным щелчком нижнее текстовое поле автоматически становится активным, так как Курсор Выделения указывает на кадр с только что созданным Маркером. Поэтому вы сразу же можете напечатать текст Заметки для этого Маркера, а затем продолжить работу с мувиком, изменения текста сохранятся автоматически.
+Отредактировать Заметку старого Маркера можно любым из следующих способов:
+● +установить Курсор Выделения на этот Маркер и щёлкнуть по нижнему текстовому полю, чтобы оно активировалось
+● +просто дважды щёлкнуть по уже имеющемуся Маркеру, нижнее поле активируется автоматически
+● +установить Курсор Проигрывателя на этот Маркер и щёлкнуть по верхнему текстовому полю, чтобы оно активировалось
+Для окончания редактирования нажмите Enter или просто щёлкните мышкой по любому постороннему элементу окна TAS Editor. Если вы передумали, нажмите Esc для отмены редактирования. Все возможности редактирования Заметок перечислены в Справочнике.
+Рекомендуется вводить хотя бы односложную Заметку, чтобы не забыть, зачем здесь был поставлен этот Маркер. Это не отнимет много времени, если устанавливать Маркеры двойным щелчком и вводить короткие сообщения. Зачастую даже не придётся отрывать руку от мыши.
+Created with the Personal Edition of HelpNDoc: Free iPhone documentation generator
+Настройка программы
+Перед тем, как начинать серьёзный ТАСинг, настройте Тасэдитор согласно своим предпочтениям.
+В этой главе перечислены все настройки инструмента, а также настройки эмулятора FCEUX, которые влияют на работу в Тасэдиторе.
+Все настройки хранятся в файле fceux.cfg в папке эмулятора. Если вы удалите этот файл, при следующем запуске FCEUX настройки сбросятся на значения по умолчанию.
+Для начала, если вы уже прочитали главу 2 и поняли назначение всех элементов интерфейса, стоит отключить всплывающие подсказки (предназначенные исключительно для новичка). Для этого зайдите в пункт меню Тасэдитора "Help" (Справка) и уберите галочку с подпункта "Enable Tooltips". Можете предварительно прочитать все подсказки, наводя курсор мыши на различные элементы окна Тасэдитора, чтобы закрепить уже имеющиеся знания об интерфейсе программы. + |
+
+Теперь откройте пункт "View" (Вид).
+Подпункт "Find Note window" вызывает окно поиска текста в Заметках Маркеров. Эта функция будет полезной, если вы документируете свой мувик с помощью Заметок.
+Далее в меню "View" идут галочки настроек внешнего вида программы. Чтобы не делать настройки наугад, прямо сейчас создайте пробный проект (просто открыв Тасэдитор) и экспериментируйте с ним.
+View -> Display Branch Screenshots
+Отображает всплывающие скриншоты (снимки экрана) при наведении курсором мыши на Закладки. С помощью скриншота вы можете быстро восстановить в уме события, сохранённые в мувике данной Закладки. Таким образом облегчается поиск нужного ответвления – не обязательно загружать Закладку, чтобы иметь представление о её содержимом. Переводя курсор мыши с одной Закладки на другую, можно очень быстро сравнивать альтернативные стратегии, не загружая ответвления.
+По умолчанию эта опция включена. Если отключить, скриншоты не будут появляться при наведении.
+Рекомендуется включить эту функцию, если вас не раздражают всплывающие картинки, частично загораживающие Piano Roll.
+ +View -> Display Branch Descriptions
+Отображает всплывающие текстовые описания при наведении курсором мыши на Закладки. С помощью этого текста, как и с помощью скриншота, вы можете ещё до загрузки Закладки понять, требуется ли загружать данное ответвление.
+Текст описания берётся из Заметки Маркера, под которым находится кадр данной Закладки. Сам Маркер может быть уже давно удалён из текущего мувика, но если Закладка была создана, когда Маркер ещё существовал, то значит, она содержит в себе ответвление мувика, где Маркер существует. И при возврате во времени на эту Закладку мувик восстановится на состояние, где Маркер существует.
+Таким образом, при записи альтернативных стратегий прохождения вы можете перед сохранением очередной стратегии в отдельное ответвление поставить Маркер на Курсор Проигрывателя и ввести текстовое описание созданной стратегии, например "тут я прошёл уровень поверху". После этого можно создать Закладку на этом кадре, сохранив в ней текущий мувик. Затем можно удалить этот Маркер вместе с частью Ввода и записать другую стратегию прохождения. В конце, после просмотра альтернативной стратегии ставите новый Маркер с Заметкой в духе "тут я прошёл уровень понизу" и следует сохранить текущее ответвление мувика в новую Закладку. Теперь вы можете сохранить проект и выключить Тасэдитор. На следующий день вы легко вспомните плюсы и минусы двух записанных стратегий прохождения, ещё даже не загружая их в Тасэдитор, а только наводя курсор мыши то на одну Закладку, то на другую. При наведении на первую Закладку будет появляться скриншот финального кадра уровня (где был поставлен Курсор Проигрывателя при создании первой Закладки) и надпись "тут я прошёл уровень поверху", а при наведении на вторую Закладку будет тоже появляться скриншот финального кадра уровня (где был оставлен голубой курсор при создании второй Закладки) и надпись "тут я прошёл уровень понизу". В данном случае по скриншоту трудно отличить два ответвления, т.к. обе стратегии заканчиваются в одном и том же месте игры. А по текстовым описаниям это сделать легко.
+По умолчанию эта опция включена. Если отключить, текстовые описания не будут появляться при наведении.
+Рекомендуется включить эту функцию, если вас не раздражают всплывающие текстовые поля.
+ +View -> Enable Hot Changes
+Включает и отключает функцию Горячих Правок.
+По умолчанию эта опция включена. Если отключить, то символы установленных нажатий кнопок на Piano Roll будут отображаться только стандартным чёрным цветом. Если включить, то у каждого символа будет своя степень "горячести", зависящая от того, как давно была изменена соответствующая клетка в Piano Roll. Более горячими являются символы, установленные недавно. Они отображаются более ярким оттенком красного цвета. По мере уменьшения горячести цвет символа постепенно темнеет и переходит в стандартный чёрный.
+Всего Тасэдитор поддерживает 15 оттенков горячести + нулевой чёрный. Когда вы меняете состояние ячейки Ввода, ей присваивается максимальное значение горячести (15), а все ячейки, изменённые перед этим, остывают на 1 единицу. Таким образом, по одному взгляду на Piano Roll сразу понятно, какие изменения были произведены только что, какие перед этим, какие недавно, а какие давно.
+Благодаря Горячим Правкам можно видеть недавно удалённые нажатия – на их месте вместо пустой клетки отображается чёрточка соответствующего цвета. По мере редактирования другого Ввода цвет этой чёрточки будет остывать, и после 15 посторонних правок чёрточка окончательно исчезнет.
+Такие же чёрточки будут показывать место вставки новых кадров посреди мувика, чтобы пользователю было проще ориентироваться в Вводе.
+Рекомендуется включить эту функцию, чтобы повысить удобство работы в Тасэдиторе. Теоретически, даже скорость работы должна повыситься, так как вам придётся меньше вспоминать, какое действие было совершено полминуты назад. Конечно, даже без Горячих Правок можно легко восстановить в уме цепочку прошедших событий с помощью отката Истории (несколько нажатий Ctrl + Z), а затем вернуть мувик обратно (столько же нажатий Ctrl + Y). Но в этом случае возможно нежелательное усечение Гринзоны из-за изменения Ввода. Так что лучше просто оставить Горячие Правки включенными.
+Единственным минусом этой функции является тот факт, что карта Горячих Правок сохраняется в Журнале Истории и в FM3-файле проекта, увеличивая занимаемый объём памяти.
+ +View -> Follow undo context
+При откатах Истории (undo) эта функция автоматически скроллирует Piano Roll к месту совершения изменений. На кадре, где произведено изменение, на короткое время появляется фиолетовая указка, чтобы акцентировать внимание пользователя на произведённых изменениях мувика.
+По умолчанию эта опция включена. Если отключить, то Piano Roll не будет самостоятельно скроллироваться к месту изменений.
+Рекомендуется включить эту функцию, чтобы было легче отслеживать глазами отменяемые правки. Обычно после отката требуется сразу же внести подобные правки на том же кадре или рядом с ним, поэтому автоматический скроллинг в большинстве случаев полезен.
+ +View -> Follow Marker Note context
+При редактировании текста Заметки эта функция автоматически скроллирует Piano Roll к Маркеру этой Заметки. Например, когда вы щёлкаете по верхнему текстовому полю, чтобы начать редактирование Заметки Маркера над Курсором Проигрывателя, Piano Roll перескакивает на этот Маркер, чтобы вы могли видеть его контекст (соседние Маркеры и Ввод). А при щелчке по нижнему текстовом полю (Заметка Маркера над Курсором Выделения) Piano Roll скроллируется к Маркеру над Курсором Выделения. Таким образом вы можете увидеть окружение нужного Маркера, отредактировать текст его Заметки, а потом вернуться к редактированию Ввода.
+По умолчанию эта опция включена. Если отключить, то Piano Roll не будет самостоятельно скроллироваться к Маркерам при редактировании их Заметок.
+Рекомендуется включить эту функцию, чтобы лучше ориентироваться в Маркерах.
+На этом настройка внешнего вида программы завершена. При дальнейшей работе вам вряд ли понадобится перенастраивать эти галочки.
+Теперь откройте пункт меню "Config" (Конфигурация). Здесь уже находятся опции, существенно влияющие на ход работы в Тасэдиторе. Перенастройка некоторых из них вам может понадобиться неоднократно.
+ +Config -> Set Greenzone capacity
+Определяет максимальный объём Гринзоны. Гринзона используется для упрощения навигации Курсором Проигрывателя, позволяя ТАСеру мгновенно возвращаться на любой ранее проигранный кадр мувика. Естественно, для запоминания информации Гринзоне требуется много оперативной памяти, а также много места на диске для сохранения FM3-проекта.
+Чем больше зелёных и красных кадров в Piano Roll, тем больше памяти занимает Гринзона. Для большинства NES-игр на 1 кадр уходит примерно по 10 килобайт. Проекты больших мувиков могут занимать несколько сотен мегабайт. Это сказывается на времени загрузки/сохранения проекта.
+Для уменьшения объёма требуемой памяти Тасэдитор использует некоторые ухищрения. В частности, производит регулярную очистку хвоста Гринзоны, забывая наиболее дальние от Курсора Проигрывателя участки. Очистка старых кадров не означает, что Гринзона на этих кадрах становится недоступной, и что все эти кадры становятся вновь белыми. Это было бы слишком неудобно, ведь при перетаскивании Курсора Проигрывателя на белую строку Piano Roll вам придётся ждать, пока эмуляция добежит от начала мувика до этого кадра.
+Чтобы не допускать неудобства и при этом всё-таки освобождать память от старых участков Гринзоны, в Тасэдиторе применяется постепенное разреживание хвоста Гринзоны.
+Внешне это выглядит примерно как на картинке справа: голубой курсор бежит вниз по Piano Roll в голове Гринзоны, оставляя за собой зелёные строки, а далеко вверху над ним постепенно очищаются некоторые старые строки (становясь бледно-зелёными, но всё-таки не белыми). Удаляются не все кадры, ставшие слишком дальними от Курсора Проигрывателя, а только некоторые из них. Сначала удаляется каждый чётный кадр, затем каждые три из четырёх, ещё дальше – каждые семь из восьми, в конце – 15 из 16-ти.
+Таким образом получается, что хвост Гринзоны содержит в себе множество пустот, и чем дальше, тем пустоты становятся больше. Если вы захотите попасть на кадр внутри пустого участке Гринзоны, вам придётся подождать, пока эмуляция добежит до него от ближайшего заполненного кадра Гринзоны. Но так как ближайший заполненный кадр Гринзоны идёт через каждые 2 или 4 кадра, ожидание продлится лишь сотую долю секунды, так что вы вряд ли заметите разницу между прыжком на заполненный кадр Гринзоны (мгновенный переход) и на очищенный кадр в хвосте Гринзоны (добегание за долю секунды).
+С помощью настройки "Set greenzone capacity" вы можете указать, сколько кадров Гринзоны, начиная с её головы, должны оставаться нетронутыми при очистке хвоста. Например, на картинке справа это число равно 8.
+Выбираете подпункт "Set greenzone capacity", появляется окошко для ввода числа, вводите 100 и нажимаете OK. Это означает, что вверх от текущего положения голубого курсора первая сотня кадров Гринзоны не будет очищаться. На этом пространстве любое перемещение Курсора Проигрывателя будет мгновенным, и вы можете перетаскивать голубой курсор и использовать обратную перемотку с максимальным удобством. После первой сотни начнётся удаление каждого второго кадра – вы заметите чередование зелёных и бледно-зелёных строк на Piano Roll. Это чередование продлится на протяжении 200 кадров. На этом пространстве перемещение Курсора Проигрывателя тоже будет практически мгновенным.
+Таким образом, Гринзона будет способна охватить 100 + 200 = 300 кадров, хотя в памяти хранится лишь информация о 100 + 100 = 200 кадров. Дальше на протяжении ещё 400 кадров будут чередоваться одна заполненная строка и три очищенных, и так далее. В итоге общий объём Гринзоны может занимать в памяти 500 кадров (чуть больше 5 мегабайт), но при этом в зоне доступа будет оставаться область в 3100 кадров (чуть меньше минуты).
+По умолчанию объём Гринзоны составляет 10000 кадров. Этого должно быть достаточно для большинства ТАСов. При желании вы можете увеличить или уменьшить это значение. В реальной работе рекомендуется использовать значение не ниже 1000, так как дальнейшая экономия будет незначительной. Желательно ставить такое значение, чтобы в окрестностях оптимизируемого участка Гринзона всегда оставалась без пустот.
+Минимальное значение этого параметра равно единице (исключительно для тестов, ТАСить при таком значении просто невыносимо), максимальное значение – 50000 кадров.
+ +Config -> Set max undo levels
+Определяет количество уровней отката изменений. Столько раз вы сможете нажать Ctrl + Z, возвращая проект на предыдущие состояния. И столько же строк (плюс одна текущая) содержится в Журнале Истории.
+Журналу Истории требуется много оперативной памяти и немного места на диске для сохранения FM3-проекта. Весь Журнал сохраняется в файле проекта в сжатом виде, сжатие производится постепенно во моменты простоев в работе, незаметно для пользователя. Благодаря этому на время сохранения проекта объём Журнала Истории влияет незначительно.
+С помощью этой настройки можно регулировать используемый объём памяти. По умолчанию установлено 100 уровней отката. Это значит, что вы сможете отменить 100 совершённых с мувиком действий. Это не так уж и много, ведь в реальном ТАСинге действия совершаются очень быстро, а время летит незаметно. Если в вашем компьютере более 2GB оперативной памяти, можете увеличить значение "max undo levels" вплоть до максимально возможного – 1000 уровней.
+ +Config -> Set Autosave period
+Определяет, сколько минут несохранённые изменения могут оставаться без присмотра.
+В Тасэдиторе реализована функция автоматического сохранения проекта на диск. Раньше ТАСерам не требовалось периодически сохранять на диск текущее состояние их ТАСа, так как мувик сохранялся в каждом использованном сэйве. Теперь же имеет смысл время от времени нажимать Ctrl + S, чтобы сохранить на диск состояние проекта – весь Ввод, Маркеры, Закладки, всю Гринзону, Журнал Истории и т.д. Тогда при последующем открытии FM3-файла в Тасэдиторе вы окажетесь в той же самой обстановке, в которой прервали работу в прошлый раз. Даже Piano Roll будет указывать на тот же самый участок мувика.
+Так как сохранение проекта может занимать несколько секунд, нет смысла делать это слишком часто. По умолчанию установлено значение "autosave period" в 15 минут. Это означает, что если вы совершили в проекте какие-нибудь существенные изменения (например, изменили Ввод, и в заголовке окна Тасэдитора появилась звёздочка), а потом в течение 15 минут так и не сохранили проект на диск, Тасэдитор либо напомнит вам об этом, либо запустит сохранение самостоятельно (если установлена галочка "Silent autosave").
+Функция автоматического сохранения начинает работать только после того, как проекту присвоено файловое имя на диске.
+Вы можете отключить эту функцию, установив значение 0. Но делать это не рекомендуется, так как теоретически возможна потеря данных в случае непредвиденного сбоя. Рекомендуется поставить значение 10 минут. Максимально возможное значение этого параметра равно 1440 минут или 24 часа (1 сутки).
+Это были числовые настройки Тасэдитора, далее следуют галочки.
+ +Config -> Silent Autosave
+Определяет поведение функции автоматического сохранения проекта.
+Если галочка установлена, по истечении периода автосохранения Тасэдитор молча сохраняет проект на диск под тем же именем.
+Если галочка снята, по истечении периода автосохранения Тасэдитор выводит на экран диалог сохранения файла (Save As), где вы можете либо подтвердить сохранение, либо отменить его – тогда Тасэдитор подождёт ещё один период, прежде чем напомнить о наличии несохранённых данных.
+По умолчанию галочка установлена. Если вы хотите полностью контролировать ситуацию, например, не допустить сохранение случайных изменений, внесённых при просмотре чужого FM3-проекта, можете снять эту галочку. Но для повышения комфортности ТАСинга рекомендуется её включить.
+ +Config -> Autofire Pattern skips Lag
+Учитывает лаг при использовании шаблонов (Alt + щелчки по Вводу или по Заголовку Piano Roll).
+Если галочка снята, при использовании шаблона появится последовательность нажатий и отпусканий, в точности соответствующая выбранному шаблону (например, для шаблона "Alternating (1010...)" нажатия будут строго чередоваться с отпусканиями).
+Если галочка установлена, при использовании шаблона будет учитываться информация о лаге из Гринзоны, и последовательность нажатий/отпусканий в Списке Piano Roll может визуально отличаться от шаблона (на лаговых кадрах будут дополнительные пропуски, которых не было в шаблоне).
+Красные строки Гринзоны обозначают, что игра не опрашивает Ввод в этих кадрах, поэтому нет смысла устанавливать в них нажатия. Более того, так как эти кадры считаются "потерянными", нужно пропускать их для правильного подсчёта пустых расстояний между нажатиями. Например, если между двумя нажатиями должно пройти ровно три пустых кадра (шаблон вида "10001"), но посреди участка оказался один кадр лага, то требуется добавить ещё один пустой кадр (100001, т.е. четыре пустых кадра посередине).
+Для этого нужно выделить участок внутри Гринзоны и сделать Alt + щелчок по нужной кнопке в Заголовке Piano Roll. В выделенной области появится последовательность нажатий и отпусканий, которая визуально может отличаться от выбранного шаблона, но при проигрывании мувика она будет воспринята игрой именно как последовательность по этому шаблону.
+Если после изменения Ввода лаговые кадры появились на других местах посреди шаблона, нужно восстановить выделение на тех же кадрах (Ctrl + Q) и сделать ещё один Alt + щелчок по этой же кнопке в Заголовке Piano Roll.
+По умолчанию эта галочка установлена. Рекомендуется оставить её включенной, так как в большинстве случаев ТАСеру нужно ориентироваться не на визуальное отображение последовательности нажатий в Piano Roll, а на то, как воспринимает Ввод сама игра.
+ +Config -> Draw Input by dragging
+Позволяет рисовать Ввод, зажав левую кнопку мыши и перемещая курсор мыши над поверхностью Piano Roll.
+По умолчанию эта функция подключена, и вы можете быстро нарисовать длительное зажатие какой-нибудь кнопки, либо стереть часть Ввода ластиком. При щелчке по пустой клетке начинается рисование Ввода, при щелчке по заполненной клетке начинается стирание Ввода.
+Рисование/стирание Ввода по умолчанию ограничено одним столбцом (чтобы можно было совершать размашистые движения мышью при установке длительных зажатий). Однако, если после начала рисования зажать клавишу Shift, вы сможете рисовать/стирать Ввод по всем колонкам (это не столько практично, сколько весело).
+Если снять эту галочку, вы сможете устанавливать только отдельные нажатия щелчками по клеткам Ввода в Piano Roll, а рисование будет отключено. Это может пригодиться, если у вас дрожат руки, и способ рисования Ввода вам не подходит. В остальных случаях рекомендуется включить эту функцию.
+ +Config -> Combine consecutive Recordings/Draws
+Объединяет последовательную Запись Ввода в один пункт журнала Истории. А также объединяет в один пункт весь Ввод, нарисованный одним нажатием кнопки мыши.
+По умолчанию галочка снята. В режиме Recording каждый записанный кадр будет создавать отдельный пункт в Журнале Истории, и вы сможете откатывать изменения (с помощью Ctrl + Z) для каждого кадра. А при рисовании Ввода (нажать левую кнопку мыши и водить курсором мыши по Piano Roll) каждый новый штрих будет создавать новый пункт в Журнале Истории, и вы сможете откатывать штрихи поодиночке.
+Однако в реальной работе такая точность отката не требуется, так как во время Записи проще вернуться Курсором Проигрывателя на предыдущий кадр (хоткеем Rewind one frame) и переписать его, чем откатывать изменения и потом всё равно возвращаться на предыдущий кадр для Записи нового Ввода. В случае рисования обычно требуется либо откатить весь нарисованный Ввод, либо просто подтереть часть нарисованного Ввода, не прибегая к Ctrl + Z. Поэтому для экономии места в Журнале Истории рекомендуется включить эту галочку.
+ +Config -> Use 1P keys for all single Recordings
+Позволяет записывать Ввод любых джойстиков, пользуясь только кнопками первого джойстика. Эта функция используется в традиционном методе при Записи Ввода способом мультитрекинга, когда ТАСер сначала записывает на нужном участке Ввод первого игрока (при этом любые случайные нажатия на кнопки второго джойстика игнорируются), а затем Ввод второго игрока.
+Благодаря мультитрекингу ТАСер освобождается от необходимости нажимать на кнопки двух джойстиков одновременно. А благодаря опции "Use 1P keys for all single Recordings" ТАСер может вообще не настраивать второй джойстик, не назначать кнопки второго игрока на отдельные клавиши. Когда галочка установлена, при Записи второго игрока будут использоваться клавиши, назначенные на кнопки первого джойстика.
+По умолчанию галочка включена. Если отключить эту функцию, то при Записи второго игрока будут использоваться настройки кнопок второго джойстика.
+Рекомендуется включить эту функцию, чтобы сэкономить место на клавиатуре.
+ +Config -> Use Input keys for Column Set
+Позволяет изменять Ввод в выделенных кадрах с помощью нажатия соответствующих кнопок джойстика.
+Эта функция предназначена для ускорения редактирования Ввода. Для массовой установки/снятия нажатий пользователь либо рисует длинный ряд нажатий, либо выделяет ряд кадров и щёлкает по нужному символу в Заголовке Piano Roll – символ вспыхивает, а Ввод в данном столбце изменяется сразу во всех выделенных кадрах.
+Если установлена галочка "Use Input keys for Column Set", вместо щелчка по Заголовку достаточно нажать желаемую кнопку на самом джойстике/клавиатуре – будет тот же результат со вспышкой.
+По умолчанию эта функция отключена. Рекомендуется включить её, если вы пользуетесь преимущественно новыми методами ТАСинга, а не записываете Ввод традиционным методом. При использовании Записи вам нужно либо отключить эту функцию, либо просто снять Выделение, чтобы при нажатиях кнопок джойстика не срабатывала функция установки кнопок в выделенных кадрах.
+Благодаря этой функции можно записывать кнопки с джойстика даже при отключенном режиме Recording. Нужно поставить Курсор Выделения на кадр, где требуется вписать Ввод, и нажимать кнопки на джойстике, чтобы записать их в мувик. Режим мультитрекинга в данном случае действует точно так же, как при обычной Записи. Например, если установлена радиокнопка 2P, при нажатии кнопки A будет установлен Ввод в колонке "A" второго джойстика.
+ +Config -> Bind Markers to Input
+Привязывает Маркеры к Вводу. Если галочка установлена, то функции редактирования Ввода оказывают также влияние и на Маркеры. Например, вставка пустых кадров сдвигает вниз не только нижестоящий Ввод, но и все нижестоящие Маркеры.
+Обычно Маркеры устанавливаются на определённые события, происходящие в игре. Когда ТАСер улучшает свой предыдущий результат и доходит до этого места в игре быстрее, чем раньше, то соответствующий Маркер (установленный ещё при первой попытке) должен теперь указывать на более ранний кадр. Нередко приходится перетаскивать его вручную. Но благодаря привязке Маркеры самостоятельно смещаются при внесении изменений в Ввод, и ручная перестановка Маркеров в этом случае требуется крайне редко.
+При переборе вариантов прохождения участка имеет смысл работать с отвязанными Маркерами, чтобы Маркер, специально установленный в конце участка, всегда оставался на кадре, который требуется обогнать. Впрочем, в такой ситуации вместо Маркера предпочтительнее использовать Закладку.
+Также отвязанные Маркеры могут понадобиться в случаях, когда требуется изменить Ввод, не трогая находящиеся на этих же кадрах Маркеры. Например, когда нужно удалить часть Ввода, оставив старые Маркеры на своих местах.
+А при пересинхронизации участков удобно привязать Маркеры к Вводу, чтобы сосредоточиться только на синхронизации Ввода. Например, из-за найденного улучшения в первом уровне игры вам придётся передвинуть весь Ввод второго уровня на дюжину кадров вверх. Благодаря привязке Маркеры также сдвинутся на дюжину кадров вверх, встав на соответствующие события второго уровня.
+По умолчанию галочка установлена. Рекомендуется большую часть времени работать с привязанными Маркерами, при необходимости отвязывая их.
+Для удобства пользователя Тасэдитор подсвечивает привязанные Маркеры в Piano Roll более бледным жёлтым цветом, а отвязанные – более насыщенным жёлтым.
+ +Config -> Empty new Marker Notes
+Определяет текст Заметок по умолчанию. Если галочка установлена, при создании нового Маркера его Заметка будет пустой. Если галочка снята, при создании нового Маркера текст для его Заметки копируется из текста Заметки вышестоящего Маркера.
+По умолчанию галочка включена. Рекомендуется оставить её включенной, но не забывать вводить текст для важных Маркеров, чтобы не все Маркеры были с пустыми Заметками.
+ +Config -> Old control scheme for Branching
+Имитирует ограничения традиционного метода ТАСинга, связанные с управлением Закладками (сэйвами).
+По умолчанию галочка снята, и клавиши F1-F10 используются для загрузки ответвления соответствующей Закладки, а цифровые клавиши 1-0 используются для прыжка возвратить голубым курсором на кадр Закладки без смены мувика.
+Если же эту галочку установить, в Списке Закладок появится красная рамка вокруг цифры текущего слота, нажатия цифровых клавиш 1-0 будут переключать текущий слот, а нажатия клавиш F1-F10 будут срабатывать в зависимости от режима Записи. Когда режим Записи выключен, нажатия функциональных клавиш осуществляют прыжок на кадр Закладки, а когда Запись включена, нажатия F1-F10 загружают ответвление Закладки.
+Эта настройка предназначена для помощи старым ТАСерам плавно перейти к ТАСингу в Тасэдиторе.
+Рекомендуется не устанавливать эту галочку, так как новая схема управления Закладками гораздо удобнее (хотя бы тем, что она не требует постоянного переключения режимов).
+ +Config -> Branches restore entire Movie
+Определяет способ восстановления ответвлений при прыжках на Закладки во времени.
+По умолчанию галочка установлена, и при загрузке Закладки весь текущий мувик полностью заменяется на мувик, сохранённый в ответвлении Закладки.
+Если же галочка отсутствует, то при загрузке Закладки текущий мувик полностью заменяется на мувик из ответвления, но сразу усекается, начиная с кадра Закладки. Таким образом имитируется загрузка сэйвов в традиционном методе ТАСинга: из сэйва восстанавливается только та часть мувика, которая предшествует Курсору Проигрывателя, а остальные кадры (начиная с голубого курсора и до конца мувика) не загружаются. Это имеет смысл при ТАСинге традиционным методом, так как после загрузки сэйва ТАСер обычно сразу дописывает новый Ввод на место голубого курсора, и незачем загружать из сэйва данные, которые тут же будут перезаписаны. Но в Тасэдиторе мувик редактируется независимо от положения Курсора Проигрывателя, поэтому можно загружать из Закладки всё содержимое мувика от начала до конца, невзирая на то, что голубой курсор может быть посередине.
+Рекомендуется не убирать эту галочку, если вы не планируете ограничиваться традиционным методом ТАСинга.
+ +Config -> HUD in Branch screenshots
+Определяет способ съёмки скриншотов для Закладок.
+Если галочка установлена, берётся полный снимок экрана, включая иконки и сообщения самого эмулятора, Lua-вывод и прочие данные поверх изображения игры. Если галочка снята, в Закладку попадает только игровое изображение.
+По умолчанию галочка включена. Рекомендуется оставить её включенной, чтобы использовать Lua-вывод при сравнении скриншотов двух альтернативных стратегий прохождения участка.
+ +Config -> Autopause at the end of Movie
+Автоматически останавливает проигрывание мувика, если оно началось не с последнего кадра.
+При просмотре готового (или частично готового) мувика обычно не требуется выходить за пределы уже записанного Ввода. Это требуется только для расширения границ мувика, когда, например, записан первый уровень, и нужно начинать запись второго.
+Поэтому галочка "Autopause at the end of Movie" по умолчанию установлена, и после просмотра мувика эмулятор автоматически ставится на паузу. Если снять эту галочку, то эмулятор не будет останавливаться после окончания Ввода, а будет продолжать проигрывание пустого места в конце мувика, бесконечно увеличивая размеры мувика, пока пользователь не нажмёт клавишу Pause или среднюю кнопку мыши.
+Рекомендуется оставить эту галочку включенной.
+Теперь вы ознакомлены со всеми настройками Тасэдитора, осталось рассмотреть некоторые настройки эмулятора FCEUX, которые могут потребоваться ТАСеру в работе.
+Если вы планируете ТАСить традиционным методом, обязательно нужно назначить кнопки джойстика первого игрока на такие клавиши клавиатуры, которые удобно нажимать одновременно с нажатием клавиши Frame Advance. Хотя FCEUX поддерживает настройку кнопок виртуального NES-джойстика на кнопки реального PC-геймпада, рекомендуется для ввода использовать именно клавиатуру, чтобы помимо игровых кнопок иметь быстрый доступ ещё и к Frame Advance, Frame Rewind, Pause, а также к 10 слотам сохранения.
+При правильной работе в Тасэдиторе Запись требуется не так часто, а в тех случаях, когда она требуется (например, при записи тестовой версии прохождения уровня), не обязательно иметь быстрый доступ к функциональным клавишам. Поэтому можно вынести игровое управление на USB-геймпад, если он у вас есть.
+Кнопки виртуального джойстика настраиваются в FCEUX следующим образом. В меню эмулятора выбрать Config -> Input. В появившемся окне выбрать из левого ниспадающего списка пункт Gamepad (обычно он уже выбран). Щёлкнуть по левой кнопке Configure (нам требуется настроить только первый джойстик). В появившемся окне щёлкнуть по кнопке Up, появится маленькое окошко, теперь нужно дважды нажать на клавиатуре клавишу, которая должна отвечать за виртуальную кнопку Вверх. Первое нажатие назначит клавишу, второе подтвердит выбор (можно вместо второго нажатия просто щёлкнуть по кнопке Close). Далее нужно проделать то же самое с остальными виртуальными кнопками – Down, Left, Right, Select, Start, B, A. После настройки всех восьми кнопок первого джойстика (Virtual Gamepad 1) можно закрыть окно Gamepad, а затем и окно Input Configuration.
+Проверить все назначенные кнопки можно либо во время игры, либо в самом Тасэдиторе – при их нажатии должны загораться зелёным светом буквы в Заголовке Piano Roll. Кроме того, если включить показ Ввода (FCEUX: Config -> Display -> Input Display -> 2 player), то видеть нажимаемые кнопки можно будет и на экране FCEUX.
+Помимо записи обычной игровой сессии кнопки виртуального джойстика можно использовать для быстрой установки Ввода при редактировании (для этого нужно установить галочку в меню Тасэдитора: Config -> Use Input keys for Column Set). Выделите ряд кадров, где нужно изменить Ввод, и нажмите клавишу, назначенную на кнопку виртуального джойстика, – Ввод этой кнопки в выделенных кадрах изменится.
+Если вы назначаете кнопки виртуального геймпада на клавиши клавиатуры, убедитесь, что на эти же клавиши не установлены горячие клавиши эмулятора и Тасэдитора. Список хоткеев, назначенных по умолчанию можно увидеть в Справочнике.
+Некоторые хоткеи в FCEUX не имеют значений по умолчанию (то есть ещё не назначены ни на одну клавишу), и перед началом работы желательно их настроить. Для этого в меню эмулятора нужно выбрать Config -> Map Hotkeys. Появится окно со списком всех возможных хоткеев эмулятора. Ориентируясь по названию команды, выберите нужный хоткей и сделайте двойной щелчок по нему, а затем нажмите желаемую клавишу на клавиатуре.
+Во-первых, найдите в списке пункт "Open TAS Editor" и выберите его двойным щелчком. Появится окно, тут нужно нажать клавишу, которая будет в дальнейшем запускать Тасэдитор.
+Во-вторых, найдите пункт "Reload ROM or TAS Editor Project" и настройте его, либо запомните комбинацию, настроенную по умолчанию (Ctrl + F1). Это поможет вам каждый раз возвращаться к прерванной работе без лишних проволочек – достаточно будет запустить FCEUX, сразу нажать хоткей Reload ROM, затем хоткей Open TAS Editor, потом опять Reload ROM (сработает уже как Reload TAS Editor Project). В итоге всего за секунду вы вернётесь в то же состояние, в котором оставили работу вчера.
+В-третьих, присмотритесь к хоткеям "Frame Advance" и "Frame Rewind". Эти хоткеи нужны для навигации Курсором Проигрывателя. По умолчанию они настроены на клавиши "\" и "Backspace". Вы можете перенастроить их на более удобные клавиши, либо пользоваться вместо них колесом мыши для покадрового перемещения Курсора Проигрывателя.
+В-четвёртых, присмотритесь к группам хоткеев "Savestate Slot #", "Save State to Slot #" и "Load State from Slot #". В традиционном методе они требуются постоянно (для перезаписи), в Тасэдиторе уже реже (только для Закладок). Рекомендуется оставить их значения по умолчанию.
+В-пятых, обратите внимание на хоткеи "Speed Down" и "Speed Up". Возможно, стоит переназначить их на серые клавиши "-" и "+" на Numpad'е. Однако в данной документации упоминаются их значения по умолчанию (белые клавиши "-" и "=" под F9 и F10).
+Для включения/выключения режима Записи используется хоткей "Toggle Read-Only", рекомендуется оставить его значение по умолчанию (клавиша "Q"). Для переключения режимов мультитрекинга используется хоткей "Switch current Multitracking mode" (по умолчанию клавиша "W").
+Хоткеи "Pause" и "Restore Playback" по умолчанию назначены на клавиши "Pause/Break" и "Пробел", но в большинстве случаев вместо них проще использовать среднюю кнопку мыши, а клавишу "Пробел" можно переназначить на что-нибудь другое.
+Напоследок стоит запомнить хоткей "Cancel Seeking" (клавиша "Esc" по умолчанию). Нажатие этой клавиши является аналогом щелчка по прогрессбару Тасэдитора – если Проигрыватель занимался добеганием к целевому кадру, добегание будет отменено.
+Остальные хоткеи почти не используются при работе в Тасэдиторе. Некоторые хоткеи FCEUX вообще не действуют при запущенном Тасэдиторе. Например, хоткей "Open ROM" не сработает – необходимо загрузить РОМ до запуска Тасэдитора. Полный список хоткеев, работающих при запущенном Тасэдиторе, можно найти в Справочнике.
+В следующей главе раскрываются особые возможности программы. Вы можете отложить чтение этой главы до тех пор, пока не освоитесь с основными возможностями. В любом случае, сейчас вы уже вполне готовы к продуктивной работе в Тасэдиторе.
+Created with the Personal Edition of HelpNDoc: Full featured Documentation generator
+Интерфейс программы
+В этой главе описывается интерфейс программы и способы взаимодействия с ней.
+При описании используется множество специфических терминов, так что перед началом изучения рекомендуется прочесть Глоссарий. Также желательно запустить Тасэдитор прямо сейчас и всё время проверять описываемое на практике, параллельно с чтением.
+Для входа в Тасэдитор нужно проделать следующее:
+1) +запустить эмулятор FCEUX
+2) +загрузить РОМ любой игры (File -> Open ROM)
+3) +открыть окно Тасэдитора (Tools -> TAS Editor)
+После запуска Тасэдитора игра сбрасывается, а эмулятор автоматически ставится на паузу. Во время ТАСинга эмулятор должен стоять на паузе, чтобы игра не подгоняла и не отвлекала от анализа информации.
+При ТАСинге в Тасэдиторе значительную часть рабочего стола занимает окно самого Тасэдитора. Окно эмулятора используется для вывода изображения, его размер желательно увеличить вдвое, чтобы даже мельчайшие детали были заметными при беглом взгляде. В процессе работы вам часто придётся переводить взгляд то на окно Тасэдитора (на содержимое Piano Roll), то на окно эмулятора. Поэтому желательно разместить эти окна вплотную. На оставшемся месте рабочего стола вы можете расположить окна просмотрщика памяти, Луа-консоль и т.д.
+Размер окна Тасэдитора можно изменять, перетаскивая границы окна с помощью мыши. Выбранный пользователем размер и положение окна запоминается при выходе из эмулятора и восстанавливается при следующем запуске программы.
+В заголовке окна отображается имя программы (TAS Editor) и имя текущего проекта. Если в проекте имеются несохранённые изменения, в конце этой надписи отображается звёздочка. Кроме того, в режиме Записи Ввода в заголовке окна появляется слово "Recording".
+Меню программы такое же, как в текстовых редакторах типа Notepad.
+Пункт меню File отвечает за все файловые операции Тасэдитора – создание нового проекта, открытие существующего файла, сохранение на диск, импорт и экспорт данных. Также в этом пункте есть подменю "Recent", в котором запоминаются пути к недавно использованным проектам, это можно использовать для быстрой загрузки последнего проекта.
+В пункте меню Edit содержатся функции, позволяющие редактировать мувик так, как если бы он был обычным текстовым или табличным файлом. Большинство этих функций можно вызывать стандартными комбинациями клавиш, такими как Ctrl + C, Ctrl + V и т.д. Они будут рассмотрены далее.
+С помощью пункта меню View можно настроить внешний вид программы. Кроме того, через этот пункт открывается окно "Find Note", предназначенное для поиска текста в Заметках, об этом будет рассказано позже. Пока вы не прочитали 5 главу этого учебного курса, рекомендуется не менять настройки, выставленные по умолчанию.
+В пункте меню Config находятся все остальные настройки программы – такие как таймер автоматического сохранения проекта, количество уровней отката и другие возможности, назначение которых будет раскрыто по ходу обучения. Для начала рекомендуется не менять эти настройки.
+Наконец, пункт меню Help содержит ссылку на данное Руководство и диалог "О программе" (About). Кроме того, в меню Help вы можете отключить/включить всплывающие подсказки.
+С правой стороны этого меню отдельно располагается пункт Pattern, показывающий название текущего шаблона. Шаблоны представляют собой заготовленные последовательности нажатий и отпусканий для одной кнопки. Их использование позволяет в некоторых случаях ускорить создание Ввода. Подробнее о шаблонах будет рассказано в 6 главе.
+
|
+
Created with the Personal Edition of HelpNDoc: Free HTML Help documentation generator
+Справочник
+Расшифровка большинства терминов, используемых в сфере ТАСинга
+Полный обзор всех нюансов управления в программе
+ + +Полный обзор всех способов навигации по мувику
+ + +Полный обзор всех возможных типов модификации мувика
+ + +Полный обзор всех функций библиотеки taseditor
+Подборка вероятных вопросов и ответов на них
+Свод типовых задач при поиске кратчайшего пути на участках
+Created with the Personal Edition of HelpNDoc: Create HTML Help, DOC, PDF and print manuals from 1 single source
+Полуавтоматический ТАСинг
+Этот метод является дальнейшим развитием идей нелинейного метода ТАСинга.
+Во многих случаях ТАСеру требуется сразу видеть результат своих изменений Ввода. В идеале он должен осознавать последствия своего решения одновременно с принятием решения. Но в реальности драгоценные мгновенья уходят на введение своего решения в компьютер и последующую навигацию Курсором Проигрывателя от кадра изменения Ввода до кадра конца участка.
+Третий метод ТАСинга позволяет переложить навигацию Курсором Проигрывателя на Тасэдитор и сосредоточить внимание только на редактировании. Тасэдитор будет мгновенно реагировать на каждое изменение Ввода и сразу отображать его результат на экране FCEUX. Благодаря тому, что вы ощущаете воздействие каждого щелчка на игровой процесс, достигается высочайший уровень взаимосвязи между ТАСером и игрой. При таком тесном взаимодействии не только ТАСер управляет игрой, но и игра направляет действия ТАСера в нужное русло.
+На практике такой высокий уровень взаимозависимости между ТАСером и игрой требуется далеко не всегда. Ведь это суживает спектр мыслей ТАСера, не позволяя взглянуть на игру свысока и применить к ней логику из других игр или других сфер жизни. Однако, когда текущий участок небольшой, и все факторы оптимальности известны (требуется только найти их идеальное сочетание), можно отвлечься от всего остального и полностью сфокусироваться на переборе вариантов.
+Этот метод ТАСинга назван полуавтоматическим, потому что получилось нечто среднее между использованием автоматических ботов и ручным ТАСингом. Само по себе использование ботов не обладает высокой степенью гибкости, присущей человеческому мышлению. С другой стороны, ручной перебор (зацикленное тестирование множества однотипных вариантов Ввода) угнетает своей рутинностью.
+Идея третьего метода ТАСинга в том, что вы редактируете Ввод, а Тасэдитор запускает и останавливает просмотр участка. Курсор Проигрывателя автоматически возвращается на то место, откуда его сбросило в момент усечения Гринзоны.
+Режим Записи и галочка "Follow cursor" должны быть выключены. Галочка "Auto-restore last position" должна быть включена. Галочка "Turbo seek" по умолчанию отключена и включается при необходимости.
+Основное занятие ТАСера:
+1. +Проскроллировать Piano Roll к началу редактируемого участка мувика, доставить сюда Курсор Проигрывателя, определиться с целью. Полезно также отметить начало участка Маркером.
+2. +Приблизительно прикинуть кадр конца участка, доставить Курсор Проигрывателя на этот кадр и оставить его там, даже если на участке пока отсутствует Ввод, необходимый для достижения конечного события.
+3. +Предположить наличие ошибки на участке, взвесить имеющиеся факторы оптимальности и прикинуть способ исправления ошибки (как именно требуется изменить Ввод, на каких кадрах и т.д.).
+4. +Навигация курсором мыши к любому кадру мувика осуществляется почти мгновенно.
+5. +Редактировать участок мышью. После каждого вносимого изменения Курсор Проигрывателя будет автоматически проигрывать участок от первого изменённого кадра до текущего конца участка. При необходимости можно передвигать текущий конец участка, перемещая Курсор Проигрывателя вручную (колесом).
+6. +Продолжать редактирование, возвращаясь к пункту 4 или 3, пока целевое событие не наступит в рамках участка.
+7. +[необязательный пункт] Сохранить полученный вариант прохождения участка в любую свободную Закладку.
+8. +Сравнить полученный результат с лучшим результатом, используя критерий оптимальности. Если новый вариант оказался лучше (или если это ваш первый вариант прохождения участка), рекомендуется сохранить результат в Закладку 9. Слот 9 будет отвечать за хранение самого лучшего результата шлифовки участка. Если не сохранять лучший вариант в Закладку, он останется только в текущем мувике и в Журнале Истории.
+9. +Вернуться к пункту 3 и опробовать ещё варианты, до тех пор пока не иссякнут идеи по данному участку.
+10. +Когда идеи полностью иссякли, восстановить лучший вариант прохождения из Журнала Истории или из Закладки 9 в текущий мувик, определиться со следующим участком и вернуться к пункту 1.
+Основное отличие этого метода от простого нелинейного в том, что при редактировании участка Курсор Проигрывателя находится в конце участка, а не где-то в начале. При каждом усечении Гринзоны Курсор Проигрывателя автоматически добегает к концу участка, точнее, к тому месту, где был конец участка до изменения Ввода. Если после изменения Ввода кадр конца участка изменился, достаточно слегка передвинуть голубой курсор колесом мыши на пару кадров выше или ниже. А во многих случаях даже это не требуется, так как ТАСеру не всегда нужно знать конечный кадр участка, порой надо только увидеть цепочку событий, происходящих на участке в результате изменённого Ввода.
+Просмотр участка запускается после каждого промежуточного изменения Ввода, даже если вы ещё не закончили свою мысль и не собираетесь сравнивать итоговый результат с результатом предыдущего способа прохождения участка. Обычно во время увлечённого редактирования ТАСер не смотрит на экран FCEUX, продолжая щёлкать по Piano Roll, пока не воплотит свою мысль в виде большой кнопочной комбинации. А когда Ввод участка уже представляет интерес, ТАСер обращает внимание на экран эмулятора или Memory Watch, которые продолжают обновляться при каждом изменении Ввода на участке.
+Например, чтобы осуществить прыжок через яму, вы сначала рисуете длинное зажатие R на участке и даже не смотрите на экран FCEUX, где в это время Марио на бегу проваливается в яму. Вы дорисовываете нажатие кнопки A, а затем уже смотрите на экран эмулятора и стираете/дорисовываете дополнительные нажатия A, перемещая начало и длительность прыжка и наблюдая траекторию прыгающего персонажа.
+Таким образом, процесс шлифовки Ввода в данном методе представляет собой одновременный просмотр и редактирование участка. Так как ТАСер каждый раз мгновенно видит в эмуляторе результат своих действий, он почти сразу входит в тесный информационный контакт с игрой и начинает мыслить синхронно с её регулярными откликами. Игра начинает помогать ТАСеру принимать и отфильтровывать решения, начинает играть вместе с ним, а иногда даже за него. В результате можно потерять беспристрастность ума и пойти на поводу очевидных решений, поощряемых самой игрой. Поэтому не стоит использовать этот метод ТАСинга постоянно, рекомендуется чередовать его с предыдущим.
+Как и в предыдущем методе, здесь можно менять скорость добегания, получая различные вариации метода:
+1) +редактирование в реальном времени с постоянным тестированием изменений
+2) +редактирование при замедленной эмуляции с постоянным тестированием изменений
+3) +редактирование с мгновенным просмотром итога (турбо)
+ +Как и в третьей вариации нелинейного ТАСинга, здесь турбо создаёт психологическую ассоциацию между двумя отдалёнными событиями (началом и концом участка). Но теперь эта ассоциация многократно усиляется благодаря окончательному убиранию посредников – скоростной просмотр участка запускается ещё до отпускания кнопки мыши. Едва ТАСер щёлкает по какому-то кадру Piano Roll, он уже видит результат, который вообще-то наступает в игре через несколько секунд после нажатия кнопки.
++В качестве примера можно привести поиск первого кадра для нажатия кнопки Start. Во многих играх нажать эту кнопку можно раньше, чем отобразится графика на экране. Кроме того, нередко после срабатывания Start игра на некоторое время задумывается, ничем не подавая вид, что нажатие сработало. Только через секунду или две мы видим смену заставки и тем самым узнаём, что нажатие Start сработало.
+В традиционном методе на поиск самого первого кадра уйдёт 5-10 минут. В Тасэдиторе на это уходит менее минуты.
+Делается это так:
+● +Включаете галочку "Auto-restore last position" и "Turbo seek". Отключаете галочку "Follow cursor", чтобы Piano Roll не убегал вслед за Курсором Проигрывателя.
+● +Ставите пробное нажатие Start на кадре, где оно точно сработает, например, на кадр 100.
+● +Просматриваете срабатывание кнопки до момента, когда по изображению на экране уже понятно, что Start сработал (например, появился экран World 1-1). Допустим, это кадр 200. Оставляете Курсор Проигрывателя на этом месте – это и будет конец участка.
+● +Теперь удаляете своё пробное нажатие Start (в окне FCEUX тут же мигнёт и исчезнет экран World 1-1, и останется экран заставки, так как нажатия Start больше нет).
+● +Ставите нажатие Start на первый или второй кадр мувика, ещё до того, когда приставка начинает опрашивать джойстик. В окне FCEUX ничего не меняется, так как это нажатие не сработало.
+● +Зажимаете одной рукой Ctrl + Shift, другой начинаете периодически (раз в секунду или чаще – это зависит от мощности вашего компьютера) нажимать Insert. После каждого нажатия Ctrl + Shift + Insert символ кнопки Start отодвигается на один кадр вперёд, а в окне FCEUX вы видите, повлияло ли это нажатие на состояние игры в кадре 200, или не повлияло. Если у вас быстрый компьютер, то добегание голубого курсора до кадра 200 будет почти мгновенным, если же компьютер медленный, то придётся подождать около полсекунды (процесс добегания можно отслеживать по прогрессбару в разделе Playback).
+● +Пока нажатие Start, методично сдвигаемое вами вниз, не доходит до искомого кадра, окно FCEUX будет показывать заставку, но когда очередное нажатие Ctrl + Shift + Insert передвинуло Start на нужный кадр, в окне FCEUX появится экран World 1-1.
+● +Таким образом, вы обнаружили самый первый возможный кадр для нажатия Start. Номер этого кадра, скорее всего, будет намного меньше 100. Для уверенности можно тут же нажать Ctrl + Delete, чтобы сместить нажатие Start на предыдущий кадр и увидеть в окне FCEUX экран заставки, а затем нажать Ctrl + Z, чтобы вернуть Start на место и увидеть World 1-1.
+Точно так же можно очень быстро находить оптимальную длительность зажатия кнопки A для изменения высоты прыжка и приземления в нужной точке. Можно легко манипулировать удачей во многих играх. И вообще, удобство автоматического турбо-добегания наглядно проявляется в ситуациях, когда на участке действует всего один фактор оптимальности, и требуется быстро перебрать пару сотен однотипных вариантов.
+Полуавтоматический ТАСинг стимулирует меньше думать и больше экспериментировать. Во многих видеоиграх именно такой подход приводит к успеху, однако постарайтесь не увлечься комфортностью этого метода, забыв про остальные.
+Плюсы полуавтоматического ТАСинга:
++ Постоянная отдача позволяет на ходу корректировать свои решения и заранее отсекать в уме заведомо ошибочные комбинации Ввода. Это уменьшает количество требуемых исправлений и ускоряет рабочий процесс.
++ Мгновенная навигация к месту редактирования.
++ Возможность пропускать ненужные сцены и ассоциировать действие с итогом.
+Минусы метода:
+– Упор на мышиное управление.
+– Настойчивая отдача провоцирует ТАСера отсекать некоторые нелогичные, но потенциально выигрышные комбинации.
+Когда использовать: когда нужно отшлифовать участок, для которого уже известны все факторы оптимальности.
+Теперь вы изучили главные принципы работы в Тасэдиторе и уже можете начинать ТАСить свою любимую игру. Лучше всего обучает практика, и только в процессе реальной разработки своего личного ТАСа вы сможете освоить все премудрости.
+После пары недель практического ТАСинга рекомендуется заново перечитать третью и четвёртую главу данного Курса, чтобы усвоить текст на более глубоком уровне, ведь во время первого чтения вы наверняка многое поняли не до конца.
+В следующей главе: настройка программы для максимально комфортной работы.
+ПРАКТИЧЕСКОЕ ЗАДАНИЕ: Хорошенько отшлифуйте Ввод в распланированных участках своего тестового мувика. Если пробное разбиение Маркерами оказалось неудачным – переразбивайте на ходу. +Постарайтесь использовать только второй и третий методы ТАСинга, не прибегая к традиционному методу. Попробуйте также воспользоваться турбо в нужных местах. Если на оптимизацию целого игрового уровня вам не хватит терпения, постарайтесь хоть как-то завершить оставшийся промежуток уровня, даже если он будет не слишком оптимальным. +Примерное время выполнения: 30-60 минут. + |
+
Created with the Personal Edition of HelpNDoc: Free HTML Help documentation generator
+Конспект спидраннера
+Создание спидранов является наиболее простым видом ТАСинга, и его основные приёмы давно изучены. Здесь приводится классификация типовых задач спидраннера, возникающих во время шлифовки Ввода на участках. Перед чтением этого раздела рекомендуется усвоить материалы Процесс ТАСинга и Методология ТАСинга.
+При создании спидрана необходимо находить кратчайший способ прохождения каждого участка игры. Процесс поиска заключается в тестировании множества вариантов прохождения участка и выборе самого лучшего варианта.
+Для ускорения этого процесса обычно сравниваются между собой только два варианта: новый рабочий вариант и наилучший старый вариант, а все остальные старые варианты забываются (впрочем, некоторые любопытные варианты можно сохранить в Закладки) .
+Самый лучший из всех ранее протестированных (старых) вариантов может храниться:
+● +в Закладках – рекомендуется
+● +в Журнале Истории – автоматически
+● +в памяти ТАСера – не рекомендуется
+Когда новый рабочий вариант оказывается лучше (оптимальнее) наилучшего старого, автоматически подразумевается, что он лучше всех остальных старых вариантов, поэтому этот рабочий вариант становится наилучшим. В случае использования Закладок следует сохранить новый вариант в тот же слот, где хранился наилучший старый вариант.
+Критерием оптимальности может быть:
+● +наличие/отсутствие требуемого события в новом и старом варианте (bool)
+● +время наступления целевого события в новом и старом варианте (int)
+● +состояние игры на одном и том же кадре нового и старого мувика (string)
+Соответственно, при сравнении двух вариантов требуется делать одно из трёх:
+1. Сравнивать наличие/отсутствие требуемого события.
+ + +2. Сравнивать время наступления целевого события.
+ + + + +3. Сравнивать состояние игры на одном и том же кадре
+ + + +1. Сравнивать наличие/отсутствие требуемого события.
+Выигрывает вариант, где требуемое событие происходит в рамках текущего участка (а вредное событие, соответственно, не происходит). Обычно появление требуемого события - это всего лишь первый этап при создании Ввода на участке, а следующим этапом будут попытки ускорить момент появления этого события.
+Перебор вариантов проходит до первого успешного варианта, либо пока не надоест.
+Аналогия с программированием: сравнение двух Boolean (переменная логического типа), сравнение двух массивов Boolean.
++A. Для большинства участков подходит простое запоминание того факта, что требуемого события пока не удалось добиться. Пример: нажатие кнопки Start.
++B. Если требуемое событие является комплексным (например, требуется одновременно подстрелить нескольких врагов), рекомендуется в процессе перебора вариантов сохранять в Закладки те варианты, где требуемое событие выполнилось хотя бы частично (например, игрок подстрелил одновременно двух врагов из трёх). Если в конце концов требуемого события так и не удастся добиться, может сгодиться и такой частичный успех.
+ +2. Сравнивать время наступления целевого события.
+Выигрывает вариант, где целевое событие наступает раньше всего. Время наступления целевого события определяется кадром, перед которым целевого события в игре ещё не было, а на этом кадре оно уже есть. Номер этого кадра определяется при наведении на него Курсора Проигрывателя и просмотре экорана FCEUX.
+Перебор вариантов проходит до тех пор, пока не надоест.
+Аналогия с программированием: сравнение двух целых чисел.
++A. Для простейших участков и подучастков бывает достаточно запомнить лучший номер кадра в уме и сравнивать все последующие номера с этим числом. Для более-менее сложных участков такое не рекомендуется. Подробнее: Процесс ТАСинга.
++B. Для несложных участков можно воспользоваться зелёной стрелкой. Для этого нужно после просмотра каждого варианта оставлять Курсор Проигрывателя на кадре целевого события. Если новый кадр целевого события находится выше зелёной стрелки, то новый вариант лучше предыдущего варианта. Подробнее: Методология ТАСинга.
++C. Для участков средней и высокой сложности используйте Маркеры, отвязанные от Ввода. При каждом смещении целевого события во времени нужно вручную перетаскивать соответствующий Маркер. Если новый кадр целевого события находится выше Маркера, то новый вариант лучше наилучшего старого. Подробнее: Настройка программы.
++D. Для участков средней и высокой сложности используйте Закладки, отображаемые в столбце иконок Piano Roll. Если новый кадр целевого события находится выше иконки Закладки, то новый вариант лучше старого варианта из этой Закладки, и вам следует установить эту Закладку на этот новый кадр, сделав быстрый сэйв.
+ +3. Сравнивать состояние игры на одном и том же кадре.
+Выигрывает вариант, в котором у игры в целом более выгодные характеристики. Этот тип сравнений рекомендуется использовать для оценки сложных и многогранных игровых ситуаций. Например, в гонке Формула-1 цель – найти оптимальный баланс между максимальным продвижением вперёд и минимальной изношенностью шин.
+Перебор вариантов проходит до тех пор, пока не надоест.
+Аналогия с программированием: сравнение двух строк, сравнение двух массивов целых чисел.
++A. Для простых участков бывает достаточно запомнить некоторые характеристики состояния игры, достигнутого в наилучшем варианте прохождения участка. При просмотре новых вариантов Курсор Проигрывателя всегда останавливается на том же самом кадре, и в окне FCEUX и в Memory Watch отображаются новые значения интересующих характеристик. Если некоторые характеристики оказались лучше, а некоторые хуже, то требуется взвесить их в уме (или использовать обобщающую Lua-формулу) и решить, стал ли новый вариант в целом лучше, чем старый. Если решено, что новый вариант лучше, необходимо запомнить его характеристики вместо характеристик предыдущего наилучшего варианта. Однако, когда таких характеристик больше, чем одно число, рекомендуется не полагаться на память, а использовать Закладки. Пример: манипуляция удачей.
++B. Для участков средней и высокой сложности, а также для гигантских участков (размером с целый уровень игры) используйте Закладки, хранящие альтернативные ответвления мувика. Наилучший вариант сохраняется в один слот, а тестируемые варианты сохраняются в другой слот. После этого можно легко переключаться между этими слотами и сравнивать значения каждой существенной характеристики. Кроме того, можно наводить курсор мыши на соответствующие Закладки в Списке Закладок или Дереве ответвлений, чтобы видеть скриншоты состояний игры и сравнивать характеристики визуально. Также можно не сохранять текущий вариант в Закладку, а визуально сравнивать текущее изображение в окне FCEUX со скриншотом наилучшего варианта прохождения участка. Для отображения ячеек памяти на скриншотах рекомендуется использовать Lua-вывод, тогда окно Memory Watch не понадобится, и об оптимальности можно будит судить по скриншотам. Подробнее: Настройка программы.
+После нахождения самого быстрого варианта прохождения ТАСер может дополнительно улучшить участок, добавив немного развлекательности в игровые события. Критерии оптимальности при этом могут быть самыми разными, но время прохождения участка должно оставаться без изменений.
+Created with the Personal Edition of HelpNDoc: Full featured Documentation generator
+TAS Editor изнутри
+В этом разделе описываются все идеи, заложенные в основу Тасэдитора, а также раскрываются некоторые детали итоговой реализации TAS Editor 1.0. Для получения полной информации об алгоритмах, используемых в Тасэдиторе, вы можете изучить его исходники на языке C++.
+Тасэдитор является программой с открытым исходным кодом (open source). Он распространяется по лицензии MIT, которая позволяет любому человеку как угодно распоряжаться исходным кодом. Выбор лицензии обусловлен желанием поощрить модификацию и портирование Тасэдитора на другие платформы.
+Загрузить исходные коды эмулятора FCEUX 2.1.6 со встроенным Тасэдитором вы можете из официального SVN-репозитория: http://sourceforge.net/p/fceultra/code/
+Для работы с SVN вам потребуется SVN-клиент, например, TortoiseSVN.
+Исходный код Тасэдитора сравнительно неплохо откомментирован, и для понимания большинства нюансов будет достаточно базовых навыков программирования на C++ под Win32 API. Так как для автора этот проект был первым опытом создания серьёзных приложений, некоторые задачи могут быть решены недостаточно эффективно, однако при портировании рекомендуется сохранять архитектуру приложения, так как она содержит резерв для расширения в соответствии с авторской теорией ТАСинга.
+Детальное описание идей, заложенных в Тасэдитор
+Архитектура программы
+ + +Список нюансов, призванных улучшить взаимодействие пользователя с программой
+ + +Спецификации файла проекта Тасэдитора
+Created with the Personal Edition of HelpNDoc: Free Web Help generator
+Методология ТАСинга
+Эта глава посвящена центральному занятию в ТАСинге – созданию оптимального Ввода на отдельно взятом участке мувика. Размер участка может быть любым, критерии и факторы оптимизации могут быть разными, но именно благодаря упорной ручной шлифовке Ввода ТАСы выглядят так блестяще.
+Процесс создания наилучшего Ввода на оптимизируемом участке можно представить в виде зацикленного процесса исправления ошибок в предыдущих версиях Ввода на этом участке. Мы будем называть ошибкой любую нереализованную возможность приблизить ТАС к поставленной цели (к самому быстрому спидрану или самому красивому прохождению). Большинство ошибок успешно исправляются многократным осмотром и модификацией участка.
+Чтобы исправить ошибку нужно:
+1. +Осознать факт ошибки.
+2. +Предположить способ решения.
+3. +Осуществить навигацию к месту исправления.
+4. +Внести изменения.
+5. +Оценить результат и подтвердить факт исправления ошибки.
+1. Осознание ошибки при ТАСинге происходит либо во время просмотра мувика в режиме Read-Only, либо прямо во время Записи/редактирования Ввода.
+Примечание: Зачастую ТАСер вместо обнаружения реальной ошибки только предполагает, что данный участок ещё можно улучшить. Всегда полезно усомниться в идеальности текущего результата и поэкспериментировать с Вводом – порой действительно обнаруживаются нереализованные возможности. + |
+
2. Способы решения либо очевидны сразу, либо находятся экспериментальным путём. В редких случаях требуются расчёты и сравнения. В правильно выбранных участках все факторы оптимальности находятся внутри участка. Информация из предыдущих или последующих участков требуется редко.
+Примечание: Иногда ТАСер исправляет одну ошибку, незаметно создавая другую. В этом случае процесс оптимизации может пойти в неправильном направлении. К счастью, в ТАСинге такие ситуации возникают редко, так как видеоигры гораздо нагляднее и примитивнее реальной жизни, поэтому игроку проще обнаружить все факторы и верный критерий оптимальности. Тасэдитор дополнительно облегчает этот процесс благодаря умной визуализации данных. + |
+
3. Возможность навигации к месту ошибки является главным отличием ТАСинга от обычных спидранов. Простые игроки тоже могут осознать ошибку и понять способ её исправления, но только ТАСеры всегда возвращаются назад для её коррекции.
+В традиционном методе ТАСинга навигация к месту ошибки может занимать довольно много времени (несколько секунд). В Тасэдиторе навигация к любому кадру участка занимает менее секунды.
+Примечание: Иногда место совершения ошибки находится на более раннем участке, а обнаруживается только на текущем. В этом случае нужно выявить участок совершения ошибки и отредактировать его согласно полученной информации от текущего участка. В традиционном методе ТАСинга можно просматривать и редактировать только один и тот же участок. В Тасэдиторе можно редактировать один участок, а просматривать другой. + |
+
4. Внесение изменений – это воплощение мыслей ТАСера в жизнь. Чем быстрее это происходит, тем лучше. В идеале Ввод должен изменяться в мувике синхронно с мыслями ТАСера.
+В традиционном методе ТАСинга исправление ошибки длится дольше, так как помимо перезаписи ошибочных кадров требуется ещё перезаписать весь последующий Ввод. В Тасэдиторе это обычно не требуется.
+Примечание: В действительности, любое изменение Ввода влечёт за собой изменения игрового процесса (поэтому-то Гринзона всегда усекается после кадра, где произошло изменение Ввода). Но в ряде случаев изменения игрового процесса носят незначительный характер, и старый Ввод по-прежнему синхронизируется с изменённым игровым процессом. В других случаях нужна небольшая модификация, но полная переработка Ввода почти никогда не требуется. + |
+
5. Чтобы увидеть результат, достаточно возобновить просмотр мувика с начала участка или прямо с места исправления ошибки, не перепроверяя предшествующие участки, так как исправление ошибки влияет только на последующие события.
+Примечание: Если вы записываете не спидран, а развлекательный мувик, то после исправления ошибки (например, перемещение спрайта по более плавной траектории) всё-таки желательно просмотреть предшествующие события, чтобы это исправление удачно смотрелось не только в контексте своего участка, но и в общей последовательности игровых событий. + |
+
Досмотреть участок требуется до конца, то есть до момента, когда в игре происходит целевое событие, и к нему можно однозначно применить критерий оптимальности. После этого ошибка либо считается исправленной/несуществующей, либо требуется вернуться к пункту 2.
+До Тасэдитора ошибки в мувике исправлялись с помощью создания и загрузки сэйвов. Если вы не знакомы с этим методом ТАСинга, вот его суть:
+● +Игра всё время стоит на паузе. Пауза отпускается только при просмотре готовых участков.
+● +ТАСер поочерёдно впечатывает Ввод в кадры, на которые указывает Курсор Проигрывателя. Он видит результат совершённого Ввода через 1 кадр после впечатывания (иногда через несколько кадров). Опытный ТАСер после каждого сложновоспроизводимого движения создаёт сэйв, чтобы потом иметь возможность вернуться назад и не переписывать весь участок с начала.
+● +Чтобы исправить ошибку, ТАСер возвращается к месту ошибки и переписывает весь Ввод, начиная с кадра, требующего изменения. Если на этом кадре был сделан сэйв, можно сразу загрузить этот сэйв в режиме Read+Write и начать исправление. Если же имеются только сэйвы перед этим кадром, существует два варианта навигации. Первый вариант: загрузить предшествующий сэйв в режиме Read-Only и покадрово досмотреть мувик до нужного кадра, затем вернуться в режим Записи, тем самым сохранив старый Ввод на промежутке между кадром сэйва и кадром ошибки. Второй вариант: не переключаясь из режима Записи, загрузить ближайший сэйв и по памяти повторить старый Ввод, дойдя до кадра ошибки. Второй вариант используется чаще, потому что после сэйва обычно располагается легковоспроизводимый Ввод (например, простое зажатие R + B). Опытный ТАСер на всякий случай сразу создаёт на кадре ошибки сэйв, чтобы в следующий раз быстро возвращаться прямо к кадру, не тратя время на навигацию. Такая предусмотрительность имеет смысл, потому что ошибка редко исправляется с первой попытки, обычно требуется многократно переписывать один и тот же кусочек Ввода, начиная примерно с одного и того же кадра.
+● +Неудобства метода наглядно проявляются, когда нужно увидеть отдалённый результат Ввода (например, кнопка выбора была нажата сейчас, а шарик рулетки остановится только через несколько секунд). В таком случае ТАСер делает сэйв перед началом Ввода, записывает решающий Ввод и делает сэйв после него, а затем отпускает паузу и наспех проходит игру до появления результата. При удовлетворительном результате ТАСер загружает сэйв, идущий после решающего Ввода, и покадрово записывает оптимальное прохождение, уже будучи уверенным в успешном исходе. При неудовлетворительном результате он загружает начальный сэйв, меняет решающий Ввод и повторяет все действия снова (создаёт сэйв на конец Ввода, отключает паузу и ждёт результата). И так может продолжаться довольно долго, особенно если для просмотра отдалённого результата требуется не просто ждать, а ещё и вводить несущественные для результата нажатия.
+● +Чтобы скопировать старый Ввод (например, разгон Марио в начале каждого уровня), ТАСер либо зазубривает комбинацию кнопок и каждый раз вбивает её заново, либо копирует кнопочную последовательность с помощью нескольких прыжков (загрузок сэйвов) между местом-источником и местом-приёмником. Игра посылается то на сэйв предыдущего Ввода (посмотреть нажатия в режиме Read-Only и запомнить парочку в уме), то на сэйв текущего места записи (переключиться на Read+Write и выложить запомненные нажатия). Метод варварский, но работающий. Если после каждого прыжка пододвигать тот и другой сэйв на пару кадров вперёд, навигация между источником и приёмником Ввода будет не очень утомительной. Ну а когда требуется скопировать длинную последовательность нажатий, используется внешний редактор Ввода с функциями копипаста. Но переключение между разными программами сильно отвлекает ТАСера, поэтому зачастую проще скопировать Ввод с помощью варварского метода.
+● +Чтобы посмотреть весь записанный уровень, ТАСер отключает Запись и загружает сэйв, поставленный в начале уровня (обычно для этого используется редкий слот на клавише F10). Затем он отпускает паузу и смотрит прохождение, как обычный зритель. После окончания просмотра ТАСер возвращается точно к последнему записанному кадру, загрузив его сэйв (обычно это наиболее часто используемый слот, F1), и начинает записывать новый участок.
+● +Таким образом, большинство слотов (из 10 имеющихся) используется для навигации между различными моментами игры. Используя термины Тасэдитора – для навигации Курсором Проигрывателя по мувику. В особо жарких случаях десяти слотов может и не хватить для быстрой телепортации между всеми интересующими местами, но обычно хватает 5-7 штук, которыми опытный ТАСер жонглирует с поразительной скоростью.
+● +Парочка оставшихся слотов обычно используется для хранения альтернативных стратегий прохождения. Когда ТАСер заранее не знает, какой из двух вариантов прохождения уровня окажется лучше, он сначала записывает первый вариант, делает сэйв на окончание уровня в отдельный слот, а затем записывает второй вариант, и делает сэйв на окончание уровня в соседний слот. Затем попеременно загружает то один, то другой слот (или поочерёдно просматривает оба варианта мувика) и, выбрав лучший из них, продолжает запись, начиная с конца выбранного варианта. А другой вариант выбрасывается.
+Как видите, почти всё в традиционном методе ТАСинга делается благодаря сэйвам. В Тасэдиторе же сэйвы (точнее, пришедшие на их место Закладки) не играют основную роль. Они здесь используются в основном для хранения альтернативных стратегий прохождения, а навигация Курсором Проигрывателя осуществляется либо с помощью перетаскивания, либо с помощью колеса мыши.
+Более того, при редактировании Ввода Тасэдитор делает упор на навигацию без Курсора Проигрывателя. Чтобы исправить ошибку, не обязательно возвращать саму игру к кадру с ошибкой, можно пролистать Piano Roll к этому месту и изменить Ввод мышкой.
+Так как вместо Записи в Тасэдиторе эффективнее использовать редактирование, отпадает необходимость постоянно переключать режимы. Теперь эмулятор всё время находится в режиме Read-Only.
+Игра по-прежнему всё время стоит на паузе, но ТАСер теперь видит результат своего Ввода не всегда, а только когда пожелает. Поначалу это может показаться неудобством (отсутствует привычная отдача от вводимых нажатий), но на самом деле в этом скрывается большой плюс Тасэдитора – независимость пользователя от игры. Вместо механизма стандартной геймерской отдачи задействуются другие механизмы передачи информации. ТАСер всё равно получает все необходимые сведения о том, как игра воспринимает его Ввод, но информационный поток не вливается в него постоянно, а выдаётся по команде.
+Ну а при необходимости можно получить в Тасэдиторе многократно усиленную "отдачу" – для этого нужно использовать третий метод ТАСинга.
+Рассмотрим преимущества и недостатки всех трёх методов по порядку.
+Три метода ТАСинга в Тасэдиторе:
+● +навигация по участку Курсором Проигрывателя через прыжки по Закладкам
+● +запись последовательностей с клавиатуры/джойстика
+● +автоматический просмотр промежуточных результатов Ввода
+● +навигация по участку мышкой и Курсором Выделения
+● +редактирование Ввода мышкой/клавиатурой/джойстиком
+● +по команде пользователя: просмотр промежуточных или итоговых результатов Ввода
+● +навигация по участку мышкой и Курсором Выделения
+● +редактирование Ввода мышкой/клавиатурой/джойстиком
+● +автоматический просмотр промежуточных или итоговых результатов Ввода
+Created with the Personal Edition of HelpNDoc: Easily create Web Help sites
+Процесс ТАСинга
+Суть ТАСинга – в стремлении к абсолютному идеалу. Применив научный подход к прохождению видеоигр, можно увидеть в них не просто мимолётное развлечение, а сложную и интересную оптимизационную задачу.
+Для решения комплексных задач требуется проявлять не только изобретательность, но и методичность.
+Чтобы создать идеальное (или близкое к идеалу) прохождение игры, нужно сначала записать неидеальное прохождение, а затем заняться последовательным улучшением его отдельно взятых частей. Когда каждый фрагмент мувика является идеальным, можно говорить об идеальности всего ТАСа.
+Концентрация усилий на небольших участках мувика – это ключ к успеху. Каждый рабочий участок должен быть достаточно большим, чтобы представлять из себя полноценную подзадачу, и при этом достаточно маленьким, чтобы эту задачу было легко решать.
+Без такой структуризации эффективный и комфортный ТАСинг невозможен. Слишком много факторов влияют на конечный результат, и какие-то из этих факторов дополняются или противоречат друг другу. Памяти человека не хватает, чтобы удержать в голове и просчитать все взаимосвязи игровых факторов на большом отрезке прохождения, а также найти оптимальную комбинацию этих факторов. Так что во время длительных игровых сессий у ТАСера, как и у обычного игрока, возникает естественный соблазн взять первые попавшиеся наблюдения в качестве основы для формирования решений. Обычному игроку такая беспечность сходит с рук, но ТАСер в итоге получит далёкое от идеала прохождение.
+Поэтому в реальном ТАСинге участки должны быть маленькими. Весь процесс ТАСинга можно представить таким образом: сидит человек, смотрит своё тестовое прохождение, намечает в нём небольшой кусочек и бросает все силы на его улучшение, затем намечает следующий, и так до конца игры.
+Конечно, это утрированная картина, ведь помимо непосредственно обработки мувика ТАСер ещё занимается предварительными исследованиями и экспериментами с игрой (для выявления скрытых факторов). Но это уже не имеет отношения к Тасэдитору.
+Умение интуитивно выбирать участки отличает опытного ТАСера от новичка. Многие ТАСеры даже не задумываются, чем они руководствуются, когда спонтанно акцентируют своё внимание на некоем участке Ввода, подсознательно ограничивая начало и конец текущего этапа работ. Некоторые даже полагают, что просто записывают мувик кадр за кадром подряд, не замечая, что в основном работают в рамках "окна" размером в 20-200 кадров, и это окно передвигается вперёд по мувику не плавно, а прыжками (конец предыдущего участка зачастую становится началом следующего).
+Сейчас мы попробуем проанализировать этот навык, чтобы научиться осмысленнно определять границы текущего участка в каждом конкретном случае. А потом уже практика ТАСинга научит вас определять их машинально.
+Правильно выбранный участок (подзадача) должен давать ТАСеру чёткую непротиворечивую цель и простые однозначные средства для её достижения.
+Цель прохождения любого участка игры – это достижение определённого события. Например, целью прохождения всей игры является появление на экране надписи THE END. Целью прохождения одного уровня может быть событие "изменился счётчик уровней в оперативной памяти приставки" или "потемнел экран в конце текущего уровня". А целью небольшого участка может быть даже просто событие типа "персонаж приземлился по ту сторону ямы". Эти промежуточные цели определяются ситуацией в игре на данном участке мувика.
+Исходя из цели ТАСер формулирует в уме критерий оптимальности – правило, по которому он сможет сравнивать любые два способа прохождения участка игры. При ТАСинге недостаточно просто достигнуть цели, нужно перепробовать множество разных вариантов её достижения и выбрать из них самый лучший, используя некий критерий. Например, в спидране обычно лучшим вариантом прохождения участка считается тот вариант, в котором целевое событие наступает раньше. То есть, если в первом варианте прохождения участка целевое событие начинается на кадре 350, а во втором – на кадре 340, то второй вариант лучше первого, и в финальном мувике должен остаться именно он.
+Средств достижения целевого события у игрока очень много. Теоретически, любой аспект геймплея (в том числе не учтённый разработчиками) может помочь или помешать ТАСеру. Чтобы не запутаться в этом многообразии, надо рассматривать все игровые возможности в виде факторов оптимальности. Фактор оптимальности - это любой игровой аспект, который напрямую влияет на оптимальность прохождения участка.
+При такой постановке вопроса сразу отпадает множество неактуальных на данном участке возможностей. Например, обычный игрок может переждать врага в укрытии, но в спидране такая возможность даже не рассматривается. В результате у ТАСера остаётся ограниченный набор полезных действий и игровых индикаторов, за которыми требуется следить. И чем меньше участок, тем более ограничен и понятен этот набор, а значит, тем легче перебрать сочетания факторов и найти идеальную комбинацию действий.
+С другой стороны, чем меньше участок, тем менее его цель пересекается с финальной целью ТАСа. Финальная цель у ТАСера одна – сделать идеальное прохождение, например, самое быстрое в мире (то есть счётчик кадров в момент окончания мувика должен иметь минимально возможное значение). Но в рамках каждого конкретного участка цель может быть другой, иногда даже противоположной по звучанию (например, продержаться как можно дольше в бонус-уровне, за счёт чего потом будет сэкономлено время в другом месте). Поэтому для совсем мелких участков критерий оптимальности обычно не применяется, и эти микро-участки оцениваются только в составе более крупного участка.
+Например, если во время перепрыгивания ямы вам необходимо отстреливаться от врагов, в принципе, можно рассматривать каждую выпущенную пулю в виде подучастка (чтобы изолировать и обдумать такие факторы как "таймер перезарядки", "максимум 3 пули на экране" и т.д.). Но сравнивать потом нужно будет именно варианты перепрыгивания через яму, в составе которых находятся подучастки с выстрелами. Даже если в первом варианте перепрыгивания (который заканчивается на кадре 350) вы подстрелили двух врагов, а во втором (заканчивается на 340) застрелили только одного, выбирать следует второй участок, так как его критерий оптимальности более соответствует финальной цели спидрана.
+Возьмём пример со слишком большим участком. В спидране Super Mario Bros требуется максимально быстро добраться от начала до конца World 1-1, то есть нужно максимизировать координату X персонажа, который перемещается слева направо. В начале уровня координата Марио равна нулю, а в конце уровня, допустим, равна тысяче. С помощью кнопок джойстика можно по-разному влиять на эту координату.
+Если в качестве оптимизируемого участка выбрать весь уровень от момента с X = 0 до события X = 1000, то у нас появляется однозначный критерий оптимальности при записи и оценке вариантов прохождения участка – самым лучшим вариантом будет мувик с минимальным значением счётчика кадров на момент X = 1000. Итак, у нас есть критерий, но нет факторов. Как именно нужно нажимать кнопки, чтобы получить X = 1000 за наименьшее количество кадров? Здесь человек подключает логику и интуицию. При нажатии кнопки R координата X обычно возрастает, а при нажатии L убывает. И вот, самое очевидное решение – зажать кнопку R и узнать, через сколько кадров значение X дорастёт до тысячи. Однако при просмотре такого варианта в эмуляторе оказывается, что Марио упирается в препятствия, и координата X не растёт, хотя кнопка R зажата. Тем самым обнаруживается новый фактор – необходимость перепрыгивать препятствия и ямы. В результате применения кнопки A персонаж вскоре достигает момента с X = 1000, и при этом по критерию оптимальности сразу отсеялись все варианты прохождения, где нажатия кнопки A были менее своевременными (например, там, где Марио спотыкался о края труб, счётчик кадров в конце участка был больше).
+Тут игрок может посчитать, что учёл все факторы оптимальности, и что участок пройден идеально. Однако это не так. В Super Mario Bros довольно сложный физический движок. На координату X влияет текущее значение скорости, а на значение скорости влияет ускорение. На ускорение влияет кнопка B и положение Марио в воздухе или на земле. Также существуют трубы-телепорты и полезные баги игры, вроде "flagpole glitch" и т.д. А в рабочей памяти человека может одновременно храниться лишь около 7 объектов, поэтому часть факторов обязательно ускользнёт от вас во время редактирования Ввода. Необходимо уменьшить участок до масштаба, при котором факторы проявляются по отдельности, или хотя бы небольшой группой.
+Сосредоточимся на участке от X = 0 до X = 50, критерий оптимальности тот же. Здесь уже становится заметно, что в первой половине участка Марио почему-то бежит медленнее, чем во второй, причём во второй половине он бежит всё время с одинаковой скоростью, которую можно принять за максимально возможную. Таким образом проявляется фактор ускорения, и ТАСер начинает думать, как бы на него повлиять. Благодаря экспериментам с прыжками он может обнаружить различие значений ускорения в воздухе и на земле. Таким образом проявляется ещё один фактор.
+В результате по текущему критерию оптимальности к моменту с X = 50 быстрее приходит тот вариант мувика, где ТАСер в начале уровня создал сложную комбинацию из нажатий и отпусканий кнопок R, B и A, а не просто зажал R и B. И это прохождение уже гораздо ближе к идеалу, после этого можно на какое-то время успокоиться и взяться за следующий участок (от X = 50 до первого препятствия).
+Теперь рассмотрим другую крайность – ТАСер выбирает очень маленький участок и ограничивается оптимизацией только заданного набора кадров. На таком масштабе хорошо видны цели и средства, весь участок целиком умещается в окне Piano Roll, работать одно удовольствие. Однако здесь возможна ситуация, когда мы получаем неверный критерий оптимальности, который противоречит финальной цели ТАСа.
+Например, если в SMB увлечься максимизацией скорости и ускорения в промежутках между каждой следующей сотней пикселей, можно забыть про трубу, которая сокращает путь к концу уровня. Ведь остановка и ныряние в трубу сбрасывают значение скорости в ноль, что противоречит плану по максимизации фактора "скорость". В данном случае участок был выбран неверно, и, как следствие, появился неверный критерий оптимальности ("на момент X = 200 счётчик кадров должен быть минимален"). Нужно было определить концом участка момент ныряния в трубу. Такие ошибки порой замечаются при повторном просмотре готового мувика на свежую голову, но иногда ошибка менее очевидна и обнаруживается только после опубликования.
+Например, в том же SMB после ныряния в трубу (мир 1-1) нужно добраться до выхода, находящегося справа. Казалось бы, требуется с первых мгновений начинать максимизацию скорости. Однако тесты показали, что в течение первой дюжины кадров правильнее всего будет зажать кнопку L, а не R, чтобы сначала приземлиться немного левее от стенки, через которую требуется перепрыгнуть. Если сразу зажать R, то Марио приземлится вплотную перед стенкой, и ему придётся прыгать вертикально вверх, обнулив всю набранную скорость.
+Таким образом, если вы выберете в качестве оптимизируемого участка промежуток из дюжины первых кадров (от появления Марио до приземления) , критерий оптимальности подскажет вам неверную последовательность кнопок (по результатам тестов выиграет вариант с зажатием R вместо L). Здесь нужно выбирать участок от первого кадра появления Марио до момента перепрыгивания угла стенки.
+Конкретные размеры участка сильно различаются не только от игры к игре, но и от этапа к этапу в одной и той же игре. Опытные ТАСеры используют индивидуальный подход к каждому следующему участку (хоть и не задумываются об этом слишком долго). Выбирать следующий участок по тому же принципу, что и предыдущий – плохая идея, это срабатывает только в очень однообразных играх.
+В принципе, можно измерять участок в кадрах (например, ставить цель максимизировать координату X на момент истечения первой сотни кадров мувика), но логичнее ассоциировать конец участка с каким-нибудь мелким рубежом в игре (например, удачное преодоление ловушки или убийство очередного врага) – тогда сама цель будет подсказывать вам средства для её достижения. Задача типа "взять цветок максимально быстро" звучит гораздо понятнее, чем задача "на кадр 300 быть максимально близко к цветку".
+В подавляющем большинстве видеоигр игровой процесс делится на "комнаты", "волны врагов" и "последовательности ловушек", между которыми обязательно присутствуют краткие моменты расслабления. Даже в играх со скроллингом и свободным исследованием мира дизайн уровней всегда таков, что можно выделить насыщенные участки и промежутки отдыха между ними. Дело в том, что дизайнеры тоже структурируют задачу игрока на подзадачи, так что в ряде случаев ТАСер может воспользоваться заготовленным разбиением. Главное, не забывать его критически оценивать и при необходимости доразбивать на более мелкие подучастки (впрочем, это дробление произойдёт само собой в процессе редактирования Ввода большого участка).
+Это можно сравнить с тем, как писатели разбивают книгу на главы (уровни игры), а главы – на абзацы и предложения (участки). Простой читатель (игрок) довольствуется авторским разбиением для удобства чтения и впитывания авторского замысла. Но литературному критику (ТАСеру) необходимо уметь читать между строк, разбивая предложения по своему разумению.
+Например, в Super Mario Bros между каждой группой врагов есть относительно спокойный промежуток уровня, на котором не требуется особое мастерство управления, его можно бездумно пробежать или пропрыгать, зажав Вправо (подразумевается, что Марио уже давно разогнался до максимальной скорости). Идеальный ТАС в такие моменты почти не будет отличаться от неидеального прохождения. Эти моменты очень хорошо подходят в качестве промежуточных целей – если обозначить здесь конец участка, то критерий его оптимальности не будет противоречить финальной цели ТАСа. И обычно эти моменты чередуются достаточно часто, чтобы полученный между ними участок был небольшим (одна-две сотни кадров), ну или потребуется разбиение его на два-три рабочих участка.
+Разделение ТАСа на участки существовало всегда, но Тасэдитор делает этот процесс более осмысленным и понятным для новичка. В Тасэдиторе вы можете визуально отметить начало и конец любого участка с помощью Маркеров или Закладок.
+При просмотре тестового прохождения можно легко выбрать кадр начала участка – момент в игре, когда все предшествующие факторы можно игнорировать. Так, например, в начале каждого уровня начинается очередной участок, потому что все факторы, действовашие на последнем участке предыдущего уровня (такие как счётчик жизней босса), утратили свою актуальность, уступив место новым факторам. Поэтому в начале каждого уровня имеет смысл ставить Маркер или Закладку, обозначив не только начало уровня, но и начало текущего рабочего участка. Благодаря визуальной отметке вы не будете отвлекаться на соседний Ввод при шлифовке участка и не потратите время на анализ устаревших факторов и тестирование бесполезных вариантов.
++С концом участка дело обстоит немного иначе. Определившись с целью (например, довести координату X до значения 50) можно зафиксировать конец участка, установив второй Маркер/Закладку на кадре, где текущее неидеальное прохождение достигает этой цели. При шлифовке Ввода мы постараемся достичь той же цели (X = 50) на более ранний кадр, или хотя бы на тот же. И если в ходе редактирования и тестов Ввода обнаружится, что цель действительно можно достигнуть раньше, необходимо будет передвинуть замыкающий Маркер/Закладку выше (отметив улучшенный конец участка), а затем продолжить тестирование других вариантов в поисках ещё лучшего. В традиционном методе ТАСинга именно так постепенно передвигается вверх главная Закладка, хранящая лучшее на данный момент прохождение участка.
+В принципе, в Тасэдиторе вы можете дать волю своей лени и не отмечать конец участка ни Закладкой, ни Маркером, а просто держать цель в уме и примерно помнить, на каком кадре проявляется конечное событие в лучшем варианте. Эта мелочная экономия времени имеет смысл, когда участок очень прост, и его не потребуется многократно переделывать. Также, вместо замыкающего Маркера во многих случаях можно ориентироваться по зелёной стрелке, автоматически остающейся на кадре прошлого конца участка.
+Однако в сложных ТАСах, где голова заполнена обдумыванием множества факторов оптимальности, лучше не торопиться, а методично отмечать текущий конец участка Маркером, перетаскивая этот Маркер в случае улучшения Ввода на участке. Ведь в сложных ТАСах улучшение участка – это большое достижение, так что слишком часто изменять отметку конца участка вам не придётся.
+Когда появляется уверенность, что найдено наилучшее решение из всех возможных, надо переходить к следующему участку. Не нужно просто так удалять старые Маркеры, они могут пригодиться в будущем, когда вы усомнитесь в идеальности тех или иных решений (например, найдя новый трюк) и захотите отредактировать Ввод в ранее пройденных уровнях. Скорее всего, логика разбиения останется той же даже после появлении нового фактора (нового трюка), и готовое разбиение сэкономит вам время.
+Если в процессе тестирования вариантов Ввода на участке у вас появляется уверенность, что найдена наилучшая последовательность Ввода для первой половины (или трети) участка, имеет смысл разбить участок надвое и заняться только оставшимся вторым. Часто такие ситуации возникают, когда изначально взят слишком большой участок, и только при редактировании проявились логические подучастки в его составе. Это обычная практика.
+Итак, если ваш характер не приемлет порядка, вы можете вовсе не ставить Маркеры и Закладки во время работы, представляя участки умозрительно. Но учтите, что эта информация тоже занимает часть рабочей памяти человека, так что в результате может не хватить места для каких-то факторов оптимальности, и вы этого даже не заметите.
+Если же вы, наоборот, любите порядок, рекомендуется после завершения шлифовки участка (а можно и до или во время шлифовки) добавлять к Маркерам текстовые Заметки. Желательно оставлять комментарий хотя бы к Маркеру в начале участка, например, название участка или тег. Таким образом вы одновременно с ТАСингом документируете его разработку, оформляете появляющийся Ввод и придаёте ему объективный смысл. Это особенно полезно при работе в соавторстве, но и при ТАСинге в одиночку вы можете заметить, что "документация" из прошлых уровней мотивирует продолжать ТАСинг следующих. Отнимая секунды на печать текста, Маркеры дают силы не забросить проект на годы.
+Также Заметки помогают полнее раскрыть потенциал хитроумных трюков и багов игры. Дело в том, что во время написания текста Заметки, вы формализуете собственные знания об описываемом явлении. Когда суть трюка хранится в голове, вам будет казаться, что вы знаете о нём всё, и что в текущем ТАСе он уже и так используется максимально эффективно. Но когда появляется объективная модель в виде словесного описания трюка, нередко раскрываются новые грани вещей, казавшихся очевидными. На сайте TASVideos.org часто были случаи, когда один ТАСер прочитал описание какого-то трюка в сабмишене другого ТАСера и обнаружил способ использовать этот трюк лучше автора. Также были случаи, когда сам автор, перечитав свой свежий сабмишен, хлопал себя по лбу и срочно записывал улучшение.
+Несмотря на всю полезность Маркеров и организации рабочего процесса, основной целью ТАСинга является создание Ввода. На поиск идеальной последовательности нажатий на каждом участке уходит намного больше времени, чем на всё остальное.
+Зачастую почти сразу кажется, что текущий Ввод – самый лучший из всех возможных (особенно при сравнении с первоначальным вариантом). Но обычно это не так, особенно если вы делаете вывод об оптимальности, ориентируясь только на экран FCEUX, а не на состояние памяти (Memory Watch). Поэтому всегда есть смысл предполагать текущий результат неидеальным. Если вы в данный момент не видите в нём никаких ошибок и потенциальных улучшений, то надо переходить к следующему участку, но не отвергать последующие попытки улучшить предыдущие участки.
+Чаще просматривайте готовую часть мувика – с начала игры или начала уровня до последнего записанного участка – и пытайтесь заметить несовершенства. Тасэдитор позволяет редактировать Ввод прямо во время просмотра, поэтому любую спонтанную идею можно ввести посреди готовых участков сразу же, как только идея пришла в голову. Если она окажется неудачной, просто откатите последние изменения Истории или вернитесь во времени на Закладку с последним актуальным состоянием мувика. А если идея действительно улучшит ваш ТАС, после радостных известий необходимо будет ещё добиться синхронизации последующих участков Ввода (так как из-за реализации этой идеи последующее состояние игры изменится). Причём переписывать весь последующий Ввод в большинстве случаев не требуется. Обычно достаточно лишь удалить или вставить пару кадров (сдвинув все участки вверх), или подправить несколько участков между местом реализации идеи и ближайшим чекпоинтом (конец уровня или т.п.). В Тасэдиторе всё это делается довольно быстро, а в ходе вынужденных исправлений вы можете обнаружить ещё какую-нибудь ошибку или нереализованную идею.
+Многие обгоны спидранов появлялись из-за обнаружения маленького улучшения в середине мувика, из-за чего приходилось потом переписывать (пересинхронизировать) всю вторую половину мувика и даже наталкиваться на новые улучшения. А потом эти новые трюки оказалось возможным применить в первом уровне игры. Движок у игры один, и если трюк сработал в одном уровне, он вполне может сработать в другом, где возникают подобные условия. И даже если условия не возникают, порой можно их создать за счёт потери чего-то менее ценного. В итоге весь мувик неоднократно переписывается почти с самого начала. Так из маленького улучшения вырастает серьёзный обгон.
+Главное – не жалеть выбрасывать уже проделанную работу, когда многодневные труды по отшлифовке мувика становятся неактуальными из-за обнаружения ошибки (упущенной возможности оптимизации).
+ТАСинг традиционным методом очень быстро приучает ТАСера к мысли о неизбежности потерь. Сам принцип многократной перезаписи одного и того же участка предлагает ТАСеру оценивать свой прогресс количеством затраченных попыток, ушедших впустую. Ведь при ТАСинге без Тасэдитора выбрасывать проделанную работу приходится на каждом шагу, как в мелочах, так и по-крупному.
+Тасэдитор позволяет предотвратить некоторые мелкие потери, но он не спасает от необходимости крупных переделок в случае обнаружения новых факторов оптимизации. Например, проходя третий уровень, вы можете обнаружить новый трюк, который также срабатывает на первом уровне, – теперь вам необходимо заново переделывать не только первый и третий уровни, но, скорее всего, и второй, к которому новый трюк не имеет никакого отношения. Конечно, во второй раз те же самые уровни ТАСить гораздо проще, но сам факт выброшенного времени иногда удручает, и поначалу даже кажется, что исправление старой ошибки не стоит того, чтобы тратить на него время. В этом случае следует, не долго думая, либо заставить себя сделать это, либо отложить исправление на следующий раз, оставив рядом с ошибкой Маркер с памяткой, детально описывающей суть проблемы. Если к моменту окончания ТАСа таких отложенных планов накапливается немало, придётся назвать почти готовый мувик "тестовым пробегом" и после продолжительного отдыха взяться за его переписывание. Впрочем, ревизия готового ТАСа имеет смысл всегда, даже когда на уме нет запланированных улучшений.
+В следующей главе: описание методов оптимизации Ввода.
+ПРАКТИЧЕСКОЕ ЗАДАНИЕ: +Просмотрите в Тасэдиторе неидеальное прохождение 1 уровня, записанное в прошлом практическом занятии, и с помощью Маркеров разделите его на участки по собственному принципу. Если мувик длинный, не нужно структурировать его полностью, требуется только прочувствовать принципы разбиения. +Примерное время выполнения: 5-10 минут. + |
+
Created with the Personal Edition of HelpNDoc: Full featured Help generator
+TAS Editor 1.0
+Добро пожаловать в Руководство по использованию Тасэдитора!
+Тасэдитор – это интегрированная среда разработки, ориентированная на создание TAS. +Прохождение видеоигр в Тасэдиторе похоже одновременно на интерактивное программирование и сочинение музыки в секвенсоре с помощью рисования мышкой. + |
+
+ | ++ | ++ | +
Если вы впервые открываете данное Руководство, рекомендуется полностью прочитать этот учебник + |
+Заглядывайте сюда, когда нужно получить полную информацию о возможностях и ограничениях Тасэдитора + |
+Заходите, когда пожелаете узнать больше деталей о внутренностях системы + |
+
+ + + + + + | ++ + + + + + + | ++ + + + | +
Автор TAS Editor 1.0: АнС
+Помощь в тестировании: feos
+Автор данного Руководства: АнС
+Помощь в корректировке: feos, exelord
+Created with the Personal Edition of HelpNDoc: Full featured Documentation generator
+Панель инструментов
+Панель инструментов содержит 7 разделов:
+● +Splicer – Монтажный инструмент
+ + + +● +кнопки навигации Курсором Выделения
+В самом верху находится раздел Проигрывателя (Playback). Проигрыватель управляет процессом эмуляции игры – держит на паузе, проигрывает в любом направлении, перематывает на желаемый кадр и так далее. Он позволяет обращаться с видеоиграми так же легко, как с обычной видеозаписью, невзирая на их интерактивность.
+Вверху находятся 5 управляющих кнопок Проигрывателя.
+Кнопка "||" (пауза/продолжить) является аналогом клавиатурного хоткея Pause Emulation. При её нажатии эмуляция игры либо приостанавливается, либо продолжается. Если на вашей мышке есть средняя кнопка, проще нажимать её вместо кнопки "||", в этом случае даже не нужно будет подводить курсор мыши к разделу Проигрывателя.
+Кнопка ">" (шаг вперёд, Advance 1 frame) перемещает голубой курсор на один кадр ниже, при необходимости заставляя FCEUX эмулировать 1 кадр игры. По этой кнопке можно не только щёлкать, но и зажимать её на некоторое время, чтобы сделать несколько шагов подряд. У этой кнопки есть аналог на клавиатуре: Shift + Вниз. Если у вашей мышки есть колесо, проще зажимать правую кнопку и прокручивать колесо на одно деление вниз вместо использования кнопки ">".
+Кнопка "<" (шаг назад, Rewind 1 frame) перемещает голубой курсор на один кадр выше, а на экране FCEUX отражаются события предыдущего кадра игры. Эту кнопку тоже можно зажимать, чтобы сделать подряд несколько шагов назад. Для этой кнопки есть свой хоткей Frame Rewind (по умолчанию клавиша Backspace), а также аналог на клавиатуре: Shift + Вверх. Если у вашей мышки есть колесо, проще зажимать правую кнопку и прокручивать колесо на одно деление вверх вместо использования кнопки "<".
+Кнопка "<<" (быстрая перемотка назад) тоже перемещает Курсор Проигрывателя (а значит и состояние игры) назад, но не на один кадр, а сразу на множество кадров. Эта кнопка перемещает голубой курсор прямо на кадр, на котором установлен вышестоящий Маркер. В примере с верхней картинкой при нажатии "<<" голубой курсор прыгнет на 12-й кадр (где установлен Маркер 1). Благодаря этой кнопке можно очень быстро возвращаться к началу редактируемого участка и вообще к любому ранее пройденному моменту. У этой кнопки есть аналог на клавиатуре: Shift + Page Up. Эту кнопку также можно зажимать – голубой курсор будет очень быстро прыгать по Маркерам всё выше и выше по Piano Roll, и, глядя на меняющееся изображение на экране FCEUX, вы сможете быстро найти нужный фрагмент.
+Кнопка ">>" (быстрая перемотка вперёд) прыгает Курсором Проигрывателя по Маркерам вперёд. В примере с верхней картинкой при нажатии ">>" голубой курсор прыгнет на 23-й кадр (где установлен Маркер 2). Благодаря этой кнопке можно быстро проматывать события мувика вперёд. Однако в случае, если следующий Маркер находится вне Гринзоны, эмулятору потребуется какое-то время для эмуляции неизведанных кадров, поэтому прыжок голубого курсора может быть не мгновенным, придётся чуть-чуть подождать. У этой кнопки есть аналог на клавиатуре: Shift + Page Down. Эту кнопку также можно зажимать.
+В качестве эксперимента попробуйте сделать мувик из тысячи кадров и поставить пару десятков Маркеров, по одному через каждые 30-50 кадров. Затем зажмите Shift и, нажимая клавиши Page Up или Page Down, почувствуйте все удобства быстрой перемотки. Помимо клавиш Page Up и Page Down можно также вращать колесо мыши, зажав клавишу Shift.
+ +Под управляющими кнопками Проигрывателя находится индикатор выполнения (Progress bar) и четыре переключателя (Checkbox).
+Прогрессбар служит для оценки оставшегося времени при добегании к указанному кадру.
+Дело в том, что для мгновенного прыжка на затребованный кадр эмулятор должен хотя бы однажды проэмулировать игру до этого кадра, применив ваш мувик в качестве игрового Ввода, чтобы получить актуальное состояние игры на требуемый момент. После того, как состояние игры однажды просчитано, оно сохраняется в Гринзону, и в следующий раз эмулятор может мгновенно прыгнуть на этот кадр, пока не изменился Ввод, предшествующий этому кадру. Если Ввод изменился, потребуется новый пересчёт игровых событий, так как даже малейшее изменение нажатых кнопок может повлечь серьёзные изменения в игровом процессе. Поэтому при любом изменении Ввода Гринзона автоматически усекается, выбрасывая из памяти все кадры, на которые оказывает влияние изменившийся Ввод. И эти кадры эмулятору нужно просчитывать заново, что занимает некоторое время.
+Таким образом, если вы отправляете Курсор Проигрывателя на кадр, который находится далеко от Гринзоны, вместо мгновенного перемещения голубой курсор начинает добегание (Seeking) к этому кадру. На месте целевого кадра начинает мигать тень голубого курсора, а на экране FCEUX будут быстро сменяться кадры игры по мере того, как Курсор Проигрывателя бежит к цели.
+В этом случае вам придётся подождать. Время добегания зависит от расстояния между ближайшим краем Гринзоны и целевым кадром, а также от мощности вашего компьютера и ещё от ряда факторов. Прогрессбар поможет оценить оставшееся время ожидания. А если вы передумали ждать, достаточно щёлкнуть по прогрессбару левой кнопкой мыши (помимо индикатора он ещё является кнопкой) или использовать клавиатурный хоткей Cancel Seeking (по умолчанию клавиша Esc). Тогда целевой кадр перестанет мигать, голубой курсор остановится, а эмуляция будет поставлена на паузу.
+Во время добегания можно изменить конечную цель, сделав щелчок в колонке иконок перед номером желаемого кадра. Если во время добегания поставить эмулятор на паузу, голубой курсор приостановится, мигание целевого кадра замедлится, но добегание не будет отменено – при отпускании паузы Курсор Проигрывателя продолжит бег к цели и автоматически остановится при её достижении.
+Прогрессбар также используется во время загрузки и сохранения больших проектов Тасэдитора на диск.
+ +Галочка "Turbo seek" позволяет влиять на скорость добегания. С помощью функции Turbo эмулятор может эмулировать игру с максимально достижимой скоростью, сокращая конечное время добегания в десятки раз. Поэтому при добегании к дальнему кадру рекомендуется установить эту галочку. Однако во время работы над ТАСом часто требуется увидеть не только конечный кадр определённого участка, но и внимательно рассмотреть все промежуточные кадры. В таких случаях следует снять эту галочку и даже уменьшить скорость эмуляции с помощью хоткеев - и =, чтобы не упустить важные детали при просмотре изображения эмулируемой игры.
+Галочка "Follow cursor" заставляет Piano Roll следить за перемещениями Курсора Проигрывателя и автоматически скроллировать видимую область Piano Roll таким образом, чтобы голубой курсор всегда был виден пользователю. Это позволяет отслеживать глазами проигрываемый Ввод прямо по ходу эмуляции. Обычно во время редактирования больших участков эту галочку необходимо отключать, чтобы Piano Roll не убегал от места редактирования Ввода.
+Галочка "Auto-restore last position" заставляет Проигрыватель автоматически запускать добегание после вынужденного отступления голубого курсора. Каждый раз, когда вы меняете Ввод, Гринзона усекается после кадра изменения, и Курсор Проигрывателя отступает назад вместе с ней, забывая о событиях, ставших не актуальными после изменения Ввода. С помощью галочки автовосстановления позиции вы сможете сразу увидеть новые события на этих кадрах. Когда галочка установлена, после каждого изменения Ввода Проигрыватель будет заново эмулировать изменившийся участок, позволяя ТАСеру оперативно сравнивать различные варианты развития игровых событий.
+Благодаря автоматическому восстановлению позиции ТАСер может сконцентрировать внимание только на редактировании Ввода и в кратчайшие сроки перебрать множество вариантов действий на одном участке. Подробнее об этом методе ТАСинга будет рассказано позже.
+Галочка "Auto-adjust Input due to lag" включает автоматическую подгонку Ввода в соответствии с изменениями лага на просматриваемом участке.
+Для игры имеет значение только Ввод на зелёных строках Piano Roll. На красных строках нет смысла ставить какие-либо нажатия, так как в кадрах с лагом игра не опрашивает Ввод, для игрового движка эти кадры просто не существуют. Когда вы редактируете Ввод, вы изменяете ход игровых событий, и лаг тоже может проявляться уже в других кадрах, где его раньше не было. Если в этих кадрах ранее был нарисован Ввод, необходимо передвинуть этот Ввод на кадр без лага. Чтобы не делать это каждый раз вручную, достаточно установить эту галочку, тогда Тасэдитор будет вставлять на место образующихся лаговых кадров пустые строки, тем самым передвигая Ввод.
+Операции по автоподгонке производятся Тасэдитором только во время проигрывания участка, когда Курсор Проигрывателя бежит по бледным строкам Piano Roll, поочерёдно занося эти новые кадры в Гринзону. Эти операции также можно откатить с помощью Ctrl + Z, однако не рекомендуется это делать при установленной галочке "Auto-restore last position", так как сразу после отката Проигрыватель запустит добегание, и авто-подгонка может произойти вновь.
+Игры с часто проявляющимся лагом имеет смысл ТАСить с постоянно включенной автоподгонкой Ввода. Эта функция успешно работает при любом методе ТАСинга.
+Под Проигрывателем находится раздел Рекордера (Recorder). Рекордер служит для записи кнопочного Ввода с клавиатуры (или геймпада) в мувик, прямо как при обычной игре в любом эмуляторе.
Галочка "Recording" включает и выключает режим Записи. Перед тем как начать запись кнопочных нажатий, убедитесь, что Курсор Проигрывателя находится на нужном кадре, с которого вы хотите начать запись. Затем либо нажмите хоткей "Toggle Read-only" (по умолчанию клавиша Q), либо установите галочку Recording щелчком по ней. При этом в заголовке окна Тасэдитора появится слово "Recording", а в окне FCEUX появится сообщение "Movie is now Read+Write". Теперь вы можете либо отпустить паузу и проходить игру в обычном или замедленном состоянии, либо впечатывать кнопки покадрово с помощью хоткея Frame Advance. По мере продвижения голубого курсора мувик будет заполняться информацией о нажатых вами кнопках.
+Можно неоднократно перезаписывать один и тот же участок мувика, затирая старые данные новой информацией о нажатиях/отпусканиях. Если вам не понравилось, как был пройден только что записанный участок (например, персонаж упал в яму), переставьте Курсор Проигрывателя повыше, а именно на кадр, после которого были совершены неправильные нажатия кнопок (например, слишком поздно была нажата кнопка A), затем продолжите Запись, нажимая уже правильные кнопки в правильное время.
+Когда участок готов, следует отключить режим Записи, чтобы случайно не затереть Ввод при навигации Курсором Проигрывателя по мувику. Уберите галочку "Recording" щелчком или нажатием хоткея. Обычно при работе в Тасэдиторе галочка Записи почти всё время отключена, так как вместо Записи используется прямое редактирование мувика мышью.
+Благодаря возможности обратной перемотки вы можете добавлять Ввод по частям, а не только по порядку следования кадров. Например, теоретически можно сначала записать второй уровень игры, а затем первый. Или же записать уровни по порядку, а потом переписать первый, оставив второй уровень без изменений.
+Рекомендуется комбинировать возможности Рекордера с возможностями Piano Roll. Для длинных и лёгких участков игры обычно проще записать последовательность нажатий с клавиатуры или удобного USB-геймпада, а вот для мелких разбросанных правок проще использовать мышку.
+ +Галочка "Superimpose" (Наложение) в разделе Рекордера позволяет объединять новый Ввод с уже имеющимся Вводом на том же участке мувика. Например, сначала с помощью мыши вы можете нарисовать зажатие кнопки R на длинном участке, чтобы персонаж всё время бежал вправо. Затем можно поставить галочку "Superimpose", включить Запись и нажимать только кнопки прыжка и стрельбы, без необходимости вручную нажимать кнопку Вправо. В игре в это время персонаж будет бежать вправо и прыгать/стрелять по команде.
+У галочки "Superimpose" помимо состояний "включена" и "отключена" есть дополнительное третье состояние – промежуточное между "включена" и "отключена". Принцип работы таков: если пользователь нажимает какие-либо кнопки геймпада во время Записи, эти кнопки будут записаны в мувик вместо старого Ввода. Если же пользователь не нажимает ни одной кнопки во время Записи, то старый Ввод на текущих кадрах не удаляется (то есть Рекордер не будет записывать "отсутствие нажатия всех кнопок" поверх старого Ввода).
+Таким образом третье состояние галочки "Superimpose" позволяет вам не беспокоиться о постоянном включении и отключении Записи в тех случаях, когда требуется записывать Ввод только в некоторые промежутки старого Ввода.
+ +Галочка "Use pattern" (Использовать шаблон) применяет текущий шаблон во время Записи кнопок. Название текущего шаблона можно увидеть в верхнем правом углу окна TAS Editor (самый последний пункт меню). При щелчке по этому пункту появляется ниспадающее меню, где можно выбрать другой шаблон из списка заготовленных.
+Шаблоны используются для ускорения ввода частых нажатий и отпусканий. Например, если в игре требуется стрелять с максимально возможной частотой (то есть чередовать один кадр нажатия кнопки B и один кадр отпускания кнопки B), можно просто выбрать шаблон "Alternating (1010...)" и зажать кнопку B не заботясь о её периодическом отпускании – благодаря применению шаблона в нужные промежутки времени нажатие кнопки просто не будет записываться.
+ +Кроме управляющих галочек в Рекордере есть круглые радиокнопки (Radio buttons), реализующие функцию мультитрекинга.
+Многодорожечная Запись серьёзно облегчает работу при традиционном ТАСинге игры на двоих и более игроков. Вместо того, чтобы нажимать руками кнопки одновременно на двух геймпадах, можно сначала записать прохождение короткого участка игры первым персонажем, а затем записать рядом кнопки второго.
+По умолчанию настроена Запись всех игроков одновременно (установлена радиокнопка "All"). Вы можете выбрать отдельный джойстик, щёлкнув по соответствующей радиокнопке (1P, 2P и т.д. – количество доступных геймпадов зависит от типа мувика). Также для переключения радиокнопок можно использовать хоткей "Switch current Multitracking mode" (по умолчанию клавиша W). Теперь во время Записи эмулятор будет воспринимать только нажатия кнопок для выбранного игрока, а колонки Ввода для остальных игроков не будут изменяться, даже если вы случайно нажмёте какую-нибудь кнопку на их джойстике.
+Под Рекордером находится раздел Монтажа (Splicer).
+Нужно сразу отметить, что вам здесь не пригодится опыт работы в программах для нелинейного монтажа видео, ведь в тех программах вы оперируете готовым видеоматериалом (Выводом), а в Тасэдиторе можно редактировать только Ввод, при этом финальный видеоряд всё равно определяется самой игрой.
+В этом разделе выводится информация о размере текущего Выделения – сколько строк (rows) выделено в высоту, и сколько колонок (columns) занимает Ввод в ширину. Благодаря этой информации вы можете использовать Выделение в качестве линейки для измерений. Например, чтобы быстро узнать расстояние (в кадрах) между двумя игровыми событиями, достаточно щёлкнуть мышкой по одному и растянуть Выделение до другого – выделятся все кадры между этими двумя строчками, а в разделе Splicer появится сообщение "Selection: N rows, M columns", где N – искомое количество кадров.
+Также здесь находится информация о данных в Буфере Обмена – содержится ли там Ввод, который можно вставить в любое место мувика, или не содержится. Если содержится, то указывается количество строк и колонок этого Ввода. Данные в Буфере Обмена хранятся независимо от Тасэдитора, они сохраняются там даже после закрытия FCEUX, пока какая-нибудь другая программа не скопирует в Буфер Обмена что-нибудь своё.
+В разделе "Splicer" нет никаких управляющих элементов, так как все команды для монтажа Ввода вынесены в раздел меню Edit, а также назначены на быстрые клавиши клавиатуры. Рекомендуется использовать в процессе монтажа именно клавиатурные комбинации – их легко запомнить, а скорость работы повышается во много раз.
+ +Перечень всех функций Монтажного инструмента.
+По сути это стандартные возможности любого текстового редактора (копипаст и т.п.), но в Тасэдиторе их можно применять к Вводу прямо во время эмуляции игры (даже при отпущенной паузе), что позволяет на лету анализировать результаты их применения и оперативно корректировать свои действия.
+● +Copy (Ctrl + C) – копирует весь выделенный Ввод в Буфер Обмена.
+● +Paste (Ctrl + V) – вставляет Ввод из Буфера Обмена в мувик, начиная с кадра, где стоит Курсор Выделения. Старые данные мувика на этом месте затираются новыми, хотя при желании можно использовать наложение новых на старые, если у Рекордера установлена галочка "Superimpose".
+● +Paste Insert (Ctrl + Shift + V) – раздвигает мувик и вставляет данные из Буфера Обмена, начиная с кадра, где стоит Курсор Выделения. Старые данные мувика отодвигаются вниз.
+● +Clear (Delete) – очищает выделенные кадры, удаляя с них нажатия всех кнопок.
+● +Cut (Ctrl + X) = Copy + Clear – копирует Ввод из выделенного участка мувика и очищает этот участок.
+● +Delete (Ctrl + Delete) – удаляет выделенные кадры из мувика, сдвигая последующие кадры на их место. Очень удобно таким образом перемещать Ввод вверх.
+● +Insert (Ctrl + Shift + Insert) – вставляет в мувик пустоту на место выделенных кадров, сдвигая последующие кадры вперёд. Очень удобно таким образом перемещать Ввод вниз.
+● +Clone (Ctrl + Insert) – аналог Insert, но вместо пустоты в мувик вставляются копии выделенных кадров. Зачастую этот способ ещё удобнее, чем Ctrl + Shift + Insert.
+● +Insert number of frames (Insert) – позволяет вставить на место Курсора Выделения любое желаемое количество пустых кадров. При нажатии клавиши Insert появляется окошко для ввода требуемого количества кадров, нужно напечатать число и нажать OK. Если передумали, можно нажать Cancel (Esc) для убирания окошка.
+● +Truncate – удаляет все кадры мувика, начиная со следующего за Курсором Выделения. Редко используемая функция, поэтому у неё нет хоткея, она доступна только через меню программы или меню по правой кнопке мыши.
+Наиболее часто во время ТАСинга в Тасэдиторе вы будете использовать Ctrl + Delete (Delete Frames) и Ctrl + Insert (Clone Frames) для быстрого перемещения редактируемых участков вверх/вниз по списку кадров, тем самым совершая в игре определённые действия раньше или позже по времени.
+В отличие от хоткеев FCEUX эти клавиатурные комбинации нельзя переназначить, поэтому, если у вас на Ctrl, Insert или Delete назначены какие-то другие функции эмулятора, необходимо изменить настройки эмулятора.
+Под Монтажным инструментом находится маленький раздел Lua.
+Здесь находится одна неактивная кнопка и одна галочка, назначение которых будет описано позже. Пока вы не знакомы с Lua-скриптингом, этот раздел вам не понадобится.
+Использование скриптового языка Lua позволяет автоматизировать часть работы ТАСера и даже создавать собственные плагины для Тасэдитора. Этому посвящена отдельная часть главы Продвинутые возможности.
+Далее располагается раздел Закладок (Bookmarks/Branches). О Закладках следует рассказать подробнее.
+Закладки являются развитием принципа эмуляторных сэйвов. До Тасэдитора сэйвы были единственным способом навигации по мувику, с их помощью ТАСер возвращался к месту ошибки и исправлял её. В Тасэдиторе есть множество других способов навигации, однако и этот способ решено было оставить для совместимости со старыми принципами.
+В вашем распоряжении 10 слотов для Закладок, которые нумеруются цифрами от 0 до 9. Вы можете поставить любую из 10 Закладок на любой кадр мувика, предварительно указав на этот кадр Курсором Проигрывателя.
+1 способ – поставьте голубой курсор на кадр, где должна появиться Закладка и сделайте эмуляторный сэйв (по умочанию это Shift + любая из клавиш в ряду F1-F10). Например, нажмите Shift + F1 для установки первой Закладки. Она тут же отобразится в Списке Закладок, сверкнув красным светом.
+2 способ – поставьте голубой курсор на нужный кадр и щёлкните правой кнопкой мыши по строке Списка Закладок. Например, щёлкните правой кнопкой по второй строке Списка, чтобы установить вторую Закладку.
+Нечаянно совершённую установку Закладок можно отменять с помощью Ctrl + Z.
+В Списке Закладок отображается цифровой номер Закладки, номер кадра Закладки и время установки Закладки. При наведении курсора мыши на время Закладки (правый столбец в Списке) вы увидите всплывающий скриншот из игры, дающий представление о содержимом Закладки с точки зрения игрового процесса. Когда у вас будет много Закладок, скриншоты помогут быстрее в них ориентироваться.
+В момент установки Закладки Тасэдитор сохраняет в указанный слот не только текущее место положения Курсора Проигрывателя, но и всё содержимое мувика на текущий момент времени. Теперь вы в любой момент можете либо "прыгнуть на Закладку в пространстве", вернув Курсор Проигрывателя на запомненное Закладкой место, либо "прыгнуть на Закладку во времени", вернув весь мувик в запомненное Закладкой состояние.
+Чтобы вернуться на Закладку в пространстве, щёлкните левой кнопкой мыши по левой половине нужной Закладки (более светлая половина Списка Закладок, где написан номер кадра, на котором установлена Закладка). Или же воспользуйтесь клавиатурой – нажмите соответствующую цифру (цифровые клавиши 0-9 расположены под клавишами F1-F10). О совершении прыжка вы сможете догадаться не только по перемещению голубого курсора в Piano Roll, но и по зелёной вспышке использованной Закладки.
+Чтобы вернуться на Закладку во времени, щёлкните левой кнопкой мыши по правой половине нужной Закладки (более яркая половина Списка Закладок, где написано время создания Закладки). Или же загрузите соответствующий эмуляторный сэйв (по умолчанию это клавиши F1-F10). Если при прыжке во времени изменяется Ввод мувика (когда восстанавливается его состояние на момент создания Закладки), то использованная Закладка вспыхивает синим светом, иначе вспыхивает зелёным, как при простом прыжке Курсора Проигрывателя. В случае изменения Ввода, как обычно, возможно автоматическое усечение Гринзоны. И, конечно же, вы всегда можете отменить это изменение с помощью Ctrl + Z, вернув мувик к состоянию, которое у него было перед прыжком на Закладку во времени.
+Таким образом, часть Закладок можно использовать для ускорения навигации. Например, поставить Закладку на начало просматриваемого участка мувика и периодически возвращать Курсор Проигрывателя на кадр этой Закладки, чтобы повторно проиграть события игры на всём участке. Впрочем, для этой же цели можно поставить в начале участка обычный Маркер. Преимущество Закладки перед Маркером только в том, что на Закладку можно будет мгновенно прыгнуть из любого сколь угодно отдалённого места мувика, а к Маркеру издалека нужно добираться прыжками через соседние Маркеры.
+Другую часть Закладок можно использовать для хранения альтернативных вариантов прохождения одного и того же участка игры. При ТАСинге сложных игр мы не всегда можем сразу оценить степень оптимальности той или иной стратегии прохождения уровня. Порой ТАСеру требуется записать несколько разных способов прохождения одного и того же участка игры, а затем тщательно сравнить готовые мувики и выбрать наиболее подходящий, чтобы оставить его в конечном ТАСе.
+В традиционном ТАСинге каждый вариант прохождения хранится в отдельном файле (сэйве), и для переключения между мувиками нужно загружать соответствующие сэйвы, созданные во время записи альтернативных стратегий прохождения.
+В Тасэдиторе все сохранённые варианты прохождения хранятся вместе, образуя между собой иерархию под названием Дерево ответвлений (Branches Tree). Для переключения между альтернативными ответвлениями нужно загрузить соответствующую Закладку, вернув мувик на желаемую ветвь заготовленных вариантов развития истории. По сути всё так же, как раньше. Но подход Тасэдитора позволяет удобно визуализировать все альтернативные стратегии в виде схемы, чтобы облегчить ориентацию ТАСера среди множества записанных вариантов.
+Когда вы записываете два варианта прохождения второго уровня игры, первый уровень в обоих вариантах проходится одинаково, так что расхождение Ввода идёт не с самого начала мувика, а только с начала второго уровня. Если на кадре перед началом второго уровня вы когда-то поставили Закладку 1, на схеме будет видно расхождение двух линий, начиная с цифры 1, а с начала мувика до цифры 1 оба варианта будут совпадать в виде одной линии.
+По расцветке линий на схеме можно будет определить, какие Закладки содержат мувик, совпадающий с мувиком текущей Закладки. Например, если ставить по одной Закладке в конец каждого уровня, то все эти Закладки будут объединены между собой красной линией, так как мувик каждой следующей Закладки фактически состоит из мувика предыдущей Закладки, плюс дописанного прохождения ещё одного уровня.
+В качестве эксперимента создайте короткий мувик без Закладок, установите Курсор Проигрывателя на конец мувика и сохраните Закладку в первый слот (Shift + F1). Затем добавьте после кадра Закладки несколько кадров и нарисуйте на них несколько кнопочных нажатий, затем проиграйте эти нажатия и сохраните Закладку во второй слот (Shift + F2). Теперь верните мувик во времени на состояние первой Закладки (F1), опять добавьте в мувик несколько кадров после первой Закладки и нарисуйте на них несколько кнопочных нажатий, отличающихся от тех, что сохранены во второй слот. Затем проиграйте эти альтернативные нажатия до конца и сохраните Закладку в третий (Shift + F3) или какой-либо другой слот.
+Теперь щёлкните левой кнопкой мыши по заголовку раздела Закладок (по надписи Bookmarks/Branches). При этом Список Закладок сменится на изображение схемы ответвлений (Branches). Если мувик третьей сохранённой Закладки отличается от мувика второй Закладки, но это различие начинается после кадра, где установлена первая Закладка, то вы должны увидеть картину наподобие показанной выше. Тучка символизирует начало проекта (корень иерархии). Закладки представлены соответствующими номерами, синим номером отмечена текущая Закладка (последний использованный слот). Если после сохранения или загрузки Закладки в мувик уже вносились изменения, на схеме появляется фаербол, который символизирует конец мувика.
+На схеме также отображается текущая позиция Курсора Проигрывателя. Попробуйте перетаскивать голубой курсор мышкой вверх и вниз по Piano Roll, либо просто проиграть весь мувик от начала до конца (нажмите Shift + Home и отпустите паузу эмулятора). Вы увидите перемещение маленькой голубой стрелки по красным линиям, соединяющим все Закладки в текущей хронологии. Например, если текущей Закладкой является вторая, значок Курсора Проигрывателя будет перемещаться по маршруту "тучка -> Закладка 1 -> Закладка 2". А остальные Закладки останутся в стороне, так как они представляют альтернативную хронологию, не совпадающую с текущим проигрываемым мувиком.
+Дерево ответвлений автоматически перестраивается каждый раз, когда вы создаёте новую Закладку или изменяете содержимое существующей. В зависимости от сложности вашего проекта схема ответвлений может быть очень разной.
+Вы можете наводить курсор мыши на номер любой Закладки, чтобы увидеть информацию о ней.
+Также вы можете сделать одинарный щелчок левой кнопкой мыши по любой Закладке, чтобы послать Курсор Проигрывателя на кадр этой Закладки (прыжок в пространстве). Щелчком по тучке вы посылаете Курсор Проигрывателя в начало мувика (аналогично нажатию Shift + Home), а щелчком по фаерболу вы посылаете Курсор Проигрывателя в конец мувика (аналогично нажатию Shift + End).
+Кроме того, вы можете сделать двойной щелчок левой кнопкой мыши, чтобы прыгнуть на указанную Закладку во времени. При этом из указанной Закладки восстанавливается состояние мувика, Закладка становится текущей, а Курсор Проигрывателя перемещается на кадр Закладки.
+Наконец, вы можете сделать щелчок правой кнопкой мыши, чтобы сохранить текущий мувик и текущее положение Курсора Проигрывателя в указанную Закладку.
+Как видите, в режиме просмотра Дерева ответвлений можно совершать все те же действия, что и в режиме просмотра Списка Закладок. Поэтому для опытных пользователей рекомендуется использовать в работе только вид Дерева ответвлений, так как он даёт больше информации для ТАСера. Когда нужно переключиться обратно на просмотр Списка Закладок, щёлкните по заголовку раздела (по надписи Branches).
+Попробуйте использовать все 10 доступных слотов, каждый раз немного меняя Ввод текущего мувика и просматривая отредактированные изменения на экране FCEUX. Позиция каждой Закладки на Дереве ответвлений определяется, исходя из Ввода, предшествующего кадру Закладки. Подразумевается, что ТАСер всегда сначала просматривает нарисованный Ввод в эмуляторе, а только потом сохраняет проделанную часть работы в Закладку.
+В руках опытного ТАСера Закладки являются мощным инструментом, позволяющим многократно облегчить процесс ТАСинга и реализовать даже то, что кажется невозможным. Обычно "невозможным" всё представляется только лишь из-за чудовищной, необъятной сложности. Но стоит лишь снизить сложность хотя бы в сотню раз (благодаря инструментам и умной организации процесса), и достижение из ранга невозможных переходит в разряд просто трудных.
+Под разделом Закладок располагается раздел Истории (History).
+В этом списке Тасэдитор ведёт строгий учёт всех проделанных операций в текущем проекте. Каждое действие по изменению Ввода, Маркеров или Закладок заносится в журнал, который сохраняется в файл проекта вместе с остальными данными. Полный перечень всех возможных типов записей в Журнал Истории вы можете прочитать в Справочнике.
+Благодаря Журналу Истории вы можете использовать Откат (Undo) и Повтор (Redo) клавишами Ctrl + Z и Ctrl + Y. Помимо этих клавишных комбинаций вы можете просто щёлкать на любой строке Журнала Истории левой кнопкой мыши, чтобы откатить мувик на время создания соответствующей записи в Журнале. При этом в Piano Roll на долю секунды появляется курсор-указка фиолетового цвета, акцентирующий внимание пользователя на месте произведённых при откате изменений. Как обычно, при изменении Ввода возможно автоматическое усечение Гринзоны.
+Максимальное количество уровней отката настраивается в меню Config, от этого количества зависит максимальный объём Журнала Истории и, как следствие, объём занимаемой памяти.
+В самом низу Панели инструментов находятся 4 кнопки для управления Курсором Выделения.
+О назначении кнопок "<<" и ">>" легко догадаться по аналогии с верхники кнопками "<<" и ">>" в разделе Playback. Верхняя часть окна Тасэдитора содержит элементы управления для навигации Курсором Проигрывателя, а нижняя часть окна – элементы управления для навигации Курсором Выделения.
+Кнопка "<<" (прыжок назад) перемещает Курсор Выделения на кадр, на котором установлен вышестоящий Маркер. В примере с верхней картинкой при нажатии "<<" синий курсор прыгнет с 28-го на 23-й кадр, где установлен Маркер 2. Благодаря этой кнопке можно очень быстро возвращать Выделение к началу редактируемого участка и вообще к началу любого отмеченного участка. У этой кнопки есть аналог на клавиатуре: Ctrl + Page Up. Эту кнопку можно зажимать – синий курсор будет очень быстро прыгать по Маркерам вверх по Piano Roll.
+Кнопка ">>" (прыжок вперёд) прыгает Курсором Выделения по Маркерам вперёд. В примере с верхней картинкой при нажатии ">>" синий курсор прыгнет с 28-го на кадр за пределами видимости (где установлен следующий Маркер), при этом Piano Roll автоматически проскроллируется вслед за Курсором Выделения. Благодаря этой кнопке можно очень быстро перемещаться по мувику вниз. У этой кнопки есть аналог на клавиатуре: Ctrl + Page Down. Эту кнопку также можно зажимать.
+Важная особенность этой пары кнопок в том, что Курсор Выделения в отличие от Курсора Проигрывателя не привязан к состоянию игры, поэтому его прыжки по Маркерам всегда совершаются мгновенно, не завися от наличия Гринзоны у целевого кадра. Особенно удобно читать таким образом Заметки Маркеров одну за другой в нижнем текстовом поле, нажимая Ctrl + Page Down для мгновенного перехода к следующей Заметке.
+В качестве эксперимента попробуйте поставить десяток Маркеров – по одному через каждые 30-50 кадров – а затем зажмите Ctrl и, нажимая клавиши Page Up или Page Down, почувствуйте все удобства быстрой навигации. Помимо клавиш Page Up и Page Down можно также вращать колесо мыши, зажав клавишу Ctrl.
+Кнопки "Similar" и "More" нужны для поиска похожих Заметок. Это ещё одна экспериментальная особенность Тасэдитора, о которой будет рассказано позже. Для новичка эта функция не требуется.
+Теперь вы ознакомлены с основными принципами использования программы.
+В следующей главе: системный подход к ТАСингу.
+ПРАКТИЧЕСКОЕ ЗАДАНИЕ: Пройдите World 1-1 в игре Super Mario Bros (или любой другой игре) с помощью одной только мышки, без использования режима Записи. +Делать спидран не нужно, просто освойтесь с процедурой рисования и стирания Ввода, а также с просмотром результатов колесом мыши. +Примерное время выполнения: 20-30 минут. + |
+
Created with the Personal Edition of HelpNDoc: Easily create Help documents
+Традиционный ТАСинг в Тасэдиторе
+В этом методе Ввод не редактируется точечными изменениями, а записывается целыми сессиями различной длительности (обычно короткими).
+Для переключения между просмотром и редактированием необходимо включать и выключать режим Записи (клавиша Q по умолчанию). Рекомендуется установить галочку "Follow cursor", чтобы наблюдать записываемый Ввод в Piano Roll.
+Основное занятие ТАСера:
+1. +Поставить Курсор Проигрывателя на начало редактируемого участка мувика, создать на этом кадре Закладку 1, определиться с целью.
+2. +Предположить наличие ошибки на участке, взвесить имеющиеся факторы оптимальности и прикинуть способ исправления ошибки (как именно требуется изменить Ввод, начиная с какого кадра и т.д.).
+3. +Осуществить навигацию к месту исправления ошибки (например, загрузить Закладку 1 и заново проиграть до нужного кадра, либо загрузить заранее заготовленную Закладку прямо на нужном кадре).
+4. +В режиме Read+Write пройти игру до наступления целевого события, записав Ввод, отличающийся от уже имевшегося на этом участке. По ходу записи следует периодически создавать Закладки в свободных слотах – для ускорения навигации в случае, когда нужно откатить предыдущее действие.
+5. +Когда ошибочность тестируемого варианта очевидна ещё до окончания записи участка, имеет смысл сразу вернуться к пункту 2.
+6. +[необязательный пункт] Сохранить готовый вариант во временную Закладку.
+7. +Сравнить полученный результат с лучшим результатом, используя критерий оптимальности. Если новый вариант оказался лучше (или если это ваш первый вариант прохождения участка), сохранить результат в Закладку 9. Слот 9 будет отвечать за хранение самого лучшего результата шлифовки участка.
+8. +Вернуться к пункту 2 и опробовать ещё варианты, до тех пор пока не иссякнут идеи по данному участку.
+9. +[необязательный пункт] Если идеи иссякают, можно почерпнуть информацию из прошлого: пересмотреть несколько предыдущих участков в режиме Read-Only (например, загрузить Закладку 0, поставленную на начало уровня). Также можно получить пищу для ума из будущего: поиграть в события игры, идущие после окончания текущего участка.
+10. +Когда идеи полностью иссякли, восстановить лучший вариант прохождения из Закладки 9 в текущий мувик, определиться со следующим участком и вернуться к пункту 1.
+Эти 10 пунктов могут описать не только ТАСинг, но вообще любой процесс создания Ввода в эмуляторе.
+Например, когда вы просто записываете пробное прохождение игры (то есть играете с сэйвами, но без упорной шлифовки) вы используете только пункты 1 – 5. При этом вам сгодится любое успешное прохождение участка, так что при первом же наступлении конечного события вы сразу с пункта 5 переходите на пункт 1, к следующему участку. В таком прохождении вы сохраняетесь ради быстрой навигации в случае фатальной ошибки (например, не успел нажать кнопку A и упал в яму), чтобы не пришлось переписывать Ввод с самого начала игры.
+Ну а во время серьёзной записи ТАСа необходимо не просто достичь конечного события в игре, но перепробовать множество различных вариантов достижения, чтобы в итоге выбрать самый лучший. Поэтому необходимо многократно повторить пункты 2 – 8, пока не возникнет чувство, что участок пройден идеально. Пункты 6 – 10 отличают ТАСинг от простой игры с сэйвами.
+Процесс Записи Ввода представляет собой редактирование Ввода прямо во время просмотра. То есть просматривая состояние игры на кадр 200, вы готовите Ввод для кадра 201 (кладёте пальцы на нужные кнопки), а затем с помощью Frame Advance передаёте этот Ввод в игру и сразу же видите результат – состояние игры на кадр 201 (если ориентироваться по состоянию оперативной памяти). Этот результат является промежуточным, его можно использовать для примерной оценки текущей игровой ситуации, но нельзя использовать для сравнения прошлой и текущей стратегии прохождения участка. Так что не нужно применять критерий оптимальности после каждого введённого/просмотренного кадра. Даже если в начале участка вы обгоняете прошлый вариант, в середине вы можете отстать. Только при достижении конца участка (пункт 6) появляется объективная основа для сравнений. Поэтому конец участка надо выбирать правильно.
+Основную часть рабочего времени в этом цикле занимают пункты 3 и 4. Порой, прежде чем дойти до конца участка, требуется несколько раз повторить пункты 2, 3, 4 и 5, записывая и отбраковывая решения, ошибочность которых становится очевидной почти сразу, даже без сравнений с прошлыми вариантами прохождения. Например, если вашего персонажа посреди разбега убивает враг, то сразу понятно, что далее вводить кнопки разбега быссмысленно, нужно откатиться назад и переписать Ввод так, чтобы враг промахнулся. В особо напряжённых ситуациях лучше даже разбить текущий участок на подучастки до и после взаимодействия с врагом, чтобы оптимизировать их по отдельности.
+Так как редактирование Ввода в этом методе осуществляется с помощью Курсора Проигрывателя (а не с помощью шустрого курсора мыши), то для эффективной работы необходимо научиться молниеносно доставлять голубой курсор к нужному кадру, пока не забылась текущая идея по улучшению участка. По мере наработки опыта ТАСеры приучаются жонглировать Закладками на уровне моторной памяти, машинально создавая промежуточные Закладки во время записи Ввода и беспечно загружая их при малейшей необходимости. Этому навыку невозможно научить, это приходит со временем, обычно после завершения первого-второго ТАСа.
+Плюсы метода:
++ Интуитивно понятный любому геймеру процесс.
++ Постоянная отдача позволяет на ходу корректировать свои решения и заранее отсекать в уме заведомо ошибочные комбинации Ввода. Это уменьшает количество требуемых исправлений.
++ Границы текущего участка машинально отмечаются с помощью Закладок (ради навигации), приучая ТАСера к порядку.
+Минусы метода:
+– Настойчивая отдача провоцирует ТАСера отсекать некоторые нелогичные, но потенциально выигрышные комбинации.
+– Медленная навигация к месту ошибки может отвлечь от мысли.
+– Так как Закладок всего 10, границы прошлых участков теряются при создании нового участка.
+Когда использовать: при записи пробного прохождения участка, когда не важна точность, но требуется примерное выполнение запланированной последовательности действий. А в отшлифовке Ввода этот метод значительно уступает остальным. Тем не менее, если вы новичок, рекомендуется освоить этот метод ТАСинга, так как инструменты для его применения есть в большинстве современных эмуляторов, а Тасэдитор пока есть только в FCEUX.
+При миграции в Тасэдитор традиционный метод несколько усовершенствовался по сравнению с тем же методом вне Тасэдитора:
+● +Появилась возможность не повторять заново весь Ввод от ближайшего сэйва до места ошибки и от места ошибки до конца участка. Для навигации без затирания Ввода можно прямо в режиме Записи вращать колесо мыши или перемещать Курсор Проигрывателя любым другим способом (кроме способа Frame Advance, т.к. он будет затирать старый Ввод).
+● +Появились новые способы навигации Курсором Проигрывателя (обратная перемотка, прыжки по Маркерам, прыжки по Закладкам без необходимости выключения Записи). Это позволяет быстрее попадать к любому желаемому месту и реже создавать Закладки.
+● +При загрузке ответвления Закладки мувик не усекается после кадра Закладки. Поэтому теперь можно сначала записать, к примеру, участок кадров 900-1000, а затем записать участок 700-900, не потеряв при этом записанные данные 900-1000 (но, возможно, потребуется пересинхронизация нажатий).
+● +Возможность использовать Тасэдитор вместо внешнего редактора Ввода (для копипаста и т.п.).
+● +Визуализация Ввода, лага, ответвлений Закладок и т.д.
+● +Дополнительные инструменты: мультитрекинг, наложение, шаблоны, авто-подгонка Ввода и т.д.
+Следующий метод гораздо эффективнее, хоть и требует некоторого привыкания.
+Created with the Personal Edition of HelpNDoc: Single source CHM, PDF, DOC and HTML Help creation
+