Skip to content

Commit a93a8a7

Browse files
committed
Add turbo toggles to controllers
1 parent 070cce1 commit a93a8a7

File tree

9 files changed

+120
-35
lines changed

9 files changed

+120
-35
lines changed

platforms/libretro/libretro.cpp

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ static const char slash = '/';
3737
#define RETRO_DEVICE_PCE_AVENUE_PAD_6 RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_JOYPAD, 2)
3838

3939
#define MAX_PADS GG_MAX_GAMEPADS
40-
#define MAX_BUTTONS 12
40+
#define MAX_BUTTONS 14
4141

4242
static retro_environment_t environ_cb;
4343
static retro_video_refresh_t video_cb;
@@ -187,16 +187,15 @@ void retro_init(void)
187187

188188
for (int i = 0; i < MAX_PADS; i++)
189189
{
190+
input_device[i] = RETRO_DEVICE_PCE_PAD;
191+
190192
for (int j = 0; j < MAX_BUTTONS; j++)
191193
{
192194
joypad_current[i][j] = 0;
193195
joypad_old[i][j] = 0;
194196
}
195197
}
196198

197-
for (int i = 0; i < MAX_PADS; i++)
198-
input_device[i] = RETRO_DEVICE_PCE_PAD;
199-
200199
libretro_supports_bitmasks = environ_cb(RETRO_ENVIRONMENT_GET_INPUT_BITMASKS, NULL);
201200
}
202201

@@ -316,11 +315,11 @@ bool retro_load_game(const struct retro_game_info *info)
316315
load_bios();
317316

318317
snprintf(retro_game_path, sizeof(retro_game_path), "%s", info->path);
319-
log_cb(RETRO_LOG_INFO, "Loading game: %s\n", retro_game_path);
318+
log_cb(RETRO_LOG_INFO, "retro_load_game: %s\n", retro_game_path);
320319

