>> EN | English

Основные техники

"Это спарринг-программа. Похожа на виртуальную среду Матрицы. В ней действуют такие же законы – например, гравитация. Только запомни - это законы компьютерной системы. Одни из них можно обойти. Другие - нарушить." ― Морфей, "Матрица"
Существует ряд техник, которые можно применить (или хотя бы попытаться) во множестве игр, чтобы улучшить время. Если вы делаете мувик, обязательно попробуйте их все. Если не поможет, можно изобрести свои.
Table of contents

Злоупотребление непредусмотренными ситуациями

Непроверенный код

Непроверенный код является основным источников багов в играх. Это код, работающий в ситуациях, которые разработчики не тестировали.
Такой код не всегда полезен. К примеру, в игре Battletoads есть один уровень, который невозможно пройти вдвоем, потому что при тестировании никто не попытался пройти его в режиме для двоих игроков. Игра попала в продажу с серьезной программной ошибкой, из-за которой игрок 2 не мог двигаться (отчего моментально погибал) на уровне "Clinger-Wingers".

Ошибочные предположения

Ввиду ограниченной производительности, чтобы снизить количество необходимых вычислений, в старых консольных играх часто берутся за аксиому на деле не всегда верные предположения. Иногда такие ошибки могут оставаться просто по недосмотру программиста.

Есть большое множество колоритных примеров, как то:

Побочные эффекты паузы

В некоторых играх вызов паузы имеет непредусмотренные программистом последствия:
Может оказаться очень полезным уделить время исследованию аномалий, создаваемых вызовом паузы в игре.

Смешение разной игровой логики


Злоупотребление уроном от монстров

"Отталкивающий" урон

Для многих игр типична такая архитектура уровней, где персонаж игрока совсем немного не дотягивается до некоторых платформ или проходов. Однако, разработчики часто упускают из внимания ускорение, придаваемое атаками монстров персонажу игрока. Получив урон в нужном месте и в нужное время, можно заставить врагов забросить вас туда, куда по изначальному замыслу вам было попадать не положено.
В некоторых случаях, по недосмотру разработчиков, получение урона может протолкнуть персонажа сквозь физические препятствия. Этим можно пользоваться для нахождения не предусмотренных авторами коротких путей.

Иногда бывает так, что получение существенного урона отбрасывает персонажа со скоростью выше обычной. При должном планировании, это может запустить игрока в нужном направлении и сэкономить время. Игры Super Castlevania 4, Legend of Zelda, Link's Awakening, и Kirby Superstar являются хорошими примерами.


А иногда бывает и так, что получив урон, персонаж сохраняет скорость до тех пор, пока не остановится. В приведенном примере из игры Adventure Island 4, персонаж игрока оказывается способен сохранять скорость удивительно долгое время. Также стоит ознакомиться со злоупотреблением окнами ввода.

Злоупотребление кадрами неуязвимости

В большинстве игр существуют ситуации, когда персонажу игрока нельзя причинить урон.

Неуязвимость по событию

Нередко, когда игра начинает разыгрывать какую-то скриптовую сцену, которую нельзя прервать, к примеру, анимацию завершения уровня, персонаж игрока становится неуязвимым. Если в это время он коснется чего-то смертельно опасного, игра может это попросту проигнорировать. Мувики по играм Little Nemo и Gremlins 2 содержат примеры такого поведения.
Во множестве игр, таких как Umihara Kawase и The Wrath Of Black Manta, столкновения со смертельно опасными объектами игнорируются, если персонаж игрока проходит через дверь. Игра Mega Man 2 ведет себя аналогично, когда игрок меняет оружие.

Неуязвимость при ранении

Во многих играх, если персонаж игрока получает урон, он начинает мигать, временно становясь неуязвимым, что не позволяет ему моментально снова получить урон. Подобная "защита" нередко спасает персонажа в том числе от "смертельных" опасностей, позволяя, к примеру, безопасно пройтись по острым кольям или лаве, пока мигание не закончилось. Примеры такой механики можно увидеть в играх Mega Man 4 и Blaster Master.
Подобный период бессмертия может дать и другие преимущества, такие, как возможность пройти сквозь противников, сражение с которыми могло бы отнять много времени или привело бы к лишним потерям. Примеры использования этих преимуществ можно наблюдать в таких играх, как Goonies и Castlevania: Circle of the Moon.

Избежание обратных отсчетов

Во многих играх уровни заканчиваются анимацией прокрутки счетчика очков. Время, затрачиваемое на это, также считается, и должно быть сведено к минимуму за счет подбора настолько оптимального счета, насколько возможно без потери скорости. Обычно это сводится к воздержанию от подбора предметов и приходу в конец уровня с подходящим уровнем здоровья персонажа.

Нетипичные стратегии

Злоупотребление смертью и концом игры.


Хотя это может показаться противоречащим цели делать все максимально быстро, это не всегда так. Иногда после гибели персонажа, игра возвращает его на исходную позицию, давая возможность срезать путь. Кроме того, здоровье персонажа часто восстанавливается, могут быть потеряны или добавлены предметы.
В играх с несколькими игровыми персонажами это может быть использовано, чтобы снизить количество диалогов. К примеру, в ролевых играх мертвые персонажи не требуют давать им команды. Кроме того, погибшие члены группы могут означать изменение ее состава, что может повлиять на длину катсцен, если те зависят от присутствия конкретных персонажей.
В играх на нескольких игроков, кто-то из них может использовать смерть, чтобы возродиться в более выгодной позиции. Видеоролик справа показывает применение данной техники в игре Super C. Оба игрока гибнут несколько раз подряд, чтобы, каждый раз возрождаясь вверху экрана, сэкономить время на подъеме.
Все это может использоваться для экономии времени. Мувики, содержащие такие техники, попадают в категорию злоупотребляющих смертью игрока.

Воздержание от сохранений.

Часто выполнение команды "Сохранить игру" занимает несколько секунд, и при создании ТАС не требуется. Аналогично, необходимо отключать автосохранения.
Однако, во многих играх это может дать некоторые преимущества, такие как перенос ближе к началу уровня, сбросить какие-то параметры персонажа и прочие особенности поведения при загрузке сохраненной игры. В силу чего рекомендуется изучать, что делает игра после сохранения игры.

Сброс игры без очистки SRAM.

У игровых приставок обычно есть кнопка сброса, которая перезапускает игру на начало программы. Это действие может показаться очевидно невыгодным, но иногда сделать перезагрузку сразу после сохранения игры оказывается быстрее, чем продолжать играть. Самым типичным применением такого поведения является позволить игре сохраниться в конце уровня, но последующую катсцену не смотреть.

Сброс игры с учетом SRAM.

Сохранение игры - процесс тонкий. Игры при этом часто говорят "Не выключайте консоль". Игнорирование этого совета часто ведет к повреждению сохраняемых данных. Как правило, впоследствии игра может отказаться загружать их. Тем не менее, правильный выбор момента и некоторое везение могут позволить так повредить сохраненные данные, что игра посчитает их корректными. Это может привести к серьезным программным ошибкам и позволить существенно отойти от сценария игры.

Злоупотребление особенностями ввода

Много действий за раз

Попробуйте сочетания клавиш такие, какие, скорее всего, не тестировались, как то одновременное нажатие "влево"+"вправо" или "вверх"+"вниз". Попробуйте использовать сразу несколько устройств ввода, к примеру, одновременно геймпад и тачскрин. Все это может приводить к порой безумным, но полезным последствиям. Примеры использования подобных программных ошибок можно наблюдать в играх Zelda: ALttP и Zelda 2.
(Имейте ввиду, что некоторые эмуляторы (такие, как VirtuaNES или старые версии Snes9x и FCEU) не позволяют одновременное нажатие "влево"+"вправо" или "вверх"+"вниз". На реальных приставках такого ограничения нет, если не считать конструкции геймпада, обычно позволяющей нажимать противоположные направления лишь с очень большим усилием.)

Окна ввода

В ряде игр возможны ситуации, когда в течение короткого периода времени вы можете давать игре команды там, где от вас этого не ждут. Использование такой возможности может как просто позволить вам что-то сделать раньше, так и вызвать поведение, не предусмотренное разработчиками.

Чередование клавиш.

Часто бывает так, что вам нужно нажать какую-нибудь кнопку, чтобы пропустить диалог, начать игру и так далее. Если для этого можно использовать, скажем, одну из двух кнопок, можно нажимать их вот так:
A, B, A, B, A, B, A, B, и т. д.
Таким образом, новая кнопка будет нажиматься каждый кадр. Это не поможет вам выиграть время в мувике, но ускорит его производство, коль скоро вам не потребуется каждый раз делать лишние прогоны для определения максимально раннего кадра для ввода. Некоторые эмуляторы (такие, как VBA и Snes9x) позволяют настроить автонажатие А и В начиная с определенных кадров и колотить эту последовательность за вас, что делает процесс еще проще.
Бывает и так, что игра на самом деле способна получать ввод на каждом кадре, и в таком случае это действительно позволяет выиграть время в мувике, в сравнении с попытками нажать одну или две кнопки пораньше. Кроме того, в некоторых играх бывает вообще не предусмотрен такой быстрый ввод данных, что может приводить к чудным последствиям.
Важно помнить, что использование данной техники может серьезно осложнить применение HEX-редактора. Могут возникнуть проблемы с точным определением кадра, в котором ввод реально повлиял на поведение игры.

