X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Ftext.c;h=16381e494438e8872531972fb045c6eb1a884a76;hb=c9433eab5c4317ed4f89164b386a7d33562e29be;hp=28f88c56019fe51dd4c6a1d711483a8493bf05c9;hpb=da14f69fd95c7bd5a0d70cdf4935af06f1f20a04;p=rocksndiamonds.git diff --git a/src/libgame/text.c b/src/libgame/text.c index 28f88c56..16381e49 100644 --- a/src/libgame/text.c +++ b/src/libgame/text.c @@ -1,21 +1,40 @@ /*********************************************************** -* 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" -#include "main_TMP.h" + +/* ========================================================================= */ +/* exported variables */ +/* ========================================================================= */ + +struct FontInfo font; + + +/* ========================================================================= */ +/* font functions */ +/* ========================================================================= */ + +void InitFontInfo(Bitmap *bitmap_big, Bitmap *bitmap_medium, + Bitmap *bitmap_small) +{ + font.bitmap_big = bitmap_big; + font.bitmap_medium = bitmap_medium; + font.bitmap_small = bitmap_small; +} int getFontWidth(int font_size, int font_type) { @@ -39,10 +58,10 @@ int getFontHeight(int font_size, int font_type) void DrawInitText(char *text, int ypos, int color) { - if (window && pix[PIX_SMALLFONT]) + if (window && font.bitmap_small) { - ClearRectangle(window, 0, ypos, WIN_XSIZE, FONT2_YSIZE); - DrawTextExt(window, gc, (WIN_XSIZE - strlen(text) * FONT2_XSIZE)/2, + ClearRectangle(window, 0, ypos, video.width, FONT2_YSIZE); + DrawTextExt(window, (video.width - strlen(text) * FONT2_XSIZE)/2, ypos, text, FS_SMALL, color); FlushDisplay(); } @@ -50,7 +69,7 @@ void DrawInitText(char *text, int ypos, int color) void DrawTextFCentered(int y, int font_type, char *format, ...) { - char buffer[FULL_SXSIZE / FONT5_XSIZE + 10]; + char buffer[MAX_OUTPUT_LINESIZE + 1]; int font_width = getFontWidth(FS_SMALL, font_type); va_list ap; @@ -58,37 +77,37 @@ void DrawTextFCentered(int y, int font_type, char *format, ...) vsprintf(buffer, format, ap); va_end(ap); - DrawText(SX + (SXSIZE - strlen(buffer) * font_width) / 2, 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, ...) { - char buffer[FULL_SXSIZE / FONT5_XSIZE + 10]; + char buffer[MAX_OUTPUT_LINESIZE + 1]; va_list ap; va_start(ap, format); vsprintf(buffer, format, ap); va_end(ap); - DrawText(SX + x, 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, gc, x, y, text, font_size, font_type); + DrawTextExt(drawto, x, y, text, font_size, font_type); - if (x < DX) + if (x < gfx.dx) redraw_mask |= REDRAW_FIELD; - else if (y < VY) + else if (y < gfx.vy || gfx.vy == 0) redraw_mask |= REDRAW_DOOR_1; } -void DrawTextExt(DrawBuffer d, GC gc, int x, int y, +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; - int font_bitmap; boolean print_inverse = FALSE; if (font_size != FS_SMALL && font_size != FS_BIG && font_size != FS_MEDIUM) @@ -99,9 +118,9 @@ void DrawTextExt(DrawBuffer d, GC gc, int x, int y, font_width = getFontWidth(font_size, font_type); font_height = getFontHeight(font_size, font_type); - font_bitmap = (font_size == FS_BIG ? PIX_BIGFONT : - font_size == FS_MEDIUM ? PIX_MEDIUMFONT : - PIX_SMALLFONT); + 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) * @@ -128,26 +147,37 @@ void DrawTextExt(DrawBuffer d, GC gc, 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 dest_x = x, dest_y = y; + if (c == '°' || c == '´') /* map '°' and 'TM' signs */ + { + src_x = FONT_CHARS_PER_LINE * font_width; + src_y = (c == '°' ? 1 : 2) * font_height + font_start; + } + if (print_inverse) { - BlitBitmap(pix[font_bitmap], d, + BlitBitmap(font_bitmap, bitmap, FONT_CHARS_PER_LINE * font_width, 3 * font_height + font_start, font_width, font_height, x, y); - SetClipOrigin(clip_gc[font_bitmap], dest_x - src_x, dest_y - src_y); - BlitBitmapMasked(pix_masked[font_bitmap], d, + SetClipOrigin(font_bitmap, font_bitmap->stored_clip_gc, + dest_x - src_x, dest_y - src_y); + BlitBitmapMasked(font_bitmap, bitmap, 0, 0, font_width, font_height, dest_x, dest_y); } else - BlitBitmap(pix[font_bitmap], d, + BlitBitmap(font_bitmap, bitmap, src_x, src_y, font_width, font_height, dest_x, dest_y); }