Set up separate background color for prompts vs. console

This commit is contained in:
mazmazz 2018-11-09 22:38:55 -05:00
parent ae4c1e0e82
commit 7daf5d4727
7 changed files with 46 additions and 15 deletions

View File

@ -232,18 +232,20 @@ UINT8 *yellowmap, *magentamap, *lgreenmap, *bluemap, *graymap, *redmap, *orangem
// Console BG color // Console BG color
UINT8 *consolebgmap = NULL; UINT8 *consolebgmap = NULL;
UINT8 *promptbgmap = NULL;
static UINT8 promptbgcolor = UINT8_MAX;
void CON_SetupBackColormap(void) void CON_SetupBackColormapEx(INT32 color, boolean prompt)
{ {
UINT16 i, palsum; UINT16 i, palsum;
UINT8 j, palindex, shift; UINT8 j, palindex, shift;
UINT8 *pal = W_CacheLumpName(GetPalette(), PU_CACHE); UINT8 *pal = W_CacheLumpName(GetPalette(), PU_CACHE);
if (!consolebgmap) if (color == INT32_MAX)
consolebgmap = (UINT8 *)Z_Malloc(256, PU_STATIC, NULL); color = cons_backcolor.value;
shift = 6; // 12 colors -- shift of 7 means 6 colors shift = 6; // 12 colors -- shift of 7 means 6 colors
switch (cons_backcolor.value) switch (color)
{ {
case 0: palindex = 15; break; // White case 0: palindex = 15; break; // White
case 1: palindex = 31; break; // Gray case 1: palindex = 31; break; // Gray
@ -257,20 +259,42 @@ void CON_SetupBackColormap(void)
case 9: palindex = 187; break; // Magenta case 9: palindex = 187; break; // Magenta
case 10: palindex = 139; break; // Aqua case 10: palindex = 139; break; // Aqua
// Default green // Default green
default: palindex = 175; break; default: palindex = 175; color = 11; break;
} }
if (prompt)
{
if (!promptbgmap)
promptbgmap = (UINT8 *)Z_Malloc(256, PU_STATIC, NULL);
if (color == promptbgcolor)
return;
else
promptbgcolor = color;
}
else if (!consolebgmap)
consolebgmap = (UINT8 *)Z_Malloc(256, PU_STATIC, NULL);
// setup background colormap // setup background colormap
for (i = 0, j = 0; i < 768; i += 3, j++) for (i = 0, j = 0; i < 768; i += 3, j++)
{ {
palsum = (pal[i] + pal[i+1] + pal[i+2]) >> shift; palsum = (pal[i] + pal[i+1] + pal[i+2]) >> shift;
consolebgmap[j] = (UINT8)(palindex - palsum); if (prompt)
promptbgmap[j] = (UINT8)(palindex - palsum);
else
consolebgmap[j] = (UINT8)(palindex - palsum);
} }
} }
void CON_SetupBackColormap(void)
{
CON_SetupBackColormapEx(cons_backcolor.value, false);
CON_SetupBackColormapEx(1, true); // default to gray
}
static void CONS_backcolor_Change(void) static void CONS_backcolor_Change(void)
{ {
CON_SetupBackColormap(); CON_SetupBackColormapEx(cons_backcolor.value, false);
} }
static void CON_SetupColormaps(void) static void CON_SetupColormaps(void)

View File

@ -38,7 +38,9 @@ extern UINT8 *yellowmap, *magentamap, *lgreenmap, *bluemap, *graymap, *redmap, *
// Console bg color (auto updated to match) // Console bg color (auto updated to match)
extern UINT8 *consolebgmap; extern UINT8 *consolebgmap;
extern UINT8 *promptbgmap;
void CON_SetupBackColormapEx(INT32 color, boolean prompt);
void CON_SetupBackColormap(void); void CON_SetupBackColormap(void);
void CON_ClearHUD(void); // clear heads up messages void CON_ClearHUD(void); // clear heads up messages

View File

