Jump to content
LaunchBox Community Forums

MAME Software Lists Import Tool - plugin 6.0.2

   (2 reviews)

4 Screenshots

About This File

Use this plugin to filter and import MAME Software Lists into LaunchBox.

New - version 6.0 

  • Requires LaunchBox 13.3 or newer*
  • Slightly different look. Same old features. A lot of (behind the scenes) code improvement.
  • This update has been rewritten in .NET 6.0 to “keep up with the times”. 

*If you’re using LaunchBox version 13.2 or older, download version 4.5 of the plugin.
(For now, at least) v4.5 will still work with LaunchBox 13.3 and newer.

Features:

  • Import MAME Console/Computer ROMs into a new or existing Platform
  • Import clones as Additional Apps, separately or not at all
  • (Option) Skip Prototypes
  • (Option) Skip Non-Supported ROMs
  • Adds the Platform and Command-line Parameter to the selected MAME emulator (ex. Atari 2600      a2600 -cart)
  • (Option) Copy ROMs to a new folder during importing
  • Imported games tagged as not supported by MAME will be marked as "Broken".
  • (Option) Import only games that exist in your ROMs Source Folder
  • (Option) Ignore games that only have a Title change (when updating)
  • Version information found inside parenthesis in a Games Title will be added to the games "Version" (metadata)

 

Audit Feature:  Compare your existing softlist console/Platform against the MAME hash.xml.
    Will cross check Title and Rom names.
        - Select the respective hash.xml and Platform
        - Click Audit (last page)
        - Any differences along with a brief description will be shown.
        - Option to select files (if any) and have them removed from your LaunchBox Platform.
        - Will check main Titles as well as Additional Apps (if you imported them that way).
    This does NOT check rom integrity. That's between you and Clrmamepro (or related utility).

 

 

