big ol fucking fuck

This commit is contained in:
Antonio Martinez 2024-09-26 20:36:21 -07:00
parent 8e47e37af1
commit 89036e07eb
9 changed files with 269 additions and 203 deletions

View file

@ -914,6 +914,7 @@ consvar_t cv_debugvirtualkeyboard = PlayerCheat("debugvirtualkeyboard", "Off").o
consvar_t cv_devmode_screen = PlayerCheat("devmode_screen", "1").min_max(1, 4).description("Choose which splitscreen player devmode applies to");
consvar_t cv_drawpickups = PlayerCheat("drawpickups", "Yes").yes_no().description("Hide rings, spheres, item capsules, prison capsules (visual only)");
consvar_t cv_drawtimer = PlayerCheat("drawtimer", "No").yes_no().description("Always draw the timer (race checkpoint timing, etc)");
consvar_t cv_debugfonts = PlayerCheat("debugfonts", "No").yes_no().description("Draw font bounding boxes (integer precision, beware centered text!)");
void lua_profile_OnChange(void);
consvar_t cv_lua_profile = PlayerCheat("lua_profile", "0").values(CV_Unsigned).onchange(lua_profile_OnChange).description("Show hook timings over an average of N tics");

View file

@ -385,6 +385,8 @@ patch_t *HU_UpdateOrBlankPatch(patch_t **user, boolean required, const char *for
vsnprintf(buffer, sizeof buffer, format, ap);
va_end (ap);
CONS_Printf("%s\n", buffer);
if (user && partadd_earliestfile != UINT16_MAX)
{
UINT16 fileref = numwadfiles;

View file

@ -482,7 +482,7 @@ void Dialogue::Draw(void)
if (TextDone())
{
drawer
.xy(-18 - 5, -7-5)
.xy(-18 - 3, -7-5)
.patch(patchCache["TUTDIAG2"]);
if (Held())
@ -490,7 +490,7 @@ void Dialogue::Draw(void)
else
intertext += "<z_animated>";
drawer.xy(-18 + 4 - 5, -7-8 - 14).align(Draw::Align::kCenter).font(Draw::Font::kMenu).text(srb2::Draw::TextElement().parse(intertext).string());
drawer.xy(-18, -7-8 - 14).align(Draw::Align::kCenter).font(Draw::Font::kMenu).text(srb2::Draw::TextElement().parse(intertext).string());
}
}

View file

@ -235,45 +235,49 @@ patch_t *kp_button_c[2][2];
patch_t *kp_button_x[2][2];
patch_t *kp_button_y[2][2];
patch_t *kp_button_z[2][2];
patch_t *kp_button_start[2];
patch_t *kp_button_l[2];
patch_t *kp_button_r[2];
patch_t *kp_button_up[2];
patch_t *kp_button_down[2];
patch_t *kp_button_right[2];
patch_t *kp_button_left[2];
patch_t *kp_button_lua1[2];
patch_t *kp_button_lua2[2];
patch_t *kp_button_lua3[2];
patch_t *kp_button_start[2][2];
patch_t *kp_button_l[2][2];
patch_t *kp_button_r[2][2];
patch_t *kp_button_up[2][2];
patch_t *kp_button_down[2][2];
patch_t *kp_button_right[2][2];
patch_t *kp_button_left[2][2];
patch_t *kp_button_lua1[2][2];
patch_t *kp_button_lua2[2][2];
patch_t *kp_button_lua3[2][2];
patch_t *gen_button_a[2][2];
patch_t *gen_button_b[2][2];
patch_t *gen_button_x[2][2];
patch_t *gen_button_y[2][2];
patch_t *gen_button_lb[2];
patch_t *gen_button_rb[2];
patch_t *gen_button_lt[2];
patch_t *gen_button_rt[2];
patch_t *gen_button_start[2];
patch_t *gen_button_back[2];
patch_t *gen_button_ls[2];
patch_t *gen_button_rs[2];
patch_t *gen_button_dpad[2];
patch_t *gen_button_lb[2][2];
patch_t *gen_button_rb[2][2];
patch_t *gen_button_lt[2][2];
patch_t *gen_button_rt[2][2];
patch_t *gen_button_start[2][2];
patch_t *gen_button_back[2][2];
patch_t *gen_button_ls[2][2];
patch_t *gen_button_rs[2][2];
patch_t *gen_button_dpad[2][2];
patch_t *gen_button_keyleft[2];
patch_t *gen_button_keyright[2];
patch_t *gen_button_keycenter[2];
static void K_LoadButtonGraphics(patch_t *kp[2], int letter)
static void K_LoadButtonGraphics(patch_t *kp[2][2], const char* code)
{
HU_UpdatePatch(&kp[0], "TLB_%c", letter);
HU_UpdatePatch(&kp[1], "TLB_%cB", letter);
HU_UpdatePatch(&kp[0][0], "TLB_%s", code);
HU_UpdatePatch(&kp[0][1], "TLB_%sB", code);
HU_UpdatePatch(&kp[1][0], "TLBS%s", code);
HU_UpdatePatch(&kp[1][1], "TLBS%sB", code);
}
static void K_LoadGenericButtonGraphics(patch_t *kp[2], int letter)
static void K_LoadGenericButtonGraphics(patch_t *kp[2][2], const char* code)
{
HU_UpdatePatch(&kp[0], "TLG_%c", letter);
HU_UpdatePatch(&kp[1], "TLG_%cB", letter);
HU_UpdatePatch(&kp[0][0], "TLG_%s", code);
HU_UpdatePatch(&kp[0][1], "TLG_%sB", code);
HU_UpdatePatch(&kp[1][0], "TLGS%s", code);
HU_UpdatePatch(&kp[1][1], "TLGS%sB", code);
}
void K_LoadKartHUDGraphics(void)
@ -968,58 +972,23 @@ void K_LoadKartHUDGraphics(void)
HU_UpdatePatch(&kp_spraycantarget_near[1][i], "%s", buffer);
}
K_LoadButtonGraphics(kp_button_a[0], 'A');
K_LoadButtonGraphics(kp_button_a[1], 'N');
K_LoadButtonGraphics(kp_button_b[0], 'B');
K_LoadButtonGraphics(kp_button_b[1], 'O');
K_LoadButtonGraphics(kp_button_c[0], 'C');
K_LoadButtonGraphics(kp_button_c[1], 'P');
K_LoadButtonGraphics(kp_button_x[0], 'D');
K_LoadButtonGraphics(kp_button_x[1], 'Q');
K_LoadButtonGraphics(kp_button_y[0], 'E');
K_LoadButtonGraphics(kp_button_y[1], 'R');
K_LoadButtonGraphics(kp_button_z[0], 'F');
K_LoadButtonGraphics(kp_button_z[1], 'S');
K_LoadButtonGraphics(kp_button_start, 'G');
K_LoadButtonGraphics(kp_button_l, 'H');
K_LoadButtonGraphics(kp_button_r, 'I');
K_LoadButtonGraphics(kp_button_up, 'J');
K_LoadButtonGraphics(kp_button_down, 'K');
K_LoadButtonGraphics(kp_button_right, 'L');
K_LoadButtonGraphics(kp_button_left, 'M');
// K_LoadButtonGraphics(kp_button_dpad, 'T');
K_LoadButtonGraphics(kp_button_a, "A");
K_LoadButtonGraphics(kp_button_b, "B");
K_LoadButtonGraphics(kp_button_c, "C");
K_LoadButtonGraphics(kp_button_x, "X");
K_LoadButtonGraphics(kp_button_y, "Y");
K_LoadButtonGraphics(kp_button_z, "Z");
K_LoadButtonGraphics(kp_button_l, "L1");
K_LoadButtonGraphics(kp_button_r, "R1");
K_LoadButtonGraphics(kp_button_up, "ARU");
K_LoadButtonGraphics(kp_button_down, "ARD");
K_LoadButtonGraphics(kp_button_right, "ARR");
K_LoadButtonGraphics(kp_button_left, "ARL");
K_LoadButtonGraphics(kp_button_start, "S");
HU_UpdatePatch(&kp_button_lua1[0], "TLG_L1");
HU_UpdatePatch(&kp_button_lua1[1], "TLG_L1B");
HU_UpdatePatch(&kp_button_lua2[0], "TLG_L2");
HU_UpdatePatch(&kp_button_lua2[1], "TLG_L2B");
HU_UpdatePatch(&kp_button_lua3[0], "TLG_L3");
HU_UpdatePatch(&kp_button_lua3[1], "TLG_L3B");
K_LoadGenericButtonGraphics(gen_button_a[0], 'A');
K_LoadGenericButtonGraphics(gen_button_b[0], 'B');
K_LoadGenericButtonGraphics(gen_button_x[0], 'D');
K_LoadGenericButtonGraphics(gen_button_y[0], 'E');
K_LoadGenericButtonGraphics(gen_button_a[1], 'K');
K_LoadGenericButtonGraphics(gen_button_b[1], 'M');
K_LoadGenericButtonGraphics(gen_button_x[1], 'L');
K_LoadGenericButtonGraphics(gen_button_y[1], 'J');
K_LoadGenericButtonGraphics(gen_button_lb, 'H');
K_LoadGenericButtonGraphics(gen_button_rb, 'I');
K_LoadGenericButtonGraphics(gen_button_lt, 'C');
K_LoadGenericButtonGraphics(gen_button_rt, 'F');
K_LoadGenericButtonGraphics(gen_button_start, 'G');
K_LoadGenericButtonGraphics(gen_button_back, 'V'); // FIXME
K_LoadGenericButtonGraphics(gen_button_ls, 'T');
K_LoadGenericButtonGraphics(gen_button_rs, 'U');
HU_UpdatePatch(&gen_button_dpad[0], "TLB_T");
HU_UpdatePatch(&gen_button_dpad[1], "TLB_TB");
K_LoadGenericButtonGraphics(kp_button_lua1, "LU1");
K_LoadGenericButtonGraphics(kp_button_lua2, "LU2");
K_LoadGenericButtonGraphics(kp_button_lua3, "LU3");
HU_UpdatePatch(&gen_button_keyleft[0], "TLK_L");
HU_UpdatePatch(&gen_button_keyleft[1], "TLK_LB");
@ -1027,6 +996,20 @@ void K_LoadKartHUDGraphics(void)
HU_UpdatePatch(&gen_button_keyright[1], "TLK_RB");
HU_UpdatePatch(&gen_button_keycenter[0], "TLK_M");
HU_UpdatePatch(&gen_button_keycenter[1], "TLK_MB");
K_LoadGenericButtonGraphics(gen_button_dpad, "DP");
K_LoadGenericButtonGraphics(gen_button_a, "A");
K_LoadGenericButtonGraphics(gen_button_b, "B");
K_LoadGenericButtonGraphics(gen_button_x, "X");
K_LoadGenericButtonGraphics(gen_button_y, "Y");
K_LoadGenericButtonGraphics(gen_button_lb, "L1");
K_LoadGenericButtonGraphics(gen_button_rb, "R1");
K_LoadGenericButtonGraphics(gen_button_lt, "L2");
K_LoadGenericButtonGraphics(gen_button_rt, "R2");
K_LoadGenericButtonGraphics(gen_button_ls, "L3");
K_LoadGenericButtonGraphics(gen_button_rs, "R3");
K_LoadGenericButtonGraphics(gen_button_start, "S");
K_LoadGenericButtonGraphics(gen_button_back, "I");
}
// For the item toggle menu
@ -6509,14 +6492,14 @@ void K_drawKartHUD(void)
#if 0
using srb2::Draw;
if (0)
if (1)
{
// Draw::TextElement text = Draw::TextElement().parse("A <a> B <b> C <c> X <x> Y <y> Z <z>\nST <start> L <l> R <r> U <up> D <down> L <left> R <right>");
Draw::TextElement text = Draw::TextElement().parse("Unpressed <y> Pressed <y_pressed> Animated <y_animated>");
CV_StealthSetValue(cv_descriptiveinput, 0);
Draw::TextElement text = Draw::TextElement().parse("Hamburger <a><b><c><x><y><z><l><r><lua1><lua2><lua3><start><left><up><right><down> Hamburger\n\nHamburger <large><a><large><b><large><c><large><x><large><y><large><z><large><l><large><r><large><lua1><large><lua2><large><lua3><large><start><large><left><large><up><large><right><large><down> Hamburger\n\nHamburger \xEB\xEF\xA0\xEB\xEF\xA1\xEB\xEF\xA2\xEB\xEF\xA3\xEB\xEF\xA4\xEB\xEF\xA5\xEB\xEF\xA6\xEB\xEF\xA7\xEB\xEF\xA8\xEB\xEF\xA9\xEB\xEF\xAA\xEB\xEF\xAB\xEB\xEF\xAC Hamburger");
UINT8 fakeoff = (stplyr - players)*40;
Draw(5, 5+fakeoff).align((srb2::Draw::Align)0).font(Draw::Font::kMenu).text(text);
Draw(5, 20+fakeoff).align((srb2::Draw::Align)0).font(Draw::Font::kThin).text(text);
Draw(40, 80+fakeoff).align((srb2::Draw::Align)0).font(Draw::Font::kThin).text(text);
}
if (0)