Злоупотребление супер-скоростью

Действуя на скорости, невозможной для живого человека, к примеру, нажимая клавиши 30 раз в секунду, вы можете получить возможности, о наличии которых разработчики могли никогда не догадываться.

Обогнать игру

Двигаясь на слишком большой скорости, можно часто застать игру врасплох. Иначе говоря, у нее может не оказаться времени приготовиться к вашему прибытию в определенную точку. На практике, некоторые объекты, которым там положено находиться, могут быть еще не созданы. В зависимости от конкретной ситуации это может оказаться как удачей, так и неприятностью.

Нет в кадре? Значит, не существует!

Нередко игры облегчают себе задачу, принимая во внимание лишь те объекты, что находятся неподалеку от видимой игроку местности. Если вам удастся обогнать игровую камеру, может получиться проигнорировать объекты, которые в ином случае могли бы создать задержку.

Обработка коллизий на скорости


Игры почти никогда не обрабатывают движение персонажей между кадрами. А это значит, что в одном кадре вы в одном месте, а в следующем - в другом, но проходить путь между ними вам, как в реальной жизни, не требуется. Такая уж вещь - анимация.
Когда вы двигаетесь очень быстро, вы иногда можете проходить сквозь объекты просто потому, что кадра, где игра могла бы заметить вас внутри них, не случается. Если сочетать эту технику с упомянутым ниже злоупотреблением обработкой коллизий на малом расстоянии, скорость даже не должна быть такой уж большой.
Примером может послужить обработка коллизий в игре Gradius. Из-за очень большой скорости передвижения, звездолет игрока может пролетать сквозь тонкие преграды, столкновение с которыми при обычном прохождении было бы для него фатально.


Обработка коллизий

Коллизии на малых расстояниях

Большинство игр не пытаются определять коллизии с точностью до пикселя. Спрайты персонажей игрока и его врагов (собственно картинки на экране) могут быть всяческих форм, но их "хитбоксы" обычно прямоугольны. Игры программируют так в силу того, что гораздо проще рассчитать "хитбокс персонажа пересекается с хитбоксом врага", чем "какой-то пиксель спрайта игрока совпадает с каким-то пикселем спрайта врага".
В некоторых играх хитбоксы даже больше, чем сами спрайты, из-за чего враг может ударить игрока тогда, когда с виду и не должен. Однако, для большинства игр справедливо обратное: хитбоксы на деле меньше, чем спрайты, из-за чего игрок может визуально прикоснуться к врагу или даже пройти сквозь него, не получив урона. Такие игры, как SMB1, SMB2 и Solomon's Key содержат множество примеров такого поведения.

Движение между тайлами по диагонали

Некоторые игры определяют, на каком тайле находится персонаж, проверяя лишь одну пару координат. Это может позволить двигаться между тайлами по диагонали, что иногда приносит пользу, давая возможность избежать попадания в тайлы, причиняющие персонажу урон или смерть.
Демонстрация на примере игры Jetpack: http://www.youtube.com/watch?v=EjTNYr7J_DY

Прочие ошибки обработки коллизий

Используя ряд способов (таких как вхождение в углы необычным образом, или быть затолканным туда врагами), игрок иногда может частично углубиться в пол, стены или потолок. В каких-то случаях это приводит лишь к тому, что он застревает и не может идти дальше, но иногда это позволяет найти новые пути, до сего момента невозможные. К примеру, можно найти опору и совершить прыжок от стены. Примеры такого поведения есть в мувиках по играм SMB1 и SMB2j.
В большинстве игр расчет коллизий очень прост. Как отмечено выше, движение персонажей не непрерывно, из-за чего они могут проходить сквозь стены или врагов при условии достаточно большой скорости или необычной траектории движения. Исходя из положения стен, многие игры компенсируют это, пытаясь быстро вытолкнуть игрока из стены и не дать ему там застрять. В ряде случаев программу можно обмануть, и заставить ее толкать вас в неверном направлении, что используется для хождения сквозь стены в игре SMB1. А в некоторых играх, выталкивание из стены заставляет вашего персонажа быстро лететь в конкретном направлении (обычно по горизонтали), пока не найдется место, где из стены можно выйти. Это особенно полезно, когда вы можете заставить игру прямо таки выстрелить вашим героем в нужном направлении! В играх Mega Man и Mega Man 2 даже потолки выталкивают вас горизонтально, в силу чего авторы мувиков по ним регулярно устраивают трюки, заставляющие Мега Мэна втыкаться в потолок.
На анимации справа показан классический пример из игры Super Mario Bros (знаменитый трюк со стеной, позволяющий попасть в мир -1).