321320
if (IsValidPointer(info->data))
322321
{
323-
log_cb(RETRO_LOG_INFO, "Loading HuCard from buffer.\n");
322+
log_cb(RETRO_LOG_INFO, "retro_load_game HuCard from buffer.\n");
324323
if (!core->LoadHuCardFromBuffer((const u8*)(info->data), info->size, retro_game_path))
325324
{
326325
log_cb(RETRO_LOG_ERROR, "Invalid or corrupted HuCard file.\n");
@@ -329,7 +328,7 @@ bool retro_load_game(const struct retro_game_info *info)
329328
}
330329
else
331330
{
332-
log_cb(RETRO_LOG_INFO, "Loading Media from file.\n");
331+
log_cb(RETRO_LOG_INFO, "retro_load_game Media from file.\n");
333332
if (!core->LoadMedia(retro_game_path))
334333
{
335334
log_cb(RETRO_LOG_ERROR, "Invalid or corrupted Media.\n");
@@ -492,8 +491,10 @@ static void set_controller_info(void)
492491
{ INDEX, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Run" },\
493492
{ INDEX, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y, "III" },\
494493
{ INDEX, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_X, "IV" },\
495-
{ INDEX, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L2, "V" },\
496-
{ INDEX, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R2, "VI" },
494+
{ INDEX, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L, "V" },\
495+
{ INDEX, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R, "VI" },\
496+
{ INDEX, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L2, "Toggle Turbo II" },\
497+
{ INDEX, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R2, "Toggle Turbo I" },
497498
button_ids(0)
498499
button_ids(1)
499500
button_ids(2)
@@ -574,13 +575,28 @@ static void update_input(void)
574575
joypad_current[j][5] = IsButtonPressed(joypad_bits[j], RETRO_DEVICE_ID_JOYPAD_B);
575576
joypad_current[j][8] = IsButtonPressed(joypad_bits[j], RETRO_DEVICE_ID_JOYPAD_Y);
576577
joypad_current[j][9] = IsButtonPressed(joypad_bits[j], RETRO_DEVICE_ID_JOYPAD_X);
577-
joypad_current[j][10] = IsButtonPressed(joypad_bits[j], RETRO_DEVICE_ID_JOYPAD_L2);
578-
joypad_current[j][11] = IsButtonPressed(joypad_bits[j], RETRO_DEVICE_ID_JOYPAD_R2);
578+
joypad_current[j][10] = IsButtonPressed(joypad_bits[j], RETRO_DEVICE_ID_JOYPAD_L);
579+
joypad_current[j][11] = IsButtonPressed(joypad_bits[j], RETRO_DEVICE_ID_JOYPAD_R);
580+
joypad_current[j][12] = IsButtonPressed(joypad_bits[j], RETRO_DEVICE_ID_JOYPAD_L2);
581+
joypad_current[j][13] = IsButtonPressed(joypad_bits[j], RETRO_DEVICE_ID_JOYPAD_R2);
579582
}
580583

581584
for (int j = 0; j < MAX_PADS; j++)
582585
for (int i = 0; i < MAX_BUTTONS; i++)
583586
{
587+
if (i > 11)
588+
{
589+
GG_Keys key = (i == 12) ? GG_KEY_II : GG_KEY_I;
590+
if (joypad_current[j][i] && !joypad_old[j][i])
591+
{
592+
bool turbo = core->GetInput()->IsTurboEnabled((GG_Controllers)j, key);
593+
core->GetInput()->EnableTurbo((GG_Controllers)j, key, !turbo);
594+
log_cb(RETRO_LOG_DEBUG, "Toggling Turbo %d for controller %d: %d\n", key, j, !turbo);
595+
}
596+
597+
continue;
598+
}
599+
584600
if (joypad_current[j][i])
585601
core->KeyPressed((GG_Controllers)j, keymap[i]);
586602
else
@@ -601,7 +617,7 @@ static void set_variabless(void)
601617
{ "geargrafx_no_sprite_limit", "No Sprite Limit; Disabled|Enabled" },
602618
{ "geargrafx_backup_ram", "Backup RAM (restart); Enabled|Disabled" },
603619
{ "geargrafx_cdrom_type", "CD-ROM (restart); Auto|Standard|Super CD-ROM|Arcade CD-ROM" },
604-
{ "geargrafx_cdrom_bios", "CD-ROM Bios; Auto|System Card 1|System Card 2|System Card 3|Game Express" },
620+
{ "geargrafx_cdrom_bios", "CD-ROM Bios (restart); Auto|System Card 1|System Card 2|System Card 3|Game Express" },
605621
{ "geargrafx_cdrom_preload", "Preload CD-ROM (restart); Disabled|Enabled" },
606622
{ "geargrafx_psg_volume", "PSG Volume; 100|0|10|20|30|40|50|60|70|80|90|100|110|120|130|140|150|160|170|180|190|200" },
607623
{ "geargrafx_cdrom_volume", "CD-ROM Volume; 100|0|10|20|30|40|50|60|70|80|90|100|110|120|130|140|150|160|170|180|190|200" },
@@ -611,6 +627,7 @@ static void set_variabless(void)
611627
{ "geargrafx_turbotap", "TurboTap; Disabled|Enabled" },
612628
{ "geargrafx_avenue_pad_3_switch", "Avenue Pad 3 Switch; Auto|SELECT|RUN" },
613629
{ "geargrafx_turbo_p1_i", "P1 Turbo I; Disabled|Enabled" },
630+
{ "geargrafx_turbo_p1_ii", "P1 Turbo II; Disabled|Enabled" },
614631
{ "geargrafx_turbo_p2_i", "P2 Turbo I; Disabled|Enabled" },
615632
{ "geargrafx_turbo_p2_ii", "P2 Turbo II; Disabled|Enabled" },
616633
{ "geargrafx_turbo_p3_i", "P3 Turbo I; Disabled|Enabled" },

platforms/shared/desktop/application.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -432,6 +432,16 @@ static void sdl_events_emu(const SDL_Event* event)
432432
emu_key_pressed(controller, GG_KEY_RUN);
433433
else if (event->cbutton.button == config_input_gamepad[i].gamepad_select)
434434
emu_key_pressed(controller, GG_KEY_SELECT);
435+
else if (event->cbutton.button == config_input_gamepad[i].gamepad_toggle_turbo_I)
436+
{
437+
config_input.turbo_enabled[controller][0] = !config_input.turbo_enabled[controller][0];
438+
emu_set_turbo(controller, GG_KEY_I, config_input.turbo_enabled[controller][0]);
439+
}
440+
else if (event->cbutton.button == config_input_gamepad[i].gamepad_toggle_turbo_II)
441+
{
442+
config_input.turbo_enabled[controller][1] = !config_input.turbo_enabled[controller][1];
443+
emu_set_turbo(controller, GG_KEY_II, config_input.turbo_enabled[controller][1]);
444+
}
435445

436446
if (config_input_gamepad[i].gamepad_directional == 1)
437447
continue;
@@ -589,6 +599,16 @@ static void sdl_events_emu(const SDL_Event* event)
589599
emu_key_pressed(controller, GG_KEY_RUN);
590600
else if (key == config_input_keyboard[i].key_select)
591601
emu_key_pressed(controller, GG_KEY_SELECT);
602+
else if (key == config_input_keyboard[i].key_toggle_turbo_I)
603+
{
604+
config_input.turbo_enabled[controller][0] = !config_input.turbo_enabled[controller][0];
605+
emu_set_turbo(controller, GG_KEY_I, config_input.turbo_enabled[controller][0]);
606+
}
607+
else if (key == config_input_keyboard[i].key_toggle_turbo_II)
608+
{
609+
config_input.turbo_enabled[controller][1] = !config_input.turbo_enabled[controller][1];
610+
emu_set_turbo(controller, GG_KEY_II, config_input.turbo_enabled[controller][1]);
611+
}
592612
}
593613
}
594614
break;

platforms/shared/desktop/config.cpp

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ void config_init(void)
6666
config_input_keyboard[0].key_IV = SDL_SCANCODE_V;
6767
config_input_keyboard[0].key_V = SDL_SCANCODE_B;
6868
config_input_keyboard[0].key_VI = SDL_SCANCODE_N;
69+
config_input_keyboard[0].key_toggle_turbo_I = SDL_SCANCODE_W;
70+
config_input_keyboard[0].key_toggle_turbo_II = SDL_SCANCODE_Q;
6971

7072
config_input_keyboard[1].key_left = SDL_SCANCODE_J;
7173
config_input_keyboard[1].key_right = SDL_SCANCODE_L;
@@ -79,6 +81,8 @@ void config_init(void)
7981
config_input_keyboard[1].key_IV = SDL_SCANCODE_6;
8082
config_input_keyboard[1].key_V = SDL_SCANCODE_7;
8183
config_input_keyboard[1].key_VI = SDL_SCANCODE_8;
84+
config_input_keyboard[1].key_toggle_turbo_I = SDL_SCANCODE_P;
85+
config_input_keyboard[1].key_toggle_turbo_II = SDL_SCANCODE_O;
8286

8387
for (int i = 2; i < GG_MAX_GAMEPADS; i++)
8488
{
@@ -94,6 +98,8 @@ void config_init(void)
9498
config_input_keyboard[i].key_IV = SDL_SCANCODE_UNKNOWN;
9599
config_input_keyboard[i].key_V = SDL_SCANCODE_UNKNOWN;
96100
config_input_keyboard[i].key_VI = SDL_SCANCODE_UNKNOWN;
101+
config_input_keyboard[i].key_toggle_turbo_I = SDL_SCANCODE_UNKNOWN;
102+
config_input_keyboard[i].key_toggle_turbo_II = SDL_SCANCODE_UNKNOWN;
97103
}
98104

99105
for (int i = 0; i < GG_MAX_GAMEPADS; i++)
@@ -107,6 +113,7 @@ void config_init(void)
107113
}
108114

109115
config_input_gamepad[i].detected = false;
116+
config_input_gamepad[i].gamepad_directional = 0;
110117
config_input_gamepad[i].gamepad_invert_x_axis = false;
111118
config_input_gamepad[i].gamepad_invert_y_axis = false;
112119
config_input_gamepad[i].gamepad_select = SDL_CONTROLLER_BUTTON_BACK;
@@ -119,6 +126,8 @@ void config_init(void)
119126
config_input_gamepad[i].gamepad_VI = SDL_CONTROLLER_BUTTON_RIGHTSHOULDER;
120127
config_input_gamepad[i].gamepad_x_axis = SDL_CONTROLLER_AXIS_LEFTX;
121128
config_input_gamepad[i].gamepad_y_axis = SDL_CONTROLLER_AXIS_LEFTY;
129+
config_input_gamepad[i].gamepad_toggle_turbo_I = SDL_CONTROLLER_BUTTON_RIGHTSTICK;
130+
config_input_gamepad[i].gamepad_toggle_turbo_II = SDL_CONTROLLER_BUTTON_LEFTSTICK;
122131
}
123132

