andrebrait / 1g1r-romset-generator

A small utility that uses No-Intro DATs to generate 1G1R ROM sets
GNU General Public License v3.0
220 stars 20 forks source link

Does not filter all duplicates by region or revision. #6

Closed Sinistral2099 closed 4 years ago

Sinistral2099 commented 4 years ago

Example commands and output provided.

Command used: python3 generate.py -r USA -l en --no-all -d "Nintendo - Nintendo Entertainment System (20200229-004716).dat"

Output included duplicates such as:

Mega Man 2 (USA) Mega Man 2 (World) (Mega Man Legacy Collection) Mega Man 2 (USA) (Virtual Console) Track & Field II (USA) Track & Field II (USA) (Rev A) Wrath of the Black Manta (USA) Wrath of the Black Manta (USA) (Rev 1) Zelda II - The Adventure of Link (USA) Zelda II - The Adventure of Link (USA) (Collector's Edition) Zelda II - The Adventure of Link (USA) (Virtual Console)

This uses the latest No-Intro DAT file for the NES.

When using the --all-regions-with-lang option, it seems to compound the issue.

Command used: python3 generate.py -r USA -l en --no-all --all-regions-with-lang -d "Nintendo - Nintendo Entertainment System (20200229-004716).dat"

Output included duplicates such as:

Zelda II - The Adventure of Link (Europe) Zelda II - The Adventure of Link (Europe) (Rev 1) Zelda II - The Adventure of Link (Europe) (Rev 2) Zelda II - The Adventure of Link (USA) Zelda II - The Adventure of Link (USA) (Collector's Edition) Zelda II - The Adventure of Link (Europe) (Rev 2) (Virtual Console) Zelda II - The Adventure of Link (USA) (Virtual Console)

Sinistral2099 commented 4 years ago

I suspect it is because USA releases often times do not include the (En) language flag in their filenames.

andrebrait commented 4 years ago

@shirizaan Going from the name of the DAT file you used, it seems to be a Standard DAT, not a Parent/Clone XML DAT. While the structure of both is similar, only the Parent/Clone XML contains the data needed for generating a proper 1G1R set.

Download the DAT for the system you want from this page. Select the system on the dropdown list.

Sinistral2099 commented 4 years ago

Sorry, I misunderstood. I thought that this was a script to generate 1g1r romsets from normal dat files as an alterate means to the parent/clone dat process. Even using the parent/clone dat file it gives only Zelda II - The Adventure of Link (USA) instead of the latest version of the ROM which would be Zelda II - The Adventure of Link (USA) (Virtual Console).

I guess my question is this, and please understand that I mean no offense, I am simply trying to understand: If your script yield identical results to ClrMAMEPro's 1g1r mode and does not attempt to fix logic issues such as giving earlier versions of ROMs when newer versions are available, why would would I not just continue to use ClrMAMEPro?

Thanks in advance for your help and clarification.

andrebrait commented 4 years ago

No offense taken, though it seems you don't know the full picture of it all. This script was born out of the frustration with how ClrMamePro works, in general. I think I wrote somewhere the precise issues with it. I'm going to check, but I can list the full (and somewhat lengthy) list of shortcomings regarding ClrMamePro and why I created this script in the first place.

Regarding the usage of Parent/Clone XMLs, it's a necessity. It's impossible to know which games are clones of which others without a curated list. The way this script and ClrMamePro use the Parent/Clone XMLs, though, is quite different.

However, more importantly, what you described might not be actually an issue. While it's true that the Virtual Console version is "newer" (in terms of date of release), it's not counted as a revision to the game's code itself. In fact, many times, Virtual Console releases should be avoided, since there are changes that can break in some emulators, or depart from the originals in some not-cool ways (or at least I would think, as a bit of a purist).

However, I can add a feature if you want to actually prefer Virtual Console ROMs (for example) over the retail versions from back then.

Sinistral2099 commented 4 years ago

It'd be nice if that was a feature in the future. Thank you for the clarification though!

andrebrait commented 4 years ago

Expanding on what I wrote here, ClrMamePro will, for example:

  1. Elect a Prototype/Beta/Sample/Demo ROM as the best candidate for a game, even when several Retail versions are available in the DAT (e.g.: it picks Mario Kart DS (USA) (Demo) (Kiosk) as the best candidate for Mario Kart DS, for example, see here for an example).
  2. Skip the game if you don't have the best game it selected. It can't select the next best candidate if you happen to be missing the best candidate (e.g.: if you don't have that prototype of Mario Kart DS lying around, it will completely skip the game, see here and here for examples).
  3. Not use the version/revision data in any way. For ClrMamePro, Rev 1 and Rev 2 are the same thing.

On top of that, it is:

  1. Unable to detect region data (i.e. the region names in the file names) if that's also not supplied in the DAT directly
  2. Unable to detect language data is that's also not supplied in the DAT directly.

Example:

    <game name="Mario Party DS (Europe) (En,Fr,De,Es,It) (Rev 1)">
        <description>Mario Party DS (Europe) (En,Fr,De,Es,It) (Rev 1)</description>
        <release name="Mario Party DS (Europe) (En,Fr,De,Es,It) (Rev 1)" region="EUR"/>
        <rom name="Mario Party DS (Europe) (En,Fr,De,Es,It) (Rev 1).nds" size="33554432" crc="9e821492" md5="7a74db93d54e54d874055fee09f64885" sha1="1ee9f843a14b4a92527f97e76b260fc908843c80" status="verified"/>
    </game>

Since the language property of the release is not set, ClrMamePro cannot detect any languages in this ROM.

andrebrait commented 4 years ago

I'm adding this as the --prefer parameter. Will be released soon.

Sinistral2099 commented 4 years ago

Thank you for the explanation and for the future update.

andrebrait commented 4 years ago

@shirizaan It's done. If you grab version 1.5.0, you can use --prefer "Virtual Console" to prefer Virtual Console ROMs :wink:

Sinistral2099 commented 4 years ago

Perfect!