ROMBundler
A downloadable tool for Windows, macOS, and Linux
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.
Usage
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.
Emulator configuration
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:
- default
- zfast-crt
- zfast-lcd
We recommend 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
- lutro_libretro
- fbneo_libretro
- fceumm_libretro
- blastem_libretro
- snes9x_libretro
- genesis_plus_gx_libretro
- nes_libretro
- mesen_libretro
- mesen-s_libretro
- dosbox_pure_libretro
- mgba_libretro
- gambatte_libretro
- gearsystem_libretro
- mednafen_psx_libretro
- pcsx_rearmed_libretro
- melonds_libretro
Not yet compatible:
- some GL cores
- md_libretro (input issues)
- sameboy_libretro (audio issues)
- mupen64plus_next (various issues)
Comments
Log in with itch.io to leave a comment.
are savestates not a thing in this project yet?
not yet
Thats alright, when will they be? is there a roadmap?
Can i build .iso for PSP with this program?
Are you still planning to include an OS X .app? I'd like to try this but I'm not very clear how to build my own .app
Yes I would like to, but I don't have an apple laptop anymore to check if it works so it's not convenient.
If you know how to code or type commands, there are some guidelines here: https://github.com/libretro/ludo/blob/master/.github/workflows/cd.yml#L141-L157
Someone could adapt them to rombundler. But as you can see, apple packaging is quite complex, with code signing and notarization.
EDIT: I have an unfinished pull request here but I don't remember what was wrong with it https://github.com/kivutar/rombundler/pull/34/files
Does this support rotation? If so, what's the option for it? I'd like to use it with vertical arcade games (fbneo).
I don't see the rotation code in it, but it's easy to add.
Try the new release, I checked it with fbneo and 1943
Yep, it worked!
One last question. Does this not support Duckstation\Swanstation's higher definition rendering options? (Like rendering a game at 2x PS1 resolution). I've tried a few options and seemed like only widescreen-related ones worked.
I hadn't try swanstation for a while, so I did this morning and went into some issues like having the screen upside down, forcing video.hw.bottom_left_origin to false in video.c fixed it for me.
I got another issue about inputs, but maybe this one happens only on m1 mac.
About the upscaling, it appears that there is something special in the option names of swanstation and I may need to add some more code to support it in swanstation.
I managed to get double resolution by using a options.ini containing only
duckstation_GPU.ResolutionScale = 2
this is an awesome tool. tysm for making it.
Thanks
This 'project' is a violation of all libretro and related software licensing including the non-commercial licenses of relevant emulator cores. Under NO circumstances is this kind of thing permitted to be done with bundling the emulator with the ROM file (even a ROM you created) to be sold or distributed together.
Devs can either make a proper PC version or distribute ONLY the ROM file itself without the emulator. That's on them. They didn't make the emulator so they don't get to bundle it either.
What are you saying? A lot of libretro cores are under licenses that allow this kind of use. I'm myself a member of libretro and I know OSS licenses quite well.
Explain me for example what par of the license of Blastem or Lutro would prevent me to distribute my Genesis Homebrew or Lutro game?
is it possible to ever seperate/integrate the core, rom and config files into the EXE somehow and have them play?
There must be some ways to bundle everything into a single executable, like love2d does for the assets.
But some emulators require the ROM file to be a real file on the filesystem, especially for CD based systems.
Designing a solution that would work for all cores and OSes would take a bit of time.
thx
Do you still monitor this page? Trying to get a response cause I need help.
Yes
Trying to get this to play... but it's not working. Using mesen core and testing with Castlevania. I put both in the folder and configured the .ini file just like how the video shows. Click the .exe and nothing happens.
Can you show your ini files?
you see the photo?
yep and it looks fine, but try setting the window size and aspect ratio, just in case, like here https://github.com/kivutar/rombundler#usage
Tried that... it's still not working.
Update: FCEUMM works... but not MESEN which I would prefer.
Can you look into this issue? I tried playing an SNES game with mesen-s and it works. NES games with mesen don't seem to work at all.
OK I will try mesen
I can't get the functions to work properly. Can I asign a particular monitor? (the retroarch monitor_index doesn't work) Can I use this with custom bezels to fill up the black bars?
Any chance of having a custom "config" UI, where you could slap a particular image and music and config basic options? or a pre-launch menu/image?
Thanks.
Hi, window_width and window_hight will affect only the windowed mode.
There is currently no way to set a particular monitor.
There might be emulator settings to remove overscan, depending on the emulator.
So far there is no plan to add a configuration UI for this, as every user will have different wish for the look end feel. You can however make your own that can edit the config.ini.