Filters.xml

The Filters.xml has the meat of MultiMAME configuration. This is where you define what you want games you want MultiMAME to be able to play and which emulator it should use.

The order of the Filters.xml is very important. This is because you can both add and remove games to the list. You could have the first one add all the games that an emulator has, then remove all the games that contain both "street" and "fighter" then make sure that all games with with games with 6 buttons use a different configuration directory. But the last statement will actually ADD all 6 button games BACK into the list (including the street fighter games). So remember, you are adding games or removing games, not changing whats already been added.

This is the default Filters.xml

<?xml version="1.0"?>
<Filters xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <List>
    <Filter>
      <Name>All</Name>
      <Emulator>MAME</Emulator>
      <Hide>false</Hide>
      <Conditions>
        <Condition>
          <Operator>ALL</Operator>
          <And>false</And>
        </Condition>
      </Conditions>
      <Arguments />
    </Filter>
    <Filter>
      <Name>Fighters</Name>
      <Emulator>MAME</Emulator>
      <Hide>false</Hide>
      <Conditions>
        <Condition>
          <Property>input.buttons</Property>
          <Value>6</Value>
          <Operator>EQUALS</Operator>
          <And>false</And>
        </Condition>
        <Condition>
          <Property>input.control.type</Property>
          <Value>joy8way</Value>
          <Operator>EQUALS</Operator>
          <And>true</And>
        </Condition>
      </Conditions>
      <Arguments>-cfg_directory cfgfighters</Arguments>
    </Filter>
    <Filter>
      <Name>ZINC</Name>
      <Emulator>ZINC</Emulator>
      <Hide>false</Hide>
      <Conditions>
        <Condition>
          <Operator>ALL</Operator>
          <And>false</And>
        </Condition>
      </Conditions>
    </Filter>
  </List>
</Filters>

This will first add all the games in MAME, Next, it will make sure that all games with 6 buttons and an 8way joystick use the new arguments "-cfg_directory cfgfighters". This makes it so all 6 button games can be configured one time to have button 1-3 on top and 4-6 on the bottom. Next it will add all the Zinc games. Now all games in Zinc are also in MAME. Since it was added AFTER MAME games, it will replace the MAME version of the game and only run the Zinc version.

So after this, if you run
MultiMAME sf2<enter> - it will play street fighter two with special config directory
MultiMAME zookeep - it will run zoo keeper with default settings
MultiMAME sfex2 - it will run Street Fighter EX 2 from Zinc.

Now lets go over all the options

<Name> - Name of the filter. Not really used… But for debugging.

<Emulator> - The name of the emulator to use (from the Emulators.xml file)

<Hide> - True to remove the games that meet the conditions, False to Add games that meet the conditions.

<Conditions> - All the conditions if a game should be added or removed

<Property> - The name of the property (you can get a full list of possible properties by running "MultiMAME -listproperties". Basically I add a '.' between each -listxml element name. These can also be defined in the .ini files.

<Value> - The value that we are interested in for the property to be.
<Operator> - How we compare the games property with the <Value>. Here is the complete list of all valid Operators - EQUALS, NOTEQUALS, STARTSWITH, ENDSWITH, CONTAINS, CONTAINSWITHIN, LESSTHEN, GREATERTHEN, LESSTHENEQUALS, GREATERTHENEQUALS, INLIST, EMPTY, NOTEMPTY, ALL.

INLIST will allow you to add a comma delimeted list in the <Value> of game names (rom names) you want added or removed. This allows you to configure some items by hand.

CONTAINS is if the <Value> is in the games properties (like value of "sony" for property manufacturer will get sony/capcom, sony/tecmo, sony/atlus and if there was a fred/sony/john)

CONTAINSWITHIN is used if you want to add a bunch of potential valid conditions in one list. If its in there anywhere, its valid. For instance, a value of "lightgunmousedial" and a property of "input.control.type" will get all lightgun games, mouse games and dial games. NOTE: a value of "vjoy2wayvdoublejoy2way" will also get joy2way since the string is contained in the string.

EMPTY and NOTEMPTY are used to determine if a propty has any value (but you don't care what it is). This is really useful for any property set from a catver.ini file since they set the property name to the category and add "true" to the value.

So, to remove all mature games, just add this filter. (I add a ton of Conditions to remove myself, mature (kids), table.mahjong (cant play), quiz.japanese (cant read) ect all in one filter)

<Filter>
  <Name>REMOVE</Name>
  <Emulator>MAME</Emulator>
  <Hide>true</Hide>
  <Conditions>
    <Condition>
      <Property>mature</Property>
      <Value></Value>
      <Operator>NOTEMPTY</Operator>
      <And>false</And>
    </Condition>
  </Conditions>
<Filter>

All the others seem pretty self explanitory. NOTE: only use less/equals with properties you expect to have numbers in. Otherwise it will be ignored (and probably wont give you the results your expecting).

<And> - This is if we should be 'And'ing or 'Or'ing the conditions together. There is no special parser here, they go in order and this compares all the conditions up to this condition and this one (nothing afterwards). As soon as we find a false, we stop looking.

<Arguments> - This is additional arguments to be added to the command line when we launch a game specific for this filter. This will be combined with the arguments in the Emulator.xml. The filters will always be added AFTER the arguments in the Emulator.xml. I don't think this will ever be an issue.
IE - Emulator arguments for mame has {name} and the Filter which added a game has -nosound then we will launch "MAME.exe sf2 -nosound"

if you want to add ALL games for an emulator, add this

<Conditions>
  <Condition>
    <Operator>ALL</Operator>
    <And>false</And>
  </Condition>
</Conditions>
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License