C++ libraries and various tools for NDS(i) ROM/file editing: PC tools and an editor for the Nintendo DS(i) consoles themselves
- NitroEdit
The libnedit
libraries are the core component of all the tools within this project.
While the libraries are not documented yet, one can check at the tools as examples (better to use the PC tools for reference since they're simpler than NitroEdit).
Note that these code is highly optimized (thus some saving/etc will probably be slow) since it is expected to work properly in a Nintendo DS(i) console.
NitroEdit is the shared name for two DS(i) ROM editors, one as a desktop tool (like usual ROM editors) and another one to be used from a DS(i) console itself (in flashcarts, TwilightMenu, etc.)
The DS version of NitroEdit is the result of bringing the concept of already existing Nintendo DS(i) ROM editors to the DS(i) consoles themselves. Despite obvious limitations, one can make custom edits of ROMs with the simplicity and the portability of this console family.
While it's still a work-in-progress project, it's quite close for an initial release with some basic features.
The PC version of NitroEdit is another desktop Nintendo DS(i) ROM editor, made from scratch and inspired on already existing ones, aiming to mimic the best of them.
Features:
- BMG: editing the format, option to export/import from custom XML file (as a way to edit messages manually)
TODO: fill this with more features as I keep adding them prior to the first release of this tool
-
View/edit info (game title, game code, maker code)
-
View/edit icon
-
Browse it's NitroFs filesystem
- Browse it's NitroFs filesystem
-
View/edit the texture formed by NCGR + NCLR
-
View the texture formed by a NCGR + NCLR + NSCR (saving is not supported yet)
-
Explore wave archives (SWAR) and their wave samples
-
Play/edit those wave samples (SWAV), recording with the console's microphone!
- View/edit strings
These libraries have basically no dependencies and can easily be embedded in any C/C++ project.
Like with most DS(i) homebrew projects, this project basically requires devkitARM, libnds and libfat to be installed. Then, executing make
will compile the project into an executable NDS file.
This project requires CMake and Qt.
TODO: detail build process in Windows/Linux
-
Implement saving texture as NCGR+NCLR+NSCR
-
Implement saving in utility.bin files
-
Support other formats within SDATs (STRM, SSEQ, etc.)
-
Models and model textures (NSBMD, NSBTX)
-
Support for remaining BMG message encodings
-
Proper BMG special character support for messages using it
-
For multiple palette NCGR+NCLR textures, allow choosing the palette to load
-
Support ignored attributes in NSCR data (check the links credited below)
-
Support PMCP section in NCLRs
-
Try to improve loading/saving times, but can't do much better due to technical limitations...
-
Consider using direct framebuffer drawing instead of using sprites
-
Consider using specially converted textures instead of loading PNGs
-
Support for exporting files/directories to some output directory (like GodMode9 does)
-
Polish graphics in general
-
Detect file formats with a better system than just checking the extension (checking headers, etc.) (done in libnedit)
-
Support for NSBTX editing
-
Implement zoom for large textures in the graphic editor
-
Allow changing colors in the color palette in the graphic editor
-
Add hex/text editors/viewers?
-
File exporting and importing support from NitroFs filesystems?
-
Support more special characters (é, à, etc.) on the keyboard
-
Use special icon for compressed files
TODO: make TODO list after a first version with basic things is released
Any suggestions, ideas and contributions are always welcome ;)
-
devkitPro's devkitARM, libnds and libfat are the basic components in order to make this project and most other DS(i) homebrew projects.
-
Some already existing PC ROM editors were really helpful in order to understand several file formats, and as the base for this PC editor: Every File Explorer, NSMBe5, MKDS Course Modifier and DS Sound Studio
-
The following web pages were also really helpful in order to understand several file formats:
-
The nintendo-lz Rust crate was really helpful in order to understand and implement LZ10/LZ11 compression formats in C++.
-
NitroEdit uses lodepng and stb-truetype libraries to support loading PNG and TTF files respectively.
-
NitroEdit makes use of a non-official TTF of the Nintendo DS(i)'s BIOS font, available here: https://www.dafont.com/nintendo-ds-bios.font
-
NitroEdit's UI icons were mostly grabbed from Icons8.
-
The PC tools use args libraries to parse command-line arguments.