Lua ABC -> Lua 123, move dpad to generic to make room for lua gamecontrol translation

This commit is contained in:
Antonio Martinez 2024-09-21 22:30:34 -07:00 committed by AJ Martinez
parent 397db81a73
commit 5563a06827
10 changed files with 87 additions and 28 deletions

View file

@ -42,8 +42,11 @@ typedef enum
// Lua garbage, replace with freeslottable buttons some day // Lua garbage, replace with freeslottable buttons some day
BT_LUAA = 1<<13, BT_LUAA = 1<<13,
BT_LUA1 = 1<<13,
BT_LUAB = 1<<14, BT_LUAB = 1<<14,
BT_LUA2 = 1<<14,
BT_LUAC = 1<<15, BT_LUAC = 1<<15,
BT_LUA3 = 1<<15,
} buttoncode_t; } buttoncode_t;
// The data sampled per tick (single player) // The data sampled per tick (single player)

View file

@ -5003,6 +5003,9 @@ struct int_const_s const INT_CONST[] = {
{"BT_LUAA",BT_LUAA}, // Lua customizable {"BT_LUAA",BT_LUAA}, // Lua customizable
{"BT_LUAB",BT_LUAB}, // Lua customizable {"BT_LUAB",BT_LUAB}, // Lua customizable
{"BT_LUAC",BT_LUAC}, // 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 // Lua command registration flags
{"COM_ADMIN",COM_ADMIN}, {"COM_ADMIN",COM_ADMIN},

View file

@ -408,9 +408,9 @@ class TiccmdBuilder
map(gc_vote, BT_VOTE); // mp general function button map(gc_vote, BT_VOTE); // mp general function button
// lua buttons a thru c // lua buttons a thru c
map(gc_luaa, BT_LUAA); map(gc_lua1, BT_LUA1);
map(gc_luab, BT_LUAB); map(gc_lua2, BT_LUA2);
map(gc_luac, BT_LUAC); map(gc_lua3, BT_LUA3);
} }
public: public:

View file

@ -77,9 +77,9 @@ typedef enum
// special keys // special keys
gc_abc, gc_abc,
gc_luaa, gc_lua1,
gc_luab, gc_lua2,
gc_luac, gc_lua3,
gc_console, gc_console,
gc_talk, gc_talk,
gc_teamtalk, gc_teamtalk,

View file

@ -242,7 +242,9 @@ patch_t *kp_button_up[2];
patch_t *kp_button_down[2]; patch_t *kp_button_down[2];
patch_t *kp_button_right[2]; patch_t *kp_button_right[2];
patch_t *kp_button_left[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_a[2][2];
patch_t *gen_button_b[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_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_dpad[2];
patch_t *gen_button_keyleft[2]; patch_t *gen_button_keyleft[2];
patch_t *gen_button_keyright[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_down, 'K');
K_LoadButtonGraphics(kp_button_right, 'L'); K_LoadButtonGraphics(kp_button_right, 'L');
K_LoadButtonGraphics(kp_button_left, 'M'); 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_a[0], 'A');
K_LoadGenericButtonGraphics(gen_button_b[0], 'B'); 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_ls, 'T');
K_LoadGenericButtonGraphics(gen_button_rs, 'U'); 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[0], "TLK_L");
HU_UpdatePatch(&gen_button_keyleft[1], "TLK_LB"); HU_UpdatePatch(&gen_button_keyleft[1], "TLK_LB");
HU_UpdatePatch(&gen_button_keyright[0], "TLK_R"); HU_UpdatePatch(&gen_button_keyright[0], "TLK_R");
@ -6496,17 +6509,16 @@ void K_drawKartHUD(void)
#if 1 #if 1
using srb2::Draw; 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("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 <large><a> Pressed <x_pressed> Animated <large><start_animated>"); Draw::TextElement text = Draw::TextElement().parse("Unpressed <lua1> Pressed <lua2_pressed> Animated <lua3_animated>");
UINT8 fakeoff = (stplyr - players)*40; UINT8 fakeoff = (stplyr - players)*40;
Draw(5, 5+fakeoff).align((srb2::Draw::Align)0).font(Draw::Font::kMenu).text(text); 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(5, 20+fakeoff).align((srb2::Draw::Align)0).font(Draw::Font::kThin).text(text);
} }
if (0) 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"); 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");

View file

