From cee6569bde476ea94e05237baf62d3d4ce1d2cf9 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Fri, 12 Jan 2018 20:52:15 -0800 Subject: [PATCH] Libretro: Add frameskip option --- CHANGES | 1 + src/platform/libretro/libretro.c | 24 +++++++++++++++++++----- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/CHANGES b/CHANGES index beb686265..e0f527536 100644 --- a/CHANGES +++ b/CHANGES @@ -54,6 +54,7 @@ Misc: - GB MBC: Remove erroneous bank 0 wrapping - GBA Cheats: Allow multiple ROM patches in the same slot - GB: Skip BIOS option now works + - Libretro: Add frameskip option 0.6.1: (2017-10-01) Bugfixes: diff --git a/src/platform/libretro/libretro.c b/src/platform/libretro/libretro.c index d411dc4df..fe39a104b 100644 --- a/src/platform/libretro/libretro.c +++ b/src/platform/libretro/libretro.c @@ -88,6 +88,13 @@ static void _reloadSettings(void) { } } + var.key = "mgba_frameskip"; + var.value = 0; + if (environCallback(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + opts.frameskip = strtol(var.value, NULL, 10); + + } + mCoreConfigLoadDefaults(&core->config, &opts); mCoreLoadConfig(core); } @@ -105,6 +112,7 @@ void retro_set_environment(retro_environment_t env) { { "mgba_use_bios", "Use BIOS file if found (requires restart); ON|OFF" }, { "mgba_skip_bios", "Skip BIOS intro (requires restart); OFF|ON" }, { "mgba_idle_optimization", "Idle loop removal; Remove Known|Detect and Remove|Don't Remove" }, + { "mgba_frameskip", "Frameskip; 0|1|2|3|4|5|6|7|8|9|10" }, { 0, 0 } }; @@ -222,16 +230,22 @@ void retro_run(void) { uint16_t keys; inputPollCallback(); - struct retro_variable var = { - .key = "mgba_allow_opposing_directions", - .value = 0 - }; - bool updated = false; if (environCallback(RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE, &updated) && updated) { + struct retro_variable var = { + .key = "mgba_allow_opposing_directions", + .value = 0 + }; if (environCallback(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { ((struct GBA*) core->board)->allowOpposingDirections = strcmp(var.value, "yes") == 0; } + + var.key = "mgba_frameskip"; + var.value = 0; + if (environCallback(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { + mCoreConfigSetUIntValue(&core->config, "frameskip", strtol(var.value, NULL, 10)); + mCoreLoadConfig(core); + } } keys = 0;