mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-04-26 12:01:47 +00:00
Merge branch 'master' of https://git.do.srb2.org/KartKrew/Kart into more-conversions
This commit is contained in:
commit
2e395c8b0f
54 changed files with 1130 additions and 1197 deletions
|
|
@ -1949,10 +1949,11 @@ void CON_DrawLoadBar(void)
|
||||||
|
|
||||||
barwidth = (BASEVIDWIDTH * con_startup_loadprogress) / LOADED_ALLDONE;
|
barwidth = (BASEVIDWIDTH * con_startup_loadprogress) / LOADED_ALLDONE;
|
||||||
V_DrawFill(0, BASEVIDHEIGHT - barheight, barwidth, barheight, 0);
|
V_DrawFill(0, BASEVIDHEIGHT - barheight, barwidth, barheight, 0);
|
||||||
#ifdef DEVELOP
|
|
||||||
if (con_startup_loadprogress <= LOADED_ALLDONE)
|
if (con_startup_loadprogress <= LOADED_ALLDONE)
|
||||||
V_DrawString(4, BASEVIDHEIGHT - (barheight + 8 + 4), 0, CON_LoadingStrings[con_startup_loadprogress]);
|
{
|
||||||
#endif
|
V_DrawString(4, BASEVIDHEIGHT - (barheight + 8 + 4), V_FORCEUPPERCASE, CON_LoadingStrings[con_startup_loadprogress]);
|
||||||
|
}
|
||||||
|
|
||||||
Unlock_state();
|
Unlock_state();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1025,6 +1025,7 @@ void readlevelheader(MYFILE *f, char * name)
|
||||||
word2 = tmp += 2;
|
word2 = tmp += 2;
|
||||||
i = atoi(word2); // used for numerical settings
|
i = atoi(word2); // used for numerical settings
|
||||||
|
|
||||||
|
// The following support mixed/lower case.
|
||||||
|
|
||||||
if (fastcmp(word, "LEVELNAME"))
|
if (fastcmp(word, "LEVELNAME"))
|
||||||
{
|
{
|
||||||
|
|
@ -1032,7 +1033,14 @@ void readlevelheader(MYFILE *f, char * name)
|
||||||
sizeof(mapheaderinfo[num]->lvlttl), va("Level header %d: levelname", num));
|
sizeof(mapheaderinfo[num]->lvlttl), va("Level header %d: levelname", num));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// CHEAP HACK: move this over here for lowercase subtitles
|
|
||||||
|
if (fastcmp(word, "ZONETITLE"))
|
||||||
|
{
|
||||||
|
deh_strlcpy(mapheaderinfo[num]->zonttl, word2,
|
||||||
|
sizeof(mapheaderinfo[num]->zonttl), va("Level header %d: zonetitle", num));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (fastcmp(word, "SUBTITLE"))
|
if (fastcmp(word, "SUBTITLE"))
|
||||||
{
|
{
|
||||||
deh_strlcpy(mapheaderinfo[num]->subttl, word2,
|
deh_strlcpy(mapheaderinfo[num]->subttl, word2,
|
||||||
|
|
@ -1127,11 +1135,6 @@ void readlevelheader(MYFILE *f, char * name)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Strings that can be truncated
|
// Strings that can be truncated
|
||||||
else if (fastcmp(word, "ZONETITLE"))
|
|
||||||
{
|
|
||||||
deh_strlcpy(mapheaderinfo[num]->zonttl, word2,
|
|
||||||
sizeof(mapheaderinfo[num]->zonttl), va("Level header %d: zonetitle", num));
|
|
||||||
}
|
|
||||||
else if (fastcmp(word, "RELEVANTSKIN"))
|
else if (fastcmp(word, "RELEVANTSKIN"))
|
||||||
{
|
{
|
||||||
deh_strlcpy(mapheaderinfo[num]->relevantskin, word2,
|
deh_strlcpy(mapheaderinfo[num]->relevantskin, word2,
|
||||||
|
|
|
||||||
|
|
@ -3303,6 +3303,7 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
|
||||||
"S_INSTAWHIP_RECHARGE2",
|
"S_INSTAWHIP_RECHARGE2",
|
||||||
"S_INSTAWHIP_RECHARGE3",
|
"S_INSTAWHIP_RECHARGE3",
|
||||||
"S_INSTAWHIP_RECHARGE4",
|
"S_INSTAWHIP_RECHARGE4",
|
||||||
|
"S_INSTAWHIP_REJECT",
|
||||||
"S_BLOCKRING",
|
"S_BLOCKRING",
|
||||||
"S_BLOCKBODY",
|
"S_BLOCKBODY",
|
||||||
|
|
||||||
|
|
@ -4605,6 +4606,8 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
|
||||||
"S_HITLAG_6",
|
"S_HITLAG_6",
|
||||||
"S_HITLAG_8",
|
"S_HITLAG_8",
|
||||||
"S_HITLAG_9",
|
"S_HITLAG_9",
|
||||||
|
"S_HITLAG_10",
|
||||||
|
|
||||||
|
|
||||||
// Broly Ki Orb
|
// Broly Ki Orb
|
||||||
"S_BROLY1",
|
"S_BROLY1",
|
||||||
|
|
@ -5407,6 +5410,7 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t
|
||||||
|
|
||||||
"MT_INSTAWHIP",
|
"MT_INSTAWHIP",
|
||||||
"MT_INSTAWHIP_RECHARGE",
|
"MT_INSTAWHIP_RECHARGE",
|
||||||
|
"MT_INSTAWHIP_REJECT",
|
||||||
"MT_BLOCKRING",
|
"MT_BLOCKRING",
|
||||||
"MT_BLOCKBODY",
|
"MT_BLOCKBODY",
|
||||||
|
|
||||||
|
|
@ -6862,7 +6866,7 @@ struct int_const_s const INT_CONST[] = {
|
||||||
{"V_REVERSESUBTRACT",V_REVERSESUBTRACT},
|
{"V_REVERSESUBTRACT",V_REVERSESUBTRACT},
|
||||||
{"V_MODULATE",V_MODULATE},
|
{"V_MODULATE",V_MODULATE},
|
||||||
{"V_OVERLAY",V_OVERLAY},
|
{"V_OVERLAY",V_OVERLAY},
|
||||||
{"V_ALLOWLOWERCASE",V_ALLOWLOWERCASE},
|
{"V_FORCEUPPERCASE",V_FORCEUPPERCASE},
|
||||||
{"V_FLIP",V_FLIP},
|
{"V_FLIP",V_FLIP},
|
||||||
{"V_VFLIP",V_VFLIP},
|
{"V_VFLIP",V_VFLIP},
|
||||||
{"V_SNAPTOTOP",V_SNAPTOTOP},
|
{"V_SNAPTOTOP",V_SNAPTOTOP},
|
||||||
|
|
|
||||||
|
|
@ -755,12 +755,12 @@ void F_CreditDrawer(void)
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if (y>>FRACBITS > -10)
|
if (y>>FRACBITS > -10)
|
||||||
V_DrawStringAtFixed((BASEVIDWIDTH-V_StringWidth(&credits[i][1], V_ALLOWLOWERCASE|V_YELLOWMAP))<<FRACBITS>>1, y, V_ALLOWLOWERCASE|V_YELLOWMAP, &credits[i][1]);
|
V_DrawStringAtFixed((BASEVIDWIDTH-V_StringWidth(&credits[i][1], V_YELLOWMAP))<<FRACBITS>>1, y, V_YELLOWMAP, &credits[i][1]);
|
||||||
y += 12<<FRACBITS;
|
y += 12<<FRACBITS;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (y>>FRACBITS > -10)
|
if (y>>FRACBITS > -10)
|
||||||
V_DrawStringAtFixed(32<<FRACBITS, y, V_ALLOWLOWERCASE, credits[i]);
|
V_DrawStringAtFixed(32<<FRACBITS, y, 0, credits[i]);
|
||||||
y += 12<<FRACBITS;
|
y += 12<<FRACBITS;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -1555,31 +1555,31 @@ void F_VersionDrawer(void)
|
||||||
}
|
}
|
||||||
if (customversionstring[0] != '\0')
|
if (customversionstring[0] != '\0')
|
||||||
{
|
{
|
||||||
addtext(V_ALLOWLOWERCASE, customversionstring);
|
addtext(0, customversionstring);
|
||||||
addtext(0, "Mod version:");
|
addtext(0, "Mod version:");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Development -- show revision / branch info
|
// Development -- show revision / branch info
|
||||||
#if defined(TESTERS)
|
#if defined(TESTERS)
|
||||||
addtext(V_ALLOWLOWERCASE|V_SKYMAP, "Tester client");
|
addtext(V_SKYMAP, "Tester client");
|
||||||
addtext(V_ALLOWLOWERCASE|V_TRANSLUCENT, va("%s", compdate));
|
addtext(V_TRANSLUCENT, va("%s", compdate));
|
||||||
#elif defined(HOSTTESTERS)
|
#elif defined(HOSTTESTERS)
|
||||||
addtext(V_ALLOWLOWERCASE|V_REDMAP, "Netgame host for testers");
|
addtext(V_REDMAP, "Netgame host for testers");
|
||||||
addtext(V_ALLOWLOWERCASE|V_TRANSLUCENT, va("%s", compdate));
|
addtext(V_TRANSLUCENT, va("%s", compdate));
|
||||||
#elif defined(DEVELOP)
|
#elif defined(DEVELOP)
|
||||||
addtext(V_ALLOWLOWERCASE|V_TRANSLUCENT, va("%s %s", comprevision, compnote));
|
addtext(V_TRANSLUCENT, va("%s %s", comprevision, compnote));
|
||||||
addtext(V_ALLOWLOWERCASE|V_TRANSLUCENT, D_GetFancyBranchName());
|
addtext(V_TRANSLUCENT, D_GetFancyBranchName());
|
||||||
#else // Regular build
|
#else // Regular build
|
||||||
addtext(V_ALLOWLOWERCASE|V_TRANSLUCENT, va("%s", VERSIONSTRING));
|
addtext(V_TRANSLUCENT, va("%s", VERSIONSTRING));
|
||||||
#endif
|
#endif
|
||||||
if (compoptimized)
|
if (compoptimized)
|
||||||
{
|
{
|
||||||
addtext(V_ALLOWLOWERCASE|V_TRANSLUCENT, va("%s build", comptype));
|
addtext(V_TRANSLUCENT, va("%s build", comptype));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
addtext(V_ALLOWLOWERCASE|V_ORANGEMAP, va("%s build (no optimizations)", comptype));
|
addtext(V_ORANGEMAP, va("%s build (no optimizations)", comptype));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (compuncommitted)
|
if (compuncommitted)
|
||||||
|
|
@ -1705,15 +1705,15 @@ void F_TitleScreenDrawer(void)
|
||||||
V_DrawSmallScaledPatch(84, 36, transval<<V_ALPHASHIFT, ttkflash);
|
V_DrawSmallScaledPatch(84, 36, transval<<V_ALPHASHIFT, ttkflash);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
V_DrawCenteredString(BASEVIDWIDTH/2, 64, V_ALLOWLOWERCASE, "Dr. Robotnik's Ring Racers v2.0");
|
V_DrawCenteredString(BASEVIDWIDTH/2, 64, 0, "Dr. Robotnik's Ring Racers v2.0");
|
||||||
|
|
||||||
#ifdef DEVELOP
|
#ifdef DEVELOP
|
||||||
#if defined(TESTERS)
|
#if defined(TESTERS)
|
||||||
V_DrawCenteredString(BASEVIDWIDTH/2, 96, V_SKYMAP|V_ALLOWLOWERCASE, "Tester EXE");
|
V_DrawCenteredString(BASEVIDWIDTH/2, 96, V_SKYMAP, "Tester EXE");
|
||||||
#elif defined(HOSTTESTERS)
|
#elif defined(HOSTTESTERS)
|
||||||
V_DrawCenteredThinString(BASEVIDWIDTH/2, 96, V_REDMAP|V_ALLOWLOWERCASE, "Tester netgame host EXE");
|
V_DrawCenteredThinString(BASEVIDWIDTH/2, 96, V_REDMAP, "Tester netgame host EXE");
|
||||||
#else
|
#else
|
||||||
V_DrawCenteredString(BASEVIDWIDTH/2, 96, V_ALLOWLOWERCASE, "Development EXE");
|
V_DrawCenteredString(BASEVIDWIDTH/2, 96, 0, "Development EXE");
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
@ -2123,7 +2123,7 @@ void F_CutsceneDrawer(void)
|
||||||
F_RunWipe(wipe_intro_toblack, cutscenes[cutnum]->scene[scenenum].fadeoutid, true, NULL, false, false);
|
F_RunWipe(wipe_intro_toblack, cutscenes[cutnum]->scene[scenenum].fadeoutid, true, NULL, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
V_DrawString(textxpos, textypos, V_ALLOWLOWERCASE, cutscene_disptext);
|
V_DrawString(textxpos, textypos, 0, cutscene_disptext);
|
||||||
}
|
}
|
||||||
|
|
||||||
void F_CutsceneTicker(void)
|
void F_CutsceneTicker(void)
|
||||||
|
|
@ -2281,7 +2281,23 @@ static void F_PreparePageText(char *pagetext)
|
||||||
|
|
||||||
if (promptpagetext)
|
if (promptpagetext)
|
||||||
Z_Free(promptpagetext);
|
Z_Free(promptpagetext);
|
||||||
promptpagetext = (pagetext && pagetext[0]) ? V_WordWrap(textx, textr, 0, pagetext) : Z_StrDup("");
|
if (pagetext && pagetext[0])
|
||||||
|
{
|
||||||
|
promptpagetext = V_ScaledWordWrap(
|
||||||
|
(textx - textr)<<FRACBITS,
|
||||||
|
FRACUNIT, FRACUNIT, FRACUNIT,
|
||||||
|
0, HU_FONT,
|
||||||
|
pagetext
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// The original code I was replacing did this,
|
||||||
|
// And I'm not really interested enough to figure out
|
||||||
|
// if this is strictly necessary in the long term or
|
||||||
|
// if it was just an anti-crash doohickey. ~toast 110723
|
||||||
|
promptpagetext = Z_StrDup("");
|
||||||
|
}
|
||||||
|
|
||||||
F_NewCutscene(promptpagetext);
|
F_NewCutscene(promptpagetext);
|
||||||
cutscene_textspeed = textprompts[cutnum]->page[scenenum].textspeed ? textprompts[cutnum]->page[scenenum].textspeed : TICRATE/5;
|
cutscene_textspeed = textprompts[cutnum]->page[scenenum].textspeed ? textprompts[cutnum]->page[scenenum].textspeed : TICRATE/5;
|
||||||
|
|
@ -2628,12 +2644,12 @@ void F_TextPromptDrawer(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw text
|
// Draw text
|
||||||
V_DrawString(textx, texty, (V_SNAPTOBOTTOM|V_ALLOWLOWERCASE), cutscene_disptext);
|
V_DrawString(textx, texty, V_SNAPTOBOTTOM, cutscene_disptext);
|
||||||
|
|
||||||
// Draw name
|
// Draw name
|
||||||
// Don't use V_YELLOWMAP here so that the name color can be changed with control codes
|
// Don't use V_YELLOWMAP here so that the name color can be changed with control codes
|
||||||
if (textprompts[cutnum]->page[scenenum].name[0])
|
if (textprompts[cutnum]->page[scenenum].name[0])
|
||||||
V_DrawString(textx, namey, (V_SNAPTOBOTTOM|V_ALLOWLOWERCASE), textprompts[cutnum]->page[scenenum].name);
|
V_DrawString(textx, namey, V_SNAPTOBOTTOM, textprompts[cutnum]->page[scenenum].name);
|
||||||
|
|
||||||
// Draw chevron
|
// Draw chevron
|
||||||
if (promptblockcontrols && !timetonext)
|
if (promptblockcontrols && !timetonext)
|
||||||
|
|
|
||||||
423
src/hu_stuff.c
423
src/hu_stuff.c
|
|
@ -255,6 +255,10 @@ void HU_Init(void)
|
||||||
PR ("STCFN");
|
PR ("STCFN");
|
||||||
REG;
|
REG;
|
||||||
|
|
||||||
|
|
||||||
|
PR ("MNUFN");
|
||||||
|
REG;
|
||||||
|
|
||||||
PR ("TNYFN");
|
PR ("TNYFN");
|
||||||
REG;
|
REG;
|
||||||
|
|
||||||
|
|
@ -868,7 +872,7 @@ void HU_TickSongCredits(void)
|
||||||
|
|
||||||
if (cursongcredit.anim > 0)
|
if (cursongcredit.anim > 0)
|
||||||
{
|
{
|
||||||
INT32 len = V_ThinStringWidth(cursongcredit.text, V_ALLOWLOWERCASE|V_6WIDTHSPACE);
|
INT32 len = V_ThinStringWidth(cursongcredit.text, 0);
|
||||||
fixed_t destx = (len+7) * FRACUNIT;
|
fixed_t destx = (len+7) * FRACUNIT;
|
||||||
|
|
||||||
if (cursongcredit.trans > 0)
|
if (cursongcredit.trans > 0)
|
||||||
|
|
@ -1266,57 +1270,16 @@ boolean HU_Responder(event_t *ev)
|
||||||
//======================================================================
|
//======================================================================
|
||||||
|
|
||||||
// Precompile a wordwrapped string to any given width.
|
// Precompile a wordwrapped string to any given width.
|
||||||
// This is a muuuch better method than V_WORDWRAP.
|
// Now a wrapper for the chat drawer.
|
||||||
// again stolen and modified a bit from video.c, don't mind me, will need to rearrange this one day.
|
static char *CHAT_WordWrap(INT32 w, fixed_t scale, INT32 option, const char *string)
|
||||||
// this one is simplified for the chat drawer.
|
|
||||||
static char *CHAT_WordWrap(INT32 x, INT32 w, INT32 option, const char *string)
|
|
||||||
{
|
{
|
||||||
INT32 c;
|
return V_ScaledWordWrap(
|
||||||
size_t chw, i, lastusablespace = 0;
|
w << FRACBITS,
|
||||||
size_t slen;
|
scale, FRACUNIT, FRACUNIT,
|
||||||
char *newstring = Z_StrDup(string);
|
option,
|
||||||
INT32 spacewidth = (vid.width < 640) ? 8 : 4, charwidth = (vid.width < 640) ? 8 : 4;
|
HU_FONT,
|
||||||
|
string
|
||||||
slen = strlen(string);
|
);
|
||||||
x = 0;
|
|
||||||
|
|
||||||
for (i = 0; i < slen; ++i)
|
|
||||||
{
|
|
||||||
c = newstring[i];
|
|
||||||
if ((UINT8)c >= 0x80 && (UINT8)c <= 0x8F) //color parsing! -Inuyasha 2.16.09
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (c == '\n')
|
|
||||||
{
|
|
||||||
x = 0;
|
|
||||||
lastusablespace = 0;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(option & V_ALLOWLOWERCASE))
|
|
||||||
c = toupper(c);
|
|
||||||
c -= HU_FONTSTART;
|
|
||||||
|
|
||||||
if (c < 0 || c >= HU_FONTSIZE || !fontv[HU_FONT].font[c])
|
|
||||||
{
|
|
||||||
chw = spacewidth;
|
|
||||||
lastusablespace = i;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
chw = charwidth;
|
|
||||||
|
|
||||||
x += chw;
|
|
||||||
|
|
||||||
if (lastusablespace != 0 && x > w)
|
|
||||||
{
|
|
||||||
//CONS_Printf("Wrap at index %d\n", i);
|
|
||||||
newstring[lastusablespace] = '\n';
|
|
||||||
i = lastusablespace+1;
|
|
||||||
lastusablespace = 0;
|
|
||||||
x = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return newstring;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1331,11 +1294,9 @@ INT16 chatx = 13, chaty = 169; // let's use this as our coordinates
|
||||||
static void HU_drawMiniChat(void)
|
static void HU_drawMiniChat(void)
|
||||||
{
|
{
|
||||||
INT32 x = chatx+2;
|
INT32 x = chatx+2;
|
||||||
INT32 charwidth = 4, charheight = 6;
|
const INT32 charheight = (vid.width < 640) ? 12 : 6;
|
||||||
INT32 boxw = cv_chatwidth.value;
|
INT32 boxw = cv_chatwidth.value;
|
||||||
INT32 dx = 0, dy = 0;
|
|
||||||
size_t i = chat_nummsg_min;
|
size_t i = chat_nummsg_min;
|
||||||
boolean prev_linereturn = false; // a hack to prevent double \n while I have no idea why they happen in the first place.
|
|
||||||
|
|
||||||
INT32 msglines = 0;
|
INT32 msglines = 0;
|
||||||
// process all messages once without rendering anything or doing anything fancy so that we know how many lines each message has...
|
// process all messages once without rendering anything or doing anything fancy so that we know how many lines each message has...
|
||||||
|
|
@ -1347,50 +1308,23 @@ static void HU_drawMiniChat(void)
|
||||||
if (r_splitscreen > 1)
|
if (r_splitscreen > 1)
|
||||||
boxw = max(64, boxw/2);
|
boxw = max(64, boxw/2);
|
||||||
|
|
||||||
for (; i>0; i--)
|
const fixed_t scale = (vid.width < 640) ? FRACUNIT : FRACUNIT/2;
|
||||||
|
|
||||||
|
for (; i > 0; i--)
|
||||||
{
|
{
|
||||||
char *msg = CHAT_WordWrap(x+2, boxw-(charwidth*2), V_SNAPTOBOTTOM|V_SNAPTOLEFT|V_ALLOWLOWERCASE, chat_mini[i-1]);
|
char *msg = CHAT_WordWrap(boxw-4, scale, V_SNAPTOBOTTOM|V_SNAPTOLEFT, chat_mini[i-1]);
|
||||||
size_t j = 0;
|
size_t j = 0;
|
||||||
INT32 linescount = 0;
|
INT32 linescount = 1;
|
||||||
|
|
||||||
while(msg[j]) // iterate through msg
|
for (; msg[j]; j++) // iterate through msg
|
||||||
{
|
{
|
||||||
if (msg[j] < HU_FONTSTART) // don't draw
|
if (msg[j] != '\n') // get back down.
|
||||||
{
|
continue;
|
||||||
if (msg[j] == '\n') // get back down.
|
|
||||||
{
|
|
||||||
++j;
|
|
||||||
if (!prev_linereturn)
|
|
||||||
{
|
|
||||||
linescount += 1;
|
|
||||||
dx = 0;
|
|
||||||
}
|
|
||||||
prev_linereturn = true;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
else if (msg[j] & 0x80) // stolen from video.c, nice.
|
|
||||||
{
|
|
||||||
++j;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
++j;
|
linescount++;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
j++;
|
|
||||||
}
|
|
||||||
prev_linereturn = false;
|
|
||||||
dx += charwidth;
|
|
||||||
if (dx >= boxw)
|
|
||||||
{
|
|
||||||
dx = 0;
|
|
||||||
linescount += 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
dy = 0;
|
|
||||||
dx = 0;
|
msglines += linescount;
|
||||||
msglines += linescount+1;
|
|
||||||
|
|
||||||
if (msg)
|
if (msg)
|
||||||
Z_Free(msg);
|
Z_Free(msg);
|
||||||
|
|
@ -1411,63 +1345,50 @@ static void HU_drawMiniChat(void)
|
||||||
y -= (cv_kartspeedometer.value ? 16 : 0);
|
y -= (cv_kartspeedometer.value ? 16 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
dx = 0;
|
|
||||||
dy = 0;
|
|
||||||
i = 0;
|
i = 0;
|
||||||
prev_linereturn = false;
|
|
||||||
|
|
||||||
for (; i<=(chat_nummsg_min-1); i++) // iterate through our hot messages
|
for (; i<=(chat_nummsg_min-1); i++) // iterate through our hot messages
|
||||||
{
|
{
|
||||||
INT32 clrflag = 0;
|
|
||||||
INT32 timer = ((cv_chattime.value*TICRATE)-chat_timers[i]) - cv_chattime.value*TICRATE+9; // see below...
|
INT32 timer = ((cv_chattime.value*TICRATE)-chat_timers[i]) - cv_chattime.value*TICRATE+9; // see below...
|
||||||
INT32 transflag = (timer >= 0 && timer <= 9) ? (timer*V_10TRANS) : 0; // you can make bad jokes out of this one.
|
INT32 transflag = (timer >= 0 && timer <= 9) ? (timer*V_10TRANS) : 0; // you can make bad jokes out of this one.
|
||||||
size_t j = 0;
|
size_t j = 0;
|
||||||
char *msg = CHAT_WordWrap(x+2, boxw-(charwidth*2), V_SNAPTOBOTTOM|V_SNAPTOLEFT|V_ALLOWLOWERCASE, chat_mini[i]); // get the current message, and word wrap it.
|
char *msg = CHAT_WordWrap(boxw-4, scale, V_SNAPTOBOTTOM|V_SNAPTOLEFT, chat_mini[i]); // get the current message, and word wrap it.
|
||||||
UINT8 *colormap = NULL;
|
|
||||||
|
|
||||||
while(msg[j]) // iterate through msg
|
INT32 linescount = 1;
|
||||||
|
|
||||||
|
for (; msg[j]; j++) // iterate through msg
|
||||||
{
|
{
|
||||||
if (msg[j] < HU_FONTSTART) // don't draw
|
if (msg[j] != '\n') // get back down.
|
||||||
{
|
continue;
|
||||||
if (msg[j] == '\n') // get back down.
|
|
||||||
{
|
|
||||||
++j;
|
|
||||||
if (!prev_linereturn)
|
|
||||||
{
|
|
||||||
dy += charheight;
|
|
||||||
dx = 0;
|
|
||||||
}
|
|
||||||
prev_linereturn = true;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
else if (msg[j] & 0x80) // stolen from video.c, nice.
|
|
||||||
{
|
|
||||||
clrflag = ((msg[j] & 0x7f) << V_CHARCOLORSHIFT) & V_CHARCOLORMASK;
|
|
||||||
colormap = V_GetStringColormap(clrflag);
|
|
||||||
++j;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
++j;
|
linescount++;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (cv_chatbacktint.value) // on request of wolfy
|
|
||||||
V_DrawFillConsoleMap(x + dx + 2, y+dy, charwidth, charheight, 159|V_SNAPTOBOTTOM|V_SNAPTOLEFT);
|
|
||||||
|
|
||||||
V_DrawChatCharacter(x + dx + 2, y+dy, msg[j++] |V_SNAPTOBOTTOM|V_SNAPTOLEFT|transflag, true, colormap);
|
|
||||||
}
|
|
||||||
|
|
||||||
dx += charwidth;
|
|
||||||
prev_linereturn = false;
|
|
||||||
if (dx >= boxw)
|
|
||||||
{
|
|
||||||
dx = 0;
|
|
||||||
dy += charheight;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
dy += charheight;
|
|
||||||
dx = 0;
|
if (cv_chatbacktint.value) // on request of wolfy
|
||||||
|
{
|
||||||
|
INT32 width = V_StringWidth(msg, 0);
|
||||||
|
if (vid.width >= 640)
|
||||||
|
width /= 2;
|
||||||
|
|
||||||
|
V_DrawFillConsoleMap(
|
||||||
|
x-2, y,
|
||||||
|
width+4,
|
||||||
|
charheight * linescount,
|
||||||
|
159|V_SNAPTOBOTTOM|V_SNAPTOLEFT
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
V_DrawStringScaled(
|
||||||
|
x << FRACBITS,
|
||||||
|
y << FRACBITS,
|
||||||
|
scale, FRACUNIT, FRACUNIT,
|
||||||
|
V_SNAPTOBOTTOM|V_SNAPTOLEFT|transflag,
|
||||||
|
NULL,
|
||||||
|
HU_FONT,
|
||||||
|
msg
|
||||||
|
);
|
||||||
|
|
||||||
|
y += charheight * linescount;
|
||||||
|
|
||||||
if (msg)
|
if (msg)
|
||||||
Z_Free(msg);
|
Z_Free(msg);
|
||||||
|
|
@ -1482,9 +1403,9 @@ static void HU_drawMiniChat(void)
|
||||||
|
|
||||||
static void HU_drawChatLog(INT32 offset)
|
static void HU_drawChatLog(INT32 offset)
|
||||||
{
|
{
|
||||||
INT32 charwidth = 4, charheight = 6;
|
const INT32 charheight = (vid.width < 640) ? 12 : 6;
|
||||||
INT32 boxw = cv_chatwidth.value, boxh = cv_chatheight.value;
|
INT32 boxw = cv_chatwidth.value, boxh = cv_chatheight.value;
|
||||||
INT32 x = chatx+2, y, dx = 0, dy = 0;
|
INT32 x = chatx+2, y;
|
||||||
UINT32 i = 0;
|
UINT32 i = 0;
|
||||||
INT32 chat_topy, chat_bottomy;
|
INT32 chat_topy, chat_bottomy;
|
||||||
INT32 highlight = V_YELLOWMAP;
|
INT32 highlight = V_YELLOWMAP;
|
||||||
|
|
@ -1520,59 +1441,71 @@ static void HU_drawChatLog(INT32 offset)
|
||||||
}
|
}
|
||||||
|
|
||||||
chat_topy = y + chat_scroll*charheight;
|
chat_topy = y + chat_scroll*charheight;
|
||||||
chat_bottomy = chat_topy + boxh*charheight;
|
chat_bottomy = boxh*charheight + 2;
|
||||||
|
|
||||||
V_DrawFillConsoleMap(chatx, chat_topy, boxw, boxh*charheight +2, 159|V_SNAPTOBOTTOM|V_SNAPTOLEFT); // log box
|
V_DrawFillConsoleMap(chatx, chat_topy, boxw, chat_bottomy, 159|V_SNAPTOBOTTOM|V_SNAPTOLEFT); // log box
|
||||||
|
|
||||||
|
const fixed_t scale = (vid.width < 640) ? FRACUNIT : FRACUNIT/2;
|
||||||
|
|
||||||
|
V_SetClipRect(
|
||||||
|
(chatx) << FRACBITS, (chat_topy) << FRACBITS,
|
||||||
|
(boxw) << FRACBITS, (chat_bottomy) <<FRACBITS,
|
||||||
|
V_SNAPTOBOTTOM|V_SNAPTOLEFT
|
||||||
|
);
|
||||||
|
|
||||||
|
chat_bottomy += chat_topy - 2;
|
||||||
|
|
||||||
|
INT32 dy = 0;
|
||||||
|
|
||||||
for (i=0; i<chat_nummsg_log; i++) // iterate through our chatlog
|
for (i=0; i<chat_nummsg_log; i++) // iterate through our chatlog
|
||||||
{
|
{
|
||||||
INT32 clrflag = 0;
|
INT32 j = 0, startj = 0;
|
||||||
INT32 j = 0;
|
char *msg = CHAT_WordWrap(boxw-4, scale, V_SNAPTOBOTTOM|V_SNAPTOLEFT, chat_log[i]); // get the current message, and word wrap it.
|
||||||
char *msg = CHAT_WordWrap(x+2, boxw-(charwidth*2), V_SNAPTOBOTTOM|V_SNAPTOLEFT|V_ALLOWLOWERCASE, chat_log[i]); // get the current message, and word wrap it.
|
|
||||||
UINT8 *colormap = NULL;
|
INT32 linescount = 1;
|
||||||
while(msg[j]) // iterate through msg
|
|
||||||
|
for (; msg[j]; j++) // iterate through msg
|
||||||
{
|
{
|
||||||
if (msg[j] < HU_FONTSTART) // don't draw
|
if (msg[j] != '\n') // get back down.
|
||||||
{
|
continue;
|
||||||
if (msg[j] == '\n') // get back down.
|
|
||||||
{
|
|
||||||
++j;
|
|
||||||
dy += charheight;
|
|
||||||
dx = 0;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
else if (msg[j] & 0x80) // stolen from video.c, nice.
|
|
||||||
{
|
|
||||||
clrflag = ((msg[j] & 0x7f) << V_CHARCOLORSHIFT) & V_CHARCOLORMASK;
|
|
||||||
colormap = V_GetStringColormap(clrflag);
|
|
||||||
++j;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
++j;
|
if (y + dy >= chat_bottomy)
|
||||||
}
|
;
|
||||||
else
|
else if (y + dy + 2 + charheight < chat_topy)
|
||||||
{
|
{
|
||||||
if ((y+dy+2 >= chat_topy) && (y+dy < (chat_bottomy)))
|
|
||||||
V_DrawChatCharacter(x + dx + 2, y+dy+2, msg[j++] |V_SNAPTOBOTTOM|V_SNAPTOLEFT, true, colormap);
|
|
||||||
else
|
|
||||||
j++; // don't forget to increment this or we'll get stuck in the limbo.
|
|
||||||
}
|
|
||||||
|
|
||||||
dx += charwidth;
|
|
||||||
if (dx >= boxw-charwidth-2 && i<chat_nummsg_log && msg[j] >= HU_FONTSTART) // end of message shouldn't count, nor should invisible characters!!!!
|
|
||||||
{
|
|
||||||
dx = 0;
|
|
||||||
dy += charheight;
|
dy += charheight;
|
||||||
|
|
||||||
|
if (y + dy + 2 + charheight >= chat_topy)
|
||||||
|
{
|
||||||
|
startj = j;
|
||||||
|
}
|
||||||
|
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
linescount++;
|
||||||
}
|
}
|
||||||
dy += charheight;
|
|
||||||
dx = 0;
|
if (y + dy < chat_bottomy)
|
||||||
|
{
|
||||||
|
V_DrawStringScaled(
|
||||||
|
(x + 2) << FRACBITS,
|
||||||
|
(y + dy + 2) << FRACBITS,
|
||||||
|
scale, FRACUNIT, FRACUNIT,
|
||||||
|
V_SNAPTOBOTTOM|V_SNAPTOLEFT,
|
||||||
|
NULL,
|
||||||
|
HU_FONT,
|
||||||
|
msg+startj
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
dy += charheight * linescount;
|
||||||
|
|
||||||
if (msg)
|
if (msg)
|
||||||
Z_Free(msg);
|
Z_Free(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
V_ClearClipRect();
|
||||||
|
|
||||||
if (((chat_scroll >= chat_maxscroll) || (chat_scrollmedown)) && !(justscrolleddown || justscrolledup || chat_scrolltime)) // was already at the bottom of the page before new maxscroll calculation and was NOT scrolling.
|
if (((chat_scroll >= chat_maxscroll) || (chat_scrollmedown)) && !(justscrolleddown || justscrolledup || chat_scrolltime)) // was already at the bottom of the page before new maxscroll calculation and was NOT scrolling.
|
||||||
{
|
{
|
||||||
|
|
@ -1607,14 +1540,14 @@ static void HU_drawChatLog(INT32 offset)
|
||||||
|
|
||||||
static void HU_DrawChat(void)
|
static void HU_DrawChat(void)
|
||||||
{
|
{
|
||||||
INT32 charwidth = 4, charheight = 6;
|
const INT32 charheight = (vid.width < 640) ? 12 : 6;
|
||||||
INT32 boxw = cv_chatwidth.value;
|
INT32 boxw = cv_chatwidth.value;
|
||||||
INT32 t = 0, c = 0, y = chaty - (typelines*charheight);
|
INT32 y = chaty;
|
||||||
UINT32 i = 0, saylen = strlen(w_chat); // You learn new things everyday!
|
UINT32 i = 0;
|
||||||
INT32 cflag = 0;
|
char cflag = '\x80', tflag = '\x80';
|
||||||
const char *ntalk = "Say: ", *ttalk = "Team: ";
|
const char *ntalk = "Say: ", *ttalk = "Team: ";
|
||||||
const char *talk = ntalk;
|
const char *talk = ntalk;
|
||||||
const char *mute = "Chat has been muted.";
|
const char *mute = "\x86""Chat has been muted.";
|
||||||
|
|
||||||
#ifdef NETSPLITSCREEN
|
#ifdef NETSPLITSCREEN
|
||||||
if (r_splitscreen)
|
if (r_splitscreen)
|
||||||
|
|
@ -1637,85 +1570,70 @@ static void HU_DrawChat(void)
|
||||||
talk = ttalk;
|
talk = ttalk;
|
||||||
#if 0
|
#if 0
|
||||||
if (players[consoleplayer].ctfteam == 1)
|
if (players[consoleplayer].ctfteam == 1)
|
||||||
t = 0x500; // Red
|
t = '\0x85'; // Red
|
||||||
else if (players[consoleplayer].ctfteam == 2)
|
else if (players[consoleplayer].ctfteam == 2)
|
||||||
t = 0x400; // Blue
|
t = '\0x84'; // Blue
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typelines = 1;
|
||||||
|
|
||||||
|
const fixed_t scale = (vid.width < 640) ? FRACUNIT : FRACUNIT/2;
|
||||||
|
|
||||||
|
char *msg = NULL;
|
||||||
|
|
||||||
if (CHAT_MUTE)
|
if (CHAT_MUTE)
|
||||||
{
|
{
|
||||||
talk = mute;
|
talk = mute;
|
||||||
typelines = 1;
|
//cflag = '\x86'; // set text in gray if chat is muted.
|
||||||
cflag = V_GRAYMAP; // set text in gray if chat is muted.
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
msg = CHAT_WordWrap(
|
||||||
|
boxw-4,
|
||||||
|
scale,
|
||||||
|
V_SNAPTOBOTTOM|V_SNAPTOLEFT,
|
||||||
|
va("%c%s %c%s%c%c", cflag, talk, tflag, w_chat, '\x80', '_')
|
||||||
|
);
|
||||||
|
|
||||||
|
for (; msg[i]; i++) // iterate through msg
|
||||||
|
{
|
||||||
|
if (msg[i] != '\n') // get back down.
|
||||||
|
continue;
|
||||||
|
|
||||||
|
typelines++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// This is removed after the fact to not have the newline handling flicker.
|
||||||
|
if (i != 0 && hu_tick >= 4)
|
||||||
|
{
|
||||||
|
msg[i-1] = '\0';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
y -= typelines * charheight;
|
||||||
|
|
||||||
V_DrawFillConsoleMap(chatx, y-1, boxw, (typelines*charheight), 159 | V_SNAPTOBOTTOM | V_SNAPTOLEFT);
|
V_DrawFillConsoleMap(chatx, y-1, boxw, (typelines*charheight), 159 | V_SNAPTOBOTTOM | V_SNAPTOLEFT);
|
||||||
|
|
||||||
while (talk[i])
|
V_DrawStringScaled(
|
||||||
{
|
(chatx + 2) << FRACBITS,
|
||||||
if (talk[i] < HU_FONTSTART)
|
y << FRACBITS,
|
||||||
++i;
|
scale, FRACUNIT, FRACUNIT,
|
||||||
else
|
V_SNAPTOBOTTOM|V_SNAPTOLEFT,
|
||||||
{
|
NULL,
|
||||||
V_DrawChatCharacter(chatx + c + 2, y, talk[i] |V_SNAPTOBOTTOM|V_SNAPTOLEFT|cflag, true, V_GetStringColormap(talk[i]|cflag));
|
HU_FONT,
|
||||||
i++;
|
msg ? msg : talk
|
||||||
}
|
);
|
||||||
|
|
||||||
c += charwidth;
|
if (msg)
|
||||||
}
|
Z_Free(msg);
|
||||||
|
|
||||||
// if chat is muted, just draw the log and get it over with, no need to draw anything else.
|
|
||||||
if (CHAT_MUTE)
|
|
||||||
{
|
|
||||||
HU_drawChatLog(0);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
typelines = 1;
|
|
||||||
|
|
||||||
if ((strlen(w_chat) == 0 || c_input == 0) && hu_tick < 4)
|
|
||||||
V_DrawChatCharacter(chatx + 2 + c, y+1, '_' |V_SNAPTOBOTTOM|V_SNAPTOLEFT|t, true, NULL);
|
|
||||||
|
|
||||||
while (w_chat[i])
|
|
||||||
{
|
|
||||||
boolean skippedline = false;
|
|
||||||
if (c_input == (i+1))
|
|
||||||
{
|
|
||||||
INT32 cursorx = (c+charwidth < boxw-charwidth) ? (chatx + 2 + c+charwidth) : (chatx+1); // we may have to go down.
|
|
||||||
INT32 cursory = (cursorx != chatx+1) ? (y) : (y+charheight);
|
|
||||||
if (hu_tick < 4)
|
|
||||||
V_DrawChatCharacter(cursorx, cursory+1, '_' |V_SNAPTOBOTTOM|V_SNAPTOLEFT|t, true, NULL);
|
|
||||||
|
|
||||||
if (cursorx == chatx+1 && saylen == i) // a weirdo hack
|
|
||||||
{
|
|
||||||
typelines += 1;
|
|
||||||
skippedline = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//Hurdler: isn't it better like that?
|
|
||||||
if (w_chat[i] < HU_FONTSTART)
|
|
||||||
++i;
|
|
||||||
else
|
|
||||||
V_DrawChatCharacter(chatx + c + 2, y, w_chat[i++] | V_SNAPTOBOTTOM|V_SNAPTOLEFT | t, true, NULL);
|
|
||||||
|
|
||||||
c += charwidth;
|
|
||||||
if (c > boxw-(charwidth*2) && !skippedline)
|
|
||||||
{
|
|
||||||
c = 0;
|
|
||||||
y += charheight;
|
|
||||||
typelines += 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// handle /pm list. It's messy, horrible and I don't care.
|
// handle /pm list. It's messy, horrible and I don't care.
|
||||||
if (strnicmp(w_chat, "/pm", 3) == 0 && vid.width >= 400 && !teamtalk) // 320x200 unsupported kthxbai
|
if (!CHAT_MUTE && !teamtalk && vid.width >= 640 && strnicmp(w_chat, "/pm", 3) == 0) // 320x200 unsupported kthxbai
|
||||||
{
|
{
|
||||||
INT32 count = 0;
|
INT32 count = 0;
|
||||||
INT32 p_dispy = chaty - charheight -1;
|
INT32 p_dispy = chaty - charheight -1;
|
||||||
#ifdef NETSPLITSCREEN
|
|
||||||
if (r_splitscreen)
|
if (r_splitscreen)
|
||||||
{
|
{
|
||||||
p_dispy -= BASEVIDHEIGHT/2;
|
p_dispy -= BASEVIDHEIGHT/2;
|
||||||
|
|
@ -1723,7 +1641,6 @@ static void HU_DrawChat(void)
|
||||||
p_dispy += 16;
|
p_dispy += 16;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
p_dispy -= (cv_kartspeedometer.value ? 16 : 0);
|
p_dispy -= (cv_kartspeedometer.value ? 16 : 0);
|
||||||
}
|
}
|
||||||
|
|
@ -1776,14 +1693,14 @@ static void HU_DrawChat(void)
|
||||||
char name[MAXPLAYERNAME+1];
|
char name[MAXPLAYERNAME+1];
|
||||||
strlcpy(name, player_names[i], 7); // shorten name to 7 characters.
|
strlcpy(name, player_names[i], 7); // shorten name to 7 characters.
|
||||||
V_DrawFillConsoleMap(chatx+ boxw + 2, p_dispy- (6*count), 48, 6, 159 | V_SNAPTOBOTTOM | V_SNAPTOLEFT); // fill it like the chat so the text doesn't become hard to read because of the hud.
|
V_DrawFillConsoleMap(chatx+ boxw + 2, p_dispy- (6*count), 48, 6, 159 | V_SNAPTOBOTTOM | V_SNAPTOLEFT); // fill it like the chat so the text doesn't become hard to read because of the hud.
|
||||||
V_DrawSmallString(chatx+ boxw + 4, p_dispy- (6*count), V_SNAPTOBOTTOM|V_SNAPTOLEFT|V_ALLOWLOWERCASE, va("\x82%d\x80 - %s", i, name));
|
V_DrawSmallString(chatx+ boxw + 4, p_dispy- (6*count), V_SNAPTOBOTTOM|V_SNAPTOLEFT, va("\x82%d\x80 - %s", i, name));
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (count == 0) // no results.
|
if (count == 0) // no results.
|
||||||
{
|
{
|
||||||
V_DrawFillConsoleMap(chatx+boxw+2, p_dispy- (6*count), 48, 6, 159 | V_SNAPTOBOTTOM | V_SNAPTOLEFT); // fill it like the chat so the text doesn't become hard to read because of the hud.
|
V_DrawFillConsoleMap(chatx+boxw+2, p_dispy- (6*count), 48, 6, 159 | V_SNAPTOBOTTOM | V_SNAPTOLEFT); // fill it like the chat so the text doesn't become hard to read because of the hud.
|
||||||
V_DrawSmallString(chatx+boxw+4, p_dispy- (6*count), V_SNAPTOBOTTOM|V_SNAPTOLEFT|V_ALLOWLOWERCASE, "NO RESULT.");
|
V_DrawSmallString(chatx+boxw+4, p_dispy- (6*count), V_SNAPTOBOTTOM|V_SNAPTOLEFT, "NO RESULT.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1983,11 +1900,11 @@ static void HU_DrawDemoInfo(void)
|
||||||
if (!multiplayer)/* netreplay */
|
if (!multiplayer)/* netreplay */
|
||||||
{
|
{
|
||||||
V_DrawCenteredString((BASEVIDWIDTH/2), BASEVIDHEIGHT-40, 0, M_GetText("Replay:"));
|
V_DrawCenteredString((BASEVIDWIDTH/2), BASEVIDHEIGHT-40, 0, M_GetText("Replay:"));
|
||||||
V_DrawCenteredString((BASEVIDWIDTH/2), BASEVIDHEIGHT-32, V_ALLOWLOWERCASE, player_names[0]);
|
V_DrawCenteredString((BASEVIDWIDTH/2), BASEVIDHEIGHT-32, 0, player_names[0]);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
V_DrawRightAlignedThinString(BASEVIDWIDTH-2, BASEVIDHEIGHT-10, V_ALLOWLOWERCASE, demo.titlename);
|
V_DrawRightAlignedThinString(BASEVIDWIDTH-2, BASEVIDHEIGHT-10, 0, demo.titlename);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (modeattacking & ATTACKING_TIME)
|
if (modeattacking & ATTACKING_TIME)
|
||||||
|
|
@ -2048,7 +1965,7 @@ void HU_DrawSongCredits(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
V_DrawRightAlignedThinStringAtFixed(x, y,
|
V_DrawRightAlignedThinStringAtFixed(x, y,
|
||||||
V_ALLOWLOWERCASE|V_6WIDTHSPACE|V_SNAPTOLEFT|(cursongcredit.trans<<V_ALPHASHIFT),
|
V_SNAPTOLEFT|(cursongcredit.trans<<V_ALPHASHIFT),
|
||||||
cursongcredit.text);
|
cursongcredit.text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2105,7 +2022,7 @@ void HU_Drawer(void)
|
||||||
for (i = 0; i < (resynch_ticker / 16) % 4; i++)
|
for (i = 0; i < (resynch_ticker / 16) % 4; i++)
|
||||||
strcat(resynch_text, ".");
|
strcat(resynch_text, ".");
|
||||||
|
|
||||||
V_DrawCenteredString(BASEVIDWIDTH/2, 180, V_YELLOWMAP | V_ALLOWLOWERCASE, resynch_text);
|
V_DrawCenteredString(BASEVIDWIDTH/2, 180, V_YELLOWMAP, resynch_text);
|
||||||
}
|
}
|
||||||
|
|
||||||
drawontop:
|
drawontop:
|
||||||
|
|
@ -2419,7 +2336,7 @@ static inline void HU_DrawSpectatorTicker(void)
|
||||||
templength = length;
|
templength = length;
|
||||||
}
|
}
|
||||||
|
|
||||||
V_DrawString(templength - duptweak, height, V_TRANSLUCENT|V_ALLOWLOWERCASE, current);
|
V_DrawString(templength - duptweak, height, V_TRANSLUCENT, current);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((length += len) >= dupadjust+8)
|
if ((length += len) >= dupadjust+8)
|
||||||
|
|
|
||||||
|
|
@ -67,6 +67,7 @@ extern "C" {
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
X (HU),
|
X (HU),
|
||||||
|
X (MENU),
|
||||||
X (TINY),
|
X (TINY),
|
||||||
X (FILE),
|
X (FILE),
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,10 +26,10 @@ public:
|
||||||
/// @param rhi
|
/// @param rhi
|
||||||
virtual void prepass(rhi::Rhi& rhi) = 0;
|
virtual void prepass(rhi::Rhi& rhi) = 0;
|
||||||
|
|
||||||
/// @brief Upload contents for needed GPU resources.
|
/// @brief Upload contents for needed GPU resources. Passes must implement but this will be removed soon.
|
||||||
/// @param rhi
|
/// @param rhi
|
||||||
/// @param ctx
|
/// @param ctx
|
||||||
virtual void transfer(rhi::Rhi& rhi, rhi::Handle<rhi::TransferContext> ctx) = 0;
|
virtual void transfer(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) = 0;
|
||||||
|
|
||||||
/// @brief Issue draw calls.
|
/// @brief Issue draw calls.
|
||||||
/// @param rhi
|
/// @param rhi
|
||||||
|
|
|
||||||
|
|
@ -141,7 +141,7 @@ static Rect get_screen_viewport(uint32_t screen, uint32_t screens, uint32_t w, u
|
||||||
return {0, 0, w, h};
|
return {0, 0, w, h};
|
||||||
}
|
}
|
||||||
|
|
||||||
void BlitPostimgScreens::transfer(Rhi& rhi, Handle<TransferContext> ctx)
|
void BlitPostimgScreens::transfer(Rhi& rhi, Handle<GraphicsContext> ctx)
|
||||||
{
|
{
|
||||||
// Upload needed buffers
|
// Upload needed buffers
|
||||||
if (upload_quad_buffer_)
|
if (upload_quad_buffer_)
|
||||||
|
|
|
||||||
|
|
@ -72,7 +72,7 @@ public:
|
||||||
virtual ~BlitPostimgScreens();
|
virtual ~BlitPostimgScreens();
|
||||||
|
|
||||||
virtual void prepass(rhi::Rhi& rhi) override;
|
virtual void prepass(rhi::Rhi& rhi) override;
|
||||||
virtual void transfer(rhi::Rhi& rhi, rhi::Handle<rhi::TransferContext> ctx) override;
|
virtual void transfer(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
||||||
virtual void graphics(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
virtual void graphics(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
||||||
virtual void postpass(rhi::Rhi& rhi) override;
|
virtual void postpass(rhi::Rhi& rhi) override;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -124,7 +124,7 @@ void BlitRectPass::prepass(Rhi& rhi)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BlitRectPass::transfer(Rhi& rhi, Handle<TransferContext> ctx)
|
void BlitRectPass::transfer(Rhi& rhi, Handle<GraphicsContext> ctx)
|
||||||
{
|
{
|
||||||
if (quad_vbo_needs_upload_ && quad_vbo_)
|
if (quad_vbo_needs_upload_ && quad_vbo_)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@ public:
|
||||||
virtual ~BlitRectPass();
|
virtual ~BlitRectPass();
|
||||||
|
|
||||||
virtual void prepass(rhi::Rhi& rhi) override;
|
virtual void prepass(rhi::Rhi& rhi) override;
|
||||||
virtual void transfer(rhi::Rhi& rhi, rhi::Handle<rhi::TransferContext> ctx) override;
|
virtual void transfer(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
||||||
virtual void graphics(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
virtual void graphics(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
||||||
virtual void postpass(rhi::Rhi& rhi) override;
|
virtual void postpass(rhi::Rhi& rhi) override;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -127,7 +127,7 @@ void ImguiPass::prepass(Rhi& rhi)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImguiPass::transfer(Rhi& rhi, Handle<TransferContext> ctx)
|
void ImguiPass::transfer(Rhi& rhi, Handle<GraphicsContext> ctx)
|
||||||
{
|
{
|
||||||
ImGuiIO& io = ImGui::GetIO();
|
ImGuiIO& io = ImGui::GetIO();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ public:
|
||||||
|
|
||||||
virtual void prepass(rhi::Rhi& rhi) override;
|
virtual void prepass(rhi::Rhi& rhi) override;
|
||||||
|
|
||||||
virtual void transfer(rhi::Rhi& rhi, rhi::Handle<rhi::TransferContext> ctx) override;
|
virtual void transfer(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
||||||
|
|
||||||
virtual void graphics(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
virtual void graphics(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ public:
|
||||||
virtual ~LambdaPass();
|
virtual ~LambdaPass();
|
||||||
|
|
||||||
virtual void prepass(rhi::Rhi& rhi) override;
|
virtual void prepass(rhi::Rhi& rhi) override;
|
||||||
virtual void transfer(rhi::Rhi& rhi, rhi::Handle<rhi::TransferContext> ctx) override;
|
virtual void transfer(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
||||||
virtual void graphics(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
virtual void graphics(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
||||||
virtual void postpass(rhi::Rhi& rhi) override;
|
virtual void postpass(rhi::Rhi& rhi) override;
|
||||||
};
|
};
|
||||||
|
|
@ -63,7 +63,7 @@ void LambdaPass::prepass(Rhi& rhi)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void LambdaPass::transfer(Rhi&, Handle<TransferContext>)
|
void LambdaPass::transfer(Rhi&, Handle<GraphicsContext>)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -137,7 +137,7 @@ void PassManager::prepass(Rhi& rhi)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PassManager::transfer(Rhi& rhi, Handle<TransferContext> ctx)
|
void PassManager::transfer(Rhi& rhi, Handle<GraphicsContext> ctx)
|
||||||
{
|
{
|
||||||
for (auto& pass : passes_)
|
for (auto& pass : passes_)
|
||||||
{
|
{
|
||||||
|
|
@ -179,11 +179,8 @@ void PassManager::render(Rhi& rhi)
|
||||||
|
|
||||||
prepass(rhi);
|
prepass(rhi);
|
||||||
|
|
||||||
Handle<TransferContext> tc = rhi.begin_transfer();
|
|
||||||
transfer(rhi, tc);
|
|
||||||
rhi.end_transfer(tc);
|
|
||||||
|
|
||||||
Handle<GraphicsContext> gc = rhi.begin_graphics();
|
Handle<GraphicsContext> gc = rhi.begin_graphics();
|
||||||
|
transfer(rhi, gc);
|
||||||
graphics(rhi, gc);
|
graphics(rhi, gc);
|
||||||
rhi.end_graphics(gc);
|
rhi.end_graphics(gc);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ public:
|
||||||
PassManager& operator=(PassManager&&) = delete;
|
PassManager& operator=(PassManager&&) = delete;
|
||||||
|
|
||||||
virtual void prepass(rhi::Rhi& rhi) override;
|
virtual void prepass(rhi::Rhi& rhi) override;
|
||||||
virtual void transfer(rhi::Rhi& rhi, rhi::Handle<rhi::TransferContext> ctx) override;
|
virtual void transfer(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
||||||
virtual void graphics(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
virtual void graphics(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
||||||
virtual void postpass(rhi::Rhi& rhi) override;
|
virtual void postpass(rhi::Rhi& rhi) override;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -175,7 +175,7 @@ void PostprocessWipePass::prepass(Rhi& rhi)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void PostprocessWipePass::transfer(Rhi& rhi, Handle<TransferContext> ctx)
|
void PostprocessWipePass::transfer(Rhi& rhi, Handle<GraphicsContext> ctx)
|
||||||
{
|
{
|
||||||
if (wipe_tex_ == kNullHandle)
|
if (wipe_tex_ == kNullHandle)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@ public:
|
||||||
virtual ~PostprocessWipePass();
|
virtual ~PostprocessWipePass();
|
||||||
|
|
||||||
virtual void prepass(rhi::Rhi& rhi) override;
|
virtual void prepass(rhi::Rhi& rhi) override;
|
||||||
virtual void transfer(rhi::Rhi& rhi, rhi::Handle<rhi::TransferContext> ctx) override;
|
virtual void transfer(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
||||||
virtual void graphics(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
virtual void graphics(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
||||||
virtual void postpass(rhi::Rhi& rhi) override;
|
virtual void postpass(rhi::Rhi& rhi) override;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -128,7 +128,7 @@ void FramebufferManager::prepass(Rhi& rhi)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FramebufferManager::transfer(Rhi& rhi, Handle<TransferContext> ctx)
|
void FramebufferManager::transfer(Rhi& rhi, Handle<GraphicsContext> ctx)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -169,7 +169,7 @@ void MainPaletteManager::prepass(Rhi& rhi)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainPaletteManager::upload_palette(Rhi& rhi, Handle<TransferContext> ctx)
|
void MainPaletteManager::upload_palette(Rhi& rhi, Handle<GraphicsContext> ctx)
|
||||||
{
|
{
|
||||||
std::array<byteColor_t, kPaletteSize> palette_32;
|
std::array<byteColor_t, kPaletteSize> palette_32;
|
||||||
for (std::size_t i = 0; i < kPaletteSize; i++)
|
for (std::size_t i = 0; i < kPaletteSize; i++)
|
||||||
|
|
@ -179,7 +179,7 @@ void MainPaletteManager::upload_palette(Rhi& rhi, Handle<TransferContext> ctx)
|
||||||
rhi.update_texture(ctx, palette_, {0, 0, kPaletteSize, 1}, PixelFormat::kRGBA8, tcb::as_bytes(tcb::span(palette_32)));
|
rhi.update_texture(ctx, palette_, {0, 0, kPaletteSize, 1}, PixelFormat::kRGBA8, tcb::as_bytes(tcb::span(palette_32)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainPaletteManager::upload_lighttables(Rhi& rhi, Handle<TransferContext> ctx)
|
void MainPaletteManager::upload_lighttables(Rhi& rhi, Handle<GraphicsContext> ctx)
|
||||||
{
|
{
|
||||||
if (colormaps != nullptr)
|
if (colormaps != nullptr)
|
||||||
{
|
{
|
||||||
|
|
@ -206,7 +206,7 @@ void MainPaletteManager::upload_lighttables(Rhi& rhi, Handle<TransferContext> ct
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainPaletteManager::upload_default_colormap(Rhi& rhi, Handle<TransferContext> ctx)
|
void MainPaletteManager::upload_default_colormap(Rhi& rhi, Handle<GraphicsContext> ctx)
|
||||||
{
|
{
|
||||||
std::array<uint8_t, kPaletteSize> data;
|
std::array<uint8_t, kPaletteSize> data;
|
||||||
for (std::size_t i = 0; i < kPaletteSize; i++)
|
for (std::size_t i = 0; i < kPaletteSize; i++)
|
||||||
|
|
@ -216,7 +216,7 @@ void MainPaletteManager::upload_default_colormap(Rhi& rhi, Handle<TransferContex
|
||||||
rhi.update_texture(ctx, default_colormap_, {0, 0, kPaletteSize, 1}, PixelFormat::kR8, tcb::as_bytes(tcb::span(data)));
|
rhi.update_texture(ctx, default_colormap_, {0, 0, kPaletteSize, 1}, PixelFormat::kR8, tcb::as_bytes(tcb::span(data)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainPaletteManager::upload_colormaps(Rhi& rhi, Handle<TransferContext> ctx)
|
void MainPaletteManager::upload_colormaps(Rhi& rhi, Handle<GraphicsContext> ctx)
|
||||||
{
|
{
|
||||||
for (auto to_upload : colormaps_to_upload_)
|
for (auto to_upload : colormaps_to_upload_)
|
||||||
{
|
{
|
||||||
|
|
@ -279,7 +279,7 @@ rhi::Handle<rhi::Texture> MainPaletteManager::find_extra_lighttable(srb2::NotNul
|
||||||
return lighttables_.at(lighttable);
|
return lighttables_.at(lighttable);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainPaletteManager::transfer(Rhi& rhi, Handle<TransferContext> ctx)
|
void MainPaletteManager::transfer(Rhi& rhi, Handle<GraphicsContext> ctx)
|
||||||
{
|
{
|
||||||
upload_palette(rhi, ctx);
|
upload_palette(rhi, ctx);
|
||||||
upload_lighttables(rhi, ctx);
|
upload_lighttables(rhi, ctx);
|
||||||
|
|
@ -327,7 +327,7 @@ void CommonResourcesManager::prepass(Rhi& rhi)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CommonResourcesManager::transfer(Rhi& rhi, Handle<TransferContext> ctx)
|
void CommonResourcesManager::transfer(Rhi& rhi, Handle<GraphicsContext> ctx)
|
||||||
{
|
{
|
||||||
if (!init_)
|
if (!init_)
|
||||||
{
|
{
|
||||||
|
|
@ -382,7 +382,7 @@ void FlatTextureManager::prepass(Rhi& rhi)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void FlatTextureManager::transfer(Rhi& rhi, Handle<TransferContext> ctx)
|
void FlatTextureManager::transfer(Rhi& rhi, Handle<GraphicsContext> ctx)
|
||||||
{
|
{
|
||||||
std::vector<std::array<uint8_t, 2>> flat_data;
|
std::vector<std::array<uint8_t, 2>> flat_data;
|
||||||
for (auto flat_lump : to_upload_)
|
for (auto flat_lump : to_upload_)
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ public:
|
||||||
virtual ~FramebufferManager();
|
virtual ~FramebufferManager();
|
||||||
|
|
||||||
virtual void prepass(rhi::Rhi& rhi) override;
|
virtual void prepass(rhi::Rhi& rhi) override;
|
||||||
virtual void transfer(rhi::Rhi& rhi, rhi::Handle<rhi::TransferContext> ctx) override;
|
virtual void transfer(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
||||||
virtual void graphics(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
virtual void graphics(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
||||||
virtual void postpass(rhi::Rhi& rhi) override;
|
virtual void postpass(rhi::Rhi& rhi) override;
|
||||||
|
|
||||||
|
|
@ -83,17 +83,17 @@ class MainPaletteManager final : public Pass
|
||||||
std::vector<const uint8_t*> colormaps_to_upload_;
|
std::vector<const uint8_t*> colormaps_to_upload_;
|
||||||
std::vector<const uint8_t*> lighttables_to_upload_;
|
std::vector<const uint8_t*> lighttables_to_upload_;
|
||||||
|
|
||||||
void upload_palette(rhi::Rhi& rhi, rhi::Handle<rhi::TransferContext> ctx);
|
void upload_palette(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx);
|
||||||
void upload_lighttables(rhi::Rhi& rhi, rhi::Handle<rhi::TransferContext> ctx);
|
void upload_lighttables(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx);
|
||||||
void upload_default_colormap(rhi::Rhi& rhi, rhi::Handle<rhi::TransferContext> ctx);
|
void upload_default_colormap(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx);
|
||||||
void upload_colormaps(rhi::Rhi& rhi, rhi::Handle<rhi::TransferContext> ctx);
|
void upload_colormaps(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MainPaletteManager();
|
MainPaletteManager();
|
||||||
virtual ~MainPaletteManager();
|
virtual ~MainPaletteManager();
|
||||||
|
|
||||||
virtual void prepass(rhi::Rhi& rhi) override;
|
virtual void prepass(rhi::Rhi& rhi) override;
|
||||||
virtual void transfer(rhi::Rhi& rhi, rhi::Handle<rhi::TransferContext> ctx) override;
|
virtual void transfer(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
||||||
virtual void graphics(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
virtual void graphics(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
||||||
virtual void postpass(rhi::Rhi& rhi) override;
|
virtual void postpass(rhi::Rhi& rhi) override;
|
||||||
|
|
||||||
|
|
@ -120,7 +120,7 @@ public:
|
||||||
virtual ~CommonResourcesManager();
|
virtual ~CommonResourcesManager();
|
||||||
|
|
||||||
virtual void prepass(rhi::Rhi& rhi) override;
|
virtual void prepass(rhi::Rhi& rhi) override;
|
||||||
virtual void transfer(rhi::Rhi& rhi, rhi::Handle<rhi::TransferContext> ctx) override;
|
virtual void transfer(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
||||||
virtual void graphics(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
virtual void graphics(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
||||||
virtual void postpass(rhi::Rhi& rhi) override;
|
virtual void postpass(rhi::Rhi& rhi) override;
|
||||||
|
|
||||||
|
|
@ -153,7 +153,7 @@ public:
|
||||||
virtual ~FlatTextureManager();
|
virtual ~FlatTextureManager();
|
||||||
|
|
||||||
virtual void prepass(rhi::Rhi& rhi) override;
|
virtual void prepass(rhi::Rhi& rhi) override;
|
||||||
virtual void transfer(rhi::Rhi& rhi, rhi::Handle<rhi::TransferContext> ctx) override;
|
virtual void transfer(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
||||||
virtual void graphics(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
virtual void graphics(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
||||||
virtual void postpass(rhi::Rhi& rhi) override;
|
virtual void postpass(rhi::Rhi& rhi) override;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ void ScreenshotPass::prepass(Rhi& rhi)
|
||||||
doing_screenshot_ = takescreenshot || moviemode != MM_OFF;
|
doing_screenshot_ = takescreenshot || moviemode != MM_OFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScreenshotPass::transfer(Rhi& rhi, Handle<TransferContext> ctx)
|
void ScreenshotPass::transfer(Rhi& rhi, Handle<GraphicsContext> ctx)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ public:
|
||||||
virtual ~ScreenshotPass();
|
virtual ~ScreenshotPass();
|
||||||
|
|
||||||
virtual void prepass(rhi::Rhi& rhi) override;
|
virtual void prepass(rhi::Rhi& rhi) override;
|
||||||
virtual void transfer(rhi::Rhi& rhi, rhi::Handle<rhi::TransferContext> ctx) override;
|
virtual void transfer(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
||||||
virtual void graphics(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
virtual void graphics(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
||||||
virtual void postpass(rhi::Rhi& rhi) override;
|
virtual void postpass(rhi::Rhi& rhi) override;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,7 @@ void SoftwarePass::prepass(Rhi& rhi)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SoftwarePass::transfer(Rhi& rhi, Handle<TransferContext> ctx)
|
void SoftwarePass::transfer(Rhi& rhi, Handle<GraphicsContext> ctx)
|
||||||
{
|
{
|
||||||
// Upload screen
|
// Upload screen
|
||||||
tcb::span<const std::byte> screen_span;
|
tcb::span<const std::byte> screen_span;
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ public:
|
||||||
virtual ~SoftwarePass();
|
virtual ~SoftwarePass();
|
||||||
|
|
||||||
virtual void prepass(rhi::Rhi& rhi) override;
|
virtual void prepass(rhi::Rhi& rhi) override;
|
||||||
virtual void transfer(rhi::Rhi& rhi, rhi::Handle<rhi::TransferContext> ctx) override;
|
virtual void transfer(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
||||||
virtual void graphics(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
virtual void graphics(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
||||||
virtual void postpass(rhi::Rhi& rhi) override;
|
virtual void postpass(rhi::Rhi& rhi) override;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -498,7 +498,7 @@ void TwodeePass::prepass(Rhi& rhi)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TwodeePass::transfer(Rhi& rhi, Handle<TransferContext> ctx)
|
void TwodeePass::transfer(Rhi& rhi, Handle<GraphicsContext> ctx)
|
||||||
{
|
{
|
||||||
if (!ctx_ || !data_)
|
if (!ctx_ || !data_)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -97,7 +97,7 @@ struct TwodeePass final : public Pass
|
||||||
|
|
||||||
virtual void prepass(rhi::Rhi& rhi) override;
|
virtual void prepass(rhi::Rhi& rhi) override;
|
||||||
|
|
||||||
virtual void transfer(rhi::Rhi& rhi, rhi::Handle<rhi::TransferContext> ctx) override;
|
virtual void transfer(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
||||||
|
|
||||||
virtual void graphics(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
virtual void graphics(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -348,7 +348,7 @@ void PatchAtlasCache::prepass(Rhi& rhi)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PatchAtlasCache::transfer(Rhi& rhi, Handle<TransferContext> ctx)
|
void PatchAtlasCache::transfer(Rhi& rhi, Handle<GraphicsContext> ctx)
|
||||||
{
|
{
|
||||||
SRB2_ASSERT(ready_for_lookup());
|
SRB2_ASSERT(ready_for_lookup());
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -125,7 +125,7 @@ public:
|
||||||
PatchAtlas* find_patch(srb2::NotNull<const patch_t*> patch);
|
PatchAtlas* find_patch(srb2::NotNull<const patch_t*> patch);
|
||||||
|
|
||||||
virtual void prepass(rhi::Rhi& rhi) override;
|
virtual void prepass(rhi::Rhi& rhi) override;
|
||||||
virtual void transfer(rhi::Rhi& rhi, rhi::Handle<rhi::TransferContext> ctx) override;
|
virtual void transfer(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
||||||
virtual void graphics(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
virtual void graphics(rhi::Rhi& rhi, rhi::Handle<rhi::GraphicsContext> ctx) override;
|
||||||
virtual void postpass(rhi::Rhi& rhi) override;
|
virtual void postpass(rhi::Rhi& rhi) override;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
31
src/info.c
31
src/info.c
|
|
@ -558,6 +558,7 @@ char sprnames[NUMSPRITES + 1][5] =
|
||||||
|
|
||||||
"IWHP", // Instawhip
|
"IWHP", // Instawhip
|
||||||
"WPRE", // Instawhip Recharge
|
"WPRE", // Instawhip Recharge
|
||||||
|
"WPRJ", // Instawhip Reject
|
||||||
"GRNG", // Guard ring
|
"GRNG", // Guard ring
|
||||||
"GBDY", // Guard body
|
"GBDY", // Guard body
|
||||||
|
|
||||||
|
|
@ -581,6 +582,7 @@ char sprnames[NUMSPRITES + 1][5] =
|
||||||
"HFX6", // Hitlag stage 6
|
"HFX6", // Hitlag stage 6
|
||||||
"HFX8", // Hitlag stage 8
|
"HFX8", // Hitlag stage 8
|
||||||
"HFX9", // Hitlag stage 9
|
"HFX9", // Hitlag stage 9
|
||||||
|
"HFXX", // Hitlag stage 10
|
||||||
|
|
||||||
// Kart Items
|
// Kart Items
|
||||||
"RSHE", // Rocket sneaker
|
"RSHE", // Rocket sneaker
|
||||||
|
|
@ -4022,6 +4024,7 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_NULL, 0, 0, {A_PlaySound}, sfx_s3ka0, 2, S_INSTAWHIP_RECHARGE3}, // S_INSTAWHIP_RECHARGE2
|
{SPR_NULL, 0, 0, {A_PlaySound}, sfx_s3ka0, 2, S_INSTAWHIP_RECHARGE3}, // S_INSTAWHIP_RECHARGE2
|
||||||
{SPR_WPRE, FF_FULLBRIGHT|FF_FLOORSPRITE|FF_ANIMATE|0, 36, {NULL}, 17, 2, S_INSTAWHIP_RECHARGE4}, // S_INSTAWHIP_RECHARGE3
|
{SPR_WPRE, FF_FULLBRIGHT|FF_FLOORSPRITE|FF_ANIMATE|0, 36, {NULL}, 17, 2, S_INSTAWHIP_RECHARGE4}, // S_INSTAWHIP_RECHARGE3
|
||||||
{SPR_NULL, 0, 0, {A_PlaySound}, sfx_s3k7c, 2, S_NULL}, // S_INSTAWHIP_RECHARGE4
|
{SPR_NULL, 0, 0, {A_PlaySound}, sfx_s3k7c, 2, S_NULL}, // S_INSTAWHIP_RECHARGE4
|
||||||
|
{SPR_WPRJ, FF_ANIMATE, 9, {NULL}, 8, 1, S_NULL}, // S_INSTAWHIP_REJECT
|
||||||
{SPR_GRNG, FF_FULLBRIGHT|FF_PAPERSPRITE|0, -1, {NULL}, 0, 0, S_NULL}, // S_BLOCKRING
|
{SPR_GRNG, FF_FULLBRIGHT|FF_PAPERSPRITE|0, -1, {NULL}, 0, 0, S_NULL}, // S_BLOCKRING
|
||||||
{SPR_GBDY, FF_FULLBRIGHT|FF_ANIMATE|0, -1, {NULL}, 4, 2, S_NULL}, // S_BLOCKBODY
|
{SPR_GBDY, FF_FULLBRIGHT|FF_ANIMATE|0, -1, {NULL}, 4, 2, S_NULL}, // S_BLOCKBODY
|
||||||
|
|
||||||
|
|
@ -5320,6 +5323,7 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_HFX6, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_ANIMATE, 6, {NULL}, 5, 1, S_NULL}, // S_HITLAG_6
|
{SPR_HFX6, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_ANIMATE, 6, {NULL}, 5, 1, S_NULL}, // S_HITLAG_6
|
||||||
{SPR_HFX8, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_ANIMATE, 8, {NULL}, 7, 1, S_NULL}, // S_HITLAG_8
|
{SPR_HFX8, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_ANIMATE, 8, {NULL}, 7, 1, S_NULL}, // S_HITLAG_8
|
||||||
{SPR_HFX9, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_ANIMATE, 9, {NULL}, 8, 1, S_NULL}, // S_HITLAG_9
|
{SPR_HFX9, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_ANIMATE, 9, {NULL}, 8, 1, S_NULL}, // S_HITLAG_9
|
||||||
|
{SPR_HFXX, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_ANIMATE, 10, {NULL}, 9, 1, S_NULL}, // S_HITLAG_10
|
||||||
|
|
||||||
// Broly Ki Orb
|
// Broly Ki Orb
|
||||||
{SPR_LSSJ, FF_REVERSESUBTRACT|FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_BROLY2}, // S_BROLY1
|
{SPR_LSSJ, FF_REVERSESUBTRACT|FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_BROLY2}, // S_BROLY1
|
||||||
|
|
@ -22861,6 +22865,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
S_INSTAWHIP_RECHARGE3 // raisestate
|
S_INSTAWHIP_RECHARGE3 // raisestate
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{ // MT_INSTAWHIP_REJECT
|
||||||
|
-1, // doomednum
|
||||||
|
S_INSTAWHIP_REJECT, // spawnstate
|
||||||
|
1000, // spawnhealth
|
||||||
|
S_NULL, // seestate
|
||||||
|
sfx_None, // seesound
|
||||||
|
0, // reactiontime
|
||||||
|
sfx_None, // attacksound
|
||||||
|
S_NULL, // painstate
|
||||||
|
0, // painchance
|
||||||
|
sfx_None, // painsound
|
||||||
|
S_NULL, // meleestate
|
||||||
|
S_NULL, // missilestate
|
||||||
|
S_NULL, // deathstate
|
||||||
|
S_NULL, // xdeathstate
|
||||||
|
sfx_None, // deathsound
|
||||||
|
0, // speed
|
||||||
|
90*FRACUNIT, // radius
|
||||||
|
90*FRACUNIT, // height
|
||||||
|
0, // display offset
|
||||||
|
100, // mass
|
||||||
|
0, // damage
|
||||||
|
sfx_None, // activesound
|
||||||
|
MF_NOGRAVITY|MF_NOCLIPHEIGHT|MF_DONTENCOREMAP, // flags
|
||||||
|
S_NULL // raisestate
|
||||||
|
},
|
||||||
|
|
||||||
{ // MT_BLOCKRING
|
{ // MT_BLOCKRING
|
||||||
-1, // doomednum
|
-1, // doomednum
|
||||||
S_BLOCKRING, // spawnstate
|
S_BLOCKRING, // spawnstate
|
||||||
|
|
|
||||||
|
|
@ -1109,6 +1109,7 @@ typedef enum sprite
|
||||||
|
|
||||||
SPR_IWHP, // Instawhip
|
SPR_IWHP, // Instawhip
|
||||||
SPR_WPRE, // Instawhip Recharge
|
SPR_WPRE, // Instawhip Recharge
|
||||||
|
SPR_WPRJ, // Instawhip Reject
|
||||||
SPR_GRNG, // Guard ring
|
SPR_GRNG, // Guard ring
|
||||||
SPR_GBDY, // Guard body
|
SPR_GBDY, // Guard body
|
||||||
|
|
||||||
|
|
@ -1132,6 +1133,7 @@ typedef enum sprite
|
||||||
SPR_HFX6, // Hitlag stage 6
|
SPR_HFX6, // Hitlag stage 6
|
||||||
SPR_HFX8, // Hitlag stage 8
|
SPR_HFX8, // Hitlag stage 8
|
||||||
SPR_HFX9, // Hitlag stage 9
|
SPR_HFX9, // Hitlag stage 9
|
||||||
|
SPR_HFXX, // Hitlag stage 10
|
||||||
|
|
||||||
// Kart Items
|
// Kart Items
|
||||||
SPR_RSHE, // Rocket sneaker
|
SPR_RSHE, // Rocket sneaker
|
||||||
|
|
@ -4432,6 +4434,7 @@ typedef enum state
|
||||||
S_INSTAWHIP_RECHARGE2,
|
S_INSTAWHIP_RECHARGE2,
|
||||||
S_INSTAWHIP_RECHARGE3,
|
S_INSTAWHIP_RECHARGE3,
|
||||||
S_INSTAWHIP_RECHARGE4,
|
S_INSTAWHIP_RECHARGE4,
|
||||||
|
S_INSTAWHIP_REJECT,
|
||||||
S_BLOCKRING,
|
S_BLOCKRING,
|
||||||
S_BLOCKBODY,
|
S_BLOCKBODY,
|
||||||
|
|
||||||
|
|
@ -5750,6 +5753,7 @@ typedef enum state
|
||||||
S_HITLAG_6,
|
S_HITLAG_6,
|
||||||
S_HITLAG_8,
|
S_HITLAG_8,
|
||||||
S_HITLAG_9,
|
S_HITLAG_9,
|
||||||
|
S_HITLAG_10,
|
||||||
|
|
||||||
// Broly Ki Orb
|
// Broly Ki Orb
|
||||||
S_BROLY1,
|
S_BROLY1,
|
||||||
|
|
@ -6571,6 +6575,7 @@ typedef enum mobj_type
|
||||||
|
|
||||||
MT_INSTAWHIP,
|
MT_INSTAWHIP,
|
||||||
MT_INSTAWHIP_RECHARGE,
|
MT_INSTAWHIP_RECHARGE,
|
||||||
|
MT_INSTAWHIP_REJECT,
|
||||||
MT_BLOCKRING,
|
MT_BLOCKRING,
|
||||||
MT_BLOCKBODY,
|
MT_BLOCKBODY,
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ extern "C" {
|
||||||
|
|
||||||
#define MAXHITLAGTICS (30)
|
#define MAXHITLAGTICS (30)
|
||||||
#define HITLAGJITTERS (FRACUNIT / 20)
|
#define HITLAGJITTERS (FRACUNIT / 20)
|
||||||
#define NUM_HITLAG_STATES (8)
|
#define NUM_HITLAG_STATES (9)
|
||||||
|
|
||||||
/*--------------------------------------------------
|
/*--------------------------------------------------
|
||||||
void K_AddHitLag(mobj_t *mo, INT32 tics, boolean fromDamage);
|
void K_AddHitLag(mobj_t *mo, INT32 tics, boolean fromDamage);
|
||||||
|
|
|
||||||
48
src/k_hud.c
48
src/k_hud.c
|
|
@ -1487,9 +1487,9 @@ static void K_drawKartItem(void)
|
||||||
if (offset)
|
if (offset)
|
||||||
{
|
{
|
||||||
if (flipamount) // reminder that this is for 3/4p's right end of the screen.
|
if (flipamount) // reminder that this is for 3/4p's right end of the screen.
|
||||||
V_DrawString(fx+2, fy+31, V_ALLOWLOWERCASE|V_HUDTRANS|V_SLIDEIN|fflags, va("x%d", stplyr->itemamount));
|
V_DrawString(fx+2, fy+31, V_HUDTRANS|V_SLIDEIN|fflags, va("x%d", stplyr->itemamount));
|
||||||
else
|
else
|
||||||
V_DrawString(fx+24, fy+31, V_ALLOWLOWERCASE|V_HUDTRANS|V_SLIDEIN|fflags, va("x%d", stplyr->itemamount));
|
V_DrawString(fx+24, fy+31, V_HUDTRANS|V_SLIDEIN|fflags, va("x%d", stplyr->itemamount));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -1811,8 +1811,8 @@ void K_drawKartTimestamp(tic_t drawtime, INT32 TX, INT32 TY, INT32 splitflags, U
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
workx -= V_ThinStringWidth(stickermedalinfo.targettext, splitflags|V_6WIDTHSPACE);
|
workx -= V_ThinStringWidth(stickermedalinfo.targettext, splitflags);
|
||||||
V_DrawThinString(workx, worky, splitflags|V_6WIDTHSPACE, stickermedalinfo.targettext);
|
V_DrawThinString(workx, worky, splitflags, stickermedalinfo.targettext);
|
||||||
}
|
}
|
||||||
|
|
||||||
workx -= (6 + (i*5));
|
workx -= (6 + (i*5));
|
||||||
|
|
@ -2302,7 +2302,7 @@ static void K_drawBossHealthBar(void)
|
||||||
{
|
{
|
||||||
rolrand = 10;
|
rolrand = 10;
|
||||||
}
|
}
|
||||||
V_DrawRightAlignedThinString(startx, starty-rolrand, V_HUDTRANS|V_SLIDEIN|V_SNAPTOBOTTOM|V_SNAPTORIGHT|V_6WIDTHSPACE, bossinfo.enemyname);
|
V_DrawRightAlignedThinString(startx, starty-rolrand, V_HUDTRANS|V_SLIDEIN|V_SNAPTOBOTTOM|V_SNAPTORIGHT, bossinfo.enemyname);
|
||||||
rolrand = 0;
|
rolrand = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -3288,7 +3288,7 @@ static void K_DrawTypingNotifier(fixed_t x, fixed_t y, player_t *p)
|
||||||
static void K_DrawNameTagForPlayer(fixed_t x, fixed_t y, player_t *p)
|
static void K_DrawNameTagForPlayer(fixed_t x, fixed_t y, player_t *p)
|
||||||
{
|
{
|
||||||
const INT32 clr = skincolors[p->skincolor].chatcolor;
|
const INT32 clr = skincolors[p->skincolor].chatcolor;
|
||||||
const INT32 namelen = V_ThinStringWidth(player_names[p - players], V_6WIDTHSPACE|V_ALLOWLOWERCASE);
|
const INT32 namelen = V_ThinStringWidth(player_names[p - players], 0);
|
||||||
|
|
||||||
UINT8 *colormap = V_GetStringColormap(clr);
|
UINT8 *colormap = V_GetStringColormap(clr);
|
||||||
INT32 barx = 0, bary = 0, barw = 0;
|
INT32 barx = 0, bary = 0, barw = 0;
|
||||||
|
|
@ -3336,7 +3336,7 @@ static void K_DrawNameTagForPlayer(fixed_t x, fixed_t y, player_t *p)
|
||||||
V_DrawFixedPatch(x, y, FRACUNIT, 0, kp_nametagstem, colormap);
|
V_DrawFixedPatch(x, y, FRACUNIT, 0, kp_nametagstem, colormap);
|
||||||
|
|
||||||
// Draw the name itself
|
// Draw the name itself
|
||||||
V_DrawThinStringAtFixed(x + (5*FRACUNIT), y - (26*FRACUNIT), V_6WIDTHSPACE|V_ALLOWLOWERCASE|clr, player_names[p - players]);
|
V_DrawThinStringAtFixed(x + (5*FRACUNIT), y - (26*FRACUNIT), clr, player_names[p - players]);
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct weakspotdraw_t
|
typedef struct weakspotdraw_t
|
||||||
|
|
@ -5116,7 +5116,7 @@ static void K_DrawDirectorButton(INT32 idx, const char *label, patch_t *kp[2], I
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
textflags |= (flags | V_6WIDTHSPACE | V_ALLOWLOWERCASE);
|
textflags |= flags;
|
||||||
|
|
||||||
K_drawButtonAnim(x, y - 4, flags, kp, leveltime);
|
K_drawButtonAnim(x, y - 4, flags, kp, leveltime);
|
||||||
V_DrawRightAlignedThinString(x - 2, y, textflags, label);
|
V_DrawRightAlignedThinString(x - 2, y, textflags, label);
|
||||||
|
|
@ -5209,7 +5209,7 @@ static void K_drawDistributionDebugger(void)
|
||||||
x + (18 * scale),
|
x + (18 * scale),
|
||||||
y + (23 * scale),
|
y + (23 * scale),
|
||||||
scale, FRACUNIT, FRACUNIT,
|
scale, FRACUNIT, FRACUNIT,
|
||||||
V_ALLOWLOWERCASE|V_SNAPTOTOP,
|
V_SNAPTOTOP,
|
||||||
NULL, HU_FONT,
|
NULL, HU_FONT,
|
||||||
va("x%d", amount)
|
va("x%d", amount)
|
||||||
);
|
);
|
||||||
|
|
@ -5218,15 +5218,15 @@ static void K_drawDistributionDebugger(void)
|
||||||
y += space;
|
y += space;
|
||||||
}
|
}
|
||||||
|
|
||||||
V_DrawString((x >> FRACBITS) + 20, 2, V_ALLOWLOWERCASE|V_SNAPTOTOP, va("useOdds[%u]", rouletteData.useOdds));
|
V_DrawString((x >> FRACBITS) + 20, 2, V_SNAPTOTOP, va("useOdds[%u]", rouletteData.useOdds));
|
||||||
V_DrawString((x >> FRACBITS) + 20, 10, V_ALLOWLOWERCASE|V_SNAPTOTOP, va("speed = %u", rouletteData.speed));
|
V_DrawString((x >> FRACBITS) + 20, 10, V_SNAPTOTOP, va("speed = %u", rouletteData.speed));
|
||||||
|
|
||||||
V_DrawString((x >> FRACBITS) + 20, 22, V_ALLOWLOWERCASE|V_SNAPTOTOP, va("baseDist = %u", rouletteData.baseDist));
|
V_DrawString((x >> FRACBITS) + 20, 22, V_SNAPTOTOP, va("baseDist = %u", rouletteData.baseDist));
|
||||||
V_DrawString((x >> FRACBITS) + 20, 30, V_ALLOWLOWERCASE|V_SNAPTOTOP, va("dist = %u", rouletteData.dist));
|
V_DrawString((x >> FRACBITS) + 20, 30, V_SNAPTOTOP, va("dist = %u", rouletteData.dist));
|
||||||
|
|
||||||
V_DrawString((x >> FRACBITS) + 20, 42, V_ALLOWLOWERCASE|V_SNAPTOTOP, va("firstDist = %u", rouletteData.firstDist));
|
V_DrawString((x >> FRACBITS) + 20, 42, V_SNAPTOTOP, va("firstDist = %u", rouletteData.firstDist));
|
||||||
V_DrawString((x >> FRACBITS) + 20, 50, V_ALLOWLOWERCASE|V_SNAPTOTOP, va("secondDist = %u", rouletteData.secondDist));
|
V_DrawString((x >> FRACBITS) + 20, 50, V_SNAPTOTOP, va("secondDist = %u", rouletteData.secondDist));
|
||||||
V_DrawString((x >> FRACBITS) + 20, 58, V_ALLOWLOWERCASE|V_SNAPTOTOP, va("secondToFirst = %u", rouletteData.secondToFirst));
|
V_DrawString((x >> FRACBITS) + 20, 58, V_SNAPTOTOP, va("secondToFirst = %u", rouletteData.secondToFirst));
|
||||||
|
|
||||||
#ifndef ITEM_LIST_SIZE
|
#ifndef ITEM_LIST_SIZE
|
||||||
Z_Free(rouletteData.itemList);
|
Z_Free(rouletteData.itemList);
|
||||||
|
|
@ -5350,19 +5350,19 @@ static void K_DrawGPRankDebugger(void)
|
||||||
|
|
||||||
grade = K_CalculateGPGrade(&grandprixinfo.rank);
|
grade = K_CalculateGPGrade(&grandprixinfo.rank);
|
||||||
|
|
||||||
V_DrawThinString(0, 0, V_SNAPTOTOP|V_SNAPTOLEFT|V_6WIDTHSPACE|V_ALLOWLOWERCASE,
|
V_DrawThinString(0, 0, V_SNAPTOTOP|V_SNAPTOLEFT,
|
||||||
va("POS: %d / %d", grandprixinfo.rank.position, RANK_NEUTRAL_POSITION));
|
va("POS: %d / %d", grandprixinfo.rank.position, RANK_NEUTRAL_POSITION));
|
||||||
V_DrawThinString(0, 10, V_SNAPTOTOP|V_SNAPTOLEFT|V_6WIDTHSPACE|V_ALLOWLOWERCASE,
|
V_DrawThinString(0, 10, V_SNAPTOTOP|V_SNAPTOLEFT,
|
||||||
va("PTS: %d / %d", grandprixinfo.rank.winPoints, grandprixinfo.rank.totalPoints));
|
va("PTS: %d / %d", grandprixinfo.rank.winPoints, grandprixinfo.rank.totalPoints));
|
||||||
V_DrawThinString(0, 20, V_SNAPTOTOP|V_SNAPTOLEFT|V_6WIDTHSPACE|V_ALLOWLOWERCASE,
|
V_DrawThinString(0, 20, V_SNAPTOTOP|V_SNAPTOLEFT,
|
||||||
va("LAPS: %d / %d", grandprixinfo.rank.laps, grandprixinfo.rank.totalLaps));
|
va("LAPS: %d / %d", grandprixinfo.rank.laps, grandprixinfo.rank.totalLaps));
|
||||||
V_DrawThinString(0, 30, V_SNAPTOTOP|V_SNAPTOLEFT|V_6WIDTHSPACE|V_ALLOWLOWERCASE,
|
V_DrawThinString(0, 30, V_SNAPTOTOP|V_SNAPTOLEFT,
|
||||||
va("CONTINUES: %d", grandprixinfo.rank.continuesUsed));
|
va("CONTINUES: %d", grandprixinfo.rank.continuesUsed));
|
||||||
V_DrawThinString(0, 40, V_SNAPTOTOP|V_SNAPTOLEFT|V_6WIDTHSPACE|V_ALLOWLOWERCASE,
|
V_DrawThinString(0, 40, V_SNAPTOTOP|V_SNAPTOLEFT,
|
||||||
va("PRISONS: %d / %d", grandprixinfo.rank.prisons, grandprixinfo.rank.totalPrisons));
|
va("PRISONS: %d / %d", grandprixinfo.rank.prisons, grandprixinfo.rank.totalPrisons));
|
||||||
V_DrawThinString(0, 50, V_SNAPTOTOP|V_SNAPTOLEFT|V_6WIDTHSPACE|V_ALLOWLOWERCASE,
|
V_DrawThinString(0, 50, V_SNAPTOTOP|V_SNAPTOLEFT,
|
||||||
va("RINGS: %d / %d", grandprixinfo.rank.rings, grandprixinfo.rank.totalRings));
|
va("RINGS: %d / %d", grandprixinfo.rank.rings, grandprixinfo.rank.totalRings));
|
||||||
V_DrawThinString(0, 60, V_SNAPTOTOP|V_SNAPTOLEFT|V_6WIDTHSPACE|V_ALLOWLOWERCASE,
|
V_DrawThinString(0, 60, V_SNAPTOTOP|V_SNAPTOLEFT,
|
||||||
va("EMERALD: %s", (grandprixinfo.rank.specialWon == true) ? "YES" : "NO"));
|
va("EMERALD: %s", (grandprixinfo.rank.specialWon == true) ? "YES" : "NO"));
|
||||||
|
|
||||||
switch (grade)
|
switch (grade)
|
||||||
|
|
@ -5376,7 +5376,7 @@ static void K_DrawGPRankDebugger(void)
|
||||||
default: { break; }
|
default: { break; }
|
||||||
}
|
}
|
||||||
|
|
||||||
V_DrawThinString(0, 90, V_SNAPTOTOP|V_SNAPTOLEFT|V_6WIDTHSPACE|V_ALLOWLOWERCASE|V_YELLOWMAP,
|
V_DrawThinString(0, 90, V_SNAPTOTOP|V_SNAPTOLEFT|V_YELLOWMAP,
|
||||||
va(" ** FINAL GRADE: %c", gradeChar));
|
va(" ** FINAL GRADE: %c", gradeChar));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
247
src/k_menudraw.c
247
src/k_menudraw.c
|
|
@ -369,7 +369,7 @@ static void M_DrawMenuTooltips(void)
|
||||||
if (currentMenu->menuitems[itemOn].tooltip != NULL)
|
if (currentMenu->menuitems[itemOn].tooltip != NULL)
|
||||||
{
|
{
|
||||||
V_DrawFixedPatch(0, 0, FRACUNIT, 0, W_CachePatchName("MENUHINT", PU_CACHE), NULL);
|
V_DrawFixedPatch(0, 0, FRACUNIT, 0, W_CachePatchName("MENUHINT", PU_CACHE), NULL);
|
||||||
V_DrawCenteredThinString(BASEVIDWIDTH/2, 12, V_ALLOWLOWERCASE|V_6WIDTHSPACE, currentMenu->menuitems[itemOn].tooltip);
|
V_DrawCenteredThinString(BASEVIDWIDTH/2, 12, 0, currentMenu->menuitems[itemOn].tooltip);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -400,7 +400,7 @@ static void M_DrawMenuTyping(void)
|
||||||
|
|
||||||
if (currentMenu->menuitems[itemOn].text)
|
if (currentMenu->menuitems[itemOn].text)
|
||||||
{
|
{
|
||||||
V_DrawThinString(x + 5, y - 2, highlightflags|V_6WIDTHSPACE|V_ALLOWLOWERCASE, currentMenu->menuitems[itemOn].text);
|
V_DrawThinString(x + 5, y - 2, highlightflags, currentMenu->menuitems[itemOn].text);
|
||||||
}
|
}
|
||||||
|
|
||||||
M_DrawMenuTooltips();
|
M_DrawMenuTooltips();
|
||||||
|
|
@ -414,12 +414,12 @@ static void M_DrawMenuTyping(void)
|
||||||
V_DrawFill(x + 4, y + 4 + 5, 1, 8+6, 121);
|
V_DrawFill(x + 4, y + 4 + 5, 1, 8+6, 121);
|
||||||
V_DrawFill(x + 5 + boxwidth - 8, y + 4 + 5, 1, 8+6, 121);
|
V_DrawFill(x + 5 + boxwidth - 8, y + 4 + 5, 1, 8+6, 121);
|
||||||
|
|
||||||
V_DrawString(x + 8, y + 12, V_ALLOWLOWERCASE, cv->string);
|
V_DrawString(x + 8, y + 12, 0, cv->string);
|
||||||
if (skullAnimCounter < 4
|
if (skullAnimCounter < 4
|
||||||
&& menutyping.menutypingclose == false
|
&& menutyping.menutypingclose == false
|
||||||
&& menutyping.menutypingfade == (menutyping.keyboardtyping ? 9 : 18))
|
&& menutyping.menutypingfade == (menutyping.keyboardtyping ? 9 : 18))
|
||||||
{
|
{
|
||||||
V_DrawCharacter(x + 8 + V_StringWidth(cv->string, 0), y + 12 + 1, '_' | 0x80, false);
|
V_DrawCharacter(x + 8 + V_StringWidth(cv->string, 0), y + 12 + 1, '_', false);
|
||||||
}
|
}
|
||||||
|
|
||||||
const INT32 buttonwidth = ((boxwidth + 1)/NUMVIRTUALKEYSINROW);
|
const INT32 buttonwidth = ((boxwidth + 1)/NUMVIRTUALKEYSINROW);
|
||||||
|
|
@ -449,7 +449,7 @@ static void M_DrawMenuTyping(void)
|
||||||
j = 0;
|
j = 0;
|
||||||
while (j < NUMVIRTUALKEYSINROW)
|
while (j < NUMVIRTUALKEYSINROW)
|
||||||
{
|
{
|
||||||
INT32 mflag = V_ALLOWLOWERCASE|V_6WIDTHSPACE;
|
INT32 mflag = 0;
|
||||||
INT16 c = virtualKeyboard[i][j];
|
INT16 c = virtualKeyboard[i][j];
|
||||||
|
|
||||||
INT32 buttonspacing = 1;
|
INT32 buttonspacing = 1;
|
||||||
|
|
@ -595,11 +595,11 @@ static void M_DrawMenuTyping(void)
|
||||||
// Some contextual stuff
|
// Some contextual stuff
|
||||||
if (menutyping.keyboardtyping)
|
if (menutyping.keyboardtyping)
|
||||||
{
|
{
|
||||||
V_DrawThinString(returnx, y, V_ALLOWLOWERCASE|V_6WIDTHSPACE|V_GRAYMAP, "Type using your keyboard. Press Enter to confirm & exit.\nUse your controller or any directional input to use the Virtual Keyboard.\n");
|
V_DrawThinString(returnx, y, V_GRAYMAP, "Type using your keyboard. Press Enter to confirm & exit.\nUse your controller or any directional input to use the Virtual Keyboard.\n");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
V_DrawThinString(returnx, y, V_ALLOWLOWERCASE|V_6WIDTHSPACE|V_GRAYMAP, "Type using the Virtual Keyboard. Use the \'OK\' button to confirm & exit.\nPress any keyboard key not bound to a control to use it.");
|
V_DrawThinString(returnx, y, V_GRAYMAP, "Type using the Virtual Keyboard. Use the \'OK\' button to confirm & exit.\nPress any keyboard key not bound to a control to use it.");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -622,7 +622,7 @@ void M_DrawMenuMessage(void)
|
||||||
|
|
||||||
if (menumessage.header != NULL)
|
if (menumessage.header != NULL)
|
||||||
{
|
{
|
||||||
V_DrawThinString(x, y - 10, highlightflags|V_6WIDTHSPACE|V_ALLOWLOWERCASE, menumessage.header);
|
V_DrawThinString(x, y - 10, highlightflags, menumessage.header);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (menumessage.defaultstr)
|
if (menumessage.defaultstr)
|
||||||
|
|
@ -640,11 +640,11 @@ void M_DrawMenuMessage(void)
|
||||||
push = ((menumessage.timer % (anim_duration * 2)) < anim_duration);
|
push = ((menumessage.timer % (anim_duration * 2)) < anim_duration);
|
||||||
}
|
}
|
||||||
|
|
||||||
workx -= V_ThinStringWidth(menumessage.defaultstr, V_6WIDTHSPACE|V_ALLOWLOWERCASE);
|
workx -= V_ThinStringWidth(menumessage.defaultstr, 0);
|
||||||
V_DrawThinString(
|
V_DrawThinString(
|
||||||
workx, worky + 1,
|
workx, worky + 1,
|
||||||
V_6WIDTHSPACE|V_ALLOWLOWERCASE
|
((push && (menumessage.closing & MENUMESSAGECLOSE))
|
||||||
| ((push && (menumessage.closing & MENUMESSAGECLOSE)) ? highlightflags : 0),
|
? highlightflags : 0),
|
||||||
menumessage.defaultstr
|
menumessage.defaultstr
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -671,11 +671,11 @@ void M_DrawMenuMessage(void)
|
||||||
if (menumessage.closing)
|
if (menumessage.closing)
|
||||||
push = !push;
|
push = !push;
|
||||||
|
|
||||||
workx -= V_ThinStringWidth(menumessage.confirmstr, V_6WIDTHSPACE|V_ALLOWLOWERCASE);
|
workx -= V_ThinStringWidth(menumessage.confirmstr, 0);
|
||||||
V_DrawThinString(
|
V_DrawThinString(
|
||||||
workx, worky + 1,
|
workx, worky + 1,
|
||||||
V_6WIDTHSPACE|V_ALLOWLOWERCASE
|
((push && (menumessage.closing & MENUMESSAGECLOSE))
|
||||||
| ((push && (menumessage.closing & MENUMESSAGECLOSE)) ? highlightflags : 0),
|
? highlightflags : 0),
|
||||||
menumessage.confirmstr
|
menumessage.confirmstr
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -733,7 +733,7 @@ void M_DrawMenuMessage(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
V_DrawString((BASEVIDWIDTH - V_StringWidth(string, 0))/2, y, V_ALLOWLOWERCASE, string);
|
V_DrawString((BASEVIDWIDTH - V_StringWidth(string, 0))/2, y, 0, string);
|
||||||
y += 8;
|
y += 8;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -782,7 +782,7 @@ void M_Drawer(void)
|
||||||
if (customversionstring[0] != '\0')
|
if (customversionstring[0] != '\0')
|
||||||
{
|
{
|
||||||
V_DrawThinString(vid.dupx, vid.height - 20*vid.dupy, V_NOSCALESTART|V_TRANSLUCENT, "Mod version:");
|
V_DrawThinString(vid.dupx, vid.height - 20*vid.dupy, V_NOSCALESTART|V_TRANSLUCENT, "Mod version:");
|
||||||
V_DrawThinString(vid.dupx, vid.height - 10*vid.dupy, V_NOSCALESTART|V_TRANSLUCENT|V_ALLOWLOWERCASE, customversionstring);
|
V_DrawThinString(vid.dupx, vid.height - 10*vid.dupy, V_NOSCALESTART|V_TRANSLUCENT, customversionstring);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -817,7 +817,7 @@ void M_Drawer(void)
|
||||||
if (window_notinfocus && cv_showfocuslost.value)
|
if (window_notinfocus && cv_showfocuslost.value)
|
||||||
{
|
{
|
||||||
M_DrawTextBox((BASEVIDWIDTH/2) - (60), (BASEVIDHEIGHT/2) - (16), 13, 2);
|
M_DrawTextBox((BASEVIDWIDTH/2) - (60), (BASEVIDHEIGHT/2) - (16), 13, 2);
|
||||||
V_DrawCenteredString(BASEVIDWIDTH/2, (BASEVIDHEIGHT/2) - (4), highlightflags, "Focus Lost");
|
V_DrawCenteredString(BASEVIDWIDTH/2, (BASEVIDHEIGHT/2) - (4), highlightflags|V_FORCEUPPERCASE, "Focus Lost");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -930,7 +930,7 @@ void M_DrawGenericMenu(void)
|
||||||
V_DrawString(x + (skullAnimCounter/5) + 6, y + 12, highlightflags, "\x1D");
|
V_DrawString(x + (skullAnimCounter/5) + 6, y + 12, highlightflags, "\x1D");
|
||||||
}
|
}
|
||||||
|
|
||||||
V_DrawString(x + xoffs + 8, y + 12, V_ALLOWLOWERCASE, cv->string);
|
V_DrawString(x + xoffs + 8, y + 12, 0, cv->string);
|
||||||
|
|
||||||
y += 16;
|
y += 16;
|
||||||
}
|
}
|
||||||
|
|
@ -1086,7 +1086,7 @@ void M_DrawKartGamemodeMenu(void)
|
||||||
(type == IT_TRANSTEXT2
|
(type == IT_TRANSTEXT2
|
||||||
? V_TRANSLUCENT
|
? V_TRANSLUCENT
|
||||||
: 0
|
: 0
|
||||||
)|V_ALLOWLOWERCASE,
|
),
|
||||||
colormap,
|
colormap,
|
||||||
currentMenu->menuitems[i].text);
|
currentMenu->menuitems[i].text);
|
||||||
}
|
}
|
||||||
|
|
@ -1170,7 +1170,7 @@ void M_DrawMessageMenu(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
V_DrawString((BASEVIDWIDTH - V_StringWidth(string, 0))/2,y,V_ALLOWLOWERCASE,string);
|
V_DrawString((BASEVIDWIDTH - V_StringWidth(string, 0))/2,y,0,string);
|
||||||
y += 8; //SHORT(hu_font[0]->height);
|
y += 8; //SHORT(hu_font[0]->height);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1726,7 +1726,7 @@ static void M_DrawCharSelectPreview(UINT8 num)
|
||||||
else if (p->mdepth == CSSTEP_ASKCHANGES)
|
else if (p->mdepth == CSSTEP_ASKCHANGES)
|
||||||
{
|
{
|
||||||
UINT8 i;
|
UINT8 i;
|
||||||
char choices[2][9] = {"All good", "Change"};
|
char choices[2][9] = {"ALL GOOD", "CHANGE"};
|
||||||
INT32 xpos = x+8;
|
INT32 xpos = x+8;
|
||||||
INT32 ypos = y+38;
|
INT32 ypos = y+38;
|
||||||
|
|
||||||
|
|
@ -1739,7 +1739,7 @@ static void M_DrawCharSelectPreview(UINT8 num)
|
||||||
if (p->changeselect == i)
|
if (p->changeselect == i)
|
||||||
V_DrawScaledPatch(xpos, cy, 0, W_CachePatchName("M_CURSOR", PU_CACHE));
|
V_DrawScaledPatch(xpos, cy, 0, W_CachePatchName("M_CURSOR", PU_CACHE));
|
||||||
|
|
||||||
V_DrawThinString(xpos+16, cy, (p->changeselect == i ? highlightflags : 0)|V_6WIDTHSPACE, choices[i]);
|
V_DrawThinString(xpos+16, cy, (p->changeselect == i ? highlightflags : 0), choices[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1753,17 +1753,17 @@ static void M_DrawCharSelectPreview(UINT8 num)
|
||||||
if (p->clonenum < setup_chargrid[p->gridx][p->gridy].numskins
|
if (p->clonenum < setup_chargrid[p->gridx][p->gridy].numskins
|
||||||
&& setup_chargrid[p->gridx][p->gridy].skinlist[p->clonenum] < numskins)
|
&& setup_chargrid[p->gridx][p->gridy].skinlist[p->clonenum] < numskins)
|
||||||
{
|
{
|
||||||
V_DrawThinString(x-3, y+12, V_6WIDTHSPACE,
|
V_DrawThinString(x-3, y+12, 0,
|
||||||
skins[setup_chargrid[p->gridx][p->gridy].skinlist[p->clonenum]].name);
|
skins[setup_chargrid[p->gridx][p->gridy].skinlist[p->clonenum]].name);
|
||||||
randomskin = (skins[setup_chargrid[p->gridx][p->gridy].skinlist[p->clonenum]].flags & SF_IRONMAN);
|
randomskin = (skins[setup_chargrid[p->gridx][p->gridy].skinlist[p->clonenum]].flags & SF_IRONMAN);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
V_DrawThinString(x-3, y+12, V_6WIDTHSPACE, va("BAD CLONENUM %u", p->clonenum));
|
V_DrawThinString(x-3, y+12, 0, va("BAD CLONENUM %u", p->clonenum));
|
||||||
}
|
}
|
||||||
/* FALLTHRU */
|
/* FALLTHRU */
|
||||||
case CSSTEP_CHARS: // Character Select grid
|
case CSSTEP_CHARS: // Character Select grid
|
||||||
V_DrawThinString(x-3, y+2, V_6WIDTHSPACE, va("Class %c (s %c - w %c)",
|
V_DrawThinString(x-3, y+2, 0, va("Class %c (s %c - w %c)",
|
||||||
('A' + R_GetEngineClass(p->gridx+1, p->gridy+1, randomskin)),
|
('A' + R_GetEngineClass(p->gridx+1, p->gridy+1, randomskin)),
|
||||||
(randomskin
|
(randomskin
|
||||||
? '?' : ('1'+p->gridx)),
|
? '?' : ('1'+p->gridx)),
|
||||||
|
|
@ -1774,55 +1774,55 @@ static void M_DrawCharSelectPreview(UINT8 num)
|
||||||
case CSSTEP_COLORS: // Select color
|
case CSSTEP_COLORS: // Select color
|
||||||
if (p->color < numskincolors)
|
if (p->color < numskincolors)
|
||||||
{
|
{
|
||||||
V_DrawThinString(x-3, y+2, V_6WIDTHSPACE, skincolors[p->color].name);
|
V_DrawThinString(x-3, y+2, 0, skincolors[p->color].name);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
V_DrawThinString(x-3, y+2, V_6WIDTHSPACE, va("BAD COLOR %u", p->color));
|
V_DrawThinString(x-3, y+2, 0, va("BAD COLOR %u", p->color));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CSSTEP_FOLLOWERCATEGORY:
|
case CSSTEP_FOLLOWERCATEGORY:
|
||||||
if (p->followercategory == -1)
|
if (p->followercategory == -1)
|
||||||
{
|
{
|
||||||
V_DrawThinString(x-3, y+2, V_6WIDTHSPACE, "None");
|
V_DrawThinString(x-3, y+2, 0, "None");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
V_DrawThinString(x-3, y+2, V_6WIDTHSPACE,
|
V_DrawThinString(x-3, y+2, 0,
|
||||||
followercategories[setup_followercategories[p->followercategory][1]].name);
|
followercategories[setup_followercategories[p->followercategory][1]].name);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CSSTEP_FOLLOWER:
|
case CSSTEP_FOLLOWER:
|
||||||
if (p->followern == -1)
|
if (p->followern == -1)
|
||||||
{
|
{
|
||||||
V_DrawThinString(x-3, y+2, V_6WIDTHSPACE, "None");
|
V_DrawThinString(x-3, y+2, 0, "None");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
V_DrawThinString(x-3, y+2, V_6WIDTHSPACE,
|
V_DrawThinString(x-3, y+2, 0,
|
||||||
followers[p->followern].name);
|
followers[p->followern].name);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CSSTEP_FOLLOWERCOLORS:
|
case CSSTEP_FOLLOWERCOLORS:
|
||||||
if (p->followercolor == FOLLOWERCOLOR_MATCH)
|
if (p->followercolor == FOLLOWERCOLOR_MATCH)
|
||||||
{
|
{
|
||||||
V_DrawThinString(x-3, y+2, V_6WIDTHSPACE, "Match");
|
V_DrawThinString(x-3, y+2, 0, "Match");
|
||||||
}
|
}
|
||||||
else if (p->followercolor == FOLLOWERCOLOR_OPPOSITE)
|
else if (p->followercolor == FOLLOWERCOLOR_OPPOSITE)
|
||||||
{
|
{
|
||||||
V_DrawThinString(x-3, y+2, V_6WIDTHSPACE, "Opposite");
|
V_DrawThinString(x-3, y+2, 0, "Opposite");
|
||||||
}
|
}
|
||||||
else if (p->followercolor < numskincolors)
|
else if (p->followercolor < numskincolors)
|
||||||
{
|
{
|
||||||
V_DrawThinString(x-3, y+2, V_6WIDTHSPACE, skincolors[p->followercolor].name);
|
V_DrawThinString(x-3, y+2, 0, skincolors[p->followercolor].name);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
V_DrawThinString(x-3, y+2, V_6WIDTHSPACE, va("BAD FOLLOWERCOLOR %u", p->followercolor));
|
V_DrawThinString(x-3, y+2, 0, va("BAD FOLLOWERCOLOR %u", p->followercolor));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
V_DrawThinString(x-3, y+2, V_6WIDTHSPACE, "[extrainfo mode]");
|
V_DrawThinString(x-3, y+2, 0, "[extrainfo mode]");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -2064,8 +2064,8 @@ static void M_DrawProfileCard(INT32 x, INT32 y, boolean greyedout, profile_t *p)
|
||||||
if (p != NULL)
|
if (p != NULL)
|
||||||
{
|
{
|
||||||
V_DrawProfileNum(x + 37 + 10, y + 131, 0, PR_GetProfileNum(p));
|
V_DrawProfileNum(x + 37 + 10, y + 131, 0, PR_GetProfileNum(p));
|
||||||
V_DrawCenteredThinString(x, y + 141, V_GRAYMAP|V_6WIDTHSPACE, p->playername);
|
V_DrawCenteredThinString(x, y + 141, V_GRAYMAP, p->playername);
|
||||||
V_DrawCenteredThinString(x, y + 151, V_GRAYMAP|V_6WIDTHSPACE, GetPrettyRRID(p->public_key, true));
|
V_DrawCenteredThinString(x, y + 151, V_GRAYMAP, GetPrettyRRID(p->public_key, true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2293,7 +2293,7 @@ void M_DrawRaceDifficulty(void)
|
||||||
consvar_t *cv = currentMenu->menuitems[i].itemaction.cvar;
|
consvar_t *cv = currentMenu->menuitems[i].itemaction.cvar;
|
||||||
|
|
||||||
V_DrawFixedPatch(x*FRACUNIT, y*FRACUNIT, FRACUNIT, 0, W_CachePatchName("MENUSHRT", PU_CACHE), colormap);
|
V_DrawFixedPatch(x*FRACUNIT, y*FRACUNIT, FRACUNIT, 0, W_CachePatchName("MENUSHRT", PU_CACHE), colormap);
|
||||||
V_DrawCenteredGamemodeString(centx, y - 3, V_ALLOWLOWERCASE, colormap, cv->string);
|
V_DrawCenteredGamemodeString(centx, y - 3, 0, colormap, cv->string);
|
||||||
|
|
||||||
if (i == itemOn)
|
if (i == itemOn)
|
||||||
{
|
{
|
||||||
|
|
@ -2308,7 +2308,7 @@ void M_DrawRaceDifficulty(void)
|
||||||
else // not a cvar
|
else // not a cvar
|
||||||
{
|
{
|
||||||
V_DrawFixedPatch(x*FRACUNIT, y*FRACUNIT, FRACUNIT, 0, W_CachePatchName("MENUPLTR", PU_CACHE), colormap);
|
V_DrawFixedPatch(x*FRACUNIT, y*FRACUNIT, FRACUNIT, 0, W_CachePatchName("MENUPLTR", PU_CACHE), colormap);
|
||||||
V_DrawGamemodeString(x + 16, y - 3, V_ALLOWLOWERCASE, colormap, currentMenu->menuitems[i].text);
|
V_DrawGamemodeString(x + 16, y - 3, 0, colormap, currentMenu->menuitems[i].text);
|
||||||
}
|
}
|
||||||
x += GM_XOFFSET;
|
x += GM_XOFFSET;
|
||||||
y += GM_YOFFSET;
|
y += GM_YOFFSET;
|
||||||
|
|
@ -2917,7 +2917,6 @@ void M_DrawTimeAttack(void)
|
||||||
if (mapheaderinfo[levellist.choosemap]->ghostCount <= 1)
|
if (mapheaderinfo[levellist.choosemap]->ghostCount <= 1)
|
||||||
drawarrows = false;
|
drawarrows = false;
|
||||||
|
|
||||||
optflags |= V_ALLOWLOWERCASE;
|
|
||||||
if (mapheaderinfo[levellist.choosemap] == NULL)
|
if (mapheaderinfo[levellist.choosemap] == NULL)
|
||||||
str = "Invalid map";
|
str = "Invalid map";
|
||||||
else if (cv_dummystaff.value > mapheaderinfo[levellist.choosemap]->ghostCount)
|
else if (cv_dummystaff.value > mapheaderinfo[levellist.choosemap]->ghostCount)
|
||||||
|
|
@ -3009,7 +3008,7 @@ static void M_MPOptDrawer(menu_t *m, INT16 extend[3][3])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
V_DrawFixedPatch((x + (extend[i][2]/2)) *FRACUNIT, (y + extend[i][2])*FRACUNIT, FRACUNIT, 0, buttback, colormap);
|
V_DrawFixedPatch((x + (extend[i][2]/2)) *FRACUNIT, (y + extend[i][2])*FRACUNIT, FRACUNIT, 0, buttback, colormap);
|
||||||
V_DrawCenteredGamemodeString(x, y - 3, V_ALLOWLOWERCASE, colormap, m->menuitems[i].text);
|
V_DrawCenteredGamemodeString(x, y - 3, 0, colormap, m->menuitems[i].text);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -3061,7 +3060,7 @@ void M_DrawMPHost(void)
|
||||||
|
|
||||||
// Ideally we'd calculate this but it's not worth it for a 1-off menu probably.....
|
// Ideally we'd calculate this but it's not worth it for a 1-off menu probably.....
|
||||||
V_DrawFixedPatch(xp<<FRACBITS, yp<<FRACBITS, FRACUNIT, 0, gobutt, colormap);
|
V_DrawFixedPatch(xp<<FRACBITS, yp<<FRACBITS, FRACUNIT, 0, gobutt, colormap);
|
||||||
V_DrawCenteredGamemodeString(xp + (gobutt->width/2), yp -3, V_ALLOWLOWERCASE, colormap, currentMenu->menuitems[i].text);
|
V_DrawCenteredGamemodeString(xp + (gobutt->width/2), yp -3, 0, colormap, currentMenu->menuitems[i].text);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -3069,14 +3068,14 @@ void M_DrawMPHost(void)
|
||||||
{
|
{
|
||||||
case IT_TRANSTEXT2:
|
case IT_TRANSTEXT2:
|
||||||
{
|
{
|
||||||
V_DrawThinString(xp, yp, V_ALLOWLOWERCASE|V_6WIDTHSPACE|V_TRANSLUCENT, currentMenu->menuitems[i].text);
|
V_DrawThinString(xp, yp, V_TRANSLUCENT, currentMenu->menuitems[i].text);
|
||||||
xp += 5;
|
xp += 5;
|
||||||
yp += 11;
|
yp += 11;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case IT_STRING:
|
case IT_STRING:
|
||||||
{
|
{
|
||||||
V_DrawThinString(xp, yp, V_ALLOWLOWERCASE|V_6WIDTHSPACE | (i == itemOn ? highlightflags : 0), currentMenu->menuitems[i].text);
|
V_DrawThinString(xp, yp, (i == itemOn ? highlightflags : 0), currentMenu->menuitems[i].text);
|
||||||
|
|
||||||
// Cvar specific handling
|
// Cvar specific handling
|
||||||
switch (currentMenu->menuitems[i].status & IT_TYPE)
|
switch (currentMenu->menuitems[i].status & IT_TYPE)
|
||||||
|
|
@ -3095,14 +3094,14 @@ void M_DrawMPHost(void)
|
||||||
V_DrawString(xp + (skullAnimCounter/5) + 94, yp+1, highlightflags, "\x1D");
|
V_DrawString(xp + (skullAnimCounter/5) + 94, yp+1, highlightflags, "\x1D");
|
||||||
}
|
}
|
||||||
|
|
||||||
V_DrawThinString(xp + xoffs + 96, yp, V_ALLOWLOWERCASE|V_6WIDTHSPACE, cv->string);
|
V_DrawThinString(xp + xoffs + 96, yp, 0, cv->string);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
w = V_ThinStringWidth(cv->string, V_6WIDTHSPACE);
|
w = V_ThinStringWidth(cv->string, 0);
|
||||||
V_DrawThinString(xp + 138 - w, yp, ((cv->flags & CV_CHEAT) && !CV_IsSetToDefault(cv) ? warningflags : highlightflags)|V_6WIDTHSPACE, cv->string);
|
V_DrawThinString(xp + 138 - w, yp, ((cv->flags & CV_CHEAT) && !CV_IsSetToDefault(cv) ? warningflags : highlightflags), cv->string);
|
||||||
if (i == itemOn)
|
if (i == itemOn)
|
||||||
{
|
{
|
||||||
V_DrawCharacter(xp + 138 - 10 - w - (skullAnimCounter/5), yp, '\x1C' | highlightflags, false); // left arrow
|
V_DrawCharacter(xp + 138 - 10 - w - (skullAnimCounter/5), yp, '\x1C' | highlightflags, false); // left arrow
|
||||||
|
|
@ -3117,8 +3116,8 @@ void M_DrawMPHost(void)
|
||||||
if (currentMenu->menuitems[i].itemaction.routine != M_HandleHostMenuGametype)
|
if (currentMenu->menuitems[i].itemaction.routine != M_HandleHostMenuGametype)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
w = V_ThinStringWidth(gametypes[menugametype]->name, V_6WIDTHSPACE);
|
w = V_ThinStringWidth(gametypes[menugametype]->name, 0);
|
||||||
V_DrawThinString(xp + 138 - w, yp, highlightflags|V_6WIDTHSPACE, gametypes[menugametype]->name);
|
V_DrawThinString(xp + 138 - w, yp, highlightflags, gametypes[menugametype]->name);
|
||||||
if (i == itemOn)
|
if (i == itemOn)
|
||||||
{
|
{
|
||||||
V_DrawCharacter(xp + 138 - 10 - w - (skullAnimCounter/5), yp, '\x1C' | highlightflags, false); // left arrow
|
V_DrawCharacter(xp + 138 - 10 - w - (skullAnimCounter/5), yp, '\x1C' | highlightflags, false); // left arrow
|
||||||
|
|
@ -3188,7 +3187,7 @@ void M_DrawMPJoinIP(void)
|
||||||
strcpy(str, "---"); // If that fails too then there's nothing!
|
strcpy(str, "---"); // If that fails too then there's nothing!
|
||||||
}
|
}
|
||||||
|
|
||||||
V_DrawThinString(xp, yp, V_ALLOWLOWERCASE | ((i == itemOn || currentMenu->menuitems[i].status & IT_SPACE) ? highlightflags : 0)|V_ALLOWLOWERCASE|V_6WIDTHSPACE, str);
|
V_DrawThinString(xp, yp, ((i == itemOn || currentMenu->menuitems[i].status & IT_SPACE) ? highlightflags : 0), str);
|
||||||
|
|
||||||
// Cvar specific handling
|
// Cvar specific handling
|
||||||
switch (currentMenu->menuitems[i].status & IT_TYPE)
|
switch (currentMenu->menuitems[i].status & IT_TYPE)
|
||||||
|
|
@ -3213,7 +3212,7 @@ void M_DrawMPJoinIP(void)
|
||||||
V_DrawString(xp + (skullAnimCounter/5) + 17, yp+1, highlightflags, "\x1D");
|
V_DrawString(xp + (skullAnimCounter/5) + 17, yp+1, highlightflags, "\x1D");
|
||||||
}
|
}
|
||||||
|
|
||||||
V_DrawThinString(xp + xoffs + 18, yp, V_ALLOWLOWERCASE|V_6WIDTHSPACE, cv->string);
|
V_DrawThinString(xp + xoffs + 18, yp, 0, cv->string);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*// On this specific menu the only time we'll ever see this is for the connect by IP typefield.
|
/*// On this specific menu the only time we'll ever see this is for the connect by IP typefield.
|
||||||
|
|
@ -3361,16 +3360,16 @@ void M_DrawMPServerBrowser(void)
|
||||||
V_DrawFixedPatch(startx*FRACUNIT, (starty + ypos)*FRACUNIT, FRACUNIT, transflag, racegt ? raceh : batlh, NULL);
|
V_DrawFixedPatch(startx*FRACUNIT, (starty + ypos)*FRACUNIT, FRACUNIT, transflag, racegt ? raceh : batlh, NULL);
|
||||||
|
|
||||||
// Server name:
|
// Server name:
|
||||||
V_DrawString(startx+11, starty + ypos + 6, V_ALLOWLOWERCASE|transflag, serverlist[i].info.servername);
|
V_DrawString(startx+11, starty + ypos + 6, transflag, serverlist[i].info.servername);
|
||||||
|
|
||||||
// Ping:
|
// Ping:
|
||||||
V_DrawThinString(startx + 191, starty + ypos + 7, V_6WIDTHSPACE|transflag, va("%03d", serverlist[i].info.time));
|
V_DrawThinString(startx + 191, starty + ypos + 7, transflag, va("%03d", serverlist[i].info.time));
|
||||||
|
|
||||||
// Playercount
|
// Playercount
|
||||||
V_DrawThinString(startx + 214, starty + ypos + 7, V_6WIDTHSPACE|transflag, va("%02d/%02d", serverlist[i].info.numberofplayer, serverlist[i].info.maxplayer));
|
V_DrawThinString(startx + 214, starty + ypos + 7, transflag, va("%02d/%02d", serverlist[i].info.numberofplayer, serverlist[i].info.maxplayer));
|
||||||
|
|
||||||
// Power Level
|
// Power Level
|
||||||
V_DrawThinString(startx + 248, starty + ypos, V_6WIDTHSPACE|transflag, va("%04d PLv", serverlist[i].info.avgpwrlv));
|
V_DrawThinString(startx + 248, starty + ypos, transflag, va("%04d PLv", serverlist[i].info.avgpwrlv));
|
||||||
|
|
||||||
// game speed if applicable:
|
// game speed if applicable:
|
||||||
if (racegt)
|
if (racegt)
|
||||||
|
|
@ -3389,7 +3388,7 @@ void M_DrawMPServerBrowser(void)
|
||||||
V_DrawFill(0, 53, 320, 1, 31);
|
V_DrawFill(0, 53, 320, 1, 31);
|
||||||
V_DrawFill(0, 55, 320, 1, 31);
|
V_DrawFill(0, 55, 320, 1, 31);
|
||||||
|
|
||||||
V_DrawCenteredGamemodeString(160, 2, V_ALLOWLOWERCASE, 0, "Server Browser");
|
V_DrawCenteredGamemodeString(160, 2, 0, 0, "Server Browser");
|
||||||
|
|
||||||
// normal menu options
|
// normal menu options
|
||||||
M_DrawGenericMenu();
|
M_DrawGenericMenu();
|
||||||
|
|
@ -3434,7 +3433,7 @@ void M_DrawOptionsMovingButton(void)
|
||||||
UINT8 *c = R_GetTranslationColormap(TC_RAINBOW, SKINCOLOR_PLAGUE, GTC_CACHE);
|
UINT8 *c = R_GetTranslationColormap(TC_RAINBOW, SKINCOLOR_PLAGUE, GTC_CACHE);
|
||||||
|
|
||||||
V_DrawFixedPatch((optionsmenu.optx)*FRACUNIT, (optionsmenu.opty)*FRACUNIT, FRACUNIT, 0, butt, c);
|
V_DrawFixedPatch((optionsmenu.optx)*FRACUNIT, (optionsmenu.opty)*FRACUNIT, FRACUNIT, 0, butt, c);
|
||||||
V_DrawCenteredGamemodeString((optionsmenu.optx)-3, (optionsmenu.opty) - 16, V_ALLOWLOWERCASE, c, OPTIONS_MainDef.menuitems[OPTIONS_MainDef.lastOn].text);
|
V_DrawCenteredGamemodeString((optionsmenu.optx)-3, (optionsmenu.opty) - 16, 0, c, OPTIONS_MainDef.menuitems[OPTIONS_MainDef.lastOn].text);
|
||||||
}
|
}
|
||||||
|
|
||||||
void M_DrawOptions(void)
|
void M_DrawOptions(void)
|
||||||
|
|
@ -3465,7 +3464,7 @@ void M_DrawOptions(void)
|
||||||
if (!(menutransition.tics && i == itemOn))
|
if (!(menutransition.tics && i == itemOn))
|
||||||
{
|
{
|
||||||
V_DrawFixedPatch(px*FRACUNIT, py*FRACUNIT, FRACUNIT, 0, buttback, c);
|
V_DrawFixedPatch(px*FRACUNIT, py*FRACUNIT, FRACUNIT, 0, buttback, c);
|
||||||
V_DrawCenteredGamemodeString(px-3, py - 16, V_ALLOWLOWERCASE|tflag, (i == itemOn ? c : NULL), currentMenu->menuitems[i].text);
|
V_DrawCenteredGamemodeString(px-3, py - 16, tflag, (i == itemOn ? c : NULL), currentMenu->menuitems[i].text);
|
||||||
}
|
}
|
||||||
|
|
||||||
y += 48;
|
y += 48;
|
||||||
|
|
@ -3552,7 +3551,7 @@ void M_DrawGenericOptions(void)
|
||||||
V_DrawString(x + (skullAnimCounter/5) + 6, y + 12, highlightflags, "\x1D");
|
V_DrawString(x + (skullAnimCounter/5) + 6, y + 12, highlightflags, "\x1D");
|
||||||
}
|
}
|
||||||
|
|
||||||
V_DrawString(x + xoffs + 8, y + 12, V_ALLOWLOWERCASE, cv->string);
|
V_DrawString(x + xoffs + 8, y + 12, 0, cv->string);
|
||||||
|
|
||||||
y += 16;
|
y += 16;
|
||||||
}
|
}
|
||||||
|
|
@ -3649,7 +3648,7 @@ void M_DrawProfileErase(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
V_DrawString(x, y,
|
V_DrawString(x, y,
|
||||||
(i == optionsmenu.eraseprofilen ? highlightflags : 0)|V_ALLOWLOWERCASE,
|
(i == optionsmenu.eraseprofilen ? highlightflags : 0),
|
||||||
va("%sPRF%03d - %s (%s)",
|
va("%sPRF%03d - %s (%s)",
|
||||||
(cv_currprofile.value == i) ? "[In use] " : "",
|
(cv_currprofile.value == i) ? "[In use] " : "",
|
||||||
i, pr->profilename, pr->playername));
|
i, pr->profilename, pr->playername));
|
||||||
|
|
@ -3705,7 +3704,7 @@ void M_DrawEditProfile(void)
|
||||||
V_DrawFixedPatch(0, 0, FRACUNIT, 0, W_CachePatchName("MENUHINT", PU_CACHE), NULL);
|
V_DrawFixedPatch(0, 0, FRACUNIT, 0, W_CachePatchName("MENUHINT", PU_CACHE), NULL);
|
||||||
if (currentMenu->menuitems[itemOn].tooltip != NULL)
|
if (currentMenu->menuitems[itemOn].tooltip != NULL)
|
||||||
{
|
{
|
||||||
V_DrawCenteredThinString(224, 12, V_ALLOWLOWERCASE|V_6WIDTHSPACE, currentMenu->menuitems[itemOn].tooltip);
|
V_DrawCenteredThinString(224, 12, 0, currentMenu->menuitems[itemOn].tooltip);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw the menu options...
|
// Draw the menu options...
|
||||||
|
|
@ -3721,7 +3720,7 @@ void M_DrawEditProfile(void)
|
||||||
// Background
|
// Background
|
||||||
V_DrawFill(0, y, 400 - (menutransition.tics*64), 24, itemOn == i ? 169 : 30); // 169 is the plague colourization
|
V_DrawFill(0, y, 400 - (menutransition.tics*64), 24, itemOn == i ? 169 : 30); // 169 is the plague colourization
|
||||||
// Text
|
// Text
|
||||||
V_DrawGamemodeString(x + (menutransition.tics*32), y - 6, V_ALLOWLOWERCASE|tflag, colormap, currentMenu->menuitems[i].text);
|
V_DrawGamemodeString(x + (menutransition.tics*32), y - 6, tflag, colormap, currentMenu->menuitems[i].text);
|
||||||
|
|
||||||
// Cvar specific handling
|
// Cvar specific handling
|
||||||
/*switch (currentMenu->menuitems[i].status & IT_TYPE)
|
/*switch (currentMenu->menuitems[i].status & IT_TYPE)
|
||||||
|
|
@ -3733,9 +3732,9 @@ void M_DrawEditProfile(void)
|
||||||
{
|
{
|
||||||
case IT_CV_STRING:
|
case IT_CV_STRING:
|
||||||
V_DrawFill(0, y+24, 400 - (menutransition.tics*64), 16, itemOn == i ? 169 : 30); // 169 is the plague colourization
|
V_DrawFill(0, y+24, 400 - (menutransition.tics*64), 16, itemOn == i ? 169 : 30); // 169 is the plague colourization
|
||||||
V_DrawString(x + 8, y + 29, V_ALLOWLOWERCASE, cv->string);
|
V_DrawString(x + 8, y + 29, 0, cv->string);
|
||||||
if (skullAnimCounter < 4 && i == itemOn)
|
if (skullAnimCounter < 4 && i == itemOn)
|
||||||
V_DrawCharacter(x + 8 + V_StringWidth(cv->string, 0), y + 29, '_' | 0x80, false);
|
V_DrawCharacter(x + 8 + V_StringWidth(cv->string, 0), y + 29, '_', false);
|
||||||
y += 16;
|
y += 16;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -3833,7 +3832,7 @@ void M_DrawProfileControls(void)
|
||||||
V_DrawFixedPatch(0, 0, FRACUNIT, 0, W_CachePatchName("MENUHINT", PU_CACHE), NULL);
|
V_DrawFixedPatch(0, 0, FRACUNIT, 0, W_CachePatchName("MENUHINT", PU_CACHE), NULL);
|
||||||
if (currentMenu->menuitems[itemOn].tooltip != NULL)
|
if (currentMenu->menuitems[itemOn].tooltip != NULL)
|
||||||
{
|
{
|
||||||
V_DrawCenteredThinString(229, 12, V_ALLOWLOWERCASE|V_6WIDTHSPACE, currentMenu->menuitems[itemOn].tooltip);
|
V_DrawCenteredThinString(229, 12, 0, currentMenu->menuitems[itemOn].tooltip);
|
||||||
}
|
}
|
||||||
|
|
||||||
V_DrawFill(0, 0, 138, 200, 31); // Black border
|
V_DrawFill(0, 0, 138, 200, 31); // Black border
|
||||||
|
|
@ -3891,7 +3890,7 @@ void M_DrawProfileControls(void)
|
||||||
}
|
}
|
||||||
else if (currentMenu->menuitems[i].status & IT_CONTROL)
|
else if (currentMenu->menuitems[i].status & IT_CONTROL)
|
||||||
{
|
{
|
||||||
UINT32 vflags = V_6WIDTHSPACE;
|
UINT32 vflags = V_FORCEUPPERCASE;
|
||||||
INT32 gc = currentMenu->menuitems[i].mvar1;
|
INT32 gc = currentMenu->menuitems[i].mvar1;
|
||||||
|
|
||||||
UINT8 available = 0, set = 0;
|
UINT8 available = 0, set = 0;
|
||||||
|
|
@ -3948,7 +3947,7 @@ void M_DrawProfileControls(void)
|
||||||
if (!set)
|
if (!set)
|
||||||
{
|
{
|
||||||
if (!G_KeyBindIsNecessary(gc))
|
if (!G_KeyBindIsNecessary(gc))
|
||||||
vflags = V_REDMAP|V_6WIDTHSPACE;
|
vflags = V_REDMAP;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -4180,7 +4179,7 @@ void M_DrawItemToggles(void)
|
||||||
{
|
{
|
||||||
V_DrawScaledPatch(x, y, 0, W_CachePatchName("K_ISMUL", PU_CACHE));
|
V_DrawScaledPatch(x, y, 0, W_CachePatchName("K_ISMUL", PU_CACHE));
|
||||||
V_DrawScaledPatch(x, y, translucent, W_CachePatchName(K_GetItemPatch(currentMenu->menuitems[thisitem].mvar1, true), PU_CACHE));
|
V_DrawScaledPatch(x, y, translucent, W_CachePatchName(K_GetItemPatch(currentMenu->menuitems[thisitem].mvar1, true), PU_CACHE));
|
||||||
V_DrawString(x+24, y+31, V_ALLOWLOWERCASE|translucent, va("x%d", drawnum));
|
V_DrawString(x+24, y+31, translucent, va("x%d", drawnum));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
V_DrawScaledPatch(x, y, translucent, W_CachePatchName(K_GetItemPatch(currentMenu->menuitems[thisitem].mvar1, true), PU_CACHE));
|
V_DrawScaledPatch(x, y, translucent, W_CachePatchName(K_GetItemPatch(currentMenu->menuitems[thisitem].mvar1, true), PU_CACHE));
|
||||||
|
|
@ -4245,7 +4244,7 @@ void M_DrawExtrasMovingButton(void)
|
||||||
UINT8 *c = R_GetTranslationColormap(TC_RAINBOW, SKINCOLOR_PLAGUE, GTC_CACHE);
|
UINT8 *c = R_GetTranslationColormap(TC_RAINBOW, SKINCOLOR_PLAGUE, GTC_CACHE);
|
||||||
|
|
||||||
V_DrawFixedPatch((extrasmenu.extx)*FRACUNIT, (extrasmenu.exty)*FRACUNIT, FRACUNIT, 0, butt, c);
|
V_DrawFixedPatch((extrasmenu.extx)*FRACUNIT, (extrasmenu.exty)*FRACUNIT, FRACUNIT, 0, butt, c);
|
||||||
V_DrawCenteredGamemodeString((extrasmenu.extx)-3, (extrasmenu.exty) - 16, V_ALLOWLOWERCASE, c, EXTRAS_MainDef.menuitems[EXTRAS_MainDef.lastOn].text);
|
V_DrawCenteredGamemodeString((extrasmenu.extx)-3, (extrasmenu.exty) - 16, 0, c, EXTRAS_MainDef.menuitems[EXTRAS_MainDef.lastOn].text);
|
||||||
}
|
}
|
||||||
|
|
||||||
void M_DrawExtras(void)
|
void M_DrawExtras(void)
|
||||||
|
|
@ -4277,7 +4276,7 @@ void M_DrawExtras(void)
|
||||||
if (!(menutransition.tics && i == itemOn))
|
if (!(menutransition.tics && i == itemOn))
|
||||||
{
|
{
|
||||||
V_DrawFixedPatch(px*FRACUNIT, py*FRACUNIT, FRACUNIT, 0, buttback, c);
|
V_DrawFixedPatch(px*FRACUNIT, py*FRACUNIT, FRACUNIT, 0, buttback, c);
|
||||||
V_DrawCenteredGamemodeString(px-3, py - 16, V_ALLOWLOWERCASE|tflag, (i == itemOn ? c : NULL), currentMenu->menuitems[i].text);
|
V_DrawCenteredGamemodeString(px-3, py - 16, tflag, (i == itemOn ? c : NULL), currentMenu->menuitems[i].text);
|
||||||
}
|
}
|
||||||
|
|
||||||
y += 48;
|
y += 48;
|
||||||
|
|
@ -4644,13 +4643,13 @@ void M_DrawKickHandler(void)
|
||||||
P_IsMachineLocalPlayer(&players[i])
|
P_IsMachineLocalPlayer(&players[i])
|
||||||
? highlightflags
|
? highlightflags
|
||||||
: 0
|
: 0
|
||||||
)|V_ALLOWLOWERCASE|V_6WIDTHSPACE,
|
),
|
||||||
player_names[i]
|
player_names[i]
|
||||||
);
|
);
|
||||||
|
|
||||||
V_DrawRightAlignedThinString(
|
V_DrawRightAlignedThinString(
|
||||||
x+118, y-2,
|
x+118, y-2,
|
||||||
V_ALLOWLOWERCASE|V_6WIDTHSPACE,
|
0,
|
||||||
(players[i].spectator) ? "SPECTATOR" : "PLAYING"
|
(players[i].spectator) ? "SPECTATOR" : "PLAYING"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -4681,7 +4680,7 @@ void M_DrawKickHandler(void)
|
||||||
V_DrawFixedPatch(0, 0, FRACUNIT, 0, W_CachePatchName("MENUHINT", PU_CACHE), NULL);
|
V_DrawFixedPatch(0, 0, FRACUNIT, 0, W_CachePatchName("MENUHINT", PU_CACHE), NULL);
|
||||||
V_DrawCenteredThinString(
|
V_DrawCenteredThinString(
|
||||||
BASEVIDWIDTH/2, 12,
|
BASEVIDWIDTH/2, 12,
|
||||||
V_ALLOWLOWERCASE|V_6WIDTHSPACE,
|
0,
|
||||||
(playerkickmenu.adminpowered)
|
(playerkickmenu.adminpowered)
|
||||||
? "You are using ""\x85""Admin Tools""\x80"", ""\x83""(A)""\x80"" to kick and ""\x84""(C)""\x80"" to ban"
|
? "You are using ""\x85""Admin Tools""\x80"", ""\x83""(A)""\x80"" to kick and ""\x84""(C)""\x80"" to ban"
|
||||||
: K_GetMidVoteLabel(menucallvote)
|
: K_GetMidVoteLabel(menucallvote)
|
||||||
|
|
@ -4734,7 +4733,7 @@ void M_DrawPlaybackMenu(void)
|
||||||
V_DrawCharacter(currentMenu->x + currentMenu->menuitems[i].mvar1 + 4, currentMenu->y + 14,
|
V_DrawCharacter(currentMenu->x + currentMenu->menuitems[i].mvar1 + 4, currentMenu->y + 14,
|
||||||
'\x1A' | V_SNAPTOTOP|highlightflags, false);
|
'\x1A' | V_SNAPTOTOP|highlightflags, false);
|
||||||
|
|
||||||
V_DrawCenteredString(BASEVIDWIDTH/2, currentMenu->y + 18, V_SNAPTOTOP|V_ALLOWLOWERCASE, currentMenu->menuitems[i].text);
|
V_DrawCenteredString(BASEVIDWIDTH/2, currentMenu->y + 18, V_SNAPTOTOP, currentMenu->menuitems[i].text);
|
||||||
|
|
||||||
if ((currentMenu->menuitems[i].status & IT_TYPE) == IT_ARROWS)
|
if ((currentMenu->menuitems[i].status & IT_TYPE) == IT_ARROWS)
|
||||||
{
|
{
|
||||||
|
|
@ -4765,7 +4764,7 @@ void M_DrawPlaybackMenu(void)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
V_DrawCenteredString(BASEVIDWIDTH/2, currentMenu->y + 38, V_SNAPTOTOP|V_ALLOWLOWERCASE|highlightflags, str);
|
V_DrawCenteredString(BASEVIDWIDTH/2, currentMenu->y + 38, V_SNAPTOTOP|highlightflags, str);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -4833,7 +4832,7 @@ void M_DrawAddons(void)
|
||||||
|
|
||||||
y -= 16;
|
y -= 16;
|
||||||
|
|
||||||
V_DrawString(x-21, y + (lsheadingheight - 12), highlightflags|V_ALLOWLOWERCASE, M_AddonsHeaderPath());
|
V_DrawString(x-21, y + (lsheadingheight - 12), highlightflags, M_AddonsHeaderPath());
|
||||||
V_DrawFill(x-21, y + (lsheadingheight - 3), MAXSTRINGLENGTH*8+6, 1, hilicol);
|
V_DrawFill(x-21, y + (lsheadingheight - 3), MAXSTRINGLENGTH*8+6, 1, hilicol);
|
||||||
//V_DrawFill(x-21, y + (lsheadingheight - 2), MAXSTRINGLENGTH*8+6, 1, 30);
|
//V_DrawFill(x-21, y + (lsheadingheight - 2), MAXSTRINGLENGTH*8+6, 1, 30);
|
||||||
|
|
||||||
|
|
@ -4849,7 +4848,7 @@ void M_DrawAddons(void)
|
||||||
xoffs += 8;
|
xoffs += 8;
|
||||||
V_DrawString(x + (skullAnimCounter/5) - 20, y+8, highlightflags, "\x1D");
|
V_DrawString(x + (skullAnimCounter/5) - 20, y+8, highlightflags, "\x1D");
|
||||||
}
|
}
|
||||||
V_DrawString(x + xoffs - 18, y+8, V_ALLOWLOWERCASE|tflag, str);
|
V_DrawString(x + xoffs - 18, y+8, tflag, str);
|
||||||
}
|
}
|
||||||
|
|
||||||
V_DrawSmallScaledPatch(x - (21 + 5 + 16), y+4, (menusearch[0] ? 0 : V_TRANSLUCENT), addonsp[NUM_EXT+3]);
|
V_DrawSmallScaledPatch(x - (21 + 5 + 16), y+4, (menusearch[0] ? 0 : V_TRANSLUCENT), addonsp[NUM_EXT+3]);
|
||||||
|
|
@ -4900,7 +4899,7 @@ void M_DrawAddons(void)
|
||||||
|
|
||||||
for (; i < m; i++)
|
for (; i < m; i++)
|
||||||
{
|
{
|
||||||
UINT32 flags = V_ALLOWLOWERCASE;
|
UINT32 flags = 0;
|
||||||
if (y > BASEVIDHEIGHT) break;
|
if (y > BASEVIDHEIGHT) break;
|
||||||
if (dirmenu[i])
|
if (dirmenu[i])
|
||||||
#define type (UINT8)(dirmenu[i][DIR_TYPE])
|
#define type (UINT8)(dirmenu[i][DIR_TYPE])
|
||||||
|
|
@ -4917,7 +4916,7 @@ void M_DrawAddons(void)
|
||||||
if (itemOn == 1 && (size_t)i == dir_on[menudepthleft])
|
if (itemOn == 1 && (size_t)i == dir_on[menudepthleft])
|
||||||
{
|
{
|
||||||
V_DrawFixedPatch((x-(16+4))<<FRACBITS, (y)<<FRACBITS, FRACUNIT/2, 0, addonsp[NUM_EXT+1], flashcol);
|
V_DrawFixedPatch((x-(16+4))<<FRACBITS, (y)<<FRACBITS, FRACUNIT/2, 0, addonsp[NUM_EXT+1], flashcol);
|
||||||
flags = V_ALLOWLOWERCASE|highlightflags;
|
flags = highlightflags;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define charsonside 14
|
#define charsonside 14
|
||||||
|
|
@ -5517,7 +5516,7 @@ static void M_DrawChallengePreview(INT32 x, INT32 y)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
V_DrawThinString(1, BASEVIDHEIGHT-(9+3), V_ALLOWLOWERCASE|V_6WIDTHSPACE, gtname);
|
V_DrawThinString(1, BASEVIDHEIGHT-(9+3), 0, gtname);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -5603,11 +5602,11 @@ static void M_DrawChallengePreview(INT32 x, INT32 y)
|
||||||
{
|
{
|
||||||
x = 8;
|
x = 8;
|
||||||
y = BASEVIDHEIGHT-16;
|
y = BASEVIDHEIGHT-16;
|
||||||
V_DrawGamemodeString(x, y - 33, V_ALLOWLOWERCASE, R_GetTranslationColormap(TC_RAINBOW, SKINCOLOR_PLAGUE, GTC_MENUCACHE), cv_alttitle.string);
|
V_DrawGamemodeString(x, y - 33, 0, R_GetTranslationColormap(TC_RAINBOW, SKINCOLOR_PLAGUE, GTC_MENUCACHE), cv_alttitle.string);
|
||||||
|
|
||||||
K_drawButtonAnim(x, y, 0, kp_button_a[1], challengesmenu.ticker);
|
K_drawButtonAnim(x, y, 0, kp_button_a[1], challengesmenu.ticker);
|
||||||
x += SHORT(kp_button_a[1][0]->width);
|
x += SHORT(kp_button_a[1][0]->width);
|
||||||
V_DrawThinString(x, y + 1, V_6WIDTHSPACE|V_ALLOWLOWERCASE|highlightflags, "Toggle");
|
V_DrawThinString(x, y + 1, highlightflags, "Toggle");
|
||||||
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
@ -5924,7 +5923,7 @@ challengedesc:
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
V_DrawCenteredString(BASEVIDWIDTH/2, 120 + 32, V_ALLOWLOWERCASE, challengesmenu.unlockcondition);
|
V_DrawCenteredString(BASEVIDWIDTH/2, 120 + 32, 0, challengesmenu.unlockcondition);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -6027,12 +6026,12 @@ static void M_DrawStatsMaps(void)
|
||||||
else
|
else
|
||||||
str = "LOST AND FOUND";
|
str = "LOST AND FOUND";
|
||||||
|
|
||||||
V_DrawThinString(20, y, V_6WIDTHSPACE|highlightflags, str);
|
V_DrawThinString(20, y, highlightflags, str);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dotopname)
|
if (dotopname)
|
||||||
{
|
{
|
||||||
V_DrawRightAlignedThinString(BASEVIDWIDTH-20, y, V_6WIDTHSPACE|highlightflags, "MEDALS");
|
V_DrawRightAlignedThinString(BASEVIDWIDTH-20, y, highlightflags, "MEDALS");
|
||||||
dotopname = false;
|
dotopname = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -6047,7 +6046,7 @@ static void M_DrawStatsMaps(void)
|
||||||
|
|
||||||
{
|
{
|
||||||
char *title = G_BuildMapTitle(mnum+1);
|
char *title = G_BuildMapTitle(mnum+1);
|
||||||
V_DrawThinString(24, y, V_6WIDTHSPACE, title);
|
V_DrawThinString(24, y, V_FORCEUPPERCASE, title);
|
||||||
Z_Free(title);
|
Z_Free(title);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -6067,7 +6066,7 @@ static void M_DrawStatsMaps(void)
|
||||||
{
|
{
|
||||||
if (i == 1)
|
if (i == 1)
|
||||||
{
|
{
|
||||||
V_DrawThinString(20, y, V_6WIDTHSPACE|highlightflags, "EXTRA MEDALS");
|
V_DrawThinString(20, y, highlightflags, "EXTRA MEDALS");
|
||||||
if (location)
|
if (location)
|
||||||
{
|
{
|
||||||
y += STATSSTEP;
|
y += STATSSTEP;
|
||||||
|
|
@ -6106,15 +6105,15 @@ static void M_DrawStatsMaps(void)
|
||||||
UINT16 color = min(unlockables[i].color, numskincolors-1);
|
UINT16 color = min(unlockables[i].color, numskincolors-1);
|
||||||
if (!color)
|
if (!color)
|
||||||
color = SKINCOLOR_GOLD;
|
color = SKINCOLOR_GOLD;
|
||||||
V_DrawSmallMappedPatch(291, y+1, V_6WIDTHSPACE, W_CachePatchName("GOTITA", PU_CACHE),
|
V_DrawSmallMappedPatch(291, y+1, 0, W_CachePatchName("GOTITA", PU_CACHE),
|
||||||
R_GetTranslationColormap(TC_DEFAULT, color, GTC_MENUCACHE));
|
R_GetTranslationColormap(TC_DEFAULT, color, GTC_MENUCACHE));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
V_DrawSmallScaledPatch(291, y+1, V_6WIDTHSPACE, W_CachePatchName("NEEDIT", PU_CACHE));
|
V_DrawSmallScaledPatch(291, y+1, 0, W_CachePatchName("NEEDIT", PU_CACHE));
|
||||||
}
|
}
|
||||||
|
|
||||||
V_DrawThinString(24, y, V_6WIDTHSPACE, va("%s", unlockables[i].name));
|
V_DrawThinString(24, y, 0, va("%s", unlockables[i].name));
|
||||||
}
|
}
|
||||||
|
|
||||||
y += STATSSTEP;
|
y += STATSSTEP;
|
||||||
|
|
@ -6143,7 +6142,7 @@ void M_DrawStatistics(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
beststr[0] = 0;
|
beststr[0] = 0;
|
||||||
V_DrawThinString(20, 22, V_6WIDTHSPACE|V_ALLOWLOWERCASE|highlightflags, "Total Play Time:");
|
V_DrawThinString(20, 22, highlightflags, "Total Play Time:");
|
||||||
besttime = G_TicsToHours(gamedata->totalplaytime);
|
besttime = G_TicsToHours(gamedata->totalplaytime);
|
||||||
if (besttime)
|
if (besttime)
|
||||||
{
|
{
|
||||||
|
|
@ -6162,10 +6161,10 @@ void M_DrawStatistics(void)
|
||||||
}
|
}
|
||||||
besttime = G_TicsToSeconds(gamedata->totalplaytime);
|
besttime = G_TicsToSeconds(gamedata->totalplaytime);
|
||||||
strcat(beststr, va("%i second%s", besttime, (besttime == 1 ? "" : "s")));
|
strcat(beststr, va("%i second%s", besttime, (besttime == 1 ? "" : "s")));
|
||||||
V_DrawRightAlignedThinString(BASEVIDWIDTH-20, 22, V_6WIDTHSPACE, beststr);
|
V_DrawRightAlignedThinString(BASEVIDWIDTH-20, 22, 0, beststr);
|
||||||
beststr[0] = 0;
|
beststr[0] = 0;
|
||||||
|
|
||||||
V_DrawThinString(20, 32, V_6WIDTHSPACE|V_ALLOWLOWERCASE|highlightflags, "Total Rings:");
|
V_DrawThinString(20, 32, highlightflags, "Total Rings:");
|
||||||
if (gamedata->totalrings > GDMAX_RINGS)
|
if (gamedata->totalrings > GDMAX_RINGS)
|
||||||
{
|
{
|
||||||
sprintf(beststr, "%c999,999,999+", '\x82');
|
sprintf(beststr, "%c999,999,999+", '\x82');
|
||||||
|
|
@ -6182,10 +6181,10 @@ void M_DrawStatistics(void)
|
||||||
{
|
{
|
||||||
sprintf(beststr, "%u", gamedata->totalrings);
|
sprintf(beststr, "%u", gamedata->totalrings);
|
||||||
}
|
}
|
||||||
V_DrawRightAlignedThinString(BASEVIDWIDTH-20, 32, V_6WIDTHSPACE, va("%s collected", beststr));
|
V_DrawRightAlignedThinString(BASEVIDWIDTH-20, 32, 0, va("%s collected", beststr));
|
||||||
|
|
||||||
beststr[0] = 0;
|
beststr[0] = 0;
|
||||||
V_DrawThinString(20, 42, V_6WIDTHSPACE|V_ALLOWLOWERCASE|highlightflags, "Total Rounds:");
|
V_DrawThinString(20, 42, highlightflags, "Total Rounds:");
|
||||||
|
|
||||||
strcat(beststr, va("%u Race", gamedata->roundsplayed[GDGT_RACE]));
|
strcat(beststr, va("%u Race", gamedata->roundsplayed[GDGT_RACE]));
|
||||||
|
|
||||||
|
|
@ -6206,11 +6205,11 @@ void M_DrawStatistics(void)
|
||||||
strcat(beststr, va(", %u Custom", gamedata->roundsplayed[GDGT_CUSTOM]));
|
strcat(beststr, va(", %u Custom", gamedata->roundsplayed[GDGT_CUSTOM]));
|
||||||
}
|
}
|
||||||
|
|
||||||
V_DrawRightAlignedThinString(BASEVIDWIDTH-20, 42, V_6WIDTHSPACE, beststr);
|
V_DrawRightAlignedThinString(BASEVIDWIDTH-20, 42, 0, beststr);
|
||||||
|
|
||||||
if (!statisticsmenu.maplist)
|
if (!statisticsmenu.maplist)
|
||||||
{
|
{
|
||||||
V_DrawCenteredThinString(BASEVIDWIDTH/2, 62, V_6WIDTHSPACE|V_ALLOWLOWERCASE, "No maps!?");
|
V_DrawCenteredThinString(BASEVIDWIDTH/2, 62, 0, "No maps!?");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -6230,17 +6229,17 @@ void M_DrawStatistics(void)
|
||||||
besttime += mapheaderinfo[i]->records.time;
|
besttime += mapheaderinfo[i]->records.time;
|
||||||
}
|
}
|
||||||
|
|
||||||
V_DrawThinString(20, 60, V_6WIDTHSPACE|V_ALLOWLOWERCASE, "Combined time records:");
|
V_DrawThinString(20, 60, 0, "Combined time records:");
|
||||||
|
|
||||||
sprintf(beststr, "%i:%02i:%02i.%02i", G_TicsToHours(besttime), G_TicsToMinutes(besttime, false), G_TicsToSeconds(besttime), G_TicsToCentiseconds(besttime));
|
sprintf(beststr, "%i:%02i:%02i.%02i", G_TicsToHours(besttime), G_TicsToMinutes(besttime, false), G_TicsToSeconds(besttime), G_TicsToCentiseconds(besttime));
|
||||||
V_DrawRightAlignedThinString(BASEVIDWIDTH-20, 60, V_6WIDTHSPACE|V_ALLOWLOWERCASE|(mapsunfinished ? V_REDMAP : 0), beststr);
|
V_DrawRightAlignedThinString(BASEVIDWIDTH-20, 60, (mapsunfinished ? V_REDMAP : 0), beststr);
|
||||||
|
|
||||||
if (mapsunfinished)
|
if (mapsunfinished)
|
||||||
V_DrawRightAlignedThinString(BASEVIDWIDTH-20, 70, V_6WIDTHSPACE|V_ALLOWLOWERCASE|V_REDMAP, va("(%d unfinished)", mapsunfinished));
|
V_DrawRightAlignedThinString(BASEVIDWIDTH-20, 70, V_REDMAP, va("(%d unfinished)", mapsunfinished));
|
||||||
else
|
else
|
||||||
V_DrawRightAlignedThinString(BASEVIDWIDTH-20, 70, V_6WIDTHSPACE|V_ALLOWLOWERCASE, "(complete)");
|
V_DrawRightAlignedThinString(BASEVIDWIDTH-20, 70, 0, "(complete)");
|
||||||
|
|
||||||
V_DrawThinString(32, 70, V_6WIDTHSPACE, va("x %d/%d", M_CountMedals(false, false), M_CountMedals(true, false)));
|
V_DrawThinString(32, 70, 0, va("x %d/%d", M_CountMedals(false, false), M_CountMedals(true, false)));
|
||||||
V_DrawSmallMappedPatch(20, 70, 0, W_CachePatchName("GOTITA", PU_CACHE),
|
V_DrawSmallMappedPatch(20, 70, 0, W_CachePatchName("GOTITA", PU_CACHE),
|
||||||
R_GetTranslationColormap(TC_DEFAULT, SKINCOLOR_GOLD, GTC_MENUCACHE));
|
R_GetTranslationColormap(TC_DEFAULT, SKINCOLOR_GOLD, GTC_MENUCACHE));
|
||||||
|
|
||||||
|
|
@ -6443,15 +6442,15 @@ void M_DrawSoundTest(void)
|
||||||
if (!titletext)
|
if (!titletext)
|
||||||
titletext = "Untitled"; // Har har.
|
titletext = "Untitled"; // Har har.
|
||||||
|
|
||||||
V_DrawThinString(x+1, y, V_ALLOWLOWERCASE|V_6WIDTHSPACE, titletext);
|
V_DrawThinString(x+1, y, 0, titletext);
|
||||||
if (soundtest.current->numtracks > 1)
|
if (soundtest.current->numtracks > 1)
|
||||||
V_DrawThinString(x+1, (y += 10), V_ALLOWLOWERCASE|V_6WIDTHSPACE, va("Track %c", 'A'+soundtest.currenttrack));
|
V_DrawThinString(x+1, (y += 10), 0, va("Track %c", 'A'+soundtest.currenttrack));
|
||||||
if (soundtest.current->author)
|
if (soundtest.current->author)
|
||||||
V_DrawThinString(x+1, (y += 10), V_ALLOWLOWERCASE|V_6WIDTHSPACE, soundtest.current->author);
|
V_DrawThinString(x+1, (y += 10), 0, soundtest.current->author);
|
||||||
if (soundtest.current->source)
|
if (soundtest.current->source)
|
||||||
V_DrawThinString(x+1, (y += 10), V_ALLOWLOWERCASE|V_6WIDTHSPACE, soundtest.current->source);
|
V_DrawThinString(x+1, (y += 10), 0, soundtest.current->source);
|
||||||
if (soundtest.current->composers)
|
if (soundtest.current->composers)
|
||||||
V_DrawThinString(x+1, (y += 10), V_ALLOWLOWERCASE|V_6WIDTHSPACE, soundtest.current->composers);
|
V_DrawThinString(x+1, (y += 10), 0, soundtest.current->composers);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -6459,11 +6458,11 @@ void M_DrawSoundTest(void)
|
||||||
|
|
||||||
titletext = "Sound Test";
|
titletext = "Sound Test";
|
||||||
|
|
||||||
V_DrawThinString(x+1, y, V_ALLOWLOWERCASE|V_6WIDTHSPACE, "Track ");
|
V_DrawThinString(x+1, y, 0, "Track ");
|
||||||
V_DrawThinString(
|
V_DrawThinString(
|
||||||
x+1 + V_ThinStringWidth("Track ", V_ALLOWLOWERCASE|V_6WIDTHSPACE),
|
x+1 + V_ThinStringWidth("Track ", 0),
|
||||||
y,
|
y,
|
||||||
V_6WIDTHSPACE,
|
0,
|
||||||
va("%04X - %s", cv_soundtest.value, sfxstr)
|
va("%04X - %s", cv_soundtest.value, sfxstr)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -6578,7 +6577,7 @@ void M_DrawSoundTest(void)
|
||||||
);
|
);
|
||||||
|
|
||||||
// Text
|
// Text
|
||||||
V_DrawCenteredThinString(x + 13, y + 1, V_6WIDTHSPACE, currentMenu->menuitems[i].text);
|
V_DrawCenteredThinString(x + 13, y + 1, 0, currentMenu->menuitems[i].text);
|
||||||
|
|
||||||
V_ClearClipRect();
|
V_ClearClipRect();
|
||||||
|
|
||||||
|
|
@ -6667,7 +6666,7 @@ void M_DrawSoundTest(void)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
V_DrawCenteredThinString(x + 13, y + 1, V_6WIDTHSPACE, currentMenu->menuitems[i].text);
|
V_DrawCenteredThinString(x + 13, y + 1, 0, currentMenu->menuitems[i].text);
|
||||||
}
|
}
|
||||||
|
|
||||||
x += 27;
|
x += 27;
|
||||||
|
|
@ -6722,17 +6721,17 @@ void M_DrawDiscordRequests(void)
|
||||||
V_DrawFixedPatch(56*FRACUNIT, 150*FRACUNIT + handoffset, FRACUNIT, 0, hand, NULL);
|
V_DrawFixedPatch(56*FRACUNIT, 150*FRACUNIT + handoffset, FRACUNIT, 0, hand, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
K_DrawSticker(x + (slide * 32), y - 2, V_ThinStringWidth(M_GetDiscordName(curRequest), V_ALLOWLOWERCASE|V_6WIDTHSPACE), 0, false);
|
K_DrawSticker(x + (slide * 32), y - 2, V_ThinStringWidth(M_GetDiscordName(curRequest), 0), 0, false);
|
||||||
V_DrawThinString(x + (slide * 32), y - 1, V_ALLOWLOWERCASE|V_6WIDTHSPACE|V_YELLOWMAP, M_GetDiscordName(curRequest));
|
V_DrawThinString(x + (slide * 32), y - 1, V_YELLOWMAP, M_GetDiscordName(curRequest));
|
||||||
|
|
||||||
K_DrawSticker(x, y + 12, V_ThinStringWidth(wantText, V_ALLOWLOWERCASE|V_6WIDTHSPACE), 0, true);
|
K_DrawSticker(x, y + 12, V_ThinStringWidth(wantText, 0), 0, true);
|
||||||
V_DrawThinString(x, y + 10, V_ALLOWLOWERCASE|V_6WIDTHSPACE, wantText);
|
V_DrawThinString(x, y + 10, 0, wantText);
|
||||||
|
|
||||||
INT32 confirmButtonWidth = SHORT(kp_button_a[1][0]->width);
|
INT32 confirmButtonWidth = SHORT(kp_button_a[1][0]->width);
|
||||||
INT32 declineButtonWidth = SHORT(kp_button_b[1][0]->width);
|
INT32 declineButtonWidth = SHORT(kp_button_b[1][0]->width);
|
||||||
INT32 altDeclineButtonWidth = SHORT(kp_button_x[1][0]->width);
|
INT32 altDeclineButtonWidth = SHORT(kp_button_x[1][0]->width);
|
||||||
INT32 acceptTextWidth = V_ThinStringWidth(acceptText, V_ALLOWLOWERCASE|V_6WIDTHSPACE);
|
INT32 acceptTextWidth = V_ThinStringWidth(acceptText, 0);
|
||||||
INT32 declineTextWidth = V_ThinStringWidth(declineText, V_ALLOWLOWERCASE|V_6WIDTHSPACE);
|
INT32 declineTextWidth = V_ThinStringWidth(declineText, 0);
|
||||||
INT32 stickerWidth = (confirmButtonWidth + declineButtonWidth + altDeclineButtonWidth + acceptTextWidth + declineTextWidth);
|
INT32 stickerWidth = (confirmButtonWidth + declineButtonWidth + altDeclineButtonWidth + acceptTextWidth + declineTextWidth);
|
||||||
|
|
||||||
K_DrawSticker(x, y + 26, stickerWidth, 0, true);
|
K_DrawSticker(x, y + 26, stickerWidth, 0, true);
|
||||||
|
|
@ -6740,7 +6739,7 @@ void M_DrawDiscordRequests(void)
|
||||||
|
|
||||||
INT32 xoffs = confirmButtonWidth;
|
INT32 xoffs = confirmButtonWidth;
|
||||||
|
|
||||||
V_DrawThinString((x + xoffs), y + 24, V_ALLOWLOWERCASE|V_6WIDTHSPACE, acceptText);
|
V_DrawThinString((x + xoffs), y + 24, 0, acceptText);
|
||||||
xoffs += acceptTextWidth;
|
xoffs += acceptTextWidth;
|
||||||
|
|
||||||
K_drawButtonAnim((x + xoffs), y + 22, V_SNAPTORIGHT, kp_button_b[1], discordrequestmenu.ticker);
|
K_drawButtonAnim((x + xoffs), y + 22, V_SNAPTORIGHT, kp_button_b[1], discordrequestmenu.ticker);
|
||||||
|
|
@ -6749,7 +6748,7 @@ void M_DrawDiscordRequests(void)
|
||||||
K_drawButtonAnim((x + xoffs), y + 22, V_SNAPTORIGHT, kp_button_x[1], discordrequestmenu.ticker);
|
K_drawButtonAnim((x + xoffs), y + 22, V_SNAPTORIGHT, kp_button_x[1], discordrequestmenu.ticker);
|
||||||
xoffs += altDeclineButtonWidth;
|
xoffs += altDeclineButtonWidth;
|
||||||
|
|
||||||
V_DrawThinString((x + xoffs), y + 24, V_ALLOWLOWERCASE|V_6WIDTHSPACE, declineText);
|
V_DrawThinString((x + xoffs), y + 24, 0, declineText);
|
||||||
|
|
||||||
y -= 18;
|
y -= 18;
|
||||||
|
|
||||||
|
|
@ -6759,8 +6758,10 @@ void M_DrawDiscordRequests(void)
|
||||||
|
|
||||||
curRequest = curRequest->next;
|
curRequest = curRequest->next;
|
||||||
|
|
||||||
K_DrawSticker(x, y - 1 + ySlide, V_ThinStringWidth(M_GetDiscordName(curRequest), V_ALLOWLOWERCASE|V_6WIDTHSPACE), 0, false);
|
const char *discordname = M_GetDiscordName(curRequest);
|
||||||
V_DrawThinString(x, y + ySlide, V_ALLOWLOWERCASE|V_6WIDTHSPACE, M_GetDiscordName(curRequest));
|
|
||||||
|
K_DrawSticker(x, y - 1 + ySlide, V_ThinStringWidth(discordname, 0), 0, false);
|
||||||
|
V_DrawThinString(x, y + ySlide, 0, discordname);
|
||||||
|
|
||||||
y -= 12;
|
y -= 12;
|
||||||
maxYSlide = 12;
|
maxYSlide = 12;
|
||||||
|
|
|
||||||
|
|
@ -542,42 +542,42 @@ void K_CeremonyDrawer(void)
|
||||||
{
|
{
|
||||||
case 1:
|
case 1:
|
||||||
{
|
{
|
||||||
V_DrawString(x, y, V_ALLOWLOWERCASE,
|
V_DrawString(x, y, 0,
|
||||||
va("POS: %d / %d", podiumData.rank.position, RANK_NEUTRAL_POSITION)
|
va("POS: %d / %d", podiumData.rank.position, RANK_NEUTRAL_POSITION)
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 2:
|
case 2:
|
||||||
{
|
{
|
||||||
V_DrawString(x, y, V_ALLOWLOWERCASE,
|
V_DrawString(x, y, 0,
|
||||||
va("PTS: %d / %d", podiumData.rank.winPoints, podiumData.rank.totalPoints)
|
va("PTS: %d / %d", podiumData.rank.winPoints, podiumData.rank.totalPoints)
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 3:
|
case 3:
|
||||||
{
|
{
|
||||||
V_DrawString(x, y, V_ALLOWLOWERCASE,
|
V_DrawString(x, y, 0,
|
||||||
va("LAPS: %d / %d", podiumData.rank.laps, podiumData.rank.totalLaps)
|
va("LAPS: %d / %d", podiumData.rank.laps, podiumData.rank.totalLaps)
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 4:
|
case 4:
|
||||||
{
|
{
|
||||||
V_DrawString(x, y, V_ALLOWLOWERCASE,
|
V_DrawString(x, y, 0,
|
||||||
va("CONTINUES: %d", podiumData.rank.continuesUsed)
|
va("CONTINUES: %d", podiumData.rank.continuesUsed)
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 5:
|
case 5:
|
||||||
{
|
{
|
||||||
V_DrawString(x, y, V_ALLOWLOWERCASE,
|
V_DrawString(x, y, 0,
|
||||||
va("PRISONS: %d / %d", podiumData.rank.prisons, podiumData.rank.totalPrisons)
|
va("PRISONS: %d / %d", podiumData.rank.prisons, podiumData.rank.totalPrisons)
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 6:
|
case 6:
|
||||||
{
|
{
|
||||||
V_DrawString(x, y, V_ALLOWLOWERCASE,
|
V_DrawString(x, y, 0,
|
||||||
va("RINGS: %d / %d", podiumData.rank.rings, podiumData.rank.totalRings)
|
va("RINGS: %d / %d", podiumData.rank.rings, podiumData.rank.totalRings)
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
|
|
@ -595,7 +595,7 @@ void K_CeremonyDrawer(void)
|
||||||
: "PRIZE";
|
: "PRIZE";
|
||||||
}
|
}
|
||||||
|
|
||||||
V_DrawString(x, y, V_ALLOWLOWERCASE,
|
V_DrawString(x, y, 0,
|
||||||
va("%s: %s",
|
va("%s: %s",
|
||||||
emeraldstr,
|
emeraldstr,
|
||||||
(podiumData.rank.specialWon == true) ? "YES" : "NO")
|
(podiumData.rank.specialWon == true) ? "YES" : "NO")
|
||||||
|
|
@ -604,14 +604,14 @@ void K_CeremonyDrawer(void)
|
||||||
}
|
}
|
||||||
case 8:
|
case 8:
|
||||||
{
|
{
|
||||||
V_DrawString(x, y + 10, V_YELLOWMAP|V_ALLOWLOWERCASE,
|
V_DrawString(x, y + 10, V_YELLOWMAP,
|
||||||
va(" ** FINAL GRADE: %c", gradeChar)
|
va(" ** FINAL GRADE: %c", gradeChar)
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 9:
|
case 9:
|
||||||
{
|
{
|
||||||
V_DrawThinString(2, BASEVIDHEIGHT - 10, V_SNAPTOBOTTOM|V_SNAPTOLEFT|V_6WIDTHSPACE|V_ALLOWLOWERCASE,
|
V_DrawThinString(2, BASEVIDHEIGHT - 10, V_SNAPTOBOTTOM|V_SNAPTOLEFT|V_6WIDTHSPACE,
|
||||||
"Press some button type deal to continue"
|
"Press some button type deal to continue"
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -1172,7 +1172,7 @@ void K_DrawMidVote(void)
|
||||||
{
|
{
|
||||||
strWidth = V__OneScaleStringWidth(
|
strWidth = V__OneScaleStringWidth(
|
||||||
FRACUNIT,
|
FRACUNIT,
|
||||||
V_SNAPTOBOTTOM|V_SNAPTORIGHT|V_SPLITSCREEN|V_6WIDTHSPACE|V_ALLOWLOWERCASE,
|
V_SNAPTOBOTTOM|V_SNAPTORIGHT|V_SPLITSCREEN,
|
||||||
TINY_FONT, player_names[g_midVote.victim - players]
|
TINY_FONT, player_names[g_midVote.victim - players]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -1180,7 +1180,7 @@ void K_DrawMidVote(void)
|
||||||
x - (strWidth >> 1),
|
x - (strWidth >> 1),
|
||||||
y + (18 * FRACUNIT),
|
y + (18 * FRACUNIT),
|
||||||
FRACUNIT,
|
FRACUNIT,
|
||||||
V_SNAPTOBOTTOM|V_SNAPTORIGHT|V_SPLITSCREEN|V_6WIDTHSPACE|V_ALLOWLOWERCASE, NULL,
|
V_SNAPTOBOTTOM|V_SNAPTORIGHT|V_SPLITSCREEN, NULL,
|
||||||
TINY_FONT, player_names[g_midVote.victim - players]
|
TINY_FONT, player_names[g_midVote.victim - players]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -887,7 +887,7 @@ static int libd_drawString(lua_State *L)
|
||||||
fixed_t x = luaL_checkinteger(L, 1);
|
fixed_t x = luaL_checkinteger(L, 1);
|
||||||
fixed_t y = luaL_checkinteger(L, 2);
|
fixed_t y = luaL_checkinteger(L, 2);
|
||||||
const char *str = luaL_checkstring(L, 3);
|
const char *str = luaL_checkstring(L, 3);
|
||||||
INT32 flags = luaL_optinteger(L, 4, V_ALLOWLOWERCASE);
|
INT32 flags = luaL_optinteger(L, 4, 0);
|
||||||
enum align align = luaL_checkoption(L, 5, "left", align_opt);
|
enum align align = luaL_checkoption(L, 5, "left", align_opt);
|
||||||
|
|
||||||
flags &= ~V_PARAMMASK; // Don't let crashes happen.
|
flags &= ~V_PARAMMASK; // Don't let crashes happen.
|
||||||
|
|
@ -944,7 +944,7 @@ static int libd_drawTitleCardString(lua_State *L)
|
||||||
fixed_t x = luaL_checkinteger(L, 1);
|
fixed_t x = luaL_checkinteger(L, 1);
|
||||||
fixed_t y = luaL_checkinteger(L, 2);
|
fixed_t y = luaL_checkinteger(L, 2);
|
||||||
const char *str = luaL_checkstring(L, 3);
|
const char *str = luaL_checkstring(L, 3);
|
||||||
INT32 flags = luaL_optinteger(L, 4, V_ALLOWLOWERCASE);
|
INT32 flags = luaL_optinteger(L, 4, 0);
|
||||||
boolean rightalign = lua_optboolean(L, 5);
|
boolean rightalign = lua_optboolean(L, 5);
|
||||||
INT32 timer = luaL_optinteger(L, 6, 0);
|
INT32 timer = luaL_optinteger(L, 6, 0);
|
||||||
INT32 threshold = luaL_optinteger(L, 7, 0);
|
INT32 threshold = luaL_optinteger(L, 7, 0);
|
||||||
|
|
@ -969,7 +969,7 @@ static int libd_drawKartString(lua_State *L)
|
||||||
fixed_t x = luaL_checkinteger(L, 1);
|
fixed_t x = luaL_checkinteger(L, 1);
|
||||||
fixed_t y = luaL_checkinteger(L, 2);
|
fixed_t y = luaL_checkinteger(L, 2);
|
||||||
const char *str = luaL_checkstring(L, 3);
|
const char *str = luaL_checkstring(L, 3);
|
||||||
INT32 flags = luaL_optinteger(L, 4, V_ALLOWLOWERCASE);
|
INT32 flags = luaL_optinteger(L, 4, 0);
|
||||||
huddrawlist_h list;
|
huddrawlist_h list;
|
||||||
|
|
||||||
flags &= ~V_PARAMMASK; // Don't let crashes happen.
|
flags &= ~V_PARAMMASK; // Don't let crashes happen.
|
||||||
|
|
@ -998,7 +998,7 @@ static int libd_titleCardStringWidth(lua_State *L)
|
||||||
static int libd_stringWidth(lua_State *L)
|
static int libd_stringWidth(lua_State *L)
|
||||||
{
|
{
|
||||||
const char *str = luaL_checkstring(L, 1);
|
const char *str = luaL_checkstring(L, 1);
|
||||||
INT32 flags = luaL_optinteger(L, 2, V_ALLOWLOWERCASE);
|
INT32 flags = luaL_optinteger(L, 2, 0);
|
||||||
enum widtht widtht = luaL_checkoption(L, 3, "normal", widtht_opt);
|
enum widtht widtht = luaL_checkoption(L, 3, "normal", widtht_opt);
|
||||||
|
|
||||||
HUDONLY
|
HUDONLY
|
||||||
|
|
|
||||||
41
src/m_cond.c
41
src/m_cond.c
|
|
@ -1515,7 +1515,7 @@ char *M_BuildConditionSetString(UINT16 unlockid)
|
||||||
size_t len = 1024, worklen;
|
size_t len = 1024, worklen;
|
||||||
static char message[1024] = "";
|
static char message[1024] = "";
|
||||||
const char *work = NULL;
|
const char *work = NULL;
|
||||||
size_t max = 0, maxatstart = 0, start = 0, i;
|
size_t i;
|
||||||
boolean stopasap = false;
|
boolean stopasap = false;
|
||||||
|
|
||||||
message[0] = '\0';
|
message[0] = '\0';
|
||||||
|
|
@ -1577,35 +1577,9 @@ char *M_BuildConditionSetString(UINT16 unlockid)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Rudementary word wrapping.
|
if (message[0] == '\0')
|
||||||
// Simple and effective. Does not handle nonuniform letter sizes, etc. but who cares.
|
|
||||||
for (i = 0; message[i]; i++)
|
|
||||||
{
|
{
|
||||||
if (message[i] == ' ')
|
return NULL;
|
||||||
{
|
|
||||||
start = i;
|
|
||||||
max += 4;
|
|
||||||
maxatstart = max;
|
|
||||||
}
|
|
||||||
else if (message[i] == '\n')
|
|
||||||
{
|
|
||||||
start = 0;
|
|
||||||
max = 0;
|
|
||||||
maxatstart = 0;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
else if (message[i] & 0x80)
|
|
||||||
continue;
|
|
||||||
else
|
|
||||||
max += 8;
|
|
||||||
|
|
||||||
// Start trying to wrap if presumed length exceeds the space we have on-screen.
|
|
||||||
if (max >= DESCRIPTIONWIDTH && start > 0)
|
|
||||||
{
|
|
||||||
message[start] = '\n';
|
|
||||||
max -= maxatstart;
|
|
||||||
start = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Valid sentence capitalisation handling.
|
// Valid sentence capitalisation handling.
|
||||||
|
|
@ -1634,7 +1608,14 @@ char *M_BuildConditionSetString(UINT16 unlockid)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return message;
|
// Finally, do a clean wordwrap!
|
||||||
|
return V_ScaledWordWrap(
|
||||||
|
DESCRIPTIONWIDTH << FRACBITS,
|
||||||
|
FRACUNIT, FRACUNIT, FRACUNIT,
|
||||||
|
0,
|
||||||
|
HU_FONT,
|
||||||
|
message
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static boolean M_CheckUnlockConditions(player_t *player)
|
static boolean M_CheckUnlockConditions(player_t *player)
|
||||||
|
|
|
||||||
|
|
@ -123,7 +123,7 @@ static void M_DrawPerfString(perfstatcol_t *col, int type)
|
||||||
int value;
|
int value;
|
||||||
|
|
||||||
if (hires)
|
if (hires)
|
||||||
draw_flags |= V_ALLOWLOWERCASE;
|
draw_flags |= 0;
|
||||||
|
|
||||||
for (row = col->rows; row->lores_label; ++row)
|
for (row = col->rows; row->lores_label; ++row)
|
||||||
{
|
{
|
||||||
|
|
@ -476,7 +476,7 @@ static void M_DrawTickStats(void)
|
||||||
|
|
||||||
if (M_HighResolution())
|
if (M_HighResolution())
|
||||||
{
|
{
|
||||||
V_DrawSmallString(212, 10, V_MONOSPACE | V_ALLOWLOWERCASE | V_PURPLEMAP, "Calls:");
|
V_DrawSmallString(212, 10, V_MONOSPACE | V_PURPLEMAP, "Calls:");
|
||||||
|
|
||||||
draw_row = 15;
|
draw_row = 15;
|
||||||
}
|
}
|
||||||
|
|
@ -507,7 +507,7 @@ void M_DrawPerfStats(void)
|
||||||
if (vid.width < 640 || vid.height < 400) // low resolution
|
if (vid.width < 640 || vid.height < 400) // low resolution
|
||||||
{
|
{
|
||||||
// it's not gonna fit very well..
|
// it's not gonna fit very well..
|
||||||
V_DrawThinString(30, 30, V_MONOSPACE | V_ALLOWLOWERCASE | V_YELLOWMAP, "Not available for resolutions below 640x400");
|
V_DrawThinString(30, 30, V_MONOSPACE | V_YELLOWMAP, "Not available for resolutions below 640x400");
|
||||||
}
|
}
|
||||||
else // high resolution
|
else // high resolution
|
||||||
{
|
{
|
||||||
|
|
@ -526,10 +526,10 @@ void M_DrawPerfStats(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
snprintf(s, sizeof s - 1, "Bot %d (%s):", i + 1, player_names[i]);
|
snprintf(s, sizeof s - 1, "Bot %d (%s):", i + 1, player_names[i]);
|
||||||
V_DrawSmallString(x, y, V_MONOSPACE | V_ALLOWLOWERCASE | V_GRAYMAP, s);
|
V_DrawSmallString(x, y, V_MONOSPACE | V_GRAYMAP, s);
|
||||||
|
|
||||||
snprintf(s, sizeof s - 1, "%ld", (long)((ps_bots[i].total) / (I_GetPrecisePrecision() / 1000000)));
|
snprintf(s, sizeof s - 1, "%ld", (long)((ps_bots[i].total) / (I_GetPrecisePrecision() / 1000000)));
|
||||||
V_DrawRightAlignedSmallString(x + 98, y, V_MONOSPACE | V_ALLOWLOWERCASE | V_GRAYMAP, s);
|
V_DrawRightAlignedSmallString(x + 98, y, V_MONOSPACE | V_GRAYMAP, s);
|
||||||
|
|
||||||
y += 4; // repeated code!
|
y += 4; // repeated code!
|
||||||
if (y > 192)
|
if (y > 192)
|
||||||
|
|
@ -541,10 +541,10 @@ void M_DrawPerfStats(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
snprintf(s, sizeof s - 1, "Prediction:");
|
snprintf(s, sizeof s - 1, "Prediction:");
|
||||||
V_DrawSmallString(x, y, V_MONOSPACE | V_ALLOWLOWERCASE | V_YELLOWMAP, s);
|
V_DrawSmallString(x, y, V_MONOSPACE | V_YELLOWMAP, s);
|
||||||
|
|
||||||
snprintf(s, sizeof s - 1, "%ld", (long)((ps_bots[i].prediction) / (I_GetPrecisePrecision() / 1000000)));
|
snprintf(s, sizeof s - 1, "%ld", (long)((ps_bots[i].prediction) / (I_GetPrecisePrecision() / 1000000)));
|
||||||
V_DrawRightAlignedSmallString(x + 98, y, V_MONOSPACE | V_ALLOWLOWERCASE, s);
|
V_DrawRightAlignedSmallString(x + 98, y, V_MONOSPACE, s);
|
||||||
|
|
||||||
y += 4; // repeated code!
|
y += 4; // repeated code!
|
||||||
if (y > 192)
|
if (y > 192)
|
||||||
|
|
@ -556,10 +556,10 @@ void M_DrawPerfStats(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
snprintf(s, sizeof s - 1, "Nudge:");
|
snprintf(s, sizeof s - 1, "Nudge:");
|
||||||
V_DrawSmallString(x, y, V_MONOSPACE | V_ALLOWLOWERCASE | V_YELLOWMAP, s);
|
V_DrawSmallString(x, y, V_MONOSPACE | V_YELLOWMAP, s);
|
||||||
|
|
||||||
snprintf(s, sizeof s - 1, "%ld", (long)((ps_bots[i].nudge) / (I_GetPrecisePrecision() / 1000000)));
|
snprintf(s, sizeof s - 1, "%ld", (long)((ps_bots[i].nudge) / (I_GetPrecisePrecision() / 1000000)));
|
||||||
V_DrawRightAlignedSmallString(x + 98, y, V_MONOSPACE | V_ALLOWLOWERCASE, s);
|
V_DrawRightAlignedSmallString(x + 98, y, V_MONOSPACE, s);
|
||||||
|
|
||||||
y += 4; // repeated code!
|
y += 4; // repeated code!
|
||||||
if (y > 192)
|
if (y > 192)
|
||||||
|
|
@ -571,10 +571,10 @@ void M_DrawPerfStats(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
snprintf(s, sizeof s - 1, "Item:");
|
snprintf(s, sizeof s - 1, "Item:");
|
||||||
V_DrawSmallString(x, y, V_MONOSPACE | V_ALLOWLOWERCASE | V_YELLOWMAP, s);
|
V_DrawSmallString(x, y, V_MONOSPACE | V_YELLOWMAP, s);
|
||||||
|
|
||||||
snprintf(s, sizeof s - 1, "%ld", (long)((ps_bots[i].item) / (I_GetPrecisePrecision() / 1000000)));
|
snprintf(s, sizeof s - 1, "%ld", (long)((ps_bots[i].item) / (I_GetPrecisePrecision() / 1000000)));
|
||||||
V_DrawRightAlignedSmallString(x + 98, y, V_MONOSPACE | V_ALLOWLOWERCASE, s);
|
V_DrawRightAlignedSmallString(x + 98, y, V_MONOSPACE, s);
|
||||||
|
|
||||||
y += 4; // repeated code!
|
y += 4; // repeated code!
|
||||||
if (y > 192)
|
if (y > 192)
|
||||||
|
|
@ -586,11 +586,11 @@ void M_DrawPerfStats(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
snprintf(s, sizeof s - 1, "Other:");
|
snprintf(s, sizeof s - 1, "Other:");
|
||||||
V_DrawSmallString(x, y, V_MONOSPACE | V_ALLOWLOWERCASE | V_YELLOWMAP, s);
|
V_DrawSmallString(x, y, V_MONOSPACE | V_YELLOWMAP, s);
|
||||||
|
|
||||||
otherTime = ps_bots[i].total - ps_bots[i].prediction - ps_bots[i].nudge - ps_bots[i].item;
|
otherTime = ps_bots[i].total - ps_bots[i].prediction - ps_bots[i].nudge - ps_bots[i].item;
|
||||||
snprintf(s, sizeof s - 1, "%ld", (long)(otherTime / (I_GetPrecisePrecision() / 1000000)));
|
snprintf(s, sizeof s - 1, "%ld", (long)(otherTime / (I_GetPrecisePrecision() / 1000000)));
|
||||||
V_DrawRightAlignedSmallString(x + 98, y, V_MONOSPACE | V_ALLOWLOWERCASE, s);
|
V_DrawRightAlignedSmallString(x + 98, y, V_MONOSPACE, s);
|
||||||
|
|
||||||
y += 4; // repeated code!
|
y += 4; // repeated code!
|
||||||
if (y > 192)
|
if (y > 192)
|
||||||
|
|
@ -621,7 +621,7 @@ void M_DrawPerfStats(void)
|
||||||
if (vid.width < 640 || vid.height < 400) // low resolution
|
if (vid.width < 640 || vid.height < 400) // low resolution
|
||||||
{
|
{
|
||||||
// it's not gonna fit very well..
|
// it's not gonna fit very well..
|
||||||
V_DrawThinString(30, 30, V_MONOSPACE | V_ALLOWLOWERCASE | V_YELLOWMAP, "Not available for resolutions below 640x400");
|
V_DrawThinString(30, 30, V_MONOSPACE | V_YELLOWMAP, "Not available for resolutions below 640x400");
|
||||||
}
|
}
|
||||||
else // high resolution
|
else // high resolution
|
||||||
{
|
{
|
||||||
|
|
@ -664,7 +664,7 @@ void M_DrawPerfStats(void)
|
||||||
if (len > 25)
|
if (len > 25)
|
||||||
tempstr += len - 25;
|
tempstr += len - 25;
|
||||||
snprintf(s, sizeof s - 1, "%s", tempstr);
|
snprintf(s, sizeof s - 1, "%s", tempstr);
|
||||||
V_DrawSmallString(x, y, V_MONOSPACE | V_ALLOWLOWERCASE | V_GRAYMAP, s);
|
V_DrawSmallString(x, y, V_MONOSPACE | V_GRAYMAP, s);
|
||||||
y += 4; // repeated code!
|
y += 4; // repeated code!
|
||||||
if (y > 192)
|
if (y > 192)
|
||||||
{
|
{
|
||||||
|
|
@ -689,7 +689,7 @@ void M_DrawPerfStats(void)
|
||||||
if (len > 20)
|
if (len > 20)
|
||||||
str += len - 20;
|
str += len - 20;
|
||||||
snprintf(s, sizeof s - 1, "%20s: %ld", str, (long)((thinkframe_hooks[i].time_taken) / (I_GetPrecisePrecision() / 1000000)));
|
snprintf(s, sizeof s - 1, "%20s: %ld", str, (long)((thinkframe_hooks[i].time_taken) / (I_GetPrecisePrecision() / 1000000)));
|
||||||
V_DrawSmallString(x, y, V_MONOSPACE | V_ALLOWLOWERCASE | text_color, s);
|
V_DrawSmallString(x, y, V_MONOSPACE | text_color, s);
|
||||||
y += 4; // repeated code!
|
y += 4; // repeated code!
|
||||||
if (y > 192)
|
if (y > 192)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -104,7 +104,7 @@ void AVRecorder::draw_statistics() const
|
||||||
V_DrawThinString(
|
V_DrawThinString(
|
||||||
x,
|
x,
|
||||||
190,
|
190,
|
||||||
(V_6WIDTHSPACE | V_ALLOWLOWERCASE | V_SNAPTOBOTTOM | V_SNAPTORIGHT) | flags,
|
(V_SNAPTOBOTTOM | V_SNAPTORIGHT) | flags,
|
||||||
text.c_str()
|
text.c_str()
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -104,6 +104,8 @@ static void M_ChallengesAutoFocus(UINT16 unlockid, boolean fresh)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
challengesmenu.currentunlock = unlockid;
|
challengesmenu.currentunlock = unlockid;
|
||||||
|
if (challengesmenu.unlockcondition)
|
||||||
|
Z_Free(challengesmenu.unlockcondition);
|
||||||
challengesmenu.unlockcondition = M_BuildConditionSetString(challengesmenu.currentunlock);
|
challengesmenu.unlockcondition = M_BuildConditionSetString(challengesmenu.currentunlock);
|
||||||
challengesmenu.unlockanim = (challengesmenu.pending && !challengesmenu.chaokeyadd ? 0 : MAXUNLOCKTIME);
|
challengesmenu.unlockanim = (challengesmenu.pending && !challengesmenu.chaokeyadd ? 0 : MAXUNLOCKTIME);
|
||||||
|
|
||||||
|
|
@ -505,6 +507,8 @@ void M_ChallengesTick(void)
|
||||||
M_UpdateUnlockablesAndExtraEmblems(true, true);
|
M_UpdateUnlockablesAndExtraEmblems(true, true);
|
||||||
|
|
||||||
// Update shown description just in case..?
|
// Update shown description just in case..?
|
||||||
|
if (challengesmenu.unlockcondition)
|
||||||
|
Z_Free(challengesmenu.unlockcondition);
|
||||||
challengesmenu.unlockcondition = M_BuildConditionSetString(challengesmenu.currentunlock);
|
challengesmenu.unlockcondition = M_BuildConditionSetString(challengesmenu.currentunlock);
|
||||||
|
|
||||||
challengesmenu.unlockcount[CC_TALLY]++;
|
challengesmenu.unlockcount[CC_TALLY]++;
|
||||||
|
|
@ -787,6 +791,8 @@ boolean M_ChallengesInputs(INT32 ch)
|
||||||
// After movement has been determined, figure out the current selection.
|
// After movement has been determined, figure out the current selection.
|
||||||
i = (challengesmenu.col * CHALLENGEGRIDHEIGHT) + challengesmenu.row;
|
i = (challengesmenu.col * CHALLENGEGRIDHEIGHT) + challengesmenu.row;
|
||||||
challengesmenu.currentunlock = (gamedata->challengegrid[i]);
|
challengesmenu.currentunlock = (gamedata->challengegrid[i]);
|
||||||
|
if (challengesmenu.unlockcondition)
|
||||||
|
Z_Free(challengesmenu.unlockcondition);
|
||||||
challengesmenu.unlockcondition = M_BuildConditionSetString(challengesmenu.currentunlock);
|
challengesmenu.unlockcondition = M_BuildConditionSetString(challengesmenu.currentunlock);
|
||||||
|
|
||||||
challengesmenu.hilix = challengesmenu.col;
|
challengesmenu.hilix = challengesmenu.col;
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
// \brief MESSAGE BOX (aka: a hacked, cobbled together menu)
|
// \brief MESSAGE BOX (aka: a hacked, cobbled together menu)
|
||||||
|
|
||||||
#include "../../k_menu.h"
|
#include "../../k_menu.h"
|
||||||
|
#include "../../v_video.h" // V_ScaledWordWrap, HU_FONT
|
||||||
#include "../../z_zone.h"
|
#include "../../z_zone.h"
|
||||||
|
|
||||||
// message prompt struct
|
// message prompt struct
|
||||||
|
|
@ -30,42 +31,17 @@ static inline size_t M_StringHeight(const char *string)
|
||||||
void M_StartMessage(const char *header, const char *string, void (*routine)(INT32), menumessagetype_t itemtype, const char *confirmstr, const char *defaultstr)
|
void M_StartMessage(const char *header, const char *string, void (*routine)(INT32), menumessagetype_t itemtype, const char *confirmstr, const char *defaultstr)
|
||||||
{
|
{
|
||||||
const UINT8 pid = 0;
|
const UINT8 pid = 0;
|
||||||
size_t max = 0, maxatstart = 0, start = 0, strlines, i;
|
|
||||||
static char *message = NULL;
|
static char *message = NULL;
|
||||||
Z_Free(message);
|
Z_Free(message);
|
||||||
message = Z_StrDup(string);
|
DEBFILE(string);
|
||||||
DEBFILE(message);
|
|
||||||
|
|
||||||
// Rudementary word wrapping.
|
message = V_ScaledWordWrap(
|
||||||
// Simple and effective. Does not handle nonuniform letter sizes, etc. but who cares.
|
BASEVIDWIDTH << FRACBITS,
|
||||||
for (i = 0; message[i]; i++)
|
FRACUNIT, FRACUNIT, FRACUNIT,
|
||||||
{
|
0,
|
||||||
if (message[i] == ' ')
|
HU_FONT,
|
||||||
{
|
string
|
||||||
start = i;
|
);
|
||||||
max += 4;
|
|
||||||
maxatstart = max;
|
|
||||||
}
|
|
||||||
else if (message[i] == '\n')
|
|
||||||
{
|
|
||||||
start = 0;
|
|
||||||
max = 0;
|
|
||||||
maxatstart = 0;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
else if (message[i] & 0x80)
|
|
||||||
continue;
|
|
||||||
else
|
|
||||||
max += 8;
|
|
||||||
|
|
||||||
// Start trying to wrap if presumed length exceeds the screen width.
|
|
||||||
if (max >= BASEVIDWIDTH && start > 0)
|
|
||||||
{
|
|
||||||
message[start] = '\n';
|
|
||||||
max -= maxatstart;
|
|
||||||
start = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
strncpy(menumessage.message, string, MAXMENUMESSAGE);
|
strncpy(menumessage.message, string, MAXMENUMESSAGE);
|
||||||
menumessage.header = header;
|
menumessage.header = header;
|
||||||
|
|
@ -77,9 +53,6 @@ void M_StartMessage(const char *header, const char *string, void (*routine)(INT3
|
||||||
menumessage.closing = 0;
|
menumessage.closing = 0;
|
||||||
menumessage.active = true;
|
menumessage.active = true;
|
||||||
|
|
||||||
start = 0;
|
|
||||||
max = 0;
|
|
||||||
|
|
||||||
if (!routine)
|
if (!routine)
|
||||||
{
|
{
|
||||||
menumessage.flags = MM_NOTHING;
|
menumessage.flags = MM_NOTHING;
|
||||||
|
|
@ -108,29 +81,7 @@ void M_StartMessage(const char *header, const char *string, void (*routine)(INT3
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
//added : 06-02-98: now draw a textbox around the message
|
//added : 06-02-98: now draw a textbox around the message
|
||||||
// compute lenght max and the numbers of lines
|
// oogh my god this was replaced in 2023
|
||||||
for (strlines = 0; *(message+start); strlines++)
|
|
||||||
{
|
|
||||||
for (i = 0; i < strlen(message+start);i++)
|
|
||||||
{
|
|
||||||
if (*(message+start+i) == '\n')
|
|
||||||
{
|
|
||||||
if (i > max)
|
|
||||||
max = i;
|
|
||||||
start += i;
|
|
||||||
i = (size_t)-1; //added : 07-02-98 : damned!
|
|
||||||
start++;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i == strlen(message+start))
|
|
||||||
{
|
|
||||||
start += i;
|
|
||||||
if (i > max)
|
|
||||||
max = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
menumessage.x = (8 * MAXSTRINGLENGTH) - 1;
|
menumessage.x = (8 * MAXSTRINGLENGTH) - 1;
|
||||||
menumessage.y = M_StringHeight(message);
|
menumessage.y = M_StringHeight(message);
|
||||||
|
|
|
||||||
28
src/p_mobj.c
28
src/p_mobj.c
|
|
@ -13788,8 +13788,15 @@ static void P_SpawnItemRow(mapthing_t *mthing, mobjtype_t *itemtypes, UINT8 numi
|
||||||
y + FixedMul(length, FINESINE(fineangle)),
|
y + FixedMul(length, FINESINE(fineangle)),
|
||||||
z, MT_LOOPCENTERPOINT);
|
z, MT_LOOPCENTERPOINT);
|
||||||
|
|
||||||
if (!P_MobjWasRemoved(loopanchor))
|
if (P_MobjWasRemoved(loopanchor))
|
||||||
Obj_LinkLoopAnchor(loopanchor, loopcenter, mthing->args[0]);
|
{
|
||||||
|
// No recovery.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
loopanchor->spawnpoint = NULL;
|
||||||
|
|
||||||
|
Obj_LinkLoopAnchor(loopanchor, loopcenter, mthing->args[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (r = 0; r < numitems; r++)
|
for (r = 0; r < numitems; r++)
|
||||||
|
|
@ -13809,15 +13816,15 @@ static void P_SpawnItemRow(mapthing_t *mthing, mobjtype_t *itemtypes, UINT8 numi
|
||||||
if (!inclusive)
|
if (!inclusive)
|
||||||
mobj = P_SpawnMobjFromMapThing(&dummything, x, y, z, itemtype);
|
mobj = P_SpawnMobjFromMapThing(&dummything, x, y, z, itemtype);
|
||||||
|
|
||||||
if (!mobj)
|
if (P_MobjWasRemoved(mobj))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (isloopend)
|
|
||||||
{
|
|
||||||
Obj_InitLoopEndpoint(mobj, loopanchor);
|
|
||||||
}
|
|
||||||
|
|
||||||
mobj->spawnpoint = NULL;
|
mobj->spawnpoint = NULL;
|
||||||
|
|
||||||
|
if (!isloopend)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
Obj_InitLoopEndpoint(mobj, loopanchor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -13875,11 +13882,12 @@ static void P_SpawnItemCircle(mapthing_t *mthing, mobjtype_t *itemtypes, UINT8 n
|
||||||
|
|
||||||
mobj = P_SpawnMobjFromMapThing(&dummything, x + v[0], y + v[1], z + v[2], itemtype);
|
mobj = P_SpawnMobjFromMapThing(&dummything, x + v[0], y + v[1], z + v[2], itemtype);
|
||||||
|
|
||||||
if (!mobj)
|
if (P_MobjWasRemoved(mobj))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
mobj->z -= mobj->height/2;
|
|
||||||
mobj->spawnpoint = NULL;
|
mobj->spawnpoint = NULL;
|
||||||
|
|
||||||
|
mobj->z -= mobj->height/2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4074,7 +4074,10 @@ static thinker_t* LoadMobjThinker(savebuffer_t *save, actionf_p1 thinker)
|
||||||
if (diff2 & MD2_RENDERFLAGS)
|
if (diff2 & MD2_RENDERFLAGS)
|
||||||
mobj->renderflags = READUINT32(save->p);
|
mobj->renderflags = READUINT32(save->p);
|
||||||
if (diff2 & MD2_TID)
|
if (diff2 & MD2_TID)
|
||||||
P_SetThingTID(mobj, READINT16(save->p));
|
{
|
||||||
|
INT16 tid = READINT16(save->p);
|
||||||
|
P_SetThingTID(mobj, tid);
|
||||||
|
}
|
||||||
if (diff2 & MD2_SPRITESCALE)
|
if (diff2 & MD2_SPRITESCALE)
|
||||||
{
|
{
|
||||||
mobj->spritexscale = READFIXED(save->p);
|
mobj->spritexscale = READFIXED(save->p);
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,6 @@
|
||||||
#include "p_polyobj.h"
|
#include "p_polyobj.h"
|
||||||
#include "p_slopes.h"
|
#include "p_slopes.h"
|
||||||
#include "hu_stuff.h"
|
#include "hu_stuff.h"
|
||||||
#include "v_video.h" // V_ALLOWLOWERCASE
|
|
||||||
#include "m_misc.h"
|
#include "m_misc.h"
|
||||||
#include "m_cond.h" //unlock triggers
|
#include "m_cond.h" //unlock triggers
|
||||||
#include "lua_hook.h" // LUA_HookSpecialExecute
|
#include "lua_hook.h" // LUA_HookSpecialExecute
|
||||||
|
|
|
||||||
|
|
@ -568,8 +568,6 @@ GlCoreRhi::~GlCoreRhi() = default;
|
||||||
|
|
||||||
rhi::Handle<rhi::RenderPass> GlCoreRhi::create_render_pass(const rhi::RenderPassDesc& desc)
|
rhi::Handle<rhi::RenderPass> GlCoreRhi::create_render_pass(const rhi::RenderPassDesc& desc)
|
||||||
{
|
{
|
||||||
SRB2_ASSERT(graphics_context_active_ == false);
|
|
||||||
|
|
||||||
// GL has no formal render pass object
|
// GL has no formal render pass object
|
||||||
GlCoreRenderPass pass;
|
GlCoreRenderPass pass;
|
||||||
pass.desc = desc;
|
pass.desc = desc;
|
||||||
|
|
@ -578,15 +576,11 @@ rhi::Handle<rhi::RenderPass> GlCoreRhi::create_render_pass(const rhi::RenderPass
|
||||||
|
|
||||||
void GlCoreRhi::destroy_render_pass(rhi::Handle<rhi::RenderPass> handle)
|
void GlCoreRhi::destroy_render_pass(rhi::Handle<rhi::RenderPass> handle)
|
||||||
{
|
{
|
||||||
SRB2_ASSERT(graphics_context_active_ == false);
|
|
||||||
|
|
||||||
render_pass_slab_.remove(handle);
|
render_pass_slab_.remove(handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
rhi::Handle<rhi::Texture> GlCoreRhi::create_texture(const rhi::TextureDesc& desc)
|
rhi::Handle<rhi::Texture> GlCoreRhi::create_texture(const rhi::TextureDesc& desc)
|
||||||
{
|
{
|
||||||
SRB2_ASSERT(graphics_context_active_ == false);
|
|
||||||
|
|
||||||
GLenum internal_format = map_internal_texture_format(desc.format);
|
GLenum internal_format = map_internal_texture_format(desc.format);
|
||||||
SRB2_ASSERT(internal_format != GL_ZERO);
|
SRB2_ASSERT(internal_format != GL_ZERO);
|
||||||
GLenum format = GL_RGBA;
|
GLenum format = GL_RGBA;
|
||||||
|
|
@ -615,8 +609,6 @@ rhi::Handle<rhi::Texture> GlCoreRhi::create_texture(const rhi::TextureDesc& desc
|
||||||
|
|
||||||
void GlCoreRhi::destroy_texture(rhi::Handle<rhi::Texture> handle)
|
void GlCoreRhi::destroy_texture(rhi::Handle<rhi::Texture> handle)
|
||||||
{
|
{
|
||||||
SRB2_ASSERT(graphics_context_active_ == false);
|
|
||||||
|
|
||||||
SRB2_ASSERT(texture_slab_.is_valid(handle) == true);
|
SRB2_ASSERT(texture_slab_.is_valid(handle) == true);
|
||||||
GlCoreTexture casted = texture_slab_.remove(handle);
|
GlCoreTexture casted = texture_slab_.remove(handle);
|
||||||
GLuint name = casted.texture;
|
GLuint name = casted.texture;
|
||||||
|
|
@ -624,16 +616,14 @@ void GlCoreRhi::destroy_texture(rhi::Handle<rhi::Texture> handle)
|
||||||
}
|
}
|
||||||
|
|
||||||
void GlCoreRhi::update_texture(
|
void GlCoreRhi::update_texture(
|
||||||
Handle<TransferContext> ctx,
|
Handle<GraphicsContext> ctx,
|
||||||
Handle<Texture> texture,
|
Handle<Texture> texture,
|
||||||
Rect region,
|
Rect region,
|
||||||
srb2::rhi::PixelFormat data_format,
|
srb2::rhi::PixelFormat data_format,
|
||||||
tcb::span<const std::byte> data
|
tcb::span<const std::byte> data
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
SRB2_ASSERT(graphics_context_active_ == false);
|
SRB2_ASSERT(graphics_context_active_ == true);
|
||||||
SRB2_ASSERT(transfer_context_active_ == true);
|
|
||||||
SRB2_ASSERT(ctx.generation() == transfer_context_generation_);
|
|
||||||
|
|
||||||
if (data.empty())
|
if (data.empty())
|
||||||
{
|
{
|
||||||
|
|
@ -678,8 +668,6 @@ void GlCoreRhi::update_texture(
|
||||||
|
|
||||||
rhi::Handle<rhi::Buffer> GlCoreRhi::create_buffer(const rhi::BufferDesc& desc)
|
rhi::Handle<rhi::Buffer> GlCoreRhi::create_buffer(const rhi::BufferDesc& desc)
|
||||||
{
|
{
|
||||||
SRB2_ASSERT(graphics_context_active_ == false);
|
|
||||||
|
|
||||||
GLenum target = map_buffer_type(desc.type);
|
GLenum target = map_buffer_type(desc.type);
|
||||||
SRB2_ASSERT(target != GL_ZERO);
|
SRB2_ASSERT(target != GL_ZERO);
|
||||||
|
|
||||||
|
|
@ -704,10 +692,7 @@ rhi::Handle<rhi::Buffer> GlCoreRhi::create_buffer(const rhi::BufferDesc& desc)
|
||||||
|
|
||||||
void GlCoreRhi::destroy_buffer(rhi::Handle<rhi::Buffer> handle)
|
void GlCoreRhi::destroy_buffer(rhi::Handle<rhi::Buffer> handle)
|
||||||
{
|
{
|
||||||
SRB2_ASSERT(graphics_context_active_ == false);
|
|
||||||
|
|
||||||
SRB2_ASSERT(buffer_slab_.is_valid(handle) == true);
|
SRB2_ASSERT(buffer_slab_.is_valid(handle) == true);
|
||||||
SRB2_ASSERT(graphics_context_active_ == false);
|
|
||||||
GlCoreBuffer casted = buffer_slab_.remove(handle);
|
GlCoreBuffer casted = buffer_slab_.remove(handle);
|
||||||
GLuint name = casted.buffer;
|
GLuint name = casted.buffer;
|
||||||
|
|
||||||
|
|
@ -715,15 +700,14 @@ void GlCoreRhi::destroy_buffer(rhi::Handle<rhi::Buffer> handle)
|
||||||
}
|
}
|
||||||
|
|
||||||
void GlCoreRhi::update_buffer(
|
void GlCoreRhi::update_buffer(
|
||||||
rhi::Handle<TransferContext> ctx,
|
rhi::Handle<GraphicsContext> ctx,
|
||||||
rhi::Handle<rhi::Buffer> handle,
|
rhi::Handle<rhi::Buffer> handle,
|
||||||
uint32_t offset,
|
uint32_t offset,
|
||||||
tcb::span<const std::byte> data
|
tcb::span<const std::byte> data
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
SRB2_ASSERT(graphics_context_active_ == false);
|
SRB2_ASSERT(graphics_context_active_ == true);
|
||||||
SRB2_ASSERT(transfer_context_active_ == true);
|
SRB2_ASSERT(ctx.generation() == graphics_context_generation_);
|
||||||
SRB2_ASSERT(ctx.generation() == transfer_context_generation_);
|
|
||||||
|
|
||||||
if (data.empty())
|
if (data.empty())
|
||||||
{
|
{
|
||||||
|
|
@ -753,11 +737,10 @@ void GlCoreRhi::update_buffer(
|
||||||
}
|
}
|
||||||
|
|
||||||
rhi::Handle<rhi::UniformSet>
|
rhi::Handle<rhi::UniformSet>
|
||||||
GlCoreRhi::create_uniform_set(rhi::Handle<rhi::TransferContext> ctx, const rhi::CreateUniformSetInfo& info)
|
GlCoreRhi::create_uniform_set(rhi::Handle<rhi::GraphicsContext> ctx, const rhi::CreateUniformSetInfo& info)
|
||||||
{
|
{
|
||||||
SRB2_ASSERT(graphics_context_active_ == false);
|
SRB2_ASSERT(graphics_context_active_ == true);
|
||||||
SRB2_ASSERT(transfer_context_active_ == true);
|
SRB2_ASSERT(ctx.generation() == graphics_context_generation_);
|
||||||
SRB2_ASSERT(ctx.generation() == transfer_context_generation_);
|
|
||||||
|
|
||||||
GlCoreUniformSet uniform_set;
|
GlCoreUniformSet uniform_set;
|
||||||
|
|
||||||
|
|
@ -770,14 +753,13 @@ GlCoreRhi::create_uniform_set(rhi::Handle<rhi::TransferContext> ctx, const rhi::
|
||||||
}
|
}
|
||||||
|
|
||||||
rhi::Handle<rhi::BindingSet> GlCoreRhi::create_binding_set(
|
rhi::Handle<rhi::BindingSet> GlCoreRhi::create_binding_set(
|
||||||
rhi::Handle<rhi::TransferContext> ctx,
|
rhi::Handle<rhi::GraphicsContext> ctx,
|
||||||
Handle<Pipeline> pipeline,
|
Handle<Pipeline> pipeline,
|
||||||
const rhi::CreateBindingSetInfo& info
|
const rhi::CreateBindingSetInfo& info
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
SRB2_ASSERT(graphics_context_active_ == false);
|
SRB2_ASSERT(graphics_context_active_ == true);
|
||||||
SRB2_ASSERT(transfer_context_active_ == true);
|
SRB2_ASSERT(ctx.generation() == graphics_context_generation_);
|
||||||
SRB2_ASSERT(ctx.generation() == transfer_context_generation_);
|
|
||||||
|
|
||||||
SRB2_ASSERT(pipeline_slab_.is_valid(pipeline) == true);
|
SRB2_ASSERT(pipeline_slab_.is_valid(pipeline) == true);
|
||||||
auto& pl = pipeline_slab_[pipeline];
|
auto& pl = pipeline_slab_[pipeline];
|
||||||
|
|
@ -842,8 +824,6 @@ rhi::Handle<rhi::BindingSet> GlCoreRhi::create_binding_set(
|
||||||
|
|
||||||
rhi::Handle<rhi::Renderbuffer> GlCoreRhi::create_renderbuffer(const rhi::RenderbufferDesc& desc)
|
rhi::Handle<rhi::Renderbuffer> GlCoreRhi::create_renderbuffer(const rhi::RenderbufferDesc& desc)
|
||||||
{
|
{
|
||||||
SRB2_ASSERT(graphics_context_active_ == false);
|
|
||||||
|
|
||||||
GLuint name = 0;
|
GLuint name = 0;
|
||||||
gl_->GenRenderbuffers(1, &name);
|
gl_->GenRenderbuffers(1, &name);
|
||||||
|
|
||||||
|
|
@ -876,8 +856,6 @@ rhi::Handle<rhi::Renderbuffer> GlCoreRhi::create_renderbuffer(const rhi::Renderb
|
||||||
|
|
||||||
void GlCoreRhi::destroy_renderbuffer(rhi::Handle<rhi::Renderbuffer> handle)
|
void GlCoreRhi::destroy_renderbuffer(rhi::Handle<rhi::Renderbuffer> handle)
|
||||||
{
|
{
|
||||||
SRB2_ASSERT(graphics_context_active_ == false);
|
|
||||||
|
|
||||||
SRB2_ASSERT(renderbuffer_slab_.is_valid(handle) == true);
|
SRB2_ASSERT(renderbuffer_slab_.is_valid(handle) == true);
|
||||||
GlCoreRenderbuffer casted = renderbuffer_slab_.remove(handle);
|
GlCoreRenderbuffer casted = renderbuffer_slab_.remove(handle);
|
||||||
GLuint name = casted.renderbuffer;
|
GLuint name = casted.renderbuffer;
|
||||||
|
|
@ -1192,8 +1170,6 @@ rhi::Handle<rhi::Pipeline> GlCoreRhi::create_pipeline(const PipelineDesc& desc)
|
||||||
|
|
||||||
void GlCoreRhi::destroy_pipeline(rhi::Handle<rhi::Pipeline> handle)
|
void GlCoreRhi::destroy_pipeline(rhi::Handle<rhi::Pipeline> handle)
|
||||||
{
|
{
|
||||||
SRB2_ASSERT(graphics_context_active_ == false);
|
|
||||||
|
|
||||||
SRB2_ASSERT(pipeline_slab_.is_valid(handle) == true);
|
SRB2_ASSERT(pipeline_slab_.is_valid(handle) == true);
|
||||||
GlCorePipeline casted = pipeline_slab_.remove(handle);
|
GlCorePipeline casted = pipeline_slab_.remove(handle);
|
||||||
GLuint vertex_shader = casted.vertex_shader;
|
GLuint vertex_shader = casted.vertex_shader;
|
||||||
|
|
@ -1222,25 +1198,6 @@ void GlCoreRhi::end_graphics(rhi::Handle<rhi::GraphicsContext> handle)
|
||||||
GL_ASSERT;
|
GL_ASSERT;
|
||||||
}
|
}
|
||||||
|
|
||||||
rhi::Handle<rhi::TransferContext> GlCoreRhi::begin_transfer()
|
|
||||||
{
|
|
||||||
SRB2_ASSERT(graphics_context_active_ == false);
|
|
||||||
SRB2_ASSERT(transfer_context_active_ == false);
|
|
||||||
|
|
||||||
transfer_context_generation_ += 1;
|
|
||||||
transfer_context_active_ = true;
|
|
||||||
|
|
||||||
return rhi::Handle<rhi::TransferContext>(0, transfer_context_generation_);
|
|
||||||
}
|
|
||||||
|
|
||||||
void GlCoreRhi::end_transfer(rhi::Handle<rhi::TransferContext> ctx)
|
|
||||||
{
|
|
||||||
SRB2_ASSERT(graphics_context_active_ == false);
|
|
||||||
SRB2_ASSERT(transfer_context_active_ == true);
|
|
||||||
|
|
||||||
transfer_context_active_ = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void GlCoreRhi::present()
|
void GlCoreRhi::present()
|
||||||
{
|
{
|
||||||
SRB2_ASSERT(platform_ != nullptr);
|
SRB2_ASSERT(platform_ != nullptr);
|
||||||
|
|
@ -1269,7 +1226,7 @@ void GlCoreRhi::begin_default_render_pass(Handle<GraphicsContext> ctx, bool clea
|
||||||
gl_->ClearColor(0.0f, 0.0f, 0.0f, 1.0f);
|
gl_->ClearColor(0.0f, 0.0f, 0.0f, 1.0f);
|
||||||
gl_->ClearDepth(1.0f);
|
gl_->ClearDepth(1.0f);
|
||||||
gl_->ClearStencil(0);
|
gl_->ClearStencil(0);
|
||||||
gl_->Clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
gl_->Clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
|
||||||
GL_ASSERT;
|
GL_ASSERT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1661,7 +1618,6 @@ void GlCoreRhi::bind_binding_set(Handle<GraphicsContext> ctx, Handle<BindingSet>
|
||||||
|
|
||||||
void GlCoreRhi::bind_index_buffer(Handle<GraphicsContext> ctx, Handle<Buffer> buffer)
|
void GlCoreRhi::bind_index_buffer(Handle<GraphicsContext> ctx, Handle<Buffer> buffer)
|
||||||
{
|
{
|
||||||
SRB2_ASSERT(transfer_context_active_ == false);
|
|
||||||
SRB2_ASSERT(graphics_context_active_ == true && graphics_context_generation_ == ctx.generation());
|
SRB2_ASSERT(graphics_context_active_ == true && graphics_context_generation_ == ctx.generation());
|
||||||
SRB2_ASSERT(current_render_pass_.has_value() == true && current_pipeline_.has_value() == true);
|
SRB2_ASSERT(current_render_pass_.has_value() == true && current_pipeline_.has_value() == true);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -123,10 +123,6 @@ struct GlCoreGraphicsContext : public rhi::GraphicsContext
|
||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
struct GlCoreTransferContext : public rhi::TransferContext
|
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
||||||
struct GlCoreActiveUniform
|
struct GlCoreActiveUniform
|
||||||
{
|
{
|
||||||
uint32_t type;
|
uint32_t type;
|
||||||
|
|
@ -159,10 +155,8 @@ class GlCoreRhi final : public Rhi
|
||||||
std::optional<Handle<Pipeline>> current_pipeline_;
|
std::optional<Handle<Pipeline>> current_pipeline_;
|
||||||
PrimitiveType current_primitive_type_ = PrimitiveType::kPoints;
|
PrimitiveType current_primitive_type_ = PrimitiveType::kPoints;
|
||||||
bool graphics_context_active_ = false;
|
bool graphics_context_active_ = false;
|
||||||
bool transfer_context_active_ = false;
|
|
||||||
uint32_t graphics_context_generation_ = 0;
|
uint32_t graphics_context_generation_ = 0;
|
||||||
uint32_t index_buffer_offset_ = 0;
|
uint32_t index_buffer_offset_ = 0;
|
||||||
uint32_t transfer_context_generation_ = 0;
|
|
||||||
|
|
||||||
uint8_t stencil_front_reference_ = 0;
|
uint8_t stencil_front_reference_ = 0;
|
||||||
uint8_t stencil_front_compare_mask_ = 0xFF;
|
uint8_t stencil_front_compare_mask_ = 0xFF;
|
||||||
|
|
@ -193,26 +187,23 @@ public:
|
||||||
virtual Rect get_renderbuffer_size(Handle<Renderbuffer> renderbuffer) override;
|
virtual Rect get_renderbuffer_size(Handle<Renderbuffer> renderbuffer) override;
|
||||||
virtual uint32_t get_buffer_size(Handle<Buffer> buffer) override;
|
virtual uint32_t get_buffer_size(Handle<Buffer> buffer) override;
|
||||||
|
|
||||||
virtual Handle<TransferContext> begin_transfer() override;
|
|
||||||
virtual void end_transfer(Handle<TransferContext> handle) override;
|
|
||||||
|
|
||||||
virtual void update_buffer(
|
virtual void update_buffer(
|
||||||
Handle<TransferContext> ctx,
|
Handle<GraphicsContext> ctx,
|
||||||
Handle<Buffer> buffer,
|
Handle<Buffer> buffer,
|
||||||
uint32_t offset,
|
uint32_t offset,
|
||||||
tcb::span<const std::byte> data
|
tcb::span<const std::byte> data
|
||||||
) override;
|
) override;
|
||||||
virtual void update_texture(
|
virtual void update_texture(
|
||||||
Handle<TransferContext> ctx,
|
Handle<GraphicsContext> ctx,
|
||||||
Handle<Texture> texture,
|
Handle<Texture> texture,
|
||||||
Rect region,
|
Rect region,
|
||||||
srb2::rhi::PixelFormat data_format,
|
srb2::rhi::PixelFormat data_format,
|
||||||
tcb::span<const std::byte> data
|
tcb::span<const std::byte> data
|
||||||
) override;
|
) override;
|
||||||
virtual Handle<UniformSet>
|
virtual Handle<UniformSet>
|
||||||
create_uniform_set(Handle<TransferContext> ctx, const CreateUniformSetInfo& info) override;
|
create_uniform_set(Handle<GraphicsContext> ctx, const CreateUniformSetInfo& info) override;
|
||||||
virtual Handle<BindingSet>
|
virtual Handle<BindingSet>
|
||||||
create_binding_set(Handle<TransferContext> ctx, Handle<Pipeline> pipeline, const CreateBindingSetInfo& info)
|
create_binding_set(Handle<GraphicsContext> ctx, Handle<Pipeline> pipeline, const CreateBindingSetInfo& info)
|
||||||
override;
|
override;
|
||||||
|
|
||||||
virtual Handle<GraphicsContext> begin_graphics() override;
|
virtual Handle<GraphicsContext> begin_graphics() override;
|
||||||
|
|
|
||||||
|
|
@ -569,9 +569,6 @@ struct BindingSet
|
||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TransferContext
|
|
||||||
{
|
|
||||||
};
|
|
||||||
struct GraphicsContext
|
struct GraphicsContext
|
||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
@ -607,26 +604,22 @@ struct Rhi
|
||||||
virtual Rect get_renderbuffer_size(Handle<Renderbuffer> renderbuffer) = 0;
|
virtual Rect get_renderbuffer_size(Handle<Renderbuffer> renderbuffer) = 0;
|
||||||
virtual uint32_t get_buffer_size(Handle<Buffer> buffer) = 0;
|
virtual uint32_t get_buffer_size(Handle<Buffer> buffer) = 0;
|
||||||
|
|
||||||
virtual Handle<TransferContext> begin_transfer() = 0;
|
|
||||||
virtual void end_transfer(Handle<TransferContext> handle) = 0;
|
|
||||||
|
|
||||||
// Transfer Context functions
|
|
||||||
virtual void update_buffer(
|
virtual void update_buffer(
|
||||||
Handle<TransferContext> ctx,
|
Handle<GraphicsContext> ctx,
|
||||||
Handle<Buffer> buffer,
|
Handle<Buffer> buffer,
|
||||||
uint32_t offset,
|
uint32_t offset,
|
||||||
tcb::span<const std::byte> data
|
tcb::span<const std::byte> data
|
||||||
) = 0;
|
) = 0;
|
||||||
virtual void update_texture(
|
virtual void update_texture(
|
||||||
Handle<TransferContext> ctx,
|
Handle<GraphicsContext> ctx,
|
||||||
Handle<Texture> texture,
|
Handle<Texture> texture,
|
||||||
Rect region,
|
Rect region,
|
||||||
srb2::rhi::PixelFormat data_format,
|
srb2::rhi::PixelFormat data_format,
|
||||||
tcb::span<const std::byte> data
|
tcb::span<const std::byte> data
|
||||||
) = 0;
|
) = 0;
|
||||||
virtual Handle<UniformSet> create_uniform_set(Handle<TransferContext> ctx, const CreateUniformSetInfo& info) = 0;
|
virtual Handle<UniformSet> create_uniform_set(Handle<GraphicsContext> ctx, const CreateUniformSetInfo& info) = 0;
|
||||||
virtual Handle<BindingSet>
|
virtual Handle<BindingSet>
|
||||||
create_binding_set(Handle<TransferContext> ctx, Handle<Pipeline> pipeline, const CreateBindingSetInfo& info) = 0;
|
create_binding_set(Handle<GraphicsContext> ctx, Handle<Pipeline> pipeline, const CreateBindingSetInfo& info) = 0;
|
||||||
|
|
||||||
virtual Handle<GraphicsContext> begin_graphics() = 0;
|
virtual Handle<GraphicsContext> begin_graphics() = 0;
|
||||||
virtual void end_graphics(Handle<GraphicsContext> ctx) = 0;
|
virtual void end_graphics(Handle<GraphicsContext> ctx) = 0;
|
||||||
|
|
|
||||||
|
|
@ -2165,7 +2165,7 @@ void S_ShowMusicCredit(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
widthused -= V_ThinStringWidth(credittext, V_ALLOWLOWERCASE|V_6WIDTHSPACE);
|
widthused -= V_ThinStringWidth(credittext, 0);
|
||||||
|
|
||||||
#define MUSICCREDITAPPEND(field)\
|
#define MUSICCREDITAPPEND(field)\
|
||||||
if (field)\
|
if (field)\
|
||||||
|
|
@ -2174,7 +2174,7 @@ void S_ShowMusicCredit(void)
|
||||||
worklen = strlen(work);\
|
worklen = strlen(work);\
|
||||||
if (worklen <= len)\
|
if (worklen <= len)\
|
||||||
{\
|
{\
|
||||||
workwidth = V_ThinStringWidth(work, V_ALLOWLOWERCASE|V_6WIDTHSPACE);\
|
workwidth = V_ThinStringWidth(work, 0);\
|
||||||
if (widthused >= workwidth)\
|
if (widthused >= workwidth)\
|
||||||
{\
|
{\
|
||||||
strncat(credittext, work, len);\
|
strncat(credittext, work, len);\
|
||||||
|
|
|
||||||
|
|
@ -696,7 +696,7 @@ void SCR_ClosedCaptions(void)
|
||||||
if (music && !gamestopped && (closedcaptions[i].t < flashingtics) && (closedcaptions[i].t & 1))
|
if (music && !gamestopped && (closedcaptions[i].t < flashingtics) && (closedcaptions[i].t & 1))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
flags = V_SNAPTORIGHT|V_SNAPTOBOTTOM|V_ALLOWLOWERCASE;
|
flags = V_SNAPTORIGHT|V_SNAPTOBOTTOM;
|
||||||
y = basey-((i + 2)*10);
|
y = basey-((i + 2)*10);
|
||||||
|
|
||||||
if (closedcaptions[i].b)
|
if (closedcaptions[i].b)
|
||||||
|
|
|
||||||
|
|
@ -305,6 +305,8 @@ static void I_ShowErrorMessageBox(const char *messagefordevelopers, boolean dump
|
||||||
|
|
||||||
// Rudementary word wrapping.
|
// Rudementary word wrapping.
|
||||||
// Simple and effective. Does not handle nonuniform letter sizes, etc. but who cares.
|
// Simple and effective. Does not handle nonuniform letter sizes, etc. but who cares.
|
||||||
|
// We can't use V_ScaledWordWrap, which this shares DNA with, because no guarantee
|
||||||
|
// string character graphics exist as reference in the error handler...
|
||||||
{
|
{
|
||||||
size_t max = 0, maxatstart = 0, start = 0, width = 0, i;
|
size_t max = 0, maxatstart = 0, start = 0, width = 0, i;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -983,7 +983,7 @@ void ST_drawTitleCard(void)
|
||||||
by += 5;
|
by += 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
V_DrawRightAlignedThinString((BASEVIDWIDTH+bx)/2, by, V_6WIDTHSPACE, bossinfo.subtitle);
|
V_DrawRightAlignedThinString((BASEVIDWIDTH+bx)/2, by, 0, bossinfo.subtitle);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now draw the under-bar itself.
|
// Now draw the under-bar itself.
|
||||||
|
|
@ -1172,7 +1172,7 @@ static void ST_overlayDrawer(void)
|
||||||
if (!r_splitscreen)
|
if (!r_splitscreen)
|
||||||
{
|
{
|
||||||
V_DrawCenteredString((BASEVIDWIDTH/2), BASEVIDHEIGHT-40, V_HUDTRANSHALF, M_GetText("VIEWPOINT:"));
|
V_DrawCenteredString((BASEVIDWIDTH/2), BASEVIDHEIGHT-40, V_HUDTRANSHALF, M_GetText("VIEWPOINT:"));
|
||||||
V_DrawCenteredString((BASEVIDWIDTH/2), BASEVIDHEIGHT-32, V_HUDTRANSHALF|V_ALLOWLOWERCASE, player_names[stplyr-players]);
|
V_DrawCenteredString((BASEVIDWIDTH/2), BASEVIDHEIGHT-32, V_HUDTRANSHALF, player_names[stplyr-players]);
|
||||||
}
|
}
|
||||||
else if (r_splitscreen == 1)
|
else if (r_splitscreen == 1)
|
||||||
{
|
{
|
||||||
|
|
@ -1180,11 +1180,11 @@ static void ST_overlayDrawer(void)
|
||||||
|
|
||||||
INT32 y = (stplyr == &players[displayplayers[0]]) ? 4 : BASEVIDHEIGHT/2-12;
|
INT32 y = (stplyr == &players[displayplayers[0]]) ? 4 : BASEVIDHEIGHT/2-12;
|
||||||
sprintf(name, "VIEWPOINT: %s", player_names[stplyr-players]);
|
sprintf(name, "VIEWPOINT: %s", player_names[stplyr-players]);
|
||||||
V_DrawRightAlignedThinString(BASEVIDWIDTH-40, y, V_HUDTRANSHALF|V_ALLOWLOWERCASE|V_SNAPTOTOP|V_SNAPTOBOTTOM|V_SNAPTORIGHT|V_SPLITSCREEN, name);
|
V_DrawRightAlignedThinString(BASEVIDWIDTH-40, y, V_HUDTRANSHALF|V_SNAPTOTOP|V_SNAPTOBOTTOM|V_SNAPTORIGHT|V_SPLITSCREEN, name);
|
||||||
}
|
}
|
||||||
else if (r_splitscreen)
|
else if (r_splitscreen)
|
||||||
{
|
{
|
||||||
V_DrawCenteredThinString((vid.width/vid.dupx)/4, BASEVIDHEIGHT/2 - 12, V_HUDTRANSHALF|V_ALLOWLOWERCASE|V_SNAPTOBOTTOM|V_SNAPTOLEFT|V_SPLITSCREEN, player_names[stplyr-players]);
|
V_DrawCenteredThinString((vid.width/vid.dupx)/4, BASEVIDHEIGHT/2 - 12, V_HUDTRANSHALF|V_SNAPTOBOTTOM|V_SNAPTOLEFT|V_SPLITSCREEN, player_names[stplyr-players]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1257,17 +1257,17 @@ void ST_DrawDemoTitleEntry(void)
|
||||||
#define x (BASEVIDWIDTH/2 - 139)
|
#define x (BASEVIDWIDTH/2 - 139)
|
||||||
#define y (BASEVIDHEIGHT/2)
|
#define y (BASEVIDHEIGHT/2)
|
||||||
M_DrawTextBox(x, y + 4, MAXSTRINGLENGTH, 1);
|
M_DrawTextBox(x, y + 4, MAXSTRINGLENGTH, 1);
|
||||||
V_DrawString(x + 8, y + 12, V_ALLOWLOWERCASE, nametodraw);
|
V_DrawString(x + 8, y + 12, 0, nametodraw);
|
||||||
if (anim < 4)
|
if (anim < 4)
|
||||||
V_DrawCharacter(x + 8 + V_StringWidth(nametodraw, 0), y + 12,
|
V_DrawCharacter(x + 8 + V_StringWidth(nametodraw, 0), y + 12,
|
||||||
'_' | 0x80, false);
|
'_' | 0x80, false);
|
||||||
|
|
||||||
M_DrawTextBox(x + 30, y - 24, 26, 1);
|
M_DrawTextBox(x + 30, y - 24, 26, 1);
|
||||||
V_DrawString(x + 38, y - 16, V_ALLOWLOWERCASE, "Enter the name of the replay.");
|
V_DrawString(x + 38, y - 16, 0, "Enter the name of the replay.");
|
||||||
|
|
||||||
M_DrawTextBox(x + 50, y + 20, 20, 1);
|
M_DrawTextBox(x + 50, y + 20, 20, 1);
|
||||||
V_DrawThinString(x + 58, y + 28, V_ALLOWLOWERCASE, "Escape - Cancel");
|
V_DrawThinString(x + 58, y + 28, 0, "Escape - Cancel");
|
||||||
V_DrawRightAlignedThinString(x + 220, y + 28, V_ALLOWLOWERCASE, "Enter - Confirm");
|
V_DrawRightAlignedThinString(x + 220, y + 28, 0, "Enter - Confirm");
|
||||||
#undef x
|
#undef x
|
||||||
#undef y
|
#undef y
|
||||||
}
|
}
|
||||||
|
|
@ -1384,20 +1384,20 @@ void ST_Drawer(void)
|
||||||
INT32 buttony = 2;
|
INT32 buttony = 2;
|
||||||
|
|
||||||
K_drawButtonAnim(buttonx - 76, buttony, V_HUDTRANS|V_SNAPTOTOP|V_SNAPTORIGHT, kp_button_b[1], leveltime);
|
K_drawButtonAnim(buttonx - 76, buttony, V_HUDTRANS|V_SNAPTOTOP|V_SNAPTORIGHT, kp_button_b[1], leveltime);
|
||||||
V_DrawRightAlignedThinString(buttonx - 55, buttony, V_HUDTRANS|V_SNAPTOTOP|V_SNAPTORIGHT|V_ALLOWLOWERCASE|V_6WIDTHSPACE|V_YELLOWMAP, "or");
|
V_DrawRightAlignedThinString(buttonx - 55, buttony, V_HUDTRANS|V_SNAPTOTOP|V_SNAPTORIGHT|V_YELLOWMAP, "or");
|
||||||
K_drawButtonAnim(buttonx - 55, buttony, V_HUDTRANS|V_SNAPTOTOP|V_SNAPTORIGHT, kp_button_x[1], leveltime);
|
K_drawButtonAnim(buttonx - 55, buttony, V_HUDTRANS|V_SNAPTOTOP|V_SNAPTORIGHT, kp_button_x[1], leveltime);
|
||||||
V_DrawRightAlignedThinString(buttonx - 2, buttony, V_HUDTRANS|V_SNAPTOTOP|V_SNAPTORIGHT|V_ALLOWLOWERCASE|V_6WIDTHSPACE|V_YELLOWMAP, "Save replay");
|
V_DrawRightAlignedThinString(buttonx - 2, buttony, V_HUDTRANS|V_SNAPTOTOP|V_SNAPTORIGHT|V_YELLOWMAP, "Save replay");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case DSM_WILLAUTOSAVE:
|
case DSM_WILLAUTOSAVE:
|
||||||
{
|
{
|
||||||
V_DrawRightAlignedThinString(BASEVIDWIDTH - 55, 2, V_HUDTRANS|V_SNAPTOTOP|V_SNAPTORIGHT|V_ALLOWLOWERCASE|V_6WIDTHSPACE|V_YELLOWMAP, "Replay will be saved.");
|
V_DrawRightAlignedThinString(BASEVIDWIDTH - 55, 2, V_HUDTRANS|V_SNAPTOTOP|V_SNAPTORIGHT|V_YELLOWMAP, "Replay will be saved.");
|
||||||
K_drawButtonAnim(BASEVIDWIDTH - 56, 0, V_HUDTRANS|V_SNAPTOTOP|V_SNAPTORIGHT, kp_button_b[1], leveltime);
|
K_drawButtonAnim(BASEVIDWIDTH - 56, 0, V_HUDTRANS|V_SNAPTOTOP|V_SNAPTORIGHT, kp_button_b[1], leveltime);
|
||||||
V_DrawRightAlignedThinString(BASEVIDWIDTH - 2, 2, V_HUDTRANS|V_SNAPTOTOP|V_SNAPTORIGHT|V_ALLOWLOWERCASE|V_6WIDTHSPACE|V_YELLOWMAP, "Change title");
|
V_DrawRightAlignedThinString(BASEVIDWIDTH - 2, 2, V_HUDTRANS|V_SNAPTOTOP|V_SNAPTORIGHT|V_YELLOWMAP, "Change title");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case DSM_WILLSAVE:
|
case DSM_WILLSAVE:
|
||||||
V_DrawRightAlignedThinString(BASEVIDWIDTH - 2, 2, V_HUDTRANS|V_SNAPTOTOP|V_SNAPTORIGHT|V_ALLOWLOWERCASE|V_6WIDTHSPACE|V_YELLOWMAP, "Replay will be saved.");
|
V_DrawRightAlignedThinString(BASEVIDWIDTH - 2, 2, V_HUDTRANS|V_SNAPTOTOP|V_SNAPTORIGHT|V_YELLOWMAP, "Replay will be saved.");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DSM_TITLEENTRY:
|
case DSM_TITLEENTRY:
|
||||||
|
|
|
||||||
|
|
@ -128,12 +128,9 @@ int Draw::font_to_fontno(Font font)
|
||||||
|
|
||||||
INT32 Draw::default_font_flags(Font font)
|
INT32 Draw::default_font_flags(Font font)
|
||||||
{
|
{
|
||||||
INT32 flags = V_ALLOWLOWERCASE;
|
INT32 flags = 0;
|
||||||
|
|
||||||
if (font == Font::kThin)
|
(void)font;
|
||||||
{
|
|
||||||
flags |= V_6WIDTHSPACE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return flags;
|
return flags;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
1002
src/v_video.cpp
1002
src/v_video.cpp
File diff suppressed because it is too large
Load diff
|
|
@ -175,7 +175,7 @@ void V_CubeApply(RGBA_t *input);
|
||||||
#define V_SNAPTOLEFT 0x04000000 // for centering
|
#define V_SNAPTOLEFT 0x04000000 // for centering
|
||||||
#define V_SNAPTORIGHT 0x08000000 // for centering
|
#define V_SNAPTORIGHT 0x08000000 // for centering
|
||||||
|
|
||||||
#define V_ALLOWLOWERCASE 0x10000000 // (strings only) allow fonts that have lowercase letters to use them
|
#define V_FORCEUPPERCASE 0x10000000 // (strings only) prevents fonts that have lowercase letters from using them
|
||||||
#define V_FLIP 0x10000000 // (patches only) Horizontal flip
|
#define V_FLIP 0x10000000 // (patches only) Horizontal flip
|
||||||
#define V_SLIDEIN 0x20000000 // Slide in from the sides on level load, depending on snap flags
|
#define V_SLIDEIN 0x20000000 // Slide in from the sides on level load, depending on snap flags
|
||||||
|
|
||||||
|
|
@ -257,8 +257,9 @@ void V_DrawPromptBack(INT32 boxheight, INT32 color);
|
||||||
INT32 V_DanceYOffset(INT32 counter);
|
INT32 V_DanceYOffset(INT32 counter);
|
||||||
|
|
||||||
// draw a single character
|
// draw a single character
|
||||||
void V_DrawCharacter(INT32 x, INT32 y, INT32 c, boolean lowercaseallowed);
|
void V_DrawCharacterScaled(fixed_t x, fixed_t y, fixed_t scale, INT32 flags, int font, int c, UINT8 *colormap);
|
||||||
// draw a single character, but for the chat
|
void V_DrawCharacter(INT32 x, INT32 y, INT32 option, boolean lowercase);
|
||||||
|
|
||||||
void V_DrawChatCharacter(INT32 x, INT32 y, INT32 c, boolean lowercaseallowed, UINT8 *colormap);
|
void V_DrawChatCharacter(INT32 x, INT32 y, INT32 c, boolean lowercaseallowed, UINT8 *colormap);
|
||||||
|
|
||||||
UINT8 *V_GetStringColormap(INT32 colorflags);
|
UINT8 *V_GetStringColormap(INT32 colorflags);
|
||||||
|
|
@ -272,9 +273,6 @@ UINT8 *V_GetStringColormap(INT32 colorflags);
|
||||||
|
|
||||||
INT32 V_LevelNameHeight(const char *string);
|
INT32 V_LevelNameHeight(const char *string);
|
||||||
|
|
||||||
// wordwrap a string using the hu_font
|
|
||||||
char *V_WordWrap(INT32 x, INT32 w, INT32 option, const char *string);
|
|
||||||
|
|
||||||
// draw a string using a font
|
// draw a string using a font
|
||||||
void V_DrawStringScaled(
|
void V_DrawStringScaled(
|
||||||
fixed_t x,
|
fixed_t x,
|
||||||
|
|
@ -295,6 +293,15 @@ fixed_t V_StringScaledWidth(
|
||||||
int fontno,
|
int fontno,
|
||||||
const char *s);
|
const char *s);
|
||||||
|
|
||||||
|
char * V_ScaledWordWrap(
|
||||||
|
fixed_t w,
|
||||||
|
fixed_t scale,
|
||||||
|
fixed_t spacescale,
|
||||||
|
fixed_t lfscale,
|
||||||
|
INT32 flags,
|
||||||
|
int fontno,
|
||||||
|
const char *s);
|
||||||
|
|
||||||
// draw a string using the hu_font
|
// draw a string using the hu_font
|
||||||
#define V_DrawString( x,y,option,string ) \
|
#define V_DrawString( x,y,option,string ) \
|
||||||
V__DrawDupxString (x,y,FRACUNIT,option,NULL,HU_FONT,string)
|
V__DrawDupxString (x,y,FRACUNIT,option,NULL,HU_FONT,string)
|
||||||
|
|
@ -340,7 +347,7 @@ void V_DrawRightAlignedThinStringAtFixed(fixed_t x, fixed_t y, INT32 option, con
|
||||||
// Draws a titlecard font string.
|
// Draws a titlecard font string.
|
||||||
// timer: when the letters start appearing (leave to 0 to disable)
|
// timer: when the letters start appearing (leave to 0 to disable)
|
||||||
// threshold: when the letters start disappearing (leave to 0 to disable) (both are INT32 in case you supply negative values...)
|
// threshold: when the letters start disappearing (leave to 0 to disable) (both are INT32 in case you supply negative values...)
|
||||||
// NOTE: This function ignores most conventional string flags (V_RETURN8, V_ALLOWLOWERCASE ...)
|
// NOTE: This function ignores most conventional string flags (V_RETURN8, V_FORCEUPPERCASE ...)
|
||||||
// NOTE: This font only works with uppercase letters.
|
// NOTE: This font only works with uppercase letters.
|
||||||
void V_DrawTitleCardString(INT32 x, INT32 y, const char *str, INT32 flags, boolean bossmode, INT32 timer, INT32 threshold);
|
void V_DrawTitleCardString(INT32 x, INT32 y, const char *str, INT32 flags, boolean bossmode, INT32 timer, INT32 threshold);
|
||||||
|
|
||||||
|
|
@ -373,6 +380,15 @@ void V_DrawProfileNum(INT32 x, INT32 y, INT32 flags, UINT8 num);
|
||||||
void V_DrawCenteredTimerString(INT32 x, INT32 y, INT32 option, const char *string);
|
void V_DrawCenteredTimerString(INT32 x, INT32 y, INT32 option, const char *string);
|
||||||
void V_DrawRightAlignedTimerString(INT32 x, INT32 y, INT32 option, const char *string);
|
void V_DrawRightAlignedTimerString(INT32 x, INT32 y, INT32 option, const char *string);
|
||||||
|
|
||||||
|
#define V_DrawMenuString( x,y,option,string ) \
|
||||||
|
V__DrawDupxString (x,y,FRACUNIT,option,NULL,MENU_FONT,string)
|
||||||
|
|
||||||
|
#define V_MenuStringWidth( string,option ) \
|
||||||
|
V__IntegerStringWidth ( FRACUNIT,option,MENU_FONT,string )
|
||||||
|
|
||||||
|
void V_DrawCenteredMenuString(INT32 x, INT32 y, INT32 option, const char *string);
|
||||||
|
void V_DrawRightAlignedMenuString(INT32 x, INT32 y, INT32 option, const char *string);
|
||||||
|
|
||||||
#define V_DrawGamemodeString( x,y,option,cm,string ) \
|
#define V_DrawGamemodeString( x,y,option,cm,string ) \
|
||||||
V__DrawDupxString (x,y,FRACUNIT,option,cm,GM_FONT,string)
|
V__DrawDupxString (x,y,FRACUNIT,option,cm,GM_FONT,string)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -573,13 +573,13 @@ void Y_PlayerStandingsDrawer(y_data_t *standings, INT32 xoffset)
|
||||||
_isHighlightedPlayer(&players[pnum])
|
_isHighlightedPlayer(&players[pnum])
|
||||||
? hilicol
|
? hilicol
|
||||||
: 0
|
: 0
|
||||||
)|V_ALLOWLOWERCASE|V_6WIDTHSPACE,
|
),
|
||||||
player_names[pnum]
|
player_names[pnum]
|
||||||
);
|
);
|
||||||
|
|
||||||
V_DrawRightAlignedThinString(
|
V_DrawRightAlignedThinString(
|
||||||
x+118, y-2,
|
x+118, y-2,
|
||||||
V_ALLOWLOWERCASE|V_6WIDTHSPACE,
|
0,
|
||||||
standings->strval[i]
|
standings->strval[i]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -622,7 +622,7 @@ void Y_PlayerStandingsDrawer(y_data_t *standings, INT32 xoffset)
|
||||||
{
|
{
|
||||||
V_DrawThinString(
|
V_DrawThinString(
|
||||||
x2, y-2,
|
x2, y-2,
|
||||||
V_ALLOWLOWERCASE|V_6WIDTHSPACE,
|
0,
|
||||||
increasenum
|
increasenum
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -630,7 +630,7 @@ void Y_PlayerStandingsDrawer(y_data_t *standings, INT32 xoffset)
|
||||||
{
|
{
|
||||||
V_DrawRightAlignedThinString(
|
V_DrawRightAlignedThinString(
|
||||||
x2, y-2,
|
x2, y-2,
|
||||||
V_ALLOWLOWERCASE|V_6WIDTHSPACE,
|
0,
|
||||||
increasenum
|
increasenum
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -1247,7 +1247,7 @@ void Y_RoundQueueDrawer(y_data_t *standings, INT32 offset, boolean doanimations,
|
||||||
void Y_IntermissionDrawer(void)
|
void Y_IntermissionDrawer(void)
|
||||||
{
|
{
|
||||||
// INFO SEGMENT
|
// INFO SEGMENT
|
||||||
// Numbers are V_DrawRightAlignedThinString WITH v_6widthspace as flags
|
// Numbers are V_DrawRightAlignedThinString as flags
|
||||||
// resbar 1 (48,82) 5 (176, 82)
|
// resbar 1 (48,82) 5 (176, 82)
|
||||||
// 2 (48, 96)
|
// 2 (48, 96)
|
||||||
|
|
||||||
|
|
@ -1397,7 +1397,7 @@ skiptallydrawer:
|
||||||
{
|
{
|
||||||
if (speedscramble != -1 && speedscramble != gamespeed)
|
if (speedscramble != -1 && speedscramble != gamespeed)
|
||||||
{
|
{
|
||||||
V_DrawCenteredThinString(BASEVIDWIDTH/2, 154, highlightflags|V_ALLOWLOWERCASE|V_SNAPTOBOTTOM,
|
V_DrawCenteredThinString(BASEVIDWIDTH/2, 154, highlightflags|V_SNAPTOBOTTOM,
|
||||||
va(M_GetText("Next race will be %s Speed!"), kartspeed_cons_t[1+speedscramble].strvalue));
|
va(M_GetText("Next race will be %s Speed!"), kartspeed_cons_t[1+speedscramble].strvalue));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1414,13 +1414,13 @@ finalcounter:
|
||||||
INT32 buttony = 2;
|
INT32 buttony = 2;
|
||||||
|
|
||||||
K_drawButtonAnim(buttonx - 76, buttony, 0, kp_button_b[1], replayprompttic);
|
K_drawButtonAnim(buttonx - 76, buttony, 0, kp_button_b[1], replayprompttic);
|
||||||
V_DrawRightAlignedThinString(buttonx - 55, buttony, V_ALLOWLOWERCASE|V_6WIDTHSPACE|highlightflags, "or");
|
V_DrawRightAlignedThinString(buttonx - 55, buttony, highlightflags, "or");
|
||||||
K_drawButtonAnim(buttonx - 55, buttony, 0, kp_button_x[1], replayprompttic);
|
K_drawButtonAnim(buttonx - 55, buttony, 0, kp_button_x[1], replayprompttic);
|
||||||
V_DrawRightAlignedThinString(buttonx - 2, buttony, V_ALLOWLOWERCASE|V_6WIDTHSPACE|highlightflags, "Save replay");
|
V_DrawRightAlignedThinString(buttonx - 2, buttony, highlightflags, "Save replay");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case DSM_SAVED:
|
case DSM_SAVED:
|
||||||
V_DrawRightAlignedThinString(BASEVIDWIDTH - 2, 2, V_ALLOWLOWERCASE|V_6WIDTHSPACE|highlightflags, "Replay saved!");
|
V_DrawRightAlignedThinString(BASEVIDWIDTH - 2, 2, highlightflags, "Replay saved!");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DSM_TITLEENTRY:
|
case DSM_TITLEENTRY:
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue