X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Ftext.c;h=231fab1968c8c3488b36003f1003422f585e7c70;hb=c38b8938950533926b72af227c38513fe665a8f6;hp=2fbf1cb319cf3b48b6514d552e383ba70898bbce;hpb=1465ca1ffdf2104d25b9a46ca9bf8a3f175403fd;p=rocksndiamonds.git diff --git a/src/libgame/text.c b/src/libgame/text.c index 2fbf1cb3..231fab19 100644 --- a/src/libgame/text.c +++ b/src/libgame/text.c @@ -1,19 +1,20 @@ /*********************************************************** -* Rocks'n'Diamonds -- McDuffin Strikes Back! * +* Artsoft Retro-Game Library * *----------------------------------------------------------* -* (c) 1995-98 Artsoft Entertainment * -* Holger Schemel * -* Oststrasse 11a * -* 33604 Bielefeld * -* phone: ++49 +521 290471 * -* email: aeglos@valinor.owl.de * +* (c) 1994-2002 Artsoft Entertainment * +* Holger Schemel * +* Detmolder Strasse 189 * +* 33604 Bielefeld * +* Germany * +* e-mail: info@artsoft.org * *----------------------------------------------------------* -* text.c * +* text.c * ***********************************************************/ +#include #include -#include "libgame.h" +#include "text.h" /* ========================================================================= */ @@ -27,41 +28,46 @@ struct FontInfo font; /* 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(); } } @@ -76,8 +82,8 @@ void DrawTextFCentered(int y, int font_type, char *format, ...) vsprintf(buffer, format, ap); va_end(ap); - DrawText(playfield.sx + (playfield.sxsize - strlen(buffer) * font_width) / 2, - playfield.sy + y, buffer, FS_SMALL, font_type); + DrawText(gfx.sx + (gfx.sxsize - strlen(buffer) * font_width) / 2, + gfx.sy + y, buffer, FS_SMALL, font_type); } void DrawTextF(int x, int y, int font_type, char *format, ...) @@ -89,44 +95,54 @@ void DrawTextF(int x, int y, int font_type, char *format, ...) vsprintf(buffer, format, ap); va_end(ap); - DrawText(playfield.sx + x, playfield.sy + y, buffer, FS_SMALL, font_type); + DrawText(gfx.sx + x, gfx.sy + y, buffer, FS_SMALL, font_type); } void DrawText(int x, int y, char *text, int font_size, int font_type) { DrawTextExt(drawto, x, y, text, font_size, font_type); - if (x < playfield.dx) + if (x < gfx.dx) redraw_mask |= REDRAW_FIELD; - else if (y < playfield.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) { @@ -146,18 +162,36 @@ void DrawTextExt(DrawBuffer bitmap, int x, int y, 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 == '´') { 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 == '´') /* map '°' and 'TM' signs */ + { + if (font_type == FC_SPECIAL2) + { + src_x = (c == '°' ? 1 : 2) * font_width; + src_y = 4 * font_height; + } + else + { + src_x = FONT_CHARS_PER_LINE * font_width; + src_y = (c == '°' ? 1 : 2) * 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,