What's needed:

  • (1) dll file included in the zip.
  • MAME Software List hash files (located in the "hash" sub folder of your Mame's main folder)
  • MAME Software List ROMs* and BIOS files (only if you want to actually play them)
    •     *The rom set needs to be either a Split set or a Non-Merged set for a full import
    •       If you plan to not import clones, any type set will work.

 

What it won't do: 

  • Filter/Sort by Region (it's a MAME hash file limitation)
  • Determine if/what BIOS files are needed
  • Import Metadata and Media (just use the built in LaunchBox Tool)
    • To remove extra information from the games titles [Example "(Jpn)"], select 
    •    Yes, download and replace all existing metadata and media when running the tool.)

 

How to:

- Copy the "ImportMameSoftwareLists" folder from the zip file to your ..\LaunchBox\Plugins folder.
- Navigate to that folder and unblock the .dll file.  (Right click, Properties, and click Unblock)
180007186_Unblockdll.jpg.d9640d85e456213cc864e9bee26000e2.jpg

- Start LaunchBox. Click on "Tools" and select "Import MAME Software Lists".
- Navigate through the wizard.
- After running the plugin, right-click your new platform and select Edit. Set Scrape-as to whatever your platform is and save.


Notes:

ROM Folder Locations (screen): The Destination Folder is required even if you don't plan to copy the files.  It's needed to set up the Application Path for the ROMs when Importing.

Copy and/or Import (screen):  To add Version info (if it exists in the Games Title) to an existing console (Platform), run the plugin and DO NOT CHECK Ignore games that only have a Title change (when updating)

 

Selecting an emulator:
The main intent of this plugin is to import consoles and computers using MAME softlist ROMs and set the games "proper" Title and application path.  It will also attempt to add the appropriate Command-line Parameter for the platform in MAME’s Associated Platforms.

If you prefer to use an emulator that can load MAME ROMs other than MAME (or a variant there-of), go for it.  It’s recommended to select MAME while using the importer, and then change the Default Emulator when done importing. 

You can select the 'other' emulator in the plugin, and it will be set as the default for the platform. But it will also have the default command line parameters for the associated platform set using MAME parameters.  So be sure to adjust as necessary.
 

Importing:
(optional) "Import games that only exist in the ROMs Source Folder"
If using a Merged softlist set, clones will not get imported using this option.  But if you have a curated Split set, this can be handy.

(optional) "Ignore games that only have a Title change (when updating)"
If you manually renamed your game titles, check this box.


Updating:
If you’ve updated your MAME emulator and MAME softlist ROMs, simply run the importer and point to the updated hash file and select your existing platform.

When updating, this plugin will NOT remove any games from your collection that MAME has removed from the hash file(s).  You can use Audit to compare your collection to the MAME hash file and manually remove games from your collection that don't exist in the hash file (if you so desire).

 

Downloading Metadata:
After running the plugin, right-click your new platform and select Edit. Set Scrape-as to whatever your platform is and save.

When downloading metadata and Media, choose "Yes, download and replace all existing metadata and media".  This will remove the Version info from the games Title.

After updating the metadata, if some, but not all games got updated, restart LaunchBox and try the bulk metadata downloader again.

 

Auditing:
When auditing, if a game originally had the version info in its Title and you have ran the Download Metadata and Media wizard selecting "Yes, download and replace all existing metadata and media", you WILL see games marked as Missing.
 

 

* MESS xml *   

Spoiler

 

To see MAME's Overall and Emulation status [Preliminary/Good/Imperfect]in the Import Mame Software Lists plugin, you will need to have the MESS xml file that matches your version of MAME.    messxxx.xml (where 'xxx' is the MAME version.  i.e. mess215.xml) 

image.png.354c8734786e6908b1b976b058e16ba0.png

This file needs to be located in the same folder as the plugin (..\LaunchBox\Plugins\ImportMameSoftwareLists\) and can be download from: https://www.progettosnaps.net/mess/repository/  (July 10,2023 updated site link)

These files are [relatively] large (24MB+) and will slow down the screen updates when selecting different consoles/computers.  

Use "Shrink_MESSxml.exe" to reduce the mess xml file size to a little over 1MB to eliminate slow screen updates.  After 1st making a backup, it then removes unneeded data from the xml file.  Place only the one 'shrunken' xml file in the plugin folder.  ..\LaunchBox\Plugins\ImportMameSoftwareLists\mess242.xml

image.png.c2144eb50f6677c1fa3b40d15ef8b609.png

The Import Mame Software Lists plugin will search for "mess*.xml".  So as you update, just replace the old xml file (mess242.xml) with the new one (mess243.xml).

ONLY HAVE ONE MESS XML FILE IN THE PLUGIN FOLDER AT A TIME!

 

 

Other Notes: (things I've learned)

- Software List folder/file locations: 
 

Spoiler

 

For easiest integration with MAME, place all Software List folders inside a single directory (i.e. "software") and name them the same name as their respective hash xml file_name.  For example:

D:\emulators\MAME\software\
D:\emulators\MAME\software\32x\
D:\emulators\MAME\software\a2600\
D:\emulators\MAME\software\a2600_cass\
D:\emulators\MAME\software\apple2gs\

Now, all you need to add to mame.ini in "rompath" is "software".  You don't need to worry about any of the Software List sub-folders.

#
# CORE SEARCH PATH OPTIONS
#
homepath        .
rompath         roms;software

Assuming you still have both boxes checked ("Don't use quotes..." and "Use File name only..." in the MAME emulator settings, you'll be able to lauch these without problems*.

321267204_MAMEemucheckboxes.thumb.jpg.e5538c9a9735eda1ccef4d6614460a7d.jpg

 

 

- *Associated Platform Command line parameters

Spoiler

 

The command lines that get placed in MAME - Associated Platforms come from hash files. However there are a few that will need to be manually edited. A couple I'm aware of are:

Apple 2GS: needs to be changed from "apple2gs -flop1" to "apple2gs -flop3"
Sony PlayStation: (though doens't work in MAME) needs to be changed from "psx -cdrm" to "psu -cdrm" (See MAME and CDROMS)
SNK NeoGeo CD: For some reason I can only get it work if the command line (neocdz -cdrm) is placed under each games "Emulation" tab in "Use Custom Command-LineParameter".

image.png.dc29fa5ec1852206b6da32f24963f4fe.png  This plugin can help put that in there for you.  If someone knows how to get it to work otherwise, please let me know so I don't have to look like I'm pimping my other plugins. :) 

 

- MAME and CDROMS

Spoiler

 

MAME will run (when supported) CDROMS by simply pointing the application path to the game's folder rom_name.  You do not need to point to the chd file to run it.  (Note: the plugin will have it point to the folder_name.zip, but with the checkbox "Use file name only..." checked, it takes off".zip".

If you wish to import CDROM games into LaunchBox for use with a different emulator, you will need to have the application path point to the games actual file_name.chd.

New Feature: When the plugin sees that the media type is CDROM, you'll be given the option to import the roms for "use with an emulator other than MAME" (Choose "Yes").  If you'll only be using them with MAME, choose "No".

 

 

 


What's New in Version 6.0.2   See changelog

Released

New feature - Filter hash files by Overall and Emulation status
                           (Requires mess2xx.xml file.  See *MESS xml* section)
              
                          Note: Some hash files do not have any Status associated with them.
                          Check the box "Remove No Status" to remove those from the list.

  • Like 9
  • Thanks 7
  • Unusual Gem 3

User Feedback

Recommended Comments



49 minutes ago, l.strain said:

I noticed it's saying zinc!? How do I change from this? 

When you go through the Importer steps, on the 4th page Select Emulator, from the dropdown box, select your MAME emulator.  That selection will then get saved for next time you run the plugin.

 

The error message is from not selecting the correct /hash/ folder.  On the 1st screen (Where are your MAME Software List xml file located?), click Browse and then navigate to your MAME emulators' folder and select the "hash" folder.

 

image.thumb.png.7af0c85d30a7432dfe367ddbfab89407.png

 

Link to comment
Share on other sites

I have it working now, I have merged rom sets and when I load a game it just loads the arcade variant instead of a software one... Any Advice to why that is happening? and do I need to software folder I created since it uses the hash  folder?

Edited by l.strain
Link to comment
Share on other sites

54 minutes ago, l.strain said:

ok I thought you had to create your own software folder!? according to the instructions maybe I just misread it or do I but the shrunking file in hash folder?

Ya, the instructions are kind of long and were originally written about 4 years ago.  In the section * MESS xml * (above), it mentions "This file needs to be located in the same folder as the plugin (..\LaunchBox\Plugins\ImportMameSoftwareLists\)".  But it looks like you maybe renamed your plugin folder to add spaces between the words.  In the end it just needs to be in the same folder as the plugin file (ImportMameSoftwareLists.dll). 

image.png.98b325c35f1b3e16ebabb7e55491f878.png

One thing I did fail to mention is that this file is not required for the plugin to work.  The [extra] file just gives you a little more information about the system you're importing.  But only the Emulation Status in MAME.  All other info comes from the files in the /hash/ folder.

image.thumb.png.5c0f25010cc71a1acf818f5294bc1219.png

 

I hope that helps.  Let me know if you get it working or have any more questions.

Link to comment
Share on other sites

Yeah I had edited the last reply I have it working but my roms are in merged format and when I load the software list games it loads the arcade variant, any advice how to sort that out?

Link to comment
Share on other sites

3 minutes ago, l.strain said:

Yeah I had edited the last reply I have it working but my roms are in merged format and when I load the software list games it loads the arcade variant, any advice how to sort that out?

Which computer/console did you import?

Where did you place your software list ROM folders?

Can you share screenshots of:
   Your MAME emulators Details section and the Associated Platforms section.
   (Edit the game you tried to launch) The Launching section.

Link to comment
Share on other sites

I forgot to quote your last response but have posted the info you asked for once again thanks for the help! 

Edited by l.strain
Link to comment
Share on other sites

25 minutes ago, l.strain said:

I imported the 32x games, I associated mess with the mame emulator 

To clarify, you imported the Software List (soflist) 32x (Sega 32x Cartridges) into the Platform "MESS".  And you put the softlist ROMs into the same folder the Arcade ROMs are in (H:\LaunchBox\Games\MAME\).

There are several issues I see going on here.

  • 32x doesn't have the ROM vr.zip.  That's the Arcade ROM for "Virtua Racing".  32x does have the game "Virtua Racing Deluxe" and the only working ROM for it is vrdxp2.zip. (32x does have 5 other variants that are not working. But none of which are "vr.zip")
  • Placing all the softlist ROMs in the same folder as the Arcade ROMs isn't going to work.  Take for example the game "After Burner".  There's an arcade ROM for that.  There's also an NES, Spectrum, MSX1, FM Towns, CPC and 32x versions of that ROM.  And the filenames are all "aburner.zip".
    • The section Software List folder/file locations: suggests how to store the ROMs.
  • You won't be able to import all the softlists into one Platform ("MESS").  Each softlist requires a different Command-line Parameter.  This unique command-line parameter would show in the Associated Platforms section for the specific platform (which yours doesn't show any).
    • Well, I suppose you could. You'd just need to edit each game and under Emulation, put in the required Custom Command-line Parameter for the system that game uses.
  • Your MAME Default Command-Line Parameter (Details section) is setup for the Apple IIGS Computer.  I'm kind of surprised it even launched Virtua Racing (Arcade).
Link to comment
Share on other sites

5 minutes ago, l.strain said:

Thanks for the help I'll put it on the back burner for now and maybe revisit it at a later date

You're welcome. Always glad to help.

Ya, MAME's software lists can be tricky at first.  The main thing is to keep each console/computer ROMs in their own folder and then import them into their own platform.  For reasons mentioned above.  From there, it's primarily a matter of setting up their respective Command-line Parameters to get them to run.

Link to comment
Share on other sites

Is there no way to bulk import all the platforms within the software list? Seems like this plugin you have to manually do each.

Link to comment
Share on other sites

18 minutes ago, strich said:

Is there no way to bulk import all the platforms within the software list? Seems like this plugin you have to manually do each.

That is correct.  It's an 'import one at a time' thing.  Similar to how LaunchBox innately imports platforms.

To import over 700 platforms (approx. 135,911 games) in one-go would be a bit taxing. ;) 

Link to comment
Share on other sites

40 minutes ago, JoeViking245 said:

That is correct.  It's an 'import one at a time' thing.  Similar to how LaunchBox innately imports platforms.

To import over 700 platforms (approx. 135,911 games) in one-go would be a bit taxing. ;) 