Прыжки с обрывов

В большинстве игр, особенно в платформерах, скорость игровых персонажей не линейна. Как правило, имеет место принцип ускорения: чем дольше персонаж движется в конкретном направлении, тем быстрей. Аналогично, чем дольше падение, тем быстрее персонаж преодолеет расстояние между начальной точкой и конечной точкой ниже, из-за чего гораздо предпочтительнее начинать прыжок недалеко от края платформы. Старайтесь не поддаваться соблазну просто пробежать и упасть, так как часто персонаж будет начинать падение с почти нулевой вертикальной скоростью (если, конечно, вам это не на руку).
Замечание: Некоторые игры снижают вашу горизонтальную скорость в прыжке. В них обычно лучше делать очень маленький прыжок лишь за пару кадров до обрыва, или даже вообще не прыгать. Всегда досконально исследуйте физику игры, над которой вы работаете, не ленитесь пользоваться инструментами поиска в памяти, чтобы найти точные значения переменных, отражающих скорость персонажа.

Перенос субпиксельной позиции


Данное явление крайне распространено среди игр для NES (и несколько более редкое для DS и GBA). Вне зависимости от платформы, это следует исследовать в любой игре.
Субпиксельная позиция измеряется в дробных частях пикселя. Это используется для того, чтобы определять, на сколько пикселей персонаж перемещается за кадр. Часто, когда происходит переход в следующий уровень/комнату, это значение не сбрасывается. Это значит, что после перехода оно продолжит использоваться. Если возможно, это значение под конец уровня следует оставлять большим, чтобы дать персонажу маленькую "фору" на следующем старте.
Замечание: Несовпадение субпиксельной позиции - типичная причина рассинхронизации при копировании ввода между мувиками. В играх, где есть перенос субпиксельной позиции, перед копированием ее необходимо выровнять.

Манипулирование удачей.

Игровая приставка - компьютер. Она всегда в точности следует программе, и всегда выдает одинаковый результат при условии одинаковых вводимых данных. Там не бывает ничего случайного. Единственный настоящий фактор случайности в играх - вы сами! Поведение всех игр абсолютно детерминировано и полностью зависит от данных, вводимых пользователем.
Научитесь пользоваться этим обстоятельством. На все, что имеет в себе элемент случайности, как то поведение врагов или выпадение предметов, вы можете повлиять.
Для подробностей, см. статью о манипуляции удачей.

Борьба с лагом.

Производительность старых игровых систем ограничена. Они не могут обработать за кадр больше объектов, чем в рамках некоторого предела. Если же их слишком много, игра замедляется, так как посчитать все за кадр не успевает.
Знание причин данного феномена очень важно при создании ТАС-мувика. Часто лаг можно минимизировать как путем сохранения низкой численности объектов на экране за счет раннего их уничтожения, так и за счет их неуничтожения во избежание запуска чересчур сложной (в том числе и для процессора) анимации гибели. Манипулирование удачей также может помочь. В некоторых играх появление врагов зависит от случайности.
Наличие объектов на экране - не единственный источник нагрузки на процессор. Некоторые действия требуют больше вычислений, чем другие. К примеру, близость к врагам или сбор и использование отдельных предметов также могут вызвать лаги.
Часто лаги случаются по вообще непонятным причинам. Иногда незначительная смена стратегии без потерь по времени может позволить избежать этого. В таких случаях, поиск в памяти игры может помочь с этим.

Повреждение данных в памяти игры или сохранениях

В памяти игры определяется, что вы сделали, что делаете, и что вам еще надо сделать. Если вдруг у вас появилась возможность напрямую менять данные в памяти, вы уже практически победили.
Подложив не те значения не по тому адресу, вы можете скомандовать игре делать вещи за пределами ее функционала. Однако, это требует обширных знаний и глубокого разбора кода игры.

Настройки игры

Многие игры предлагают игроку различные опции, влияющие на игровой процесс. Рекомендуется всегда проверять их на случай, если какие-то из них позволят сэкономить время.

Скорость текста

