/***********************************************************
* Artsoft Retro-Game Library *
*----------------------------------------------------------*
-* (c) 1994-2000 Artsoft Entertainment *
+* (c) 1994-2002 Artsoft Entertainment *
* Holger Schemel *
* Detmolder Strasse 189 *
* 33604 Bielefeld *
/* font functions */
/* ========================================================================= */
-void InitFontInfo(Bitmap bitmap_big, Bitmap bitmap_medium,
- Bitmap bitmap_small)
+void InitFontInfo(Bitmap *bitmap_initial,
+ Bitmap *bitmap_big, Bitmap *bitmap_medium,
+ Bitmap *bitmap_small, Bitmap *bitmap_tile)
{
+ font.bitmap_initial = bitmap_initial;
font.bitmap_big = bitmap_big;
font.bitmap_medium = bitmap_medium;
font.bitmap_small = bitmap_small;
+ font.bitmap_tile = bitmap_tile;
}
int getFontWidth(int font_size, int font_type)
{
- return (font_size == FS_BIG ? FONT1_XSIZE :
- font_size == FS_MEDIUM ? FONT6_XSIZE :
- font_type == FC_SPECIAL1 ? FONT3_XSIZE :
+ return (font_type == FC_SPECIAL1 ? FONT3_XSIZE :
font_type == FC_SPECIAL2 ? FONT4_XSIZE :
font_type == FC_SPECIAL3 ? FONT5_XSIZE :
+ font_size == FS_BIG ? FONT1_XSIZE :
+ font_size == FS_MEDIUM ? FONT6_XSIZE :
+ font_size == FS_SMALL ? FONT2_XSIZE :
FONT2_XSIZE);
}
int getFontHeight(int font_size, int font_type)
{
- return (font_size == FS_BIG ? FONT1_YSIZE :
- font_size == FS_MEDIUM ? FONT6_YSIZE :
- font_type == FC_SPECIAL1 ? FONT3_YSIZE :
+ return (font_type == FC_SPECIAL1 ? FONT3_YSIZE :
font_type == FC_SPECIAL2 ? FONT4_YSIZE :
font_type == FC_SPECIAL3 ? FONT5_YSIZE :
+ font_size == FS_BIG ? FONT1_YSIZE :
+ font_size == FS_MEDIUM ? FONT6_YSIZE :
+ font_size == FS_SMALL ? FONT2_YSIZE :
FONT2_YSIZE);
}
void DrawInitText(char *text, int ypos, int color)
{
- if (window && font.bitmap_small)
+ if (window && font.bitmap_initial)
{
ClearRectangle(window, 0, ypos, video.width, FONT2_YSIZE);
DrawTextExt(window, (video.width - strlen(text) * FONT2_XSIZE)/2,
- ypos, text, FS_SMALL, color);
+ ypos, text, FS_INITIAL, color);
FlushDisplay();
}
}
if (x < gfx.dx)
redraw_mask |= REDRAW_FIELD;
- else if (y < gfx.vy)
+ else if (y < gfx.vy || gfx.vy == 0)
redraw_mask |= REDRAW_DOOR_1;
}
-void DrawTextExt(DrawBuffer bitmap, int x, int y,
- char *text, int font_size, int font_type)
+void DrawTextExt(DrawBuffer *bitmap, int x, int y, char *text,
+ int font_size, int font_type)
{
- Bitmap font_bitmap;
- int font_width, font_height, font_start;
+ Bitmap *font_bitmap;
+ int font_width, font_height, font_starty;
boolean print_inverse = FALSE;
- if (font_size != FS_SMALL && font_size != FS_BIG && font_size != FS_MEDIUM)
- font_size = FS_SMALL;
+ if (font_size != FS_BIG && font_size != FS_MEDIUM && font_size != FS_SMALL)
+ font_size = FS_INITIAL;
if (font_type < FC_RED || font_type > FC_SPECIAL3)
font_type = FC_RED;
font_width = getFontWidth(font_size, font_type);
font_height = getFontHeight(font_size, font_type);
- font_bitmap = (font_size == FS_BIG ? font.bitmap_big :
- font_size == FS_MEDIUM ? font.bitmap_medium :
- font.bitmap_small);
- font_start = (font_type * (font_size == FS_BIG ? FONT1_YSIZE :
- font_size == FS_MEDIUM ? FONT6_YSIZE :
- FONT2_YSIZE) *
- FONT_LINES_PER_FONT);
+ font_bitmap = (font_type == FC_SPECIAL2 ? font.bitmap_tile :
+ font_size == FS_BIG ? font.bitmap_big :
+ font_size == FS_MEDIUM ? font.bitmap_medium :
+ font_size == FS_SMALL ? font.bitmap_small :
+ font.bitmap_initial);
+
+ if (font_bitmap == NULL)
+ return;
+
+ if (font_type == FC_SPECIAL2)
+ font_starty = (font_size == FS_BIG ? 0 : FONT1_YSIZE) * 5;
+ else
+ font_starty = (font_type * (font_size == FS_BIG ? FONT1_YSIZE :
+ font_size == FS_MEDIUM ? FONT6_YSIZE :
+ font_size == FS_SMALL ? FONT2_YSIZE :
+ FONT2_YSIZE) *
+ FONT_LINES_PER_FONT);
if (font_type == FC_SPECIAL3)
- font_start += (FONT4_YSIZE - FONT2_YSIZE) * FONT_LINES_PER_FONT;
+ font_starty -= FONT2_YSIZE * FONT_LINES_PER_FONT;
while (*text)
{
c = 92;
else if (c == 'ü' || c == 'Ü')
c = 93;
+ else if (c == '[' || c == ']') /* map to normal braces */
+ c = (c == '[' ? '(' : ')');
+ else if (c == '\\') /* bad luck ... */
+ c = '/';
- if (c >= 32 && c <= 95)
+ if ((c >= 32 && c <= 95) || c == '°' || c == '´' || c == '|')
{
int src_x = ((c - 32) % FONT_CHARS_PER_LINE) * font_width;
- int src_y = ((c - 32) / FONT_CHARS_PER_LINE) * font_height + font_start;
+ int src_y = ((c - 32) / FONT_CHARS_PER_LINE) * font_height + font_starty;
int dest_x = x, dest_y = y;
+ if (c == '°' || c == '´' || c == '|') /* map '°' and 'TM' signs */
+ {
+ if (font_type == FC_SPECIAL2)
+ {
+ src_x = (c == '°' ? 1 : c == '´' ? 2 : 3) * font_width;
+ src_y = 4 * font_height;
+ }
+ else
+ {
+ src_x = FONT_CHARS_PER_LINE * font_width;
+ src_y = (c == '°' ? 1 : c == '´' ? 2 : 3) * font_height +font_starty;
+ }
+ }
+
if (print_inverse)
{
BlitBitmap(font_bitmap, bitmap,
FONT_CHARS_PER_LINE * font_width,
- 3 * font_height + font_start,
+ 3 * font_height + font_starty,
font_width, font_height, x, y);
SetClipOrigin(font_bitmap, font_bitmap->stored_clip_gc,
0, 0, font_width, font_height, dest_x, dest_y);
}
else
- BlitBitmap(font_bitmap, bitmap,
- src_x, src_y, font_width, font_height, dest_x, dest_y);
+ {
+#if 1
+ BlitBitmap(font_bitmap, bitmap, src_x, src_y,
+ font_width, font_height, dest_x, dest_y);
+#else
+ SetClipOrigin(font_bitmap, font_bitmap->stored_clip_gc,
+ dest_x - src_x, dest_y - src_y);
+ BlitBitmapMasked(font_bitmap, bitmap, src_x, src_y,
+ font_width, font_height, dest_x, dest_y);
+#endif
+ }
}
x += font_width;