Skip to content

Xenoblade 3 BDAT editing

Rocco edited this page Feb 19, 2024 · 5 revisions

This is a guide covering how to manually edit BDAT files using the toolset derived from this crate.

Prerequisites

  • A Xenoblade 3 BDAT dump (doesn't need to be full)
  • A Nintendo Switch running Atmosphère; alternatively, Yuzu and Ryujinx also work.
  • A Unicode-friendly text editor (e.g. Notepad++ on Windows)

Downloading the latest release

Getting the latest release of the toolset is strongly recommended. You can find it here.

Extract the zip archive and move the executable to your preferred location. This is a command-line tool, so you should also open a terminal application to execute it.

Note: To update the toolset, replacing the executable will be enough most of the time. If you encounter any issues converting back to BDAT, try extracting the files again with the new version.

Extracting BDAT files

Note: In this guide, the command syntax assumes you're running the Linux executable (./bdat-toolset). For Windows, replace that with bdat-toolset.exe, and replace forward-slashes ("/") with backslashes ("\") in file paths.

Suppose your BDAT dump is found at the location path/to/bdats, then to convert the BDAT files to JSON you can use:

./bdat-toolset extract path/to/bdats -o path/to/json -f json --pretty

You will find the converted JSON files in path/to/json, which will be created if it doesn't exist.
That folder's structure mimics how files were stored in the original dump, and each leaf folder has one JSON file per table.

You can then change those JSON files as you please.

Optional (Recommended) - Using a hashed names list

When extracting BDATs, you might realise that most (if not all) names don't make much sense. This is because in Xenoblade 3, table and column names are hashed.
This tool allows you to pass a list of names that can be used to convert the names back to what they were. Simply create a text file with each name on a separate line, and pass it to the other commands as --hashes path/to/hashes.txt.

For a good list of names, you can copy column B of this spreadsheet.

Converting back to BDAT

Once you're satisfied with your JSON edits, you can convert the files back to BDAT:

./bdat-toolset pack path/to/json -f json -o path/to/new_bdats

If you're using a hash list, you don't need to add any extra arguments here.

You will find the new BDAT files in path/to/new_bdats, ready to be exported.

Replacing the files

Recommended method - File replacement mod

By using the file replacement mod (follow the instructions on the page), you can place files in the RomFS directory for the base game.

  • On console, this is <sdcard>/atmosphere/contents/010074f013262000/romfs.
  • For emulators, it's generally similar, but some (e.g. Yuzu) require you to create a folder for each mod.

Old method - DLC1 only

Note: this method requires you to have DLC1 and only DLC1 loaded. Generally, it is recommended to use the file replacement mod, as explained above.

To replace the files, you will need to create a RomFS folder for the DLC1 title. The process varies between emulators/console, but generally it's something in the form of contents/<TITLE ID>/romfs or similar.

The Title ID in this case is 010074F013263001. This is DLC1's title ID, which is why you need DLC1 in order to load the new files.
The reason this doesn't work with newer DLCs is that those already have an updated copy of most BDATs (technically some language edits would still work) in their archive, which takes priority.