@ -101,7 +101,10 @@ extern patch_t *kp_button_up[2];
extern patch_t *kp_button_down[2]; extern patch_t *kp_button_down[2];
extern patch_t *kp_button_right[2]; extern patch_t *kp_button_right[2];
extern patch_t *kp_button_left[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_a[2][2];
extern patch_t *gen_button_b[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_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_dpad[2];
extern patch_t *gen_button_keyleft[2]; extern patch_t *gen_button_keyleft[2];
extern patch_t *gen_button_keyright[2]; extern patch_t *gen_button_keyright[2];

View file

@ -81,14 +81,14 @@ menuitem_t OPTIONS_ProfileControls[] = {
{IT_CONTROL, "OPEN TEAM CHAT", "Opens team-only full chat for online games.", {IT_CONTROL, "OPEN TEAM CHAT", "Opens team-only full chat for online games.",
NULL, {.routine = M_ProfileSetControl}, gc_teamtalk, 0}, NULL, {.routine = M_ProfileSetControl}, gc_teamtalk, 0},
{IT_CONTROL, "LUA/A", "May be used by add-ons.", {IT_CONTROL, "LUA/1", "May be used by add-ons.",
NULL, {.routine = M_ProfileSetControl}, gc_luaa, 0}, NULL, {.routine = M_ProfileSetControl}, gc_lua1, 0},
{IT_CONTROL, "LUA/B", "May be used by add-ons.", {IT_CONTROL, "LUA/2", "May be used by add-ons.",
NULL, {.routine = M_ProfileSetControl}, gc_luab, 0}, NULL, {.routine = M_ProfileSetControl}, gc_lua2, 0},
{IT_CONTROL, "LUA/C", "May be used by add-ons.", {IT_CONTROL, "LUA/3", "May be used by add-ons.",
NULL, {.routine = M_ProfileSetControl}, gc_luac, 0}, NULL, {.routine = M_ProfileSetControl}, gc_lua3, 0},
{IT_CONTROL, "OPEN CONSOLE", "Opens the developer options console.", {IT_CONTROL, "OPEN CONSOLE", "Opens the developer options console.",
NULL, {.routine = M_ProfileSetControl}, gc_console, 0}, NULL, {.routine = M_ProfileSetControl}, gc_console, 0},

View file

@ -45,7 +45,9 @@ Draw::TextElement& Draw::TextElement::parse(std::string_view raw)
BUTTON("right", 0x02), BUTTON("right", 0x02),
BUTTON("left", 0x03), BUTTON("left", 0x03),
BUTTON("dpad", 0x04), BUTTON("lua1", 0x04),
BUTTON("lua2", 0x05),
BUTTON("lua3", 0x06),
BUTTON("r", 0x07), BUTTON("r", 0x07),
BUTTON("l", 0x08), BUTTON("l", 0x08),
@ -92,6 +94,10 @@ Draw::TextElement& Draw::TextElement::parse(std::string_view raw)
{0x02, gc_right}, {0x02, gc_right},
{0x03, gc_left}, {0x03, gc_left},
{0x04, gc_lua1},
{0x05, gc_lua2},
{0x06, gc_lua3},
{0x07, gc_r}, {0x07, gc_r},
{0x08, gc_l}, {0x08, gc_l},
{0x09, gc_start}, {0x09, gc_start},
@ -167,9 +173,24 @@ Draw::TextElement& Draw::TextElement::parse(std::string_view raw)
string_view code = raw.substr(1, p - 1); 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 (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! 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); string_.push_back(code);
if (bind == -1) if (bind == -1)
string_.append("[NOT BOUND]"); string_.append("N/A");
else else
string_.append((G_KeynumToShortString(bind))); string_.append((G_KeynumToShortString(bind)));
@ -316,7 +337,9 @@ patch_t** get_button_patch(Draw::Button type, int ver)
X(down); X(down);
X(right); X(right);
X(left); X(left);
X(dpad); X(lua1);
X(lua2);
X(lua3);
#undef X #undef X
} }
@ -360,6 +383,7 @@ patch_t** get_button_patch(Draw::GenericButton type, int ver)
X(back); X(back);
X(ls); X(ls);
X(rs); X(rs);
X(dpad);
#undef X #undef X
} }

View file

@ -78,7 +78,9 @@ public:
down, down,
right, right,
left, left,
dpad, lua1,
lua2,
lua3,
}; };
enum class GenericButton enum class GenericButton
@ -94,7 +96,8 @@ public:
start, start,
back, back,
ls, ls,
rs rs,
dpad
}; };
class TextElement class TextElement

View file

@ -2516,8 +2516,10 @@ static UINT8 V_GetButtonCodeWidth(UINT8 c, boolean largebutton)
break; break;
case 0x04: case 0x04:
// dpad case 0x05:
x = 14; case 0x06:
// lua
x = 16;
break; break;
case 0x0A: case 0x0A:
@ -2571,6 +2573,11 @@ static UINT8 V_GetGenericButtonCodeWidth(UINT8 c, boolean largebutton)
// stick click // stick click
x = 18; x = 18;
break; break;
case 0x0C:
// dpad
x = 14;
break;
} }
return x; return x;
@ -2830,7 +2837,9 @@ void V_DrawStringScaled(
case 0x02: return {{0, 3, Draw::Button::right}}; case 0x02: return {{0, 3, Draw::Button::right}};
case 0x03: return {{0, 3, Draw::Button::left}}; 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 0x07: return {{0, 2, Draw::Button::r}};
case 0x08: return {{0, 2, Draw::Button::l}}; case 0x08: return {{0, 2, Draw::Button::l}};
@ -2908,6 +2917,7 @@ void V_DrawStringScaled(
case 0x09: return {{1, 6, Draw::GenericButton::back}}; case 0x09: return {{1, 6, Draw::GenericButton::back}};
case 0x0A: return {{0, 5, Draw::GenericButton::ls}}; case 0x0A: return {{0, 5, Draw::GenericButton::ls}};
case 0x0B: return {{0, 5, Draw::GenericButton::rs}}; case 0x0B: return {{0, 5, Draw::GenericButton::rs}};
case 0x0C: return {{0, 4, Draw::GenericButton::dpad}};
default: return {}; default: return {};
} }
}(); }();