diff --git a/CHANGES.md b/CHANGES.md index afb55b0acb..e8de27aadd 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -3,6 +3,8 @@ - ANDROID: Fire Stick & Fire TV remote overrides gamepad port 0 on button press and viceversa like SHIELD devices - AUDIO: Audio mixer supports MOD/S3M/XM file types now! - INPUT: input swap override flag (for remotes) is cleared correctly +- INPUT: allow specifying libretro device in remap files +- INPUT: allow specifying analog dpad mode in remap files - COMMON: Add 'Delete Core'option to Core Information menu. - COMMON: Allow Max Timing Skew to be set to 0. - LOCALIZATION: Update Russian translation diff --git a/command.c b/command.c index ca21d18931..2eedb184a7 100644 --- a/command.c +++ b/command.c @@ -1053,6 +1053,7 @@ static void command_event_deinit_core(bool reinit) command_event(CMD_EVENT_DISABLE_OVERRIDES, NULL); command_event(CMD_EVENT_RESTORE_DEFAULT_SHADER_PRESET, NULL); + command_event(CMD_EVENT_RESTORE_REMAPS, NULL); } static void command_event_init_cheats(void) @@ -1287,6 +1288,11 @@ static void command_event_restore_default_shader_preset(void) path_clear(RARCH_PATH_DEFAULT_SHADER_PRESET); } +static void command_event_restore_remaps(void) +{ + input_remapping_set_defaults(); +} + static bool command_event_save_auto_state(void) { char savestate_name_auto[PATH_MAX_LENGTH] = {0}; @@ -1797,6 +1803,7 @@ bool command_event(enum event_command cmd, void *data) command_event(CMD_EVENT_AUTOSAVE_STATE, NULL); command_event(CMD_EVENT_DISABLE_OVERRIDES, NULL); command_event(CMD_EVENT_RESTORE_DEFAULT_SHADER_PRESET, NULL); + command_event(CMD_EVENT_RESTORE_REMAPS, NULL); if (is_inited) if (!task_push_start_dummy_core(&content_info)) @@ -2589,6 +2596,8 @@ bool command_event(enum event_command cmd, void *data) case CMD_EVENT_DISABLE_OVERRIDES: command_event_disable_overrides(); break; + case CMD_EVENT_RESTORE_REMAPS: + command_event_restore_remaps(); case CMD_EVENT_RESTORE_DEFAULT_SHADER_PRESET: command_event_restore_default_shader_preset(); break; diff --git a/command.h b/command.h index 8cd7ec2132..ccac457ef8 100644 --- a/command.h +++ b/command.h @@ -218,6 +218,7 @@ enum event_command CMD_EVENT_MIXER_VOLUME_UP, CMD_EVENT_MIXER_VOLUME_DOWN, CMD_EVENT_DISABLE_OVERRIDES, + CMD_EVENT_RESTORE_REMAPS, CMD_EVENT_RESTORE_DEFAULT_SHADER_PRESET, CMD_EVENT_LIBUI_TEST }; diff --git a/input/input_remapping.c b/input/input_remapping.c index 17aae07ab3..f86b1a11ea 100644 --- a/input/input_remapping.c +++ b/input/input_remapping.c @@ -23,6 +23,9 @@ #include "../configuration.h" #include "../retroarch.h" +static unsigned old_analog_dpad_mode[MAX_USERS]; +static unsigned old_libretro_device[MAX_USERS]; + /** * input_remapping_load_file: * @data : Path to config file. @@ -46,6 +49,9 @@ bool input_remapping_load_file(void *data, const char *path) for (i = 0; i < MAX_USERS; i++) { + old_analog_dpad_mode[i] = settings->uints.input_analog_dpad_mode[i]; + old_libretro_device[i] = settings->uints.input_libretro_device[i]; + char buf[64]; char key_ident[RARCH_FIRST_CUSTOM_BIND + 4][128] = {{0}}; char key_strings[RARCH_FIRST_CUSTOM_BIND + 4][128] = @@ -82,6 +88,12 @@ bool input_remapping_load_file(void *data, const char *path) settings->uints.input_remap_ids[i][RARCH_FIRST_CUSTOM_BIND + j] = key_remap; } + + snprintf(buf, sizeof(buf), "input_player%u_analog_dpad_mode", i + 1); + CONFIG_GET_INT_BASE(conf, settings, uints.input_analog_dpad_mode[i], buf); + + snprintf(buf, sizeof(buf), "input_libretro_device_p%u", i + 1); + CONFIG_GET_INT_BASE(conf, settings, uints.input_libretro_device[i], buf); } config_file_free(conf); @@ -180,5 +192,7 @@ void input_remapping_set_defaults(void) } for (j = 0; j < 4; j++) settings->uints.input_remap_ids[i][RARCH_FIRST_CUSTOM_BIND + j] = j; + settings->uints.input_analog_dpad_mode[i] = old_analog_dpad_mode[i]; + settings->uints.input_libretro_device[i] = old_libretro_device[i]; } } diff --git a/retroarch.c b/retroarch.c index 7def51cb4b..6ab02a62f4 100644 --- a/retroarch.c +++ b/retroarch.c @@ -2161,6 +2161,7 @@ bool retroarch_main_quit(void) command_event(CMD_EVENT_AUTOSAVE_STATE, NULL); command_event(CMD_EVENT_DISABLE_OVERRIDES, NULL); command_event(CMD_EVENT_RESTORE_DEFAULT_SHADER_PRESET, NULL); + command_event(CMD_EVENT_RESTORE_REMAPS, NULL); } runloop_shutdown_initiated = true;