124133
config_ini_file = new mINI::INIFile(config_emu_file_path);
@@ -275,8 +284,9 @@ void config_read(void)
275284
for (int j = 0; j < 2; j++)
276285
{
277286
char turbo_group[32];
278-
snprintf(turbo_group, sizeof(turbo_group), "Turbo%d", j + 1);
287+
snprintf(turbo_group, sizeof(turbo_group), "TurboEnabled%d", j + 1);
279288
config_input.turbo_enabled[i][j] = read_bool(input_group, turbo_group, false);
289+
snprintf(turbo_group, sizeof(turbo_group), "TurboSpeed%d", j + 1);
280290
config_input.turbo_speed[i][j] = read_int(input_group, turbo_group, 4);
281291
}
282292
}
@@ -293,6 +303,8 @@ void config_read(void)
293303
config_input_keyboard[0].key_IV = (SDL_Scancode)read_int("InputKeyboard1", "KeyIV", SDL_SCANCODE_V);
294304
config_input_keyboard[0].key_V = (SDL_Scancode)read_int("InputKeyboard1", "KeyV", SDL_SCANCODE_B);
295305
config_input_keyboard[0].key_VI = (SDL_Scancode)read_int("InputKeyboard1", "KeyVI", SDL_SCANCODE_N);
306+
config_input_keyboard[0].key_toggle_turbo_I = (SDL_Scancode)read_int("InputKeyboard1", "KeyToogleTurboI", SDL_SCANCODE_W);
307+
config_input_keyboard[0].key_toggle_turbo_II = (SDL_Scancode)read_int("InputKeyboard1", "KeyToogleTurboII", SDL_SCANCODE_Q);
296308

