ELDER SCROLLS & FALLOUT

FONT DESIGN

Written by the creator of Sovngarde - Mist's Font Replacer

For those that want to get into the modding scene as a font author, I'm looking to make this a complete tutorial covering every aspect to optimize your typography for the Creation Kit (this method is compatible with Skyrim, Skyrim Special Edition and Fallout 4).

To start off with, no CK experience is required for the majority of these tutorials. The CK is useful, but for the artist minimal contact can be happily maintained.

I expect a certain standard of computer literacy and proficiency with the programs listed below.

In this tutorial:

  • Implement the OTF or TTF into a SWF using Adobe Animate.
  • Realign the font in-game using JPEXs.
  • Edit the config file to properly notice and replace the old fonts our new font.
  • Resize the OTF using FontForge.

RESIZE THE OTF IN FONTFORGE

Reference the images for a quick solution or follow these steps:

  1. Save a backup of your font prior to editing these values.
  2. Open FontForge and your OTF/TTF.
  3. Go to Encoding > Compact
  4. Select all glyphs with CTRL+A.
  5. Go to Element > Transformations > Transform
  6. Change Origin to Glyph Origin, select Scale Uniformly in the first dropdown, and check the top 5 out of 6 boxes (leave round to Int empty).
  7. The percentage for scale uniformly is as follows. 100% is the same size, 99% and lower will reduce the scale and 101% and higher will increase the scale. Sovngarde was naturally fairly large and needed to be reduced to 72% of its original scale.
  8. Click okay, file > save and you're done!

This method is useful if your font is too large and cuts off in the menus in-game. Good places to test are the general stats, questlogs and level up menus to insure the font is the correct size. It is also perfect for increasing the size of your font for the debug console.

EMBED FONT IN A SWF

Open Adobe Animate and proceed to create a blank Actionscript 3.0 file. Type some gibberish or a secret easter egg in the document area. Embed your font with the button to the right of Style and underneath Family. The text tool must be currently in use to see this option.

Replace "Font 1" in the name blank with the title of your font. Make sure the correct font is selected in Family and check "All" under Character Ranges. Click OK.

Save your FLA as a SWF

Quite simple, save your FLA and go to File > Publish. This will give you two files.
We just need the SWF so you may delete the HTML file.

SWF filename

Try to fit your SWF name into the following format: fonts_yourfontname.swf for ease of use and so the game can read it properly. You cannot name it fonts_en.swf or another language abbreviation without conflicts so simply name it after the font.

FONT ALIGNMENT

CORRECTING ASCENT & DESCENT FOR MAXIMUM COMPATIBILITY

After the opening view (1st image), take a look on the left side directory with your swf at the top. Beneath lies header, texts, fonts, frames and others. Right click DefineFont and raw edit.

The right side of the program will no longer display the font and instead show you a text list. At the bottom will be an edit button. Use it to edit the fontAscent & fontDescent values. The following are Sovngarde's values in V8.2:

Ascent = 17650
Descent = 6500

You'll have to tweak and test the values depending on your font. Some are much wider, taller or more compact than others and will require unique values, but those starting values will certainly help you have a solid starting point.

This part is important because it will give your font the correct alignment in the questlog and literally every menu. The descent value will determine the width between lines of text and needs to be just right so mods like Ordinator will display multi-line perk descriptions correctly without cutting off.

Be warned, the program will auto move the selection one digit to the left when typing in 5 digit or greater numeral sequences. You'll have to manually compensate for it to key in the correct digits.

Once this is done, save the SWF in JPEXS and exit the program.

Configuring your

fontconfig.txt

Fontconfigs will vary depending on the language you wish to support. Sovngarde's primary file has one fontconfig and it supports 6 languages. However, if you wish to support Polish or Russian/Cyrillic, you will need to make edits to your fontconfig to support their glyphs.

The wonderful thing about the config file is how customizable your font library can be. By simply downloading a couple fonts off the Nexus and mixing them in, you'll have a highly customized and immersive setup. And if a font doesn't exist for the game yet, reference the preceding tutorials to implement it.

Definitions

There's three major pieces to each config file.

  • Fontlib is a reference that will look for your SWF so the game can read however many fonts you've embedded in it for usage elsewhere in the config.
  • map will use selected font to replace the described area of the game.
  • validNameChars tells the game which characters are supported and will vary depending on which language the font supports.

The following is the complete config file used in V8.2 of Sovngarde. Utilize it for study or as a starting point for your own config. Keep in mind this file is optimized for English and 5 other European languages, so you'll want a different file if you're implementing a Polish or Cyrillic font. You may also download any version of the font to take a look at the unique configs for each language here.

fontlib "Interface\fonts_console.swf"
fontlib "Interface\fonts_en.swf"
fontlib "Interface\fonts_sovngarde.swf"
fontlib "Interface\fonts_sovngardeconsole.swf"
map "$ConsoleFont" = "Sovngarde Console" Normal
map "$StartMenuFont" = "Sovngarde" Normal
map "$DialogueFont" = "Sovngarde" Normal
map "$EverywhereFont" = "Sovngarde" Normal
map "$EverywhereBoldFont" = "Sovngarde" Normal
map "$EverywhereMediumFont" = "Sovngarde" Normal
map "$DragonFont" = "Dragon_script" Normal
map "$SkyrimBooks" = "SkyrimBooks_Gaelic" Normal
map "$HandwrittenFont" = "SkyrimBooks_Handwritten_Bold" Normal
map "$HandwrittenBold" = "SkyrimBooks_Handwritten_Bold" Normal
map "$FalmerFont" = "Falmer" Normal
map "$DwemerFont" = "Dwemer" Normal
map "$DaedricFont" = "Daedric" Normal
map "$MageScriptFont" = "Mage Script" Normal
map "$SkyrimSymbolsFont" = "SkyrimSymbols" Normal
map "$SkyrimBooks_UnreadableFont" = "SkyrimBooks_Unreadable" Normal
validNameChars "`1234567890-=~!@#$%^&*():_+QWERTYUIOP[]ASDFGHJKL;'ZXCVBNM,./qwertyuiop{}\\asdfghjkl;'zxcvbnm<>?|¡¢£¤¥¦§¨©ª«®¯°²³´¶·¸¹º»¼½¾¿ÄÀÁÂÃÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþ ÿ "

1. Add the fontlib

fontlib "Interface\fonts_sovngarde.swf"

Replace the line above with the name of your SWF.

2. Replace the fonts

Your objective is to simply replace all instances of a font name in quotes with the name of your font. Here's what you'll want to replace depending on the type of font you've made.

Main font replacers:
map "$StartMenuFont" = "Sovngarde" Normal
map "$DialogueFont" = "Sovngarde" Normal
map "$EverywhereFont" = "Sovngarde" Normal
map "$EverywhereBoldFont" = "Sovngarde" Normal
map "$EverywhereMediumFont" = "Sovngarde" Normal
Book font replacers:
map "$SkyrimBooks" = "SkyrimBooks_Gaelic" Normal
map "$HandwrittenFont" = "SkyrimBooks_Handwritten_Bold" Normal
map "$HandwrittenBold" = "SkyrimBooks_Handwritten_Bold" Normal
Console font replacers:
map "$ConsoleFont" = "Sovngarde Console" Normal
Fontconfig.png