(Note: there doesn't seem to be a subforum for multi-console romhacking utilities, so I guess since it supports hacking Wii fonts, here it goes into the Wii subforum)
So, I've been working on an editor for various raster fonts found in Nintendo games since 2018, and here it is!
Supported formats:
- BRFNT (loading and saving)
- NFTR/RTFN (loading and saving, with an attempt to support NFTRs found in GameFreak's Pocket Monsters BW/B2W2 games)
- Pocket Monsters D/P/Pt/HG/SS fonts (loading and saving)
- BCFNT (loading and saving, needs testing though)
- JUTResFont/FONTbfn1 (only loading, broken and unfinished)
- BFTTF/BFOTF (decryption and encryption)
Other formats to be supported eventually:
- BFFNT (in progress, needs texture codecs for WiiU and Switch, as well as support for editing kerning data found in this format)
The program obviously needs more work, as in many ways it doesn't even reach feature parity with the original. Additionally I don't do much testing other than confirming that everything isn't completely broken, so bugs are very much present. If you have any suggestions on what to improve or bugs to report, feel free to file an issue on GitHub or post it here.
The project is written in C++ with Qt5 GUI and is open source under GNU GPL v3:
Source code: git repo (see details and build instructions there in the readme)
Builds (Windows and Linux, sorry macOS users, I don't even have a setup to test out building it): GitHub releases
This program is heavily based on BRFNTify-Next both in GUI design and GUI code, so a big credit goes to Tempus and RoadrunnerWMC for making it!
Screenshots of the program with different fonts open:
So, I've been working on an editor for various raster fonts found in Nintendo games since 2018, and here it is!
Supported formats:
- BRFNT (loading and saving)
- NFTR/RTFN (loading and saving, with an attempt to support NFTRs found in GameFreak's Pocket Monsters BW/B2W2 games)
- Pocket Monsters D/P/Pt/HG/SS fonts (loading and saving)
- BCFNT (loading and saving, needs testing though)
- JUTResFont/FONTbfn1 (only loading, broken and unfinished)
- BFTTF/BFOTF (decryption and encryption)
Other formats to be supported eventually:
- BFFNT (in progress, needs texture codecs for WiiU and Switch, as well as support for editing kerning data found in this format)
The program obviously needs more work, as in many ways it doesn't even reach feature parity with the original. Additionally I don't do much testing other than confirming that everything isn't completely broken, so bugs are very much present. If you have any suggestions on what to improve or bugs to report, feel free to file an issue on GitHub or post it here.
The project is written in C++ with Qt5 GUI and is open source under GNU GPL v3:
Source code: git repo (see details and build instructions there in the readme)
Builds (Windows and Linux, sorry macOS users, I don't even have a setup to test out building it): GitHub releases
This program is heavily based on BRFNTify-Next both in GUI design and GUI code, so a big credit goes to Tempus and RoadrunnerWMC for making it!
Q: Is this project alive?
Short A: For now I don't have the time and motivation to work on it, only on small fixes if someone reports a bug. But other than that, you can consider this temporarily dead.
Long A: I don't really have time and motivation to work on this project right now, as much of what I do now has shifted away from romhacking. Furthermore, the project was my first big C++ program, and as such the code quality (to put it nicely) is sub-par. Additionally, parts of the code have been evolved in other projects over this time, so I hope that at some point I get to come back and give this a proper rewrite with manageable modern C++ code, as well as giving the UI and capabilities of this program an overhaul for the better.
Q: Why clicking X option in the menu do nothing?
A: That feature was planned but I didn't get to implementing it, and didn't remove the buttons. It doesn't work. Sorry for the inconvenience.
Q: When will you add BFFNT support?
A: Most likely when I get back to doing this and the aforementioned rewrite happens. The main roadblock is texture codecs, which I've not implemented because I couldn't really wrap my head around the GX2 tiling. Additionally I have no facilities for supporting kerning data, as it wasn't even on the idea list when I was planning the program, because I didn't know BFFNT had it.
Q: Can you make it output a TTF/OTF from a BxFNT/NFTR/whatever?
Short A: NO.
Long A: This is an editor mostly for NintendoWare-format fonts and their derivatives. These are all bitmap fonts, meaning they store glyphs using raster images using pixels, much like a PNG or a JPEG. TTF/OTF are vector fonts, meaning they store glyphs as outline data which can be used to render said glyphs on the screen. What you want is the inverse, which is called vectorization, which is a very complex subject that's still being researched to this day. Simply put, one does not convert a bitmap font to a vector font. If you really want that font in TTF/OTF, your best bet is to 1 - search for it based on the file name and hope it matches the typeface name; 2 - use something like https://en.likefont.com to recognize the font from an image of it's text. You may need to put some effort into it, but you'd most likely find the font you need if you search hard enough (unless the font was designed specifically for a game, like with Splatoon, but that's a very rare occasion).
Short A: For now I don't have the time and motivation to work on it, only on small fixes if someone reports a bug. But other than that, you can consider this temporarily dead.
Long A: I don't really have time and motivation to work on this project right now, as much of what I do now has shifted away from romhacking. Furthermore, the project was my first big C++ program, and as such the code quality (to put it nicely) is sub-par. Additionally, parts of the code have been evolved in other projects over this time, so I hope that at some point I get to come back and give this a proper rewrite with manageable modern C++ code, as well as giving the UI and capabilities of this program an overhaul for the better.
Q: Why clicking X option in the menu do nothing?
A: That feature was planned but I didn't get to implementing it, and didn't remove the buttons. It doesn't work. Sorry for the inconvenience.
Q: When will you add BFFNT support?
A: Most likely when I get back to doing this and the aforementioned rewrite happens. The main roadblock is texture codecs, which I've not implemented because I couldn't really wrap my head around the GX2 tiling. Additionally I have no facilities for supporting kerning data, as it wasn't even on the idea list when I was planning the program, because I didn't know BFFNT had it.
Q: Can you make it output a TTF/OTF from a BxFNT/NFTR/whatever?
Short A: NO.
Long A: This is an editor mostly for NintendoWare-format fonts and their derivatives. These are all bitmap fonts, meaning they store glyphs using raster images using pixels, much like a PNG or a JPEG. TTF/OTF are vector fonts, meaning they store glyphs as outline data which can be used to render said glyphs on the screen. What you want is the inverse, which is called vectorization, which is a very complex subject that's still being researched to this day. Simply put, one does not convert a bitmap font to a vector font. If you really want that font in TTF/OTF, your best bet is to 1 - search for it based on the file name and hope it matches the typeface name; 2 - use something like https://en.likefont.com to recognize the font from an image of it's text. You may need to put some effort into it, but you'd most likely find the font you need if you search hard enough (unless the font was designed specifically for a game, like with Splatoon, but that's a very rare occasion).
Screenshots of the program with different fonts open:
As someone from Russia, where we didn't see any official translations of Nintendo games back in the day (and even now it's not uncommon for Nintendo to release an unlocalized game here), so I've always been interested in translating said games...and the biggest roadblock has always been the fonts...argh, those goddamn fonts! So, because of that I never really progressed with any of my translations, knowing that I wouldn't be able to make it work in the end anyways (other than one single time, when I translated all the texts in Super Mario Galaxy 2...but that was before I found out that I couldn't properly edit the fonts...so that project just got trashed and now the files to it are lost forever other than a few ones I found on an old grandparents' PC I copied them to for testing at the time)... then I discovered BRFNTify-Next, which seemed like the solution to all my issues!.. except there was a problem - it couldn't save anything(well, now it can, but eh 6 years too late). I wasn't much good with programming back then, but it interested me enough to at least investigate. I began messing with it's source code around 2018, trying to make it save something (and being a dumb idiot, furthermore being more familiar with C-like languages(C# to be exact), I didn't understand Python very good) and I only ended up making a modified version of BRFNTify-Next that could output xlor files for use with the SDK font converter. At that point I decided to start work on my own utility, unoriginally named BXFNTify, using Windows Forms in C# but I wasn't moving all that fast with it, so I used pieces of the code I already wrote for BXFNTify and some code from the BRFNTify-Next mod to bodge together XLORify-Sharp(which is a steaming pile of garbage code). Despite that, I continued to work on BXFNTify throughout 2019, getting BRFNT to load and save correctly...but at the end of 2019 a change came in my life - I got fed up with MS Windows, furthermore I realized that WinForms were gonna restrict me in way which would require me to use native Windows APIs to implement stuff that I wanted...and on one day in December of 2019 I left Windows and switched to Linux Mint. I was somewhat familiar with it already, as I've used Ubuntu many times before, so it was (mostly) a smooth transition. At this point I decided to rewrite the program in C++ using Qt5 (just like BRFNTify-Next does, except it's written in Python)...and that's where I came up with this "original" new name for the program since I felt kinda bad stealing even the name of BRFNTify-Next. And from there on, I've been working on it from time to time, writing one thing, fixing another, and by the end of December 2020 I had already thought of releasing it, but spent a bit more time refactoring and cleaning up the code (I'm sure there are many obvious bugs I missed, as well as improperly formatted text)(and even managed to quickly implement a BCFNT loader in a few days before release lol), and here it is.
Last edited by CHEMI6DER,