Перейти к содержанию

[Sniper Elite: Nazi Zombie Army 2] Создание функции быстрых сохранений


Рекомендуемые сообщения

Самое большое разочарование, которое может принести игра при попытках спидранить её - отсутствие быстрых сохранений и загрузок. Из-за чего практика и исследование игры превращаются в пытку. Для создания быстрых сохранений нам потребуется IDA и CE. В теории, существует некоторый флаг, который говорит игре в какой момент необходимо сделать сохранение игры, например, при выполнении задания или какого-то триггера местности. И раз игра умеет делать сохранения, то, и мы сможем. Вы можете сказать: “Эй, зачем такие сложности? Есть же телепорт”. К сожалению, телепорт не подходит из-за того, что не умеет сохранять текущее состояние сущностей, которое временами очень важно.


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

 

Полученная инструкция указывает на код, который выглядит вот так.

 

bBVFogA.png

 

 

Дальше, необходимо исследовать функции уходя все глубже в код, но так как игра имеет не особо сложный движок, можно попробовать использовать Proximity View. Это довольно интересная опция, которой можно посмотреть связи между функциями, перекрестными ссылками, а также ссылками на данные. Используя опцию Find Path в Proximity View, говорим IDA построить путь вызовов от функции с проверкой “а существует ли чекпоинт” до переменной, которая отвечает за сохранение.

 

pmFccAh.png

 

 

Которая выглядит довольно просто. Установка значению флага 1 и перезапись указателя старых данных и текущих.

 

LJbFLIS.png

 

 

Изменено пользователем ChestGlaring
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.