diff --git a/intl/msg_hash_chs.h b/intl/msg_hash_chs.h index ae11a94183..142ffad5d7 100644 --- a/intl/msg_hash_chs.h +++ b/intl/msg_hash_chs.h @@ -2165,6 +2165,8 @@ MSG_HASH(MSG_SKIPPING_SRAM_LOAD, "跳过 SRAM 加载。") MSG_HASH(MSG_SLOW_MOTION, "慢动作。") +MSG_HASH(MSG_FAST_FORWARD, + "快进。") MSG_HASH(MSG_SLOW_MOTION_REWIND, "慢动作回溯。") MSG_HASH(MSG_SRAM_WILL_NOT_BE_SAVED, diff --git a/intl/msg_hash_cht.h b/intl/msg_hash_cht.h index 5396f121da..9e13d1de7d 100644 --- a/intl/msg_hash_cht.h +++ b/intl/msg_hash_cht.h @@ -2165,6 +2165,8 @@ MSG_HASH(MSG_SKIPPING_SRAM_LOAD, "跳過 SRAM 戴入。") MSG_HASH(MSG_SLOW_MOTION, "慢動作。") +MSG_HASH(MSG_FAST_FORWARD, + "快進。") MSG_HASH(MSG_SLOW_MOTION_REWIND, "慢動作回溯。") MSG_HASH(MSG_SRAM_WILL_NOT_BE_SAVED, diff --git a/intl/msg_hash_de.h b/intl/msg_hash_de.h index 3244e73e83..44c710daff 100644 --- a/intl/msg_hash_de.h +++ b/intl/msg_hash_de.h @@ -2229,6 +2229,8 @@ MSG_HASH(MSG_SKIPPING_SRAM_LOAD, "Überspringe Laden des SRAM.") MSG_HASH(MSG_SLOW_MOTION, "Zeitlupe.") +MSG_HASH(MSG_FAST_FORWARD, + "Snel vooruit.") MSG_HASH(MSG_SLOW_MOTION_REWIND, "In Zeitlupe zurückspulen.") MSG_HASH(MSG_SRAM_WILL_NOT_BE_SAVED, diff --git a/intl/msg_hash_eo.h b/intl/msg_hash_eo.h index bf81076201..c17db311bb 100644 --- a/intl/msg_hash_eo.h +++ b/intl/msg_hash_eo.h @@ -2054,6 +2054,8 @@ MSG_HASH(MSG_SKIPPING_SRAM_LOAD, "Skipping SRAM load.") MSG_HASH(MSG_SLOW_MOTION, "Slow motion.") +MSG_HASH(MSG_FAST_FORWARD, + "Fast forward.") MSG_HASH(MSG_SLOW_MOTION_REWIND, "Slow motion rewind.") MSG_HASH(MSG_SRAM_WILL_NOT_BE_SAVED, diff --git a/intl/msg_hash_es.c b/intl/msg_hash_es.c index 5f8ddab95a..631d53b609 100644 --- a/intl/msg_hash_es.c +++ b/intl/msg_hash_es.c @@ -1469,6 +1469,8 @@ const char *msg_hash_to_str_es(enum msg_hash_enums msg) return "Omitiendo carga de SRAM."; case MSG_SLOW_MOTION: return "Cámara lenta."; + case MSG_FAST_FORWARD: + return "Avance rápido."; case MSG_SLOW_MOTION_REWIND: return "Rebobinar cámara lenta."; case MSG_SRAM_WILL_NOT_BE_SAVED: diff --git a/intl/msg_hash_fr.h b/intl/msg_hash_fr.h index 0d26321549..fa1094a768 100644 --- a/intl/msg_hash_fr.h +++ b/intl/msg_hash_fr.h @@ -2185,6 +2185,8 @@ MSG_HASH(MSG_SKIPPING_SRAM_LOAD, "Ignore le chargement de la SRAM.") MSG_HASH(MSG_SLOW_MOTION, "Ralenti.") +MSG_HASH(MSG_FAST_FORWARD, + "Avance rapide.") MSG_HASH(MSG_SLOW_MOTION_REWIND, "Rembobinage ralenti.") MSG_HASH(MSG_SRAM_WILL_NOT_BE_SAVED, diff --git a/intl/msg_hash_it.h b/intl/msg_hash_it.h index 87e306c237..c94ed5b0b8 100644 --- a/intl/msg_hash_it.h +++ b/intl/msg_hash_it.h @@ -2227,6 +2227,8 @@ MSG_HASH(MSG_SKIPPING_SRAM_LOAD, "Skipping SRAM load.") MSG_HASH(MSG_SLOW_MOTION, "Slow motion.") +MSG_HASH(MSG_FAST_FORWARD, + "Avanti veloce.") MSG_HASH(MSG_SLOW_MOTION_REWIND, "Riavvolgimento lento.") MSG_HASH(MSG_SRAM_WILL_NOT_BE_SAVED, diff --git a/intl/msg_hash_ja.h b/intl/msg_hash_ja.h index 270b55d0dd..3c772118af 100644 --- a/intl/msg_hash_ja.h +++ b/intl/msg_hash_ja.h @@ -2239,6 +2239,8 @@ MSG_HASH(MSG_SKIPPING_SRAM_LOAD, "Skipping SRAM load.") MSG_HASH(MSG_SLOW_MOTION, "スローモーション。") +MSG_HASH(MSG_FAST_FORWARD, + "早送り。") MSG_HASH(MSG_SLOW_MOTION_REWIND, "スローモーション巻き戻し。") MSG_HASH(MSG_SRAM_WILL_NOT_BE_SAVED, diff --git a/intl/msg_hash_ko.h b/intl/msg_hash_ko.h index 78c15aa503..f4e980e451 100644 --- a/intl/msg_hash_ko.h +++ b/intl/msg_hash_ko.h @@ -2165,6 +2165,8 @@ MSG_HASH(MSG_SKIPPING_SRAM_LOAD, "SRAM 불러오기 건너뛰는 중.") MSG_HASH(MSG_SLOW_MOTION, "슬로우 모션.") +MSG_HASH(MSG_FAST_FORWARD, + "빨리 감기.") MSG_HASH(MSG_SLOW_MOTION_REWIND, "슬로우 모션 되감기.") MSG_HASH(MSG_SRAM_WILL_NOT_BE_SAVED, diff --git a/intl/msg_hash_nl.h b/intl/msg_hash_nl.h index 3cb6562214..5be89c5f31 100644 --- a/intl/msg_hash_nl.h +++ b/intl/msg_hash_nl.h @@ -2052,6 +2052,8 @@ MSG_HASH(MSG_SKIPPING_SRAM_LOAD, "Skipping SRAM load.") MSG_HASH(MSG_SLOW_MOTION, "Slow motion.") +MSG_HASH(MSG_FAST_FORWARD, + "Fast forward.") MSG_HASH(MSG_SLOW_MOTION_REWIND, "Slow motion rewind.") MSG_HASH(MSG_SRAM_WILL_NOT_BE_SAVED, diff --git a/intl/msg_hash_pl.c b/intl/msg_hash_pl.c index cf5300785a..a20415a68d 100644 --- a/intl/msg_hash_pl.c +++ b/intl/msg_hash_pl.c @@ -1,4 +1,4 @@ -/* RetroArch - A frontend for libretro. +/* RetroArch - A frontend for libretro. * Copyright (C) 2011-2017 - Daniel De Matteis * * RetroArch is free software: you can redistribute it and/or modify it under the terms @@ -982,6 +982,8 @@ const char *msg_hash_to_str_pl(enum msg_hash_enums msg) return "Pomijanie wczytywania SRAM."; case MSG_SLOW_MOTION: return "Spowolnione tempo."; + case MSG_FAST_FORWARD: + return "Szybko do przodu."; case MSG_SLOW_MOTION_REWIND: return "Przewijanie w spowolnionym tempie."; case MSG_SRAM_WILL_NOT_BE_SAVED: diff --git a/intl/msg_hash_pt_br.h b/intl/msg_hash_pt_br.h index f2d6db8b39..dcaeaebd75 100644 --- a/intl/msg_hash_pt_br.h +++ b/intl/msg_hash_pt_br.h @@ -2971,6 +2971,9 @@ MSG_HASH(MSG_SKIPPING_SRAM_LOAD, MSG_HASH(MSG_SLOW_MOTION, "Câmera Lenta." ) +MSG_HASH(MSG_FAST_FORWARD, + "Avanço rápido." + ) MSG_HASH(MSG_SLOW_MOTION_REWIND, "Voltar Atrás em Câmera Lenta." ) diff --git a/intl/msg_hash_pt_pt.h b/intl/msg_hash_pt_pt.h index 48370268e1..800463bdc5 100644 --- a/intl/msg_hash_pt_pt.h +++ b/intl/msg_hash_pt_pt.h @@ -2155,6 +2155,8 @@ MSG_HASH(MSG_SKIPPING_SRAM_LOAD, "Ignorando carregamento de SRAM.") MSG_HASH(MSG_SLOW_MOTION, "Câmera lenta.") +MSG_HASH(MSG_FAST_FORWARD, + "Avanço rápido.") MSG_HASH(MSG_SLOW_MOTION_REWIND, "Função rewind em câmera lenta.") MSG_HASH(MSG_SRAM_WILL_NOT_BE_SAVED, diff --git a/intl/msg_hash_ru.h b/intl/msg_hash_ru.h index c9770e1801..3cc733e238 100644 --- a/intl/msg_hash_ru.h +++ b/intl/msg_hash_ru.h @@ -2200,6 +2200,8 @@ MSG_HASH(MSG_SKIPPING_SRAM_LOAD, "Пропуск загрузки SRAM.") MSG_HASH(MSG_SLOW_MOTION, "Замедление.") +MSG_HASH(MSG_FAST_FORWARD, + "Перемотка вперед.") MSG_HASH(MSG_SLOW_MOTION_REWIND, "Замедленная перемотка.") MSG_HASH(MSG_SRAM_WILL_NOT_BE_SAVED, diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index 32cf049f65..a7f516c586 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -2235,6 +2235,8 @@ MSG_HASH(MSG_SKIPPING_SRAM_LOAD, "Skipping SRAM load.") MSG_HASH(MSG_SLOW_MOTION, "Slow motion.") +MSG_HASH(MSG_FAST_FORWARD, + "Fast forward.") MSG_HASH(MSG_SLOW_MOTION_REWIND, "Slow motion rewind.") MSG_HASH(MSG_SRAM_WILL_NOT_BE_SAVED, diff --git a/intl/msg_hash_vn.h b/intl/msg_hash_vn.h index df3cf44b63..ca95e43315 100644 --- a/intl/msg_hash_vn.h +++ b/intl/msg_hash_vn.h @@ -2183,6 +2183,8 @@ MSG_HASH(MSG_SKIPPING_SRAM_LOAD, "Skipping SRAM load.") MSG_HASH(MSG_SLOW_MOTION, "Slow motion.") +MSG_HASH(MSG_FAST_FORWARD, + "Nhanh về phía trước.") MSG_HASH(MSG_SLOW_MOTION_REWIND, "Slow motion rewind.") MSG_HASH(MSG_SRAM_WILL_NOT_BE_SAVED, diff --git a/msg_hash.h b/msg_hash.h index 3235e92e18..25f83229b8 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -342,6 +342,7 @@ enum msg_hash_enums MSG_REWINDING, MSG_SLOW_MOTION_REWIND, MSG_SLOW_MOTION, + MSG_FAST_FORWARD, MSG_REWIND_REACHED_END, MSG_FAILED_TO_START_MOVIE_RECORD, MSG_CHEEVOS_HARDCORE_MODE_ENABLE, diff --git a/retroarch.c b/retroarch.c index 2a3598be88..da76e37c3c 100644 --- a/retroarch.c +++ b/retroarch.c @@ -219,6 +219,7 @@ static bool runloop_paused = false; static bool runloop_idle = false; static bool runloop_exec = false; static bool runloop_slowmotion = false; +static bool runloop_fastmotion = false; static bool runloop_shutdown_initiated = false; static bool runloop_core_shutdown_initiated = false; static bool runloop_perfcnt_enable = false; @@ -1380,10 +1381,10 @@ static bool rarch_game_specific_options(char **output) if (!retroarch_validate_game_options(game_path, game_path_size, false)) - goto error; + goto error; if (!config_file_exists(game_path)) - goto error; + goto error; RARCH_LOG("%s %s\n", msg_hash_to_str(MSG_GAME_SPECIFIC_CORE_OPTIONS_FOUND_AT), @@ -2765,21 +2766,35 @@ static enum runloop_state runloop_check_state( if (new_button_state && !old_button_state) { - if (input_nonblock_state) + if (input_nonblock_state){ input_driver_unset_nonblock_state(); - else + runloop_fastmotion = false; + } + else { input_driver_set_nonblock_state(); + runloop_fastmotion = true; + } driver_set_nonblock_state(); } else if (old_hold_button_state != new_hold_button_state) { - if (new_hold_button_state) + if (new_hold_button_state) { input_driver_set_nonblock_state(); - else + runloop_fastmotion = true; + } + else { input_driver_unset_nonblock_state(); + runloop_fastmotion = false; + } driver_set_nonblock_state(); } + // Display the fast forward state to the user, if needed. + if (runloop_fastmotion) { + runloop_msg_queue_push( + msg_hash_to_str(MSG_FAST_FORWARD), 2, 15, true); + } + old_button_state = new_button_state; old_hold_button_state = new_hold_button_state; } @@ -3130,7 +3145,6 @@ int runloop_iterate(unsigned *sleep_ms) if (settings->floats.fastforward_ratio) end: { - retro_time_t to_sleep_ms = ( (frame_limit_last_time + frame_limit_minimum_time) - cpu_features_get_time_usec()) / 1000;