297309
config_input_keyboard[1].key_left = (SDL_Scancode)read_int("InputKeyboard2", "KeyLeft", SDL_SCANCODE_J);
298310
config_input_keyboard[1].key_right = (SDL_Scancode)read_int("InputKeyboard2", "KeyRight", SDL_SCANCODE_L);
@@ -306,6 +318,8 @@ void config_read(void)
306318
config_input_keyboard[1].key_IV = (SDL_Scancode)read_int("InputKeyboard2", "KeyIV", SDL_SCANCODE_6);
307319
config_input_keyboard[1].key_V = (SDL_Scancode)read_int("InputKeyboard2", "KeyV", SDL_SCANCODE_7);
308320
config_input_keyboard[1].key_VI = (SDL_Scancode)read_int("InputKeyboard2", "KeyVI", SDL_SCANCODE_8);
321+
config_input_keyboard[1].key_toggle_turbo_I = (SDL_Scancode)read_int("InputKeyboard2", "KeyToogleTurboI", SDL_SCANCODE_P);
322+
config_input_keyboard[1].key_toggle_turbo_II = (SDL_Scancode)read_int("InputKeyboard2", "KeyToogleTurboII", SDL_SCANCODE_O);
309323

310324
for (int i = 2; i < GG_MAX_GAMEPADS; i++)
311325
{
@@ -323,6 +337,8 @@ void config_read(void)
323337
config_input_keyboard[i].key_IV = (SDL_Scancode)read_int(input_group, "KeyIV", SDL_SCANCODE_UNKNOWN);
324338
config_input_keyboard[i].key_V = (SDL_Scancode)read_int(input_group, "KeyV", SDL_SCANCODE_UNKNOWN);
325339
config_input_keyboard[i].key_VI = (SDL_Scancode)read_int(input_group, "KeyVI", SDL_SCANCODE_UNKNOWN);
340+
config_input_keyboard[i].key_toggle_turbo_I = (SDL_Scancode)read_int(input_group, "KeyToogleTurboI", SDL_SCANCODE_UNKNOWN);
341+
config_input_keyboard[i].key_toggle_turbo_II = (SDL_Scancode)read_int(input_group, "KeyToogleTurboII", SDL_SCANCODE_UNKNOWN);
326342
}
327343

328344
for (int i = 0; i < GG_MAX_GAMEPADS; i++)
@@ -343,6 +359,8 @@ void config_read(void)
343359
config_input_gamepad[i].gamepad_IV = read_int(input_group, "GamepadIV", SDL_CONTROLLER_BUTTON_X);
344360
config_input_gamepad[i].gamepad_V = read_int(input_group, "GamepadV", SDL_CONTROLLER_BUTTON_LEFTSHOULDER);
345361
config_input_gamepad[i].gamepad_VI = read_int(input_group, "GamepadVI", SDL_CONTROLLER_BUTTON_RIGHTSHOULDER);
362+
config_input_gamepad[i].gamepad_toggle_turbo_I = read_int(input_group, "GamepadToogleTurboI", SDL_CONTROLLER_BUTTON_LEFTSTICK);
363+
config_input_gamepad[i].gamepad_toggle_turbo_II = read_int(input_group, "GamepadToogleTurboII", SDL_CONTROLLER_BUTTON_RIGHTSTICK);
346364
}
347365

