In Summer 2018, RetroArch added MAME 2003-Plus to the arcade section of its
Core Updater. MAME 2003-Plus is a new arcade emulator core which prioritizes 1) usability and frontend integration, 2) performance, and 3) compatibility across the range of libretro-supported platforms including mobile devices, single board computers, and consoles. Unlike other libretro MAME cores which remain fixed at one MAME version, MAME 2003-Plus is actively backporting more recent game drivers and features.
MAME 2003-Plus implements libretro functionality like savestates and netplay when supported by the underlying MAME driver. The core currently has partial support for the RetroArch “Run Ahead” input latency reduction feature when Run Ahead is set to
Second Instance — our goal is to support Run Ahead fully, as discussed later in this post.
Newly-supported games include Dyna Gears and DoDonPachi Dai-Ou-Jou
MAME 2003-Plus is part of a lineage of codebase forks and ports: this core was forked from MAME 2003, which is itself derived from Xmame 0.78, the X11/Unix port of MAME 0.78. In addition to the games supported by MAME 2003, MAME 2003-Plus contributors have backported new drivers and substantial bugfixes for several hundred additional games.
New and fixed games
Screenshot of Bubble Bobble: Lost Cave, a hacked romset that arcadez backported to MAME 2003-Plus from MAME 0.202.
There is a long tradition in arcade emulation of producing platform-specific and performance-optimized MAME builds. This core was first established when arcadez began adding games that were not available in MAME 0.78 to a new fork of the existing MAME 2003 emulator. In addition to contributions from arcadez, the core has also benefited from the contributions of new and veteran MAME hackers. The most current list of new and fixed games can be found in the CHANGELOG.
Libretro integration and usability
One of the other things that makes MAME 2003-Plus distinct from the other libretro MAME cores is an emphasis on integration between MAME 2003-Plus and the libretro API. For example, there is full support for remapping player controls in the libretro frontend rather than requiring users use the legacy MAME input binding system from standalone MAME.
MAME 2003-Plus also strives to be as easy to start working with as possible. For example, this core incorporates a number of NVRAM “bootstraps” that pre-configure games with sensible default internal settings. That means in MAME 2003-Plus, Mortal Kombat 2 is configured with an appropriate volume when first launched rather than requiring use of the
Service Menu. Another one of the games which benefit from an NVRAM bootstrap is Lunar Lander, which uses the bootstrap to avoid requiring the user to complete a
Service Mode reset process before it is playable the first time.
Building correct romsets
While more than 95% of MAME 2003-Plus romsets are identical to MAME 2003 and MAME 0.78 romsets and can be used as-is, new and fixed games require romsets that are built for use with this core. Unless you are already sure that you have a romset collection that is correctly built for MAME 2003-Plus, you can consult the official docs for instructions on how to rebuild and verify your collection by using ClrMamePro.
As detailed in the building romset docs linked above, a ClrMamePro-compatible XML DAT file is maintained in the MAME 2003-Plus repository for users to download. One of the new features added to core also allows users to generate their own DAT via the
MAME Menu. Generating a DAT ensures that it is an exact match for the version of the core that you are using.
Getting started with MAME 2003-Plus
- RetroArch: MAME 2003-Plus can be installed from the RetroArch buildbot via the
- RetroPie: MAME 2003-Plus can be installed in RetroPie in the
Experimentalsection of the RetroPie Setup tool.
Documentation for this core can be found in the libretro docs.
Content-aware core options
Because MAME 2003-Plus supports more than 4,000 games, there are a number of core options which only apply to a subset of its library. For example, there are several options to configure vector displays which have no effect for games with any other kind of display. MAME 2003-Plus only presents core options to the frontend that are relevant to the game that is currently loaded — those vector options only appear when a vector game is currently loaded.
Alternate CD Soundtrack Support
The NES Classic Mini and the SNES Classic Mini have an active hack and homebrew community which helped make MAME 2003-Plus and other libretro cores available on that hardware. Thanks to gpstar, KMFDManic, and others in that community, MAME 2003-Plus supports alternate soundtracks for several popular arcade titles that were also released in other formats with high quality audio soundtracks.
These alternate soundtracks are enabled by first placing the appropriate audio sample pack within the
mame2003-plus subdirectory of the libretro system path, and then activating the
Use CD Soundtrack core option.
- Double Dragon
- Final Fight
- Mortal Kombat
- Michael Jackson’s Moonwalker
- NBA Jam
- Out Run
KMFDManic created videos demonstrating the alternate soundtracks:
Final Fight, Mortal Kombat, and NBA Jam
Content-aware control names
In the same way that content-aware core options only appear when they are relevant to the current game, MAME 2003-Plus has added support for content-aware control names. In other words, when remapping Street Fighter 2 controls, the libretro frontend can display the control names that were printed on the real arcade control panel like
Strong Punch and
Forward Kick instead of a generic labels like
Button 2, etc.
Street Fighter 2 displays the proper names for controls like
Strong Punch, and
Because our support for control names is relatively new and is derived from the third-party
controls.dat project, control names need to be verified by a human being before they are activated. As of October 2018, dozens of games have these active control names, but hundreds more need to be double-checked before being enabled. Coders, and users who are willing to learn basic github commands, are invited to join in this effort as volunteers!
4-way joystick simulation
4-way joysticks are an essential aspect of the gameplay for many iconic arcade titles including games like Donkey Kong, Pac-Man, and Q-Bert. Because modern joysticks generally use 8-way designs, it is usually impossible to play these games well without special hardware. MAME 2003-Plus includes a core option to simulate 4-way joysticks. When enabled, this logic analyzes input from 8-way digital joysticks in order to render its position as if the joystick had a 4-way design. This simulation is not the same as using a real 4-way joystick, but it can make a significant improvement to playability.
Q-Bert is one of the many classic arcade games intended for a 4-way joystick.
MAME 2003-Plus is fortunate to have a small but active group of developers making contributions. However, there are several important opportunities to improve MAME 2003-Plus and its integration with the libretro API that remain to be addressed. Coders interested in working on these issues are very welcome to introduce themselves in the github issue tracker or in the #programming channel of the libretro Discord server.
For those who are not able to contribute code to these issues, crowd-sourced “bounties” are available that allow folks to donate to a pool of funds which is awarded to the coder who can complete the project. If you find yourself enjoying MAME 2003-Plus, please consider making a donation in any amount to one of the open bounties.
Analog controller support
Currently MAME 2003-Plus only supports analog controls in RetroArch by virtue of the fact that RetroArch passes on some analog input data to the core regardless of whether the core has implemented the analog interface. It is out-of-spec behavior and it also doesn’t encompass the full analog functionality of the libretro analog controls API. This bounty entails implementing that analog API. Contribute to the bounty or read the corresponding github issue.
Because MAME 2003-Plus does not yet implement the relatively new libretro lightgun API, the core currently supports lightguns only if they are configured to emulate a mouse. This bounty entails implementing the libretro lightgun API. Contribute to the bounty or read the corresponding github issue.
Improvements to “Run Ahead” support
Every game has a certain built-in amount of input lag: some react on the next displayed frame and others can take 2, 3, or even more frames before an action on the controls gets rendered on screen.
Run Ahead feature calculates the frames as fast as possible in the background to “rollback” the action as close as possible to the input command requested. MAME 2003-Plus has underlying support for Run Ahead but several bugs have been reported which prevent the feature from working as intended. Contribute to the bounty or read the corresponding github issue.