Skip to content

Commit

Permalink
Adjust turbo logic so that when a button gets pressed, it delays this…
Browse files Browse the repository at this point in the history
… state for 2 frames. Fix some games that requires certain frame count to read button states (Double Dragon, Xevious
  • Loading branch information
negativeExponent committed Feb 4, 2025
1 parent a46648a commit 174c866
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 42 deletions.
2 changes: 1 addition & 1 deletion libretro/libretro.c
Original file line number Diff line number Diff line change
Expand Up @@ -1276,7 +1276,7 @@ static void check_variables(bool startup) {
}
}

var.key = "fceumm_next_turbo_delay";
var.key = "fceumm_next_turbo_rate";

if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) {
int value = atoi(var.value);
Expand Down
6 changes: 3 additions & 3 deletions libretro/libretro_core_options.h
Original file line number Diff line number Diff line change
Expand Up @@ -922,14 +922,14 @@ struct retro_core_option_v2_definition option_defs[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"Turbo Delay (in frames)",
"fceumm_next_turbo_rate",
"Turbo Rate (in frames)",
NULL,
"Repeat rate of turbo buttons in frames.",
NULL,
"input",
{
{ "1", NULL },
/*{ "1", NULL },*/
{ "2", NULL },
{ "3", NULL },
{ "4", NULL },
Expand Down
74 changes: 37 additions & 37 deletions libretro/libretro_core_options_intl.h
Original file line number Diff line number Diff line change
Expand Up @@ -519,7 +519,7 @@ struct retro_core_option_v2_definition option_defs_ar[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_AR,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_AR,
Expand Down Expand Up @@ -1147,7 +1147,7 @@ struct retro_core_option_v2_definition option_defs_ast[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_AST,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_AST,
Expand Down Expand Up @@ -1775,7 +1775,7 @@ struct retro_core_option_v2_definition option_defs_ca[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_CA,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_CA,
Expand Down Expand Up @@ -2403,7 +2403,7 @@ struct retro_core_option_v2_definition option_defs_chs[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_CHS,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_CHS,
Expand Down Expand Up @@ -3031,7 +3031,7 @@ struct retro_core_option_v2_definition option_defs_cht[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_CHT,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_CHT,
Expand Down Expand Up @@ -3659,7 +3659,7 @@ struct retro_core_option_v2_definition option_defs_cs[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_CS,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_CS,
Expand Down Expand Up @@ -4287,7 +4287,7 @@ struct retro_core_option_v2_definition option_defs_cy[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_CY,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_CY,
Expand Down Expand Up @@ -4915,7 +4915,7 @@ struct retro_core_option_v2_definition option_defs_da[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_DA,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_DA,
Expand Down Expand Up @@ -5543,7 +5543,7 @@ struct retro_core_option_v2_definition option_defs_de[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_DE,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_DE,
Expand Down Expand Up @@ -6171,7 +6171,7 @@ struct retro_core_option_v2_definition option_defs_el[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_EL,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_EL,
Expand Down Expand Up @@ -6799,7 +6799,7 @@ struct retro_core_option_v2_definition option_defs_eo[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_EO,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_EO,
Expand Down Expand Up @@ -7427,7 +7427,7 @@ struct retro_core_option_v2_definition option_defs_es[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_ES,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_ES,
Expand Down Expand Up @@ -8055,7 +8055,7 @@ struct retro_core_option_v2_definition option_defs_fa[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_FA,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_FA,
Expand Down Expand Up @@ -8683,7 +8683,7 @@ struct retro_core_option_v2_definition option_defs_fi[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_FI,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_FI,
Expand Down Expand Up @@ -9311,7 +9311,7 @@ struct retro_core_option_v2_definition option_defs_fr[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_FR,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_FR,
Expand Down Expand Up @@ -9939,7 +9939,7 @@ struct retro_core_option_v2_definition option_defs_gl[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_GL,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_GL,
Expand Down Expand Up @@ -10567,7 +10567,7 @@ struct retro_core_option_v2_definition option_defs_he[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_HE,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_HE,
Expand Down Expand Up @@ -11195,7 +11195,7 @@ struct retro_core_option_v2_definition option_defs_hu[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_HU,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_HU,
Expand Down Expand Up @@ -11823,7 +11823,7 @@ struct retro_core_option_v2_definition option_defs_id[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_ID,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_ID,
Expand Down Expand Up @@ -12451,7 +12451,7 @@ struct retro_core_option_v2_definition option_defs_it[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_IT,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_IT,
Expand Down Expand Up @@ -13079,7 +13079,7 @@ struct retro_core_option_v2_definition option_defs_ja[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_JA,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_JA,
Expand Down Expand Up @@ -13707,7 +13707,7 @@ struct retro_core_option_v2_definition option_defs_ko[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_KO,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_KO,
Expand Down Expand Up @@ -14335,7 +14335,7 @@ struct retro_core_option_v2_definition option_defs_mt[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_MT,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_MT,
Expand Down Expand Up @@ -14963,7 +14963,7 @@ struct retro_core_option_v2_definition option_defs_nl[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_NL,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_NL,
Expand Down Expand Up @@ -15591,7 +15591,7 @@ struct retro_core_option_v2_definition option_defs_oc[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_OC,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_OC,
Expand Down Expand Up @@ -16219,7 +16219,7 @@ struct retro_core_option_v2_definition option_defs_pl[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_PL,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_PL,
Expand Down Expand Up @@ -16847,7 +16847,7 @@ struct retro_core_option_v2_definition option_defs_pt_br[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_PT_BR,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_PT_BR,
Expand Down Expand Up @@ -17475,7 +17475,7 @@ struct retro_core_option_v2_definition option_defs_pt_pt[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_PT_PT,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_PT_PT,
Expand Down Expand Up @@ -18103,7 +18103,7 @@ struct retro_core_option_v2_definition option_defs_ro[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_RO,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_RO,
Expand Down Expand Up @@ -18731,7 +18731,7 @@ struct retro_core_option_v2_definition option_defs_ru[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_RU,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_RU,
Expand Down Expand Up @@ -19359,7 +19359,7 @@ struct retro_core_option_v2_definition option_defs_si[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_SI,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_SI,
Expand Down Expand Up @@ -19987,7 +19987,7 @@ struct retro_core_option_v2_definition option_defs_sk[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_SK,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_SK,
Expand Down Expand Up @@ -20615,7 +20615,7 @@ struct retro_core_option_v2_definition option_defs_sr[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_SR,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_SR,
Expand Down Expand Up @@ -21243,7 +21243,7 @@ struct retro_core_option_v2_definition option_defs_sv[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_SV,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_SV,
Expand Down Expand Up @@ -21871,7 +21871,7 @@ struct retro_core_option_v2_definition option_defs_tr[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_TR,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_TR,
Expand Down Expand Up @@ -22499,7 +22499,7 @@ struct retro_core_option_v2_definition option_defs_uk[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_UK,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_UK,
Expand Down Expand Up @@ -23127,7 +23127,7 @@ struct retro_core_option_v2_definition option_defs_vn[] = {
"None",
},
{
"fceumm_next_turbo_delay",
"fceumm_next_turbo_rate",
FCEUMM_TURBO_DELAY_LABEL_VN,
NULL,
FCEUMM_TURBO_DELAY_INFO_0_VN,
Expand Down
11 changes: 10 additions & 1 deletion libretro/libretro_input.c
Original file line number Diff line number Diff line change
Expand Up @@ -637,6 +637,7 @@ void input_update(retro_input_state_t *_input_cb) {
unsigned player, port;
bool palette_prev = FALSE;
bool palette_next = FALSE;
static int turbo_pressed_count[4][2]; /* counter to keep the button preesed at a minimum number of frames */

if (nes_input.needs_update) {
/* since you can only update input descriptors all at once, its better
Expand Down Expand Up @@ -729,8 +730,16 @@ void input_update(retro_input_state_t *_input_cb) {
/* Handle Turbo A, B & A+B buttons */
for (i = 0; i < TURBO_BUTTONS; i++) {
if (input_cb(player, RETRO_DEVICE_JOYPAD, 0, turbomap[i].retro)) {
if (!turbo_button_toggle[player][i])
if (!turbo_button_toggle[player][i]) {
turbo_pressed_count[player][i] = 2;
if (turbo_pressed_count[player][i] <= nes_input.turbo_delay + 1) {
turbo_pressed_count[player][i] = nes_input.turbo_delay;
}
}
if (turbo_pressed_count[player][i]) {
input_buf |= turbomap[i].nes;
turbo_pressed_count[player][i]--;
}
turbo_button_toggle[player][i]++;
turbo_button_toggle[player][i] %= nes_input.turbo_delay + 1;
} else
Expand Down

0 comments on commit 174c866

Please sign in to comment.