Keyboard label fuckapalooza

This commit is contained in:
Antonio Martinez 2024-09-19 02:53:50 -07:00 committed by AJ Martinez
parent 5c5ab934b3
commit 9edeaaf0ba
7 changed files with 92 additions and 34 deletions

View file

@ -879,6 +879,7 @@ INT32 G_PlayerInputAnalog(UINT8 p, INT32 gc, UINT8 menuPlayers)
// This is only intended for P1. // This is only intended for P1.
if (main_player == true) if (main_player == true)
{ {
showgamepadprompts[p] = false;
return value; return value;
} }
else else
@ -898,6 +899,7 @@ INT32 G_PlayerInputAnalog(UINT8 p, INT32 gc, UINT8 menuPlayers)
value = G_GetValueFromControlTable(deviceID, deadzone, &(gamecontrol[p][gc][0])); value = G_GetValueFromControlTable(deviceID, deadzone, &(gamecontrol[p][gc][0]));
if (value > 0) if (value > 0)
{ {
showgamepadprompts[p] = (deviceID != KEYBOARD_MOUSE_DEVICE);
return value; return value;
} }
if (value != NO_BINDS_REACHABLE) if (value != NO_BINDS_REACHABLE)
@ -911,6 +913,7 @@ INT32 G_PlayerInputAnalog(UINT8 p, INT32 gc, UINT8 menuPlayers)
value = G_GetValueFromControlTable(KEYBOARD_MOUSE_DEVICE, deadzone, &(gamecontrol[p][gc][0])); value = G_GetValueFromControlTable(KEYBOARD_MOUSE_DEVICE, deadzone, &(gamecontrol[p][gc][0]));
if (value > 0) if (value > 0)
{ {
showgamepadprompts[p] = true;
return value; return value;
} }
if (value != NO_BINDS_REACHABLE) if (value != NO_BINDS_REACHABLE)
@ -951,6 +954,7 @@ INT32 G_PlayerInputAnalog(UINT8 p, INT32 gc, UINT8 menuPlayers)
value = G_GetValueFromControlTable(tryDevice, deadzone, &(gamecontrol[p][gc][0])); value = G_GetValueFromControlTable(tryDevice, deadzone, &(gamecontrol[p][gc][0]));
if (value > 0) if (value > 0)
{ {
showgamepadprompts[p] = (tryDevice != KEYBOARD_MOUSE_DEVICE);
return value; return value;
} }
if (value != NO_BINDS_REACHABLE) if (value != NO_BINDS_REACHABLE)
@ -967,6 +971,7 @@ INT32 G_PlayerInputAnalog(UINT8 p, INT32 gc, UINT8 menuPlayers)
value = G_GetValueFromControlTable(deviceID, deadzone, &(gamecontroldefault[gc][0])); value = G_GetValueFromControlTable(deviceID, deadzone, &(gamecontroldefault[gc][0]));
if (value > 0) if (value > 0)
{ {
showgamepadprompts[p] = (deviceID != KEYBOARD_MOUSE_DEVICE);
return value; return value;
} }
} }

View file