@ -1779,7 +1779,7 @@ static void readtextprompt(MYFILE *f, INT32 num)
{ {
if (1 <= value && value <= MAX_PAGES) if (1 <= value && value <= MAX_PAGES)
{ {
textprompts[num]->page[value - 1].backcolor = UINT8_MAX; // non-zero default textprompts[num]->page[value - 1].backcolor = 1; // default to gray
readtextpromptpage(f, num, value - 1); readtextpromptpage(f, num, value - 1);
} }
else else

View File

@ -176,7 +176,7 @@ typedef struct
boolean rightside; // narrator side, false = left, true = right boolean rightside; // narrator side, false = left, true = right
boolean iconflip; // narrator flip icon horizontally boolean iconflip; // narrator flip icon horizontally
UINT8 lines; // # of lines to show. If name is specified, name takes one of the lines. If 0, defaults to 4. UINT8 lines; // # of lines to show. If name is specified, name takes one of the lines. If 0, defaults to 4.
UINT8 backcolor; // see CON_SetupBackColormap: 0-10, 11 for default, UINT8_MAX for user-defined (CONS_BACKCOLOR) INT32 backcolor; // see CON_SetupBackColormap: 0-11, INT32_MAX for user-defined (CONS_BACKCOLOR)
UINT8 align; // text alignment, 0 = left, 1 = right, 2 = center UINT8 align; // text alignment, 0 = left, 1 = right, 2 = center
UINT8 verticalalign; // vertical text alignment, 0 = top, 1 = bottom, 2 = middle UINT8 verticalalign; // vertical text alignment, 0 = top, 1 = bottom, 2 = middle
UINT8 textspeed; // text speed, delay in tics between characters. UINT8 textspeed; // text speed, delay in tics between characters.

View File

@ -2199,7 +2199,7 @@ void F_TextPromptDrawer(void)
F_GetPageTextGeometry(&pagelines, &rightside, &boxh, &texth, &texty, &namey, &chevrony, &textx, &textr); F_GetPageTextGeometry(&pagelines, &rightside, &boxh, &texth, &texty, &namey, &chevrony, &textx, &textr);
// Draw background // Draw background
V_DrawTutorialBack(boxh); V_DrawPromptBack(boxh, textprompts[cutnum]->page[scenenum].backcolor);
// Draw narrator icon // Draw narrator icon
if (iconlump != LUMPERROR) if (iconlump != LUMPERROR)

View File

@ -1481,17 +1481,20 @@ void V_DrawFadeConsBack(INT32 plines)
} }
// Very similar to F_DrawFadeConsBack, except we draw from the middle(-ish) of the screen to the bottom. // Very similar to F_DrawFadeConsBack, except we draw from the middle(-ish) of the screen to the bottom.
void V_DrawTutorialBack(INT32 boxheight) void V_DrawPromptBack(INT32 boxheight, INT32 color)
{ {
UINT8 *deststop, *buf; UINT8 *deststop, *buf;
boxheight *= vid.dupy; boxheight *= vid.dupy;
if (color == INT32_MAX)
color = cons_backcolor.value;
#ifdef HWRENDER #ifdef HWRENDER
if (rendermode != render_soft && rendermode != render_none) if (rendermode != render_soft && rendermode != render_none)
{ {
UINT32 hwcolor; UINT32 hwcolor;
switch (cons_backcolor.value) switch (color)
{ {
case 0: hwcolor = 0xffffff00; break; // White case 0: hwcolor = 0xffffff00; break; // White
case 1: hwcolor = 0x80808000; break; // Gray case 1: hwcolor = 0x80808000; break; // Gray
@ -1510,12 +1513,14 @@ void V_DrawTutorialBack(INT32 boxheight)
} }
#endif #endif
CON_SetupBackColormapEx(color, true);
// heavily simplified -- we don't need to know x or y position, // heavily simplified -- we don't need to know x or y position,
// just the start and stop positions // just the start and stop positions
deststop = screens[0] + vid.rowbytes * vid.height; deststop = screens[0] + vid.rowbytes * vid.height;
buf = deststop - vid.rowbytes * ((boxheight * 4) + (boxheight/2)*5); // 4 lines of space plus gaps between and some leeway buf = deststop - vid.rowbytes * ((boxheight * 4) + (boxheight/2)*5); // 4 lines of space plus gaps between and some leeway
for (; buf < deststop; ++buf) for (; buf < deststop; ++buf)
*buf = consolebgmap[*buf]; *buf = promptbgmap[*buf];
} }
// Gets string colormap, used for 0x80 color codes // Gets string colormap, used for 0x80 color codes

View File

@ -158,7 +158,7 @@ void V_DrawFlatFill(INT32 x, INT32 y, INT32 w, INT32 h, lumpnum_t flatnum);
void V_DrawFadeScreen(UINT16 color, UINT8 strength); void V_DrawFadeScreen(UINT16 color, UINT8 strength);
void V_DrawFadeConsBack(INT32 plines); void V_DrawFadeConsBack(INT32 plines);
void V_DrawTutorialBack(INT32 boxheight); void V_DrawPromptBack(INT32 boxheight, INT32 color);
// draw a single character // draw a single character
void V_DrawCharacter(INT32 x, INT32 y, INT32 c, boolean lowercaseallowed); void V_DrawCharacter(INT32 x, INT32 y, INT32 c, boolean lowercaseallowed);