From 5563a0682731c17a583d4bea03aa5072e32299d6 Mon Sep 17 00:00:00 2001 From: Antonio Martinez Date: Sat, 21 Sep 2024 22:30:34 -0700 Subject: [PATCH] Lua ABC -> Lua 123, move dpad to generic to make room for lua gamecontrol translation --- src/d_ticcmd.h | 3 ++ src/deh_tables.c | 3 ++ src/g_build_ticcmd.cpp | 6 ++-- src/g_input.h | 6 ++-- src/k_hud.cpp | 22 ++++++++++---- src/k_hud.h | 6 +++- src/menus/options-profiles-edit-controls.c | 12 ++++---- src/v_draw.cpp | 34 ++++++++++++++++++---- src/v_draw.hpp | 7 +++-- src/v_video.cpp | 16 ++++++++-- 10 files changed, 87 insertions(+), 28 deletions(-) diff --git a/src/d_ticcmd.h b/src/d_ticcmd.h index 046488a98..7787058b3 100644 --- a/src/d_ticcmd.h +++ b/src/d_ticcmd.h @@ -42,8 +42,11 @@ typedef enum // Lua garbage, replace with freeslottable buttons some day BT_LUAA = 1<<13, + BT_LUA1 = 1<<13, BT_LUAB = 1<<14, + BT_LUA2 = 1<<14, BT_LUAC = 1<<15, + BT_LUA3 = 1<<15, } buttoncode_t; // The data sampled per tick (single player) diff --git a/src/deh_tables.c b/src/deh_tables.c index ab4b0907b..e6d331f5a 100644 --- a/src/deh_tables.c +++ b/src/deh_tables.c @@ -5003,6 +5003,9 @@ struct int_const_s const INT_CONST[] = { {"BT_LUAA",BT_LUAA}, // Lua customizable {"BT_LUAB",BT_LUAB}, // Lua customizable {"BT_LUAC",BT_LUAC}, // Lua customizable + {"BT_LUA1",BT_LUA1}, // Lua customizable + {"BT_LUA2",BT_LUA2}, // Lua customizable + {"BT_LUA3",BT_LUA3}, // Lua customizable // Lua command registration flags {"COM_ADMIN",COM_ADMIN}, diff --git a/src/g_build_ticcmd.cpp b/src/g_build_ticcmd.cpp index b74f48d2d..75c475eac 100644 --- a/src/g_build_ticcmd.cpp +++ b/src/g_build_ticcmd.cpp @@ -408,9 +408,9 @@ class TiccmdBuilder map(gc_vote, BT_VOTE); // mp general function button // lua buttons a thru c - map(gc_luaa, BT_LUAA); - map(gc_luab, BT_LUAB); - map(gc_luac, BT_LUAC); + map(gc_lua1, BT_LUA1); + map(gc_lua2, BT_LUA2); + map(gc_lua3, BT_LUA3); } public: diff --git a/src/g_input.h b/src/g_input.h index 7e1e65a99..58edccdd1 100644 --- a/src/g_input.h +++ b/src/g_input.h @@ -77,9 +77,9 @@ typedef enum // special keys gc_abc, - gc_luaa, - gc_luab, - gc_luac, + gc_lua1, + gc_lua2, + gc_lua3, gc_console, gc_talk, gc_teamtalk, diff --git a/src/k_hud.cpp b/src/k_hud.cpp index 0bdfacf7b..56f9d078e 100644 --- a/src/k_hud.cpp +++ b/src/k_hud.cpp @@ -242,7 +242,9 @@ 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_dpad[2]; +patch_t *kp_button_lua1[2]; +patch_t *kp_button_lua2[2]; +patch_t *kp_button_lua3[2]; patch_t *gen_button_a[2][2]; patch_t *gen_button_b[2][2]; @@ -256,6 +258,7 @@ 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_keyleft[2]; patch_t *gen_button_keyright[2]; @@ -984,7 +987,14 @@ void K_LoadKartHUDGraphics(void) 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_dpad, 'T'); + + 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'); @@ -1008,6 +1018,9 @@ void K_LoadKartHUDGraphics(void) 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"); + HU_UpdatePatch(&gen_button_keyleft[0], "TLK_L"); HU_UpdatePatch(&gen_button_keyleft[1], "TLK_LB"); HU_UpdatePatch(&gen_button_keyright[0], "TLK_R"); @@ -6496,17 +6509,16 @@ void K_drawKartHUD(void) #if 1 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 "); + Draw::TextElement text = Draw::TextElement().parse("Unpressed Pressed Animated "); 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); } - if (0) { 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"); diff --git a/src/k_hud.h b/src/k_hud.h index dcc272553..5323a2f9d 100644 --- a/src/k_hud.h +++ b/src/k_hud.h @@ -101,7 +101,10 @@ 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_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 *gen_button_a[2][2]; extern patch_t *gen_button_b[2][2]; @@ -115,6 +118,7 @@ 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_keyleft[2]; extern patch_t *gen_button_keyright[2]; diff --git a/src/menus/options-profiles-edit-controls.c b/src/menus/options-profiles-edit-controls.c index 2c5dcec9e..69deb89df 100644 --- a/src/menus/options-profiles-edit-controls.c +++ b/src/menus/options-profiles-edit-controls.c @@ -81,14 +81,14 @@ menuitem_t OPTIONS_ProfileControls[] = { {IT_CONTROL, "OPEN TEAM CHAT", "Opens team-only full chat for online games.", NULL, {.routine = M_ProfileSetControl}, gc_teamtalk, 0}, - {IT_CONTROL, "LUA/A", "May be used by add-ons.", - NULL, {.routine = M_ProfileSetControl}, gc_luaa, 0}, + {IT_CONTROL, "LUA/1", "May be used by add-ons.", + NULL, {.routine = M_ProfileSetControl}, gc_lua1, 0}, - {IT_CONTROL, "LUA/B", "May be used by add-ons.", - NULL, {.routine = M_ProfileSetControl}, gc_luab, 0}, + {IT_CONTROL, "LUA/2", "May be used by add-ons.", + NULL, {.routine = M_ProfileSetControl}, gc_lua2, 0}, - {IT_CONTROL, "LUA/C", "May be used by add-ons.", - NULL, {.routine = M_ProfileSetControl}, gc_luac, 0}, + {IT_CONTROL, "LUA/3", "May be used by add-ons.", + NULL, {.routine = M_ProfileSetControl}, gc_lua3, 0}, {IT_CONTROL, "OPEN CONSOLE", "Opens the developer options console.", NULL, {.routine = M_ProfileSetControl}, gc_console, 0}, diff --git a/src/v_draw.cpp b/src/v_draw.cpp index d9c6ea44d..31d348419 100644 --- a/src/v_draw.cpp +++ b/src/v_draw.cpp @@ -45,7 +45,9 @@ Draw::TextElement& Draw::TextElement::parse(std::string_view raw) BUTTON("right", 0x02), BUTTON("left", 0x03), - BUTTON("dpad", 0x04), + BUTTON("lua1", 0x04), + BUTTON("lua2", 0x05), + BUTTON("lua3", 0x06), BUTTON("r", 0x07), BUTTON("l", 0x08), @@ -92,6 +94,10 @@ Draw::TextElement& Draw::TextElement::parse(std::string_view raw) {0x02, gc_right}, {0x03, gc_left}, + {0x04, gc_lua1}, + {0x05, gc_lua2}, + {0x06, gc_lua3}, + {0x07, gc_r}, {0x08, gc_l}, {0x09, gc_start}, @@ -167,9 +173,24 @@ Draw::TextElement& Draw::TextElement::parse(std::string_view raw) string_view code = raw.substr(1, p - 1); - if (auto it = translation.find(code); it != translation.end()) + if (code == "dpad" || code == "dpad_pressed" || code == "dpad_animated") { - // FIXME: This isn't how v_video.cpp checks for buttons and I don't know why. + // SPECIAL: Generic button that we invoke explicitly, not via gamecontrol reference. + // If we ever add anything else to this category, I promise I will create a real abstraction, + // but for now, just hardcode the character replacements and pray for forgiveness. + + string_.push_back(0xEF); // Control code: "switch to descriptive input mode" + string_.push_back(0xEB); // Control code: "large button" + if (code == "dpad") + string_.push_back(0xBC); + else if (code == "dpad_pressed") + string_.push_back(0x9C); + else + string_.push_back(0xAC); + } + else if (auto it = translation.find(code); it != translation.end()) // This represents a gamecontrol, turn into Saturn button or generic button. + { + // This isn't how v_video.cpp checks for buttons and I don't know why. if (cv_descriptiveinput.value && ((it->second & 0xF0) != 0x80)) // Should we do game control translation? { if (auto id = inputdefinition.find(it->second & (~0xB0)); id != inputdefinition.end()) // This is a game control, do descriptive input translation! @@ -211,7 +232,7 @@ Draw::TextElement& Draw::TextElement::parse(std::string_view raw) string_.push_back(code); if (bind == -1) - string_.append("[NOT BOUND]"); + string_.append("N/A"); else string_.append((G_KeynumToShortString(bind))); @@ -316,7 +337,9 @@ patch_t** get_button_patch(Draw::Button type, int ver) X(down); X(right); X(left); - X(dpad); + X(lua1); + X(lua2); + X(lua3); #undef X } @@ -360,6 +383,7 @@ patch_t** get_button_patch(Draw::GenericButton type, int ver) X(back); X(ls); X(rs); + X(dpad); #undef X } diff --git a/src/v_draw.hpp b/src/v_draw.hpp index a1c2a86c0..e10faf733 100644 --- a/src/v_draw.hpp +++ b/src/v_draw.hpp @@ -78,7 +78,9 @@ public: down, right, left, - dpad, + lua1, + lua2, + lua3, }; enum class GenericButton @@ -94,7 +96,8 @@ public: start, back, ls, - rs + rs, + dpad }; class TextElement diff --git a/src/v_video.cpp b/src/v_video.cpp index 1adaaa851..667f1d0c3 100644 --- a/src/v_video.cpp +++ b/src/v_video.cpp @@ -2516,8 +2516,10 @@ static UINT8 V_GetButtonCodeWidth(UINT8 c, boolean largebutton) break; case 0x04: - // dpad - x = 14; + case 0x05: + case 0x06: + // lua + x = 16; break; case 0x0A: @@ -2571,6 +2573,11 @@ static UINT8 V_GetGenericButtonCodeWidth(UINT8 c, boolean largebutton) // stick click x = 18; break; + + case 0x0C: + // dpad + x = 14; + break; } return x; @@ -2830,7 +2837,9 @@ void V_DrawStringScaled( case 0x02: return {{0, 3, Draw::Button::right}}; case 0x03: return {{0, 3, Draw::Button::left}}; - case 0x04: return {{0, 4, Draw::Button::dpad}}; + case 0x04: return {{0, 4, Draw::Button::lua1}}; + case 0x05: return {{0, 4, Draw::Button::lua2}}; + case 0x06: return {{0, 4, Draw::Button::lua3}}; case 0x07: return {{0, 2, Draw::Button::r}}; case 0x08: return {{0, 2, Draw::Button::l}}; @@ -2908,6 +2917,7 @@ void V_DrawStringScaled( case 0x09: return {{1, 6, Draw::GenericButton::back}}; case 0x0A: return {{0, 5, Draw::GenericButton::ls}}; case 0x0B: return {{0, 5, Draw::GenericButton::rs}}; + case 0x0C: return {{0, 4, Draw::GenericButton::dpad}}; default: return {}; } }();