Index: lib/ivis_common/textdraw.h
===================================================================
--- lib/ivis_common/textdraw.h	(revision 2520)
+++ lib/ivis_common/textdraw.h	(working copy)
@@ -17,29 +17,46 @@
 	along with Warzone 2100; if not, write to the Free Software
 	Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 */
+
 #ifndef _INCLUDED_TEXTDRAW_
 #define _INCLUDED_TEXTDRAW_
 
 #include "ivisdef.h"
 
+enum iV_fonts
+{
+    font_regular,
+    font_large,
+};
+
 #define PIE_TEXT_WHITE				(-1)
 #define PIE_TEXT_LIGHTBLUE			(-2)
 #define PIE_TEXT_DARKBLUE			(-3)
 
-extern void iV_ClearFonts(void);
-extern void iV_SetFont(int FontID);
-extern int iV_CreateFontIndirect(IMAGEFILE *ImageFile,UWORD *AsciiTable,int SpaceSize);
+extern void iV_TextInit(void);
+extern void iV_TextShutdown(void);
+
+extern void iV_SetFont(enum iV_fonts FontID);
 extern int iV_GetTextAboveBase(void);
 extern int iV_GetTextBelowBase(void);
 extern int iV_GetTextLineSize(void);
 extern unsigned int iV_GetTextWidth(const char* String);
-extern unsigned int iV_GetCharWidth(char Char);
+extern unsigned int iV_GetCountedTextWidth(const char* string, size_t string_length);
+extern unsigned int iV_GetCharWidth(uint32_t charCode);
+
+extern unsigned int iV_GetTextHeight(const char* string);
 extern void iV_SetTextColour(SWORD Index);
 
 #define ASCII_SPACE			(32)
 #define ASCII_NEWLINE		('@')
 #define ASCII_COLOURMODE	('#')
 
+#define TEXT_UTF8_SPACE       " "
+#define TEXT_UTF8_NEWLINE     "\n"
+
+static const char text_space_utf8[] = TEXT_UTF8_SPACE;
+static const char text_newline_utf8[] = TEXT_UTF8_NEWLINE;
+
 // Valid values for "Justify" argument of iV_DrawFormattedText().
 
 enum {
@@ -52,6 +69,7 @@
 extern UDWORD iV_DrawFormattedText(const char* String, UDWORD x, UDWORD y, UDWORD Width, UDWORD Justify);
 
 extern void iV_DrawTextRotated(const char* string, float x, float y, float rotation);
+extern void iV_SetTextSize(float size);
 
 static inline void iV_DrawText(const char* string, float x, float y)
 {
Index: lib/ivis_opengl/ivi.c
===================================================================
--- lib/ivis_opengl/ivi.c	(revision 2520)
+++ lib/ivis_opengl/ivi.c	(working copy)
@@ -23,10 +23,10 @@
 #include "lib/ivis_common/textdraw.h"
 
 // pass in true to reset the palette too.
-void iV_Reset(void)
+void iV_Reset()
 {
 	_TEX_INDEX = 0;
-	iV_ClearFonts(); // Initialise the IVIS font module.
+	iV_TextInit(); // Initialise the IVIS font module.
 }
 
 
@@ -34,5 +34,6 @@
 {
 	pie_ShutDown();
 	pie_TexShutDown();
+	iV_TextShutdown();
 	debug(LOG_3D, "iVi[ShutDown] = successful\n");
 }
Index: lib/ivis_opengl/textdraw.c
===================================================================
--- lib/ivis_opengl/textdraw.c	(revision 2520)
+++ lib/ivis_opengl/textdraw.c	(working copy)
@@ -31,175 +31,340 @@
 #include "lib/ivis_common/bitimage.h"
 
 #include <GL/gl.h>
+#include <GL/glc.h>
 
+static float font_size = 12.f;
+// Contains the font color in the following order: red, green, blue, alpha
+static float font_colour[4] = {1.f, 1.f, 1.f, 1.f};
+
+static GLint GLC_Context = 0;
+static GLint GLC_Font_Regular = 0;
+static GLint GLC_Font_Bold = 0;
+
 /***************************************************************************/
 /*
- *	Local Definitions
+ *	Source
  */
 /***************************************************************************/
 
-#define MAX_IVIS_FONTS	8
+static inline void iV_printFontList()
+{
+	unsigned int i;
+	GLint font_count = glcGeti(GLC_CURRENT_FONT_COUNT);
+	debug(LOG_ERROR, "GLC_CURRENT_FONT_COUNT = %d", font_count);
 
-typedef struct
+	for (i = 0; i < font_count; ++i)
+	{
+		GLint font = glcGetListi(GLC_CURRENT_FONT_LIST, i);
+		/* The output of the family name and the face is printed using 2 steps
+		 * because glcGetFontc and glcGetFontFace return their result in the
+		 * same buffer (according to GLC specs).
+		 */
+		char prBuffer[1024];
+		snprintf(prBuffer, sizeof(prBuffer), "Font #%d : %s ", font, (const char*)glcGetFontc(font, GLC_FAMILY));
+		prBuffer[sizeof(prBuffer) - 1] = 0;
+		strncat(prBuffer, glcGetFontFace(font), sizeof(prBuffer));
+		prBuffer[sizeof(prBuffer) - 1] = 0;
+		debug(LOG_ERROR, prBuffer);
+	}
+}
+
+static void iV_initializeGLC()
 {
-	IMAGEFILE *FontFile;	// The image data that contains the font.
-//	UWORD FontStartID;		// The image ID of character ASCII 33.
-//	UWORD FontEndID;		// The image ID of last character in the font.
-	int FontAbove;			// Max pixels above the base line.
-	int FontBelow;			// Max pixels below the base line.
-	int FontLineSize;		// Pixel spacing used for new lines.
-	int FontSpaceSize;		// Pixel spacing used for spaces.
-	SWORD FontColourIndex;	// The colour index to use.
-//	BOOL	bGameFont;
-	UWORD *AsciiTable;
-} IVIS_FONT;
+	if (GLC_Context)
+		return;
 
-/***************************************************************************/
-/*
- *	Local Variables
- */
-/***************************************************************************/
+	GLC_Context = glcGenContext();
+	if (!GLC_Context)
+		debug(LOG_ERROR, "glcGenContext() failed");
+	else
+		debug(LOG_NEVER, "glcGenContext() succesful: GLC_Context = %d", GLC_Context);
 
-static SWORD TextColourIndex;
-static int NumFonts;
-static int ActiveFontID;
-static IVIS_FONT iVFonts[MAX_IVIS_FONTS];
+	glcContext(GLC_Context);
 
-/***************************************************************************/
-/*
- *	Local ProtoTypes
- */
-/***************************************************************************/
-static void pie_BeginTextRender(SWORD ColourIndex);
-static void pie_TextRender(IMAGEFILE *ImageFile, UWORD ID, int x, int y);
+	glcDisable(GLC_AUTO_FONT);
+	glcRenderStyle(GLC_TRIANGLE);
 
-/***************************************************************************/
-/*
- *	Source
- */
-/***************************************************************************/
+	GLC_Font_Regular = glcGenFontID();
+	GLC_Font_Bold = glcGenFontID();
 
-void iV_ClearFonts(void)
+	static const char* font_family = "DejaVu Sans Mono";
+	static const char* font_face_regular = "Book";
+	static const char* font_face_bold = "Bold";
+
+	if (!glcNewFontFromFamily(GLC_Font_Regular, font_family))
+			debug(LOG_ERROR, "glcNewFontFromFamily(GLC_Font_Regular (%d), \"%s\") failed", GLC_Font_Regular, font_family);
+		else
+			debug(LOG_NEVER, "glcNewFontFromFamily(GLC_Font_Regular (%d), \"%s\") succesful", GLC_Font_Regular, font_family);
+
+	if (!glcFontFace(GLC_Font_Regular, font_face_regular))
+			debug(LOG_ERROR, "glcFontFace(GLC_Font_Regular (%d), \"%s\") failed", GLC_Font_Regular, font_face_regular);
+		else
+			debug(LOG_NEVER, "glcFontFace(GLC_Font_Regular (%d), \"%s\") succesful", GLC_Font_Regular, font_face_regular);
+
+	if (!glcNewFontFromFamily(GLC_Font_Bold, font_family))
+			debug(LOG_ERROR, "glcNewFontFromFamily(GLC_Font_Bold (%d), \"%s\") failed", GLC_Font_Bold, font_family);
+		else
+			debug(LOG_NEVER, "glcNewFontFromFamily(GLC_Font_Bold (%d), \"%s\") succesful", GLC_Font_Bold, font_family);
+
+	if (!glcFontFace(GLC_Font_Bold, font_face_bold))
+			debug(LOG_ERROR, "glcFontFace(GLC_Font_Bold (%d), \"%s\") failed", GLC_Font_Bold, font_face_bold);
+		else
+			debug(LOG_NEVER, "glcFontFace(GLC_Font_Bold (%d), \"%s\") succesful", GLC_Font_Bold, font_face_bold);
+
+	debug(LOG_NEVER, "finished initializing GLC");
+
+#ifdef DEBUG
+    iV_printFontList();
+#endif
+
+	// Set GLC's string type to UTF-8
+	glcStringType(GLC_UTF8_QSO);
+}
+
+void iV_TextInit()
 {
-	NumFonts = 0;
-	ActiveFontID = -1;
+	iV_initializeGLC();
+	iV_SetFont(font_regular);
 }
 
-// Create a font using an ascii lookup table.
-//
-// IMAGEFILE *ImageFile		Image file containing the font graphics.
-// UWORD *AsciiTable		Array of 256 Ascii to ImageID lookups.
-// int SpaceSize			Pixel size of a space.
-// BOOL bInGame				Specifies that the font is used in game (WHY?)
-//
-int iV_CreateFontIndirect(IMAGEFILE *ImageFile, UWORD *AsciiTable, int SpaceSize)
+void iV_TextShutdown()
 {
-	int Above, Below;
-	int Height;
-	UWORD Index, c;
-	IVIS_FONT *Font;
+	if (GLC_Font_Regular)
+		glcDeleteFont(GLC_Font_Regular);
 
-	assert(NumFonts < MAX_IVIS_FONTS - 1);
+	if (GLC_Font_Bold)
+		glcDeleteFont(GLC_Font_Bold);
 
-	Font = &iVFonts[NumFonts];
+	glcContext(0);
 
-	Font->FontFile = ImageFile;
-	Font->AsciiTable = AsciiTable;
-	Font->FontSpaceSize = SpaceSize;
-	Font->FontLineSize = 0;
-	Font->FontAbove = 0;
-	Font->FontBelow = 0;
+	if (GLC_Context)
+		glcDeleteContext(GLC_Context);
+}
 
-	// Initialise the font metrics.
-	for (c = 0; c < 256; c++)
+void iV_SetFont(enum iV_fonts FontID)
+{
+	switch (FontID)
 	{
-		Index = (UWORD)AsciiTable[c];
-		Above = iV_GetImageYOffset(Font->FontFile, Index);
-		Below = Above + iV_GetImageHeight(Font->FontFile, Index);
+		case font_regular:
+			iV_SetTextSize(12.f);
+			glcFont(GLC_Font_Regular);
+			break;
 
-		Height = abs(Above) + abs(Below);
+		case font_large:
+			iV_SetTextSize(21.f);
+			glcFont(GLC_Font_Bold);
+			break;
+	}
+}
 
-		if (Above  < Font->FontAbove)
-		{
-			Font->FontAbove = Above;
-		}
+static inline float getGLCResolution()
+{
+	float resolution = glcGetf(GLC_RESOLUTION);
 
-		if (Below  > Font->FontBelow)
-		{
-			Font->FontBelow = Below;
-		}
+	// The default resolution as used by OpenGLC is 72 dpi
+	if (resolution == 0.f)
+		return 72.f;
 
-		if (Height > Font->FontLineSize)
-		{
-			Font->FontLineSize = Height;
-		}
-	}
+	return resolution;
+}
 
