Mr2 | Дата: Вторник, 04.08.2015, 20:11 | Сообщение # 1 |
Рядовой
Группа: Проверенные
Сообщений: 13
Статус: Оффлайн
| Данный мануал демонстрирует изменение программного кода в PSX играх.
Необходимые программы: 1.CDmage 2.Munch 3.PSIG 4.Notepad++ 5.Translhextion 6.HexCmp
Обозначения: $ - адрес в оперативной памяти. f$ - адрес в исполняемом файле(SLUS_007.47) игры.
Примечание: Поиск и анализ кода тут не рассматриваются, так как это большая тема, требующая отдельного рассмотрения.
Для примера возьмём Resident Evil DC dual shock. Казалось бы в игре всё гладко, и лезть туда не стоит. Но тот кто играл в RE4 знает - что круче перезаряжать оружие в самой игре, а не лезть каждый раз в инвентарь. Предоставим игроку такую возможность в первой части RE.
Сама возможность перезарядки делается очень просто:
Активация перезарядки: $800414A0 f$31CA0 = 0x3C делаем дополнительную проверку кнопки. $800415A1 f$31DA1 =0x02 добавляем в проверку кнопки []. $800447EC f$34FEC =0x00000000 отключаем перезапись патронов в пистолете.
Но если всё вначале очень просто, жди что далее вылезет что-то сложное. Этого не надо пугаться, просто надо быть готовым к этому.
Дело в том - что перезарядка будет реалистичной, если в заменяемой обойме останутся патроны, то главный герой выкинет эту обойму вместе с ними, и вставит новую. Поклонники реализма будут рады, возможно до того момента когда патроны закончатся. Игроки со стажем вряд ли будут пользоваться такой перезарядкой.
Модификация кода перезарядки: В общем, извлекаем исполняемый файл(SLUS_007.47) с кодом игры из образа диска с помощью CDmage.
Анализируем код игры(я это делаю в программе IDA) находим код перезарядки оружия.
Вырезаем код перезарядки $800448A8 f$350A8 - $80044934 f$35137 144 байта.
Сохраняем вырезанный код с именем: ”orig gun reload.psx”.
Запускаем программу Munch. Дизассемблируем код перезарядки “Load Raw File”, “Disassemble”.
Сохраняем получившийся код File->Save Assambly.
Открываем код в Notepad++ для редактирования. *Чтобы включить подсветку кода, нужно в выпадающем меню "Синтаксисы" выбрать пункт "PSIG".
Удаляем мусор вначале каждой строки с помощью “Поиск->Замена”.
Ставим режим поиска: "Регуляр. выражен." Меняем ^......................... на пробел.
Задаём метки.( reload2: exit:) Прописываем адрес кода(то место откуда мы его вырезали).( code_start 800448A8;)
Получаем готовый для компиляции код:
Сохраняем код с именем “Gun reload.psig”.
Чтобы избежать ненужных ошибок при модификации кода, нам нужно проверить – правильно ли мы отредактировали дизассемблированный код. Для этого запускаем PSIG, кнопкой “IN” открываем наш файл “Gun reload.psig”. Кнопкой “OUT” открываем файл в который запишется код, например “Gun reload.psx”.
*Можно бросить файлы в окно программы. Файлы с расширением psig, asm, txt, грузятся как входящие, остальные как исходящие.
Убираем галочку в “Insert code”, чтобы код компилировался в начало файла. Жмём кнопку “Compile”.
Теперь сравниваем вырезанный(оригинальный) код со скомпилированным кодом в программе HexCmp2.
Если появляется окно с сообщением: “The next different not found!”, значит код отредактирован верно.
Модифицируем код перезарядки как нам нужно.
Сохраняем новый код с именем “New gun reload.psig”.
Компилируем новый код перезарядки и вставляем в исполняемый файл(SLUS_007.47) игры. Для этого запускаем PSIG, кнопкой “IN” открываем наш файл “ New gun reload.psig ”. Кнопкой “OUT” открываем исполняемый файл, в который вставится код “ SLUS_007.47”.
*Можно бросить файлы в окно программы. Файлы с расширением psig, asm, txt, грузятся как входящие, остальные как исходящие.
Для того чтобы код прописался по заданному адресу, нужно чтобы галочка “Insert code” была установлена. Жмём кнопку “Compile”. Если не внесли код активации перезарядки в исполняемый файл, описанный в самом начале мануала, самое время это сделать.
Вставляем исполняемый файл(SLUS_007.47) игры обратно в образ диска.
Запускаем игру и радуемся! Видео
Сообщение отредактировал Mr2 - Вторник, 07.11.2017, 10:16 |
|
| |
TLT | Дата: Среда, 05.08.2015, 16:51 | Сообщение # 2 |
Генералиссимус
Группа: Администраторы
Сообщений: 2367
Статус: Оффлайн
| Отличный практический урок на конкретном примере.
Вот так.
|
|
| |