diff --git a/src/cvars.cpp b/src/cvars.cpp index f292b6f1f..1a8f7904e 100644 --- a/src/cvars.cpp +++ b/src/cvars.cpp @@ -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"); diff --git a/src/hu_stuff.c b/src/hu_stuff.c index c866184b4..a01bf99d6 100644 --- a/src/hu_stuff.c +++ b/src/hu_stuff.c @@ -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; diff --git a/src/k_dialogue.cpp b/src/k_dialogue.cpp index 36c90a079..ea52a746b 100644 --- a/src/k_dialogue.cpp +++ b/src/k_dialogue.cpp @@ -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 += ""; - 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()); } } diff --git a/src/k_hud.cpp b/src/k_hud.cpp index 54f0ff13d..fc4948357 100644 --- a/src/k_hud.cpp +++ b/src/k_hud.cpp @@ -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 B C X Y Z \nST L R U D L R "); - Draw::TextElement text = Draw::TextElement().parse("Unpressed Pressed Animated "); + CV_StealthSetValue(cv_descriptiveinput, 0); + Draw::TextElement text = Draw::TextElement().parse("Hamburger Hamburger\n\nHamburger 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) diff --git a/src/k_hud.h b/src/k_hud.h index 5323a2f9d..acdfc916b 100644 --- a/src/k_hud.h +++ b/src/k_hud.h @@ -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]; diff --git a/src/k_menudraw.c b/src/k_menudraw.c index e8a2d7d2c..276303595 100644 --- a/src/k_menudraw.c +++ b/src/k_menudraw.c @@ -6106,7 +6106,7 @@ void M_DrawPause(void) K_DrawGameControl(4, 184 - 45 + offset/2, 0, " Accelerate", 0, 0, 0); K_DrawGameControl(4, 184 - 30 + offset/2, 0, " Look Back", 0, 0, 0); K_DrawGameControl(4, 184 - 15 + offset/2, 0, " Spindash", 0, 0, 0); - K_DrawGameControl(4, 184 - 0 + offset/2, 0, " Item", 0, 0, 0); + K_DrawGameControl(4, 184 - 0 + offset/2, 0, " Item/Rings", 0, 0, 0); K_DrawGameControl(90, 184 - 45 + offset/2, 0, " Brake", 0, 0, 0); K_DrawGameControl(90, 184 - 30 + offset/2, 0, " Respawn", 0, 0, 0); diff --git a/src/r_main.h b/src/r_main.h index 31448b308..ccb534213 100644 --- a/src/r_main.h +++ b/src/r_main.h @@ -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 diff --git a/src/v_draw.cpp b/src/v_draw.cpp index ef8b2fe4b..ae813d3f9 100644 --- a/src/v_draw.cpp +++ b/src/v_draw.cpp @@ -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 } diff --git a/src/v_video.cpp b/src/v_video.cpp index d4edf89e8..793fbe71e 100644 --- a/src/v_video.cpp +++ b/src/v_video.cpp @@ -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 + { + 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 @@ -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 + { + 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 @@ -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;