(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 внеся грубые правки в пару функций.
Небольшая видео-демка с частично включённым decap для монстров dark reptus:
https://streamable.com/ul4nx0
//PC - thunk_FUN_00849c30(), PS2 - thunk_FUN_004c0a80(), PSP - thunk_FUN_003132b4()
HookMem( HOOK_CALL, 0x5e5ecb, (DWORD) &decap_brute ); //PS2 - 0x1a8fb4? PSP - 0x4096c?
HookMem( HOOK_CALL, 0x675f29, (DWORD) &decap_archer ); //PS2 - 0x233144? PSP - 0xcd194?
//dark reptus decap
HookMem( HOOK_CALL, 0x6a3bb9, (DWORD) &decap ); //PS2 - 0x389d14, PSP - 0x20ed40
HookMem( HOOK_CALL, 0x701fb8, (DWORD) &decap ); //PS2 - 0x2ff6f8? PSP - 0x173c18?
HookMem( HOOK_CALL, 0x70200c, (DWORD) &decap ); //PS2 - 0x2ff798? PSP - 0x173cbc?
HookMem( HOOK_CALL, 0x74662d, (DWORD) &decap ); //PS2 - 0x3fae88? PSP - 0x24b580?
HookMem( HOOK_CALL, 0x746676, (DWORD) &decap ); //PS2 - 0x3faf1c? PSP - 0x24b618?
HookMem( HOOK_CALL, 0x7b6d8b, (DWORD) &decap ); //PS2 - 0x442b98? PSP - 0x29294c?
HookMem( HOOK_CALL, 0x7b6dd0, (DWORD) &decap ); //PS2 - 0x442c2c? PSP - 0x2929e4?
К сожалению, с полноценным пропатчиванием возникла проблема, а именно в первых двух функциях, для которых применяется более громоздкий алгоритм. Возник вопрос - чем возможно хукнуть вызов функции в boot.bin и какой аналог asm кода должен быть для MIPS?
Edit: добавил во вложения тестовый boot.bin (ULUS-10240) с заменённой через hex decap функцией (без фиксов под brute/archer).
Последний раз редактировалось ErikPshat; 02.07.2024 в 16:25.
|