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 

Shaders

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.

TODO

  • Static linking for Linux
  • Switch full screen / windowed
  • Provide an OSX .app
  • Fix aspect ratio
  • Multitap option

Known working cores

  • 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)


StatusReleased
CategoryTool
PlatformsWindows, macOS, Linux
Rating
Rated 5.0 out of 5 stars
(4 total ratings)
AuthorKivutar
Tagsbundle, Emulator, Homebrew, libretro, release, Retro, rom

Download

Download
ROMBundler-Windows-1.25.zip
External
Download
ROMBundler-OSX-1.25.zip
External
Download
ROMBundler-Linux-1.25.zip
External

Comments

Log in with itch.io to leave a comment.

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

(1 edit)

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

(1 edit)

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.

(+1)

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.

(1 edit) (+1)

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

(1 edit)

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.

window_width =  window_height =  aspect_ratio = 

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.