I.K.E.M.E.N GO on Raspberry Pi 4 [Now with an Install Guide!]
-
Wall of text incoming!
So for a little while, I've been thinking over how to set it up so that you can install multiple MUGEN/IKEMEN fullgames, as that's the primary advantage the Box86 + Wine MUGEN method has over IKEMEN. Just so all of us are on the same page, let me provide a quick and dirty overview of the whole situation:
The Problem[s]
RetroPie's file structure is as such: the directory
/home/pi/RetroPie/roms/[system_name]
is used for storing game data (mostly ROM files for emulators as the name implies, but in the case of source ports like DOOM or Quake 3 it stores their game data), while the actual executables are stored in a separate location:/opt/retropie/ports/[game_name]
. The reason for this, best I can tell, is to ensure the user doesn't accidentally delete an executable while managing their games. This isn't a problem for most of RetroPie's supported programs (read: emulators and source ports), as most of them can be supplied a single file from any directory without problem, or have a command line argument/setting file that can be used to point to a specific directory containing multiple files if need be.IKEMEN however, being a game engine, has a very different expectation when it comes to file structure. The engine expects there to be several folders in the same directory as itself, several files within those folders, and much content relies on relative-paths and failsafes of said relative-paths that all rely on files being exactly where they are in relation to the executable itself. IKEMEN needs to be in the right place, and the files need to be in the right place as well.
With that knowledge, this presents a problem: IKEMEN's file structure expects both game data and executable to be all in the same location, but RetroPie wants game data and executables in separate locations. Furthermore,
/opt/retropie/ports/
is set to be read-only by RetroPie for security reasons, so if IKEMEN is installed into that directory, the game crashes due to not being able to write anything there, and obviously the user couldn't do anything with the engine without somesudo
-flavored bruteforcing (not to mention not being able to see the folder via Samba shares, a common way of getting game files onto RetroPie). I wanted to be able to have users add stuff or install a fullgame, but also maintain RetroPie's file structure so that an IKEMEN installation shell-script could be added officially.My first workaround for this discrepency was fairly simple: by moving the aeformentioned data folders to
/home/pi/RetroPie/roms/ports/ikemen-go/[various folders like chars, data, sound, etc]
and setting up some symlinks in/opt/retropie/ports
to point to there, I was able to get IKEMEN to conform to RetroPie's file structure while still allowing for a user to easily customize the game's files. This works, but it has a few problems.The main problem: with this setup, you can only have one IKEMEN-engine game installed at a time. This is seen as a deal-breaker for many, with some instead opting for the hacky solution of copying over fullgames verbatim (.exes and all), and then running the original executables using a combination of Box86 and Wine. While this does work, this method probably won't ever be officially incorporated into RetroPie due to its janky nature and conflicting with RetroPie's file structure ethos.
That's not the only problem, either: since we're creating fixed symlinks, this also poses a problem for any IKEMEN fullgame that happens to use non-standard folders (Famicom Fighters is an example of one that does), either in addition to or replacing the standard ones. Since IKEMEN is only able to look in its own directory (which is what the symlinks work around), any files or folders that didn't have a symlink already created will not be found by IKEMEN, leading to a crash or otherwise undesirable behavior. Sure, you could ask the user to manually create those symlinks, or try to automatically generate those symlinks at runtime using scripting (which would probably just cause headaches for security), but ultimately it's still a wonky solution to a problem that really shouldn't have to exist.
My Idea for a Solution
I've pondered for some time on an elegant way to alleviate all of this, and I think I've devised a solution that makes sense and solves all of this jank. Here's what the new file structure would look like:
-
/home/pi/RetroPie/roms/ports/ikemen-go/ would now contain a bunch of subfolders, with each one of those subfolders containing the files of a fullgame. These subfolders would ideally have short and simple names:
black-heart
,gensokyo-reloaded
,hyper-dbz
, etc. This is similar to how some other source ports function in RetroPie, such as Daphne or ScummVM. -
/home/pi/RetroPie/roms/ikemen-go/, a new directory, would contain dummy ".igo" files - blank files whose names would correspond to the subfolders in the above directory. This would have the side-effect of allowing for a dedicated MUGEN/IKEMEN section in EmulationStation, instead of just being an option in the Ports menu.
-
/opt/retropie/ports/ikemen-go would contain the IKEMEN executable and a script file,
ikemen-go.sh
, that would handle launching these different fullgames.
In order for my idea to work, one small addition would have to be made to IKEMEN: the addition of a new argument to change IKEMEN's working directory. Essentially, this would tell IKEMEN to act as if it was being ran from the directory provided in the argument; this is something that's not currently possible (the
-motif
argument comes somewhat close), but theoretically it shouldn't be too hard to add (gotta love FOSS!) and wouldn't interfere with normal IKEMEN usage. I'll submit a feature request to the IKEMEN Github (which has moved to an organization on Github since last post, I should mention) and see if this can get added.Assuming the above issue gets fufilled, the order of operations would go something like this:
- We launch a game from EmulationStation. As an example, let's use
black-heart
. The file we're launching is calledblack-heart.igo
, and is stored in/home/pi/RetroPie/roms/ikemen-go/
. - Runcommand.sh is told we're launching from system
ikemen-go
with a %ROM% value ofblack-heart.igo
. Using %BASENAME%, the extension gets stripped, leaving us withblack-heart
. Runcommand passes %BASENAME% to theikemen-go.sh
script file in/opt/retropie/ports/ikemen-go
. - That script would then take the %BASENAME% value and format it into this new argument, giving us something like
"/home/pi/RetroPie/roms/ports/ikemen-go/black-heart"
. - The script would then launch IKEMEN with that newly-formatted argument:
./Ikemen_GO -dir “/home/pi/RetroPie/ports/ikemen-go/black-heart”
- IKEMEN would see the
-dir
argument and set its working directory to/home/pi/RetroPie/ports/ikemen-go/black-heart
, and from there, load The Black Heart as if it was launched from that directory to begin with. - Optionally, you could make a small script to read the subfolder names in
/home/pi/RetroPie/roms/ports/ikemen-go/*
and automatically generate the .igo files if they aren't present, meaning all a user would have to do is create a folder (or possibly multiple folders), drag in the fullgame's contents, and run the script.
I tried to make a diagram to describe the above in a more intuitive way, but it came out looking more like the ramblings of a scientist gone mad: here it is anyways!
So yeah, that's my plan for this. I'll keep you folks updated as this wild chicanery continues.
TL;DR: Gonna request a feature to IKEMEN that would potentially allow multi-fullgame launching in RetroPie if it gets added.
-
-
Oh, one more quick thing (adding this as a separate reply so that those watching this thread get a notification for this):
I've decided it would be wise to update the original post at the top of this thread to reflect the current status of IKEMEN GO on the Pi 4, since it's almost entirely out-of-date. I've archived the original post on Wayback and will be including a link to this archive as a footer note. It should save newcomers some confused scrolling around to get this up and running. :)
EDIT: The post has been updated! It now includes a tutorial on how to install IKEMEN, configuration, and the like, which should be SUPER useful in the long run for newcomers.
-
-
Hey folks! So in the couple months since the last post, it seems like something changed on IKEMEN's side that broke both RPi4 compilation and my scriptmodule (as they changed their build system).
As a temporary fix, I've forked the repositories for 0.98.2 and updated the module to point to those forks instead. Same links as usual for the modules, and sorry for the inconvenience!
-
-
Thank you very much for this project, @SuperFromND! I have a couple of questions, if you will. And, before we start, I'm running this in a RPi4/8.
-
I'm trying to run Card Sagas Wars, which is a game with, apparently, LOTS of modifications to the folder structure. It doesn't work out of the box. Would there be any way to make it work?
-
I'm trying to set up gamepads to work with the game, but both my XInput and DirectInput pads aren't detected by the base game. Any ideas?
Thank you in advance for all the help!
-
-
Hey, quick heads-up: I just renamed the repository that I use to host version 0.98.2 of IKEMEN Go (since the most recent versions refuse to build under RetroPie right now); if you got the scriptmodule before today and suddenly start having issues with building from source, re-download the module. Same link as always!
-
@Larkas Apologies for taking forever to reply to this, my motivation for running stuff on RetroPie took a bit of a blow a while back. But I'll still try and help out!
-
It absolutely could be done, but just not with how I currently have full-games set up to run. One day I want to rewrite it to simply set the working directory to one containing a fullgame's files and run
Ikemen_GO
there, thus allowing pretty much every fullgame to run regardless of file structures or anything. -
IKEMEN in general has kinda spotty gamepad support right now, but the Xinput pads should at least be supported, strange. I've used no less than three unique Xinput controllers with my Pi running IKEMEN and all of them work just fine, so I can't really hazard a guess as to what your issue might be. :<
-
-
Hello! It's been quite a while since I've touched RetroPie or this project, but I'm currently looking into making a complete refactor into how the scripts work in order to allow multiple full games!
I found out that, since IKEMEN uses the working directory to start reading files in, you could just use a command like this:
cd /home/pi/RetroPie/roms/mugen/fullgame && /opt/retropie/ports/ikemen-go/Ikemen_GO
And IKEMEN will run itself in that fullgame directory, essentially allowing you to store multiple of them at once.
My gameplan now is to create a dedicated "system" with dummy ROMs (similar to ScummVM's
.svm
files) that when launched, tell runcommand which corresponding directory tocd
into and launch. For example, loadingtest.mgn
would load a fullgame at the directory/home/pi/RetroPie/roms/mugen/test
.Once that's done, I'll update the scripts and guide above, as well as make a post explaining how all of that works. :)
-
UPDATE TIME! I can now proudly say my scriptmodule finally supports multiple game installs!
How it works!
When you install IKEMEN Go now via scriptmodule, instead of a port, you will now have a dedicated M.U.G.E.N folder in your ROMs folder. This folder contains two types of files: folders (each of which represent a fullgame) and a dummy file named after the folders and with a
.mgn
extension. An example (the default IKEMEN Go content) will be created upon install.
Adding games
If you're copying a native IKEMEN game such as Famicom Fighters, simply copy the game's content to a new folder.
If your game is based on M.U.G.E.N, such as Hyper DBZ, you'll need to first copy the
ikemen-go
folder (or download a fresh copy of IKEMEN Go 0.98.2 and extract its contents to a new folder), then copy the game's contents on top of that (saying yes to any overwrites). Otherwise you might run into errors about missing files that IKEMEN needs, but MUGEN does not (namelyexternal
and the debug font, but likely other issues as well).Either way, in order to launch a game, create a .mgn file named after the folder of the game you want to launch. The contents of the .mgn file do not matter at all; just make sure the filename matches the corresponding folder exactly (case sensitivity and all).
How to install!
The install procedure should be largely the same as before: download the two scriptmodules, put them in the required place, open RetroPie-Setup and install
ikemen-go
. However, there's gonna be one more step you'll have to take: scriptmodules (best I can tell) do not have any way to specify file extensions directly, so you won't actually see a M.U.G.E.N system appear right away. To fix that:- Open either
/etc/emulationstation/es_systems.cfg
or, if it's present,/opt/retropie/configs/all/emulationstation/es_systems.cfg
- Find the system entry for M.U.G.E.N; this is created automatically when you install IKEMEN Go.
- Change the
<extension>
line to this:
<extension>.mgn</extension>
- Save and restart EmulationStation.
If for whatever reason you don't have a M.U.G.E.N system ines_systems.cfg
, you can also just copy-paste this entire block to add it manually:
<system> <name>mugen</name> <fullname>M.U.G.E.N</fullname> <path>/home/pi/RetroPie/roms/mugen</path> <extension>.mgn</extension> <command>/opt/retropie/supplementary/runcommand/runcommand.sh 0 _SYS_ mugen %ROM%</command> <platform>mugen</platform> <theme>mugen</theme> </system>
A small note
Because of the way this is set up, you'll have to reconfigure your controllers with every new game. However, you can speed up this process after you've set it up once; find a game where you've configured your controllers to your liking, open up
game_name_here/config/save.json
, and copy-paste theKeyConfig
andJoystickConfig
sections to theconfig/save.json
of any future games. You might be able to just copy the entiresave.json
wholesale, but certain games might have issues if they modify certain other parameters likeSystem
orCommonConst
.Theme stuff!
Since IKEMEN Go now creates an entire new 'system', that means theme authors can now include support for it! The theme system folder/ID is just
mugen
, so feel free to add support!For those using lilbud's Switch theme, I've created this image that you can add to the
art
folder:
The guide at the top of this thread will be updated shortly. :)
- Open either
-
"No config found for system mugen"
ok, so I thought I followed along with everything, but when I go to launch "IKEMEN-GO" in MUGEN, I get "No config found for system mugen". I get the same message when trying to launch another game from there. What did I miss?
-
@GIJoel same here... there's no Linux executable (.deb) in the folder either. My guess is that the latest update messed up big time.
-
@SuperFromND where's the executable, and why is the default mgn file blank? Shouldn't the mgn file lead to the executable?
-
Ooookay, so sorry for the wait everyone! I guess I didn't test thoroughly enough, as it seems like the current install scripts don't actually create a new system correctly. Gonna have to look into it later. @_@
-
Hello everyone! Long time no update but I figured I'd let the community know in case this helps anyone else.
If anyone wants a working version of the setup script, I have scripts that will compile the latest nightly:
http://www.trinitymugen.net/~Creator/Jesuszilla/scriptmodules/ports/ikemen-go-nightly.sh
http://www.trinitymugen.net/~Creator/Jesuszilla/scriptmodules/supplementary/golang-1.21.shEDIT: 2024/08/16: Uploaded new scripts because we upped the Golang version due to a library update. Please download the new scripts from the URL's above!
Replace the scripts in the setup steps with these if you want a working version of the latest nightly installed separately. @SuperFromND should be working on new scripts in the future but this will allow you to install a separate nightly build for now (which includes 3D stages but beware: they don't perform well on Pi 4 as of the date of this writing; someone is working on improving the 3D rendering as I write this post).
A user in the I.K.E.M.E.N Discord confirmed these modified scripts work with Pi 5 as well and 3D stages do perform better there from what I've seen from footage (I have no Pi 5 to test myself but the confirmation is good).
EDIT: If replacing the steps in the tutorial above with my scripts, make sure to surround the URL's in quotes " " like so:
sudo wget "http://www.trinitymugen.net/~Creator/Jesuszilla/scriptmodules/ports/ikemen-go-nightly.sh"
~ Is a special character in shells so that could cause errors trying to use the command otherwise.
-
@Jesuszilla thanks for sharing! i got ikemen-dev working except for the .mgn file bit.
i got mugen working on wine through emulatonstation some time ago but i wanted to try ikemen without duplicating data so i symlinked my existing mugen folders under my wine roms dir, created .mgn file for the corresponding symlinks so it looks like this:
when i run a game off emulationstation ikemen will run with the default pak.
this is how the entry for ikemen in es_systems.cfg looks:<system> <name>mugen</name> <fullname>M.U.G.E.N</fullname> <path>/home/osmc/RetroPie/roms/mugen</path> <extension>.mgn</extension> <command>/opt/retropie/supplementary/runcommand/runcommand.sh 0 _PORT_ mugen %ROM%</command> <platform>pc</platform> <theme>mugen</theme> </system>
my emulators.cfg looks like so:
ikemen-go-nightly = "XINIT:/opt/retropie/ports/ikemen-go-nightly/ikemen-go.sh %ROM%" ikemen-go = "XINIT:/opt/retropie/ports/ikemen-go/ikemen-go.sh %ROM%" default = "ikemen-go-nightly"
a game in my gamelist.xml looks like so:
<game> <path>./AvengersVsX-Men.mgn</path> <name>Avengers vs. X-Men</name> <desc>description</desc> <image>./media/images/AvengersVsX-Men.png</image> <video>./media/videos/AvengersVsX-Men.mp4</video> <releasedate>20130318</releasedate> <developer>infinitymugenteam</developer> <publisher>infinitymugenteam</publisher> <genre>Fighting</genre> <players>1-2</players> <playcount>23</playcount> <lastplayed>20240526T020120</lastplayed> </game>
and this is my runcommand output (ikemen runs fine, just not Avengers vs. X-Men):
Parameters: │ Executing: xinit /dev/shm/retropie_xinitrc -- vt1 -keeptty │ │ │ X.Org X Server 1.20.11 │ X Protocol Version 11, Revision 0 │ Build Operating System: linux Debian │ Current Operating System: Linux TV 5.15.92-1-osmc #1 SMP PREEMPT Tue Jul 25 00:03:42 UTC 2023 aarch64 │ Kernel command line: coherent_pool=1M 8250.nr_uarts=0 snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1 smsc95xx.macaddr=E4:5F:01:00:49:20 vc_mem.mem_base=0x3ec00000 vc_mem.mem_size=0x40000000 roo│ t=LABEL=root-rbp4 osmcdev=rbp4 rootfstype=ext4 rootwait quiet cgroup_memory=1 cgroup_enable=memory │ Build Date: 22 January 2024 06:21:42AM │ xorg-server 2:1.20.11-1+deb11u11 (https://www.debian.org/support) │ Current version of pixman: 0.40.0 │ Before reporting problems, check http://wiki.x.org │ to make sure that you have the latest version. │ Markers: (--) probed, (**) from config file, (==) default setting, │ (++) from command line, (!!) notice, (II) informational, │ (WW) warning, (EE) error, (NI) not implemented, (??) unknown. │ (==) Log file: "/home/osmc/.local/share/xorg/Xorg.0.log", Time: Sun May 26 02:51:10 2024 │ (==) Using system config directory "/usr/share/X11/xorg.conf.d" │ (II) modeset(0): Initializing kms color map for depth 24, 8 bpc. │ Set mode 1920x1080@60.00Hz on HDMI-1 │ │ Executing (via xinit): /opt/retropie/ports/ikemen-go-nightly/ikemen-go.sh /home/osmc/RetroPie/roms/mugen/AvengersVsX-Men.mgn │ │ xinit: connection to X server lost │ │ waiting for X server to shut down (II) Server terminated successfully (0). Closing log file.
initially i copied the Avengers vs. X-Men folder into the ikemen roms folder but got the same result.
then i copied the linux binary and files into a windows mugen folder, and that did run but i'm hoping i can use emulationstation.
what am i doing wrong? -
@madalone Yeah unfortunately multiple game support had to be removed because it wasn't working properly, hence the need for these "reverted" scripts. I believe it's a future todo for @SuperFromND.
-
@Jesuszilla thanks for the reply, hadn't seen it until just now. i'll be patient then. been running mugen with wine :)
-
-
nightlybuild can install on retropie
but can't run game...
ikemen-go need x-window? -
@retro777
one things,, new reportmy emulator.cfg is here
ikemen-go-nightly = "XINIT:/opt/retropie/supplementary/ikemen-go-nightly/ikemen-go.sh %ROM%"
ikemen-go = "XINIT:/opt/retropie/supplementary/ikemen-go/ikemen-go.sh %ROM%"
default = "ikemen-go-nightly"and, run .mgn on emulation station,display this.
"No config found for system mugen"
Which place do i check and fix??
es_systems.cfg here
<system>
<name>mugen</name>
<fullname>M.U.G.E.N</fullname>
<path>/home/pi/RetroPie/roms/mugen</path>
<extension>.mgn</extension>
<command>/opt/retropie/supplementary/runcommand/runcommand.sh 0 PORT mugen %ROM%</command>
<platform>pc</platform>
<theme>mugen</theme>
</system>
Contributions to the project are always appreciated, so if you would like to support us with a donation you can do so here.
Hosting provided by Mythic-Beasts. See the Hosting Information page for more information.