348366
Debug("Settings loaded");
@@ -465,8 +483,9 @@ void config_write(void)
465483
for (int j = 0; j < 2; j++)
466484
{
467485
char turbo_group[32];
468-
snprintf(turbo_group, sizeof(turbo_group), "Turbo%d", j + 1);
486+
snprintf(turbo_group, sizeof(turbo_group), "TurboEnabled%d", j + 1);
469487
write_bool(input_group, turbo_group, config_input.turbo_enabled[i][j]);
488+
snprintf(turbo_group, sizeof(turbo_group), "TurboSpeed%d", j + 1);
470489
write_int(input_group, turbo_group, config_input.turbo_speed[i][j]);
471490
}
472491
}

platforms/shared/desktop/config.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,8 @@ struct config_Input_Keyboard
119119
SDL_Scancode key_IV;
120120
SDL_Scancode key_V;
121121
SDL_Scancode key_VI;
122+
SDL_Scancode key_toggle_turbo_I;
123+
SDL_Scancode key_toggle_turbo_II;
122124
};
123125

124126
struct config_Input_Gamepad
@@ -137,6 +139,8 @@ struct config_Input_Gamepad
137139
int gamepad_VI;
138140
int gamepad_x_axis;
139141
int gamepad_y_axis;
142+
int gamepad_toggle_turbo_I;
143+
int gamepad_toggle_turbo_II;
140144
};
141145

142146
struct config_Debug

platforms/shared/desktop/gui.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -140,11 +140,11 @@ void gui_init(void)
140140
else if (config_input.avenue_pad_3_button[i] == 2)
141141
key = GG_KEY_RUN;
142142
emu_set_avenue_pad_3_button((GG_Controllers)i, key);
143-
for (int j = 0; j < 2; j++)
144-
{
145-
emu_set_turbo((GG_Controllers)i, (GG_Keys)j, config_input.turbo_enabled[i][j]);
146-
emu_set_turbo_speed((GG_Controllers)i, (GG_Keys)j, config_input.turbo_speed[i][j]);
147-
}
143+
144+
emu_set_turbo((GG_Controllers)i, GG_KEY_I, config_input.turbo_enabled[i][0]);
145+
emu_set_turbo_speed((GG_Controllers)i, GG_KEY_I, config_input.turbo_speed[i][0]);
146+
emu_set_turbo((GG_Controllers)i, GG_KEY_II, config_input.turbo_enabled[i][1]);
147+
emu_set_turbo_speed((GG_Controllers)i, GG_KEY_II, config_input.turbo_speed[i][1]);
148148
}
149149
emu_debug_set_callback(gui_debug_callback);
150150

platforms/shared/desktop/gui_menus.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -794,6 +794,10 @@ static void menu_input(void)
794794
keyboard_configuration_item("IV:", &config_input_keyboard[i].key_IV, i);
795795
keyboard_configuration_item("V:", &config_input_keyboard[i].key_V, i);
796796
keyboard_configuration_item("VI:", &config_input_keyboard[i].key_VI, i);
797+
ImGui::Separator();
798+
ImGui::TextDisabled("Turbo:");
799+
keyboard_configuration_item("Toggle Turbo I:", &config_input_keyboard[i].key_toggle_turbo_I, i);
800+
keyboard_configuration_item("Toggle Turbo II:", &config_input_keyboard[i].key_toggle_turbo_II, i);
797801

798802
gui_popup_modal_keyboard();
799803

@@ -851,6 +855,10 @@ static void menu_input(void)
851855
gamepad_configuration_item("IV:", &config_input_gamepad[i].gamepad_IV, i);
852856
gamepad_configuration_item("V:", &config_input_gamepad[i].gamepad_V, i);
853857
gamepad_configuration_item("VI:", &config_input_gamepad[i].gamepad_VI, i);
858+
ImGui::Separator();
859+
ImGui::TextDisabled("Turbo:");
860+
gamepad_configuration_item("Toggle Turbo I:", &config_input_gamepad[i].gamepad_toggle_turbo_I, i);
861+
gamepad_configuration_item("Toggle Turbo II:", &config_input_gamepad[i].gamepad_toggle_turbo_II, i);
854862