@ -33,6 +33,7 @@ INT32 gamekeydown[MAXDEVICES][NUMINPUTS];
// two key codes (or virtual key) per game control // two key codes (or virtual key) per game control
INT32 gamecontrol[MAXSPLITSCREENPLAYERS][num_gamecontrols][MAXINPUTMAPPING]; INT32 gamecontrol[MAXSPLITSCREENPLAYERS][num_gamecontrols][MAXINPUTMAPPING];
UINT8 gamecontrolflags[MAXSPLITSCREENPLAYERS]; UINT8 gamecontrolflags[MAXSPLITSCREENPLAYERS];
UINT8 showgamepadprompts[MAXSPLITSCREENPLAYERS];
INT32 gamecontroldefault[num_gamecontrols][MAXINPUTMAPPING]; // default control storage INT32 gamecontroldefault[num_gamecontrols][MAXINPUTMAPPING]; // default control storage
INT32 menucontrolreserved[num_gamecontrols][MAXINPUTMAPPING]; INT32 menucontrolreserved[num_gamecontrols][MAXINPUTMAPPING];
@ -1274,9 +1275,12 @@ INT32 G_FindPlayerBindForGameControl(INT32 player, gamecontrols_e control)
if (ourProfile == NULL) if (ourProfile == NULL)
ourProfile = PR_GetLocalPlayerProfile(0); ourProfile = PR_GetLocalPlayerProfile(0);
#if 0
INT32 device = G_GetDeviceForPlayer(player); // TODO: Respond to what device player is CURRENTLY using INT32 device = G_GetDeviceForPlayer(player); // TODO: Respond to what device player is CURRENTLY using
if (device == -1) // No registered device = you can't possibly be using a gamepad if (device == -1) // No registered device = you can't possibly be using a gamepad
device = KEYBOARD_MOUSE_DEVICE; device = KEYBOARD_MOUSE_DEVICE;
#endif
INT32 device = showgamepadprompts[player] ? 1 : KEYBOARD_MOUSE_DEVICE;
INT32 bestbind = -1; // Bind that matches our input device INT32 bestbind = -1; // Bind that matches our input device
INT32 anybind = -1; // Bind that doesn't match, but is at least for this control INT32 anybind = -1; // Bind that doesn't match, but is at least for this control
@ -1305,6 +1309,8 @@ INT32 G_FindPlayerBindForGameControl(INT32 player, gamecontrols_e control)
} }
} }
// DUMBASS. Default controls aren't necessarily in use!
#if 0
// PASS 2: Binds that are in the default controls. // PASS 2: Binds that are in the default controls.
if (bestbind == -1) if (bestbind == -1)
{ {
@ -1330,6 +1336,7 @@ INT32 G_FindPlayerBindForGameControl(INT32 player, gamecontrols_e control)
} }
} }
} }
#endif
// PASS 3: "Safety" binds that are reserved by the menu system. // PASS 3: "Safety" binds that are reserved by the menu system.
if (bestbind == -1) if (bestbind == -1)

View file

@ -120,6 +120,7 @@ extern INT32 gamekeydown[MAXDEVICES][NUMINPUTS];
// several key codes (or virtual key) per game control // several key codes (or virtual key) per game control
extern INT32 gamecontrol[MAXSPLITSCREENPLAYERS][num_gamecontrols][MAXINPUTMAPPING]; extern INT32 gamecontrol[MAXSPLITSCREENPLAYERS][num_gamecontrols][MAXINPUTMAPPING];
extern UINT8 gamecontrolflags[MAXSPLITSCREENPLAYERS]; extern UINT8 gamecontrolflags[MAXSPLITSCREENPLAYERS];
extern UINT8 showgamepadprompts[MAXSPLITSCREENPLAYERS];
extern INT32 gamecontroldefault[num_gamecontrols][MAXINPUTMAPPING]; // default control storage extern INT32 gamecontroldefault[num_gamecontrols][MAXINPUTMAPPING]; // default control storage
extern INT32 menucontrolreserved[num_gamecontrols][MAXINPUTMAPPING]; extern INT32 menucontrolreserved[num_gamecontrols][MAXINPUTMAPPING];

View file

