ROMBundler is a way to release your homebrew retro game as an executable. With the help of this tool, you can release your homebrew ROM to itch.io, GOG, Steam, etc.
It is based on this example libretro frontend https://github.com/heuripedes/nanoarch
If you don't know what is a libretro frontend, you might have heard of RetroArch. Well ROMBundler is like RetroArch without user interface. It is compatible with the same emulator cores.
The main differences are that the frontend is controlled by an ini file instead of command line flags to make it easier to bundle ROMs. Also we use glad instead of glew, added openal for cross platform audio, and will add joypad support and maybe a few shaders.
Linux support is not yet ready as some dependencies are still dynamically linked. But Windows and OSX versions should be fine.
You don't need to compile
rombundler if you just want to use it, you can get one of the binary releases here
Then modify the config.ini to fit your needs:
title = Shrine Maiden Shizuka Demo 2
core = ./blastem_libretro.dylib
rom = ./Shrine Maiden Shizuka Demo 2.md
swap_interval = 1
full_screen = false
hide_cursor = false
map_analog_to_dpad = true
window_width = 800
window_height = 600
aspect_ratio = 1.3333
You can download libretro cores from http://buildbot.libretro.com/nightly/ and place it in the same folder, as well as your ROM. (But make sure to comply to the core license).
For Windows, the core need to be a
.DLL, for OSX it needs to be a
.dylib, and for Linux a
.so. ROMBundler releases are for 64bit systems only for now.
Place your ROM in the same folder. And set the ROM name in your config.ini.
ROMBundler will read the ini file, load the emulator and the ROM and the game will start.
You can then rename
rombundler with the name of your game, change it's icon, and distribute this as a zip.
If you need special options for the emulator, you can set them by creating a options.ini file like this:
fceumm_sndvolume = 7
fceumm_palette = default
fceumm_ntsc_filter = composite
In the config.ini, you can specify a single pass shader. For example:
shader = zfast-crt
filter = linear
Default values are
shader = default
filter = nearest
For now available shaders are:
We recommand using the linear filter with the CRT and LCD shaders.
- Static linking for Linux
- Switch full screen / windowed
- Provide an OSX .app
- Fix aspect ratio
- Multitap option
Known working cores
Not yet compatible:
- some GL cores
- md_libretro (input issues)
- sameboy_libretro (audio issues)
- mupen64plus_next (various issues)