Asheville with expanded character support (and my notes on combining fonts)

I've spent the last couple days trying to find a suitable multi-language font for my music player project, and I ended up extending Asheville (the default system font) with characters from Ayu, a Japanese bitmap font that also has support for more Latin characters and some Cyrillic characters, among other things.

I've created pixel-perfect drop-in replacements for both Asheville Sans 14 Light and Asheville Sans 14 Bold, meaning the only thing that should change about your UI is less missing character symbols.

You can find the fonts in my GitHub repository here.

1

2 3

Why?

  • I honestly really like the look of Asheville, and I personally believe that it works well for my application. It's not too small or too big, and the presence of normal and bold variants allow me to make text stand out without having to rely on another font or a larger text size. It just doesn't have enough characters for it to be suitable for a music player.

  • Particularly at smaller text sizes, the result of converting an ordinary vector font for use on the Playdate can look rough without manual touchup, something I'm not super interested in spending my time on.

  • Ayu was practically the only bitmap font I could find with comparable glyph sizes to Asheville. Everything else was too small to be comfortably readable. While Ayu can be used on its own, it doesn't have a bold variant, and I prefer the design of Asheville.

Caveats

  • I've only created normal and bold variants, and currently don't plan on making an italic variant. I personally don't have much use for one, and because Ayu only has a normal variant, it isn't straightforward to do so.

  • Because Ayu doesn't have a bold variant, I had to create one. I used the 'Bold strokes' option in Tophat to accomplish this.

    • The resulting glyphs generally fit in well with Asheville Bold, but some accented characters are a bit rough. If someone wants to help clean these up, I'd greatly appreciate it.

    • I've left all Japanese characters as is, as applying the bold effect would remove too much detail.

    • In order to ensure consistent positioning with the original Asheville Bold font, the tops of some glyphs are cut off by one pixel.

I'm honestly really happy with how it turned out, and I hope that others find it helpful for their projects too.

I cleaned up the notes I took as I experimented with combining the two fonts and turned them into a thorough list of instructions, both for my future reference, and for anyone else interested in my process. You can find them here.

If you know of another font that could work well for my use case, I'd love to hear about it!
Also, if you think my music player looks interesting, and you'd like to help me get it running on device, let me know, and I'll make a separate thread for that. I know it crashes on startup on hardware, but I'll need to make a debug build (or three) in order to find out the cause. I plan on releasing the full project soon, once I polish up a few remaining things.

5 Likes

Thanks for this, I for one will definitely try it out! Sounds like we went through a similar thought process in looking for multi-language fonts but getting discouraged by the amount of clean up work needed, and sticking with Asheville (which, as you point out, looks good!). I will probably explore doing something like this in the later stages of my project, and I hope we'll see more multi-language fonts available in the future as the Playdate adds localization options to the OS.

I totally agree, I'd love to see more multi-language fonts for the Playdate. I couldn't imagine how much work making one from scratch would be, though!