-	ActiveFontID = NumFonts;
+static inline float getGLCPixelSize()
+{
+	float pixel_size = font_size * getGLCResolution() / 72.f;
+	return pixel_size;
+}
 
-	NumFonts++;
+static inline float getGLCPointWidth(const float* boundingbox)
+{
+	// boundingbox contains: [ xlb ylb xrb yrb xrt yrt xlt ylt ]
+	// l = left; r = right; b = bottom; t = top;
+	float rightTopX = boundingbox[4];
+	float leftTopX = boundingbox[6];
 
-	return NumFonts - 1;
+	float point_width = rightTopX - leftTopX;
+
+	return point_width;
 }
 
-void iV_SetFont(int FontID)
+static inline float getGLCPointHeight(const float* boundingbox)
 {
-	assert(FontID < NumFonts);
-	ActiveFontID = FontID;
+	// boundingbox contains: [ xlb ylb xrb yrb xrt yrt xlt ylt ]
+	// l = left; r = right; b = bottom; t = top;
+	float leftBottomY = boundingbox[1];
+	float leftTopY = boundingbox[7];
+
+	float point_height = fabsf(leftTopY - leftBottomY);
+
+	return point_height;
 }
 
+static inline float getGLCPointToPixel(float point_width)
+{
+	float pixel_width = point_width * getGLCPixelSize();
 
-int iV_GetTextLineSize(void)
+	return pixel_width;
+}
+
+unsigned int iV_GetTextWidth(const char* string)
 {
-	IVIS_FONT *Font = &iVFonts[ActiveFontID];
-	return abs(Font->FontAbove) + abs(Font->FontBelow);
+	float boundingbox[8];
+	float pixel_width, point_width;
+
+	glcMeasureString(GL_FALSE, string);
+	if (!glcGetStringMetric(GLC_BOUNDS, boundingbox))
+	{
+		debug(LOG_ERROR, "iV_GetTextWidth: couldn't retrieve a bounding box for the string");
+		return 0;
+	}
+
+	point_width = getGLCPointWidth(boundingbox);
+	pixel_width = getGLCPointToPixel(point_width);
+	return (unsigned int)pixel_width;
 }
 
-int iV_GetTextAboveBase(void)
+unsigned int iV_GetCountedTextWidth(const char* string, size_t string_length)
 {
-	IVIS_FONT *Font = &iVFonts[ActiveFontID];
-	return Font->FontAbove;
+	float boundingbox[8];
+	float pixel_width, point_width;
+
+	glcMeasureCountedString(GL_FALSE, string_length, string);
+	if (!glcGetStringMetric(GLC_BOUNDS, boundingbox))
+	{
+		debug(LOG_ERROR, "iV_GetTextWidth: couldn't retrieve a bounding box for the string");
+		return 0;
+	}
+
+	point_width = getGLCPointWidth(boundingbox);
+	pixel_width = getGLCPointToPixel(point_width);
+	return (unsigned int)pixel_width;
 }
 
-int iV_GetTextBelowBase(void)
+unsigned int iV_GetTextHeight(const char* string)
 {
-	IVIS_FONT *Font = &iVFonts[ActiveFontID];
-	return Font->FontBelow;
+	float boundingbox[8];
+	float pixel_height, point_height;
+
+	glcMeasureString(GL_FALSE, string);
+	if (!glcGetStringMetric(GLC_BOUNDS, boundingbox))
+	{
+		debug(LOG_ERROR, "iV_GetTextHeight: couldn't retrieve a bounding box for the string");
+		return 0;
+	}
+
+	point_height = getGLCPointHeight(boundingbox);
+	pixel_height = getGLCPointToPixel(point_height);
+	return (unsigned int)pixel_height;
 }
 
+unsigned int iV_GetCharWidth(uint32_t charCode)
+{
+	float boundingbox[8];
+	float pixel_width, point_width;
 
+	if (!glcGetCharMetric(charCode, GLC_BOUNDS, boundingbox))
+	{
+		debug(LOG_ERROR, "iV_GetCharWidth: couldn't retrieve a bounding box for the character");
+		return 0;
+	}
 
-unsigned int iV_GetTextWidth(const char *String)
+	point_width = getGLCPointWidth(boundingbox);
+	pixel_width = getGLCPointToPixel(point_width);
+	return (unsigned int)pixel_width;
+}
+
+int iV_GetTextLineSize()
 {
-	unsigned int width = 0;
-	while (*String != 0)
+	float boundingbox[8];
+	float pixel_height, point_height;
+
+	if (!glcGetMaxCharMetric(GLC_BOUNDS, boundingbox))
 	{
-		width += iV_GetCharWidth(*(String++));
+		debug(LOG_ERROR, "iV_GetCharWidth: couldn't retrieve a bounding box for the character");
+		return 0;
 	}
 
-	return width;
+	point_height = getGLCPointHeight(boundingbox);
+	pixel_height = getGLCPointToPixel(point_height);
+	return (unsigned int)pixel_height;
 }
 
+static float iV_GetMaxCharBaseY()
+{
+	float base_line[4]; // [ xl yl xr yr ]
 
-unsigned int iV_GetCharWidth(char Char)
+	if (!glcGetMaxCharMetric(GLC_BASELINE, base_line))
+	{
+		debug(LOG_ERROR, "iV_GetMaxCharBaseY: couldn't retrieve the baseline for the character");
+		return 0;
+	}
+
+	return base_line[1];
+}
+
+int iV_GetTextAboveBase(void)
 {
-	UWORD ImageID;
-	IVIS_FONT* Font = &iVFonts[ActiveFontID];
+	float point_base_y = iV_GetMaxCharBaseY();
+	float point_top_y;
+	float boundingbox[8];
+	float pixel_height, point_height;
 
-	if (Char == ASCII_COLOURMODE)
+	if (!glcGetMaxCharMetric(GLC_BOUNDS, boundingbox))
+	{
+		debug(LOG_ERROR, "iV_GetCharWidth: couldn't retrieve a bounding box for the character");
 		return 0;
+	}
 
-	if (Char == ASCII_SPACE)
-		return Font->FontSpaceSize;
+	point_top_y = boundingbox[7];
+	point_height = point_base_y - point_top_y;
+	pixel_height = getGLCPointToPixel(point_height);
+	return (int)pixel_height;
+}
 
-	ImageID = Font->AsciiTable[(unsigned char)Char];
-	return iV_GetImageWidth(Font->FontFile, ImageID) + 1;
+int iV_GetTextBelowBase(void)
+{
+	float point_base_y = iV_GetMaxCharBaseY();
+	float point_bottom_y;
+	float boundingbox[8];
+	float pixel_height, point_height;
+
+	if (!glcGetMaxCharMetric(GLC_BOUNDS, boundingbox))
+	{
+		debug(LOG_ERROR, "iV_GetCharWidth: couldn't retrieve a bounding box for the character");
+		return 0;
+	}
+
+	point_bottom_y = boundingbox[1];
+	point_height = point_bottom_y - point_base_y;
+	pixel_height = getGLCPointToPixel(point_height);
+	return (int)pixel_height;
 }
 
 void iV_SetTextColour(SWORD Index)
 {
-	IVIS_FONT *Font = &iVFonts[ActiveFontID];
-	Font->FontColourIndex = Index;
+	switch (Index)
+	{
+		case PIE_TEXT_WHITE:
+			font_colour[0] = 1.f;
+			font_colour[1] = 1.f;
+			font_colour[2] = 1.f;
+			font_colour[3] = 1.f;
+			break;
+
+		case PIE_TEXT_LIGHTBLUE:
+			font_colour[0] = 0.627451f;
+			font_colour[1] = 0.627451f;
+			font_colour[2] = 1.f;
+			font_colour[3] = 1.f;
+			break;
+
+		case PIE_TEXT_DARKBLUE:
+			font_colour[0] = 0.376471f;
+			font_colour[1] = 0.376471f;
+			font_colour[2] = 0.752941f;
+			font_colour[3] = 1.f;
+			break;
+	};
 }
 
 // --------------------------------------------------------------------------