855863
gui_popup_modal_gamepad(i);
856864

@@ -1213,7 +1221,7 @@ static void keyboard_configuration_item(const char* text, SDL_Scancode* key, int
12131221
static void gamepad_configuration_item(const char* text, int* button, int player)
12141222
{
12151223
ImGui::Text("%s", text);
1216-
ImGui::SameLine(100);
1224+
ImGui::SameLine(120);
12171225

12181226
static const char* gamepad_names[16] = {"A", "B", "X" ,"Y", "BACK", "GUIDE", "START", "L3", "R3", "L1", "R1", "UP", "DOWN", "LEFT", "RIGHT", "15"};
12191227
const char* button_name = (*button >= 0 && *button < 16) ? gamepad_names[*button] : "";

src/cdrom_media_inline.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -191,10 +191,6 @@ INLINE void CdRomMedia::SetCurrentSector(u32 sector)
191191
{
192192
m_current_image->SetCurrentSector(sector);
193193
}
194-
else
195-
{
196-
Log("ERROR: CdRomMedia::SetCurrentSector failed - Current image is NULL");
197-
}
198194
}
199195

200196
INLINE u32 CdRomMedia::SectorTransferCycles()

src/input.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ class Input
4646
void EnableCDROM(bool enable);
4747
void EnableTurboTap(bool enabled);
4848
void EnableTurbo(GG_Controllers controller, GG_Keys key, bool enabled);
49+
bool IsTurboEnabled(GG_Controllers controller, GG_Keys key);
4950
void SetTurboSpeed(GG_Controllers controller, GG_Keys key, u8 speed);
5051
void SetControllerType(GG_Controllers controller, GG_Controller_Type type);
5152
void SetAvenuePad3Button(GG_Controllers controller, GG_Keys button);

src/input_inline.h

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -104,12 +104,29 @@ INLINE void Input::EnableTurboTap(bool enabled)
104104

105105
INLINE void Input::EnableTurbo(GG_Controllers controller, GG_Keys key, bool enabled)
106106
{
107-
m_turbo_enabled[controller][key] = enabled;
107+
if (key < GG_KEY_I || key > GG_KEY_II)
108+
return;
109+
110+
int index = key - 1;
111+
m_turbo_enabled[controller][index] = enabled;
112+
}
113+
114+
INLINE bool Input::IsTurboEnabled(GG_Controllers controller, GG_Keys key)
115+
{
116+
if (key < GG_KEY_I || key > GG_KEY_II)
117+
return false;
118+
119+
int index = key - 1;
120+
return m_turbo_enabled[controller][index];
108121
}
109122

110123
INLINE void Input::SetTurboSpeed(GG_Controllers controller, GG_Keys key, u8 speed)
111124
{
112-
m_turbo_speed[controller][key] = speed;
125+
if (key < GG_KEY_I || key > GG_KEY_II)
126+
return;
127+
128+
int index = key - 1;
129+
m_turbo_speed[controller][index] = speed;
113130
}
114131

115132
INLINE void Input::SetControllerType(GG_Controllers controller, GG_Controller_Type type)
@@ -157,17 +174,20 @@ INLINE void Input::UpdateRegister(u8 value)
157174

158175
u16 raw_gamepad = m_gamepads[m_selected_pad];
159176

160-
for (int i = 0; i < 2; i++)
177+
if (m_turbo_enabled[m_selected_pad][0] && !(raw_gamepad & GG_KEY_I))
161178
{
162-
GG_Keys key = (i == 0) ? GG_KEY_I : GG_KEY_II;
179+
if (m_turbo_state[m_selected_pad][0])
180+
raw_gamepad &= ~GG_KEY_I;
181+
else
182+
raw_gamepad |= GG_KEY_I;
183+
}
163184

164-
if (m_turbo_enabled[m_selected_pad][i] && !(raw_gamepad & key))
165-
{
166-
if (m_turbo_state[m_selected_pad][i])
167-
raw_gamepad &= ~key;
168-
else
169-
raw_gamepad |= key;
170-
}
185+
if (m_turbo_enabled[m_selected_pad][1] && !(raw_gamepad & GG_KEY_II))
186+
{
187+
if (m_turbo_state[m_selected_pad][1])
188+
raw_gamepad &= ~GG_KEY_II;
189+
else
190+
raw_gamepad |= GG_KEY_II;
171191
}
172192

173193
if (!m_clr)

0 commit comments

Comments
 (0)