@ -257,6 +257,10 @@ patch_t *gen_button_back[2];
patch_t *gen_button_ls[2]; patch_t *gen_button_ls[2];
patch_t *gen_button_rs[2]; patch_t *gen_button_rs[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], int letter)
{ {
HU_UpdatePatch(&kp[0], "TLB_%c", letter); HU_UpdatePatch(&kp[0], "TLB_%c", letter);
@ -999,10 +1003,17 @@ void K_LoadKartHUDGraphics(void)
K_LoadGenericButtonGraphics(gen_button_rt, 'F'); K_LoadGenericButtonGraphics(gen_button_rt, 'F');
K_LoadGenericButtonGraphics(gen_button_start, 'G'); K_LoadGenericButtonGraphics(gen_button_start, 'G');
K_LoadGenericButtonGraphics(gen_button_back, 'G'); // FIXME K_LoadGenericButtonGraphics(gen_button_back, 'V'); // FIXME
K_LoadGenericButtonGraphics(gen_button_ls, 'T'); K_LoadGenericButtonGraphics(gen_button_ls, 'T');
K_LoadGenericButtonGraphics(gen_button_rs, 'U'); K_LoadGenericButtonGraphics(gen_button_rs, 'U');
HU_UpdatePatch(&gen_button_keyleft[0], "TLK_L");
HU_UpdatePatch(&gen_button_keyleft[1], "TLK_R");
HU_UpdatePatch(&gen_button_keyright[0], "TLK_R");
HU_UpdatePatch(&gen_button_keyright[1], "TLK_RB");
HU_UpdatePatch(&gen_button_keycenter[0], "TLK_M");
HU_UpdatePatch(&gen_button_keycenter[1], "TLK_MB");
} }
// For the item toggle menu // For the item toggle menu
@ -6498,15 +6509,17 @@ void K_drawKartHUD(void)
} }
if (0) if (1)
{ {
Draw::TextElement text = Draw::TextElement().parse("\xEELEFTSPACE\xEE\n\xEESPC\xEE \xEETAB\xEE\nA \xEF\xA0 A\nB \xEF\xA1 B\nX \xEF\xA2 X\nY \xEF\xA3 Y\nLB \xEF\xA4 LB\nRB \xEF\xA5 RB\nLT \xEF\xA6 LT\nRT \xEF\xA7 RT\nST \xEF\xA8 ST\nBK \xEF\xA9 BK\nLS \xEF\xAA LS\nRS \xEF\xAB RS\n"); Draw::TextElement text = Draw::TextElement().parse("\xEELEFTSPACE\xEE\n\xEESPC\xEE \xEETAB\xEE\nA \xEF\xA0 A\nB \xEF\xA1 B\nX \xEF\xA2 X\nY \xEF\xA3 Y\nLB \xEF\xA4 LB\nRB \xEF\xA5 RB\nLT \xEF\xA6 LT\nRT \xEF\xA7 RT\nST \xEF\xA8 ST\nBK \xEF\xA9 BK\nLS \xEF\xAA LS\nRS \xEF\xAB RS\n");
UINT8 offset = 0;
player_t *oldstplyr = stplyr; player_t *oldstplyr = stplyr;
stplyr = &players[0]; stplyr = &players[0];
Draw(160, 5).align((srb2::Draw::Align)0).font(Draw::Font::kMenu).text(text); Draw(160+offset, 5).align((srb2::Draw::Align)1).font(Draw::Font::kThin).text(text);
stplyr = &players[1]; stplyr = &players[1];
Draw(55, 5).align((srb2::Draw::Align)0).font(Draw::Font::kThin).text(text); Draw(55+offset, 5).align((srb2::Draw::Align)1).font(Draw::Font::kMenu).text(text);
stplyr = oldstplyr; stplyr = oldstplyr;
} }
@ -6937,15 +6950,15 @@ void K_DrawMarginSticker(INT32 x, INT32 y, INT32 width, INT32 flags, boolean isS
V_DrawFixedPatch((x + width)*FRACUNIT, y*FRACUNIT, FRACUNIT, flags|V_FLIP, stickerEnd, NULL); V_DrawFixedPatch((x + width)*FRACUNIT, y*FRACUNIT, FRACUNIT, flags|V_FLIP, stickerEnd, NULL);
} }
INT32 K_DrawGameControl(UINT16 x, UINT16 y, UINT8 player, const char *str, UINT8 alignment) INT32 K_DrawGameControl(UINT16 x, UINT16 y, UINT8 player, const char *str, UINT8 alignment, UINT8 font)
{ {
using srb2::Draw; using srb2::Draw;
Draw::TextElement text = Draw::TextElement().as(player).parse(str).font(Draw::Font::kMenu); Draw::TextElement text = Draw::TextElement().as(player).parse(str).font((Draw::Font)font);
INT32 width = text.width(); INT32 width = text.width();
Draw(x, y).align((srb2::Draw::Align)alignment).text(text); Draw(x, y).align((srb2::Draw::Align)alignment).text(text);
return width; return width;
} }

View file

@ -116,6 +116,10 @@ extern patch_t *gen_button_back[2];
extern patch_t *gen_button_ls[2]; extern patch_t *gen_button_ls[2];
extern patch_t *gen_button_rs[2]; extern patch_t *gen_button_rs[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 *kp_eggnum[6]; extern patch_t *kp_eggnum[6];
extern patch_t *kp_facenum[MAXPLAYERS+1]; extern patch_t *kp_facenum[MAXPLAYERS+1];
@ -146,7 +150,7 @@ INT32 K_GetMinimapTransFlags(const boolean usingProgressBar);
INT32 K_GetMinimapSplitFlags(const boolean usingProgressBar); INT32 K_GetMinimapSplitFlags(const boolean usingProgressBar);
position_t K_GetKartObjectPosToMinimapPos(fixed_t objx, fixed_t objy); position_t K_GetKartObjectPosToMinimapPos(fixed_t objx, fixed_t objy);
INT32 K_DrawGameControl(UINT16 x, UINT16 y, UINT8 player, const char *str, UINT8 alignment); INT32 K_DrawGameControl(UINT16 x, UINT16 y, UINT8 player, const char *str, UINT8 alignment, UINT8 font);
#ifdef __cplusplus #ifdef __cplusplus
} // extern "C" } // extern "C"

