View Page Source

Revision (current)
Last Updated by Samsara on 8/7/2023 3:21 AM
Back to Page

[https://files.tasvideos.org/gameresources/nes/dw2/dw2.png|right]

Манипулирование удачей - действия, направленные на предопределение "случайных" результатов в игре путем варьирования ввода. Данное явление известно под различными именами, в том числе как: "luck abuse", "randomness abuse", или "RNG abuse".

Необходимо понимать, что никакая ЭВМ, будучи устройством детерминированным, не способна к случайному поведению. Все, что она делает - исполняет инструкции. Чтобы симулировать последовательность реалистично случайных чисел, в ЭВМ используются ''[http://en.wikipedia.org/wiki/Pseudorandom_number_generator|генераторы псевдослучайных чисел]'' (часто называемые ''генераторами случайных чисел'' и известные, как ''RNG'' или ''PRNG'').

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

* [https://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%BD%D0%B3%D1%80%D1%83%D1%8D%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4|Линейный конгруэнтный метод].
* [https://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80_%D1%81%D0%B4%D0%B2%D0%B8%D0%B3%D0%B0_%D1%81_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%BE%D0%B9_%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D0%B2%D1%8F%D0%B7%D1%8C%D1%8E|Регистр сдвига с линейной обратной связью].

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

* Промахи или критические попадания при атаках (вообще все пошаговые RPG)
* Результаты броска костей (настольные игры, симуляторы казино)
* Поведение игровых боссов (игры из серии Mega Man)
* Графические эффекты с частицами

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

!! В какие моменты игра итерирует RNG?

Чтобы был хоть какой-то эффект, игре необходимо получать новое значение RNG, как минимум, всякий раз, когда требуется определить наступление случайного события. Однако, существуют различные подходы к выбору момента, когда игра использует RNG:

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

!! Какие значения играют роль зерна для RNG?

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

* У некоторых игр зерно зашито в программном коде. Если  между уровнями зерно сбрасывается в начальное состояние, это дает удобную возможность вырезать и добавлять ввод.
* Некоторые игры хранят зерно в файлах сохранения.
* Некоторые игры в определенные моменты накручивают специальный счетчик, например, при обзоре начальных меню, и используют в роли зерна его.
* Текущее время является крайне популярным кандидатом на роль зерна в системах, оснащенных часами реального времени.
* Игры для Nintendo DS нередко получают зерно исходя из личного профиля игрока, хранимого в данных ОС консоли.
* Некоторые игры используют непосредственно ввод игрока как зерно.
* Некоторые игры используют переменчивые низкоуровневые показатели реального времени, к примеру, точное время, затрачиваемое кодом игры на вычисления в рамках одного кадра.

!! Какие из RNG и для каких действий использует игра?

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

!! Что мне с этим делать?

Есть вероятность, что у вас получится предопределять случайные события с помощью устройства ввода.

[http://www.fceux.com/web/help/taseditor/lib/dw-luck_manipulation.gif|right]

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

* Если игра итерирует RNG раз в кадр, выбирать момент нажатия кнопок будет необходимо, но достаточно для манипулирования. Правильный момент здесь - самое главное.

* Если игра итерирует RNG при легко выполнимых действиях, таких, как движение или стрельба, то их координирование позволит легко манипулировать рандомом.

* Если игра итерирует RNG лишь при действиях трудно выполнимых, или тех самых событиях, которые вам как раз и требуется вызвать, то получить желаемый результат очень сложно. Могут потребоваться жертвы. Способность к планированию сценария и глубокое понимание алгоритма RNG будут весьма и весьма полезны в этом случае.

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

Представленная GIF-анимация из игры про Черного Плаща наглядно демонстрирует, как разница в один кадр каждый раз приводит к выпадению различных предметов.


!!! Трудности при манипулировании удачей

!! Точка принятия решения

Допустим, вы делаете ТАС по игре про покемонов. Ваш покемон, в обычных условиях более медленный, экипирован предметом Quick Claw, дающим 25% шанс сходить первым. Вы пробуете манипулировать исходом проверки, варьируя время перед командой атаковать. Однако, сколько бы вы нb ждали, ваш покемон ходит вторым. Что же пошло не так?

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

В данном случае, срабатывание эффекта Quick Claw было предопределено еще до появления меню вашего хода. И коль скоро было принято негативное решение, ваш покемон обязательно сходит вторым.

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

!! Искусственный интеллект (AI)

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

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

То же касается несовершенных решений ИИ, согласно которым? плохой ход (с точки зрения человека) считается хорошим. Единственный фактор здесь это упорство ИИ в выполнении такого хода.

!! Прочие проблемы

В тех играх, где требуется манипулировать поведением врагов, обязательно убедитесь, что обстоятельства позволяют это сделать.

* Отдельные враги имеют фиксированный алгоритм поведения.
* Некоторые из них выполняют определенные атаки при конкретных обстоятельствах. Это  может быть низкий уровень здоровья, или какое-то определенное положение или состояние вашего персонажа.

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

!! Редкость

Хотя эта проблема не из технических, редкость (обычно вероятность в 1/1000 или реже) какого-то события или последовательности таковых может предполагаться в силу ненаступления этого события в течение любого приемлемого времени. Есть несколько способов разобраться с этим:

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

!!! Советы по манипулированию удачей

!! Разделение последовательности событий

Предположим, вам нужно вызвать три события, каждое из которых происходит почти сразу после предыдущего. Каждое из них имеет шанс срабатывания, равный 1/16, следовательно общая вероятность - (1/16)^3, или 1/4096, что не очень много.

Однако, если возможно добавить ввод (например, подождать) между этими событиями, то вместо одного манипулирования тремя событиями может получиться три манипулирования, по одному для каждого события. Так будет гораздо проще, ведь каждым событием нужно будет манипулировать при вероятности, равной 1/16.

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

!! Адреса переменных, входящих в RNG, и их мониторинг

Разве не будет полезно знать, какие именно действия итерируют RNG?

Вот где мониторинг RNG в памяти очень полезен. Наблюдая за тем, когда оно меняется и как, можно предположить, какие примерно действия могут помочь при манипулировании.

К примеру, допустим, что значение переменной RNG в памяти обычно остается постоянным, но изменяется при выстреле из определенного оружия. Тогда вы знаете, что пользование данным оружием позволит вам манипулировать удачей. Более того, вы замечаете, что поведение отдельных врагов влияет на RNG. Значит, этим поведением тоже можно манипулировать.

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

В первую очередь, надо найти RNG в памяти. Подробнее в статье о [Memory Search|поиске в памяти]. Далее отслеживаем его значение.

!! Алгоритм RNG

Как правило, разобраться в формуле RNG - непростая задача, а понять, как игра использует эти случайные числа, еще сложнее.

Существует [https://en.wikipedia.org/wiki/List_of_random_number_generators|ряд популярных алгоритмов для RNG], но игры на старых системах чаще используют что-то самописное. Современные же игры как раз склонны доверять реализацию RNG стандартным библиотекам.

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

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

!! Примеры

Одним из колоритных примеров манипулирования удачей может служит мувик по игре [1482M|Dragon Warrior]. В данном прохождении игрок полагается на сверхъестественное везение в следующих ситуациях:
* Все нежелательные встречи с врагами пресекаются за счет приостановки игрового персонажа на кадр или два в различные моменты прохождения.
* При встрече с врагом его уровнем здоровья манипулируют так, чтобы он был минимален.
* Игровой персонаж всегда наносит критический урон, вероятностью которого манипулируют, прокручивая боевое меню и дожидаясь нужного кадра для удара. Сдвиг на один кадр привел бы к отсутствию критического урона.
* Когда игровому персонажу необходимо умереть, встретившимся ему врагом манипулируют так, чтобы он напал первым.

!! К прочтению

* Манипулирование удачей является одной из основных техник создания ТАС, перечисленных в статье об [GameResources/CommonTricks|основных трюках].
* [Reverse Engineering|Обратная разработка]
* [Advanced Luck Manipulation|Продвинутое манипулирование удачей]
* В [Glossary|Глоссарии] можно узнать о прочих терминах.