diff --git a/CMakeLists.txt b/CMakeLists.txt index ed098bc..74b01f4 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,6 +30,7 @@ target_link_libraries(VitaGrafix taihen_stub SceAppMgr_stub SceDisplay_stub + SceCtrl_stub kuio_stub k gcc diff --git a/README.md b/README.md index c91d835..a6f4def 100755 --- a/README.md +++ b/README.md @@ -108,7 +108,7 @@ NOTE: If some options are left out, the plugin will use their default values (fo | Hatsune Miku: Project Diva f | PCSB00419
PCSE00326
PCSG00074 | Internal res.
FPS cap | 640x352
30 | OFF
OFF | At 60 FPS menu is double speed | | Hatsune Miku: Project Diva f 2nd | PCSB00554
PCSE00434
PCSG00205
PCSH00088 | Internal res.
FPS cap | 720x408
30 | OFF
OFF | At 60 FPS menu is double speed | | Jak and Daxter Collection | PCSF00247
PCSF00248
PCSF00249
PCSF00250
PCSA00080 | Framebuffer | 720x408 | 960x544 | All 3 games | -| Killzone: Mercenary | PCSF00243
PCSF00403
PCSA00107
PCSC00045
PCSD00071 | Internal res.
FPS cap | Dynamic
30 | OFF
OFF | Input doesn't work when framerate is > 59.
Particles are rendered separately. | +| Killzone: Mercenary | PCSF00243
PCSF00403
PCSA00107
PCSC00045
PCSD00071 | Internal res.
FPS cap | Dynamic
30 | OFF
OFF | Particles are rendered separately. | | LEGO Star Wars: The Force Awakens | PCSB00877
PCSE00791 | Internal res. | 640x368 | 720x408 | Game crashes when opening pause menu at high resolutions. | | LittleBigPlanet | PCSF00021
PCSA00017
PCSC00013
PCSD00006 | Internal res. | 720x408 | OFF | Particles cause artifacts at native res. | | Miracle Girls Festival | PCSG00610 | Internal res. | 720x408 | 960x544 | | diff --git a/games.c b/games.c index f3a8c81..5cb6e03 100755 --- a/games.c +++ b/games.c @@ -9,6 +9,7 @@ #include "games.h" int sceDisplayWaitVblankStartMulti(unsigned int vcount); +int sceCtrlPeekBufferPositive2(int port, SceCtrlData *pad_data, int count); int sceDisplaySetFrameBuf_withWait(const SceDisplayFrameBuf *pParam, int sync) { int ret = TAI_CONTINUE(int, hooks_ref[0], pParam, sync); @@ -18,6 +19,13 @@ int sceDisplaySetFrameBuf_withWait(const SceDisplayFrameBuf *pParam, int sync) { return ret; } +int sceCtrlReadBufferPositive_peekPatched(int port, SceCtrlData *pad_data, int count) { + return sceCtrlPeekBufferPositive(port, pad_data, count); +} +int sceCtrlReadBufferPositive2_peekPatched(int port, SceCtrlData *pad_data, int count) { + return sceCtrlPeekBufferPositive2(port, pad_data, count); +} + uint8_t patch_game(const char *titleid, tai_module_info_t *eboot_info, VG_Config *config) { if (!strncmp(titleid, "PCSF00243", 9) || // Killzone Mercenary [EUR] [1.12] !strncmp(titleid, "PCSF00403", 9) || // Killzone Mercenary [EUR] [1.12] @@ -50,8 +58,13 @@ uint8_t patch_game(const char *titleid, tai_module_info_t *eboot_info, VG_Config // dword_819706A4 DCD 2 ; DATA XREF: seg000:8104F722 injectData(eboot_info->modid, 0, 0x9706A4, &data32_vblank, sizeof(data32_vblank)); + + if (config->fps == FPS_60) { + hookFunctionImport(0x67E7AB83, sceCtrlReadBufferPositive_peekPatched); + hookFunctionImport(0xC4226A3E, sceCtrlReadBufferPositive2_peekPatched); + } } - + return 1; } else if (!strncmp(titleid, "PCSB00245", 9) || // Persona 4 Golden [EUR]