I've implemented RitualFont support, which works alongside Q3's FreeType renderer. Both font formats can now be used interchangeably.
So, to put it simply, the message of the day is:
From now on all the internal cgame and/or UI text drawing routines should be abandoned in favour of the following engine traps:
- trap_R_RegisterFont - loads and prepares a font for use
- trap_R_Text_Width - returns length of a string rendered with the given font in pixels
- trap_R_Text_Height - returns height of a string rendered with the given font in pixels
- trap_R_Text_Paint - draws a string using given font
- trap_R_Text_PaintChar - draws a single character using given font
Colouring: the string painter has support for Quake colour codes, which can be switched off by the last parametre. For single characters and strings that don't use the colour codes, call trap_R_SetColor with an appropriate vec4_t before calling trap_R_Text_Paint*. Calling trap_R_SetColor(NULL) afterwards is good practice.
trap_R_Text_Paint has an alpha parameter which is only taken into account when using the colour codes to set the entire string's transparency.
For text with drop shadow, draw the same string using the black colour and offsetting it to the right and bottom before drawing the actual string.



