Вечная жизнь в играх своими руками




Хак на диске - часть 5


Вместо сравнения сэйвов, мы используем альтернативный подход, называемый "прямым константным поиском". Допустим, у нас сложилась следующая ситуация: здоровье — 68%, броня — 95%, пистолетных патронов — 73 (200 max), патронов для дробовика — 24 (50 max). Переводим 68 и 95 в шестнадцатеричную систему исчисления, получаем 44h и 5Fh соответственно. Отгружаем игру в doomsav.dsg и загружаем этот файл в hiew. Давим <F7> (search) и ищем 44h где оно есть (внимание! при поиске чисел > 255 необходимо помнить, что младший байт располагается по меньшему адресу и потому ищется в обратном порядке, то есть для поиска 1234h в hiew'е необходимо ввести 34 12).

Ячейка с искомым значением тут же обнаруживается по смещению B4h. Может это и не здоровье, но… рядом с ней лежит 5Fh, а это, как мы помним, наша броня:

000000B0:  00 00 00 00-44 00 5F 00-01 00 01 0A-00 00 00 00      D _ O O0

000000C0:  00 00 00 00-00 00 00 00-00 00 00 00-00 00 00 00

000000D0:  00 00 00 00-00 00 00 00-00 00 00 00-00 00 00 00

000000E0:  00 00 00 00-00 00 00 00-00 00 00 00-00 00 00 00

000000F0:  00 00 00 00-00 00 00 00-00 00 00 00-00 00 00 30                 0

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

Исправляем оба числа на FFFFh и загружаем исправленный сэйв в игру. Держите мой хвост! У нас получилось!!!!

Рисунок 15 c такой броней и здоровьем никакие враги не страшны!

Теперь разберемся с оружием и патронами. Добавить патроны — несложно, но прежде необходимо заполучить оружие. Обычно оно хранится в игре в переменных-флагов: одно значение соответствует состоянию "оружие есть", другое — "оружия нет". Флаги бывают битовыми, байтовыми, словными и двухсловными. Битовый флаг хранит все оружие в одной ячейке. Например, 01h (0000000001b) означает пистолет, 02h (0000000010b) – дробовик, а 03h (0000000011b) — пистолет с винчестером.


Содержание  Назад  Вперед