Skip to content

rarenight/No-Intro-Switch-Cart-Submission-Tool

Repository files navigation

New User Submission Tutorial

So, you want to submit a Switch cart to No-Intro? I developed a quick and easy Python script which standardizes forum submissions into easily-imported XML files. It can also create a Full XCI via drag and drop and convert a Full XCI back to its Default XCI + Initial Area components.

First, dump your cart using the latest version of nxdumptool-rewrite onto your SD card or to your PC via USB using the default dump settings. You can dump a Switch cart straight to your PC via USB by joining the nxdumptool Discord server and following this tutorial by Whovian9639.

The default dump settings are as follows:

  • prepend key area: no
  • keep certificate: no
  • trim dump: no
  • calculate checksum: yes

Within nxdumptool select the following options which will dump each file to your SD card or ideally to your PC directly via USB:

  • dump gamecard image (xci)
  • dump gamecard initial data
  • dump gamecard id set

You can dump the Certificate and Card UID as well, but that is not needed for a No-Intro submission because those files contain all of the personalized metadata unique to your cart, and No-Intro only catalogues reproducible metadata. Dumping the Header / Cardinfo / HFS partitions / etc are also not necessary here, although feel free to do so if you want.

Move your dumped game files to your PC and concatenate the XCIs if dumped via SD card (you can concatenate by running copy /b 00+01+02 "original filename".xci in Command Prompt or use NxDumpFuse and rename the extension to .xci). This step is not necessary if you dump your Switch cart via USB, which I highly recommend. Ultimately though you should have three files that look something like this:

  • Fast & Furious Spy Racers - Rise of SH1FT3R 1.0.2 [010034C013624000][v0] (Card ID Set) (6CD8FDA1).bin
  • Fast & Furious Spy Racers - Rise of SH1FT3R 1.0.2 [010034C013624000][v0] (Initial Data) (57A3A06C).bin
  • Fast & Furious Spy Racers - Rise of SH1FT3R 1.0.2 [010034C013624000][v0] [NKA][NC][NT].xci

Once you do, you're ready to begin using my tool.

You can download the script in the releases section. It includes a pre-built version of the hactoolnet repo and all dependencies you'll need to run the Python script, including Linux versions. Unrar is provided for Windows but if using Linux, choose the corresponding version from their website that fits your distro. Note to run the automatic import function, you'll need .NET installed and you need to place up-to-date prod.keys in the same directory as the script.

You'll also need Python with the PyQt6 dependency installed (pip install pyqt6 and pip install rarfile or just install the requirements.txt). Your directory should look like this before running the script for the first time:

image

To get started, open my script with Python, click "Automatically Import Metadata", and drag and drop the XCI file into the window that pops up.

image

Both Default XCIs and Full XCIs are now supported for automatic import. When dragged and dropped, the window will close and the values should auto-populate into the textboxes.

If you can't get the automatic import function working, simply open the game (Default XCIs only for manual importing) in NX Game Info GUI instead and click File -> Export as a CSV file:

image

Then click "Manually Import Metadata" and drag and drop the CSV file to the top of the window. The values will auto-populate:

image

Or run nxgameinfo_cli.exe on the file:

image

And copy and paste the values into the window:

image

Either way, when you import the metadata either automatically or manually, the Game Name, Languages, GameID1, along with Version and Update in the File Info tab should all be auto-populated. When imported the window should look like this:

image

If for whatever reason the metadata import messes up, you can always manually type or adjust the values. You can ignore the "Scene Release" checkbox if you're submitting a personal dump.

Select the applicable cart region from the dropdown. You can find the region info on the last three digits of the serial that's on the front of your cart, which would be -USA in this case:

image

(Note: All Nintendo-published carts are considered to be "World" and are the sole exception to the region rule)