View file

@ -94,31 +94,34 @@ extern patch_t *kp_button_c[2][2];
extern patch_t *kp_button_x[2][2];
extern patch_t *kp_button_y[2][2];
extern patch_t *kp_button_z[2][2];
extern patch_t *kp_button_start[2];
extern patch_t *kp_button_l[2];
extern patch_t *kp_button_r[2];
extern patch_t *kp_button_up[2];
extern patch_t *kp_button_down[2];
extern patch_t *kp_button_right[2];
extern patch_t *kp_button_left[2];
// extern patch_t *kp_button_dpad[2];
extern patch_t *kp_button_lua1[2];
extern patch_t *kp_button_lua2[2];
extern patch_t *kp_button_lua3[2];
extern patch_t *kp_button_start[2][2];
extern patch_t *kp_button_l[2][2];
extern patch_t *kp_button_r[2][2];
extern patch_t *kp_button_up[2][2];
extern patch_t *kp_button_down[2][2];
extern patch_t *kp_button_right[2][2];
extern patch_t *kp_button_left[2][2];
extern patch_t *kp_button_lua1[2][2];
extern patch_t *kp_button_lua2[2][2];
extern patch_t *kp_button_lua3[2][2];
extern patch_t *gen_button_a[2][2];
extern patch_t *gen_button_b[2][2];
extern patch_t *gen_button_x[2][2];
extern patch_t *gen_button_y[2][2];
extern patch_t *gen_button_lb[2];
extern patch_t *gen_button_rb[2];
extern patch_t *gen_button_lt[2];
extern patch_t *gen_button_rt[2];
extern patch_t *gen_button_start[2];
extern patch_t *gen_button_back[2];
extern patch_t *gen_button_ls[2];
extern patch_t *gen_button_rs[2];
extern patch_t *gen_button_dpad[2];
extern patch_t *gen_button_lb[2][2];
extern patch_t *gen_button_rb[2][2];
extern patch_t *gen_button_lt[2][2];
extern patch_t *gen_button_rt[2][2];
extern patch_t *gen_button_start[2][2];
extern patch_t *gen_button_back[2][2];
extern patch_t *gen_button_ls[2][2];
extern patch_t *gen_button_rs[2][2];
extern patch_t *gen_button_dpad[2][2];
extern patch_t *gen_button_keyleft[2];
extern patch_t *gen_button_keyright[2];
extern patch_t *gen_button_keycenter[2];
extern patch_t *gen_button_keyleft[2];
extern patch_t *gen_button_keyright[2];