What would be great though is being able to at least import a subset in one go. IE provide a table to map them each to a platform.

Link to comment
Share on other sites

@JoeViking245 no idea if you're still active on this plugin, but maybe you could add a filter for emulation status on this window so its more easy to pick out interesting platforms?

image.thumb.png.59e57f6c8c42fd91ab0b0ae3a9c37318.png

Link to comment
Share on other sites

48 minutes ago, strich said:

add a filter for emulation status on this window so its more easy to pick out interesting platforms

Seems a reasonable request.  Though 'interesting' is subjective. ;) 

It'd take a little doing as the Status information is in a separate file than the individual hash files.  Right now, the status is only gathered when selecting a particular hash file.  But I'm sure I can come up with something.

I will add it to my feature request list.  No promises on when I'll get to it for this 4-years, 4-months, 2-weeks and 5-day old plugin.

Link to comment
Share on other sites

Its a bloody shame Launchbox haven't done this themselves at this point. But your plugin is already great, so thanks for that!

  • Like 1
Link to comment
Share on other sites

8 minutes ago, strich said:

Its a bloody shame Launchbox haven't done this themselves at this point. But your plugin is already great, so thanks for that!

Thank You.

The idea was originally proposed on a Community Poll but was nixed due to lack of interest.

Link to comment
Share on other sites

