A guide for customizing the system-wide font on the Nintendo 3DS.


Custom system font shown in this screenshot is "Pop Happiness".
Download the custom system fonts here

Getting Started

Luma3DS custom firmware is required to use the mod. Install CFW if you haven’t already.

Create a NAND backup before modifying any system files!
Modifying the system font is safe and can be restored by re-installing the original system font, instead of restoring a NAND backup.
To restore the system font, see the restore section.

Never uninstall CFW while any modded system files are installed, doing so will brick the console! A DS flashcart with ntrboot is required to re-install B9S.
Modified system files are not signed which they don't work on the original firmware, as the signature check fails.
If you wanna uninstall CFW before selling your console, you must restore the system files first, then follow the CFW uninstallation instructions.

What you need:

Merging the Fonts

A 3DS font will be merged into a custom system font so the icon glyphs are preserved.

  1. Launch FontForge.

  2. Open the custom font file (TTF/OTF).

  3. Go to ElementFont Info...General.

  4. Set the Em Size value to 1000 and click OK. The custom font size will be adjusted so it matches the 3DS font size. Skip if em size is already 1,000.

  5. Go to ViewGoto, input U+E000 into the text box to jump to the Private Use Area block.

  6. If the custom font contains any non-3DS glyphs in the PUA block, go to FileExecute Script, input this code into the text box:

     fontforge.activeFont().selection.select(("ranges", None), 0xE000, 0xE07E)
     fontforge.activeFont().clear()
    

    and click OK. This will clear out all the non-3DS glyphs in this block.

  7. Go to ElementMerge Fonts... and select the 3DS font file.

  8. Click Yes when prompted to retain kerning info.

  9. Go to FileGenerate Fonts....

  10. Pick TrueType in the combo-box, uncheck Validate Before Saving, then click Generate.

  11. On a File Explorer window, open the generated font file and install it.

Generating the Custom System Font

  1. Launch CTR Font Converter.

    • You’ll be asked to install .NET Framework 3.5, click “Download and install this feature”.

    • Wait for the download to complete, then relaunch that app.

  2. Go to the Windows Font tab and select a font that you installed earlier.

  3. Set the font size - start with 20px.

    • If the font size is too big/small after installing to a 3DS, come back to it and try a different font size until you get it right.
  4. Set the bit depth to 16 levels (A4).

  5. Activate the Use filter check-box, click Select file, go to the xllt folder and select the 3ds_bitmap_font_std.xllt file.

    • This will clear out all the glyphs not used in 3DS games/apps, reducing the font file size. Max file size for compressed BCFNT file (after running FontTool) is 1.5 MiB.
  6. Go to the bcfnt / bcfna tab.

  7. Save the font file as SystemFont.bcfnt to the FontTool folder.

  8. Click Convert.


    Click the screenshot for full view.

  9. Go to the FontTool folder.

  10. Launch the Terminal window and input this command:

    python FontTool.py -font SystemFont.bcfnt
    

    or launch Convert_System_Font.bat.

  11. The SystemFont.cia file has been generated, rename “SystemFont” to anything you want.

Previewing the Custom System Font on Lime3DS

You can preview the custom system font on Lime3DS emulator before installing it to a 3DS.

AES Keys are required to install encrypted contents to Lime3DS. Read here for more info.
If you have Citra emulator, the installation process works the same.

  1. Launch Lime3DS emulator.

  2. Go to EmulationConfigure...System.

  3. Under the 3GX Plugins Loader options, pick the system model and system region, then click Download.

  4. Wait for the system firmware download to complete.

  5. Close the configuration window.

  6. Go to FileInstall CIA....

  7. Select the generated CIA file.

  8. Launch any of the system apps and see how the custom system font looks.

    • If the font size is too big/small, repeat step 17 of the “Generating the Custom System Font” section and try a different font size until you get it right.

Installing the Custom System Font to 3DS

  1. Add the generated CIA file to the SD Card.

  2. Launch GodMode9.

  3. Browse and select the CIA file.

  4. Select CIA image options...Install game image.

    • You don’t need to encrypt it as 3dstool (bundled in FontTool) already did that.
  5. Reboot the console.

  6. The custom system font has been installed!


The button glyphs should be preserved.
The ZL/ZR/C-Stick/Start glyphs are part of the game's digital manual, not the system font.

Restoring the System Font

  1. Download the original system font.

  2. Add the SystemFont.cia file to the SD Card.

  3. Launch GodMode9.

  4. Browse and select the SystemFont.cia file.

  5. Select CIA image options...Install game image.

  6. Reboot the console.

  7. The system font has been restored.

  • To restore the system font on Lime3DS, go to FileInstall CIA... and select the SystemFont.cia file.

Tools Used

FontTool by astronautlevel2 & ihaveamac

3dstool by dnasdw

make_cia by Tiger21820 & 3DSGuy