View file

@ -6106,7 +6106,7 @@ void M_DrawPause(void)
K_DrawGameControl(4, 184 - 45 + offset/2, 0, "<a> Accelerate", 0, 0, 0);
K_DrawGameControl(4, 184 - 30 + offset/2, 0, "<b> Look Back", 0, 0, 0);
K_DrawGameControl(4, 184 - 15 + offset/2, 0, "<c> Spindash", 0, 0, 0);
K_DrawGameControl(4, 184 - 0 + offset/2, 0, "<l> Item", 0, 0, 0);
K_DrawGameControl(4, 184 - 0 + offset/2, 0, "<l> Item/Rings", 0, 0, 0);
K_DrawGameControl(90, 184 - 45 + offset/2, 0, "<x> Brake", 0, 0, 0);
K_DrawGameControl(90, 184 - 30 + offset/2, 0, "<y> Respawn", 0, 0, 0);

View file

@ -138,6 +138,7 @@ extern consvar_t cv_drawpickups;
extern consvar_t cv_debugfinishline;
extern consvar_t cv_drawinput;
extern consvar_t cv_drawtimer;
extern consvar_t cv_debugfonts;
// debugging

View file

@ -390,16 +390,16 @@ patch_t** get_button_patch(Draw::Button type, int ver)
X(x)[ver];
X(y)[ver];
X(z)[ver];
X(start);
X(l);
X(r);
X(up);
X(down);
X(right);
X(left);
X(lua1);
X(lua2);
X(lua3);
X(start)[ver];
X(l)[ver];
X(r)[ver];
X(up)[ver];
X(down)[ver];
X(right)[ver];
X(left)[ver];
X(lua1)[ver];
X(lua2)[ver];
X(lua3)[ver];
#undef X
}
@ -435,15 +435,15 @@ patch_t** get_button_patch(Draw::GenericButton type, int ver)
X(b)[ver];
X(x)[ver];
X(y)[ver];
X(lb);
X(rb);
X(lt);
X(rt);
X(start);
X(back);
X(ls);
X(rs);
X(dpad);
X(lb)[ver];
X(rb)[ver];
X(lt)[ver];
X(rt)[ver];
X(start)[ver];
X(back)[ver];
X(ls)[ver];
X(rs)[ver];
X(dpad)[ver];
#undef X
}

