Carleton Fonts
By Geep, 2025. The analysis here as of TDM 2.12 and for "english" (including European) unless indicated otherwise.
The Carleton Family in a Nutshell
Carleton is a squarish print-style serif font. The lower case letters look like smaller versions of the upper case letters, so this font can also be referred to as "Carleton Caps", as in this screenshot. Within TDM, there are four members of the Carleton family:
- carleton
- carleton_bold
- carleton_condensed (i.e., more tightly spaced in the horizontal dimension)
- carleton_glow
Base-font carleton is used extensively throughout the main menu system. It may appear by itself, in black, for non-interactive subheadings and descriptions. (In a few places, like the "Downloadable Missions" title, a "headline" style using carleton_bold is deployed.)
Or it may participate in dynamic text highlighting for user interactions, using overlay combinations like:
- carleton and carleton_glow
- carleton_bold and carleton_glow, for titles and headlines
- carleton, carleton_bold and carleton_glow, for certain "new game" buttons
For FMs, there are standard readable sheet and scroll prefabs and sign text decals that use carleton, just by itself. The style of this font makes it a good choices for notices; between title and body, and upper and lower case, there can appear to be four different sizes of "capital" letters.
All these usages predominately involve mid-sized and large text (e.g., GUI textscale 0.24 and up), that draws on the 24pt and 48pt size bitmaps. The "english" form of 24pt and 48pt both offer TDM’s full European glyph set. Glyphs are stylishly done for 48pt and not bad for ASCII characters of 24pt; the accented characters of 24pt are rough-hewn and merely adequate.
While 48pt carleton_bold actually has bold (thickened) glyphs, 24pt carleton_bold glyphs are merely copies of regular 24pt carleton, so not bold.
File Naming and Content Sharing across the Carleton Family
The four members share bitmap naming. For instance, if you examine any of the 4 derived fontimage_24.ref files, you see references like:
shaderName fonts/Carleton_0_24.tga
and it will say "Carleton_..." in all cases, not for instance "Carleton_condensed_...". (As is typically the case in TDM, a shader filetype of .tga actually resolves to .dds, and shaderName is case-insensitive; the actual filenames are all lower-case.)
There is also file content sharing (i.e., duplication). As shown in the tables below, the sharing pattern is more complex, and arguably incoherent. This may reflect errors in distribution, or perhaps some member/size combinations not really being used.
filename | /carleton/ | /carleton_bold/ | /carleton_condensed/ | /carleton_glow/ |
---|---|---|---|---|
fontimage_12.dat | SAME | SAME | SAME | SAME |
fontimage_24.dat | SAME | SAME | unique | SAME |
fontimage_48.dat | SAME | SAME | unique | SAME |
filename | /carleton/ | /carleton_bold/ | /carleton_condensed/ | /carleton_glow/ |
---|---|---|---|---|
carleton_0_12.dds | SAME | unique | SAME | unique |
carleton_0_24.dds | SAME | SAME | unique | unique |
carleton_1_24.dds | SAME | SAME | unique | unique |
carleton_0_48.dds | SAME | unique | SAME | unique |
carleton_1_48.dds | SAME | unique | SAME | unique |
carleton_2_48.dds | SAME | unique | SAME | unique |
carleton_3_48.dds | SAME | unique | SAME | unique |
carleton_4_48.dds | SAME | unique | SAME | unique |
carleton_5_48.dds | SAME | unique | SAME | unique |
carleton_6_48.dds | SAME | unique | SAME | unique |
carleton_7_48.dds | SAME | unique | SAME | unique |
Bitmap File Sizes across the Carleton Family
The english 24pt DDS files shown in bold above have 512x512 bitmaps. All other files (including those for Russian, not in the table) have the default 256x256 bitmaps. This includes carleton_glow. Observe that it is not required that the base & glow have identical bitmap sizes (although that is helpful to allow GIMP layering).
See also Refont#Carleton_Family for corresponding refont commands.
Anomalies of Carleton and Carleton Bold 24pt Glyphs
As mentioned above, 24pt Carleton Bold is identical to 24pt Carleton; so not really bold. The remaining discussion applies equally to 24pt Carleton and Carleton Bold.
Evidently, the original generation of the 24pt size, into two 256x256 bitmaps "carleton_0_24.dds" and "carleton_1_24.dds", contained only ASCII alphanumeric characters and limited punctuation, with no accented/Latin-1 glyphs. Later, these bitmaps were scaled up to 512x512 bitmaps, to ease drawing in the missing characters by hand. The resulting new characters are coarser than the generated and scaled ASCII characters.
You can see this aspects in the main menu, under Settings/Video/Language, where, in the list of 16 languages, accented letters are thicker.
Also, if viewed in GIMP, the white characters have a faint black border, not seen elsewhere (e.g., in the 48pt bitmaps). This is true of both scaled-up ASCII and drawn Latin-1 characters, though far more prominent in the latter. However, TDM's monochrome rendering (defined by forecolor in the GUI) may mask such a border effect.
Carleton & Carleton Glow in the Main Menu System
This pairing occurs basically everywhere thorough the main menu system. Typical presentations, against a parchment background, are as follows:
- Major menu-page-selection keywords are by default rendered in black with no glow, but will turn white with blood-red glow highlighting when either selected (as if a tab for the current page) or moused-over. This will also play a sound and often show a text hint.
- Value keywords for a particular setting are shown in white with a faint black outline glow. This presentation style is also used for row items within lists.
Example Implementation
TDM uses a number of different "button" (i.e., selectable text) styles, driven by #defines in \tdm_gui01\guis\mainmenu_defs.gui. For example, those of the main menu home page use:
#define MM_NORMAL_FONT "fonts/carleton" #define MM_GLOW_FONT "fonts/carleton_glow" #define MM_FONTSCALE 0.33 #define MM_BUTTON_HEIGHT 18
For colors, the text is black initially, with glow highlighting invisible. Upon mouse hover, the text becomes white, and the glow red. RGBA colors are defined for this, in vector and string (with S prefix) forms:
#define NORMAL_COLOR 0,0,0,0.90 // black, not entirely opaque #define SNORMAL_COLOR "0 0 0 0.90" #define INVISIBLE 0, 0, 0, 0 #define SINVISIBLE "0 0 0 0" #define GLOW_WHITE_COLOR 0.98,0.93,0.82,1 #define SGLOW_WHITE_COLOR "0.98 0.93 0.82 1" #define GLOW_RED_COLOR 0.6,0.1,0.1,0.5 // semi-transparent #define SGLOW_RED_COLOR "0.6 0.1 0.1 0.5"
To be specific, consider a simplified imaginary main menu "button" we'll call "Simple". (We're avoiding the layout calculations and other complications of a real button.) For our button, there are 3 aligned windowDefs in mainmenu_defs.gui, with these locations:
#define MM_POS_SIMPLE_BUTTON rect 40, 445, 160, MM_BUTTON_HEIGHT * 1.3 #define MM_POS_SIMPLE_BUTTON_GLOW rect 41, 446, 159, MM_BUTTON_HEIGHT * 1.3 - 1 #define MM_POS_SIMPLE_ACTION MM_POS_SIMPLE_BUTTON
The windowDefs positioned by these will also do the following:
- MM_POS_SIMPLE_BUTTON: set the default appearance of the button text.
- MM_POS_SIMPLE_BUTTON_GLOW: set the default appearance of the glow "highlight" text. Note this text is offset down and to the right by one pixel, compared to MM_POS_SIMPLE_BUTTON, to give the glow a "drop shadow" flavor. This is a frequent treatment, though in some cases only the right shift is done.
- MM_POS_SIMPLE_ACTION defines the mouse-over and mouse-selection dynamic behaviors. (Be aware that in some actual cases, this is combined into the first windowDef.)
Then, besides the rects, the other attributes are defined for the two default windowDefs:
#define MM_FONT font MM_NORMAL_FONT forecolor SNORMAL_COLOR textscale MM_FONTSCALE visible 1 textalign 1 // centered text #define MM_FONT_GLOW font MM_GLOW_FONT forecolor INVISIBLE textscale MM_FONTSCALE visible 1 textalign 1
(This is a simplification; for the main menu, MM_FONT's forecolor is #defined as INVISIBLE, then transitions to SNORMAL_COLOR in 1/2 second.)
Within an overall page layout given by mainmenu_main.gui (but with our button shoved in), we might have nested:
windowDef SimpleTextH { rect MM_POS_SIMPLE_BUTTON_GLOW MM_FONT_GLOW visible "gui::showSimple" text "#str_01234" // "Simple" } windowDef SimpleText { rect MM_POS_SIMPLE_BUTTON MM_FONT visible "gui::showSimple" text "#str_01234" // "Simple" } windowDef SimpleAction { rect MM_POS_SIMPLE_ACTION visible "gui::showSimple" float exit; onMouseEnter { set "exit" 0; transition "SimpleText::forecolor" SNORMAL_COLOR SGLOW_WHITE_COLOR "50" ; transition "SimpleTextH::forecolor" SINVISIBLE SGLOW_RED_COLOR "50" ; set "cmd" "play sound/meta/menu/mnu_hover"; } onMouseExit { if ("exit" == 0) { transition "SimpleText::forecolor" SGLOW_WHITE_COLOR SNORMAL_COLOR "50" ; transition "SimpleTextH::forecolor" SGLOW_RED_COLOR SINVISIBLE "50" ; } } onAction { transition "SimpleText::forecolor" SGLOW_WHITE_COLOR SNORMAL_COLOR "50" ; transition "SimpleTextH::forecolor" SGLOW_RED_COLOR SINVISIBLE "50" ; set "cmd" "play sound/meta/menu/mnu_select;"; set "cmd" "onSimpleClicked"; // tell engine // And any additional commands here to switch states, resetTime, etc. } }
The "H" (highlighted) windowDef is shown first, to draw behind the main text. onMouseEnter turns the text color from black to white in 50 milliseconds, and the glow from invisible to red. onMouseExit reverses that. onAction, when the button is mouse-selected, does the visual transition as mouse exit, but plays a different sound... and then does whatever "Simple" is supposed to do.
Carleton in Assets for FMs
In the tables below, most content has a textscale above 0.30, so draws from the 48pt size, indicated in bold. Otherwise, with a textscale of 0.16 to 0.30, from 24pt.
Prefab | Title textscale | Body textscale |
---|---|---|
.../books/... none | ||
.../scrolls/scroll_print_carleton.gui | 0.40 | 0.28 |
.../sheets/sheet_paper_print_carleton_caps.gui | 0.40 | 0.31 |
Decal | Textscale |
---|---|
sign_text_carleton.gui | 2 |
sign_text_carleton_small.gui | 1 |
Carleton_condensed
As indicated above, Carleton_condensed DDS files are all 256x256.
12pt Size
The main menu system does not use this size. In your FM, it is recommended to NOT invoke 12pt carleton_condensed (i.e., by specifying a GUI textscale of 0.15 or less). Instead, use regular carleton, possibly with a slightly smaller textscale.
Although 12pt carleton_condensed exists, its DAT file and single DDS file are mere placeholders that are identical to those of carleton 12pt.
48pt Size
The main menu system does not use this size. In your FM, it is recommended to NOT invoke 48pt carleton_condensed (i.e., by specifying a GUI textscale of above 0.30). Instead, use regular carleton, possibly with a slightly smaller textscale.
The set of eight DDS files for 48pt carleton_condensed are identical to those for 48pt carleton. However, the DAT file has different content, though the difference is not due to horizontal "condensation".
A one time, Tels drafted a Font Patcher command file for 48pt carleton_condensed, to reduce the width and xSkip of a selected subset of the carleton’s ASCII alphanumeric characters, presumably those most generously spaced to begin with. Evidently this was not finalized and deployed. Instead, inspection of the current 48pt DAT file for carleton_condensed suggests it was based on an early version of carleton, at a time when only some of the accented characters were implemented. (In particular, the DAT lacks re-implemented metrics for chars 128-139 and 145-155.)
24pt Size
The main menu system uses this, but sparingly. Since a "glow" form of carleton_condensed was never developed, only regular non-glow uses are applicable.
The contents of the DAT file and the set of two DDS files for 48pt carleton_condensed DIFFER from those for 48pt carleton.
For the main menu system, where carleton was used for English-language players, the more-compact carleton_condensed was briefly considered as a method of accommodating European language translations. However, this would require dynamic language switching, and was found to be a hill too far, compared to just reducing Carleton’s textscale value.
The actual limited uses in the main menu systems are seen as you survey the downloadable missions. Specifically, when looking at a candidate mission, the Mission Details page has a Description section, whose body text is carleton_condensed with textscale 0.17. Compared to other similar text section here (that use regular carleton with textscale 0.18), this is slightly smaller and condensed. Also, the Next >> and << Prev buttons for cycling through screenshots have their button captions in this font (with textscale 0.23).
For More
- Character-set coverage of Carleton family is included in the the summary analysis of 2.12 TDM fonts, based on applying 'refont -stats ...' to all 'english' DAT files.