Changelog V0.2
Cemu 2.6 fork — "Remote Toypad". All changes below are on top of stock Cemu 2.6.
2026-08-12
Added
- Tag writes now persist to the source
.binwhen figures are loaded through the TCP listener. The LOAD message (previously 5-byte header + 180-byte tag data) may now carry a UTF-8 file path: 2-byte little-endian length, then that many bytes. The listener opens it withFileStream::openFile2(path, true)— exactly like the built-in toypad window — and hands the stream toLoadFigure, so every subsequent game write (WriteBlock->Save()), the final flush inRemoveFigure, and the handle transfer inMoveFigurewrite back to the same file. (DimensionsNetworkListener.cpp)
Fixed
- Network-loaded figures previously got a
nullptrfile handle (LoadFigure(figureData, nullptr, ...)), soDimensionsMini::Save()silently no-oped: the game wrote to memory only, and every tag reverted to a blank template on reload. This was the root cause of "CORRUPTED".binfiles (identical UID, pages 35-37 zeroed). - Commands the game uses before writing the encrypted tag pages (
0xD0,0xE1,0xE5,0xFF) previously got an all-zero reply; they now return a proper success ack (55 02 <seq> 00 <checksum>), so the unlock exchange completes and the write lands. (Dimensions.cppSendCommand)
Changed
- A LOAD without a path (length 0) keeps the old in-memory-only behavior. If the path can't be opened, the listener logs
Dimensions network listener failed to open figure file: ...and falls back to an in-memory figure instead of dropping the load.
Fork base (stock Cemu 2.6 + prior additions)
Added
- Emulated LEGO Dimensions Toypad (nsyshid backend) with a TCP listener on
127.0.0.1:9191(port configurable viaDimensionsToypadListenerPort), speaking a 3-message protocol from the LegoToypad app:LOAD:01 <pad> <index> 00 00+ 180 bytes (45 pages x 4) + optional path (see above)REMOVE:02 <pad> <index> 00 00MOVE:03 <pad> <index> <oldPad> <oldIndex>
- Input handoff event
Local\CemuToypadPickerInputActive: while set, Cemu suppresses controller input so the picker overlay can be used without the game reading the pad. (Controller.cpp)
Changed
- Diagnostics in
Dimensions.cpp:LD CMD {:02x} seqfor toy-pad commands from the game, andWriteBlock: gameIndex=... page=... dimFile=true/falsefor every tag write, so persistence problems are visible inlog.txt(%APPDATA%\Cemu\log.txtwhen running non-portable).