void DrawHUDStringScaled(char *string, int x, int y, int centerwidth, int xor, float factor) { int margin; char line[1024]; int width; int i; margin = x; while (*string) { /* scan out one line of text from the string */ width = 0; while (*string && *string != '\n') { line[width++] = *string++; } line[width] = 0; if (centerwidth) { x = margin + (centerwidth - width * 8)*factor / 2; } else { x = margin; } for (i = 0; i < width; i++) { Draw_CharScaled(x, y, line[i] ^ xor, factor); x += 8*factor; } if (*string) { string++; /* skip the \n */ y += 8*factor; } } }
void SCR_DrawCenterString(void) { char *start; int l; int j; int x, y; int remaining; float scale; /* the finale prints the characters one at a time */ remaining = 9999; scr_erase_center = 0; start = scr_centerstring; scale = SCR_GetConsoleScale(); if (scr_center_lines <= 4) { y = (viddef.height * 0.35) / scale; } else { y = 48 / scale; } do { /* scan the width of the line */ for (l = 0; l < 40; l++) { if ((start[l] == '\n') || !start[l]) { break; } } x = ((viddef.width - l * 8) / 2) / scale; SCR_AddDirtyPoint(x, y); for (j = 0; j < l; j++, x += 8) { Draw_CharScaled(x * scale, y * scale, start[j], scale); if (!remaining--) { return; } } SCR_AddDirtyPoint(x, y + 8); y += 8; while (*start && *start != '\n') { start++; } if (!*start) { break; } start++; /* skip the \n */ } while (1); }