PS3 Questions to develop a riivolution equivalent for PS3

SeleDreams

Forum Noob
Hi, I recently had the idea of developping an homebrew equivalent to the wii homebrew riivolution to load mods from USB to allow people to load mods and fan translations without a need to dump and modify their game dump, by simply plugging in their usb stick in the ps3 and loading their game disc

If you don't know riivolution, this is a video that shows how it works on Wii

However, while I am used to mod PC games in C++ through function detouring, I'm not as used to work with PS3 homebrew wise (well, not as used, I litterally never did it)

I think how I would do it would be to detour the OS function that loads files in memory and then start the game so that all the file load calls get intercepted and it would load files that exist on the usb instead else it would load the original if the file doesn't exist on usb

however I am not sure about the way to go about it.

as I don't really know the API, I am not sure about how I would get the pointer to the original OS function that loads files and how I would detour it, since i can't rely on the microsoft detour library, and i'd probably need to get used to the PPC assembly language to manually create my own detour lib for ps3

on another note I'm also not sure about how I could debug the homebrew during development, is it possible to start a gdb server with rpcs3 a bit like qemu ? so that I can debug the homebrew
 
I think how I would do it would be to detour the OS function that loads files in memory and then start the game so that all the file load calls get intercepted and it would load files that exist on the usb instead else it would load the original if the file doesn't exist on usb

In PS3 environment like in Vita the better solution would be using folder on the main storage media rather than USB. In Vitas case it's more of a gray area as USB speeds are usually fast enough (on PSTV ofc), but with PS3 a patch folder in dev_hdd0 would IMO be smarter place to redirect the reads just because USB read speeds suck big time compared to internal HDD.

Welcome to the forum, by the way!
 
In PS3 environment like in Vita the better solution would be using folder on the main storage media rather than USB. In Vitas case it's more of a gray area as USB speeds are usually fast enough (on PSTV ofc), but with PS3 a patch folder in dev_hdd0 would IMO be smarter place to redirect the reads just because USB read speeds suck big time compared to internal HDD.

Welcome to the forum, by the way!
Thanks.
Well technically, wouldn't USB speeds be faster than Blu-ray speeds ?
like, I do think usb2 would be slower than the internal sata drive but not too slow in general for file loading
else the homebrew could in any case copy the mod to the internal storage before starting it
 
USB is fast enough in WII but on PS3 it loses in transfer speed to internal. Add seek times and other variables and it might just not cut the mustard - especially as you need in worst case do 2 file opening ops etc. before you can even start the read. Best would be if the runtime patcher was configurable, patches located in internal, USB or even LAN. In any case loaded direct from where they reside without transfers. If I were you I'd start on implementing this on internal - ftp:ing stuff to PS3 internal drive is just so convenient. Id say caching from USB to internal isn't as neat a solution as keeping the patches on internal to start with.

Other factor is to decide at first one storage and one game media install type to support , then add others when the base framework does what it says on the package. I'm not too savvy on PS3 game installation innards, but if it's anything like Vita there might be need of at least decrypting the originals and then patching and re-encrypting. Just more of a casual user and enthusiast rather than programmer.

But if this came tho the fruition - playing original Tales of Vesperia Jap from optical or hdd rip/install and adding the translation patch on the fly...
 
USB is fast enough in WII but on PS3 it loses in transfer speed to internal. Add seek times and other variables and it might just not cut the mustard - especially as you need in worst case do 2 file opening ops etc. before you can even start the read. Best would be if the runtime patcher was configurable, patches located in internal, USB or even LAN. In any case loaded direct from where they reside without transfers. If I were you I'd start on implementing this on internal - ftp:ing stuff to PS3 internal drive is just so convenient. Id say caching from USB to internal isn't as neat a solution as keeping the patches on internal to start with.

Other factor is to decide at first one storage and one game media install type to support , then add others when the base framework does what it says on the package. I'm not too savvy on PS3 game installation innards, but if it's anything like Vita there might be need of at least decrypting the originals and then patching and re-encrypting. Just more of a casual user and enthusiast rather than programmer.

But if this came tho the fruition - playing original Tales of Vesperia Jap from optical or hdd rip/install and adding the translation patch on the fly...
talking about tales of, I kinda originally thought about this project to allow to undub tales of graces f and tales of xillia without having to dump and modify their iso, instead playing their original disc with the on-the-fly patcher
 
actually, if both files (original and modded) are on the HDD, you can easily create symlinks between the files and you don't even need to do anything else.

A simple homebrew could just
- move ./NPUBXXXXX/USRDIR/data to /USRDIR/backup
- then symlink ./MYMOD/USRDIR/data to ./NPUBXXXXX/USRDIR/data

to revert the process, the app should just remove the symlink and move back ./backup to ./data

of course, if you want to mod files on a disc (/dev_bdvd) then it's a different story, but for modding any HDD game, and even games that install data to HDD, it should be enough
 
actually, if both files (original and modded) are on the HDD, you can easily create symlinks between the files and you don't even need to do anything else.

A simple homebrew could just
- move ./NPUBXXXXX/USRDIR/data to /USRDIR/backup
- then symlink ./MYMOD/USRDIR/data to ./NPUBXXXXX/USRDIR/data

to revert the process, the app should just remove the symlink and move back ./backup to ./data

of course, if you want to mod files on a disc (/dev_bdvd) then it's a different story, but for modding any HDD game, and even games that install data to HDD, it should be enough
yeah, my current goal is modding disc based games since modding hdd games is easy
detouring the file load function should be doable but getting the pointer of the OS function to do that and editing the memory for the detour will be a struggle lol

Sorry for the double post, but is there an api reference page for psl1ght ? I'm searching for one but can't find it online
it would be useful because there are some basic functions that I struggle with because I don't know what their return values are etc.
for instance the msgDialogOpen2 function where the return value is kind of gibberish
 
Last edited by a moderator:
Back
Top