From 1f3b5dea0ad0a7df674f8439e61cf7dda9da7125 Mon Sep 17 00:00:00 2001 From: James R Date: Sat, 2 Mar 2024 00:16:25 -0800 Subject: [PATCH 1/6] Remove cv_showinputjoy (unused) --- src/cvars.cpp | 1 - src/doomstat.h | 1 - 2 files changed, 2 deletions(-) diff --git a/src/cvars.cpp b/src/cvars.cpp index 2b439d89e..b7216fe41 100644 --- a/src/cvars.cpp +++ b/src/cvars.cpp @@ -445,7 +445,6 @@ consvar_t cv_showfocuslost = Player("showfocuslost", "Yes").yes_no(); void R_SetViewSize(void); consvar_t cv_showhud = Player("showhud", "Yes").yes_no().onchange(R_SetViewSize).dont_save(); -consvar_t cv_showinputjoy = Player("showinputjoy", "Off").on_off().dont_save(); consvar_t cv_skybox = Player("skybox", "On").on_off(); // Display song credits diff --git a/src/doomstat.h b/src/doomstat.h index 2515d9e1d..53ac819d9 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -927,7 +927,6 @@ extern tic_t g_fast_forward; #include "d_clisrv.h" -extern consvar_t cv_showinputjoy; // display joystick in time attack extern consvar_t cv_forceskin; // force clients to use the server's skin extern consvar_t cv_downloading; // allow clients to downloading WADs. extern consvar_t cv_nettimeout; // SRB2Kart: Advanced server options menu From e44d1759dd4a822cf76479fcfa19054ca1c0971c Mon Sep 17 00:00:00 2001 From: James R Date: Sat, 2 Mar 2024 00:18:33 -0800 Subject: [PATCH 2/6] Menus/Accessibility: add Input Display option --- src/cvars.cpp | 2 +- src/menus/options-profiles-edit-accessibility.cpp | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/cvars.cpp b/src/cvars.cpp index b7216fe41..ab121527b 100644 --- a/src/cvars.cpp +++ b/src/cvars.cpp @@ -359,6 +359,7 @@ consvar_t cv_drawdist_precip = Player("drawdist_precip", "1024").values({ {0, "None"}, }); +consvar_t cv_drawinput = Player("drawinput", "No").yes_no(); consvar_t cv_ffloorclip = Player("ffloorclip", "On").on_off(); consvar_t cv_fpscap = Player("fpscap", "Match refresh rate").values({ @@ -889,7 +890,6 @@ consvar_t cv_debugrender_spriteclip = PlayerCheat("debugrender_spriteclip", "Off consvar_t cv_debugrender_visplanes = PlayerCheat("debugrender_visplanes", "Off").on_off().description("Highlight the number of visplanes"); 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_drawinput = PlayerCheat("drawinput", "No").yes_no().description("Draw turn inputs outside of Record Attack (turn solver debugging)"); 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/menus/options-profiles-edit-accessibility.cpp b/src/menus/options-profiles-edit-accessibility.cpp index 8ace78f24..ca031279c 100644 --- a/src/menus/options-profiles-edit-accessibility.cpp +++ b/src/menus/options-profiles-edit-accessibility.cpp @@ -8,7 +8,7 @@ #include "../m_easing.h" #include "../p_local.h" // cv_tilting -extern "C" consvar_t cv_mindelay; +extern "C" consvar_t cv_mindelay, cv_drawinput; using srb2::Draw; @@ -119,6 +119,9 @@ menuitem_t OPTIONS_ProfileAccessibility[] = { {IT_STRING | IT_CVAR, "Screenshake", "Adjust shake intensity from hazards and offroad.", NULL, {.cvar = &cv_screenshake}, 0, 0}, + + {IT_STRING | IT_CVAR, "Input Display", "Show virtual controller on the HUD.", + NULL, {.cvar = &cv_drawinput}, 0, 0}, }; menu_t OPTIONS_ProfileAccessibilityDef = { From bf65fb0cbfcd0d881605d89f256b6fad35bce5f5 Mon Sep 17 00:00:00 2001 From: James R Date: Sat, 2 Mar 2024 00:20:30 -0800 Subject: [PATCH 3/6] Input Display: fade in quickly at level start --- src/hud/input-display.cpp | 19 ++++++++++++++++++- src/k_hud.cpp | 2 +- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/hud/input-display.cpp b/src/hud/input-display.cpp index 1acc0c068..864b5dbf8 100644 --- a/src/hud/input-display.cpp +++ b/src/hud/input-display.cpp @@ -7,6 +7,7 @@ // See the 'LICENSE' file for more details. //----------------------------------------------------------------------------- +#include #include #include @@ -18,6 +19,8 @@ #include "../i_joy.h" #include "../k_hud.h" #include "../k_kart.h" +#include "../m_easing.h" +#include "../p_tick.h" #include "../v_draw.hpp" using srb2::Draw; @@ -61,6 +64,19 @@ const char* dpad_suffix(const Vec2& v) void K_DrawInputDisplay(INT32 x, INT32 y, INT32 flags, char mode, UINT8 pid, boolean local, boolean transparent) { + auto fade_in = [] + { + constexpr tic_t kStart = TICRATE; + constexpr tic_t kDuration = TICRATE/2; + fixed_t f = std::min(std::max(leveltime, kStart) - kStart, kDuration) * FRACUNIT / kDuration; + return Easing_Linear(f, 0, 9); + }; + auto alpha_to_flag = [](int alpha) { return (9 - alpha) << V_ALPHASHIFT; }; + + int alpha = fade_in(); + if (alpha == 0) + return; + const ticcmd_t& cmd = players[displayplayers[pid]].cmd; const boolean analog = (mode == '4' || mode == '5') ? players[displayplayers[pid]].analoginput : false; const std::string prefix = fmt::format("PR{}", mode); @@ -73,7 +89,8 @@ void K_DrawInputDisplay(INT32 x, INT32 y, INT32 flags, char mode, UINT8 pid, boo Draw box = Draw(x, y).flags(flags); - box.flags(transparent ? V_TRANSLUCENT : 0).patch(gfx("CONT")); + box.flags(alpha_to_flag(alpha / (transparent ? 2 : 1))).patch(gfx("CONT")); + box = box.flags(alpha_to_flag(alpha)); Vec2 dpad = local ? Vec2 { diff --git a/src/k_hud.cpp b/src/k_hud.cpp index 2cb721138..848edbc36 100644 --- a/src/k_hud.cpp +++ b/src/k_hud.cpp @@ -5170,7 +5170,7 @@ static void K_drawInput(void) {282 - BASEVIDWIDTH/2, 52, V_SNAPTOBOTTOM | V_SNAPTORIGHT}, // 4p right }; INT32 k = r_splitscreen <= 1 ? r_splitscreen : 2 + (R_GetViewNumber() & 1); - INT32 flags = def[k][2] | V_SPLITSCREEN | V_SLIDEIN; + INT32 flags = def[k][2] | V_SPLITSCREEN; char mode = ((stplyr->pflags & PF_ANALOGSTICK) ? '4' : '2') + (r_splitscreen > 1); bool local = !demo.playback && P_IsMachineLocalPlayer(stplyr); K_DrawInputDisplay( From bf41f3ec2931cbe7153465de0462abbca986c6f1 Mon Sep 17 00:00:00 2001 From: James R Date: Sat, 2 Mar 2024 00:22:44 -0800 Subject: [PATCH 4/6] Input Display: slide with dialogue box --- src/hud/input-display.cpp | 2 +- src/k_hud.cpp | 5 +++-- src/k_hud.h | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/hud/input-display.cpp b/src/hud/input-display.cpp index 864b5dbf8..8d82799ac 100644 --- a/src/hud/input-display.cpp +++ b/src/hud/input-display.cpp @@ -62,7 +62,7 @@ const char* dpad_suffix(const Vec2& v) }; // namespace -void K_DrawInputDisplay(INT32 x, INT32 y, INT32 flags, char mode, UINT8 pid, boolean local, boolean transparent) +void K_DrawInputDisplay(float x, float y, INT32 flags, char mode, UINT8 pid, boolean local, boolean transparent) { auto fade_in = [] { diff --git a/src/k_hud.cpp b/src/k_hud.cpp index 848edbc36..5009f8009 100644 --- a/src/k_hud.cpp +++ b/src/k_hud.cpp @@ -51,6 +51,7 @@ #include "g_party.h" #include "k_hitlag.h" #include "g_input.h" +#include "k_dialogue.h" //{ Patch Definitions static patch_t *kp_nodraw; @@ -5174,8 +5175,8 @@ static void K_drawInput(void) char mode = ((stplyr->pflags & PF_ANALOGSTICK) ? '4' : '2') + (r_splitscreen > 1); bool local = !demo.playback && P_IsMachineLocalPlayer(stplyr); K_DrawInputDisplay( - def[k][0], - def[k][1], + def[k][0] - FixedToFloat(K_GetDialogueSlide(34 * FRACUNIT)), + def[k][1] - FixedToFloat(K_GetDialogueSlide(51 * FRACUNIT)), flags, mode, (local ? G_LocalSplitscreenPartyPosition : G_PartyPosition)(stplyr - players), diff --git a/src/k_hud.h b/src/k_hud.h index 422f3559f..94ee18343 100644 --- a/src/k_hud.h +++ b/src/k_hud.h @@ -63,7 +63,7 @@ void K_DrawKartPositionNumXY( boolean exit, boolean lastLap, boolean losing ); -void K_DrawInputDisplay(INT32 x, INT32 y, INT32 flags, char mode, UINT8 pid, boolean local, boolean transparent); +void K_DrawInputDisplay(float x, float y, INT32 flags, char mode, UINT8 pid, boolean local, boolean transparent); extern patch_t *kp_capsuletarget_arrow[2][2]; extern patch_t *kp_capsuletarget_icon[2]; From 6988fbcf3e0fb10f859ea946625ad7fd8429c031 Mon Sep 17 00:00:00 2001 From: James R Date: Sat, 2 Mar 2024 00:23:07 -0800 Subject: [PATCH 5/6] Input Display: draw over everything else on the HUD --- src/k_hud.cpp | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/k_hud.cpp b/src/k_hud.cpp index 5009f8009..7995ef787 100644 --- a/src/k_hud.cpp +++ b/src/k_hud.cpp @@ -5164,13 +5164,22 @@ static void K_drawKartFirstPerson(void) static void K_drawInput(void) { + UINT8 viewnum = R_GetViewNumber(); + boolean freecam = camera[viewnum].freecam; //disable some hud elements w/ freecam + + if (!cv_drawinput.value && !modeattacking) + return; + + if (stplyr->spectator || freecam || demo.attract) + return; + INT32 def[4][3] = { {247, 156, V_SNAPTOBOTTOM | V_SNAPTORIGHT}, // 1p {247, 56, V_SNAPTOBOTTOM | V_SNAPTORIGHT}, // 2p {6, 52, V_SNAPTOBOTTOM | V_SNAPTOLEFT}, // 4p left {282 - BASEVIDWIDTH/2, 52, V_SNAPTOBOTTOM | V_SNAPTORIGHT}, // 4p right }; - INT32 k = r_splitscreen <= 1 ? r_splitscreen : 2 + (R_GetViewNumber() & 1); + INT32 k = r_splitscreen <= 1 ? r_splitscreen : 2 + (viewnum & 1); INT32 flags = def[k][2] | V_SPLITSCREEN; char mode = ((stplyr->pflags & PF_ANALOGSTICK) ? '4' : '2') + (r_splitscreen > 1); bool local = !demo.playback && P_IsMachineLocalPlayer(stplyr); @@ -6063,13 +6072,6 @@ void K_drawKartHUD(void) K_drawRingCounter(gametypeinfoshown); } - if ((modeattacking && !bossinfo.valid) || cv_drawinput.value) - { - // Draw the input UI - if (LUA_HudEnabled(hud_position)) - K_drawInput(); - } - // Draw the item window if (LUA_HudEnabled(hud_item) && !freecam) { @@ -6129,7 +6131,10 @@ void K_drawKartHUD(void) K_drawEmeraldWin(true); if (modeattacking || freecam) // everything after here is MP and debug only + { + K_drawInput(); return; + } if ((gametyperules & GTR_KARMA) && !r_splitscreen && (stplyr->karthud[khud_yougotem] % 2)) // * YOU GOT EM * V_DrawScaledPatch(BASEVIDWIDTH/2 - (SHORT(kp_yougotem->width)/2), 32, V_HUDTRANS, kp_yougotem); @@ -6148,6 +6153,10 @@ void K_drawKartHUD(void) { K_drawSpectatorHUD(true); } + else + { + K_drawInput(); + } if (cv_kartdebugdistribution.value) K_drawDistributionDebugger(); From d4ab1a32725854d14d97c43561085f055f39ac7f Mon Sep 17 00:00:00 2001 From: James R Date: Sat, 2 Mar 2024 00:27:25 -0800 Subject: [PATCH 6/6] Input Display: force on in Tutorials --- src/k_hud.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/k_hud.cpp b/src/k_hud.cpp index 7995ef787..e7b2f2c6b 100644 --- a/src/k_hud.cpp +++ b/src/k_hud.cpp @@ -5167,7 +5167,7 @@ static void K_drawInput(void) UINT8 viewnum = R_GetViewNumber(); boolean freecam = camera[viewnum].freecam; //disable some hud elements w/ freecam - if (!cv_drawinput.value && !modeattacking) + if (!cv_drawinput.value && !modeattacking && gametype != GT_TUTORIAL) return; if (stplyr->spectator || freecam || demo.attract)