Repository navigation
V1.3
PS5 Debug Studio: ShnExt, scanner undo and game naming update
This release adds full ShnExt support (AOBs, hooks, code caves, item dropdowns) on both import and export, undo for the scanner, inputs for code caves, and one naming standard for games that reads the title id and app version straight from the console.
ShnExt
- Export to .ShnExt. A new file type in the export dialog, written the way the ShnExt app writes it. ShnExt export is built into the released .exe; it is not available when running from source.
- AOBs, hooks and code caves are kept. Before, a cheat had to be fixed byte patches to export. Now AOB finders, hooks into code caves, cave blocks that jump between each other, data values and inputs are all written as ShnExt patches.
- Item lists become dropdowns. An input that picks from an item list is exported as a ShnExt dictionary dropdown, with the whole list inside the file.
- Round trips are exact. Importing a ShnExt project and exporting it again gives back the same patches, including the original code text, the label names and the value types.
- Decrypted projects import fully.
.ProjReapprojects bring their game name, title id, version and item dictionaries. Values shared between patches are linked, and the description tells you which cheat to turn on first. - Original bytes for fixed sites. When a hook or patch sits at a fixed offset, the dialog can read the game's original code for it with "Read original bytes".
- The export list shows what each patch holds, e.g. "ok – 1 AOB, 1 hook, 1 input".
- Long patches are split at 1,024 bytes, onionHEN's limit.
- Negative or huge offsets are refused instead of being written wrong.
- Fixes:
- Register jumps like
jmp raxwere reported as missing labels. nop:Ninside longer code,dword [x]withoutptr,//comments andmovabswith a variable now assemble.
- Register jumps like
Tested:
- 589 public Reaper trainers: 5,614 of 5,633 cheats import, and 5,603 come back identical after export.
- 1,585 GoldHEN cheat files converted to ShnExt read back identically in onionHEN.
- The Dark Souls 3 and Dark Souls Remastered projects (18 patches) come back identical.
Game names, title ids and versions
Every game, file and export now uses the same standard as GoldHEN, ShnExt and Reaper Studio:
| Field | Example |
|---|---|
| Title id | CUSA08155, PPSA01341 |
| App version | 01.03 (PS4), 01.004.000 (PS5) |
| Content id (optional, new) | UP0700-CUSA08155_00-DARKSOULS3BST000 |
| Process | eboot.bin |
| File name | CUSA08155_01.03.json, PPSA01341_01.004.000.ps5c |
-
From console. With the game running, New game and Export fill in the title id, content id and app version. The version comes from the game's
param.sfo(orparam.json), the same source Reaper Studio uses. This needs a ps5debug-NG version with the foreground-app command; older payloads still give the title id, and you type the version. The console doesn't report game titles, so the game name is yours to type; it's reused when the library already has that game. -
Older files are corrected. When a cheat file is loaded or imported, the tool fixes:
- lower-case title ids
- title ids that only appear in the game name or content id
- versions like
1.4orv01.03, which are written in full - an empty process, which is set to
eboot.bin
The untouched original of each library file is kept in
deleted\<name>_before_naming.json. -
New and imported files are named
<TITLEID>_<VERSION>.json. Existing library files keep their names. -
Versions never mix. An import no longer merges cheats for a different app version into the same file, since the offsets differ.
-
Our own exports follow the standard too.
.ps5cand tool JSON exports now have the same header as the console formats, need a title id and version, and are named<TITLEID>_<VERSION>.ps5c. -
Version warning. Turning on a cheat made for a different app version than the running game writes a warning to the log. AOB cheats usually still work.
-
Record from Caller and "Save as cheat" from a code cave fill in the version and content id.
Scanner
- The options column scrolls when the window is short. Range search options were cut off before.
- Undo scan and scan history. Each scan step's results are kept, up to 1,000,000 addresses per step, for 1–8 byte and float types. Going back re-reads only those addresses and continues from there.
Code caves (Disassembler)
- Inputs and buffers have defaults. Every
$inputand@bufferthe cave code uses is listed with a type and a default value, like the Caller's assembler. The defaults are used for the preview and for Enable. - Saved cheats keep them. The cheat gets the inputs with their types and defaults, and an alloc step for each buffer. "Insert step into Cheat Editor" adds the inputs too.
- Float inputs go into the assembly as their IEEE bits (
mov eax, $speed).
Import
- No doubled "(master code)" in cheat names.