Skip to content

v2.02.0

Choose a tag to compare

@unexpectedpanda unexpectedpanda released this 10 Feb 09:14
· 75 commits to main since this release
  • Breaking change: The clone list format has changed. Update to 2.02.0 to avoid issues.

  • Feature: You can now output a DAT using the local name of a title in unicode, if it's available in the metadata scraped from Redump and No-Intro, or included in a clone list. For example, instead of Shining Force II - Inishie no Fuuin (Japan), you can output シャイニング●フォースII 『古の封印』 (Japan). Tags like (Japan) and (Disc 1) remain in English.

    Open the Local names tab to choose which languages to enable local names for, and to set language priorities for titles with multiple local names.

    This is very much a work in progress. Both No-Intro and Redump aren't consistent about recording local names, so there are plenty missing. Retool community contributions are needed to fill the gaps. Find something you think should have a local name? Create an issue or pull request, provide the correct name, and post a screenshot of the title screen or box image for validation.

  • Feature: You can now add filters to a title entry in clone lists. Think of the filters parameter as an easy way to isolate specific titles in a search result, and apply changes to them based on conditions.

    For example:

    {
        "group": "Bomberman GB 2",
        "titles": [
            {
                "searchTerm": "Bomberman GB 2",
                "filters": [
                    {
                        "conditions": {"matchRegions": ["Japan"]},
                        "results": {"group": "Bomberman GB"}
                    }
                ]
            }
        ]
    }

    In the previous example the searchTerm of Bomberman GB2 finds all titles with the short name Bomberman GB2, and gathers them in the Bomberman GB2 group. If the region of a title happens to include Japan, then that title is moved to the group Bomberman GB instead.

    Conditions include:

    • matchRegions: array[string]. Regions a title must have for the condition to be true.

    • matchLanguages: array[string]. Languages a title must have for the condition to be true.

    • matchString: regex string. A regex string that must find a match in a title's full name for the condition to be true.

    • regionOrder: object[string, array[string]]. The user region order that must be fulfilled for the condition to be true.

    All conditions in a filter must be true for the result to be executed.

    Results include:

    • categories: array[string]. A list of categories to assign to the title.

    • englishFriendly: bool: Whether a title is English friendly.

    • group: string. The group to assign the title to.

    • localNames: object[string, string]: Local names to assign to the title.

    • priority: integer. The clone list priority to assign to the title.

    • superset: bool. Elevate the title to a superset.

  • Feature: You can now mark titles as "English friendly" in clone lists. For example, the Japanese version of Enduro Racer on the Sega Master System has twice as many levels as the USA version. Of what little text there is, it's in English, but the No-Intro database lists its language as Japanese. To make sure the Japanese version is selected even when USA is higher in the region order, we can construct a clone list entry as follows:

    {
        "group": "Enduro Racer",
        "titles": [
            {
                "searchTerm": "Enduro Racer",
                "filters": [
                    {
                        "conditions": {
                            "matchRegions": ["Japan"]
                        },
                        "results": {
                            "englishFriendly": true,
                            "superset": true
                        }
                    }
                ]
            }
        ]
    }

    You don't always need a filter to apply the englishFriendly tag — it's available at the searchTerm level as well.

  • Change: To better support regional language variants, the following languages have been split:

    • Chinese is now available as Chinese (Simplified) and Chinese (Traditional). They detect Zh-Hans and Zh-Hant respectively, but also the generic Chinese code of Zh. When faced with just Zh, Retool attempts to infer which written language is used based on region. This won't be perfect — if a mismatch is found in No-Intro, get them to use the more accurate language code. If a mismatch is found in Redump, all you can do is request that they adopt the more accurate language codes in the first place.

    • Portuguese is now available as Portuguese and Portuguese (Brazilian). Brazilian titles with no language set are now set to Pt-BR instead of Pt.

    • Spanish is now available as Spanish, Spanish (Latin American), and Spanish (Mexican). Mexican titles with no language set are now set to Es-MX instead of Es. Latin American titles with no languages set are now set to Es-XL.

    • French is now available as French and French (Canadian).

  • Change: The Asia region no longer has an implied language of English. At the time this was implemented, the majority of Asia titles supported English, but those days are definitely gone and there's no way to tell language support for a title programmatically. If you find an Asia title with no languages listed, get No-Intro or Redump to fix it.

  • Change: There's now a check if a DAT file starts a filename with .. In these circumstances, it's replaced with the fixed-width version, .

  • Change: Clone lists have been refactored for greater flexibility and to make contributing easier.

    • Group names in clone lists are now used verbatim, instead of being converted to a sanitized equivalent. This means you can include parentheses and version-like strings such as "v2" and they won't get stripped, reducing potential confusion for contributors.

    • The overrides array is no longer supported in clone lists. Instead, use the filters parameter in the same object as a searchTerm in the variants array.

      For example, take the King's Field problem.

      Japanese title Equivalent USA title
      King's Field None
      King's Field II King's Field
      King's Field III King's Field II

      How do we deal with King's Field (Japan) not getting mixed up with King's Field (USA), or King's Field II (Japan) getting mixed up with King's Field II (USA)?

      This is how you'd do it with old school overrides:

      "overrides": [
          {
      	"searchTerm": "King's Field II (Japan)",
      	"newGroup": "King's Field"
          },
          {
              "searchTerm": "King's Field (Japan)",
              "newGroup": "King's Field Japan"
          }
      ]

      Now it's all done with filters in the variants array:

      "variants": [
          {
              "group": "King's Field",
              "titles": [
                  {
                      "searchTerm": "King's Field",
                      "filters": [
                          {
                              "conditions": {"matchRegions": ["Japan"]},
                              "results": {"group": "King's Field (Japan)"}
                          }
                      ]
                  }
              ]
          },
          {
              "group": "King's Field II",
              "titles": [
                  {
                      "searchTerm": "King's Field II",
                      "filters": [
                          {
                              "conditions": {"matchRegions": ["Japan"]},
                              "results": {"group": "King's Field"}
                          }
                      ]
                  }
              ]
          }
      ]

      In the previous example:

      • The group King's Field collects all titles that match the short name King's Field. When Retool finds a King's Field title with a region of Japan, it's moved to the group King's Field (Japan).

      • The group King's Field II collects all titles that match the short name King's Field II. When Retool finds a King's Field II title with a region of Japan, it's moved to the group King's Field.

      It's ultimately more code, but it allows greater flexibility when combined with the rest of the filters options, not to mention everything now lives in the variants array so you don't have to look in two places. Additionally, Retool should be a bit more performant as a result of this change.

    • The categories array is no longer supported in clone lists. Instead, add a categories key in the same object as a searchTerm in the variants array:

      {"searchTerm": "Cite des Enfants Perdus, La", "categories": ["Games", "Demos"]}

      You can also set categories at the top level to apply categories to every title in the group (unless categories have been set at the individual title or filters level). In the following example, everything in the titles array now has the categories of Games and Demos:

      {
          "group": "City of Lost Children, The",
          "categories": ["Games", "Demos"],
          "titles": [
              {"searchTerm": "Cite des Enfants Perdus, La"},
              {"searchTerm": "City of Lost Children, The"},
              {"searchTerm": "Ciudad de los Ninos Perdidos, La"},
              {"searchTerm": "Lost Children - The City of Lost Children"},
              {"searchTerm": "Stadt der verlorenen Kinder, Die"}
          ]
      }
    • The removes array is no longer supported in clone lists. Instead, set a property of "ignore": true in the same object as a searchTerm in the variants array:

      {"searchTerm": "Cite des Enfants Perdus, La", "ignore": true}

      You can also set an ignore at the top level to ignore every title in the group. In the following example, everything in the titles array is now ignored by Retool:

      {
          "group": "City of Lost Children, The",
          "ignore": true,
          "titles": [
              {"searchTerm": "Cite des Enfants Perdus, La"},
              {"searchTerm": "City of Lost Children, The"},
              {"searchTerm": "Ciudad de los Ninos Perdidos, La"},
              {"searchTerm": "Lost Children - The City of Lost Children"},
              {"searchTerm": "Stadt der verlorenen Kinder, Die"}
          ]
      }

      As with the removes array, an ignore completely removes a title from Retool's consideration. You should only use ignore if you can't achieve what you want using other clone list methods.

    • The tagFree name type is no longer supported in clone lists. Clone list capability has been improved enough that it's no longer required.

  • Change: DAT filename tags have been externalized into internal-config.json so the Retool application doesn't have to be updated when No-Intro makes a change.

  • Change: Closing the main Retool GUI now force closes the title tool if it's open, so the app quits as expected.

  • Change: Shifted some search terms from regex to strings for a small speed boost.

  • Fix: Depending on region settings, sometimes a superset could be assigned as both a parent and clone. Retool used to remove clone relationships in this instance to resolve conflicts, but this resulted in unwanted supersets being in the output DAT. It now assigns titles with the superset as a parent to the superset's parent instead.

  • Fix: Windows: Fixed checkboxes flickering on hover on 4k monitors.

  • Fix: Ubuntu: link colors are now more readable in dark mode, and title tool fields are no longer white text on a white background.