Статьи: Редактирование файлов-сохраниния игры Plants vs Zombies
11.12.2011


Вступление

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

Количество "Солнца" и денег ищются как обычно через 4 байта, так что ничего сложного здесь нет. Единственное, так как в игре все монеты/алмазы дают "круглое" значение денег, то последний нуль в значении отбрасывается и приписывается самим кодом программы, то есть искать нужно без последнего нуля.
Максимальное значение денег - $ 999 990.
Максимальное количество "Солнца" - 9 999.
Если поставить больше, то игра их откатит именно до тих значений.

Тема этой статьи куда интереснее. Файл-сохранение игры весит меньше килобайта, так что я решил его исследовать. Честно говоря, впервые исследовал такой файл, но я быстро учусь и смог найти много интересного.

Тем, что мне известно о СЕ, невозможно или очень сложно достичь многого того, что доступно через файл-сохранения. В нём описано количество денег (единственное, что можно легко сделать через СЕ), пройденных миссий, количество прохождений кампании (при втором прохождении открывается Зомби-Йети, а также количество прохождений выдаёт при наведении золотой подсолнух), прохождении мини-игр, головоломок и выживаний, купленные предметы, цветы в Дзен-Саду.

Но всё-таки есть и ограничения. Пройти кампанию за минуту изменением байт не получится. Если нужно получить Серебряный Подсолнух, то придётся пройти последнюю миссию (5-10) против Доктора Зомбоса. Нельзя посадить растения в Дзен-Сад (подробнее написано в соответствующей главе статьи).

Что нам понадобится?

  • Сама игра Plants vs Zombies.
  • Шестнадцатиричный редактор WinHex.

Основы работы в WinHex'е

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

С чем мы будем работать? Вот скрины моего файла. Используйте их для справки:
Скрин 1, скрин 2, скрин 3.

Откройте в WinHex'е файл "userX.dat", где Х - номер игрока (скорее всего 1), который находится в папке "PlantsVsZombies\userdata", где "PlantsVsZombies" - папка с игрой (по умолчанию "C:\Program Files\PlantsVsZombies".

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

Деньги, кампания, мини-игры, головоломки и выживания

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

Красным цветом выделен байт, отвечающий за количество пройденных миссий. "32" - последняя миссия, если поставить больше, кампания начнётся сначала, но приз Вы не получите, так что эту миссию проходить обязательно.
Синим - байты, отвечающие за количество денег. Значение на скрине в игре равно $ 999 990.
Чёрным - байты, отвечающие за количество прохождений кампании. На скрине - 16777215.

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

Дальше идут мини-игры и головоломки. Делается всё аналогично, как с выживанием, только раунд один.

Мини-игры:

Головоломки:

Взлом магазина Дейва

Следующий скрин. У себя нужный участок ищете по оффсету.

Первые два ряда, выделенные чёрным цветом - байты улучшений растений. По порядку: Горохострел, Двойной Подсолнух, Мракогриб, Кошкамышь, Колючий Камень, Золотой Магнит, Морозный Арбуз, Кукурузная Пушка.
Красным цветом выделен байт, отвечающий за количество оставшихся раундов, где будут Грабли.
Зелёным - байты Чистильщика Бассейна и Чистильщика Крыши.
Синим - слоты под растения. В начале игры 6 отделений. Расширение можно купить 4 раза. Итого 10 отделений и байт "04". Ставить больше четырёх - значит вылететь в начале миссии!
Тёмно синим - Золотая Лейка.
Далее описываются параметры, имеющие на скрине значение "00". Тут я немного со скрином ошибся. Для покупки предмета значение нужно поменять на "01".
Голубым - Имитатор.
Светло-зелёным/жёлтым (кому как) - Аптечка.
Тёмно-зелёным - Фонограф.
Оранжевым - Садовые Перчатки.
Розовым - Грибной сад.
Зелёным цветом (может, салатовым) - Садовый Аквариум.

Байты Дерева Мудрости находится в другом месте, а точнее около байтов мини-игр. На скрине ниже он выделен красным цветом. Значение может быть "FF FF FF":

Дзен-Сад

Здесь я нашёл не такие уж и интересные возможности. Параметры Дзен-Сада находятся в самом низу файла. В зависисости от количества растений длина этого блока различается. В моём случае, там всего два растения.

Первый байт, выделенный чёрным цветом, обозначает количество растений в Дзен-Саду. Но при его изменении игра выдаст ошибку и не запустится! При получении нового растения в файле дописывется новый блок байтов! Вы могли заметить, что байты раздвоились по цветам, это произошло именно из-за того, что у меня два растения.

Красным цветом выделены байты, отвечающие за ID (идентификатор) растения. То есть, если у Вас Золотая Ромашка, то, поменяв его, можно сделать, например, Скорострел. Скачать список ID (txt).
Зелёным - расположение растений. Тёмно-зелёным по оси Х, а светло-зелёным по оси Y. Отсчёт ведётся с нуля.
Синим - степень роста. "03" - степень взрослого растения, который при следующем ухаживании засветится и начнёт приносить прибыль. Ограничение: нельзя заставить растение светиться.

Размножаем растения

Выделяем байты растения (лучше счастливого), копируем их, щёлкаем по последнему байту, вставляем байты (на вопрос соглашаемся) и не забываем изменить количество растений.
Это наиболее простой способ.
Скрин.

Ещё можно щёлкнуть по последнему байту правой кнопкой мыши и выбрать "Edit" -> "Paste Zero Bytes" -> Подтверждаем -> Вводим "88" (без кавычек) и заменяем нули нужными параметрами* (не забудьте увеличить общее количество растений).
* Тут начинаются сложности, так как ещё не все параметры известны. Предлагаю кому-нибудь разобраться и написать в комментариях.
Скрин.