Репутация: 229 (весьма и весьма положительная личность)
(WIP) Портирование decap патча на Prince of Persia: Rival Swords
Порт decap патча RhymeKidder'a для PSP версии Rival Swords (ULUS-10240), включает разрубание монстров в игре. Залил во вложения пропатченный boot.bin и написанную на скорую руку простенькую утилитку, которая патчит boot.bin или iso образ.
Большое спасибо riku.kh3 и Yoti за помощь!
Скриншоты
Архив
На днях я попробовал изучить исходники патча RhymeKidder'a для PC версии, как он включает decap (разрубание монстров), нашёл похожий код в PSP версии с помощью ghidra, получилось даже частично включить decap внеся грубые правки в пару функций.
К сожалению, с полноценным пропатчиванием возникла проблема, а именно в первых двух функциях, для которых применяется более громоздкий алгоритм. Возник вопрос - чем возможно хукнуть вызов функции в boot.bin и какой аналог asm кода должен быть для MIPS?
Другие консоли: Все PSP, все PSV, SCPH-1002, SCPH-102, SCPH-77008, CECH-4208C, SCPH-1000R
Регистрация: 19.03.2008
Адрес: Россия
Сообщений: 5,806
Вы сказали Спасибо: 824
Поблагодарили 3,937 раз(а) в 2,061 сообщениях
Сила репутации: 1
Репутация: 3937 (репутация неоспорима)
Исходники это, конечно, хорошо, но лучше бы ссылку на источник. В каком виде он сделан? Если это dll, то в случае с psp по аналогии писать плагин. Либо писать вставки кода в свободные места исполняшки с возвратом обратно. Мануал к архитектуре вот, например.
На PSP хуки вам не нужны, продолжайте делать все так же, как и до этого делали - вносить правки непосредственно в сами функции. Если что-то где-то не влезает - заменяете одну из инструкций бранчем, по новому адресу возвращаете замененную инструкцию, свой код и ставите бранч назад (или используете связку jal-jr). Место для своего кода можно взять там, где обрабатываются строки с различными ошибками (0x47D2D4-0x47D30C например).
"decap_archer" вызывает пустую "fix_archer", которая вообще ничего не делает, после чего вызывает саму "decap". То есть ее сразу на "decap" можно заменить.
Остается только "decap_brute" (вернее "fix_brute"): она смотрит одно из значений в стэке. Если оно равно 0x82830304, то это значение заменяется на 0x82830403. Это надо в отладчике уже смотреть где оно на PSP в стэке. Должно быть что-то вроде того:
Репутация: 229 (весьма и весьма положительная личность)
riku.kh3, спасибо, пробую ковыряться. Сначала в гидре добавил инструкции, затем скопировал их в hex значениях и попробовал заменить в ELF. Но пока что-то не совсем выходит. Эмулятор видит инструкции иначе
(по адресу 0x4096c заменить 'jal 0x1E688' на 'jal 0x47D2D8')
И у вас там в гидре криво некоторые инструкции добавились. В самом эмуляторе попробуйте их скомпилировать (правый клик по инструкции --> Assemble Opcode) и из вкладки 'Memory' переписать hex-значения (одна инструкция = 4 байта).
Последний раз редактировалось riku.kh3; 30.04.2020 в 12:26.
А, нет, стоп, это не Гидра виновата. Тут таблица релокаций ELF вносит изменения в код при загрузке, в ней занулить надо несколько мест. Замените в эмуляторе инструкции на правильные, если все нормально будет работать я посмотрю где там таблица.
Репутация: 229 (весьма и весьма положительная личность)
riku.kh3, потестил чуть, вроде бы всё нормально. Большое спасибо! Добавил только переход для 0x4096c на 0x47D2D8, и основной decap функции 0x3132b4 заменил код на return 1. Ночью сделаю ещё тест-драйв по сюжетке, если всё будет стабильно то будет релиз
Репутация: 229 (весьма и весьма положительная личность)
Давненько меня здесь не было Нашёл, наконец, как убрать цензуру в начале игры Пока как тестовый патч, но надеюсь, что ничего случайно не поломалось Попробую на днях пройти, если всё будет ок, то обновлю в шапке.
Репутация: 229 (весьма и весьма положительная личность)
Upd: прошёл сюжетку, PPSSPP крашнулся один раз, но скорее всего из-за того, что savestate'ами баловался. Обновил шапку, добавил последнюю версию патча. Есть ранние наработки по пересадке эффектов крови песочным монстрам, но из-за того, что ресурсы игры плохо изучены результат пока не совсем удовлетворителен.
Давненько меня здесь не было Нашёл, наконец, как убрать цензуру в начале игры Пока как тестовый патч, но надеюсь, что ничего случайно не поломалось Попробую на днях пройти, если всё будет ок, то обновлю в шапке.
Здравствуй. А как убрать цензуру вначале игры и добавить кровь для версии ПК в патче RhymeKidder?