View file

@ -2496,40 +2496,39 @@ static void V_GetFontSpecification(int fontno, INT32 flags, fontspec_t *result)
static UINT8 V_GetButtonCodeWidth(UINT8 c, boolean largebutton)
{
UINT8 x = 0;
UINT8 x = 14;
switch (c & 0x0F)
{
case 0x00:
case 0x01:
case 0x02:
case 0x03:
// arrows
x = 12;
case sb_up:
case sb_down:
case sb_left:
case sb_right:
x -= largebutton ? 2 : 4;
break;
case 0x07:
case 0x08:
case 0x09:
// shoulders, start
x = 14;
case sb_l:
case sb_r:
x -= largebutton ? 1 : 4;
break;
case 0x04:
case 0x05:
case 0x06:
// lua
x = 16;
case sb_start:
x -= largebutton ? 0 : 4;
break;
case 0x0A:
case 0x0B:
case 0x0C:
case 0x0D:
case 0x0E:
case 0x0F:
// faces
x = largebutton ? 13 : 10;
case sb_lua1:
case sb_lua2:
case sb_lua3:
x -= largebutton ? 0 : 4;
break;
case sb_a:
case sb_b:
case sb_c:
case sb_x:
case sb_y:
case sb_z:
x -= largebutton ? 0 : 4;
break;
}
@ -2538,45 +2537,42 @@ static UINT8 V_GetButtonCodeWidth(UINT8 c, boolean largebutton)
static UINT8 V_GetGenericButtonCodeWidth(UINT8 c, boolean largebutton)
{
UINT8 x = 0;
UINT8 x = 16;
switch (c & 0x0F)
switch ((c & 0x0F) | gb_mask)
{
case 0x00:
case 0x01:
case 0x02:
case 0x03:
// buttons
x = largebutton ? 17 : 14;
case gb_a:
case gb_b:
case gb_x:
case gb_y:
x -= largebutton ? 0 : 2;
break;
case 0x04:
case 0x05:
// bumpers
x = 14;
case gb_lb:
case gb_rb:
x -= largebutton ? 2 : 6;
break;
case 0x06:
case 0x07:
// triggers
x = 14;
case gb_lt:
case gb_rt:
x -= largebutton ? 2 : 6;
break;
case 0x08:
case 0x09:
// nav
x = 14;
case gb_start:
x -= largebutton ? 2 : 6;
break;
case 0x0A:
case 0x0B:
// stick click
x = 18;
case gb_back:
x -= largebutton ? 2 : 6;
break;
case 0x0C:
// dpad
x = 14;
case gb_ls:
case gb_rs:
x -= largebutton ? 1 : 4;
break;
case gb_dpad:
x -= largebutton ? 2 : 5;
break;
}
@ -2609,6 +2605,10 @@ void V_DrawStringScaled(
int boxed = 0;
boolean descriptive = false;
boolean debugalternation = false;
UINT8 debugcolor1 = 181;
UINT8 debugcolor2 = 96;
boolean dance;
boolean nodanceoverride;
INT32 dancecounter;
@ -2835,32 +2835,65 @@ void V_DrawStringScaled(
{
switch (c & 0x0F)
{
case sb_up: return {{0, 3, Draw::Button::up}};
case sb_down: return {{0, 3, Draw::Button::down}};
case sb_right: return {{0, 3, Draw::Button::right}};
case sb_left: return {{0, 3, Draw::Button::left}};
case sb_up: return {{2, 2, Draw::Button::up}};
case sb_down: return {{2, 2, Draw::Button::down}};
case sb_right: return {{2, 2, Draw::Button::right}};
case sb_left: return {{2, 2, Draw::Button::left}};
case sb_lua1: return {{0, 4, Draw::Button::lua1}};
case sb_lua2: return {{0, 4, Draw::Button::lua2}};
case sb_lua3: return {{0, 4, Draw::Button::lua3}};
case sb_lua1: return {{2, 2, Draw::Button::lua1}};
case sb_lua2: return {{2, 2, Draw::Button::lua2}};
case sb_lua3: return {{2, 2, Draw::Button::lua3}};
case sb_r: return {{0, 2, Draw::Button::r}};
case sb_l: return {{0, 2, Draw::Button::l}};
case sb_r: return {{2, 2, Draw::Button::r}};
case sb_l: return {{2, 2, Draw::Button::l}};
case sb_start: return {{0, 1, Draw::Button::start}};
case sb_start: return {{2, 2, Draw::Button::start}};
case sb_a: return {{2, 1, Draw::Button::a}};
case sb_b: return {{2, 1, Draw::Button::b}};
case sb_c: return {{2, 1, Draw::Button::c}};
case sb_a: return {{2, 2, Draw::Button::a}};
case sb_b: return {{2, 2, Draw::Button::b}};
case sb_c: return {{2, 2, Draw::Button::c}};
case sb_x: return {{2, 1, Draw::Button::x}};
case sb_y: return {{2, 1, Draw::Button::y}};
case sb_z: return {{2, 1, Draw::Button::z}};
case sb_x: return {{2, 2, Draw::Button::x}};
case sb_y: return {{2, 2, Draw::Button::y}};
case sb_z: return {{2, 2, Draw::Button::z}};
default: return {};
}
}();
if (largebutton)
{
bt_inst = [c]() -> std::optional<BtConf>
{
switch (c & 0x0F)
{
case sb_up: return {{2, 4, Draw::Button::up}};
case sb_down: return {{2, 4, Draw::Button::down}};
case sb_right: return {{2, 4, Draw::Button::right}};
case sb_left: return {{2, 4, Draw::Button::left}};
case sb_lua1: return {{1, 4, Draw::Button::lua1}};
case sb_lua2: return {{1, 4, Draw::Button::lua2}};
case sb_lua3: return {{1, 4, Draw::Button::lua3}};
case sb_r: return {{1, 4, Draw::Button::r}};
case sb_l: return {{1, 4, Draw::Button::l}};
case sb_start: return {{1, 4, Draw::Button::start}};
case sb_a: return {{1, 4, Draw::Button::a}};
case sb_b: return {{1, 4, Draw::Button::b}};
case sb_c: return {{1, 4, Draw::Button::c}};
case sb_x: return {{1, 4, Draw::Button::x}};
case sb_y: return {{1, 4, Draw::Button::y}};
case sb_z: return {{1, 4, Draw::Button::z}};
default: return {};
}
}();
}
if (bt_inst)
{
auto bt_translate_press = [c]() -> std::optional<bool>
@ -2878,6 +2911,12 @@ void V_DrawStringScaled(
cxoff = (*fontspec.dim_fn)(scale, fontspec.chw, hchw, dupx, &cw);
if (cv_debugfonts.value)
{
V_DrawFill(cx/FRACUNIT, cy/FRACUNIT, cw/FRACUNIT, fontspec.lfh/FRACUNIT, debugalternation ? debugcolor1 : debugcolor2);
debugalternation = !debugalternation;
}
Draw bt = Draw(
FixedToFloat(cx + cxoff) - (bt_inst->x * dupx),
FixedToFloat(cy + cyoff) - ((bt_inst->y + fontspec.button_yofs) * dupy))
@ -2908,23 +2947,47 @@ void V_DrawStringScaled(
{
switch ((c & 0x0F) | gb_mask)
{
case gb_a: return {{0, 2, Draw::GenericButton::a}};
case gb_b: return {{0, 2, Draw::GenericButton::b}};
case gb_x: return {{0, 2, Draw::GenericButton::x}};
case gb_y: return {{0, 2, Draw::GenericButton::y}};
case gb_lb: return {{1, 3, Draw::GenericButton::lb}};
case gb_rb: return {{1, 3, Draw::GenericButton::rb}};
case gb_lt: return {{1, 4, Draw::GenericButton::lt}};
case gb_rt: return {{1, 4, Draw::GenericButton::rt}};
case gb_start: return {{1, 6, Draw::GenericButton::start}};
case gb_back: return {{1, 6, Draw::GenericButton::back}};
case gb_ls: return {{0, 5, Draw::GenericButton::ls}};
case gb_rs: return {{0, 5, Draw::GenericButton::rs}};
case gb_dpad: return {{0, 4, Draw::GenericButton::dpad}};
case gb_a: return {{0, 1, Draw::GenericButton::a}};
case gb_b: return {{0, 1, Draw::GenericButton::b}};
case gb_x: return {{0, 1, Draw::GenericButton::x}};
case gb_y: return {{0, 1, Draw::GenericButton::y}};
case gb_lb: return {{2, 2, Draw::GenericButton::lb}};
case gb_rb: return {{2, 2, Draw::GenericButton::rb}};
case gb_lt: return {{2, 2, Draw::GenericButton::lt}};
case gb_rt: return {{2, 2, Draw::GenericButton::rt}};
case gb_start: return {{2, 2, Draw::GenericButton::start}};
case gb_back: return {{2, 2, Draw::GenericButton::back}};
case gb_ls: return {{1, 2, Draw::GenericButton::ls}};
case gb_rs: return {{1, 2, Draw::GenericButton::rs}};
case gb_dpad: return {{2, 2, Draw::GenericButton::dpad}};
default: return {};
}
}();
if (largebutton)
{
bt_inst = [c]() -> std::optional<BtConf>
{
switch ((c & 0x0F) | gb_mask)
{
case gb_a: return {{0, 3, Draw::GenericButton::a}};
case gb_b: return {{0, 3, Draw::GenericButton::b}};
case gb_x: return {{0, 3, Draw::GenericButton::x}};
case gb_y: return {{0, 3, Draw::GenericButton::y}};
case gb_lb: return {{1, 3, Draw::GenericButton::lb}};
case gb_rb: return {{1, 3, Draw::GenericButton::rb}};
case gb_lt: return {{1, 4, Draw::GenericButton::lt}};
case gb_rt: return {{1, 4, Draw::GenericButton::rt}};
case gb_start: return {{1, 6, Draw::GenericButton::start}};
case gb_back: return {{1, 6, Draw::GenericButton::back}};
case gb_ls: return {{1, 5, Draw::GenericButton::ls}};
case gb_rs: return {{1, 5, Draw::GenericButton::rs}};
case gb_dpad: return {{1, 4, Draw::GenericButton::dpad}};
default: return {};
}
}();
}
if (bt_inst)
{
auto bt_translate_press = [c]() -> std::optional<bool>
@ -2942,6 +3005,12 @@ void V_DrawStringScaled(
cxoff = (*fontspec.dim_fn)(scale, fontspec.chw, hchw, dupx, &cw);
if (cv_debugfonts.value)
{
V_DrawFill(cx/FRACUNIT, cy/FRACUNIT, cw/FRACUNIT, fontspec.lfh/FRACUNIT, debugalternation ? debugcolor1 : debugcolor2);
debugalternation = !debugalternation;
}
Draw bt = Draw(
FixedToFloat(cx + cxoff) - (bt_inst->x * dupx),
FixedToFloat(cy + cyoff) - ((bt_inst->y + fontspec.button_yofs) * dupy))
@ -2969,6 +3038,12 @@ void V_DrawStringScaled(
cw = SHORT (font->font[c]->width) * dupx;
cxoff = (*fontspec.dim_fn)(scale, fontspec.chw, hchw, dupx, &cw);
if (cv_debugfonts.value)
{
V_DrawFill(cx/FRACUNIT, cy/FRACUNIT, cw/FRACUNIT, fontspec.lfh/FRACUNIT, debugalternation ? debugcolor1 : debugcolor2);
debugalternation = !debugalternation;
}
if (boxed != 1)
{
V_DrawFixedPatch(cx + cxoff + patchxofs, cy + cyoff + (boxed == 3 ? 2*FRACUNIT : 0), scale,
@ -3063,6 +3138,7 @@ fixed_t V_StringScaledWidth(
case '\xEB':
if (fontno != TINY_FONT && fontno != HU_FONT)
largebutton = true;
break;
case '\xEF':
descriptive = true;
break;