Changelog
Toypad-related changes specific to this fork (feature/dimensions-listener). Upstream shadPS4 history is tracked via the regular commit log.
2026-09-09
Fixed
-
Duplicate characters not registering. Loading a second copy of an already-active character (e.g. two Batmans on different pads) sent an identical NFC UID for both, since the companion app can only send the one fixed tag dump it has per character. The game reported the same UID as newly added at a second pad/index without it ever leaving the first — a state that can't happen with real hardware — and silently failed to register the duplicate.
DimensionsToypad::LoadDimensionsFigure(src/core/libraries/usbd/emulated/dimensions.cpp) now checks the incoming UID against every other currently-occupied slot. On a collision it mints a fresh random UID (via the previously-unusedRandomUIDhelper) and re-encrypts the pages keyed to it — character id (page 36/37, characters only) and the password (page 43) — exactly likeCreateFigurealready does when minting a brand-new custom tag. The mutated tag is persisted back to its staged.binfile so it stays self-consistent on reuse. -
Dimensions Toypad listener is now on by default (port 9191). Previously it defaulted to 0 (disabled), so the companion app couldn't connect until you edited config.toml. A stored 0 now falls back to 9191; set it to 0 in config.toml to turn it off.
Fixed: "permission denied" when loading the same figure twice. The figure .bin was opened with the default read-only share (ShareReadOnly → _SH_DENYWR). Loading the same vehicle onto a second pad — or the companion app reading/writing the file while the emulator held it — failed and tripped an assertion. It now opens with ShareReadWrite.
now you can ditch the bridge and just use the launcher, but make sure to add shadps4.exe to version manager like i did in the video:
https://github.com/user-attachments/assets/5c61fffa-7a33-489f-869b-bb93d2b2e26e