Некоторые игры позволяют указать, как быстро появляются и исчезают текстовые сообщения. Установка максимальной скорости обычно позволяет сэкономить время и имеет смысл даже тогда, когда текст можно пропустить, так как ограничения по вводу данных не всегда позволяют сделать это так же быстро.

Анимация передвижения/боя

В ряде ролевых и стратегических игр можно выключить анимацию передвижения/боя, либо заменить ее на упрощенный вариант. Всегда выбирайте самое быстрое.

Демонстрации геймплея и катсцены

Хотя вы, скорее всего, и так сможете пропустить их с помощью ввода, если игра позволяет, может быть лучше выключить их совсем.

Уровень сложности

Как правило, мы предпочитаем мувики, сделанные на максимальной сложности, как лучше демонстрирующие сверхчеловеческое мастерство при прохождении, но есть случаи, когда пониженная сложность дает для этого более подходящие условия, и тогда такой вариант нас устраивает больше.
Замечание: В некоторых играх на определенной сложности, обычно самой высокой, становятся доступны дополнительные предметы, уровни, боссы и/или секретные концовки. Подобные обстоятельства могут пересечься с целями, которые вы себе ставите в мувике. Потому старайтесь заранее выведать все секреты игры.

Автосохранение

В случае ТАС это часто пустая трата времени, особенно если происходит регулярно. Если возможно, эту опцию необходимо выключить, в иных случаях - избегать ее срабатывания.

Дата и время

Во многих играх эти показатели влияют на случайные факторы. Подробнее в статье о манипуляции удачей.
В некоторых играх конкретные значения даты и времени могут открыть доступ к секретному контенту.

Профиль пользователя

Как правило, в большинстве длинных и не очень игр с возможностью сохранения/загрузки, игрока просят создать пользовательский профиль, содержащий имя персонажа игрока, его пол, день рождения и т. д.
Обычно выгоднее делать такую информацию максимально краткой, чтобы не тратить время на ее заполнение при создании профиля или цитирование в ходе игрового процесса. Однако, в некоторых играх информация из профиля может иметь как конкретное, так и случайное влияние на игровой процесс, давая вам возможность манипулировать ей в своих целях.

Как находить трюки

Изучайте существующий материал

Прохождения, руководства, посты на форумах, электронная переписка по почте или IRC, и т. д. Если вы обнаружили или подозреваете, что игра, по которой вы делаете мувик, работает на движке, аналогичном движку из другой игры, по которой уже есть ТАС, проверьте последний на пример трюков, которые можно было бы применить и в вашей игре.

Изучайте данные игры

Чтение кода

Все игры являются программами. И хотя написаны они для того, чтобы их исполняла игровая система, вас ничего не останавливает от самостоятельного прочтения кода. Разобраться в нем, скорее всего, будет непросто, но именно там определены точные правила поведения игры.
Лучший способ понять эти правила - просто прочитать и попытаться понять, что в точности они значат. Вы можете в точности разобраться, как работает генератор случайных чисел, или просто почему персонаж игрока (теоретически) не может войти в стену.
Данная задача совсем не из простых. Чтобы ей заниматься, лучше уметь программировать. И программирование это не обычное, а низкоуровневое. От вас потребуется способность понимать инструкции, непосредственно передаваемые процессору, которые могут не совпадать с тем, что изначально писал разработчик.

Читайте скрипты

Многие игры, особенно те, что с сюжетом, имеют свои средства исполнения скриптов. От них часто зависят важные вещи, такие как места, куда вы можете пойти, и как должны вести себя враги.
Изучите, как работает исполнение скриптов и что эти скрипты делают. В них, как и в основной программе, могут быть ошибки. Но что важнее всего, это позволить вам четко понимать свои возможности.

Изучите данные уровней

Часто игры хранят важные данные в характеристиках уровней. Там можно найти всяческие переключатели тайлов, триггерные зоны, шаблоны поведения врагов и многое другое. Зачем тратить время и гадать, где что находится, когда можно найти все заранее?

Изучите структуры данных

Игры часто хранят имеющие практический смысл данные одним большим массивом, будь то параметры предметов в игре, показатели здоровья врагов, параметры роста характеристик персонажа или заранее вычисленные математические функции. Нет смысла тратить время на поиск значений в памяти по одному, когда их можно прочесть все разом.

Экспериментируйте

Просто пробуйте делать то, чего от вас не ожидают. Разработчики игр часто забывают о множестве возможностей. В ваших интересах напомнить им об этом.

См. также


RU/GameResources/CommonTricks last edited by adelikat on 3/18/2022 1:07 PM
Page History Latest diff List referrers View Source