Unfortunately I'm struggling to import most things with this error when I try the "nes.xml" hash file from the Software List 0.261:

(Inner Exception)

<datafile xmlns=''> was not expected.

App:     LaunchBox
Version: 13.11
Theme:   Default
Type:    System.InvalidOperationException
Site:    System.Object Read7_softwarelist()
Source:  Microsoft.GeneratedCode

   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderSoftwarelist.Read7_softwarelist()


(Outer Exception)

There is an error in XML document (3, 2).

App:     LaunchBox
Version: 13.11
Theme:   Default
Type:    System.InvalidOperationException
Site:    System.Object Deserialize(System.Xml.XmlReader, System.String, System.Xml.Serialization.XmlDeserializationEvents)
Source:  System.Private.Xml

   at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
   at System.Xml.Serialization.XmlSerializer.Deserialize(TextReader textReader)
   at SWL6.ViewModel.SelectHash_VM.RefreshDataGridView(String hash)
   at SWL6.View.SelectHash.AllHashFiles_SelectionChanged(Object sender, SelectionChangedEventArgs e)
   at System.Windows.Controls.SelectionChangedEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
   at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
   at System.Windows.Controls.ListBox.OnSelectionChanged(SelectionChangedEventArgs e)
   at System.Windows.Controls.Primitives.Selector.InvokeSelectionChanged(List`1 unselectedInfos, List`1 selectedInfos)
   at System.Windows.Controls.Primitives.Selector.SelectionChanger.End()
   at System.Windows.Controls.Primitives.Selector.SetSelectedHelper(Object item, FrameworkElement UI, Boolean selected)
   at System.Windows.Controls.Primitives.Selector.NotifyIsSelectedChanged(FrameworkElement container, Boolean selected, RoutedEventArgs e)
   at System.Windows.Controls.Primitives.Selector.OnSelected(Object sender, RoutedEventArgs e)
   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
   at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
   at System.Windows.Controls.ListBoxItem.OnSelected(RoutedEventArgs e)
   at System.Windows.Controls.ListBoxItem.OnIsSelectedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
   at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
   at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
   at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
   at System.Windows.DependencyObject.SetCurrentValueInternal(DependencyProperty dp, Object value)
   at System.Windows.Controls.ListBox.NotifyListItemClicked(ListBoxItem item, MouseButton mouseButton)
   at System.Windows.Controls.ListBoxItem.HandleMouseButtonDown(MouseButton mouseButton)
   at System.Windows.Controls.ListBoxItem.OnMouseLeftButtonDown(MouseButtonEventArgs e)
   at System.Windows.UIElement.OnMouseLeftButtonDownThunk(Object sender, MouseButtonEventArgs e)
   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
   at System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent)
   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
   at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
   at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
   at System.Windows.Input.InputManager.ProcessStagingArea()
   at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
   at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
   at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)