@@ -266,6 +431,7 @@
 		while (*curChar != 0 && WWidth < Width && !NewLine)
 		{
 			const char* startOfWord = curChar;
+			const unsigned int FStringWidth = iV_GetTextWidth(FString);
 
 			// Get the next word.
 			i = 0;
@@ -282,8 +448,8 @@
 					continue;
 				}
 
-				// Update this lines pixel width.
-				WWidth += iV_GetCharWidth(*curChar);
+				// Update this line's pixel width.
+				WWidth = FStringWidth + iV_GetCountedTextWidth(FWord, i + 1);
 
 				// If this word doesn't fit on the current line then break out
 				if (WWidth > Width)
@@ -363,6 +529,7 @@
 		}
 
 		// draw the text.
+		//iV_SetTextSize(12.f);
 		iV_DrawText(FString, jx, jy);
 
 
@@ -399,116 +566,38 @@
 	return jy;
 }
 
+void iV_DrawTextRotated(const char* string, float XPos, float YPos, float rotation)
+{
+	pie_SetTexturePage(-2);
 
+	// Enable Anti Aliasing
+	glEnable(GL_BLEND);
+	glBlendFunc(GL_SRC_ALPHA, GL_ONE);
+	glEnable(GL_POLYGON_SMOOTH);
 
-void iV_DrawTextRotated(const char* string, float x, float y, float rotation)
-{
-	unsigned int curX;
+	if (rotation != 0.f)
+		rotation = 360.f - rotation;
 
-	IVIS_FONT *Font = &iVFonts[ActiveFontID];
-
-	// Move to the correct position and rotation for text rendering
-	glTranslatef(x, y, 0.f);
+	glTranslatef(XPos, YPos, 0.f);
+	glRotatef(180.f, 1.f, 0.f, 0.f);
 	glRotatef(rotation, 0.f, 0.f, 1.f);
+	glScalef(font_size, font_size, 0.f);
 
-	/* Colour selection */
-	pie_BeginTextRender(Font->FontColourIndex);
+	glColor4fv(font_colour);
 
-	for (curX = 0; *string != 0; ++string)
-	{
-		unsigned int Index = (unsigned char)*string;
-		UWORD ImageID;
+	glFrontFace(GL_CW);
+	glcRenderString(string);
+	glFrontFace(GL_CCW);
 
-		// Toggle colour mode?
-		if (Index == ASCII_COLOURMODE)
-		{
-			static SWORD OldTextColourIndex = -1;
+	// Turn off anti aliasing
+	glDisable(GL_BLEND);
+	glDisable(GL_POLYGON_SMOOTH);
 
-			if (TextColourIndex >= 0)
-			{
-				OldTextColourIndex = TextColourIndex;
-				TextColourIndex = -1;
-			}
-			else
-			{
-				if (OldTextColourIndex >= 0)
-				{
-					TextColourIndex = OldTextColourIndex;
-				}
-			}
-
-			// Don't draw this character
-			continue;
-		}
-		else if (Index == ASCII_SPACE)
-		{
-			curX += Font->FontSpaceSize;
-
-			// Don't draw this character
-			continue;
-		}
-
-		// Draw the character
-		ImageID = Font->AsciiTable[Index];
-		pie_TextRender(Font->FontFile, ImageID, curX, 0);
-
-		// Advance the drawing position
-		curX += iV_GetImageWidth(Font->FontFile, ImageID) + 1;
-	}
-
-	// Reset the tranlation matrix
+	// Reset the current model view matrix
 	glLoadIdentity();
 }
 
-void pie_BeginTextRender(SWORD ColourIndex)
+void iV_SetTextSize(float size)
 {
-	TextColourIndex = ColourIndex;
-	pie_SetRendMode(REND_TEXT);
-	pie_SetBilinear(FALSE);
+	font_size = size;
 }
-
-#define PIE_TEXT_WHITE_COLOUR		(0xffffffff)
-#define PIE_TEXT_LIGHTBLUE_COLOUR	(0xffa0a0ff)
-#define PIE_TEXT_DARKBLUE_COLOUR	(0xff6060c0)
-
-static void pie_TextRender(IMAGEFILE *ImageFile, UWORD ID, int x, int y)
-{
-	UDWORD Red;
-	UDWORD Green;
-	UDWORD Blue;
-	UDWORD Alpha = MAX_UB_LIGHT;
-	iColour* psPalette;
-
-
-	if (TextColourIndex == PIE_TEXT_WHITE
-	 || TextColourIndex == 255)
-	{
-		pie_SetColour(MAX_LIGHT);
-	}
-	else
-	{
-		if (TextColourIndex == PIE_TEXT_WHITE)
-		{
-			pie_SetColour(PIE_TEXT_WHITE_COLOUR);
-		}
-		else if (TextColourIndex == PIE_TEXT_LIGHTBLUE)
-		{
-			pie_SetColour(PIE_TEXT_LIGHTBLUE_COLOUR);
-		}
-		else if (TextColourIndex == PIE_TEXT_DARKBLUE)
-		{
-			pie_SetColour(PIE_TEXT_DARKBLUE_COLOUR);
-		}
-		else
-		{
-			psPalette = pie_GetGamePal();
-			Red  = psPalette[TextColourIndex].r;
-			Green = psPalette[TextColourIndex].g;
-			Blue = psPalette[TextColourIndex].b;
-			pie_SetColour(((Alpha << 24) | (Red << 16) | (Green << 8) | Blue));
-		}
-	}
-	pie_SetColourKeyedBlack(TRUE);
-	pie_DrawImageFileID(ImageFile, ID, x, y);
-	pie_SetColourKeyedBlack(FALSE);
-}
Index: src/design.c
===================================================================
--- src/design.c	(revision 2520)
+++ src/design.c	(working copy)
@@ -279,9 +279,6 @@
 /* the widget screen */
 extern W_SCREEN		*psWScreen;
 
-/* the widget font */
-extern int WFont;
-
 extern	UDWORD				objID;					// unique ID creation thing..
 
 /* default droid design template */
@@ -470,7 +467,7 @@
 	sEdInit.width = DES_NAMEBOXWIDTH;
 	sEdInit.height = DES_NAMEBOXHEIGHT;
 	sEdInit.pText = _("New Vehicle");
-	sEdInit.FontID = WFont;
+	sEdInit.FontID = font_regular;
 	sEdInit.pBoxDisplay = intDisplayEditBox;
 	if (!widgAddEditBox(psWScreen, &sEdInit))
 	{
@@ -539,7 +536,7 @@
 	sButInit.width = iV_GetImageWidth(IntImages, IMAGE_DES_BODY);
 	sButInit.height = iV_GetImageHeight(IntImages, IMAGE_DES_BODY);
 	sButInit.pTip = _("Vehicle Body");
-	sButInit.FontID = WFont;
+	sButInit.FontID = font_regular;
 #ifdef FLASH_BUTTONS
 	sButInit.pDisplay = intDisplayButtonFlash;
 #else
@@ -561,7 +558,7 @@
 	sButInit.width = iV_GetImageWidth(IntImages, IMAGE_DES_PROPULSION);
 	sButInit.height = iV_GetImageHeight(IntImages, IMAGE_DES_PROPULSION);
 	sButInit.pTip = _("Vehicle Propulsion");
-	sButInit.FontID = WFont;
+	sButInit.FontID = font_regular;
 #ifdef FLASH_BUTTONS
 	sButInit.pDisplay = intDisplayButtonFlash;
 #else
@@ -584,7 +581,7 @@
 	sButInit.width = iV_GetImageWidth(IntImages, IMAGE_DES_TURRET);
 	sButInit.height = iV_GetImageHeight(IntImages, IMAGE_DES_TURRET);
 	sButInit.pTip = _("Vehicle Turret");
-	sButInit.FontID = WFont;
+	sButInit.FontID = font_regular;
 #ifdef FLASH_BUTTONS
 	sButInit.pDisplay = intDisplayButtonFlash;
 #else
@@ -609,7 +606,7 @@
 	sButInit.width = iV_GetImageWidth(IntImages, IMAGE_DES_TURRET);
 	sButInit.height = iV_GetImageHeight(IntImages, IMAGE_DES_TURRET);
 	sButInit.pTip = _("Vehicle Turret");
-	sButInit.FontID = WFont;
+	sButInit.FontID = font_regular;
 #ifdef FLASH_BUTTONS
 	sButInit.pDisplay = intDisplayButtonFlash;
 #else
@@ -635,7 +632,7 @@
 	sButInit.width = iV_GetImageWidth(IntImages, IMAGE_DES_TURRET);
 	sButInit.height = iV_GetImageHeight(IntImages, IMAGE_DES_TURRET);
 	sButInit.pTip = _("Vehicle Turret");
-	sButInit.FontID = WFont;
+	sButInit.FontID = font_regular;
 #ifdef FLASH_BUTTONS
 	sButInit.pDisplay = intDisplayButtonFlash;
 #else
@@ -656,7 +653,7 @@
 	sButInit.x = DES_PARTSEPARATIONX;
 	sButInit.y = (UWORD)(DES_PARTFORMHEIGHT - sButInit.height - DES_PARTSEPARATIONY);
 	sButInit.pTip = _("Delete Design");
-	sButInit.FontID = WFont;
+	sButInit.FontID = font_regular;
 	sButInit.pDisplay = intDisplayButtonHilight;
 	sButInit.pUserData = (void*)PACKDWORD_TRI(0,IMAGE_DES_BINH, IMAGE_DES_BIN);
 	if (!widgAddButton(psWScreen, &sButInit))
@@ -759,7 +756,7 @@
 	sLabInit.height = DES_CLICKBARHEIGHT;
 //	sLabInit.pText = "Armour against Kinetic weapons";
 	sLabInit.pTip = _("Kinetic Armour");
-	sLabInit.FontID = WFont;
+	sLabInit.FontID = font_regular;
 	sLabInit.pDisplay = intDisplayImage;
     //just to confuse things even more - the graphics were named incorrectly!
 	sLabInit.pUserData = (void*)IMAGE_DES_ARMOUR_EXPLOSIVE;//IMAGE_DES_ARMOUR_KINETIC;
@@ -1596,7 +1593,7 @@
 	sLabInit.y = DES_CLICKBARY - DES_CLICKBARHEIGHT/3;
 	sLabInit.width = DES_CLICKBARNAMEWIDTH;
 	sLabInit.height = DES_CLICKBARHEIGHT;
-	sLabInit.FontID = WFont;
+	sLabInit.FontID = font_regular;
 
 	/* See what type of system stats we've got */
 	if (psStats->ref >= REF_SENSOR_START &&
@@ -1974,7 +1971,7 @@
 	sLabInit.y = DES_CLICKBARY - DES_CLICKBARHEIGHT/3;
 	sLabInit.width = DES_CLICKBARNAMEWIDTH;
 	sLabInit.height = DES_CLICKBARNAMEHEIGHT;	//DES_CLICKBARHEIGHT;
-	sLabInit.FontID = WFont;
+	sLabInit.FontID = font_regular;
 
 	/* See what type of propulsion we've got */
 	switch (desPropMode)
@@ -2201,7 +2198,7 @@
 	sButInit.width = iV_GetImageWidth(IntImages, IMAGE_DES_WEAPONS);
 	sButInit.height = iV_GetImageHeight(IntImages, IMAGE_DES_WEAPONS);
 	sButInit.pTip = _("Weapons");
-	sButInit.FontID = WFont;
+	sButInit.FontID = font_regular;
 	sButInit.pDisplay = intDisplayButtonHilight;
 	sButInit.pUserData = (void*)PACKDWORD_TRI(0,IMAGE_DES_EXTRAHI , IMAGE_DES_WEAPONS);
 	if (!widgAddButton(psWScreen, &sButInit))
@@ -2225,7 +2222,7 @@
 	    sButInit.width = iV_GetImageWidth(IntImages, IMAGE_DES_SYSTEMS);
 	    sButInit.height = iV_GetImageHeight(IntImages, IMAGE_DES_SYSTEMS);
 	    sButInit.pTip = _("Systems");
-	    sButInit.FontID = WFont;
+	    sButInit.FontID = font_regular;
 	    sButInit.pDisplay = intDisplayButtonHilight;
 	    sButInit.pUserData = (void*)PACKDWORD_TRI(0,IMAGE_DES_EXTRAHI , IMAGE_DES_SYSTEMS);
 	    if (!widgAddButton(psWScreen, &sButInit))
@@ -2244,7 +2241,7 @@
 	sButInit.width = iV_GetImageWidth(IntImages, IMAGE_DES_COMMAND);
 	sButInit.height = iV_GetImageHeight(IntImages, IMAGE_DES_COMMAND);
 	sButInit.pTip = _("Command Turrets");
-	sButInit.FontID = WFont;
+	sButInit.FontID = font_regular;
 	sButInit.pDisplay = intDisplayButtonHilight;
 	sButInit.pUserData = (void*)PACKDWORD_TRI(0,IMAGE_DES_EXTRAHI , IMAGE_DES_COMMAND);
 	if (!widgAddButton(psWScreen, &sButInit))
Index: src/frontend.c
===================================================================
--- src/frontend.c	(revision 2520)
+++ src/frontend.c	(working copy)
@@ -64,7 +64,6 @@
 static int StartWithGame = 1; // New game starts in Cam 1.
 
 tMode titleMode; // the global case
-int				FEFont;
 char			pLevelName[MAX_LEVEL_NAME_SIZE+1];	//256];			// vital! the wrf file to use.
 
 BOOL			bForceEditorLoaded = FALSE;
@@ -223,14 +222,7 @@
 	addBottomForm();
 
 	addTextButton(FRONTEND_SINGLEPLAYER, FRONTEND_POS2X, FRONTEND_POS2Y, _("Single Player Campaign"), FALSE, FALSE);
-	if(!bDisableLobby)
-	{
-		addTextButton(FRONTEND_MULTIPLAYER, FRONTEND_POS3X,FRONTEND_POS3Y, _("Multi Player Game"), FALSE, FALSE);
-	}
-	else
-	{
-		addTextButton(FRONTEND_MULTIPLAYER, FRONTEND_POS3X, FRONTEND_POS3Y, _("Multi Player Game"),FALSE,TRUE);
-	}
+	addTextButton(FRONTEND_MULTIPLAYER, FRONTEND_POS3X, FRONTEND_POS3Y, _("Multi Player Game"), FALSE, bDisableLobby);
 	addTextButton(FRONTEND_TUTORIAL, FRONTEND_POS4X, FRONTEND_POS4Y, _("Tutorial") ,FALSE,FALSE);
 	addTextButton(FRONTEND_OPTIONS, FRONTEND_POS5X, FRONTEND_POS5Y, _("Options") ,FALSE,FALSE);
 
@@ -1205,7 +1197,7 @@
 
 	sButInit.height = FRONTEND_BUTHEIGHT;
 	sButInit.pDisplay = displayTextOption;
-	sButInit.FontID = FEFont;
+	sButInit.FontID = font_large;
 	sButInit.pText = txt;
 	widgAddButton(psWScreen, &sButInit);
 
@@ -1253,7 +1245,7 @@
 	sLabInit.width = 30;
 	sLabInit.height = FRONTEND_BOTFORMH;
 
-	sLabInit.FontID = FEFont;
+	sLabInit.FontID = font_large;
 
 	sLabInit.pDisplay = displayTextAt270;
 	sLabInit.pText = txt;
@@ -1296,7 +1288,7 @@
 #endif
 	;
 
-	iV_SetFont(WFont);
+	iV_SetFont(font_regular);
 	iV_SetTextColour(PIE_TEXT_WHITE);
 
 	iV_DrawTextRotated(versionString, pie_GetVideoBufferWidth() - 10, pie_GetVideoBufferHeight() - 15, 270.f);
@@ -1372,7 +1364,7 @@
 
 	psLab = (W_LABEL *)psWidget;
 
-	iV_SetFont(FEFont);
+	iV_SetFont(font_large);
 
 
 	iV_SetTextColour(PIE_TEXT_WHITE);
Index: src/frontend.h
===================================================================
--- src/frontend.h	(revision 2520)
+++ src/frontend.h	(working copy)
@@ -63,8 +63,6 @@
 
 #define MAX_LEVEL_NAME_SIZE	(256)
 
-extern int FEFont;
-
 extern char	pLevelName[MAX_LEVEL_NAME_SIZE+1];	//256];			// vital! the wrf file to use.
 
 extern BOOL	bUsingKeyboard;	// to disable mouse pointer when using keys.
Index: src/hci.c
===================================================================
--- src/hci.c	(revision 2520)
+++ src/hci.c	(working copy)
@@ -274,11 +274,6 @@
 /* The widget screen */
 W_SCREEN		*psWScreen;
 
-
-/* the widget font */
-int WFont;	// Ivis Font ID.
-
-
 /* The current player */
 UDWORD				selectedPlayer=0;
 
@@ -658,10 +653,6 @@
 
 	LOADBARCALLBACK();	//	loadingScreenCallback();
 
-
-	WFont = iV_CreateFontIndirect(IntImages,AsciiLookup,4);
-
-
 	if (!widgCreateScreen(&psWScreen))
 	{
 		debug( LOG_ERROR, "intInitialise: Couldn't create widget screen (Out of memory ?)" );
@@ -669,7 +660,7 @@
 		return FALSE;
 	}
 
-	widgSetTipFont(psWScreen, WFont);
+	widgSetTipFont(psWScreen, font_regular);
 
 	if(GetGameMode() == GS_NORMAL) {
 
@@ -1029,7 +1020,7 @@
 	sLabInit.width = ED_WIDTH;
 	sLabInit.height = ED_BUTHEIGHT;
 	sLabInit.pText = "Edit";
-	sLabInit.FontID = WFont;
+	sLabInit.FontID = font_regular;
 	if (!widgAddLabel(psWScreen, &sLabInit))
 	{
 		return FALSE;
@@ -1043,7 +1034,7 @@
 	sButInit.y = ED_GAP;
 	sButInit.width = CLOSE_SIZE;
 	sButInit.height = CLOSE_SIZE;
-	sButInit.FontID = WFont;
+	sButInit.FontID = font_regular;
 	sButInit.pText = pCloseText;
 	sButInit.pTip = _("Close");
 	if (!widgAddButton(psWScreen, &sButInit))
@@ -3716,7 +3707,7 @@
 		sButInit.id = IDRET_COMMAND;
 		sButInit.width = RET_BUTWIDTH;
 		sButInit.height = RET_BUTHEIGHT;
-		sButInit.FontID = WFont;
+		sButInit.FontID = font_regular;
 
 		//add buttons as required...
 
@@ -3961,7 +3952,7 @@
 	sLabInit.width = OPT_BUTWIDTH;
 	sLabInit.height = OPT_BUTHEIGHT;
 	sLabInit.pText = "Options";
-	sLabInit.FontID = WFont;
+	sLabInit.FontID = font_regular;
 	if (!widgAddLabel(psWScreen, &sLabInit))
 	{
 		return FALSE;
@@ -3976,7 +3967,7 @@
 	sButInit.y = OPT_GAP;
 	sButInit.width = CLOSE_SIZE;
 	sButInit.height = CLOSE_SIZE;
-	sButInit.FontID = WFont;
+	sButInit.FontID = font_regular;
 	sButInit.pText = pCloseText;
 	sButInit.pTip = _("Close");
 	if (!widgAddButton(psWScreen, &sButInit))
@@ -4005,7 +3996,7 @@
 	sLabInit.x = OPT_GAP;
 	sLabInit.y = OPT_GAP;
 	sLabInit.pText = "Map:";
-	sLabInit.FontID = WFont;
+	sLabInit.FontID = font_regular;
 	if (!widgAddLabel(psWScreen, &sLabInit))
 	{
 		return FALSE;
@@ -4074,7 +4065,7 @@
 	sEdInit.height = OPT_BUTHEIGHT;
 	sEdInit.pText = aText;
 	sprintf(aText, "%d", mapWidth);
-	sEdInit.FontID = WFont;
+	sEdInit.FontID = font_regular;
 	if (!widgAddEditBox(psWScreen, &sEdInit))
 	{
 		return FALSE;
@@ -4166,7 +4157,7 @@
 	sLabInit.x = OPT_GAP;
 	sLabInit.y = OPT_GAP;
 	sLabInit.pText = "Current Player:";
-	sLabInit.FontID = WFont;
+	sLabInit.FontID = font_regular;
 	if (!widgAddLabel(psWScreen, &sLabInit))
 	{
 		return FALSE;
@@ -4180,7 +4171,7 @@
 	sButInit.y = OPT_BUTHEIGHT + OPT_GAP*2;
 	sButInit.width = OPT_BUTWIDTH;
 	sButInit.height = OPT_BUTHEIGHT;
-	sButInit.FontID = WFont;
+	sButInit.FontID = font_regular;
 	for(player = 0; player < MAX_PLAYERS; player++)
 	{
 		sButInit.pText = apPlayerText[player];
@@ -4421,7 +4412,7 @@
 	sButInit.width = CLOSE_WIDTH;
 	sButInit.height = CLOSE_HEIGHT;
 	sButInit.pTip = _("Close");
-	sButInit.FontID = WFont;
+	sButInit.FontID = font_regular;
 	sButInit.pDisplay = intDisplayImageHilight;
 	sButInit.pUserData = (void*)PACKDWORD_TRI(0,IMAGE_CLOSEHILIGHT , IMAGE_CLOSE);
 	if (!widgAddButton(psWScreen, &sButInit))
@@ -4517,7 +4508,7 @@
 	sLabInit.width = 16;
 	sLabInit.height = 16;
 	sLabInit.pText = "10";
-	sLabInit.FontID = WFont;
+	sLabInit.FontID = font_regular;
 
 	memset(&sLabInitCmdFac,0,sizeof(W_LABINIT));
 	sLabInitCmdFac.id = IDOBJ_CMDFACSTART;
@@ -4527,7 +4518,7 @@
 	sLabInitCmdFac.width = 16;
 	sLabInitCmdFac.height = 16;
 	sLabInitCmdFac.pText = "10";
-	sLabInitCmdFac.FontID = WFont;
+	sLabInitCmdFac.FontID = font_regular;
 
 	memset(&sLabInitCmdFac2,0,sizeof(W_LABINIT));
 	sLabInitCmdFac2.id = IDOBJ_CMDVTOLFACSTART;
@@ -4537,7 +4528,7 @@
 	sLabInitCmdFac2.width = 16;
 	sLabInitCmdFac2.height = 16;
 	sLabInitCmdFac2.pText = "10";
-	sLabInitCmdFac2.FontID = WFont;
+	sLabInitCmdFac2.FontID = font_regular;
 
 	memset(&sLabIntObjText,0,sizeof(W_LABINIT));
 	sLabIntObjText.id = IDOBJ_FACTORYSTART;
@@ -4547,7 +4538,7 @@
 	sLabIntObjText.width = 16;
 	sLabIntObjText.height = 16;
 	sLabIntObjText.pText = "xxx/xxx - overrun";
-	sLabIntObjText.FontID = WFont;
+	sLabIntObjText.FontID = font_regular;
 
 	memset(&sLabInitCmdExp,0,sizeof(W_LABINIT));
 	sLabInitCmdExp.id = IDOBJ_CMDEXPSTART;
@@ -4557,7 +4548,7 @@
 	sLabInitCmdExp.width = 16;
 	sLabInitCmdExp.height = 16;
 	sLabInitCmdExp.pText = "@@@@@ - overrun";
-	sLabInitCmdExp.FontID = WFont;
+	sLabInitCmdExp.FontID = font_regular;
 
 
 	displayForm = 0;
@@ -5309,7 +5300,7 @@
 	sLabInit.width = 16;
 	sLabInit.height = 16;
 	sLabInit.pText = "10";
-	sLabInit.FontID = WFont;
+	sLabInit.FontID = font_regular;
 
 
 	if (psStats)
@@ -5479,7 +5470,7 @@
 		sButInit.height = iV_GetImageHeight(IntImages,IMAGE_INFINITE_DOWN);
 	//	sButInit.pText = pCloseText;
 		sButInit.pTip = "Infinite Production";
-		sButInit.FontID = WFont;
+		sButInit.FontID = font_regular;
 		sButInit.pDisplay = intDisplayButtonPressed;
 		sButInit.pUserData = (void*)PACKDWORD_TRI(IMAGE_INFINITE_DOWN,
 			IMAGE_INFINITE_HI, IMAGE_INFINITE_UP);
@@ -5497,7 +5488,7 @@
 		sLabInit.y = STAT_SLDY + 3;
 		sLabInit.width = 16;
 		sLabInit.height = 16;
-		sLabInit.FontID = WFont;
+		sLabInit.FontID = font_regular;
 		sLabInit.pUserData = (void*)psOwner;//1;
 		//sLabInit.pCallback = intUpdateSlider;
 		sLabInit.pDisplay = intDisplayNumber;
@@ -5558,7 +5549,7 @@
 		sButInit.width = iV_GetImageWidth(IntImages,IMAGE_FDP_DOWN);
 		sButInit.height = iV_GetImageHeight(IntImages,IMAGE_FDP_DOWN);
 		sButInit.pTip = _("Factory Delivery Point");
-		sButInit.FontID = WFont;
+		sButInit.FontID = font_regular;
 		sButInit.pDisplay = intDisplayDPButton;
 		sButInit.pUserData = (void*)psOwner;
 
@@ -5577,7 +5568,7 @@
 		sButInit.width = iV_GetImageWidth(IntImages,IMAGE_LOOP_DOWN);
 		sButInit.height = iV_GetImageHeight(IntImages,IMAGE_LOOP_DOWN);
 		sButInit.pTip = _("Loop Production");
-		sButInit.FontID = WFont;
+		sButInit.FontID = font_regular;
 		sButInit.pDisplay = intDisplayButtonPressed;
 		sButInit.pUserData = (void*)PACKDWORD_TRI(IMAGE_LOOP_DOWN,
 			IMAGE_LOOP_HI, IMAGE_LOOP_UP);
@@ -5605,7 +5596,7 @@
 		sLabInit.y = sButInit.y;
 		sLabInit.width = 12;
 		sLabInit.height = 15;
-		sLabInit.FontID = WFont;
+		sLabInit.FontID = font_regular;
 		sLabInit.pUserData = (void*)psOwner;
 		sLabInit.pCallback = intAddLoopQuantity;
 		if (!widgAddLabel(psWScreen, &sLabInit))
@@ -5625,7 +5616,7 @@
 
 		sLabInit.width = 12;
 		sLabInit.height = 15;
-		sLabInit.FontID = WFont;
+		sLabInit.FontID = font_regular;
 		sLabInit.pCallback = intAddProdQuantity;
 
 	}
@@ -5644,7 +5635,7 @@
 	sButInit.width = CLOSE_WIDTH;
 	sButInit.height = CLOSE_HEIGHT;
 	sButInit.pTip = _("Close");
-	sButInit.FontID = WFont;
+	sButInit.FontID = font_regular;
 	sButInit.pDisplay = intDisplayImageHilight;
 	sButInit.pUserData = (void*)PACKDWORD_TRI(0,IMAGE_CLOSEHILIGHT , IMAGE_CLOSE);
 	if (!widgAddButton(psWScreen, &sButInit))
Index: src/hci.h
===================================================================
--- src/hci.h	(revision 2520)
+++ src/hci.h	(working copy)
@@ -276,10 +276,6 @@
 /* The widget screen */
 extern W_SCREEN		*psWScreen;
 
-/* the widget font */
-extern int WFont;
-extern int SmallWFont;
-
 /* Which is the currently selected player */
 extern UDWORD			selectedPlayer;
 
Index: src/ingameop.c
===================================================================
--- src/ingameop.c	(revision 2520)
+++ src/ingameop.c	(working copy)
@@ -80,7 +80,7 @@
 	sButInit.width		= INTINGAMEOP_OP_W;
 	sButInit.height		= INTINGAMEOP_OP_H;
 
-	sButInit.FontID		= WFont;
+	sButInit.FontID		= font_regular;
 	sButInit.pDisplay	= displayTextOption;
 	sButInit.pText		= string;
 	widgAddButton(psWScreen, &sButInit);
Index: src/init.c
===================================================================
--- src/init.c	(revision 2520)
+++ src/init.c	(working copy)
@@ -1153,8 +1153,6 @@
 #endif
 
 	FrontImages = (IMAGEFILE*)resGetData("IMG", "frend.img");
-	FEFont = iV_CreateFontIndirect(FrontImages,FEAsciiLookup,4);
-
    	/* Shift the interface initialisation here temporarily so that it
    		can pick up the stats after they have been loaded */
 	if (!intInitialise())
Index: src/intdisplay.c
===================================================================
--- src/intdisplay.c	(revision 2520)
+++ src/intdisplay.c	(working copy)
@@ -729,7 +729,7 @@
 
 	BarWidth = BarGraph->width;
 #if	DRAW_POWER_BAR_TEXT
-    iV_SetFont(WFont);
+    iV_SetFont(font_regular);
 	sprintf( szVal, "%d", realPower );
 	textWidth = iV_GetTextWidth( szVal );
 	BarWidth -= textWidth;
Index: src/intelmap.c
===================================================================
--- src/intelmap.c	(revision 2520)
+++ src/intelmap.c	(working copy)
@@ -241,7 +241,7 @@
 			sLabInit.width = INTMAP_LABELWIDTH;
 			sLabInit.height = INTMAP_LABELHEIGHT;
 			sLabInit.pText = _("PAUSED");
-			sLabInit.FontID = WFont;
+			sLabInit.FontID = font_regular;
 			if (!widgAddLabel(psWScreen, &sLabInit))
 			{
 				return FALSE;
@@ -624,7 +624,7 @@
 	//sLabInit.pText=psResearch->pName;
 	sLabInit.pText = getStatName(psResearch);
 
-	sLabInit.FontID = WFont;
+	sLabInit.FontID = font_regular;
 	if (!widgAddLabel(psWScreen, &sLabInit))
 	{
 		return FALSE;
@@ -722,7 +722,7 @@
 	y1 = y0 + height;
 	ty = y0;
 
-	iV_SetFont(WFont);
+	iV_SetFont(font_regular);
 	/* Get the travel to the next line */
 	linePitch = iV_GetTextLineSize();
 	/* Fix for spacing.... */
@@ -1358,7 +1358,7 @@
 
 	if (psMessage)
 	{
-		iV_SetFont(WFont);
+		iV_SetFont(font_regular);
 		/* Get the travel to the next line */
 		linePitch = iV_GetTextLineSize();
 		/* Fix for spacing.... */
Index: src/intorder.c
===================================================================
--- src/intorder.c	(revision 2520)
+++ src/intorder.c	(working copy)
@@ -22,6 +22,7 @@
 #include "lib/framework/frame.h"
 #include "lib/framework/strres.h"
 #include "lib/widget/widget.h"
+#include "lib/ivis_common/textdraw.h"
 #include "objects.h"
 #include "loop.h"
 #include "map.h"
@@ -469,7 +470,6 @@
 
 extern BOOL ClosingOrder;
 extern W_SCREEN *psWScreen;
-extern int WFont;
 extern UDWORD currentGameFrame;
 extern void intDisplayPlainForm(WIDGET *psWidget, UDWORD xOffset, UDWORD yOffset, UDWORD *pColours);
 
@@ -659,7 +659,7 @@
 	sButInit.width = CLOSE_WIDTH;
 	sButInit.height = CLOSE_HEIGHT;
 	sButInit.pTip = _("Close");
-	sButInit.FontID = WFont;
+	sButInit.FontID = font_regular;
 	sButInit.pDisplay = intDisplayImageHilight;
 	sButInit.pUserData = (void*)PACKDWORD_TRI(0,IMAGE_CLOSEHILIGHT , IMAGE_CLOSE);
 	if (!widgAddButton(psWScreen, &sButInit))
@@ -673,7 +673,7 @@
 	sButInit.id = IDORDER_CLOSE+1;
 	sButInit.style = WBUT_PLAIN;
 	sButInit.pDisplay = intDisplayAltButtonHilight;
-	sButInit.FontID = WFont;
+	sButInit.FontID = font_regular;
 	sButInit.y = ORDER_BUTY;
 
 	Height = 0;
Index: src/keyedit.c
===================================================================
--- src/keyedit.c	(revision 2520)
+++ src/keyedit.c	(working copy)
@@ -331,7 +331,7 @@
 	}
 
 	// draw name
-	iV_SetFont(WFont);											// font
+	iV_SetFont(font_regular);											// font
 	iV_SetTextColour(-1);										//colour
 
 	iV_DrawText(psMapping->pName, x + 2, y + (psWidget->height / 2) + 3);
Index: src/loadsave.c
===================================================================
--- src/loadsave.c	(revision 2520)
+++ src/loadsave.c	(working copy)
@@ -203,7 +203,7 @@
 	(void) PHYSFS_mkdir(sSearchPath); // just in case
 
 	widgCreateScreen(&psRequestScreen);			// init the screen.
-	widgSetTipFont(psRequestScreen,WFont);
+	widgSetTipFont(psRequestScreen,font_regular);
 
 	/* add a form to place the tabbed form on */
 	memset(&sFormInit, 0, sizeof(W_FORMINIT));
@@ -241,7 +241,7 @@
 	sLabInit.width	= LOADSAVE_W-(2*LOADSAVE_HGAP);	//LOADSAVE_W;
 	sLabInit.height = LOADSAVE_BANNER_DEPTH;		//This looks right -Q
 	sLabInit.pText	= title;
-	sLabInit.FontID = WFont;
+	sLabInit.FontID = font_regular;
 	widgAddLabel(psRequestScreen, &sLabInit);
 
 
@@ -257,7 +257,7 @@
 	sButInit.id = LOADSAVE_CANCEL;
 	sButInit.style = WBUT_PLAIN;
 	sButInit.pTip = _("Close");
-	sButInit.FontID = WFont;
+	sButInit.FontID = font_regular;
 	sButInit.pDisplay = intDisplayImageHilight;
 	widgAddButton(psRequestScreen, &sButInit);
 
@@ -268,7 +268,7 @@
 	sButInit.width		= LOADENTRY_W;
 	sButInit.height		= LOADENTRY_H;
 	sButInit.pDisplay	= displayLoadSlot;
-	sButInit.FontID		= WFont;
+	sButInit.FontID		= font_regular;
 
 	for(slotCount = 0; slotCount< totalslots; slotCount++)
 	{
@@ -447,7 +447,7 @@
 				sEdInit.width = widgGetFromID(psRequestScreen,id)->width;
 				sEdInit.height= widgGetFromID(psRequestScreen,id)->height;
 				sEdInit.pText = ((W_BUTTON *)widgGetFromID(psRequestScreen,id))->pText;
-				sEdInit.FontID= WFont;
+				sEdInit.FontID= font_regular;
 				sEdInit.pBoxDisplay = displayLoadSaveEdit;
 				widgAddEditBox(psRequestScreen, &sEdInit);
 
@@ -649,7 +649,7 @@
 	{
 		strcpy(butString,((W_BUTTON *)psWidget)->pTip);
 
-		iV_SetFont(WFont);									// font
+		iV_SetFont(font_regular);									// font
 		iV_SetTextColour(-1);								//colour
 
 		while(iV_GetTextWidth(butString) > psWidget->width)
Index: src/mission.c
===================================================================
--- src/mission.c	(revision 2520)
+++ src/mission.c	(working copy)
@@ -27,6 +27,7 @@
 
 #include "lib/framework/frame.h"
 #include "lib/framework/strres.h"
+#include "lib/ivis_common/textdraw.h"
 #include "mission.h"
 #include "lib/gamelib/gtime.h"
 #include "game.h"
@@ -2830,7 +2831,7 @@
 	sLabInit.width = sFormInit.width;//TIMER_WIDTH;
 	sLabInit.height = sFormInit.height;//TIMER_HEIGHT;
 	sLabInit.pText = "00:00:00";
-	sLabInit.FontID = WFont;
+	sLabInit.FontID = font_regular;
 	sLabInit.pCallback = intUpdateMissionTimer;
 
 	if (!widgAddLabel(psWScreen, &sLabInit))
@@ -2887,7 +2888,7 @@
 	sLabInit.y = TRAN_TIMER_Y;
 	sLabInit.width = TRAN_TIMER_WIDTH;
 	sLabInit.height = sFormInit.height;
-	sLabInit.FontID = WFont;
+	sLabInit.FontID = font_regular;
 	sLabInit.pCallback = intUpdateTransporterTimer;
 	if (!widgAddLabel(psWScreen, &sLabInit))
 	{
@@ -2904,7 +2905,7 @@
 	sLabInit.width = 16;
 	sLabInit.height = 16;
 	sLabInit.pText = "00/10";
-	sLabInit.FontID = WFont;
+	sLabInit.FontID = font_regular;
 	sLabInit.pCallback = intUpdateTransCapacity;
 	if (!widgAddLabel(psWScreen, &sLabInit))
 	{
@@ -2958,7 +2959,7 @@
 	//{
 	//	fillTimeDisplay(sLabInit.pText, mission.ETA);
 	}
-	sLabInit.FontID = WFont;
+	sLabInit.FontID = font_regular;
 	sLabInit.pCallback = intUpdateTransporterTimer;
 	if (!widgAddLabel(psWScreen, &sLabInit))
 	{
@@ -2973,7 +2974,7 @@
 	sButInit.y = 0;//TRAN_FORM_Y;
 	sButInit.width = sFormInit.width;
 	sButInit.height = sFormInit.height;
-	sButInit.FontID = WFont;
+	sButInit.FontID = font_regular;
 	sButInit.style = WBUT_PLAIN;
 	//sButInit.pText = "T";
 	sButInit.pTip = _("Load Transport");
@@ -3357,7 +3358,7 @@
 	{
 	  	sLabInit.pText = _("OBJECTIVE FAILED");//"Objective Failed;
 	}
-	sLabInit.FontID = WFont;
+	sLabInit.FontID = font_regular;
 	if (!widgAddLabel(psWScreen, &sLabInit))
 	{
 		return FALSE;
@@ -3368,7 +3369,7 @@
 	sButInit.style		= WBUT_PLAIN | WBUT_TXTCENTRE;
 	sButInit.width		= MISSION_TEXT_W;
 	sButInit.height		= MISSION_TEXT_H;
-	sButInit.FontID		= WFont;
+	sButInit.FontID		= font_regular;
 	sButInit.pTip		= NULL;
 	sButInit.pDisplay	= displayTextOption;
     //if won or in debug mode
@@ -3559,7 +3560,7 @@
 			sButInit.style		= WBUT_PLAIN | WBUT_TXTCENTRE;
 			sButInit.width		= MISSION_TEXT_W;
 			sButInit.height		= MISSION_TEXT_H;
-			sButInit.FontID		= WFont;
+			sButInit.FontID		= font_regular;
 			sButInit.pTip		= NULL;
 			sButInit.pDisplay	= displayTextOption;
 			sButInit.id			= IDMISSIONRES_QUIT;
Index: src/multiint.c
===================================================================
--- src/multiint.c	(revision 2520)
+++ src/multiint.c	(working copy)
@@ -332,7 +332,7 @@
 	W_LABINIT		sLabInit;
 
 	widgCreateScreen(&psConScreen);
-	widgSetTipFont(psConScreen,WFont);
+	widgSetTipFont(psConScreen,font_regular);
 
 	memset(&sFormInit, 0, sizeof(W_FORMINIT));		//Connection Settings
 	sFormInit.formID = 0;
@@ -358,7 +358,7 @@
 	sLabInit.width	= CON_SETTINGSWIDTH;
 	sLabInit.height = 20;
 	sLabInit.pText	= _("IP Address or Machine Name");
-	sLabInit.FontID = WFont;
+	sLabInit.FontID = font_regular;
 	widgAddLabel(psConScreen, &sLabInit);
 
 
@@ -371,7 +371,7 @@
 	sEdInit.width = CON_NAMEBOXWIDTH;
 	sEdInit.height = CON_NAMEBOXHEIGHT;
 	sEdInit.pText = "";									//_("IP Address or Machine Name");
-	sEdInit.FontID = WFont;
+	sEdInit.FontID = font_regular;
 //	sEdInit.pUserData = (void*)PACKDWORD_TRI(0,IMAGE_DES_EDITBOXLEFTH , IMAGE_DES_EDITBOXLEFT);
 //	sEdInit.pBoxDisplay = intDisplayButtonHilight;
 	sEdInit.pBoxDisplay = intDisplayEditBox;
@@ -502,7 +502,7 @@
 	sButInit.style = WBUT_PLAIN;
 	sButInit.width = GAMES_GAMEWIDTH;
 	sButInit.height = GAMES_GAMEHEIGHT;
-	sButInit.FontID = WFont;
+	sButInit.FontID = font_regular;
 	sButInit.pDisplay = displayRemoteGame;
 
 	for(i=0;i<MaxGames;i++)							// draw games
@@ -603,7 +603,7 @@
 	widgDisplayScreen(psWScreen);								// show the widgets currently running
 	if(safeSearch)
 	{
-		iV_SetFont(FEFont);
+		iV_SetFont(font_large);
 		iV_DrawText(_("Searching"), D_W+260, D_H+460);
 	}
 }
@@ -666,7 +666,7 @@
 		sLabInit.height = 20;
 		sLabInit.pText	= txt;
 //		sLabInit.pDisplay = displayFeText;
-		sLabInit.FontID = WFont;
+		sLabInit.FontID = font_regular;
 		widgAddLabel(psWScreen, &sLabInit);
 	}
 	return;
@@ -687,7 +687,7 @@
 	widgDelete(psWScreen,MULTIOP_OPTIONS);  				// clear options list
 	widgDelete(psWScreen,FRONTEND_SIDETEXT3);				// del text..
 
-	iV_SetFont(WFont);
+	iV_SetFont(font_regular);
 
 	memset(&sFormInit, 0, sizeof(W_FORMINIT));				// draw options box.
 	sFormInit.formID = FRONTEND_BACKDROP;
@@ -1165,7 +1165,7 @@
 
 		sButInit.pTip = "Team";
 
-		sButInit.FontID = WFont;
+		sButInit.FontID = font_regular;
 		sButInit.pDisplay = displayMultiBut;
 		sButInit.pUserData = (void*)PACKDWORD_TRI(FALSE,IMAGE_TEAM0+i , IMAGE_TEAM0+i);
 		sButInit.pText = "Team0";
@@ -1256,7 +1256,7 @@
 				sButInit.width = MULTIOP_TEAMSWIDTH;
 				sButInit.height = MULTIOP_TEAMSHEIGHT;
 				sButInit.pTip = "Choose team";	//Players[i].name;
-				sButInit.FontID = WFont;
+				sButInit.FontID = font_regular;
 				sButInit.pDisplay = displayTeamChooser;//intDisplayButtonHilight;
 				sButInit.pUserData = (void*) i;
 
@@ -1281,7 +1281,7 @@
 				sButInit.width = MULTIOP_PLAYERWIDTH - MULTIOP_TEAMSWIDTH;
 				sButInit.height = MULTIOP_PLAYERHEIGHT;
 				sButInit.pTip = NULL;//Players[i].name;
-				sButInit.FontID = WFont;
+				sButInit.FontID = font_regular;
 				sButInit.pDisplay = displayPlayer;//intDisplayButtonHilight;
 				sButInit.pUserData = (void*) i;
 
@@ -1407,7 +1407,7 @@
 	sEdInit.style = WEDB_PLAIN;
 	sEdInit.width = MULTIOP_CHATEDITW;
 	sEdInit.height = MULTIOP_CHATEDITH;
-	sEdInit.FontID = WFont;
+	sEdInit.FontID = font_regular;
 
 	sEdInit.pUserData = NULL;
 	sEdInit.pBoxDisplay = displayChatEdit;
@@ -2332,7 +2332,7 @@
 
 	if(widgGetFromID(psWScreen,MULTIOP_CHATBOX))
 	{
-		iV_SetFont(WFont);											// switch to small font.
+		iV_SetFont(font_regular);											// switch to small font.
 		displayConsoleMessages();									// draw the chatbox
 	}
 
@@ -2582,7 +2582,7 @@
 	// clear whiteboard
 	memset(&whiteBoard,0,sizeof(whiteBoard));
 	widgCreateScreen(&psWhiteScreen);
-	widgSetTipFont(psWhiteScreen,WFont);
+	widgSetTipFont(psWhiteScreen,font_regular);
 	memset(&sFormInit, 0, sizeof(W_FORMINIT));		//Connection Settings
 	sFormInit.formID = 0;
 	sFormInit.id = 999;
@@ -2641,7 +2641,7 @@
 	drawBlueBox(x,y,55,psWidget->height);
 
 	//draw game info
-	iV_SetFont(WFont);													// font
+	iV_SetFont(font_regular);													// font
 	iV_SetTextColour(-1);												//colour
 
 	//draw type overlay.
@@ -2772,7 +2772,7 @@
 
 		for(j=0; player2dpid[j] != NetPlay.players[i].dpid && j<MAX_PLAYERS; j++);// get the in game playernumber.
 
-		iV_SetFont(WFont);														// font
+		iV_SetFont(font_regular);														// font
 		iV_SetTextColour(-1);													// colour
 
 		// name
@@ -3135,7 +3135,7 @@
 	sEdInit.width = MULTIOP_EDITBOXW;
 	sEdInit.height = MULTIOP_EDITBOXH;
 	sEdInit.pText = tipres;
-	sEdInit.FontID = WFont;
+	sEdInit.FontID = font_regular;
 	sEdInit.pUserData = (void*)icon;
 	sEdInit.pBoxDisplay = displayMultiEditBox;
 	if (!widgAddEditBox(psWScreen, &sEdInit))
@@ -3166,7 +3166,7 @@
 	sButInit.width = (unsigned short) width;
 	sButInit.height= (unsigned short) height;
 	sButInit.pTip = tipres;
-	sButInit.FontID = WFont;
+	sButInit.FontID = font_regular;
 	sButInit.pDisplay = displayMultiBut;
 	sButInit.pUserData = (void*)PACKDWORD_TRI(hiIt,norm , hi);
 
Index: src/multilimit.c
===================================================================
--- src/multilimit.c	(revision 2520)
+++ src/multilimit.c	(working copy)
@@ -446,7 +446,7 @@
 	pie_SetDepthBufferStatus(DEPTH_CMP_ALWAYS_WRT_ON);
 
 	// draw name
-	iV_SetFont(WFont);											// font
+	iV_SetFont(font_regular);											// font
 	iV_SetTextColour(-1);										//colour
 	iV_DrawText(getName(stat->pName), x+80, y+(psWidget->height/2)+3);
 
Index: src/multimenu.c
===================================================================
--- src/multimenu.c	(revision 2520)
+++ src/multimenu.c	(working copy)
@@ -256,7 +256,7 @@
 
 	drawBlueBox(x,y,psWidget->width,psWidget->height);	//draw box
 
-	iV_SetFont(WFont);					// font
+	iV_SetFont(font_regular);					// font
 	iV_SetTextColour(-1);					//colour
 
 	while(iV_GetTextWidth(butString) > psWidget->width -10 )
@@ -388,7 +388,7 @@
 	}
 
 	widgCreateScreen(&psRScreen);			/// move this to intinit or somewhere like that.. (close too.)
-	widgSetTipFont(psRScreen,WFont);
+	widgSetTipFont(psRScreen,font_regular);
 
 	/* Calculate how many buttons will go on a single form */
 	butPerForm = ((M_REQUEST_W - 0 - 4) /
@@ -449,7 +449,7 @@
 	sButInit.width = CLOSE_WIDTH;
 	sButInit.height = CLOSE_HEIGHT;
 	sButInit.pTip = _("Close");
-	sButInit.FontID = WFont;
+	sButInit.FontID = font_regular;
 	sButInit.pDisplay = intDisplayImageHilight;
 	sButInit.pUserData = (void*)PACKDWORD_TRI(0,IMAGE_CLOSEHILIGHT , IMAGE_CLOSE);
 	widgAddButton(psRScreen, &sButInit);
@@ -465,7 +465,7 @@
 	sButInit.height		= R_BUT_H;
 	sButInit.pUserData	= (void*)0;
 	sButInit.pDisplay	= displayRequestOption;
-	sButInit.FontID		= WFont;
+	sButInit.FontID		= font_regular;
 
 	for (currFile = fileList, count = 0; *currFile != NULL && count < (butPerForm * 4); ++currFile)
 	{
@@ -579,7 +579,7 @@
 		sButInit.width		= 17;
 		sButInit.height		= 17;
 		sButInit.UserData	= 1;
-		sButInit.FontID		= WFont;
+		sButInit.FontID		= font_regular;
 		sButInit.pTip		= _("Technology level 1");
 		sButInit.pDisplay	= displayCamTypeBut;
 
@@ -735,7 +735,7 @@
 			MULTIMENU_FORM_X+MULTIMENU_FORM_W, MULTIMENU_FORM_Y+MULTIMENU_PLAYER_H, iV_COL_BLACK);
 
 	//draw titles.
-	iV_SetFont(WFont);											// font
+	iV_SetFont(font_regular);											// font
 	iV_SetTextColour(-1);										//colour
 
 	iV_DrawText(_("Alliances"), MULTIMENU_FORM_X+MULTIMENU_C0, MULTIMENU_FORM_Y+MULTIMENU_FONT_OSET);
@@ -779,7 +779,7 @@
 		displayExtraGubbins(widgGetFromID(psWScreen,MULTIMENU_FORM)->height);
 	}
 
-	iV_SetFont(WFont);											// font
+	iV_SetFont(font_regular);											// font
 	iV_SetTextColour(-1);										//colour
 
 	if(isHumanPlayer(player) || (game.type == SKIRMISH && player<game.maxPlayers) )
@@ -929,7 +929,7 @@
 
 	index = (int)psWidget->pUserData;
 
-	iV_SetFont(WFont);											// font
+	iV_SetFont(font_regular);											// font
 	iV_SetTextColour(-1);										//colour
 
 	if(strcmp(debugMenuEntry[index],""))
@@ -1045,7 +1045,7 @@
 		sButInit.y		= 5;
 		sButInit.width	= 35;
 		sButInit.height = 24;
-		sButInit.FontID = WFont;
+		sButInit.FontID = font_regular;
 		sButInit.id		= MULTIMENU_CHANNEL + player;
 		sButInit.pTip	= "channel";
 		sButInit.pDisplay = displayChannelState;
@@ -1060,7 +1060,7 @@
 		sButInit.y		= 5;
 		sButInit.width	= 35;
 		sButInit.height = 24;
-		sButInit.FontID = WFont;
+		sButInit.FontID = font_regular;
 		sButInit.id		= MULTIMENU_ALLIANCE_BASE + player;
 		sButInit.pTip	= _("Toggle Alliance State");
 		sButInit.pDisplay = displayAllianceState;
@@ -1213,7 +1213,7 @@
 	sButInit.width = CLOSE_WIDTH;
 	sButInit.height = CLOSE_HEIGHT;
 	sButInit.pTip = _("Close");
-	sButInit.FontID = WFont;
+	sButInit.FontID = font_regular;
 	sButInit.pDisplay = intDisplayImageHilight;
 	sButInit.pUserData = (void*)PACKDWORD_TRI(0,IMAGE_CLOSEHILIGHT , IMAGE_CLOSE);
 	if (!widgAddButton(psWScreen, &sButInit))
@@ -1291,7 +1291,7 @@
 	sButInit.width = CLOSE_WIDTH;
 	sButInit.height = CLOSE_HEIGHT;
 	sButInit.pTip = _("Close");
-	sButInit.FontID = WFont;
+	sButInit.FontID = font_regular;
 	sButInit.pDisplay = intDisplayImageHilight;
 	sButInit.pUserData = (void*)PACKDWORD_TRI(0,IMAGE_CLOSEHILIGHT , IMAGE_CLOSE);
 	if (!widgAddButton(psWScreen, &sButInit))
Index: src/scriptfuncs.c
===================================================================
--- src/scriptfuncs.c	(revision 2520)
+++ src/scriptfuncs.c	(working copy)
@@ -1446,7 +1446,7 @@
 
 	//play the tutorial message immediately
 	psCurrentMsg = &tutorialMessage;
-	initTextDisplay(psCurrentMsg, WFont, 255);
+	initTextDisplay(psCurrentMsg, font_regular, 255);
 	addIntelScreen(TRUE);
 
 	return TRUE;
Index: src/seqdisp.c
===================================================================
--- src/seqdisp.c	(revision 2520)
+++ src/seqdisp.c	(working copy)
@@ -203,7 +203,7 @@
 		}
 
 
-		iV_SetFont(WFont);
+		iV_SetFont(font_regular);
 		iV_SetTextColour(-1);
 
 
@@ -469,7 +469,7 @@
 	{
 		cdAudio_Pause();
 		loop_SetVideoPlaybackMode();
-		iV_SetFont(WFont);
+		iV_SetFont(font_regular);
 		iV_SetTextColour(-1);
 	}
 
@@ -751,7 +751,7 @@
 	SDWORD justification;
 static SDWORD lastX;
 
-	iV_SetFont(WFont);
+	iV_SetFont(font_regular);
 
 	ASSERT( aSeqList[currentSeq].currentText < MAX_TEXT_OVERLAYS,
 		"seq_AddTextForVideo: too many text lines" );
Index: src/transporter.c
===================================================================
--- src/transporter.c	(revision 2520)
+++ src/transporter.c	(working copy)
@@ -27,6 +27,7 @@
 #include "lib/framework/frame.h"
 #include "lib/framework/strres.h"
 #include "lib/widget/widget.h"
+#include "lib/ivis_common/textdraw.h"
 
 #include "stats.h"
 #include "hci.h"
@@ -290,7 +291,7 @@
 	sButInit.width = CLOSE_WIDTH;
 	sButInit.height = CLOSE_HEIGHT;
 	sButInit.pTip = _("Close");
-	sButInit.FontID = WFont;
+	sButInit.FontID = font_regular;
 	sButInit.pDisplay = intDisplayImageHilight;
 	sButInit.pUserData = (void*)PACKDWORD_TRI(0,IMAGE_CLOSEHILIGHT , IMAGE_CLOSE);
 	if (!widgAddButton(psWScreen, &sButInit))
@@ -379,7 +380,7 @@
 	sButInit.width = CLOSE_WIDTH;
 	sButInit.height = CLOSE_HEIGHT;
 	sButInit.pTip = _("Close");
-	sButInit.FontID = WFont;
+	sButInit.FontID = font_regular;
 	sButInit.pDisplay = intDisplayImageHilight;
 	sButInit.pUserData = (void*)PACKDWORD_TRI(0,IMAGE_CLOSEHILIGHT , IMAGE_CLOSE);
 	if (!widgAddButton(psWScreen, &sButInit))
@@ -406,7 +407,7 @@
 		sLabInit.width = 16;
 		sLabInit.height = 16;
 		sLabInit.pText = "10";
-		sLabInit.FontID = WFont;
+		sLabInit.FontID = font_regular;
 		sLabInit.pCallback = intUpdateTransCapacity;
 		if (!widgAddLabel(psWScreen, &sLabInit))
 		{
@@ -430,7 +431,7 @@
 		sButFInit.height = iV_GetImageHeight(IntImages,IMAGE_LAUNCHUP);
 		sButFInit.pTip = _("Launch Transport");
 		//sButInit.pText = "Launch";
-//		sButFInit.FontID = WFont;
+//		sButFInit.FontID = font_regular;
 		sButFInit.pDisplay = intDisplayImageHilight;
 
 		sButFInit.pUserData = (void*)PACKDWORD_TRI(0,IMAGE_LAUNCHDOWN,IMAGE_LAUNCHUP);
@@ -500,7 +501,7 @@
 	sLabInit.width = 16;
 	sLabInit.height = 16;
 	sLabInit.pText = "00/10";
-	sLabInit.FontID = WFont;
+	sLabInit.FontID = font_regular;
 	sLabInit.pCallback = intUpdateTransCapacity;
 	if (!widgAddLabel(psWScreen, &sLabInit))
 	{
@@ -876,7 +877,7 @@
 	sButInit.width = CLOSE_WIDTH;
 	sButInit.height = CLOSE_HEIGHT;
 	sButInit.pTip = _("Close");
-	sButInit.FontID = WFont;
+	sButInit.FontID = font_regular;
 	sButInit.pDisplay = intDisplayImageHilight;
 	sButInit.pUserData = (void*)PACKDWORD_TRI(0,IMAGE_CLOSEHILIGHT , IMAGE_CLOSE);
 	if (!widgAddButton(psWScreen, &sButInit))
Index: src/wrappers.c
===================================================================
--- src/wrappers.c	(revision 2520)
+++ src/wrappers.c	(working copy)
@@ -90,7 +90,6 @@
 #define LOAD_BOX_SHADES	6
 
 
-extern int WFont;
 extern BOOL bLoadSaveUp;
 
 static BOOL		firstcall = FALSE;