View file

@ -833,8 +833,9 @@ void M_DrawMenuMessage(void)
if (standardbuttons) if (standardbuttons)
{ {
workx -= K_DrawGameControl( workx -= K_DrawGameControl(
workx+2, worky, workx+2, worky+2,
0, "<b_animated> <x_animated> ", 2 0, "<b_animated> <x_animated> ",
2, 8
); );
} }
else else
@ -863,8 +864,9 @@ void M_DrawMenuMessage(void)
if (standardbuttons) if (standardbuttons)
{ {
workx -= K_DrawGameControl( workx -= K_DrawGameControl(
workx+2, worky, workx+2, worky+2,
0, "<a_animated> ", 2 0, "<a_animated> ",
2, 8
); );
} }
else else
@ -2458,17 +2460,22 @@ void M_DrawCharacterSelect(void)
if (!optionsmenu.profile) // Does nothing on this screen if (!optionsmenu.profile) // Does nothing on this screen
{ {
x += 22; // x += 22;
//K_drawButton((x += 22) * FRACUNIT, (kTop - 3) * FRACUNIT, 0, kp_button_r, M_MenuButtonPressed(pid, MBT_R)); //K_drawButton((x += 22) * FRACUNIT, (kTop - 3) * FRACUNIT, 0, kp_button_r, M_MenuButtonPressed(pid, MBT_R));
x += K_DrawGameControl(x, kTop, 0, "<r>", 0); // x += K_DrawGameControl(x, kTop, 0, "<r>", 0);
V_DrawThinString((x), kTop, 0, "Info"); // V_DrawThinString((x), kTop, 0, "Info");
K_DrawGameControl(BASEVIDWIDTH/2, kTop, 0, "<r> Info <c> Default", 1, 0);
}
else
{
K_DrawGameControl(BASEVIDWIDTH/2, kTop, 0, "<a> Accept <x> Back <c> Default", 1, 0);
} }
x += 58; x += 58;
// K_drawButton((x += 58) * FRACUNIT, (kTop - 1) * FRACUNIT, 0, kp_button_c[1], M_MenuButtonPressed(pid, MBT_C)); // K_drawButton((x += 58) * FRACUNIT, (kTop - 1) * FRACUNIT, 0, kp_button_c[1], M_MenuButtonPressed(pid, MBT_C));
x += K_DrawGameControl(x, kTop, 0, "<c>", 0); // x += K_DrawGameControl(x, kTop, 0, "<c>", 0);
V_DrawThinString((x), kTop, 0, "Default"); // V_DrawThinString((x), kTop, 0, "Default");
} }
// We have to loop twice -- first time to draw the drop shadows, a second time to draw the icons. // We have to loop twice -- first time to draw the drop shadows, a second time to draw the icons.
@ -2578,6 +2585,11 @@ void M_DrawCharacterSelect(void)
// Draw the priority player over the other ones // Draw the priority player over the other ones
M_DrawCharSelectCursor(priority); M_DrawCharSelectCursor(priority);
} }
if (setup_numplayers > 1)
{
V_DrawCenteredThinString(BASEVIDWIDTH/2, BASEVIDHEIGHT-12, V_30TRANS, "\x85""Double-input problems?\x80 Close Steam, DS4Windows, and other controller wrappers!");
}
} }
// DIFFICULTY SELECT // DIFFICULTY SELECT

View file

