Hello muOS developers and community,
First off, thank you for creating such a fantastic and streamlined custom firmware. I’m a huge fan of the work you do for the retro handheld community.
I’m a developer who has been working on two open-source projects specifically designed to improve how we manage our retro game collections. I believe they could be a powerful addition to muOS, and I wanted to propose them for potential integration.
The two projects are SpriteShrink and GameCase.
SpriteShrink: Solving the SD Card Space Problem
We all know that SD card space can be a real issue, especially when you have multiple revisions and regional variants of the same game. SpriteShrink is a command-line tool I built to tackle this head-on.
- What it does: It takes all versions of a single game (e.g., USA, EU, JP, Rev A) and intelligently deduplicates them into a single, highly compressed .ssmc archive. It finds all the common data between the files and only stores it once.
- The Benefit for muOS: Users could store their entire multi-region collection for a game in a file that’s often only slightly larger than a single ROM. This would free up a massive amount of space on the SD card, allowing users to fit more games on their devices.
- How it would work: muOS could be updated to recognize .ssmc files. When a user selects one, the frontend could present a sub-menu asking which version of the game to launch (e.g., “Tecmo Bowl (USA)”, “Tecmo Bowl (USA) (Rev 1)”, etc).
GameCase: A Richer, More Organized Library
A game is more than just the ROM. It’s the box art, the manual, maybe even ROM hacks. GameCase is a tool and a file format (.gcase) I designed to bundle all of these assets together.
- What it does: It creates a single .gcase file that can contain:
- The game ROM (or even a space-saving SpriteShrink archive).
- Game manuals in PDF or other formats.
- Multiple types of artwork (box art, cartridge scans, fan art).
- ROM hack patches and their metadata.
- The Benefit for muOS: This could enable a much richer user experience. Imagine selecting a game in the muOS interface and having an option to open the game’s manual directly on the device before playing. Or, if a .gcase file contains a ROM hack, muOS could offer to apply it on the fly.
- Note: GameCase is currently a work in progress so the potential integration focus can start with SpriteShrink for now.
Technical Details & Integration Path
I’ve designed both projects with integration in mind, and I believe the path to adding them to a C based project like muOS would be straightforward.
- lib_sprite_shrink (For .ssmc files):
- The core logic of SpriteShrink is available as a Rust library.
- Crucially, I’ve already built a C-compatible FFI layer and use cbindgen to generate a C header file (.h).
- This means the muOS developers could link against lib_sprite_shrink.a or .so and call C functions to list the contents of an .ssmc archive and extract a specific file’s data into a buffer, ready to be passed to the emulator.
- The library is licensed under the MPL-2.0, which allows it to be linked into a larger project without imposing its license on the entire codebase.
- Another potential path, once I get the json based output done for the cli-application, is to get the file metadata from the archive, populate a screen much like a folder in the muOS interface, and once the user selects a file just use the cli binary to extract the ROM to a cache location and run it from there.
- lib_game_case_parser (For .gcase files and when it’s done):
- The .gcase format is based on EBML (the same tech as .mkv files).
- I’ve written a dedicated Rust parser library for it, which is also licensed under the permissive MPL-2.0.
- While I haven’t built an FFI layer for this one yet, it would be a very similar process to the SpriteShrink library if there was interest from the muOS team. The cli suggestion like I had for SpriteShrink likely wouldn’t work well with GameCase integration since I can see a large number of flags being used for this one.
I have already successfully cross-compiled and tested SpriteShrink for the RG35XX+ using the community toolchain, so I’m confident it can run efficiently on the hardware muOS supports.
Conclusion & Links
I believe that integrating these tools could offer muOS users a significant advantage in managing their libraries, saving them space and providing a richer, more organized experience.
I would be more than happy to assist in any way I can, whether that’s providing pre-compiled ARM libraries, helping with the integration code, or answering any questions the development team might have.
Thank you for your time and consideration!
- SpriteShrink GitHub Repo: https://github.com/Zade222/SpriteShrink
- GameCase GitHub Repo: https://github.com/Zade222/GameCase
Best regards,
Zade222