RetroArch playlists let you find your content quickly without snooping through folders. But it’s difficult to generate playlists when RetroArch doesn’t supply a content database (.rdb) file for a given library. That’s exactly the case with MAME and its massive 36,000+ file arcade romset.
This guide, utilizing RomLister and two modified AHK scripts, will help you whittle down MAME’s romset, split it into genres, get the appropriate ROMs copied into genre subfolders, and automatically generate playlist files that have human-readable game titles and two types of pretty thumbnail images. It’ll make everything look great in RetroArch and also save disk space, by only copying files you need.
Here’s a video showing the playlists in action:
While the results are good and the process as streamlined as currently possible (?), it will still take some real time if you want to get your hands dirty and divvy up MAME’s 100+ genres into your own custom-sorted playlists (Step 2, below). If that’s too much hassle, see if you like the ready-made genre groupings I came up with and just implement those, via either the supplied RomLister search strings or, even faster, the optional, pre-compiled batch files linked in Step 1. Either way, you’ll end up with nicely curated, per-genre MAME playlists.
In addition to RetroArch, you’ll need:
[ol] [li]AutoHotkey (Windows app)[/li][ul] [li]Two AHK scripts from this guide (modified from Tatsuya79’s originals) [/li][/ul]
[li]RomLister (Windows app, not needed if you decide to use the pre-compiled batch files)[/li][ul] [li]latest MAME .exe [/li][li]Controls.xml (alt link if previous down) [/li][li]Catver.ini (grab the English version) [/li][li]nplayers.ini (optional) [/li][/ul]
[li]Text editor with good find/replace, like Notepad++ (Windows app) [/li][li]Image editor (optional) [/li][li]MAME romset of an appropriate version, zipped and split (not merged). The current 0.176 zipped split set is 56.3GB. [/li][li]MAME Snap and/or Title images (I suggest both; download the base .170 packs and all the updates for each) [/li][/ol] (Note: While this guide relies on two key pieces of Windows software, the underlying principles for putting together and enhancing RetroArch playlists apply cross-platform, and there’s a good chance Linux users could get the RomLister and AutoHotKey stuff done in WINE. Hence posting in the General forum.) History
[ul] [li]10/24/2016 - Created 31 new MAME icons. Added pre-compiled batch files pack (see Step 1) for saving mucho time. Refined various searches and main exclusion string (@X) for more accurate results. Updated Final Search Queries doc. Added read-only toggle feature to AHK #2. Updated ~~~TidyUp.bat with new clones and a simple BIOS copying feature (see full contents on Pastebin or in the pre-compiled batch pack). Nips and tucks throughout body text. [/li][li]08/16/2016 - Created ~15 new MAME icons. [/li][li]08/14/2016 - Created ~75 new MAME icons. [/li][li]08/11/2016 - Initial post. [/li][/ul]
[HR][/HR]Step 1: Download and Organize
For the purposes of this guide I’m going to suggest a specific folder setup. You can freestyle if you understand what that’ll affect.
[TABLE=“width: 900, align: center”]
Put your split MAME romset wherever you store such things.
Create four subdirectories: ~Snaps ~SnapsFriendly ~Titles ~TitlesFriendly
(I like tildes because they pop to the top in Explorer’s alphabetical order.)
Extract the MAME Snap images to ~Snaps and the MAME Title images to ~Titles. Now we have all the necessary files in place. [TABLE=“width: 475, align: center”] [TR] [TD]
[/TABLE] [/TD] [/TR]
[TABLE=“width: 460, align: center”] [TR] [TD]
[/TABLE] [/TD] Now you have a choice.
You can either continue on to Steps 2 and 3, using RomLister to pare down your romset into custom genres of your own preference (satisfying, but takes a while), or just go with the genre sortings I came up with and skip to Step 4. To do so you’ll need…
>>> [U]Link to Download: Pre-compiled MAME Genre Batch Files[/U] <<<
The batch files in this pack will copy your ROMs into the correct genre folders so you can proceed directly to Step 4, in which you’ll feed the sorted ROMs into two AutoHotKey scripts to generate thumbnail images and playlist files.
If you’re gonna warp to 4 be sure to check the readme in the zip for instructions on how to use the pack’s contents. Also beware of Lakitu. [/TR] [/TABLE]
[HR][/HR] Step 2: Filter your Romset
Buckle up, this can be a timesink. Those 36,000 ROM files? We need to sift through that jungle and pull out only the ones you’re interested in playlisting.
Thankfully, RomLister makes this otherwise overwhelming task manageable. Learning a few tricks will unlock its power.
Upon first run it’ll ask for four files, the ones linked right below the video. Supply them and it’ll crunch for awhile, smushing the four files together into a RLMasterDB.xml file. This huge text file (mine’s 193MB) contains a mountain of information about your MAME romset: full game names, hardware details, how many buttons each game uses, detailed game genres, etc.
RomLister lets us run searches against all that data, showing us which ROMs our search queries apply to. It can turn that output into Windows batch (.bat) files (Step 3) which copy the singled-out ROMs wherever we like… such as folders split by genre. A-ha.
[TABLE=“width: 900, align: center”]
This is RomLister
Specifically, its main interface.
Click the “List all ROMs” button to make sure your database created OK. It should come up with a huge list of 30000+ ROMs.
This results window is the “working list.” You can remove individual results (right click), run a new search to add additional results to the working list, or, if you’re satisfied with it, export the list to a variety of formats.
Back to the interface. All the checkboxes correspond to information in the database we just compiled. Clicking the boxes changes the search query in the bottom “-find” field.
Searches setup with the GUI are coarse and unrefined. The XML database contains subgenres like Fighter / Versus and Fighter / 2.5D, but the GUI only lets us search for the parent genre, Fighter. How can one separate beat 'em ups and versus fighters, since they were all lumped under “Fighter”?
The answer is to ignore the GUI entirely by writing your own custom search strings. Let’s learn how.
The contents of the -find field determine what you search for, and you can modify the query by typing down there.
Once you learn the syntax you can run super-powerful searches that find exactly what you’re looking for. Be careful, though, because the next time you click a checkbox it’ll reset the query to reflect only the state of the GUI, erasing your modifications. [TABLE=“width: 560, align: center”] [TR] [TD]
[/TABLE] [/TD] [/TR] [/TABLE]
[TABLE=“width: 900, align: center”]
Search Basics
Right-click a search result and choose View Details to see all the info the database has for that ROM. It’s quite a lot, and we can use any bits we want to narrow down searches.
For example, searching ‘<nplayers>1P’ (see it in the screenshot?) would pull up all other ROM records that have that text. Congrats! You just found all the single-player games, at least so far as our database is accurate (it’s great on genres, but has gaps elsewhere).
RomLister syntax is simple, and while I’ll try to cover the important stuff, you really want to check out the wiki’s brief tutorials to get the real lowdown.
Basic Operators
[TABLE=“class: outer_border, width: 350, align: center”] [TR] & | ! ( ) ’ ’ @[macro] [TD=“align: center”] Ampersand is AND Pipe character is OR Exclamation is NOT Parentheses denote grouped items Single quotes search for exact text At sign inserts the named macro
[/TABLE]
Speaking of macros, in the RL folder open rlmacros.txt and paste this new line: @X = (!cloneof & !emulation=preliminary) & !(isbios=yes) & !(’ Mature’ | PlayChoice | ‘Mega Play’ | ‘Nintendo Super System’ | ‘SNES bootleg’ | Megadrive | huc6260 | (n2a03 & Vs.)) This will soon save us a lot of typing.[/TD] [TABLE=“width: 409, align: center”]
[TD]
[/TABLE] [/TD] [/TR] [/TABLE]
[TABLE=“width: 900, align: center”]
Begin the Purge
[TABLE=“width: 888, align: center”] [TR] [TD]Time to search and destroy. 36,000 ROMs… let’s cut that down, a lot.
Clear the search box and paste (!cloneof & !emulation=preliminary). This is the standard string to eliminate all clones and games that don’t yet work. Hit enter, and your computer will think a bit.
Ah, that brings us down to 5,040 or so original games that work (your numbers will vary a bit). Much better, but we’re just getting started.
I notice some other things I don’t want in there: BIOS files, strip poker sims, and games sourced from 8- and 16-bit consoles, like PlayChoice 10 and MD/SNES bootlegs. New query: (!cloneof & !emulation=preliminary) & !(isbios=yes) & !(’ Mature’ | PlayChoice | ‘Mega Play’ | ‘Nintendo Super System’ | ‘SNES bootleg’ | Megadrive | huc6260 | (n2a03 & Vs.)) Say, does our search string look familiar? It does! It’s that line you pasted into rlmacros.txt. Since it’s a macro, you can invoke it by its name, @X. Searching for @X should give the same result as typing that long exclusion string. From now on, just add @X to the end of each search string to filter out clones, games that don’t work, and other stuff we don’t want. Convenient!
If you run that long exclusion string you’ll notice we’re down to 4,508 ROMs, give or take. How to eliminate even more? We’ll start slicing and dicing the romset into more manageable chunks. [TABLE=“class: outer_border, width: 300, align: center”] [TR] [TD]Why did that last search work?
Lemme explain those last two bits.
huc6260 is the GPU of the PC-Engine / TurboGrafx-16, and I noticed that the Turbo games I wanted to remove had that in their details. So by searching for “NOT huc6260” ( !huc6260 ) we can eliminate all those games.
As for (n2a03 & Vs.) , n2a03 is a CPU used by Nintendo’s NES-based arcade efforts, including the Versus system. However, searching just !n2a03 eliminated a few non-Nintendo games that also used that CPU, so I made the search more specific by also requiring “Vs.”, which was in every Nintendo Vs. game’s title. This combination of CPU and title string finds exactly the games I want.
[/TABLE] [/TD] [/TR] [/TABLE] [TABLE=“width: 800, align: center”]
To do that (and start organizing in earnest) we turn to the genres RomLister imported from catver.ini.
Catver.ini gave RomLister 17 top-level genres: [TABLE=“class: outer_border, width: 500”] [TR] [TD]Ball & Paddle Casino Fighter Pinball Quiz Sports
Casino Climbing Maze Platform Rhythm Tabletop
Climbing Driving Multiplay Puzzle Shooter
[/TABLE] [/TD] [/TR] [/TABLE] Most have more specific subgenres under them. All told, there are 164 or so genre classifications, with 30 just being “mature” variants of categories like Shooter / Flying Vertical.
Let’s start by removing some obvious ones (feel free to remove more or re-add whatever you like). For my tastes I lopped off Casino, Quiz, Rhythm, Tabletop, and mature variants. Now we’re down to 106:
[TABLE=“width: 888, align: center”]
Ball & Paddle Ball & Paddle / Breakout Ball & Paddle / Pong
Climbing
Driving Driving / 1st Person Driving / Boat Driving / Plane Driving / Race Driving / Race (chase view) Driving / Race (chase view) Bike Driving / Race 1st P Bike Driving / Race 1st Person Driving / Race Bike Driving / Race Track
Fighter / 2.5D Fighter / 2D Fighter / 3D Fighter / Field Fighter / Misc. Fighter / Multiplay Fighter / Versus Fighter / Versus Co-op Fighter / Vertical
Maze Maze / Digging Maze / Driving Maze / Fighter Maze / Outline Maze / Shooter Large Maze / Shooter Small Maze / Surround
Multiplay Multiplay / Compilation Multiplay / Mini-Games
Pinball Pinball / Pachinko
Platform / Fighter Platform / Fighter Scrolling Platform / Run Jump Platform / Run Jump Scrolling Platform / Shooter Platform / Shooter Scrolling
Puzzle / Cards Puzzle / Drop Puzzle / Match Puzzle / Maze Puzzle / Misc. Puzzle / Outline Puzzle / Sliding Puzzle / Toss
Shooter / 1st Person Shooter / 3rd Person Shooter / Command Shooter / Driving Shooter / Driving (chase view) Shooter / Driving 1st Person Shooter / Driving Diagonal Shooter / Driving Horizontal Shooter / Driving Vertical Shooter / Field Shooter / Flying Shooter / Flying (chase view) Shooter / Flying 1st Person Shooter / Flying Diagonal Shooter / Flying Horizontal Shooter / Flying Vertical Shooter / Gallery Shooter / Gun Shooter / Misc. Shooter / Misc. Horizontal Shooter / Misc. Vertical Shooter / Versus Shooter / Walking
Sports / Armwrestling Sports / Baseball Sports / Basketball Sports / Bowling Sports / Boxing Sports / Bull Fighting Sports / Darts Sports / Dodgeball Sports / Fishing Sports / Football Sports / Golf Sports / Handball Sports / Hang Gliding Sports / Hockey Sports / Horse Racing Sports / Horseshoes Sports / Misc. Sports / Multiplay Sports / Ping Pong Sports / Pool Sports / Rugby Football Sports / Shuffleboard Sports / Skateboarding Sports / Skiing Sports / SkyDiving Sports / Soccer Sports / Sumo Sports / Swimming Sports / Tennis Sports / Track & Field Sports / Volleyball Sports / Wrestling
[/TABLE] [TABLE=“width: 888, align: center”]
Some top-level genres have standalone categories, like Driving and Maze, while categories like Puzzle and Sports do not. Don’t forget some games exist only in those top-level genres.
Right off the bat I know I don’t care about separating Sports games into subgenre playlists like Baseball, so for my purposes those 32 genres became one playlist comprising a healthy 399 ROMs (search: ‘<category>Sports’ @X ). 75 genres left to sort.
After looking at the various games in Driving, I decided the same thing there. ‘<category>Driving’ @X brings up 172 ROMs, a pretty optimally sized playlist.
With Sports and Driving flattened we’re down to 65 genres. Those might only take like… a day to organize! (Okay, more like two…) three… [TABLE=“class: outer_border, width: 490, align: center”] [TR] [TD]HAY I maed u sum mMakROS
Games that require CHDs: @C = (cdrom | harddisk | laserdisc) & !(isbios=yes) !(’<category>Business Computer’ | ‘<category>Home Computer’ | ‘<category>Development Computer’ | ‘<category>Single Board Computer’ | ‘<category>Laptop’ | ‘<category>Game Console’ | ‘<category>Utilities’ | ‘huc6260’ | ‘Xerox’)
Games that support sound samples: @S = (‘sample name’)
BIOS files (it’s handy to give these their own folder for easy grabbin’): @B = B [/B] Nintendo Vs. games: @V = (n2a03 & Vs.)
[/TABLE] [/TD] [/TR] [/TABLE] [/TD] [/TR] [/TABLE] [TABLE=“width: 900, align: center”]
Divide and Conquer
Faced with all these genres, some of them hard to understand (Fighter / Field? Maze / Shooter Large? Fighter / Versus Co-op? WTF?) I began running searches on every last one to see what games went where. I took notes on key titles that belonged to each genre, which helped me remember what the genres meant and shuffle all these categories around later when it was time to divvy them up into my custom genre playlists.
We’ll go through my process to assemble the genre playlists so you can see how it’s done. Then you can either use/modify my groupings or make your own.
[TABLE=“width: 888, align: center”] [TR] [TD]Looking at everything, I came up with 15 RetroArch playlists I could cobble together from the 65 remaining genres: [TABLE=“class: outer_border, width: 700, align: center”] [TR] [TD]Action Beat 'Em Up Driving Fighting Lightgun Maze Misc. Platform Platform Single Screen Puzzle Shooting Hori Shooting Misc. Shooting Single Screen Shooting Vert Sports
[/TABLE] [/TD] [/TR] [/TABLE] Some of the playlists required no assembly at all.
I wanted side-scrolling Beat 'Em Ups (Double Dragon, Final Fight) to be their own playlist, and luckily, catver.ini puts the vast majority of them under Fighter / 2.5D: ‘<category>Fighter / 2.5D’ @X (96 games). That was easy! Along with Sports (399 games) and Driving (172 games), that’s three playlists dealt with.
Fighting games (SF2, MK) were conveniently under Fighter / Versus. Search for ‘<category>Fighter / Versus’ @X, right? Almost! I eventually noticed redundant JAMMA PCB versions of SNK vs. Capcom and KoF 2003 as well as a Fighter subgenre that I wanted to put in another playlist. This eliminated them: ‘<category>Fighter / Versus’ & !(‘Fighter / Versus Co-op’ | ‘JAMMA PCB’) @X (195).
Lightgun games (I know they’re not all “lightguns,” I just like the term) was a cinch with ‘<category>Shooter / Gun’ @X (74).
Five playlists sorted. I grayed them out above. Now the trickiness will slowly ramp up.
Puzzle wasn’t too bad; I thought the Puzzle / Match genre looked pretty boring so I excluded it: ‘<category>Puzzle’ & !(‘Puzzle / Match’) @X (183).
My playlist idea Platform Single Screen (single-screen platformers) matched up perfectly with catver.ini’s Platform / Run Jump (Bubble Bobble, DK), but I didn’t want Platform / Run Jump Scrolling (Alex Kidd, Bonk, Sonic) to get sucked in too; that would better live under plain old Platform. So: ‘<category>Platform / Run Jump’ & !(’<category>Platform / Run Jump Scrolling’) @X (118).
[TABLE=“width: 888, align: center”]
Platform (scrollers like Mario and Sonic) got complicated. It was easy to remove the single-screen games, but I thought the very small nine-game subgenre Platform / Fighter (Rampage, The Outfoxies) was better placed under a catch-all Action playlist.
Further, I saw some games that, to me, just did not qualify as platformers. Platform / Fighter Scrolling had games like Black Tiger and Cadash but also Altered Beast, Bad Dudes, and Vigilante. I earmarked the latter for Action (you might prefer Beat 'Em Up). Similarly, Platform / Shooter Scrolling had Alien Storm. Wut? That’s a Beat 'Em Up! Hence the second half of this final query for Platform: (’<category>Platform / Fighter Scrolling’ | ‘<category>Platform / Shooter’ | ‘<category>Platform / Run Jump Scrolling’) @X !(altbeast | baddudes | vigilant | astorm | cbuster | narc | aladmdb | evilston | ‘JAMMA PCB’) (160).
Keep notes on any miscategorized games you filter out. We’ll take care of them all later. [TABLE=“class: outer_border, width: 360, align: center”] [TR] [TD]Platformers are Hateful
Platformers have been annoying to nail down. I kinda wanted a run ‘n’ gun playlist for Contra-likes but ‘<category>Platform / Shooter Scrolling’ @X (65) was too broad, with games like Magician Lord, Narc, Son Son, and Wonder Boy. Kind of a catch-all mess IMO.
I also considered combining Contra-likes with ‘<category>Shooter / Walking’ @X (49, Commando, Ikari Warriors, Mercs, Valkyrie no Densetsu) but then that would gut Action of almost a third of its 160 games.
[/TABLE] [/TD] [/TR] [/TABLE] Catver.ini has no less than 23 types of Shooters. Lightgun subtracted one. Three of the playlists proved simple enough: Shooting Hori: (’<category>Shooter / Flying Horizontal’ | ‘<category>Shooter / Driving Horizontal’ | ‘<category>Shooter / Misc. Horizontal’) @X (132) Shooting Vert: (’<category>Shooter / Flying Vertical’ | ‘<category>Shooter / Driving Vertical’ | ‘<category>Shooter / Misc. Vertical’) @X (272) Shooting Single Screen: (’<category>Shooter / Gallery’ | ‘<category>Shooter / Field’ | ‘<category>Shooter / Versus’ | ‘<category>Shooter / Command’) @X (237)[TABLE=“width: 888, align: center”]
Every remaining Shooter subgenre (including games like Afterburner, Battle Zone, Cabal, Metal Hawk, Star Wars, Viewpoint) but one became Shooting Misc. The holdout was Shooter / Walking, the home of Commando, Out Zone, and Shock Troopers, which migrated to Action. Here’s the bear of a query that made Shooting Misc. (163):
(’<category>Shooter / 1st Person’ | ‘<category>Shooter / 3rd Person’ | ‘<category>Shooter / Flying 1st Person’ | ‘<category>Shooter / Flying (chase view)’ | ‘<category>Shooter / Flying Diagonal’ | ‘<category>Shooter / Driving 1st Person’ | ‘<category>Shooter / Driving (chase view)’ | ‘<category>Shooter / Driving Diagonal’ | ‘<category>Shooter / Misc.’ | ‘<category>Shooter / Flying’ | ‘<category>Shooter / Driving’) & !(‘Shooter / Misc. H’ | ‘Shooter / Misc. V’ | ‘<category>Shooter / Flying H’ | ‘<category>Shooter / Flying V’ | ‘<category>Shooter / Driving V’ | ‘<category>Shooter / Driving H’) @X & !(Pang | Stargate | Salamander | ‘Section Z’)
(I felt those last three games would better fit in Shooting Hori. Defender was already there…) [TABLE=“class: outer_border, width: 350, align: center”] [TR] [TD]Take it Slow… j/k don’t
That query over there is a handful. If it gets to be too much, remember you can also break it into smaller searches and run them one after the other:
‘<category>Shooter / 1st Person’ @X ‘<category>Shooter / 3rd Person’ @X ‘<category>Shooter / Flying 1st Person’ @X
As long as you don’t close the working list your new results will keep adding to it. Then again, one bad search with unexpected results could fill it with junk, forcing you to start over. The all-in-one, long query method is much faster, too.
[/TABLE] [/TD] [/TR] [/TABLE] You get the idea: Use specific searches to slice up your romset into manageable chunks that will make good playlists. Keep notes on errata you will fix later.
To find further examples, including every single search I ended up using to implement my playlists, check out my notes in this doc:
>>> Link to Document: Final Search Queries, Genre Notes, and Misc. Tidbits <<<
I’ll wait here.
Got your taxonomy all figured out yet? No? Keep at it, it’s an arduous process. Or if my setup doesn’t give you conniptions (“Vigilante… UNDER ACTION???”) feel free to just use mine, either via the searches in the linked document – having all the catver.ini genre searches already figured out will save you time – or the pre-compiled batch files pack linked in Step 1.[/TD] [/TR] [/TABLE]
[HR][/HR]Step 3: Let’s Make Batch Files
All done? Nice! Curating that hot mess of ROMs was by far the hardest part of the process (but think how much harder it would have been without RomLister!).
The rest is a mostly automated breeze. RetroArch playlists, here we come. [TABLE=“width: 900, align: center”]
[TABLE=“width: 888, align: center”] [TR] [TD]Once you’ve got your ROM lists all curated it’s finally time to do something with them: We’re gonna turn each of those final playlist queries into batch files that will copy the appropriate ROMs to the appropriate subfolders.
As you’ll recall I had 15 playlists, so I made 15 folders. (Secret: I also made “special collection” playlists for Neo Geo, Nintendo Vs., and Vector games. The relevant searches are in the linked document.) Something like this image is what you’re aimin’ for:
Now run one of your final playlist searches. I’ll do Fighting: ‘<category>Fighter / Versus’ & !(‘Fighter / Versus Co-op’ | ‘JAMMA PCB’) @X [TABLE=“width: 716”] [TR] [TD]There’s a drop-down at the bottom of the working list window. Choose Batch File and click Preview List. You’ll see a sample preview line: copy %ROM%.zip c:\mame\roms
Change the destination path to the place you want the playlist’s ROMs to end up. (Remember that double quotes must surround paths that have spaces. I include them all the time, just to not worry about it.) While you can use a full path… copy %ROM%.zip “C:\MAME Roms\Fighting”
…I like to use shorter relative paths. In this case, quotes optional: copy %ROM%.zip “.\Fighting” [TABLE=“width: 240, align: center”] [TR] [TD]
[/TABLE] [/TD] [/TR] [/TABLE] [/TD] [TABLE=“width: 155”]
[TD]
[/TABLE] [/TD] [/TR] [/TABLE] [TABLE=“width: 888, align: center”]
A preview list will appear. Look good? Click Save and save it in your main ROMs folder with a tilde or two at the start and a .bat extension. For example, ~~Fighting.bat. This way it will bubble to the top of your massive folder of ROMs.
Now do the same for each intended playlist: Run the search, save the batch file. You’ll end up with one batch file for each playlist/folder.
You’re ready to let 'er rip! Run each .bat file and it should copy all the specified ROMs to the relevant subfolder. All those previously empty folders will now contain your carefully curated games. [TABLE=“class: outer_border, width: 400, align: center”] [TR] [TD]Super Elite Deluxe Batch File Trick
If you append two pipe characters and “PAUSE” to the end of each line of your .bat files the script will pause during execution if it can’t find one of the ROMs it’s supposed to copy. It’s a useful way to see if you’re missing anything.
Just use your text editor to do a find/replace on the destination path:".\Fighting" becomes “.\Fighting” || PAUSE
[/TABLE] [/TD] [/TR] [/TABLE] Step 3 concludes with a little housecleaning. Use your text editor to create an empty batch file and paste in a line from one of the batch files RomLister created. Now we’ll edit this new file (I called mine ~~~TidyUp.bat) to copy any ROMs you pulled aside earlier to their proper homes. (You did keep notes, right?)
[TABLE=“width: 888, align: center”]
You can see how mine starts over to the right. Those are mostly games I filtered out earlier and earmarked to go elsewhere.
There is also the issue of worthwhile clones: A few are worth keeping, or even replacing their parent games with.
For example, the parent Simpsons and TMNT ROMs (simpsons.zip, tmnt.zip) are four-player cabs, and tie each character to a certain player slot. There are two-player versions of each (simpsons2p.zip, tmnt2po.zip) that allow players to choose any character. Another neat one is Bubble Bobble: Lost Cave (bublcave.zip) a 2012 hack that translates the levels from various console ports into the arcade version of Bubble Bobble (bublbobl.zip).
UltraMegaHyperNewbie at the HyperSpin forums is keeping track of notable clones, so check out their list and add any that sound interesting to your batch file.
copy altbeast.zip ".\Action" || PAUSE REM Altered Beast
copy baddudes.zip ".\Action" || PAUSE REM Bad Dudes
copy cbuster.zip ".\Action" || PAUSE REM Crude Buster
copy evilston.zip ".\Action" || PAUSE REM Evil Stone
copy narc.zip ".\Action" || PAUSE REM NARC
copy vigilant.zip ".\Action" || PAUSE REM Vigilante
copy astorm.zip ".\BeatEmUp" || PAUSE REM Alien Storm
copy wonder3.zip ".\Misc" || PAUSE REM Three Wonders
copy ladygolfe.zip ".\NintendoVs" || PAUSE REM Golf Women Ver.
copy salamand.zip ".\STGHori" || PAUSE REM Salamander
copy sectionz.zip ".\STGHori" || PAUSE REM Section Z
copy sexyparo.zip ".\STGHori" || PAUSE REM Sexy Parodius
copy stargate.zip ".\STGHori" || PAUSE REM Stargate
copy pang.zip ".\STGSingle" || PAUSE REM Pang
copy spang.zip ".\STGSingle" || PAUSE REM Super Pang
copy pang3.zip ".\STGSingle" || PAUSE REM Pang 3
copy mpang.zip ".\STGSingle" || PAUSE REM Mighty! Pang
[/TABLE] Here’s my clone section:
copy aligatorun.zip ".\STGMisc" || PAUSE REM Alligator Hunt unprotected (reg. ver. is marked preliminary)
copy drgninja.zip ".\Action" || PAUSE REM Bad Dudes vs. Dragon Ninja
copy bublcave.zip ".\PlatformSingle" || PAUSE REM Bubble Bobble Lost Cave hack
copy sboblbobla.zip ".\PlatformSingle" || PAUSE REM Super Bubble Bobble hack
copy dkongx11.zip ".\PlatformSingle" || PAUSE REM Donkey Kong II hack
copy gaunt22p.zip ".\Action" || PAUSE REM Gauntlet II 2-player
copy gauntlet2p.zip ".\Action" || PAUSE REM Gauntlet 2-player
copy hcastlek.zip ".\Platform" || PAUSE REM Haunted Castle JPN (less brutal)
copy ikarijpb.zip ".\Action" || PAUSE REM Ikari Warriors joystick hack
copy jojon.zip ".\Fighting" || PAUSE REM JoJo's Venture No CD
copy jojobane.zip ".\Fighting" || PAUSE REM JoJo's Bizarre Adventure No CD
copy kchampvs2.zip ".\Fighting" || PAUSE REM Karate Champ 2-player
copy kf2k5uni.zip ".\Fighting" || PAUSE REM King of Fighters 2005 Anniv (hack of 2002)
copy lifefrce.zip ".\STGHori" || PAUSE REM Life Force (enhanced Salamander)
copy mhavocrv.zip ".\STGMisc" || PAUSE REM Major Havoc hack "Return to Vax"
copy mshvsfj.zip ".\Fighting" || PAUSE REM Marvel Super Heroes vs. Street Fighter JPN
copy metamrphj.zip ".\BeatEmUp" || PAUSE REM Metamorphic Force JPN more fair, has lifebars
copy nslasherj.zip ".\BeatEmUp" || PAUSE REM Uncensored JPN version
copy pacman.zip ".\Maze" || PAUSE REM Pac-Man
copy qix2.zip ".\Puzzle" || PAUSE REM Qix II Tournament
copy quartet2a.zip ".\Action" || PAUSE REM Quartet 2-player
copy rambo3u.zip ".\STGMisc" || PAUSE REM Rambo III U.S.
copy rampart2p.zip ".\STGSingle" || PAUSE REM Rampart joystick version
copy gaiden.zip ".\BeatEmUp" || PAUSE REM Shadow Warriors U.S. version
copy simpsons2p.zip ".\BeatEmUp" || PAUSE REM The Simpsons 2 player
copy simpsons2pj.zip ".\BeatEmUp" || PAUSE REM The Simpsons 2 player JPN w/ bugfixes
copy svcsplus.zip ".\Fighting" || PAUSE REM SNK vs. Capcom Chaos Super Plus (bootleg, cast unlocked)
copy sf2rb.zip ".\Fighting" || PAUSE REM SF2CE Rainbow Edition bootleg
copy sfiiin.zip ".\Fighting" || PAUSE REM Street Fighter III: New Generation No CD
copy sfiii2n.zip ".\Fighting" || PAUSE REM Street Fighter III 2nd Impact: Giant Attack No CD
copy sfiii3n.zip ".\Fighting" || PAUSE REM Street Fighter III 3rd Strike: Fight for the Future No CD
copy ssridersubc.zip ".\Platform" || PAUSE REM Sunset Riders 2-player
copy tmnt2po.zip ".\BeatEmUp" || PAUSE REM TMNT 2-player
copy tmnt22pu.zip ".\BeatEmUp" || PAUSE REM TMNT2 2-player
copy twincobru.zip ".\STGVert" || PAUSE REM Twin Cobra US version, slight differences
copy uccopsar.zip ".\BeatEmUp" || PAUSE REM Undercover Cops Alpha-Renewal (better graphics, more moves)
copy vendetta2pu.zip ".\BeatEmUp" || PAUSE REM Vendetta 2-player Asian version
copy xmen2pa.zip ".\BeatEmUp" || PAUSE REM X-Men 2-player
copy xmen6p.zip ".\BeatEmUp" || PAUSE REM X-Men 6-player dual-screen
It concludes with a little routine that tries to copy the popular Neo Geo and CPS2 BIOS files where they’re needed. Here’s a link to my full batch file:
>>> Link to Pastebin: Full code of ~~~TidyUp.bat <<<
All set? Run your clean-up batch file and all ROMs should finally be in place. That comforting sense of satisfaction and warmth is your brain’s anal-retentive gland spraying the good chemical. Ahhh. [/TD] [/TR] [/TABLE]