Recent Log:

   11:03:04 PM Exception

 

Link to comment
Share on other sites

55 minutes ago, strich said:

Unfortunately I'm struggling to import most things with this error when I try the "nes.xml" hash file from the Software List 0.261:

The 'not expected' string shown doesn't even exist in the nes.xml hash file.  Are you using the hash files that are included in you MAME installation?

For your hash folder location (1st screen), be sure you're pointing it to the /hash/ subfolder of where you have MAME 0.261 installed? 

When launching the plugin for the 1st time, it will attempt to find the correct folder.  If it doesn't show the correct folder, you need to change it by clicking Browse.  The plugin will (should) remember the last folder you had in there and put 'that' folder in there on subsequent launches. 

 

When exactly does this error appear?  i.e. Opening the plugin?  Clicking 'nes.xml' in the list on the 2nd screen?  Clicking Import on the last screen?

Can you share your log files located in the plugins' (not LaunchBox) "Logs" subfolder.  (No need to copy and paste their contents. just drag the files onto your reply to attach it.) 

  • Like 1
Link to comment
Share on other sites

Yeah I went and downloaded the latest /hash/ and it works fine - I have no idea where these xmls came from. They're in the Software List folder itself. Either way - Not your problem. Thanks mate.

Edited by strich
  • Game On 1
Link to comment
Share on other sites

On 1/27/2024 at 9:33 AM, strich said:

@JoeViking245 no idea if you're still active on this plugin, but maybe you could add a filter for emulation status on this window so its more easy to pick out interesting platforms?

v6.0.2

New feature - Filter hash files by Overall and Emulation status
                           (Requires mess2xx.xml file.  See *MESS xml* section)
              
                          Note: Some hash files do not have any Status associated with them.
                          Check the box "Remove No Status" to remove those from the list.


image.thumb.png.a59cf7c7da1c6f234131b0b0f996b3bd.png

Link to comment
Share on other sites


Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...