Apicula rip, view, and convert the NSBMD model files
A tool for converting Nintendo DS Nitro models into GLTF and Collada
I have conflicting feeling about things that are too easy when it comes to reverse engineering. For Phantasy Star Online Zero, I wanted to see if I could export a few assets to be able to play around with them in Godot or Threejs.
In order to do this, I found there are a bunch of off the shelf tools to allow for this. The .nds
rom format has internal files that can be extracted with another tool. And then the asset files themselves
can be converted to GLTF using Apicula.
But one thing that I like to do is learn by doing. So I’m also very tempted to set up an online tool that will allow for browsing and exporting of files. And that way I have a checklist to see how much I have mapped of the files, and then be able to work with the files themselves to be able to get more data points for the Dash Model Format.
All of that being said, I wanted to highlight the tool because it’s an amazing tool. I was confused since
Windows was the only executable found in the Releases
section. But after reading the readme, it looks
like it was written in Rust and can be compiled on Linux. So that’s another one of those small things
I can cross off of my “needs Windows” list.
Compatibility
apicula recognized these file types (called Nitro files). See the wiki for more info.
.nsbmd
,.BMD
, or.BMD0
: 3D models, textures, palettes.nsbtx
,.BTX
, or.BTX0
: textures, palettes.nsbca
,.BCA
, or.BCA0
: joint animations.nsbtp
,.BTP
, or.BTP0
: pattern animations (flipbook-type).nsbta
,.BTA
, or.BTA0
: material animations (experimental!!)
Models can be converted to COLLADA or glTF.
Building
Make sure Rust (1.34+) is installed and build the usual way
$ git clone https://github.com/scurest/apicula.git
$ cd apicula
$ cargo b --release
$ target/release/apicula -V
Usage
To search a ROM (or any other file) for Nitro files and extract them
$ apicula extract INPUT_FILE -o OUTPUT_DIR
To get technical information about the given Nitro files
$ apicula info NITRO_FILES