Then click the Dump Info tab, fill out the Dumper and Tool fields (there's a dropdown as well with common dump tool names), and click "Set Default Dumper and Tool" if you want those values to remain constant. Then click "Generate Card ID Values". Drag and drop the (Card ID Set) binary file that nxdumptool outputs into the window and the Card ID values should (hopefully) populate like this:

image

A custom dump date can be specified if your cart wasn't dumped the same day.

Then click the Media Info tab and fill out all the values manually. A dropdown menu allows you to select a downwards triangle for your convenience.

image

You can select "Loose Cart" if you don't have an original box for your cart.

Click the File Info tab and then "Calculate Hashes".

Drag and drop the Initial Area (aka Initial Data) BIN file, then the Default XCI file into the window and their hashes will auto-populate. My program automatically generates the Full XCI hashes without having to create the file separately. Please note this takes a while for large files and the program appears to freeze while it's hashing, please be patient. When done all textboxes will be filled out like this and the Generate Submission button will become enabled:

image

If you only have a default XCI, you can uncheck the "Include Initial Area" checkbox and it'll disable the Initial Area and Full XCI requirements. Also on the File Info tab is the option to generate a Full XCI file if you'd like a local copy for your collection, as well as the option to truncate a Full XCI back to its original Default XCI and Initial Area components.

When all fields are populated as shown in the above image, click "Generate Submission" and an XML file will be generated in your chosen directory.

This program generates an XML submission file that looks like this:

image

This XML submission file can then be easily imported into No-Intro's backend in a standardized and uniform format:

image

image

You can apply for a No-Intro forum account and then submit dumps here.

When creating a Switch cart submission to No-Intro, please upload the following:

  • The XML submission file that my tool outputs
  • The Initial Data file, uploaded either as a file or encoded into Base64 using Cryptii
  • Any images you wish to submit as well

Versions

v2.7 - 2024-08-24

  • (v2.7) Fixed a few regressions introduced in v2.6
  • (v2.6) (1) Provided a single script once more by conditionally running offending PyQt calls under Windows (until someone else comes up with a proper fix), (2) Improved hactoolnet stdout parsing by using a single regex to find all matches on the unsplit stdout string, as well as adding extra logic to check if an update is available for each parsed base title (instead of relying on variables that may get overwritten by subsequent loop iterations), (3) Used the media stamp value as the gamecard revision by parsing it as a hex integer whenever possible, (4) Improved title name formatting by preserving word capitalization if a word is fully capitalized and/or if it's actually an alphanumeric string (e.g. Legend of Zelda - Skyward Sword Hd The -> Legend of Zelda - Skyward Sword HD The), (5) Implemented better handling of articles at the start of a title name (e.g. Legend of Zelda - Skyward Sword HD The, -> Legend of Zelda, The - Skyward Sword HD), (6) Switched from CRLF to LF line endings and removed trailing whitespaces.
  • (v2.5) (1) Replaced NX Game Info with a native hactoolnet implementation for deriving embedded metadata, (2) Added auto-import support for multi-title XCIs and full XCIs, (3) Upgraded to PyQt6 with dark mode support, (4) Fixed UTF-8 Japanese character bug, (5) Added scene RAR auto-extraction
  • (v2.2) (1) Further performance optimizations to minimize out-of-memory crashes, (2) Reintroduced manual import option for users who can't get the EXE dependency to work
  • (v2.1) (1) Fixed Exclude Initial Area bug, (2) Fixed a few regressions from v2.0
  • (v2.0) (1) Added scene cart mode, (2) Now processes files in 4 MB chunks to minimize crashing on low-end machines, (3) Added processing percentage in terminal
  • (v1.8) (1) Embedded nxgameinfo_cli as a dependency, (2) Added a "Truncate FullXCI File" button that reverts a Full XCI back to a Default XCI and an Initial Area, (3) Added additional failsafes to prevent Default XCIs / Full XCIs from being mistakenly processed
  • (v1.7) (1) Added a dropdown for regions, (2) Fixed GameID2 four-digit bug, (3) Add revision auto-fill, (4) Added loose cart toggle
  • (v1.6) (1) Fixed NX Info import glitch where CLI importing wouldn't detect v0, (2) Added directory selection support for Mac + Linux
  • (v1.5) (1) Added the ability to auto-generate Full XCI hashes, (2) Added a button that saves your preferred default dumper and tool values
  • (v1.4) (1) Added a dropdown for the tool menu, (2) Fixed regression from v1.3
  • (v1.3) (1) Fixed NX Game Info title and version importing, (2) Now supports CSV imports from NX Game Info (File -> Export -> CSV), (3) Now imports the entire title line, (4) Now chooses the base Title ID as Game ID instead of the latest one, (5) Now removes any punctuation not compliant with No-Intro and changes colons into dashes, (6) Now excludes any parentheses present in the update column
  • (v1.0) Initial Release

About

Generates DOM-compliant XML files for easy Switch cart submissions to No-Intro

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  

Languages