@ -2592,9 +2592,6 @@ void V_DrawStringScaled(
INT32 dupx; INT32 dupx;
INT32 dupy; INT32 dupy;
const UINT8 outerbox = 26;
const UINT8 innerbox = 16;
fixed_t right; fixed_t right;
fixed_t bot; fixed_t bot;
@ -2602,7 +2599,7 @@ void V_DrawStringScaled(
boolean uppercase; boolean uppercase;
boolean notcolored; boolean notcolored;
boolean boxed; int boxed = 0;
boolean descriptive = false; boolean descriptive = false;
boolean dance; boolean dance;
@ -2610,6 +2607,9 @@ void V_DrawStringScaled(
INT32 dancecounter; INT32 dancecounter;
fixed_t cx, cy; fixed_t cx, cy;
fixed_t cxsave;
const char *ssave;
fixed_t cxoff, cyoff; fixed_t cxoff, cyoff;
fixed_t cw; fixed_t cw;
@ -2696,6 +2696,8 @@ void V_DrawStringScaled(
switch (c) switch (c)
{ {
case '\n': case '\n':
if (boxed)
continue;
cy += fontspec.lfh; cy += fontspec.lfh;
if (cy >= bot) if (cy >= bot)
return; return;
@ -2705,18 +2707,34 @@ void V_DrawStringScaled(
descriptive = true; descriptive = true;
break; break;
case '\xEE': case '\xEE':
boxed = !boxed; if (boxed == 0) // Save our position and start no-op drawing
if (boxed) // draw caps
{ {
V_DrawFill((cx)/FRACUNIT-2, (cy)/FRACUNIT-2, (fontspec.right_outline)+2, fontspec.lfh/FRACUNIT, flags|outerbox); // TODO animate
V_DrawFill((cx)/FRACUNIT-1, (cy)/FRACUNIT-1, (fontspec.right_outline)+1, fontspec.lfh/FRACUNIT-2, flags|innerbox); Draw(FixedToFloat(cx), FixedToFloat(cy)-3).patch(gen_button_keyleft[0]);
cx += 3*FRACUNIT;
ssave = s;
cxsave = cx;
boxed = 1;
} }
else else if (boxed == 1) // Draw box from saved pos to current pos and roll back
{ {
cx += 2*scale; cx += (fontspec.right_outline)*FRACUNIT;
//V_DrawFill((cx)/FRACUNIT+(fontspec.right_outline), (cy)/FRACUNIT-2, 2, fontspec.lfh/FRACUNIT, flags|outerbox); fixed_t working = cxsave - 1*FRACUNIT;
//V_DrawFill((cx)/FRACUNIT+(fontspec.right_outline), (cy)/FRACUNIT-1, 1, fontspec.lfh/FRACUNIT-2, flags|innerbox); // TODO animate
Draw(FixedToFloat(working), FixedToFloat(cy)-3)
.width(FixedToFloat(cx - working))
.stretch(Draw::Stretch::kWidth).patch(gen_button_keycenter[0]);
Draw(FixedToFloat(cx), FixedToFloat(cy)-3).patch(gen_button_keyright[0]);
s = ssave;
cx = cxsave;
boxed = 2;
} }
else // Meeting the ending tag the second time, noop
{
boxed = 0;
cx += (4)*FRACUNIT;
}
break; break;
default: default:
if (( c & 0xF0 ) == 0x80) if (( c & 0xF0 ) == 0x80)
@ -2948,14 +2966,12 @@ void V_DrawStringScaled(
cw = SHORT (font->font[c]->width) * dupx; cw = SHORT (font->font[c]->width) * dupx;
cxoff = (*fontspec.dim_fn)(scale, fontspec.chw, hchw, dupx, &cw); cxoff = (*fontspec.dim_fn)(scale, fontspec.chw, hchw, dupx, &cw);
if (boxed) if (boxed != 1)
{ {
V_DrawFill((cx)/FRACUNIT+(fontspec.right_outline), (cy)/FRACUNIT-2, (font->font[c]->width)-(fontspec.right_outline)+2, fontspec.lfh/FRACUNIT, flags|outerbox); V_DrawFixedPatch(cx + cxoff + patchxofs, cy + cyoff, scale,
V_DrawFill((cx)/FRACUNIT+(fontspec.right_outline), (cy)/FRACUNIT-1, (font->font[c]->width)-(fontspec.right_outline)+1, fontspec.lfh/FRACUNIT-2, flags|innerbox); flags | ((boxed == 2) ? V_20TRANS : 0), font->font[c], colormap);
} }
V_DrawFixedPatch(cx + cxoff + patchxofs, cy + cyoff, scale,
flags, font->font[c], colormap);
cx += cw; cx += cw;
} }
else else