Xenoblade Easy Extract / Pack BDAT + Translation Tool

Hello!

After months of thinking how to finally get down to the Xenoblade 2 project (which was my goal since the game release), where a significant problem was always the correct repackaging of BDAT files, I’m excited to share two tools designed to simplify modding and especially translation efforts for Xenoblade 2.
- Xenoblade BDAT Batch Extract Pack GUI
- Xenoblade BDAT Translation Tool

You'll need Python 3.9+
More info how to use (if you don't know how to use python scripts) in the wiki on github.
I will add compiled exe versions in the near future.

Both, BDAT batch extractor/packer and Translation Tool should be compatible with all Xenoblade games.

Updates:



Update 16.01.26

Translation:
- Added copy/paste support
- Numerous stability fixes for every Xenoblade release on Nintendo Switch
- Added support for Nier Automata files
- Added support for light/dark theme

BDAT repack:
- Added support for automatically packing Xenoblade 3 files and moving them to the appropriate folders required by the game engine (you must select the option to pack Xenoblade 3).

Update 29.03.25
- Translation tool compatible with all Nintendo Switch Xenoblade games.
- New UI (Translation tool)
- The BDAT batch extractor now remembers last used paths

Update 14.03.25
- Character counter for each new line separated by \n
- Lines exceeding the allowed character limit are colored in red

Update 14.02.25
- BDAT pack/unpack now supports single file extracting and packing too
- Translation app got a massive update with many QOL options. Now you can display original Japanese lines alongside the translation.

The Problem with BDAT Files
For years, working with Xenoblade 2’s BDAT files—binary tables containing game text, stats, and mechanics—was a convoluted process. Manual extraction, repacking, and editing required multiple tools and technical expertise, which stalled previous projects delocalization efforts. This complexity left many modders frustrated and projects unfinished .

The Solution
Thanks to RoccoDev, which provides a robust foundation for parsing BDAT files. For unknown reasons almost no one knows about this project and I found it myself by the accident when I was searching the internet again trying to find some tips on how to properly pack tables into BDAT files (I had a working decryptor/extractor that I had been writing for a long time) I found this rather inconspicuous looking project.

I’ve streamlined the workflow with two user-friendly tools (second one is supposed to be used with files extracted by first one):

1. Xenoblade 2 BDAT Batch Extract/Unpack GUI
- What it does: Automates batch extraction and unpacking of BDAT files from Xenoblade 2’s archives.
- How to use:
1. Select folder with bdat files.
2. Select an output folder.
3. Click “Extract” to generate editable `.json` files.

Packing back to bdats works in reverse - select folder with unpacked bdats, select output folder, click on pack. Done.

XenobladeBatchBdat.png


2. Xenoblade 2 BDAT Translation Tool
- What it does: Simplifies editing extracted BDAT files.
- Features:
- Visual interface for text editing.
- Tree-view.
- File filter option
- Color-marking directories
- Validation to prevent formatting errors.
- How to use:
1. Open extracted BDAT files.
2. Edit text or values directly.
3. Repack into game-ready formats.

XenobladeTlTool.png



---

Future Plans: Delocalization Revival
After my recent Star Ocean: The Second Story R Translation Mod, I’m reviving the Xenoblade 2 delocalization project. This will involve restoring many things lost by localizers, correcting terminology, and aligning the script closer to the original Japanese. The project will be a continuation of several other projects, including this one which has been the basis of all others by archerboy. My project will make many more changes than just the names of the characters. I'm planning to finally do a NewGame+ after many years. I played the original entirely in Japanese, so I will try to improve as much as possible by playing from the beginning. A dedicated thread will follow soon!
 

Attachments

Last edited by rsc-pl,
Sir, you're a hero! As a fellow game translator, I congratulate you for all your effort and generosity for sharing such nice tools! For us, who can't code but can translate dialogues, this means the WORLD!
 
  • Like
Reactions: zelman and rsc-pl
Hi! Does something similar exist for the original Xenoblade Chronicles (Wii)? I tried modifying some files, but I actually can't even open the BDATs, as I don't really know what I'm doing...
 
Last edited by NeedSomeHelp,
Hi! Does something similar exist for the original Xenoblade Chronicles (Wii)? I tried modifying some files, but I actually can't even open the BDATs, as I don't really know what I'm doing...
The app that my GUI is built upon is compatible with all Xenoblade bdats, at least according to the creator of the app.

_______

Update 14.03.25
- Character counter for each new line separated by \n
- Lines exceeding the allowed character limit are colored in red
 
The app that my GUI is built upon is compatible with all Xenoblade bdats, at least according to the creator of the app.

_______

Update 14.03.25
- Character counter for each new line separated by \n
- Lines exceeding the allowed character limit are colored in red
It work for Xeno X DE?
 
i'm convert but got nothing, hope u update soon
Post automatically merged:

Btw i got json file from bdat, translate to my language and convert json to bdat again , put in
%appdata%/Ryujinx/mods/contents/{title_id}/romfs/bdat/us/common_ms.bdat but translate don’t work, anyone else can help me pls
 
Last edited by Linh_Tran,
i'm convert but got nothing, hope u update soon
Post automatically merged:

Btw i got json file from bdat, translate to my language and convert json to bdat again , put in
%appdata%/Ryujinx/mods/contents/{title_id}/romfs/bdat/us/common_ms.bdat but translate don’t work, anyone else can help me pls
So it works fine? I tested it on Xenoblade 3 bdats and it packed and unpacked those bdats as well.

And the fact that the mod does not work is probably due to the fact that the game does not have an update that loads external files. There are solutions for this (for xenoblade 3, for example, there is a special mod to load external files).
It is unlikely to be a problem of the packed files themselves, otherwise the game would crash when loading, or have missing elements in the UI.
 
  • Like
Reactions: Linh_Tran
Might work, but it's hard to say without an in-game 'success' story... the tool exports a bdat... though in the case of the edit I made to the XCXDE's common_ms it exported as 2mb smaller than the source bdat before running the json conversion. In-engine, I made a single conversation edit with a simple change to dialogue and the change doesn't register... tools probably need to be tested and further developed to encompass whatever changes have been made to the format for XCXDE, and an external loader like you mentioned will probably need to be implemented or revised to work with the new game. I've had some luck with the romfs replacement telling me it's replacing files, and on the exefs side - as a random test dropped in the XC3 files for the file loader. It, of course, hung the process and got stuck trying to load... but I wasn't expecting it to work, just wanted to see how XCXDE would react (different sdk file with a 4-5 mb difference.) and a newer npdm file.

(Realistically, this is just my speculation... not sure how complicated the changed data structure for XCXDE makes things, but I doubt it's a simple process.)
 
Last edited by Tolin,
Might work, but it's hard to say without an in-game 'success' story... the tool exports a bdat... though in the case of the edit I made to the XCXDE's common_ms it exported as 2mb smaller than the source bdat before running the json conversion. In-engine, I made a single conversation edit with a simple change to dialogue and the change doesn't register... tools probably need to be tested and further developed to encompass whatever changes have been made to the format for XCXDE, and an external loader like you mentioned will probably need to be implemented or revised to work with the new game. I've had some luck with the romfs replacement telling me it's replacing files, and on the exefs side - as a random test dropped in the XC3 files for the file loader. It, of course, hung the process and got stuck trying to load... but I wasn't expecting it to work, just wanted to see how XCXDE would react (different sdk file with a 4-5 mb difference.) and a newer npdm file.

(Realistically, this is just my speculation... not sure how complicated the changed data structure for XCXDE makes things, but I doubt it's a simple process.)
Xenobade 3 and 2 are working 100% fine. My translation patches are done this way. I can't say whether XX and X1 also work. But I suppose they do.

According to the bdat-toolset author:
bdat-rs & bdat-toolset 0.6.0 Latest 5 days ago
- Added support for Xenoblade Chronicles X: Definitive Edition tables.
 
i'm convert but got nothing, hope u update soon
Post automatically merged:

Btw i got json file from bdat, translate to my language and convert json to bdat again , put in
%appdata%/Ryujinx/mods/contents/{title_id}/romfs/bdat/us/common_ms.bdat but translate don’t work, anyone else can help me pls
Btw, you can download bdat-rs and rename it to bdat-toolset.exe. It will work if you use the py tool for converting bdat to json made by @rsc-pl
 
  • Like
Reactions: Linh_Tran
Btw i got json file from bdat, translate to my language and convert json to bdat again , put in
%appdata%/Ryujinx/mods/contents/{title_id}/romfs/bdat/us/common_ms.bdat but translate don’t work, anyone else can help me pls
You need this mod loader for XCX

https://github.com/masagrator/XCXDE-ModLoader/releases

it will be then
Code:
%appdata%/Ryujinx/mods/contents/{title_id}/romfs/mod/bdat/us/common_ms.bdat
 
Last edited by masagrator,
You need this mod loader for XCX

https://github.com/masagrator/XCXDE-ModLoader/releases

it will be then
Code:
%appdata%/Ryujinx/mods/contents/{title_id}/romfs/mod/bdat/us/common_ms.bdat
I found that this mod allows you to swap up to 20 files. Any of them. It doesn't matter if the bdats are original or repacked with bdat-rs (that is, they have completely different sizes).

At first I thought that there was something wrong with some bdats, but after a while I realized that it was all about number.

If you put up to 20 files to /bdat/us/ - the game turns on. Anything above 20 causes the game to hang even before it load the menu.

I will check it on real hardware tomorrow when I get up.

Edit. It works fine with initial release.
 
Last edited by rsc-pl,
Edit. It works fine with initial release.
Heh, it's my first ever approach with cache solution to sideloading files so that may be the case. I left the version without cache for comparison since its implementation is too simple to fail. I will try to fix this, didn't test with too much files - only forced on code level to check if array with 104444 entries won't exhaust game's heap in Prologue. Though I think I didn't use game's allocator for nn::fs structs which is likely the cause.
I will fix it soon.
Post automatically merged:

Well, there were 2 issues. One of it was what I said, but other one was that I didn't iterate through hash array properly when writing detected files to it. :P

Now it's fixed. Tested on chr/fctex folder that has 8260 files.
 
Last edited by masagrator,
  • Like
Reactions: rsc-pl
Update 29.03.25
Xenoblade Translation tool is now compatible with all Xenoblade games released on Nintendo Switch. Including Xenoblade X. The app detects folder structure and file versions.
The application, by the way, has a new, clearer and more readable UI too.

Files and github updated.

In the case of Xenoblade 3, remember to maintain the correct structure from that game, that is, in the base folder that you need to specify in the application there should be 2 folders: evt and game and inside them the individual extracted bdat files.


The application for extracting bdat files also has a new feature - it automatically saves the last used paths, so you don't have to select them each time.
 
Last edited by rsc-pl,
I want to say thanks to you because you are being a major gamechanger for other languages too! I already had a slow but accurate pipeline to edit the Xenoblade 2 Bdats per hexeditor(Using a diffrent Bdat editor that decrypts the text to plain text, then manually adjusting the text and in-file pointers in the hexeditor), but I didn't have anything like that for the other games, but now the only files I will have trouble with will be the Wii/3DS/WiiU files of the non-DE releases. I also can't read japanese, so the english retranslation projects for 2 and XDE are a major step forward for making german subs for the original japanese by providing an actual basis. It's overall just amazing!
 
Thanks for sharing this. This made it easy for me to fix FC's Alcamoth Collectable location causing 10 of them to spawn outside the map.
 
can i get some help? why i cant open translation tool?, whenever i open it suddenly force close, the extract bdat tool is working fine. did i miss something? i just want change TL fiorung to fiora on XC1 mod by myself
 

Site & Scene News

Popular threads in this forum