diff --git a/.gitmodules b/.gitmodules index 92451c5e52..4aabb37de5 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,6 @@ [submodule "deps/glslang/glslang"] path = deps/glslang/glslang - url = https://github.com/KhronosGroup/glslang.git + url = https://github.com/libretro/glslang.git [submodule "deps/SPIRV-Cross"] path = deps/SPIRV-Cross url = https://github.com/KhronosGroup/SPIRV-Cross diff --git a/Makefile.common b/Makefile.common index cab7d79d0c..91070f8928 100644 --- a/Makefile.common +++ b/Makefile.common @@ -183,7 +183,7 @@ OBJ += frontend/frontend.o \ $(LIBRETRO_COMM_DIR)/queues/message_queue.o \ managers/state_manager.o \ gfx/drivers_font_renderer/bitmapfont.o \ - input/input_autodetect.o \ + tasks/task_autodetect.o \ input/input_autodetect_builtin.o \ input/input_joypad_driver.o \ input/input_config.o \ @@ -636,6 +636,7 @@ ifeq ($(HAVE_UDEV), 1) DEFINES += $(UDEV_CFLAGS) LIBS += $(UDEV_LIBS) OBJ += input/drivers/udev_input.o \ + input/common/udev_common.o \ input/drivers_keyboard/keyboard_event_udev.o \ input/drivers_joypad/udev_joypad.o endif @@ -710,6 +711,16 @@ ifeq ($(HAVE_KMS), 1) LIBS += $(GBM_LIBS) $(DRM_LIBS) $(EGL_LIBS) endif +ifeq ($(HAVE_CACA), 1) + DEFINES += -DHAVE_CACA + OBJ += gfx/drivers/caca_gfx.o gfx/drivers_font/caca_font.o + LIBS += -lcaca + + ifeq ($(HAVE_MENU_COMMON), 1) + OBJ += menu/drivers_display/menu_display_caca.o + endif +endif + ifeq ($(HAVE_PLAIN_DRM), 1) OBJ += gfx/drivers/drm_gfx.o CFLAGS += -I/usr/include/libdrm @@ -857,7 +868,8 @@ ifeq ($(HAVE_VULKAN), 1) $(wildcard $(DEPS_DIR)/glslang/glslang/hlsl/*.cpp) \ $(wildcard $(DEPS_DIR)/glslang/glslang/glslang/OSDependent/$(GLSLANG_PLATFORM)/*.cpp) - SPIRV_CROSS_SOURCES := $(DEPS_DIR)/SPIRV-Cross/spirv_cross.cpp + SPIRV_CROSS_SOURCES := $(DEPS_DIR)/SPIRV-Cross/spirv_cross.cpp \ + $(DEPS_DIR)/SPIRV-Cross/spirv_cfg.cpp ifneq ($(findstring Win32,$(OS)),) # Trivial temporary workaround for MinGW and glslang. CXXFLAGS += -fpermissive @@ -876,7 +888,7 @@ ifeq ($(HAVE_VULKAN), 1) CXXFLAGS += -Wno-switch -Wno-sign-compare -fno-strict-aliasing -Wno-maybe-uninitialized -Wno-reorder -Wno-parentheses -Igfx/include CFLAGS += -Igfx/include - GLSLANG_OBJ := $(GLSLANG_SOURCES:.cpp=.o) + GLSLANG_OBJ := $(GLSLANG_SOURCES:.cpp=.o) SPIRV_CROSS_OBJ := $(SPIRV_CROSS_SOURCES:.cpp=.o) OBJ += gfx/drivers/vulkan.o \ @@ -975,7 +987,9 @@ endif # Compression/Archive -OBJ += $(LIBRETRO_COMM_DIR)/file/archive_file.o +OBJ += $(LIBRETRO_COMM_DIR)/file/archive_file.o \ + $(LIBRETRO_COMM_DIR)/streams/trans_stream.o \ + $(LIBRETRO_COMM_DIR)/streams/trans_stream_pipe.o ifeq ($(HAVE_7ZIP),1) CFLAGS += -I$(DEPS_DIR)/7zip @@ -1001,7 +1015,8 @@ endif ifeq ($(HAVE_ZLIB), 1) - OBJ += $(LIBRETRO_COMM_DIR)/file/archive_file_zlib.o + OBJ += $(LIBRETRO_COMM_DIR)/file/archive_file_zlib.o \ + $(LIBRETRO_COMM_DIR)/streams/trans_stream_zlib.o OBJ += $(ZLIB_OBJS) DEFINES += -DHAVE_ZLIB HAVE_COMPRESSION = 1 @@ -1081,8 +1096,11 @@ ifeq ($(HAVE_NETWORKING), 1) OBJ += $(LIBRETRO_COMM_DIR)/net/net_compat.o \ $(LIBRETRO_COMM_DIR)/net/net_http.o \ $(LIBRETRO_COMM_DIR)/net/net_socket.o \ + $(LIBRETRO_COMM_DIR)/net/net_natt.o \ network/net_http_special.o \ - tasks/task_http.o + tasks/task_http.o \ + tasks/task_netplay_lan_scan.o \ + tasks/task_wifi.o ifneq ($(HAVE_SOCKET_LEGACY),1) OBJ += $(LIBRETRO_COMM_DIR)/net/net_ifinfo.o @@ -1102,6 +1120,7 @@ ifeq ($(HAVE_NETWORKING), 1) OBJ += network/netplay/netplay_net.o \ network/netplay/netplay_spectate.o \ network/netplay/netplay_common.o \ + network/netplay/netplay_discovery.o \ network/netplay/netplay.o # Retro Achievements (also depends on threads) @@ -1118,6 +1137,10 @@ ifeq ($(HAVE_NETWORKING), 1) OBJ += input/input_remote.o \ cores/libretro-net-retropad/net_retropad_core.o endif + + ifeq ($(HAVE_MINIUPNPC), 1) + LIBS += -lminiupnpc + endif endif ifneq ($(findstring Win32,$(OS)),) diff --git a/Makefile.ctr b/Makefile.ctr index 61e8d2a019..a5f9939eb5 100644 --- a/Makefile.ctr +++ b/Makefile.ctr @@ -101,7 +101,7 @@ $(error "Please set DEVKITPRO in your environment. export DEVKITPRO=dev endif ifeq ($(strip $(CTRULIB)),) - CTRULIB = $(DEVKITPRO)/ctrulib + CTRULIB = $(DEVKITPRO)/libctru endif APP_TITLE := $(shell echo "$(APP_TITLE)" | cut -c1-128) diff --git a/Makefile.wiiu b/Makefile.wiiu index 701d3c3214..26a80520e1 100644 --- a/Makefile.wiiu +++ b/Makefile.wiiu @@ -1,5 +1,6 @@ TARGET := retroarch_wiiu -RPX_BUILD = 0 +BUILD_HBL_ELF = 1 +BUILD_RPX = 1 DEBUG = 0 GRIFFIN_BUILD = 0 WHOLE_ARCHIVE_LINK = 0 @@ -14,11 +15,6 @@ OBJ += wiiu/fs/sd_fat_devoptab.o OBJ += wiiu/fs/fs_utils.o OBJ += wiiu/tex_shader.o -ifneq ($(RPX_BUILD), 1) -OBJ += wiiu/system/dynamic.o -OBJ += wiiu/system/dyn_stubs.o -endif - DEFINES := ifeq ($(GRIFFIN_BUILD), 1) @@ -115,7 +111,7 @@ else endif LDFLAGS := $(CFLAGS) -ASFLAGS := $(CFLAGS) -mregnames $(INCDIRS) +ASFLAGS := $(CFLAGS) -mregnames CFLAGS += -ffast-math -Werror=implicit-function-declaration #CFLAGS += -fomit-frame-pointer -mword-relocations @@ -123,7 +119,7 @@ CFLAGS += -ffast-math -Werror=implicit-function-declaration CFLAGS += -Dstatic_assert=_Static_assert CFLAGS += -DWIIU -DMSB_FIRST CFLAGS += -DHAVE_MAIN -CFLAGS += -DRARCH_INTERNAL -DRARCH_CONSOLE -DSINC_LOWEST_QUALITY +CFLAGS += -DRARCH_INTERNAL -DRARCH_CONSOLE CFLAGS += -DHAVE_FILTERS_BUILTIN $(DEFINES) ifneq ($(PC_DEVELOPMENT_IP_ADDRESS),) @@ -140,54 +136,77 @@ ifeq ($(WHOLE_ARCHIVE_LINK), 1) endif CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -ifeq ($(RPX_BUILD), 1) - CFLAGS += -fno-builtin -ffreestanding -DRPX_BUILD - LIBDIRS += -L$(WUT_ROOT)/lib -L$(DEVKITPPC)/lib - LDFLAGS += -pie -fPIE - LDFLAGS += -z common-page-size=64 -z max-page-size=64 - LDFLAGS += -lcoreinit -lgx2 -lnsysnet -lproc_ui -lsndcore2 -lsysapp -lvpad - LDFLAGS += -T $(WUT_ROOT)/rules/rpl.ld -# LDFLAGS += -T wiiu/link_rpl.ld - LDFLAGS += -nostartfiles - -else - LDFLAGS += -T wiiu/link_elf.ld -endif - LDFLAGS += -Wl,--gc-sections LIBS := $(WHOLE_START) -lretro_wiiu $(WHOLE_END) -lm -ifeq ($(RPX_BUILD), 1) -all: $(TARGET).elf $(TARGET).rpx -else -all: $(TARGET).elf + +RPX_OBJ = wiiu/system/stubs_rpl.o +HBL_ELF_OBJ = wiiu/system/dynamic.o wiiu/system/stubs_elf.o + +RPX_LDFLAGS := -L$(WUT_ROOT)/lib -L$(DEVKITPPC)/lib +RPX_LDFLAGS += -pie -fPIE +RPX_LDFLAGS += -z common-page-size=64 -z max-page-size=64 +RPX_LDFLAGS += -T wiiu/link_rpl.ld +RPX_LDFLAGS += -nostartfiles + +HBL_ELF_LDFLAGS := -T wiiu/link_elf.ld + +TARGETS := +ifeq ($(BUILD_RPX), 1) +TARGETS += $(TARGET).rpx endif +ifeq ($(BUILD_HBL_ELF), 1) +TARGETS += $(TARGET).elf +endif + +DEPFLAGS = -MT $@ -MMD -MP -MF $*.Tdepend +POSTCOMPILE = mv -f $*.Tdepend $*.depend + + +all: $(TARGETS) + %.o: %.cpp - $(CXX) -c -o $@ $< $(CXXFLAGS) $(INCDIRS) +%.o: %.cpp %.depend + $(CXX) -c -o $@ $< $(CXXFLAGS) $(INCDIRS) $(DEPFLAGS) + $(POSTCOMPILE) %.o: %.c - $(CC) -c -o $@ $< $(CFLAGS) $(INCDIRS) +%.o: %.c %.depend + $(CC) -c -o $@ $< $(CFLAGS) $(INCDIRS) $(DEPFLAGS) + $(POSTCOMPILE) -%.o: %.s - $(CC) -c -o $@ $< $(ASFLAGS) %.o: %.S - $(CC) -c -o $@ $< $(ASFLAGS) +%.o: %.S %.depend + $(CC) -c -o $@ $< $(ASFLAGS) $(INCDIRS) $(DEPFLAGS) + $(POSTCOMPILE) +%.o: %.s +%.o: %.s %.depend + $(CC) -c -o $@ $< $(ASFLAGS) $(INCDIRS) $(DEPFLAGS) + $(POSTCOMPILE) %.a: $(AR) -rc $@ $^ -$(TARGET).elf: $(OBJ) libretro_wiiu.a wiiu/link_elf.ld wiiu/link_rpl.ld - $(LD) $(OBJ) $(LDFLAGS) $(LIBDIRS) $(LIBS) -o $@ +%.depend: ; -%.rpx: %.elf - $(ELF2RPL) $(notdir $<) $@ + +$(TARGET).elf: $(OBJ) $(HBL_ELF_OBJ) libretro_wiiu.a wiiu/link_elf.ld + $(LD) $(OBJ) $(HBL_ELF_OBJ) $(LDFLAGS) $(HBL_ELF_LDFLAGS) $(LIBDIRS) $(LIBS) -o $@ + +$(TARGET).rpx.elf: $(OBJ) $(RPX_OBJ) libretro_wiiu.a wiiu/link_elf.ld + $(LD) $(OBJ) $(RPX_OBJ) $(LDFLAGS) $(RPX_LDFLAGS) $(LIBDIRS) $(LIBS) -o $@ + +$(TARGET).rpx: $(TARGET).rpx.elf + -$(ELF2RPL) $(notdir $<) $@ clean: - rm -f $(OBJ) - rm -f $(TARGET).elf - rm -f $(TARGET).rpx + rm -f $(OBJ) $(RPX_OBJ) $(HBL_ELF_OBJ) $(TARGET).elf $(TARGET).rpx.elf $(TARGET).rpx + rm -f $(OBJ:.o=.depend) $(RPX_OBJ:.o=.depend) $(HBL_ELF_OBJ:.o=.depend) .PHONY: clean all +.PRECIOUS: %.depend + +-include $(OBJ:.o=.depend) $(RPX_OBJ:.o=.depend) $(HBL_ELF_OBJ:.o=.depend) diff --git a/README.md b/README.md index 2755808b48..14d74eb630 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,5 @@ [![Build Status](https://travis-ci.org/libretro/RetroArch.svg?branch=master)](https://travis-ci.org/libretro/RetroArch) - - Coverity Scan Build Status - +[![Coverity Scan Build Status](https://scan.coverity.com/projects/8936/badge.svg)](https://scan.coverity.com/projects/retroarch) # RetroArch @@ -24,11 +21,11 @@ interface to include support for emulators and/or game engines. libretro is comp ## Binaries -Latest Windows binaries are currently hosted on the buildbot -(http://buildbot.libretro.com/). +Latest Windows binaries are currently hosted on the [buildbot](http://buildbot.libretro.com/). ## Support -To reach developers, either make an issue here on Github, make a thread on the [forum](http://www.libretro.com/forums/), +To reach developers, either make an issue here on GitHub, make a thread on the [forum](http://www.libretro.com/forums/), or visit our IRC channel: #retroarch @ irc.freenode.org. ## Documentation @@ -57,7 +54,7 @@ RetroArch also emphasizes on being easy to integrate into various launcher front RetroArch has been ported to the following platforms outside PC: - - PlayStation3 + - PlayStation 3 - Xbox 360 (Libxenon/XeXDK) - Xbox 1 - Wii, Gamecube (Libogc) @@ -119,10 +116,10 @@ A sample configuration file is installed to /etc/retroarch.cfg. This is the syst RetroArch will on startup create a config file in $XDG\_CONFIG\_HOME/retroarch/retroarch.cfg if doesn't exist. Users only need to configure a certain option if the desired value deviates from the value defined in config.def.h. -To configure joypads, use the built-in menu or the retroarch-joyconfig command-line tool. +To configure joypads, use the built-in menu or the `retroarch-joyconfig` command-line tool. ## Compiling and installing -Linux
+**Linux** - Prerequisites: ```bash sudo apt-get install -y make git-core curl g++ pkg-config libglu1-mesa-dev freeglut3-dev mesa-common-dev libsdl1.2-dev libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev @@ -133,7 +130,7 @@ sudo apt-get install -y make git-core curl g++ pkg-config libglu1-mesa-dev freeg make ``` -Mac
+**Mac** - Prerequisites: [XCode](https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0CB4QFjAA&url=https%3A%2F%2Fitunes.apple.com%2Fus%2Fapp%2Fxcode%2Fid497799835%3Fmt%3D12&ei=ZmfeVNPtIILVoASBnoCYBw&usg=AFQjCNGrxKmVtXUdvUU3MhqZhP4MHT6Gtg&sig2=RIXKsWQ79YTQBt_lK5fdKA&bvm=bv.85970519,d.cGU), [Cg](https://developer.nvidia.com/cg-toolkit-download). - You can open the project (**pkg/apple/RetroArch.xcodeproj**) in the Xcode IDE and build (**⌘-B**) and run (**⌘-R**) it there. Or you can use the command line... - Debug: @@ -151,62 +148,62 @@ xcodebuild -target RetroArch -configuration Release -project pkg/apple/RetroArch open ./pkg/apple/build/Release/RetroArch.app/ ``` -PC
+**PC** Instructions for compiling on PC can be found in the [wiki](https://github.com/Themaister/RetroArch/wiki). -PlayStation3
+**PlayStation 3** RetroArch PS3 needs to be compiled in the following order: 1) Compile RetroArch Salamander -make -f Makefile.ps3.salamander + make -f Makefile.ps3.salamander 2) Finally, compile RetroArch packed together with the GUI: -make -f Makefile.ps3 + make -f Makefile.ps3 -PlayStation3 - Creating a PKG installable file
+**PlayStation 3 - Creating a PKG installable file** You can add `pkg` as a parameter in order to make a PKG file - for example: -make -f Makefile.ps3 pkg + make -f Makefile.ps3 pkg This creates an NPDRM package. This can be installed on debug PS3s. To make a non-NPDRM package that can be installed on a jailbroken/CFW PS3 (such as PSGroove or PS3 CFWs and other 3.55 CFW derivatives), do: -make -f Makefile.ps3 pkg-signed + make -f Makefile.ps3 pkg-signed If you're using Kmeaw 3.55 firmware, the package needs to be signed: -make -f Makefile.ps3 pkg-signed-cfw + make -f Makefile.ps3 pkg-signed-cfw -NOTE: A pre-existing libretro library needs to be present in the root directory in order to link RetroArch PS3. This file needs to be called `libretro_ps3.a`. +NOTE: A pre-existing libretro library needs to be present in the root directory in order to link RetroArch PS3. This file needs to be called ***`libretro_ps3.a`***. - Xbox 360 (XeXDK)
+**Xbox 360 (XeXDK)** You will need Microsoft Visual Studio 2010 installed (or higher) in order to compile RetroArch 360. The solution file can be found at the following location: -pkg/msvc-360/RetroArch-360.sln + pkg/msvc-360/RetroArch-360.sln NOTE: A pre-existing libretro library needs to be present in the `pkg/msvc-360/RetroArch-360/Release` directory in order to link RetroArch 360. This file needs to be -called `libretro_xdk360.lib`. +called ***`libretro_xdk360.lib`***. - Xbox 360 (Libxenon)
+**Xbox 360 (Libxenon)** You will need to have the libxenon libraries and a working Devkit Xenon toolchain installed in order to compile RetroArch 360 Libxenon. -make -f Makefile.xenon + make -f Makefile.xenon -NOTE: A pre-existing libretro library needs to be present in the root directory in order to link RetroArch 360 Libxenon. This file needs to be called `libretro_xenon360.a`. +NOTE: A pre-existing libretro library needs to be present in the root directory in order to link RetroArch 360 Libxenon. This file needs to be called ***`libretro_xenon360.a`***. - Wii
+**Wii** You will need to have the libogc libraries and a working Devkit PPC toolchain installed in order to compile RetroArch Wii. -make -f Makefile.griffin platform=wii + make -f Makefile.griffin platform=wii -NOTE: A pre-existing libretro library needs to be present in the root directory in order to link RetroArch Wii. This file needs to be called `libretro_wii.a`. +NOTE: A pre-existing libretro library needs to be present in the root directory in order to link RetroArch Wii. This file needs to be called ***`libretro_wii.a`***. diff --git a/audio/audio_driver.c b/audio/audio_driver.c index dd5b79b4b5..b951515f80 100644 --- a/audio/audio_driver.c +++ b/audio/audio_driver.c @@ -488,21 +488,22 @@ void audio_driver_set_nonblocking_state(bool enable) **/ static bool audio_driver_flush(const int16_t *data, size_t samples) { + struct resampler_data src_data; static struct retro_perf_counter resampler_proc = {0}; static struct retro_perf_counter audio_convert_s16 = {0}; - struct resampler_data src_data; - const void *output_data = NULL; - unsigned output_frames = 0; - size_t output_size = sizeof(float); - settings_t *settings = config_get_ptr(); + const void *output_data = NULL; + unsigned output_frames = 0; + size_t output_size = sizeof(float); + settings_t *settings = config_get_ptr(); - src_data.data_in = NULL; - src_data.data_out = NULL; - src_data.input_frames = 0; - src_data.output_frames = 0; - src_data.ratio = 0.0f; + src_data.data_in = NULL; + src_data.data_out = NULL; + src_data.input_frames = 0; + src_data.output_frames = 0; + src_data.ratio = 0.0f; - recording_push_audio(data, samples); + if (recording_data) + recording_push_audio(data, samples); if (runloop_ctl(RUNLOOP_CTL_IS_PAUSED, NULL) || settings->audio.mute_enable) return true; @@ -867,7 +868,7 @@ bool audio_driver_set_callback(const void *data) bool audio_driver_enable_callback(void) { - if (!audio_driver_has_callback()) + if (!audio_callback.callback) return false; if (audio_callback.set_state) audio_callback.set_state(true); @@ -876,7 +877,7 @@ bool audio_driver_enable_callback(void) bool audio_driver_disable_callback(void) { - if (!audio_driver_has_callback()) + if (!audio_callback.callback) return false; if (audio_callback.set_state) @@ -897,7 +898,7 @@ void audio_driver_monitor_set_rate(void) bool audio_driver_callback(void) { - if (!audio_driver_has_callback()) + if (!audio_callback.callback) return false; if (audio_callback.callback) @@ -955,10 +956,11 @@ void audio_driver_unset_callback(void) bool audio_driver_alive(void) { - if (!current_audio || !current_audio->alive - || !audio_driver_context_audio_data) - return false; - return current_audio->alive(audio_driver_context_audio_data); + if ( current_audio + && current_audio->alive + && audio_driver_context_audio_data) + return current_audio->alive(audio_driver_context_audio_data); + return false; } void audio_driver_frame_is_reverse(void) @@ -999,11 +1001,6 @@ void audio_driver_unset_active(void) audio_driver_active = false; } -bool audio_driver_is_active(void) -{ - return audio_driver_active; -} - void audio_driver_destroy(void) { audio_driver_active = false; diff --git a/audio/audio_driver.h b/audio/audio_driver.h index 16b3c6210f..507639933c 100644 --- a/audio/audio_driver.h +++ b/audio/audio_driver.h @@ -94,8 +94,6 @@ void audio_driver_set_active(void); void audio_driver_unset_active(void); -bool audio_driver_is_active(void); - void audio_driver_destroy(void); void audio_driver_deinit_resampler(void); diff --git a/audio/audio_filters/ChipTuneEnhance.dsp b/audio/audio_filters/ChipTuneEnhance.dsp new file mode 100644 index 0000000000..d45db3c586 --- /dev/null +++ b/audio/audio_filters/ChipTuneEnhance.dsp @@ -0,0 +1,22 @@ +filters = 4 +filter0 = eq +filter1 = reverb +filter2 = iir +filter3 = panning + +eq_frequencies = "32 64 125 250 500 1000 2000 4000 8000 16000 20000" +eq_gains = "6 9 12 7 6 5 7 9 11 6 0" + +# Reverb - slight reverb + reverb_drytime = 0.5 + reverb_wettime = 0.15 + reverb_damping = 0.8 + reverb_roomwidth = 0.25 + reverb_roomsize = 0.25 + +# IIR - filters out some harsh sounds on the upper end +iir_type = RIAA_CD + +# Panning - cut the volume a bit +panning_left_mix = "0.75 0.0" +panning_right_mix = "0.0 0.75" diff --git a/audio/drivers/jack.c b/audio/drivers/jack.c index ab3610b117..56331e8577 100644 --- a/audio/drivers/jack.c +++ b/audio/drivers/jack.c @@ -103,10 +103,11 @@ static void shutdown_cb(void *data) static int parse_ports(char **dest_ports, const char **jports) { int i; - char *save = NULL; - int parsed = 0; - settings_t *settings = config_get_ptr(); - const char *con = strtok_r(settings->audio.device, ",", &save); + char *save = NULL; + int parsed = 0; + settings_t *settings = config_get_ptr(); + char *audio_device_cpy = strdup(settings->audio.device); + const char *con = strtok_r(audio_device_cpy, ",", &save); if (con) dest_ports[parsed++] = strdup(con); @@ -117,6 +118,7 @@ static int parse_ports(char **dest_ports, const char **jports) for (i = parsed; i < 2; i++) dest_ports[i] = strdup(jports[i]); + free(audio_device_cpy); return 2; } diff --git a/audio/drivers/wiiu_audio.c b/audio/drivers/wiiu_audio.c index 297171f5fb..ea60e2cc58 100644 --- a/audio/drivers/wiiu_audio.c +++ b/audio/drivers/wiiu_audio.c @@ -1,5 +1,6 @@ /* RetroArch - A frontend for libretro. * Copyright (C) 2014-2016 - Ali Bouhlel + * Copyright (C) 2016 - FIX94 * * RetroArch is free software: you can redistribute it and/or modify it under the terms * of the GNU General Public License as published by the Free Software Found- @@ -25,10 +26,11 @@ #include #include #include - +#include #include "wiiu/wiiu_dbg.h" #include "wiiu/system/memory.h" +#include "wiiu/multivoice.h" #include "audio/audio_driver.h" #include "configuration.h" @@ -37,46 +39,50 @@ typedef struct { - AXVoice* voice_l; - AXVoice* voice_r; + AXMVoice* mvoice; uint16_t* buffer_l; uint16_t* buffer_r; bool nonblocking; uint32_t pos; + uint32_t written; + OSSpinLock spinlock; } ax_audio_t; -#define AX_AUDIO_COUNT_SHIFT 13u -#define AX_AUDIO_COUNT (1u << AX_AUDIO_COUNT_SHIFT) -#define AX_AUDIO_COUNT_MASK (AX_AUDIO_COUNT - 1u) +//3072 samples main buffer, 64ms total +#define AX_AUDIO_COUNT 3072 #define AX_AUDIO_SIZE (AX_AUDIO_COUNT << 1u) -#define AX_AUDIO_SIZE_MASK (AX_AUDIO_SIZE - 1u) -//#define AX_AUDIO_FRAME_COUNT 144 -#define AX_AUDIO_FRAME_COUNT 160 +#define AX_AUDIO_SAMPLE_COUNT 144 //3ms +#define AX_AUDIO_SAMPLE_MIN (AX_AUDIO_SAMPLE_COUNT * 3) //9ms +#define AX_AUDIO_SAMPLE_LOAD (AX_AUDIO_SAMPLE_COUNT * 10) //30ms +#define AX_AUDIO_MAX_FREE (AX_AUDIO_COUNT - (AX_AUDIO_SAMPLE_COUNT * 2)) #define AX_AUDIO_RATE 48000 //#define ax_audio_ticks_to_samples(ticks) (((ticks) * 64) / 82875) //#define ax_audio_samples_to_ticks(samples) (((samples) * 82875) / 64) -static inline int ax_diff(int v1, int v2) +static volatile ax_audio_t *wiiu_cb_ax = NULL; +void wiiu_ax_callback(void) { - return ((v1 - v2) << (32u - AX_AUDIO_COUNT_SHIFT)) >> (32u - AX_AUDIO_COUNT_SHIFT); -} + //possibly called before unregister + if(wiiu_cb_ax == NULL) + return; -AXResult ax_aux_callback(void* data, ax_audio_t* ax) -{ - AXVoiceOffsets offsets; - AXGetVoiceOffsets(ax->voice_l, &offsets); - - if (ax_diff(offsets.currentOffset, ax->pos) < 0) + ax_audio_t *ax = (ax_audio_t*)wiiu_cb_ax; + if(AXIsMultiVoiceRunning(ax->mvoice)) { - AXSetVoiceState(ax->voice_l, AX_VOICE_STATE_STOPPED); - AXSetVoiceState(ax->voice_r, AX_VOICE_STATE_STOPPED); + if(OSUninterruptibleSpinLock_Acquire(&ax->spinlock)) + { + //buffer underrun, stop playback to let it fill up + if(ax->written < AX_AUDIO_SAMPLE_MIN) + AXSetMultiVoiceState(ax->mvoice, AX_VOICE_STATE_STOPPED); + ax->written -= AX_AUDIO_SAMPLE_COUNT; + OSUninterruptibleSpinLock_Release(&ax->spinlock); + } } - - return AX_RESULT_SUCCESS; } +extern void AXRegisterFrameCallback(void *cb); static void* ax_audio_init(const char* device, unsigned rate, unsigned latency) { ax_audio_t* ax = (ax_audio_t*)calloc(1, sizeof(ax_audio_t)); @@ -88,10 +94,11 @@ static void* ax_audio_init(const char* device, unsigned rate, unsigned latency) AXInitWithParams(&init); - ax->voice_l = AXAcquireVoice(10, NULL, ax); - ax->voice_r = AXAcquireVoice(10, NULL, ax); + u16 setup_buf[0x30] = {0}; + setup_buf[0x25] = 2; //we request 2 channels + AXAcquireMultiVoice(31, NULL, 0, setup_buf, &ax->mvoice); - if (!ax->voice_l || !ax->voice_r) + if (!ax->mvoice || ax->mvoice->channels != 2) { free(ax); return NULL; @@ -99,44 +106,45 @@ static void* ax_audio_init(const char* device, unsigned rate, unsigned latency) ax->buffer_l = MEM1_alloc(AX_AUDIO_SIZE, 0x100); ax->buffer_r = MEM1_alloc(AX_AUDIO_SIZE, 0x100); + memset(ax->buffer_l,0,AX_AUDIO_SIZE); + memset(ax->buffer_r,0,AX_AUDIO_SIZE); + DCFlushRange(ax->buffer_l,AX_AUDIO_SIZE); + DCFlushRange(ax->buffer_r,AX_AUDIO_SIZE); - AXVoiceOffsets offsets; + //shared by both voices + AXVoiceOffsets offsets[2]; + offsets[0].currentOffset = 0; + offsets[0].loopOffset = 0; + offsets[0].endOffset = AX_AUDIO_COUNT - 1; + offsets[0].loopingEnabled = AX_VOICE_LOOP_ENABLED; + offsets[0].dataType = AX_VOICE_FORMAT_LPCM16; + memcpy(&offsets[1], &offsets[0], sizeof(AXVoiceOffsets)); - offsets.data = ax->buffer_l; - offsets.currentOffset = 0; - offsets.loopOffset = 0; - offsets.endOffset = AX_AUDIO_COUNT - 1; - offsets.loopingEnabled = AX_VOICE_LOOP_ENABLED; - offsets.dataType = AX_VOICE_FORMAT_LPCM16; - AXSetVoiceOffsets(ax->voice_l, &offsets); + //different buffers per voice + offsets[0].data = ax->buffer_l; + offsets[1].data = ax->buffer_r; + AXSetMultiVoiceOffsets(ax->mvoice, offsets); - offsets.data = ax->buffer_r; - AXSetVoiceOffsets(ax->voice_r, &offsets); + AXSetMultiVoiceSrcType(ax->mvoice, AX_VOICE_SRC_TYPE_NONE); + AXSetMultiVoiceSrcRatio(ax->mvoice, 1.0f); - AXSetVoiceSrcType(ax->voice_l, AX_VOICE_SRC_TYPE_NONE); - AXSetVoiceSrcType(ax->voice_r, AX_VOICE_SRC_TYPE_NONE); - AXSetVoiceSrcRatio(ax->voice_l, 1.0f); - AXSetVoiceSrcRatio(ax->voice_r, 1.0f); - AXVoiceVeData ve = {0x8000, 0}; - AXSetVoiceVe(ax->voice_l, &ve); - AXSetVoiceVe(ax->voice_r, &ve); - u32 mix[24] = {0}; - mix[0] = 0x80000000; - AXSetVoiceDeviceMix(ax->voice_l, AX_DEVICE_TYPE_DRC, 0, (AXVoiceDeviceMixData*)mix); - AXSetVoiceDeviceMix(ax->voice_l, AX_DEVICE_TYPE_TV, 0, (AXVoiceDeviceMixData*)mix); - mix[0] = 0; - mix[4] = 0x80000000; - AXSetVoiceDeviceMix(ax->voice_r, AX_DEVICE_TYPE_DRC, 0, (AXVoiceDeviceMixData*)mix); - AXSetVoiceDeviceMix(ax->voice_r, AX_DEVICE_TYPE_TV, 0, (AXVoiceDeviceMixData*)mix); + AXVoiceVeData ve = {0xF000, 0}; + AXSetMultiVoiceVe(ax->mvoice, &ve); - AXSetVoiceState(ax->voice_l, AX_VOICE_STATE_STOPPED); - AXSetVoiceState(ax->voice_r, AX_VOICE_STATE_STOPPED); + AXSetMultiVoiceDeviceMix(ax->mvoice, AX_DEVICE_TYPE_DRC, 0, 0, 0x8000, 0); + AXSetMultiVoiceDeviceMix(ax->mvoice, AX_DEVICE_TYPE_TV, 0, 0, 0x8000, 0); + + AXSetMultiVoiceState(ax->mvoice, AX_VOICE_STATE_STOPPED); ax->pos = 0; + ax->written = 0; config_get_ptr()->audio.out_rate = AX_AUDIO_RATE; - AXRegisterAuxCallback(AX_DEVICE_TYPE_DRC, 0, 0, (AXAuxCallback)ax_aux_callback, ax); + OSInitSpinLock(&ax->spinlock); + + wiiu_cb_ax = ax; + AXRegisterFrameCallback(wiiu_ax_callback); return ax; } @@ -144,115 +152,32 @@ static void* ax_audio_init(const char* device, unsigned rate, unsigned latency) static void ax_audio_free(void* data) { ax_audio_t* ax = (ax_audio_t*)data; + wiiu_cb_ax = NULL; - AXRegisterAuxCallback(AX_DEVICE_TYPE_DRC, 0, 0, NULL, NULL); + AXRegisterFrameCallback(NULL); + AXFreeMultiVoice(ax->mvoice); + AXQuit(); MEM1_free(ax->buffer_l); MEM1_free(ax->buffer_r); free(ax); - AXQuit(); -} - -static void ax_audio_buffer_write(ax_audio_t* ax, const uint16_t* src, int count) -{ - uint16_t* dst_l = ax->buffer_l + ax->pos; - uint16_t* dst_r = ax->buffer_r + ax->pos; - uint16_t* dst_l_max = ax->buffer_l + AX_AUDIO_COUNT; - - while(count-- && (dst_l < dst_l_max)) - { - *dst_l++ = *src++; - *dst_r++ = *src++; - } - DCFlushRange(ax->buffer_l + ax->pos, (dst_l - ax->pos - ax->buffer_l) << 1); - DCFlushRange(ax->buffer_r + ax->pos, (dst_r - ax->pos - ax->buffer_r) << 1); - - if(++count) - { - dst_l = ax->buffer_l; - dst_r = ax->buffer_r; - - while(count-- && (dst_l < dst_l_max)) - { - *dst_l++ = *src++; - *dst_r++ = *src++; - } - DCFlushRange(ax->buffer_l, (dst_l - ax->buffer_l) << 1); - DCFlushRange(ax->buffer_r, (dst_r - ax->buffer_r) << 1); - } - ax->pos = dst_l - ax->buffer_l; - ax->pos &= AX_AUDIO_COUNT_MASK; - -} - -static ssize_t ax_audio_write(void* data, const void* buf, size_t size) -{ - static struct retro_perf_counter ax_audio_write_perf = {0}; - ax_audio_t* ax = (ax_audio_t*)data; - const uint16_t* src = buf; - int i; - - performance_counter_init(&ax_audio_write_perf, "ax_audio_write"); - performance_counter_start(&ax_audio_write_perf); - - int count = size >> 2; - AXVoiceOffsets offsets; - AXGetVoiceOffsets(ax->voice_l, &offsets); - - if((((offsets.currentOffset - ax->pos) & AX_AUDIO_COUNT_MASK) < (AX_AUDIO_COUNT >> 2)) || - (((ax->pos - offsets.currentOffset ) & AX_AUDIO_COUNT_MASK) < (AX_AUDIO_COUNT >> 4)) || - (((offsets.currentOffset - ax->pos) & AX_AUDIO_COUNT_MASK) < (size >> 2))) - { - if (ax->nonblocking) - ax->pos = (offsets.currentOffset + (AX_AUDIO_COUNT >> 1)) & AX_AUDIO_COUNT_MASK; - else - { - do{ - retro_sleep(1); - AXGetVoiceOffsets(ax->voice_l, &offsets); - }while(AXIsVoiceRunning(ax->voice_l) && - (((offsets.currentOffset - ax->pos) & AX_AUDIO_COUNT_MASK) < (AX_AUDIO_COUNT >> 1) || - (((ax->pos - offsets.currentOffset) & AX_AUDIO_COUNT_MASK) < (AX_AUDIO_COUNT >> 4)))); - } - } - - -// ax_audio_buffer_write(ax, buf, count); - - for (i = 0; i < (size >> 1); i += 2) - { - ax->buffer_l[ax->pos] = src[i]; - ax->buffer_r[ax->pos] = src[i + 1]; - ax->pos++; - ax->pos &= AX_AUDIO_COUNT_MASK; - } - DCFlushRange(ax->buffer_l, AX_AUDIO_SIZE); - DCFlushRange(ax->buffer_r, AX_AUDIO_SIZE); - -// if(!AXIsVoiceRunning(ax->voice_l) && (((ax->pos - offsets.currentOffset) & AX_AUDIO_COUNT_MASK) > AX_AUDIO_FRAME_COUNT)) -// { - AXSetVoiceState(ax->voice_l, AX_VOICE_STATE_PLAYING); - AXSetVoiceState(ax->voice_r, AX_VOICE_STATE_PLAYING); -// } - - performance_counter_stop(&ax_audio_write_perf); - - return size; } static bool ax_audio_stop(void* data) { ax_audio_t* ax = (ax_audio_t*)data; - AXSetVoiceState(ax->voice_l, AX_VOICE_STATE_STOPPED); - AXSetVoiceState(ax->voice_r, AX_VOICE_STATE_STOPPED); + AXSetMultiVoiceState(ax->mvoice, AX_VOICE_STATE_STOPPED); return true; } -static bool ax_audio_alive(void* data) +static int ax_audio_limit(int in) { - ax_audio_t* ax = (ax_audio_t*)data; - return AXIsVoiceRunning(ax->voice_l); + if(in < 0) + in += AX_AUDIO_COUNT; + else if(in >= AX_AUDIO_COUNT) + in -= AX_AUDIO_COUNT; + return in; } static bool ax_audio_start(void* data) @@ -265,12 +190,110 @@ static bool ax_audio_start(void* data) if (runloop_ctl(RUNLOOP_CTL_IS_SHUTDOWN, NULL)) return true; - AXSetVoiceState(ax->voice_l, AX_VOICE_STATE_PLAYING); - AXSetVoiceState(ax->voice_r, AX_VOICE_STATE_PLAYING); - + //set back to playing on enough buffered data + if(ax->written > AX_AUDIO_SAMPLE_LOAD) + { + AXSetMultiVoiceCurrentOffset(ax->mvoice, ax_audio_limit(ax->pos - ax->written)); + AXSetMultiVoiceState(ax->mvoice, AX_VOICE_STATE_PLAYING); + } return true; } +static ssize_t ax_audio_write(void* data, const void* buf, size_t size) +{ + static struct retro_perf_counter ax_audio_write_perf = {0}; + ax_audio_t* ax = (ax_audio_t*)data; + const uint16_t* src = buf; + int i; + + if(!size || (size & 0x3)) + return 0; + + //measure copy performance from here + performance_counter_init(&ax_audio_write_perf, "ax_audio_write"); + performance_counter_start(&ax_audio_write_perf); + + int count = size >> 2; + + if(count > AX_AUDIO_MAX_FREE) + count = AX_AUDIO_MAX_FREE; + + size_t countAvail = (ax->written > AX_AUDIO_MAX_FREE ? 0 : (AX_AUDIO_MAX_FREE - ax->written)); + if (ax->nonblocking) + { + //not enough available for 3ms of data + if(countAvail < AX_AUDIO_SAMPLE_COUNT) + count = 0; + } + else if(countAvail < count) + { + //sync, wait for free memory + while(AXIsMultiVoiceRunning(ax->mvoice) && (countAvail < count)) + { + OSYieldThread(); //gives threads with same priority time to run + countAvail = (ax->written > AX_AUDIO_MAX_FREE ? 0 : (AX_AUDIO_MAX_FREE - ax->written)); + } + } + //over available space, do as much as possible + if(count > countAvail) + count = countAvail; + //make sure we have input size + if(count > 0) + { + //write in new data + size_t startPos = ax->pos; + int flushP2needed = 0; + int flushP2 = 0; + for (i = 0; i < (count << 1); i += 2) + { + ax->buffer_l[ax->pos] = src[i]; + ax->buffer_r[ax->pos] = src[i + 1]; + ax->pos = ax_audio_limit(ax->pos + 1); + //wrapped around, make sure to store cache + if(ax->pos == 0) + { + flushP2needed = 1; + flushP2 = ((count << 1) - i); + DCStoreRangeNoSync(ax->buffer_l+startPos, (AX_AUDIO_COUNT-startPos) << 1); + DCStoreRangeNoSync(ax->buffer_r+startPos, (AX_AUDIO_COUNT-startPos) << 1); + } + } + //standard cache store case + if(!flushP2needed) + { + DCStoreRangeNoSync(ax->buffer_l+startPos, count << 1); + DCStoreRange(ax->buffer_r+startPos, count << 1); + } //store the rest after wrap + else if(flushP2 > 0) + { + DCStoreRangeNoSync(ax->buffer_l, flushP2); + DCStoreRange(ax->buffer_r, flushP2); + } + //add in new audio data + if(OSUninterruptibleSpinLock_Acquire(&ax->spinlock)) + { + ax->written += count; + OSUninterruptibleSpinLock_Release(&ax->spinlock); + } + } + //possibly buffer underrun + if(!AXIsMultiVoiceRunning(ax->mvoice)) + { + //checks if it can be started + ax_audio_start(ax); + } + //done copying new data + performance_counter_stop(&ax_audio_write_perf); + //return what was actually copied + return (count << 2); +} + +static bool ax_audio_alive(void* data) +{ + ax_audio_t* ax = (ax_audio_t*)data; + return AXIsMultiVoiceRunning(ax->mvoice); +} + static void ax_audio_set_nonblock_state(void* data, bool state) { ax_audio_t* ax = (ax_audio_t*)data; @@ -289,10 +312,9 @@ static size_t ax_audio_write_avail(void* data) { ax_audio_t* ax = (ax_audio_t*)data; - AXVoiceOffsets offsets; - AXGetVoiceOffsets(ax->voice_l, &offsets); + size_t ret = AX_AUDIO_COUNT - ax->written; - return (offsets.currentOffset - ax->pos) & AX_AUDIO_COUNT_MASK; + return (ret < AX_AUDIO_SAMPLE_COUNT ? 0 : ret); } static size_t ax_audio_buffer_size(void* data) diff --git a/cheevos.c b/cheevos.c index dcf9f77015..11bc2fd9ab 100644 --- a/cheevos.c +++ b/cheevos.c @@ -18,6 +18,7 @@ #include #include +#include #include #include @@ -62,6 +63,10 @@ * from retroachievements.org. */ #undef CHEEVOS_JSON_OVERRIDE +/* Define this macro to have the password and token logged. THIS WILL DISCLOSE + * THE USER'S PASSWORD, TAKE CARE! */ +#undef CHEEVOS_LOG_PASSWORD + /* C89 wants only int values in enums. */ #define CHEEVOS_JSON_KEY_GAMEID 0xb4960eecU #define CHEEVOS_JSON_KEY_ACHIEVEMENTS 0x69749ae1U @@ -268,7 +273,6 @@ typedef struct typedef struct { - int loaded; int console_id; bool core_supports; @@ -280,9 +284,9 @@ typedef struct retro_ctx_memory_info_t meminfo[4]; } cheevos_locals_t; + static cheevos_locals_t cheevos_locals = { - 0, 0, true, {NULL, 0}, @@ -290,13 +294,74 @@ static cheevos_locals_t cheevos_locals = {0} }; -static int cheats_are_enabled = 0; -static int cheats_were_enabled = 0; +bool cheevos_loaded = false; +int cheats_are_enabled = 0; +int cheats_were_enabled = 0; /***************************************************************************** Supporting functions. *****************************************************************************/ +#ifdef CHEEVOS_LOG_URLS +static void cheevos_log_url(const char* format, const char* url) +{ +#ifdef CHEEVOS_LOG_PASSWORD + RARCH_LOG(format, url); +#else + char copy[256]; + char* aux; + char* next; + + strlcpy(copy, url, sizeof(copy)); + aux = strstr(copy, "?p="); + + if (aux == NULL) + aux = strstr(copy, "&p="); + + if (aux != NULL) + { + aux += 3; + next = strchr(aux, '&'); + + if (next != NULL) + { + do + { + *aux++ = *next++; + } + while (next[-1] != 0); + } + else + *aux = 0; + } + + aux = strstr(copy, "?t="); + + if (aux == NULL) + aux = strstr(copy, "&t="); + + if (aux != NULL) + { + aux += 3; + next = strchr(aux, '&'); + + if (next != NULL) + { + do + { + *aux++ = *next++; + } + while (next[-1] != 0); + } + else + *aux = 0; + } + + RARCH_LOG(format, copy); +#endif +} +#endif + #ifdef CHEEVOS_VERBOSE static void cheevos_add_char(char** aux, size_t* left, char k) { @@ -396,17 +461,6 @@ static void cheevos_log_cond(const cheevos_cond_t* cond) static void cheevos_log_cheevo(const cheevo_t* cheevo, const cheevos_field_t* memaddr_ud) { - char memaddr[256]; - size_t length; - - length = memaddr_ud->length + 1; - - if (length >= sizeof(memaddr)) - length = sizeof(memaddr); - - strncpy(memaddr, memaddr_ud->string, length - 1); - memaddr[length - 1] = 0; - RARCH_LOG("CHEEVOS cheevo %p\n", cheevo); RARCH_LOG("CHEEVOS id: %u\n", cheevo->id); RARCH_LOG("CHEEVOS title: %s\n", cheevo->title); @@ -415,7 +469,7 @@ static void cheevos_log_cheevo(const cheevo_t* cheevo, RARCH_LOG("CHEEVOS badge: %s\n", cheevo->badge); RARCH_LOG("CHEEVOS points: %u\n", cheevo->points); RARCH_LOG("CHEEVOS sets: TBD\n"); - RARCH_LOG("CHEEVOS memaddr: %s\n", memaddr); + RARCH_LOG("CHEEVOS memaddr: %.*s\n", (int)memaddr_ud->length, memaddr_ud->string); } static void cheevos_add_var_size(char** aux, size_t* left, @@ -687,8 +741,7 @@ static int cheevos_get_value(const char *json, unsigned key_hash, if ((jsonsax_parse(json, &handlers, (void*)&ud) == JSONSAX_OK) && ud.value && ud.length < length) { - strncpy(value, ud.value, length); - value[ud.length] = 0; + strlcpy(value, ud.value, ud.length + 1); return 0; } @@ -919,9 +972,8 @@ void cheevos_parse_guest_addr(cheevos_var_t *var, unsigned value) switch (cheevos_locals.console_id) { + /* Patch the address to correctly map it to the mmaps */ case CHEEVOS_CONSOLE_GAMEBOY_ADVANCE: - /* Patch the address to correctly map it to the mmaps */ - if (var->value < 0x8000) /* Internal RAM */ var->value += 0x3000000; else /* Work RAM */ @@ -930,6 +982,15 @@ void cheevos_parse_guest_addr(cheevos_var_t *var, unsigned value) case CHEEVOS_CONSOLE_PC_ENGINE: var->value += 0x1f0000; break; + case CHEEVOS_CONSOLE_SUPER_NINTENDO: + if (var->value < 0x020000) /* Work RAM */ + var->value += 0x7e0000; + else /* Save RAM */ + { + var->value -= 0x020000; + var->value += 0x006000; + } + break; default: break; } @@ -1445,18 +1506,25 @@ Test all the achievements (call once per frame). uint8_t *cheevos_get_memory(const cheevos_var_t *var) { + uint8_t *memory; + if (var->bank_id >= 0) { rarch_system_info_t *system; runloop_ctl(RUNLOOP_CTL_SYSTEM_INFO_GET, &system); if (system->mmaps.num_descriptors != 0) - return (uint8_t *)system->mmaps.descriptors[var->bank_id].core.ptr + var->value; - - return (uint8_t *)cheevos_locals.meminfo[var->bank_id].data + var->value; + memory = (uint8_t *)system->mmaps.descriptors[var->bank_id].core.ptr; + else + memory = (uint8_t *)cheevos_locals.meminfo[var->bank_id].data; + + if (memory) + memory += var->value; } - - return NULL; + else + memory = NULL; + + return memory; } static unsigned cheevos_get_var_value(cheevos_var_t *var) @@ -1781,7 +1849,7 @@ static int cheevos_login(retro_time_t *timeout) request[sizeof(request) - 1] = 0; #ifdef CHEEVOS_LOG_URLS - RARCH_LOG("CHEEVOS url to login: %s\n", request); + cheevos_log_url("CHEEVOS url to login: %s\n", request); #endif if (!cheevos_http_get(&json, NULL, request, timeout)) @@ -1797,9 +1865,6 @@ static int cheevos_login(retro_time_t *timeout) runloop_msg_queue_push("Retro Achievements login error.", 0, 5 * 60, false); - runloop_msg_queue_push( - "Please make sure your account information is correct.", - 0, 5 * 60, false); RARCH_ERR("CHEEVOS error getting user token.\n"); return -1; } @@ -1818,7 +1883,7 @@ static void cheevos_make_unlock_url(const cheevo_t *cheevo, char* url, size_t ur url[url_size - 1] = 0; #ifdef CHEEVOS_LOG_URLS - RARCH_LOG("CHEEVOS url to award the cheevo: %s\n", url); + cheevos_log_url("CHEEVOS url to award the cheevo: %s\n", url); #endif } @@ -1942,7 +2007,7 @@ static int cheevos_get_by_game_id(const char **json, request[sizeof(request) - 1] = 0; #ifdef CHEEVOS_LOG_URLS - RARCH_LOG("CHEEVOS url to get the list of cheevos: %s\n", request); + cheevos_log_url("CHEEVOS url to get the list of cheevos: %s\n", request); #endif if (!cheevos_http_get(json, NULL, request, timeout)) @@ -1987,7 +2052,7 @@ static unsigned cheevos_get_game_id(unsigned char *hash, retro_time_t *timeout) request[sizeof(request) - 1] = 0; #ifdef CHEEVOS_LOG_URLS - RARCH_LOG("CHEEVOS url to get the game's id: %s\n", request); + cheevos_log_url("CHEEVOS url to get the game's id: %s\n", request); #endif if (!cheevos_http_get(&json, NULL, request, timeout)) @@ -2021,7 +2086,7 @@ static void cheevos_make_playing_url(unsigned game_id, char* url, size_t url_siz url[url_size - 1] = 0; #ifdef CHEEVOS_LOG_URLS - RARCH_LOG("CHEEVOS url to post the 'playing' activity: %s\n", url); + cheevos_log_url("CHEEVOS url to post the 'playing' activity: %s\n", url); #endif } @@ -2148,7 +2213,7 @@ static int cheevos_deactivate_unlocks(unsigned game_id, retro_time_t *timeout) request[sizeof(request) - 1] = 0; #ifdef CHEEVOS_LOG_URLS - RARCH_LOG("CHEEVOS url to get the list of unlocked cheevos in softcore: %s\n", request); + cheevos_log_url("CHEEVOS url to get the list of unlocked cheevos in softcore: %s\n", request); #endif if (!cheevos_http_get(&json, NULL, request, timeout)) @@ -2177,7 +2242,7 @@ static int cheevos_deactivate_unlocks(unsigned game_id, retro_time_t *timeout) request[sizeof(request) - 1] = 0; #ifdef CHEEVOS_LOG_URLS - RARCH_LOG("CHEEVOS url to get the list of unlocked cheevos in hardcore: %s\n", request); + cheevos_log_url("CHEEVOS url to get the list of unlocked cheevos in hardcore: %s\n", request); #endif if (!cheevos_http_get(&json, NULL, request, timeout)) @@ -2244,13 +2309,10 @@ static size_t cheevos_eval_md5( size_t size = 0; RFILE *file = filestream_open(info->path, RFILE_MODE_READ, 0); - filestream_seek(file, offset, SEEK_SET); - if (!file) return 0; - if (max_size == 0) - max_size = (size_t)-1; + filestream_seek(file, offset, SEEK_SET); for (;;) { @@ -2258,7 +2320,7 @@ static size_t cheevos_eval_md5( ssize_t num_read; size_t to_read = sizeof(buffer); - if (to_read > max_size) + if (max_size != 0 && to_read > max_size) to_read = max_size; num_read = filestream_read(file, (void*)buffer, to_read); @@ -2268,7 +2330,14 @@ static size_t cheevos_eval_md5( MD5_Update(ctx, (void*)buffer, num_read); size += num_read; - max_size -= num_read; + + if (max_size != 0) + { + max_size -= num_read; + + if (max_size == 0) + break; + } } filestream_close(file); @@ -2328,9 +2397,10 @@ static unsigned cheevos_find_game_id_snes( return 0; } - cheevos_fill_md5(CHEEVOS_EIGHT_MB - count, 0, &ctx); + if (count < CHEEVOS_EIGHT_MB) + cheevos_fill_md5(CHEEVOS_EIGHT_MB - count, 0, &ctx); + MD5_Final(hash, &ctx); - return cheevos_get_game_id(hash, &timeout); } @@ -2347,9 +2417,10 @@ static unsigned cheevos_find_game_id_genesis( return 0; } - cheevos_fill_md5(CHEEVOS_SIX_MB - count, 0, &ctx); + if (count < CHEEVOS_SIX_MB) + cheevos_fill_md5(CHEEVOS_SIX_MB - count, 0, &ctx); + MD5_Final(hash, &ctx); - return cheevos_get_game_id(hash, &timeout); } @@ -2487,7 +2558,7 @@ bool cheevos_load(const void *data) url[0] = '\0'; - cheevos_locals.loaded = 0; + cheevos_loaded = 0; /* Just return OK if the core doesn't support cheevos, or info is NULL. */ if (!cheevos_locals.core_supports || !info) @@ -2505,7 +2576,6 @@ bool cheevos_load(const void *data) cheevos_locals.meminfo[3].id = RETRO_MEMORY_RTC; core_get_memory(&cheevos_locals.meminfo[3]); -#ifdef CHEEVOS_VERBOSE RARCH_LOG("CHEEVOS system RAM: %p %u\n", cheevos_locals.meminfo[0].data, cheevos_locals.meminfo[0].size); RARCH_LOG("CHEEVOS save RAM: %p %u\n", @@ -2514,7 +2584,6 @@ bool cheevos_load(const void *data) cheevos_locals.meminfo[2].data, cheevos_locals.meminfo[2].size); RARCH_LOG("CHEEVOS RTC: %p %u\n", cheevos_locals.meminfo[3].data, cheevos_locals.meminfo[3].size); -#endif /* Bail out if cheevos are disabled. * But set the above anyways, command_read_ram needs it. */ @@ -2600,14 +2669,14 @@ found: fclose(file); } #else - if (!cheevos_get_by_game_id(&json, game_id, &timeout)) + if (cheevos_get_by_game_id(&json, game_id, &timeout) == 0 && json != NULL) #endif { if (!cheevos_parse(json)) { cheevos_deactivate_unlocks(game_id, &timeout); free((void*)json); - cheevos_locals.loaded = 1; + cheevos_loaded = true; cheevos_make_playing_url(game_id, url, sizeof(url)); task_push_http_transfer(url, true, NULL, @@ -2629,17 +2698,13 @@ void cheevos_reset_game(void) const cheevo_t *end = cheevo + cheevos_locals.core.count; for (; cheevo < end; cheevo++) - { cheevo->last = 1; - } cheevo = cheevos_locals.unofficial.cheevos; end = cheevo + cheevos_locals.unofficial.count; for (; cheevo < end; cheevo++) - { cheevo->last = 1; - } } void cheevos_populate_menu(void *data, bool hardcore) @@ -2757,9 +2822,7 @@ bool cheevos_get_description(cheevos_ctx_desc_t *desc) desc->idx -= cheevos_locals.unofficial.count; } - strncpy(desc->s, cheevos[desc->idx].description, desc->len); - desc->s[desc->len - 1] = 0; - + strlcpy(desc->s, cheevos[desc->idx].description, desc->len); return true; } @@ -2773,13 +2836,13 @@ bool cheevos_apply_cheats(bool *data_bool) bool cheevos_unload(void) { - if (!cheevos_locals.loaded) + if (!cheevos_loaded) return false; cheevos_free_cheevo_set(&cheevos_locals.core); cheevos_free_cheevo_set(&cheevos_locals.unofficial); - cheevos_locals.loaded = 0; + cheevos_loaded = false; return true; } @@ -2809,28 +2872,18 @@ bool cheevos_toggle_hardcore_mode(void) return true; } -bool cheevos_test(void) +void cheevos_test(void) { - if (!cheevos_locals.loaded) - return false; + settings_t *settings = config_get_ptr(); - if (!cheats_are_enabled && !cheats_were_enabled) - { - settings_t *settings = config_get_ptr(); - if (!settings->cheevos.enable) - return false; + cheevos_test_cheevo_set(&cheevos_locals.core); - cheevos_test_cheevo_set(&cheevos_locals.core); - - if (settings->cheevos.test_unofficial) - cheevos_test_cheevo_set(&cheevos_locals.unofficial); + if (settings->cheevos.test_unofficial) + cheevos_test_cheevo_set(&cheevos_locals.unofficial); #if 0 - cheevos_test_leaderboards(); + cheevos_test_leaderboards(); #endif - } - - return true; } bool cheevos_set_cheats(void) diff --git a/cheevos.h b/cheevos.h index 7c350460a9..6594105ac3 100644 --- a/cheevos.h +++ b/cheevos.h @@ -53,7 +53,7 @@ bool cheevos_unload(void); bool cheevos_toggle_hardcore_mode(void); -bool cheevos_test(void); +void cheevos_test(void); bool cheevos_set_cheats(void); @@ -65,6 +65,10 @@ void cheevos_parse_guest_addr(cheevos_var_t *var, unsigned value); uint8_t *cheevos_get_memory(const cheevos_var_t *var); +extern bool cheevos_loaded; +extern int cheats_are_enabled; +extern int cheats_were_enabled; + RETRO_END_DECLS #endif /* __RARCH_CHEEVOS_H */ diff --git a/command.c b/command.c index 24de060f86..7f2193bcaf 100644 --- a/command.c +++ b/command.c @@ -294,6 +294,7 @@ static const struct cmd_map map[] = { { "DISK_NEXT", RARCH_DISK_NEXT }, { "DISK_PREV", RARCH_DISK_PREV }, { "GRAB_MOUSE_TOGGLE", RARCH_GRAB_MOUSE_TOGGLE }, + { "GAME_FOCUS_TOGGLE", RARCH_GAME_FOCUS_TOGGLE }, { "MENU_TOGGLE", RARCH_MENU_TOGGLE }, { "MENU_UP", RETRO_DEVICE_ID_JOYPAD_UP }, { "MENU_DOWN", RETRO_DEVICE_ID_JOYPAD_DOWN }, @@ -1899,7 +1900,7 @@ bool command_event(enum event_command cmd, void *data) settings->state_slot++; break; case CMD_EVENT_TAKE_SCREENSHOT: - if (!take_screenshot()) + if (!take_screenshot(path_get(RARCH_PATH_BASENAME), false)) return false; break; case CMD_EVENT_UNLOAD_CORE: @@ -1936,6 +1937,7 @@ bool command_event(enum event_command cmd, void *data) video_driver_reinit(); /* Poll input to avoid possibly stale data to corrupt things. */ input_driver_poll(); + command_event(CMD_EVENT_GAME_FOCUS_TOGGLE, (void *) -1); #ifdef HAVE_MENU menu_display_set_framebuffer_dirty_flag(); @@ -2034,7 +2036,8 @@ bool command_event(enum event_command cmd, void *data) break; case CMD_EVENT_OVERLAY_DEINIT: #ifdef HAVE_OVERLAY - input_overlay_free(); + input_overlay_free(overlay_ptr); + overlay_ptr = NULL; #endif break; case CMD_EVENT_OVERLAY_INIT: @@ -2046,7 +2049,7 @@ bool command_event(enum event_command cmd, void *data) break; case CMD_EVENT_OVERLAY_NEXT: #ifdef HAVE_OVERLAY - input_overlay_next(settings->input.overlay_opacity); + input_overlay_next(overlay_ptr, settings->input.overlay_opacity); #endif break; case CMD_EVENT_DSP_FILTER_DEINIT: @@ -2184,17 +2187,17 @@ bool command_event(enum event_command cmd, void *data) break; case CMD_EVENT_OVERLAY_SET_SCALE_FACTOR: #ifdef HAVE_OVERLAY - input_overlay_set_scale_factor(NULL, settings->input.overlay_scale); + input_overlay_set_scale_factor(overlay_ptr, settings->input.overlay_scale); #endif break; case CMD_EVENT_OVERLAY_SET_ALPHA_MOD: #ifdef HAVE_OVERLAY - input_overlay_set_alpha_mod(settings->input.overlay_opacity); + input_overlay_set_alpha_mod(overlay_ptr, settings->input.overlay_opacity); #endif break; case CMD_EVENT_AUDIO_REINIT: { - int flags = DRIVER_AUDIO; + int flags = DRIVER_AUDIO_MASK; driver_ctl(RARCH_DRIVER_CTL_UNINIT, &flags); driver_ctl(RARCH_DRIVER_CTL_INIT, &flags); } @@ -2358,7 +2361,7 @@ bool command_event(enum event_command cmd, void *data) command_event(CMD_EVENT_NETPLAY_DEINIT, NULL); #ifdef HAVE_NETWORKING if (!init_netplay( - settings->netplay.is_spectate, settings->netplay.server, + settings->netplay.is_spectate, data, settings->netplay.server, settings->netplay.port)) return false; #endif @@ -2494,6 +2497,47 @@ bool command_event(enum event_command cmd, void *data) video_driver_show_mouse(); } break; + case CMD_EVENT_GAME_FOCUS_TOGGLE: + { + static bool game_focus_state = false; + long int mode = (long int)data; + + /* mode = -1: restores current game focus state + * mode = 1: force set game focus, instead of toggling + * any other: toggle + */ + if (mode == 1) + game_focus_state = true; + else if (mode != -1) + game_focus_state = !game_focus_state; + + RARCH_LOG("%s: %s.\n", + "Game focus is: ", + game_focus_state ? "on" : "off"); + + if (game_focus_state) + { + input_driver_grab_mouse(); + video_driver_hide_mouse(); + input_driver_set_hotkey_block(); + input_driver_keyboard_mapping_set_block(1); + if (mode != -1) + runloop_msg_queue_push(msg_hash_to_str(MSG_GAME_FOCUS_ON), + 1, 120, true); + } + else + { + input_driver_ungrab_mouse(); + video_driver_show_mouse(); + input_driver_unset_hotkey_block(); + input_driver_keyboard_mapping_set_block(0); + if (mode != -1) + runloop_msg_queue_push(msg_hash_to_str(MSG_GAME_FOCUS_OFF), + 1, 120, true); + } + + } + break; case CMD_EVENT_PERFCNT_REPORT_FRONTEND_LOG: rarch_perf_log(); break; diff --git a/command.h b/command.h index 74bf5ad822..4c47cd5224 100644 --- a/command.h +++ b/command.h @@ -204,6 +204,8 @@ enum event_command CMD_EVENT_RUMBLE_STOP, /* Toggles mouse grab. */ CMD_EVENT_GRAB_MOUSE_TOGGLE, + /* Toggles game focus. */ + CMD_EVENT_GAME_FOCUS_TOGGLE, /* Toggles fullscreen mode. */ CMD_EVENT_FULLSCREEN_TOGGLE, CMD_EVENT_PERFCNT_REPORT_FRONTEND_LOG, diff --git a/config.def.h b/config.def.h index 625ae215fa..cc7fd22b1f 100644 --- a/config.def.h +++ b/config.def.h @@ -25,9 +25,9 @@ #include "config.h" #endif -enum +enum video_driver_enum { - VIDEO_GL = 0, + VIDEO_GL = 0, VIDEO_VULKAN, VIDEO_DRM, VIDEO_XVIDEO, @@ -43,13 +43,16 @@ enum VIDEO_CTR, VIDEO_D3D9, VIDEO_VG, - VIDEO_NULL, VIDEO_OMAP, VIDEO_EXYNOS, VIDEO_SUNXI, VIDEO_DISPMANX, + VIDEO_NULL +}; - AUDIO_RSOUND, +enum audio_driver_enum +{ + AUDIO_RSOUND = VIDEO_NULL + 1, AUDIO_OSS, AUDIO_ALSA, AUDIO_ALSATHREAD, @@ -71,13 +74,20 @@ enum AUDIO_RWEBAUDIO, AUDIO_PSP, AUDIO_CTR, - AUDIO_NULL, + AUDIO_NULL +}; - AUDIO_RESAMPLER_CC, +enum audio_resampler_driver_enum +{ + AUDIO_RESAMPLER_CC = AUDIO_NULL + 1, AUDIO_RESAMPLER_SINC, AUDIO_RESAMPLER_NEAREST, + AUDIO_RESAMPLER_NULL +}; - INPUT_ANDROID, +enum input_driver_enum +{ + INPUT_ANDROID = AUDIO_RESAMPLER_NULL + 1, INPUT_SDL, INPUT_SDL2, INPUT_X, @@ -95,9 +105,12 @@ enum INPUT_COCOA, INPUT_QNX, INPUT_RWEBINPUT, - INPUT_NULL, + INPUT_NULL +}; - JOYPAD_PS3, +enum joypad_driver_enum +{ + JOYPAD_PS3 = INPUT_NULL + 1, JOYPAD_XINPUT, JOYPAD_GX, JOYPAD_WIIU, @@ -111,31 +124,50 @@ enum JOYPAD_SDL, JOYPAD_HID, JOYPAD_QNX, - JOYPAD_NULL, + JOYPAD_NULL +}; - CAMERA_V4L2, +enum camera_driver_enum +{ + CAMERA_V4L2 = JOYPAD_NULL + 1, CAMERA_RWEBCAM, CAMERA_ANDROID, CAMERA_AVFOUNDATION, - CAMERA_NULL, + CAMERA_NULL +}; - WIFI_CONNMANCTL, - WIFI_NULL, +enum wifi_driver_enum +{ + WIFI_CONNMANCTL = CAMERA_NULL + 1, + WIFI_NULL +}; - LOCATION_ANDROID, +enum location_driver_enum +{ + LOCATION_ANDROID = WIFI_NULL + 1, LOCATION_CORELOCATION, - LOCATION_NULL, + LOCATION_NULL +}; - OSK_PS3, - OSK_NULL, +enum osk_driver_enum +{ + OSK_PS3 = LOCATION_NULL + 1, + OSK_NULL +}; - MENU_RGUI, +enum menu_driver_enum +{ + MENU_RGUI = OSK_NULL + 1, MENU_XUI, MENU_MATERIALUI, MENU_XMB, MENU_NUKLEAR, + MENU_NULL +}; - RECORD_FFMPEG, +enum record_driver_enum +{ + RECORD_FFMPEG = MENU_NULL + 1, RECORD_NULL }; @@ -191,12 +223,12 @@ enum #define AUDIO_DEFAULT_DRIVER AUDIO_PSP #elif defined(_3DS) #define AUDIO_DEFAULT_DRIVER AUDIO_CTR +#elif defined(HAVE_PULSE) +#define AUDIO_DEFAULT_DRIVER AUDIO_PULSE #elif defined(HAVE_ALSA) && defined(HAVE_VIDEOCORE) #define AUDIO_DEFAULT_DRIVER AUDIO_ALSATHREAD #elif defined(HAVE_ALSA) #define AUDIO_DEFAULT_DRIVER AUDIO_ALSA -#elif defined(HAVE_PULSE) -#define AUDIO_DEFAULT_DRIVER AUDIO_PULSE #elif defined(HAVE_OSS) #define AUDIO_DEFAULT_DRIVER AUDIO_OSS #elif defined(HAVE_JACK) @@ -351,8 +383,10 @@ enum #define MENU_DEFAULT_DRIVER MENU_MATERIALUI #elif defined(HAVE_XMB) #define MENU_DEFAULT_DRIVER MENU_XMB -#else +#elif defined(HAVE_RGUI) #define MENU_DEFAULT_DRIVER MENU_RGUI +#else +#define MENU_DEFAULT_DRIVER MENU_NULL #endif #if defined(XENON) || defined(_XBOX360) || defined(__CELLOS_LV2__) @@ -421,6 +455,12 @@ static const bool windowed_fullscreen = true; * specific monitors, 1 being the first monitor. */ static const unsigned monitor_index = 0; +/* Window */ +/* Window size. A value of 0 uses window scale + * multiplied by the core framebuffer size. */ +static const unsigned window_x = 0; +static const unsigned window_y = 0; + /* Fullscreen resolution. A value of 0 uses the desktop * resolution. */ static const unsigned fullscreen_x = 0; @@ -431,7 +471,7 @@ static const bool load_dummy_on_core_shutdown = false; #else static const bool load_dummy_on_core_shutdown = true; #endif - +static const bool check_firmware_before_loading = false; /* Forcibly disable composition. * Only valid on Windows Vista/7/8 for now. */ static const bool disable_composition = false; @@ -599,14 +639,6 @@ static bool default_auto_shaders_enable = true; static bool default_sort_savefiles_enable = false; static bool default_sort_savestates_enable = false; -static unsigned default_menu_btn_ok = RETRO_DEVICE_ID_JOYPAD_A; -static unsigned default_menu_btn_cancel = RETRO_DEVICE_ID_JOYPAD_B; -static unsigned default_menu_btn_search = RETRO_DEVICE_ID_JOYPAD_X; -static unsigned default_menu_btn_default = RETRO_DEVICE_ID_JOYPAD_START; -static unsigned default_menu_btn_info = RETRO_DEVICE_ID_JOYPAD_SELECT; -static unsigned default_menu_btn_scroll_down = RETRO_DEVICE_ID_JOYPAD_R; -static unsigned default_menu_btn_scroll_up = RETRO_DEVICE_ID_JOYPAD_L; - #if defined(__CELLOS_LV2__) || defined(_XBOX1) || defined(_XBOX360) static unsigned menu_toggle_gamepad_combo = INPUT_TOGGLE_L3_R3; #elif defined(VITA) @@ -620,12 +652,14 @@ static unsigned input_backtouch_enable = false; static unsigned input_backtouch_toggle = false; #endif -#ifdef ANDROID -static bool back_as_menu_toggle_enable = true; -#endif - static bool all_users_control_menu = false; +#if defined(ANDROID) || defined(_WIN32) +static bool menu_swap_ok_cancel_buttons = true; +#else +static bool menu_swap_ok_cancel_buttons = false; +#endif + /* Crop overscanned frames. */ static const bool crop_overscan = true; @@ -764,6 +798,10 @@ static const unsigned autosave_interval = 0; * user 1 rather than user 2. */ static const bool netplay_client_swap_input = true; +static const unsigned netplay_delay_frames = 16; + +static const unsigned netplay_check_frames = 30; + /* On save state load, block SRAM from being overwritten. * This could potentially lead to buggy games. */ static const bool block_sram_overwrite = false; @@ -781,6 +819,8 @@ static const bool savestate_auto_index = false; static const bool savestate_auto_save = false; static const bool savestate_auto_load = false; +static const bool savestate_thumbnail_enable = false; + /* Slowmotion ratio. */ static const float slowmotion_ratio = 3.0; @@ -877,7 +917,7 @@ static char buildbot_server_url[] = "http://buildbot.libretro.com/nightly/apple/ #elif defined(_WIN32) && !defined(_XBOX) #if defined(__x86_64__) static char buildbot_server_url[] = "http://buildbot.libretro.com/nightly/win-x86_64/latest/"; -#elif defined(__i386__) || defined(__i486__) || defined(__i686__) +#elif defined(__i386__) || defined(__i486__) || defined(__i686__) || defined(_M_IX86) || defined(_M_IA64) static char buildbot_server_url[] = "http://buildbot.libretro.com/nightly/win-x86/latest/"; #endif #elif defined(__linux__) @@ -957,6 +997,7 @@ static const struct retro_keybind retro_keybinds_1[] = { { true, RARCH_DISK_NEXT, MENU_ENUM_LABEL_VALUE_INPUT_META_DISK_NEXT, RETROK_UNKNOWN, NO_BTN, 0, AXIS_NONE }, { true, RARCH_DISK_PREV, MENU_ENUM_LABEL_VALUE_INPUT_META_DISK_PREV, RETROK_UNKNOWN, NO_BTN, 0, AXIS_NONE }, { true, RARCH_GRAB_MOUSE_TOGGLE, MENU_ENUM_LABEL_VALUE_INPUT_META_GRAB_MOUSE_TOGGLE, RETROK_F11, NO_BTN, 0, AXIS_NONE }, + { true, RARCH_GAME_FOCUS_TOGGLE, MENU_ENUM_LABEL_VALUE_INPUT_META_GAME_FOCUS_TOGGLE, RETROK_SCROLLOCK, NO_BTN, 0, AXIS_NONE }, { true, RARCH_MENU_TOGGLE, MENU_ENUM_LABEL_VALUE_INPUT_META_MENU_TOGGLE, RETROK_F1, NO_BTN, 0, AXIS_NONE }, }; diff --git a/configuration.c b/configuration.c index ec05a6d9ca..50530a9b96 100644 --- a/configuration.c +++ b/configuration.c @@ -158,7 +158,9 @@ bool config_init(void) **/ const char *config_get_default_audio(void) { - switch (AUDIO_DEFAULT_DRIVER) + enum audio_driver_enum default_driver = AUDIO_DEFAULT_DRIVER; + + switch (default_driver) { case AUDIO_RSOUND: return "rsound"; @@ -206,7 +208,9 @@ const char *config_get_default_audio(void) return "csnd"; case AUDIO_RWEBAUDIO: return "rwebaudio"; - default: + case AUDIO_JACK: + return "jack"; + case AUDIO_NULL: break; } @@ -215,11 +219,13 @@ const char *config_get_default_audio(void) const char *config_get_default_record(void) { - switch (RECORD_DEFAULT_DRIVER) + enum record_driver_enum default_driver = RECORD_DEFAULT_DRIVER; + + switch (default_driver) { case RECORD_FFMPEG: return "ffmpeg"; - default: + case RECORD_NULL: break; } @@ -235,7 +241,9 @@ const char *config_get_default_record(void) **/ const char *config_get_default_audio_resampler(void) { - switch (AUDIO_DEFAULT_RESAMPLER_DRIVER) + enum audio_resampler_driver_enum default_driver = AUDIO_DEFAULT_RESAMPLER_DRIVER; + + switch (default_driver) { case AUDIO_RESAMPLER_CC: return "cc"; @@ -243,7 +251,7 @@ const char *config_get_default_audio_resampler(void) return "sinc"; case AUDIO_RESAMPLER_NEAREST: return "nearest"; - default: + case AUDIO_RESAMPLER_NULL: break; } @@ -259,7 +267,9 @@ const char *config_get_default_audio_resampler(void) **/ const char *config_get_default_video(void) { - switch (VIDEO_DEFAULT_DRIVER) + enum video_driver_enum default_driver = VIDEO_DEFAULT_DRIVER; + + switch (default_driver) { case VIDEO_GL: return "gl"; @@ -300,7 +310,7 @@ const char *config_get_default_video(void) return "dispmanx"; case VIDEO_SUNXI: return "sunxi"; - default: + case VIDEO_NULL: break; } @@ -316,7 +326,9 @@ const char *config_get_default_video(void) **/ const char *config_get_default_input(void) { - switch (INPUT_DEFAULT_DRIVER) + enum input_driver_enum default_driver = INPUT_DEFAULT_DRIVER; + + switch (default_driver) { case INPUT_ANDROID: return "android"; @@ -358,8 +370,8 @@ const char *config_get_default_input(void) return "qnx_input"; case INPUT_RWEBINPUT: return "rwebinput"; - default: - break; + case INPUT_NULL: + break; } return "null"; @@ -374,7 +386,9 @@ const char *config_get_default_input(void) **/ const char *config_get_default_joypad(void) { - switch (JOYPAD_DEFAULT_DRIVER) + enum joypad_driver_enum default_driver = JOYPAD_DEFAULT_DRIVER; + + switch (default_driver) { case JOYPAD_PS3: return "ps3"; @@ -412,7 +426,7 @@ const char *config_get_default_joypad(void) return "hid"; case JOYPAD_QNX: return "qnx"; - default: + case JOYPAD_NULL: break; } @@ -429,7 +443,9 @@ const char *config_get_default_joypad(void) **/ const char *config_get_default_camera(void) { - switch (CAMERA_DEFAULT_DRIVER) + enum camera_driver_enum default_driver = CAMERA_DEFAULT_DRIVER; + + switch (default_driver) { case CAMERA_V4L2: return "video4linux2"; @@ -439,7 +455,7 @@ const char *config_get_default_camera(void) return "android"; case CAMERA_AVFOUNDATION: return "avfoundation"; - default: + case CAMERA_NULL: break; } @@ -455,11 +471,13 @@ const char *config_get_default_camera(void) **/ const char *config_get_default_wifi(void) { - switch (WIFI_DEFAULT_DRIVER) + enum wifi_driver_enum default_driver = WIFI_DEFAULT_DRIVER; + + switch (default_driver) { case WIFI_CONNMANCTL: return "connmanctl"; - default: + case WIFI_NULL: break; } @@ -475,13 +493,15 @@ const char *config_get_default_wifi(void) **/ const char *config_get_default_location(void) { - switch (LOCATION_DEFAULT_DRIVER) + enum location_driver_enum default_driver = LOCATION_DEFAULT_DRIVER; + + switch (default_driver) { case LOCATION_ANDROID: return "android"; case LOCATION_CORELOCATION: return "corelocation"; - default: + case LOCATION_NULL: break; } @@ -498,10 +518,12 @@ const char *config_get_default_location(void) **/ const char *config_get_default_menu(void) { + enum menu_driver_enum default_driver = MENU_DEFAULT_DRIVER; + if (!string_is_empty(g_defaults.settings.menu)) return g_defaults.settings.menu; - switch (MENU_DEFAULT_DRIVER) + switch (default_driver) { case MENU_RGUI: return "rgui"; @@ -513,26 +535,13 @@ const char *config_get_default_menu(void) return "xmb"; case MENU_NUKLEAR: return "nuklear"; - default: + case MENU_NULL: break; } return "null"; } -static unsigned config_menu_btn_ok_default(void) -{ - if (g_defaults.menu.controls.set) - return g_defaults.menu.controls.menu_btn_ok; - return default_menu_btn_ok; -} - -static unsigned config_menu_btn_cancel_default(void) -{ - if (g_defaults.menu.controls.set) - return g_defaults.menu.controls.menu_btn_cancel; - return default_menu_btn_cancel; -} #endif bool config_overlay_enable_default(void) @@ -630,8 +639,6 @@ static int populate_settings_path(settings_t *settings, struct config_path_setti #ifdef HAVE_OVERLAY SETTING_PATH("input_overlay", settings->path.overlay, false, NULL, true); - SETTING_PATH("input_osk_overlay", - settings->path.osk_overlay, false, NULL, true); #endif SETTING_PATH("video_font_path", settings->path.font, false, NULL, true); @@ -681,10 +688,6 @@ static int populate_settings_path(settings_t *settings, struct config_path_setti SETTING_PATH("overlay_directory", settings->directory.overlay, true, NULL, true); #endif -#ifdef HAVE_OVERLAY - SETTING_PATH("osk_overlay_directory", - dir_get_ptr(RARCH_DIR_OSK_OVERLAY), true, NULL, true); -#endif #ifndef HAVE_DYNAMIC SETTING_PATH("libretro_path", path_get_ptr(RARCH_PATH_CORE), false, NULL, false); @@ -710,14 +713,15 @@ static int populate_settings_bool(settings_t *settings, struct config_bool_setti SETTING_BOOL("ui_companion_enable", &settings->ui.companion_enable, true, ui_companion_enable, false); SETTING_BOOL("video_gpu_record", &settings->video.gpu_record, true, gpu_record, false); SETTING_BOOL("input_remap_binds_enable", &settings->input.remap_binds_enable, true, true, false); - SETTING_BOOL("back_as_menu_toggle_enable", &settings->input.back_as_menu_toggle_enable, true, true, false); SETTING_BOOL("all_users_control_menu", &settings->input.all_users_control_menu, true, all_users_control_menu, false); + SETTING_BOOL("menu_swap_ok_cancel_buttons", &settings->input.menu_swap_ok_cancel_buttons, true, menu_swap_ok_cancel_buttons, false); #ifdef HAVE_NETWORKING SETTING_BOOL("netplay_client_swap_input", &settings->netplay.swap_input, true, netplay_client_swap_input, false); #endif SETTING_BOOL("input_descriptor_label_show", &settings->input.input_descriptor_label_show, true, input_descriptor_label_show, false); SETTING_BOOL("input_descriptor_hide_unbound", &settings->input.input_descriptor_hide_unbound, true, input_descriptor_hide_unbound, false); SETTING_BOOL("load_dummy_on_core_shutdown", &settings->load_dummy_on_core_shutdown, true, load_dummy_on_core_shutdown, false); + SETTING_BOOL("check_firmware_before_loading", &settings->check_firmware_before_loading, true, check_firmware_before_loading, false); SETTING_BOOL("builtin_mediaplayer_enable", &settings->multimedia.builtin_mediaplayer_enable, false, false /* TODO */, false); SETTING_BOOL("builtin_imageviewer_enable", &settings->multimedia.builtin_imageviewer_enable, true, true, false); SETTING_BOOL("fps_show", &settings->fps_show, true, false, false); @@ -769,6 +773,7 @@ static int populate_settings_bool(settings_t *settings, struct config_bool_setti SETTING_BOOL("video_vfilter", &settings->video.vfilter, true, video_vfilter, false); #endif #ifdef HAVE_MENU + SETTING_BOOL("menu_unified_controls", &settings->menu.unified_controls, true, false, false); #ifdef HAVE_THREADS SETTING_BOOL("threaded_data_runloop_enable", &settings->threaded_data_runloop_enable, true, threaded_data_runloop_enable, false); #endif @@ -808,7 +813,6 @@ static int populate_settings_bool(settings_t *settings, struct config_bool_setti SETTING_BOOL("input_overlay_enable", &settings->input.overlay_enable, true, config_overlay_enable_default(), false); SETTING_BOOL("input_overlay_enable_autopreferred", &settings->input.overlay_enable_autopreferred, true, true, false); SETTING_BOOL("input_overlay_hide_in_menu", &settings->input.overlay_hide_in_menu, true, overlay_hide_in_menu, false); - SETTING_BOOL("input_osk_overlay_enable", &settings->osk.enable, true, true, false); #endif #ifdef HAVE_COMMAND SETTING_BOOL("network_cmd_enable", &settings->network_cmd_enable, true, network_cmd_enable, false); @@ -819,11 +823,13 @@ static int populate_settings_bool(settings_t *settings, struct config_bool_setti #endif #ifdef HAVE_NETWORKING SETTING_BOOL("netplay_spectator_mode_enable",&settings->netplay.is_spectate, false, false /* TODO */, false); + SETTING_BOOL("netplay_nat_traversal", &settings->netplay.nat_traversal, true, true, false); #endif SETTING_BOOL("block_sram_overwrite", &settings->block_sram_overwrite, true, block_sram_overwrite, false); SETTING_BOOL("savestate_auto_index", &settings->savestate_auto_index, true, savestate_auto_index, false); SETTING_BOOL("savestate_auto_save", &settings->savestate_auto_save, true, savestate_auto_save, false); SETTING_BOOL("savestate_auto_load", &settings->savestate_auto_load, true, savestate_auto_load, false); + SETTING_BOOL("savestate_thumbnail_enable", &settings->savestate_thumbnail_enable, true, savestate_thumbnail_enable, false); SETTING_BOOL("history_list_enable", &settings->history_list_enable, true, def_history_list_enable, false); SETTING_BOOL("game_specific_options", &settings->game_specific_options, true, default_game_specific_options, false); SETTING_BOOL("auto_overrides_enable", &settings->auto_overrides_enable, true, default_auto_overrides_enable, false); @@ -895,23 +901,19 @@ static int populate_settings_int(settings_t *settings, struct config_int_setting SETTING_INT("keyboard_gamepad_mapping_type",&settings->input.keyboard_gamepad_mapping_type, true, 1, false); SETTING_INT("input_poll_type_behavior", &settings->input.poll_type_behavior, true, 2, false); #ifdef HAVE_MENU - SETTING_INT("menu_ok_btn", &settings->menu_ok_btn, true, config_menu_btn_ok_default(), false); - SETTING_INT("menu_cancel_btn", &settings->menu_cancel_btn, true, config_menu_btn_cancel_default(), false); - SETTING_INT("menu_search_btn", &settings->menu_search_btn, true, default_menu_btn_search, false); - SETTING_INT("menu_info_btn", &settings->menu_info_btn, true, default_menu_btn_info, false); - SETTING_INT("menu_default_btn", &settings->menu_default_btn, true, default_menu_btn_default, false); - SETTING_INT("menu_scroll_down_btn", &settings->menu_scroll_down_btn, true, default_menu_btn_scroll_down, false); + #endif SETTING_INT("video_monitor_index", &settings->video.monitor_index, true, monitor_index, false); SETTING_INT("video_fullscreen_x", &settings->video.fullscreen_x, true, fullscreen_x, false); SETTING_INT("video_fullscreen_y", &settings->video.fullscreen_y, true, fullscreen_y, false); + SETTING_INT("video_window_x", &settings->video.window_x, true, fullscreen_x, false); + SETTING_INT("video_window_y", &settings->video.window_y, true, fullscreen_y, false); #ifdef HAVE_COMMAND SETTING_INT("network_cmd_port", &settings->network_cmd_port, true, network_cmd_port, false); #endif #ifdef HAVE_NETWORKGAMEPAD SETTING_INT("network_remote_base_port", &settings->network_remote_base_port, true, network_remote_base_port, false); #endif - SETTING_INT("menu_scroll_up_btn", &settings->menu_scroll_up_btn, true, default_menu_btn_scroll_up, false); #ifdef HAVE_GEKKO SETTING_INT("video_viwidth", &settings->video.viwidth, true, video_viwidth, false); #endif @@ -943,9 +945,9 @@ static int populate_settings_int(settings_t *settings, struct config_int_setting SETTING_INT("aspect_ratio_index", &settings->video.aspect_ratio_idx, true, aspect_ratio_idx, false); SETTING_INT("state_slot", (unsigned*)&settings->state_slot, false, 0 /* TODO */, false); #ifdef HAVE_NETWORKING - SETTING_INT("netplay_ip_port", &settings->netplay.port, false, 0 /* TODO */, false); - SETTING_INT("netplay_delay_frames", &settings->netplay.sync_frames, true, 16, false); - SETTING_INT("netplay_check_frames", &settings->netplay.check_frames, false, 30, false); + SETTING_INT("netplay_ip_port", &settings->netplay.port, true, RARCH_DEFAULT_PORT, false); + SETTING_INT("netplay_delay_frames", &settings->netplay.delay_frames, true, netplay_delay_frames, false); + SETTING_INT("netplay_check_frames", &settings->netplay.check_frames, true, netplay_check_frames, false); #endif #ifdef HAVE_LANGEXTRA SETTING_INT("user_language", &settings->user_language, true, RETRO_LANGUAGE_ENGLISH, false); @@ -1283,31 +1285,8 @@ static void config_set_defaults(void) sizeof(settings->path.overlay)); #endif } - - if (!string_is_empty(g_defaults.dir.osk_overlay)) - { - char temp_path[PATH_MAX_LENGTH]; - - temp_path[0] = '\0'; - - fill_pathname_expand_special(temp_path, - g_defaults.dir.osk_overlay, sizeof(temp_path)); - - dir_set(RARCH_DIR_OSK_OVERLAY, temp_path); - } - else - { - char temp_path[PATH_MAX_LENGTH]; - - temp_path[0] = '\0'; - - strlcpy(temp_path, - settings->directory.overlay, - sizeof(temp_path)); - - dir_set(RARCH_DIR_OSK_OVERLAY, temp_path); - } #endif + #ifdef HAVE_MENU if (!string_is_empty(g_defaults.dir.menu_config)) strlcpy(settings->directory.menu_config, @@ -1645,6 +1624,28 @@ static void config_read_keybinds_conf(config_file_t *conf) read_keybinds_user(conf, i); } +static bool check_shader_compatibility(enum file_path_enum enum_idx) +{ + settings_t *settings = config_get_ptr(); + + if (string_is_equal("vulkan", settings->video.driver)) + { + if (enum_idx != FILE_PATH_SLANGP_EXTENSION) + return false; + return true; + } + + if (string_is_equal("gl", settings->video.driver) || + string_is_equal("d3d9", settings->video.driver)) + { + if (enum_idx == FILE_PATH_SLANGP_EXTENSION) + return false; + return true; + } + + return false; +} + #if 0 static bool config_read_keybinds(const char *path) { @@ -1862,7 +1863,7 @@ static bool config_load_file(const char *path, bool set_defaults, #ifdef HAVE_NETWORKING if (!retroarch_override_setting_is_set(RARCH_OVERRIDE_SETTING_NETPLAY_DELAY_FRAMES, NULL)) - CONFIG_GET_INT_BASE(conf, settings, netplay.sync_frames, "netplay_delay_frames"); + CONFIG_GET_INT_BASE(conf, settings, netplay.delay_frames, "netplay_delay_frames"); if (!retroarch_override_setting_is_set(RARCH_OVERRIDE_SETTING_NETPLAY_CHECK_FRAMES, NULL)) CONFIG_GET_INT_BASE(conf, settings, netplay.check_frames, "netplay_check_frames"); if (!retroarch_override_setting_is_set(RARCH_OVERRIDE_SETTING_NETPLAY_IP_PORT, NULL)) @@ -2104,8 +2105,6 @@ static bool config_load_file(const char *path, bool set_defaults, #ifdef HAVE_OVERLAY if (string_is_equal(settings->directory.overlay, "default")) *settings->directory.overlay = '\0'; - if (string_is_equal(dir_get(RARCH_DIR_OSK_OVERLAY), "default")) - dir_clear(RARCH_DIR_OSK_OVERLAY); #endif if (string_is_equal(settings->directory.system, "default")) *settings->directory.system = '\0'; @@ -2168,6 +2167,19 @@ static bool config_load_file(const char *path, bool set_defaults, config_read_keybinds_conf(conf); ret = true; + + for(i = FILE_PATH_CGP_EXTENSION; i <= FILE_PATH_SLANGP_EXTENSION; i++) + { + if(strstr(file_path_str((enum file_path_enum)(i)), path_get_extension(settings->path.shader))) + { + if (!check_shader_compatibility((enum file_path_enum)i)) + { + RARCH_LOG("Incompatible shader for backend %s, clearing...\n", settings->video.driver); + settings->path.shader[0] = '\0'; + break; + } + } + } end: if (conf) @@ -2452,28 +2464,6 @@ bool config_load_remap(void) return false; } -static bool check_shader_compatibility(enum file_path_enum enum_idx) -{ - settings_t *settings = config_get_ptr(); - - if (string_is_equal("vulkan", settings->video.driver)) - { - if (enum_idx != FILE_PATH_SLANGP_EXTENSION) - return false; - return true; - } - - if (string_is_equal("gl", settings->video.driver) || - string_is_equal("d3d9", settings->video.driver)) - { - if (enum_idx == FILE_PATH_SLANGP_EXTENSION) - return false; - return true; - } - - return false; -} - /** * config_load_shader_preset: * @@ -2520,7 +2510,7 @@ bool config_load_shader_preset(void) RARCH_LOG("Shaders: preset directory: %s\n", shader_directory); - for(idx = FILE_PATH_CGP_EXTENSION; idx < FILE_PATH_SLANGP_EXTENSION; idx++) + for(idx = FILE_PATH_CGP_EXTENSION; idx <= FILE_PATH_SLANGP_EXTENSION; idx++) { config_file_t *new_conf = NULL; @@ -2557,7 +2547,7 @@ bool config_load_shader_preset(void) return true; } - for(idx = FILE_PATH_CGP_EXTENSION; idx < FILE_PATH_SLANGP_EXTENSION; idx++) + for(idx = FILE_PATH_CGP_EXTENSION; idx <= FILE_PATH_SLANGP_EXTENSION; idx++) { config_file_t *new_conf = NULL; @@ -3218,6 +3208,33 @@ bool config_save_overrides(int override_type) } } + for (i = 0; i < MAX_USERS; i++) + { + char cfg[64]; + + cfg[0] = '\0'; + if (settings->input.device[i] != overrides->input.device[i]) + { + snprintf(cfg, sizeof(cfg), "input_device_p%u", i + 1); + config_set_int(conf, cfg, overrides->input.device[i]); + } + if (settings->input.joypad_map[i] != overrides->input.joypad_map[i]) + { + snprintf(cfg, sizeof(cfg), "input_player%u_joypad_index", i + 1); + config_set_int(conf, cfg, overrides->input.joypad_map[i]); + } + if (settings->input.libretro_device[i] != overrides->input.libretro_device[i]) + { + snprintf(cfg, sizeof(cfg), "input_libretro_device_p%u", i + 1); + config_set_int(conf, cfg, overrides->input.libretro_device[i]); + } + if (settings->input.analog_dpad_mode[i] != overrides->input.analog_dpad_mode[i]) + { + snprintf(cfg, sizeof(cfg), "input_player%u_analog_dpad_mode", i + 1); + config_set_int(conf, cfg, overrides->input.analog_dpad_mode[i]); + } + } + ret = false; switch (override_type) diff --git a/configuration.h b/configuration.h index d58cb0547f..d4cc94cf91 100644 --- a/configuration.h +++ b/configuration.h @@ -54,6 +54,8 @@ typedef struct settings char driver[32]; char context_driver[32]; float scale; + unsigned window_x; + unsigned window_y; bool fullscreen; bool windowed_fullscreen; unsigned monitor_index; @@ -202,6 +204,8 @@ typedef struct settings { unsigned menu_color_theme; } materialui; + + bool unified_controls; } menu; #endif @@ -294,8 +298,9 @@ typedef struct settings bool input_descriptor_hide_unbound; unsigned menu_toggle_gamepad_combo; - bool back_as_menu_toggle_enable; bool all_users_control_menu; + + bool menu_swap_ok_cancel_buttons; #if defined(VITA) bool backtouch_enable; bool backtouch_toggle; @@ -308,13 +313,6 @@ typedef struct settings unsigned poll_type_behavior; } input; - struct - { - bool enable; - float opacity; - float scale; - } osk; - struct { unsigned mode; @@ -356,7 +354,6 @@ typedef struct settings { char cheat_database[PATH_MAX_LENGTH]; char content_database[PATH_MAX_LENGTH]; - char osk_overlay[PATH_MAX_LENGTH]; char overlay[PATH_MAX_LENGTH]; char menu_wallpaper[PATH_MAX_LENGTH]; char audio_dsp_plugin[PATH_MAX_LENGTH]; @@ -404,10 +401,11 @@ typedef struct settings { char server[255]; unsigned port; - unsigned sync_frames; + unsigned delay_frames; unsigned check_frames; bool is_spectate; bool swap_input; + bool nat_traversal; } netplay; #endif @@ -432,6 +430,7 @@ typedef struct settings bool savestate_auto_index; bool savestate_auto_save; bool savestate_auto_load; + bool savestate_thumbnail_enable; bool network_cmd_enable; unsigned network_cmd_port; @@ -445,6 +444,7 @@ typedef struct settings #endif bool fps_show; bool load_dummy_on_core_shutdown; + bool check_firmware_before_loading; bool game_specific_options; bool auto_overrides_enable; @@ -454,14 +454,6 @@ typedef struct settings bool sort_savefiles_enable; bool sort_savestates_enable; - unsigned menu_ok_btn; - unsigned menu_cancel_btn; - unsigned menu_search_btn; - unsigned menu_default_btn; - unsigned menu_info_btn; - unsigned menu_scroll_down_btn; - unsigned menu_scroll_up_btn; - char username[32]; #ifdef HAVE_LANGEXTRA unsigned int user_language; @@ -505,15 +497,6 @@ const char *config_get_default_wifi(void); **/ const char *config_get_default_location(void); -/** - * config_get_default_osk: - * - * Gets default OSK driver. - * - * Returns: Default OSK driver. - **/ -const char *config_get_default_osk(void); - /** * config_get_default_video: * diff --git a/core.h b/core.h index 340d9f4191..e1a7705fd5 100644 --- a/core.h +++ b/core.h @@ -21,7 +21,6 @@ #include #include -#include #include #include "core_type.h" diff --git a/core_info.c b/core_info.c index eca5785845..d6e98c8bf6 100644 --- a/core_info.c +++ b/core_info.c @@ -26,6 +26,9 @@ #include "config.h" #endif +#include "runloop.h" +#include "verbosity.h" + #include "config.def.h" #include "core_info.h" #include "configuration.h" @@ -410,7 +413,7 @@ static bool core_info_list_update_missing_firmware_internal( if (!info) return false; - + runloop_ctl(RUNLOOP_CTL_UNSET_MISSING_BIOS, NULL); for (i = 0; i < info->firmware_count; i++) { if (!info->firmware[i].path) @@ -419,6 +422,11 @@ static bool core_info_list_update_missing_firmware_internal( fill_pathname_join(path, systemdir, info->firmware[i].path, sizeof(path)); info->firmware[i].missing = !path_file_exists(path); + if (info->firmware[i].missing && !info->firmware[i].optional) + { + runloop_ctl(RUNLOOP_CTL_SET_MISSING_BIOS, NULL); + RARCH_WARN("Firmware missing: %s\n", info->firmware[i].path); + } } return true; @@ -522,7 +530,6 @@ bool core_info_list_update_missing_firmware(core_info_ctx_firmware_t *info) { if (!info) return false; - return core_info_list_update_missing_firmware_internal( core_info_curr_list, info->path, info->directory.system); @@ -757,9 +764,14 @@ bool core_info_database_supports_content_path(const char *database_path, const c const core_info_t *info = &core_info_curr_list->list[i]; if (string_list_find_elem(info->databases_list, database)) + { if (string_list_find_elem(info->supported_extensions_list, "zip") || string_list_find_elem(info->supported_extensions_list, "7z")) - return false; + { + free(database); + return false; + } + } } } diff --git a/database_info.c b/database_info.c index 37be9b16f9..45bd9baf13 100644 --- a/database_info.c +++ b/database_info.c @@ -423,7 +423,7 @@ database_info_handle_t *database_info_dir_init(const char *dir, { const char *path = db->list->elems[i].data; - if (path_is_compressed_file(path)) + if (path_is_compressed_file(path) && !path_contains_compressed_file(path)) { struct string_list *archive_list = file_archive_get_file_list(path, NULL); diff --git a/defaults.h b/defaults.h index ac8e3a6fbc..92bda20fb1 100644 --- a/defaults.h +++ b/defaults.h @@ -62,7 +62,6 @@ struct defaults char core[PATH_MAX_LENGTH]; char core_info[PATH_MAX_LENGTH]; char overlay[PATH_MAX_LENGTH]; - char osk_overlay[PATH_MAX_LENGTH]; char port[PATH_MAX_LENGTH]; char shader[PATH_MAX_LENGTH]; char savestate[PATH_MAX_LENGTH]; diff --git a/deps/SPIRV-Cross b/deps/SPIRV-Cross index 5c24d99ff2..875c32fd39 160000 --- a/deps/SPIRV-Cross +++ b/deps/SPIRV-Cross @@ -1 +1 @@ -Subproject commit 5c24d99ff22a25ef38e9e39985f80cf57a1e7418 +Subproject commit 875c32fd39a06f624814effe5eab691b078429f5 diff --git a/deps/civetweb/civetweb.c b/deps/civetweb/civetweb.c index b4653e78d3..0692c44ea6 100644 --- a/deps/civetweb/civetweb.c +++ b/deps/civetweb/civetweb.c @@ -132,6 +132,7 @@ mg_static_assert(sizeof(void *) >= sizeof(int), "data type size check"); #include #include +#include /* clock_gettime is not implemented on OSX */ int clock_gettime(int clk_id, struct timespec *t); @@ -5654,8 +5655,8 @@ mg_modify_passwords_file(const char *fname, } /* Create a temporary file name. Length has been checked before. */ - strcpy(tmp, fname); - strcat(tmp, ".tmp"); + strlcpy(tmp, fname, sizeof(tmp)); + strlcat(tmp, ".tmp", sizeof(tmp)); /* Create the file if does not exist */ /* Use of fopen here is OK, since fname is only ASCII */ diff --git a/deps/glslang/glslang b/deps/glslang/glslang index a4a4d5e22c..be8462149a 160000 --- a/deps/glslang/glslang +++ b/deps/glslang/glslang @@ -1 +1 @@ -Subproject commit a4a4d5e22c375d37bd286106904ef819eafff29b +Subproject commit be8462149a3c150fc89db84e57ef06de3ab90d47 diff --git a/diff.diff b/diff.diff deleted file mode 100644 index 0e8d410b26..0000000000 --- a/diff.diff +++ /dev/null @@ -1,105 +0,0 @@ -diff --git a/gfx/drivers_shader/shader_glsl.c b/gfx/drivers_shader/shader_glsl.c -index 203f0c6..6cb5f9a 100644 ---- a/gfx/drivers_shader/shader_glsl.c -+++ b/gfx/drivers_shader/shader_glsl.c -@@ -1330,15 +1330,13 @@ fallback: - - #define gl_glsl_set_coord_array(attr, coord1, coord2, coords, size, multiplier) \ - { \ -- unsigned y; \ -- attr->loc = coord1; \ -- attr->size = multiplier; \ -- attr->offset = size * sizeof(GLfloat); \ -- attribs_size++; \ -- attr++; \ -- for (y = 0; y < (multiplier * coords->vertices); y++) \ -- buffer[y + size] = coord2[y]; \ -- size += multiplier * coords->vertices; \ -+ attr->loc = coord1; \ -+ attr->size = multiplier; \ -+ attr->offset = size * sizeof(GLfloat); \ -+ attribs_size++; \ -+ glBufferSubData(GL_ARRAY_BUFFER, attr->offset, multiplier * coords->vertices * sizeof(GLfloat), coord2); \ -+ size += multiplier * coords->vertices; \ -+ attr++; \ - } - - static bool gl_glsl_set_coords(void *handle_data, void *shader_data, const struct video_coords *coords) -@@ -1357,35 +1355,56 @@ static bool gl_glsl_set_coords(void *handle_data, void *shader_data, const struc - goto fallback; - - buffer = short_buffer; -- if (coords->vertices > 4) -- buffer = (GLfloat*)calloc(coords->vertices * -- (2 + 2 + 4 + 2), sizeof(*buffer)); -- -- if (!buffer) -- goto fallback; - - attr = attribs; - uni = &glsl->uniforms[glsl->active_idx]; - -- if (uni->tex_coord >= 0) -- gl_glsl_set_coord_array(attr, uni->tex_coord, coords->tex_coord, coords, size, 2); -+ glBindBuffer(GL_ARRAY_BUFFER, glsl->vbo[glsl->active_idx].vbo_primary); -+ { -+ size_t i; -+ size_t elems = 0; - -- if (uni->vertex_coord >= 0) -- gl_glsl_set_coord_array(attr, uni->vertex_coord, coords->vertex, coords, size, 2); -+ elems += (uni->color >= 0) * 4; -+ elems += (uni->tex_coord >= 0) * 2; -+ elems += (uni->vertex_coord >= 0) * 2; -+ elems += (uni->lut_tex_coord >= 0) * 2; - -- if (uni->color >= 0) -- gl_glsl_set_coord_array(attr, uni->color, coords->color, coords, size, 4); -+ elems *= coords->vertices; - -- if (uni->lut_tex_coord >= 0) -- gl_glsl_set_coord_array(attr, uni->lut_tex_coord, coords->lut_tex_coord, coords, size, 2); -+ if (elems) { - -- if (size) -- gl_glsl_set_attribs(glsl, -- glsl->vbo[glsl->active_idx].vbo_primary, -- &glsl->vbo[glsl->active_idx].buffer_primary, -- &glsl->vbo[glsl->active_idx].size_primary, -- buffer, size, -- attribs, attribs_size); -+ glBufferData(GL_ARRAY_BUFFER, elems * sizeof(GLfloat), NULL, GL_STREAM_DRAW); -+ -+ if (uni->tex_coord >= 0) -+ gl_glsl_set_coord_array(attr, uni->tex_coord, coords->tex_coord, coords, size, 2); -+ -+ if (uni->vertex_coord >= 0) -+ gl_glsl_set_coord_array(attr, uni->vertex_coord, coords->vertex, coords, size, 2); -+ -+ if (uni->color >= 0) -+ gl_glsl_set_coord_array(attr, uni->color, coords->color, coords, size, 4); -+ -+ if (uni->lut_tex_coord >= 0) -+ gl_glsl_set_coord_array(attr, uni->lut_tex_coord, coords->lut_tex_coord, coords, size, 2); -+ -+ for (i = 0; i < attribs_size; i++) -+ { -+ GLint loc = attribs[i].loc; -+ -+ if (glsl->attribs.index < ARRAY_SIZE(glsl->attribs.elems)) -+ { -+ glEnableVertexAttribArray(loc); -+ glVertexAttribPointer(loc, attribs[i].size, GL_FLOAT, GL_FALSE, 0, -+ (const GLvoid*)(uintptr_t)attribs[i].offset); -+ glsl->attribs.elems[glsl->attribs.index++] = loc; -+ } -+ else -+ RARCH_WARN("Attrib array buffer was overflown!\n"); -+ } -+ } -+ -+ } -+ glBindBuffer(GL_ARRAY_BUFFER, 0); - - if (buffer != short_buffer) - free(buffer); diff --git a/dirs.c b/dirs.c index 9629ddc8c1..ad53fbd3eb 100644 --- a/dirs.c +++ b/dirs.c @@ -42,7 +42,6 @@ struct rarch_dir_list static struct rarch_dir_list dir_shader_list; -static char dir_osk_overlay[PATH_MAX_LENGTH] = {0}; static char dir_system[PATH_MAX_LENGTH] = {0}; static char dir_savefile[PATH_MAX_LENGTH] = {0}; static char current_savefile_dir[PATH_MAX_LENGTH] = {0}; @@ -183,8 +182,6 @@ bool dir_is_empty(enum rarch_dir_type type) return string_is_empty(dir_savestate); case RARCH_DIR_CURRENT_SAVESTATE: return string_is_empty(current_savestate_dir); - case RARCH_DIR_OSK_OVERLAY: - return string_is_empty(dir_osk_overlay); case RARCH_DIR_NONE: break; } @@ -208,8 +205,6 @@ size_t dir_get_size(enum rarch_dir_type type) return sizeof(dir_savefile); case RARCH_DIR_CURRENT_SAVEFILE: return sizeof(current_savefile_dir); - case RARCH_DIR_OSK_OVERLAY: - return sizeof(dir_osk_overlay); case RARCH_DIR_NONE: break; } @@ -238,9 +233,6 @@ void dir_clear(enum rarch_dir_type type) case RARCH_DIR_SYSTEM: *dir_system = '\0'; break; - case RARCH_DIR_OSK_OVERLAY: - *dir_osk_overlay = '\0'; - break; case RARCH_DIR_NONE: break; } @@ -249,7 +241,6 @@ void dir_clear(enum rarch_dir_type type) void dir_clear_all(void) { dir_clear(RARCH_DIR_SYSTEM); - dir_clear(RARCH_DIR_OSK_OVERLAY); dir_clear(RARCH_DIR_SAVEFILE); dir_clear(RARCH_DIR_SAVESTATE); } @@ -260,8 +251,6 @@ char *dir_get_ptr(enum rarch_dir_type type) { switch (type) { - case RARCH_DIR_OSK_OVERLAY: - return dir_osk_overlay; case RARCH_DIR_SAVEFILE: return dir_savefile; case RARCH_DIR_CURRENT_SAVEFILE: @@ -283,8 +272,6 @@ const char *dir_get(enum rarch_dir_type type) { switch (type) { - case RARCH_DIR_OSK_OVERLAY: - return dir_osk_overlay; case RARCH_DIR_SAVEFILE: return dir_savefile; case RARCH_DIR_CURRENT_SAVEFILE: @@ -326,10 +313,6 @@ void dir_set(enum rarch_dir_type type, const char *path) strlcpy(dir_system, path, sizeof(dir_system)); break; - case RARCH_DIR_OSK_OVERLAY: - strlcpy(dir_osk_overlay, path, - sizeof(dir_osk_overlay)); - break; case RARCH_DIR_NONE: break; } diff --git a/dirs.h b/dirs.h index 89bf7681cb..64fff61ab4 100644 --- a/dirs.h +++ b/dirs.h @@ -28,8 +28,7 @@ enum rarch_dir_type RARCH_DIR_SAVESTATE, RARCH_DIR_CURRENT_SAVEFILE, RARCH_DIR_CURRENT_SAVESTATE, - RARCH_DIR_SYSTEM, - RARCH_DIR_OSK_OVERLAY + RARCH_DIR_SYSTEM }; bool dir_init_shader(void); diff --git a/dist-scripts/wiiu-cores.sh b/dist-scripts/wiiu-cores.sh index e205873c53..e3a5d53fc2 100755 --- a/dist-scripts/wiiu-cores.sh +++ b/dist-scripts/wiiu-cores.sh @@ -14,54 +14,111 @@ mkdir -p ../pkg/wiiu/wiiu/apps/ make -C ../ -f Makefile.${platform} clean || exit 1 +lookup() +{ + cat | grep "$1 = " | sed "s/$1 = \"//" | sed s/\"// +} + gen_meta_xml() { info="$1"_libretro.info if [ -e $info ] ; then - display_name=`cat $info | grep "display_name = " | sed "s/display_name = \"//" | sed s/\"//` - corename=`cat $info | grep "corename = " | sed "s/corename = \"//" | sed s/\"//` - authors=`cat $info | grep "authors = " | sed "s/authors = \"//" | sed s/\"// | sed s/\|/\ -\ /g` - echo '' > "$libretro"_meta.xml - echo '' >> "$libretro"_meta.xml - echo ' '$corename'' >> "$libretro"_meta.xml - echo ' '$authors'' >> "$libretro"_meta.xml - echo ' '$RARCH_VERSION'' >> "$libretro"_meta.xml - echo ' '`date +%Y%m%d%H%M%S`'' >> "$libretro"_meta.xml - echo ' RetroArch' >> "$libretro"_meta.xml - echo ' '$display_name'' >> "$libretro"_meta.xml - echo '' >> "$libretro"_meta.xml + display_name=`cat $info | lookup "display_name"` + corename=`cat $info | lookup "corename"` + authors=`cat $info | lookup "authors" | sed s/\|/\ -\ /g` + systemname=`cat $info | lookup "systemname"` + license=`cat $info | lookup "license"` + date=`date +%Y%m%d%H%M%S` + build_hash=`git rev-parse --short HEAD 2>/dev/null` + echo '' > "$1"_meta.xml + echo '' >> "$1"_meta.xml + echo ' '$corename'' >> "$1"_meta.xml + echo ' '$authors'' >> "$1"_meta.xml + echo ' '$RARCH_VERSION' r'$build_hash'' >> "$1"_meta.xml + echo ' '$date'' >> "$1"_meta.xml + echo ' RetroArch' >> "$1"_meta.xml + echo -e ' '$display_name'\n\nSystem: '$systemname'\nLicense: '$license'' >> "$1"_meta.xml + echo ' emu' >> "$1"_meta.xml + echo ' https://github.com/libretro' >> "$1"_meta.xml + echo '' >> "$1"_meta.xml fi } for f in `ls -v *_${platform}.${EXT}`; do name=`echo "$f" | sed "s/\(_libretro_${platform}\|\).${EXT}$//"` whole_archive= + build_hbl_elf=1 + build_rpx=1 if [ $name = "nxengine" ] ; then echo "Applying whole archive linking..." whole_archive="WHOLE_ARCHIVE_LINK=1" fi + if [ $name = "mame2003" ] ; then + build_hbl_elf=0 + fi + + if [ $name = "fbalpha2012" ] ; then + build_hbl_elf=0 + fi + + if [ $name = "mame2003_midway" ] ; then + build_rpx=0 + fi + if [ $name = "fbalpha2012_cps1" ] ; then + build_rpx=0 + fi + if [ $name = "fbalpha2012_cps2" ] ; then + build_rpx=0 + fi + if [ $name = "fbalpha2012_cps3" ] ; then + build_rpx=0 + fi + if [ $name = "fbalpha2012_neogeo" ] ; then + build_rpx=0 + fi + echo "-- Building core: $name --" cp -f "$f" ../libretro_${platform}.${EXT} echo NAME: $name # Compile core - make -C ../ -f Makefile.${platform} LIBRETRO=$name $whole_archive -j3 || exit 1 - mkdir -p ../pkg/wiiu/wiiu/apps/${name}_libretro - mv -f ../retroarch_wiiu.elf ../pkg/wiiu/wiiu/apps/${name}_libretro/${name}_libretro.elf - + make -C ../ -f Makefile.${platform} LIBRETRO=$name BUILD_HBL_ELF=$build_hbl_elf BUILD_RPX=$build_rpx $whole_archive -j3 || exit 1 gen_meta_xml $name - if [ -e $info ] ; then - mv -f "$libretro"_meta.xml ../pkg/wiiu/wiiu/apps/${name}_libretro/meta.xml - else - cp -f ../pkg/wiiu/meta.xml ../pkg/wiiu/wiiu/apps/${name}_libretro/meta.xml + + if [ -e ../retroarch_wiiu.elf ] ; then + mkdir -p ../pkg/wiiu/wiiu/apps/${name}_libretro + mv -f ../retroarch_wiiu.elf ../pkg/wiiu/wiiu/apps/${name}_libretro/${name}_libretro.elf + if [ -e ${name}_meta.xml ] ; then + cp -f ${name}_meta.xml ../pkg/wiiu/wiiu/apps/${name}_libretro/meta.xml + else + cp -f ../pkg/wiiu/meta.xml ../pkg/wiiu/wiiu/apps/${name}_libretro/meta.xml + fi + if [ -e $name.png ] ; then + cp -f $name.png ../pkg/wiiu/wiiu/apps/${name}_libretro/icon.png + else + cp -f ../pkg/wiiu/icon.png ../pkg/wiiu/wiiu/apps/${name}_libretro/icon.png + fi fi - if [ -e $name.png ] ; then - cp -f $name.png ../pkg/wiiu/wiiu/apps/${name}_libretro/icon.png - else - cp -f ../pkg/wiiu/icon.png ../pkg/wiiu/wiiu/apps/${name}_libretro/icon.png + if [ -e ../retroarch_wiiu.rpx ] ; then + mkdir -p ../pkg/wiiu/rpx/wiiu/apps/${name}_libretro + mv -f ../retroarch_wiiu.rpx ../pkg/wiiu/rpx/wiiu/apps/${name}_libretro/${name}_libretro.rpx + rm -f ../retroarch_wiiu.rpx.elf + if [ -e ${name}_meta.xml ] ; then + cp -f ${name}_meta.xml ../pkg/wiiu/rpx/wiiu/apps/${name}_libretro/meta.xml + else + cp -f ../pkg/wiiu/meta.xml ../pkg/wiiu/rpx/wiiu/apps/${name}_libretro/meta.xml + fi + if [ -e $name.png ] ; then + cp -f $name.png ../pkg/wiiu/rpx/wiiu/apps/${name}_libretro/icon.png + else + cp -f ../pkg/wiiu/icon.png ../pkg/wiiu/rpx/wiiu/apps/${name}_libretro/icon.png + fi fi + rm -rf ${name}_meta.xml + rm -rf $name.png + done # Additional build step diff --git a/driver.c b/driver.c index 7be175e550..6c754fe7f8 100644 --- a/driver.c +++ b/driver.c @@ -293,17 +293,17 @@ static bool driver_update_system_av_info(const struct retro_system_av_info *info **/ static void init_drivers(int flags) { - if (flags & DRIVER_VIDEO) + if (flags & DRIVER_VIDEO_MASK) video_driver_unset_own_driver(); - if (flags & DRIVER_AUDIO) + if (flags & DRIVER_AUDIO_MASK) audio_driver_unset_own_driver(); - if (flags & DRIVER_INPUT) + if (flags & DRIVER_INPUT_MASK) input_driver_unset_own_driver(); - if (flags & DRIVER_CAMERA) + if (flags & DRIVER_CAMERA_MASK) camera_driver_ctl(RARCH_CAMERA_CTL_UNSET_OWN_DRIVER, NULL); - if (flags & DRIVER_LOCATION) + if (flags & DRIVER_LOCATION_MASK) location_driver_ctl(RARCH_LOCATION_CTL_UNSET_OWN_DRIVER, NULL); - if (flags & DRIVER_WIFI) + if (flags & DRIVER_WIFI_MASK) wifi_driver_ctl(RARCH_WIFI_CTL_UNSET_OWN_DRIVER, NULL); #ifdef HAVE_MENU @@ -311,10 +311,10 @@ static void init_drivers(int flags) menu_driver_ctl(RARCH_MENU_CTL_SET_OWN_DRIVER, NULL); #endif - if (flags & (DRIVER_VIDEO | DRIVER_AUDIO)) + if (flags & (DRIVER_VIDEO_MASK | DRIVER_AUDIO_MASK)) driver_adjust_system_rates(); - if (flags & DRIVER_VIDEO) + if (flags & DRIVER_VIDEO_MASK) { struct retro_hw_render_callback *hwr = video_driver_get_hw_context(); @@ -330,29 +330,29 @@ static void init_drivers(int flags) runloop_ctl(RUNLOOP_CTL_SET_FRAME_TIME_LAST, NULL); } - if (flags & DRIVER_AUDIO) + if (flags & DRIVER_AUDIO_MASK) { audio_driver_init(); audio_driver_new_devices_list(); } /* Only initialize camera driver if we're ever going to use it. */ - if ((flags & DRIVER_CAMERA) && camera_driver_ctl(RARCH_CAMERA_CTL_IS_ACTIVE, NULL)) + if ((flags & DRIVER_CAMERA_MASK) && camera_driver_ctl(RARCH_CAMERA_CTL_IS_ACTIVE, NULL)) camera_driver_ctl(RARCH_CAMERA_CTL_INIT, NULL); /* Only initialize location driver if we're ever going to use it. */ - if ((flags & DRIVER_LOCATION) && location_driver_ctl(RARCH_LOCATION_CTL_IS_ACTIVE, NULL)) + if ((flags & DRIVER_LOCATION_MASK) && location_driver_ctl(RARCH_LOCATION_CTL_IS_ACTIVE, NULL)) init_location(); #ifdef HAVE_MENU - if (flags & DRIVER_MENU) + if (flags & DRIVER_MENU_MASK) { menu_driver_ctl(RARCH_MENU_CTL_INIT, NULL); menu_driver_ctl(RARCH_MENU_CTL_CONTEXT_RESET, NULL); } #endif - if (flags & (DRIVER_VIDEO | DRIVER_AUDIO)) + if (flags & (DRIVER_VIDEO_MASK | DRIVER_AUDIO_MASK)) { /* Keep non-throttled state as good as possible. */ if (input_driver_is_nonblock_state()) @@ -388,32 +388,32 @@ static void init_drivers(int flags) static void uninit_drivers(int flags) { #ifdef HAVE_MENU - if (flags & DRIVER_MENU) + if (flags & DRIVER_MENU_MASK) menu_driver_ctl(RARCH_MENU_CTL_DEINIT, NULL); #endif - if ((flags & DRIVER_LOCATION) && !location_driver_ctl(RARCH_LOCATION_CTL_OWNS_DRIVER, NULL)) + if ((flags & DRIVER_LOCATION_MASK) && !location_driver_ctl(RARCH_LOCATION_CTL_OWNS_DRIVER, NULL)) location_driver_ctl(RARCH_LOCATION_CTL_DEINIT, NULL); - if ((flags & DRIVER_CAMERA) && !camera_driver_ctl(RARCH_CAMERA_CTL_OWNS_DRIVER, NULL)) + if ((flags & DRIVER_CAMERA_MASK) && !camera_driver_ctl(RARCH_CAMERA_CTL_OWNS_DRIVER, NULL)) camera_driver_ctl(RARCH_CAMERA_CTL_DEINIT, NULL); - if (flags & DRIVER_AUDIO) + if (flags & DRIVER_AUDIO_MASK) audio_driver_deinit(); - if ((flags & DRIVER_WIFI) && !wifi_driver_ctl(RARCH_WIFI_CTL_OWNS_DRIVER, NULL)) + if ((flags & DRIVER_WIFI_MASK) && !wifi_driver_ctl(RARCH_WIFI_CTL_OWNS_DRIVER, NULL)) wifi_driver_ctl(RARCH_WIFI_CTL_DEINIT, NULL); if (flags & DRIVERS_VIDEO_INPUT) video_driver_deinit(); - if ((flags & DRIVER_VIDEO) && !video_driver_owns_driver()) + if ((flags & DRIVER_VIDEO_MASK) && !video_driver_owns_driver()) video_driver_destroy_data(); - if ((flags & DRIVER_INPUT) && !input_driver_owns_driver()) + if ((flags & DRIVER_INPUT_MASK) && !input_driver_owns_driver()) input_driver_destroy_data(); - if ((flags & DRIVER_AUDIO) && !audio_driver_owns_driver()) + if ((flags & DRIVER_AUDIO_MASK) && !audio_driver_owns_driver()) audio_driver_destroy_data(); } diff --git a/driver.h b/driver.h index 1451df9cc5..475564058b 100644 --- a/driver.h +++ b/driver.h @@ -27,25 +27,37 @@ RETRO_BEGIN_DECLS #define DRIVERS_CMD_ALL \ - ( DRIVER_AUDIO \ - | DRIVER_VIDEO \ - | DRIVER_INPUT \ - | DRIVER_CAMERA \ - | DRIVER_LOCATION \ - | DRIVER_MENU \ - | DRIVERS_VIDEO_INPUT \ - | DRIVER_WIFI ) + ( DRIVER_AUDIO_MASK \ + | DRIVER_VIDEO_MASK \ + | DRIVER_INPUT_MASK \ + | DRIVER_CAMERA_MASK \ + | DRIVER_LOCATION_MASK \ + | DRIVER_MENU_MASK \ + | DRIVERS_VIDEO_INPUT_MASK \ + | DRIVER_WIFI_MASK ) enum { - DRIVER_AUDIO = 1 << 0, - DRIVER_VIDEO = 1 << 1, - DRIVER_INPUT = 1 << 2, - DRIVER_CAMERA = 1 << 3, - DRIVER_LOCATION = 1 << 4, - DRIVER_MENU = 1 << 5, - DRIVERS_VIDEO_INPUT = 1 << 6, - DRIVER_WIFI = 1 << 7 + DRIVER_AUDIO = 0, + DRIVER_VIDEO, + DRIVER_INPUT, + DRIVER_CAMERA, + DRIVER_LOCATION, + DRIVER_MENU, + DRIVERS_VIDEO_INPUT, + DRIVER_WIFI +}; + +enum +{ + DRIVER_AUDIO_MASK = 1 << DRIVER_AUDIO, + DRIVER_VIDEO_MASK = 1 << DRIVER_VIDEO, + DRIVER_INPUT_MASK = 1 << DRIVER_INPUT, + DRIVER_CAMERA_MASK = 1 << DRIVER_CAMERA, + DRIVER_LOCATION_MASK = 1 << DRIVER_LOCATION, + DRIVER_MENU_MASK = 1 << DRIVER_MENU, + DRIVERS_VIDEO_INPUT_MASK = 1 << DRIVERS_VIDEO_INPUT, + DRIVER_WIFI_MASK = 1 << DRIVER_WIFI }; enum driver_ctl_state diff --git a/dynamic.c b/dynamic.c index eb2e964ffa..a375c92267 100644 --- a/dynamic.c +++ b/dynamic.c @@ -215,7 +215,7 @@ static bool load_dynamic_core(void) /* Try to verify that -lretro was not linked in from other modules * since loading it dynamically and with -l will fail hard. */ RARCH_ERR("Serious problem. RetroArch wants to load libretro cores" - "dyamically, but it is already linked.\n"); + " dynamically, but it is already linked.\n"); RARCH_ERR("This could happen if other modules RetroArch depends on " "link against libretro directly.\n"); RARCH_ERR("Proceeding could cause a crash. Aborting ...\n"); diff --git a/file_path_special.c b/file_path_special.c index 83ba105f52..8a9b60dadc 100644 --- a/file_path_special.c +++ b/file_path_special.c @@ -46,7 +46,6 @@ #include "file_path_special.h" #include "paths.h" -#include "runloop.h" #include "verbosity.h" void fill_pathname_expand_special(char *out_path, @@ -208,6 +207,7 @@ void fill_pathname_application_path(char *s, size_t len) #endif #ifdef _WIN32 DWORD ret; + wchar_t ws[PATH_MAX_LENGTH] = {0}; #endif #ifdef __HAIKU__ image_info info; diff --git a/frontend/drivers/platform_emscripten.c b/frontend/drivers/platform_emscripten.c index 1e49e36abf..acc567dd57 100644 --- a/frontend/drivers/platform_emscripten.c +++ b/frontend/drivers/platform_emscripten.c @@ -115,8 +115,6 @@ static void frontend_emscripten_get_env(int *argc, char *argv[], "bundle/info", sizeof(g_defaults.dir.core_info)); fill_pathname_join(g_defaults.dir.overlay, base_path, "bundle/overlays", sizeof(g_defaults.dir.overlay)); - fill_pathname_join(g_defaults.dir.osk_overlay, base_path, - "bundle/overlays", sizeof(g_defaults.dir.osk_overlay)); fill_pathname_join(g_defaults.dir.shader, base_path, "bundle/shaders", sizeof(g_defaults.dir.shader)); diff --git a/frontend/drivers/platform_linux.c b/frontend/drivers/platform_linux.c index 10ca20bf70..6ca9c5c0b8 100644 --- a/frontend/drivers/platform_linux.c +++ b/frontend/drivers/platform_linux.c @@ -1474,8 +1474,6 @@ static void frontend_linux_get_env(int *argc, "shaders", sizeof(g_defaults.dir.shader)); fill_pathname_join(g_defaults.dir.overlay, app_dir, "overlays", sizeof(g_defaults.dir.overlay)); - fill_pathname_join(g_defaults.dir.osk_overlay, app_dir, - "overlays", sizeof(g_defaults.dir.osk_overlay)); fill_pathname_join(g_defaults.dir.core, app_dir, "cores", sizeof(g_defaults.dir.core)); fill_pathname_join(g_defaults.dir.core_info, @@ -1494,7 +1492,7 @@ static void frontend_linux_get_env(int *argc, app_dir, "database/cursors", sizeof(g_defaults.dir.cursor)); fill_pathname_join(g_defaults.dir.wallpapers, app_dir, "assets/wallpapers", sizeof(g_defaults.dir.wallpapers)); - if(*downloads_dir && test_permissions(downloads_dir)) + if(!string_is_empty(downloads_dir) && test_permissions(downloads_dir)) { fill_pathname_join(g_defaults.dir.core_assets, downloads_dir, "", sizeof(g_defaults.dir.core_assets)); @@ -1510,24 +1508,10 @@ static void frontend_linux_get_env(int *argc, "RetroArch", "[ENV]: default download folder: [%s]", g_defaults.dir.core_assets); - if(*screenshot_dir && test_permissions(screenshot_dir)) - { - fill_pathname_join(g_defaults.dir.screenshot, - screenshot_dir, "", sizeof(g_defaults.dir.screenshot)); - } - else - { - fill_pathname_join(g_defaults.dir.screenshot, - app_dir, "screenshots", sizeof(g_defaults.dir.screenshot)); - path_mkdir(g_defaults.dir.screenshot); - } - - __android_log_print(ANDROID_LOG_INFO, - "RetroArch", "[ENV]: default screenshot folder: [%s]", - g_defaults.dir.screenshot); - switch (perms) { + /* Set defaults for this since we can't guarantee saving on content dir will + work in this case */ case INTERNAL_STORAGE_APPDIR_WRITABLE: fill_pathname_join(g_defaults.dir.sram, internal_storage_app_path, "saves", sizeof(g_defaults.dir.sram)); @@ -1547,19 +1531,25 @@ static void frontend_linux_get_env(int *argc, fill_pathname_join(g_defaults.dir.cheats, internal_storage_app_path, "cheats", sizeof(g_defaults.dir.cheats)); - /* TODO/FIXME - Test if this is needed at all, as far as I know, - * every directory we set in g_defaults already gets created if it - * doesn't exist already */ + if(!string_is_empty(screenshot_dir) && test_permissions(screenshot_dir)) + { + fill_pathname_join(g_defaults.dir.screenshot, + screenshot_dir, "", sizeof(g_defaults.dir.screenshot)); + } + else + { + fill_pathname_join(g_defaults.dir.screenshot, + internal_storage_app_path, "screenshots", sizeof(g_defaults.dir.screenshot)); + path_mkdir(g_defaults.dir.screenshot); + } + path_mkdir(g_defaults.dir.sram); path_mkdir(g_defaults.dir.savestate); path_mkdir(g_defaults.dir.system); - path_mkdir(g_defaults.dir.menu_config); - path_mkdir(g_defaults.dir.remap); - path_mkdir(g_defaults.dir.thumbnails); - path_mkdir(g_defaults.dir.playlist); - path_mkdir(g_defaults.dir.cheats); break; case INTERNAL_STORAGE_NOT_WRITABLE: + /* Set defaults for this since we can't guarantee saving on content dir will + work in this case */ fill_pathname_join(g_defaults.dir.sram, app_dir, "saves", sizeof(g_defaults.dir.sram)); fill_pathname_join(g_defaults.dir.savestate, @@ -1578,19 +1568,25 @@ static void frontend_linux_get_env(int *argc, fill_pathname_join(g_defaults.dir.cheats, app_dir, "cheats", sizeof(g_defaults.dir.cheats)); - /* TODO/FIXME - Test if this is needed at all, as far as I know, - * every directory we set in g_defaults already gets created if it - * doesn't exist already */ + if(!string_is_empty(screenshot_dir) && test_permissions(screenshot_dir)) + { + fill_pathname_join(g_defaults.dir.screenshot, + screenshot_dir, "", sizeof(g_defaults.dir.screenshot)); + } + else + { + fill_pathname_join(g_defaults.dir.screenshot, + app_dir, "screenshots", sizeof(g_defaults.dir.screenshot)); + path_mkdir(g_defaults.dir.screenshot); + } + path_mkdir(g_defaults.dir.sram); path_mkdir(g_defaults.dir.savestate); path_mkdir(g_defaults.dir.system); - path_mkdir(g_defaults.dir.menu_config); - path_mkdir(g_defaults.dir.remap); - path_mkdir(g_defaults.dir.thumbnails); - path_mkdir(g_defaults.dir.playlist); - path_mkdir(g_defaults.dir.cheats); break; case INTERNAL_STORAGE_WRITABLE: + /* Don't set defaults for saves, states, system or screenshots + in this case to be able to honour saving on content dir */ fill_pathname_join(g_defaults.dir.menu_config, internal_storage_path, "RetroArch/config", sizeof(g_defaults.dir.menu_config)); fill_pathname_join(g_defaults.dir.remap, @@ -1601,38 +1597,14 @@ static void frontend_linux_get_env(int *argc, internal_storage_path, "RetroArch/playlists", sizeof(g_defaults.dir.playlist)); fill_pathname_join(g_defaults.dir.cheats, internal_storage_path, "RetroArch/cheats", sizeof(g_defaults.dir.cheats)); - - /* TODO/FIXME - Test if this is needed at all, as far as I know, - * every directory we set in g_defaults already gets created if it - * doesn't exist already */ - path_mkdir(g_defaults.dir.menu_config); - path_mkdir(g_defaults.dir.remap); - path_mkdir(g_defaults.dir.thumbnails); - path_mkdir(g_defaults.dir.playlist); - path_mkdir(g_defaults.dir.cheats); default: break; } - - /* create save and system directories in the internal dir too */ - fill_pathname_join(buf, app_dir, "saves", sizeof(buf)); - path_mkdir(buf); - - fill_pathname_join(buf, app_dir, "states", sizeof(buf)); - path_mkdir(buf); - - fill_pathname_join(buf, app_dir, "system", sizeof(buf)); - path_mkdir(buf); - - /* create save and system directories in the internal sd too */ - fill_pathname_join(buf, internal_storage_app_path, "saves", sizeof(buf)); - path_mkdir(buf); - - fill_pathname_join(buf, internal_storage_app_path, "states", sizeof(buf)); - path_mkdir(buf); - - fill_pathname_join(buf, internal_storage_app_path, "system", sizeof(buf)); - path_mkdir(buf); + path_mkdir(g_defaults.dir.menu_config); + path_mkdir(g_defaults.dir.remap); + path_mkdir(g_defaults.dir.thumbnails); + path_mkdir(g_defaults.dir.playlist); + path_mkdir(g_defaults.dir.cheats); __android_log_print(ANDROID_LOG_INFO, "RetroArch", "[ENV]: default savefile folder: [%s]", @@ -1643,6 +1615,9 @@ static void frontend_linux_get_env(int *argc, __android_log_print(ANDROID_LOG_INFO, "RetroArch", "[ENV]: default system folder: [%s]", g_defaults.dir.system); + __android_log_print(ANDROID_LOG_INFO, + "RetroArch", "[ENV]: default screenshot folder: [%s]", + g_defaults.dir.screenshot); } } } @@ -1749,8 +1724,6 @@ static void frontend_linux_get_env(int *argc, "cheats", sizeof(g_defaults.dir.cheats)); fill_pathname_join(g_defaults.dir.overlay, base_path, "overlay", sizeof(g_defaults.dir.overlay)); - fill_pathname_join(g_defaults.dir.osk_overlay, base_path, - "overlay", sizeof(g_defaults.dir.osk_overlay)); fill_pathname_join(g_defaults.dir.core_assets, base_path, "downloads", sizeof(g_defaults.dir.core_assets)); fill_pathname_join(g_defaults.dir.screenshot, base_path, @@ -1892,8 +1865,12 @@ static int frontend_linux_parse_drive_list(void *data) FILE_TYPE_DIRECTORY, 0, 0); menu_entries_append_enum(list, internal_storage_path, - msg_hash_to_str(MSG_INTERNAL_MEMORY), - MSG_INTERNAL_MEMORY, FILE_TYPE_DIRECTORY, 0, 0); + msg_hash_to_str(MSG_INTERNAL_STORAGE), + MSG_INTERNAL_STORAGE, FILE_TYPE_DIRECTORY, 0, 0); + menu_entries_append_enum(list, + "/storage", + msg_hash_to_str(MSG_REMOVABLE_STORAGE), + MSG_REMOVABLE_STORAGE, FILE_TYPE_DIRECTORY, 0, 0); #endif menu_entries_append_enum(list, "/", "", diff --git a/frontend/drivers/platform_psp.c b/frontend/drivers/platform_psp.c index 5fd6043f27..31c1e28561 100644 --- a/frontend/drivers/platform_psp.c +++ b/frontend/drivers/platform_psp.c @@ -163,8 +163,6 @@ static void frontend_psp_get_environment_settings(int *argc, char *argv[], "BUNDLE/DATABASE/RDB", sizeof(g_defaults.dir.database)); fill_pathname_join(g_defaults.dir.overlay, base_path, "BUNDLE/OVERLAYS", sizeof(g_defaults.dir.overlay)); - fill_pathname_join(g_defaults.dir.osk_overlay, base_path, - "BUNDLE/OVERLAYS", sizeof(g_defaults.dir.osk_overlay)); fill_pathname_join(g_defaults.dir.shader, base_path, "BUNDLE/SHADERS", sizeof(g_defaults.dir.shader)); */ diff --git a/frontend/drivers/platform_wiiu.c b/frontend/drivers/platform_wiiu.c index f54d427cb3..85662c5efe 100644 --- a/frontend/drivers/platform_wiiu.c +++ b/frontend/drivers/platform_wiiu.c @@ -273,6 +273,8 @@ int main(int argc, char **argv) DEBUG_STR(argv[0]); DEBUG_STR(argv[1]); fflush(stdout); + +#if 1 #if 0 int argc_ = 2; // char* argv_[] = {WIIU_SD_PATH "retroarch/retroarch.elf", WIIU_SD_PATH "rom.nes", NULL}; @@ -296,6 +298,7 @@ int main(int argc, char **argv) }while(1); main_exit(NULL); +#endif fflush(stdout); fflush(stderr); ProcUIShutdown(); @@ -316,8 +319,26 @@ void __eabi() } -void __init(); -void __fini(); +__attribute__((weak)) +void __init(void) +{ + extern void(*__CTOR_LIST__[])(void); + void(**ctor)(void) = __CTOR_LIST__; + while(*ctor) + (*ctor++)(); +} + + +__attribute__((weak)) +void __fini(void) +{ + extern void(*__DTOR_LIST__[])(void); + void(**ctor)(void) = __DTOR_LIST__; + while(*ctor) + (*ctor++)(); +} + +/* HBL elf entry point */ int __entry_menu(int argc, char **argv) { InitFunctionPointers(); @@ -333,15 +354,16 @@ int __entry_menu(int argc, char **argv) return ret; } +/* RPX entry point */ __attribute__((noreturn)) void _start(int argc, char **argv) { memoryInitialize(); mount_sd_fat("sd"); -// __init(); + __init(); int ret = main(argc, argv); -// __fini(); + __fini(); unmount_sd_fat("sd"); memoryRelease(); diff --git a/frontend/drivers/platform_win32.c b/frontend/drivers/platform_win32.c index 9ac83aab49..2d0b934010 100644 --- a/frontend/drivers/platform_win32.c +++ b/frontend/drivers/platform_win32.c @@ -17,11 +17,11 @@ #include #include +#include #include #include #include -#include #include #include #include @@ -168,6 +168,7 @@ static void frontend_win32_get_os(char *s, size_t len, int *major, int *minor) } break; default: + sprintf(s, "Windows %i.%i", *major, *minor); break; } } @@ -176,7 +177,7 @@ static void frontend_win32_init(void *data) { typedef BOOL (WINAPI *isProcessDPIAwareProc)(); typedef BOOL (WINAPI *setProcessDPIAwareProc)(); - HMODULE handle = GetModuleHandle(TEXT("User32.dll")); + HMODULE handle = GetModuleHandle("User32.dll"); isProcessDPIAwareProc isDPIAwareProc = (isProcessDPIAwareProc)dylib_proc(handle, "IsProcessDPIAware"); setProcessDPIAwareProc setDPIAwareProc = (setProcessDPIAwareProc)dylib_proc(handle, "SetProcessDPIAware"); @@ -271,10 +272,6 @@ static void frontend_win32_environment_get(int *argc, char *argv[], ":\\thumbnails", sizeof(g_defaults.dir.thumbnails)); fill_pathname_expand_special(g_defaults.dir.overlay, ":\\overlays", sizeof(g_defaults.dir.overlay)); - fill_pathname_expand_special(g_defaults.dir.osk_overlay, - ":\\overlays", sizeof(g_defaults.dir.osk_overlay)); - fill_pathname_expand_special(g_defaults.dir.osk_overlay, - ":\\overlays", sizeof(g_defaults.dir.osk_overlay)); fill_pathname_expand_special(g_defaults.dir.core, ":\\cores", sizeof(g_defaults.dir.core)); fill_pathname_expand_special(g_defaults.dir.core_info, @@ -324,22 +321,29 @@ static uint64_t frontend_win32_get_mem_used(void) static void frontend_win32_attach_console(void) { #ifdef _WIN32 +#if(_WIN32_WINNT >= 0x0500) if (!AttachConsole(ATTACH_PARENT_PROCESS)) { AllocConsole(); AttachConsole( GetCurrentProcessId()) ; + freopen( "CON", "w", stdout ); + freopen( "CON", "w", stderr ); } - freopen( "CON", "w", stdout ); - freopen( "CON", "w", stderr ); +#endif #endif } static void frontend_win32_detach_console(void) { #if defined(_WIN32) && !defined(_XBOX) - HWND wnd = GetConsoleWindow(); - FreeConsole(); - PostMessage(wnd, WM_CLOSE, 0, 0); +#if(_WIN32_WINNT >= 0x0500) + if (!AttachConsole(ATTACH_PARENT_PROCESS)) + { + HWND wnd = GetConsoleWindow(); + FreeConsole(); + PostMessage(wnd, WM_CLOSE, 0, 0); + } +#endif #endif } diff --git a/frontend/drivers/platform_xdk.cpp b/frontend/drivers/platform_xdk.cpp index 77d00abc82..ce96775ab7 100644 --- a/frontend/drivers/platform_xdk.cpp +++ b/frontend/drivers/platform_xdk.cpp @@ -22,6 +22,7 @@ #include #include +#include #ifdef HAVE_CONFIG_H #include "../../config.h" @@ -35,12 +36,15 @@ #include "../frontend_driver.h" #include "../../defaults.h" +#include "../../file_path_special.h" +#include "../../paths.h" #ifndef IS_SALAMANDER #include "../../retroarch.h" #ifdef HAVE_MENU #include "../../menu/menu_driver.h" #endif #endif +#include "../../verbosity.h" #ifdef _XBOX360 @@ -1271,7 +1275,7 @@ static void frontend_xdk_exec(const char *path, bool should_load_game) snprintf((char*)ptr.Data, sizeof(ptr.Data), "%s", path_get(RARCH_PATH_CONTENT)); if (!string_is_empty(path)) - XLaunchNewImage(path, !string_is_empty(ptr.Data) ? &ptr : NULL); + XLaunchNewImage(path, !string_is_empty((const char*)ptr.Data) ? &ptr : NULL); #elif defined(_XBOX360) char game_path[1024] = {0}; diff --git a/frontend/frontend.c b/frontend/frontend.c index 9d1d853b33..19d229935b 100644 --- a/frontend/frontend.c +++ b/frontend/frontend.c @@ -34,7 +34,10 @@ #include "../driver.h" #include "../paths.h" #include "../retroarch.h" + +#ifndef HAVE_MAIN #include "../runloop.h" +#endif /** * main_exit: diff --git a/gfx/common/caca_common.h b/gfx/common/caca_common.h new file mode 100644 index 0000000000..ead5ceb5e2 --- /dev/null +++ b/gfx/common/caca_common.h @@ -0,0 +1,36 @@ +/* RetroArch - A frontend for libretro. + * Copyright (C) 2010-2014 - Hans-Kristian Arntzen + * copyright (c) 2011-2015 - Daniel De Matteis + * copyright (c) 2016 - Brad Parker + * + * RetroArch is free software: you can redistribute it and/or modify it under the terms + * of the GNU General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with RetroArch. + * If not, see . + */ + +#ifndef __CACA_COMMON_H +#define __CACA_COMMON_H + +struct caca_canvas; +struct caca_dither; +struct caca_display; + +typedef struct caca_canvas caca_canvas_t; +typedef struct caca_dither caca_dither_t; +typedef struct caca_display caca_display_t; + +typedef struct caca +{ + caca_canvas_t **caca_cv; + caca_dither_t **caca_dither; + caca_display_t **caca_display; +} caca_t; + +#endif diff --git a/gfx/common/d3d_common.cpp b/gfx/common/d3d_common.cpp index 1ce01ad47d..be772007ec 100644 --- a/gfx/common/d3d_common.cpp +++ b/gfx/common/d3d_common.cpp @@ -18,7 +18,9 @@ #include "d3d_common.h" +#ifdef HAVE_D3D9 #include "../include/d3d9/d3dx9tex.h" +#endif bool d3d_swap(void *data, LPDIRECT3DDEVICE dev) { @@ -367,8 +369,9 @@ void d3d_set_viewports(LPDIRECT3DDEVICE dev, D3DVIEWPORT *vp) } void d3d_set_texture(LPDIRECT3DDEVICE dev, unsigned sampler, - LPDIRECT3DTEXTURE tex) + void *tex_data) { + LPDIRECT3DTEXTURE tex = (LPDIRECT3DTEXTURE)tex_data; #if defined(_XBOX1) D3DDevice_SetTexture(sampler, tex); #elif defined(_XBOX360) @@ -475,8 +478,10 @@ void d3d_frame_postprocess(void *data) if (!dev) return; +#if 0 if (!d3d_restore_device(dev)) return; +#endif dev->SetFlickerFilter(global->console.screen.flicker_filter_index); dev->SetSoftDisplayFilter(global->console.softfilter_enable); diff --git a/gfx/common/d3d_common.h b/gfx/common/d3d_common.h index b0a09bd60a..a06e3c0c1d 100644 --- a/gfx/common/d3d_common.h +++ b/gfx/common/d3d_common.h @@ -81,7 +81,7 @@ void d3d_lock_rectangle_clear(LPDIRECT3DTEXTURE tex, void d3d_unlock_rectangle(LPDIRECT3DTEXTURE tex); void d3d_set_texture(LPDIRECT3DDEVICE dev, unsigned sampler, - LPDIRECT3DTEXTURE tex); + void *tex_data); HRESULT d3d_set_vertex_shader(LPDIRECT3DDEVICE dev, unsigned index, void *data); diff --git a/gfx/common/drm_common.c b/gfx/common/drm_common.c index 32ec085889..985d74b285 100644 --- a/gfx/common/drm_common.c +++ b/gfx/common/drm_common.c @@ -20,17 +20,18 @@ #include "drm_common.h" -uint32_t g_connector_id; -int g_drm_fd; -uint32_t g_crtc_id; - -static drmModeCrtc *g_orig_crtc; struct pollfd g_drm_fds; -static drmModeRes *g_drm_resources; -drmModeConnector *g_drm_connector; -static drmModeEncoder *g_drm_encoder; -drmModeModeInfo *g_drm_mode; +uint32_t g_connector_id = 0; +int g_drm_fd = 0; +uint32_t g_crtc_id = 0; + +static drmModeCrtc *g_orig_crtc = NULL; + +static drmModeRes *g_drm_resources = NULL; +drmModeConnector *g_drm_connector = NULL; +static drmModeEncoder *g_drm_encoder = NULL; +drmModeModeInfo *g_drm_mode = NULL; drmEventContext g_drm_evctx; diff --git a/gfx/common/egl_common.c b/gfx/common/egl_common.c index 065a02484f..de75ee291e 100644 --- a/gfx/common/egl_common.c +++ b/gfx/common/egl_common.c @@ -29,7 +29,7 @@ #include "../../verbosity.h" #include "../../frontend/frontend_driver.h" -bool g_egl_inited; +bool g_egl_inited = false; unsigned g_egl_major = 0; unsigned g_egl_minor = 0; diff --git a/gfx/common/win32_common.cpp b/gfx/common/win32_common.cpp index 61cafb7717..990dfb3476 100644 --- a/gfx/common/win32_common.cpp +++ b/gfx/common/win32_common.cpp @@ -47,6 +47,8 @@ extern "C" { #endif +#include + LRESULT win32_menu_loop(HWND owner, WPARAM wparam); #ifndef _MSC_VER @@ -111,8 +113,8 @@ typedef REASON_CONTEXT POWER_REQUEST_CONTEXT, *PPOWER_REQUEST_CONTEXT, *LPPOWER_ #endif static HMONITOR win32_monitor_last; -static unsigned win32_monitor_count; static HMONITOR win32_monitor_all[MAX_MONITORS]; +static unsigned win32_monitor_count = 0; extern "C" { @@ -215,7 +217,7 @@ void win32_monitor_get_info(void) memset(¤t_mon, 0, sizeof(current_mon)); current_mon.cbSize = sizeof(MONITORINFOEX); - GetMonitorInfo(win32_monitor_last, (MONITORINFO*)¤t_mon); + GetMonitorInfo(win32_monitor_last, (MONITORINFOEX*)¤t_mon); ChangeDisplaySettingsEx(current_mon.szDevice, NULL, NULL, 0, NULL); } @@ -253,7 +255,7 @@ void win32_monitor_info(void *data, void *hm_data, unsigned *mon_id) memset(mon, 0, sizeof(*mon)); mon->cbSize = sizeof(MONITORINFOEX); - GetMonitorInfo(*hm_to_use, (MONITORINFO*)mon); + GetMonitorInfo(*hm_to_use, (MONITORINFOEX*)mon); } /* Get the count of the files dropped */ @@ -269,7 +271,7 @@ static int win32_drag_query_file(HWND hwnd, WPARAM wparam) core_info_list_t *core_info_list = NULL; const core_info_t *core_info = NULL; - DragQueryFile((HDROP)wparam, 0, szFilename, 1024); + DragQueryFile((HDROP)wparam, 0, szFilename, sizeof(szFilename)); core_info_get_list(&core_info_list); @@ -588,6 +590,7 @@ static bool win32_monitor_set_fullscreen(unsigned width, unsigned height, RARCH_LOG("Setting fullscreen to %ux%u @ %uHz on device %s.\n", width, height, refresh, dev_name); + return ChangeDisplaySettingsEx(dev_name, &devmode, NULL, CDS_FULLSCREEN, NULL) == DISP_CHANGE_SUCCESSFUL; #endif @@ -646,7 +649,7 @@ bool win32_suppress_screensaver(void *data, bool enable) typedef HANDLE (WINAPI * PowerCreateRequestPtr)(REASON_CONTEXT *context); typedef BOOL (WINAPI * PowerSetRequestPtr)(HANDLE PowerRequest, POWER_REQUEST_TYPE RequestType); - HMODULE kernel32 = GetModuleHandleW(L"kernel32.dll"); + HMODULE kernel32 = GetModuleHandle("kernel32.dll"); PowerCreateRequestPtr powerCreateRequest = (PowerCreateRequestPtr)GetProcAddress(kernel32, "PowerCreateRequest"); PowerSetRequestPtr powerSetRequest = @@ -679,6 +682,7 @@ bool win32_suppress_screensaver(void *data, bool enable) #endif } +/* FIXME: It should not be necessary to add the W after MONITORINFOEX, but linking fails without it. */ void win32_set_style(MONITORINFOEX *current_mon, HMONITOR *hm_to_use, unsigned *width, unsigned *height, bool fullscreen, bool windowed_full, RECT *rect, RECT *mon_rect, DWORD *style) @@ -711,7 +715,7 @@ void win32_set_style(MONITORINFOEX *current_mon, HMONITOR *hm_to_use, {} /* Display settings might have changed, get new coordinates. */ - GetMonitorInfo(*hm_to_use, (MONITORINFO*)current_mon); + GetMonitorInfo(*hm_to_use, (MONITORINFOEX*)current_mon); *mon_rect = current_mon->rcMonitor; } } diff --git a/gfx/common/win32_common.h b/gfx/common/win32_common.h index 552be27fd1..6e41231600 100644 --- a/gfx/common/win32_common.h +++ b/gfx/common/win32_common.h @@ -94,9 +94,12 @@ void win32_check_window(bool *quit, void win32_set_window(unsigned *width, unsigned *height, bool fullscreen, bool windowed_full, void *rect_data); +#ifndef _XBOX +/* FIXME: It should not be necessary to add the W after MONITORINFOEX, but linking fails without it. */ void win32_set_style(MONITORINFOEX *current_mon, HMONITOR *hm_to_use, unsigned *width, unsigned *height, bool fullscreen, bool windowed_full, RECT *rect, RECT *mon_rect, DWORD *style); +#endif void win32_window_reset(void); diff --git a/gfx/common/x11_common.c b/gfx/common/x11_common.c index 09e9cbe4e3..5f8a6e3bcf 100644 --- a/gfx/common/x11_common.c +++ b/gfx/common/x11_common.c @@ -40,22 +40,22 @@ static DBusConnection* dbus_connection = NULL; static unsigned int dbus_screensaver_cookie = 0; #endif -static bool xdg_screensaver_available = true; +static bool xdg_screensaver_available = true; +bool g_x11_entered = false; +static bool g_x11_has_focus = false; +static bool g_x11_true_full = false; +Display *g_x11_dpy = NULL; Colormap g_x11_cmap; Window g_x11_win; -Display *g_x11_dpy; static Atom XA_NET_WM_STATE; static Atom XA_NET_WM_STATE_FULLSCREEN; static Atom XA_NET_MOVERESIZE_WINDOW; static Atom g_x11_quit_atom; -static bool g_x11_has_focus; static XIM g_x11_xim; static XIC g_x11_xic; -static bool g_x11_true_full; -bool g_x11_entered = false; unsigned g_x11_screen; @@ -563,7 +563,7 @@ bool x11_alive(void *data) while (XPending(g_x11_dpy)) { - bool filter; + bool filter = false; /* Can get events from older windows. Check this. */ XNextEvent(g_x11_dpy, &event); diff --git a/gfx/drivers/caca_gfx.c b/gfx/drivers/caca_gfx.c new file mode 100644 index 0000000000..210327f2a1 --- /dev/null +++ b/gfx/drivers/caca_gfx.c @@ -0,0 +1,355 @@ +/* RetroArch - A frontend for libretro. + * Copyright (C) 2010-2014 - Hans-Kristian Arntzen + * Copyright (C) 2011-2016 - Daniel De Matteis + * Copyright (C) 2016 - Brad Parker + * + * RetroArch is free software: you can redistribute it and/or modify it under the terms + * of the GNU General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with RetroArch. + * If not, see . + */ + +#include +#include + +#include "../../driver.h" +#include "../../configuration.h" +#include "../../verbosity.h" +#include "../../menu/menu_driver.h" +#include "../common/caca_common.h" + +static caca_canvas_t *caca_cv = NULL; +static caca_dither_t *caca_dither = NULL; +static caca_display_t *caca_display = NULL; +static unsigned char *caca_menu_frame = NULL; +static unsigned caca_menu_width = 0; +static unsigned caca_menu_height = 0; +static unsigned caca_menu_pitch = 0; +static unsigned caca_video_width = 0; +static unsigned caca_video_height = 0; +static unsigned caca_video_pitch = 0; +static bool caca_rgb32 = 0; + +static void caca_gfx_free(void *data); + +static void caca_gfx_create() +{ + caca_display = caca_create_display(NULL); + caca_cv = caca_get_canvas(caca_display); + + if(!caca_video_width || !caca_video_height) + { + caca_video_width = caca_get_canvas_width(caca_cv); + caca_video_height = caca_get_canvas_height(caca_cv); + } + + if (caca_rgb32) + caca_dither = caca_create_dither(32, caca_video_width, caca_video_height, caca_video_pitch, + 0x00ff0000, 0xff00, 0xff, 0x0); + else + caca_dither = caca_create_dither(16, caca_video_width, caca_video_height, caca_video_pitch, + 0xf800, 0x7e0, 0x1f, 0x0); + + video_driver_set_size(&caca_video_width, &caca_video_height); +} + +static void *caca_gfx_init(const video_info_t *video, + const input_driver_t **input, void **input_data) +{ + settings_t *settings = config_get_ptr(); + caca_t *caca = (caca_t*)calloc(1, sizeof(*caca)); + + caca->caca_cv = &caca_cv; + caca->caca_dither = &caca_dither; + caca->caca_display = &caca_display; + + *input = NULL; + *input_data = NULL; + + caca_video_width = video->width; + caca_video_height = video->height; + caca_rgb32 = video->rgb32; + + if (video->rgb32) + caca_video_pitch = video->width * 4; + else + caca_video_pitch = video->width * 2; + + caca_gfx_create(); + + if (!caca_cv || !caca_dither || !caca_display) + { + /* TODO: handle errors */ + } + + if (settings->video.font_enable) + font_driver_init_osd(NULL, false, FONT_DRIVER_RENDER_CACA); + + return caca; +} + +static bool caca_gfx_frame(void *data, const void *frame, + unsigned frame_width, unsigned frame_height, uint64_t frame_count, + unsigned pitch, const char *msg) +{ + size_t len = 0; + void *buffer = NULL; + const void *frame_to_copy = frame; + unsigned width = 0; + unsigned height = 0; + bool draw = true; + + (void)data; + (void)frame; + (void)frame_width; + (void)frame_height; + (void)pitch; + (void)msg; + + if (!frame || !frame_width || !frame_height) + return true; + + if (caca_video_width != frame_width || caca_video_height != frame_height || caca_video_pitch != pitch) + { + if (frame_width > 4 && frame_height > 4) + { + caca_video_width = frame_width; + caca_video_height = frame_height; + caca_video_pitch = pitch; + caca_gfx_free(NULL); + caca_gfx_create(); + } + } + + if (!caca_cv) + return true; + + if (caca_menu_frame) + frame_to_copy = caca_menu_frame; + + width = caca_get_canvas_width(caca_cv); + height = caca_get_canvas_height(caca_cv); + + if (frame_to_copy == frame && frame_width == 4 && frame_height == 4 && (frame_width < width && frame_height < height)) + draw = false; + + caca_clear_canvas(caca_cv); + +#ifdef HAVE_MENU + menu_driver_ctl(RARCH_MENU_CTL_FRAME, NULL); +#endif + + if (msg) + font_driver_render_msg(NULL, msg, NULL); + + if (draw) + { + caca_dither_bitmap(caca_cv, 0, 0, + width, + height, + caca_dither, frame_to_copy); + + buffer = caca_export_canvas_to_memory(caca_cv, "caca", &len); + + if (buffer) + { + if (len) + caca_refresh_display(caca_display); + + free(buffer); + } + } + + return true; +} + +static void caca_gfx_set_nonblock_state(void *data, bool toggle) +{ + (void)data; + (void)toggle; +} + +static bool caca_gfx_alive(void *data) +{ + (void)data; + video_driver_set_size(&caca_video_width, &caca_video_height); + return true; +} + +static bool caca_gfx_focus(void *data) +{ + (void)data; + return true; +} + +static bool caca_gfx_suppress_screensaver(void *data, bool enable) +{ + (void)data; + (void)enable; + return false; +} + +static bool caca_gfx_has_windowed(void *data) +{ + (void)data; + return true; +} + +static void caca_gfx_free(void *data) +{ + (void)data; + + if (caca_display) + { + caca_free_display(caca_display); + caca_display = NULL; + } + + if (caca_dither) + { + caca_free_dither(caca_dither); + caca_dither = NULL; + } + + if (caca_menu_frame) + { + free(caca_menu_frame); + caca_menu_frame = NULL; + } +} + +static bool caca_gfx_set_shader(void *data, + enum rarch_shader_type type, const char *path) +{ + (void)data; + (void)type; + (void)path; + + return false; +} + +static void caca_gfx_set_rotation(void *data, + unsigned rotation) +{ + (void)data; + (void)rotation; +} + +static void caca_gfx_viewport_info(void *data, + struct video_viewport *vp) +{ + (void)data; + (void)vp; +} + +static bool caca_gfx_read_viewport(void *data, uint8_t *buffer) +{ + (void)data; + (void)buffer; + + return true; +} + +static void caca_set_texture_frame(void *data, + const void *frame, bool rgb32, unsigned width, unsigned height, + float alpha) +{ + unsigned pitch = width * 2; + + if (rgb32) + pitch = width * 4; + + if (caca_menu_frame) + { + free(caca_menu_frame); + caca_menu_frame = NULL; + } + + if (!caca_menu_frame || caca_menu_width != width || caca_menu_height != height || caca_menu_pitch != pitch) + if (pitch && height) + caca_menu_frame = (unsigned char*)malloc(pitch * height); + + if (caca_menu_frame && frame && pitch && height) + memcpy(caca_menu_frame, frame, pitch * height); +} + +static void caca_set_osd_msg(void *data, const char *msg, + const struct font_params *params, void *font) +{ + font_driver_render_msg(font, msg, params); +} + +static const video_poke_interface_t caca_poke_interface = { + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, +#ifdef HAVE_FBO + NULL, +#else + NULL, +#endif + NULL, + NULL, + NULL, +#if defined(HAVE_MENU) + caca_set_texture_frame, + NULL, + caca_set_osd_msg, + NULL, +#else + NULL, + NULL, + NULL, + NULL, +#endif + + NULL, +#ifdef HAVE_MENU + NULL, +#endif +}; + +static void caca_gfx_get_poke_interface(void *data, + const video_poke_interface_t **iface) +{ + (void)data; + *iface = &caca_poke_interface; +} + +void caca_gfx_set_viewport(void *data, unsigned viewport_width, + unsigned viewport_height, bool force_full, bool allow_rotate) +{ +} + +video_driver_t video_caca = { + caca_gfx_init, + caca_gfx_frame, + caca_gfx_set_nonblock_state, + caca_gfx_alive, + caca_gfx_focus, + caca_gfx_suppress_screensaver, + caca_gfx_has_windowed, + caca_gfx_set_shader, + caca_gfx_free, + "caca", + caca_gfx_set_viewport, + caca_gfx_set_rotation, + caca_gfx_viewport_info, + caca_gfx_read_viewport, + NULL, /* read_frame_raw */ + +#ifdef HAVE_OVERLAY + NULL, /* overlay_interface */ +#endif + caca_gfx_get_poke_interface, +}; diff --git a/gfx/drivers/ctr_gfx.c b/gfx/drivers/ctr_gfx.c index 8fbe8c6232..389a81e9a7 100644 --- a/gfx/drivers/ctr_gfx.c +++ b/gfx/drivers/ctr_gfx.c @@ -757,7 +757,7 @@ static bool ctr_frame(void* data, const void* frame, } - if (font_driver_has_render_msg() && msg) + if (msg) font_driver_render_msg(NULL, msg, NULL); // font_driver_render_msg(NULL, "TEST: 123 ABC àüî", NULL); diff --git a/gfx/drivers/d3d.cpp b/gfx/drivers/d3d.cpp index 5f12449a1a..016e3b41d0 100644 --- a/gfx/drivers/d3d.cpp +++ b/gfx/drivers/d3d.cpp @@ -51,6 +51,7 @@ #include "../../performance_counters.h" #include "../../defines/d3d_defines.h" +#include "../../runloop.h" #include "../../verbosity.h" #if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_HLSL) @@ -488,7 +489,7 @@ void d3d_make_d3dpp(void *data, { d3d_video_t *d3d = (d3d_video_t*)data; settings_t *settings = config_get_ptr(); -#ifdef _XBOX +#ifdef _XBOX360 /* TODO/FIXME - get rid of global state dependencies. */ global_t *global = global_get_ptr(); #endif @@ -1166,7 +1167,6 @@ static void *d3d_init(const video_info_t *info, d3d->keep_aspect = info->force_aspect; #ifdef _XBOX video_driver_set_own_driver(); - video_input_ctl(RARCH_INPUT_CTL_SET_OWN_DRIVER, NULL); #endif return d3d; @@ -1226,69 +1226,6 @@ static void d3d_free(void *data) win32_destroy_window(); } -#ifdef _XBOX - -#ifdef _XBOX1 -#include - -static bool texture_image_render(d3d_video_t *d3d, - struct texture_image *out_img, - int x, int y, int w, int h, bool force_fullscreen) -{ - LPDIRECT3DTEXTURE d3dt; - LPDIRECT3DVERTEXBUFFER d3dv; - void *verts = NULL; - float fX = (float)(x); - float fY = (float)(y); - - if (!d3d) - return false; - - d3dt = (LPDIRECT3DTEXTURE)out_img->texture_buf; - d3dv = (LPDIRECT3DVERTEXBUFFER)out_img->vertex_buf; - - if (!d3dt || !d3dv) - return false; - - /* Create the new vertices. */ - Vertex newVerts[] = - { - // x, y, z, color, u ,v - {fX, fY, 0.0f, 0, 0, 0}, - {fX + w, fY, 0.0f, 0, 1, 0}, - {fX + w, fY + h, 0.0f, 0, 1, 1}, - {fX, fY + h, 0.0f, 0, 0, 1} - }; - - /* Load the existing vertices */ - verts = d3d_vertex_buffer_lock(d3dv); - - if (!verts) - return false; - - /* Copy the new verts over the old verts */ - memcpy(verts, newVerts, sizeof(newVerts)); - d3d_vertex_buffer_unlock(d3dv); - - d3d_enable_blend_func(d3d->dev); - d3d_enable_alpha_blend_texture_func(d3d->dev); - - /* Draw the quad. */ - d3d_set_texture(d3d->dev, 0, d3dt); - d3d_set_stream_source(d3d->dev, 0, - d3dv, 0, sizeof(Vertex)); - d3d_set_vertex_shader(d3d->dev, D3DFVF_CUSTOMVERTEX, NULL); - - if (force_fullscreen) - d3d_set_viewport(d3d, w, h, force_fullscreen, false); - d3d_draw_primitive(d3d->dev, D3DPT_QUADLIST, 0, 1); - - return true; -} -#endif - -#endif - #ifdef HAVE_OVERLAY static void d3d_overlay_tex_geom( void *data, @@ -1503,7 +1440,7 @@ static bool d3d_frame(void *data, const void *frame, return false; } - if (font_driver_has_render_msg() && msg) + if (msg) { struct font_params font_parms = {0}; font_driver_render_msg(NULL, msg, &font_parms); diff --git a/gfx/drivers/d3d_renderchains/render_chain_xdk.cpp b/gfx/drivers/d3d_renderchains/render_chain_xdk.cpp index 882122ab83..cea5814bc1 100644 --- a/gfx/drivers/d3d_renderchains/render_chain_xdk.cpp +++ b/gfx/drivers/d3d_renderchains/render_chain_xdk.cpp @@ -17,6 +17,12 @@ #include #include #include "render_chain_driver.h" + +#include "../d3d.h" +#include "../../common/d3d_common.h" + +#include "../../video_shader_driver.h" + #include "../../../configuration.h" #include "../../../verbosity.h" @@ -41,7 +47,9 @@ typedef struct xdk_renderchain static void renderchain_set_mvp(void *data, unsigned vp_width, unsigned vp_height, unsigned rotation) { +#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_HLSL) video_shader_ctx_mvp_t mvp; +#endif d3d_video_t *d3d = (d3d_video_t*)data; LPDIRECT3DDEVICE d3dr = (LPDIRECT3DDEVICE)d3d->dev; @@ -51,7 +59,7 @@ static void renderchain_set_mvp(void *data, unsigned vp_width, mvp.data = d3d; mvp.matrix = NULL; - video_shadser_driver_set_mvp(&mvp); + video_shadser_driver_set_mvp(mvp); #elif defined(HAVE_D3D8) D3DXMATRIX p_out, p_rotate, mat; D3DXMatrixOrthoOffCenterLH(&mat, 0, vp_width, vp_height, 0, 0.0f, 1.0f); @@ -135,9 +143,11 @@ static bool renderchain_create_first_pass(void *data, static void renderchain_set_vertices(void *data, unsigned pass, unsigned vert_width, unsigned vert_height, uint64_t frame_count) { +#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_HLSL) #ifdef _XBOX video_shader_ctx_params_t params; video_shader_ctx_info_t shader_info; +#endif #endif unsigned width, height; d3d_video_t *d3d = (d3d_video_t*)data; @@ -225,7 +235,7 @@ static void renderchain_set_vertices(void *data, unsigned pass, shader_info.idx = pass; shader_info.set_active = true; - video_shader_driver_use(&shader_info); + video_shader_driver_use(shader_info); params.data = d3d; params.width = vert_width; @@ -241,7 +251,7 @@ static void renderchain_set_vertices(void *data, unsigned pass, params.fbo_info = NULL; params.fbo_info_cnt = 0; - video_shader_driver_set_parameters(¶ms); + video_shader_driver_set_parameters(params); #endif #endif } diff --git a/gfx/drivers/drm_gfx.c b/gfx/drivers/drm_gfx.c index 0cf9aeaeae..320758236b 100644 --- a/gfx/drivers/drm_gfx.c +++ b/gfx/drivers/drm_gfx.c @@ -20,6 +20,7 @@ #include #include +#include #include #include @@ -377,7 +378,7 @@ static void drm_format_name(const unsigned int fourcc, char *format_str) for (i = 0; i < ARRAY_SIZE(format_info); i++) { if (format_info[i].format == fourcc) - strcpy(format_str, format_info[i].name); + strlcpy(format_str, format_info[i].name, sizeof(format_str)); } } @@ -728,10 +729,13 @@ static void *drm_gfx_init(const video_info_t *video, if (!init_drm()) { RARCH_ERR ("DRM: Failed to initialize DRM\n"); + free(_drmvars); return NULL; } else - RARCH_LOG ("DRM: Init succesful.\n"); + { + RARCH_LOG ("DRM: Init successful.\n"); + } _drmvars->kms_width = drm.current_mode->hdisplay; _drmvars->kms_height = drm.current_mode->vdisplay; diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index 67b2ca4f8d..be923d038d 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -234,7 +234,7 @@ static void gl_render_overlay(gl_t *gl) shader_info.idx = VIDEO_SHADER_STOCK_BLEND; shader_info.set_active = true; - video_shader_driver_use(&shader_info); + video_shader_driver_use(shader_info); gl->coords.vertex = gl->overlay_vertex_coord; gl->coords.tex_coord = gl->overlay_tex_coord; @@ -244,12 +244,12 @@ static void gl_render_overlay(gl_t *gl) coords.handle_data = NULL; coords.data = &gl->coords; - video_shader_driver_set_coords(&coords); + video_shader_driver_set_coords(coords); mvp.data = gl; mvp.matrix = &gl->mvp_no_rot; - video_shader_driver_set_mvp(&mvp); + video_shader_driver_set_mvp(mvp); for (i = 0; i < gl->overlays; i++) { @@ -521,7 +521,6 @@ static void gl_update_input_size(gl_t *gl, unsigned width, GLfloat xamt, yamt; bool set_coords = false; - if ((width != gl->last_width[gl->tex_index] || height != gl->last_height[gl->tex_index]) && gl->empty_buf) { @@ -607,7 +606,12 @@ static void gl_init_textures_reference(gl_t *gl, unsigned i, if (gl->egl_images) return; - glTexImage2D(GL_TEXTURE_2D, +#ifndef HAVE_OPENGLES2 + if (gl_check_capability(GL_CAPS_TEX_STORAGE)) + glTexStorage2D(GL_TEXTURE_2D, 1, internal_fmt, gl->tex_w, gl->tex_h); + else +#endif + glTexImage2D(GL_TEXTURE_2D, 0, internal_fmt, gl->tex_w, gl->tex_h, 0, texture_type, texture_fmt, gl->empty_buf ? gl->empty_buf : NULL); #endif @@ -643,7 +647,7 @@ static void gl_init_textures(gl_t *gl, const video_info_t *video) texture_fmt = gl->texture_fmt; #endif -#ifdef HAVE_OPENGLES2 +#ifdef HAVE_OPENGLES /* GLES is picky about which format we use here. * Without extensions, we can *only* render to 16-bit FBOs. */ @@ -651,7 +655,12 @@ static void gl_init_textures(gl_t *gl, const video_info_t *video) { if (gl_check_capability(GL_CAPS_ARGB8)) { - internal_fmt = GL_RGBA; +#if !defined(HAVE_PSGL) + if (gl_check_capability(GL_CAPS_GLES3_SUPPORTED)) + internal_fmt = GL_RGBA8_OES; + else +#endif + internal_fmt = GL_RGBA; texture_type = GL_RGBA; texture_fmt = GL_UNSIGNED_BYTE; } @@ -826,7 +835,7 @@ static INLINE void gl_set_shader_viewport(gl_t *gl, unsigned idx) shader_info.idx = idx; shader_info.set_active = true; - video_shader_driver_use(&shader_info); + video_shader_driver_use(shader_info); gl_set_viewport(gl, width, height, false, true); } @@ -1041,19 +1050,19 @@ static INLINE void gl_draw_texture(gl_t *gl) shader_info.idx = VIDEO_SHADER_STOCK_BLEND; shader_info.set_active = true; - video_shader_driver_use(&shader_info); + video_shader_driver_use(shader_info); gl->coords.vertices = 4; coords.handle_data = NULL; coords.data = &gl->coords; - video_shader_driver_set_coords(&coords); + video_shader_driver_set_coords(coords); mvp.data = gl; mvp.matrix = &gl->mvp_no_rot; - video_shader_driver_set_mvp(&mvp); + video_shader_driver_set_mvp(mvp); glEnable(GL_BLEND); @@ -1109,7 +1118,7 @@ static bool gl_frame(void *data, const void *frame, shader_info.idx = 1; shader_info.set_active = true; - video_shader_driver_use(&shader_info); + video_shader_driver_use(shader_info); #ifdef IOS /* Apparently the viewport is lost each frame, thanks Apple. */ @@ -1241,18 +1250,18 @@ static bool gl_frame(void *data, const void *frame, params.fbo_info = NULL; params.fbo_info_cnt = 0; - video_shader_driver_set_parameters(¶ms); + video_shader_driver_set_parameters(params); gl->coords.vertices = 4; coords.handle_data = NULL; coords.data = &gl->coords; - video_shader_driver_set_coords(&coords); + video_shader_driver_set_coords(coords); mvp.data = gl; mvp.matrix = &gl->mvp; - video_shader_driver_set_mvp(&mvp); + video_shader_driver_set_mvp(mvp); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); @@ -1274,7 +1283,7 @@ static bool gl_frame(void *data, const void *frame, } #endif - if (font_driver_has_render_msg() && msg) + if (msg) font_driver_render_msg(NULL, msg, NULL); #ifdef HAVE_OVERLAY @@ -1293,7 +1302,7 @@ static bool gl_frame(void *data, const void *frame, shader_info.idx = 0; shader_info.set_active = true; - video_shader_driver_use(&shader_info); + video_shader_driver_use(shader_info); glBindTexture(GL_TEXTURE_2D, 0); #ifndef NO_GL_FF_VERTEX diff --git a/gfx/drivers/gl_renderchains/render_chain_gl_legacy.c b/gfx/drivers/gl_renderchains/render_chain_gl_legacy.c index ceda58f9d2..6010b9895a 100644 --- a/gfx/drivers/gl_renderchains/render_chain_gl_legacy.c +++ b/gfx/drivers/gl_renderchains/render_chain_gl_legacy.c @@ -153,72 +153,63 @@ void gl_renderchain_convert_geometry(gl_t *gl, } } - - - static bool gl_recreate_fbo( struct video_fbo_rect *fbo_rect, GLuint fbo, - GLuint texture + GLuint* texture ) { glBindFramebuffer(RARCH_GL_FRAMEBUFFER, fbo); - glBindTexture(GL_TEXTURE_2D, texture); - - glTexImage2D(GL_TEXTURE_2D, - 0, RARCH_GL_INTERNAL_FORMAT32, - fbo_rect->width, - fbo_rect->height, - 0, RARCH_GL_TEXTURE_TYPE32, - RARCH_GL_FORMAT32, NULL); + glDeleteTextures(1, texture); + glGenTextures(1, texture); + glBindTexture(GL_TEXTURE_2D, *texture); +#if !defined(HAVE_OPENGLES2) && !defined(HAVE_PSGL) + if (gl_check_capability(GL_CAPS_TEX_STORAGE)) + glTexStorage2D(GL_TEXTURE_2D, 1, RARCH_GL_INTERNAL_FORMAT32, + fbo_rect->width, fbo_rect->height); + else +#endif + glTexImage2D(GL_TEXTURE_2D, + 0, RARCH_GL_INTERNAL_FORMAT32, + fbo_rect->width, + fbo_rect->height, + 0, RARCH_GL_TEXTURE_TYPE32, + RARCH_GL_FORMAT32, NULL); glFramebufferTexture2D(RARCH_GL_FRAMEBUFFER, RARCH_GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, - texture, 0); + *texture, 0); - if (glCheckFramebufferStatus(RARCH_GL_FRAMEBUFFER) != RARCH_GL_FRAMEBUFFER_COMPLETE) - { - RARCH_WARN("Failed to reinitialize FBO texture.\n"); - return false; - } + if (glCheckFramebufferStatus(RARCH_GL_FRAMEBUFFER) + == RARCH_GL_FRAMEBUFFER_COMPLETE) + return true; - return true; + RARCH_WARN("Failed to reinitialize FBO texture.\n"); + return false; } static void gl_check_fbo_dimension(gl_t *gl, unsigned i, - GLuint fbo, GLuint texture, bool update_feedback) + bool update_feedback) { - unsigned img_width, img_height, max, pow2_size; - bool check_dimensions = false; struct video_fbo_rect *fbo_rect = &gl->fbo_rect[i]; - - if (!fbo_rect) - return; - - check_dimensions = - (fbo_rect->max_img_width > fbo_rect->width) || - (fbo_rect->max_img_height > fbo_rect->height); - - if (!check_dimensions) - return; - /* Check proactively since we might suddently * get sizes of tex_w width or tex_h height. */ - img_width = fbo_rect->max_img_width; - img_height = fbo_rect->max_img_height; - max = img_width > img_height ? img_width : img_height; - pow2_size = next_pow2(max); + unsigned img_width = fbo_rect->max_img_width; + unsigned img_height = fbo_rect->max_img_height; + unsigned max = img_width > img_height ? img_width : img_height; + unsigned pow2_size = next_pow2(max); - fbo_rect->width = fbo_rect->height = pow2_size; + fbo_rect->width = pow2_size; + fbo_rect->height = pow2_size; - gl_recreate_fbo(fbo_rect, fbo, texture); + gl_recreate_fbo(fbo_rect, gl->fbo[i], &gl->fbo_texture[i]); /* Update feedback texture in-place so we avoid having to * juggle two different fbo_rect structs since they get updated here. */ if (update_feedback) { if (gl_recreate_fbo(fbo_rect, gl->fbo_feedback, - gl->fbo_feedback_texture)) + &gl->fbo_feedback_texture)) { /* Make sure the feedback textures are cleared * so we don't feedback noise. */ @@ -243,8 +234,12 @@ void gl_check_fbo_dimensions(gl_t *gl) { bool update_feedback = gl->fbo_feedback_enable && (unsigned)i == gl->fbo_feedback_pass; - gl_check_fbo_dimension(gl, i, gl->fbo[i], - gl->fbo_texture[i], update_feedback); + struct video_fbo_rect *fbo_rect = &gl->fbo_rect[i]; + bool check_dimensions = + (fbo_rect->max_img_width > fbo_rect->width) || + (fbo_rect->max_img_height > fbo_rect->height); + if (fbo_rect && check_dimensions) + gl_check_fbo_dimension(gl, i, update_feedback); } } void gl_renderchain_render(gl_t *gl, @@ -302,7 +297,7 @@ void gl_renderchain_render(gl_t *gl, shader_info.idx = i + 1; shader_info.set_active = true; - video_shader_driver_use(&shader_info); + video_shader_driver_use(shader_info); glBindTexture(GL_TEXTURE_2D, gl->fbo_texture[i - 1]); mip_level = i + 1; @@ -330,19 +325,19 @@ void gl_renderchain_render(gl_t *gl, params.fbo_info = fbo_tex_info; params.fbo_info_cnt = fbo_tex_info_cnt; - video_shader_driver_set_parameters(¶ms); + video_shader_driver_set_parameters(params); gl->coords.vertices = 4; coords.handle_data = NULL; coords.data = &gl->coords; - video_shader_driver_set_coords(&coords); + video_shader_driver_set_coords(coords); mvp.data = gl; mvp.matrix = &gl->mvp; - video_shader_driver_set_mvp(&mvp); + video_shader_driver_set_mvp(mvp); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); } @@ -377,7 +372,7 @@ void gl_renderchain_render(gl_t *gl, shader_info.idx = gl->fbo_pass + 1; shader_info.set_active = true; - video_shader_driver_use(&shader_info); + video_shader_driver_use(shader_info); glBindTexture(GL_TEXTURE_2D, gl->fbo_texture[gl->fbo_pass - 1]); @@ -404,7 +399,7 @@ void gl_renderchain_render(gl_t *gl, params.fbo_info = fbo_tex_info; params.fbo_info_cnt = fbo_tex_info_cnt; - video_shader_driver_set_parameters(¶ms); + video_shader_driver_set_parameters(params); gl->coords.vertex = gl->vertex_ptr; @@ -413,12 +408,12 @@ void gl_renderchain_render(gl_t *gl, coords.handle_data = NULL; coords.data = &gl->coords; - video_shader_driver_set_coords(&coords); + video_shader_driver_set_coords(coords); mvp.data = gl; mvp.matrix = &gl->mvp; - video_shader_driver_set_mvp(&mvp); + video_shader_driver_set_mvp(mvp); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); gl->coords.tex_coord = gl->tex_info.coord; @@ -529,11 +524,17 @@ static void gl_create_fbo_texture(gl_t *gl, unsigned i, GLuint texture) RARCH_ERR("[GL]: Floating-point FBO was requested, but is not supported. Falling back to UNORM. Result may band/clip/etc.!\n"); } -#ifndef HAVE_OPENGLES2 +#if !defined(HAVE_OPENGLES2) if (fp_fbo && gl->has_fp_fbo) { RARCH_LOG("[GL]: FBO pass #%d is floating-point.\n", i); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, +#if !defined(HAVE_PSGL) + if (gl_check_capability(GL_CAPS_TEX_STORAGE)) + glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA32F, + gl->fbo_rect[i].width, gl->fbo_rect[i].height); + else +#endif + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, gl->fbo_rect[i].width, gl->fbo_rect[i].height, 0, GL_RGBA, GL_FLOAT, NULL); } @@ -564,7 +565,11 @@ static void gl_create_fbo_texture(gl_t *gl, unsigned i, GLuint texture) gl->has_srgb_fbo_gles3 ? GL_RGBA : GL_SRGB_ALPHA_EXT, GL_UNSIGNED_BYTE, NULL); #else - glTexImage2D(GL_TEXTURE_2D, + if (gl_check_capability(GL_CAPS_TEX_STORAGE)) + glTexStorage2D(GL_TEXTURE_2D, 1, GL_SRGB8_ALPHA8, + gl->fbo_rect[i].width, gl->fbo_rect[i].height); + else + glTexImage2D(GL_TEXTURE_2D, 0, GL_SRGB8_ALPHA8, gl->fbo_rect[i].width, gl->fbo_rect[i].height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); @@ -573,7 +578,7 @@ static void gl_create_fbo_texture(gl_t *gl, unsigned i, GLuint texture) else #endif { -#ifdef HAVE_OPENGLES2 +#if defined(HAVE_OPENGLES2) || defined(HAVE_PSGL) glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, gl->fbo_rect[i].width, gl->fbo_rect[i].height, 0, @@ -581,7 +586,11 @@ static void gl_create_fbo_texture(gl_t *gl, unsigned i, GLuint texture) #else /* Avoid potential performance * reductions on particular platforms. */ - glTexImage2D(GL_TEXTURE_2D, + if (gl_check_capability(GL_CAPS_TEX_STORAGE)) + glTexStorage2D(GL_TEXTURE_2D, 1, RARCH_GL_INTERNAL_FORMAT32, + gl->fbo_rect[i].width, gl->fbo_rect[i].height); + else + glTexImage2D(GL_TEXTURE_2D, 0, RARCH_GL_INTERNAL_FORMAT32, gl->fbo_rect[i].width, gl->fbo_rect[i].height, 0, RARCH_GL_TEXTURE_TYPE32, RARCH_GL_FORMAT32, NULL); diff --git a/gfx/drivers/gl_shaders/legacy_pipeline_snow.glsl.vert.h b/gfx/drivers/gl_shaders/legacy_pipeline_snow.glsl.vert.h new file mode 100644 index 0000000000..520873c994 --- /dev/null +++ b/gfx/drivers/gl_shaders/legacy_pipeline_snow.glsl.vert.h @@ -0,0 +1,14 @@ +#include "shaders_common.h" + +static const char *stock_vertex_xmb_snow_legacy = GLSL( + attribute vec3 VertexCoord; + uniform float time; + + void main() + { + vec3 v = vec3(VertexCoord.x, 0.0, VertexCoord.y); + vec3 v2 = v; + v.y = v.z; + gl_Position = vec4(VertexCoord.x, VertexCoord.y, VertexCoord.y, 1.0); + } +); diff --git a/gfx/drivers/gl_shaders/legacy_pipeline_xmb_ribbon.glsl.vert.h b/gfx/drivers/gl_shaders/legacy_pipeline_xmb_ribbon.glsl.vert.h index 889e08be9f..c5814a2456 100644 --- a/gfx/drivers/gl_shaders/legacy_pipeline_xmb_ribbon.glsl.vert.h +++ b/gfx/drivers/gl_shaders/legacy_pipeline_xmb_ribbon.glsl.vert.h @@ -1,6 +1,6 @@ #include "shaders_common.h" -static const char *stock_vertex_xmb_legacy = GLSL( +static const char *stock_vertex_xmb_ribbon_legacy = GLSL( attribute vec3 VertexCoord; uniform float time; varying vec3 fragVertexEc; diff --git a/gfx/drivers/gl_shaders/legacy_pipeline_xmb_ribbon_simple.glsl.vert.h b/gfx/drivers/gl_shaders/legacy_pipeline_xmb_ribbon_simple.glsl.vert.h index 1713451fd2..bab076d34b 100644 --- a/gfx/drivers/gl_shaders/legacy_pipeline_xmb_ribbon_simple.glsl.vert.h +++ b/gfx/drivers/gl_shaders/legacy_pipeline_xmb_ribbon_simple.glsl.vert.h @@ -1,6 +1,6 @@ #include "shaders_common.h" -static const char *stock_vertex_xmb_simple_legacy = GLSL( +static const char *stock_vertex_xmb_ribbon_simple_legacy = GLSL( attribute vec3 VertexCoord; uniform float time; float iqhash( float n ) diff --git a/gfx/drivers/gl_shaders/modern_pipeline_snow.glsl.vert.h b/gfx/drivers/gl_shaders/modern_pipeline_snow.glsl.vert.h new file mode 100644 index 0000000000..405ab02e96 --- /dev/null +++ b/gfx/drivers/gl_shaders/modern_pipeline_snow.glsl.vert.h @@ -0,0 +1,16 @@ +#include "shaders_common.h" + +/* Need to duplicate these to work around broken stuff on Android. + * Must enforce alpha = 1.0 or 32-bit games can potentially go black. */ +static const char *stock_vertex_xmb_snow_modern = GLSL( + attribute vec2 TexCoord; + attribute vec2 VertexCoord; + attribute vec4 Color; + uniform mat4 MVPMatrix; + varying vec2 tex_coord; + + void main() { + gl_Position = MVPMatrix * vec4(VertexCoord, 0.0, 1.0); + tex_coord = TexCoord; + } +); diff --git a/gfx/drivers/gl_shaders/modern_pipeline_xmb_ribbon.glsl.vert.h b/gfx/drivers/gl_shaders/modern_pipeline_xmb_ribbon.glsl.vert.h index 93a083d8c2..0e60e568dc 100644 --- a/gfx/drivers/gl_shaders/modern_pipeline_xmb_ribbon.glsl.vert.h +++ b/gfx/drivers/gl_shaders/modern_pipeline_xmb_ribbon.glsl.vert.h @@ -1,6 +1,6 @@ #include "shaders_common.h" -static const char *stock_vertex_xmb_modern = GLSL( +static const char *stock_vertex_xmb_ribbon_modern = GLSL( in vec3 VertexCoord; uniform float time; out vec3 fragVertexEc; diff --git a/gfx/drivers/gl_shaders/pipeline_snow.cg.h b/gfx/drivers/gl_shaders/pipeline_snow.cg.h new file mode 100644 index 0000000000..1d9ee06969 --- /dev/null +++ b/gfx/drivers/gl_shaders/pipeline_snow.cg.h @@ -0,0 +1,60 @@ +#include "shaders_common.h" + +static const char *stock_xmb_snow = CG( + struct input + { + float time; + }; + + float iqhash(float n) + { + return frac(sin(n)*43758.5453); + } + + float noise(float3 x) + { + float3 p = floor(x); + float3 f = frac(x); + f = f * f * (3.0 - 2.0 * f); + float n = p.x + p.y * 57.0 + 113.0 * p.z; + return lerp(lerp(lerp(iqhash(n+0.0), iqhash(n+1.0), f.x), + lerp(iqhash(n+57.0), iqhash(n+58.0), f.x), f.y), + lerp(lerp(iqhash(n+113.0), iqhash(n+114.0), f.x), + lerp(iqhash(n+170.0), iqhash(n+171.0), f.x), f.y), f.z); + } + + void main_vertex + ( + float2 position : POSITION, + float4 color : COLOR, + float2 texCoord : TEXCOORD0, + + uniform input IN, + + out float4 oPosition : POSITION, + out float4 oColor : COLOR, + out float2 otexCoord : TEXCOORD + ) + { + float3 v = float3(position.x, 0.0, position.y); + float3 v2 = v; + v2.x = v2.x + IN.time / 2.0; + v2.z = v.z * 3.0; + v.y = -cos((v.x + v.z / 3.0 + IN.time) * 2.0) / 10.0 - noise(v2.xyz) / 3.0; + oPosition = float4(v, 1.0); + oColor = color; + otexCoord = texCoord; + } + + struct output + { + float4 color : COLOR; + }; + + output main_fragment(uniform input IN) + { + output OUT; + OUT.color = float4(1.0, 1.0, 1.0, 0.05); + return OUT; + } +); diff --git a/gfx/drivers/gl_shaders/pipeline_snow.glsl.frag.h b/gfx/drivers/gl_shaders/pipeline_snow.glsl.frag.h new file mode 100644 index 0000000000..2f4d96f0ac --- /dev/null +++ b/gfx/drivers/gl_shaders/pipeline_snow.glsl.frag.h @@ -0,0 +1,69 @@ +#include "shaders_common.h" + +static const char* stock_fragment_xmb_snow = GLSL( + uniform float time; + uniform vec2 OutputSize; + + float baseScale = 3.5; // [1.0 .. 10.0] + float density = 0.7; // [0.01 .. 1.0] + float speed = 0.25; // [0.1 .. 1.0] + + float rand(vec2 co) + { + return fract(sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453); + } + + float dist_func(vec2 distv) + { + float dist = sqrt((distv.x * distv.x) + (distv.y * distv.y)) * (40.0 / baseScale); + dist = clamp(dist, 0.0, 1.0); + return cos(dist * (3.14159265358 * 0.5)) * 0.5; + } + + float random_dots(vec2 co) + { + float part = 1.0 / 20.0; + vec2 cd = floor(co / part); + float p = rand(cd); + + if (p > 0.005 * (density * 40.0)) + return 0.0; + + vec2 dpos = (vec2(fract(p * 2.0) , p) + vec2(2.0, 2.0)) * 0.25; + + vec2 cellpos = fract(co / part); + vec2 distv = (cellpos - dpos); + + return dist_func(distv); + } + + float snow(vec2 pos, float time, float scale) + { + // add wobble + pos.x += cos(pos.y * 1.2 + time * 3.14159 * 2.0 + 1.0 / scale) / (8.0 / scale) * 4.0; + // add gravity + pos += time * scale * vec2(-0.5, 1.0) * 4.0; + return random_dots(pos / scale) * (scale * 0.5 + 0.5); + } + + void main(void) + { + float tim = time * 0.4 * speed; + vec2 pos = gl_FragCoord.xy / OutputSize.xx; + float a = 0.0; + // Each of these is a layer of snow + // Remove some for better performance + // Changing the scale (3rd value) will mess with the looping + a += snow(pos, tim, 1.0); + a += snow(pos, tim, 0.7); + a += snow(pos, tim, 0.6); + a += snow(pos, tim, 0.5); + a += snow(pos, tim, 0.4); + a += snow(pos, tim, 0.3); + a += snow(pos, tim, 0.25); + a += snow(pos, tim, 0.125); + a = a * min(pos.y * 4.0, 1.0); + gl_FragColor = vec4(1.0, 1.0, 1.0, a); + } + +); diff --git a/gfx/drivers/gl_shaders/pipeline_snow_simple.glsl.frag.h b/gfx/drivers/gl_shaders/pipeline_snow_simple.glsl.frag.h new file mode 100644 index 0000000000..a72ad96299 --- /dev/null +++ b/gfx/drivers/gl_shaders/pipeline_snow_simple.glsl.frag.h @@ -0,0 +1,69 @@ +#include "shaders_common.h" + +static const char *stock_fragment_xmb_simple_snow = GLSL( + uniform float time; + uniform vec2 OutputSize; + + float baseScale = 1.25; // [1.0 .. 10.0] + float density = 0.5; // [0.01 .. 1.0] + float speed = 0.15; // [0.1 .. 1.0] + + float rand(vec2 co) + { + return fract(sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453); + } + + float dist_func(vec2 distv) + { + float dist = sqrt((distv.x * distv.x) + (distv.y * distv.y)) * (40.0 / baseScale); + dist = clamp(dist, 0.0, 1.0); + return cos(dist * (3.14159265358 * 0.5)) * 0.5; + } + + float random_dots(vec2 co) + { + float part = 1.0 / 20.0; + vec2 cd = floor(co / part); + float p = rand(cd); + + if (p > 0.005 * (density * 40.0)) + return 0.0; + + vec2 dpos = (vec2(fract(p * 2.0) , p) + vec2(2.0, 2.0)) * 0.25; + + vec2 cellpos = fract(co / part); + vec2 distv = (cellpos - dpos); + + return dist_func(distv); + } + + float snow(vec2 pos, float time, float scale) + { + // add wobble + pos.x += cos(pos.y * 1.2 + time * 3.14159 * 2.0 + 1.0 / scale) / (8.0 / scale) * 4.0; + // add gravity + pos += time * scale * vec2(-0.5, 1.0) * 4.0; + return random_dots(pos / scale) * (scale * 0.5 + 0.5); + } + + void main(void) + { + float tim = time * 0.4 * speed; + vec2 pos = gl_FragCoord.xy / OutputSize.xx; + float a = 0.0; + // Each of these is a layer of snow + // Remove some for better performance + // Changing the scale (3rd value) will mess with the looping + a += snow(pos, tim, 1.0); + a += snow(pos, tim, 0.7); + a += snow(pos, tim, 0.6); + a += snow(pos, tim, 0.5); + a += snow(pos, tim, 0.4); + a += snow(pos, tim, 0.3); + a += snow(pos, tim, 0.25); + a += snow(pos, tim, 0.125); + a = a * min(pos.y * 4.0, 1.0); + gl_FragColor = vec4(1.0, 1.0, 1.0, a); + } + +); diff --git a/gfx/drivers/gl_shaders/pipeline_xmb_ribbon_simple.cg.h b/gfx/drivers/gl_shaders/pipeline_xmb_ribbon_simple.cg.h index 53dfa09483..805d32c25b 100644 --- a/gfx/drivers/gl_shaders/pipeline_xmb_ribbon_simple.cg.h +++ b/gfx/drivers/gl_shaders/pipeline_xmb_ribbon_simple.cg.h @@ -1,6 +1,6 @@ #include "shaders_common.h" -static const char *stock_xmb_simple = CG( +static const char *stock_xmb_ribbon_simple = CG( struct input { float time; diff --git a/gfx/drivers/gl_shaders/pipeline_xmb_ribbon_simple.glsl.frag.h b/gfx/drivers/gl_shaders/pipeline_xmb_ribbon_simple.glsl.frag.h index ba7df06ab6..26c4081b44 100644 --- a/gfx/drivers/gl_shaders/pipeline_xmb_ribbon_simple.glsl.frag.h +++ b/gfx/drivers/gl_shaders/pipeline_xmb_ribbon_simple.glsl.frag.h @@ -1,6 +1,6 @@ #include "shaders_common.h" -static const char *stock_fragment_xmb_simple = GLSL( +static const char *stock_fragment_xmb_ribbon_simple = GLSL( uniform float time; void main() diff --git a/gfx/drivers/gl_shaders/shaders_common.h b/gfx/drivers/gl_shaders/shaders_common.h index ce09b6eed8..3ea1fbc955 100644 --- a/gfx/drivers/gl_shaders/shaders_common.h +++ b/gfx/drivers/gl_shaders/shaders_common.h @@ -3,8 +3,26 @@ #if defined(HAVE_OPENGLES) #define CG(src) "" #src -#define GLSL(src) "precision mediump float;\n" #src -#define GLSL_330(src) "#version 330 es\nprecision mediump float;\n" #src +#define GLSL(src) "#extension GL_OES_standard_derivatives : enable\n" \ + "#ifdef GL_ES\n" \ + " #ifdef GL_FRAGMENT_PRECISION_HIGH\n" \ + " precision highp float;\n" \ + " #else\n" \ + " precision mediump float;\n" \ + " #endif\n" \ + "#else\n" \ + " precision mediump float;\n" \ + "#endif\n" #src +#define GLSL_330(src) "#version 330 es\n" \ + "#ifdef GL_ES\n" \ + " #ifdef GL_FRAGMENT_PRECISION_HIGH\n" \ + " precision highp float;\n" \ + " #else\n" \ + " precision mediump float;\n" \ + " #endif\n" \ + "#else\n" \ + " precision mediump float;\n" \ + "#endif\n" #src #else #define CG(src) "" #src #define GLSL(src) "" #src diff --git a/gfx/drivers/vita2d_gfx.c b/gfx/drivers/vita2d_gfx.c index cb10df5891..7a3ca5090a 100644 --- a/gfx/drivers/vita2d_gfx.c +++ b/gfx/drivers/vita2d_gfx.c @@ -43,7 +43,6 @@ static void *vita2d_gfx_init(const video_info_t *video, const input_driver_t **input, void **input_data) { vita_video_t *vita = (vita_video_t *)calloc(1, sizeof(vita_video_t)); - settings_t *settings = config_get_ptr(); unsigned temp_width = PSP_FB_WIDTH; unsigned temp_height = PSP_FB_HEIGHT; @@ -133,7 +132,6 @@ static bool vita2d_gfx_frame(void *data, const void *frame, vita_video_t *vita = (vita_video_t *)data; settings_t *settings = config_get_ptr(); - if (frame) { if(!(vita->texture&&vita2d_texture_get_datap(vita->texture)==frame)){ diff --git a/gfx/drivers/vulkan.c b/gfx/drivers/vulkan.c index 0c562f462b..153b94a614 100644 --- a/gfx/drivers/vulkan.c +++ b/gfx/drivers/vulkan.c @@ -1282,7 +1282,7 @@ static void vulkan_set_rotation(void *data, unsigned rotation) if (!vk) return; - vk->rotation = 90 * rotation; + vk->rotation = 270 * rotation; vulkan_set_projection(vk, &ortho, true); } @@ -2076,9 +2076,9 @@ static void vulkan_set_texture_frame(void *data, uint8_t *dst = NULL; const uint8_t *src = NULL; vk_t *vk = (vk_t*)data; - unsigned index = vk->context->current_swapchain_index; - struct vk_texture *texture = &vk->menu.textures[index]; - struct vk_texture *texture_optimal = &vk->menu.textures_optimal[index]; + unsigned index = 0; + struct vk_texture *texture = NULL; + struct vk_texture *texture_optimal = NULL; const VkComponentMapping br_swizzle = { VK_COMPONENT_SWIZZLE_B, VK_COMPONENT_SWIZZLE_G, @@ -2089,6 +2089,10 @@ static void vulkan_set_texture_frame(void *data, if (!vk) return; + index = vk->context->current_swapchain_index; + texture = &vk->menu.textures[index]; + texture_optimal = &vk->menu.textures_optimal[index]; + /* B4G4R4A4 must be supported, but R4G4B4A4 is optional, * just apply the swizzle in the image view instead. */ *texture = vulkan_create_texture(vk, @@ -2151,16 +2155,42 @@ static uintptr_t vulkan_load_texture(void *video_data, void *data, vk_t *vk = (vk_t*)video_data; struct texture_image *image = (struct texture_image*)data; struct vk_texture *texture = (struct vk_texture*)calloc(1, sizeof(*texture)); - if (!texture) + if (!image || !texture) return 0; - *texture = vulkan_create_texture(vk, NULL, - image->width, image->height, VK_FORMAT_B8G8R8A8_UNORM, - image->pixels, NULL, VULKAN_TEXTURE_STATIC); + if (!image->pixels || !image->width || !image->height) + { + /* Create a dummy texture instead. */ +#define T0 0xff000000u +#define T1 0xffffffffu + static const uint32_t checkerboard[] = { + T0, T1, T0, T1, T0, T1, T0, T1, + T1, T0, T1, T0, T1, T0, T1, T0, + T0, T1, T0, T1, T0, T1, T0, T1, + T1, T0, T1, T0, T1, T0, T1, T0, + T0, T1, T0, T1, T0, T1, T0, T1, + T1, T0, T1, T0, T1, T0, T1, T0, + T0, T1, T0, T1, T0, T1, T0, T1, + T1, T0, T1, T0, T1, T0, T1, T0, + }; +#undef T0 +#undef T1 + *texture = vulkan_create_texture(vk, NULL, + 8, 8, VK_FORMAT_B8G8R8A8_UNORM, + checkerboard, NULL, VULKAN_TEXTURE_STATIC); + texture->default_smooth = false; + texture->mipmap = false; + } + else + { + *texture = vulkan_create_texture(vk, NULL, + image->width, image->height, VK_FORMAT_B8G8R8A8_UNORM, + image->pixels, NULL, VULKAN_TEXTURE_STATIC); - texture->default_smooth = - filter_type == TEXTURE_FILTER_MIPMAP_LINEAR || filter_type == TEXTURE_FILTER_LINEAR; - texture->mipmap = filter_type == TEXTURE_FILTER_MIPMAP_LINEAR; + texture->default_smooth = + filter_type == TEXTURE_FILTER_MIPMAP_LINEAR || filter_type == TEXTURE_FILTER_LINEAR; + texture->mipmap = filter_type == TEXTURE_FILTER_MIPMAP_LINEAR; + } return (uintptr_t)texture; } diff --git a/gfx/drivers/vulkan_shaders/pipeline_snow_simple.frag b/gfx/drivers/vulkan_shaders/pipeline_snow_simple.frag new file mode 100644 index 0000000000..d55983b42c --- /dev/null +++ b/gfx/drivers/vulkan_shaders/pipeline_snow_simple.frag @@ -0,0 +1,13 @@ +#version 310 es + +layout(location = 0) in vec3 VertexCoord; + +layout(std140, set = 0, binding = 0) uniform UBO +{ + float time; +} constants; + +void main() +{ + gl_Position = MVPMatrix * vec4(VertexCoord, 0.0, 1.0); +} diff --git a/gfx/drivers/vulkan_shaders/pipeline_snow_simple.vert b/gfx/drivers/vulkan_shaders/pipeline_snow_simple.vert new file mode 100644 index 0000000000..a850e7aee9 --- /dev/null +++ b/gfx/drivers/vulkan_shaders/pipeline_snow_simple.vert @@ -0,0 +1,66 @@ +#version 310 es +precision highp float; + +layout(std140, set = 0, binding = 0) uniform UBO +{ + float time; +} constants; + +layout(location = 0) out vec4 FragColor; + + vec2 res = vec2(1920*3, 1080*3); + + // High quality = larger patterns + // quality * 84 is the number of seconds in a loop + float quality = 8.0; + + float Cellular2D(vec2 P) { + // https://github.com/BrianSharpe/Wombat/blob/master/Cellular2D.glsl + vec2 Pi = floor(P); + vec2 Pf = P - Pi; + vec2 Pt = vec2( Pi.x, Pi.y + 1.0 ); + Pt = Pt - floor(Pt * ( 1.0 / 71.0 )) * 71.0; + Pt += vec2( 26.0, 161.0 ).xy; + Pt *= Pt; + Pt = Pt.xy * Pt.yx; + float hash_x = fract( Pt * ( 1.0 / 951.135664 ) ).x * 2.0 - 1.0; + float hash_y = fract( Pt * ( 1.0 / 642.949883 ) ).y * 2.0 - 1.0; + const float JITTER_WINDOW = 0.25; + hash_x = ( ( hash_x * hash_x * hash_x ) - sign( hash_x ) ) * JITTER_WINDOW; + hash_y = ( ( hash_y * hash_y * hash_y ) - sign( hash_y ) ) * JITTER_WINDOW; + vec2 dd = vec2(Pf.x - hash_x, Pf.y - hash_y); + float d = dd.x * dd.x + dd.y * dd.y; + return d * ( 1.0 / 1.125 ); + } + + float snow(vec2 pos, float time, float scale) { + // add wobble + pos.x += cos(pos.y*4.0 + time*3.14159*2.0 + 1.0/scale)/(8.0/scale); + // add gravity + pos += time*scale*vec2(-0.5, 1.0); + return max( + 1.0 - Cellular2D(mod(pos/scale, scale*quality)*16.0)*1024.0, + 0.0 + ) * (scale*0.5 + 0.5); + } + +void main() +{ + float winscale = max(res.x, res.y); + float tim = mod(constants.time/800.0, 84.0*quality); + vec2 pos = gl_FragCoord.xy/winscale; + float a = 0.0; + // Each of these is a layer of snow + // Remove some for better performance + // Changing the scale (3rd value) will mess with the looping + a += snow(pos, tim, 1.0); + a += snow(pos, tim, 0.7); + a += snow(pos, tim, 0.6); + a += snow(pos, tim, 0.5); + a += snow(pos, tim, 0.4); + a += snow(pos, tim, 0.3); + a += snow(pos, tim, 0.25); + a += snow(pos, tim, 0.125); + a = a * min(pos.y*4.0, 1.0); + FragColor = vec4(1.0, 1.0, 1.0, a); +} diff --git a/gfx/drivers/wiiu_gfx.c b/gfx/drivers/wiiu_gfx.c index 465ae5a06f..c5af592e70 100644 --- a/gfx/drivers/wiiu_gfx.c +++ b/gfx/drivers/wiiu_gfx.c @@ -16,6 +16,7 @@ #include "../../driver.h" #include "../../configuration.h" #include "../../verbosity.h" +#include "performance_counters.h" #include #include @@ -474,6 +475,9 @@ static void* wiiu_gfx_init(const video_info_t* video, wiiu->vp.full_height = 480; video_driver_set_size(&wiiu->vp.width, &wiiu->vp.height); + float refresh_rate = 60.0f / 1.001f; + driver_ctl(RARCH_DRIVER_CTL_SET_REFRESH_RATE, &refresh_rate); + return wiiu; } static void wiiu_gfx_free(void* data) @@ -582,16 +586,17 @@ static bool wiiu_gfx_frame(void* data, const void* frame, printf("\rfps: %8.8f frames : %5i", fps, wiiu->frames++); fflush(stdout); + static struct retro_perf_counter gfx_frame_perf = {0}; + performance_counter_init(&gfx_frame_perf, "gfx_frame"); + performance_counter_start(&gfx_frame_perf); if (wiiu->should_resize) wiiu_gfx_update_viewport(wiiu); - GX2ClearColor(&wiiu->color_buffer, 0.0f, 0.0f, 0.0f, 1.0f); /* can't call GX2ClearColor after GX2SetContextState for whatever reason */ GX2SetContextState(wiiu->ctx_state); - if(frame) { if (width > wiiu->texture.surface.width) @@ -655,6 +660,7 @@ static bool wiiu_gfx_frame(void* data, const void* frame, GX2SetPixelSampler(&wiiu->sampler_linear, wiiu->shader->sampler.location); GX2DrawEx(GX2_PRIMITIVE_MODE_QUADS, 4, 0, 1); + GX2DrawDone(); } GX2CopyColorBufferToScanBuffer(&wiiu->color_buffer, GX2_SCAN_TARGET_DRC); @@ -662,6 +668,7 @@ static bool wiiu_gfx_frame(void* data, const void* frame, GX2SwapScanBuffers(); GX2Flush(); + performance_counter_stop(&gfx_frame_perf); return true; } diff --git a/gfx/drivers_context/android_ctx.c b/gfx/drivers_context/android_ctx.c index 153c00f975..033e83f498 100644 --- a/gfx/drivers_context/android_ctx.c +++ b/gfx/drivers_context/android_ctx.c @@ -40,13 +40,13 @@ #include "../../configuration.h" #include "../../runloop.h" -static enum gfx_ctx_api android_api; +static enum gfx_ctx_api android_api = GFX_CTX_NONE; /* forward declaration */ int system_property_get(const char *cmd, const char *args, char *value); #ifdef HAVE_OPENGLES -static bool g_es3; +static bool g_es3 = false; #ifndef EGL_OPENGL_ES3_BIT_KHR #define EGL_OPENGL_ES3_BIT_KHR 0x0040 @@ -105,11 +105,15 @@ static void *android_gfx_ctx_init(void *video_driver) #ifdef HAVE_OPENGLES EGLint n, major, minor; EGLint format; +#if 0 struct retro_hw_render_callback *hwr = video_driver_get_hw_context(); bool debug = hwr->debug_context; +#endif EGLint context_attributes[] = { EGL_CONTEXT_CLIENT_VERSION, g_es3 ? 3 : 2, +#if 0 EGL_CONTEXT_FLAGS_KHR, debug ? EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR : 0, +#endif EGL_NONE }; EGLint attribs[] = { @@ -247,8 +251,8 @@ static void android_gfx_ctx_check_window(void *data, bool *quit, #ifdef HAVE_VULKAN /* Swapchains are recreated in set_resize as a * central place, so use that to trigger swapchain reinit. */ - *resize = and->vk.need_new_swapchain; - new_width = and->width; + *resize = and->vk.need_new_swapchain; + new_width = and->width; new_height = and->height; #endif break; @@ -276,7 +280,7 @@ static bool android_gfx_ctx_set_resize(void *data, unsigned width, unsigned height) { #ifdef HAVE_VULKAN - android_ctx_data_t *and = (android_ctx_data_t*)data; + android_ctx_data_t *and = (android_ctx_data_t*)data; struct android_app *android_app = (struct android_app*)g_android; #endif (void)data; @@ -367,7 +371,7 @@ static void android_gfx_ctx_input_driver(void *data, (void)data; - *input = androidinput ? &input_android : NULL; + *input = androidinput ? &input_android : NULL; *input_data = androidinput; } @@ -403,6 +407,7 @@ static bool android_gfx_ctx_bind_api(void *data, #else break; #endif + case GFX_CTX_NONE: default: break; } @@ -412,7 +417,7 @@ static bool android_gfx_ctx_bind_api(void *data, static bool android_gfx_ctx_has_focus(void *data) { - bool focused; + bool focused = false; struct android_app *android_app = (struct android_app*)g_android; if (!android_app) return true; diff --git a/gfx/drivers_context/d3d_ctx.cpp b/gfx/drivers_context/d3d_ctx.cpp index f5710b589b..d1d051fab0 100644 --- a/gfx/drivers_context/d3d_ctx.cpp +++ b/gfx/drivers_context/d3d_ctx.cpp @@ -24,12 +24,15 @@ #include "../../config.h" #endif +#include + #include "../drivers/d3d.h" #include "../common/win32_common.h" #include "../../configuration.h" #include "../../runloop.h" #include "../../verbosity.h" +#include "../../ui/ui_companion_driver.h" #ifdef _MSC_VER #ifndef _XBOX diff --git a/gfx/drivers_context/drm_ctx.c b/gfx/drivers_context/drm_ctx.c index d4cd5cfe1c..026bc1c250 100644 --- a/gfx/drivers_context/drm_ctx.c +++ b/gfx/drivers_context/drm_ctx.c @@ -61,14 +61,14 @@ #endif -static enum gfx_ctx_api drm_api; +static enum gfx_ctx_api drm_api = GFX_CTX_NONE; -static struct gbm_bo *g_bo; -static struct gbm_bo *g_next_bo; -static struct gbm_surface *g_gbm_surface; -static struct gbm_device *g_gbm_dev; +static struct gbm_bo *g_bo = NULL; +static struct gbm_bo *g_next_bo = NULL; +static struct gbm_surface *g_gbm_surface = NULL; +static struct gbm_device *g_gbm_dev = NULL; -static bool waiting_for_flip; +static bool waiting_for_flip = false; typedef struct gfx_ctx_drm_data { @@ -277,8 +277,11 @@ static void gfx_ctx_drm_update_window_title(void *data) char buf_fps[128]; settings_t *settings = config_get_ptr(); + buf[0] = buf_fps[0] = '\0'; + video_monitor_get_fps(buf, sizeof(buf), buf_fps, sizeof(buf_fps)); + if (settings->fps_show) runloop_msg_queue_push( buf_fps, 1, 1, false); } @@ -362,7 +365,7 @@ static void *gfx_ctx_drm_init(void *video_driver) unsigned gpu_index = 0; const char *gpu = NULL; struct string_list *gpu_descriptors = NULL; - gfx_ctx_drm_data_t *drm = (gfx_ctx_drm_data_t*) + gfx_ctx_drm_data_t *drm = (gfx_ctx_drm_data_t*) calloc(1, sizeof(gfx_ctx_drm_data_t)); if (!drm) diff --git a/gfx/drivers_context/mali_fbdev_ctx.c b/gfx/drivers_context/mali_fbdev_ctx.c index d63f1df4f0..de7f8c8cb6 100644 --- a/gfx/drivers_context/mali_fbdev_ctx.c +++ b/gfx/drivers_context/mali_fbdev_ctx.c @@ -50,12 +50,12 @@ typedef struct unsigned width, height; } mali_ctx_data_t; -static enum gfx_ctx_api mali_api; +static enum gfx_ctx_api mali_api = GFX_CTX_NONE; static void gfx_ctx_mali_fbdev_destroy(void *data) { int fb; - RFILE *fd; + RFILE *fd = NULL; mali_ctx_data_t *mali = (mali_ctx_data_t*)data; if (mali) @@ -160,11 +160,11 @@ static bool gfx_ctx_mali_fbdev_set_resize(void *data, static void gfx_ctx_mali_fbdev_update_window_title(void *data) { - char buf[128] = {0}; - char buf_fps[128] = {0}; + char buf[128]; + char buf_fps[128]; settings_t *settings = config_get_ptr(); - (void)data; + buf[0] = buf_fps[0] = '\0'; video_monitor_get_fps(buf, sizeof(buf), buf_fps, sizeof(buf_fps)); diff --git a/gfx/drivers_context/opendingux_fbdev_ctx.c b/gfx/drivers_context/opendingux_fbdev_ctx.c index 90ede9ffd7..dddd71c372 100644 --- a/gfx/drivers_context/opendingux_fbdev_ctx.c +++ b/gfx/drivers_context/opendingux_fbdev_ctx.c @@ -255,7 +255,7 @@ static gfx_ctx_proc_t gfx_ctx_opendingux_get_proc_address(const char *symbol) { #ifdef HAVE_EGL return egl_get_proc_address(symbol); -#else +#endif } static void gfx_ctx_opendingux_bind_hw_render(void *data, bool enable) diff --git a/gfx/drivers_context/osmesa_ctx.c b/gfx/drivers_context/osmesa_ctx.c index fdeacc8ba8..c660fcde04 100644 --- a/gfx/drivers_context/osmesa_ctx.c +++ b/gfx/drivers_context/osmesa_ctx.c @@ -25,6 +25,8 @@ #include #include +#include + #include #include "../../runloop.h" @@ -73,7 +75,7 @@ static void osmesa_fifo_open(gfx_ctx_osmesa_data_t *osmesa) saun.sun_family = AF_UNIX; - strcpy(saun.sun_path, g_osmesa_fifo); + strlcpy(saun.sun_path, g_osmesa_fifo, sizeof(saun.sun_path)); unlink(g_osmesa_fifo); diff --git a/gfx/drivers_context/wayland_ctx.c b/gfx/drivers_context/wayland_ctx.c index f9951e5811..a8c166e186 100644 --- a/gfx/drivers_context/wayland_ctx.c +++ b/gfx/drivers_context/wayland_ctx.c @@ -75,7 +75,7 @@ typedef struct gfx_ctx_wayland_data #endif } gfx_ctx_wayland_data_t; -static enum gfx_ctx_api wl_api; +static enum gfx_ctx_api wl_api = GFX_CTX_NONE; #ifndef EGL_OPENGL_ES3_BIT_KHR #define EGL_OPENGL_ES3_BIT_KHR 0x0040 @@ -138,8 +138,9 @@ static void display_handle_geometry(void *data, (void)transform; gfx_ctx_wayland_data_t *wl = (gfx_ctx_wayland_data_t*)data; - wl->physical_width = physical_width; - wl->physical_height = physical_height; + wl->physical_width = physical_width; + wl->physical_height = physical_height; + RARCH_LOG("[Wayland]: Physical width: %d mm x %d mm.\n", physical_width, physical_height); } @@ -155,8 +156,8 @@ static void display_handle_mode(void *data, (void)flags; gfx_ctx_wayland_data_t *wl = (gfx_ctx_wayland_data_t*)data; - wl->width = width; - wl->height = height; + wl->width = width; + wl->height = height; /* Certain older Wayland implementations report in Hz, * but it should be mHz. */ @@ -192,8 +193,8 @@ static const struct wl_output_listener output_listener = { static void registry_handle_global(void *data, struct wl_registry *reg, uint32_t id, const char *interface, uint32_t version) { + struct wl_output *output = NULL; gfx_ctx_wayland_data_t *wl = (gfx_ctx_wayland_data_t*)data; - struct wl_output *output; (void)version; @@ -302,7 +303,7 @@ static void flush_wayland_fd(gfx_ctx_wayland_data_t *wl) wl_display_dispatch_pending(wl->dpy); wl_display_flush(wl->dpy); - fd.fd = wl->fd; + fd.fd = wl->fd; fd.events = POLLIN | POLLOUT | POLLERR | POLLHUP; if (poll(&fd, 1, 0) > 0) @@ -324,14 +325,14 @@ static void gfx_ctx_wl_check_window(void *data, bool *quit, bool *resize, unsigned *width, unsigned *height, unsigned frame_count) { - gfx_ctx_wayland_data_t *wl = (gfx_ctx_wayland_data_t*)data; unsigned new_width, new_height; + gfx_ctx_wayland_data_t *wl = (gfx_ctx_wayland_data_t*)data; (void)frame_count; flush_wayland_fd(wl); - new_width = *width; + new_width = *width; new_height = *height; gfx_ctx_wl_get_video_size(data, &new_width, &new_height); @@ -620,16 +621,19 @@ static EGLint *egl_fill_attribs(gfx_ctx_wayland_data_t *wl, EGLint *attr) #ifdef EGL_KHR_create_context case GFX_CTX_OPENGL_API: { - bool debug = false; + bool debug = false; #ifdef HAVE_OPENGL unsigned version = wl->egl.major * 1000 + wl->egl.minor; - bool core = version >= 3001; -#ifdef GL_DEBUG - debug = true; -#else + bool core = version >= 3001; +#ifndef GL_DEBUG struct retro_hw_render_callback *hwr = video_driver_get_hw_context(); - debug = hwr->debug_context; +#endif + +#ifdef GL_DEBUG + debug = true; +#else + debug = hwr->debug_context; #endif if (core) diff --git a/gfx/drivers_context/wgl_ctx.cpp b/gfx/drivers_context/wgl_ctx.cpp index 88b5eb87de..b1d4a149d2 100644 --- a/gfx/drivers_context/wgl_ctx.cpp +++ b/gfx/drivers_context/wgl_ctx.cpp @@ -23,6 +23,10 @@ #define _WIN32_WINNT 0x0500 //_WIN32_WINNT_WIN2K #endif +#define UNICODE +#include +#include + #include #include @@ -82,23 +86,22 @@ static wglCreateContextAttribsProc pcreate_context; #endif static BOOL (APIENTRY *p_swap_interval)(int); -static bool g_use_hw_ctx; -static HGLRC g_hrc; -static HGLRC g_hw_hrc; -static HDC g_hdc; -static bool g_core_hw_context_enable; +static HGLRC win32_hrc; +static HGLRC win32_hw_hrc; +static HDC win32_hdc; +static bool win32_use_hw_ctx = false; +static bool win32_core_hw_context_enable = false; #ifdef HAVE_VULKAN -static gfx_ctx_vulkan_data_t g_vk; +static gfx_ctx_vulkan_data_t win32_vk; #endif -static unsigned g_major; -static unsigned g_minor; -static enum gfx_ctx_api g_api; +static unsigned win32_major = 0; +static unsigned win32_minor = 0; +static unsigned win32_interval = 0; +static enum gfx_ctx_api win32_api = GFX_CTX_NONE; -static unsigned g_interval; - -static dylib_t dll_handle = NULL; /* Handle to OpenGL32.dll */ +static dylib_t dll_handle = NULL; /* Handle to OpenGL32.dll */ static void setup_pixel_format(HDC hdc) { @@ -118,38 +121,34 @@ static void setup_pixel_format(HDC hdc) #if defined(HAVE_OPENGL) static void create_gl_context(HWND hwnd, bool *quit) { - bool core_context; - struct retro_hw_render_callback *hwr = NULL; - bool debug = false; + struct retro_hw_render_callback *hwr = video_driver_get_hw_context(); + bool debug = hwr->debug_context; + bool core_context = (win32_major * 1000 + win32_minor) >= 3001; + dll_handle = dylib_load("OpenGL32.dll"); + win32_hdc = GetDC(hwnd); - hwr = video_driver_get_hw_context(); - - debug = hwr->debug_context; - dll_handle = dylib_load("OpenGL32.dll"); - g_hdc = GetDC(hwnd); - setup_pixel_format(g_hdc); + setup_pixel_format(win32_hdc); #ifdef GL_DEBUG debug = true; #endif - core_context = (g_major * 1000 + g_minor) >= 3001; - if (g_hrc) + if (win32_hrc) { RARCH_LOG("[WGL]: Using cached GL context.\n"); video_driver_set_video_cache_context_ack(); } else { - g_hrc = wglCreateContext(g_hdc); + win32_hrc = wglCreateContext(win32_hdc); /* We'll create shared context later if not. */ - if (g_hrc && !core_context && !debug) + if (win32_hrc && !core_context && !debug) { - g_hw_hrc = wglCreateContext(g_hdc); - if (g_hw_hrc) + win32_hw_hrc = wglCreateContext(win32_hdc); + if (win32_hw_hrc) { - if (!wglShareLists(g_hrc, g_hw_hrc)) + if (!wglShareLists(win32_hrc, win32_hw_hrc)) { RARCH_LOG("[WGL]: Failed to share contexts.\n"); *quit = true; @@ -160,9 +159,9 @@ static void create_gl_context(HWND hwnd, bool *quit) } } - if (g_hrc) + if (win32_hrc) { - if (wglMakeCurrent(g_hdc, g_hrc)) + if (wglMakeCurrent(win32_hdc, win32_hrc)) g_inited = true; else *quit = true; @@ -181,15 +180,15 @@ static void create_gl_context(HWND hwnd, bool *quit) if (core_context) { *aptr++ = WGL_CONTEXT_MAJOR_VERSION_ARB; - *aptr++ = g_major; + *aptr++ = win32_major; *aptr++ = WGL_CONTEXT_MINOR_VERSION_ARB; - *aptr++ = g_minor; + *aptr++ = win32_minor; /* Technically, we don't have core/compat until 3.2. * Version 3.1 is either compat or not depending * on GL_ARB_compatibility. */ - if ((g_major * 1000 + g_minor) >= 3002) + if ((win32_major * 1000 + win32_minor) >= 3002) { *aptr++ = WGL_CONTEXT_PROFILE_MASK_ARB; *aptr++ = WGL_CONTEXT_CORE_PROFILE_BIT_ARB; @@ -210,23 +209,23 @@ static void create_gl_context(HWND hwnd, bool *quit) if (pcreate_context) { - HGLRC context = pcreate_context(g_hdc, NULL, attribs); + HGLRC context = pcreate_context(win32_hdc, NULL, attribs); if (context) { wglMakeCurrent(NULL, NULL); - wglDeleteContext(g_hrc); - g_hrc = context; - if (!wglMakeCurrent(g_hdc, g_hrc)) + wglDeleteContext(win32_hrc); + win32_hrc = context; + if (!wglMakeCurrent(win32_hdc, win32_hrc)) *quit = true; } else RARCH_ERR("[WGL]: Failed to create core context. Falling back to legacy context.\n"); - if (g_use_hw_ctx) + if (win32_use_hw_ctx) { - g_hw_hrc = pcreate_context(g_hdc, context, attribs); - if (!g_hw_hrc) + win32_hw_hrc = pcreate_context(win32_hdc, context, attribs); + if (!win32_hw_hrc) { RARCH_ERR("[WGL]: Failed to create shared context.\n"); *quit = true; @@ -241,7 +240,7 @@ static void create_gl_context(HWND hwnd, bool *quit) void create_graphics_context(HWND hwnd, bool *quit) { - switch (g_api) + switch (win32_api) { case GFX_CTX_OPENGL_API: #if defined(HAVE_OPENGL) @@ -257,9 +256,9 @@ void create_graphics_context(HWND hwnd, bool *quit) unsigned height = rect.bottom - rect.top; GetClientRect(hwnd, &rect); HINSTANCE instance = GetModuleHandle(NULL); - if (!vulkan_surface_create(&g_vk, VULKAN_WSI_WIN32, + if (!vulkan_surface_create(&win32_vk, VULKAN_WSI_WIN32, &instance, &hwnd, - width, height, g_interval)) + width, height, win32_interval)) *quit = true; g_inited = true; #endif @@ -277,30 +276,30 @@ void *dinput_wgl; static void gfx_ctx_wgl_swap_interval(void *data, unsigned interval) { (void)data; - g_interval = interval; + win32_interval = interval; - switch (g_api) + switch (win32_api) { case GFX_CTX_OPENGL_API: #ifdef HAVE_OPENGL - if (!g_hrc) + if (!win32_hrc) return; if (!p_swap_interval) return; - RARCH_LOG("[WGL]: wglSwapInterval(%u)\n", g_interval); - if (!p_swap_interval(g_interval)) + RARCH_LOG("[WGL]: wglSwapInterval(%u)\n", win32_interval); + if (!p_swap_interval(win32_interval)) RARCH_WARN("[WGL]: wglSwapInterval() failed.\n"); #endif break; case GFX_CTX_VULKAN_API: #ifdef HAVE_VULKAN - if (g_interval != interval) + if (win32_interval != interval) { - g_interval = interval; - if (g_vk.swapchain) - g_vk.need_new_swapchain = true; + win32_interval = interval; + if (win32_vk.swapchain) + win32_vk.need_new_swapchain = true; } #endif break; @@ -316,11 +315,11 @@ static void gfx_ctx_wgl_check_window(void *data, bool *quit, { win32_check_window(quit, resize, width, height); - switch (g_api) + switch (win32_api) { case GFX_CTX_VULKAN_API: #ifdef HAVE_VULKAN - if (g_vk.need_new_swapchain) + if (win32_vk.need_new_swapchain) *resize = true; #endif break; @@ -335,18 +334,18 @@ static void gfx_ctx_wgl_swap_buffers(void *data) { (void)data; - switch (g_api) + switch (win32_api) { case GFX_CTX_OPENGL_API: #ifdef HAVE_OPENGL - SwapBuffers(g_hdc); + SwapBuffers(win32_hdc); #endif break; case GFX_CTX_VULKAN_API: #ifdef HAVE_VULKAN - vulkan_present(&g_vk, g_vk.context.current_swapchain_index); - vulkan_acquire_next_image(&g_vk); + vulkan_present(&win32_vk, win32_vk.context.current_swapchain_index); + vulkan_acquire_next_image(&win32_vk); #endif break; @@ -363,18 +362,18 @@ static bool gfx_ctx_wgl_set_resize(void *data, (void)width; (void)height; - switch (g_api) + switch (win32_api) { case GFX_CTX_VULKAN_API: #ifdef HAVE_VULKAN - if (!vulkan_create_swapchain(&g_vk, width, height, g_interval)) + if (!vulkan_create_swapchain(&win32_vk, width, height, win32_interval)) { RARCH_ERR("[Win32/Vulkan]: Failed to update swapchain.\n"); return false; } - g_vk.context.invalid_swapchain = true; - g_vk.need_new_swapchain = false; + win32_vk.context.invalid_swapchain = true; + win32_vk.need_new_swapchain = false; #endif break; @@ -390,7 +389,7 @@ static void gfx_ctx_wgl_update_window_title(void *data) { char buf[128]; char buf_fps[128]; - settings_t *settings = config_get_ptr(); + settings_t *settings = config_get_ptr(); const ui_window_t *window = ui_companion_driver_get_window_ptr(); buf[0] = buf_fps[0] = '\0'; @@ -410,10 +409,10 @@ static void gfx_ctx_wgl_get_video_size(void *data, if (!window) { - unsigned mon_id; RECT mon_rect; MONITORINFOEX current_mon; - HMONITOR hm_to_use = NULL; + unsigned mon_id = 0; + HMONITOR hm_to_use = NULL; win32_monitor_info(¤t_mon, &hm_to_use, &mon_id); mon_rect = current_mon.rcMonitor; @@ -443,11 +442,11 @@ static void *gfx_ctx_wgl_init(void *video_driver) if (!win32_window_init(&wndclass, true, NULL)) return NULL; - switch (g_api) + switch (win32_api) { case GFX_CTX_VULKAN_API: #ifdef HAVE_VULKAN - if (!vulkan_context_init(&g_vk, VULKAN_WSI_WIN32)) + if (!vulkan_context_init(&win32_vk, VULKAN_WSI_WIN32)) return NULL; #endif break; @@ -465,22 +464,22 @@ static void gfx_ctx_wgl_destroy(void *data) (void)data; - switch (g_api) + switch (win32_api) { case GFX_CTX_OPENGL_API: #ifdef HAVE_OPENGL - if (g_hrc) + if (win32_hrc) { glFinish(); wglMakeCurrent(NULL, NULL); if (!video_driver_is_video_cache_context()) { - if (g_hw_hrc) - wglDeleteContext(g_hw_hrc); - wglDeleteContext(g_hrc); - g_hrc = NULL; - g_hw_hrc = NULL; + if (win32_hw_hrc) + wglDeleteContext(win32_hw_hrc); + wglDeleteContext(win32_hrc); + win32_hrc = NULL; + win32_hw_hrc = NULL; } } #endif @@ -488,10 +487,10 @@ static void gfx_ctx_wgl_destroy(void *data) case GFX_CTX_VULKAN_API: #ifdef HAVE_VULKAN - vulkan_context_destroy(&g_vk, g_vk.vk_surface != VK_NULL_HANDLE); - if (g_vk.context.queue_lock) - slock_free(g_vk.context.queue_lock); - memset(&g_vk, 0, sizeof(g_vk)); + vulkan_context_destroy(&win32_vk, win32_vk.vk_surface != VK_NULL_HANDLE); + if (win32_vk.context.queue_lock) + slock_free(win32_vk.context.queue_lock); + memset(&win32_vk, 0, sizeof(win32_vk)); #endif break; @@ -500,10 +499,10 @@ static void gfx_ctx_wgl_destroy(void *data) break; } - if (window && g_hdc) + if (window && win32_hdc) { - ReleaseDC(window, g_hdc); - g_hdc = NULL; + ReleaseDC(window, win32_hdc); + win32_hdc = NULL; } if (window) @@ -518,11 +517,11 @@ static void gfx_ctx_wgl_destroy(void *data) g_restore_desktop = false; } - g_core_hw_context_enable = false; - g_inited = false; - g_major = 0; - g_minor = 0; - p_swap_interval = NULL; + win32_core_hw_context_enable = false; + g_inited = false; + win32_major = 0; + win32_minor = 0; + p_swap_interval = NULL; } static bool gfx_ctx_wgl_set_video_mode(void *data, @@ -535,7 +534,7 @@ static bool gfx_ctx_wgl_set_video_mode(void *data, goto error; } - switch (g_api) + switch (win32_api) { case GFX_CTX_OPENGL_API: #ifdef HAVE_OPENGL @@ -549,7 +548,7 @@ static bool gfx_ctx_wgl_set_video_mode(void *data, break; } - gfx_ctx_wgl_swap_interval(data, g_interval); + gfx_ctx_wgl_swap_interval(data, win32_interval); return true; error: @@ -607,9 +606,9 @@ static bool gfx_ctx_wgl_bind_api(void *data, { (void)data; - g_major = major; - g_minor = minor; - g_api = api; + win32_major = major; + win32_minor = minor; + win32_api = api; #if defined(HAVE_OPENGL) if (api == GFX_CTX_OPENGL_API) @@ -631,14 +630,14 @@ static void gfx_ctx_wgl_show_mouse(void *data, bool state) static void gfx_ctx_wgl_bind_hw_render(void *data, bool enable) { - switch (g_api) + switch (win32_api) { case GFX_CTX_OPENGL_API: #ifdef HAVE_OPENGL - g_use_hw_ctx = enable; + win32_use_hw_ctx = enable; - if (g_hdc) - wglMakeCurrent(g_hdc, enable ? g_hw_hrc : g_hrc); + if (win32_hdc) + wglMakeCurrent(win32_hdc, enable ? win32_hw_hrc : win32_hrc); #endif break; @@ -652,14 +651,14 @@ static void gfx_ctx_wgl_bind_hw_render(void *data, bool enable) static void *gfx_ctx_wgl_get_context_data(void *data) { (void)data; - return &g_vk.context; + return &win32_vk.context; } #endif static uint32_t gfx_ctx_wgl_get_flags(void *data) { uint32_t flags = 0; - if (g_core_hw_context_enable) + if (win32_core_hw_context_enable) { BIT32_SET(flags, GFX_CTX_FLAGS_GL_CORE_CONTEXT); } @@ -673,7 +672,7 @@ static uint32_t gfx_ctx_wgl_get_flags(void *data) static void gfx_ctx_wgl_set_flags(void *data, uint32_t flags) { if (BIT32_GET(flags, GFX_CTX_FLAGS_GL_CORE_CONTEXT)) - g_core_hw_context_enable = true; + win32_core_hw_context_enable = true; } const gfx_ctx_driver_t gfx_ctx_wgl = { diff --git a/gfx/drivers_font/caca_font.c b/gfx/drivers_font/caca_font.c new file mode 100644 index 0000000000..aaf4df961f --- /dev/null +++ b/gfx/drivers_font/caca_font.c @@ -0,0 +1,138 @@ +/* RetroArch - A frontend for libretro. + * Copyright (C) 2010-2014 - Hans-Kristian Arntzen + * Copyright (C) 2011-2016 - Daniel De Matteis + * Copyright (C) 2016 - Brad Parker + * + * RetroArch is free software: you can redistribute it and/or modify it under the terms + * of the GNU General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with RetroArch. + * If not, see . + */ + +#include +#include +#include + +#ifdef HAVE_CONFIG_H +#include "../../config.h" +#endif + +#include "../font_driver.h" +#include "../../configuration.h" +#include "../../verbosity.h" +#include "../common/caca_common.h" + +typedef struct +{ + const font_renderer_driver_t *caca_font_driver; + void *caca_font_data; + caca_t *caca; +} caca_raster_t; + +static void *caca_init_font(void *data, + const char *font_path, float font_size) +{ + caca_raster_t *font = (caca_raster_t*)calloc(1, sizeof(*font)); + + if (!font) + return NULL; + + font->caca = (caca_t*)data; + + font_size = 1; + + if (!font_renderer_create_default((const void**)&font->caca_font_driver, + &font->caca_font_data, font_path, font_size)) + { + RARCH_WARN("Couldn't initialize font renderer.\n"); + return NULL; + } + + return font; +} + +static void caca_render_free_font(void *data) +{ + +} + +static int caca_get_message_width(void *data, const char *msg, + unsigned msg_len, float scale) +{ + return 0; +} + +static const struct font_glyph *caca_font_get_glyph( + void *data, uint32_t code) +{ + return NULL; +} + +static void caca_render_msg(void *data, const char *msg, + const void *userdata) +{ + caca_raster_t *font = (caca_raster_t*)data; + float x, y; + unsigned width, height; + unsigned newX, newY; + settings_t *settings = config_get_ptr(); + const struct font_params *params = (const struct font_params*)userdata; + + if (!font || string_is_empty(msg)) + return; + + if (params) + { + x = params->x; + y = params->y; + } + else + { + x = settings->video.msg_pos_x; + y = settings->video.msg_pos_y; + } + + if (!font->caca || !font->caca->caca_cv || !font->caca->caca_display || + !*font->caca->caca_cv || !*font->caca->caca_display) + return; + + width = caca_get_canvas_width(*font->caca->caca_cv); + height = caca_get_canvas_height(*font->caca->caca_cv); + + newX = x * width; + newY = height - (y * height); + + if (strlen(msg) + newX > width) + newX -= strlen(msg) + newX - width; + + caca_put_str(*font->caca->caca_cv, newX, newY, msg); + + caca_refresh_display(*font->caca->caca_display); +} + +static void caca_font_flush_block(void* data) +{ + (void)data; +} + +static void caca_font_bind_block(void* data, void* userdata) +{ + (void)data; +} + +font_renderer_t caca_font = { + caca_init_font, + caca_render_free_font, + caca_render_msg, + "caca font", + caca_font_get_glyph, /* get_glyph */ + caca_font_bind_block, /* bind_block */ + caca_font_flush_block, /* flush */ + caca_get_message_width /* get_message_width */ +}; diff --git a/gfx/drivers_font/d3d_w32_font.cpp b/gfx/drivers_font/d3d_w32_font.cpp index eb6f4027bd..1fd5065782 100644 --- a/gfx/drivers_font/d3d_w32_font.cpp +++ b/gfx/drivers_font/d3d_w32_font.cpp @@ -22,9 +22,10 @@ #include "../font_driver.h" #include "../../configuration.h" -#include "../../runloop.h" +#ifdef HAVE_D3D9 #include "../include/d3d9/d3dx9core.h" +#endif typedef struct { @@ -45,7 +46,11 @@ static void *d3dfonts_w32_init_font(void *video_data, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_PITCH, - "Verdana" /* Hardcode FTL */ +#ifdef _MSC_VER /* MSVC needs w_char* */ + L"Verdana" /* Hardcode FTL */ +#else + "Verdana" +#endif }; d3dfonts = (d3dfonts_t*)calloc(1, sizeof(*d3dfonts)); diff --git a/gfx/drivers_font/gl_raster_font.c b/gfx/drivers_font/gl_raster_font.c index 7743fc3b88..c269a21575 100644 --- a/gfx/drivers_font/gl_raster_font.c +++ b/gfx/drivers_font/gl_raster_font.c @@ -259,12 +259,12 @@ static void gl_raster_font_draw_vertices(gl_raster_t *font, const video_coords_t coords_data.handle_data = NULL; coords_data.data = coords; - video_shader_driver_set_coords(&coords_data); + video_shader_driver_set_coords(coords_data); mvp.data = font->gl; mvp.matrix = &font->gl->mvp_no_rot; - video_shader_driver_set_mvp(&mvp); + video_shader_driver_set_mvp(mvp); glDrawArrays(GL_TRIANGLES, 0, coords->vertices); } @@ -430,7 +430,7 @@ static void gl_raster_font_setup_viewport(gl_raster_t *font, bool full_screen) shader_info.idx = VIDEO_SHADER_STOCK_BLEND; shader_info.set_active = true; - video_shader_driver_use(&shader_info); + video_shader_driver_use(shader_info); } static void gl_raster_font_restore_viewport(gl_t *gl, bool full_screen) diff --git a/gfx/drivers_font/xdk1_xfonts.c b/gfx/drivers_font/xdk1_xfonts.c index e488b0d98e..e0a357d80f 100644 --- a/gfx/drivers_font/xdk1_xfonts.c +++ b/gfx/drivers_font/xdk1_xfonts.c @@ -20,8 +20,9 @@ #include "../../config.h" #endif +#include "../drivers/d3d.h" + #include "../font_driver.h" -#include "../../runloop.h" typedef struct { diff --git a/gfx/drivers_font/xdk360_fonts.cpp b/gfx/drivers_font/xdk360_fonts.cpp index 3e8f84339c..e0e00ebc57 100644 --- a/gfx/drivers_font/xdk360_fonts.cpp +++ b/gfx/drivers_font/xdk360_fonts.cpp @@ -18,13 +18,8 @@ #include -#ifdef HAVE_CONFIG_H -#include "../../runloop.h" -#endif - #include "../d3d/d3d.h" #include "../font_driver.h" -#include "../../runloop.h" #include "../drivers/d3d_shaders/font.hlsl.d3d9.h" @@ -630,7 +625,6 @@ static void xdk360_free_font(void *data) static void xdk360_render_msg_post(xdk360_video_font_t * font) { - /* Cache the global pointer into a register */ LPDIRECT3DDEVICE d3dr = font->d3d->dev; d3d_set_texture(d3dr, 0, NULL); diff --git a/gfx/drivers_font_renderer/coretext.c b/gfx/drivers_font_renderer/coretext.c index 8631dfcf1a..a7821c8552 100644 --- a/gfx/drivers_font_renderer/coretext.c +++ b/gfx/drivers_font_renderer/coretext.c @@ -32,7 +32,6 @@ #endif #include "../font_driver.h" -#include "../../runloop.h" #define CT_ATLAS_ROWS 16 #define CT_ATLAS_COLS 16 diff --git a/gfx/drivers_shader/shader_gl_cg.c b/gfx/drivers_shader/shader_gl_cg.c index 0ee2b55438..98d851bad9 100644 --- a/gfx/drivers_shader/shader_gl_cg.c +++ b/gfx/drivers_shader/shader_gl_cg.c @@ -41,6 +41,7 @@ #ifdef HAVE_SHADERPIPELINE #include "../drivers/gl_shaders/pipeline_xmb_ribbon_simple.cg.h" +#include "../drivers/gl_shaders/pipeline_snow.cg.h" #endif #include "../include/Cg/cg.h" @@ -515,24 +516,26 @@ static bool gl_cg_compile_program( void *program_data, struct shader_program_info *program_info) { - const char *list = NULL; const char *argv[2 + GFX_MAX_SHADERS]; - bool ret = true; - char *listing_f = NULL; - char *listing_v = NULL; - unsigned i, argc = 0; + const char *list = NULL; + bool ret = true; + char *listing_f = NULL; + char *listing_v = NULL; + unsigned i, argc = 0; struct shader_program_cg *program = (struct shader_program_cg*)program_data; - cg_shader_data_t *cg = (cg_shader_data_t*)data; + cg_shader_data_t *cg = (cg_shader_data_t*)data; if (!program) program = &cg->prg[idx]; argv[argc++] = "-DPARAMETER_UNIFORM"; + for (i = 0; i < GFX_MAX_SHADERS; i++) { if (*(cg->alias_define[i])) argv[argc++] = cg->alias_define[i]; } + argv[argc] = NULL; if (program_info->is_file) @@ -586,7 +589,7 @@ end: static void gl_cg_set_program_base_attrib(void *data, unsigned i) { - cg_shader_data_t *cg = (cg_shader_data_t*)data; + cg_shader_data_t *cg = (cg_shader_data_t*)data; CGparameter param = cgGetFirstParameter( cg->prg[i].vprg, CG_PROGRAM); @@ -594,8 +597,8 @@ static void gl_cg_set_program_base_attrib(void *data, unsigned i) { uint32_t semantic_hash; const char *semantic = NULL; - if (cgGetParameterDirection(param) != CG_IN - || cgGetParameterVariability(param) != CG_VARYING) + if ( (cgGetParameterDirection(param) != CG_IN) + || (cgGetParameterVariability(param) != CG_VARYING)) continue; semantic = cgGetParameterSemantic(param); @@ -638,7 +641,7 @@ static void gl_cg_set_program_base_attrib(void *data, unsigned i) static bool gl_cg_load_stock(void *data) { struct shader_program_info program_info; - cg_shader_data_t *cg = (cg_shader_data_t*)data; + cg_shader_data_t *cg = (cg_shader_data_t*)data; program_info.combined = stock_cg_gl_program; program_info.is_file = false; @@ -658,6 +661,7 @@ error: static bool gl_cg_load_plain(void *data, const char *path) { cg_shader_data_t *cg = (cg_shader_data_t*)data; + if (!gl_cg_load_stock(cg)) return false; @@ -668,7 +672,12 @@ static bool gl_cg_load_plain(void *data, const char *path) cg->shader->passes = 1; - if (path) + if (string_is_empty(path)) + { + RARCH_LOG("Loading stock Cg file.\n"); + cg->prg[1] = cg->prg[0]; + } + else { struct shader_program_info program_info; @@ -681,11 +690,6 @@ static bool gl_cg_load_plain(void *data, const char *path) if (!gl_cg_compile_program(data, 1, &cg->prg[1], &program_info)) return false; } - else - { - RARCH_LOG("Loading stock Cg file.\n"); - cg->prg[1] = cg->prg[0]; - } video_shader_resolve_parameters(NULL, cg->shader); return true; @@ -696,7 +700,7 @@ static bool gl_cg_load_imports(void *data) unsigned i; retro_ctx_memory_info_t mem_info; struct state_tracker_info tracker_info = {0}; - cg_shader_data_t *cg = (cg_shader_data_t*)data; + cg_shader_data_t *cg = (cg_shader_data_t*)data; if (!cg->shader->variables) return true; @@ -727,9 +731,9 @@ static bool gl_cg_load_imports(void *data) } } - mem_info.data = NULL; - mem_info.size = 0; - mem_info.id = RETRO_MEMORY_SYSTEM_RAM; + mem_info.data = NULL; + mem_info.size = 0; + mem_info.id = RETRO_MEMORY_SYSTEM_RAM; core_get_memory(&mem_info); @@ -740,7 +744,7 @@ static bool gl_cg_load_imports(void *data) #ifdef HAVE_PYTHON if (*cg->shader->script_path) { - tracker_info.script = cg->shader->script_path; + tracker_info.script = cg->shader->script_path; tracker_info.script_is_file = true; } @@ -758,7 +762,7 @@ static bool gl_cg_load_imports(void *data) static bool gl_cg_load_shader(void *data, unsigned i) { struct shader_program_info program_info; - cg_shader_data_t *cg = (cg_shader_data_t*)data; + cg_shader_data_t *cg = (cg_shader_data_t*)data; program_info.combined = cg->shader->pass[i].source.path; program_info.is_file = true; @@ -775,7 +779,7 @@ static bool gl_cg_load_shader(void *data, unsigned i) static bool gl_cg_load_preset(void *data, const char *path) { unsigned i; - config_file_t *conf = NULL; + config_file_t *conf = NULL; cg_shader_data_t *cg = (cg_shader_data_t*)data; if (!gl_cg_load_stock(cg)) @@ -815,11 +819,13 @@ static bool gl_cg_load_preset(void *data, const char *path) } for (i = 0; i < cg->shader->passes; i++) + { if (*cg->shader->pass[i].alias) snprintf(cg->alias_define[i], sizeof(cg->alias_define[i]), "-D%s_ALIAS", cg->shader->pass[i].alias); + } for (i = 0; i < cg->shader->passes; i++) { @@ -1041,7 +1047,8 @@ static void *gl_cg_init(void *data, const char *path) memset(cg->alias_define, 0, sizeof(cg->alias_define)); - if (path && string_is_equal(path_get_extension(path), "cgp")) + if ( !string_is_empty(path) + && string_is_equal(path_get_extension(path), "cgp")) { if (!gl_cg_load_preset(cg, path)) goto error; @@ -1070,7 +1077,7 @@ static void *gl_cg_init(void *data, const char *path) gl_cg_set_shaders(cg->prg[1].fprg, cg->prg[1].vprg); #ifdef HAVE_SHADERPIPELINE - shader_prog_info.combined = stock_xmb_simple; + shader_prog_info.combined = stock_xmb_ribbon_simple; shader_prog_info.is_file = false; gl_cg_compile_program( @@ -1080,15 +1087,25 @@ static void *gl_cg_init(void *data, const char *path) &shader_prog_info); gl_cg_set_program_base_attrib(cg, VIDEO_SHADER_MENU); - shader_prog_info.combined = stock_xmb_simple; + shader_prog_info.combined = stock_xmb_ribbon_simple; shader_prog_info.is_file = false; gl_cg_compile_program( cg, - VIDEO_SHADER_MENU_SEC, - &cg->prg[VIDEO_SHADER_MENU_SEC], + VIDEO_SHADER_MENU_2, + &cg->prg[VIDEO_SHADER_MENU_2], &shader_prog_info); - gl_cg_set_program_base_attrib(cg, VIDEO_SHADER_MENU_SEC); + gl_cg_set_program_base_attrib(cg, VIDEO_SHADER_MENU_2); + + shader_prog_info.combined = stock_xmb_snow; + shader_prog_info.is_file = false; + + gl_cg_compile_program( + cg, + VIDEO_SHADER_MENU_3, + &cg->prg[VIDEO_SHADER_MENU_3], + &shader_prog_info); + gl_cg_set_program_base_attrib(cg, VIDEO_SHADER_MENU_3); #endif gl_cg_reset_attrib(cg); diff --git a/gfx/drivers_shader/shader_glsl.c b/gfx/drivers_shader/shader_glsl.c index 5e3be0c109..831cc669a8 100644 --- a/gfx/drivers_shader/shader_glsl.c +++ b/gfx/drivers_shader/shader_glsl.c @@ -121,13 +121,15 @@ static const char *glsl_prefixes[] = { #ifdef HAVE_SHADERPIPELINE #include "../drivers/gl_shaders/legacy_pipeline_xmb_ribbon_simple.glsl.vert.h" #include "../drivers/gl_shaders/modern_pipeline_xmb_ribbon_simple.glsl.vert.h" +#include "../drivers/gl_shaders/modern_pipeline_snow.glsl.vert.h" #include "../drivers/gl_shaders/pipeline_xmb_ribbon_simple.glsl.frag.h" -#if !defined(HAVE_OPENGLES) +#include "../drivers/gl_shaders/pipeline_snow.glsl.frag.h" +#include "../drivers/gl_shaders/pipeline_snow_simple.glsl.frag.h" +#include "../drivers/gl_shaders/legacy_pipeline_snow.glsl.vert.h" #include "../drivers/gl_shaders/legacy_pipeline_xmb_ribbon.glsl.vert.h" #include "../drivers/gl_shaders/modern_pipeline_xmb_ribbon.glsl.vert.h" #include "../drivers/gl_shaders/pipeline_xmb_ribbon.glsl.frag.h" #endif -#endif typedef struct glsl_shader_data { @@ -412,12 +414,7 @@ static bool gl_glsl_load_source_path(struct video_shader_pass *pass, const char *path) { ssize_t len; - int nitems = 0; - - if (!pass) - return false; - - nitems = filestream_read_file(path, + int nitems = filestream_read_file(path, (void**)&pass->source.string.vertex, &len); if (nitems <= 0 || len <= 0) @@ -448,17 +445,18 @@ static bool gl_glsl_compile_programs( * load the file here, and pretend * we were really using XML all along. */ - if (*pass->source.path && !gl_glsl_load_source_path( - pass, pass->source.path)) + if ( !string_is_empty(pass->source.path) + && !gl_glsl_load_source_path(pass, pass->source.path)) { RARCH_ERR("Failed to load GLSL shader: %s.\n", pass->source.path); return false; } - *pass->source.path = '\0'; - vertex = pass->source.string.vertex; - fragment = pass->source.string.fragment; + *pass->source.path = '\0'; + + vertex = pass->source.string.vertex; + fragment = pass->source.string.fragment; shader_prog_info.vertex = vertex; shader_prog_info.fragment = fragment; @@ -558,10 +556,10 @@ static void gl_glsl_find_uniforms_frame(glsl_shader_data_t *glsl, texture[0] = texture_size[0] = input_size[0] = tex_coord[0] = '\0'; - snprintf(texture, sizeof(texture), "%s%s", base, "Texture"); + snprintf(texture, sizeof(texture), "%s%s", base, "Texture"); snprintf(texture_size, sizeof(texture_size), "%s%s", base, "TextureSize"); - snprintf(input_size, sizeof(input_size), "%s%s", base, "InputSize"); - snprintf(tex_coord, sizeof(tex_coord), "%s%s", base, "TexCoord"); + snprintf(input_size, sizeof(input_size), "%s%s", base, "InputSize"); + snprintf(tex_coord, sizeof(tex_coord), "%s%s", base, "TexCoord"); if (frame->texture < 0) frame->texture = gl_glsl_get_uniform(glsl, prog, texture); @@ -885,7 +883,7 @@ static void *gl_glsl_init(void *data, const char *path) retro_ctx_memory_info_t mem_info; struct state_tracker_info info = {0}; - mem_info.id = RETRO_MEMORY_SYSTEM_RAM; + mem_info.id = RETRO_MEMORY_SYSTEM_RAM; core_get_memory(&mem_info); @@ -934,12 +932,20 @@ static void *gl_glsl_init(void *data, const char *path) } #ifdef HAVE_SHADERPIPELINE -#if defined(HAVE_OPENGLES) - shader_prog_info.vertex = stock_vertex_xmb_simple_legacy; - shader_prog_info.fragment = stock_fragment_xmb_simple; +#ifdef HAVE_OPENGLES + if (gl_query_extension("GL_OES_standard_derivatives")) + { + shader_prog_info.vertex = glsl_core ? stock_vertex_xmb_ribbon_modern : stock_vertex_xmb_ribbon_legacy; + shader_prog_info.fragment = stock_fragment_xmb; + } + else + { + shader_prog_info.vertex = stock_vertex_xmb_ribbon_simple_legacy; + shader_prog_info.fragment = stock_fragment_xmb_ribbon_simple; + } #else - shader_prog_info.vertex = glsl_core ? stock_vertex_xmb_modern : stock_vertex_xmb_legacy; - shader_prog_info.fragment = stock_fragment_xmb; + shader_prog_info.vertex = glsl_core ? stock_vertex_xmb_ribbon_modern : stock_vertex_xmb_ribbon_legacy; + shader_prog_info.fragment = stock_fragment_xmb; #endif shader_prog_info.is_file = false; @@ -951,16 +957,46 @@ static void *gl_glsl_init(void *data, const char *path) gl_glsl_find_uniforms(glsl, 0, glsl->prg[VIDEO_SHADER_MENU].id, &glsl->uniforms[VIDEO_SHADER_MENU]); - shader_prog_info.vertex = glsl_core ? stock_vertex_xmb_simple_modern : stock_vertex_xmb_simple_legacy; - shader_prog_info.fragment = stock_fragment_xmb_simple; + shader_prog_info.vertex = glsl_core ? stock_vertex_xmb_simple_modern : stock_vertex_xmb_ribbon_simple_legacy; + shader_prog_info.fragment = stock_fragment_xmb_ribbon_simple; gl_glsl_compile_program( glsl, - VIDEO_SHADER_MENU_SEC, - &glsl->prg[VIDEO_SHADER_MENU_SEC], + VIDEO_SHADER_MENU_2, + &glsl->prg[VIDEO_SHADER_MENU_2], &shader_prog_info); - gl_glsl_find_uniforms(glsl, 0, glsl->prg[VIDEO_SHADER_MENU_SEC].id, - &glsl->uniforms[VIDEO_SHADER_MENU_SEC]); + gl_glsl_find_uniforms(glsl, 0, glsl->prg[VIDEO_SHADER_MENU_2].id, + &glsl->uniforms[VIDEO_SHADER_MENU_2]); + +#if defined(HAVE_OPENGLES) + shader_prog_info.vertex = stock_vertex_xmb_snow_modern; +#else + shader_prog_info.vertex = glsl_core ? stock_vertex_xmb_snow_modern : stock_vertex_xmb_snow_legacy; +#endif + shader_prog_info.fragment = stock_fragment_xmb_simple_snow; + + gl_glsl_compile_program( + glsl, + VIDEO_SHADER_MENU_3, + &glsl->prg[VIDEO_SHADER_MENU_3], + &shader_prog_info); + gl_glsl_find_uniforms(glsl, 0, glsl->prg[VIDEO_SHADER_MENU_3].id, + &glsl->uniforms[VIDEO_SHADER_MENU_3]); + +#if defined(HAVE_OPENGLES) + shader_prog_info.vertex = stock_vertex_xmb_snow_modern; +#else + shader_prog_info.vertex = glsl_core ? stock_vertex_xmb_snow_modern : stock_vertex_xmb_snow_legacy; +#endif + shader_prog_info.fragment = stock_fragment_xmb_snow; + + gl_glsl_compile_program( + glsl, + VIDEO_SHADER_MENU_4, + &glsl->prg[VIDEO_SHADER_MENU_4], + &shader_prog_info); + gl_glsl_find_uniforms(glsl, 0, glsl->prg[VIDEO_SHADER_MENU_4].id, + &glsl->uniforms[VIDEO_SHADER_MENU_4]); #endif gl_glsl_reset_attrib(glsl); diff --git a/gfx/drivers_shader/shader_vulkan.cpp b/gfx/drivers_shader/shader_vulkan.cpp index 70b8a292ea..e72703df20 100644 --- a/gfx/drivers_shader/shader_vulkan.cpp +++ b/gfx/drivers_shader/shader_vulkan.cpp @@ -2851,7 +2851,7 @@ vulkan_filter_chain_t *vulkan_filter_chain_create_from_preset( return nullptr; unique_ptr conf{ config_file_new(path) }; - if (!path) + if (!conf) return nullptr; if (!video_shader_read_conf_cgp(conf.get(), shader.get())) diff --git a/gfx/drivers_tracker/video_state_python.c b/gfx/drivers_tracker/video_state_python.c index afd8e62583..3a62a911bb 100644 --- a/gfx/drivers_tracker/video_state_python.c +++ b/gfx/drivers_tracker/video_state_python.c @@ -387,18 +387,25 @@ float py_state_get(py_state_t *handle, const char *id, for (i = 0; i < MAX_USERS; i++) { - input_push_analog_dpad(settings->input.binds[i], - settings->input.analog_dpad_mode[i]); - input_push_analog_dpad(settings->input.autoconf_binds[i], - settings->input.analog_dpad_mode[i]); + struct retro_keybind *general_binds = settings->input.binds[i]; + struct retro_keybind *auto_binds = settings->input.autoconf_binds[i]; + enum analog_dpad_mode dpad_mode = settings->input.analog_dpad_mode[i]; + + if (dpad_mode == ANALOG_DPAD_NONE) + continue; + + input_push_analog_dpad(general_binds, dpad_mode); + input_push_analog_dpad(auto_binds, dpad_mode); } ret = PyObject_CallMethod(handle->inst, (char*)id, (char*)"I", frame_count); for (i = 0; i < MAX_USERS; i++) { - input_pop_analog_dpad(settings->input.binds[i]); - input_pop_analog_dpad(settings->input.autoconf_binds[i]); + struct retro_keybind *general_binds = settings->input.binds[i]; + struct retro_keybind *auto_binds = settings->input.autoconf_binds[i]; + input_pop_analog_dpad(general_binds); + input_pop_analog_dpad(auto_binds); } if (!ret) diff --git a/gfx/font_driver.c b/gfx/font_driver.c index 7c77be5f65..ef02618808 100644 --- a/gfx/font_driver.c +++ b/gfx/font_driver.c @@ -149,6 +149,35 @@ static bool gl_font_init_first( } #endif +#ifdef HAVE_CACA +static const font_renderer_t *caca_font_backends[] = { + &caca_font, + NULL, +}; + +static bool caca_font_init_first( + const void **font_driver, void **font_handle, + void *video_data, const char *font_path, float font_size) +{ + unsigned i; + + for (i = 0; caca_font_backends[i]; i++) + { + void *data = caca_font_backends[i]->init( + video_data, font_path, font_size); + + if (!data) + continue; + + *font_driver = caca_font_backends[i]; + *font_handle = data; + return true; + } + + return false; +} +#endif + #ifdef HAVE_VULKAN static const font_renderer_t *vulkan_font_backends[] = { &vulkan_raster_font, @@ -267,6 +296,11 @@ static bool font_init_first( case FONT_DRIVER_RENDER_CTR: return ctr_font_init_first(font_driver, font_handle, video_data, font_path, font_size); +#endif +#ifdef HAVE_CACA + case FONT_DRIVER_RENDER_CACA: + return caca_font_init_first(font_driver, font_handle, + video_data, font_path, font_size); #endif case FONT_DRIVER_RENDER_DONT_CARE: /* TODO/FIXME - lookup graphics driver's 'API' */ @@ -278,11 +312,6 @@ static bool font_init_first( return false; } -bool font_driver_has_render_msg(void) -{ - return true; -} - void font_driver_render_msg(void *font_data, const char *msg, const struct font_params *params) { diff --git a/gfx/font_driver.h b/gfx/font_driver.h index a7f33b11c2..6d3e374780 100644 --- a/gfx/font_driver.h +++ b/gfx/font_driver.h @@ -31,7 +31,8 @@ enum font_driver_render_api FONT_DRIVER_RENDER_DIRECT3D_API, FONT_DRIVER_RENDER_VITA2D, FONT_DRIVER_RENDER_CTR, - FONT_DRIVER_RENDER_VULKAN_API + FONT_DRIVER_RENDER_VULKAN_API, + FONT_DRIVER_RENDER_CACA }; enum text_alignment @@ -138,8 +139,6 @@ typedef struct int font_renderer_create_default(const void **driver, void **handle, const char *font_path, unsigned font_size); -bool font_driver_has_render_msg(void); - void font_driver_render_msg(void *font_data, const char *msg, const struct font_params *params); void font_driver_bind_block(void *font_data, void *block); @@ -164,6 +163,7 @@ extern font_renderer_t d3d_win32_font; extern font_renderer_t vita2d_vita_font; extern font_renderer_t ctr_font; extern font_renderer_t vulkan_raster_font; +extern font_renderer_t caca_font; extern font_renderer_driver_t stb_font_renderer; extern font_renderer_driver_t stb_unicode_font_renderer; diff --git a/gfx/video_context_driver.c b/gfx/video_context_driver.c index fe1970d676..8eeb61be0d 100644 --- a/gfx/video_context_driver.c +++ b/gfx/video_context_driver.c @@ -93,8 +93,8 @@ static const gfx_ctx_driver_t *gfx_ctx_drivers[] = { NULL }; -static const gfx_ctx_driver_t *current_video_context = NULL; -static void *video_context_data = NULL; +const gfx_ctx_driver_t *current_video_context = NULL; +void *video_context_data = NULL; /** * find_video_context_driver_driver_index: @@ -268,40 +268,39 @@ const gfx_ctx_driver_t *video_context_driver_init_first(void *data, bool video_context_driver_check_window(gfx_ctx_size_t *size_data) { - uint64_t *frame_count = NULL; - frame_count = video_driver_get_frame_count_ptr(); + if ( video_context_data + && current_video_context + && current_video_context->check_window) + { + current_video_context->check_window(video_context_data, + size_data->quit, + size_data->resize, + size_data->width, + size_data->height, ((unsigned int)*video_driver_get_frame_count_ptr())); + return true; + } - if (!video_context_data || !size_data) - return false; - if (!current_video_context || !current_video_context->check_window) - return false; - - current_video_context->check_window(video_context_data, - size_data->quit, - size_data->resize, - size_data->width, - size_data->height, (unsigned int)*frame_count); - return true; + return false; } bool video_context_driver_init_image_buffer(const video_info_t *data) { - if (!current_video_context || !current_video_context->image_buffer_init) - return false; - if (!current_video_context->image_buffer_init(video_context_data, data)) - return false; - return true; + if ( current_video_context + && current_video_context->image_buffer_init + && current_video_context->image_buffer_init(video_context_data, data)) + return true; + return false; } bool video_context_driver_write_to_image_buffer(gfx_ctx_image_t *img) { - if (!current_video_context || !current_video_context->image_buffer_write) - return false; - if (!current_video_context->image_buffer_write(video_context_data, + if ( current_video_context + && current_video_context->image_buffer_write + && current_video_context->image_buffer_write(video_context_data, img->frame, img->width, img->height, img->pitch, img->rgb32, img->index, img->handle)) - return false; - return true; + return true; + return false; } bool video_context_driver_get_video_output_prev(void) @@ -332,10 +331,8 @@ bool video_context_driver_bind_hw_render(bool *enable) void video_context_driver_make_current(bool release) { - if (!current_video_context || !current_video_context->make_current) - return; - - current_video_context->make_current(release); + if (current_video_context && current_video_context->make_current) + current_video_context->make_current(release); } bool video_context_driver_set(const gfx_ctx_driver_t *data) @@ -351,31 +348,6 @@ void video_context_driver_destroy(void) current_video_context = NULL; } -bool video_context_driver_update_window_title(void) -{ - if (!current_video_context || !current_video_context->update_window_title) - return false; - current_video_context->update_window_title(video_context_data); - return true; -} - -bool video_context_driver_swap_buffers(void) -{ - if (!current_video_context || !current_video_context->swap_buffers) - return false; - current_video_context->swap_buffers(video_context_data); - return true; -} - -bool video_context_driver_focus(void) -{ - if (!video_context_data || !current_video_context->has_focus) - return false; - if (!current_video_context->has_focus(video_context_data)) - return false; - return true; -} - bool video_context_driver_translate_aspect(gfx_ctx_aspect_t *aspect) { if (!video_context_data || !aspect) @@ -387,15 +359,6 @@ bool video_context_driver_translate_aspect(gfx_ctx_aspect_t *aspect) return true; } -bool video_context_driver_has_windowed(void) -{ - if (!video_context_data) - return false; - if (!current_video_context->has_windowed(video_context_data)) - return false; - return true; -} - void video_context_driver_free(void) { if (current_video_context->destroy) @@ -435,13 +398,13 @@ bool video_context_driver_get_proc_address(gfx_ctx_proc_address_t *proc) bool video_context_driver_get_metrics(gfx_ctx_metrics_t *metrics) { - if (!current_video_context || !current_video_context->get_metrics) - return false; - if (!current_video_context->get_metrics(video_context_data, + if ( current_video_context + && current_video_context->get_metrics + && current_video_context->get_metrics(video_context_data, metrics->type, metrics->value)) - return false; - return true; + return true; + return false; } bool video_context_driver_input_driver(gfx_ctx_input_t *inp) @@ -455,12 +418,12 @@ bool video_context_driver_input_driver(gfx_ctx_input_t *inp) bool video_context_driver_suppress_screensaver(bool *bool_data) { - if (!video_context_data || !current_video_context) - return false; - if (!current_video_context->suppress_screensaver( + if ( video_context_data + && current_video_context + && current_video_context->suppress_screensaver( video_context_data, *bool_data)) - return false; - return true; + return true; + return false; } bool video_context_driver_get_ident(gfx_ctx_ident_t *ident) diff --git a/gfx/video_context_driver.h b/gfx/video_context_driver.h index 694b086daf..d339e0552c 100644 --- a/gfx/video_context_driver.h +++ b/gfx/video_context_driver.h @@ -56,6 +56,7 @@ enum display_flags GFX_CTX_FLAGS_CUSTOMIZABLE_SWAPCHAIN_IMAGES }; + typedef void (*gfx_ctx_proc_t)(void); typedef struct gfx_ctx_driver @@ -167,6 +168,7 @@ typedef struct gfx_ctx_driver void (*make_current)(bool release); } gfx_ctx_driver_t; + typedef struct gfx_ctx_flags { uint32_t flags; @@ -288,11 +290,15 @@ bool video_context_driver_set(const gfx_ctx_driver_t *data); void video_context_driver_destroy(void); -bool video_context_driver_update_window_title(void); +#define video_context_driver_update_window_title() \ + if (current_video_context && current_video_context->update_window_title) \ + current_video_context->update_window_title(video_context_data) -bool video_context_driver_swap_buffers(void); +#define video_context_driver_swap_buffers() \ + if (current_video_context && current_video_context->swap_buffers) \ + current_video_context->swap_buffers(video_context_data) -bool video_context_driver_focus(void); +#define video_context_driver_focus() ((video_context_data && current_video_context->has_focus && current_video_context->has_focus(video_context_data)) ? true : false) bool video_context_driver_get_video_output_size(gfx_ctx_size_t *size_data); @@ -326,10 +332,14 @@ bool video_context_driver_translate_aspect(gfx_ctx_aspect_t *aspect); bool video_context_driver_input_driver(gfx_ctx_input_t *inp); -bool video_context_driver_has_windowed(void); +#define video_context_driver_has_windowed() ((video_context_data && current_video_context->has_windowed(video_context_data)) ? true : false) void video_context_driver_free(void); +extern const gfx_ctx_driver_t *current_video_context; + +extern void *video_context_data; + RETRO_END_DECLS #endif diff --git a/gfx/video_driver.c b/gfx/video_driver.c index 37577e58da..c0f099d10c 100644 --- a/gfx/video_driver.c +++ b/gfx/video_driver.c @@ -74,8 +74,8 @@ typedef struct video_pixel_scaler * Used by e.g. input drivers which bind to a window. * Drivers are responsible for setting these if an input driver * could potentially make use of this. */ -static uintptr_t video_driver_display; -static uintptr_t video_driver_window; +static uintptr_t video_driver_display = 0; +static uintptr_t video_driver_window = 0; static rarch_softfilter_t *video_driver_state_filter = NULL; static void *video_driver_state_buffer = NULL; @@ -85,7 +85,7 @@ static bool video_driver_state_out_rgb32 = false; static enum retro_pixel_format video_driver_pix_fmt = RETRO_PIXEL_FORMAT_0RGB1555; -static const void *frame_cache_data = NULL; +const void *frame_cache_data = NULL; static unsigned frame_cache_width = 0; static unsigned frame_cache_height = 0; static size_t frame_cache_pitch = 0; @@ -101,13 +101,13 @@ static retro_time_t video_driver_frame_time_samples[MEASURE_FRAME_TIME_SAMPLES_C static uint64_t video_driver_frame_time_count = 0; static uint64_t video_driver_frame_count = 0; -static void *video_driver_data = NULL; -static video_driver_t *current_video = NULL; +void *video_driver_data = NULL; +video_driver_t *current_video = NULL; /* Interface for "poking". */ static const video_poke_interface_t *video_driver_poke = NULL; -/* Used for 16-bit -> 16-bit conversions that take place before +/* Used for 15-bit -> 16-bit conversions that take place before * being passed to video driver. */ static video_pixel_scaler_t *video_driver_scaler_ptr = NULL; @@ -223,6 +223,9 @@ static const video_driver_t *video_drivers[] = { #endif #ifdef HAVE_XSHM &video_xshm, +#endif +#ifdef HAVE_CACA + &video_caca, #endif &video_null, NULL, @@ -674,16 +677,24 @@ static bool init_video(void) } else { - if (settings->video.force_aspect) + if(settings->video.window_x || settings->video.window_y) { - /* Do rounding here to simplify integer scale correctness. */ - unsigned base_width = - roundf(geom->base_height * video_driver_get_aspect_ratio()); - width = roundf(base_width * settings->video.scale); + width = settings->video.window_x; + height = settings->video.window_y; } else - width = roundf(geom->base_width * settings->video.scale); - height = roundf(geom->base_height * settings->video.scale); + { + if (settings->video.force_aspect) + { + /* Do rounding here to simplify integer scale correctness. */ + unsigned base_width = + roundf(geom->base_height * video_driver_get_aspect_ratio()); + width = roundf(base_width * settings->video.scale); + } + else + width = roundf(geom->base_width * settings->video.scale); + height = roundf(geom->base_height * settings->video.scale); + } } if (width && height) @@ -1103,7 +1114,7 @@ static bool video_driver_frame_filter(const void *data, data, width, height, pitch); performance_counter_stop(&softfilter_process); - if (settings->video.post_filter_record) + if (settings->video.post_filter_record && recording_data) recording_dump_frame(video_driver_state_buffer, *output_width, *output_height, *output_pitch); @@ -1136,7 +1147,7 @@ bool video_driver_cached_frame(void) void *recording = recording_driver_get_data_ptr(); /* Cannot allow recording when pushing duped frames. */ - recording_driver_clear_data_ptr(); + recording_data = NULL; /* Not 100% safe, since the library might have * freed the memory, but no known implementations do this. @@ -1150,7 +1161,7 @@ bool video_driver_cached_frame(void) core_frame(&info); - recording_driver_set_data_ptr(recording); + recording_data = recording; return true; } @@ -1281,7 +1292,7 @@ void video_driver_menu_settings(void **list_data, void *list_info_data, #ifdef _XBOX1 CONFIG_UINT( list, list_info, - &settings->video.swap_interval, + &global->console.screen.flicker_filter_index, MENU_ENUM_LABEL_VIDEO_FILTER_FLICKER, MENU_ENUM_LABEL_VALUE_VIDEO_FILTER_FLICKER, 0, @@ -1296,31 +1307,24 @@ void video_driver_menu_settings(void **list_data, void *list_info_data, } -static void video_driver_lock(void) -{ #ifdef HAVE_THREADS - if (!display_lock) - return; - slock_lock(display_lock); -#endif -} +#define video_driver_lock() \ + if (display_lock) \ + slock_lock(display_lock) -static void video_driver_unlock(void) -{ -#ifdef HAVE_THREADS - if (!display_lock) - return; - slock_unlock(display_lock); -#endif -} +#define video_driver_unlock() \ + if (display_lock) \ + slock_unlock(display_lock) -static void video_driver_lock_free(void) -{ -#ifdef HAVE_THREADS - slock_free(display_lock); - display_lock = NULL; +#define video_driver_lock_free() \ + slock_free(display_lock); \ + display_lock = NULL + +#else +#define video_driver_lock() ((void)0) +#define video_driver_unlock() ((void)0) +#define video_driver_lock_free() ((void)0) #endif -} static void video_driver_lock_new(void) { @@ -1570,17 +1574,13 @@ void video_driver_set_aspect_ratio(void) void video_driver_show_mouse(void) { - if (!video_driver_poke) - return; - if (video_driver_poke->show_mouse) + if (video_driver_poke && video_driver_poke->show_mouse) video_driver_poke->show_mouse(video_driver_data, true); } void video_driver_hide_mouse(void) { - if (!video_driver_poke) - return; - if (video_driver_poke->show_mouse) + if (video_driver_poke && video_driver_poke->show_mouse) video_driver_poke->show_mouse(video_driver_data, false); } @@ -1668,40 +1668,11 @@ void video_driver_apply_state_changes(void) bool video_driver_read_viewport(uint8_t *buffer) { - if (!current_video->read_viewport) - return false; - if (!current_video->read_viewport(video_driver_data, buffer)) - return false; + if ( current_video->read_viewport + && current_video->read_viewport(video_driver_data, buffer)) + return true; - return true; -} - -bool video_driver_cached_frame_has_valid_framebuffer(void) -{ - if (!frame_cache_data) - return false; - return frame_cache_data == RETRO_HW_FRAME_BUFFER_VALID; -} - -bool video_driver_is_alive(void) -{ - if (current_video) - return current_video->alive(video_driver_data); - return true; -} - -bool video_driver_is_focused(void) -{ - return current_video->focus(video_driver_data); -} - -bool video_driver_has_windowed(void) -{ -#if defined(RARCH_CONSOLE) || defined(RARCH_MOBILE) return false; -#else - return current_video->has_windowed(video_driver_data); -#endif } uint64_t *video_driver_get_frame_count_ptr(void) @@ -1902,29 +1873,26 @@ void video_driver_gpu_record_deinit(void) bool video_driver_get_current_software_framebuffer(struct retro_framebuffer *fb) { if ( - !video_driver_poke || - !video_driver_poke->get_current_software_framebuffer) - return false; - if (!video_driver_poke->get_current_software_framebuffer( + video_driver_poke + && video_driver_poke->get_current_software_framebuffer + && video_driver_poke->get_current_software_framebuffer( video_driver_data, fb)) - return false; + return true; - return true; + return false; } bool video_driver_get_hw_render_interface( const struct retro_hw_render_interface **iface) { if ( - !video_driver_poke || - !video_driver_poke->get_hw_render_interface) - return false; - - if (!video_driver_poke->get_hw_render_interface( + video_driver_poke + && video_driver_poke->get_hw_render_interface + && video_driver_poke->get_hw_render_interface( video_driver_data, iface)) - return false; + return true; - return true; + return false; } bool video_driver_get_viewport_info(struct video_viewport *viewport) @@ -2115,8 +2083,8 @@ void video_driver_frame(const void *data, unsigned width, !video_driver_state_filter || !settings->video.post_filter_record || !data - || video_driver_has_gpu_record() - ) + || video_driver_record_gpu_buffer + ) && recording_data ) recording_dump_frame(data, width, height, pitch); @@ -2197,3 +2165,57 @@ bool video_driver_texture_unload(uintptr_t *id) *id = 0; return true; } + +/** + * video_driver_translate_coord_viewport: + * @mouse_x : Pointer X coordinate. + * @mouse_y : Pointer Y coordinate. + * @res_x : Scaled X coordinate. + * @res_y : Scaled Y coordinate. + * @res_screen_x : Scaled screen X coordinate. + * @res_screen_y : Scaled screen Y coordinate. + * + * Translates pointer [X,Y] coordinates into scaled screen + * coordinates based on viewport info. + * + * Returns: true (1) if successful, false if video driver doesn't support + * viewport info. + **/ +bool video_driver_translate_coord_viewport( + void *data, + int mouse_x, int mouse_y, + int16_t *res_x, int16_t *res_y, + int16_t *res_screen_x, int16_t *res_screen_y) +{ + int scaled_screen_x, scaled_screen_y, scaled_x, scaled_y; + struct video_viewport *vp = (struct video_viewport*)data; + int norm_full_vp_width = (int)vp->full_width; + int norm_full_vp_height = (int)vp->full_height; + + if (norm_full_vp_width <= 0 || norm_full_vp_height <= 0) + return false; + + scaled_screen_x = (2 * mouse_x * 0x7fff) / norm_full_vp_width - 0x7fff; + scaled_screen_y = (2 * mouse_y * 0x7fff) / norm_full_vp_height - 0x7fff; + if (scaled_screen_x < -0x7fff || scaled_screen_x > 0x7fff) + scaled_screen_x = -0x8000; /* OOB */ + if (scaled_screen_y < -0x7fff || scaled_screen_y > 0x7fff) + scaled_screen_y = -0x8000; /* OOB */ + + mouse_x -= vp->x; + mouse_y -= vp->y; + + scaled_x = (2 * mouse_x * 0x7fff) / norm_full_vp_width - 0x7fff; + scaled_y = (2 * mouse_y * 0x7fff) / norm_full_vp_height - 0x7fff; + if (scaled_x < -0x7fff || scaled_x > 0x7fff) + scaled_x = -0x8000; /* OOB */ + if (scaled_y < -0x7fff || scaled_y > 0x7fff) + scaled_y = -0x8000; /* OOB */ + + *res_x = scaled_x; + *res_y = scaled_y; + *res_screen_x = scaled_screen_x; + *res_screen_y = scaled_screen_y; + + return true; +} diff --git a/gfx/video_driver.h b/gfx/video_driver.h index dcc756d926..62da274e59 100644 --- a/gfx/video_driver.h +++ b/gfx/video_driver.h @@ -213,6 +213,18 @@ struct aspect_ratio_elem extern struct aspect_ratio_elem aspectratio_lut[ASPECT_RATIO_END]; +#define video_driver_is_alive() ((current_video) ? current_video->alive(video_driver_data) : true) + +#define video_driver_is_focused() (current_video->focus(video_driver_data)) + +#if defined(RARCH_CONSOLE) || defined(RARCH_MOBILE) +#define video_driver_has_windowed() (false) +#else +#define video_driver_has_windowed() (current_video->has_windowed(video_driver_data)) +#endif + +#define video_driver_cached_frame_has_valid_framebuffer() (frame_cache_data ? (frame_cache_data == RETRO_HW_FRAME_BUFFER_VALID) : false) + void video_driver_destroy(void); void video_driver_set_cached_frame_ptr(const void *data); void video_driver_set_stub_frame(void); @@ -240,11 +252,7 @@ void video_driver_set_nonblock_state(bool toggle); bool video_driver_find_driver(void); void video_driver_apply_state_changes(void); bool video_driver_read_viewport(uint8_t *buffer); -bool video_driver_cached_frame_has_valid_framebuffer(void); bool video_driver_cached_frame(void); -bool video_driver_is_alive(void); -bool video_driver_is_focused(void); -bool video_driver_has_windowed(void); uint64_t *video_driver_get_frame_count_ptr(void); bool video_driver_frame_filter_alive(void); bool video_driver_frame_filter_is_32bit(void); @@ -464,6 +472,30 @@ const video_poke_interface_t *video_driver_get_poke(void); void video_driver_frame(const void *data, unsigned width, unsigned height, size_t pitch); +#define video_driver_translate_coord_viewport_wrap(vp, mouse_x, mouse_y, res_x, res_y, res_screen_x, res_screen_y) \ + (video_driver_get_viewport_info(vp) ? video_driver_translate_coord_viewport(vp, mouse_x, mouse_y, res_x, res_y, res_screen_x, res_screen_y) : false) + +/** + * video_driver_translate_coord_viewport: + * @mouse_x : Pointer X coordinate. + * @mouse_y : Pointer Y coordinate. + * @res_x : Scaled X coordinate. + * @res_y : Scaled Y coordinate. + * @res_screen_x : Scaled screen X coordinate. + * @res_screen_y : Scaled screen Y coordinate. + * + * Translates pointer [X,Y] coordinates into scaled screen + * coordinates based on viewport info. + * + * Returns: true (1) if successful, false if video driver doesn't support + * viewport info. + **/ +bool video_driver_translate_coord_viewport( + void *data, + int mouse_x, int mouse_y, + int16_t *res_x, int16_t *res_y, int16_t *res_screen_x, + int16_t *res_screen_y); + uintptr_t video_driver_display_get(void); enum rarch_display_type video_driver_display_type_get(void); @@ -504,8 +536,14 @@ extern video_driver_t video_dispmanx; extern video_driver_t video_sunxi; extern video_driver_t video_drm; extern video_driver_t video_xshm; +extern video_driver_t video_caca; extern video_driver_t video_null; +extern const void *frame_cache_data; + +extern void *video_driver_data; +extern video_driver_t *current_video; + RETRO_END_DECLS #endif diff --git a/gfx/video_shader_driver.c b/gfx/video_shader_driver.c index 57c61d91df..528d5b37c0 100644 --- a/gfx/video_shader_driver.c +++ b/gfx/video_shader_driver.c @@ -38,8 +38,8 @@ static const shader_backend_t *shader_ctx_drivers[] = { NULL }; -static const shader_backend_t *current_shader = NULL; -static void *shader_data = NULL; +const shader_backend_t *current_shader = NULL; +void *shader_data = NULL; static const shader_backend_t *video_shader_set_backend(enum rarch_shader_type type) { @@ -137,37 +137,6 @@ bool video_shader_driver_deinit(void) return true; } -bool video_shader_driver_set_parameter(struct uniform_info *param) -{ - if (!current_shader || !param) - return false; - current_shader->set_uniform_parameter(shader_data, - param, NULL); - return true; -} - -bool video_shader_driver_set_parameters(video_shader_ctx_params_t *params) -{ - if (!current_shader || !current_shader->set_params) - return false; - current_shader->set_params( - params->data, - shader_data, - params->width, - params->height, - params->tex_width, - params->tex_height, - params->out_width, - params->out_height, - params->frame_counter, - params->info, - params->prev_info, - params->feedback_info, - params->fbo_info, - params->fbo_info_cnt); - return true; -} - /* Finds first suitable shader context driver. */ bool video_shader_driver_init_first(void) { @@ -206,30 +175,19 @@ bool video_shader_driver_init(video_shader_ctx_init_t *init) bool video_shader_driver_get_feedback_pass(unsigned *data) { - if (!current_shader || !current_shader->get_feedback_pass) - return false; - if (!current_shader->get_feedback_pass(shader_data, data)) - return false; - return true; + if ( current_shader + && current_shader->get_feedback_pass + && current_shader->get_feedback_pass(shader_data, data)) + return true; + return false; } bool video_shader_driver_mipmap_input(unsigned *index) { - if (!current_shader) - return false; - if (!current_shader->mipmap_input(shader_data, *index)) - return false; - return true; -} - -bool video_shader_driver_set_coords(video_shader_ctx_coords_t *coords) -{ - if (!current_shader || !current_shader->set_coords) - return false; - if (!current_shader->set_coords(coords->handle_data, - shader_data, (const struct video_coords*)coords->data)) - return false; - return true; + if ( current_shader + && current_shader->mipmap_input(shader_data, *index)) + return true; + return false; } bool video_shader_driver_scale(video_shader_ctx_scale_t *scaler) @@ -257,25 +215,15 @@ bool video_shader_driver_info(video_shader_ctx_info_t *shader_info) return true; } -bool video_shader_driver_set_mvp(video_shader_ctx_mvp_t *mvp) -{ - if (!current_shader || !current_shader->set_mvp) - return false; - if (!mvp || !mvp->matrix) - return false; - if (!current_shader->set_mvp(mvp->data, shader_data, mvp->matrix)) - return false; - return true; -} - bool video_shader_driver_filter_type(video_shader_ctx_filter_t *filter) { - if (!current_shader || !current_shader->filter_type || !filter) - return false; - if (!current_shader->filter_type(shader_data, + if ( filter + && current_shader + && current_shader->filter_type + && current_shader->filter_type(shader_data, filter->index, filter->smooth)) - return false; - return true; + return true; + return false; } bool video_shader_driver_compile_program(struct shader_program_info *program_info) @@ -286,14 +234,6 @@ bool video_shader_driver_compile_program(struct shader_program_info *program_inf program_info->idx, NULL, program_info); } -bool video_shader_driver_use(video_shader_ctx_info_t *shader_info) -{ - if (!current_shader || !shader_info) - return false; - current_shader->use(shader_info->data, shader_data, shader_info->idx, shader_info->set_active); - return true; -} - bool video_shader_driver_wrap_type(video_shader_ctx_wrap_t *wrap) { if (!current_shader || !current_shader->wrap_type) diff --git a/gfx/video_shader_driver.h b/gfx/video_shader_driver.h index 6db03e4c0b..ed9ab8afcb 100644 --- a/gfx/video_shader_driver.h +++ b/gfx/video_shader_driver.h @@ -36,7 +36,9 @@ #define VIDEO_SHADER_STOCK_BLEND (GFX_MAX_SHADERS - 1) #define VIDEO_SHADER_MENU (GFX_MAX_SHADERS - 2) -#define VIDEO_SHADER_MENU_SEC (GFX_MAX_SHADERS - 3) +#define VIDEO_SHADER_MENU_2 (GFX_MAX_SHADERS - 3) +#define VIDEO_SHADER_MENU_3 (GFX_MAX_SHADERS - 4) +#define VIDEO_SHADER_MENU_4 (GFX_MAX_SHADERS - 5) #endif @@ -276,9 +278,13 @@ bool video_shader_driver_direct_get_current_shader(video_shader_ctx_t *shader); bool video_shader_driver_deinit(void); -bool video_shader_driver_set_parameter(struct uniform_info *param); +#define video_shader_driver_set_parameter(param) \ + if (current_shader && current_shader->set_uniform_parameter) \ + current_shader->set_uniform_parameter(shader_data, ¶m, NULL) -bool video_shader_driver_set_parameters(video_shader_ctx_params_t *params); +#define video_shader_driver_set_parameters(params) \ + if (current_shader && current_shader->set_params) \ + current_shader->set_params(params.data, shader_data, params.width, params.height, params.tex_width, params.tex_height, params.out_width, params.out_height, params.frame_counter, params.info, params.prev_info, params.feedback_info, params.fbo_info, params.fbo_info_cnt) bool video_shader_driver_init_first(void); @@ -288,22 +294,31 @@ bool video_shader_driver_get_feedback_pass(unsigned *data); bool video_shader_driver_mipmap_input(unsigned *index); -bool video_shader_driver_set_coords(video_shader_ctx_coords_t *coords); +#define video_shader_driver_set_coords(coords) \ + if (current_shader && current_shader->set_coords) \ + current_shader->set_coords(coords.handle_data, shader_data, (const struct video_coords*)coords.data) bool video_shader_driver_scale(video_shader_ctx_scale_t *scaler); bool video_shader_driver_info(video_shader_ctx_info_t *shader_info); -bool video_shader_driver_set_mvp(video_shader_ctx_mvp_t *mvp); +#define video_shader_driver_set_mvp(mvp) \ + if (mvp.matrix && current_shader && current_shader->set_mvp) \ + current_shader->set_mvp(mvp.data, shader_data, mvp.matrix) \ bool video_shader_driver_filter_type(video_shader_ctx_filter_t *filter); bool video_shader_driver_compile_program(struct shader_program_info *program_info); -bool video_shader_driver_use(video_shader_ctx_info_t *shader_info); +#define video_shader_driver_use(shader_info) \ + if (current_shader) \ + current_shader->use(shader_info.data, shader_data, shader_info.idx, shader_info.set_active) bool video_shader_driver_wrap_type(video_shader_ctx_wrap_t *wrap); +extern const shader_backend_t *current_shader; +extern void *shader_data; + extern const shader_backend_t gl_glsl_backend; extern const shader_backend_t hlsl_backend; extern const shader_backend_t gl_cg_backend; diff --git a/gfx/video_shader_parse.c b/gfx/video_shader_parse.c index de18c48106..e699776c42 100644 --- a/gfx/video_shader_parse.c +++ b/gfx/video_shader_parse.c @@ -116,6 +116,7 @@ static bool video_shader_parse_pass(config_file_t *conf, struct video_shader_pass *pass, unsigned i) { char tmp_str[PATH_MAX_LENGTH]; + char tmp_path[PATH_MAX_LENGTH]; char shader_name[64]; char filter_name_buf[64]; char wrap_name_buf[64]; @@ -148,8 +149,14 @@ static bool video_shader_parse_pass(config_file_t *conf, return false; } - strlcpy(pass->source.path, tmp_str, sizeof(pass->source.path)); - + strlcpy(tmp_path, tmp_str, sizeof(tmp_path)); + path_resolve_realpath(tmp_path, sizeof(tmp_path)); + + if (!path_file_exists(tmp_path)) + strlcpy(pass->source.path, tmp_str, sizeof(pass->source.path)); + else + strlcpy(pass->source.path, tmp_path, sizeof(pass->source.path)); + /* Smooth */ snprintf(filter_name_buf, sizeof(filter_name_buf), "filter_linear%u", i); @@ -323,6 +330,7 @@ static bool video_shader_parse_textures(config_file_t *conf, char textures[1024]; const char *id = NULL; char *save = NULL; + char tmp_path[PATH_MAX_LENGTH]; textures[0] = '\0'; @@ -349,6 +357,15 @@ static bool video_shader_parse_textures(config_file_t *conf, return false; } + strlcpy(tmp_path, shader->lut[shader->luts].path, sizeof(tmp_path)); + path_resolve_realpath(tmp_path, sizeof(tmp_path)); + + if (path_file_exists(tmp_path)) + { + strlcpy(shader->lut[shader->luts].path, + tmp_path, sizeof(shader->lut[shader->luts].path)); + } + strlcpy(shader->lut[shader->luts].id, id, sizeof(shader->lut[shader->luts].id)); @@ -842,12 +859,17 @@ void video_shader_write_conf_cgp(config_file_t *conf, for (i = 0; i < shader->passes; i++) { char key[64]; + char tmp[PATH_MAX_LENGTH]; const struct video_shader_pass *pass = &shader->pass[i]; key[0] = '\0'; snprintf(key, sizeof(key), "shader%u", i); - config_set_string(conf, key, pass->source.path); + strlcpy(tmp, pass->source.path, sizeof(tmp)); + + if (!path_is_absolute(tmp)) + path_resolve_realpath(tmp, sizeof(tmp)); + config_set_string(conf, key, tmp); if (pass->filter != RARCH_FILTER_UNSPEC) { diff --git a/griffin/griffin.c b/griffin/griffin.c index 0173a7dea0..df953b780d 100644 --- a/griffin/griffin.c +++ b/griffin/griffin.c @@ -64,6 +64,16 @@ ARCHIVE FILE #include "../libretro-common/file/archive_file_7z.c" #endif +/*============================================================ +COMPRESSION +============================================================ */ +#include "../libretro-common/streams/trans_stream.c" +#include "../libretro-common/streams/trans_stream_pipe.c" + +#ifdef HAVE_ZLIB +#include "../libretro-common/streams/trans_stream_zlib.c" +#endif + /*============================================================ ENCODINGS ============================================================ */ @@ -310,8 +320,10 @@ VIDEO DRIVER #ifndef HAVE_PSGL #include "../libretro-common/glsym/rglgen.c" -#ifdef HAVE_OPENGLES2 +#if defined(HAVE_OPENGLES2) #include "../libretro-common/glsym/glsym_es2.c" +#elif defined(HAVE_OPENGLES3) +#include "../libretro-common/glsym/glsym_es3.c" #else #include "../libretro-common/glsym/glsym_gl.c" #endif @@ -386,6 +398,10 @@ FONTS #include "../gfx/drivers_font/ctr_font.c" #endif +#if defined(HAVE_CACA) +#include "../gfx/drivers_font/caca_font.c" +#endif + #if defined(HAVE_VULKAN) #include "../gfx/drivers_font/vulkan_raster_font.c" @@ -394,7 +410,7 @@ FONTS /*============================================================ INPUT ============================================================ */ -#include "../input/input_autodetect.c" +#include "../tasks/task_autodetect.c" #include "../input/input_joypad_driver.c" #include "../input/input_config.c" #include "../input/input_keymaps.c" @@ -463,6 +479,7 @@ INPUT #endif #ifdef HAVE_UDEV +#include "../input/common/udev_common.c" #include "../input/drivers/udev_input.c" #include "../input/drivers_keyboard/keyboard_event_udev.c" #include "../input/drivers_joypad/udev_joypad.c" @@ -865,14 +882,18 @@ NETPLAY #include "../network/netplay/netplay_net.c" #include "../network/netplay/netplay_spectate.c" #include "../network/netplay/netplay_common.c" +#include "../network/netplay/netplay_discovery.c" #include "../network/netplay/netplay.c" #include "../libretro-common/net/net_compat.c" #include "../libretro-common/net/net_socket.c" #include "../libretro-common/net/net_http.c" +#include "../libretro-common/net/net_natt.c" #ifndef HAVE_SOCKET_LEGACY #include "../libretro-common/net/net_ifinfo.c" #endif #include "../tasks/task_http.c" +#include "../tasks/task_netplay_lan_scan.c" +#include "../tasks/task_wifi.c" #endif /*============================================================ @@ -960,6 +981,10 @@ MENU #include "../menu/drivers_display/menu_display_ctr.c" #endif +#ifdef HAVE_CACA +#include "../menu/drivers_display/menu_display_caca.c" +#endif + #endif diff --git a/griffin/griffin_cpp.cpp b/griffin/griffin_cpp.cpp index bbd0dbd3c9..0207179676 100644 --- a/griffin/griffin_cpp.cpp +++ b/griffin/griffin_cpp.cpp @@ -29,48 +29,56 @@ #ifdef HAVE_VULKAN #include "../deps/glslang/glslang.cpp" #include "../deps/glslang/glslang_tab.cpp" -#include "../deps/glslang/glslang/SPIRV/SpvBuilder.cpp" -#include "../deps/glslang/glslang/SPIRV/SPVRemapper.cpp" -#include "../deps/glslang/glslang/SPIRV/InReadableOrder.cpp" +#include "../deps/glslang/glslang/SPIRV/disassemble.cpp" #include "../deps/glslang/glslang/SPIRV/doc.cpp" #include "../deps/glslang/glslang/SPIRV/GlslangToSpv.cpp" -#include "../deps/glslang/glslang/SPIRV/disassemble.cpp" -#include "../deps/glslang/glslang/SPIRV/logger.cpp" +#include "../deps/glslang/glslang/SPIRV/InReadableOrder.cpp" +#include "../deps/glslang/glslang/SPIRV/Logger.cpp" +#include "../deps/glslang/glslang/SPIRV/SpvBuilder.cpp" +#include "../deps/glslang/glslang/SPIRV/SPVRemapper.cpp" + +#include "../deps/glslang/glslang/glslang/GenericCodeGen/CodeGen.cpp" #include "../deps/glslang/glslang/glslang/GenericCodeGen/Link.cpp" -#include "../deps/glslang/glslang/glslang/GenericCodeGen/CodeGen.cpp" -#include "../deps/glslang/glslang/hlsl/hlslGrammar.cpp" -#include "../deps/glslang/glslang/hlsl/hlslOpMap.cpp" -#include "../deps/glslang/glslang/hlsl/hlslTokenStream.cpp" -#include "../deps/glslang/glslang/hlsl/hlslScanContext.cpp" -#include "../deps/glslang/glslang/hlsl/hlslParseHelper.cpp" -#include "../deps/glslang/glslang/hlsl/hlslParseables.cpp" -#include "../deps/glslang/glslang/glslang/GenericCodeGen/CodeGen.cpp" + #include "../deps/glslang/glslang/OGLCompilersDLL/InitializeDll.cpp" -#include "../deps/glslang/glslang/glslang/MachineIndependent/Intermediate.cpp" -#include "../deps/glslang/glslang/glslang/MachineIndependent/propagateNoContraction.cpp" -#include "../deps/glslang/glslang/glslang/MachineIndependent/Versions.cpp" -#include "../deps/glslang/glslang/glslang/MachineIndependent/RemoveTree.cpp" -#include "../deps/glslang/glslang/glslang/MachineIndependent/limits.cpp" -#include "../deps/glslang/glslang/glslang/MachineIndependent/intermOut.cpp" -#include "../deps/glslang/glslang/glslang/MachineIndependent/Initialize.cpp" -#include "../deps/glslang/glslang/glslang/MachineIndependent/SymbolTable.cpp" -#include "../deps/glslang/glslang/glslang/MachineIndependent/parseConst.cpp" -#include "../deps/glslang/glslang/glslang/MachineIndependent/ParseHelper.cpp" -#include "../deps/glslang/glslang/glslang/MachineIndependent/ShaderLang.cpp" -#include "../deps/glslang/glslang/glslang/MachineIndependent/IntermTraverse.cpp" -#include "../deps/glslang/glslang/glslang/MachineIndependent/InfoSink.cpp" + #include "../deps/glslang/glslang/glslang/MachineIndependent/Constant.cpp" -#include "../deps/glslang/glslang/glslang/MachineIndependent/Scan.cpp" -#include "../deps/glslang/glslang/glslang/MachineIndependent/reflection.cpp" +#include "../deps/glslang/glslang/glslang/MachineIndependent/glslang_tab.cpp" +#include "../deps/glslang/glslang/glslang/MachineIndependent/InfoSink.cpp" +#include "../deps/glslang/glslang/glslang/MachineIndependent/Initialize.cpp" +#include "../deps/glslang/glslang/glslang/MachineIndependent/Intermediate.cpp" +#include "../deps/glslang/glslang/glslang/MachineIndependent/intermOut.cpp" +#include "../deps/glslang/glslang/glslang/MachineIndependent/IntermTraverse.cpp" +#include "../deps/glslang/glslang/glslang/MachineIndependent/iomapper.cpp" +#include "../deps/glslang/glslang/glslang/MachineIndependent/limits.cpp" #include "../deps/glslang/glslang/glslang/MachineIndependent/linkValidate.cpp" +#include "../deps/glslang/glslang/glslang/MachineIndependent/parseConst.cpp" +#include "../deps/glslang/glslang/glslang/MachineIndependent/ParseContextBase.cpp" +#include "../deps/glslang/glslang/glslang/MachineIndependent/ParseHelper.cpp" #include "../deps/glslang/glslang/glslang/MachineIndependent/PoolAlloc.cpp" +#include "../deps/glslang/glslang/glslang/MachineIndependent/propagateNoContraction.cpp" +#include "../deps/glslang/glslang/glslang/MachineIndependent/reflection.cpp" +#include "../deps/glslang/glslang/glslang/MachineIndependent/RemoveTree.cpp" +#include "../deps/glslang/glslang/glslang/MachineIndependent/Scan.cpp" +#include "../deps/glslang/glslang/glslang/MachineIndependent/ShaderLang.cpp" +#include "../deps/glslang/glslang/glslang/MachineIndependent/SymbolTable.cpp" +#include "../deps/glslang/glslang/glslang/MachineIndependent/Versions.cpp" + +#include "../deps/glslang/glslang/glslang/MachineIndependent/preprocessor/Pp.cpp" #include "../deps/glslang/glslang/glslang/MachineIndependent/preprocessor/PpAtom.cpp" #include "../deps/glslang/glslang/glslang/MachineIndependent/preprocessor/PpContext.cpp" #include "../deps/glslang/glslang/glslang/MachineIndependent/preprocessor/PpMemory.cpp" -#include "../deps/glslang/glslang/glslang/MachineIndependent/preprocessor/PpTokens.cpp" #include "../deps/glslang/glslang/glslang/MachineIndependent/preprocessor/PpScanner.cpp" #include "../deps/glslang/glslang/glslang/MachineIndependent/preprocessor/PpSymbols.cpp" -#include "../deps/glslang/glslang/glslang/MachineIndependent/preprocessor/Pp.cpp" +#include "../deps/glslang/glslang/glslang/MachineIndependent/preprocessor/PpTokens.cpp" + +#include "../deps/glslang/glslang/hlsl/hlslAttributes.cpp" +#include "../deps/glslang/glslang/hlsl/hlslGrammar.cpp" +#include "../deps/glslang/glslang/hlsl/hlslOpMap.cpp" +#include "../deps/glslang/glslang/hlsl/hlslParseables.cpp" +#include "../deps/glslang/glslang/hlsl/hlslParseHelper.cpp" +#include "../deps/glslang/glslang/hlsl/hlslScanContext.cpp" +#include "../deps/glslang/glslang/hlsl/hlslTokenStream.cpp" #ifdef _WIN32 #include "../deps/glslang/glslang/glslang/OSDependent/Windows/ossource.cpp" @@ -179,6 +187,7 @@ VIDEO DRIVER #include "../gfx/drivers_shader/glslang_util.cpp" #include "../gfx/drivers_shader/slang_reflection.cpp" #include "../deps/SPIRV-Cross/spirv_cross.cpp" +#include "../deps/SPIRV-Cross/spirv_cfg.cpp" #endif /*============================================================ diff --git a/input/common/epoll_common.c b/input/common/epoll_common.c index c2b21de8b5..60a977f764 100644 --- a/input/common/epoll_common.c +++ b/input/common/epoll_common.c @@ -19,48 +19,36 @@ #include #include +#include +#include + #include "epoll_common.h" #include "../../verbosity.h" -static int g_epoll; -static bool epoll_inited; -static bool epoll_first_inited_is_joypad; - -bool epoll_new(bool is_joypad) +bool epoll_new(int *epoll_fd) { - if (epoll_inited) - return true; - - g_epoll = epoll_create(32); - if (g_epoll < 0) + *epoll_fd = epoll_create(32); + if (*epoll_fd < 0) return false; - epoll_first_inited_is_joypad = is_joypad; - epoll_inited = true; - return true; } -void epoll_free(bool is_joypad) +void epoll_free(int *epoll_fd) { - if (!epoll_inited || (is_joypad && !epoll_first_inited_is_joypad)) - return; + if (*epoll_fd >= 0) + close(*epoll_fd); - if (g_epoll >= 0) - close(g_epoll); - g_epoll = -1; - - epoll_inited = false; - epoll_first_inited_is_joypad = false; + *epoll_fd = -1; } -int epoll_waiting(struct epoll_event *events, int maxevents, int timeout) +int epoll_waiting(int *epoll_fd, void *events, int maxevents, int timeout) { - return epoll_wait(g_epoll, events, maxevents, timeout); + return epoll_wait(*epoll_fd, (struct epoll_event*)events, maxevents, timeout); } -bool epoll_add(int fd, void *device) +bool epoll_add(int *epoll_fd, int fd, void *device) { struct epoll_event event = {0}; @@ -68,7 +56,7 @@ bool epoll_add(int fd, void *device) event.data.ptr = device; /* Shouldn't happen, but just check it. */ - if (epoll_ctl(g_epoll, EPOLL_CTL_ADD, fd, &event) < 0) + if (epoll_ctl(*epoll_fd, EPOLL_CTL_ADD, fd, &event) < 0) { RARCH_ERR("Failed to add FD (%d) to epoll list (%s).\n", fd, strerror(errno)); diff --git a/input/common/epoll_common.h b/input/common/epoll_common.h index ee901ccf19..1150d9982a 100644 --- a/input/common/epoll_common.h +++ b/input/common/epoll_common.h @@ -18,17 +18,14 @@ #include -#include -#include - #include -bool epoll_new(bool is_joypad); +bool epoll_new(int *epoll_fd); -void epoll_free(bool is_joypad); +void epoll_free(int *epoll_fd); -int epoll_waiting(struct epoll_event *events, int maxevents, int timeout); +int epoll_waiting(int *epoll_fd, void *events, int maxevents, int timeout); -bool epoll_add(int fd, void *device); +bool epoll_add(int *epoll_fd, int fd, void *device); #endif diff --git a/input/input_autodetect.h b/input/common/udev_common.c similarity index 57% rename from input/input_autodetect.h rename to input/common/udev_common.c index 542e525219..d256f3916d 100644 --- a/input/input_autodetect.h +++ b/input/common/udev_common.c @@ -1,7 +1,7 @@ /* RetroArch - A frontend for libretro. * Copyright (C) 2010-2014 - Hans-Kristian Arntzen * Copyright (C) 2011-2016 - Daniel De Matteis - * + * * RetroArch is free software: you can redistribute it and/or modify it under the terms * of the GNU General Public License as published by the Free Software Found- * ation, either version 3 of the License, or (at your option) any later version. @@ -14,31 +14,21 @@ * If not, see . */ -#ifndef _INPUT_AUTODETECT_H -#define _INPUT_AUTODETECT_H +#include -#include +#include -#include -#include +#include -typedef struct autoconfig_params +#include "udev_common.h" + +bool udev_hotplug_available(void *dev) { - char name[255]; - char driver[255]; - char display_name[255]; - unsigned idx; - int32_t vid; - int32_t pid; -} autoconfig_params_t; + struct pollfd fds; -const struct retro_keybind *input_get_auto_bind(unsigned port, - unsigned id); + fds.fd = udev_monitor_get_fd((struct udev_monitor*)dev); + fds.events = POLLIN; + fds.revents = 0; -bool input_config_autoconfigure_joypad(autoconfig_params_t *params); - -void input_config_autoconfigure_disconnect(unsigned i, const char *ident); - -extern const char* const input_builtin_autoconfs[]; - -#endif + return (poll(&fds, 1, 0) == 1) && (fds.revents & POLLIN); +} diff --git a/input/common/udev_common.h b/input/common/udev_common.h new file mode 100644 index 0000000000..c9ea19c191 --- /dev/null +++ b/input/common/udev_common.h @@ -0,0 +1,23 @@ +/* RetroArch - A frontend for libretro. + * Copyright (C) 2011-2016 - Daniel De Matteis + * + * RetroArch is free software: you can redistribute it and/or modify it under the terms + * of the GNU General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with RetroArch. + * If not, see . + */ + +#ifndef _UDEV_COMMON_H +#define _UDEV_COMMON_H + +#include + +bool udev_hotplug_available(void *dev); + +#endif diff --git a/input/drivers/android_input.c b/input/drivers/android_input.c index 515f24023e..3679c17154 100644 --- a/input/drivers/android_input.c +++ b/input/drivers/android_input.c @@ -34,10 +34,11 @@ #endif #include "../../frontend/drivers/platform_linux.h" -#include "../input_autodetect.h" #include "../input_config.h" +#include "../../gfx/video_driver.h" #include "../input_joypad_driver.h" #include "../drivers_keyboard/keyboard_event_android.h" +#include "../../tasks/tasks_internal.h" #include "../../performance_counters.h" #include "../../configuration.h" @@ -342,9 +343,7 @@ static void android_input_poll_main_cmd(void) runloop_ctl(RUNLOOP_CTL_SET_PAUSED, &boolean); runloop_ctl(RUNLOOP_CTL_SET_IDLE, &boolean); -#ifdef HAVE_MENU video_driver_unset_stub_frame(); -#endif if ((android_app->sensor_state_mask & (UINT64_C(1) << RETRO_SENSOR_ACCELEROMETER_ENABLE)) @@ -364,9 +363,7 @@ static void android_input_poll_main_cmd(void) runloop_ctl(RUNLOOP_CTL_SET_PAUSED, &boolean); runloop_ctl(RUNLOOP_CTL_SET_IDLE, &boolean); -#ifdef HAVE_MENU video_driver_set_stub_frame(); -#endif /* Avoid draining battery while app is not being used. */ if ((android_app->sensor_state_mask @@ -529,15 +526,17 @@ static INLINE int android_input_poll_event_type_motion( } else { - float x, y; int pointer_max = MIN(AMotionEvent_getPointerCount(event), MAX_TOUCH); for (motion_ptr = 0; motion_ptr < pointer_max; motion_ptr++) { - x = AMotionEvent_getX(event, motion_ptr); - y = AMotionEvent_getY(event, motion_ptr); + struct video_viewport vp = {0}; + float x = AMotionEvent_getX(event, motion_ptr); + float y = AMotionEvent_getY(event, motion_ptr); - input_translate_coord_viewport(x, y, + video_driver_translate_coord_viewport_wrap( + &vp, + x, y, &android_data->pointer[motion_ptr].x, &android_data->pointer[motion_ptr].y, &android_data->pointer[motion_ptr].full_x, @@ -645,7 +644,6 @@ static void handle_hotplug(android_input_data_t *android_data, char name_buf[256]; int vendorId = 0; int productId = 0; - bool back_mapped = false; settings_t *settings = config_get_ptr(); device_name[0] = device_model[0] = name_buf[0] = '\0'; @@ -893,7 +891,6 @@ static void handle_hotplug(android_input_data_t *android_data, if (settings->input.autodetect_enable) { - bool autoconfigured; autoconfig_params_t params = {{0}}; RARCH_LOG("Pads Connected: %d Port: %d\n %s VID/PID: %d/%d\n", @@ -901,21 +898,15 @@ static void handle_hotplug(android_input_data_t *android_data, params.vid, params.pid); strlcpy(params.name, name_buf, sizeof(params.name)); - params.idx = *port; - params.vid = vendorId; - params.pid = productId; + + params.idx = *port; + params.vid = vendorId; + params.pid = productId; settings->input.pid[*port] = params.pid; settings->input.vid[*port] = params.vid; strlcpy(params.driver, android_joypad.ident, sizeof(params.driver)); - autoconfigured = input_config_autoconfigure_joypad(¶ms); - - if (autoconfigured) - { - if (settings->input.autoconf_binds[*port] - [RARCH_MENU_TOGGLE].joykey != 0) - back_mapped = true; - } + input_autoconfigure_connect(¶ms); } if (!string_is_empty(name_buf)) @@ -924,10 +915,6 @@ static void handle_hotplug(android_input_data_t *android_data, name_buf, sizeof(settings->input.device_names[*port])); } - if (!back_mapped && settings->input.back_as_menu_toggle_enable) - settings->input.autoconf_binds[*port] - [RARCH_MENU_TOGGLE].joykey = AKEYCODE_BACK; - android_data->pad_states[android_data->pads_connected].id = id; android_data->pad_states[android_data->pads_connected].port = *port; strlcpy(android_data->pad_states[*port].name, name_buf, diff --git a/input/drivers/cocoa_input.c b/input/drivers/cocoa_input.c index bb113e3704..e0ba987bf2 100644 --- a/input/drivers/cocoa_input.c +++ b/input/drivers/cocoa_input.c @@ -25,6 +25,7 @@ #include "../input_joypad_driver.h" #include "../input_keymaps.h" #include "cocoa_input.h" +#include "../../gfx/video_driver.h" #include "../../configuration.h" #include "../../driver.h" @@ -150,14 +151,19 @@ static void cocoa_input_poll(void *data) #ifndef IOS float backing_scale_factor = get_backing_scale_factor(); #endif + + if (!apple) + return; for (i = 0; i < apple->touch_count; i++) { + struct video_viewport vp = {0}; #ifndef IOS apple->touches[i].screen_x *= backing_scale_factor; apple->touches[i].screen_y *= backing_scale_factor; #endif - input_translate_coord_viewport( + video_driver_translate_coord_viewport_wrap( + &vp, apple->touches[i].screen_x, apple->touches[i].screen_y, &apple->touches[i].fixed_x, diff --git a/input/drivers/dinput.c b/input/drivers/dinput.c index 41cc7157ac..ee5d905b75 100644 --- a/input/drivers/dinput.c +++ b/input/drivers/dinput.c @@ -44,7 +44,8 @@ #include "../../configuration.h" #include "../../verbosity.h" -#include "../input_autodetect.h" +#include "../../tasks/tasks_internal.h" +#include "../../gfx/video_driver.h" #include "../input_config.h" #include "../input_joypad_driver.h" #include "../input_keymaps.h" @@ -204,6 +205,9 @@ static void dinput_poll(void *data) { struct dinput_input *di = (struct dinput_input*)data; + if (!di) + return; + memset(di->state, 0, sizeof(di->state)); if (di->keyboard) { @@ -398,10 +402,11 @@ static int16_t dinput_mouse_state_screen(struct dinput_input *di, unsigned id) static int16_t dinput_pointer_state(struct dinput_input *di, unsigned idx, unsigned id, bool screen) { - bool pointer_down, valid, inside; + bool pointer_down, inside; int x, y; + struct video_viewport vp = {0}; int16_t res_x = 0, res_y = 0, res_screen_x = 0, res_screen_y = 0; - unsigned num = 0; + unsigned num = 0; struct pointer_status *check_pos = di->pointer_head.next; while (check_pos && num < idx) @@ -423,10 +428,8 @@ static int16_t dinput_pointer_state(struct dinput_input *di, pointer_down = true; } - valid = input_translate_coord_viewport(x, y, - &res_x, &res_y, &res_screen_x, &res_screen_y); - - if (!valid) + if (!(video_driver_translate_coord_viewport_wrap(&vp, x, y, + &res_x, &res_y, &res_screen_x, &res_screen_y))) return 0; if (screen) diff --git a/input/drivers/qnx_input.c b/input/drivers/qnx_input.c index 2fe42ac8d2..8e5c4a9e2c 100644 --- a/input/drivers/qnx_input.c +++ b/input/drivers/qnx_input.c @@ -27,9 +27,10 @@ #include "../../config.h" #endif +#include "../../gfx/video_driver.h" #include "../../configuration.h" #include "../input_joypad_driver.h" -#include "../input_autodetect.h" +#include "../tasks/tasks_internal.h" #define MAX_PADS 8 @@ -212,12 +213,15 @@ static void qnx_input_autodetect_gamepad(qnx_input_t *qnx, strlcpy(settings->input.device_names[port], name_buf, sizeof(settings->input.device_names[port])); - params.idx = port; strlcpy(params.name, name_buf, sizeof(params.name)); + + params.idx = port; params.vid = *controller->vid; params.pid = *controller->pid; + strlcpy(params.driver, qnx->joypad->ident, sizeof(params.driver)); - input_config_autoconfigure_joypad(¶ms); + + input_autoconfigure_connect(¶ms); controller->port = port; qnx->port_device[port] = controller; @@ -420,8 +424,13 @@ static void qnx_process_touch_event( { if(qnx->pointer[i].contact_id == -1) { + struct video_viewport vp = {0}; + qnx->pointer[i].contact_id = contact_id; - input_translate_coord_viewport(pos[0], pos[1], + + video_driver_translate_coord_viewport_wrap( + &vp, + pos[0], pos[1], &qnx->pointer[i].x, &qnx->pointer[i].y, &qnx->pointer[i].full_x, &qnx->pointer[i].full_y); @@ -479,6 +488,7 @@ static void qnx_process_touch_event( { if(qnx->pointer[i].contact_id == contact_id) { + struct video_viewport vp = {0}; #if 0 gl_t *gl = (gl_t*)video_driver_get_ptr(false); @@ -498,7 +508,8 @@ static void qnx_process_touch_event( pos[1] = gl->full_y; #endif - input_translate_coord_viewport(pos[0], pos[1], + video_driver_translate_coord_viewport_wrap(&vp, + pos[0], pos[1], &qnx->pointer[i].x, &qnx->pointer[i].y, &qnx->pointer[i].full_x, &qnx->pointer[i].full_y); #if 0 diff --git a/input/drivers/rwebinput_input.c b/input/drivers/rwebinput_input.c index b1d378befa..30de0252f5 100644 --- a/input/drivers/rwebinput_input.c +++ b/input/drivers/rwebinput_input.c @@ -20,11 +20,11 @@ #include #include "../input_joypad_driver.h" -#include "../input_autodetect.h" #include "../input_keyboard.h" #include "../input_config.h" #include "../input_keymaps.h" +#include "../../tasks/tasks_internal.h" #include "../../configuration.h" typedef struct rwebinput_state diff --git a/input/drivers/sdl_input.c b/input/drivers/sdl_input.c index 2d40ea486b..fd5b4c9ead 100644 --- a/input/drivers/sdl_input.c +++ b/input/drivers/sdl_input.c @@ -27,7 +27,7 @@ #include "../../gfx/video_context_driver.h" #include "../../configuration.h" #include "../../verbosity.h" -#include "../input_autodetect.h" +#include "../../tasks/tasks_internal.h" #include "../input_config.h" #include "../input_joypad_driver.h" #include "../input_keymaps.h" @@ -172,16 +172,12 @@ static int16_t sdl_mouse_device_state(sdl_input_t *sdl, unsigned id) static int16_t sdl_pointer_device_state(sdl_input_t *sdl, unsigned idx, unsigned id, bool screen) { - bool valid, inside; + bool inside = false; + struct video_viewport vp = {0}; int16_t res_x = 0, res_y = 0, res_screen_x = 0, res_screen_y = 0; - if (idx != 0) - return 0; - - valid = input_translate_coord_viewport(sdl->mouse_abs_x, sdl->mouse_abs_y, - &res_x, &res_y, &res_screen_x, &res_screen_y); - - if (!valid) + if (!(video_driver_translate_coord_viewport_wrap(&vp, sdl->mouse_abs_x, sdl->mouse_abs_y, + &res_x, &res_y, &res_screen_x, &res_screen_y))) return 0; if (screen) @@ -247,7 +243,9 @@ static int16_t sdl_input_state(void *data_, const struct retro_keybind **binds, return sdl_mouse_device_state(data, id); case RETRO_DEVICE_POINTER: case RARCH_DEVICE_POINTER_SCREEN: - return sdl_pointer_device_state(data, idx, id, device == RARCH_DEVICE_POINTER_SCREEN); + if (idx == 0) + return sdl_pointer_device_state(data, idx, id, device == RARCH_DEVICE_POINTER_SCREEN); + break; case RETRO_DEVICE_KEYBOARD: return sdl_keyboard_device_state(data, id); case RETRO_DEVICE_LIGHTGUN: diff --git a/input/drivers/udev_input.c b/input/drivers/udev_input.c index 3bd015e193..de9ecb88c2 100644 --- a/input/drivers/udev_input.c +++ b/input/drivers/udev_input.c @@ -24,7 +24,6 @@ #include #include -#include #include #include @@ -41,13 +40,16 @@ #include #include "../drivers_keyboard/keyboard_event_udev.h" +#include "../../gfx/video_driver.h" #include "../common/linux_common.h" +#include "../common/udev_common.h" +#include "../common/epoll_common.h" #include "../input_config.h" #include "../input_joypad_driver.h" #include "../input_keymaps.h" + #include "../../configuration.h" -#include "../../runloop.h" #include "../../verbosity.h" typedef struct udev_input udev_input_t; @@ -226,27 +228,13 @@ static void udev_handle_mouse(void *data, } } -static bool udev_input_hotplug_available(udev_input_t *udev) -{ - struct pollfd fds = {0}; - - if (!udev || !udev->monitor) - return false; - - fds.fd = udev_monitor_get_fd(udev->monitor); - fds.events = POLLIN; - - return (poll(&fds, 1, 0) == 1) && (fds.revents & POLLIN); -} - -static bool add_device(udev_input_t *udev, +static bool udev_input_add_device(udev_input_t *udev, const char *devnode, device_handle_cb cb) { int fd; udev_input_device_t **tmp; udev_input_device_t *device = NULL; struct stat st = {0}; - struct epoll_event event = {0}; if (stat(devnode, &st) < 0) return false; @@ -280,13 +268,7 @@ static bool add_device(udev_input_t *udev, tmp[udev->num_devices++] = device; udev->devices = tmp; - event.events = EPOLLIN; - event.data.ptr = device; - - /* Shouldn't happen, but just check it. */ - if (epoll_ctl(udev->epfd, EPOLL_CTL_ADD, fd, &event) < 0) - RARCH_ERR("Failed to add FD (%d) to epoll list (%s).\n", - fd, strerror(errno)); + epoll_add(&udev->epfd, fd, device); return true; @@ -357,7 +339,7 @@ static void udev_input_handle_hotplug(udev_input_t *udev) cb = udev_handle_mouse; RARCH_LOG("[udev]: Hotplug add %s: %s.\n", devtype, devnode); - add_device(udev, devnode, cb); + udev_input_add_device(udev, devnode, cb); } else if (string_is_equal(action, "remove")) { @@ -382,10 +364,10 @@ static void udev_input_poll(void *data) udev->mouse_wu = udev->mouse_wd = 0; udev->mouse_whu = udev->mouse_whd = 0; - while (udev_input_hotplug_available(udev)) + while (udev->monitor && udev_hotplug_available(udev->monitor)) udev_input_handle_hotplug(udev); - ret = epoll_wait(udev->epfd, events, ARRAY_SIZE(events), 0); + ret = epoll_waiting(&udev->epfd, events, ARRAY_SIZE(events), 0); for (i = 0; i < ret; i++) { @@ -478,12 +460,12 @@ static int16_t udev_analog_pressed(const struct retro_keybind *binds, unsigned i static int16_t udev_pointer_state(udev_input_t *udev, unsigned idx, unsigned id, bool screen) { - bool inside = false; + bool inside = false; + struct video_viewport vp = {0}; int16_t res_x = 0, res_y = 0, res_screen_x = 0, res_screen_y = 0; - bool valid = input_translate_coord_viewport(udev->mouse_x, udev->mouse_y, - &res_x, &res_y, &res_screen_x, &res_screen_y); - if (!valid) + if (!(video_driver_translate_coord_viewport_wrap(&vp, udev->mouse_x, udev->mouse_y, + &res_x, &res_y, &res_screen_x, &res_screen_y))) return 0; if (screen) @@ -516,6 +498,9 @@ static int16_t udev_input_state(void *data, const struct retro_keybind **binds, int16_t ret; udev_input_t *udev = (udev_input_t*)data; + if (!udev) + return 0; + switch (device) { case RETRO_DEVICE_JOYPAD: @@ -536,11 +521,10 @@ static int16_t udev_input_state(void *data, const struct retro_keybind **binds, case RETRO_DEVICE_POINTER: case RARCH_DEVICE_POINTER_SCREEN: - if (idx != 0) - return 0; - return udev_pointer_state(udev, idx, id, - device == RARCH_DEVICE_POINTER_SCREEN); - + if (idx == 0) + return udev_pointer_state(udev, idx, id, + device == RARCH_DEVICE_POINTER_SCREEN); + break; case RETRO_DEVICE_LIGHTGUN: return udev_lightgun_state(udev, id); } @@ -564,8 +548,7 @@ static void udev_input_free(void *data) if (udev->joypad) udev->joypad->destroy(); - if (udev->epfd >= 0) - close(udev->epfd); + epoll_free(&udev->epfd); for (i = 0; i < udev->num_devices; i++) { @@ -611,7 +594,7 @@ static bool open_devices(udev_input_t *udev, const char *type, device_handle_cb int fd = open(devnode, O_RDONLY | O_NONBLOCK); RARCH_LOG("[udev] Adding device %s as type %s.\n", devnode, type); - if (!add_device(udev, devnode, cb)) + if (!udev_input_add_device(udev, devnode, cb)) RARCH_ERR("[udev] Failed to open device: %s (%s).\n", devnode, strerror(errno)); close(fd); } @@ -650,8 +633,7 @@ static void *udev_input_init(void) goto error; #endif - udev->epfd = epoll_create(32); - if (udev->epfd < 0) + if (!epoll_new(&udev->epfd)) { RARCH_ERR("Failed to create epoll FD.\n"); goto error; diff --git a/input/drivers/x11_input.c b/input/drivers/x11_input.c index 6f4e1beb6c..ccba630585 100644 --- a/input/drivers/x11_input.c +++ b/input/drivers/x11_input.c @@ -164,16 +164,12 @@ static int16_t x_mouse_state_screen(x11_input_t *x11, unsigned id) static int16_t x_pointer_state(x11_input_t *x11, unsigned idx, unsigned id, bool screen) { - bool valid, inside; + bool inside; + struct video_viewport vp = {0}; int16_t res_x = 0, res_y = 0, res_screen_x = 0, res_screen_y = 0; - if (idx != 0) - return 0; - - valid = input_translate_coord_viewport(x11->mouse_x, x11->mouse_y, - &res_x, &res_y, &res_screen_x, &res_screen_y); - - if (!valid) + if (!(video_driver_translate_coord_viewport_wrap(&vp, x11->mouse_x, x11->mouse_y, + &res_x, &res_y, &res_screen_x, &res_screen_y))) return 0; if (screen) @@ -254,9 +250,10 @@ static int16_t x_input_state(void *data, case RETRO_DEVICE_POINTER: case RARCH_DEVICE_POINTER_SCREEN: - return x_pointer_state(x11, idx, id, - device == RARCH_DEVICE_POINTER_SCREEN); - + if (idx == 0) + return x_pointer_state(x11, idx, id, + device == RARCH_DEVICE_POINTER_SCREEN); + break; case RETRO_DEVICE_LIGHTGUN: return x_lightgun_state(x11, id); } @@ -319,6 +316,7 @@ static void x_input_poll_mouse(x11_input_t *x11) XWarpPointer(x11->display, None, x11->win, 0, 0, 0, 0, mid_w, mid_h); + XSync(x11->display, False); } x11->mouse_last_x = mid_w; x11->mouse_last_y = mid_h; diff --git a/input/drivers_hid/btstack_hid.c b/input/drivers_hid/btstack_hid.c index 8eecfa613d..7ccab02f02 100644 --- a/input/drivers_hid/btstack_hid.c +++ b/input/drivers_hid/btstack_hid.c @@ -1372,9 +1372,6 @@ static bool btstack_hid_joypad_button(void *data, unsigned port, uint16_t joykey { uint64_t buttons = btstack_hid_joypad_get_buttons(data, port); - if (joykey == NO_BTN) - return false; - /* Check hat. */ if (GET_HAT_DIR(joykey)) return false; diff --git a/input/drivers_hid/iohidmanager_hid.c b/input/drivers_hid/iohidmanager_hid.c index 59cfded077..45ff008eb6 100644 --- a/input/drivers_hid/iohidmanager_hid.c +++ b/input/drivers_hid/iohidmanager_hid.c @@ -23,7 +23,7 @@ #include "../connect/joypad_connection.h" #include "../input_defines.h" -#include "../input_autodetect.h" +#include "../../tasks/tasks_internal.h" #include "../input_hid_driver.h" #include "../../configuration.h" #include "../../verbosity.h" @@ -73,9 +73,6 @@ static bool iohidmanager_hid_joypad_button(void *data, iohidmanager_hid_joypad_get_buttons(data, port); iohidmanager_hid_t *hid = (iohidmanager_hid_t*)data; - if (joykey == NO_BTN) - return false; - /* Check hat. */ if (GET_HAT_DIR(joykey)) return false; @@ -247,7 +244,7 @@ static void iohidmanager_hid_device_remove(void *data, if (hid && adapter && (adapter->slot < MAX_USERS)) { - input_config_autoconfigure_disconnect(adapter->slot, adapter->name); + input_autoconfigure_disconnect(adapter->slot, adapter->name); hid->buttons[adapter->slot] = 0; memset(hid->axes[adapter->slot], 0, sizeof(hid->axes)); @@ -309,7 +306,8 @@ static void iohidmanager_hid_device_add_autodetect(unsigned idx, strlcpy(params.name, device_name, sizeof(params.name)); strlcpy(params.driver, driver_name, sizeof(params.driver)); - input_config_autoconfigure_joypad(¶ms); + input_autoconfigure_connect(¶ms); + RARCH_LOG("Port %d: %s.\n", idx, device_name); } diff --git a/input/drivers_hid/libusb_hid.c b/input/drivers_hid/libusb_hid.c index f86c0ab6d4..285e525a68 100644 --- a/input/drivers_hid/libusb_hid.c +++ b/input/drivers_hid/libusb_hid.c @@ -25,7 +25,7 @@ #include "../connect/joypad_connection.h" #include "../input_defines.h" -#include "../input_autodetect.h" +#include "../../tasks/tasks_internal.h" #include "../input_config.h" #include "../input_driver.h" #include "../input_hid_driver.h" @@ -150,7 +150,7 @@ static void libusb_hid_device_add_autodetect(unsigned idx, strlcpy(params.name, device_name, sizeof(params.name)); strlcpy(params.driver, driver_name, sizeof(params.driver)); - input_config_autoconfigure_joypad(¶ms); + input_autoconfigure_connect(¶ms); } static void libusb_get_description(struct libusb_device *device, @@ -367,9 +367,9 @@ static int remove_adapter(void *data, struct libusb_device *dev) if (adapter->next->device == dev) { struct libusb_adapter *new_next = NULL; - const char *name = (const char*)adapter->next->name; + const char *name = (const char*)adapter->next->name; - input_config_autoconfigure_disconnect(adapter->slot, name); + input_autoconfigure_disconnect(adapter->slot, name); adapter->next->quitting = true; sthread_join(adapter->next->thread); @@ -442,9 +442,6 @@ static bool libusb_hid_joypad_button(void *data, { uint64_t buttons = libusb_hid_joypad_get_buttons(data, port); - if (joykey == NO_BTN) - return false; - /* Check hat. */ if (GET_HAT_DIR(joykey)) return false; diff --git a/input/drivers_hid/null_hid.c b/input/drivers_hid/null_hid.c index 5b932b9ca7..30ed12d762 100644 --- a/input/drivers_hid/null_hid.c +++ b/input/drivers_hid/null_hid.c @@ -16,7 +16,6 @@ #include -#include "../../runloop.h" #include "../input_defines.h" #include "../input_hid_driver.h" diff --git a/input/drivers_hid/wiiusb_hid.c b/input/drivers_hid/wiiusb_hid.c index 9bd629898f..386ad9a37d 100644 --- a/input/drivers_hid/wiiusb_hid.c +++ b/input/drivers_hid/wiiusb_hid.c @@ -20,7 +20,7 @@ #include "../input_defines.h" #include "../connect/joypad_connection.h" -#include "../input_autodetect.h" +#include "../../tasks/tasks_internal.h" #include "../input_hid_driver.h" #include "../../verbosity.h" @@ -152,7 +152,7 @@ static void wiiusb_hid_device_add_autodetect(unsigned idx, strlcpy(settings->input.device_names[idx], device_name, sizeof(settings->input.device_names[idx])); - input_config_autoconfigure_joypad(¶ms); + input_autoconfigure_connect(¶ms); } static void wiiusb_get_description(usb_device_entry *device, @@ -209,15 +209,17 @@ static const char *wiiusb_hid_joypad_name(void *data, unsigned pad) static int32_t wiiusb_hid_release_adapter(struct wiiusb_adapter *adapter) { - wiiusb_hid_t *hid; - const char *name; + wiiusb_hid_t *hid = NULL; + const char *name = NULL; if (!adapter) return -1; - hid = adapter->hid; + hid = adapter->hid; name = wiiusb_hid_joypad_name(hid, adapter->slot); - input_config_autoconfigure_disconnect(adapter->slot, name); + + input_autoconfigure_disconnect(adapter->slot, name); + pad_connection_pad_deinit(&hid->connections[adapter->slot], adapter->slot); free(adapter->send_control_buffer); @@ -491,9 +493,6 @@ static bool wiiusb_hid_joypad_button(void *data, unsigned port, uint16_t joykey) { uint64_t buttons = wiiusb_hid_joypad_get_buttons(data, port); - if (joykey == NO_BTN) - return false; - /* Check hat. */ if (GET_HAT_DIR(joykey)) return false; diff --git a/input/drivers_joypad/android_joypad.c b/input/drivers_joypad/android_joypad.c index aadc90f52b..b3af92c0a3 100644 --- a/input/drivers_joypad/android_joypad.c +++ b/input/drivers_joypad/android_joypad.c @@ -31,19 +31,22 @@ static bool android_joypad_init(void *data) static bool android_joypad_button(unsigned port, uint16_t joykey) { - uint8_t *buf = android_keyboard_state_get(port); + unsigned hat_dir = 0; + uint8_t *buf = android_keyboard_state_get(port); struct android_app *android_app = (struct android_app*)g_android; if (port >= MAX_PADS) return false; - if (GET_HAT_DIR(joykey)) + hat_dir = GET_HAT_DIR(joykey); + + if (hat_dir) { unsigned h = GET_HAT(joykey); if (h > 0) return false; - switch (GET_HAT_DIR(joykey)) + switch (hat_dir) { case HAT_LEFT_MASK: return android_app->hat_state[port][0] == -1; diff --git a/input/drivers_joypad/ctr_joypad.c b/input/drivers_joypad/ctr_joypad.c index f0504511c2..422053d8f9 100644 --- a/input/drivers_joypad/ctr_joypad.c +++ b/input/drivers_joypad/ctr_joypad.c @@ -20,9 +20,10 @@ #include "../input_joypad_driver.h" #include "../input_driver.h" -#include "../input_autodetect.h" + +#include "../../tasks/tasks_internal.h" + #include "../../configuration.h" -#include "../../runloop.h" #include "../../configuration.h" #include "../../retroarch.h" #include "../../command.h" @@ -44,7 +45,7 @@ static const char *ctr_joypad_name(unsigned pad) static void ctr_joypad_autodetect_add(unsigned autoconf_pad) { - settings_t *settings = config_get_ptr(); + settings_t *settings = config_get_ptr(); autoconfig_params_t params = {{0}}; strlcpy(settings->input.device_names[autoconf_pad], @@ -55,7 +56,8 @@ static void ctr_joypad_autodetect_add(unsigned autoconf_pad) params.idx = autoconf_pad; strlcpy(params.name, ctr_joypad_name(autoconf_pad), sizeof(params.name)); strlcpy(params.driver, ctr_joypad.ident, sizeof(params.driver)); - input_config_autoconfigure_joypad(¶ms); + + input_autoconfigure_connect(¶ms); } static bool ctr_joypad_init(void *data) diff --git a/input/drivers_joypad/dinput_joypad.c b/input/drivers_joypad/dinput_joypad.c index b43d987d5d..36a2133b20 100644 --- a/input/drivers_joypad/dinput_joypad.c +++ b/input/drivers_joypad/dinput_joypad.c @@ -28,12 +28,11 @@ #include "../../config.h" #endif -#include "../input_autodetect.h" +#include "../../tasks/tasks_internal.h" #include "../input_config.h" #include "../input_joypad_driver.h" #include "../input_keymaps.h" #include "../../configuration.h" -#include "../../runloop.h" #include "../../verbosity.h" struct dinput_joypad @@ -108,7 +107,7 @@ static BOOL CALLBACK enum_axes_cb(const DIDEVICEOBJECTINSTANCE *inst, void *p) return DIENUM_CONTINUE; } - +#ifdef HAVE_XINPUT /* Based on SDL2's implementation. */ static bool guid_is_xinput_device(const GUID* product_guid) { @@ -174,6 +173,7 @@ static bool guid_is_xinput_device(const GUID* product_guid) raw_devs = NULL; return false; } +#endif static const char *dinput_joypad_name(unsigned pad) { @@ -270,13 +270,22 @@ static BOOL CALLBACK enum_joypad_cb(const DIDEVICEINSTANCE *inst, void *p) dinput_joypad_name(g_joypad_cnt), sizeof(settings->input.device_names[g_joypad_cnt])); + strlcpy(params.name, + dinput_joypad_name(g_joypad_cnt), + sizeof(params.name)); + strlcpy(params.display_name, + dinput_joypad_friendly_name(g_joypad_cnt), + sizeof(params.driver)); + strlcpy(params.driver, + dinput_joypad.ident, + sizeof(params.driver)); + params.idx = g_joypad_cnt; - strlcpy(params.name, dinput_joypad_name(g_joypad_cnt), sizeof(params.name)); - strlcpy(params.display_name, dinput_joypad_friendly_name(g_joypad_cnt), sizeof(params.driver)); - strlcpy(params.driver, dinput_joypad.ident, sizeof(params.driver)); params.vid = dinput_joypad_vid(g_joypad_cnt); params.pid = dinput_joypad_pid(g_joypad_cnt); - input_config_autoconfigure_joypad(¶ms); + + input_autoconfigure_connect(¶ms); + settings->input.pid[g_joypad_cnt] = params.pid; settings->input.vid[g_joypad_cnt] = params.vid; } @@ -315,17 +324,16 @@ static bool dinput_joypad_init(void *data) static bool dinput_joypad_button(unsigned port_num, uint16_t joykey) { - const struct dinput_joypad *pad = NULL; - - if (joykey == NO_BTN) + unsigned hat_dir = 0; + const struct dinput_joypad *pad = &g_pads[port_num]; + if (!pad || !pad->joypad) return false; - pad = &g_pads[port_num]; - if (!pad->joypad) - return false; + hat_dir = GET_HAT_DIR(joykey); /* Check hat. */ - if (GET_HAT_DIR(joykey)) + + if (hat_dir) { unsigned pov; unsigned hat = GET_HAT(joykey); @@ -340,7 +348,7 @@ static bool dinput_joypad_button(unsigned port_num, uint16_t joykey) /* Magic numbers I'm not sure where originate from. */ if (pov < 36000) { - switch (GET_HAT_DIR(joykey)) + switch (hat_dir) { case HAT_UP_MASK: return (pov >= 31500) || (pov <= 4500); diff --git a/input/drivers_joypad/gx_joypad.c b/input/drivers_joypad/gx_joypad.c index 243c5b60e1..d01e90970a 100644 --- a/input/drivers_joypad/gx_joypad.c +++ b/input/drivers_joypad/gx_joypad.c @@ -15,15 +15,15 @@ * If not, see . */ -#include "../../configuration.h" -#include "../input_autodetect.h" - #include #include #ifdef HW_RVL #include #endif +#include "../../configuration.h" +#include "../../tasks/tasks_internal.h" + #ifdef GEKKO #define WPADInit WPAD_Init #define WPADDisconnect WPAD_Disconnect @@ -158,7 +158,7 @@ static void handle_hotplug(unsigned port, uint32_t ptype) params.idx = port; strlcpy(params.name, gx_joypad_name(port), sizeof(params.name)); strlcpy(params.driver, gx_joypad.ident, sizeof(params.driver)); - input_config_autoconfigure_joypad(¶ms); + input_autoconfigure_connect(¶ms); } } diff --git a/input/drivers_joypad/hid_joypad.c b/input/drivers_joypad/hid_joypad.c index 988f05d842..5273de9098 100644 --- a/input/drivers_joypad/hid_joypad.c +++ b/input/drivers_joypad/hid_joypad.c @@ -14,11 +14,11 @@ * If not, see . */ -#include "../input_autodetect.h" +#include "../../tasks/tasks_internal.h" #include "../input_hid_driver.h" #include "../input_driver.h" -static const hid_driver_t *generic_hid; +static const hid_driver_t *generic_hid = NULL; static bool hid_joypad_init(void *data) { @@ -33,44 +33,62 @@ static bool hid_joypad_init(void *data) static bool hid_joypad_query_pad(unsigned pad) { - return generic_hid->query_pad((void*)hid_driver_get_data(), pad); + if (generic_hid && generic_hid->query_pad) + return generic_hid->query_pad((void*)hid_driver_get_data(), pad); + return false; } static void hid_joypad_free(void) { - generic_hid->free((void*)hid_driver_get_data()); + if (!generic_hid) + return; + + if (generic_hid->free) + generic_hid->free((void*)hid_driver_get_data()); + generic_hid = NULL; } static bool hid_joypad_button(unsigned port, uint16_t joykey) { - return generic_hid->button((void*)hid_driver_get_data(), port, joykey); + if (generic_hid && generic_hid->button) + return generic_hid->button((void*)hid_driver_get_data(), port, joykey); + return false; } static uint64_t hid_joypad_get_buttons(unsigned port) { - return generic_hid->get_buttons((void*)hid_driver_get_data(), port); + if (generic_hid && generic_hid->get_buttons) + return generic_hid->get_buttons((void*)hid_driver_get_data(), port); + return 0; } static int16_t hid_joypad_axis(unsigned port, uint32_t joyaxis) { - return generic_hid->axis((void*)hid_driver_get_data(), port, joyaxis); + if (generic_hid && generic_hid->axis) + return generic_hid->axis((void*)hid_driver_get_data(), port, joyaxis); + return 0; } static void hid_joypad_poll(void) { - generic_hid->poll((void*)hid_driver_get_data()); + if (generic_hid && generic_hid->poll) + generic_hid->poll((void*)hid_driver_get_data()); } static bool hid_joypad_rumble(unsigned pad, enum retro_rumble_effect effect, uint16_t strength) { - return generic_hid->set_rumble((void*)hid_driver_get_data(), pad, effect, strength); + if (generic_hid && generic_hid->set_rumble) + return generic_hid->set_rumble((void*)hid_driver_get_data(), pad, effect, strength); + return false; } static const char *hid_joypad_name(unsigned pad) { - return generic_hid->name((void*)hid_driver_get_data(), pad); + if (generic_hid && generic_hid->name) + return generic_hid->name((void*)hid_driver_get_data(), pad); + return NULL; } input_device_driver_t hid_joypad = { diff --git a/input/drivers_joypad/linuxraw_joypad.c b/input/drivers_joypad/linuxraw_joypad.c index 714e75f2c8..7d7733f5ed 100644 --- a/input/drivers_joypad/linuxraw_joypad.c +++ b/input/drivers_joypad/linuxraw_joypad.c @@ -24,14 +24,17 @@ #include #include +#include +#include + #include +#include #include "../common/epoll_common.h" -#include "../input_autodetect.h" #include "../input_driver.h" #include "../../configuration.h" -#include "../../runloop.h" #include "../../verbosity.h" +#include "../../tasks/tasks_internal.h" #define NUM_BUTTONS 32 #define NUM_AXES 32 @@ -46,8 +49,9 @@ struct linuxraw_joypad }; static struct linuxraw_joypad linuxraw_pads[MAX_USERS]; -static int g_inotify; -static bool g_hotplug; +static int linuxraw_epoll = 0; +static int linuxraw_inotify = 0; +static bool linuxraw_hotplug = false; static void linuxraw_poll_pad(struct linuxraw_joypad *pad) { @@ -99,22 +103,11 @@ static bool linuxraw_joypad_init_pad(const char *path, struct linuxraw_joypad *p JSIOCGNAME(sizeof(settings->input.device_names[0])), pad->ident) >= 0) { RARCH_LOG("[Device]: Found pad: %s on %s.\n", pad->ident, path); - - if (g_hotplug) - { - char msg[512]; - - msg[0] = '\0'; - - snprintf(msg, sizeof(msg), "Device connected. #%u (%s).", - (unsigned)(pad - linuxraw_pads), pad->ident); - runloop_msg_queue_push(msg, 0, 60, false); - } } else RARCH_ERR("[Device]: Didn't find ident of %s.\n", path); - if (!epoll_add(pad->fd, pad)) + if (!epoll_add(&linuxraw_epoll, pad->fd, pad)) goto error; return true; @@ -134,7 +127,7 @@ static void handle_plugged_pad(void) if (!event_buf) return; - while ((rc = read(g_inotify, event_buf, event_size)) >= 0) + while ((rc = read(linuxraw_inotify, event_buf, event_size)) >= 0) { struct inotify_event *event = (struct inotify_event*)&event_buf[0]; @@ -158,8 +151,8 @@ static void handle_plugged_pad(void) { if (linuxraw_pads[idx].fd >= 0) { - if (g_hotplug) - input_config_autoconfigure_disconnect(idx, linuxraw_pads[idx].ident); + if (linuxraw_hotplug) + input_autoconfigure_disconnect(idx, linuxraw_pads[idx].ident); close(linuxraw_pads[idx].fd); linuxraw_pads[idx].buttons = 0; @@ -169,27 +162,28 @@ static void handle_plugged_pad(void) /* TODO - implement VID/PID? */ params.idx = idx; - input_config_autoconfigure_joypad(¶ms); + + input_autoconfigure_connect(¶ms); } } /* Sometimes, device will be created before access to it is established. */ else if (event->mask & (IN_CREATE | IN_ATTRIB)) { - bool ret; char path[PATH_MAX_LENGTH]; path[0] = '\0'; snprintf(path, sizeof(path), "/dev/input/%s", event->name); - ret = linuxraw_joypad_init_pad(path, &linuxraw_pads[idx]); - if (*linuxraw_pads[idx].ident && ret) + if ( !string_is_empty(linuxraw_pads[idx].ident) + && linuxraw_joypad_init_pad(path, &linuxraw_pads[idx])) { params.idx = idx; strlcpy(params.name, linuxraw_pads[idx].ident, sizeof(params.name)); strlcpy(params.driver, linuxraw_joypad.ident, sizeof(params.driver)); /* TODO - implement VID/PID? */ - input_config_autoconfigure_joypad(¶ms); + + input_autoconfigure_connect(¶ms); } } } @@ -204,7 +198,7 @@ static void linuxraw_joypad_poll(void) struct epoll_event events[MAX_USERS + 1]; retry: - ret = epoll_waiting(events, MAX_USERS + 1, 0); + ret = epoll_waiting(&linuxraw_epoll, events, MAX_USERS + 1, 0); if (ret < 0 && errno == EINTR) goto retry; @@ -224,7 +218,7 @@ static bool linuxraw_joypad_init(void *data) { unsigned i; - if (!epoll_new(true)) + if (!epoll_new(&linuxraw_epoll)) return false; for (i = 0; i < MAX_USERS; i++) @@ -248,23 +242,23 @@ static bool linuxraw_joypad_init(void *data) strlcpy(params.driver, "linuxraw", sizeof(params.driver)); /* TODO - implement VID/PID? */ - input_config_autoconfigure_joypad(¶ms); + input_autoconfigure_connect(¶ms); linuxraw_poll_pad(pad); } else - input_config_autoconfigure_joypad(¶ms); + input_autoconfigure_connect(¶ms); } - g_inotify = inotify_init(); + linuxraw_inotify = inotify_init(); - if (g_inotify >= 0) + if (linuxraw_inotify >= 0) { - fcntl(g_inotify, F_SETFL, fcntl(g_inotify, F_GETFL) | O_NONBLOCK); - inotify_add_watch(g_inotify, "/dev/input", IN_DELETE | IN_CREATE | IN_ATTRIB); - epoll_add(g_inotify, NULL); + fcntl(linuxraw_inotify, F_SETFL, fcntl(linuxraw_inotify, F_GETFL) | O_NONBLOCK); + inotify_add_watch(linuxraw_inotify, "/dev/input", IN_DELETE | IN_CREATE | IN_ATTRIB); + epoll_add(&linuxraw_epoll, linuxraw_inotify, NULL); } - g_hotplug = true; + linuxraw_hotplug = true; return true; } @@ -284,13 +278,13 @@ static void linuxraw_joypad_destroy(void) for (i = 0; i < MAX_USERS; i++) linuxraw_pads[i].fd = -1; - if (g_inotify >= 0) - close(g_inotify); - g_inotify = -1; + if (linuxraw_inotify >= 0) + close(linuxraw_inotify); + linuxraw_inotify = -1; - epoll_free(true); + epoll_free(&linuxraw_epoll); - g_hotplug = false; + linuxraw_hotplug = false; } static bool linuxraw_joypad_button(unsigned port, uint16_t joykey) @@ -343,10 +337,10 @@ static bool linuxraw_joypad_query_pad(unsigned pad) static const char *linuxraw_joypad_name(unsigned pad) { - if (pad >= MAX_USERS) + if (pad >= MAX_USERS || string_is_empty(linuxraw_pads[pad].ident)) return NULL; - return *linuxraw_pads[pad].ident ? linuxraw_pads[pad].ident : NULL; + return linuxraw_pads[pad].ident; } input_device_driver_t linuxraw_joypad = { diff --git a/input/drivers_joypad/mfi_joypad.m b/input/drivers_joypad/mfi_joypad.m index 377cea81a6..7349507812 100644 --- a/input/drivers_joypad/mfi_joypad.m +++ b/input/drivers_joypad/mfi_joypad.m @@ -207,9 +207,6 @@ static void apple_gamecontroller_joypad_destroy(void) static bool apple_gamecontroller_joypad_button(unsigned port, uint16_t joykey) { - if (joykey == NO_BTN) - return false; - /* Check hat. */ if (GET_HAT_DIR(joykey)) return false; diff --git a/input/drivers_joypad/parport_joypad.c b/input/drivers_joypad/parport_joypad.c index 1e2c830097..3c10fab04e 100644 --- a/input/drivers_joypad/parport_joypad.c +++ b/input/drivers_joypad/parport_joypad.c @@ -25,7 +25,7 @@ #include -#include "../input_autodetect.h" +#include "../../tasks/tasks_internal.h" #include "../input_driver.h" #include "../../configuration.h" #include "../../verbosity.h" @@ -306,7 +306,8 @@ static bool parport_joypad_init(void *data) parport_free_pad(pad); } } - input_config_autoconfigure_joypad(¶ms); + + input_autoconfigure_connect(¶ms); } return true; diff --git a/input/drivers_joypad/ps3_joypad.c b/input/drivers_joypad/ps3_joypad.c index 2419389590..665b35d56d 100644 --- a/input/drivers_joypad/ps3_joypad.c +++ b/input/drivers_joypad/ps3_joypad.c @@ -17,7 +17,7 @@ #include #include -#include "../input_autodetect.h" +#include "../../tasks/tasks_internal.h" #include "../../configuration.h" @@ -53,7 +53,8 @@ static void ps3_joypad_autodetect_add(unsigned autoconf_pad) params.idx = autoconf_pad; strlcpy(params.name, ps3_joypad_name(autoconf_pad), sizeof(params.name)); strlcpy(params.driver, ps3_joypad.ident, sizeof(params.driver)); - input_config_autoconfigure_joypad(¶ms); + + input_autoconfigure_connect(¶ms); } static bool ps3_joypad_init(void *data) @@ -138,7 +139,7 @@ static void ps3_joypad_poll(void) { if ( (pad_info.port_status[port] & CELL_PAD_STATUS_CONNECTED) == 0 ) { - input_config_autoconfigure_disconnect(port, ps3_joypad.ident); + input_autoconfigure_disconnect(port, ps3_joypad.ident); pads_connected[port] = 0; } else if ((pad_info.port_status[port] & CELL_PAD_STATUS_CONNECTED) > 0 ) diff --git a/input/drivers_joypad/psp_joypad.c b/input/drivers_joypad/psp_joypad.c index 905b170a27..b48011f127 100644 --- a/input/drivers_joypad/psp_joypad.c +++ b/input/drivers_joypad/psp_joypad.c @@ -16,7 +16,7 @@ #include -#include "../input_autodetect.h" +#include "../../tasks/tasks_internal.h" #include "../../configuration.h" @@ -83,7 +83,8 @@ static void psp_joypad_autodetect_add(unsigned autoconf_pad) params.idx = autoconf_pad; strlcpy(params.name, psp_joypad_name(autoconf_pad), sizeof(params.name)); strlcpy(params.driver, psp_joypad.ident, sizeof(params.driver)); - input_config_autoconfigure_joypad(¶ms); + + input_autoconfigure_connect(¶ms); } static bool psp_joypad_init(void *data) @@ -190,7 +191,7 @@ static void psp_joypad_poll(void) if (old_ctrl_info.port[player + 1] != SCE_CTRL_TYPE_UNPAIRED && curr_ctrl_info.port[player + 1] == SCE_CTRL_TYPE_UNPAIRED) { memset(&actuators[player], 0, sizeof(SceCtrlActuator)); - input_config_autoconfigure_disconnect(player, psp_joypad.ident); + input_autoconfigure_disconnect(player, psp_joypad.ident); } if (old_ctrl_info.port[player + 1] == SCE_CTRL_TYPE_UNPAIRED && diff --git a/input/drivers_joypad/qnx_joypad.c b/input/drivers_joypad/qnx_joypad.c index 3c73348f6f..c0afa2b655 100644 --- a/input/drivers_joypad/qnx_joypad.c +++ b/input/drivers_joypad/qnx_joypad.c @@ -15,7 +15,7 @@ * If not, see . */ -#include "../input_autodetect.h" +#include "../../tasks/tasks_internal.h" #include "../../configuration.h" @@ -41,9 +41,10 @@ static bool qnx_joypad_init(void *data) /* TODO - implement VID/PID? */ params.idx = autoconf_pad; - strlcpy(params.name, qnx_joypad_name(autoconf_pad), sizeof(params.name)); + strlcpy(params.name, qnx_joypad_name(autoconf_pad), sizeof(params.name)); strlcpy(params.driver, qnx_joypad.ident, sizeof(params.driver)); - input_config_autoconfigure_joypad(¶ms); + + input_autoconfigure_connect(¶ms); } return true; diff --git a/input/drivers_joypad/sdl_joypad.c b/input/drivers_joypad/sdl_joypad.c index 7586bf0e51..9681000095 100644 --- a/input/drivers_joypad/sdl_joypad.c +++ b/input/drivers_joypad/sdl_joypad.c @@ -22,7 +22,7 @@ #include "../../configuration.h" #include "../input_driver.h" -#include "../input_autodetect.h" +#include "../../tasks/tasks_internal.h" #include "../../verbosity.h" typedef struct _sdl_joypad @@ -144,13 +144,14 @@ static void sdl_pad_connect(unsigned id) product = guid_ptr[1]; #endif #endif - params.idx = id; - strlcpy(params.name, sdl_pad_name(id), sizeof(params.name)); - params.vid = vendor; - params.pid = product; + strlcpy(params.name, sdl_pad_name(id), sizeof(params.name)); strlcpy(params.driver, sdl_joypad.ident, sizeof(params.driver)); - input_config_autoconfigure_joypad(¶ms); + params.idx = id; + params.vid = vendor; + params.pid = product; + + input_autoconfigure_connect(¶ms); RARCH_LOG("[SDL]: Device #%u (%04x:%04x) connected: %s.\n", id, vendor, product, sdl_pad_name(id)); @@ -209,14 +210,14 @@ static void sdl_pad_disconnect(unsigned id) if (sdl_pads[id].controller) { SDL_GameControllerClose(sdl_pads[id].controller); - input_config_autoconfigure_disconnect(id, sdl_joypad.ident); + input_autoconfigure_disconnect(id, sdl_joypad.ident); } else #endif if (sdl_pads[id].joypad) { SDL_JoystickClose(sdl_pads[id].joypad); - input_config_autoconfigure_disconnect(id, sdl_joypad.ident); + input_autoconfigure_disconnect(id, sdl_joypad.ident); } settings->input.device_names[id][0] = '\0'; @@ -288,25 +289,24 @@ error: static bool sdl_joypad_button(unsigned port, uint16_t joykey) { - sdl_joypad_t *pad = NULL; - if (joykey == NO_BTN) - return false; - - pad = (sdl_joypad_t*)&sdl_pads[port]; - if (!pad->joypad) + unsigned hat_dir = 0; + sdl_joypad_t *pad = (sdl_joypad_t*)&sdl_pads[port]; + if (!pad || !pad->joypad) return false; + hat_dir = GET_HAT_DIR(joykey); /* Check hat. */ - if (GET_HAT_DIR(joykey)) + if (hat_dir) { uint8_t dir; uint16_t hat = GET_HAT(joykey); + if (hat >= pad->num_hats) return false; dir = sdl_pad_get_hat(pad, hat); - switch (GET_HAT_DIR(joykey)) + switch (hat_dir) { case HAT_UP_MASK: return dir & SDL_HAT_UP; @@ -332,7 +332,7 @@ static bool sdl_joypad_button(unsigned port, uint16_t joykey) static int16_t sdl_joypad_axis(unsigned port, uint32_t joyaxis) { sdl_joypad_t *pad; - int16_t val; + int16_t val = 0; if (joyaxis == AXIS_NONE) return 0; @@ -341,7 +341,6 @@ static int16_t sdl_joypad_axis(unsigned port, uint32_t joyaxis) if (!pad->joypad) return false; - val = 0; if (AXIS_NEG_GET(joyaxis) < pad->num_axes) { val = sdl_pad_get_axis(pad, AXIS_NEG_GET(joyaxis)); @@ -390,9 +389,9 @@ static void sdl_joypad_poll(void) #ifdef HAVE_SDL2 static bool sdl_joypad_set_rumble(unsigned pad, enum retro_rumble_effect effect, uint16_t strength) { + SDL_HapticEffect efx; sdl_joypad_t *joypad = (sdl_joypad_t*)&sdl_pads[pad]; - SDL_HapticEffect efx; memset(&efx, 0, sizeof(efx)); if (!joypad->joypad || !joypad->haptic) diff --git a/input/drivers_joypad/udev_joypad.c b/input/drivers_joypad/udev_joypad.c index bac6829b8d..16274a0ee9 100644 --- a/input/drivers_joypad/udev_joypad.c +++ b/input/drivers_joypad/udev_joypad.c @@ -23,7 +23,6 @@ #include #include -#include #include #include #include @@ -32,10 +31,12 @@ #include #include -#include "../input_autodetect.h" +#include "../../tasks/tasks_internal.h" #include "../input_driver.h" + +#include "../common/udev_common.h" + #include "../../configuration.h" -#include "../../runloop.h" #include "../../verbosity.h" /* Udev/evdev Linux joypad driver. @@ -82,8 +83,8 @@ struct udev_joypad int32_t pid; }; -static struct udev *g_udev; -static struct udev_monitor *g_udev_mon; +static struct udev *udev_joypad_fd = NULL; +static struct udev_monitor *udev_joypad_mon = NULL; static struct udev_joypad udev_pads[MAX_USERS]; static INLINE int16_t udev_compute_axis(const struct input_absinfo *info, int value) @@ -160,19 +161,6 @@ static void udev_poll_pad(struct udev_joypad *pad, unsigned p) } } -static bool udev_hotplug_available(void) -{ - struct pollfd fds = {0}; - - if (!g_udev_mon) - return false; - - fds.fd = udev_monitor_get_fd(g_udev_mon); - fds.events = POLLIN; - - return (poll(&fds, 1, 0) == 1) && (fds.revents & POLLIN); -} - static int udev_find_vacant_pad(void) { unsigned i; @@ -194,7 +182,7 @@ static int udev_open_joystick(const char *path) if (fd < 0) return fd; - if ((ioctl(fd, EVIOCGBIT(0, sizeof(evbit)), evbit) < 0) || + if ( (ioctl(fd, EVIOCGBIT(0, sizeof(evbit)), evbit) < 0) || (ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(keybit)), keybit) < 0) || (ioctl(fd, EVIOCGBIT(EV_ABS, sizeof(absbit)), absbit) < 0)) goto error; @@ -291,17 +279,21 @@ static int udev_add_pad(struct udev_device *dev, unsigned p, int fd, const char pad->fd = fd; pad->path = strdup(path); - if (*pad->ident) + if (!string_is_empty(pad->ident)) { - params.idx = p; strlcpy(params.name, pad->ident, sizeof(params.name)); - params.vid = pad->vid; - params.pid = pad->pid; + + params.idx = p; + params.vid = pad->vid; + params.pid = pad->pid; settings->input.pid[p] = params.pid; settings->input.vid[p] = params.vid; - strlcpy(settings->input.device_names[p], params.name, sizeof(settings->input.device_names[p])); - strlcpy(params.driver, udev_joypad.ident, sizeof(params.driver)); - input_config_autoconfigure_joypad(¶ms); + + strlcpy(settings->input.device_names[p], + params.name, sizeof(settings->input.device_names[p])); + strlcpy(params.driver, udev_joypad.ident, + sizeof(params.driver)); + input_autoconfigure_connect(¶ms); ret = 1; } @@ -314,13 +306,15 @@ static int udev_add_pad(struct udev_device *dev, unsigned p, int fd, const char p, path); if (ioctl(fd, EVIOCGEFFECTS, &pad->num_effects) >= 0) - RARCH_LOG("[udev]: Pad #%u (%s) supports %d force feedback effects.\n", p, path, pad->num_effects); + RARCH_LOG( + "[udev]: Pad #%u (%s) supports %d force feedback effects.\n", + p, path, pad->num_effects); } return ret; } -static void udev_check_device(struct udev_device *dev, const char *path, bool hotplugged) +static void udev_check_device(struct udev_device *dev, const char *path) { int ret; int pad, fd; @@ -334,7 +328,9 @@ static void udev_check_device(struct udev_device *dev, const char *path, bool ho { if (st.st_rdev == udev_pads[i].device) { - RARCH_LOG("[udev]: Device ID %u is already plugged.\n", (unsigned)st.st_rdev); + RARCH_LOG( + "[udev]: Device ID %u is already plugged.\n", + (unsigned)st.st_rdev); return; } } @@ -360,16 +356,6 @@ static void udev_check_device(struct udev_device *dev, const char *path, bool ho break; case 0: default: - if (hotplugged) - { - char msg[255]; - - msg[0] = '\0'; - - snprintf(msg, sizeof(msg), "Device connected: #%u (%s).", pad, path); - runloop_msg_queue_push(msg, 0, 60, false); - RARCH_LOG("[udev]: %s\n", msg); - } break; } } @@ -396,9 +382,10 @@ static void udev_joypad_remove_device(const char *path) for (i = 0; i < MAX_USERS; i++) { - if (udev_pads[i].path && string_is_equal(udev_pads[i].path, path)) + if ( !string_is_empty(udev_pads[i].path) + && string_is_equal(udev_pads[i].path, path)) { - input_config_autoconfigure_disconnect(i, udev_pads[i].ident); + input_autoconfigure_disconnect(i, udev_pads[i].ident); udev_free_pad(i); break; } @@ -412,26 +399,21 @@ static void udev_joypad_destroy(void) for (i = 0; i < MAX_USERS; i++) udev_free_pad(i); - if (g_udev_mon) - udev_monitor_unref(g_udev_mon); - g_udev_mon = NULL; - if (g_udev) - udev_unref(g_udev); - g_udev = NULL; + if (udev_joypad_mon) + udev_monitor_unref(udev_joypad_mon); + + if (udev_joypad_fd) + udev_unref(udev_joypad_fd); + + udev_joypad_mon = NULL; + udev_joypad_fd = NULL; } -static void udev_joypad_handle_hotplug(void) +static void udev_joypad_handle_hotplug(struct udev_device *dev) { - struct udev_device *dev = udev_monitor_receive_device(g_udev_mon); - const char *val; - const char *action; - const char *devnode; - if (!dev) - return; - - val = udev_device_get_property_value(dev, "ID_INPUT_JOYSTICK"); - action = udev_device_get_action(dev); - devnode = udev_device_get_devnode(dev); + const char *val = udev_device_get_property_value(dev, "ID_INPUT_JOYSTICK"); + const char *action = udev_device_get_action(dev); + const char *devnode = udev_device_get_devnode(dev); if (!val || !string_is_equal(val, "1") || !devnode) goto end; @@ -439,7 +421,7 @@ static void udev_joypad_handle_hotplug(void) if (string_is_equal(action, "add")) { RARCH_LOG("[udev]: Hotplug add: %s.\n", devnode); - udev_check_device(dev, devnode, true); + udev_check_device(dev, devnode); } else if (string_is_equal(action, "remove")) { @@ -451,7 +433,8 @@ end: udev_device_unref(dev); } -static bool udev_set_rumble(unsigned i, enum retro_rumble_effect effect, uint16_t strength) +static bool udev_set_rumble(unsigned i, + enum retro_rumble_effect effect, uint16_t strength) { int old_effect; uint16_t old_strength; @@ -523,8 +506,13 @@ static bool udev_set_rumble(unsigned i, enum retro_rumble_effect effect, uint16_ static void udev_joypad_poll(void) { unsigned i; - while (udev_hotplug_available()) - udev_joypad_handle_hotplug(); + + while (udev_joypad_mon && udev_hotplug_available(udev_joypad_mon)) + { + struct udev_device *dev = udev_monitor_receive_device(udev_joypad_mon); + if (dev) + udev_joypad_handle_hotplug(dev); + } for (i = 0; i < MAX_USERS; i++) udev_poll_pad(&udev_pads[i], i); @@ -542,18 +530,19 @@ static bool udev_joypad_init(void *data) for (i = 0; i < MAX_USERS; i++) udev_pads[i].fd = -1; - g_udev = udev_new(); - if (!g_udev) + udev_joypad_fd = udev_new(); + if (!udev_joypad_fd) return false; - g_udev_mon = udev_monitor_new_from_netlink(g_udev, "udev"); - if (g_udev_mon) + udev_joypad_mon = udev_monitor_new_from_netlink(udev_joypad_fd, "udev"); + if (udev_joypad_mon) { - udev_monitor_filter_add_match_subsystem_devtype(g_udev_mon, "input", NULL); - udev_monitor_enable_receiving(g_udev_mon); + udev_monitor_filter_add_match_subsystem_devtype( + udev_joypad_mon, "input", NULL); + udev_monitor_enable_receiving(udev_joypad_mon); } - enumerate = udev_enumerate_new(g_udev); + enumerate = udev_enumerate_new(udev_joypad_fd); if (!enumerate) goto error; @@ -564,11 +553,11 @@ static bool udev_joypad_init(void *data) for (item = devs; item; item = udev_list_entry_get_next(item)) { const char *name = udev_list_entry_get_name(item); - struct udev_device *dev = udev_device_new_from_syspath(g_udev, name); + struct udev_device *dev = udev_device_new_from_syspath(udev_joypad_fd, name); const char *devnode = udev_device_get_devnode(dev); if (devnode) - udev_check_device(dev, devnode, false); + udev_check_device(dev, devnode); udev_device_unref(dev); } @@ -580,14 +569,15 @@ error: return false; } -static bool udev_joypad_hat(const struct udev_joypad *pad, uint16_t hat) +static bool udev_joypad_button_hat(const void *data, uint16_t joykey, unsigned hat_dir) { - unsigned h = GET_HAT(hat); + const struct udev_joypad *pad = (const struct udev_joypad*)data; + unsigned h = GET_HAT(joykey); if (h >= NUM_HATS) return false; - switch (GET_HAT_DIR(hat)) + switch (hat_dir) { case HAT_LEFT_MASK: return pad->hats[h][0] < 0; @@ -605,9 +595,10 @@ static bool udev_joypad_hat(const struct udev_joypad *pad, uint16_t hat) static bool udev_joypad_button(unsigned port, uint16_t joykey) { const struct udev_joypad *pad = (const struct udev_joypad*)&udev_pads[port]; + unsigned hat_dir = GET_HAT_DIR(joykey); - if (GET_HAT_DIR(joykey)) - return udev_joypad_hat(pad, joykey); + if (hat_dir) + return udev_joypad_button_hat(pad, joykey, hat_dir); return joykey < UDEV_NUM_BUTTONS && BIT64_GET(pad->buttons, joykey); } @@ -649,10 +640,10 @@ static bool udev_joypad_query_pad(unsigned pad) static const char *udev_joypad_name(unsigned pad) { - if (pad >= MAX_USERS) + if (pad >= MAX_USERS || string_is_empty(udev_pads[pad].ident)) return NULL; - return *udev_pads[pad].ident ? udev_pads[pad].ident : NULL; + return udev_pads[pad].ident; } input_device_driver_t udev_joypad = { diff --git a/input/drivers_joypad/wiiu_joypad.c b/input/drivers_joypad/wiiu_joypad.c index e0d2b04a32..7bbe20b315 100644 --- a/input/drivers_joypad/wiiu_joypad.c +++ b/input/drivers_joypad/wiiu_joypad.c @@ -22,9 +22,8 @@ #include "../input_joypad_driver.h" #include "../input_driver.h" -#include "../input_autodetect.h" +#include "../../tasks/tasks_internal.h" #include "../../configuration.h" -#include "../../runloop.h" #include "../../configuration.h" #include "../../retroarch.h" #include "../../command.h" @@ -62,7 +61,8 @@ static void wiiu_joypad_autodetect_add(unsigned autoconf_pad) params.idx = autoconf_pad; strlcpy(params.name, wiiu_joypad_name(autoconf_pad), sizeof(params.name)); strlcpy(params.driver, wiiu_joypad.ident, sizeof(params.driver)); - input_config_autoconfigure_joypad(¶ms); + + input_autoconfigure_connect(¶ms); } static bool wiiu_joypad_button(unsigned port_num, uint16_t key) diff --git a/input/drivers_joypad/xdk_joypad.c b/input/drivers_joypad/xdk_joypad.c index 2a457922eb..de466bece5 100644 --- a/input/drivers_joypad/xdk_joypad.c +++ b/input/drivers_joypad/xdk_joypad.c @@ -17,7 +17,7 @@ #include #include "../../configuration.h" -#include "../input_autodetect.h" +#include "../../tasks/tasks_internal.h" static uint64_t pad_state[MAX_PADS]; static int16_t analog_state[MAX_PADS][2][2]; @@ -55,7 +55,7 @@ static void xdk_joypad_autodetect_add(unsigned autoconf_pad) params.idx = autoconf_pad; strlcpy(params.name, xdk_joypad_name(autoconf_pad), sizeof(params.name)); strlcpy(params.driver, xdk_joypad.ident, sizeof(params.driver)); - input_config_autoconfigure_joypad(¶ms); + input_autoconfigure_connect(¶ms); } static bool xdk_joypad_init(void *data) @@ -162,10 +162,10 @@ static void xdk_joypad_poll(void) if(gamepads[port]) XInputClose(gamepads[port]); - gamepads[port] = 0; + gamepads[port] = 0; pad_state[port] = 0; - input_config_autoconfigure_disconnect(port, xdk_joypad.ident); + input_autoconfigure_disconnect(port, xdk_joypad.ident); } /* handle inserted devices. */ diff --git a/input/drivers_joypad/xinput_joypad.c b/input/drivers_joypad/xinput_joypad.c index 8938ac6296..7f8166fac6 100644 --- a/input/drivers_joypad/xinput_joypad.c +++ b/input/drivers_joypad/xinput_joypad.c @@ -35,14 +35,12 @@ #include "../../config.h" #endif -#include "../input_autodetect.h" +#include "../../tasks/tasks_internal.h" #include "../input_config.h" #include "../../configuration.h" -#include "../../runloop.h" #include "../../verbosity.h" - /* Check if the definitions do not already exist. * Official and mingw xinput headers have different include guards. */ @@ -268,7 +266,7 @@ static bool xinput_joypad_init(void *data) params.idx = autoconf_pad; strlcpy(params.name, xinput_joypad_name(autoconf_pad), sizeof(params.name)); strlcpy(params.driver, xinput_joypad.ident, sizeof(params.driver)); - input_config_autoconfigure_joypad(¶ms); + input_autoconfigure_connect(¶ms); } } @@ -320,14 +318,11 @@ static const uint16_t button_index_to_bitmap_code[] = { static bool xinput_joypad_button(unsigned port_num, uint16_t joykey) { - uint16_t btn_word; - int xuser; + uint16_t btn_word = 0; unsigned num_buttons = 0; + unsigned hat_dir = 0; + int xuser = pad_index_to_xuser_index(port_num); - if (joykey == NO_BTN) - return false; - - xuser = pad_index_to_xuser_index(port_num); if (xuser == -1) return dinput_joypad.button(port_num, joykey); @@ -335,10 +330,11 @@ static bool xinput_joypad_button(unsigned port_num, uint16_t joykey) return false; btn_word = g_xinput_states[xuser].xstate.Gamepad.wButtons; + hat_dir = GET_HAT_DIR(joykey); - if (GET_HAT_DIR(joykey)) + if (hat_dir) { - switch (GET_HAT_DIR(joykey)) + switch (hat_dir) { case HAT_UP_MASK: return btn_word & XINPUT_GAMEPAD_DPAD_UP; @@ -349,6 +345,7 @@ static bool xinput_joypad_button(unsigned port_num, uint16_t joykey) case HAT_RIGHT_MASK: return btn_word & XINPUT_GAMEPAD_DPAD_RIGHT; } + return false; /* hat requested and no hat button down. */ } diff --git a/input/drivers_keyboard/keyboard_event_x11.c b/input/drivers_keyboard/keyboard_event_x11.c index 833db24d48..6729019650 100644 --- a/input/drivers_keyboard/keyboard_event_x11.c +++ b/input/drivers_keyboard/keyboard_event_x11.c @@ -16,6 +16,7 @@ #include #include +#include #include #include @@ -37,7 +38,8 @@ void x11_handle_key_event(XEvent *event, XIC ic, bool filter) { int i; - unsigned state, key; + unsigned key; + unsigned state = event->xkey.state; uint16_t mod = 0; uint32_t chars[32]; @@ -47,32 +49,41 @@ void x11_handle_key_event(XEvent *event, XIC ic, bool filter) chars[0] = '\0'; - if (down && !filter) + if (!filter) { - char keybuf[32]; + if (down) + { + char keybuf[32]; - keybuf[0] = '\0'; + keybuf[0] = '\0'; #ifdef X_HAVE_UTF8_STRING - Status status = 0; + Status status = 0; - /* XwcLookupString doesn't seem to work. */ - num = Xutf8LookupString(ic, &event->xkey, keybuf, ARRAY_SIZE(keybuf), &keysym, &status); + /* XwcLookupString doesn't seem to work. */ + num = Xutf8LookupString(ic, &event->xkey, keybuf, ARRAY_SIZE(keybuf), &keysym, &status); - /* libc functions need UTF-8 locale to work properly, - * which makes mbrtowc a bit impractical. - * - * Use custom UTF8 -> UTF-32 conversion. */ - num = utf8_conv_utf32(chars, ARRAY_SIZE(chars), keybuf, num); + /* libc functions need UTF-8 locale to work properly, + * which makes mbrtowc a bit impractical. + * + * Use custom UTF8 -> UTF-32 conversion. */ + num = utf8_conv_utf32(chars, ARRAY_SIZE(chars), keybuf, num); #else - (void)ic; - num = XLookupString(&event->xkey, keybuf, sizeof(keybuf), &keysym, NULL); /* ASCII only. */ - for (i = 0; i < num; i++) - chars[i] = keybuf[i] & 0x7f; + (void)ic; + num = XLookupString(&event->xkey, keybuf, sizeof(keybuf), &keysym, NULL); /* ASCII only. */ + for (i = 0; i < num; i++) + chars[i] = keybuf[i] & 0x7f; #endif + } + else + keysym = XLookupKeysym(&event->xkey, (state & ShiftMask) || (state & LockMask)); } + /* We can't feed uppercase letters to the keycode translator. Seems like a bad idea + * to feed it keysyms anyway, so here is a little hack... */ + if (keysym >= XK_A && keysym <= XK_Z) + keysym += XK_z - XK_Z; + key = input_keymaps_translate_keysym_to_rk(keysym); - state = event->xkey.state; if (state & ShiftMask) mod |= RETROKMOD_SHIFT; diff --git a/input/input_autodetect_builtin.c b/input/input_autodetect_builtin.c index bd61ac9886..a74705622f 100644 --- a/input/input_autodetect_builtin.c +++ b/input/input_autodetect_builtin.c @@ -19,7 +19,7 @@ #include "../config.h" #endif -#include "input_autodetect.h" +#include "../tasks/tasks_internal.h" #include "input_config.h" #define DECL_BTN(btn, bind) "input_" #btn "_btn = " #bind "\n" diff --git a/input/input_config.c b/input/input_config.c index b8f713422e..3e6481e006 100644 --- a/input/input_config.c +++ b/input/input_config.c @@ -134,6 +134,7 @@ const struct input_bind_map input_config_bind_map[RARCH_BIND_LIST_END_NULL] = { DECLARE_META_BIND(2, disk_next, RARCH_DISK_NEXT, MENU_ENUM_LABEL_VALUE_INPUT_META_DISK_NEXT), DECLARE_META_BIND(2, disk_prev, RARCH_DISK_PREV, MENU_ENUM_LABEL_VALUE_INPUT_META_DISK_PREV), DECLARE_META_BIND(2, grab_mouse_toggle, RARCH_GRAB_MOUSE_TOGGLE, MENU_ENUM_LABEL_VALUE_INPUT_META_GRAB_MOUSE_TOGGLE), + DECLARE_META_BIND(2, game_focus_toggle, RARCH_GAME_FOCUS_TOGGLE, MENU_ENUM_LABEL_VALUE_INPUT_META_GAME_FOCUS_TOGGLE), #ifdef HAVE_MENU DECLARE_META_BIND(1, menu_toggle, RARCH_MENU_TOGGLE, MENU_ENUM_LABEL_VALUE_INPUT_META_MENU_TOGGLE), #endif @@ -470,3 +471,16 @@ void input_config_get_bind_string(char *buf, const struct retro_keybind *bind, strlcat(buf, keybuf, size); #endif } + +const struct retro_keybind *input_config_get_bind_auto(unsigned port, unsigned id) +{ + settings_t *settings = config_get_ptr(); + unsigned joy_idx = 0; + + if (settings) + joy_idx = settings->input.joypad_map[port]; + + if (joy_idx < MAX_USERS) + return &settings->input.autoconf_binds[joy_idx][id]; + return NULL; +} diff --git a/input/input_config.h b/input/input_config.h index 8822f30d5a..79dd7f8acb 100644 --- a/input/input_config.h +++ b/input/input_config.h @@ -69,4 +69,6 @@ void input_config_parse_joy_button(config_file_t *conf, const char *prefix, void input_config_parse_joy_axis(config_file_t *conf, const char *prefix, const char *axis, struct retro_keybind *bind); +const struct retro_keybind *input_config_get_bind_auto(unsigned port, unsigned id); + #endif diff --git a/input/input_defines.h b/input/input_defines.h index 859f8e6475..9040d6df7b 100644 --- a/input/input_defines.h +++ b/input/input_defines.h @@ -81,6 +81,7 @@ enum RARCH_DISK_NEXT, RARCH_DISK_PREV, RARCH_GRAB_MOUSE_TOGGLE, + RARCH_GAME_FOCUS_TOGGLE, RARCH_MENU_TOGGLE, diff --git a/input/input_driver.c b/input/input_driver.c index d236bc33d6..8d26bcd004 100644 --- a/input/input_driver.c +++ b/input/input_driver.c @@ -28,10 +28,13 @@ #include "input_keyboard.h" #include "input_remapping.h" +#ifdef HAVE_MENU +#include "../menu/menu_driver.h" +#endif + #include "../configuration.h" #include "../driver.h" #include "../retroarch.h" -#include "../runloop.h" #include "../movie.h" #include "../list_special.h" #include "../verbosity.h" @@ -113,7 +116,6 @@ const input_driver_t *current_input = NULL; void *current_input_data = NULL; static bool input_driver_block_hotkey = false; static bool input_driver_block_libretro_input = false; -static bool input_driver_osk_enabled = false; static bool input_driver_nonblock_state = false; static bool input_driver_flushing_input = false; static bool input_driver_data_own = false; @@ -254,132 +256,7 @@ float input_sensor_get_input(unsigned port, unsigned id) return 0.0f; } -/** - * input_push_analog_dpad: - * @binds : Binds to modify. - * @mode : Which analog stick to bind D-Pad to. - * E.g: - * ANALOG_DPAD_LSTICK - * ANALOG_DPAD_RSTICK - * - * Push analog to D-Pad mappings to binds. - **/ -void input_push_analog_dpad(struct retro_keybind *binds, unsigned mode) -{ - unsigned i, j = 0; - bool inherit_joyaxis = false; - - for (i = RETRO_DEVICE_ID_JOYPAD_UP; i <= RETRO_DEVICE_ID_JOYPAD_RIGHT; i++) - binds[i].orig_joyaxis = binds[i].joyaxis; - - switch (mode) - { - case ANALOG_DPAD_LSTICK: - /* check if analog left is defined. * - * if plus and minus are equal abort. */ - if (!((binds[RARCH_ANALOG_LEFT_X_PLUS].joyaxis == - binds[RARCH_ANALOG_LEFT_X_MINUS].joyaxis) || - (binds[RARCH_ANALOG_LEFT_Y_PLUS].joyaxis == - binds[RARCH_ANALOG_LEFT_Y_MINUS].joyaxis))) - { - j = RARCH_ANALOG_LEFT_X_PLUS + 3; - inherit_joyaxis = true; - } - break; - case ANALOG_DPAD_RSTICK: - /* check if analog right is defined. * - * if plus and minus are equal abort. */ - if (!((binds[RARCH_ANALOG_RIGHT_X_PLUS].joyaxis == - binds[RARCH_ANALOG_RIGHT_X_MINUS].joyaxis) || - (binds[RARCH_ANALOG_RIGHT_Y_PLUS].joyaxis == - binds[RARCH_ANALOG_RIGHT_Y_MINUS].joyaxis))) - { - j = RARCH_ANALOG_RIGHT_X_PLUS + 3; - inherit_joyaxis = true; - } - break; - } - - if (!inherit_joyaxis) - return; - - /* Inherit joyaxis from analogs. */ - for (i = RETRO_DEVICE_ID_JOYPAD_UP; i <= RETRO_DEVICE_ID_JOYPAD_RIGHT; i++) - binds[i].joyaxis = binds[j--].joyaxis; -} - -/** - * input_pop_analog_dpad: - * @binds : Binds to modify. - * - * Restores binds temporarily overridden by input_push_analog_dpad(). - **/ -void input_pop_analog_dpad(struct retro_keybind *binds) -{ - unsigned i; - - for (i = RETRO_DEVICE_ID_JOYPAD_UP; i <= RETRO_DEVICE_ID_JOYPAD_RIGHT; i++) - binds[i].joyaxis = binds[i].orig_joyaxis; -} - -/** - * input_translate_coord_viewport: - * @mouse_x : Pointer X coordinate. - * @mouse_y : Pointer Y coordinate. - * @res_x : Scaled X coordinate. - * @res_y : Scaled Y coordinate. - * @res_screen_x : Scaled screen X coordinate. - * @res_screen_y : Scaled screen Y coordinate. - * - * Translates pointer [X,Y] coordinates into scaled screen - * coordinates based on viewport info. - * - * Returns: true (1) if successful, false if video driver doesn't support - * viewport info. - **/ -bool input_translate_coord_viewport(int mouse_x, int mouse_y, - int16_t *res_x, int16_t *res_y, int16_t *res_screen_x, - int16_t *res_screen_y) -{ - int scaled_screen_x, scaled_screen_y, scaled_x, scaled_y; - int norm_full_vp_width, norm_full_vp_height; - struct video_viewport vp = {0}; - - if (!video_driver_get_viewport_info(&vp)) - return false; - - norm_full_vp_width = (int)vp.full_width; - norm_full_vp_height = (int)vp.full_height; - - if (norm_full_vp_width <= 0 || norm_full_vp_height <= 0) - return false; - - scaled_screen_x = (2 * mouse_x * 0x7fff) / norm_full_vp_width - 0x7fff; - scaled_screen_y = (2 * mouse_y * 0x7fff) / norm_full_vp_height - 0x7fff; - if (scaled_screen_x < -0x7fff || scaled_screen_x > 0x7fff) - scaled_screen_x = -0x8000; /* OOB */ - if (scaled_screen_y < -0x7fff || scaled_screen_y > 0x7fff) - scaled_screen_y = -0x8000; /* OOB */ - - mouse_x -= vp.x; - mouse_y -= vp.y; - - scaled_x = (2 * mouse_x * 0x7fff) / norm_full_vp_width - 0x7fff; - scaled_y = (2 * mouse_y * 0x7fff) / norm_full_vp_height - 0x7fff; - if (scaled_x < -0x7fff || scaled_x > 0x7fff) - scaled_x = -0x8000; /* OOB */ - if (scaled_y < -0x7fff || scaled_y > 0x7fff) - scaled_y = -0x8000; /* OOB */ - - *res_x = scaled_x; - *res_y = scaled_y; - *res_screen_x = scaled_screen_x; - *res_screen_y = scaled_screen_y; - - return true; -} - -const struct retro_keybind *libretro_input_binds[MAX_USERS]; +static const struct retro_keybind *libretro_input_binds[MAX_USERS]; /** * input_poll: @@ -389,7 +266,6 @@ const struct retro_keybind *libretro_input_binds[MAX_USERS]; void input_poll(void) { size_t i; - const struct retro_keybind *binds[MAX_USERS]; settings_t *settings = config_get_ptr(); current_input->poll(current_input_data); @@ -399,17 +275,20 @@ void input_poll(void) for (i = 0; i < settings->input.max_users; i++) { libretro_input_binds[i] = settings->input.binds[i]; - binds[i] = settings->input.binds[i]; input_driver_turbo_btns.frame_enable[i] = 0; + } - if (!input_driver_block_libretro_input) + if (!input_driver_block_libretro_input) + { + for (i = 0; i < settings->input.max_users; i++) input_driver_turbo_btns.frame_enable[i] = current_input->input_state( - current_input_data, binds, + current_input_data, libretro_input_binds, i, RETRO_DEVICE_JOYPAD, 0, RARCH_TURBO_ENABLE); } #ifdef HAVE_OVERLAY - input_poll_overlay(NULL, settings->input.overlay_opacity); + if (overlay_ptr) + input_poll_overlay(overlay_ptr, settings->input.overlay_opacity); #endif #ifdef HAVE_COMMAND @@ -481,7 +360,8 @@ int16_t input_state(unsigned port, unsigned device, current_input_data, libretro_input_binds, port, device, idx, id); #ifdef HAVE_OVERLAY - input_state_overlay(&res, port, device, idx, id); + if (overlay_ptr) + input_state_overlay(overlay_ptr, &res, port, device, idx, id); #endif #ifdef HAVE_NETWORKGAMEPAD @@ -523,47 +403,24 @@ int16_t input_state(unsigned port, unsigned device, /** * check_input_driver_block_hotkey: - * @enable_hotkey : Is hotkey enable key enabled? * * Checks if 'hotkey enable' key is pressed. + * + * If we haven't bound anything to this, + * always allow hotkeys. + + * If we hold ENABLE_HOTKEY button, block all libretro input to allow + * hotkeys to be bound to same keys as RetroPad. **/ -static bool check_input_driver_block_hotkey(bool enable_hotkey) -{ - bool use_hotkey_enable = false; - settings_t *settings = config_get_ptr(); - const struct retro_keybind *bind = - &settings->input.binds[0][RARCH_ENABLE_HOTKEY]; - const struct retro_keybind *autoconf_bind = - &settings->input.autoconf_binds[0][RARCH_ENABLE_HOTKEY]; - bool kb_mapping_is_blocked = current_input->keyboard_mapping_is_blocked && - current_input->keyboard_mapping_is_blocked(current_input_data); - - /* Don't block the check to RARCH_ENABLE_HOTKEY - * unless we're really supposed to. */ - if (kb_mapping_is_blocked) - input_driver_block_hotkey = true; - else - input_driver_block_hotkey = false; - - /* If we haven't bound anything to this, - * always allow hotkeys. */ - use_hotkey_enable = - (bind->key != RETROK_UNKNOWN) - || (bind->joykey != NO_BTN) - || (bind->joyaxis != AXIS_NONE) - || (autoconf_bind->key != RETROK_UNKNOWN ) - || (autoconf_bind->joykey != NO_BTN) - || (autoconf_bind->joyaxis != AXIS_NONE); - - if (kb_mapping_is_blocked || (use_hotkey_enable && !enable_hotkey)) - input_driver_block_hotkey = true; - else - input_driver_block_hotkey = false; - - /* If we hold ENABLE_HOTKEY button, block all libretro input to allow - * hotkeys to be bound to same keys as RetroPad. */ - return (use_hotkey_enable && enable_hotkey); -} +#define check_input_driver_block_hotkey(normal_bind, autoconf_bind) \ +( \ + (((normal_bind)->key != RETROK_UNKNOWN) \ + || ((normal_bind)->joykey != NO_BTN) \ + || ((normal_bind)->joyaxis != AXIS_NONE) \ + || ((autoconf_bind)->key != RETROK_UNKNOWN ) \ + || ((autoconf_bind)->joykey != NO_BTN) \ + || ((autoconf_bind)->joyaxis != AXIS_NONE)) \ +) static const unsigned buttons[] = { RETRO_DEVICE_ID_JOYPAD_R, @@ -595,14 +452,20 @@ void state_tracker_update_input(uint16_t *input1, uint16_t *input2) for (i = 0; i < settings->input.max_users; i++) binds[i] = settings->input.binds[i]; - for (i = 0; i < 2; i++) - input_push_analog_dpad(settings->input.binds[i], - settings->input.analog_dpad_mode[i]); for (i = 0; i < settings->input.max_users; i++) - input_push_analog_dpad(settings->input.autoconf_binds[i], - settings->input.analog_dpad_mode[i]); + { + struct retro_keybind *general_binds = settings->input.binds[i]; + struct retro_keybind *auto_binds = settings->input.autoconf_binds[i]; + enum analog_dpad_mode dpad_mode = (enum analog_dpad_mode)settings->input.analog_dpad_mode[i]; - if (!input_driver_is_libretro_input_blocked()) + if (dpad_mode == ANALOG_DPAD_NONE) + continue; + + input_push_analog_dpad(general_binds, dpad_mode); + input_push_analog_dpad(auto_binds, dpad_mode); + } + + if (!input_driver_block_libretro_input) { for (i = 4; i < 16; i++) { @@ -613,93 +476,17 @@ void state_tracker_update_input(uint16_t *input1, uint16_t *input2) } } - for (i = 0; i < 2; i++) - input_pop_analog_dpad(settings->input.binds[i]); for (i = 0; i < settings->input.max_users; i++) - input_pop_analog_dpad(settings->input.autoconf_binds[i]); -} - -static INLINE bool input_keys_pressed_internal(unsigned i, - const struct retro_keybind *binds) -{ - if (((!input_driver_block_libretro_input && ((i < RARCH_FIRST_META_KEY))) - || !input_driver_block_hotkey)) - { - if (current_input->input_state(current_input_data, &binds, - 0, RETRO_DEVICE_JOYPAD, 0, i)) - return true; - } - - if (i >= RARCH_FIRST_META_KEY) - { - if (current_input->meta_key_pressed(current_input_data, i)) - return true; - } - -#ifdef HAVE_OVERLAY - if (input_overlay_key_pressed(i)) - return true; -#endif - -#ifdef HAVE_COMMAND - if (input_driver_command) - { - command_handle_t handle; - - handle.handle = input_driver_command; - handle.id = i; - - if (command_get(&handle)) - return true; - } -#endif - -#ifdef HAVE_NETWORKGAMEPAD - if (input_driver_remote) - { - if (input_remote_key_pressed(i, 0)) - return true; - } -#endif - - return false; -} - -/** - * input_keys_pressed: - * - * Grab an input sample for this frame. - * - * TODO: In case RARCH_BIND_LIST_END starts exceeding 64, - * and you need a bitmask of more than 64 entries, reimplement - * it to use something like rarch_bits_t. - * - * Returns: Input sample containg a mask of all pressed keys. - */ -uint64_t input_keys_pressed(void) -{ - unsigned i; - uint64_t ret = 0; - settings_t *settings = config_get_ptr(); - const struct retro_keybind *binds = settings->input.binds[0]; - - if ( - check_input_driver_block_hotkey( - current_input->input_state(current_input_data, &binds, 0, - RETRO_DEVICE_JOYPAD, 0, RARCH_ENABLE_HOTKEY))) - input_driver_block_libretro_input = true; - else - input_driver_block_libretro_input = false; - - for (i = 0; i < RARCH_BIND_LIST_END; i++) - { - if (input_keys_pressed_internal(i, binds)) - ret |= (UINT64_C(1) << i); - } - - return ret; + { + struct retro_keybind *general_binds = settings->input.binds[i]; + struct retro_keybind *auto_binds = settings->input.autoconf_binds[i]; + + input_pop_analog_dpad(general_binds); + input_pop_analog_dpad(auto_binds); + } } +#ifdef HAVE_MENU static INLINE bool input_menu_keys_pressed_internal(unsigned i) { settings_t *settings = config_get_ptr(); @@ -712,6 +499,7 @@ static INLINE bool input_menu_keys_pressed_internal(unsigned i) { int port; int port_max = 1; + if (settings->input.all_users_control_menu) port_max = settings->input.max_users; @@ -722,16 +510,10 @@ static INLINE bool input_menu_keys_pressed_internal(unsigned i) const input_device_driver_t *sec = current_input->get_sec_joypad_driver ? current_input->get_sec_joypad_driver(current_input_data) : NULL; - if (sec) - { - if (input_joypad_pressed(sec, port, settings->input.binds[0], i)) - return true; - } - if (first) - { - if (input_joypad_pressed(first, port, settings->input.binds[0], i)) - return true; - } + if (sec && input_joypad_pressed(sec, port, settings->input.binds[0], i)) + return true; + if (first && input_joypad_pressed(first, port, settings->input.binds[0], i)) + return true; } } @@ -742,7 +524,7 @@ static INLINE bool input_menu_keys_pressed_internal(unsigned i) } #ifdef HAVE_OVERLAY - if (input_overlay_key_pressed(i)) + if (overlay_ptr && input_overlay_key_pressed(overlay_ptr, i)) return true; #endif @@ -782,28 +564,56 @@ static INLINE bool input_menu_keys_pressed_internal(unsigned i) * * Returns: Input sample containg a mask of all pressed keys. */ -uint64_t input_menu_keys_pressed(void) +uint64_t input_menu_keys_pressed( + uint64_t old_input, + uint64_t *last_input, + uint64_t *trigger_input, + bool runloop_paused) { unsigned i; - uint64_t ret = 0; - settings_t *settings = config_get_ptr(); + uint64_t ret = 0; + settings_t *settings = config_get_ptr(); const struct retro_keybind *binds[MAX_USERS] = {NULL}; + const struct retro_keybind *binds_norm = NULL; + const struct retro_keybind *binds_auto = NULL; if (!current_input || !current_input_data) - return ret; + goto end; + + if (settings->menu.unified_controls) + return input_keys_pressed( + old_input, + last_input, + trigger_input, + runloop_paused); for (i = 0; i < settings->input.max_users; i++) - input_push_analog_dpad(settings->input.autoconf_binds[i], - ANALOG_DPAD_LSTICK); + { + struct retro_keybind *auto_binds = settings->input.autoconf_binds[i]; - if ( - check_input_driver_block_hotkey( - current_input->input_state(current_input_data, &binds[0], 0, - RETRO_DEVICE_JOYPAD, 0, RARCH_ENABLE_HOTKEY))) - input_driver_block_libretro_input = true; - else - input_driver_block_libretro_input = false; + input_push_analog_dpad(auto_binds, ANALOG_DPAD_LSTICK); + } + input_driver_block_libretro_input = false; + input_driver_block_hotkey = false; + + /* Don't block the check to RARCH_ENABLE_HOTKEY + * unless we're really supposed to. */ + if (current_input->keyboard_mapping_is_blocked && + current_input->keyboard_mapping_is_blocked(current_input_data)) + input_driver_block_hotkey = true; + + binds_norm = &settings->input.binds[0][RARCH_ENABLE_HOTKEY]; + binds_auto = &settings->input.autoconf_binds[0][RARCH_ENABLE_HOTKEY]; + + if (check_input_driver_block_hotkey(binds_norm, binds_auto)) + { + if (current_input->input_state(current_input_data, &binds[0], 0, + RETRO_DEVICE_JOYPAD, 0, RARCH_ENABLE_HOTKEY)) + input_driver_block_libretro_input = true; + else + input_driver_block_hotkey = true; + } for (i = 0; i < RARCH_BIND_LIST_END; i++) { @@ -812,31 +622,43 @@ uint64_t input_menu_keys_pressed(void) } for (i = 0; i < settings->input.max_users; i++) - input_pop_analog_dpad(settings->input.autoconf_binds[i]); + { + struct retro_keybind *auto_binds = settings->input.autoconf_binds[i]; + input_pop_analog_dpad(auto_binds); + } if (menu_input_dialog_get_display_kb()) - return ret; - + goto end; if (current_input->input_state(current_input_data, binds, 0, RETRO_DEVICE_KEYBOARD, 0, RETROK_RETURN)) - BIT64_SET(ret, settings->menu_ok_btn); + { + if (!settings->input.menu_swap_ok_cancel_buttons) + BIT64_SET(ret, RETRO_DEVICE_ID_JOYPAD_A); + else + BIT64_SET(ret, RETRO_DEVICE_ID_JOYPAD_B); + } if (current_input->input_state(current_input_data, binds, 0, RETRO_DEVICE_KEYBOARD, 0, RETROK_BACKSPACE)) - BIT64_SET(ret, settings->menu_cancel_btn); + { + if (!settings->input.menu_swap_ok_cancel_buttons) + BIT64_SET(ret, RETRO_DEVICE_ID_JOYPAD_B); + else + BIT64_SET(ret, RETRO_DEVICE_ID_JOYPAD_A); + } if (current_input->input_state(current_input_data, binds, 0, RETRO_DEVICE_KEYBOARD, 0, RETROK_SPACE)) - BIT64_SET(ret, settings->menu_default_btn); + BIT64_SET(ret, RETRO_DEVICE_ID_JOYPAD_START); if (current_input->input_state(current_input_data, binds, 0, RETRO_DEVICE_KEYBOARD, 0, RETROK_SLASH)) - BIT64_SET(ret, settings->menu_search_btn); + BIT64_SET(ret, RETRO_DEVICE_ID_JOYPAD_X); if (current_input->input_state(current_input_data, binds, 0, RETRO_DEVICE_KEYBOARD, 0, RETROK_RSHIFT)) - BIT64_SET(ret, settings->menu_info_btn); + BIT64_SET(ret, RETRO_DEVICE_ID_JOYPAD_SELECT); if (current_input->input_state(current_input_data, binds, 0, RETRO_DEVICE_KEYBOARD, 0, RETROK_RIGHT)) @@ -854,6 +676,14 @@ uint64_t input_menu_keys_pressed(void) RETRO_DEVICE_KEYBOARD, 0, RETROK_UP)) BIT64_SET(ret, RETRO_DEVICE_ID_JOYPAD_UP); + if (current_input->input_state(current_input_data, binds, 0, + RETRO_DEVICE_KEYBOARD, 0, RETROK_PAGEUP)) + BIT64_SET(ret, RETRO_DEVICE_ID_JOYPAD_L); + + if (current_input->input_state(current_input_data, binds, 0, + RETRO_DEVICE_KEYBOARD, 0, RETROK_PAGEDOWN)) + BIT64_SET(ret, RETRO_DEVICE_ID_JOYPAD_R); + if (current_input->input_state(current_input_data, binds, 0, RETRO_DEVICE_KEYBOARD, 0, settings->input.binds[0][RARCH_QUIT_KEY].key )) BIT64_SET(ret, RARCH_QUIT_KEY); @@ -862,8 +692,162 @@ uint64_t input_menu_keys_pressed(void) RETRO_DEVICE_KEYBOARD, 0, settings->input.binds[0][RARCH_FULLSCREEN_TOGGLE_KEY].key )) BIT64_SET(ret, RARCH_FULLSCREEN_TOGGLE_KEY); +end: + *trigger_input = ret & ~old_input; + *last_input = ret; + + if (input_driver_flushing_input) + { + input_driver_flushing_input = false; + + if (ret) + { + ret = 0; + + /* If core was paused before entering menu, evoke + * pause toggle to wake it up. */ + if (runloop_paused) + BIT64_SET(ret, RARCH_PAUSE_TOGGLE); + input_driver_flushing_input = true; + } + } + +#ifdef HAVE_MENU + if (menu_driver_is_binding_state()) + *trigger_input = 0; +#endif + return ret; } +#endif + +static INLINE bool input_keys_pressed_internal(unsigned i, + const struct retro_keybind *binds) +{ + if (((!input_driver_block_libretro_input && ((i < RARCH_FIRST_META_KEY))) + || !input_driver_block_hotkey)) + { + if (current_input->input_state(current_input_data, &binds, + 0, RETRO_DEVICE_JOYPAD, 0, i)) + return true; + } + + if (i >= RARCH_FIRST_META_KEY) + { + if (current_input->meta_key_pressed(current_input_data, i)) + return true; + } + +#ifdef HAVE_OVERLAY + if (overlay_ptr && input_overlay_key_pressed(overlay_ptr, i)) + return true; +#endif + +#ifdef HAVE_COMMAND + if (input_driver_command) + { + command_handle_t handle; + + handle.handle = input_driver_command; + handle.id = i; + + if (command_get(&handle)) + return true; + } +#endif + +#ifdef HAVE_NETWORKGAMEPAD + if (input_driver_remote) + { + if (input_remote_key_pressed(i, 0)) + return true; + } +#endif + + return false; +} + +/** + * input_keys_pressed: + * + * Grab an input sample for this frame. + * + * TODO: In case RARCH_BIND_LIST_END starts exceeding 64, + * and you need a bitmask of more than 64 entries, reimplement + * it to use something like rarch_bits_t. + * + * Returns: Input sample containg a mask of all pressed keys. + */ +uint64_t input_keys_pressed( + uint64_t old_input, + uint64_t *last_input, + uint64_t *trigger_input, + bool runloop_paused) +{ + unsigned i; + uint64_t ret = 0; + settings_t *settings = config_get_ptr(); + const struct retro_keybind *binds = settings->input.binds[0]; + const struct retro_keybind *binds_auto = &settings->input.autoconf_binds[0][RARCH_ENABLE_HOTKEY]; + const struct retro_keybind *normal = &binds[RARCH_ENABLE_HOTKEY]; + + const struct retro_keybind *focus_binds_auto = &settings->input.autoconf_binds[0][RARCH_GAME_FOCUS_TOGGLE]; + const struct retro_keybind *focus_normal = &binds[RARCH_GAME_FOCUS_TOGGLE]; + + input_driver_block_libretro_input = false; + input_driver_block_hotkey = false; + + /* Don't block the check to RARCH_ENABLE_HOTKEY + * unless we're really supposed to. */ + if (current_input->keyboard_mapping_is_blocked && + current_input->keyboard_mapping_is_blocked(current_input_data)) + input_driver_block_hotkey = true; + + if (check_input_driver_block_hotkey(normal, binds_auto)) + { + if (current_input->input_state(current_input_data, &binds, 0, + RETRO_DEVICE_JOYPAD, 0, RARCH_ENABLE_HOTKEY)) + input_driver_block_libretro_input = true; + else + input_driver_block_hotkey = true; + } + + /* Allows rarch_focus_toggle hotkey to still work even tough every hotkey is blocked */ + if (check_input_driver_block_hotkey(focus_normal, focus_binds_auto)) + { + if (current_input->input_state(current_input_data, &binds, 0, + RETRO_DEVICE_JOYPAD, 0, RARCH_GAME_FOCUS_TOGGLE)) + input_driver_block_hotkey = false; + } + + for (i = 0; i < RARCH_BIND_LIST_END; i++) + { + if (input_keys_pressed_internal(i, binds)) + ret |= (UINT64_C(1) << i); + } + + *trigger_input = ret & ~old_input; + *last_input = ret; + + if (input_driver_flushing_input) + { + input_driver_flushing_input = false; + + if (ret) + { + ret = 0; + + /* If core was paused before entering menu, evoke + * pause toggle to wake it up. */ + if (runloop_paused) + BIT64_SET(ret, RARCH_PAUSE_TOGGLE); + input_driver_flushing_input = true; + } + } + + return ret; +} + void *input_driver_get_data(void) { @@ -977,14 +961,9 @@ void input_driver_set_flushing_input(void) input_driver_flushing_input = true; } -void input_driver_unset_flushing_input(void) +void input_driver_unset_hotkey_block(void) { - input_driver_flushing_input = false; -} - -bool input_driver_is_flushing_input(void) -{ - return input_driver_flushing_input; + input_driver_block_hotkey = true; } void input_driver_set_hotkey_block(void) @@ -992,16 +971,6 @@ void input_driver_set_hotkey_block(void) input_driver_block_hotkey = true; } -void input_driver_unset_hotkey_block(void) -{ - input_driver_block_hotkey = false; -} - -bool input_driver_is_hotkey_blocked(void) -{ - return input_driver_block_hotkey; -} - void input_driver_set_libretro_input_blocked(void) { input_driver_block_libretro_input = true; @@ -1047,21 +1016,6 @@ bool input_driver_owns_driver(void) return input_driver_data_own; } -void input_driver_set_onscreen_keyboard_enabled(void) -{ - input_driver_osk_enabled = true; -} - -void input_driver_unset_onscreen_keyboard_enabled(void) -{ - input_driver_osk_enabled = false; -} - -bool input_driver_is_onscreen_keyboard_enabled(void) -{ - return input_driver_osk_enabled; -} - bool input_driver_init_command(void) { #ifdef HAVE_COMMAND diff --git a/input/input_driver.h b/input/input_driver.h index 7841147006..5c4602cff2 100644 --- a/input/input_driver.h +++ b/input/input_driver.h @@ -160,24 +160,20 @@ bool input_sensor_set_state(unsigned port, float input_sensor_get_input(unsigned port, unsigned id); +#define inherit_joyaxis(binds) (((binds)[x_plus].joyaxis == (binds)[x_minus].joyaxis) || ( (binds)[y_plus].joyaxis == (binds)[y_minus].joyaxis)) + /** - * input_translate_coord_viewport: - * @mouse_x : Pointer X coordinate. - * @mouse_y : Pointer Y coordinate. - * @res_x : Scaled X coordinate. - * @res_y : Scaled Y coordinate. - * @res_screen_x : Scaled screen X coordinate. - * @res_screen_y : Scaled screen Y coordinate. + * input_pop_analog_dpad: + * @binds : Binds to modify. * - * Translates pointer [X,Y] coordinates into scaled screen - * coordinates based on viewport info. - * - * Returns: true (1) if successful, false if video driver doesn't support - * viewport info. + * Restores binds temporarily overridden by input_push_analog_dpad(). **/ -bool input_translate_coord_viewport(int mouse_x, int mouse_y, - int16_t *res_x, int16_t *res_y, int16_t *res_screen_x, - int16_t *res_screen_y); +#define input_pop_analog_dpad(binds) \ +{ \ + unsigned j; \ + for (j = RETRO_DEVICE_ID_JOYPAD_UP; j <= RETRO_DEVICE_ID_JOYPAD_RIGHT; j++) \ + (binds)[j].joyaxis = (binds)[j].orig_joyaxis; \ +} /** * input_push_analog_dpad: @@ -189,15 +185,30 @@ bool input_translate_coord_viewport(int mouse_x, int mouse_y, * * Push analog to D-Pad mappings to binds. **/ -void input_push_analog_dpad(struct retro_keybind *binds, unsigned mode); - -/** - * input_pop_analog_dpad: - * @binds : Binds to modify. - * - * Restores binds temporarily overridden by input_push_analog_dpad(). - **/ -void input_pop_analog_dpad(struct retro_keybind *binds); +#define input_push_analog_dpad(binds, mode) \ +{ \ + unsigned k; \ + unsigned x_plus = RARCH_ANALOG_RIGHT_X_PLUS; \ + unsigned y_plus = RARCH_ANALOG_RIGHT_Y_PLUS; \ + unsigned x_minus = RARCH_ANALOG_RIGHT_X_MINUS; \ + unsigned y_minus = RARCH_ANALOG_RIGHT_Y_MINUS; \ + if ((mode) == ANALOG_DPAD_LSTICK) \ + { \ + x_plus = RARCH_ANALOG_LEFT_X_PLUS; \ + y_plus = RARCH_ANALOG_LEFT_Y_PLUS; \ + x_minus = RARCH_ANALOG_LEFT_X_MINUS; \ + y_minus = RARCH_ANALOG_LEFT_Y_MINUS; \ + } \ + for (k = RETRO_DEVICE_ID_JOYPAD_UP; k <= RETRO_DEVICE_ID_JOYPAD_RIGHT; k++) \ + (binds)[k].orig_joyaxis = (binds)[k].joyaxis; \ + if (!inherit_joyaxis(binds)) \ + { \ + unsigned j = x_plus + 3; \ + /* Inherit joyaxis from analogs. */ \ + for (k = RETRO_DEVICE_ID_JOYPAD_UP; k <= RETRO_DEVICE_ID_JOYPAD_RIGHT; k++) \ + (binds)[k].joyaxis = (binds)[j--].joyaxis; \ + } \ +} /** * input_poll: @@ -221,9 +232,19 @@ void input_poll(void); int16_t input_state(unsigned port, unsigned device, unsigned idx, unsigned id); -uint64_t input_keys_pressed(void); +uint64_t input_keys_pressed( + uint64_t old_input, + uint64_t *last_input, + uint64_t *trigger_input, + bool runloop_paused); -uint64_t input_menu_keys_pressed(void); +#ifdef HAVE_MENU +uint64_t input_menu_keys_pressed( + uint64_t old_input, + uint64_t *last_input, + uint64_t *trigger_input, + bool runloop_paused); +#endif void *input_driver_get_data(void); @@ -253,15 +274,9 @@ bool input_driver_find_driver(void); void input_driver_set_flushing_input(void); -void input_driver_unset_flushing_input(void); - -bool input_driver_is_flushing_input(void); - -void input_driver_set_hotkey_block(void); - void input_driver_unset_hotkey_block(void); -bool input_driver_is_hotkey_blocked(void); +void input_driver_set_hotkey_block(void); void input_driver_set_libretro_input_blocked(void); @@ -281,12 +296,6 @@ void input_driver_unset_own_driver(void); bool input_driver_owns_driver(void); -void input_driver_set_onscreen_keyboard_enabled(void); - -void input_driver_unset_onscreen_keyboard_enabled(void); - -bool input_driver_is_onscreen_keyboard_enabled(void); - void input_driver_deinit_command(void); bool input_driver_init_command(void); @@ -301,8 +310,6 @@ bool input_driver_ungrab_mouse(void); bool input_driver_is_data_ptr_same(void *data); -extern const struct retro_keybind *libretro_input_binds[MAX_USERS]; - extern input_driver_t input_android; extern input_driver_t input_sdl; extern input_driver_t input_dinput; diff --git a/input/input_joypad_driver.c b/input/input_joypad_driver.c index 2aa4f9f898..216859e50c 100644 --- a/input/input_joypad_driver.c +++ b/input/input_joypad_driver.c @@ -250,7 +250,7 @@ bool input_joypad_pressed( uint64_t joykey = (binds[key].joykey != NO_BTN) ? binds[key].joykey : auto_binds[key].joykey; - if (!drv->button(joy_idx, (uint16_t)joykey)) + if ((uint16_t)joykey == NO_BTN || !drv->button(joy_idx, (uint16_t)joykey)) { uint32_t joyaxis = (binds[key].joyaxis != AXIS_NONE) ? binds[key].joyaxis : auto_binds[key].joyaxis; diff --git a/input/input_keyboard.c b/input/input_keyboard.c index db4d9798a3..63ac88d714 100644 --- a/input/input_keyboard.c +++ b/input/input_keyboard.c @@ -95,19 +95,6 @@ bool input_keyboard_return_pressed(void) return kb_return_pressed; } -static void input_keyboard_line_toggle_osk(bool enable) -{ - settings_t *settings = config_get_ptr(); - - if (!settings->osk.enable) - return; - - if (enable) - input_driver_keyboard_linefeed_enable = true; - else - input_driver_keyboard_linefeed_enable = false; -} - /** * input_keyboard_line_free: * @state : Input keyboard line handle. @@ -121,8 +108,6 @@ static void input_keyboard_line_free(input_keyboard_line_t *state) free(state->buffer); free(state); - - input_keyboard_line_toggle_osk(false); } /** @@ -147,8 +132,6 @@ static input_keyboard_line_t *input_keyboard_line_new(void *userdata, state->cb = cb; state->userdata = userdata; - input_keyboard_line_toggle_osk(true); - return state; } diff --git a/input/input_overlay.c b/input/input_overlay.c index e3f2166a72..5f44266e6e 100644 --- a/input/input_overlay.c +++ b/input/input_overlay.c @@ -74,7 +74,7 @@ struct input_overlay enum overlay_status state; }; -static input_overlay_t *overlay_ptr = NULL; +input_overlay_t *overlay_ptr = NULL; /** * input_overlay_scale: @@ -150,9 +150,6 @@ void input_overlay_set_scale_factor(input_overlay_t *ol, float scale) { size_t i; - /* TODO/FIXME - Bad hackery. Should get rid of this */ - if (!ol) - ol = overlay_ptr; if (!ol) return; @@ -209,7 +206,7 @@ static void input_overlay_load_active(input_overlay_t *ol, float opacity) ol->iface->load(ol->iface_data, ol->active->load_images, ol->active->load_images_size); - input_overlay_set_alpha_mod(opacity); + input_overlay_set_alpha_mod(ol, opacity); input_overlay_set_vertex_geom(ol); if (ol->iface->full_screen) @@ -395,7 +392,7 @@ static void input_overlay_post_poll(input_overlay_t *ol, float opacity) { size_t i; - input_overlay_set_alpha_mod(opacity); + input_overlay_set_alpha_mod(ol, opacity); for (i = 0; i < ol->active->size; i++) { @@ -436,7 +433,7 @@ static void input_overlay_poll_clear(input_overlay_t *ol, float opacity) ol->blocked = false; - input_overlay_set_alpha_mod(opacity); + input_overlay_set_alpha_mod(ol, opacity); for (i = 0; i < ol->active->size; i++) { @@ -459,9 +456,8 @@ static void input_overlay_poll_clear(input_overlay_t *ol, float opacity) * Switch to the next available overlay * screen. **/ -void input_overlay_next(float opacity) +void input_overlay_next(input_overlay_t *ol, float opacity) { - input_overlay_t *ol = overlay_ptr; if (!ol) return; @@ -492,9 +488,8 @@ static bool input_overlay_full_screen(input_overlay_t *ol) * * Frees overlay handle. **/ -void input_overlay_free(void) +void input_overlay_free(input_overlay_t *ol) { - input_overlay_t *ol = overlay_ptr; if (!ol) return; overlay_ptr = NULL; @@ -523,7 +518,7 @@ void input_overlay_loaded(void *task_data, void *user_data, const char *err) /* We can't display when the menu is up */ if (settings->input.overlay_hide_in_menu && menu_driver_ctl(RARCH_MENU_CTL_IS_ALIVE, NULL)) { - if (!input_driver_is_onscreen_keyboard_enabled() && settings->input.overlay_enable) + if (settings->input.overlay_enable) goto abort_load; } #endif @@ -545,11 +540,8 @@ void input_overlay_loaded(void *task_data, void *user_data, const char *err) ol->iface_data = video_driver_get_ptr(true); input_overlay_load_active(ol, settings->input.overlay_opacity); + input_overlay_enable(ol, settings->input.overlay_enable); - if (input_driver_is_onscreen_keyboard_enabled()) - input_overlay_enable(ol, settings->osk.enable); - else - input_overlay_enable(ol, settings->input.overlay_enable); input_overlay_set_scale_factor(ol, settings->input.overlay_scale); ol->next_index = (ol->index + 1) % ol->size; @@ -576,10 +568,9 @@ abort_load: * Sets a modulating factor for alpha channel. Default is 1.0. * The alpha factor is applied for all overlays. **/ -void input_overlay_set_alpha_mod(float mod) +void input_overlay_set_alpha_mod(input_overlay_t *ol, float mod) { unsigned i; - input_overlay_t *ol = overlay_ptr; if (!ol) return; @@ -590,16 +581,13 @@ void input_overlay_set_alpha_mod(float mod) bool input_overlay_is_alive(input_overlay_t *ol) { - if (!ol) - ol = overlay_ptr; - if (!ol) - return false; - return ol->alive; + if (ol) + return ol->alive; + return false; } -bool input_overlay_key_pressed(int key) +bool input_overlay_key_pressed(input_overlay_t *ol, int key) { - input_overlay_t *ol = overlay_ptr; input_overlay_state_t *ol_state = ol ? &ol->overlay_state : NULL; if (!ol) return false; @@ -620,9 +608,6 @@ void input_poll_overlay(input_overlay_t *ol, float opacity) settings_t *settings = config_get_ptr(); input_overlay_state_t *ol_state = NULL; - if (!ol) - ol = overlay_ptr; - if (!input_overlay_is_alive(ol)) return; @@ -705,9 +690,9 @@ void input_poll_overlay(input_overlay_t *ol, float opacity) if (ol_state->analog[j]) continue; - if (input_overlay_key_pressed(bind_plus)) + if (input_overlay_key_pressed(ol, bind_plus)) ol_state->analog[j] += 0x7fff; - if (input_overlay_key_pressed(bind_minus)) + if (input_overlay_key_pressed(ol, bind_minus)) ol_state->analog[j] -= 0x7fff; } @@ -748,10 +733,9 @@ void input_poll_overlay(input_overlay_t *ol, float opacity) input_overlay_poll_clear(ol, opacity); } -void input_state_overlay(int16_t *ret, unsigned port, unsigned device, unsigned idx, +void input_state_overlay(input_overlay_t *ol, int16_t *ret, unsigned port, unsigned device, unsigned idx, unsigned id) { - input_overlay_t *ol = overlay_ptr; input_overlay_state_t *ol_state = ol ? &ol->overlay_state : NULL; if (!ol || port != 0) @@ -760,7 +744,7 @@ void input_state_overlay(int16_t *ret, unsigned port, unsigned device, unsigned switch (device) { case RETRO_DEVICE_JOYPAD: - if (input_overlay_key_pressed(id)) + if (input_overlay_key_pressed(ol, id)) *ret |= 1; break; case RETRO_DEVICE_KEYBOARD: diff --git a/input/input_overlay.h b/input/input_overlay.h index 03b63d0ca1..9f9033956e 100644 --- a/input/input_overlay.h +++ b/input/input_overlay.h @@ -94,6 +94,8 @@ enum overlay_image_transfer_status struct overlay { + unsigned id; + struct overlay_desc *descs; size_t size; size_t pos; @@ -189,7 +191,7 @@ typedef struct * * Frees overlay handle. **/ -void input_overlay_free(void); +void input_overlay_free(input_overlay_t *ol); void input_overlay_free_overlay(struct overlay *overlay); @@ -206,7 +208,7 @@ void input_overlay_init(void); * Sets a modulating factor for alpha channel. Default is 1.0. * The alpha factor is applied for all overlays. **/ -void input_overlay_set_alpha_mod(float mod); +void input_overlay_set_alpha_mod(input_overlay_t *ol, float mod); /** * input_overlay_set_scale_factor: @@ -222,7 +224,7 @@ void input_overlay_set_scale_factor(input_overlay_t *ol, float scale); * Switch to the next available overlay * screen. **/ -void input_overlay_next(float opacity); +void input_overlay_next(input_overlay_t *ol, float opacity); /* * input_poll_overlay: @@ -232,16 +234,19 @@ void input_overlay_next(float opacity); **/ void input_poll_overlay(input_overlay_t *ol, float opacity); -void input_state_overlay(int16_t *ret, - unsigned port, unsigned device, unsigned idx, +void input_state_overlay(input_overlay_t *ol, + int16_t *ret, unsigned port, unsigned device, unsigned idx, unsigned id); -bool input_overlay_key_pressed(int key); +bool input_overlay_key_pressed(input_overlay_t *ol, int key); bool input_overlay_is_alive(input_overlay_t *ol); void input_overlay_loaded(void *task_data, void *user_data, const char *err); +/* FIXME - temporary. Globals are bad */ +extern input_overlay_t *overlay_ptr; + RETRO_END_DECLS #endif diff --git a/input/input_remapping.c b/input/input_remapping.c index b6ba75bc4b..ad4aa9735f 100644 --- a/input/input_remapping.c +++ b/input/input_remapping.c @@ -82,18 +82,6 @@ bool input_remapping_load_file(void *data, const char *path) settings->input.remap_ids[i][RARCH_FIRST_CUSTOM_BIND + j] = key_remap; } - - snprintf(buf, sizeof(buf), "input_player%u_joypad_index", i + 1); - CONFIG_GET_INT_BASE(conf, settings, input.joypad_map[i], buf); - - snprintf(buf, sizeof(buf), "input_player%u_analog_dpad_mode", i + 1); - CONFIG_GET_INT_BASE(conf, settings, input.analog_dpad_mode[i], buf); - - if (!retroarch_override_setting_is_set(RARCH_OVERRIDE_SETTING_LIBRETRO_DEVICE, &i)) - { - snprintf(buf, sizeof(buf), "input_libretro_device_p%u", i + 1); - CONFIG_GET_INT_BASE(conf, settings, input.libretro_device[i], buf); - } } config_file_free(conf); @@ -165,12 +153,6 @@ bool input_remapping_save_file(const char *path) config_unset(conf,key_ident[j]); } } - - - snprintf(buf, sizeof(buf), "input_libretro_device_p%u", i + 1); - config_set_int(conf, buf, settings->input.libretro_device[i]); - snprintf(buf, sizeof(buf), "input_player%u_analog_dpad_mode", i + 1); - config_set_int(conf, buf, settings->input.analog_dpad_mode[i]); } ret = config_file_write(conf, remap_file); diff --git a/input/input_remote.c b/input/input_remote.c index 61a01ee3ca..5523e24dd3 100644 --- a/input/input_remote.c +++ b/input/input_remote.c @@ -40,7 +40,6 @@ #include "../configuration.h" #include "../msg_hash.h" -#include "../runloop.h" #include "../verbosity.h" #define DEFAULT_NETWORK_GAMEPAD_PORT 55400 diff --git a/intl/msg_hash_chs.c b/intl/msg_hash_chs.c index 319c720b43..b709742a9e 100644 --- a/intl/msg_hash_chs.c +++ b/intl/msg_hash_chs.c @@ -346,6 +346,16 @@ int menu_hash_get_help_chs_enum(enum msg_hash_enums msg, char *s, size_t len) "inside the menu and RetroArch won't \n" "shutdown."); break; + case MENU_ENUM_LABEL_CHECK_FOR_MISSING_FIRMWARE: + snprintf(s, len, + "Some cores might need \n" + "firmware or bios files. \n" + " \n" + "If this option is disabled, \n" + "it will try to load even if such \n" + "firmware is missing. \n" + "down. \n"); + break; case MENU_ENUM_LABEL_PARENT_DIRECTORY: snprintf(s, len, "回到上级目录。"); @@ -555,10 +565,6 @@ int menu_hash_get_help_chs_enum(enum msg_hash_enums msg, char *s, size_t len) "Amount of seconds to wait until proceeding \n" "to the next bind."); break; - case MENU_ENUM_LABEL_KEYBOARD_OVERLAY_PRESET: - snprintf(s, len, - "Path to onscreen keyboard overlay."); - break; case MENU_ENUM_LABEL_OVERLAY_SCALE: snprintf(s, len, "Overlay scale."); @@ -934,6 +940,11 @@ int menu_hash_get_help_chs_enum(enum msg_hash_enums msg, char *s, size_t len) "shaders." ); break; + case MENU_ENUM_LABEL_CONFIGURATION_SETTINGS: + snprintf(s, len, + "Determines how configuration files \n" + "are loaded and prioritized."); + break; case MENU_ENUM_LABEL_CONFIG_SAVE_ON_EXIT: snprintf(s, len, "Saves config to disk on exit.\n" @@ -956,9 +967,6 @@ int menu_hash_get_help_chs_enum(enum msg_hash_enums msg, char *s, size_t len) #endif ); break; - case MENU_ENUM_LABEL_CONFIRM_ON_EXIT: - snprintf(s, len, "你确定要退出吗?"); - break; case MENU_ENUM_LABEL_SHOW_HIDDEN_FILES: snprintf(s, len, "显示隐藏文件和文件夹。"); break; @@ -1576,6 +1584,10 @@ int menu_hash_get_help_chs_enum(enum msg_hash_enums msg, char *s, size_t len) snprintf(s, len, "Setting related to Netplay."); break; + case MENU_ENUM_LABEL_NETPLAY_LAN_SCAN_SETTINGS: + snprintf(s, len, + "Search for and connect to netplay hosts on the local network."); + break; case MENU_ENUM_LABEL_DYNAMIC_WALLPAPER: snprintf(s, len, "Dynamically load a new wallpaper \n" @@ -1852,1155 +1864,28 @@ int menu_hash_get_help_chs_enum(enum msg_hash_enums msg, char *s, size_t len) return 0; } -#ifdef HAVE_MENU -static const char *menu_hash_to_str_chs_label_enum(enum msg_hash_enums msg) +const char *msg_hash_to_str_chs(enum msg_hash_enums msg) { - if (msg <= MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_END && - msg >= MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_BEGIN) - { - static char hotkey_lbl[PATH_MAX_LENGTH] = {0}; - unsigned idx = msg - MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_BEGIN; - snprintf(hotkey_lbl, sizeof(hotkey_lbl), "input_hotkey_binds_%d", idx); - return hotkey_lbl; - } - switch (msg) { - case MENU_ENUM_LABEL_ACCOUNTS_CHEEVOS_USERNAME: - return "accounts_cheevos_username"; - case MENU_ENUM_LABEL_ACCOUNTS_LIST: - return "accounts_list"; - case MENU_ENUM_LABEL_ACCOUNTS_RETRO_ACHIEVEMENTS: - return "retro_achievements"; - case MENU_ENUM_LABEL_ACHIEVEMENT_LIST: - return "achievement_list"; - case MENU_ENUM_LABEL_ADD_CONTENT_LIST: - return "add_content"; - case MENU_ENUM_LABEL_ADD_TAB: - return "add_tab"; - case MENU_ENUM_LABEL_ARCHIVE_MODE: - return "archive_mode"; - case MENU_ENUM_LABEL_ASSETS_DIRECTORY: - return "assets_directory"; - case MENU_ENUM_LABEL_AUDIO_BLOCK_FRAMES: - return "audio_block_frames"; - case MENU_ENUM_LABEL_AUDIO_DEVICE: - return "audio_device"; - case MENU_ENUM_LABEL_AUDIO_DRIVER: - return "audio_driver"; - case MENU_ENUM_LABEL_AUDIO_DSP_PLUGIN: - return "audio_dsp_plugin"; - case MENU_ENUM_LABEL_AUDIO_ENABLE: - return "audio_enable"; - case MENU_ENUM_LABEL_AUDIO_FILTER_DIR: - return "audio_filter_dir"; - case MENU_ENUM_LABEL_AUDIO_LATENCY: - return "audio_latency"; - case MENU_ENUM_LABEL_AUDIO_MAX_TIMING_SKEW: - return "audio_max_timing_skew"; - case MENU_ENUM_LABEL_AUDIO_MUTE: - return "audio_mute_enable"; - case MENU_ENUM_LABEL_AUDIO_OUTPUT_RATE: - return "audio_output_rate"; - case MENU_ENUM_LABEL_AUDIO_RATE_CONTROL_DELTA: - return "audio_rate_control_delta"; - case MENU_ENUM_LABEL_AUDIO_RESAMPLER_DRIVER: - return "audio_resampler_driver"; - case MENU_ENUM_LABEL_AUDIO_SETTINGS: - return "audio_settings"; - case MENU_ENUM_LABEL_AUDIO_SYNC: - return "audio_sync"; - case MENU_ENUM_LABEL_AUDIO_VOLUME: - return "audio_volume"; - case MENU_ENUM_LABEL_AUTOSAVE_INTERVAL: - return "autosave_interval"; - case MENU_ENUM_LABEL_AUTO_OVERRIDES_ENABLE: - return "auto_overrides_enable"; - case MENU_ENUM_LABEL_AUTO_REMAPS_ENABLE: - return "auto_remaps_enable"; - case MENU_ENUM_LABEL_AUTO_SHADERS_ENABLE: - return "auto_shaders_enable"; - case MENU_ENUM_LABEL_BLOCK_SRAM_OVERWRITE: - return "block_sram_overwrite"; - case MENU_ENUM_LABEL_BLUETOOTH_ENABLE: - return "bluetooth_enable"; - case MENU_ENUM_LABEL_BUILDBOT_ASSETS_URL: - return "buildbot_assets_url"; - case MENU_ENUM_LABEL_CACHE_DIRECTORY: - return "cache_directory"; - case MENU_ENUM_LABEL_CAMERA_ALLOW: - return "camera_allow"; - case MENU_ENUM_LABEL_CAMERA_DRIVER: - return "camera_driver"; - case MENU_ENUM_LABEL_CB_CORE_CONTENT_DIRS_LIST: - return "cb_core_content_dirs_list"; - case MENU_ENUM_LABEL_CB_CORE_CONTENT_DOWNLOAD: - return "cb_core_content_download"; - case MENU_ENUM_LABEL_CB_CORE_CONTENT_LIST: - return "cb_core_content_list"; - case MENU_ENUM_LABEL_CB_CORE_THUMBNAILS_DOWNLOAD: - return "cb_core_thumbnails_download"; - case MENU_ENUM_LABEL_CB_CORE_UPDATER_DOWNLOAD: - return "cb_core_updater_download"; - case MENU_ENUM_LABEL_CB_CORE_UPDATER_LIST: - return "cb_core_updater_list"; - case MENU_ENUM_LABEL_CB_DOWNLOAD_URL: - return "cb_download_url"; - case MENU_ENUM_LABEL_CB_LAKKA_DOWNLOAD: - return "cb_lakka_download"; - case MENU_ENUM_LABEL_CB_LAKKA_LIST: - return "cb_lakka_list"; - case MENU_ENUM_LABEL_CB_MENU_THUMBNAIL: - return "cb_menu_thumbnail"; - case MENU_ENUM_LABEL_CB_MENU_WALLPAPER: - return "cb_menu_wallpaper"; - case MENU_ENUM_LABEL_CB_THUMBNAILS_UPDATER_DOWNLOAD: - return "cb_thumbnails_updater_download"; - case MENU_ENUM_LABEL_CB_THUMBNAILS_UPDATER_LIST: - return "cb_thumbnails_updater_list"; - case MENU_ENUM_LABEL_CB_UPDATE_ASSETS: - return "cb_update_assets"; - case MENU_ENUM_LABEL_CB_UPDATE_AUTOCONFIG_PROFILES: - return "cb_update_autoconfig_profiles"; - case MENU_ENUM_LABEL_CB_UPDATE_CHEATS: - return "cb_update_cheats"; - case MENU_ENUM_LABEL_CB_UPDATE_CORE_INFO_FILES: - return "cb_update_core_info_files"; - case MENU_ENUM_LABEL_CB_UPDATE_DATABASES: - return "cb_update_databases"; - case MENU_ENUM_LABEL_CB_UPDATE_OVERLAYS: - return "cb_update_overlays"; - case MENU_ENUM_LABEL_CB_UPDATE_SHADERS_CG: - return "cb_update_shaders_cg"; - case MENU_ENUM_LABEL_CB_UPDATE_SHADERS_GLSL: - return "cb_update_shaders_glsl"; - case MENU_ENUM_LABEL_CHEAT_APPLY_CHANGES: - return "cheat_apply_changes"; - case MENU_ENUM_LABEL_CHEAT_DATABASE_PATH: - return "cheat_database_path"; - case MENU_ENUM_LABEL_CHEAT_FILE_LOAD: - return "cheat_file_load"; - case MENU_ENUM_LABEL_CHEAT_FILE_SAVE_AS: - return "cheat_file_save_as"; - case MENU_ENUM_LABEL_CHEAT_NUM_PASSES: - return "cheat_num_passes"; - case MENU_ENUM_LABEL_CHEEVOS_DESCRIPTION: - return "cheevos_description"; - case MENU_ENUM_LABEL_CHEEVOS_ENABLE: - return "cheevos_enable"; - case MENU_ENUM_LABEL_CHEEVOS_HARDCORE_MODE_ENABLE: - return "cheevos_hardcore_mode_enable"; - case MENU_ENUM_LABEL_CHEEVOS_LOCKED_ACHIEVEMENTS: - return "cheevos_locked_achievements"; - case MENU_ENUM_LABEL_CHEEVOS_LOCKED_ENTRY: - return "cheevos_locked_entry"; - case MENU_ENUM_LABEL_CHEEVOS_PASSWORD: - return "cheevos_password"; - case MENU_ENUM_LABEL_CHEEVOS_TEST_UNOFFICIAL: - return "cheevos_test_unofficial"; - case MENU_ENUM_LABEL_CHEEVOS_UNLOCKED_ACHIEVEMENTS: - return "cheevos_unlocked_achievements"; - case MENU_ENUM_LABEL_CHEEVOS_UNLOCKED_ENTRY: - return "cheevos_unlocked_entry"; - case MENU_ENUM_LABEL_CHEEVOS_USERNAME: - return "cheevos_username"; - case MENU_ENUM_LABEL_CLOSE_CONTENT: - return "unload_core"; - case MENU_ENUM_LABEL_COLLECTION: - return "collection"; - case MENU_ENUM_LABEL_CONFIGURATIONS: - return "configurations"; - case MENU_ENUM_LABEL_CONFIGURATION_SETTINGS: - return "configuration_settings"; - case MENU_ENUM_LABEL_CONFIG_SAVE_ON_EXIT: - return "config_save_on_exit"; - case MENU_ENUM_LABEL_CONFIRM_ON_EXIT: - return "confirm_on_exit"; - case MENU_ENUM_LABEL_CONNECT_WIFI: - return "connect_wifi"; - case MENU_ENUM_LABEL_CONTENT_ACTIONS: - return "content_actions"; - case MENU_ENUM_LABEL_CONTENT_COLLECTION_LIST: - return "select_from_collection"; - case MENU_ENUM_LABEL_CONTENT_DATABASE_DIRECTORY: - return "content_database_path"; - case MENU_ENUM_LABEL_CONTENT_HISTORY_SIZE: - return "content_history_size"; - case MENU_ENUM_LABEL_CONTENT_SETTINGS: - return "quick_menu"; - case MENU_ENUM_LABEL_CORE_ASSETS_DIRECTORY: - return "core_assets_directory"; - case MENU_ENUM_LABEL_CORE_CHEAT_OPTIONS: - return "core_cheat_options"; - case MENU_ENUM_LABEL_CORE_COUNTERS: - return "core_counters"; - case MENU_ENUM_LABEL_CORE_ENABLE: - return "menu_core_enable"; - case MENU_ENUM_LABEL_CORE_INFORMATION: - return "core_information"; - case MENU_ENUM_LABEL_CORE_INFO_ENTRY: - return "core_info_entry"; - case MENU_ENUM_LABEL_CORE_INPUT_REMAPPING_OPTIONS: - return "core_input_remapping_options"; - case MENU_ENUM_LABEL_CORE_LIST: - return "load_core"; - case MENU_ENUM_LABEL_CORE_OPTIONS: - return "core_options"; - case MENU_ENUM_LABEL_CORE_OPTION_ENTRY: - return "core_option_entry"; - case MENU_ENUM_LABEL_CORE_SETTINGS: - return "core_settings"; - case MENU_ENUM_LABEL_CORE_SET_SUPPORTS_NO_CONTENT_ENABLE: - return "core_set_supports_no_content_enable"; - case MENU_ENUM_LABEL_CORE_SPECIFIC_CONFIG: - return "core_specific_config"; - case MENU_ENUM_LABEL_CORE_UPDATER_AUTO_EXTRACT_ARCHIVE: - return "core_updater_auto_extract_archive"; - case MENU_ENUM_LABEL_CORE_UPDATER_BUILDBOT_URL: - return "core_updater_buildbot_url"; - case MENU_ENUM_LABEL_CORE_UPDATER_LIST: - return "core_updater_list"; - case MENU_ENUM_LABEL_CPU_ARCHITECTURE: - return "system_information_cpu_architecture"; - case MENU_ENUM_LABEL_CPU_CORES: - return "system_information_cpu_cores"; - case MENU_ENUM_LABEL_CURSOR_DIRECTORY: - return "cursor_directory"; - case MENU_ENUM_LABEL_CURSOR_MANAGER_LIST: - return "cursor_manager_list"; - case MENU_ENUM_LABEL_CUSTOM_BIND: - return "custom_bind"; - case MENU_ENUM_LABEL_CUSTOM_BIND_ALL: - return "custom_bind_all"; - case MENU_ENUM_LABEL_CUSTOM_RATIO: - return "custom_ratio"; - case MENU_ENUM_LABEL_DATABASE_MANAGER_LIST: - return "database_manager_list"; - case MENU_ENUM_LABEL_DEFERRED_ACCOUNTS_CHEEVOS_LIST: - return "deferred_accounts_cheevos_list"; - case MENU_ENUM_LABEL_DEFERRED_ACCOUNTS_LIST: - return "deferred_accounts_list"; - case MENU_ENUM_LABEL_DEFERRED_ARCHIVE_ACTION: - return "deferred_archive_action"; - case MENU_ENUM_LABEL_DEFERRED_ARCHIVE_ACTION_DETECT_CORE: - return "deferred_archive_action_detect_core"; - case MENU_ENUM_LABEL_DEFERRED_ARCHIVE_OPEN: - return "deferred_archive_open"; - case MENU_ENUM_LABEL_DEFERRED_ARCHIVE_OPEN_DETECT_CORE: - return "deferred_archive_open_detect_core"; - case MENU_ENUM_LABEL_DEFERRED_AUDIO_SETTINGS_LIST: - return "deferred_audio_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_CONFIGURATION_SETTINGS_LIST: - return "deferred_configuration_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_CORE_CONTENT_DIRS_LIST: - return "deferred_core_content_dirs_list"; - case MENU_ENUM_LABEL_DEFERRED_CORE_CONTENT_DIRS_SUBDIR_LIST: - return "deferred_core_content_dirs_subdir_list"; - case MENU_ENUM_LABEL_DEFERRED_CORE_CONTENT_LIST: - return "deferred_core_content_list"; - case MENU_ENUM_LABEL_DEFERRED_CORE_LIST: - return "deferred_core_list"; - case MENU_ENUM_LABEL_DEFERRED_CORE_LIST_SET: - return "deferred_core_list_set"; - case MENU_ENUM_LABEL_DEFERRED_CORE_SETTINGS_LIST: - return "deferred_core_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_CORE_UPDATER_LIST: - return "core_updater"; - case MENU_ENUM_LABEL_DEFERRED_CURSOR_MANAGER_LIST: - return "deferred_cursor_manager_list"; - case MENU_ENUM_LABEL_DEFERRED_DATABASE_MANAGER_LIST: - return "deferred_database_manager_list"; - case MENU_ENUM_LABEL_DEFERRED_DIRECTORY_SETTINGS_LIST: - return "deferred_directory_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_DRIVER_SETTINGS_LIST: - return "deferred_driver_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_FRAME_THROTTLE_SETTINGS_LIST: - return "deferred_frame_throttle_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_INPUT_HOTKEY_BINDS_LIST: - return "deferred_input_hotkey_binds"; - case MENU_ENUM_LABEL_DEFERRED_INPUT_SETTINGS_LIST: - return "deferred_input_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_LAKKA_LIST: - return "deferred_lakka_list"; - case MENU_ENUM_LABEL_DEFERRED_LAKKA_SERVICES_LIST: - return "deferred_lakka_services_list"; - case MENU_ENUM_LABEL_DEFERRED_LOGGING_SETTINGS_LIST: - return "deferred_logging_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_MENU_FILE_BROWSER_SETTINGS_LIST: - return "deferred_menu_file_browser_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_MENU_SETTINGS_LIST: - return "deferred_menu_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_NETWORK_SETTINGS_LIST: - return "deferred_network_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_ONSCREEN_DISPLAY_SETTINGS_LIST: - return "deferred_onscreen_display_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_ONSCREEN_OVERLAY_SETTINGS_LIST: - return "deferred_onscreen_overlay_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_PLAYLIST_SETTINGS_LIST: - return "deferred_playlist_settings"; - case MENU_ENUM_LABEL_DEFERRED_PRIVACY_SETTINGS_LIST: - return "deferred_privacy_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_RDB_ENTRY_DETAIL: - return "deferred_rdb_entry_detail"; - case MENU_ENUM_LABEL_DEFERRED_RECORDING_SETTINGS_LIST: - return "deferred_recording_settings"; - case MENU_ENUM_LABEL_DEFERRED_RETRO_ACHIEVEMENTS_SETTINGS_LIST: - return "deferred_retro_achievements_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_REWIND_SETTINGS_LIST: - return "deferred_rewind_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_SAVING_SETTINGS_LIST: - return "deferred_saving_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_THUMBNAILS_UPDATER_LIST: - return "deferred_thumbnails_updater_list"; - case MENU_ENUM_LABEL_DEFERRED_UPDATER_SETTINGS_LIST: - return "deferred_updater_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_USER_BINDS_LIST: - return "deferred_user_binds_list"; - case MENU_ENUM_LABEL_DEFERRED_USER_INTERFACE_SETTINGS_LIST: - return "deferred_user_interface_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_USER_SETTINGS_LIST: - return "deferred_user_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_VIDEO_FILTER: - return "deferred_video_filter"; - case MENU_ENUM_LABEL_DEFERRED_VIDEO_SETTINGS_LIST: - return "deferred_video_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_WIFI_SETTINGS_LIST: - return "deferred_wifi_settings_list"; - case MENU_ENUM_LABEL_DELETE_ENTRY: - return "delete_entry"; - case MENU_ENUM_LABEL_DETECT_CORE_LIST: - return "detect_core_list"; - case MENU_ENUM_LABEL_DIRECTORY_SETTINGS: - return "directory_settings"; - case MENU_ENUM_LABEL_DISK_CYCLE_TRAY_STATUS: - return "disk_cycle_tray_status"; - case MENU_ENUM_LABEL_DISK_IMAGE_APPEND: - return "disk_image_append"; - case MENU_ENUM_LABEL_DISK_OPTIONS: - return "core_disk_options"; - case MENU_ENUM_LABEL_DOWNLOADED_FILE_DETECT_CORE_LIST: - return "downloaded_file_detect_core_list"; - case MENU_ENUM_LABEL_DOWNLOAD_CORE_CONTENT: - return "download_core_content"; - case MENU_ENUM_LABEL_DOWNLOAD_CORE_CONTENT_DIRS: - return "download_core_content_dirs"; - case MENU_ENUM_LABEL_DPI_OVERRIDE_ENABLE: - return "dpi_override_enable"; - case MENU_ENUM_LABEL_DPI_OVERRIDE_VALUE: - return "dpi_override_value"; - case MENU_ENUM_LABEL_DRIVER_SETTINGS: - return "driver_settings"; - case MENU_ENUM_LABEL_DUMMY_ON_CORE_SHUTDOWN: - return "dummy_on_core_shutdown"; - case MENU_ENUM_LABEL_DYNAMIC_WALLPAPER: - return "menu_dynamic_wallpaper_enable"; - case MENU_ENUM_LABEL_DYNAMIC_WALLPAPERS_DIRECTORY: - return "dynamic_wallpapers_directory"; - case MENU_ENUM_LABEL_ENTRY_HOVER_COLOR: - return "menu_entry_hover_color"; - case MENU_ENUM_LABEL_ENTRY_NORMAL_COLOR: - return "menu_entry_normal_color"; - case MENU_ENUM_LABEL_FASTFORWARD_RATIO: - return "fastforward_ratio"; - case MENU_ENUM_LABEL_FILE_BROWSER_CORE: - return "file_browser_core"; - case MENU_ENUM_LABEL_FILE_BROWSER_CORE_DETECTED: - return "file_browser_core_detected"; - case MENU_ENUM_LABEL_FILE_BROWSER_CORE_SELECT_FROM_COLLECTION: - return "file_browser_core_select_from_collection"; - case MENU_ENUM_LABEL_FILE_BROWSER_DIRECTORY: - return "file_browser_directory"; - case MENU_ENUM_LABEL_FILE_BROWSER_IMAGE: - return "file_browser_image"; - case MENU_ENUM_LABEL_FILE_BROWSER_IMAGE_OPEN_WITH_VIEWER: - return "file_browser_image_open_with_viewer"; - case MENU_ENUM_LABEL_FILE_BROWSER_MOVIE_OPEN: - return "file_browser_movie_open"; - case MENU_ENUM_LABEL_FILE_BROWSER_MUSIC_OPEN: - return "file_browser_music_open"; - case MENU_ENUM_LABEL_FILE_BROWSER_PLAIN_FILE: - return "file_browser_plain_file"; - case MENU_ENUM_LABEL_FILE_BROWSER_REMAP: - return "file_browser_remap"; - case MENU_ENUM_LABEL_FILE_BROWSER_SHADER: - return "file_browser_shader"; - case MENU_ENUM_LABEL_FILE_BROWSER_SHADER_PRESET: - return "file_browser_shader_preset"; - case MENU_ENUM_LABEL_FPS_SHOW: - return "fps_show"; - case MENU_ENUM_LABEL_FRAME_THROTTLE_ENABLE: - return "fastforward_ratio_throttle_enable"; - case MENU_ENUM_LABEL_FRAME_THROTTLE_SETTINGS: - return "frame_throttle_settings"; - case MENU_ENUM_LABEL_FRONTEND_COUNTERS: - return "frontend_counters"; - case MENU_ENUM_LABEL_GAME_SPECIFIC_OPTIONS: - return "game_specific_options"; - case MENU_ENUM_LABEL_GAME_SPECIFIC_OPTIONS_CREATE: - return "game_specific_options_create"; - case MENU_ENUM_LABEL_GAME_SPECIFIC_OPTIONS_IN_USE: - return "game_specific_options_in_use"; - case MENU_ENUM_LABEL_HELP: - return "help"; - case MENU_ENUM_LABEL_HELP_AUDIO_VIDEO_TROUBLESHOOTING: - return "help_audio_video_troubleshooting"; - case MENU_ENUM_LABEL_HELP_CHANGE_VIRTUAL_GAMEPAD: - return "help_change_virtual_gamepad"; - case MENU_ENUM_LABEL_HELP_CONTROLS: - return "help_controls"; - case MENU_ENUM_LABEL_HELP_LIST: - return "help_list"; - case MENU_ENUM_LABEL_HELP_LOADING_CONTENT: - return "help_loading_content"; - case MENU_ENUM_LABEL_HELP_SCANNING_CONTENT: - return "help_scanning_content"; - case MENU_ENUM_LABEL_HELP_WHAT_IS_A_CORE: - return "help_what_is_a_core"; - case MENU_ENUM_LABEL_HISTORY_LIST_ENABLE: - return "history_list_enable"; - case MENU_ENUM_LABEL_HISTORY_TAB: - return "history_tab"; - case MENU_ENUM_LABEL_HORIZONTAL_MENU: - return "horizontal_menu"; - case MENU_ENUM_LABEL_IMAGES_TAB: - return "images_tab"; - case MENU_ENUM_LABEL_INFORMATION: - return "information"; - case MENU_ENUM_LABEL_INFORMATION_LIST: - return "information_list"; - case MENU_ENUM_LABEL_INFO_SCREEN: - return "info_screen"; - case MENU_ENUM_LABEL_INPUT_ALL_USERS_CONTROL_MENU: - return "all_users_control_menu"; - case MENU_ENUM_LABEL_INPUT_AUTODETECT_ENABLE: - return "input_autodetect_enable"; - case MENU_ENUM_LABEL_INPUT_AXIS_THRESHOLD: - return "input_axis_threshold"; - case MENU_ENUM_LABEL_INPUT_BACK_AS_MENU_ENUM_TOGGLE_ENABLE: - return "back_as_menu_toggle_enable"; - case MENU_ENUM_LABEL_INPUT_BIND_MODE: - return "input_bind_mode"; - case MENU_ENUM_LABEL_INPUT_BIND_TIMEOUT: - return "input_bind_timeout"; - case MENU_ENUM_LABEL_INPUT_DESCRIPTOR_HIDE_UNBOUND: - return "input_descriptor_hide_unbound"; - case MENU_ENUM_LABEL_INPUT_DESCRIPTOR_LABEL_SHOW: - return "input_descriptor_label_show"; - case MENU_ENUM_LABEL_INPUT_DRIVER: - return "input_driver"; - case MENU_ENUM_LABEL_INPUT_DUTY_CYCLE: - return "input_duty_cycle"; - case MENU_ENUM_LABEL_INPUT_HOTKEY_BINDS: - return "input_hotkey_binds"; - case MENU_ENUM_LABEL_INPUT_HOTKEY_BINDS_BEGIN: - return "input_hotkey_binds_begin"; - case MENU_ENUM_LABEL_INPUT_ICADE_ENABLE: - return "input_icade_enable"; - case MENU_ENUM_LABEL_INPUT_KEYBOARD_GAMEPAD_MAPPING_TYPE: - return "keyboard_gamepad_mapping_type"; - case MENU_ENUM_LABEL_INPUT_LIBRETRO_DEVICE: - return "input_libretro_device_p%u"; - case MENU_ENUM_LABEL_INPUT_MAX_USERS: - return "input_max_users"; - case MENU_ENUM_LABEL_INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO: - return "input_menu_toggle_gamepad_combo"; - case MENU_ENUM_LABEL_INPUT_OSK_OVERLAY_ENABLE: - return "input_osk_overlay_enable"; - case MENU_ENUM_LABEL_INPUT_OVERLAY_ENABLE: - return "input_overlay_enable"; - case MENU_ENUM_LABEL_INPUT_OVERLAY_HIDE_IN_MENU: - return "overlay_hide_in_menu"; - case MENU_ENUM_LABEL_INPUT_PLAYER_ANALOG_DPAD_MODE: - return "input_player%u_analog_dpad_mode"; - case MENU_ENUM_LABEL_INPUT_POLL_TYPE_BEHAVIOR: - return "input_poll_type_behavior"; - case MENU_ENUM_LABEL_INPUT_PREFER_FRONT_TOUCH: - return "input_prefer_front_touch"; - case MENU_ENUM_LABEL_INPUT_REMAPPING_DIRECTORY: - return "input_remapping_directory"; - case MENU_ENUM_LABEL_INPUT_REMAP_BINDS_ENABLE: - return "input_remap_binds_enable"; - case MENU_ENUM_LABEL_INPUT_SETTINGS: - return "input_settings"; - case MENU_ENUM_LABEL_INPUT_SETTINGS_BEGIN: - return "input_settings_begin"; - case MENU_ENUM_LABEL_INPUT_SMALL_KEYBOARD_ENABLE: - return "input_small_keyboard_enable"; - case MENU_ENUM_LABEL_INPUT_TOUCH_ENABLE: - return "input_touch_enable"; - case MENU_ENUM_LABEL_INPUT_TURBO_PERIOD: - return "input_turbo_period"; - case MENU_ENUM_LABEL_INPUT_USER_10_BINDS: - return "10_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_11_BINDS: - return "11_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_12_BINDS: - return "12_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_13_BINDS: - return "13_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_14_BINDS: - return "14_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_15_BINDS: - return "15_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_16_BINDS: - return "16_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_1_BINDS: - return "1_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_2_BINDS: - return "2_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_3_BINDS: - return "3_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_4_BINDS: - return "4_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_5_BINDS: - return "5_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_6_BINDS: - return "6_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_7_BINDS: - return "7_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_8_BINDS: - return "8_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_9_BINDS: - return "9_input_binds_list"; - case MENU_ENUM_LABEL_JOYPAD_AUTOCONFIG_DIR: - return "joypad_autoconfig_dir"; - case MENU_ENUM_LABEL_JOYPAD_DRIVER: - return "input_joypad_driver"; - case MENU_ENUM_LABEL_KEYBOARD_OVERLAY_PRESET: - return "input_osk_overlay"; - case MENU_ENUM_LABEL_LAKKA_SERVICES: - return "lakka_services"; - case MENU_ENUM_LABEL_LIBRETRO_DIR_PATH: - return "libretro_dir_path"; - case MENU_ENUM_LABEL_LIBRETRO_INFO_PATH: - return "libretro_info_path"; - case MENU_ENUM_LABEL_LIBRETRO_LOG_LEVEL: - return "libretro_log_level"; - case MENU_ENUM_LABEL_LOAD_ARCHIVE: - return "load_archive"; - case MENU_ENUM_LABEL_LOAD_ARCHIVE_DETECT_CORE: - return "load_archive_detect_core"; - case MENU_ENUM_LABEL_LOAD_CONTENT: - return "load_content_default"; - case MENU_ENUM_LABEL_LOAD_CONTENT_HISTORY: - return "load_recent"; - case MENU_ENUM_LABEL_LOAD_CONTENT_LIST: - return "load_content"; - case MENU_ENUM_LABEL_LOAD_STATE: - return "loadstate"; - case MENU_ENUM_LABEL_LOCATION_ALLOW: - return "location_allow"; - case MENU_ENUM_LABEL_LOCATION_DRIVER: - return "location_driver"; - case MENU_ENUM_LABEL_LOGGING_SETTINGS: - return "logging_settings"; - case MENU_ENUM_LABEL_LOG_VERBOSITY: - return "log_verbosity"; - case MENU_ENUM_LABEL_MAIN_MENU: - return "main_menu"; - case MENU_ENUM_LABEL_MANAGEMENT: - return "database_settings"; - case MENU_ENUM_LABEL_MATERIALUI_MENU_COLOR_THEME: - return "materialui_menu_color_theme"; - case MENU_ENUM_LABEL_MATERIALUI_MENU_FOOTER_OPACITY: - return "materialui_menu_footer_opacity"; - case MENU_ENUM_LABEL_MATERIALUI_MENU_HEADER_OPACITY: - return "materialui_menu_header_opacity"; - case MENU_ENUM_LABEL_MENU_DRIVER: - return "menu_driver"; - case MENU_ENUM_LABEL_MENU_ENUM_THROTTLE_FRAMERATE: - return "menu_throttle_framerate"; - case MENU_ENUM_LABEL_MENU_FILE_BROWSER_SETTINGS: - return "menu_file_browser_settings"; - case MENU_ENUM_LABEL_MENU_LINEAR_FILTER: - return "menu_linear_filter"; - case MENU_ENUM_LABEL_MENU_SETTINGS: - return "menu_settings"; - case MENU_ENUM_LABEL_MENU_WALLPAPER: - return "menu_wallpaper"; - case MENU_ENUM_LABEL_MENU_WALLPAPER_OPACITY: - return "menu_wallpaper_opacity"; - case MENU_ENUM_LABEL_MOUSE_ENABLE: - return "menu_mouse_enable"; - case MENU_ENUM_LABEL_MUSIC_TAB: - return "music_tab"; - case MENU_ENUM_LABEL_NAVIGATION_BROWSER_FILTER_SUPPORTED_EXTENSIONS_ENABLE: - return "menu_navigation_browser_filter_supported_extensions_enable"; - case MENU_ENUM_LABEL_NAVIGATION_WRAPAROUND: - return "menu_navigation_wraparound_enable"; - case MENU_ENUM_LABEL_NETPLAY: - return "netplay"; - case MENU_ENUM_LABEL_NETPLAY_CHECK_FRAMES: - return "netplay_check_frames"; - case MENU_ENUM_LABEL_NETPLAY_CLIENT_SWAP_INPUT: - return "netplay_client_swap_input"; - case MENU_ENUM_LABEL_NETPLAY_DELAY_FRAMES: - return "netplay_delay_frames"; - case MENU_ENUM_LABEL_NETPLAY_DISCONNECT: - return "menu_netplay_disconnect"; - case MENU_ENUM_LABEL_NETPLAY_ENABLE: - return "netplay_enable"; - case MENU_ENUM_LABEL_NETPLAY_ENABLE_CLIENT: - return "menu_netplay_enable_client"; - case MENU_ENUM_LABEL_NETPLAY_ENABLE_HOST: - return "menu_netplay_enable_host"; - case MENU_ENUM_LABEL_NETPLAY_IP_ADDRESS: - return "netplay_ip_address"; - case MENU_ENUM_LABEL_NETPLAY_MODE: - return "netplay_mode"; - case MENU_ENUM_LABEL_NETPLAY_NICKNAME: - return "netplay_nickname"; - case MENU_ENUM_LABEL_NETPLAY_SETTINGS: - return "menu_netplay_settings"; - case MENU_ENUM_LABEL_NETPLAY_SPECTATOR_MODE_ENABLE: - return "netplay_spectator_mode_enable"; - case MENU_ENUM_LABEL_NETPLAY_TCP_UDP_PORT: - return "netplay_tcp_udp_port"; - case MENU_ENUM_LABEL_NETWORK_CMD_ENABLE: - return "network_cmd_enable"; - case MENU_ENUM_LABEL_NETWORK_CMD_PORT: - return "network_cmd_port"; - case MENU_ENUM_LABEL_NETWORK_INFORMATION: - return "network_information"; - case MENU_ENUM_LABEL_NETWORK_INFO_ENTRY: - return "network_info_entry"; - case MENU_ENUM_LABEL_NETWORK_REMOTE_ENABLE: - return "network_remote_enable"; - case MENU_ENUM_LABEL_NETWORK_REMOTE_PORT: - return "network_remote_base_port"; - case MENU_ENUM_LABEL_NETWORK_REMOTE_USER_1_ENABLE: - return "network_remote_user_1_enable"; - case MENU_ENUM_LABEL_NETWORK_REMOTE_USER_LAST_ENABLE: - return "network_remote_user_last_enable"; - case MENU_ENUM_LABEL_NETWORK_SETTINGS: - return "network_settings"; - case MENU_ENUM_LABEL_NO_ACHIEVEMENTS_TO_DISPLAY: - return "no_achievements_to_display"; - case MENU_ENUM_LABEL_NO_CORES_AVAILABLE: - return "no_cores_available"; - case MENU_ENUM_LABEL_NO_CORE_INFORMATION_AVAILABLE: - return "no_core_information_available"; - case MENU_ENUM_LABEL_NO_CORE_OPTIONS_AVAILABLE: - return "no_core_options_available"; - case MENU_ENUM_LABEL_NO_ENTRIES_TO_DISPLAY: - return "no_entries_to_display"; - case MENU_ENUM_LABEL_NO_HISTORY_AVAILABLE: - return "no_history"; - case MENU_ENUM_LABEL_NO_ITEMS: - return "no_items"; - case MENU_ENUM_LABEL_NO_PERFORMANCE_COUNTERS: - return "no_performance_counters"; - case MENU_ENUM_LABEL_NO_PLAYLISTS: - return "no_playlists"; - case MENU_ENUM_LABEL_NO_PLAYLIST_ENTRIES_AVAILABLE: - return "no_playlist_entries_available"; - case MENU_ENUM_LABEL_NO_SETTINGS_FOUND: - return "menu_label_no_settings_found"; - case MENU_ENUM_LABEL_NO_SHADER_PARAMETERS: - return "no_shader_parameters."; - case MENU_ENUM_LABEL_ONLINE_UPDATER: - return "online_updater"; - case MENU_ENUM_LABEL_ONSCREEN_DISPLAY_SETTINGS: - return "onscreen_display_settings"; - case MENU_ENUM_LABEL_ONSCREEN_OVERLAY_SETTINGS: - return "onscreen_overlay_settings"; - case MENU_ENUM_LABEL_OPEN_ARCHIVE: - return "open_archive"; - case MENU_ENUM_LABEL_OPEN_ARCHIVE_DETECT_CORE: - return "open_archive_detect_core"; - case MENU_ENUM_LABEL_OSK_OVERLAY_DIRECTORY: - return "osk_overlay_directory"; - case MENU_ENUM_LABEL_OVERLAY_AUTOLOAD_PREFERRED: - return "overlay_autoload_preferred"; - case MENU_ENUM_LABEL_OVERLAY_DIRECTORY: - return "overlay_directory"; - case MENU_ENUM_LABEL_OVERLAY_OPACITY: - return "input_overlay_opacity"; - case MENU_ENUM_LABEL_OVERLAY_PRESET: - return "input_overlay"; - case MENU_ENUM_LABEL_OVERLAY_SCALE: - return "input_overlay_scale"; - case MENU_ENUM_LABEL_PAL60_ENABLE: - return "pal60_enable"; - case MENU_ENUM_LABEL_PARENT_DIRECTORY: - return "parent_directory"; - case MENU_ENUM_LABEL_PAUSE_LIBRETRO: - return "menu_pause_libretro"; - case MENU_ENUM_LABEL_PAUSE_NONACTIVE: - return "pause_nonactive"; - case MENU_ENUM_LABEL_PERFCNT_ENABLE: - return "perfcnt_enable"; - case MENU_ENUM_LABEL_PLAYLISTS_TAB: - return "playlists_tab"; - case MENU_ENUM_LABEL_PLAYLIST_COLLECTION_ENTRY: - return "playlist_collection_entry"; - case MENU_ENUM_LABEL_PLAYLIST_DIRECTORY: - return "playlist_directory"; - case MENU_ENUM_LABEL_PLAYLIST_ENTRY: - return "playlist_entry"; - case MENU_ENUM_LABEL_PLAYLIST_SETTINGS: - return "playlist_settings"; - case MENU_ENUM_LABEL_PLAYLIST_SETTINGS_BEGIN: - return "playlist_settings_begin"; - case MENU_ENUM_LABEL_POINTER_ENABLE: - return "menu_pointer_enable"; - case MENU_ENUM_LABEL_PRIVACY_SETTINGS: - return "privacy_settings"; - case MENU_ENUM_LABEL_QUIT_RETROARCH: - return "quit_retroarch"; - case MENU_ENUM_LABEL_RDB_ENTRY: - return "rdb_entry"; - case MENU_ENUM_LABEL_RDB_ENTRY_ANALOG: - return "rdb_entry_analog"; - case MENU_ENUM_LABEL_RDB_ENTRY_BBFC_RATING: - return "rdb_entry_bbfc_rating"; - case MENU_ENUM_LABEL_RDB_ENTRY_CERO_RATING: - return "rdb_entry_cero_rating"; - case MENU_ENUM_LABEL_RDB_ENTRY_CRC32: - return "rdb_entry_crc32"; - case MENU_ENUM_LABEL_RDB_ENTRY_DESCRIPTION: - return "rdb_entry_description"; - case MENU_ENUM_LABEL_RDB_ENTRY_DEVELOPER: - return "rdb_entry_developer"; - case MENU_ENUM_LABEL_RDB_ENTRY_EDGE_MAGAZINE_ISSUE: - return "rdb_entry_edge_magazine_issue"; - case MENU_ENUM_LABEL_RDB_ENTRY_EDGE_MAGAZINE_RATING: - return "rdb_entry_edge_magazine_rating"; - case MENU_ENUM_LABEL_RDB_ENTRY_EDGE_MAGAZINE_REVIEW: - return "rdb_entry_edge_magazine_review"; - case MENU_ENUM_LABEL_RDB_ENTRY_ELSPA_RATING: - return "rdb_entry_elspa_rating"; - case MENU_ENUM_LABEL_RDB_ENTRY_ENHANCEMENT_HW: - return "rdb_entry_enhancement_hw"; - case MENU_ENUM_LABEL_RDB_ENTRY_ESRB_RATING: - return "rdb_entry_esrb_rating"; - case MENU_ENUM_LABEL_RDB_ENTRY_FAMITSU_MAGAZINE_RATING: - return "rdb_entry_famitsu_magazine_rating"; - case MENU_ENUM_LABEL_RDB_ENTRY_FRANCHISE: - return "rdb_entry_franchise"; - case MENU_ENUM_LABEL_RDB_ENTRY_GENRE: - return "rdb_entry_genre"; - case MENU_ENUM_LABEL_RDB_ENTRY_MAX_USERS: - return "rdb_entry_max_users"; - case MENU_ENUM_LABEL_RDB_ENTRY_MD5: - return "rdb_entry_md5"; - case MENU_ENUM_LABEL_RDB_ENTRY_NAME: - return "rdb_entry_name"; - case MENU_ENUM_LABEL_RDB_ENTRY_ORIGIN: - return "rdb_entry_origin"; - case MENU_ENUM_LABEL_RDB_ENTRY_PEGI_RATING: - return "rdb_entry_pegi_rating"; - case MENU_ENUM_LABEL_RDB_ENTRY_PUBLISHER: - return "rdb_entry_publisher"; - case MENU_ENUM_LABEL_RDB_ENTRY_RELEASE_MONTH: - return "rdb_entry_releasemonth"; - case MENU_ENUM_LABEL_RDB_ENTRY_RELEASE_YEAR: - return "rdb_entry_releaseyear"; - case MENU_ENUM_LABEL_RDB_ENTRY_SERIAL: - return "rdb_entry_serial"; - case MENU_ENUM_LABEL_RDB_ENTRY_SHA1: - return "rdb_entry_sha1"; - case MENU_ENUM_LABEL_RDB_ENTRY_START_CONTENT: - return "rdb_entry_start_content"; - case MENU_ENUM_LABEL_RDB_ENTRY_TGDB_RATING: - return "rdb_entry_tgdb_rating"; - case MENU_ENUM_LABEL_REBOOT: - return "reboot"; - case MENU_ENUM_LABEL_RECORDING_CONFIG_DIRECTORY: - return "recording_config_directory"; - case MENU_ENUM_LABEL_RECORDING_OUTPUT_DIRECTORY: - return "recording_output_directory"; - case MENU_ENUM_LABEL_RECORDING_SETTINGS: - return "recording_settings"; - case MENU_ENUM_LABEL_RECORD_CONFIG: - return "record_config"; - case MENU_ENUM_LABEL_RECORD_DRIVER: - return "record_driver"; - case MENU_ENUM_LABEL_RECORD_ENABLE: - return "record_enable"; - case MENU_ENUM_LABEL_RECORD_PATH: - return "record_path"; - case MENU_ENUM_LABEL_RECORD_USE_OUTPUT_DIRECTORY: - return "record_use_output_directory"; - case MENU_ENUM_LABEL_REMAP_FILE_LOAD: - return "remap_file_load"; - case MENU_ENUM_LABEL_REMAP_FILE_SAVE_CORE: - return "remap_file_save_core"; - case MENU_ENUM_LABEL_REMAP_FILE_SAVE_GAME: - return "remap_file_save_game"; - case MENU_ENUM_LABEL_RESTART_CONTENT: - return "restart_content"; - case MENU_ENUM_LABEL_RESTART_RETROARCH: - return "restart_retroarch"; - case MENU_ENUM_LABEL_RESUME_CONTENT: - return "resume_content"; - case MENU_ENUM_LABEL_RETRO_ACHIEVEMENTS_SETTINGS: - return "retro_achievements_settings"; - case MENU_ENUM_LABEL_REWIND_ENABLE: - return "rewind_enable"; - case MENU_ENUM_LABEL_REWIND_GRANULARITY: - return "rewind_granularity"; - case MENU_ENUM_LABEL_REWIND_SETTINGS: - return "rewind_settings"; - case MENU_ENUM_LABEL_RGUI_BROWSER_DIRECTORY: - return "rgui_browser_directory"; - case MENU_ENUM_LABEL_RGUI_CONFIG_DIRECTORY: - return "rgui_config_directory"; - case MENU_ENUM_LABEL_RGUI_SHOW_START_SCREEN: - return "rgui_show_start_screen"; - case MENU_ENUM_LABEL_RUN: - return "collection"; - case MENU_ENUM_LABEL_SAMBA_ENABLE: - return "samba_enable"; - case MENU_ENUM_LABEL_SAVEFILE_DIRECTORY: - return "savefile_directory"; - case MENU_ENUM_LABEL_SAVESTATE_AUTO_INDEX: - return "savestate_auto_index"; - case MENU_ENUM_LABEL_SAVESTATE_AUTO_LOAD: - return "savestate_auto_load"; - case MENU_ENUM_LABEL_SAVESTATE_AUTO_SAVE: - return "savestate_auto_save"; - case MENU_ENUM_LABEL_SAVESTATE_DIRECTORY: - return "savestate_directory"; - case MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG: - return "save_current_config"; - case MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_CORE: - return "save_current_config_override_core"; - case MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_GAME: - return "save_current_config_override_game"; - case MENU_ENUM_LABEL_SAVE_NEW_CONFIG: - return "save_new_config"; - case MENU_ENUM_LABEL_SAVE_STATE: - return "savestate"; - case MENU_ENUM_LABEL_SAVING_SETTINGS: - return "saving_settings"; - case MENU_ENUM_LABEL_SCAN_DIRECTORY: - return "scan_directory"; - case MENU_ENUM_LABEL_SCAN_FILE: - return "scan_file"; - case MENU_ENUM_LABEL_SCAN_THIS_DIRECTORY: - return "scan_this_directory"; - case MENU_ENUM_LABEL_SCREENSHOT_DIRECTORY: - return "screenshot_directory"; - case MENU_ENUM_LABEL_SCREEN_RESOLUTION: - return "screen_resolution"; - case MENU_ENUM_LABEL_SETTINGS: - return "settings"; - case MENU_ENUM_LABEL_SETTINGS_TAB: - return "settings_tab"; - case MENU_ENUM_LABEL_SHADER_APPLY_CHANGES: - return "shader_apply_changes"; - case MENU_ENUM_LABEL_SHADER_OPTIONS: - return "shader_options"; - case MENU_ENUM_LABEL_SHADER_PARAMETERS_ENTRY: - return "shader_parameters_entry"; - case MENU_ENUM_LABEL_SHOW_ADVANCED_SETTINGS: - return "menu_show_advanced_settings"; - case MENU_ENUM_LABEL_SHOW_HIDDEN_FILES: - return "show_hidden_files"; - case MENU_ENUM_LABEL_SHUTDOWN: - return "shutdown"; - case MENU_ENUM_LABEL_SLOWMOTION_RATIO: - return "slowmotion_ratio"; - case MENU_ENUM_LABEL_SORT_SAVEFILES_ENABLE: - return "sort_savefiles_enable"; - case MENU_ENUM_LABEL_SORT_SAVESTATES_ENABLE: - return "sort_savestates_enable"; - case MENU_ENUM_LABEL_SSH_ENABLE: - return "ssh_enable"; - case MENU_ENUM_LABEL_START_CORE: - return "start_core"; - case MENU_ENUM_LABEL_START_NET_RETROPAD: - return "menu_start_net_retropad"; - case MENU_ENUM_LABEL_START_VIDEO_PROCESSOR: - return "menu_start_video_processor"; - case MENU_ENUM_LABEL_STATE_SLOT: - return "state_slot"; - case MENU_ENUM_LABEL_STDIN_CMD_ENABLE: - return "stdin_commands"; - case MENU_ENUM_LABEL_SUSPEND_SCREENSAVER_ENABLE: - return "suspend_screensaver_enable"; - case MENU_ENUM_LABEL_SYSTEM_BGM_ENABLE: - return "system_bgm_enable"; - case MENU_ENUM_LABEL_SYSTEM_DIRECTORY: - return "system_directory"; - case MENU_ENUM_LABEL_SYSTEM_INFORMATION: - return "system_information"; - case MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY: - return "system_info_entry"; - case MENU_ENUM_LABEL_TAKE_SCREENSHOT: - return "take_screenshot"; - case MENU_ENUM_LABEL_THREADED_DATA_RUNLOOP_ENABLE: - return "threaded_data_runloop_enable"; - case MENU_ENUM_LABEL_THUMBNAILS: - return "thumbnails"; - case MENU_ENUM_LABEL_THUMBNAILS_DIRECTORY: - return "thumbnails_directory"; - case MENU_ENUM_LABEL_THUMBNAILS_UPDATER_LIST: - return "thumbnails_updater_list"; - case MENU_ENUM_LABEL_TIMEDATE_ENABLE: - return "menu_timedate_enable"; - case MENU_ENUM_LABEL_TITLE_COLOR: - return "menu_title_color"; - case MENU_ENUM_LABEL_UI_COMPANION_ENABLE: - return "ui_companion_enable"; - case MENU_ENUM_LABEL_UI_COMPANION_START_ON_BOOT: - return "ui_companion_start_on_boot"; - case MENU_ENUM_LABEL_UI_MENUBAR_ENABLE: - return "ui_menubar_enable"; - case MENU_ENUM_LABEL_UNDO_LOAD_STATE: - return "undoloadstate"; - case MENU_ENUM_LABEL_UNDO_SAVE_STATE: - return "undosavestate"; - case MENU_ENUM_LABEL_UPDATER_SETTINGS: - return "updater_settings"; - case MENU_ENUM_LABEL_UPDATE_ASSETS: - return "update_assets"; - case MENU_ENUM_LABEL_UPDATE_AUTOCONFIG_PROFILES: - return "update_autoconfig_profiles"; - case MENU_ENUM_LABEL_UPDATE_CG_SHADERS: - return "update_cg_shaders"; - case MENU_ENUM_LABEL_UPDATE_CHEATS: - return "update_cheats"; - case MENU_ENUM_LABEL_UPDATE_CORE_INFO_FILES: - return "update_core_info_files"; - case MENU_ENUM_LABEL_UPDATE_DATABASES: - return "update_databases"; - case MENU_ENUM_LABEL_UPDATE_GLSL_SHADERS: - return "update_glsl_shaders"; - case MENU_ENUM_LABEL_UPDATE_LAKKA: - return "update_lakka"; - case MENU_ENUM_LABEL_UPDATE_OVERLAYS: - return "update_overlays"; - case MENU_ENUM_LABEL_UPDATE_SLANG_SHADERS: - return "update_slang_shaders"; - case MENU_ENUM_LABEL_URL_ENTRY: - return "url_entry"; - case MENU_ENUM_LABEL_USER_INTERFACE_SETTINGS: - return "user_interface_settings"; - case MENU_ENUM_LABEL_USER_LANGUAGE: - return "user_language"; - case MENU_ENUM_LABEL_USER_SETTINGS: - return "user_settings"; - case MENU_ENUM_LABEL_USE_BUILTIN_IMAGE_VIEWER: - return "use_builtin_image_viewer"; - case MENU_ENUM_LABEL_USE_BUILTIN_PLAYER: - return "use_builtin_player"; - case MENU_ENUM_LABEL_USE_THIS_DIRECTORY: - return "use_this_directory"; - case MENU_ENUM_LABEL_VIDEO_ALLOW_ROTATE: - return "video_allow_rotate"; - case MENU_ENUM_LABEL_VIDEO_ASPECT_RATIO_AUTO: - return "video_aspect_ratio_auto"; - case MENU_ENUM_LABEL_VIDEO_ASPECT_RATIO_INDEX: - return "aspect_ratio_index"; - case MENU_ENUM_LABEL_VIDEO_BLACK_FRAME_INSERTION: - return "video_black_frame_insertion"; - case MENU_ENUM_LABEL_VIDEO_CROP_OVERSCAN: - return "video_crop_overscan"; - case MENU_ENUM_LABEL_VIDEO_DISABLE_COMPOSITION: - return "video_disable_composition"; - case MENU_ENUM_LABEL_VIDEO_DRIVER: - return "video_driver"; - case MENU_ENUM_LABEL_VIDEO_FILTER: - return "video_filter"; - case MENU_ENUM_LABEL_VIDEO_FILTER_DIR: - return "video_filter_dir"; - case MENU_ENUM_LABEL_VIDEO_FILTER_FLICKER: - return "video_filter_flicker"; - case MENU_ENUM_LABEL_VIDEO_FONT_ENABLE: - return "video_font_enable"; - case MENU_ENUM_LABEL_VIDEO_FONT_PATH: - return "video_font_path"; - case MENU_ENUM_LABEL_VIDEO_FONT_SIZE: - return "video_font_size"; - case MENU_ENUM_LABEL_VIDEO_FORCE_ASPECT: - return "video_force_aspect"; - case MENU_ENUM_LABEL_VIDEO_FORCE_SRGB_DISABLE: - return "video_force_srgb_disable"; - case MENU_ENUM_LABEL_VIDEO_FRAME_DELAY: - return "video_frame_delay"; - case MENU_ENUM_LABEL_VIDEO_FULLSCREEN: - return "video_fullscreen"; - case MENU_ENUM_LABEL_VIDEO_GAMMA: - return "video_gamma"; - case MENU_ENUM_LABEL_VIDEO_GPU_RECORD: - return "video_gpu_record"; - case MENU_ENUM_LABEL_VIDEO_GPU_SCREENSHOT: - return "video_gpu_screenshot"; - case MENU_ENUM_LABEL_VIDEO_HARD_SYNC: - return "video_hard_sync"; - case MENU_ENUM_LABEL_VIDEO_HARD_SYNC_FRAMES: - return "video_hard_sync_frames"; - case MENU_ENUM_LABEL_VIDEO_MAX_SWAPCHAIN_IMAGES: - return "video_max_swapchain_images"; - case MENU_ENUM_LABEL_VIDEO_MESSAGE_POS_X: - return "video_message_pos_x"; - case MENU_ENUM_LABEL_VIDEO_MESSAGE_POS_Y: - return "video_message_pos_y"; - case MENU_ENUM_LABEL_VIDEO_MONITOR_INDEX: - return "video_monitor_index"; - case MENU_ENUM_LABEL_VIDEO_POST_FILTER_RECORD: - return "video_post_filter_record"; - case MENU_ENUM_LABEL_VIDEO_REFRESH_RATE: - return "video_refresh_rate"; - case MENU_ENUM_LABEL_VIDEO_REFRESH_RATE_AUTO: - return "video_refresh_rate_auto"; - case MENU_ENUM_LABEL_VIDEO_ROTATION: - return "video_rotation"; - case MENU_ENUM_LABEL_VIDEO_SCALE: - return "video_scale"; - case MENU_ENUM_LABEL_VIDEO_SCALE_INTEGER: - return "video_scale_integer"; - case MENU_ENUM_LABEL_VIDEO_SETTINGS: - return "video_settings"; - case MENU_ENUM_LABEL_VIDEO_SHADER_DIR: - return "video_shader_dir"; - case MENU_ENUM_LABEL_VIDEO_SHADER_FILTER_PASS: - return "video_shader_filter_pass"; - case MENU_ENUM_LABEL_VIDEO_SHADER_NUM_PASSES: - return "video_shader_num_passes"; - case MENU_ENUM_LABEL_VIDEO_SHADER_PARAMETERS: - return "video_shader_parameters"; - case MENU_ENUM_LABEL_VIDEO_SHADER_PASS: - return "video_shader_pass"; - case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET: - return "video_shader_preset"; - case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_PARAMETERS: - return "video_shader_preset_parameters"; - case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_AS: - return "video_shader_preset_save_as"; - case MENU_ENUM_LABEL_VIDEO_SHADER_SCALE_PASS: - return "video_shader_scale_pass"; - case MENU_ENUM_LABEL_VIDEO_SHARED_CONTEXT: - return "video_shared_context"; - case MENU_ENUM_LABEL_VIDEO_SMOOTH: - return "video_smooth"; - case MENU_ENUM_LABEL_VIDEO_SOFT_FILTER: - return "soft_filter"; - case MENU_ENUM_LABEL_VIDEO_SWAP_INTERVAL: - return "video_swap_interval"; - case MENU_ENUM_LABEL_VIDEO_TAB: - return "video_tab"; - case MENU_ENUM_LABEL_VIDEO_THREADED: - return "video_threaded"; - case MENU_ENUM_LABEL_VIDEO_VFILTER: - return "video_vfilter"; - case MENU_ENUM_LABEL_VIDEO_VIEWPORT_CUSTOM_HEIGHT: - return "video_viewport_custom_height"; - case MENU_ENUM_LABEL_VIDEO_VIEWPORT_CUSTOM_WIDTH: - return "video_viewport_custom_width"; - case MENU_ENUM_LABEL_VIDEO_VIEWPORT_CUSTOM_X: - return "video_viewport_custom_x"; - case MENU_ENUM_LABEL_VIDEO_VIEWPORT_CUSTOM_Y: - return "video_viewport_custom_y"; - case MENU_ENUM_LABEL_VIDEO_VI_WIDTH: - return "video_vi_width"; - case MENU_ENUM_LABEL_VIDEO_VSYNC: - return "video_vsync"; - case MENU_ENUM_LABEL_VIDEO_WINDOWED_FULLSCREEN: - return "video_windowed_fullscreen"; - case MENU_ENUM_LABEL_WIFI_DRIVER: - return "wifi_driver"; - case MENU_ENUM_LABEL_WIFI_SETTINGS: - return "wifi_settings"; - case MENU_ENUM_LABEL_XMB_ALPHA_FACTOR: - return "xmb_alpha_factor"; - case MENU_ENUM_LABEL_XMB_FONT: - return "xmb_font"; - case MENU_ENUM_LABEL_XMB_MENU_COLOR_THEME: - return "xmb_menu_color_theme"; - case MENU_ENUM_LABEL_XMB_RIBBON_ENABLE: - return "xmb_ribbon_enable"; - case MENU_ENUM_LABEL_XMB_SCALE_FACTOR: - return "xmb_scale_factor"; - case MENU_ENUM_LABEL_XMB_SHADOWS_ENABLE: - return "xmb_shadows_enable"; - case MENU_ENUM_LABEL_XMB_SHOW_HISTORY: - return "xmb_show_history"; - case MENU_ENUM_LABEL_XMB_SHOW_IMAGES: - return "xmb_show_images"; - case MENU_ENUM_LABEL_XMB_SHOW_MUSIC: - return "xmb_show_music"; - case MENU_ENUM_LABEL_XMB_SHOW_SETTINGS: - return "xmb_show_settings"; - case MENU_ENUM_LABEL_XMB_SHOW_VIDEO: - return "xmb_show_video"; - case MENU_ENUM_LABEL_XMB_THEME: - return "xmb_theme"; + case MSG_SUCCEEDED: + return "已成功"; case MENU_ENUM_SUBLABEL_MENU_SETTINGS: return "调整菜单屏幕相关的设置。"; case MENU_ENUM_SUBLABEL_VIDEO_HARD_SYNC: return "强制同步CPU和GPU,以性能为代价换取低延迟。"; case MENU_ENUM_SUBLABEL_VIDEO_THREADED: return "以延迟和视频撕裂为代价换取高性能,当且仅当能达到全速模拟时使用。"; - case MSG_AUDIO_VOLUME: - return "Audio volume"; case MSG_AUTODETECT: return "自动检测"; - case MSG_AUTOLOADING_SAVESTATE_FROM: - return "Auto-loading savestate from"; - case MSG_BRINGING_UP_COMMAND_INTERFACE_ON_PORT: - return "bringing_up_command_interface_at_port"; - case MSG_CONNECTING_TO_NETPLAY_HOST: - return "Connecting to netplay host"; - case MSG_CONNECTING_TO_PORT: - return "Connecting to port"; - case MSG_CONNECTION_SLOT: - return "Connection slot"; - case MSG_CONNECT_DEVICE_FROM_A_VALID_PORT: - return "connect_device_from_a_valid_port"; - case MSG_DEVICE_CONFIGURED_IN_PORT: - return "configured in port"; - case MSG_DEVICE_DISCONNECTED_FROM_PORT: - return "Device disconnected from port"; case MSG_DEVICE_NOT_CONFIGURED: return "没有配置"; - case MSG_DISCONNECTING_DEVICE_FROM_PORT: - return "disconnecting_device_from_port"; - case MSG_DISCONNECT_DEVICE_FROM_A_VALID_PORT: - return "disconnect_device_from_a_valid_port"; - case MSG_FAILED: - return "已失败"; case MSG_FAILED_TO_SET_DISK: return "设置磁盘失败"; - case MSG_FAILED_TO_START_AUDIO_DRIVER: - return "failed_to_start_audio_driver"; + case MSG_FAILED: + return "已失败"; case MSG_FILE_ALREADY_EXISTS_SAVING_TO_BACKUP_BUFFER: return "文件已存在. Saving to backup buffer"; - case MSG_FOUND_LAST_STATE_SLOT: - return "found_last_state_slot"; - case MSG_GOT_CONNECTION_FROM: - return "Got connection from"; - case MSG_NETPLAY_USERS_HAS_FLIPPED: - return "Netplay users has flipped"; - case MSG_SETTING_DISK_IN_TRAY: - return "Setting disk in tray"; - case MSG_SUCCEEDED: - return "已成功"; - case MSG_UNKNOWN_NETPLAY_COMMAND_RECEIVED: - return "Unknown netplay command received"; - case MSG_WAITING_FOR_CLIENT: - return "Waiting for client ..."; - default: - break; - } - - return "null"; -} -#endif - -const char *msg_hash_to_str_chs(enum msg_hash_enums msg) -{ -#ifdef HAVE_MENU - const char *ret = menu_hash_to_str_chs_label_enum(msg); - - if (ret && !string_is_equal(ret, "null")) - return ret; -#endif - - switch (msg) - { case MENU_ENUM_LABEL_VALUE_ACCOUNTS_CHEEVOS_PASSWORD: return "密码"; case MENU_ENUM_LABEL_VALUE_ACCOUNTS_CHEEVOS_SETTINGS: @@ -3183,8 +2068,6 @@ const char *msg_hash_to_str_chs(enum msg_hash_enums msg) return "核心标签"; case MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_NAME: return "核心名称"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_NOTES: - return "核心说明"; case MENU_ENUM_LABEL_VALUE_CORE_INFO_FIRMWARE: return "固件"; case MENU_ENUM_LABEL_VALUE_CORE_INFO_LICENSES: @@ -3361,8 +2244,6 @@ const char *msg_hash_to_str_chs(enum msg_hash_enums msg) return "启用自动配置"; case MENU_ENUM_LABEL_VALUE_INPUT_AXIS_THRESHOLD: return "输入轴阈值"; - case MENU_ENUM_LABEL_VALUE_INPUT_BACK_AS_MENU_ENUM_TOGGLE_ENABLE: - return "将返回作为菜单切出键"; case MENU_ENUM_LABEL_VALUE_INPUT_BIND_ALL: return "绑定全部"; case MENU_ENUM_LABEL_VALUE_INPUT_BIND_DEFAULT_ALL: @@ -3527,8 +2408,6 @@ const char *msg_hash_to_str_chs(enum msg_hash_enums msg) return "输入设备自动配置目录"; case MENU_ENUM_LABEL_VALUE_JOYPAD_DRIVER: return "手柄驱动"; - case MENU_ENUM_LABEL_VALUE_KEYBOARD_OVERLAY_PRESET: - return "键盘覆层预设"; case MENU_ENUM_LABEL_VALUE_LAKKA_SERVICES: return "Lakka 服务"; case MENU_ENUM_LABEL_VALUE_LANG_CHINESE_SIMPLIFIED: @@ -4305,8 +3184,8 @@ const char *msg_hash_to_str_chs(enum msg_hash_enums msg) return "FlatUI"; case MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_MONOCHROME: return "Monochrome"; - case MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_MONOCHROME_JAGGED: - return "Monochrome Jagged"; + case MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_SYSTEMATIC: + return "Systematic"; case MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_PIXEL: return "Pixel"; case MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_RETROACTIVE: @@ -4363,6 +3242,10 @@ const char *msg_hash_to_str_chs(enum msg_hash_enums msg) return "启用或者禁止蓝牙。"; case MENU_ENUM_SUBLABEL_CONFIG_SAVE_ON_EXIT: return "程序将在退出时保存修改到配置文件。"; + case MENU_ENUM_SUBLABEL_CONFIGURATION_SETTINGS: + return "Change default settings for configuration files."; + case MENU_ENUM_SUBLABEL_CONFIGURATIONS_LIST: + return "Manage and create configuration files."; case MENU_ENUM_SUBLABEL_CPU_CORES: return "CPU拥有的核心总数。"; case MENU_ENUM_SUBLABEL_FPS_SHOW: @@ -4617,8 +3500,10 @@ const char *msg_hash_to_str_chs(enum msg_hash_enums msg) return "Preset Filename"; case MSG_INTERFACE: return "接口"; - case MSG_INTERNAL_MEMORY: + case MSG_INTERNAL_STORAGE: return "内部存储"; + case MSG_REMOVABLE_STORAGE: + return "Removable Storage"; case MSG_INVALID_NICKNAME_SIZE: return "Invalid nickname size."; case MSG_IN_BYTES: diff --git a/intl/msg_hash_de.c b/intl/msg_hash_de.c index f0cd0b9dc8..f733340ef1 100644 --- a/intl/msg_hash_de.c +++ b/intl/msg_hash_de.c @@ -413,6 +413,18 @@ int menu_hash_get_help_de_enum(enum msg_hash_enums msg, char *s, size_t len) "Positive X-Achse ist rechts. \n" "Positive Y-Achse ist unten."); break; + case MENU_ENUM_LABEL_VALUE_SAMBA_ENABLE: + snprintf(s, len, + "SAMBA aktivieren"); + break; + case MENU_ENUM_LABEL_VALUE_SHUTDOWN: + snprintf(s, len, + "Herunterfahren"); + break; + case MENU_ENUM_LABEL_VALUE_SSH_ENABLE: + snprintf(s, len, + "SSH aktivieren"); + break; case MSG_UNKNOWN: default: /* TODO/FIXME - translate */ @@ -428,858 +440,7 @@ const char *msg_hash_to_str_de(enum msg_hash_enums msg) { switch (msg) { - case MENU_ENUM_LABEL_SETTINGS: - return "Einstellungen"; - case MENU_ENUM_LABEL_SHUTDOWN: - return "Ausschalten"; - case MENU_ENUM_LABEL_VALUE_ACCOUNTS_CHEEVOS_PASSWORD: - return "Passwort"; - case MENU_ENUM_LABEL_VALUE_ACCOUNTS_CHEEVOS_USERNAME: - return "Benutzername"; - case MENU_ENUM_LABEL_VALUE_ACCOUNTS_LIST: - return "Konten"; - case MENU_ENUM_LABEL_VALUE_ADD_TAB: - return "Hinzufügen"; - case MENU_ENUM_LABEL_VALUE_ARCHIVE_MODE: - return "Verknüpfte Aktion bei Archivdateien"; - case MENU_ENUM_LABEL_VALUE_ASK_ARCHIVE: - return "Nachfragen"; - case MENU_ENUM_LABEL_VALUE_ASSETS_DIRECTORY: - return "Assets-Verzeichnis"; - case MENU_ENUM_LABEL_VALUE_AUDIO_BLOCK_FRAMES: - return "Warte auf Audio-Frames"; - case MENU_ENUM_LABEL_VALUE_AUDIO_DEVICE: - return "Soundkarte"; - case MENU_ENUM_LABEL_VALUE_AUDIO_DRIVER: - return "Audio-Treiber"; - case MENU_ENUM_LABEL_VALUE_AUDIO_DSP_PLUGIN: - return "Audio-DSP-Plugin"; - case MENU_ENUM_LABEL_VALUE_AUDIO_ENABLE: - return "Aktiviere Audio"; - case MENU_ENUM_LABEL_VALUE_AUDIO_FILTER_DIR: - return "Audio-Filter-Verzeichnis"; - case MENU_ENUM_LABEL_VALUE_AUDIO_LATENCY: - return "Audiolatenz (ms)"; - case MENU_ENUM_LABEL_VALUE_AUDIO_MAX_TIMING_SKEW: - return "Maximaler Audioversatz"; - case MENU_ENUM_LABEL_VALUE_AUDIO_MUTE: - return "Stumm"; - case MENU_ENUM_LABEL_VALUE_AUDIO_OUTPUT_RATE: - return "Audio-Frequenzrate (kHz)"; - case MENU_ENUM_LABEL_VALUE_AUDIO_RATE_CONTROL_DELTA: - return "Audio Rate Control Delta"; - case MENU_ENUM_LABEL_VALUE_AUDIO_RESAMPLER_DRIVER: - return "Audio-Resampler-Treiber"; - case MENU_ENUM_LABEL_VALUE_AUDIO_SETTINGS: - return "Audio-Einstellungen"; - case MENU_ENUM_LABEL_VALUE_AUDIO_SYNC: - return "Synchronisiere Audio"; - case MENU_ENUM_LABEL_VALUE_AUDIO_VOLUME: - return "Lautstärke (dB)"; - case MENU_ENUM_LABEL_VALUE_AUTOSAVE_INTERVAL: - return "Autospeicherungsintervall"; - case MENU_ENUM_LABEL_VALUE_AUTO_OVERRIDES_ENABLE: - return "Lade Override-Dateien automatisch"; - case MENU_ENUM_LABEL_VALUE_AUTO_REMAPS_ENABLE: - return "Lade Remap-Dateien automatisch"; - case MENU_ENUM_LABEL_VALUE_BLOCK_SRAM_OVERWRITE: - return "Blockiere SRAM-Überschreibung"; - case MENU_ENUM_LABEL_VALUE_BUILDBOT_ASSETS_URL: - return "Buildbot-Assets-URL"; - case MENU_ENUM_LABEL_VALUE_CACHE_DIRECTORY: /* FIXME/UPDATE */ - return "Entpack-Verzeichnis"; - case MENU_ENUM_LABEL_VALUE_CAMERA_ALLOW: - return "Erlaube Kamera-Zugriff"; - case MENU_ENUM_LABEL_VALUE_CAMERA_DRIVER: - return "Kamera-Treiber"; - case MENU_ENUM_LABEL_VALUE_CHEAT: - return "Cheat"; - case MENU_ENUM_LABEL_VALUE_CHEAT_APPLY_CHANGES: - return "Änderungen übernehmen"; - case MENU_ENUM_LABEL_VALUE_CHEAT_DATABASE_PATH: - return "Cheat-Datei-Verzeichnis"; - case MENU_ENUM_LABEL_VALUE_CHEAT_FILE_LOAD: - return "Lade Cheat-Datei"; - case MENU_ENUM_LABEL_VALUE_CHEAT_FILE_SAVE_AS: - return "Speichere Cheat-Datei unter..."; - case MENU_ENUM_LABEL_VALUE_CHEAT_NUM_PASSES: - return "Cheat-Durchgänge"; - case MENU_ENUM_LABEL_VALUE_CLOSE_CONTENT: - return "Schließe"; - case MENU_ENUM_LABEL_VALUE_COLLAPSE_SUBGROUPS_ENABLE: - return "Untergruppen einklappen"; - case MENU_ENUM_LABEL_VALUE_CONFIGURATIONS: - return "Lade Konfigurationsdatei"; /* FIXME/UPDATE */ - case MENU_ENUM_LABEL_VALUE_CONFIGURATION_SETTINGS: - return "Konfigurations-Einstellungen"; - case MENU_ENUM_LABEL_VALUE_CONFIG_SAVE_ON_EXIT: - return "Speichere Konfiguration beim Beenden"; - case MENU_ENUM_LABEL_VALUE_CONFIRM_ON_EXIT: - return "Zum Beenden Nachfragen"; - case MENU_ENUM_LABEL_VALUE_CONTENT_COLLECTION_LIST: - return "Lade Content (Sammlung)"; /* FIXME/TODO - rewrite */ - case MENU_ENUM_LABEL_VALUE_CONTENT_DATABASE_DIRECTORY: - return "Content-Datenbankverzeichnis"; - case MENU_ENUM_LABEL_VALUE_CONTENT_HISTORY_SIZE: - return "Länge der Verlaufsliste"; - case MENU_ENUM_LABEL_VALUE_CONTENT_SETTINGS: - return "Content-Einstellungen"; /* FIXME */ - case MENU_ENUM_LABEL_VALUE_CORE_ASSETS_DIRECTORY: - return "Core-Assets-Verzeichnis"; /* FIXME/UPDATE */ - case MENU_ENUM_LABEL_VALUE_CORE_CHEAT_OPTIONS: - return "Cheats"; - case MENU_ENUM_LABEL_VALUE_CORE_COUNTERS: - return "Core-Zähler"; - case MENU_ENUM_LABEL_VALUE_CORE_ENABLE: - return "Zeige Core-Namen"; - case MENU_ENUM_LABEL_VALUE_CORE_INFORMATION: - return "Core-Informationen"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_AUTHORS: - return "Autoren"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_CATEGORIES: - return "Kategorien"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_LABEL: - return "Core-Beschriftung"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_NAME: - return "Core-Name"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_NOTES: - return "Core-Hinweise"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_FIRMWARE: - return "Firmware"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_LICENSES: - return "Lizenz(en)"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_PERMISSIONS: - return "Berechtigungen"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_SUPPORTED_EXTENSIONS: - return "Unterstütze Erweiterungen"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_SYSTEM_MANUFACTURER: - return "System-Hersteller"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_SYSTEM_NAME: - return "System-Name"; - case MENU_ENUM_LABEL_VALUE_CORE_INPUT_REMAPPING_OPTIONS: /* UPDATE/FIXME */ - return "Core-Input-Optionen"; - case MENU_ENUM_LABEL_VALUE_CORE_LIST: - return "Lade Core"; - case MENU_ENUM_LABEL_VALUE_CORE_OPTIONS: - return "Optionen"; - case MENU_ENUM_LABEL_VALUE_CORE_SETTINGS: - return "Core-Einstellungen"; - case MENU_ENUM_LABEL_VALUE_CORE_SET_SUPPORTS_NO_CONTENT_ENABLE: /* TODO/FIXME */ - return "Cores nicht automatisch starten"; - case MENU_ENUM_LABEL_VALUE_CORE_SPECIFIC_CONFIG: - return "Core-Spezifische Konfiguration"; - case MENU_ENUM_LABEL_VALUE_CORE_UPDATER_AUTO_EXTRACT_ARCHIVE: - return "Heruntergeladene Archive automatisch entpacken"; - case MENU_ENUM_LABEL_VALUE_CORE_UPDATER_BUILDBOT_URL: - return "Buildbot-Cores-URL"; - case MENU_ENUM_LABEL_VALUE_CORE_UPDATER_LIST: - return "Core-Updater"; - case MENU_ENUM_LABEL_VALUE_CORE_UPDATER_SETTINGS: - return "Core-Updater-Einstellungen"; /* UPDATE/FIXME */ - case MENU_ENUM_LABEL_VALUE_CURSOR_DIRECTORY: - return "Cursor-Verzeichnis"; - case MENU_ENUM_LABEL_VALUE_CURSOR_MANAGER: - return "Cursormanager"; - case MENU_ENUM_LABEL_VALUE_CUSTOM_RATIO: - return "Benutzerdefiniertes Verhältnis"; - case MENU_ENUM_LABEL_VALUE_DATABASE_MANAGER: - return "Datenbankmanager"; - case MENU_ENUM_LABEL_VALUE_DELETE_ENTRY: - return "Von der Playlist löschen"; - case MENU_ENUM_LABEL_VALUE_DETECT_CORE_LIST: - return "Lade Content (Core erkennen)"; /* FIXME */ - case MENU_ENUM_LABEL_VALUE_DIRECTORY_CONTENT: - return ""; - case MENU_ENUM_LABEL_VALUE_DIRECTORY_DEFAULT: - return ""; - case MENU_ENUM_LABEL_VALUE_DIRECTORY_NONE: - return ""; - case MENU_ENUM_LABEL_VALUE_DIRECTORY_NOT_FOUND: - return "Ordner nicht gefunden."; - case MENU_ENUM_LABEL_VALUE_DIRECTORY_SETTINGS: - return "Verzeichnis-Einstellungen"; - case MENU_ENUM_LABEL_VALUE_DISABLED: - return "Deaktiviert"; - case MENU_ENUM_LABEL_VALUE_DISK_CYCLE_TRAY_STATUS: - return "Datenträgerstatus"; - case MENU_ENUM_LABEL_VALUE_DISK_IMAGE_APPEND: - return "Füge Datenträgerabbild hinzu"; - case MENU_ENUM_LABEL_VALUE_DISK_INDEX: - return "Datenträger-Nummer"; - case MENU_ENUM_LABEL_VALUE_DISK_OPTIONS: /* UPDATE/FIXME */ - return "Datenträger-Optionen"; - case MENU_ENUM_LABEL_VALUE_DONT_CARE: - return "Mir egal"; - case MENU_ENUM_LABEL_VALUE_DPI_OVERRIDE_ENABLE: - return "Aktiviere DPI-Override"; - case MENU_ENUM_LABEL_VALUE_DPI_OVERRIDE_VALUE: - return "DPI-Override"; - case MENU_ENUM_LABEL_VALUE_DRIVER_SETTINGS: - return "Treiber-Einstellungen"; - case MENU_ENUM_LABEL_VALUE_DUMMY_ON_CORE_SHUTDOWN: - return "Dummy bei Core-Abschaltung"; - case MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPER: - return "Dynamischer Hintergrund"; - case MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPERS_DIRECTORY: - return "Dynamische-Bildschirmhintergründe-Verzeichnis"; - case MENU_ENUM_LABEL_VALUE_ENTRY_HOVER_COLOR: - return "Hover-Farbe für Menü-Einträge"; - case MENU_ENUM_LABEL_VALUE_ENTRY_NORMAL_COLOR: - return "Normale Farbe für Menü-Einträge"; - case MENU_ENUM_LABEL_VALUE_FALSE: - return "False"; - case MENU_ENUM_LABEL_VALUE_FASTFORWARD_RATIO: - return "Maximale Ausführungsgeschwindigkeit"; - case MENU_ENUM_LABEL_VALUE_FPS_SHOW: - return "Zeige Framerate"; - case MENU_ENUM_LABEL_VALUE_FRAME_THROTTLE_ENABLE: - return "Begrenze maximale Ausführungsgeschwindigkeit"; - case MENU_ENUM_LABEL_VALUE_FRONTEND_COUNTERS: - return "Frontendzähler"; - case MENU_ENUM_LABEL_VALUE_HELP: - return "Hilfe"; - case MENU_ENUM_LABEL_VALUE_HISTORY_LIST_ENABLE: - return "Aktiviere Verlaufsliste"; - case MENU_ENUM_LABEL_VALUE_HISTORY_TAB: - return "Verlauf"; - case MENU_ENUM_LABEL_VALUE_HORIZONTAL_MENU: /* Don't change. Breaks everything. (Would be: "Horizontales Menu") */ - return "Horizontal Menu"; - case MENU_ENUM_LABEL_VALUE_IMAGES_TAB: - return "Bilder"; - case MENU_ENUM_LABEL_VALUE_INFORMATION_LIST: - return "Information"; - case MENU_ENUM_LABEL_VALUE_INPUT_ALL_USERS_CONTROL_MENU: - return "Jeder nutze kann Menü Steuern"; - case MENU_ENUM_LABEL_VALUE_INPUT_AUTODETECT_ENABLE: - return "Automatische Konfiguration aktivieren"; - case MENU_ENUM_LABEL_VALUE_INPUT_AXIS_THRESHOLD: - return "Schwellwert der Eingabe-Achsen"; - case MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_HIDE_UNBOUND: - return "Verstecke nicht zugewiesene Core-Eingabe-Beschriftungen"; - case MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_LABEL_SHOW: /* TODO/FIXME */ - return "Zeige Core-Eingabe-Beschriftungen"; - case MENU_ENUM_LABEL_VALUE_INPUT_DRIVER: - return "Eingabe-Treiber"; - case MENU_ENUM_LABEL_VALUE_INPUT_DUTY_CYCLE: - return "Auslastungsgrad"; - case MENU_ENUM_LABEL_VALUE_INPUT_MAX_USERS: - return "Maximale Benutzerzahl"; - case MENU_ENUM_LABEL_VALUE_INPUT_OSK_OVERLAY_ENABLE: - return "Zeige Tastatur-Overlay"; - case MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_ENABLE: - return "Aktiviere Overlay"; - case MENU_ENUM_LABEL_VALUE_INPUT_REMAPPING_DIRECTORY: /* UPDATE/FIXME */ - return "Eingabebelegungs-Verzeichnis"; - case MENU_ENUM_LABEL_VALUE_INPUT_REMAP_BINDS_ENABLE: - return "Bind-Remapping aktivieren"; - case MENU_ENUM_LABEL_VALUE_INPUT_SETTINGS: - return "Eingabe-Einstellungen"; - case MENU_ENUM_LABEL_VALUE_INPUT_TURBO_PERIOD: - return "Turbo-Dauer"; - case MENU_ENUM_LABEL_VALUE_INPUT_USER_BINDS: - return "Spieler %u Tastenbelegung"; - case MENU_ENUM_LABEL_VALUE_JOYPAD_AUTOCONFIG_DIR: - return "Eingabegerät-Autoconfig-Verzeichnis"; - case MENU_ENUM_LABEL_VALUE_JOYPAD_DRIVER: - return "Joypad-Treiber"; - case MENU_ENUM_LABEL_VALUE_KEYBOARD_OVERLAY_PRESET: - return "Tastatur-Overlay-Voreinstellung"; - case MENU_ENUM_LABEL_VALUE_LANG_CHINESE_SIMPLIFIED: - return "Chinesisch (Vereinfacht)"; - case MENU_ENUM_LABEL_VALUE_LANG_CHINESE_TRADITIONAL: - return "Chinesisch (Traditionell)"; - case MENU_ENUM_LABEL_VALUE_LANG_DUTCH: - return "Niederländisch"; - case MENU_ENUM_LABEL_VALUE_LANG_ENGLISH: - return "Englisch"; - case MENU_ENUM_LABEL_VALUE_LANG_ESPERANTO: - return "Esperanto"; - case MENU_ENUM_LABEL_VALUE_LANG_FRENCH: - return "Französisch"; - case MENU_ENUM_LABEL_VALUE_LANG_GERMAN: - return "Deutsch"; - case MENU_ENUM_LABEL_VALUE_LANG_ITALIAN: - return "Italienisch"; - case MENU_ENUM_LABEL_VALUE_LANG_JAPANESE: - return "Japanisch"; - case MENU_ENUM_LABEL_VALUE_LANG_KOREAN: - return "Koreanisch"; - case MENU_ENUM_LABEL_VALUE_LANG_PORTUGUESE: - return "Portugiesisch"; - case MENU_ENUM_LABEL_VALUE_LANG_RUSSIAN: - return "Russisch"; - case MENU_ENUM_LABEL_VALUE_LANG_SPANISH: - return "Spanisch"; - case MENU_ENUM_LABEL_VALUE_LEFT_ANALOG: - return "Linker Analogstick"; - case MENU_ENUM_LABEL_VALUE_LIBRETRO_DIR_PATH: - return "Core-Verzeichnis"; - case MENU_ENUM_LABEL_VALUE_LIBRETRO_INFO_PATH: - return "Core-Info-Verzeichnis"; - case MENU_ENUM_LABEL_VALUE_LIBRETRO_LOG_LEVEL: - return "Core-Logging-Stufe"; - case MENU_ENUM_LABEL_VALUE_LINEAR: - return "Linear"; - case MENU_ENUM_LABEL_VALUE_LOAD_ARCHIVE: - return "Lade Archiv"; - case MENU_ENUM_LABEL_VALUE_LOAD_CONTENT: - return "Lade Content"; /* FIXME */ - case MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_HISTORY: - return "Lade Content (Verlauf)"; /* FIXME/UPDATE */ - case MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_LIST: - return "Lade Content"; - case MENU_ENUM_LABEL_VALUE_LOAD_STATE: - return "Lade Savestate"; - case MENU_ENUM_LABEL_VALUE_LOCATION_ALLOW: - return "Erlaube Standort-Lokalisierung"; - case MENU_ENUM_LABEL_VALUE_LOCATION_DRIVER: - return "Standort-Treiber"; - case MENU_ENUM_LABEL_VALUE_LOGGING_SETTINGS: - return "Logging-Einstellungen"; - case MENU_ENUM_LABEL_VALUE_LOG_VERBOSITY: - return "Log-Ausführlichkeit"; - case MENU_ENUM_LABEL_VALUE_MAIN_MENU: - return "Hauptmenü"; - case MENU_ENUM_LABEL_VALUE_MANAGEMENT: - return "Datenbank-Einstellungen"; - case MENU_ENUM_LABEL_VALUE_MENU_DRIVER: - return "Menü-Treiber"; - case MENU_ENUM_LABEL_VALUE_MENU_FILE_BROWSER_SETTINGS: - return "Menü-Dateibrowser-Einstellungen"; - case MENU_ENUM_LABEL_VALUE_MENU_SETTINGS: - return "Menü-Einstellungen"; - case MENU_ENUM_LABEL_VALUE_MENU_WALLPAPER: - return "Menühintergrund"; - case MENU_ENUM_LABEL_VALUE_MISSING: - return "Fehlt"; - case MENU_ENUM_LABEL_VALUE_MOUSE_ENABLE: - return "Maus-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_MULTIMEDIA_SETTINGS: - return "Media-Player-Einstellungen"; /* UPDATE/FIXME */ - case MENU_ENUM_LABEL_VALUE_MUSIC_TAB: - return "Musik"; - case MENU_ENUM_LABEL_VALUE_NAVIGATION_BROWSER_FILTER_SUPPORTED_EXTENSIONS_ENABLE: - return "Bekannte Dateiendungen filtern"; /* TODO/FIXME - rewrite */ - case MENU_ENUM_LABEL_VALUE_NAVIGATION_WRAPAROUND: - return "Navigation umbrechen"; - case MENU_ENUM_LABEL_VALUE_NEAREST: - return "Nächster"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_CLIENT_SWAP_INPUT: /* TODO: Original string changed */ - return "Tausche Netplay-Eingabe"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_DELAY_FRAMES: - return "Verzögere Netplay-Frames"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE: - return "Aktiviere Netplay"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_IP_ADDRESS: /* TODO: Original string changed */ - return "IP-Addresse für Netplay"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_MODE: - return "Aktiviere Netplay-Client"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_NICKNAME: - return "Benutzername"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_SPECTATOR_MODE_ENABLE: - return "Aktiviere Netplay-Zuschauermodus"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_TCP_UDP_PORT: - return "TCP/UDP-Port für Netplay"; - case MENU_ENUM_LABEL_VALUE_NETWORK_CMD_ENABLE: - return "Netzwerk-Befehle"; - case MENU_ENUM_LABEL_VALUE_NETWORK_CMD_PORT: - return "Port für Netzwerk-Befehle"; - case MENU_ENUM_LABEL_VALUE_NETWORK_SETTINGS: - return "Netzwerk-Einstellungen"; - case MENU_ENUM_LABEL_VALUE_NO: - return "Nein"; - case MENU_ENUM_LABEL_VALUE_NONE: - return "Keins"; - case MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE: - return "Nicht verfügbar"; - case MENU_ENUM_LABEL_VALUE_NO_CORE: - return "Kein Core"; - case MENU_ENUM_LABEL_VALUE_NO_CORES_AVAILABLE: - return "Kein Core verfügbar."; - case MENU_ENUM_LABEL_VALUE_NO_CORE_INFORMATION_AVAILABLE: - return "Keine Core-Informationen verfügbar."; - case MENU_ENUM_LABEL_VALUE_NO_CORE_OPTIONS_AVAILABLE: - return "Keine Core-Optionen verfügbar."; - case MENU_ENUM_LABEL_VALUE_NO_INFORMATION_AVAILABLE: - return "Keine Informationen verfügbar."; - case MENU_ENUM_LABEL_VALUE_NO_ITEMS: - return "Keine Einträge."; - case MENU_ENUM_LABEL_VALUE_NO_PERFORMANCE_COUNTERS: - return "Keine Leistungszähler."; - case MENU_ENUM_LABEL_VALUE_NO_PLAYLIST_ENTRIES_AVAILABLE: - return "Keine Wiedergabelisten-Eintrage verfügbar."; - case MENU_ENUM_LABEL_VALUE_NO_SETTINGS_FOUND: - return "Keine Einstellungen gefunden."; - case MENU_ENUM_LABEL_VALUE_NO_SHADER_PARAMETERS: - return "Keine Shaderparameter"; - case MENU_ENUM_LABEL_VALUE_OFF: /* Don't change. Needed for XMB atm. (Would be: "AN") */ - return "OFF"; - case MENU_ENUM_LABEL_VALUE_ON: /* Don't change. Needed for XMB atm. (Would be: "AUS") */ - return "ON"; - case MENU_ENUM_LABEL_VALUE_ONLINE_UPDATER: - return "Online-Aktualisierungen"; - case MENU_ENUM_LABEL_VALUE_ONSCREEN_DISPLAY_SETTINGS: - return "OSD-Einstellungen"; - case MENU_ENUM_LABEL_VALUE_OPEN_ARCHIVE: - return "Öffne Archiv"; - case MENU_ENUM_LABEL_VALUE_OPTIONAL: - return "Optional"; - case MENU_ENUM_LABEL_VALUE_OSK_OVERLAY_DIRECTORY: - return "OSK-Overlay-Verzeichnis"; - case MENU_ENUM_LABEL_VALUE_OVERLAY_DIRECTORY: - return "Overlay-Verzeichnis"; - case MENU_ENUM_LABEL_VALUE_OVERLAY_OPACITY: - return "Overlay-Transparenz"; - case MENU_ENUM_LABEL_VALUE_OVERLAY_PRESET: - return "Overlay-Voreinstellung"; - case MENU_ENUM_LABEL_VALUE_OVERLAY_SCALE: - return "Overlay-Skalierung"; - case MENU_ENUM_LABEL_VALUE_OVERLAY_SETTINGS: - return "Overlay-Einstellungen"; - case MENU_ENUM_LABEL_VALUE_PAL60_ENABLE: - return "Verwende PAL60-Modus"; - case MENU_ENUM_LABEL_VALUE_PAUSE_LIBRETRO: - return "Pausiere, wenn das Menü aktiv ist"; - case MENU_ENUM_LABEL_VALUE_PAUSE_NONACTIVE: - return "Nicht im Hintergrund laufen"; - case MENU_ENUM_LABEL_VALUE_PERFCNT_ENABLE: - return "Leistungsindikatoren"; - case MENU_ENUM_LABEL_VALUE_PLAYLIST_DIRECTORY: - return "Wiedergabelisten-Verzeichnis"; - case MENU_ENUM_LABEL_VALUE_PLAYLIST_SETTINGS: - return "Wiedergabelisten-Einstellungen"; - case MENU_ENUM_LABEL_VALUE_POINTER_ENABLE: - return "Touch-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_PORT: - return "Port"; - case MENU_ENUM_LABEL_VALUE_PRESENT: - return "Vorhanden"; - case MENU_ENUM_LABEL_VALUE_PRIVACY_SETTINGS: - return "Privatsphäre-Einstellungen"; - case MENU_ENUM_LABEL_VALUE_QUIT_RETROARCH: - return "RetroArch beenden"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_CRC32: - return "CRC32"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_DESCRIPTION: - return "Beschreibung"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_DEVELOPER: - return "Entwickler"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_FRANCHISE: - return "Franchise"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_MD5: - return "MD5"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_NAME: - return "Name"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ORIGIN: - return "Herkunft"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_PUBLISHER: - return "Publisher"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_RELEASE_MONTH: - return "Veröffentlichungsmonat"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_RELEASE_YEAR: - return "Veröffentlichungsjahr"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_SHA1: - return "SHA1"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_START_CONTENT: - return "Starte Content"; - case MENU_ENUM_LABEL_VALUE_REBOOT: - return "Neustart"; - case MENU_ENUM_LABEL_VALUE_RECORDING_CONFIG_DIRECTORY: - return "Aufnahme-Konfigurationsverzeichnis"; - case MENU_ENUM_LABEL_VALUE_RECORDING_OUTPUT_DIRECTORY: - return "Aufnahme-Ausgabeverzeichnis"; - case MENU_ENUM_LABEL_VALUE_RECORDING_SETTINGS: - return "Aufnahme-Einstellungen"; - case MENU_ENUM_LABEL_VALUE_RECORD_CONFIG: - return "Aufnahme-Konfiguration"; - case MENU_ENUM_LABEL_VALUE_RECORD_DRIVER: - return "Aufnahme-Treiber"; - case MENU_ENUM_LABEL_VALUE_RECORD_ENABLE: - return "Aktiviere Aufnahmefunktion"; - case MENU_ENUM_LABEL_VALUE_RECORD_PATH: /* FIXME/UPDATE */ - return "Aufnahmepfad"; - case MENU_ENUM_LABEL_VALUE_RECORD_USE_OUTPUT_DIRECTORY: - return "Verwende Aufnahme-Ausgabeverzeichnis"; - case MENU_ENUM_LABEL_VALUE_REMAP_FILE_LOAD: - return "Lade Remap-Datei"; - case MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_CORE: - return "Speichere Core-Remap-Datei"; - case MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_GAME: - return "Speichere Spiel-Remap-Datei"; - case MENU_ENUM_LABEL_VALUE_REQUIRED: - return "Notwendig"; - case MENU_ENUM_LABEL_VALUE_RESTART_CONTENT: - return "Starte neu"; - case MENU_ENUM_LABEL_VALUE_RESTART_RETROARCH: - return "Starte RetroArch neu"; - case MENU_ENUM_LABEL_VALUE_RESUME: - return "Fortsetzen"; - case MENU_ENUM_LABEL_VALUE_RESUME_CONTENT: - return "Fortsetzen"; - case MENU_ENUM_LABEL_VALUE_RETROKEYBOARD: - return "RetroKeyboard"; - case MENU_ENUM_LABEL_VALUE_RETROPAD: - return "RetroPad"; - case MENU_ENUM_LABEL_VALUE_REWIND_ENABLE: - return "Zurückspulen (Rewind) aktivieren"; - case MENU_ENUM_LABEL_VALUE_REWIND_GRANULARITY: - return "Genauigkeit des Zurückspulens (Rewind)"; - case MENU_ENUM_LABEL_VALUE_REWIND_SETTINGS: - return "Zurückspul-Einstellungen"; - case MENU_ENUM_LABEL_VALUE_RGUI_BROWSER_DIRECTORY: - return "Browser-Directory"; - case MENU_ENUM_LABEL_VALUE_RGUI_CONFIG_DIRECTORY: - return "Konfigurations-Verzeichnis"; - case MENU_ENUM_LABEL_VALUE_RGUI_SHOW_START_SCREEN: - return "Zeige Startbildschirm"; - case MENU_ENUM_LABEL_VALUE_RIGHT_ANALOG: - return "Rechter Analogstick"; - case MENU_ENUM_LABEL_VALUE_RUN: - return "Start"; - case MENU_ENUM_LABEL_VALUE_SAVEFILE_DIRECTORY: - return "Spielstand-Verzeichnis"; - case MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_INDEX: - return "Automatische Indexierung von Save States"; - case MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_LOAD: - return "Automatisches Laden von Save States"; - case MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_SAVE: - return "Automatische Save States"; - case MENU_ENUM_LABEL_VALUE_SAVESTATE_DIRECTORY: - return "Savestate-Verzeichnis"; - case MENU_ENUM_LABEL_VALUE_SAVE_NEW_CONFIG: - return "Speichere neue Konfiguration"; - case MENU_ENUM_LABEL_VALUE_SAVE_STATE: - return "Speichere Savestate"; - case MENU_ENUM_LABEL_VALUE_SAVING_SETTINGS: - return "Spielstand-Einstellungen"; - case MENU_ENUM_LABEL_VALUE_SCAN_DIRECTORY: - return "Durchsuche Verzeichnis"; - case MENU_ENUM_LABEL_VALUE_SCAN_FILE: - return "Durchsuche Datei"; - case MENU_ENUM_LABEL_VALUE_SCAN_THIS_DIRECTORY: - return "<- Durchsuche ->"; - case MENU_ENUM_LABEL_VALUE_SCREENSHOT_DIRECTORY: - return "Bildschirmfoto-Verzeichnis"; - case MENU_ENUM_LABEL_VALUE_SCREEN_RESOLUTION: - return "Bildschirmauflösung"; - case MENU_ENUM_LABEL_VALUE_SECONDS: - return "Sekunden"; - case MENU_ENUM_LABEL_VALUE_SETTINGS: - return "Einstellungen"; - case MENU_ENUM_LABEL_VALUE_SHADER: - return "Shader"; - case MENU_ENUM_LABEL_VALUE_SHADER_APPLY_CHANGES: - return "Änderungen übernehmen"; - case MENU_ENUM_LABEL_VALUE_SHADER_OPTIONS: - return "Shaders"; - case MENU_ENUM_LABEL_VALUE_SHOW_ADVANCED_SETTINGS: - return "Zeige erweitere Einstellungen"; - case MENU_ENUM_LABEL_VALUE_SHOW_HIDDEN_FILES: - return "Zeige versteckte Ordner und Dateien"; - case MENU_ENUM_LABEL_VALUE_SLOWMOTION_RATIO: - return "Zeitlupen-Verhältnis"; - case MENU_ENUM_LABEL_VALUE_SORT_SAVEFILES_ENABLE: - return "Sortiere Speicherdaten per Ordner"; - case MENU_ENUM_LABEL_VALUE_SORT_SAVESTATES_ENABLE: - return "Sortiere Save States per Ordner"; - case MENU_ENUM_LABEL_VALUE_STATUS: - return "Status"; - case MENU_ENUM_LABEL_VALUE_STDIN_CMD_ENABLE: - return "stdin-Befehle"; - case MENU_ENUM_LABEL_VALUE_SUSPEND_SCREENSAVER_ENABLE: - return "Bildschirmschoner aussetzen"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_BGM_ENABLE: - return "Aktiviere System-BGM"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_DIRECTORY: - return "System/BIOS-Verzeichnis"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFORMATION: - return "Systeminformationen"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_7ZIP_SUPPORT: - return "7zip-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_ALSA_SUPPORT: - return "ALSA-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_BUILD_DATE: - return "Build-Datum"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_CG_SUPPORT: - return "Cg-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_COCOA_SUPPORT: - return "Cocoa-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_COMMAND_IFACE_SUPPORT: - return "Befehlsinterface-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_CORETEXT_SUPPORT: - return "CoreText-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_CPU_FEATURES: - return "CPU-Eigenschaften"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_DPI: - return "Bildschirm-DPI"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_MM_HEIGHT: - return "Bildschirmhöhe (mm)"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_MM_WIDTH: - return "Bildschirmbreite (mm)"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DSOUND_SUPPORT: - return "DirectSound-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DYLIB_SUPPORT: - return "Dynamic-Library-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_EGL_SUPPORT: - return "EGL-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FBO_SUPPORT: - return "Unterstützung für OpenGL/Direct3D Render-to-Texture (Multi-Pass Shader)"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FFMPEG_SUPPORT: - return "FFmpeg-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FREETYPE_SUPPORT: - return "FreeType-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FRONTEND_IDENTIFIER: - return "Frontend-Kennung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FRONTEND_NAME: - return "Frontend-Name"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FRONTEND_OS: - return "Frontend-Betriebssystem"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_GIT_VERSION: - return "Git-Version"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_GLSL_SUPPORT: - return "GLSL-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_HLSL_SUPPORT: - return "HLSL-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_JACK_SUPPORT: - return "JACK-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_KMS_SUPPORT: - return "KMS/EGL-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBRETRODB_SUPPORT: - return "LibretroDB-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT: - return "Libusb-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBXML2_SUPPORT: - return "Libxml2-XML-Parsing-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_NETPLAY_SUPPORT: - return "Netplay-Unterstützung (Peer-to-Peer)"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_NETWORK_COMMAND_IFACE_SUPPORT: - return "Netzwerk-Befehlsinterface-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENAL_SUPPORT: - return "OpenAL-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENGLES_SUPPORT: - return "OpenGL-ES-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENGL_SUPPORT: - return "OpenGL-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENSL_SUPPORT: - return "OpenSL-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENVG_SUPPORT: - return "OpenVG-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OSS_SUPPORT: - return "OSS-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OVERLAY_SUPPORT: - return "Overlay-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE: - return "Energiequelle"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_CHARGED: - return "Geladen"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_CHARGING: - return "Lädt"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_DISCHARGING: - return "Entlädt"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_NO_SOURCE: - return "Keine Quelle"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PULSEAUDIO_SUPPORT: - return "PulseAudio-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PYTHON_SUPPORT: - return "Python-Unterstützung (Script-Unterstützung in Shadern)"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RETRORATING_LEVEL: - return "RetroRating-Stufe"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_ROARAUDIO_SUPPORT: - return "RoarAudio-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RPNG_SUPPORT: - return "PNG-Unterstützung (RPNG)"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RSOUND_SUPPORT: - return "RSound-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL2_SUPPORT: - return "SDL2-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL_IMAGE_SUPPORT: - return "SDL-Image-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL_SUPPORT: - return "SDL1.2-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_THREADING_SUPPORT: - return "Threading-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_UDEV_SUPPORT: - return "Udev-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_V4L2_SUPPORT: - return "Video4Linux2-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_VIDEO_CONTEXT_DRIVER: - return "Video-Context-Treiber"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_WAYLAND_SUPPORT: - return "Wayland-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_X11_SUPPORT: - return "X11-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_XAUDIO2_SUPPORT: - return "XAudio2-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_XVIDEO_SUPPORT: - return "XVideo-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_ZLIB_SUPPORT: - return "Zlib-Unterstützung"; - case MENU_ENUM_LABEL_VALUE_TAKE_SCREENSHOT: - return "Bildschirmfoto"; - case MENU_ENUM_LABEL_VALUE_THREADED_DATA_RUNLOOP_ENABLE: - return "Threaded Data Runloop"; - case MENU_ENUM_LABEL_VALUE_TIMEDATE_ENABLE: - return "Zeige Uhrzeit / Datum"; - case MENU_ENUM_LABEL_VALUE_TITLE_COLOR: - return "Menü-Titel-Farbe"; - case MENU_ENUM_LABEL_VALUE_TRUE: - return "True"; - case MENU_ENUM_LABEL_VALUE_UI_COMPANION_START_ON_BOOT: - return "UI-Companion beim Hochfahren starten"; - case MENU_ENUM_LABEL_VALUE_UI_MENUBAR_ENABLE: - return "Menüleiste"; - case MENU_ENUM_LABEL_VALUE_UNABLE_TO_READ_COMPRESSED_FILE: - return "Komprimiertes Archiv kann nicht gelesen werden."; - case MENU_ENUM_LABEL_VALUE_UNKNOWN: - return "Unbekannt"; - case MENU_ENUM_LABEL_VALUE_UPDATE_ASSETS: - return "Aktualisiere Assets"; - case MENU_ENUM_LABEL_VALUE_UPDATE_AUTOCONFIG_PROFILES: - return "Aktualisiere Autoconfig-Profile"; - case MENU_ENUM_LABEL_VALUE_UPDATE_CG_SHADERS: - return "Aktualisiere CG-Shader"; - case MENU_ENUM_LABEL_VALUE_UPDATE_CHEATS: - return "Aktualisiere Cheats"; - case MENU_ENUM_LABEL_VALUE_UPDATE_DATABASES: - return "Aktualisiere Datenbanken"; - case MENU_ENUM_LABEL_VALUE_UPDATE_GLSL_SHADERS: - return "Aktualisiere GLSL-Shader"; - case MENU_ENUM_LABEL_VALUE_UPDATE_OVERLAYS: - return "Aktualisiere Overlays"; - case MENU_ENUM_LABEL_VALUE_USER: - return "Benutzer"; - case MENU_ENUM_LABEL_VALUE_USER_INTERFACE_SETTINGS: - return "Benutzeroberflächen-Einstellungen"; - case MENU_ENUM_LABEL_VALUE_USER_LANGUAGE: - return "Sprache"; - case MENU_ENUM_LABEL_VALUE_USER_SETTINGS: - return "Benutzer-Einstellungen"; - case MENU_ENUM_LABEL_VALUE_USE_BUILTIN_PLAYER: - return "Verwende integrierten Player"; /* FIXME/UPDATE */ - case MENU_ENUM_LABEL_VALUE_USE_THIS_DIRECTORY: - return ""; - case MENU_ENUM_LABEL_VALUE_VIDEO_ALLOW_ROTATE: - return "Erlaube Bildrotation"; - case MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_AUTO: - return "Automatisches Bildseitenverhältnis"; - case MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_INDEX: - return "Bildseitenverhältnis-Index"; - case MENU_ENUM_LABEL_VALUE_VIDEO_BLACK_FRAME_INSERTION: - return "Setze schwarze Frames ein"; - case MENU_ENUM_LABEL_VALUE_VIDEO_CROP_OVERSCAN: - return "Bildränder (Overscan) zuschneiden (Neustart erforderlich)"; - case MENU_ENUM_LABEL_VALUE_VIDEO_DISABLE_COMPOSITION: - return "Deaktiviere Desktop-Komposition"; - case MENU_ENUM_LABEL_VALUE_VIDEO_DRIVER: - return "Grafiktreiber"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FILTER: - return "Videofilter"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FILTER_DIR: - return "Grafikfilter-Verzeichnis"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FILTER_FLICKER: - return "Aktiviere Flacker-Filter"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FONT_ENABLE: - return "Zeige OSD-Nachrichten"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FONT_PATH: - return "Schriftart der OSD-Nachrichten"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FONT_SIZE: - return "Schriftgröße der OSD-Nachrichten"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FORCE_ASPECT: - return "Erzwinge Bildseitenverhältnis"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FORCE_SRGB_DISABLE: - return "Erzwinge Deaktivierung des sRGB FBO"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FRAME_DELAY: - return "Bildverzögerung"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FULLSCREEN: - return "Verwende Vollbildmodus"; - case MENU_ENUM_LABEL_VALUE_VIDEO_GAMMA: - return "Gamma"; - case MENU_ENUM_LABEL_VALUE_VIDEO_GPU_RECORD: - return "Aktiviere GPU-Aufnahmefunktion"; - case MENU_ENUM_LABEL_VALUE_VIDEO_GPU_SCREENSHOT: - return "Aktiviere GPU-Bildschirmfotos"; - case MENU_ENUM_LABEL_VALUE_VIDEO_HARD_SYNC: - return "Synchronisiere GPU und CPU"; - case MENU_ENUM_LABEL_VALUE_VIDEO_HARD_SYNC_FRAMES: - return "Synchronisiere Frames fest mit GPU"; - case MENU_ENUM_LABEL_VALUE_VIDEO_MESSAGE_POS_X: - return "X-Position der OSD-Nachrichten"; - case MENU_ENUM_LABEL_VALUE_VIDEO_MESSAGE_POS_Y: - return "Y-Position der OSD-Nachrichten"; - case MENU_ENUM_LABEL_VALUE_VIDEO_MONITOR_INDEX: - return "Monitor-Index"; - case MENU_ENUM_LABEL_VALUE_VIDEO_POST_FILTER_RECORD: - return "Aktiviere Aufnahme von Post-Filtern"; - case MENU_ENUM_LABEL_VALUE_VIDEO_REFRESH_RATE: - return "Bildwiederholrate"; - case MENU_ENUM_LABEL_VALUE_VIDEO_REFRESH_RATE_AUTO: - return "Geschätzte Bildwiederholrate"; - case MENU_ENUM_LABEL_VALUE_VIDEO_ROTATION: - return "Rotation"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SCALE: - return "Fenterskalierung"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SCALE_INTEGER: - return "Ganzzahlige Bildskalierung"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SETTINGS: - return "Video-Einstellungen"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_DIR: - return "Grafikshader-Verzeichnis"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_NUM_PASSES: - return "Shader-Durchgänge"; /* FIXME */ - case MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PARAMETERS: - return "Momentane Shaderparameter"; /* FIXME/UPDATE */ - case MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET: - return "Lade Shader-Voreinstellung"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_PARAMETERS: - return "Menü Shaderparameter (Menü)"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_AS: - return "Speichere Shader-Voreinstellung unter..."; - case MENU_ENUM_LABEL_VALUE_VIDEO_SHARED_CONTEXT: - return "HW-Shared-Context aktivieren"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SMOOTH: - return "Bilineare Filterung (HW)"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SOFT_FILTER: - return "Aktiviere Soft-Filter"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SWAP_INTERVAL: - return "VSync-Intervall"; - case MENU_ENUM_LABEL_VALUE_VIDEO_TAB: - return "Videos"; - case MENU_ENUM_LABEL_VALUE_VIDEO_THREADED: - return "Threaded Video"; - case MENU_ENUM_LABEL_VALUE_VIDEO_VFILTER: - return "Bild entflackern"; - case MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_HEIGHT: - return "Bildchirmauflösung Höhe"; - case MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_WIDTH: - return "Bildchirmauflösung Breite"; - case MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_X: - return "Bildchirmauflösung X"; - case MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_Y: - return "Bildchirmauflösung Y"; - case MENU_ENUM_LABEL_VALUE_VIDEO_VI_WIDTH: - return "Kalibriere VI-Bildbreite"; - case MENU_ENUM_LABEL_VALUE_VIDEO_VSYNC: - return "Vertikale Synchronisation (VSync)"; - case MENU_ENUM_LABEL_VALUE_VIDEO_WINDOWED_FULLSCREEN: - return "Unechter Vollbild-Modus (Windowed Fullscreen)"; - case MENU_ENUM_LABEL_VALUE_WIFI_DRIVER: - return "Wlan-Treiber"; - case MENU_ENUM_LABEL_VALUE_WIFI_SETTINGS: - return "Wlan"; - case MENU_ENUM_LABEL_VALUE_XMB_SHADOWS_ENABLE: - return "Icon Schatten"; - case MENU_ENUM_LABEL_VALUE_XMB_SHOW_HISTORY: - return "Zeige Verlauf"; - case MENU_ENUM_LABEL_VALUE_XMB_SHOW_IMAGES: - return "Zeige Bilder"; - case MENU_ENUM_LABEL_VALUE_XMB_SHOW_MUSIC: - return "Zeige Musik"; - case MENU_ENUM_LABEL_VALUE_XMB_SHOW_SETTINGS: - return "Zeige Einstellungen"; - case MENU_ENUM_LABEL_VALUE_XMB_SHOW_VIDEO: - return "Zeige Videos"; - case MENU_ENUM_LABEL_VALUE_YES: - return "Ja"; + #include "msg_hash_de.h" default: break; } diff --git a/intl/msg_hash_de.h b/intl/msg_hash_de.h new file mode 100644 index 0000000000..3eb88bd851 --- /dev/null +++ b/intl/msg_hash_de.h @@ -0,0 +1,888 @@ +MSG_HASH(MENU_ENUM_LABEL_VALUE_ACCOUNTS_CHEEVOS_PASSWORD, + "Passwort") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ACCOUNTS_CHEEVOS_USERNAME, + "Benutzername") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ACCOUNTS_LIST, + "Konten") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ADD_TAB, + "Hinzufügen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ARCHIVE_MODE, + "Verknüpfte Aktion bei Archivdateien") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ASK_ARCHIVE, + "Nachfragen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ASSETS_DIRECTORY, + "Assets-Verzeichnis") +MSG_HASH(MENU_ENUM_LABEL_VALUE_AUDIO_BLOCK_FRAMES, + "Warte auf Audio-Frames") +MSG_HASH(MENU_ENUM_LABEL_VALUE_AUDIO_DEVICE, + "Soundkarte") +MSG_HASH(MENU_ENUM_LABEL_VALUE_AUDIO_DRIVER, + "Audio-Treiber") +MSG_HASH(MENU_ENUM_LABEL_VALUE_AUDIO_DSP_PLUGIN, + "Audio-DSP-Plugin") +MSG_HASH(MENU_ENUM_LABEL_VALUE_AUDIO_ENABLE, + "Aktiviere Audio") +MSG_HASH(MENU_ENUM_LABEL_VALUE_AUDIO_FILTER_DIR, + "Audio-Filter-Verzeichnis") +MSG_HASH(MENU_ENUM_LABEL_VALUE_AUDIO_LATENCY, + "Audiolatenz (ms)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_AUDIO_MAX_TIMING_SKEW, + "Maximaler Audioversatz") +MSG_HASH(MENU_ENUM_LABEL_VALUE_AUDIO_MUTE, + "Stumm") +MSG_HASH(MENU_ENUM_LABEL_VALUE_AUDIO_OUTPUT_RATE, + "Audio-Frequenzrate (kHz)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_AUDIO_RATE_CONTROL_DELTA, + "Audio Rate Control Delta") +MSG_HASH(MENU_ENUM_LABEL_VALUE_AUDIO_RESAMPLER_DRIVER, + "Audio-Resampler-Treiber") +MSG_HASH(MENU_ENUM_LABEL_VALUE_AUDIO_SETTINGS, + "Audio-Einstellungen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_AUDIO_SYNC, + "Synchronisiere Audio") +MSG_HASH(MENU_ENUM_LABEL_VALUE_AUDIO_VOLUME, + "Lautstärke (dB)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_AUTOSAVE_INTERVAL, + "Autospeicherungsintervall") +MSG_HASH(MENU_ENUM_LABEL_VALUE_AUTO_OVERRIDES_ENABLE, + "Lade Override-Dateien automatisch") +MSG_HASH(MENU_ENUM_LABEL_VALUE_AUTO_REMAPS_ENABLE, + "Lade Remap-Dateien automatisch") +MSG_HASH(MENU_ENUM_LABEL_VALUE_BLOCK_SRAM_OVERWRITE, + "Blockiere SRAM-Überschreibung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_BUILDBOT_ASSETS_URL, + "Buildbot-Assets-URL") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CACHE_DIRECTORY, /* FIXME/UPDATE */ + "Entpack-Verzeichnis") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CAMERA_ALLOW, + "Erlaube Kamera-Zugriff") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CAMERA_DRIVER, + "Kamera-Treiber") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CHEAT, + "Cheat") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CHEAT_APPLY_CHANGES, + "Änderungen übernehmen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CHEAT_DATABASE_PATH, + "Cheat-Datei-Verzeichnis") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CHEAT_FILE_LOAD, + "Lade Cheat-Datei") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CHEAT_FILE_SAVE_AS, + "Speichere Cheat-Datei unter...") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CHEAT_NUM_PASSES, + "Cheat-Durchgänge") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CLOSE_CONTENT, + "Schließe") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CONFIGURATIONS, + "Lade Konfigurationsdatei") /* FIXME/UPDATE */ +MSG_HASH(MENU_ENUM_LABEL_VALUE_CONFIGURATION_SETTINGS, + "Konfigurations-Einstellungen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CONFIG_SAVE_ON_EXIT, + "Speichere Konfiguration beim Beenden") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CONTENT_COLLECTION_LIST, + "Lade Content (Sammlung)") /* FIXME/TODO - rewrite */ +MSG_HASH(MENU_ENUM_LABEL_VALUE_CONTENT_DATABASE_DIRECTORY, + "Content-Datenbankverzeichnis") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CONTENT_HISTORY_SIZE, + "Länge der Verlaufsliste") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CONTENT_SETTINGS, + "Content-Einstellungen") /* FIXME */ +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_ASSETS_DIRECTORY, + "Core-Assets-Verzeichnis") /* FIXME/UPDATE */ +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_CHEAT_OPTIONS, + "Cheats") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_COUNTERS, + "Core-Zähler") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_ENABLE, + "Zeige Core-Namen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFORMATION, + "Core-Informationen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_AUTHORS, + "Autoren") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_CATEGORIES, + "Kategorien") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_LABEL, + "Core-Beschriftung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_NAME, + "Core-Name") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_FIRMWARE, + "Firmware(s)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_LICENSES, + "Lizenz(en)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_PERMISSIONS, + "Berechtigungen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_SUPPORTED_EXTENSIONS, + "Unterstütze Erweiterungen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_SYSTEM_MANUFACTURER, + "System-Hersteller") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_SYSTEM_NAME, + "System-Name") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INPUT_REMAPPING_OPTIONS, /* UPDATE/FIXME */ + "Core-Input-Optionen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_LIST, + "Lade Core") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_OPTIONS, + "Optionen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_SETTINGS, + "Core-Einstellungen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_SET_SUPPORTS_NO_CONTENT_ENABLE, /* TODO/FIXME */ + "Cores nicht automatisch starten") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_SPECIFIC_CONFIG, + "Core-Spezifische Konfiguration") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_UPDATER_AUTO_EXTRACT_ARCHIVE, + "Heruntergeladene Archive automatisch entpacken") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_UPDATER_BUILDBOT_URL, + "Buildbot-Cores-URL") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_UPDATER_LIST, + "Core-Updater") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_UPDATER_SETTINGS, + "Core-Updater-Einstellungen") /* UPDATE/FIXME */ +MSG_HASH(MENU_ENUM_LABEL_VALUE_CURSOR_DIRECTORY, + "Cursor-Verzeichnis") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CURSOR_MANAGER, + "Cursormanager") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CUSTOM_RATIO, + "Benutzerdefiniertes Verhältnis") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_MANAGER, + "Datenbankmanager") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DELETE_ENTRY, + "Von der Playlist löschen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DETECT_CORE_LIST, + "Lade Content (Core erkennen)") /* FIXME */ +MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_CONTENT, + "") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_DEFAULT, + "") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_NONE, + "") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_NOT_FOUND, + "Ordner nicht gefunden.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_SETTINGS, + "Verzeichnis-Einstellungen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DISABLED, + "Deaktiviert") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DISK_CYCLE_TRAY_STATUS, + "Datenträgerstatus") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DISK_IMAGE_APPEND, + "Füge Datenträgerabbild hinzu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DISK_INDEX, + "Datenträger-Nummer") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DISK_OPTIONS, /* UPDATE/FIXME */ + "Datenträger-Optionen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DONT_CARE, + "Mir egal") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DPI_OVERRIDE_ENABLE, + "Aktiviere DPI-Override") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DPI_OVERRIDE_VALUE, + "DPI-Override") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DRIVER_SETTINGS, + "Treiber-Einstellungen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DUMMY_ON_CORE_SHUTDOWN, + "Dummy bei Core-Abschaltung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPER, + "Dynamischer Hintergrund") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPERS_DIRECTORY, + "Dynamische-Bildschirmhintergründe-Verzeichnis") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ENTRY_HOVER_COLOR, + "Hover-Farbe für Menü-Einträge") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ENTRY_NORMAL_COLOR, + "Normale Farbe für Menü-Einträge") +MSG_HASH(MENU_ENUM_LABEL_VALUE_FALSE, + "False") +MSG_HASH(MENU_ENUM_LABEL_VALUE_FASTFORWARD_RATIO, + "Maximale Ausführungsgeschwindigkeit") +MSG_HASH(MENU_ENUM_LABEL_VALUE_FPS_SHOW, + "Zeige Framerate") +MSG_HASH(MENU_ENUM_LABEL_VALUE_FRAME_THROTTLE_ENABLE, + "Begrenze maximale Ausführungsgeschwindigkeit") +MSG_HASH(MENU_ENUM_LABEL_VALUE_FRONTEND_COUNTERS, + "Frontendzähler") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP, + "Hilfe") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HISTORY_LIST_ENABLE, + "Aktiviere Verlaufsliste") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HISTORY_TAB, + "Verlauf") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HORIZONTAL_MENU, /* Don't change. Breaks everything. (Would be, "Horizontales Menu") */ + "Horizontal Menu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_IMAGES_TAB, + "Bilder") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INFORMATION_LIST, + "Information") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ALL_USERS_CONTROL_MENU, + "Jeder nutze kann Menü Steuern") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_AUTODETECT_ENABLE, + "Automatische Konfiguration aktivieren") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_AXIS_THRESHOLD, + "Schwellwert der Eingabe-Achsen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_HIDE_UNBOUND, + "Verstecke nicht zugewiesene Core-Eingabe-Beschriftungen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_LABEL_SHOW, /* TODO/FIXME */ + "Zeige Core-Eingabe-Beschriftungen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DRIVER, + "Eingabe-Treiber") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DUTY_CYCLE, + "Auslastungsgrad") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_MAX_USERS, + "Maximale Benutzerzahl") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_OSK_OVERLAY_ENABLE, + "Zeige Tastatur-Overlay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_ENABLE, + "Aktiviere Overlay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_REMAPPING_DIRECTORY, /* UPDATE/FIXME */ + "Eingabebelegungs-Verzeichnis") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_REMAP_BINDS_ENABLE, + "Bind-Remapping aktivieren") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_SETTINGS, + "Eingabe-Einstellungen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_TURBO_PERIOD, + "Turbo-Dauer") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_USER_BINDS, + "Spieler %u Tastenbelegung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_JOYPAD_AUTOCONFIG_DIR, + "Eingabegerät-Autoconfig-Verzeichnis") +MSG_HASH(MENU_ENUM_LABEL_VALUE_JOYPAD_DRIVER, + "Joypad-Treiber") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_CHINESE_SIMPLIFIED, + "Chinesisch (Vereinfacht)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_CHINESE_TRADITIONAL, + "Chinesisch (Traditionell)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_DUTCH, + "Niederländisch") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_ENGLISH, + "Englisch") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_ESPERANTO, + "Esperanto") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_FRENCH, + "Französisch") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_GERMAN, + "Deutsch") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_ITALIAN, + "Italienisch") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_JAPANESE, + "Japanisch") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_KOREAN, + "Koreanisch") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_PORTUGUESE, + "Portugiesisch") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_RUSSIAN, + "Russisch") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_SPANISH, + "Spanisch") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LEFT_ANALOG, + "Linker Analogstick") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LIBRETRO_DIR_PATH, + "Core-Verzeichnis") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LIBRETRO_INFO_PATH, + "Core-Info-Verzeichnis") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LIBRETRO_LOG_LEVEL, + "Core-Logging-Stufe") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LINEAR, + "Linear") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_ARCHIVE, + "Lade Archiv") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_CONTENT, + "Lade Content") /* FIXME */ +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_HISTORY, + "Lade Content (Verlauf)") /* FIXME/UPDATE */ +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_LIST, + "Lade Content") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_STATE, + "Lade Savestate") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOCATION_ALLOW, + "Erlaube Standort-Lokalisierung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOCATION_DRIVER, + "Standort-Treiber") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOGGING_SETTINGS, + "Logging-Einstellungen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOG_VERBOSITY, + "Log-Ausführlichkeit") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MAIN_MENU, + "Hauptmenü") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MANAGEMENT, + "Datenbank-Einstellungen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_DRIVER, + "Menü-Treiber") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FILE_BROWSER_SETTINGS, + "Menü-Dateibrowser-Einstellungen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_SETTINGS, + "Menü-Einstellungen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_WALLPAPER, + "Menühintergrund") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_WALLPAPER_OPACITY, + "Background opacity") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MISSING, + "Fehlt") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MORE, + "...") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MOUSE_ENABLE, + "Maus-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MULTIMEDIA_SETTINGS, + "Multimedia-Einstellungen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MUSIC_TAB, + "Musik") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NAVIGATION_BROWSER_FILTER_SUPPORTED_EXTENSIONS_ENABLE, + "Bekannte Dateiendungen filtern") /* TODO/FIXME - rewrite */ +MSG_HASH(MENU_ENUM_LABEL_VALUE_NAVIGATION_WRAPAROUND, + "Navigation umbrechen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NEAREST, + "Nächster") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY, + "Netplay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_CLIENT_SWAP_INPUT, /* TODO, Original string changed */ + "Tausche Netplay-Eingabe") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_DELAY_FRAMES, + "Verzögere Netplay-Frames") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_DISCONNECT, + "Disconnect") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE, + "Aktiviere Netplay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE_CLIENT, + "Connect to Netplay host") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE_HOST, + "Start hosting") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_IP_ADDRESS, /* TODO, Original string changed */ + "IP-Addresse für Netplay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_LAN_SCAN_SETTINGS, + "Scan local network") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_MODE, + "Aktiviere Netplay-Client") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_NICKNAME, + "Benutzername") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_SETTINGS, + "Netplay settings") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_SPECTATOR_MODE_ENABLE, + "Aktiviere Netplay-Zuschauermodus") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_TCP_UDP_PORT, + "TCP/UDP-Port für Netplay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_NAT_TRAVERSAL, + "Netplay NAT Traversal") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_CMD_ENABLE, + "Netzwerk-Befehle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_CMD_PORT, + "Port für Netzwerk-Befehle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_INFORMATION, + "Network Information") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_REMOTE_ENABLE, + "Network Gamepad") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_REMOTE_PORT, + "Network Remote Base Port") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_SETTINGS, + "Netzwerk-Einstellungen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO, + "Nein") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NONE, + "Keins") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE, + "Nicht verfügbar") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_ACHIEVEMENTS_TO_DISPLAY, + "No achievements to display.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_CORE, + "Kein Core") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_CORES_AVAILABLE, + "Kein Core verfügbar.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_CORE_INFORMATION_AVAILABLE, + "Keine Core-Informationen verfügbar.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_CORE_OPTIONS_AVAILABLE, + "Keine Core-Optionen verfügbar.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_ENTRIES_TO_DISPLAY, + "No entries to display.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_HISTORY_AVAILABLE, + "No history available.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_INFORMATION_AVAILABLE, + "Keine Informationen verfügbar.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_ITEMS, + "Keine Einträge.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_NETPLAY_HOSTS_FOUND, + "No netplay hosts found.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_NETWORKS_FOUND, + "No networks found.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_PERFORMANCE_COUNTERS, + "Keine Leistungszähler.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_PLAYLISTS, + "No playlists.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_PLAYLIST_ENTRIES_AVAILABLE, + "Keine Wiedergabelisten-Eintrage verfügbar.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_SETTINGS_FOUND, + "Keine Einstellungen gefunden.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_SHADER_PARAMETERS, + "Keine Shaderparameter") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OFF, + "AN") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ON, + "AUS") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ONLINE_UPDATER, + "Online-Aktualisierung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ONSCREEN_DISPLAY_SETTINGS, + "OSD-Einstellungen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OPEN_ARCHIVE, + "Öffne Archiv") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OPTIONAL, + "Optional") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OSK_OVERLAY_DIRECTORY, + "OSK-Overlay-Verzeichnis") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_DIRECTORY, + "Overlay-Verzeichnis") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_OPACITY, + "Overlay-Transparenz") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_PRESET, + "Overlay-Voreinstellung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_SCALE, + "Overlay-Skalierung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_SETTINGS, + "Overlay-Einstellungen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PAL60_ENABLE, + "Verwende PAL60-Modus") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PAUSE_LIBRETRO, + "Pausiere, wenn das Menü aktiv ist") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PAUSE_NONACTIVE, + "Nicht im Hintergrund laufen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PERFCNT_ENABLE, + "Leistungsindikatoren") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_DIRECTORY, + "Wiedergabelisten-Verzeichnis") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_SETTINGS, + "Wiedergabelisten-Einstellungen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_POINTER_ENABLE, + "Touch-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PORT, + "Port") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PRESENT, + "Vorhanden") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PRIVACY_SETTINGS, + "Privatsphäre-Einstellungen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_QUIT_RETROARCH, + "RetroArch beenden") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_CRC32, + "CRC32") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_DESCRIPTION, + "Beschreibung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_DEVELOPER, + "Entwickler") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_FRANCHISE, + "Franchise") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_MD5, + "MD5") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_NAME, + "Name") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ORIGIN, + "Herkunft") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_PUBLISHER, + "Publisher") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_RELEASE_MONTH, + "Veröffentlichungsmonat") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_RELEASE_YEAR, + "Veröffentlichungsjahr") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_SHA1, + "SHA1") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_START_CONTENT, + "Starte Content") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REBOOT, + "Neustart") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORDING_CONFIG_DIRECTORY, + "Aufnahme-Konfigurationsverzeichnis") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORDING_OUTPUT_DIRECTORY, + "Aufnahme-Ausgabeverzeichnis") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORDING_SETTINGS, + "Aufnahme-Einstellungen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORD_CONFIG, + "Aufnahme-Konfiguration") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORD_DRIVER, + "Aufnahme-Treiber") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORD_ENABLE, + "Aktiviere Aufnahmefunktion") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORD_PATH, /* FIXME/UPDATE */ + "Aufnahmepfad") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORD_USE_OUTPUT_DIRECTORY, + "Verwende Aufnahme-Ausgabeverzeichnis") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REMAP_FILE_LOAD, + "Lade Remap-Datei") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_CORE, + "Speichere Core-Remap-Datei") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_GAME, + "Speichere Spiel-Remap-Datei") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REQUIRED, + "Notwendig") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RESTART_CONTENT, + "Starte neu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RESTART_RETROARCH, + "Starte RetroArch neu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RESUME, + "Fortsetzen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RESUME_CONTENT, + "Fortsetzen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RETROKEYBOARD, + "RetroKeyboard") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RETROPAD, + "RetroPad") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_ENABLE, + "Zurückspulen (Rewind) aktivieren") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_GRANULARITY, + "Genauigkeit des Zurückspulens (Rewind)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_SETTINGS, + "Zurückspul-Einstellungen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RGUI_BROWSER_DIRECTORY, + "Browser-Directory") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RGUI_CONFIG_DIRECTORY, + "Konfigurations-Verzeichnis") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RGUI_SHOW_START_SCREEN, + "Zeige Startbildschirm") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RIGHT_ANALOG, + "Rechter Analogstick") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RUN, + "Start") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVEFILE_DIRECTORY, + "Spielstand-Verzeichnis") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_INDEX, + "Automatische Indexierung von Save States") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_LOAD, + "Automatisches Laden von Save States") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_SAVE, + "Automatische Save States") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_DIRECTORY, + "Savestate-Verzeichnis") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVE_NEW_CONFIG, + "Speichere neue Konfiguration") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVE_STATE, + "Speichere Savestate") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVING_SETTINGS, + "Spielstand-Einstellungen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SCAN_DIRECTORY, + "Durchsuche Verzeichnis") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SCAN_FILE, + "Durchsuche Datei") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SCAN_THIS_DIRECTORY, + "<- Durchsuche ->") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SCREENSHOT_DIRECTORY, + "Bildschirmfoto-Verzeichnis") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SCREEN_RESOLUTION, + "Bildschirmauflösung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SECONDS, + "Sekunden") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SETTINGS, + "Einstellungen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER, + "Shader") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_APPLY_CHANGES, + "Änderungen übernehmen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_OPTIONS, + "Shaders") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHOW_ADVANCED_SETTINGS, + "Zeige erweitere Einstellungen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHOW_HIDDEN_FILES, + "Zeige versteckte Ordner und Dateien") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SLOWMOTION_RATIO, + "Zeitlupen-Verhältnis") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SORT_SAVEFILES_ENABLE, + "Sortiere Speicherdaten per Ordner") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SORT_SAVESTATES_ENABLE, + "Sortiere Save States per Ordner") +MSG_HASH(MENU_ENUM_LABEL_VALUE_STATUS, + "Status") +MSG_HASH(MENU_ENUM_LABEL_VALUE_STDIN_CMD_ENABLE, + "stdin-Befehle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SUSPEND_SCREENSAVER_ENABLE, + "Bildschirmschoner aussetzen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_BGM_ENABLE, + "Aktiviere System-BGM") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_DIRECTORY, + "System/BIOS-Verzeichnis") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFORMATION, + "Systeminformationen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_7ZIP_SUPPORT, + "7zip-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_ALSA_SUPPORT, + "ALSA-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_BUILD_DATE, + "Build-Datum") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_CG_SUPPORT, + "Cg-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_COCOA_SUPPORT, + "Cocoa-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_COMMAND_IFACE_SUPPORT, + "Befehlsinterface-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_CORETEXT_SUPPORT, + "CoreText-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_CPU_FEATURES, + "CPU-Eigenschaften") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_DPI, + "Bildschirm-DPI") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_MM_HEIGHT, + "Bildschirmhöhe (mm)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_MM_WIDTH, + "Bildschirmbreite (mm)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DSOUND_SUPPORT, + "DirectSound-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DYLIB_SUPPORT, + "Dynamic-Library-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_EGL_SUPPORT, + "EGL-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FBO_SUPPORT, + "Unterstützung für OpenGL/Direct3D Render-to-Texture (Multi-Pass Shader)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FFMPEG_SUPPORT, + "FFmpeg-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FREETYPE_SUPPORT, + "FreeType-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FRONTEND_IDENTIFIER, + "Frontend-Kennung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FRONTEND_NAME, + "Frontend-Name") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FRONTEND_OS, + "Frontend-Betriebssystem") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_GIT_VERSION, + "Git-Version") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_GLSL_SUPPORT, + "GLSL-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_HLSL_SUPPORT, + "HLSL-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_JACK_SUPPORT, + "JACK-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_KMS_SUPPORT, + "KMS/EGL-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBRETRODB_SUPPORT, + "LibretroDB-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT, + "Libusb-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBXML2_SUPPORT, + "Libxml2-XML-Parsing-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_NETPLAY_SUPPORT, + "Netplay-Unterstützung (Peer-to-Peer)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_NETWORK_COMMAND_IFACE_SUPPORT, + "Netzwerk-Befehlsinterface-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENAL_SUPPORT, + "OpenAL-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENGLES_SUPPORT, + "OpenGL-ES-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENGL_SUPPORT, + "OpenGL-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENSL_SUPPORT, + "OpenSL-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENVG_SUPPORT, + "OpenVG-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OSS_SUPPORT, + "OSS-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OVERLAY_SUPPORT, + "Overlay-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE, + "Energiequelle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_CHARGED, + "Geladen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_CHARGING, + "Lädt") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_DISCHARGING, + "Entlädt") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_NO_SOURCE, + "Keine Quelle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PULSEAUDIO_SUPPORT, + "PulseAudio-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PYTHON_SUPPORT, + "Python-Unterstützung (Script-Unterstützung in Shadern)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RETRORATING_LEVEL, + "RetroRating-Stufe") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_ROARAUDIO_SUPPORT, + "RoarAudio-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RPNG_SUPPORT, + "PNG-Unterstützung (RPNG)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RSOUND_SUPPORT, + "RSound-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL2_SUPPORT, + "SDL2-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL_IMAGE_SUPPORT, + "SDL-Image-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL_SUPPORT, + "SDL1.2-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_THREADING_SUPPORT, + "Threading-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_UDEV_SUPPORT, + "Udev-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_V4L2_SUPPORT, + "Video4Linux2-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_VIDEO_CONTEXT_DRIVER, + "Video-Context-Treiber") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_WAYLAND_SUPPORT, + "Wayland-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_X11_SUPPORT, + "X11-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_XAUDIO2_SUPPORT, + "XAudio2-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_XVIDEO_SUPPORT, + "XVideo-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_ZLIB_SUPPORT, + "Zlib-Unterstützung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_TAKE_SCREENSHOT, + "Bildschirmfoto") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THREADED_DATA_RUNLOOP_ENABLE, + "Threaded Data Runloop") +MSG_HASH(MENU_ENUM_LABEL_VALUE_TIMEDATE_ENABLE, + "Zeige Uhrzeit / Datum") +MSG_HASH(MENU_ENUM_LABEL_VALUE_TITLE_COLOR, + "Menü-Titel-Farbe") +MSG_HASH(MENU_ENUM_LABEL_VALUE_TRUE, + "True") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UI_COMPANION_START_ON_BOOT, + "UI-Companion beim Hochfahren starten") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UI_MENUBAR_ENABLE, + "Menüleiste") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UNABLE_TO_READ_COMPRESSED_FILE, + "Komprimiertes Archiv kann nicht gelesen werden.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UNKNOWN, + "Unbekannt") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_ASSETS, + "Aktualisiere Assets") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_AUTOCONFIG_PROFILES, + "Aktualisiere Autoconfig-Profile") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_CG_SHADERS, + "Aktualisiere CG-Shader") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_CHEATS, + "Aktualisiere Cheats") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_DATABASES, + "Aktualisiere Datenbanken") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_GLSL_SHADERS, + "Aktualisiere GLSL-Shader") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_OVERLAYS, + "Aktualisiere Overlays") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USER, + "Benutzer") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USER_INTERFACE_SETTINGS, + "Benutzeroberflächen-Einstellungen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USER_LANGUAGE, + "Sprache") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USER_SETTINGS, + "Benutzer-Einstellungen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USE_BUILTIN_PLAYER, + "Verwende integrierten Player") /* FIXME/UPDATE */ +MSG_HASH(MENU_ENUM_LABEL_VALUE_USE_THIS_DIRECTORY, + "") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_ALLOW_ROTATE, + "Erlaube Bildrotation") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_AUTO, + "Automatisches Bildseitenverhältnis") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_INDEX, + "Bildseitenverhältnis-Index") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_BLACK_FRAME_INSERTION, + "Setze schwarze Frames ein") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_CROP_OVERSCAN, + "Bildränder (Overscan) zuschneiden (Neustart erforderlich)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_DISABLE_COMPOSITION, + "Deaktiviere Desktop-Komposition") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_DRIVER, + "Grafiktreiber") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FILTER, + "Videofilter") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FILTER_DIR, + "Grafikfilter-Verzeichnis") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FILTER_FLICKER, + "Aktiviere Flacker-Filter") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FONT_ENABLE, + "Zeige OSD-Nachrichten") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FONT_PATH, + "Schriftart der OSD-Nachrichten") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FONT_SIZE, + "Schriftgröße der OSD-Nachrichten") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FORCE_ASPECT, + "Erzwinge Bildseitenverhältnis") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FORCE_SRGB_DISABLE, + "Erzwinge Deaktivierung des sRGB FBO") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FRAME_DELAY, + "Bildverzögerung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FULLSCREEN, + "Verwende Vollbildmodus") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_GAMMA, + "Gamma") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_GPU_RECORD, + "Aktiviere GPU-Aufnahmefunktion") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_GPU_SCREENSHOT, + "Aktiviere GPU-Bildschirmfotos") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_HARD_SYNC, + "Synchronisiere GPU und CPU") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_HARD_SYNC_FRAMES, + "Synchronisiere Frames fest mit GPU") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_MESSAGE_POS_X, + "X-Position der OSD-Nachrichten") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_MESSAGE_POS_Y, + "Y-Position der OSD-Nachrichten") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_MONITOR_INDEX, + "Monitor-Index") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_POST_FILTER_RECORD, + "Aktiviere Aufnahme von Post-Filtern") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_REFRESH_RATE, + "Bildwiederholrate") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_REFRESH_RATE_AUTO, + "Geschätzte Bildwiederholrate") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_ROTATION, + "Rotation") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SCALE, + "Fenterskalierung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SCALE_INTEGER, + "Ganzzahlige Bildskalierung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SETTINGS, + "Video-Einstellungen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_DIR, + "Grafikshader-Verzeichnis") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_NUM_PASSES, + "Shader-Durchgänge") /* FIXME */ +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PARAMETERS, + "Momentane Shaderparameter") /* FIXME/UPDATE */ +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET, + "Lade Shader-Voreinstellung") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_PARAMETERS, + "Menü Shaderparameter (Menü)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_AS, + "Speichere Shader-Voreinstellung unter...") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHARED_CONTEXT, + "HW-Shared-Context aktivieren") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SMOOTH, + "Bilineare Filterung (HW)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SOFT_FILTER, + "Aktiviere Soft-Filter") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SWAP_INTERVAL, + "VSync-Intervall") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_TAB, + "Videos") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_THREADED, + "Threaded Video") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VFILTER, + "Bild entflackern") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_HEIGHT, + "Bildchirmauflösung Höhe") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_WIDTH, + "Bildchirmauflösung Breite") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_X, + "Bildchirmauflösung X") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_Y, + "Bildchirmauflösung Y") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VI_WIDTH, + "Kalibriere VI-Bildbreite") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VSYNC, + "Vertikale Synchronisation (VSync)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_WINDOWED_FULLSCREEN, + "Unechter Vollbild-Modus (Windowed Fullscreen)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_WIFI_DRIVER, + "Wlan-Treiber") +MSG_HASH(MENU_ENUM_LABEL_VALUE_WIFI_SETTINGS, + "Wlan") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHADOWS_ENABLE, + "Icon Schatten") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_HISTORY, + "Zeige Verlauf") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_IMAGES, + "Zeige Bilder") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_MUSIC, + "Zeige Musik") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_SETTINGS, + "Zeige Einstellungen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_VIDEO, + "Zeige Videos") +MSG_HASH(MENU_ENUM_LABEL_VALUE_YES, + "Ja") +MSG_HASH(MENU_ENUM_SUBLABEL_PAUSE_NONACTIVE, + "Pause gameplay when window focus is lost.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_DISABLE_COMPOSITION, + "Enable or disable composition (Windows only).") +MSG_HASH(MENU_ENUM_SUBLABEL_HISTORY_LIST_ENABLE, + "Enable or disable recent playlist for games, images, music, and videos.") +MSG_HASH(MENU_ENUM_SUBLABEL_CONTENT_HISTORY_SIZE, + "Limit the number of entries in recent playlist for games, images, music, and videos.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_UNIFIED_MENU_CONTROLS, + "Unified Menu Controls") +MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_UNIFIED_MENU_CONTROLS, + "Use the same controls for both the menu and the game. Applies to the keyboard.") diff --git a/intl/msg_hash_eo.c b/intl/msg_hash_eo.c index 6d0cb4ac00..dd5641ff20 100644 --- a/intl/msg_hash_eo.c +++ b/intl/msg_hash_eo.c @@ -42,7 +42,7 @@ const char *msg_hash_to_str_eo(enum msg_hash_enums msg) { switch (msg) { - case 0: + #include "msg_hash_eo.h" default: break; } diff --git a/intl/msg_hash_eo.h b/intl/msg_hash_eo.h new file mode 100644 index 0000000000..8974034951 --- /dev/null +++ b/intl/msg_hash_eo.h @@ -0,0 +1,2251 @@ +MSG_HASH( + MSG_COMPILER, + "Compiler" + ) +MSG_HASH( + MSG_UNKNOWN_COMPILER, + "Unknown compiler" + ) +MSG_HASH( + MSG_DEVICE_DISCONNECTED_FROM_PORT, + "Device disconnected from port" + ) +MSG_HASH( + MSG_UNKNOWN_NETPLAY_COMMAND_RECEIVED, + "Unknown netplay command received" + ) +MSG_HASH( + MSG_FILE_ALREADY_EXISTS_SAVING_TO_BACKUP_BUFFER, + "File already exists. Saving to backup buffer" + ) +MSG_HASH( + MSG_GOT_CONNECTION_FROM, + "Got connection from: \"%s\"" + ) +MSG_HASH( + MSG_GOT_CONNECTION_FROM_NAME, + "Got connection from: \"%s (%s)\"" + ) +MSG_HASH( + MSG_NO_ARGUMENTS_SUPPLIED_AND_NO_MENU_BUILTIN, + "No arguments supplied and no menu builtin, displaying help..." + ) +MSG_HASH( + MSG_NETPLAY_USERS_HAS_FLIPPED, + "Netplay users has flipped" + ) +MSG_HASH( + MSG_SETTING_DISK_IN_TRAY, + "Setting disk in tray" + ) +MSG_HASH( + MSG_WAITING_FOR_CLIENT, + "Waiting for client ..." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_VIDEO_SHARED_CONTEXT, + "Give hardware-rendered cores their own private context. Avoids having to assume hardware state changes inbetween frames." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_MENU_SETTINGS, + "Adjusts settings related to the appearance of the menu screen." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_VIDEO_HARD_SYNC, + "Hard-synchronize the CPU and GPU. Reduces latency at the cost of performance." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_VIDEO_THREADED, + "Improves performance at the cost of latency and more video stuttering. Use only if you cannot obtain full speed otherwise." + ) +MSG_HASH( + MSG_AUDIO_VOLUME, + "Audio volume" + ) +MSG_HASH( + MSG_AUTODETECT, + "Autodetect" + ) +MSG_HASH( + MSG_AUTOLOADING_SAVESTATE_FROM, + "Auto-loading savestate from" + ) +MSG_HASH( + MSG_CAPABILITIES, + "Capabilities" + ) +MSG_HASH( + MSG_CONNECTING_TO_NETPLAY_HOST, + "Connecting to netplay host" + ) +MSG_HASH( + MSG_CONNECTING_TO_PORT, + "Connecting to port" + ) +MSG_HASH( + MSG_CONNECTION_SLOT, + "Connection slot" + ) +MSG_HASH( + MSG_SORRY_UNIMPLEMENTED_CORES_DONT_DEMAND_CONTENT_NETPLAY, + "Sorry, unimplemented: cores that don't demand content cannot participate in netplay." + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACCOUNTS_CHEEVOS_PASSWORD, + "Password" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACCOUNTS_CHEEVOS_SETTINGS, + "Accounts Cheevos" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACCOUNTS_CHEEVOS_USERNAME, + "Username" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACCOUNTS_LIST, + "Accounts" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACCOUNTS_LIST_END, + "Accounts List Endpoint" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACCOUNTS_RETRO_ACHIEVEMENTS, + "Retro Achievements" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_LIST, + "Achievement List" + ) + +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_LIST_HARDCORE, + "Achievement List (Hardcore)" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ADD_CONTENT_LIST, + "Scan Content" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONFIGURATIONS_LIST, + "Configurations" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ADD_TAB, + "Import content" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ARCHIVE_MODE, + "Archive File Association Action" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ASK_ARCHIVE, + "Ask" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ASSETS_DIRECTORY, + "Assets" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_BLOCK_FRAMES, + "Block Frames" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_DEVICE, + "Audio Device" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_DRIVER, + "Audio Driver" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_DSP_PLUGIN, + "Audio DSP Plugin" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_ENABLE, + "Audio Enable" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_FILTER_DIR, + "Audio Filter" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_TURBO_DEADZONE_LIST, + "Turbo/Deadzone" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_LATENCY, + "Audio Latency (ms)" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_MAX_TIMING_SKEW, + "Audio Maximum Timing Skew" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_MUTE, + "Audio Mute" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_OUTPUT_RATE, + "Audio Output Rate (KHz)" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_RATE_CONTROL_DELTA, + "Dynamic Audio Rate Control" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_RESAMPLER_DRIVER, + "Audio Resampler Driver" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_SETTINGS, + "Audio" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_SYNC, + "Audio Sync Enable" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_VOLUME, + "Audio Volume Level (dB)" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUTOSAVE_INTERVAL, + "SaveRAM Autosave Interval" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUTO_OVERRIDES_ENABLE, + "Load Override Files Automatically" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUTO_REMAPS_ENABLE, + "Load Remap Files Automatically" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUTO_SHADERS_ENABLE, + "Load Shader Presets Automatically" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_BACK, + "Back" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_CONFIRM, + "Confirm" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_INFO, + "Info" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_QUIT, + "Quit" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_SCROLL_DOWN, + "Scroll Down" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_SCROLL_UP, + "Scroll Up" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_START, + "Start" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_TOGGLE_KEYBOARD, + "Toggle Keyboard" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_TOGGLE_MENU, + "Toggle Menu" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS, + "Basic menu controls" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_CONFIRM, + "Confirm/OK" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_INFO, + "Info" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_QUIT, + "Quit" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_SCROLL_UP, + "Scroll Up" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_START, + "Defaults" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_TOGGLE_KEYBOARD, + "Toggle Keyboard" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_TOGGLE_MENU, + "Toggle Menu" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BLOCK_SRAM_OVERWRITE, + "Don't overwrite SaveRAM on loading savestate" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BLUETOOTH_ENABLE, + "Bluetooth Enable" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BUILDBOT_ASSETS_URL, + "Buildbot Assets URL" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CACHE_DIRECTORY, + "Cache" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CAMERA_ALLOW, + "Allow Camera" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CAMERA_DRIVER, + "Camera Driver" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT, + "Cheat" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT_APPLY_CHANGES, + "Apply Cheat Changes" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT_DATABASE_PATH, + "Cheat File" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT_FILE, + "Cheat File" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT_FILE_LOAD, + "Load Cheat File" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT_FILE_SAVE_AS, + "Save Cheat File As" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT_NUM_PASSES, + "Cheat Passes" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_DESCRIPTION, + "Description" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_HARDCORE_MODE_ENABLE, + "Achievements Hardcore Mode" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_LOCKED_ACHIEVEMENTS, + "Locked Achievements:" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_LOCKED_ENTRY, + "Locked" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_SETTINGS, + "Retro Achievements" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_TEST_UNOFFICIAL, + "Test Unofficial Achievements" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_UNLOCKED_ACHIEVEMENTS, + "Unlocked Achievements:" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_UNLOCKED_ENTRY, + "Unlocked" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CLOSE_CONTENT, + "Close" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONFIG, + "Config" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONFIGURATIONS, + "Load Configuration" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONFIGURATION_SETTINGS, + "Configuration" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONFIG_SAVE_ON_EXIT, + "Save Configuration on Exit" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONTENT_COLLECTION_LIST, + "Collections" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONTENT_DATABASE_DIRECTORY, + "Content Database" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONTENT_DIR, + "Content" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONTENT_HISTORY_SIZE, + "History List Size") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CONTENT_SETTINGS, + "Quick Menu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_ASSETS_DIR, + "Core Assets") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_ASSETS_DIRECTORY, + "Downloads") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_CHEAT_OPTIONS, + "Cheats") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_COUNTERS, + "Core Counters") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_ENABLE, + "Display core name") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFORMATION, + "Core Information") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_AUTHORS, + "Authors") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_CATEGORIES, + "Categories") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_LABEL, + "Core label") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_NAME, + "Core name") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_FIRMWARE, + "Firmware(s)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_LICENSES, + "License(s)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_PERMISSIONS, + "Permissions") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_SUPPORTED_EXTENSIONS, + "Supported extensions") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_SYSTEM_MANUFACTURER, + "System manufacturer") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_SYSTEM_NAME, + "System name") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INPUT_REMAPPING_OPTIONS, + "Controls") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_LIST, + "Load Core") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_OPTIONS, + "Options") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_SETTINGS, + "Core") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_SET_SUPPORTS_NO_CONTENT_ENABLE, + "Start a Core Automatically") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_SPECIFIC_CONFIG, + "Configuration Per-Core") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_UPDATER_AUTO_EXTRACT_ARCHIVE, + "Automatically extract downloaded archive") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_UPDATER_BUILDBOT_URL, + "Buildbot Cores URL") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_UPDATER_LIST, + "Core Updater") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_UPDATER_SETTINGS, + "Updater") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CPU_ARCHITECTURE, + "CPU Architecture:") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CPU_CORES, + "CPU Cores:") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CURSOR_DIRECTORY, + "Cursor") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CURSOR_MANAGER, + "Cursor Manager") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CUSTOM_RATIO, + "Custom Ratio") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_MANAGER, + "Database Manager") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_SELECTION, + "Database Selection") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DELETE_ENTRY, + "Remove") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DETECT_CORE_LIST, + "Select File And Detect Core") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_CONTENT, + "") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_DEFAULT, + "") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_NONE, + "") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_NOT_FOUND, + "Directory not found.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_SETTINGS, + "Directory") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DISK_CYCLE_TRAY_STATUS, + "Disk Cycle Tray Status") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DISK_IMAGE_APPEND, + "Disk Image Append") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DISK_INDEX, + "Disk Index") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DISK_OPTIONS, + "Disk Control") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DONT_CARE, + "Don't care") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DOWNLOADED_FILE_DETECT_CORE_LIST, + "Downloads") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DOWNLOAD_CORE, + "Download Core...") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DOWNLOAD_CORE_CONTENT, + "Content Downloader") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DPI_OVERRIDE_ENABLE, + "DPI Override Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DPI_OVERRIDE_VALUE, + "DPI Override") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DRIVER_SETTINGS, + "Driver") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DUMMY_ON_CORE_SHUTDOWN, + "Load Dummy on Core Shutdown") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPER, + "Dynamic Wallpaper") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPERS_DIRECTORY, + "Dynamic Wallpapers") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CHEEVOS_ENABLE, + "Enable Achievements") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ENTRY_HOVER_COLOR, + "Menu entry hover color") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ENTRY_NORMAL_COLOR, + "Menu entry normal color") +MSG_HASH(MENU_ENUM_LABEL_VALUE_FALSE, + "False") +MSG_HASH(MENU_ENUM_LABEL_VALUE_FASTFORWARD_RATIO, + "Maximum Run Speed") +MSG_HASH(MENU_ENUM_LABEL_VALUE_FPS_SHOW, + "Display Framerate") +MSG_HASH(MENU_ENUM_LABEL_VALUE_FRAME_THROTTLE_ENABLE, + "Limit Maximum Run Speed") +MSG_HASH(MENU_ENUM_LABEL_VALUE_FRAME_THROTTLE_SETTINGS, + "Frame Throttle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_FRONTEND_COUNTERS, + "Frontend Counters") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_OPTIONS, + "Load Content-Specific Core Options Automatically") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_OPTIONS_CREATE, + "Create game-options file") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_OPTIONS_IN_USE, + "Game-options file") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP, + "help") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_AUDIO_VIDEO_TROUBLESHOOTING, + "Audio/Video Troubleshooting") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_CHANGE_VIRTUAL_GAMEPAD, + "Changing Virtual Gamepad Overlay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_CONTROLS, + "Basic Menu Controls") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_LIST, + "Help") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_LOADING_CONTENT, + "Loading Content") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_SCANNING_CONTENT, + "Scanning For Content") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_WHAT_IS_A_CORE, + "What Is A Core?") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HISTORY_LIST_ENABLE, + "History List Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HISTORY_TAB, + "History") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HORIZONTAL_MENU, + "Horizontal Menu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_IMAGES_TAB, + "Images") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INFORMATION, + "Information") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INFORMATION_LIST, + "Information") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ADC_TYPE, + "Analog To Digital Type") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ALL_USERS_CONTROL_MENU, + "All Users Control Menu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_X, + "Left Analog X") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_X_MINUS, + "Left analog X- (left)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_X_PLUS, + "Left analog X+ (right)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_Y, + "Left Analog Y") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_Y_MINUS, + "Left analog Y- (up)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_Y_PLUS, + "Left analog Y+ (down)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_X, + "Right Analog X") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_X_MINUS, + "Right analog X- (left)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_X_PLUS, + "Right analog X+ (right)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_Y, + "Right Analog Y") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_Y_MINUS, + "Right analog Y- (up)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_Y_PLUS, + "Right analog Y+ (down)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_AUTODETECT_ENABLE, + "Autoconfig Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_AXIS_THRESHOLD, + "Analog Stick Deadzone") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_INPUT_SWAP_OK_CANCEL, + "Menu Swap Ok & Cancel Buttons") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_ALL, + "Bind All") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_DEFAULT_ALL, + "Bind Default All") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_TIMEOUT, + "Bind Timeout") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_HIDE_UNBOUND, + "Hide Unbound Core Input Descriptors") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_LABEL_SHOW, + "Display Input Descriptor Labels") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DEVICE_INDEX, + "Device Index") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DEVICE_TYPE, + "Device Type") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DRIVER, + "Input Driver") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DUTY_CYCLE, + "Duty Cycle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_HOTKEY_BINDS, + "Input Hotkey Binds") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ICADE_ENABLE, + "Keyboard Gamepad Mapping Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_A, + "A button (right)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_B, + "B button (down)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_DOWN, + "Down D-pad") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_L2, + "L2 button (trigger)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_L3, + "L3 button (thumb)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_L, + "L button (shoulder)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_LEFT, + "Left D-pad") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_R2, + "R2 button (trigger)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_R3, + "R3 button (thumb)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_R, + "R button (shoulder)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_RIGHT, + "Right D-pad") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_SELECT, + "Select button") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_START, + "Start button") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_UP, + "Up D-pad") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_X, + "X button (top)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_Y, + "Y button (left)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_KEY, + "(Key: %s)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_KEYBOARD_GAMEPAD_MAPPING_TYPE, + "Keyboard Gamepad Mapping Type") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_MAX_USERS, + "Max Users") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO, + "Menu Toggle Gamepad Combo") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_CHEAT_INDEX_MINUS, + "Cheat index -") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_CHEAT_INDEX_PLUS, + "Cheat index +") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_CHEAT_TOGGLE, + "Cheat toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_DISK_EJECT_TOGGLE, + "Disk eject toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_DISK_NEXT, + "Disk next") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_DISK_PREV, + "Disk prev") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_ENABLE_HOTKEY, + "Enable hotkeys") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_FAST_FORWARD_HOLD_KEY, + "Fast forward hold") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_FAST_FORWARD_KEY, + "Fast forward toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_FRAMEADVANCE, + "Frameadvance") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_FULLSCREEN_TOGGLE_KEY, + "Fullscreen toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_GRAB_MOUSE_TOGGLE, + "Grab mouse toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_LOAD_STATE_KEY, + "Load state") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_MENU_TOGGLE, + "Menu toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_MOVIE_RECORD_TOGGLE, + "Movie record toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_MUTE, + "Audio mute toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_NETPLAY_FLIP, + "Netplay flip users") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_OSK, + "On-screen keyboard toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_OVERLAY_NEXT, + "Overlay next") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_PAUSE_TOGGLE, + "Pause toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_QUIT_KEY, + "Quit RetroArch") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_RESET, + "Reset game") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_REWIND, + "Rewind") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_SAVE_STATE_KEY, + "Save state") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_SCREENSHOT, + "Take screenshot") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_SHADER_NEXT, + "Next shader") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_SHADER_PREV, + "Previous shader") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_SLOWMOTION, + "Slow motion") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_STATE_SLOT_MINUS, + "Savestate slot -") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_STATE_SLOT_PLUS, + "Savestate slot +") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_VOLUME_DOWN, + "Volume -") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_VOLUME_UP, + "Volume +") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_ENABLE, + "Display Overlay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_HIDE_IN_MENU, + "Hide Overlay In Menu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR, + "Poll Type Behavior") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR_EARLY, + "Early") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR_LATE, + "Late") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR_NORMAL, + "Normal") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_PREFER_FRONT_TOUCH, + "Prefer Front Touch") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_REMAPPING_DIRECTORY, + "Input Remapping") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_REMAP_BINDS_ENABLE, + "Remap Binds Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_SAVE_AUTOCONFIG, + "Save Autoconfig") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_SETTINGS, + "Input") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_SMALL_KEYBOARD_ENABLE, + "Small Keyboard Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_TOUCH_ENABLE, + "Touch Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_TURBO_ENABLE, + "Turbo enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_TURBO_PERIOD, + "Turbo Period") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_USER_BINDS, + "Input User %u Binds") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INTERNAL_STORAGE_STATUS, + "Internal storage status") +MSG_HASH(MENU_ENUM_LABEL_VALUE_JOYPAD_AUTOCONFIG_DIR, + "Input Autoconfig") +MSG_HASH(MENU_ENUM_LABEL_VALUE_JOYPAD_DRIVER, + "Joypad Driver") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LAKKA_SERVICES, + "Services") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_CHINESE_SIMPLIFIED, + "Chinese (Simplified)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_CHINESE_TRADITIONAL, + "Chinese (Traditional)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_DUTCH, + "Dutch") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_ENGLISH, + "English") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_ESPERANTO, + "Esperanto") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_FRENCH, + "French") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_GERMAN, + "German") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_ITALIAN, + "Italian") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_JAPANESE, + "Japanese") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_KOREAN, + "Korean") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_POLISH, + "Polish") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_PORTUGUESE, + "Portuguese") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_RUSSIAN, + "Russian") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_SPANISH, + "Spanish") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_VIETNAMESE, + "Vietnamese") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LEFT_ANALOG, + "Left Analog") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LIBRETRO_DIR_PATH, + "Core") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LIBRETRO_INFO_PATH, + "Core Info") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LIBRETRO_LOG_LEVEL, + "Core Logging Level") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LINEAR, + "Linear") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_ARCHIVE, + "Load Archive With Core") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_CONTENT, + "Select File") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_HISTORY, + "Load Recent") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_LIST, + "Load Content") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_STATE, + "Load State") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOCATION_ALLOW, + "Allow Location") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOCATION_DRIVER, + "Location Driver") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOGGING_SETTINGS, + "Logging") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOG_VERBOSITY, + "Logging Verbosity") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MAIN_MENU, + "Main Menu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MANAGEMENT, + "Database Settings") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME, + "Menu Color Theme") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_BLUE, + "Blue") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_BLUE_GREY, + "Blue Grey") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_DARK_BLUE, + "Dark Blue") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_GREEN, + "Green") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_NVIDIA_SHIELD, + "Shield") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_RED, + "Red") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_YELLOW, + "Yellow") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_FOOTER_OPACITY, + "Footer Opacity") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_HEADER_OPACITY, + "Header Opacity") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_DRIVER, + "Menu Driver") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_ENUM_THROTTLE_FRAMERATE, + "Throttle Menu Framerate") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FILE_BROWSER_SETTINGS, + "Menu File Browser") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_LINEAR_FILTER, + "Menu Linear Filter") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_SETTINGS, + "Menu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_WALLPAPER, + "Background") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_WALLPAPER_OPACITY, + "Background opacity") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MISSING, + "Missing") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MORE, + "...") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MOUSE_ENABLE, + "Mouse Support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MULTIMEDIA_SETTINGS, + "Multimedia") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MUSIC_TAB, + "Music") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NAVIGATION_BROWSER_FILTER_SUPPORTED_EXTENSIONS_ENABLE, + "Filter unknown extensions") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NAVIGATION_WRAPAROUND, + "Navigation Wrap-Around") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NEAREST, + "Nearest") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY, + "Netplay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_CHECK_FRAMES, + "Netplay Check Frames") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_CLIENT_SWAP_INPUT, + "Netplay P2 Uses C1") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_DELAY_FRAMES, + "Netplay Delay Frames") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_DISCONNECT, + "Disconnect") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE, + "Netplay Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE_CLIENT, + "Connect to Netplay host") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE_HOST, + "Start hosting") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_IP_ADDRESS, + "Server Address") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_MODE, + "Netplay Client Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_NICKNAME, + "Username") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_SETTINGS, + "Netplay settings") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_SPECTATOR_MODE_ENABLE, + "Netplay Spectator Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_TCP_UDP_PORT, + "Netplay TCP/UDP Port") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_CMD_ENABLE, + "Network Commands") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_CMD_PORT, + "Network Command Port") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_INFORMATION, + "Network Information") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_REMOTE_ENABLE, + "Network Gamepad") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_REMOTE_PORT, + "Network Remote Base Port") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_SETTINGS, + "Network") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO, + "No") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NONE, + "None") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE, + "N/A") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_ACHIEVEMENTS_TO_DISPLAY, + "No achievements to display.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_CORE, + "No Core") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_CORES_AVAILABLE, + "No cores available.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_CORE_INFORMATION_AVAILABLE, + "No core information available.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_CORE_OPTIONS_AVAILABLE, + "No core options available.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_ENTRIES_TO_DISPLAY, + "No entries to display.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_HISTORY_AVAILABLE, + "No history available.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_INFORMATION_AVAILABLE, + "No information is available.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_ITEMS, + "No items.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_PERFORMANCE_COUNTERS, + "No performance counters.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_PLAYLISTS, + "No playlists.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_PLAYLIST_ENTRIES_AVAILABLE, + "No playlist entries available.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_SETTINGS_FOUND, + "No settings found.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_SHADER_PARAMETERS, + "No shader parameters.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OFF, + "OFF") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ON, + "ON") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ONLINE, + "Online") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ONLINE_UPDATER, + "Online Updater") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ONSCREEN_DISPLAY_SETTINGS, + "Onscreen Display") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ONSCREEN_OVERLAY_SETTINGS, + "Onscreen Overlay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ONSCREEN_NOTIFICATIONS_SETTINGS, + "Onscreen Notifications") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OPEN_ARCHIVE, + "Open Archive As Folder") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OPTIONAL, + "Optional") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY, + "Overlay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_AUTOLOAD_PREFERRED, + "Autoload Preferred Overlay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_DIRECTORY, + "Overlay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_OPACITY, + "Overlay Opacity") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_PRESET, + "Overlay Preset") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_SCALE, + "Overlay Scale") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_SETTINGS, + "Onscreen Overlay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PAL60_ENABLE, + "Use PAL60 Mode") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PARENT_DIRECTORY, + "Parent directory") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PAUSE_LIBRETRO, + "Pause when menu activated") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PAUSE_NONACTIVE, + "Don't run in background") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PERFCNT_ENABLE, + "Performance Counters") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLISTS_TAB, + "Playlists") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_DIRECTORY, + "Playlist") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_SETTINGS, + "Playlists") +MSG_HASH(MENU_ENUM_LABEL_VALUE_POINTER_ENABLE, + "Touch Support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PORT, + "Port") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PRESENT, + "Present") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PRIVACY_SETTINGS, + "Privacy") +MSG_HASH(MENU_ENUM_LABEL_VALUE_QUIT_RETROARCH, + "Quit RetroArch") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ANALOG, + "Analog supported") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_BBFC_RATING, + "BBFC Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_CERO_RATING, + "CERO Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_COOP, + "Co-op supported") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_CRC32, + "CRC32") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_DESCRIPTION, + "Description") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_DEVELOPER, + "Developer") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_EDGE_MAGAZINE_ISSUE, + "Edge Magazine Issue") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_EDGE_MAGAZINE_RATING, + "Edge Magazine Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_EDGE_MAGAZINE_REVIEW, + "Edge Magazine Review") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ELSPA_RATING, + "ELSPA Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ENHANCEMENT_HW, + "Enhancement Hardware") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ESRB_RATING, + "ESRB Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_FAMITSU_MAGAZINE_RATING, + "Famitsu Magazine Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_FRANCHISE, + "Franchise") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_GENRE, + "Genre") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_MD5, + "MD5") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_NAME, + "Name") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ORIGIN, + "Origin") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_PEGI_RATING, + "PEGI Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_PUBLISHER, + "Publisher") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_RELEASE_MONTH, + "Releasedate Month") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_RELEASE_YEAR, + "Releasedate Year") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_RUMBLE, + "Rumble supported") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_SERIAL, + "Serial") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_SHA1, + "SHA1") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_START_CONTENT, + "Start Content") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_TGDB_RATING, + "TGDB Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REBOOT, + "Reboot") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORDING_CONFIG_DIRECTORY, + "Recording Config") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORDING_OUTPUT_DIRECTORY, + "Recording Output") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORDING_SETTINGS, + "Recording") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORD_CONFIG, + "Load Recording Config...") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORD_DRIVER, + "Record Driver") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORD_ENABLE, + "Enable Recording") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORD_PATH, + "Save Output Recording as...") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORD_USE_OUTPUT_DIRECTORY, + "Save Recordings in Output Dir") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REMAP_FILE, + "Remap File") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REMAP_FILE_LOAD, + "Load Remap File") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_CORE, + "Save Core Remap File") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_GAME, + "Save Game Remap File") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REQUIRED, + "Required") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RESTART_CONTENT, + "Restart") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RESTART_RETROARCH, + "Restart RetroArch") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RESUME, + "Resume") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RESUME_CONTENT, + "Resume") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RETROKEYBOARD, + "RetroKeyboard") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RETROPAD, + "RetroPad") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RETROPAD_WITH_ANALOG, + "RetroPad w/ Analog") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RETRO_ACHIEVEMENTS_SETTINGS, + "Achievements") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_ENABLE, + "Rewind Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_GRANULARITY, + "Rewind Granularity") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_SETTINGS, + "Rewind") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RGUI_BROWSER_DIRECTORY, + "File Browser") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RGUI_CONFIG_DIRECTORY, + "Config") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RGUI_SHOW_START_SCREEN, + "Show Start Screen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RIGHT_ANALOG, + "Right Analog") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RUN, + "Run") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAMBA_ENABLE, + "SAMBA Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVEFILE_DIRECTORY, + "Savefile") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_INDEX, + "Save State Auto Index") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_LOAD, + "Auto Load State") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_SAVE, + "Auto Save State") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_DIRECTORY, + "Savestate") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVE_CURRENT_CONFIG, + "Save Current Configuration") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVE_CURRENT_CONFIG_OVERRIDE_CORE, + "Save Core Overrides") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVE_CURRENT_CONFIG_OVERRIDE_GAME, + "Save Game Overrides") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVE_NEW_CONFIG, + "Save New Configuration") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVE_STATE, + "Save State") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVING_SETTINGS, + "Saving") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SCAN_DIRECTORY, + "Scan Directory") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SCAN_FILE, + "Scan File") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SCAN_THIS_DIRECTORY, + "") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SCREENSHOT_DIRECTORY, + "Screenshot") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SCREEN_RESOLUTION, + "Screen Resolution") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SEARCH, + "Search:") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SECONDS, + "seconds") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SETTINGS, + "Settings") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SETTINGS_TAB, + "Settings") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER, + "Shader") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_APPLY_CHANGES, + "Apply Shader Changes") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_OPTIONS, + "Shaders") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_RIBBON, + "Ribbon") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_RIBBON_SIMPLIFIED, + "Ribbon (simplified)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_SIMPLE_SNOW, + "Simple Snow") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_SNOW, + "Snow") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHOW_ADVANCED_SETTINGS, + "Show Advanced Settings") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHOW_HIDDEN_FILES, + "Show Hidden Files and Folders") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHUTDOWN, + "Shutdown") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SLOWMOTION_RATIO, + "Slow-Motion Ratio") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SORT_SAVEFILES_ENABLE, + "Sort Saves In Folders") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SORT_SAVESTATES_ENABLE, + "Sort Savestates In Folders") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SSH_ENABLE, + "SSH Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_START_CORE, + "Start Core") +MSG_HASH(MENU_ENUM_LABEL_VALUE_START_NET_RETROPAD, + "Start Remote RetroPad") +MSG_HASH(MENU_ENUM_LABEL_VALUE_START_VIDEO_PROCESSOR, + "Start Video Processor") +MSG_HASH(MENU_ENUM_LABEL_VALUE_STATE_SLOT, + "State Slot") +MSG_HASH(MENU_ENUM_LABEL_VALUE_STATUS, + "Status") +MSG_HASH(MENU_ENUM_LABEL_VALUE_STDIN_CMD_ENABLE, + "stdin Commands") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SUPPORTED_CORES, + "Supported cores") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SUSPEND_SCREENSAVER_ENABLE, + "Suspend Screensaver") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_BGM_ENABLE, + "System BGM Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_DIRECTORY, + "System/BIOS") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFORMATION, + "System Information") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_7ZIP_SUPPORT, + "7zip support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_ALSA_SUPPORT, + "ALSA support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_BUILD_DATE, + "Build date") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_CG_SUPPORT, + "Cg support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_COCOA_SUPPORT, + "Cocoa support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_COMMAND_IFACE_SUPPORT, + "Command interface support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_CORETEXT_SUPPORT, + "CoreText support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_CPU_FEATURES, + "CPU Features") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_DPI, + "Display metric DPI") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_MM_HEIGHT, + "Display metric height (mm)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_MM_WIDTH, + "Display metric width (mm)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DSOUND_SUPPORT, + "DirectSound support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DYLIB_SUPPORT, + "Dynamic library support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DYNAMIC_SUPPORT, + "Dynamic run-time loading of libretro library") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_EGL_SUPPORT, + "EGL support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FBO_SUPPORT, + "OpenGL/Direct3D render-to-texture (multi-pass shaders) support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FFMPEG_SUPPORT, + "FFmpeg support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FREETYPE_SUPPORT, + "FreeType support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FRONTEND_IDENTIFIER, + "Frontend identifier") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FRONTEND_NAME, + "Frontend name") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FRONTEND_OS, + "Frontend OS") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_GIT_VERSION, + "Git version") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_GLSL_SUPPORT, + "GLSL support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_HLSL_SUPPORT, + "HLSL support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_JACK_SUPPORT, + "JACK support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_KMS_SUPPORT, + "KMS/EGL support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBRETRODB_SUPPORT, + "LibretroDB support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT, + "Libusb support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBXML2_SUPPORT, + "libxml2 XML parsing support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_NETPLAY_SUPPORT, + "Netplay (peer-to-peer) support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_NETWORK_COMMAND_IFACE_SUPPORT, + "Network Command interface support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_NETWORK_REMOTE_SUPPORT, + "Network Gamepad support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENAL_SUPPORT, + "OpenAL support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENGLES_SUPPORT, + "OpenGL ES support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENGL_SUPPORT, + "OpenGL support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENSL_SUPPORT, + "OpenSL support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENVG_SUPPORT, + "OpenVG support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OSS_SUPPORT, + "OSS support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OVERLAY_SUPPORT, + "Overlay support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE, + "Power source") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_CHARGED, + "Charged") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_CHARGING, + "Charging") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_DISCHARGING, + "Discharging") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_NO_SOURCE, + "No source") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PULSEAUDIO_SUPPORT, + "PulseAudio support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PYTHON_SUPPORT, + "Python (script support in shaders) support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RBMP_SUPPORT, + "BMP support (RBMP)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RETRORATING_LEVEL, + "RetroRating level") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RJPEG_SUPPORT, + "JPEG support (RJPEG)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_ROARAUDIO_SUPPORT, + "RoarAudio support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RPNG_SUPPORT, + "PNG support (RPNG)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RSOUND_SUPPORT, + "RSound support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RTGA_SUPPORT, + "TGA support (RTGA)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL2_SUPPORT, + "SDL2 support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL_IMAGE_SUPPORT, + "SDL image support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL_SUPPORT, + "SDL1.2 support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SLANG_SUPPORT, + "Slang support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_THREADING_SUPPORT, + "Threading support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_UDEV_SUPPORT, + "Udev support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_V4L2_SUPPORT, + "Video4Linux2 support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_VIDEO_CONTEXT_DRIVER, + "Video context driver") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_VULKAN_SUPPORT, + "Vulkan support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_WAYLAND_SUPPORT, + "Wayland support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_X11_SUPPORT, + "X11 support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_XAUDIO2_SUPPORT, + "XAudio2 support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_XVIDEO_SUPPORT, + "XVideo support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_ZLIB_SUPPORT, + "Zlib support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_TAKE_SCREENSHOT, + "Take Screenshot") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THREADED_DATA_RUNLOOP_ENABLE, + "Threaded data runloop") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAILS, + "Thumbnails") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAILS_DIRECTORY, + "Thumbnails") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAILS_UPDATER_LIST, + "Thumbnails Updater") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_BOXARTS, + "Boxarts") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_SCREENSHOTS, + "Screenshots") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_TITLE_SCREENS, + "Title Screens") +MSG_HASH(MENU_ENUM_LABEL_VALUE_TIMEDATE_ENABLE, + "Display time / date") +MSG_HASH(MENU_ENUM_LABEL_VALUE_TITLE_COLOR, + "Menu title color") +MSG_HASH(MENU_ENUM_LABEL_VALUE_TRUE, + "True") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UI_COMPANION_ENABLE, + "UI Companion Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UI_COMPANION_START_ON_BOOT, + "UI Companion Start On Boot") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UI_MENUBAR_ENABLE, + "Menubar") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UNABLE_TO_READ_COMPRESSED_FILE, + "Unable to read compressed file.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UNDO_LOAD_STATE, + "Undo Load State") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UNDO_SAVE_STATE, + "Undo Save State") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UNKNOWN, + "Unknown") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATER_SETTINGS, + "Updater") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_ASSETS, + "Update Assets") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_AUTOCONFIG_PROFILES, + "Update Autoconfig Profiles") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_CG_SHADERS, + "Update Cg Shaders") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_CHEATS, + "Update Cheats") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_CORE_INFO_FILES, + "Update Core Info Files") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_DATABASES, + "Update Databases") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_GLSL_SHADERS, + "Update GLSL Shaders") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_LAKKA, + "Update Lakka") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_OVERLAYS, + "Update Overlays") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_SLANG_SHADERS, + "Update Slang Shaders") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USER, + "User") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USER_INTERFACE_SETTINGS, + "User Interface") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USER_LANGUAGE, + "Language") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USER_SETTINGS, + "User") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USE_BUILTIN_IMAGE_VIEWER, + "Use Builtin Image Viewer") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USE_BUILTIN_PLAYER, + "Use Builtin Media Player") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USE_THIS_DIRECTORY, + "") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_ALLOW_ROTATE, + "Allow rotation") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_AUTO, + "Auto Aspect Ratio") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_INDEX, + "Aspect Ratio Index") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_BLACK_FRAME_INSERTION, + "Black Frame Insertion") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_CROP_OVERSCAN, + "Crop Overscan (Reload)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_DISABLE_COMPOSITION, + "Disable Desktop Composition") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_DRIVER, + "Video Driver") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FILTER, + "Video Filter") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FILTER_DIR, + "Video Filter") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FILTER_FLICKER, + "Flicker filter") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FONT_ENABLE, + "Enable Onscreen Notifications") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FONT_PATH, + "Onscreen Notification Font") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FONT_SIZE, + "Onscreen Notification Size") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FORCE_ASPECT, + "Force aspect ratio") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FORCE_SRGB_DISABLE, + "Force-disable sRGB FBO") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FRAME_DELAY, + "Frame Delay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FULLSCREEN, + "Use Fullscreen Mode") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_GAMMA, + "Video Gamma") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_GPU_RECORD, + "Use GPU Recording") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_GPU_SCREENSHOT, + "GPU Screenshot Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_HARD_SYNC, + "Hard GPU Sync") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_HARD_SYNC_FRAMES, + "Hard GPU Sync Frames") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_MAX_SWAPCHAIN_IMAGES, + "Max swapchain images") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_MESSAGE_POS_X, + "Onscreen Notification X Position") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_MESSAGE_POS_Y, + "Onscreen Notification Y Position") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_MONITOR_INDEX, + "Monitor Index") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_POST_FILTER_RECORD, + "Use Post Filter Recording") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_REFRESH_RATE, + "Vertical Refresh Rate") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_REFRESH_RATE_AUTO, + "Estimated Monitor Framerate") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_ROTATION, + "Rotation") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SCALE, + "Windowed Scale") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SCALE_INTEGER, + "Integer Scale") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SETTINGS, + "Video") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_DIR, + "Video Shader") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_NUM_PASSES, + "Shader Passes") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PARAMETERS, + "Preview Shader Parameters") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET, + "Load Shader Preset") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_PARAMETERS, + "Menu Shader Parameters") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_AS, + "Save Shader Preset As") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_CORE, + "Save Core Preset") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_GAME, + "Save Game Preset") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHARED_CONTEXT, + "Enable Hardware Shared Context") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SMOOTH, + "HW Bilinear Filtering") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SOFT_FILTER, + "Soft Filter Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SWAP_INTERVAL, + "Vertical Sync (Vsync) Swap Interval") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_TAB, + "Video") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_THREADED, + "Threaded Video") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VFILTER, + "Deflicker") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_HEIGHT, + "Custom Viewport Height") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_WIDTH, + "Custom Viewport Width") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_X, + "Custom Viewport X Pos.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_Y, + "Custom Viewport Y Pos.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VI_WIDTH, + "Set VI Screen Width") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VSYNC, + "Vertical Sync (Vsync)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_WINDOWED_FULLSCREEN, + "Windowed Fullscreen Mode") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_WINDOW_WIDTH, + "Window Width") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_WINDOW_HEIGHT, + "Window Height") +MSG_HASH(MENU_ENUM_LABEL_VALUE_WIFI_DRIVER, + "Wi-Fi Driver") +MSG_HASH(MENU_ENUM_LABEL_VALUE_WIFI_SETTINGS, + "Wi-Fi") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ALPHA_FACTOR, + "Menu Alpha Factor") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_FONT, + "Menu Font") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_CUSTOM, + "Custom") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_FLATUI, + "FlatUI") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_MONOCHROME, + "Monochrome") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_SYSTEMATIC, + "Systematic") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_NEOACTIVE, + "NeoActive") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_PIXEL, + "Pixel") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_RETROACTIVE, + "RetroActive") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME, + "Menu Color Theme") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_APPLE_GREEN, + "Apple Green") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_DARK, + "Dark") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_DARK_PURPLE, + "Dark Purple") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_ELECTRIC_BLUE, + "Electric Blue") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_GOLDEN, + "Golden") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_LEGACY_RED, + "Legacy Red") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_MIDNIGHT_BLUE, + "Midnight Blue") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_PLAIN, + "Plain") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_UNDERSEA, + "Undersea") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_VOLCANIC_RED, + "Volcanic Red") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_RIBBON_ENABLE, + "Menu Shader Pipeline") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SCALE_FACTOR, + "Menu Scale Factor") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHADOWS_ENABLE, + "Icon Shadows Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_HISTORY, + "Show History Tab") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_IMAGES, + "Show Images Tab") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_MUSIC, + "Show Music Tab") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_SETTINGS, + "Show Settings Tab") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_VIDEO, + "Show Video Tab") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_THEME, + "Menu Icon Theme") +MSG_HASH(MENU_ENUM_LABEL_VALUE_YES, + "Yes") +MSG_HASH(MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_TWO, + "Shader Preset") +MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_ENABLE, + "Enable or disable achievements. For more information, visit http://retroachievements.org") +MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_TEST_UNOFFICIAL, + "Enable or disable unofficial achievements and/or beta features for testing purposes.") +MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_HARDCORE_MODE_ENABLE, + "Enable or disable savestates, cheats, rewind, fast-forward, pause, and slow-motion for all games.") +MSG_HASH(MENU_ENUM_SUBLABEL_DRIVER_SETTINGS, + "Change drivers for this system.") +MSG_HASH(MENU_ENUM_SUBLABEL_RETRO_ACHIEVEMENTS_SETTINGS, + "Change settings for the achievements.") +MSG_HASH(MENU_ENUM_SUBLABEL_CORE_SETTINGS, + "Change settings for the core.") +MSG_HASH(MENU_ENUM_SUBLABEL_RECORDING_SETTINGS, + "Change settings for the recording.") +MSG_HASH(MENU_ENUM_SUBLABEL_ONSCREEN_DISPLAY_SETTINGS, + "Change settings for display overlay, keyboard overlay and onscreen notifications.") +MSG_HASH(MENU_ENUM_SUBLABEL_FRAME_THROTTLE_SETTINGS, + "Change settings for rewinding, fast-forwarding, and slow-motion.") +MSG_HASH(MENU_ENUM_SUBLABEL_SAVING_SETTINGS, + "Change settings for the saving.") +MSG_HASH(MENU_ENUM_SUBLABEL_LOGGING_SETTINGS, + "Change settings for the logging.") +MSG_HASH(MENU_ENUM_SUBLABEL_USER_INTERFACE_SETTINGS, + "Change settings for the user interface.") +MSG_HASH(MENU_ENUM_SUBLABEL_USER_SETTINGS, + "Change accounts, username, and language.") +MSG_HASH(MENU_ENUM_SUBLABEL_PRIVACY_SETTINGS, + "Change your privacy settings.") +MSG_HASH(MENU_ENUM_SUBLABEL_DIRECTORY_SETTINGS, + "Change default directories for this system.") +MSG_HASH(MENU_ENUM_SUBLABEL_PLAYLIST_SETTINGS, + "Change settings for the playlists.") +MSG_HASH(MENU_ENUM_SUBLABEL_NETWORK_SETTINGS, + "Change settings for the network.") +MSG_HASH(MENU_ENUM_SUBLABEL_ADD_CONTENT_LIST, + "Scan contents and add to the database.") +MSG_HASH(MENU_ENUM_SUBLABEL_AUDIO_SETTINGS, + "Adjusts settings for audio output.") +MSG_HASH(MENU_ENUM_SUBLABEL_BLUETOOTH_ENABLE, + "Enable or disable bluetooth.") +MSG_HASH(MENU_ENUM_SUBLABEL_CONFIG_SAVE_ON_EXIT, + "Saves changes to configuration file on exit.") +MSG_HASH(MENU_ENUM_SUBLABEL_CONFIGURATION_SETTINGS, + "Change default settings for configuration files.") +MSG_HASH(MENU_ENUM_SUBLABEL_CONFIGURATIONS_LIST, + "Manage and create configuration files.") +MSG_HASH(MENU_ENUM_SUBLABEL_CPU_CORES, + "Amount of cores that the CPU has.") +MSG_HASH(MENU_ENUM_SUBLABEL_FPS_SHOW, + "Displays the current framerate per second onscreen.") +MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_HOTKEY_BINDS, + "Configure hotkey settings.") +MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO, + "Gamepad button combination to toggle menu.") +MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_SETTINGS, + "Adjusts settings for joypads, keyboard and mouse.") +MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_USER_BINDS, + "Configure controls for this user.") +MSG_HASH(MENU_ENUM_SUBLABEL_LOG_VERBOSITY, + "Enable or disable logging to the terminal.") +MSG_HASH(MENU_ENUM_SUBLABEL_NETPLAY, + "Join or host a netplay session.") +MSG_HASH(MENU_ENUM_SUBLABEL_INFORMATION_LIST_LIST, + "Display information for core, network, and system. Display manager for database and cursor.") +MSG_HASH(MENU_ENUM_SUBLABEL_ONLINE_UPDATER, + "Download add-ons, components and contents for RetroArch.") +MSG_HASH(MENU_ENUM_SUBLABEL_SAMBA_ENABLE, + "Enable or disable network sharing of your folders.") +MSG_HASH(MENU_ENUM_SUBLABEL_SERVICES_SETTINGS, + "Manage operating system level services.") +MSG_HASH(MENU_ENUM_SUBLABEL_SHOW_HIDDEN_FILES, + "Show hidden files/directories inside the file browser.") +MSG_HASH(MENU_ENUM_SUBLABEL_SSH_ENABLE, + "Enable or disable remote command line access.") +MSG_HASH(MENU_ENUM_SUBLABEL_SUSPEND_SCREENSAVER_ENABLE, + "Prevents your system's screensaver from becoming active.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_WINDOW_SCALE, + "Sets the window size relative to the core viewport size. Alternatively you can set a window width and height below for a fixed window size") +MSG_HASH(MENU_ENUM_SUBLABEL_USER_LANGUAGE, + "Sets the language of the interface.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, + "Inserts a black frame inbetween frames. Useful for users of 120 Hz monitors who want to play 60 Hz material with eliminated ghosting.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_FRAME_DELAY, + "Reduces latency at the cost of higher risk of video stuttering. Adds a delay after V-Sync (in ms).") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_HARD_SYNC_FRAMES, + "Sets how many frames the CPU can run ahead of the GPU when using 'Hard GPU Sync'.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_MAX_SWAPCHAIN_IMAGES, + "Tells the video driver to explicitly use a specified buffering mode.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_MONITOR_INDEX, + "Selects which display monitor to use.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_REFRESH_RATE_AUTO, + "The accurate estimated refresh rate of the monitor in Hz.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_SETTINGS, + "Adjusts settings for video output.") +MSG_HASH(MENU_ENUM_SUBLABEL_WIFI_SETTINGS, + "Scans for wireless networks and establishes connection.") +MSG_HASH(MENU_ENUM_SUBLABEL_HELP_LIST, + "Learn more about how it works.") +MSG_HASH(MSG_APPENDED_DISK, + "Appended disk") +MSG_HASH(MSG_APPLICATION_DIR, + "Application Dir") +MSG_HASH(MSG_APPLYING_CHEAT, + "Applying cheat changes.") +MSG_HASH(MSG_APPLYING_SHADER, + "Applying shader") +MSG_HASH(MSG_AUDIO_MUTED, + "Audio muted.") +MSG_HASH(MSG_AUDIO_UNMUTED, + "Audio unmuted.") +MSG_HASH(MSG_AUTOCONFIG_FILE_ERROR_SAVING, + "Error saving autoconf file.") +MSG_HASH(MSG_AUTOCONFIG_FILE_SAVED_SUCCESSFULLY, + "Autoconfig file saved successfully.") +MSG_HASH(MSG_AUTOSAVE_FAILED, + "Could not initialize autosave.") +MSG_HASH(MSG_AUTO_SAVE_STATE_TO, + "Auto save state to") +MSG_HASH(MSG_BLOCKING_SRAM_OVERWRITE, + "Blocking SRAM Overwrite") +MSG_HASH(MSG_BRINGING_UP_COMMAND_INTERFACE_ON_PORT, + "Bringing up command interface on port") +MSG_HASH(MSG_BYTES, + "bytes") +MSG_HASH(MSG_CANNOT_INFER_NEW_CONFIG_PATH, + "Cannot infer new config path. Use current time.") +MSG_HASH(MSG_CHEEVOS_HARDCORE_MODE_ENABLE, + "Hardcore Mode Enabled, savestate & rewind were disabled.") +MSG_HASH(MSG_COMPARING_WITH_KNOWN_MAGIC_NUMBERS, + "Comparing with known magic numbers...") +MSG_HASH(MSG_COMPILED_AGAINST_API, + "Compiled against API") +MSG_HASH(MSG_CONFIG_DIRECTORY_NOT_SET, + "Config directory not set. Cannot save new config.") +MSG_HASH(MSG_CONNECTED_TO, + "Connected to") +MSG_HASH(MSG_CONTENT_CRC32S_DIFFER, + "Content CRC32s differ. Cannot use different games.") +MSG_HASH(MSG_CONTENT_LOADING_SKIPPED_IMPLEMENTATION_WILL_DO_IT, + "Content loading skipped. Implementation will load it on its own.") +MSG_HASH(MSG_CORE_DOES_NOT_SUPPORT_SAVESTATES, + "Core does not support save states.") +MSG_HASH(MSG_CORE_OPTIONS_FILE_CREATED_SUCCESSFULLY, + "Core options file created successfully.") +MSG_HASH(MSG_COULD_NOT_FIND_ANY_NEXT_DRIVER, + "Could not find any next driver") +MSG_HASH(MSG_COULD_NOT_FIND_COMPATIBLE_SYSTEM, + "Could not find compatible system.") +MSG_HASH(MSG_COULD_NOT_FIND_VALID_DATA_TRACK, + "Could not find valid data track") +MSG_HASH(MSG_COULD_NOT_OPEN_DATA_TRACK, + "could not open data track") +MSG_HASH(MSG_COULD_NOT_READ_CONTENT_FILE, + "Could not read content file") +MSG_HASH(MSG_COULD_NOT_READ_MOVIE_HEADER, + "Could not read movie header.") +MSG_HASH(MSG_COULD_NOT_READ_STATE_FROM_MOVIE, + "Could not read state from movie.") +MSG_HASH(MSG_CRC32_CHECKSUM_MISMATCH, + "CRC32 checksum mismatch between content file and saved content checksum in replay file header) replay highly likely to desync on playback.") +MSG_HASH(MSG_CUSTOM_TIMING_GIVEN, + "Custom timing given") +MSG_HASH(MSG_DECOMPRESSION_ALREADY_IN_PROGRESS, + "Decompression already in progress.") +MSG_HASH(MSG_DECOMPRESSION_FAILED, + "Decompression failed.") +MSG_HASH(MSG_DETECTED_VIEWPORT_OF, + "Detected viewport of") +MSG_HASH(MSG_DID_NOT_FIND_A_VALID_CONTENT_PATCH, + "Did not find a valid content patch.") +MSG_HASH(MSG_DISCONNECT_DEVICE_FROM_A_VALID_PORT, + "Disconnect device from a valid port.") +MSG_HASH(MSG_DISK_CLOSED, + "Closed") +MSG_HASH(MSG_DISK_EJECTED, + "Ejected") +MSG_HASH(MSG_DOWNLOADING, + "Downloading") +MSG_HASH(MSG_DOWNLOAD_FAILED, + "Download failed") +MSG_HASH(MSG_ERROR, + "Error") +MSG_HASH(MSG_ERROR_LIBRETRO_CORE_REQUIRES_CONTENT, + "Libretro core requires content, but nothing was provided.") +MSG_HASH(MSG_ERROR_LIBRETRO_CORE_REQUIRES_SPECIAL_CONTENT, + "Libretro core requires special content, but none were provided.") +MSG_HASH(MSG_ERROR_PARSING_ARGUMENTS, + "Error parsing arguments.") +MSG_HASH(MSG_ERROR_SAVING_CORE_OPTIONS_FILE, + "Error saving core options file.") +MSG_HASH(MSG_ERROR_SAVING_REMAP_FILE, + "Error saving remap file.") +MSG_HASH(MSG_ERROR_SAVING_SHADER_PRESET, + "Error saving shader preset.") +MSG_HASH(MSG_EXTERNAL_APPLICATION_DIR, + "External Application Dir") +MSG_HASH(MSG_EXTRACTING, + "Extracting") +MSG_HASH(MSG_EXTRACTING_FILE, + "Extracting file") +MSG_HASH(MSG_FAILED_SAVING_CONFIG_TO, + "Failed saving config to") +MSG_HASH(MSG_FAILED_TO, + "Failed to") +MSG_HASH(MSG_FAILED_TO_ACCEPT_INCOMING_SPECTATOR, + "Failed to accept incoming spectator.") +MSG_HASH(MSG_FAILED_TO_ALLOCATE_MEMORY_FOR_PATCHED_CONTENT, + "Failed to allocate memory for patched content...") +MSG_HASH(MSG_FAILED_TO_APPLY_SHADER, + "Failed to apply shader.") +MSG_HASH(MSG_FAILED_TO_BIND_SOCKET, + "Failed to bind socket.") +MSG_HASH(MSG_FAILED_TO_CREATE_THE_DIRECTORY, + "Failed to create the directory.") +MSG_HASH(MSG_FAILED_TO_EXTRACT_CONTENT_FROM_COMPRESSED_FILE, + "Failed to extract content from compressed file") +MSG_HASH(MSG_FAILED_TO_GET_NICKNAME_FROM_CLIENT, + "Failed to get nickname from client.") +MSG_HASH(MSG_FAILED_TO_LOAD, + "Failed to load") +MSG_HASH(MSG_FAILED_TO_LOAD_CONTENT, + "Failed to load content") +MSG_HASH(MSG_FAILED_TO_LOAD_MOVIE_FILE, + "Failed to load movie file") +MSG_HASH(MSG_FAILED_TO_LOAD_OVERLAY, + "Failed to load overlay.") +MSG_HASH(MSG_FAILED_TO_LOAD_STATE, + "Failed to load state from") +MSG_HASH(MSG_FAILED_TO_OPEN_LIBRETRO_CORE, + "Failed to open libretro core") +MSG_HASH(MSG_FAILED_TO_PATCH, + "Failed to patch") +MSG_HASH(MSG_FAILED_TO_RECEIVE_HEADER_FROM_CLIENT, + "Failed to receive header from client.") +MSG_HASH(MSG_FAILED_TO_RECEIVE_NICKNAME, + "Failed to receive nickname.") +MSG_HASH(MSG_FAILED_TO_RECEIVE_NICKNAME_FROM_HOST, + "Failed to receive nickname from host.") +MSG_HASH(MSG_FAILED_TO_RECEIVE_NICKNAME_SIZE_FROM_HOST, + "Failed to receive nickname size from host.") +MSG_HASH(MSG_FAILED_TO_RECEIVE_SRAM_DATA_FROM_HOST, + "Failed to receive SRAM data from host.") +MSG_HASH(MSG_FAILED_TO_REMOVE_DISK_FROM_TRAY, + "Failed to remove disk from tray.") +MSG_HASH(MSG_FAILED_TO_REMOVE_TEMPORARY_FILE, + "Failed to remove temporary file") +MSG_HASH(MSG_FAILED_TO_SAVE_SRAM, + "Failed to save SRAM") +MSG_HASH(MSG_FAILED_TO_SAVE_STATE_TO, + "Failed to save state to") +MSG_HASH(MSG_FAILED_TO_SEND_NICKNAME, + "Failed to send nickname.") +MSG_HASH(MSG_FAILED_TO_SEND_NICKNAME_SIZE, + "Failed to send nickname size.") +MSG_HASH(MSG_FAILED_TO_SEND_NICKNAME_TO_CLIENT, + "Failed to send nickname to client.") +MSG_HASH(MSG_FAILED_TO_SEND_NICKNAME_TO_HOST, + "Failed to send nickname to host.") +MSG_HASH(MSG_FAILED_TO_SEND_SRAM_DATA_TO_CLIENT, + "Failed to send SRAM data to client.") +MSG_HASH(MSG_FAILED_TO_START_AUDIO_DRIVER, + "Failed to start audio driver. Will continue without audio.") +MSG_HASH(MSG_FAILED_TO_START_MOVIE_RECORD, + "Failed to start movie record.") +MSG_HASH(MSG_FAILED_TO_START_RECORDING, + "Failed to start recording.") +MSG_HASH(MSG_FAILED_TO_TAKE_SCREENSHOT, + "Failed to take screenshot.") +MSG_HASH(MSG_FAILED_TO_UNDO_LOAD_STATE, + "Failed to undo load state.") +MSG_HASH(MSG_FAILED_TO_UNDO_SAVE_STATE, + "Failed to undo save state.") +MSG_HASH(MSG_FAILED_TO_UNMUTE_AUDIO, + "Failed to unmute audio.") +MSG_HASH(MSG_FATAL_ERROR_RECEIVED_IN, + "Fatal error received in") +MSG_HASH(MSG_FILE_NOT_FOUND, + "File not found") +MSG_HASH(MSG_FOUND_AUTO_SAVESTATE_IN, + "Found auto savestate in") +MSG_HASH(MSG_FOUND_DISK_LABEL, + "Found disk label") +MSG_HASH(MSG_FOUND_FIRST_DATA_TRACK_ON_FILE, + "Found first data track on file") +MSG_HASH(MSG_FOUND_LAST_STATE_SLOT, + "Found last state slot") +MSG_HASH(MSG_FOUND_SHADER, + "Found shader") +MSG_HASH(MSG_FRAMES, + "Frames") +MSG_HASH(MSG_GAME_SPECIFIC_CORE_OPTIONS_FOUND_AT, + "Per-Game Options: game-specific core options found at") +MSG_HASH(MSG_GOT_INVALID_DISK_INDEX, + "Got invalid disk index.") +MSG_HASH(MSG_GRAB_MOUSE_STATE, + "Grab mouse state") +MSG_HASH(MSG_HW_RENDERED_MUST_USE_POSTSHADED_RECORDING, + "Libretro core is hardware rendered. Must use post-shaded recording as well.") +MSG_HASH(MSG_INFLATED_CHECKSUM_DID_NOT_MATCH_CRC32, + "Inflated checksum did not match CRC32.") +MSG_HASH(MSG_INPUT_CHEAT, + "Input Cheat") +MSG_HASH(MSG_INPUT_CHEAT_FILENAME, + "Cheat Filename") +MSG_HASH(MSG_INPUT_PRESET_FILENAME, + "Preset Filename") +MSG_HASH(MSG_INTERFACE, + "Interface") +MSG_HASH(MSG_INTERNAL_STORAGE, + "Internal Storage") +MSG_HASH(MSG_REMOVABLE_STORAGE, + "Removable Storage") +MSG_HASH(MSG_INVALID_NICKNAME_SIZE, + "Invalid nickname size.") +MSG_HASH(MSG_IN_BYTES, + "in bytes") +MSG_HASH(MSG_IN_GIGABYTES, + "in gigabytes") +MSG_HASH(MSG_IN_MEGABYTES, + "in megabytes") +MSG_HASH(MSG_LIBRETRO_ABI_BREAK, + "is compiled against a different version of libretro than this libretro implementation.") +MSG_HASH(MSG_LIBRETRO_FRONTEND, + "Frontend for libretro") +MSG_HASH(MSG_LOADED_STATE_FROM_SLOT, + "Loaded state from slot #%d.") +MSG_HASH(MSG_LOADED_STATE_FROM_SLOT_AUTO, + "Loaded state from slot #-1 (auto).") +MSG_HASH(MSG_LOADING, + "Loading") +MSG_HASH(MSG_FIRMWARE, + "One or more firmware files are missing") +MSG_HASH(MSG_LOADING_CONTENT_FILE, + "Loading content file") +MSG_HASH(MSG_LOADING_HISTORY_FILE, + "Loading history file") +MSG_HASH(MSG_LOADING_STATE, + "Loading state") +MSG_HASH(MSG_MEMORY, + "Memory") +MSG_HASH(MSG_MOVIE_FILE_IS_NOT_A_VALID_BSV1_FILE, + "Movie file is not a valid BSV1 file.") +MSG_HASH(MSG_MOVIE_FORMAT_DIFFERENT_SERIALIZER_VERSION, + "Movie format seems to have a different serializer version. Will most likely fail.") +MSG_HASH(MSG_MOVIE_PLAYBACK_ENDED, + "Movie playback ended.") +MSG_HASH(MSG_MOVIE_RECORD_STOPPED, + "Stopping movie record.") +MSG_HASH(MSG_NETPLAY_FAILED, + "Failed to initialize netplay.") +MSG_HASH(MSG_NETPLAY_FAILED_MOVIE_PLAYBACK_HAS_STARTED, + "Movie playback has started. Cannot start netplay.") +MSG_HASH(MSG_NO_CONTENT_STARTING_DUMMY_CORE, + "No content, starting dummy core.") +MSG_HASH(MSG_NO_SAVE_STATE_HAS_BEEN_OVERWRITTEN_YET, + "No save state has been overwritten yet.") +MSG_HASH(MSG_NO_STATE_HAS_BEEN_LOADED_YET, + "No state has been loaded yet.") +MSG_HASH(MSG_OVERRIDES_ERROR_SAVING, + "Error saving overrides.") +MSG_HASH(MSG_OVERRIDES_SAVED_SUCCESSFULLY, + "Overrides saved successfully.") +MSG_HASH(MSG_PAUSED, + "Paused.") +MSG_HASH(MSG_PROGRAM, + "RetroArch") +MSG_HASH(MSG_READING_FIRST_DATA_TRACK, + "Reading first data track...") +MSG_HASH(MSG_RECEIVED, + "received") +MSG_HASH(MSG_RECORDING_TERMINATED_DUE_TO_RESIZE, + "Recording terminated due to resize.") +MSG_HASH(MSG_RECORDING_TO, + "Recording to") +MSG_HASH(MSG_REDIRECTING_CHEATFILE_TO, + "Redirecting cheat file to") +MSG_HASH(MSG_REDIRECTING_SAVEFILE_TO, + "Redirecting save file to") +MSG_HASH(MSG_REDIRECTING_SAVESTATE_TO, + "Redirecting savestate to") +MSG_HASH(MSG_REMAP_FILE_SAVED_SUCCESSFULLY, + "Remap file saved successfully.") +MSG_HASH(MSG_REMOVED_DISK_FROM_TRAY, + "Removed disk from tray.") +MSG_HASH(MSG_REMOVING_TEMPORARY_CONTENT_FILE, + "Removing temporary content file") +MSG_HASH(MSG_RESET, + "Reset") +MSG_HASH(MSG_RESTARTING_RECORDING_DUE_TO_DRIVER_REINIT, + "Restarting recording due to driver reinit.") +MSG_HASH(MSG_RESTORED_OLD_SAVE_STATE, + "Restored old save state.") +MSG_HASH(MSG_RESTORING_DEFAULT_SHADER_PRESET_TO, + "Shaders: restoring default shader preset to") +MSG_HASH(MSG_REVERTING_SAVEFILE_DIRECTORY_TO, + "Reverting savefile directory to") +MSG_HASH(MSG_REVERTING_SAVESTATE_DIRECTORY_TO, + "Reverting savestate directory to") +MSG_HASH(MSG_REWINDING, + "Rewinding.") +MSG_HASH(MSG_REWIND_INIT, + "Initializing rewind buffer with size") +MSG_HASH(MSG_REWIND_INIT_FAILED, + "Failed to initialize rewind buffer. Rewinding will be disabled.") +MSG_HASH(MSG_REWIND_INIT_FAILED_THREADED_AUDIO, + "Implementation uses threaded audio. Cannot use rewind.") +MSG_HASH(MSG_REWIND_REACHED_END, + "Reached end of rewind buffer.") +MSG_HASH(MSG_SAVED_NEW_CONFIG_TO, + "Saved new config to") +MSG_HASH(MSG_SAVED_STATE_TO_SLOT, + "Saved state to slot #%d.") +MSG_HASH(MSG_SAVED_STATE_TO_SLOT_AUTO, + "Saved state to slot #-1 (auto).") +MSG_HASH(MSG_SAVED_SUCCESSFULLY_TO, + "Saved successfully to") +MSG_HASH(MSG_SAVING_RAM_TYPE, + "Saving RAM type") +MSG_HASH(MSG_SAVING_STATE, + "Saving state") +MSG_HASH(MSG_SCANNING, + "Scanning") +MSG_HASH(MSG_SCANNING_OF_DIRECTORY_FINISHED, + "Scanning of directory finished") +MSG_HASH(MSG_SENDING_COMMAND, + "Sending command") +MSG_HASH(MSG_SEVERAL_PATCHES_ARE_EXPLICITLY_DEFINED, + "Several patches are explicitly defined, ignoring all...") +MSG_HASH(MSG_SHADER, + "Shader") +MSG_HASH(MSG_SHADER_PRESET_SAVED_SUCCESSFULLY, + "Shader preset saved successfully.") +MSG_HASH(MSG_SKIPPING_SRAM_LOAD, + "Skipping SRAM load.") +MSG_HASH(MSG_SLOW_MOTION, + "Slow motion.") +MSG_HASH(MSG_SLOW_MOTION_REWIND, + "Slow motion rewind.") +MSG_HASH(MSG_SRAM_WILL_NOT_BE_SAVED, + "SRAM will not be saved.") +MSG_HASH(MSG_STARTING_MOVIE_PLAYBACK, + "Starting movie playback.") +MSG_HASH(MSG_STARTING_MOVIE_RECORD_TO, + "Starting movie record to") +MSG_HASH(MSG_STATE_SIZE, + "State size") +MSG_HASH(MSG_STATE_SLOT, + "State slot") +MSG_HASH(MSG_TAKING_SCREENSHOT, + "Taking screenshot.") +MSG_HASH(MSG_TO, + "to") +MSG_HASH(MSG_UNDID_LOAD_STATE, + "Undid load state.") +MSG_HASH(MSG_UNDOING_SAVE_STATE, + "Undoing save state") +MSG_HASH(MSG_UNKNOWN, + "Unknown") +MSG_HASH(MSG_UNPAUSED, + "Unpaused.") +MSG_HASH(MSG_UNRECOGNIZED_COMMAND, + "Unrecognized command") +MSG_HASH(MSG_USING_CORE_NAME_FOR_NEW_CONFIG, + "Using core name for new config.") +MSG_HASH(MSG_USING_LIBRETRO_DUMMY_CORE_RECORDING_SKIPPED, + "Using libretro dummy core. Skipping recording.") +MSG_HASH(MSG_VALUE_CONNECT_DEVICE_FROM_A_VALID_PORT, + "Connect device from a valid port.") +MSG_HASH(MSG_VALUE_DISCONNECTING_DEVICE_FROM_PORT, + "Disconnecting device from port") +MSG_HASH(MSG_VALUE_REBOOTING, + "Rebooting...") +MSG_HASH(MSG_VALUE_SHUTTING_DOWN, + "Shutting down...") +MSG_HASH(MSG_VERSION_OF_LIBRETRO_API, + "Version of libretro API") +MSG_HASH(MSG_VIEWPORT_SIZE_CALCULATION_FAILED, + "Viewport size calculation failed! Will continue using raw data. This will probably not work right ...") +MSG_HASH(MSG_VIRTUAL_DISK_TRAY, + "virtual disk tray.") +MSG_HASH(MENU_ENUM_SUBLABEL_AUDIO_LATENCY, + "Desired audio latency in milliseconds. Might not be honored if the audio driver can't provide given latency.") +MSG_HASH(MENU_ENUM_SUBLABEL_AUDIO_MUTE, + "Mute/unmute audio.") +MSG_HASH( + MENU_ENUM_SUBLABEL_AUDIO_RATE_CONTROL_DELTA, + "Helps smooth out imperfections in timing when synchronizing audio and video at the same time. Be aware that if disabled, proper synchronization is nearly impossible to obtain." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CAMERA_ALLOW, + "Allow or disallow camera access by cores." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_LOCATION_ALLOW, + "Allow or disallow location services access by cores." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_MAX_USERS, + "Maximum amount of users supported by RetroArch." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_POLL_TYPE_BEHAVIOR, + "Influence how input polling is done inside RetroArch. Setting it to 'Early' or 'Late' can result in less latency, depending on your configuration." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_ALL_USERS_CONTROL_MENU, + "Allows any user to control the menu. If disabled, only User 1 can control the menu." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_AUDIO_VOLUME, + "Audio volume (in dB). 0 dB is normal volume, no gain applied." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_AUDIO_SYNC, + "Synchronize audio. Recommended." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_AXIS_THRESHOLD, + "How far an axis must be tilted to result in a button press." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_BIND_TIMEOUT, + "Amount of seconds to wait until proceeding to the next bind." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_TURBO_PERIOD, + "Describes the period of which turbo-enabled buttons toggle. Numbers are described in frames." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_DUTY_CYCLE, + "Describes how long the period of a turbo-enabled button should be. Numbers are described in frames." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_VIDEO_VSYNC, + "Synchronizes the output video of the graphics card to the refresh rate of the monitor. Recommended." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_VIDEO_ALLOW_ROTATE, + "Allow cores to set rotation. When disabled, rotation requests are ignored. Useful for setups where one manually rotates the monitor." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_DUMMY_ON_CORE_SHUTDOWN, + "Some cores might have a shutdown feature. If enabled, it will prevent the core from shutting RetroArch down. Instead, it loads a dummy core." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CHECK_FOR_MISSING_FIRMWARE, + "Check if all the required firmware is present before attempting to load content." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_VIDEO_REFRESH_RATE, + "Vertical refresh rate of your monitor. Used to calculate a suitable audio input rate. NOTE: This will be ignored if 'Threaded Video' is enabled." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_AUDIO_ENABLE, + "Enable audio output." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_AUDIO_MAX_TIMING_SKEW, + "The maximum change in audio input rate. You may want to increase this to enable very large changes in timing, for example running PAL cores on NTSC displays, at the cost of inaccurate audio pitch." + ) +MSG_HASH( + MSG_FAILED, + "failed" + ) +MSG_HASH( + MSG_SUCCEEDED, + "succeeded" + ) +MSG_HASH( + MSG_DEVICE_NOT_CONFIGURED, + "not configured" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST, + "Database Cursor List" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_DEVELOPER, + "Database - Filter : Developer" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_PUBLISHER, + "Database - Filter : Publisher" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_DISABLED, + "Disabled" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ENABLED, + "Enabled" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONTENT_HISTORY_PATH, + "Content History Path" + ) +MSG_HASH( + MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_ORIGIN, + "Database - Filter : Origin") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_FRANCHISE, + "Database - Filter : Franchise") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_ESRB_RATING, + "Database - Filter : ESRB Rating") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_ELSPA_RATING, + "Database - Filter : ELSPA Rating") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_PEGI_RATING, + "Database - Filter : PEGI Rating") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_CERO_RATING, + "Database - Filter : CERO Rating") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_BBFC_RATING, + "Database - Filter : BBFC Rating") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_MAX_USERS, + "Database - Filter : Max Users") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_RELEASEDATE_BY_MONTH, + "Database - Filter : Releasedate By Month") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_RELEASEDATE_BY_YEAR, + "Database - Filter : Releasedate By Year") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_EDGE_MAGAZINE_ISSUE, + "Database - Filter : Edge Magazine Issue") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_EDGE_MAGAZINE_RATING, + "Database - Filter : Edge Magazine Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_DATABASE_INFO, + "Database Info") +MSG_HASH(MENU_ENUM_SUBLABEL_PAUSE_NONACTIVE, + "Pause gameplay when window focus is lost.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_DISABLE_COMPOSITION, + "Enable or disable composition (Windows only).") +MSG_HASH(MENU_ENUM_SUBLABEL_HISTORY_LIST_ENABLE, + "Enable or disable recent playlist for games, images, music, and videos.") +MSG_HASH(MENU_ENUM_SUBLABEL_CONTENT_HISTORY_SIZE, + "Limit the number of entries in recent playlist for games, images, music, and videos.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_UNIFIED_MENU_CONTROLS, + "Unified Menu Controls") +MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_UNIFIED_MENU_CONTROLS, + "Use the same controls for both the menu and the game. Applies to the keyboard.") diff --git a/intl/msg_hash_es.c b/intl/msg_hash_es.c index 34290b518b..6b9d709e88 100644 --- a/intl/msg_hash_es.c +++ b/intl/msg_hash_es.c @@ -1298,8 +1298,6 @@ const char *msg_hash_to_str_es(enum msg_hash_enums msg) return "¿Qué es un núcleo?"; case MENU_ENUM_LABEL_VALUE_INFORMATION_LIST: return "Información"; - case MENU_ENUM_LABEL_VALUE_INPUT_BACK_AS_MENU_ENUM_TOGGLE_ENABLE: - return "Permitir alternar Back como menú"; case MENU_ENUM_LABEL_VALUE_INPUT_ICADE_ENABLE: return "Activar asignar mando al teclado"; case MENU_ENUM_LABEL_VALUE_INPUT_KEYBOARD_GAMEPAD_MAPPING_TYPE: @@ -1617,10 +1615,8 @@ const char *msg_hash_to_str_es(enum msg_hash_enums msg) return "Etiqueta del núcleo"; case MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_NAME: return "Nombre del núcleo"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_NOTES: - return "Notas del núcleo"; case MENU_ENUM_LABEL_VALUE_CORE_INFO_FIRMWARE: - return "Firmware"; + return "Firmware(s)"; case MENU_ENUM_LABEL_VALUE_CORE_INFO_LICENSES: return "Licencia(s)"; case MENU_ENUM_LABEL_VALUE_CORE_INFO_PERMISSIONS: @@ -1762,8 +1758,6 @@ const char *msg_hash_to_str_es(enum msg_hash_enums msg) return "Carpeta de autoconfiguración de dispositivo de entrada"; case MENU_ENUM_LABEL_VALUE_JOYPAD_DRIVER: return "Controlador de joypad"; - case MENU_ENUM_LABEL_VALUE_KEYBOARD_OVERLAY_PRESET: - return "Preajuste de teclado superpuesto"; case MENU_ENUM_LABEL_VALUE_LANG_CHINESE_SIMPLIFIED: return "Chino (Simplificado)"; case MENU_ENUM_LABEL_VALUE_LANG_CHINESE_TRADITIONAL: diff --git a/intl/msg_hash_fr.c b/intl/msg_hash_fr.c index 6d7b370e27..82e2d48249 100644 --- a/intl/msg_hash_fr.c +++ b/intl/msg_hash_fr.c @@ -56,1032 +56,7 @@ const char *msg_hash_to_str_fr(enum msg_hash_enums msg) { switch (msg) { - case MENU_ENUM_LABEL_AUDIO_BLOCK_FRAMES: - return "audio_block_frames"; - case MENU_ENUM_LABEL_CONTENT_HISTORY_SIZE: - return "Taille de l'historique"; - case MENU_ENUM_LABEL_VALUE_ACCOUNTS_LIST: - return "Comptes en ligne"; - case MENU_ENUM_LABEL_VALUE_ADD_CONTENT_LIST: - return "Ajouter du contenu"; - case MENU_ENUM_LABEL_VALUE_ADD_TAB: - return "Scanner"; - case MENU_ENUM_LABEL_VALUE_ARCHIVE_MODE: - return "Mode d'ouverture des archives"; - case MENU_ENUM_LABEL_VALUE_ASK_ARCHIVE: - return "Demander"; - case MENU_ENUM_LABEL_VALUE_ASSETS_DIRECTORY: - return "Dossier des assets"; - case MENU_ENUM_LABEL_VALUE_AUDIO_BLOCK_FRAMES: - return "Block Frames"; - case MENU_ENUM_LABEL_VALUE_AUDIO_DEVICE: - return "Carte son"; - case MENU_ENUM_LABEL_VALUE_AUDIO_DRIVER: - return "Pilote audio"; - case MENU_ENUM_LABEL_VALUE_AUDIO_DSP_PLUGIN: - return "Module DSP"; - case MENU_ENUM_LABEL_VALUE_AUDIO_ENABLE: - return "Activer le son"; - case MENU_ENUM_LABEL_VALUE_AUDIO_FILTER_DIR: - return "Dossier des filtres audio"; - case MENU_ENUM_LABEL_VALUE_AUDIO_LATENCY: - return "Latence audio (ms)"; - case MENU_ENUM_LABEL_VALUE_AUDIO_MAX_TIMING_SKEW: - return "Limite max de l'ajustement"; - case MENU_ENUM_LABEL_VALUE_AUDIO_MUTE: - return "Muet"; - case MENU_ENUM_LABEL_VALUE_AUDIO_OUTPUT_RATE: - return "Fréquence de sortie (KHz)"; - case MENU_ENUM_LABEL_VALUE_AUDIO_RATE_CONTROL_DELTA: - return "Delta du taux de contrôle"; - case MENU_ENUM_LABEL_VALUE_AUDIO_RESAMPLER_DRIVER: - return "Pilote de ré-échantillonage audio"; - case MENU_ENUM_LABEL_VALUE_AUDIO_SETTINGS: - return "Audio"; - case MENU_ENUM_LABEL_VALUE_AUDIO_SYNC: - return "Synchroniser le son"; - case MENU_ENUM_LABEL_VALUE_AUDIO_VOLUME: - return "Volume sonnore (dB)"; - case MENU_ENUM_LABEL_VALUE_AUTOSAVE_INTERVAL: - return "Intervale de sauvegarde SaveRAM"; - case MENU_ENUM_LABEL_VALUE_AUTO_OVERRIDES_ENABLE: - return "Charger les fichiers d'override automatiquement"; - case MENU_ENUM_LABEL_VALUE_AUTO_REMAPS_ENABLE: - return "Charger les fichiers remaps automatiquement"; - case MENU_ENUM_LABEL_VALUE_BLOCK_SRAM_OVERWRITE: - return "Ne pas écraser la SaveRAM en chargeant la savestate"; - case MENU_ENUM_LABEL_VALUE_BUILDBOT_ASSETS_URL: - return "URL du buildbot des assets"; - case MENU_ENUM_LABEL_VALUE_CACHE_DIRECTORY: /* FIXME/UPDATE */ - return "Dossier d'extraction"; - case MENU_ENUM_LABEL_VALUE_CAMERA_ALLOW: - return "Autoriser la caméra"; - case MENU_ENUM_LABEL_VALUE_CAMERA_DRIVER: - return "Pilote de caméra"; - case MENU_ENUM_LABEL_VALUE_CHEAT: - return "Triche"; - case MENU_ENUM_LABEL_VALUE_CHEAT_APPLY_CHANGES: - return "Appliquer les changements"; - case MENU_ENUM_LABEL_VALUE_CHEAT_DATABASE_PATH: - return "Dossier des fichiers de triche"; - case MENU_ENUM_LABEL_VALUE_CHEAT_NUM_PASSES: - return "Nombre de passages"; - case MENU_ENUM_LABEL_VALUE_CLOSE_CONTENT: - return "Quitter"; - case MENU_ENUM_LABEL_VALUE_COLLAPSE_SUBGROUPS_ENABLE: - return "Fusionner les sous-groupes"; - case MENU_ENUM_LABEL_VALUE_CONFIGURATIONS: - return "Charger une configuration"; - case MENU_ENUM_LABEL_VALUE_CONFIGURATION_SETTINGS: - return "Configurations"; - case MENU_ENUM_LABEL_VALUE_CONFIG_SAVE_ON_EXIT: - return "Sauver la config en quittant"; - case MENU_ENUM_LABEL_VALUE_CONTENT_COLLECTION_LIST: - return "Collections"; - case MENU_ENUM_LABEL_VALUE_CONTENT_DATABASE_DIRECTORY: - return "Dossier des bases de données de contenus"; - case MENU_ENUM_LABEL_VALUE_CONTENT_HISTORY_SIZE: - return "Taille de l'historique"; - case MENU_ENUM_LABEL_VALUE_CONTENT_SETTINGS: - return "Menu rapide"; - case MENU_ENUM_LABEL_VALUE_CORE_ASSETS_DIRECTORY: - return "Dossier des téléchargements"; - case MENU_ENUM_LABEL_VALUE_CORE_CHEAT_OPTIONS: - return "Triche"; - case MENU_ENUM_LABEL_VALUE_CORE_ENABLE: - return "Afficher le coeur actuel"; - case MENU_ENUM_LABEL_VALUE_CORE_INFORMATION: - return "Informations sur le coeur"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_AUTHORS: - return "Auteurs"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_CATEGORIES: - return "Catégories"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_LABEL: - return "Label"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_NAME: - return "Nom"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_NOTES: - return "Notes"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_FIRMWARE: - return "Firmware"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_LICENSES: - return "Licence(s)"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_PERMISSIONS: - return "Permissions"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_SUPPORTED_EXTENSIONS: - return "Extensions supportées"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_SYSTEM_MANUFACTURER: - return "Fabricant du système"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_SYSTEM_NAME: - return "Système"; - case MENU_ENUM_LABEL_VALUE_CORE_INPUT_REMAPPING_OPTIONS: - return "Remap d'entrées"; - case MENU_ENUM_LABEL_VALUE_CORE_LIST: - return "Charger un coeur"; - case MENU_ENUM_LABEL_VALUE_CORE_OPTIONS: - return "Options"; - case MENU_ENUM_LABEL_VALUE_CORE_SETTINGS: - return "Coeurs"; - case MENU_ENUM_LABEL_VALUE_CORE_SET_SUPPORTS_NO_CONTENT_ENABLE: /* TODO/FIXME */ - return "Ne pas démarrer de coeur automatiquement"; - case MENU_ENUM_LABEL_VALUE_CORE_SPECIFIC_CONFIG: - return "Avoir une configuration par-coeur"; - case MENU_ENUM_LABEL_VALUE_CORE_UPDATER_AUTO_EXTRACT_ARCHIVE: - return "Extraire automatiquement"; - case MENU_ENUM_LABEL_VALUE_CORE_UPDATER_BUILDBOT_URL: - return "URL du buildbot des coeurs"; - case MENU_ENUM_LABEL_VALUE_CORE_UPDATER_LIST: - return "Mise à jour des coeurs"; - case MENU_ENUM_LABEL_VALUE_CORE_UPDATER_SETTINGS: - return "Mises à jour"; - case MENU_ENUM_LABEL_VALUE_CURSOR_DIRECTORY: - return "Dossier des curseurs"; - case MENU_ENUM_LABEL_VALUE_CURSOR_MANAGER: - return "Gestion des curseurs"; - case MENU_ENUM_LABEL_VALUE_CUSTOM_RATIO: - return "Forcer une résolution"; - case MENU_ENUM_LABEL_VALUE_DATABASE_MANAGER: - return "Gestion de la base de données"; - case MENU_ENUM_LABEL_VALUE_DETECT_CORE_LIST: - return "Via les fichiers (détecter le coeur)"; - case MENU_ENUM_LABEL_VALUE_DIRECTORY_CONTENT: - return ""; - case MENU_ENUM_LABEL_VALUE_DIRECTORY_DEFAULT: - return ""; - case MENU_ENUM_LABEL_VALUE_DIRECTORY_NONE: - return ""; - case MENU_ENUM_LABEL_VALUE_DIRECTORY_NOT_FOUND: - return "Dossier non trouvé."; - case MENU_ENUM_LABEL_VALUE_DIRECTORY_SETTINGS: - return "Dossiers"; - case MENU_ENUM_LABEL_VALUE_DISABLED: - return "Désactivé"; - case MENU_ENUM_LABEL_VALUE_DISK_CYCLE_TRAY_STATUS: - return "État du lecteur de disque"; - case MENU_ENUM_LABEL_VALUE_DISK_IMAGE_APPEND: - return "Ajouter une image de disque"; - case MENU_ENUM_LABEL_VALUE_DISK_INDEX: - return "Numéro du disque"; - case MENU_ENUM_LABEL_VALUE_DISK_OPTIONS: - return "Disques"; - case MENU_ENUM_LABEL_VALUE_DONT_CARE: - return "Peu importe"; - case MENU_ENUM_LABEL_VALUE_DOWNLOADED_FILE_DETECT_CORE_LIST: /* FIXME/TODO - rewrite */ - return "Via les téléchargements (détecter le coeur)"; - case MENU_ENUM_LABEL_VALUE_DOWNLOAD_CORE_CONTENT: - return "Télécharger du contenu"; - case MENU_ENUM_LABEL_VALUE_DPI_OVERRIDE_ENABLE: - return "Personnaliser le DPI"; - case MENU_ENUM_LABEL_VALUE_DPI_OVERRIDE_VALUE: - return "Valeur du DPI personnalisé"; - case MENU_ENUM_LABEL_VALUE_DRIVER_SETTINGS: - return "Pilotes"; - case MENU_ENUM_LABEL_VALUE_DUMMY_ON_CORE_SHUTDOWN: - return "Utiliser un faux coeur lorsqu'il n'y en a pas"; - case MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPER: - return "Fond d'écran dynamique"; - case MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPERS_DIRECTORY: - return "Dossier des fonds d'écran dynamiques"; - case MENU_ENUM_LABEL_VALUE_ENTRY_HOVER_COLOR: - return "Couleur de l'entrée active"; - case MENU_ENUM_LABEL_VALUE_ENTRY_NORMAL_COLOR: - return "Couleur des entrées du menu"; - case MENU_ENUM_LABEL_VALUE_FALSE: - return "Faux"; - case MENU_ENUM_LABEL_VALUE_FASTFORWARD_RATIO: - return "Vitesse de l'avance rapide"; - case MENU_ENUM_LABEL_VALUE_FPS_SHOW: - return "Afficher le FPS"; - case MENU_ENUM_LABEL_VALUE_FRAME_THROTTLE_ENABLE: - return "Limiter la vitesse d'exécution"; - case MENU_ENUM_LABEL_VALUE_FRAME_THROTTLE_SETTINGS: - return "Vitesse d'affichage"; - case MENU_ENUM_LABEL_VALUE_FRONTEND_COUNTERS: - return "Compteurs du Frontend"; - case MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_OPTIONS: - return "Options du coeur par-jeu"; - case MENU_ENUM_LABEL_VALUE_HELP: - return "Aide"; - case MENU_ENUM_LABEL_VALUE_HELP_LIST: - return "Aide"; - case MENU_ENUM_LABEL_VALUE_HISTORY_LIST_ENABLE: - return "Afficher l'historique"; - case MENU_ENUM_LABEL_VALUE_HISTORY_TAB: - return "Historique"; - case MENU_ENUM_LABEL_VALUE_HORIZONTAL_MENU: - return "Horizontal Menu"; - case MENU_ENUM_LABEL_VALUE_INFORMATION_LIST: - return "Informations"; - case MENU_ENUM_LABEL_VALUE_INPUT_AUTODETECT_ENABLE: - return "Activer l'autoconfiguration"; - case MENU_ENUM_LABEL_VALUE_INPUT_AXIS_THRESHOLD: - return "Seuil des axes"; - case MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_HIDE_UNBOUND: - return "Cacher les remaps non mappés des coeurs"; - case MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_LABEL_SHOW: /* FIXME/UPDATE */ - return "Afficher les remaps du coeur"; - case MENU_ENUM_LABEL_VALUE_INPUT_DRIVER: - return "Pilote des entrées"; - case MENU_ENUM_LABEL_VALUE_INPUT_DUTY_CYCLE: - return "Rapport de cycle"; - case MENU_ENUM_LABEL_VALUE_INPUT_HOTKEY_BINDS: - return "Racourcis d'entrées"; - case MENU_ENUM_LABEL_VALUE_INPUT_MAX_USERS: - return "Nombre d'utilisateurs"; - case MENU_ENUM_LABEL_VALUE_INPUT_OSK_OVERLAY_ENABLE: - return "Afficher l'overlay clavier"; - case MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_ENABLE: - return "Activer les overlays"; - case MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_HIDE_IN_MENU: - return "Cacher l'overlay dans le menu"; - case MENU_ENUM_LABEL_VALUE_INPUT_REMAPPING_DIRECTORY: - return "Dossier de remaps d'entrées"; - case MENU_ENUM_LABEL_VALUE_INPUT_REMAP_BINDS_ENABLE: - return "Autoriser le remapping des entrées"; - case MENU_ENUM_LABEL_VALUE_INPUT_SETTINGS: - return "Entrées"; - case MENU_ENUM_LABEL_VALUE_INPUT_TURBO_PERIOD: - return "Délai du turbo"; - case MENU_ENUM_LABEL_VALUE_INPUT_USER_BINDS: - return "Entrées utilisateur %u"; - case MENU_ENUM_LABEL_VALUE_JOYPAD_AUTOCONFIG_DIR: - return "Dossier des autoconfigs d'entrées"; - case MENU_ENUM_LABEL_VALUE_JOYPAD_DRIVER: - return "Pilote des manettes"; - case MENU_ENUM_LABEL_VALUE_KEYBOARD_OVERLAY_PRESET: - return "Préréglages d'overlay clavier"; - case MENU_ENUM_LABEL_VALUE_LANG_CHINESE_SIMPLIFIED: - return "Chinois (Simplifié)"; - case MENU_ENUM_LABEL_VALUE_LANG_CHINESE_TRADITIONAL: - return "Chinois (Traditionnel)"; - case MENU_ENUM_LABEL_VALUE_LANG_DUTCH: - return "Néerlandais"; - case MENU_ENUM_LABEL_VALUE_LANG_ENGLISH: - return "Anglais"; - case MENU_ENUM_LABEL_VALUE_LANG_ESPERANTO: - return "Esperanto"; - case MENU_ENUM_LABEL_VALUE_LANG_FRENCH: - return "Français"; - case MENU_ENUM_LABEL_VALUE_LANG_GERMAN: - return "Allemand"; - case MENU_ENUM_LABEL_VALUE_LANG_ITALIAN: - return "Italien"; - case MENU_ENUM_LABEL_VALUE_LANG_JAPANESE: - return "Japonais"; - case MENU_ENUM_LABEL_VALUE_LANG_KOREAN: - return "Coréen"; - case MENU_ENUM_LABEL_VALUE_LANG_PORTUGUESE: - return "Portuguais"; - case MENU_ENUM_LABEL_VALUE_LANG_RUSSIAN: - return "Russe"; - case MENU_ENUM_LABEL_VALUE_LANG_SPANISH: - return "Espagnol"; - case MENU_ENUM_LABEL_VALUE_LEFT_ANALOG: - return "Stick analogique gauche"; - case MENU_ENUM_LABEL_VALUE_LIBRETRO_DIR_PATH: - return "Dossier des coeurs"; - case MENU_ENUM_LABEL_VALUE_LIBRETRO_INFO_PATH: - return "Dossier des informations des coeurs"; - case MENU_ENUM_LABEL_VALUE_LIBRETRO_LOG_LEVEL: - return "Verbosité des journaux des coeurs"; - case MENU_ENUM_LABEL_VALUE_LINEAR: - return "Linéaire"; - case MENU_ENUM_LABEL_VALUE_LOAD_ARCHIVE: - return "Charger l'archive"; - case MENU_ENUM_LABEL_VALUE_LOAD_CONTENT: - return "Via les fichiers"; - case MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_HISTORY: - return "Récemment ouvert"; - case MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_LIST: - return "Charger du contenu"; - case MENU_ENUM_LABEL_VALUE_LOAD_STATE: - return "Charger une savestate"; - case MENU_ENUM_LABEL_VALUE_LOCATION_ALLOW: - return "Autoriser la localisation"; - case MENU_ENUM_LABEL_VALUE_LOCATION_DRIVER: - return "Pilote de localisation"; - case MENU_ENUM_LABEL_VALUE_LOGGING_SETTINGS: - return "Journaux"; - case MENU_ENUM_LABEL_VALUE_LOG_VERBOSITY: - return "Verbosité des journaux"; - case MENU_ENUM_LABEL_VALUE_MAIN_MENU: - return "Menu principal"; - case MENU_ENUM_LABEL_VALUE_MANAGEMENT: - return "Gestion avancée"; - case MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME: - return "Dégradé de font d'écran"; - case MENU_ENUM_LABEL_VALUE_MENU_DRIVER: - return "Pilote de menu"; - case MENU_ENUM_LABEL_VALUE_MENU_FILE_BROWSER_SETTINGS: - return "Navigateur de fichiers"; - case MENU_ENUM_LABEL_VALUE_MENU_LINEAR_FILTER: - return "Filtre linéaire"; - case MENU_ENUM_LABEL_VALUE_MENU_SETTINGS: - return "Menu"; - case MENU_ENUM_LABEL_VALUE_MENU_WALLPAPER: - return "Fond d'écran"; - case MENU_ENUM_LABEL_VALUE_MISSING: - return "Manquant"; - case MENU_ENUM_LABEL_VALUE_MOUSE_ENABLE: - return "Support de la souris"; - case MENU_ENUM_LABEL_VALUE_MULTIMEDIA_SETTINGS: - return "Multimédia"; - case MENU_ENUM_LABEL_VALUE_NAVIGATION_BROWSER_FILTER_SUPPORTED_EXTENSIONS_ENABLE: - return "Filtrer par extentions supportées"; /* TODO/FIXME - rewrite */ - case MENU_ENUM_LABEL_VALUE_NAVIGATION_WRAPAROUND: - return "Saut-retour"; - case MENU_ENUM_LABEL_VALUE_NEAREST: - return "Au plus proche"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_CLIENT_SWAP_INPUT: /* TODO: Original string changed */ - return "Inverser les entrées du jeu en réseau"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_DELAY_FRAMES: - return "Netplay Delay Frames"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE: - return "Autoriser le jeu en réseau"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_IP_ADDRESS: /* TODO: Original string changed */ - return "Adresse IP"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_MODE: - return "Activer le mode client"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_NICKNAME: - return "Nom d'utilisateur"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_SPECTATOR_MODE_ENABLE: - return "Activer le mode spectateur"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_TCP_UDP_PORT: - return "Port TCP/UDP du jeu en réseau"; - case MENU_ENUM_LABEL_VALUE_NETWORK_CMD_ENABLE: - return "Commandes réseau"; - case MENU_ENUM_LABEL_VALUE_NETWORK_CMD_PORT: - return "Port des commandes réseau"; - case MENU_ENUM_LABEL_VALUE_NETWORK_REMOTE_ENABLE: - return "Manette réseau"; - case MENU_ENUM_LABEL_VALUE_NETWORK_SETTINGS: - return "Réseau"; - case MENU_ENUM_LABEL_VALUE_NO: - return "Non"; - case MENU_ENUM_LABEL_VALUE_NONE: - return "Aucun"; - case MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE: - return "Indisponible"; - case MENU_ENUM_LABEL_VALUE_NO_CORE: - return "Aucun coeur"; - case MENU_ENUM_LABEL_VALUE_NO_CORES_AVAILABLE: - return "Aucun coeur disponible."; - case MENU_ENUM_LABEL_VALUE_NO_CORE_INFORMATION_AVAILABLE: - return "Pas d'informations disponibles."; - case MENU_ENUM_LABEL_VALUE_NO_CORE_OPTIONS_AVAILABLE: - return "Pas d'options disponibles."; - case MENU_ENUM_LABEL_VALUE_NO_INFORMATION_AVAILABLE: - return "Pas d'informations disponibles."; - case MENU_ENUM_LABEL_VALUE_NO_ITEMS: - return "Vide."; - case MENU_ENUM_LABEL_VALUE_NO_PERFORMANCE_COUNTERS: - return "Pas de compteurs de performance."; - case MENU_ENUM_LABEL_VALUE_NO_PLAYLIST_ENTRIES_AVAILABLE: - return "Playlist vide."; - case MENU_ENUM_LABEL_VALUE_NO_SETTINGS_FOUND: - return "Pas de réglages trouvés."; - case MENU_ENUM_LABEL_VALUE_NO_SHADER_PARAMETERS: - return "Aucun paramètres."; - case MENU_ENUM_LABEL_VALUE_OFF: - return "OFF"; - case MENU_ENUM_LABEL_VALUE_ON: - return "ON"; - case MENU_ENUM_LABEL_VALUE_ONLINE_UPDATER: - return "Mises à jour"; - case MENU_ENUM_LABEL_VALUE_ONSCREEN_DISPLAY_SETTINGS: - return "Messages d'info"; - case MENU_ENUM_LABEL_VALUE_OPEN_ARCHIVE: - return "Ouvrir l'archive"; - case MENU_ENUM_LABEL_VALUE_OPTIONAL: - return "Optionnel"; - case MENU_ENUM_LABEL_VALUE_OSK_OVERLAY_DIRECTORY: - return "Dossier des overlays claviers"; - case MENU_ENUM_LABEL_VALUE_OVERLAY_AUTOLOAD_PREFERRED: - return "Charger l'overlay préféré automatiquement"; - case MENU_ENUM_LABEL_VALUE_OVERLAY_DIRECTORY: - return "Dossier des overlays"; - case MENU_ENUM_LABEL_VALUE_OVERLAY_OPACITY: - return "Transparence de l'overlay"; - case MENU_ENUM_LABEL_VALUE_OVERLAY_PRESET: - return "Préréglages de l'overlay"; - case MENU_ENUM_LABEL_VALUE_OVERLAY_SCALE: - return "Zoom de l'overlay"; - case MENU_ENUM_LABEL_VALUE_OVERLAY_SETTINGS: - return "Overlays"; - case MENU_ENUM_LABEL_VALUE_PAL60_ENABLE: - return "Utiliser le mode PAL60"; - case MENU_ENUM_LABEL_VALUE_PAUSE_LIBRETRO: - return "Pauser le contenu quand le menu est activé"; - case MENU_ENUM_LABEL_VALUE_PAUSE_NONACTIVE: - return "Ne pas fonctionner en arrière-plan"; - case MENU_ENUM_LABEL_VALUE_PERFCNT_ENABLE: - return "Compteurs de performance"; - case MENU_ENUM_LABEL_VALUE_PLAYLIST_DIRECTORY: - return "Dossier des playlists"; - case MENU_ENUM_LABEL_VALUE_PLAYLIST_SETTINGS: - return "Playlists"; - case MENU_ENUM_LABEL_VALUE_POINTER_ENABLE: - return "Support du tactile"; - case MENU_ENUM_LABEL_VALUE_PORT: - return "Port"; - case MENU_ENUM_LABEL_VALUE_PRESENT: - return "Présent"; - case MENU_ENUM_LABEL_VALUE_PRIVACY_SETTINGS: - return "Confidentialité"; - case MENU_ENUM_LABEL_VALUE_QUIT_RETROARCH: - return "Quitter RetroArch"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_CRC32: - return "CRC32"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_DESCRIPTION: - return "Description"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_DEVELOPER: - return "Développeur"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_FRANCHISE: - return "Franchise"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_MD5: - return "MD5"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_NAME: - return "Nom"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ORIGIN: - return "Origine"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_PUBLISHER: - return "Éditeur"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_RELEASE_MONTH: - return "Mois de sortie"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_RELEASE_YEAR: - return "Année de sortie"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_START_CONTENT: - return "Exécuter le contenu"; - case MENU_ENUM_LABEL_VALUE_RECORDING_CONFIG_DIRECTORY: - return "Dossier des réglages de capture vidéo"; - case MENU_ENUM_LABEL_VALUE_RECORDING_OUTPUT_DIRECTORY: - return "Dossier d'enregistrement des vidéos"; - case MENU_ENUM_LABEL_VALUE_RECORDING_SETTINGS: - return "Capture video"; - case MENU_ENUM_LABEL_VALUE_RECORD_CONFIG: - return "Configuration de capture"; - case MENU_ENUM_LABEL_VALUE_RECORD_DRIVER: - return "Pilote de capture vidéo"; - case MENU_ENUM_LABEL_VALUE_RECORD_ENABLE: - return "Autoriser les captures vidéo"; - case MENU_ENUM_LABEL_VALUE_RECORD_PATH: /* FIXME/UPDATE */ - return "Chemin de l'enregistrement"; - case MENU_ENUM_LABEL_VALUE_RECORD_USE_OUTPUT_DIRECTORY: - return "Utiliser le dossier d'enregistrement"; - case MENU_ENUM_LABEL_VALUE_REMAP_FILE_LOAD: - return "Charger un fichier de remap"; - case MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_CORE: - return "Charger un fichier remaps de coeur"; - case MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_GAME: - return "Charger un fichier remap de contenu"; - case MENU_ENUM_LABEL_VALUE_REQUIRED: - return "Requis"; - case MENU_ENUM_LABEL_VALUE_RESTART_CONTENT: - return "Redémarrer le contenu"; - case MENU_ENUM_LABEL_VALUE_RESTART_RETROARCH: - return "Redémarrer RetroArch"; - case MENU_ENUM_LABEL_VALUE_RESUME: - return "Reprendre"; - case MENU_ENUM_LABEL_VALUE_RESUME_CONTENT: - return "Reprendre"; - case MENU_ENUM_LABEL_VALUE_RETROKEYBOARD: - return "RetroKeyboard"; - case MENU_ENUM_LABEL_VALUE_RETROPAD: - return "RetroPad"; - case MENU_ENUM_LABEL_VALUE_REWIND_ENABLE: - return "Activer le rembobinage"; - case MENU_ENUM_LABEL_VALUE_REWIND_GRANULARITY: - return "Précision du rembobinage"; - case MENU_ENUM_LABEL_VALUE_REWIND_SETTINGS: - return "Rembobinage"; - case MENU_ENUM_LABEL_VALUE_RGUI_BROWSER_DIRECTORY: - return "Dossier racine de navigation"; - case MENU_ENUM_LABEL_VALUE_RGUI_CONFIG_DIRECTORY: - return "Dossier des fichiers de configuration"; - case MENU_ENUM_LABEL_VALUE_RGUI_SHOW_START_SCREEN: - return "Afficher l'écran de d'aide"; - case MENU_ENUM_LABEL_VALUE_RIGHT_ANALOG: - return "Stick analogique droite"; - case MENU_ENUM_LABEL_VALUE_RUN: - return "Lancer"; - case MENU_ENUM_LABEL_VALUE_SAVEFILE_DIRECTORY: - return "Dossier des sauvegardes"; - case MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_INDEX: - return "Indexer automatiquement les savestates"; - case MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_LOAD: - return "Charger automatiquement les savestates"; - case MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_SAVE: - return "Sauvegarde automatique"; - case MENU_ENUM_LABEL_VALUE_SAVESTATE_DIRECTORY: - return "Dossier des sauvegardes rapides"; - case MENU_ENUM_LABEL_VALUE_SAVE_CURRENT_CONFIG: - return "Sauvegarder la configuration actuelle"; - case MENU_ENUM_LABEL_VALUE_SAVE_NEW_CONFIG: - return "Sauvegarder la configuration"; - case MENU_ENUM_LABEL_VALUE_SAVE_STATE: - return "Sauvegarder une savestate"; - case MENU_ENUM_LABEL_VALUE_SAVING_SETTINGS: - return "Sauvegardes"; - case MENU_ENUM_LABEL_VALUE_SCAN_DIRECTORY: - return "Scanner un dossier"; - case MENU_ENUM_LABEL_VALUE_SCAN_FILE: - return "Scanner un fichier"; - case MENU_ENUM_LABEL_VALUE_SCAN_THIS_DIRECTORY: - return ""; - case MENU_ENUM_LABEL_VALUE_SCREENSHOT_DIRECTORY: - return "Dossier des captures d'écran"; - case MENU_ENUM_LABEL_VALUE_SCREEN_RESOLUTION: - return "Résolution d'écran"; - case MENU_ENUM_LABEL_VALUE_SEARCH: - return "Recherche :"; - case MENU_ENUM_LABEL_VALUE_SETTINGS: - return "Réglages"; - case MENU_ENUM_LABEL_VALUE_SETTINGS_TAB: - return "Réglages"; - case MENU_ENUM_LABEL_VALUE_SHADER: - return "Shader"; - case MENU_ENUM_LABEL_VALUE_SHADER_APPLY_CHANGES: - return "Appliquer les changements"; - case MENU_ENUM_LABEL_VALUE_SHADER_OPTIONS: - return "Shaders"; - case MENU_ENUM_LABEL_VALUE_SHOW_ADVANCED_SETTINGS: - return "Afficher les réglages avancés"; - case MENU_ENUM_LABEL_VALUE_SHUTDOWN: - return "Éteindre"; - case MENU_ENUM_LABEL_VALUE_SLOWMOTION_RATIO: - return "Taux de ralentissement"; - case MENU_ENUM_LABEL_VALUE_SORT_SAVEFILES_ENABLE: - return "Classer les sauvegardes par dossier"; - case MENU_ENUM_LABEL_VALUE_SORT_SAVESTATES_ENABLE: - return "Classer les savestates par dossier"; - case MENU_ENUM_LABEL_VALUE_START_CORE: - return "Démarrer le coeur"; - case MENU_ENUM_LABEL_VALUE_START_NET_RETROPAD: - return "Mode manette à distance"; - case MENU_ENUM_LABEL_VALUE_STATE_SLOT: - return "Slot de savestate"; - case MENU_ENUM_LABEL_VALUE_STATUS: - return "Statut"; - case MENU_ENUM_LABEL_VALUE_STDIN_CMD_ENABLE: - return "Commandes stdin"; - case MENU_ENUM_LABEL_VALUE_SUSPEND_SCREENSAVER_ENABLE: - return "Désactiver l'économiseur d'écran"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_BGM_ENABLE: - return "Musique du système activée"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_DIRECTORY: - return "Dossier système/BIOS"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFORMATION: - return "Informations du système"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_7ZIP_SUPPORT: - return "Support de 7zip"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_ALSA_SUPPORT: - return "Support d'ALSA"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_BUILD_DATE: - return "Date de build"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_CG_SUPPORT: - return "Support de CG"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_COCOA_SUPPORT: - return "Support de Cocoa"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_COMMAND_IFACE_SUPPORT: - return "Support de l'interface de commandes"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_CORETEXT_SUPPORT: - return "Support de CoreText"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_CPU_FEATURES: - return "Fonctionnalités du CPU"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_DPI: - return "DPI de l'écran"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_MM_HEIGHT: - return "Hauteur d'écran (mm)"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_MM_WIDTH: - return "Largeur d'écran (mm)"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DSOUND_SUPPORT: - return "Support de DirectSoundt"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DYLIB_SUPPORT: - return "Support des bibliothèques dynamiques"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_EGL_SUPPORT: - return "Support d'EGL"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FBO_SUPPORT: - return "Support d'OpenGL/Direct3D render-to-texture (shaders multi-passages)"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FFMPEG_SUPPORT: - return "Support de FFmpeg"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FREETYPE_SUPPORT: - return "Support de FreeType"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FRONTEND_IDENTIFIER: - return "Identifiant frontend"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FRONTEND_NAME: - return "Nom du frontend"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FRONTEND_OS: - return "OS du frontend"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_GIT_VERSION: - return "Version git"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_GLSL_SUPPORT: - return "Support de GLSL"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_HLSL_SUPPORT: - return "Support de HLSL"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_JACK_SUPPORT: - return "Support de JACK"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_KMS_SUPPORT: - return "Support de KMS/EGL"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBRETRODB_SUPPORT: - return "Support de libretroDB"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT: - return "Support de libusb"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBXML2_SUPPORT: - return "Support du parser XML libxml2"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_NETPLAY_SUPPORT: - return "Support du jeu en réseau"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_NETWORK_COMMAND_IFACE_SUPPORT: - return "Support des commandes réseau"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENAL_SUPPORT: - return "Support d'OpenAL"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENGLES_SUPPORT: - return "Support d'OpenGL ES"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENGL_SUPPORT: - return "Support d'OpenGL"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENSL_SUPPORT: - return "Support d'OpenSL"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENVG_SUPPORT: - return "Support d'OpenVG"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OSS_SUPPORT: - return "Support d'OSS"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OVERLAY_SUPPORT: - return "Support des overlays"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE: - return "Alimentation"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_CHARGED: - return "Chargé"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_CHARGING: - return "En chargement"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_DISCHARGING: - return "Déchargé"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_NO_SOURCE: - return "Non alimenté"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PULSEAUDIO_SUPPORT: - return "Support de PulseAudio"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PYTHON_SUPPORT: - return "Support de Python (scripting des shaders)"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RETRORATING_LEVEL: - return "Niveau RetroRating"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_ROARAUDIO_SUPPORT: - return "Support de RoarAudio"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RPNG_SUPPORT: - return "Support des PNGs (RPNG)"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RSOUND_SUPPORT: - return "Support de RSound"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL2_SUPPORT: - return "Support de SDL2"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL_IMAGE_SUPPORT: - return "Support de SDL_Image"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL_SUPPORT: - return "Support de SDL1.2"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_THREADING_SUPPORT: - return "Support du threading"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_UDEV_SUPPORT: - return "Support de udev"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_V4L2_SUPPORT: - return "Support de Video4Linux2"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_VIDEO_CONTEXT_DRIVER: - return "Pilote du contexte vidéo"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_WAYLAND_SUPPORT: - return "Support de Wayland"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_X11_SUPPORT: - return "Support de X11"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_XAUDIO2_SUPPORT: - return "Support de XAudio2"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_XVIDEO_SUPPORT: - return "Support de XVideo"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_ZLIB_SUPPORT: - return "Support de Zlib"; - case MENU_ENUM_LABEL_VALUE_TAKE_SCREENSHOT: - return "Capturer l écran"; - case MENU_ENUM_LABEL_VALUE_THREADED_DATA_RUNLOOP_ENABLE: - return "Boucle de données threadée"; - case MENU_ENUM_LABEL_VALUE_THUMBNAILS: - return "Vignettes"; - case MENU_ENUM_LABEL_VALUE_THUMBNAILS_DIRECTORY: - return "Dossier des vignettes"; - case MENU_ENUM_LABEL_VALUE_TIMEDATE_ENABLE: - return "Afficher la date et l'heure"; - case MENU_ENUM_LABEL_VALUE_TITLE_COLOR: - return "Couleur du titre du menu"; - case MENU_ENUM_LABEL_VALUE_TRUE: - return "Vrai"; - case MENU_ENUM_LABEL_VALUE_UI_COMPANION_START_ON_BOOT: - return "UI Companion Start On Boot"; - case MENU_ENUM_LABEL_VALUE_UI_MENUBAR_ENABLE: - return "Menubar"; - case MENU_ENUM_LABEL_VALUE_UNABLE_TO_READ_COMPRESSED_FILE: - return "Impossible de lire l'archive."; - case MENU_ENUM_LABEL_VALUE_UNDO_LOAD_STATE: - return "Annuler charger une savestate"; - case MENU_ENUM_LABEL_VALUE_UNDO_SAVE_STATE: - return "Annuler sauvegarder une savestate"; - case MENU_ENUM_LABEL_VALUE_UNKNOWN: - return "Inconnu"; - case MENU_ENUM_LABEL_VALUE_UPDATE_ASSETS: - return "Mettre à jour les assets"; - case MENU_ENUM_LABEL_VALUE_UPDATE_AUTOCONFIG_PROFILES: - return "Mettre à jour les profils d'autoconfiguration"; - case MENU_ENUM_LABEL_VALUE_UPDATE_CG_SHADERS: - return "Mettre à jour les shaders CG"; - case MENU_ENUM_LABEL_VALUE_UPDATE_CHEATS: - return "Mettre à jour les codes de triche"; - case MENU_ENUM_LABEL_VALUE_UPDATE_CORE_INFO_FILES: - return "Mettre à jour les informations des coeurs"; - case MENU_ENUM_LABEL_VALUE_UPDATE_DATABASES: - return "Mettre à jour les bases de données"; - case MENU_ENUM_LABEL_VALUE_UPDATE_GLSL_SHADERS: - return "Mettre à jour les shaders GLSL"; - case MENU_ENUM_LABEL_VALUE_UPDATE_OVERLAYS: - return "Mettre à jour les overlays"; - case MENU_ENUM_LABEL_VALUE_USER: - return "Utilisateur"; - case MENU_ENUM_LABEL_VALUE_USER_INTERFACE_SETTINGS: - return "Interface graphique"; - case MENU_ENUM_LABEL_VALUE_USER_LANGUAGE: - return "Langage"; - case MENU_ENUM_LABEL_VALUE_USER_SETTINGS: - return "Utilisateur"; - case MENU_ENUM_LABEL_VALUE_USE_BUILTIN_IMAGE_VIEWER: - return "Utiliser le lecteur d'image embarqué"; - case MENU_ENUM_LABEL_VALUE_USE_BUILTIN_PLAYER: - return "Utiliser le lecteur vidéo embarqué"; - case MENU_ENUM_LABEL_VALUE_USE_THIS_DIRECTORY: - return ""; - case MENU_ENUM_LABEL_VALUE_VIDEO_ALLOW_ROTATE: - return "Autoriser la rotation"; - case MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_AUTO: - return "Format d'image automatique"; - case MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_INDEX: - return "Rapport d'aspect"; - case MENU_ENUM_LABEL_VALUE_VIDEO_BLACK_FRAME_INSERTION: - return "Insérer des frames noires"; - case MENU_ENUM_LABEL_VALUE_VIDEO_CROP_OVERSCAN: - return "Tronquer l'overscan (Reload)"; - case MENU_ENUM_LABEL_VALUE_VIDEO_DISABLE_COMPOSITION: - return "Désactiver le compositeur du bureau"; - case MENU_ENUM_LABEL_VALUE_VIDEO_DRIVER: - return "Pilote vidéo"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FILTER: - return "Filtre vidéo"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FILTER_DIR: - return "Dossier des filtres vidéo"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FILTER_FLICKER: - return "Filtre anti-scintillement"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FONT_ENABLE: - return "Afficher les messages d'info"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FONT_PATH: - return "Police des messages d'info"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FONT_SIZE: - return "Taille du texte des messages"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FORCE_ASPECT: - return "Forcer le format d'image"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FORCE_SRGB_DISABLE: - return "Désactiver sRGB FBO"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FRAME_DELAY: - return "Délayer les frames"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FULLSCREEN: - return "Plein écran"; - case MENU_ENUM_LABEL_VALUE_VIDEO_GAMMA: - return "Gamma"; - case MENU_ENUM_LABEL_VALUE_VIDEO_GPU_RECORD: - return "Captures vidéo via le GPU"; - case MENU_ENUM_LABEL_VALUE_VIDEO_GPU_SCREENSHOT: - return "Activer les captures d'écran GPU"; - case MENU_ENUM_LABEL_VALUE_VIDEO_HARD_SYNC: - return "Synchroniser le GPU au CPU"; - case MENU_ENUM_LABEL_VALUE_VIDEO_MESSAGE_POS_X: - return "Position X"; - case MENU_ENUM_LABEL_VALUE_VIDEO_MESSAGE_POS_Y: - return "Position Y"; - case MENU_ENUM_LABEL_VALUE_VIDEO_MONITOR_INDEX: - return "Écran"; - case MENU_ENUM_LABEL_VALUE_VIDEO_POST_FILTER_RECORD: - return "Activer les filtres de traitement"; - case MENU_ENUM_LABEL_VALUE_VIDEO_REFRESH_RATE: - return "Fréquence de rafraichissement"; - case MENU_ENUM_LABEL_VALUE_VIDEO_REFRESH_RATE_AUTO: - return "Fréquence estimée de l'écran"; - case MENU_ENUM_LABEL_VALUE_VIDEO_ROTATION: - return "Rotation"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SCALE: - return "Zoom (en fenêtre)"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SCALE_INTEGER: - return "Aligner aux pixels de l'écran"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SETTINGS: - return "Vidéo"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_DIR: - return "Dossier des shaders vidéo"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_NUM_PASSES: - return "Nombre de passages"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SHARED_CONTEXT: - return "Partager le contexte matériel"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SMOOTH: - return "Filtre bilinéaire (HW)"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SOFT_FILTER: - return "Filtre doux activé"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SWAP_INTERVAL: - return "Intervale de synchronisation verticale"; - case MENU_ENUM_LABEL_VALUE_VIDEO_THREADED: - return "Threader l'affichage"; - case MENU_ENUM_LABEL_VALUE_VIDEO_VFILTER: - return "Deflicker"; /* TODO */ - case MENU_ENUM_LABEL_VALUE_VIDEO_VI_WIDTH: - return "Set VI Screen Width"; /* TODO */ - case MENU_ENUM_LABEL_VALUE_VIDEO_VSYNC: - return "Synchronisation verticale"; - case MENU_ENUM_LABEL_VALUE_VIDEO_WINDOWED_FULLSCREEN: - return "Mode plein écran fenêtré"; - case MENU_ENUM_LABEL_VALUE_XMB_ALPHA_FACTOR: - return "XMB : Transparence"; - case MENU_ENUM_LABEL_VALUE_XMB_FONT: - return "XMB : Police"; - case MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME: - return "Dégradé de fond d'écran"; - case MENU_ENUM_LABEL_VALUE_XMB_RIBBON_ENABLE: - return "Fond d'écran animé"; - case MENU_ENUM_LABEL_VALUE_XMB_SCALE_FACTOR: - return "XMB : Zoom"; - case MENU_ENUM_LABEL_VALUE_XMB_SHADOWS_ENABLE: - return "Ombres pour les icones"; - case MENU_ENUM_LABEL_VALUE_XMB_THEME: - return "XMB : Theme"; - case MENU_ENUM_LABEL_VALUE_YES: - return "Oui"; - case MENU_ENUM_LABEL_VIDEO_FILTER_FLICKER: - return "video_filter_flicker"; - case MSG_APPENDED_DISK: - return "Disque fusionné"; - case MSG_APPLYING_SHADER: - return "Application du shader"; - case MSG_AUDIO_MUTED: - return "Son coupé."; - case MSG_AUDIO_UNMUTED: - return "Remise du son."; - case MSG_AUTOSAVE_FAILED: - return "Impossible d'activer l'enregistrement automatique."; - case MSG_BLOCKING_SRAM_OVERWRITE: - return "Bloque l'écrasement de la SRAM"; - case MSG_BYTES: - return "octets"; - case MSG_CHEEVOS_HARDCORE_MODE_ENABLE: - return "Mode matériel activé : savestate et rembobinage sont désactivés."; - case MSG_CONFIG_DIRECTORY_NOT_SET: - return "Répertoire de configuration non défini. Impossible de sauvegarder le nouveau fichier."; - case MSG_CORE_DOES_NOT_SUPPORT_SAVESTATES: - return "Le core ne supporte pas les savestates."; - case MSG_COULD_NOT_READ_CONTENT_FILE: - return "Impossible de lire le contenu du fichier"; - case MSG_CUSTOM_TIMING_GIVEN: - return "Temps personnalisé attribué"; - case MSG_DETECTED_VIEWPORT_OF: - return "Détection du visuel"; - case MSG_DOWNLOADING: - return "Téléchargement"; - case MSG_EXTRACTING: - return "Extraction"; - case MSG_FAILED_TO: - return "Échec de"; - case MSG_FAILED_TO_APPLY_SHADER: - return "Impossible d'appliquer le shader."; - case MSG_FAILED_TO_LOAD_CONTENT: - return "Échec du chargement du fichier"; - case MSG_FAILED_TO_LOAD_MOVIE_FILE: - return "Échec du chargement du fichier vidéo"; - case MSG_FAILED_TO_LOAD_OVERLAY: - return "Impossible de charger l'overlay."; - case MSG_FAILED_TO_LOAD_STATE: - return "Impossible de charger la savestate à partir de"; - case MSG_FAILED_TO_REMOVE_DISK_FROM_TRAY: - return "Impossible d'éjecter le disque du lecteur."; - case MSG_FAILED_TO_REMOVE_TEMPORARY_FILE: - return "Impossible de supprimer le fichier temporaire"; - case MSG_FAILED_TO_SAVE_SRAM: - return "Impossible de sauvegarder la SRAM"; - case MSG_FAILED_TO_SAVE_STATE_TO: - return "Impossible de sauvegarder la savestate vers"; - case MSG_FAILED_TO_START_MOVIE_RECORD: - return "Impossible de démarrer l'enregistrement vidéo."; - case MSG_FAILED_TO_START_RECORDING: - return "Échec de l'activation de l'enregistrement."; - case MSG_FAILED_TO_TAKE_SCREENSHOT: - return "Échec de la copie d'écran."; - case MSG_FAILED_TO_UNDO_LOAD_STATE: - return "Aucun savestate de retour arrière trouvé"; - case MSG_FAILED_TO_UNDO_SAVE_STATE: - return "Impossible de sauvegarder les informations de savestate de retour arrière"; - case MSG_FAILED_TO_UNMUTE_AUDIO: - return "Impossible de remettre le son."; - case MSG_FOUND_SHADER: - return "Shader trouvé"; - case MSG_GOT_INVALID_DISK_INDEX: - return "Index du disque invalide."; - case MSG_GRAB_MOUSE_STATE: - return "Capture la souris"; - case MSG_HW_RENDERED_MUST_USE_POSTSHADED_RECORDING: - return "Le core Libretro utilise le rendu matériel. Obligation d'utiliser également l'enregistrement post-shaded."; - case MSG_LIBRETRO_ABI_BREAK: - return "est compilé avec une version différente de la bibliothèque libretro actuelle."; - case MSG_LOADED_STATE_FROM_SLOT: - return "Chargement du savestate à partir du slot #%d."; - case MSG_LOADED_STATE_FROM_SLOT_AUTO: - return "Chargement du savestate à partir du slot #-1 (auto)."; - case MSG_LOADING_CONTENT_FILE: - return "Chargement du contenu"; - case MSG_LOADING_STATE: - return "Chargement savestate"; - case MSG_MOVIE_PLAYBACK_ENDED: - return "Fin de la lecture vidéo"; - case MSG_MOVIE_RECORD_STOPPED: - return "Arrêt de l'enregistrement vidéo."; - case MSG_NETPLAY_FAILED: - return "Échec de l'initialisation du jeu en réseau"; - case MSG_NETPLAY_FAILED_MOVIE_PLAYBACK_HAS_STARTED: - return "Lecture en cours. Impossible d'activer le jeu en réseau."; - case MSG_PAUSED: - return "Pause."; - case MSG_PROGRAM: - return "RetroArch"; - case MSG_RECEIVED: - return "Reçu"; - case MSG_RECORDING_TERMINATED_DUE_TO_RESIZE: - return "Enregistrement interrompu à cause du redimensionnement."; - case MSG_RECORDING_TO: - return "Enregistrement vers"; - case MSG_REDIRECTING_CHEATFILE_TO: - return "Redirection du fichier triche vers"; - case MSG_REDIRECTING_SAVEFILE_TO: - return "Redirection de la sauvegarde vers"; - case MSG_REDIRECTING_SAVESTATE_TO: - return "Redirection de la savestate vers"; - case MSG_REMOVED_DISK_FROM_TRAY: - return "Éjection du disque du lecteur."; - case MSG_REMOVING_TEMPORARY_CONTENT_FILE: - return "Suppression du fichier temporaire"; - case MSG_RESET: - return "Reset"; - case MSG_RESTARTING_RECORDING_DUE_TO_DRIVER_REINIT: - return "Redémarrage de l'enregistrement à cause de la réinitialisation du pilote."; - case MSG_REWINDING: - return "Rembobinage."; - case MSG_REWIND_INIT: - return "Initialisation du tampon pour le retour rapide avec une taille"; - case MSG_REWIND_INIT_FAILED: - return "Échec de l'initialisation du tampon pour le retour rapide. Cette fonctionnalité sera désactivée."; - case MSG_REWIND_INIT_FAILED_THREADED_AUDIO: - return "L'implémentation utilise audio thread. Impossible d'activer le retour rapide."; - case MSG_REWIND_REACHED_END: - return "Atteinte de la fin du tampon de rembobinage."; - case MSG_SAVED_STATE_TO_SLOT: - return "Savestate vers slot #%d."; - case MSG_SAVED_STATE_TO_SLOT_AUTO: - return "Savestate vers slot #-1 (auto)."; - case MSG_SAVED_SUCCESSFULLY_TO: - return "Sauvegarde réussie vers"; - case MSG_SAVING_RAM_TYPE: - return "Sauvegarde du type de RAM"; - case MSG_SAVING_STATE: - return "Sauvegarde savestate"; - case MSG_SCANNING: - return "Analyse"; - case MSG_SCANNING_OF_DIRECTORY_FINISHED: - return "Analyse des dossiers terminée"; - case MSG_SENDING_COMMAND: - return "Envoi commande"; - case MSG_SHADER: - return "Shader"; - case MSG_SKIPPING_SRAM_LOAD: - return "Ignore le chargement de la SRAM."; - case MSG_SLOW_MOTION: - return "Ralenti."; - case MSG_SLOW_MOTION_REWIND: - return "Rembobinage ralenti."; - case MSG_SRAM_WILL_NOT_BE_SAVED: - return "SRAM ne sera pas sauvegardée."; - case MSG_STARTING_MOVIE_PLAYBACK: - return "Démarrage de la lecture vidéo."; - case MSG_STARTING_MOVIE_RECORD_TO: - return "Démarrage de l'enregistrement vidéo vers"; - case MSG_STATE_SIZE: - return "Taille savestate"; - case MSG_STATE_SLOT: - return "State slot"; - case MSG_TAKING_SCREENSHOT: - return "Réalisation d'une copie d'écran."; - case MSG_TO: - return "de"; - case MSG_UNKNOWN: - return "Inconnu"; - case MSG_UNPAUSED: - return "Relancé."; - case MSG_UNRECOGNIZED_COMMAND: - return "Commande non reconnue"; - case MSG_USING_LIBRETRO_DUMMY_CORE_RECORDING_SKIPPED: - return "Utilisation d'un core libretro simple. Ignore l'enregistrement."; - case MSG_VIEWPORT_SIZE_CALCULATION_FAILED: - return "Échec du calcul de la taille du visuel ! Utilisation des données brutes. Cela ne fonctionnera probablement pas bien ..."; - case MSG_VIRTUAL_DISK_TRAY: - return "Lecteur de disque virtuel."; + #include "msg_hash_fr.h" default: break; } diff --git a/intl/msg_hash_fr.h b/intl/msg_hash_fr.h new file mode 100644 index 0000000000..6b228b4da8 --- /dev/null +++ b/intl/msg_hash_fr.h @@ -0,0 +1,2217 @@ +MSG_HASH( + MSG_COMPILER, + "Compiler" + ) +MSG_HASH( + MSG_UNKNOWN_COMPILER, + "Unknown compiler" + ) +MSG_HASH( + MSG_DEVICE_DISCONNECTED_FROM_PORT, + "Device disconnected from port" + ) +MSG_HASH( + MSG_UNKNOWN_NETPLAY_COMMAND_RECEIVED, + "Unknown netplay command received" + ) +MSG_HASH( + MSG_FILE_ALREADY_EXISTS_SAVING_TO_BACKUP_BUFFER, + "File already exists. Saving to backup buffer" + ) +MSG_HASH( + MSG_GOT_CONNECTION_FROM, + "Got connection from: \"%s\"" + ) +MSG_HASH( + MSG_GOT_CONNECTION_FROM_NAME, + "Got connection from: \"%s (%s)\"" + ) +MSG_HASH( + MSG_NO_ARGUMENTS_SUPPLIED_AND_NO_MENU_BUILTIN, + "No arguments supplied and no menu builtin, displaying help..." + ) +MSG_HASH( + MSG_NETPLAY_USERS_HAS_FLIPPED, + "Netplay users has flipped" + ) +MSG_HASH( + MSG_SETTING_DISK_IN_TRAY, + "Setting disk in tray" + ) +MSG_HASH( + MSG_WAITING_FOR_CLIENT, + "Waiting for client ..." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_VIDEO_SHARED_CONTEXT, + "Give hardware-rendered cores their own private context. Avoids having to assume hardware state changes inbetween frames." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_MENU_SETTINGS, + "Adjusts settings related to the appearance of the menu screen." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_VIDEO_HARD_SYNC, + "Hard-synchronize the CPU and GPU. Reduces latency at the cost of performance." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_VIDEO_THREADED, + "Improves performance at the cost of latency and more video stuttering. Use only if you cannot obtain full speed otherwise." + ) +MSG_HASH( + MSG_AUDIO_VOLUME, + "Audio volume" + ) +MSG_HASH( + MSG_AUTODETECT, + "Autodetect" + ) +MSG_HASH( + MSG_AUTOLOADING_SAVESTATE_FROM, + "Auto-loading savestate from" + ) +MSG_HASH( + MSG_CAPABILITIES, + "Capabilities" + ) +MSG_HASH( + MSG_CONNECTING_TO_NETPLAY_HOST, + "Connecting to netplay host" + ) +MSG_HASH( + MSG_CONNECTING_TO_PORT, + "Connecting to port" + ) +MSG_HASH( + MSG_CONNECTION_SLOT, + "Connection slot" + ) +MSG_HASH( + MSG_SORRY_UNIMPLEMENTED_CORES_DONT_DEMAND_CONTENT_NETPLAY, + "Sorry, unimplemented: cores that don't demand content cannot participate in netplay." + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACCOUNTS_CHEEVOS_PASSWORD, + "Password" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACCOUNTS_CHEEVOS_SETTINGS, + "Accounts Cheevos" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACCOUNTS_CHEEVOS_USERNAME, + "Username" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACCOUNTS_LIST, + "Comptes en ligne" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACCOUNTS_LIST_END, + "Accounts List Endpoint" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACCOUNTS_RETRO_ACHIEVEMENTS, + "Retro Achievements" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_LIST, + "Achievement List" + ) + +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_LIST_HARDCORE, + "Achievement List (Hardcore)" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ADD_CONTENT_LIST, + "Ajouter du contenu" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONFIGURATIONS_LIST, + "Charger une configuration" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ADD_TAB, + "Scanner" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ARCHIVE_MODE, + "Mode d'ouverture des archives" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ASK_ARCHIVE, + "Demander" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ASSETS_DIRECTORY, + "Dossier des assets" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_BLOCK_FRAMES, + "Block Frames" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_DEVICE, + "Carte son" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_DRIVER, + "Pilote audio" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_DSP_PLUGIN, + "Module DSP" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_ENABLE, + "Activer le son" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_FILTER_DIR, + "Dossier des filtres audio" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_TURBO_DEADZONE_LIST, + "Turbo/Deadzone" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_LATENCY, + "Latence audio (ms)" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_MAX_TIMING_SKEW, + "Limite max de l'ajustement" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_MUTE, + "Muet" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_OUTPUT_RATE, + "Fréquence de sortie (KHz)" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_RATE_CONTROL_DELTA, + "Delta du taux de contrôle" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_RESAMPLER_DRIVER, + "Pilote de ré-échantillonage audio" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_SETTINGS, + "Audio" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_SYNC, + "Synchroniser le son" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_VOLUME, + "Volume sonnore (dB)" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUTOSAVE_INTERVAL, + "Intervale de sauvegarde SaveRAM" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUTO_OVERRIDES_ENABLE, + "Charger les fichiers d'override automatiquement" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUTO_REMAPS_ENABLE, + "Charger les fichiers remaps automatiquement" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUTO_SHADERS_ENABLE, + "Load Shader Presets Automatically" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_BACK, + "Back" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_CONFIRM, + "Confirm" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_INFO, + "Info" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_QUIT, + "Quit" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_SCROLL_DOWN, + "Scroll Down" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_SCROLL_UP, + "Scroll Up" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_START, + "Start" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_TOGGLE_KEYBOARD, + "Toggle Keyboard" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_TOGGLE_MENU, + "Toggle Menu" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS, + "Basic menu controls" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_CONFIRM, + "Confirm/OK" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_INFO, + "Info" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_QUIT, + "Quit" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_SCROLL_UP, + "Scroll Up" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_START, + "Defaults" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_TOGGLE_KEYBOARD, + "Toggle Keyboard" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_TOGGLE_MENU, + "Toggle Menu" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BLOCK_SRAM_OVERWRITE, + "Ne pas écraser la SaveRAM en chargeant la savestate" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BLUETOOTH_ENABLE, + "Bluetooth Enable" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BUILDBOT_ASSETS_URL, + "URL du buildbot des assets" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CACHE_DIRECTORY, + "Dossier d'extraction" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CAMERA_ALLOW, + "Autoriser la caméra" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CAMERA_DRIVER, + "Pilote de caméra" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT, + "Triche" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT_APPLY_CHANGES, + "Appliquer les changements" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT_DATABASE_PATH, + "Dossier des fichiers de triche" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT_FILE, + "Cheat File" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT_FILE_LOAD, + "Load Cheat File" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT_FILE_SAVE_AS, + "Save Cheat File As" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT_NUM_PASSES, + "Nombre de passages" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_DESCRIPTION, + "Description" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_HARDCORE_MODE_ENABLE, + "Achievements Hardcore Mode" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_LOCKED_ACHIEVEMENTS, + "Locked Achievements:" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_LOCKED_ENTRY, + "Locked" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_SETTINGS, + "Retro Achievements" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_TEST_UNOFFICIAL, + "Test Unofficial Achievements" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_UNLOCKED_ACHIEVEMENTS, + "Unlocked Achievements:" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_UNLOCKED_ENTRY, + "Unlocked" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CLOSE_CONTENT, + "Quitter" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONFIG, + "Config" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONFIGURATIONS, + "Load Configuration" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONFIGURATION_SETTINGS, + "Configurations" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONFIG_SAVE_ON_EXIT, + "Sauver la config en quittant" + ) +MSG_HASH(MENU_ENUM_LABEL_VALUE_CONTENT_COLLECTION_LIST, + "Collections") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CONTENT_DATABASE_DIRECTORY, + "Dossier des bases de données de contenus") +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONTENT_DIR, + "Content" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONTENT_HISTORY_SIZE, + "Taille de l'historique") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CONTENT_SETTINGS, + "Menu rapide") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_ASSETS_DIR, + "Core Assets") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_ASSETS_DIRECTORY, + "Dossier des téléchargements") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_CHEAT_OPTIONS, + "Triche") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_COUNTERS, + "Core Counters") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_ENABLE, + "Afficher le coeur actuel") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFORMATION, + "Informations sur le coeur") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_AUTHORS, + "Auteurs") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_CATEGORIES, + "Catégories") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_LABEL, + "Label") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_NAME, + "Nom") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_FIRMWARE, + "Firmware(s)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_LICENSES, + "Licence(s)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_PERMISSIONS, + "Permissions") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_SUPPORTED_EXTENSIONS, + "Extensions supportées") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_SYSTEM_MANUFACTURER, + "Fabricant du système") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_SYSTEM_NAME, + "Système") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INPUT_REMAPPING_OPTIONS, + "Remap d'entrées") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_LIST, + "Charger un coeur") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_OPTIONS, + "Options") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_SETTINGS, + "Coeurs") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_SET_SUPPORTS_NO_CONTENT_ENABLE, + "Ne pas démarrer de coeur automatiquement") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_SPECIFIC_CONFIG, + "Avoir une configuration par-coeur") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_UPDATER_AUTO_EXTRACT_ARCHIVE, + "Extraire automatiquement") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_UPDATER_BUILDBOT_URL, + "URL du buildbot des coeurs") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_UPDATER_LIST, + "Mise à jour des coeurs") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_UPDATER_SETTINGS, + "Mises à jour") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CPU_ARCHITECTURE, + "CPU Architecture:") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CPU_CORES, + "CPU Cores:") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CURSOR_DIRECTORY, + "Dossier des curseurs") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CURSOR_MANAGER, + "Gestion des curseurs") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CUSTOM_RATIO, + "Forcer une résolution") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_MANAGER, + "Gestion de la base de données") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_SELECTION, + "Database Selection") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DELETE_ENTRY, + "Remove") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DETECT_CORE_LIST, + "Via les fichiers (détecter le coeur)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_CONTENT, + "") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_DEFAULT, + "") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_NONE, + "") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_NOT_FOUND, + "Dossier non trouvé.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_SETTINGS, + "Dossiers") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DISK_CYCLE_TRAY_STATUS, + "État du lecteur de disque") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DISK_IMAGE_APPEND, + "Ajouter une image de disque") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DISK_INDEX, + "Numéro du disque") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DISK_OPTIONS, + "Disques") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DONT_CARE, + "Peu importe") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DOWNLOADED_FILE_DETECT_CORE_LIST, + "Via les téléchargements (détecter le coeur)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DOWNLOAD_CORE, + "Download Core...") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DOWNLOAD_CORE_CONTENT, + "Télécharger du contenu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DPI_OVERRIDE_ENABLE, + "Personnaliser le DPI") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DPI_OVERRIDE_VALUE, + "Valeur du DPI personnalisé") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DRIVER_SETTINGS, + "Pilotes") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DUMMY_ON_CORE_SHUTDOWN, + "Utiliser un faux coeur lorsqu'il n'y en a pas") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPER, + "Fond d'écran dynamique") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPERS_DIRECTORY, + "Dossier des fonds d'écran dynamiques") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CHEEVOS_ENABLE, + "Enable Achievements") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ENTRY_HOVER_COLOR, + "Couleur de l'entrée active") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ENTRY_NORMAL_COLOR, + "Couleur des entrées du menu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_FALSE, + "Faux") +MSG_HASH(MENU_ENUM_LABEL_VALUE_FASTFORWARD_RATIO, + "Vitesse de l'avance rapide") +MSG_HASH(MENU_ENUM_LABEL_VALUE_FPS_SHOW, + "Afficher le FPS") +MSG_HASH(MENU_ENUM_LABEL_VALUE_FRAME_THROTTLE_ENABLE, + "Limiter la vitesse d'exécution") +MSG_HASH(MENU_ENUM_LABEL_VALUE_FRAME_THROTTLE_SETTINGS, + "Vitesse d'affichage") +MSG_HASH(MENU_ENUM_LABEL_VALUE_FRONTEND_COUNTERS, + "Compteurs du Frontend") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_OPTIONS, + "Options du coeur par-jeu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_OPTIONS_CREATE, + "Create game-options file") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_OPTIONS_IN_USE, + "Game-options file") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP, + "Aide") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_AUDIO_VIDEO_TROUBLESHOOTING, + "Audio/Video Troubleshooting") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_CHANGE_VIRTUAL_GAMEPAD, + "Changing Virtual Gamepad Overlay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_CONTROLS, + "Basic Menu Controls") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_LIST, + "Aide") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_LOADING_CONTENT, + "Loading Content") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_SCANNING_CONTENT, + "Scanning For Content") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_WHAT_IS_A_CORE, + "What Is A Core?") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HISTORY_LIST_ENABLE, + "Afficher l'historique") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HISTORY_TAB, + "Historique") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HORIZONTAL_MENU, + "Horizontal Menu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_IMAGES_TAB, + "Images") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INFORMATION, + "Information") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INFORMATION_LIST, + "Informations") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ADC_TYPE, + "Analog To Digital Type") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ALL_USERS_CONTROL_MENU, + "All Users Control Menu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_X, + "Left Analog X") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_X_MINUS, + "Left analog X- (left)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_X_PLUS, + "Left analog X+ (right)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_Y, + "Left Analog Y") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_Y_MINUS, + "Left analog Y- (up)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_Y_PLUS, + "Left analog Y+ (down)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_X, + "Right Analog X") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_X_MINUS, + "Right analog X- (left)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_X_PLUS, + "Right analog X+ (right)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_Y, + "Right Analog Y") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_Y_MINUS, + "Right analog Y- (up)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_Y_PLUS, + "Right analog Y+ (down)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_AUTODETECT_ENABLE, + "Activer l'autoconfiguration") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_AXIS_THRESHOLD, + "Seuil des axes") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_INPUT_SWAP_OK_CANCEL, + "Menu Swap Ok & Cancel Buttons") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_ALL, + "Bind All") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_DEFAULT_ALL, + "Bind Default All") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_TIMEOUT, + "Bind Timeout") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_HIDE_UNBOUND, + "Cacher les remaps non mappés des coeurs") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_LABEL_SHOW, + "Afficher les remaps du coeur") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DEVICE_INDEX, + "Device Index") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DEVICE_TYPE, + "Device Type") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DRIVER, + "Pilote des entrées") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DUTY_CYCLE, + "Rapport de cycle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_HOTKEY_BINDS, + "Racourcis d'entrées") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ICADE_ENABLE, + "Keyboard Gamepad Mapping Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_A, + "A button (right)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_B, + "B button (down)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_DOWN, + "Down D-pad") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_L2, + "L2 button (trigger)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_L3, + "L3 button (thumb)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_L, + "L button (shoulder)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_LEFT, + "Left D-pad") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_R2, + "R2 button (trigger)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_R3, + "R3 button (thumb)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_R, + "R button (shoulder)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_RIGHT, + "Right D-pad") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_SELECT, + "Select button") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_START, + "Start button") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_UP, + "Up D-pad") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_X, + "X button (top)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_Y, + "Y button (left)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_KEY, + "(Key: %s)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_KEYBOARD_GAMEPAD_MAPPING_TYPE, + "Keyboard Gamepad Mapping Type") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_MAX_USERS, + "Nombre d'utilisateurs") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO, + "Menu Toggle Gamepad Combo") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_CHEAT_INDEX_MINUS, + "Cheat index -") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_CHEAT_INDEX_PLUS, + "Cheat index +") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_CHEAT_TOGGLE, + "Cheat toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_DISK_EJECT_TOGGLE, + "Disk eject toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_DISK_NEXT, + "Disk next") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_DISK_PREV, + "Disk prev") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_ENABLE_HOTKEY, + "Enable hotkeys") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_FAST_FORWARD_HOLD_KEY, + "Fast forward hold") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_FAST_FORWARD_KEY, + "Fast forward toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_FRAMEADVANCE, + "Frameadvance") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_FULLSCREEN_TOGGLE_KEY, + "Fullscreen toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_GRAB_MOUSE_TOGGLE, + "Grab mouse toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_LOAD_STATE_KEY, + "Load state") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_MENU_TOGGLE, + "Menu toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_MOVIE_RECORD_TOGGLE, + "Movie record toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_MUTE, + "Audio mute toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_NETPLAY_FLIP, + "Netplay flip users") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_OSK, + "On-screen keyboard toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_OVERLAY_NEXT, + "Overlay next") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_PAUSE_TOGGLE, + "Pause toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_QUIT_KEY, + "Quit RetroArch") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_RESET, + "Reset game") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_REWIND, + "Rewind") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_SAVE_STATE_KEY, + "Save state") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_SCREENSHOT, + "Take screenshot") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_SHADER_NEXT, + "Next shader") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_SHADER_PREV, + "Previous shader") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_SLOWMOTION, + "Slow motion") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_STATE_SLOT_MINUS, + "Savestate slot -") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_STATE_SLOT_PLUS, + "Savestate slot +") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_VOLUME_DOWN, + "Volume -") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_VOLUME_UP, + "Volume +") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_ENABLE, + "Activer les overlays") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_HIDE_IN_MENU, + "Cacher l'overlay dans le menu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR, + "Poll Type Behavior") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR_EARLY, + "Early") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR_LATE, + "Late") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR_NORMAL, + "Normal") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_PREFER_FRONT_TOUCH, + "Prefer Front Touch") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_REMAPPING_DIRECTORY, + "Dossier de remaps d'entrées") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_REMAP_BINDS_ENABLE, + "Autoriser le remapping des entrées") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_SAVE_AUTOCONFIG, + "Save Autoconfig") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_SETTINGS, + "Entrées") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_SMALL_KEYBOARD_ENABLE, + "Small Keyboard Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_TOUCH_ENABLE, + "Touch Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_TURBO_ENABLE, + "Turbo enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_TURBO_PERIOD, + "Délai du turbo") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_USER_BINDS, + "Entrées utilisateur %u") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INTERNAL_STORAGE_STATUS, + "Internal storage status") +MSG_HASH(MENU_ENUM_LABEL_VALUE_JOYPAD_AUTOCONFIG_DIR, + "Dossier des autoconfigs d'entrées") +MSG_HASH(MENU_ENUM_LABEL_VALUE_JOYPAD_DRIVER, + "Pilote des manettes") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LAKKA_SERVICES, + "Services") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_CHINESE_SIMPLIFIED, + "Chinois (Simplifié)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_CHINESE_TRADITIONAL, + "Chinois (Traditionnel)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_DUTCH, + "Néerlandais") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_ENGLISH, + "Anglais") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_ESPERANTO, + "Esperanto") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_FRENCH, + "Français") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_GERMAN, + "Allemand") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_ITALIAN, + "Italien") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_JAPANESE, + "Japonais") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_KOREAN, + "Coréen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_PORTUGUESE, + "Portuguais") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_RUSSIAN, + "Russe") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_SPANISH, + "Espagnol") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_VIETNAMESE, + "Vietnamese") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LEFT_ANALOG, + "Stick analogique gauche") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LIBRETRO_DIR_PATH, + "Dossier des coeurs") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LIBRETRO_INFO_PATH, + "Dossier des informations des coeurs") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LIBRETRO_LOG_LEVEL, + "Verbosité des journaux des coeurs") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LINEAR, + "Linéaire") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_ARCHIVE, + "Charger l'archive") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_CONTENT, + "Via les fichiers") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_HISTORY, + "Récemment ouvert") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_LIST, + "Charger du contenu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_STATE, + "Charger une savestate") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOCATION_ALLOW, + "Autoriser la localisation") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOCATION_DRIVER, + "Pilote de localisation") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOGGING_SETTINGS, + "Journaux") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOG_VERBOSITY, + "Verbosité des journaux") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MAIN_MENU, + "Menu principal") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MANAGEMENT, + "Gestion avancée") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME, + "Dégradé de font d'écran") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_BLUE, + "Blue") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_BLUE_GREY, + "Blue Grey") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_DARK_BLUE, + "Dark Blue") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_GREEN, + "Green") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_NVIDIA_SHIELD, + "Shield") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_RED, + "Red") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_YELLOW, + "Yellow") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_FOOTER_OPACITY, + "Footer Opacity") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_HEADER_OPACITY, + "Header Opacity") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_DRIVER, + "Pilote de menu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_ENUM_THROTTLE_FRAMERATE, + "Throttle Menu Framerate") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FILE_BROWSER_SETTINGS, + "Navigateur de fichiers") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_LINEAR_FILTER, + "Filtre linéaire") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_SETTINGS, + "Menu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_WALLPAPER, + "Fond d'écran") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_WALLPAPER_OPACITY, + "Background opacity") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MISSING, + "Manquant") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MORE, + "...") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MOUSE_ENABLE, + "Support de la souris") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MULTIMEDIA_SETTINGS, + "Multimédia") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MUSIC_TAB, + "Music") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NAVIGATION_BROWSER_FILTER_SUPPORTED_EXTENSIONS_ENABLE, + "Filtrer par extentions supportées") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NAVIGATION_WRAPAROUND, + "Saut-retour") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NEAREST, + "Au plus proche") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY, + "Netplay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_CHECK_FRAMES, + "Netplay Check Frames") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_CLIENT_SWAP_INPUT, + "Inverser les entrées du jeu en réseau") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_DELAY_FRAMES, + "Netplay Delay Frames") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_DISCONNECT, + "Disconnect") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE, + "Autoriser le jeu en réseau") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE_CLIENT, + "Connect to Netplay host") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE_HOST, + "Start hosting") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_IP_ADDRESS, + "Adresse IP") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_MODE, + "Activer le mode client") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_NICKNAME, + "Nom d'utilisateur") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_SETTINGS, + "Netplay settings") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_SPECTATOR_MODE_ENABLE, + "Activer le mode spectateur") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_TCP_UDP_PORT, + "Port TCP/UDP du jeu en réseau") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_CMD_ENABLE, + "Commandes réseau") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_CMD_PORT, + "Port des commandes réseau") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_INFORMATION, + "Network Information") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_REMOTE_ENABLE, + "Manette réseau") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_REMOTE_PORT, + "Network Remote Base Port") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_SETTINGS, + "Réseau") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO, + "Non") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NONE, + "Aucun") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE, + "Indisponible") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_ACHIEVEMENTS_TO_DISPLAY, + "No achievements to display.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_CORE, + "Aucun coeur") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_CORES_AVAILABLE, + "Aucun coeur disponible.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_CORE_INFORMATION_AVAILABLE, + "Pas d'informations disponibles.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_CORE_OPTIONS_AVAILABLE, + "Pas d'options disponibles.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_ENTRIES_TO_DISPLAY, + "No entries to display.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_HISTORY_AVAILABLE, + "No history available.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_INFORMATION_AVAILABLE, + "Pas d'informations disponibles.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_ITEMS, + "Vide.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_PERFORMANCE_COUNTERS, + "Pas de compteurs de performance.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_PLAYLIST_ENTRIES_AVAILABLE, + "Playlist vide.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_SETTINGS_FOUND, + "Pas de réglages trouvés.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_SHADER_PARAMETERS, + "Aucun paramètres.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OFF, + "OFF") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ON, + "ON") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ONLINE, + "Online") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ONLINE_UPDATER, + "Mises à jour") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ONSCREEN_DISPLAY_SETTINGS, + "Messages d'info") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ONSCREEN_OVERLAY_SETTINGS, + "Onscreen Overlay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ONSCREEN_NOTIFICATIONS_SETTINGS, + "Onscreen Notifications") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OPEN_ARCHIVE, + "Ouvrir l'archive") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OPTIONAL, + "Optionnel") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_AUTOLOAD_PREFERRED, + "Charger l'overlay préféré automatiquement") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_DIRECTORY, + "Dossier des overlays") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_OPACITY, + "Transparence de l'overlay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_PRESET, + "Préréglages de l'overlay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_SCALE, + "Zoom de l'overlay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_SETTINGS, + "Overlays") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PAL60_ENABLE, + "Utiliser le mode PAL60") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PARENT_DIRECTORY, + "Parent directory") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PAUSE_LIBRETRO, + "Pauser le contenu quand le menu est activé") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PAUSE_NONACTIVE, + "Ne pas fonctionner en arrière-plan") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PERFCNT_ENABLE, + "Compteurs de performance") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLISTS_TAB, + "Playlists") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_DIRECTORY, + "Dossier des playlists") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_SETTINGS, + "Playlists") +MSG_HASH(MENU_ENUM_LABEL_VALUE_POINTER_ENABLE, + "Support du tactile") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PORT, + "Port") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PRESENT, + "Présent") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PRIVACY_SETTINGS, + "Confidentialité") +MSG_HASH(MENU_ENUM_LABEL_VALUE_QUIT_RETROARCH, + "Quitter RetroArch") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ANALOG, + "Analog supported") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_BBFC_RATING, + "BBFC Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_CERO_RATING, + "CERO Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_COOP, + "Co-op supported") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_CRC32, + "CRC32") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_DESCRIPTION, + "Description") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_DEVELOPER, + "Développeur") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_EDGE_MAGAZINE_ISSUE, + "Edge Magazine Issue") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_EDGE_MAGAZINE_RATING, + "Edge Magazine Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_EDGE_MAGAZINE_REVIEW, + "Edge Magazine Review") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ELSPA_RATING, + "ELSPA Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ENHANCEMENT_HW, + "Enhancement Hardware") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ESRB_RATING, + "ESRB Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_FAMITSU_MAGAZINE_RATING, + "Famitsu Magazine Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_FRANCHISE, + "Franchise") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_GENRE, + "Genre") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_MD5, + "MD5") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_NAME, + "Nom") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ORIGIN, + "Origine") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_PEGI_RATING, + "PEGI Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_PUBLISHER, + "Éditeur") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_RELEASE_MONTH, + "Mois de sortie") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_RELEASE_YEAR, + "Année de sortie") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_RUMBLE, + "Rumble supported") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_SERIAL, + "Serial") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_SHA1, + "SHA1") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_START_CONTENT, + "Exécuter le contenu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_TGDB_RATING, + "TGDB Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REBOOT, + "Reboot") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORDING_CONFIG_DIRECTORY, + "Dossier des réglages de capture vidéo") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORDING_OUTPUT_DIRECTORY, + "Dossier d'enregistrement des vidéos") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORDING_SETTINGS, + "Capture video") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORD_CONFIG, + "Configuration de capture") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORD_DRIVER, + "Pilote de capture vidéo") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORD_ENABLE, + "Autoriser les captures vidéo") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORD_PATH, + "Chemin de l'enregistrement") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORD_USE_OUTPUT_DIRECTORY, + "Utiliser le dossier d'enregistrement") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REMAP_FILE_LOAD, + "Charger un fichier de remap") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_CORE, + "Charger un fichier remaps de coeur") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_GAME, + "Charger un fichier remap de contenu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REQUIRED, + "Requis") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RESTART_CONTENT, + "Redémarrer le contenu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RESTART_RETROARCH, + "Redémarrer RetroArch") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RESUME, + "Reprendre") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RESUME_CONTENT, + "Reprendre") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RETROKEYBOARD, + "RetroKeyboard") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RETROPAD, + "RetroPad") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RETROPAD_WITH_ANALOG, + "RetroPad w/ Analog") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RETRO_ACHIEVEMENTS_SETTINGS, + "Achievements") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_ENABLE, + "Activer le rembobinage") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_GRANULARITY, + "Précision du rembobinage") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_SETTINGS, + "Rembobinage") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RGUI_BROWSER_DIRECTORY, + "Dossier racine de navigation") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RGUI_CONFIG_DIRECTORY, + "Dossier des fichiers de configuration") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RGUI_SHOW_START_SCREEN, + "Afficher l'écran de d'aide") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RIGHT_ANALOG, + "Stick analogique droite") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RUN, + "Lancer") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAMBA_ENABLE, + "SAMBA Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVEFILE_DIRECTORY, + "Dossier des sauvegardes") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_INDEX, + "Indexer automatiquement les savestates") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_LOAD, + "Charger automatiquement les savestates") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_SAVE, + "Sauvegarde automatique") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_DIRECTORY, + "Dossier des sauvegardes rapides") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVE_CURRENT_CONFIG, + "Sauvegarder la configuration actuelle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVE_CURRENT_CONFIG_OVERRIDE_CORE, + "Save Core Overrides") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVE_CURRENT_CONFIG_OVERRIDE_GAME, + "Save Game Overrides") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVE_NEW_CONFIG, + "Sauvegarder la configuration") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVE_STATE, + "Sauvegarder une savestate") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVING_SETTINGS, + "Sauvegardes") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SCAN_DIRECTORY, + "Scanner un dossier") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SCAN_FILE, + "Scanner un fichier") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SCAN_THIS_DIRECTORY, + "") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SCREENSHOT_DIRECTORY, + "Dossier des captures d'écran") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SCREEN_RESOLUTION, + "Résolution d'écran") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SEARCH, + "Recherche :") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SECONDS, + "seconds") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SETTINGS, + "Réglages") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SETTINGS_TAB, + "Réglages") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER, + "Shader") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_APPLY_CHANGES, + "Appliquer les changements") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_OPTIONS, + "Shaders") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_RIBBON, + "Ribbon") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_RIBBON_SIMPLIFIED, + "Ribbon (simplified)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_SIMPLE_SNOW, + "Simple Snow") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_SNOW, + "Snow") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHOW_ADVANCED_SETTINGS, + "Afficher les réglages avancés") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHOW_HIDDEN_FILES, + "Show Hidden Files and Folders") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHUTDOWN, + "Éteindre") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SLOWMOTION_RATIO, + "Taux de ralentissement") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SORT_SAVEFILES_ENABLE, + "Classer les sauvegardes par dossier") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SORT_SAVESTATES_ENABLE, + "Classer les savestates par dossier") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SSH_ENABLE, + "SSH Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_START_CORE, + "Démarrer le coeur") +MSG_HASH(MENU_ENUM_LABEL_VALUE_START_NET_RETROPAD, + "Mode manette à distance") +MSG_HASH(MENU_ENUM_LABEL_VALUE_START_VIDEO_PROCESSOR, + "Start Video Processor") +MSG_HASH(MENU_ENUM_LABEL_VALUE_STATE_SLOT, + "Slot de savestate") +MSG_HASH(MENU_ENUM_LABEL_VALUE_STATUS, + "Statut") +MSG_HASH(MENU_ENUM_LABEL_VALUE_STDIN_CMD_ENABLE, + "Commandes stdin") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SUPPORTED_CORES, + "Supported cores") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SUSPEND_SCREENSAVER_ENABLE, + "Désactiver l'économiseur d'écran") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_BGM_ENABLE, + "Musique du système activée") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_DIRECTORY, + "Dossier système/BIOS") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFORMATION, + "Informations du système") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_7ZIP_SUPPORT, + "Support de 7zip") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_ALSA_SUPPORT, + "Support d'ALSA") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_BUILD_DATE, + "Date de build") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_CG_SUPPORT, + "Support de CG") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_COCOA_SUPPORT, + "Support de Cocoa") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_COMMAND_IFACE_SUPPORT, + "Support de l'interface de commandes") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_CORETEXT_SUPPORT, + "Support de CoreText") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_CPU_FEATURES, + "Fonctionnalités du CPU") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_DPI, + "DPI de l'écran") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_MM_HEIGHT, + "Hauteur d'écran (mm)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_MM_WIDTH, + "Largeur d'écran (mm)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DSOUND_SUPPORT, + "Support de DirectSoundt") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DYLIB_SUPPORT, + "Support des bibliothèques dynamiques") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_EGL_SUPPORT, + "Support d'EGL") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FBO_SUPPORT, + "Support d'OpenGL/Direct3D render-to-texture (shaders multi-passages)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FFMPEG_SUPPORT, + "Support de FFmpeg") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FREETYPE_SUPPORT, + "Support de FreeType") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FRONTEND_IDENTIFIER, + "Identifiant frontend") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FRONTEND_NAME, + "Nom du frontend") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FRONTEND_OS, + "OS du frontend") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_GIT_VERSION, + "Version git") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_GLSL_SUPPORT, + "Support de GLSL") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_HLSL_SUPPORT, + "Support de HLSL") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_JACK_SUPPORT, + "Support de JACK") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_KMS_SUPPORT, + "Support de KMS/EGL") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBRETRODB_SUPPORT, + "Support de libretroDB") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT, + "Support de libusb") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBXML2_SUPPORT, + "Support du parser XML libxml2") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_NETPLAY_SUPPORT, + "Support du jeu en réseau") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_NETWORK_COMMAND_IFACE_SUPPORT, + "Support des commandes réseau") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENAL_SUPPORT, + "Support d'OpenAL") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENGLES_SUPPORT, + "Support d'OpenGL ES") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENGL_SUPPORT, + "Support d'OpenGL") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENSL_SUPPORT, + "Support d'OpenSL") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENVG_SUPPORT, + "Support d'OpenVG") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OSS_SUPPORT, + "Support d'OSS") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OVERLAY_SUPPORT, + "Support des overlays") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE, + "Alimentation") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_CHARGED, + "Chargé") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_CHARGING, + "En chargement") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_DISCHARGING, + "Déchargé") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_NO_SOURCE, + "Non alimenté") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PULSEAUDIO_SUPPORT, + "Support de PulseAudio") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PYTHON_SUPPORT, + "Support de Python (scripting des shaders)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RETRORATING_LEVEL, + "Niveau RetroRating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_ROARAUDIO_SUPPORT, + "Support de RoarAudio") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RPNG_SUPPORT, + "Support des PNGs (RPNG)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RSOUND_SUPPORT, + "Support de RSound") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL2_SUPPORT, + "Support de SDL2") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL_IMAGE_SUPPORT, + "Support de SDL_Image") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL_SUPPORT, + "Support de SDL1.2") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_THREADING_SUPPORT, + "Support du threading") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_UDEV_SUPPORT, + "Support de udev") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_V4L2_SUPPORT, + "Support de Video4Linux2") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_VIDEO_CONTEXT_DRIVER, + "Pilote du contexte vidéo") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_WAYLAND_SUPPORT, + "Support de Wayland") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_X11_SUPPORT, + "Support de X11") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_XAUDIO2_SUPPORT, + "Support de XAudio2") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_XVIDEO_SUPPORT, + "Support de XVideo") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_ZLIB_SUPPORT, + "Support de Zlib") +MSG_HASH(MENU_ENUM_LABEL_VALUE_TAKE_SCREENSHOT, + "Capturer l écran") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THREADED_DATA_RUNLOOP_ENABLE, + "Boucle de données threadée") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAILS, + "Vignettes") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAILS_DIRECTORY, + "Dossier des vignettes") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAILS_UPDATER_LIST, + "Thumbnails Updater") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_BOXARTS, + "Boxarts") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_SCREENSHOTS, + "Screenshots") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_TITLE_SCREENS, + "Title Screens") +MSG_HASH(MENU_ENUM_LABEL_VALUE_TIMEDATE_ENABLE, + "Afficher la date et l'heure") +MSG_HASH(MENU_ENUM_LABEL_VALUE_TITLE_COLOR, + "Couleur du titre du menu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_TRUE, + "Vrai") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UI_COMPANION_START_ON_BOOT, + "UI Companion Start On Boot") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UI_MENUBAR_ENABLE, + "Menubar") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UNABLE_TO_READ_COMPRESSED_FILE, + "Impossible de lire l'archive.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UNDO_LOAD_STATE, + "Annuler charger une savestate") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UNDO_SAVE_STATE, + "Annuler sauvegarder une savestate") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UNKNOWN, + "Inconnu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATER_SETTINGS, + "Updater") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_ASSETS, + "Mettre à jour les assets") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_AUTOCONFIG_PROFILES, + "Mettre à jour les profils d'autoconfiguration") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_CG_SHADERS, + "Mettre à jour les shaders CG") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_CHEATS, + "Mettre à jour les codes de triche") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_CORE_INFO_FILES, + "Mettre à jour les informations des coeurs") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_DATABASES, + "Mettre à jour les bases de données") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_GLSL_SHADERS, + "Mettre à jour les shaders GLSL") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_LAKKA, + "Update Lakka") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_OVERLAYS, + "Mettre à jour les overlays") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_SLANG_SHADERS, + "Update Slang Shaders") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USER, + "Utilisateur") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USER_INTERFACE_SETTINGS, + "Interface graphique") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USER_LANGUAGE, + "Langage") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USER_SETTINGS, + "Utilisateur") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USE_BUILTIN_IMAGE_VIEWER, + "Utiliser le lecteur d'image embarqué") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USE_BUILTIN_PLAYER, + "Utiliser le lecteur vidéo embarqué") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USE_THIS_DIRECTORY, + "") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_ALLOW_ROTATE, + "Autoriser la rotation") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_AUTO, + "Format d'image automatique") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_INDEX, + "Rapport d'aspect") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_BLACK_FRAME_INSERTION, + "Insérer des frames noires") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_CROP_OVERSCAN, + "Tronquer l'overscan (Reload)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_DISABLE_COMPOSITION, + "Désactiver le compositeur du bureau") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_DRIVER, + "Pilote vidéo") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FILTER, + "Filtre vidéo") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FILTER_DIR, + "Dossier des filtres vidéo") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FILTER_FLICKER, + "Filtre anti-scintillement") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FONT_ENABLE, + "Afficher les messages d'info") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FONT_PATH, + "Police des messages d'info") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FONT_SIZE, + "Taille du texte des messages") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FORCE_ASPECT, + "Forcer le format d'image") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FORCE_SRGB_DISABLE, + "Désactiver sRGB FBO") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FRAME_DELAY, + "Délayer les frames") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FULLSCREEN, + "Plein écran") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_GAMMA, + "Gamma") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_GPU_RECORD, + "Captures vidéo via le GPU") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_GPU_SCREENSHOT, + "Activer les captures d'écran GPU") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_HARD_SYNC, + "Synchroniser le GPU au CPU") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_HARD_SYNC_FRAMES, + "Hard GPU Sync Frames") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_MAX_SWAPCHAIN_IMAGES, + "Max swapchain images") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_MESSAGE_POS_X, + "Position X") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_MESSAGE_POS_Y, + "Position Y") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_MONITOR_INDEX, + "Écran") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_POST_FILTER_RECORD, + "Activer les filtres de traitement") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_REFRESH_RATE, + "Fréquence de rafraichissement") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_REFRESH_RATE_AUTO, + "Fréquence estimée de l'écran") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_ROTATION, + "Rotation") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SCALE, + "Zoom (en fenêtre)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SCALE_INTEGER, + "Aligner aux pixels de l'écran") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SETTINGS, + "Vidéo") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_DIR, + "Dossier des shaders vidéo") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_NUM_PASSES, + "Nombre de passages") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PARAMETERS, + "Preview Shader Parameters") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET, + "Load Shader Preset") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_PARAMETERS, + "Menu Shader Parameters") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_AS, + "Save Shader Preset As") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_CORE, + "Save Core Preset") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_GAME, + "Save Game Preset") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHARED_CONTEXT, + "Partager le contexte matériel") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SMOOTH, + "Filtre bilinéaire (HW)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SOFT_FILTER, + "Filtre doux activé") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SWAP_INTERVAL, + "Intervale de synchronisation verticale") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_TAB, + "Video") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_THREADED, + "Threader l'affichage") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VFILTER, + "Deflicker") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_HEIGHT, + "Custom Viewport Height") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_WIDTH, + "Custom Viewport Width") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_X, + "Custom Viewport X Pos.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_Y, + "Custom Viewport Y Pos.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VI_WIDTH, + "Set VI Screen Width") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VSYNC, + "Synchronisation verticale") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_WINDOWED_FULLSCREEN, + "Mode plein écran fenêtré") +MSG_HASH(MENU_ENUM_LABEL_VALUE_WIFI_DRIVER, + "Wi-Fi Driver") +MSG_HASH(MENU_ENUM_LABEL_VALUE_WIFI_SETTINGS, + "Wi-Fi") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ALPHA_FACTOR, + "XMB : Transparence") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_FONT, + "XMB : Police") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_CUSTOM, + "Custom") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_FLATUI, + "FlatUI") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_MONOCHROME, + "Monochrome") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_SYSTEMATIC, + "Systematic") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_NEOACTIVE, + "NeoActive") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_PIXEL, + "Pixel") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_RETROACTIVE, + "RetroActive") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME, + "Dégradé de fond d'écran") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_APPLE_GREEN, + "Apple Green") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_DARK, + "Dark") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_DARK_PURPLE, + "Dark Purple") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_ELECTRIC_BLUE, + "Electric Blue") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_GOLDEN, + "Golden") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_LEGACY_RED, + "Legacy Red") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_MIDNIGHT_BLUE, + "Midnight Blue") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_PLAIN, + "Plain") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_UNDERSEA, + "Undersea") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_VOLCANIC_RED, + "Volcanic Red") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_RIBBON_ENABLE, + "Fond d'écran animé") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SCALE_FACTOR, + "XMB : Zoom") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHADOWS_ENABLE, + "Ombres pour les icones") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_HISTORY, + "Show History Tab") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_IMAGES, + "Show Images Tab") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_MUSIC, + "Show Music Tab") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_SETTINGS, + "Show Settings Tab") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_VIDEO, + "Show Video Tab") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_THEME, + "XMB : Theme") +MSG_HASH(MENU_ENUM_LABEL_VALUE_YES, + "Oui") +MSG_HASH(MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_TWO, + "Shader Preset") +MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_ENABLE, + "Enable or disable achievements. For more information, visit http://retroachievements.org") +MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_TEST_UNOFFICIAL, + "Enable or disable unofficial achievements and/or beta features for testing purposes.") +MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_HARDCORE_MODE_ENABLE, + "Enable or disable savestates, cheats, rewind, fast-forward, pause, and slow-motion for all games.") +MSG_HASH(MENU_ENUM_SUBLABEL_DRIVER_SETTINGS, + "Change drivers for this system.") +MSG_HASH(MENU_ENUM_SUBLABEL_RETRO_ACHIEVEMENTS_SETTINGS, + "Change settings for the achievements.") +MSG_HASH(MENU_ENUM_SUBLABEL_CORE_SETTINGS, + "Change settings for the core.") +MSG_HASH(MENU_ENUM_SUBLABEL_RECORDING_SETTINGS, + "Change settings for the recording.") +MSG_HASH(MENU_ENUM_SUBLABEL_ONSCREEN_DISPLAY_SETTINGS, + "Change settings for display overlay, keyboard overlay and onscreen notifications.") +MSG_HASH(MENU_ENUM_SUBLABEL_FRAME_THROTTLE_SETTINGS, + "Change settings for rewinding, fast-forwarding, and slow-motion.") +MSG_HASH(MENU_ENUM_SUBLABEL_SAVING_SETTINGS, + "Change settings for the saving.") +MSG_HASH(MENU_ENUM_SUBLABEL_LOGGING_SETTINGS, + "Change settings for the logging.") +MSG_HASH(MENU_ENUM_SUBLABEL_USER_INTERFACE_SETTINGS, + "Change settings for the user interface.") +MSG_HASH(MENU_ENUM_SUBLABEL_USER_SETTINGS, + "Change accounts, username, and language.") +MSG_HASH(MENU_ENUM_SUBLABEL_PRIVACY_SETTINGS, + "Change your privacy settings.") +MSG_HASH(MENU_ENUM_SUBLABEL_DIRECTORY_SETTINGS, + "Change default directories for this system.") +MSG_HASH(MENU_ENUM_SUBLABEL_PLAYLIST_SETTINGS, + "Change settings for the playlists.") +MSG_HASH(MENU_ENUM_SUBLABEL_NETWORK_SETTINGS, + "Change settings for the network.") +MSG_HASH(MENU_ENUM_SUBLABEL_ADD_CONTENT_LIST, + "Scan contents and add to the database.") +MSG_HASH(MENU_ENUM_SUBLABEL_AUDIO_SETTINGS, + "Adjusts settings for audio output.") +MSG_HASH(MENU_ENUM_SUBLABEL_BLUETOOTH_ENABLE, + "Enable or disable bluetooth.") +MSG_HASH(MENU_ENUM_SUBLABEL_CONFIG_SAVE_ON_EXIT, + "Saves changes to configuration file on exit.") +MSG_HASH(MENU_ENUM_SUBLABEL_CONFIGURATION_SETTINGS, + "Change default settings for configuration files.") +MSG_HASH(MENU_ENUM_SUBLABEL_CONFIGURATIONS_LIST, + "Manage and create configuration files.") +MSG_HASH(MENU_ENUM_SUBLABEL_CPU_CORES, + "Amount of cores that the CPU has.") +MSG_HASH(MENU_ENUM_SUBLABEL_FPS_SHOW, + "Displays the current framerate per second onscreen.") +MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_HOTKEY_BINDS, + "Configure hotkey settings.") +MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO, + "Gamepad button combination to toggle menu.") +MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_SETTINGS, + "Adjusts settings for joypads, keyboard and mouse.") +MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_USER_BINDS, + "Configure controls for this user.") +MSG_HASH(MENU_ENUM_SUBLABEL_LOG_VERBOSITY, + "Enable or disable logging to the terminal.") +MSG_HASH(MENU_ENUM_SUBLABEL_NETPLAY, + "Join or host a netplay session.") +MSG_HASH(MENU_ENUM_SUBLABEL_INFORMATION_LIST_LIST, + "Display information for core, network, and system. Display manager for database and cursor.") +MSG_HASH(MENU_ENUM_SUBLABEL_ONLINE_UPDATER, + "Download add-ons, components and contents for RetroArch.") +MSG_HASH(MENU_ENUM_SUBLABEL_SAMBA_ENABLE, + "Enable or disable network sharing of your folders.") +MSG_HASH(MENU_ENUM_SUBLABEL_SERVICES_SETTINGS, + "Manage operating system level services.") +MSG_HASH(MENU_ENUM_SUBLABEL_SHOW_HIDDEN_FILES, + "Show hidden files/directories inside the file browser.") +MSG_HASH(MENU_ENUM_SUBLABEL_SSH_ENABLE, + "Enable or disable remote command line access.") +MSG_HASH(MENU_ENUM_SUBLABEL_SUSPEND_SCREENSAVER_ENABLE, + "Prevents your system's screensaver from becoming active.") +MSG_HASH(MENU_ENUM_SUBLABEL_USER_LANGUAGE, + "Sets the language of the interface.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, + "Inserts a black frame inbetween frames. Useful for users of 120 Hz monitors who want to play 60 Hz material with eliminated ghosting.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_FRAME_DELAY, + "Reduces latency at the cost of higher risk of video stuttering. Adds a delay after V-Sync (in ms).") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_HARD_SYNC_FRAMES, + "Sets how many frames the CPU can run ahead of the GPU when using 'Hard GPU Sync'.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_MAX_SWAPCHAIN_IMAGES, + "Tells the video driver to explicitly use a specified buffering mode.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_MONITOR_INDEX, + "Selects which display monitor to use.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_REFRESH_RATE_AUTO, + "The accurate estimated refresh rate of the monitor in Hz.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_SETTINGS, + "Adjusts settings for video output.") +MSG_HASH(MENU_ENUM_SUBLABEL_WIFI_SETTINGS, + "Scans for wireless networks and establishes connection.") +MSG_HASH(MENU_ENUM_SUBLABEL_HELP_LIST, + "Learn more about how it works.") +MSG_HASH(MSG_APPENDED_DISK, + "Disque fusionné") +MSG_HASH(MSG_APPLICATION_DIR, + "Application Dir") +MSG_HASH(MSG_APPLYING_CHEAT, + "Applying cheat changes.") +MSG_HASH(MSG_APPLYING_SHADER, + "Application du shader") +MSG_HASH(MSG_AUDIO_MUTED, + "Son coupé.") +MSG_HASH(MSG_AUDIO_UNMUTED, + "Remise du son.") +MSG_HASH(MSG_AUTOCONFIG_FILE_ERROR_SAVING, + "Error saving autoconf file.") +MSG_HASH(MSG_AUTOCONFIG_FILE_SAVED_SUCCESSFULLY, + "Autoconfig file saved successfully.") +MSG_HASH(MSG_AUTOSAVE_FAILED, + "Impossible d'activer l'enregistrement automatique.") +MSG_HASH(MSG_AUTO_SAVE_STATE_TO, + "Auto save state to") +MSG_HASH(MSG_BLOCKING_SRAM_OVERWRITE, + "Bloque l'écrasement de la SRAM") +MSG_HASH(MSG_BRINGING_UP_COMMAND_INTERFACE_ON_PORT, + "Bringing up command interface on port") +MSG_HASH(MSG_BYTES, + "octets") +MSG_HASH(MSG_CANNOT_INFER_NEW_CONFIG_PATH, + "Cannot infer new config path. Use current time.") +MSG_HASH(MSG_CHEEVOS_HARDCORE_MODE_ENABLE, + "Mode matériel activé , savestate et rembobinage sont désactivés.") +MSG_HASH(MSG_COMPARING_WITH_KNOWN_MAGIC_NUMBERS, + "Comparing with known magic numbers...") +MSG_HASH(MSG_COMPILED_AGAINST_API, + "Compiled against API") +MSG_HASH(MSG_CONFIG_DIRECTORY_NOT_SET, + "Répertoire de configuration non défini. Impossible de sauvegarder le nouveau fichier.") +MSG_HASH(MSG_CONNECTED_TO, + "Connected to") +MSG_HASH(MSG_CONTENT_CRC32S_DIFFER, + "Content CRC32s differ. Cannot use different games.") +MSG_HASH(MSG_CONTENT_LOADING_SKIPPED_IMPLEMENTATION_WILL_DO_IT, + "Content loading skipped. Implementation will load it on its own.") +MSG_HASH(MSG_CORE_DOES_NOT_SUPPORT_SAVESTATES, + "Le core ne supporte pas les savestates.") +MSG_HASH(MSG_CORE_OPTIONS_FILE_CREATED_SUCCESSFULLY, + "Core options file created successfully.") +MSG_HASH(MSG_COULD_NOT_FIND_ANY_NEXT_DRIVER, + "Could not find any next driver") +MSG_HASH(MSG_COULD_NOT_FIND_COMPATIBLE_SYSTEM, + "Could not find compatible system.") +MSG_HASH(MSG_COULD_NOT_FIND_VALID_DATA_TRACK, + "Could not find valid data track") +MSG_HASH(MSG_COULD_NOT_OPEN_DATA_TRACK, + "could not open data track") +MSG_HASH(MSG_COULD_NOT_READ_CONTENT_FILE, + "Impossible de lire le contenu du fichier") +MSG_HASH(MSG_COULD_NOT_READ_MOVIE_HEADER, + "Could not read movie header.") +MSG_HASH(MSG_COULD_NOT_READ_STATE_FROM_MOVIE, + "Could not read state from movie.") +MSG_HASH(MSG_CRC32_CHECKSUM_MISMATCH, + "CRC32 checksum mismatch between content file and saved content checksum in replay file header) replay highly likely to desync on playback.") +MSG_HASH(MSG_CUSTOM_TIMING_GIVEN, + "Temps personnalisé attribué") +MSG_HASH(MSG_DECOMPRESSION_ALREADY_IN_PROGRESS, + "Decompression already in progress.") +MSG_HASH(MSG_DECOMPRESSION_FAILED, + "Decompression failed.") +MSG_HASH(MSG_DETECTED_VIEWPORT_OF, + "Détection du visuel") +MSG_HASH(MSG_DID_NOT_FIND_A_VALID_CONTENT_PATCH, + "Did not find a valid content patch.") +MSG_HASH(MSG_DISCONNECT_DEVICE_FROM_A_VALID_PORT, + "Disconnect device from a valid port.") +MSG_HASH(MSG_DISK_CLOSED, + "Closed") +MSG_HASH(MSG_DISK_EJECTED, + "Ejected") +MSG_HASH(MSG_DOWNLOADING, + "Téléchargement") +MSG_HASH(MSG_DOWNLOAD_FAILED, + "Download failed") +MSG_HASH(MSG_ERROR, + "Error") +MSG_HASH(MSG_ERROR_LIBRETRO_CORE_REQUIRES_CONTENT, + "Libretro core requires content, but nothing was provided.") +MSG_HASH(MSG_ERROR_LIBRETRO_CORE_REQUIRES_SPECIAL_CONTENT, + "Libretro core requires special content, but none were provided.") +MSG_HASH(MSG_ERROR_PARSING_ARGUMENTS, + "Error parsing arguments.") +MSG_HASH(MSG_ERROR_SAVING_CORE_OPTIONS_FILE, + "Error saving core options file.") +MSG_HASH(MSG_ERROR_SAVING_REMAP_FILE, + "Error saving remap file.") +MSG_HASH(MSG_ERROR_SAVING_SHADER_PRESET, + "Error saving shader preset.") +MSG_HASH(MSG_EXTERNAL_APPLICATION_DIR, + "External Application Dir") +MSG_HASH(MSG_EXTRACTING, + "Extraction") +MSG_HASH(MSG_EXTRACTING_FILE, + "Extracting file") +MSG_HASH(MSG_FAILED_SAVING_CONFIG_TO, + "Failed saving config to") +MSG_HASH(MSG_FAILED_TO, + "Échec de") +MSG_HASH(MSG_FAILED_TO_ACCEPT_INCOMING_SPECTATOR, + "Failed to accept incoming spectator.") +MSG_HASH(MSG_FAILED_TO_ALLOCATE_MEMORY_FOR_PATCHED_CONTENT, + "Failed to allocate memory for patched content...") +MSG_HASH(MSG_FAILED_TO_APPLY_SHADER, + "Impossible d'appliquer le shader.") +MSG_HASH(MSG_FAILED_TO_BIND_SOCKET, + "Failed to bind socket.") +MSG_HASH(MSG_FAILED_TO_CREATE_THE_DIRECTORY, + "Failed to create the directory.") +MSG_HASH(MSG_FAILED_TO_EXTRACT_CONTENT_FROM_COMPRESSED_FILE, + "Failed to extract content from compressed file") +MSG_HASH(MSG_FAILED_TO_GET_NICKNAME_FROM_CLIENT, + "Failed to get nickname from client.") +MSG_HASH(MSG_FAILED_TO_LOAD, + "Failed to load") +MSG_HASH(MSG_FAILED_TO_LOAD_CONTENT, + "Échec du chargement du fichier") +MSG_HASH(MSG_FAILED_TO_LOAD_MOVIE_FILE, + "Échec du chargement du fichier vidéo") +MSG_HASH(MSG_FAILED_TO_LOAD_OVERLAY, + "Impossible de charger l'overlay.") +MSG_HASH(MSG_FAILED_TO_LOAD_STATE, + "Impossible de charger la savestate à partir de") +MSG_HASH(MSG_FAILED_TO_OPEN_LIBRETRO_CORE, + "Failed to open libretro core") +MSG_HASH(MSG_FAILED_TO_PATCH, + "Failed to patch") +MSG_HASH(MSG_FAILED_TO_RECEIVE_HEADER_FROM_CLIENT, + "Failed to receive header from client.") +MSG_HASH(MSG_FAILED_TO_RECEIVE_NICKNAME, + "Failed to receive nickname.") +MSG_HASH(MSG_FAILED_TO_RECEIVE_NICKNAME_FROM_HOST, + "Failed to receive nickname from host.") +MSG_HASH(MSG_FAILED_TO_RECEIVE_NICKNAME_SIZE_FROM_HOST, + "Failed to receive nickname size from host.") +MSG_HASH(MSG_FAILED_TO_RECEIVE_SRAM_DATA_FROM_HOST, + "Failed to receive SRAM data from host.") +MSG_HASH(MSG_FAILED_TO_REMOVE_DISK_FROM_TRAY, + "Impossible d'éjecter le disque du lecteur.") +MSG_HASH(MSG_FAILED_TO_REMOVE_TEMPORARY_FILE, + "Impossible de supprimer le fichier temporaire") +MSG_HASH(MSG_FAILED_TO_SAVE_SRAM, + "Impossible de sauvegarder la SRAM") +MSG_HASH(MSG_FAILED_TO_SAVE_STATE_TO, + "Impossible de sauvegarder la savestate vers") +MSG_HASH(MSG_FAILED_TO_SEND_NICKNAME, + "Failed to send nickname.") +MSG_HASH(MSG_FAILED_TO_SEND_NICKNAME_SIZE, + "Failed to send nickname size.") +MSG_HASH(MSG_FAILED_TO_SEND_NICKNAME_TO_CLIENT, + "Failed to send nickname to client.") +MSG_HASH(MSG_FAILED_TO_SEND_NICKNAME_TO_HOST, + "Failed to send nickname to host.") +MSG_HASH(MSG_FAILED_TO_SEND_SRAM_DATA_TO_CLIENT, + "Failed to send SRAM data to client.") +MSG_HASH(MSG_FAILED_TO_START_AUDIO_DRIVER, + "Failed to start audio driver. Will continue without audio.") +MSG_HASH(MSG_FAILED_TO_START_MOVIE_RECORD, + "Impossible de démarrer l'enregistrement vidéo.") +MSG_HASH(MSG_FAILED_TO_START_RECORDING, + "Échec de l'activation de l'enregistrement.") +MSG_HASH(MSG_FAILED_TO_TAKE_SCREENSHOT, + "Échec de la copie d'écran.") +MSG_HASH(MSG_FAILED_TO_UNDO_LOAD_STATE, + "Aucun savestate de retour arrière trouvé") +MSG_HASH(MSG_FAILED_TO_UNDO_SAVE_STATE, + "Impossible de sauvegarder les informations de savestate de retour arrière") +MSG_HASH(MSG_FAILED_TO_UNMUTE_AUDIO, + "Impossible de remettre le son.") +MSG_HASH(MSG_FATAL_ERROR_RECEIVED_IN, + "Fatal error received in") +MSG_HASH(MSG_FILE_NOT_FOUND, + "File not found") +MSG_HASH(MSG_FOUND_AUTO_SAVESTATE_IN, + "Found auto savestate in") +MSG_HASH(MSG_FOUND_DISK_LABEL, + "Found disk label") +MSG_HASH(MSG_FOUND_FIRST_DATA_TRACK_ON_FILE, + "Found first data track on file") +MSG_HASH(MSG_FOUND_LAST_STATE_SLOT, + "Found last state slot") +MSG_HASH(MSG_FOUND_SHADER, + "Shader trouvé") +MSG_HASH(MSG_FRAMES, + "Frames") +MSG_HASH(MSG_GAME_SPECIFIC_CORE_OPTIONS_FOUND_AT, + "Per-Game Options: game-specific core options found at") +MSG_HASH(MSG_GOT_INVALID_DISK_INDEX, + "Index du disque invalide.") +MSG_HASH(MSG_GRAB_MOUSE_STATE, + "Capture la souris") +MSG_HASH(MSG_HW_RENDERED_MUST_USE_POSTSHADED_RECORDING, + "Le core Libretro utilise le rendu matériel. Obligation d'utiliser également l'enregistrement post-shaded.") +MSG_HASH(MSG_INFLATED_CHECKSUM_DID_NOT_MATCH_CRC32, + "Inflated checksum did not match CRC32.") +MSG_HASH(MSG_INPUT_CHEAT, + "Input Cheat") +MSG_HASH(MSG_INPUT_CHEAT_FILENAME, + "Cheat Filename") +MSG_HASH(MSG_INPUT_PRESET_FILENAME, + "Preset Filename") +MSG_HASH(MSG_INTERFACE, + "Interface") +MSG_HASH(MSG_INTERNAL_STORAGE, + "Internal Storage") +MSG_HASH(MSG_REMOVABLE_STORAGE, + "Removable Storage") +MSG_HASH(MSG_INVALID_NICKNAME_SIZE, + "Invalid nickname size.") +MSG_HASH(MSG_IN_BYTES, + "in bytes") +MSG_HASH(MSG_IN_GIGABYTES, + "in gigabytes") +MSG_HASH(MSG_IN_MEGABYTES, + "in megabytes") +MSG_HASH(MSG_LIBRETRO_ABI_BREAK, + "est compilé avec une version différente de la bibliothèque libretro actuelle.") +MSG_HASH(MSG_LIBRETRO_FRONTEND, + "Frontend for libretro") +MSG_HASH(MSG_LOADED_STATE_FROM_SLOT, + "Chargement du savestate à partir du slot #%d.") +MSG_HASH(MSG_LOADED_STATE_FROM_SLOT_AUTO, + "Chargement du savestate à partir du slot #-1 (auto).") +MSG_HASH(MSG_LOADING, + "Loading") +MSG_HASH(MSG_FIRMWARE, + "One or more firmware files are missing") +MSG_HASH(MSG_LOADING_CONTENT_FILE, + "Chargement du contenu") +MSG_HASH(MSG_LOADING_HISTORY_FILE, + "Loading history file") +MSG_HASH(MSG_LOADING_STATE, + "Chargement savestate") +MSG_HASH(MSG_MEMORY, + "Memory") +MSG_HASH(MSG_MOVIE_FILE_IS_NOT_A_VALID_BSV1_FILE, + "Movie file is not a valid BSV1 file.") +MSG_HASH(MSG_MOVIE_FORMAT_DIFFERENT_SERIALIZER_VERSION, + "Movie format seems to have a different serializer version. Will most likely fail.") +MSG_HASH(MSG_MOVIE_PLAYBACK_ENDED, + "Fin de la lecture vidéo") +MSG_HASH(MSG_MOVIE_RECORD_STOPPED, + "Arrêt de l'enregistrement vidéo.") +MSG_HASH(MSG_NETPLAY_FAILED, + "Échec de l'initialisation du jeu en réseau") +MSG_HASH(MSG_NETPLAY_FAILED_MOVIE_PLAYBACK_HAS_STARTED, + "Lecture en cours. Impossible d'activer le jeu en réseau.") +MSG_HASH(MSG_NO_CONTENT_STARTING_DUMMY_CORE, + "No content, starting dummy core.") +MSG_HASH(MSG_NO_SAVE_STATE_HAS_BEEN_OVERWRITTEN_YET, + "No save state has been overwritten yet.") +MSG_HASH(MSG_NO_STATE_HAS_BEEN_LOADED_YET, + "No state has been loaded yet.") +MSG_HASH(MSG_OVERRIDES_ERROR_SAVING, + "Error saving overrides.") +MSG_HASH(MSG_OVERRIDES_SAVED_SUCCESSFULLY, + "Overrides saved successfully.") +MSG_HASH(MSG_PAUSED, + "Pause.") +MSG_HASH(MSG_PROGRAM, + "RetroArch") +MSG_HASH(MSG_READING_FIRST_DATA_TRACK, + "Reading first data track...") +MSG_HASH(MSG_RECEIVED, + "Reçu") +MSG_HASH(MSG_RECORDING_TERMINATED_DUE_TO_RESIZE, + "Enregistrement interrompu à cause du redimensionnement.") +MSG_HASH(MSG_RECORDING_TO, + "Enregistrement vers") +MSG_HASH(MSG_REDIRECTING_CHEATFILE_TO, + "Redirection du fichier triche vers") +MSG_HASH(MSG_REDIRECTING_SAVEFILE_TO, + "Redirection de la sauvegarde vers") +MSG_HASH(MSG_REDIRECTING_SAVESTATE_TO, + "Redirection de la savestate vers") +MSG_HASH(MSG_REMAP_FILE_SAVED_SUCCESSFULLY, + "Remap file saved successfully.") +MSG_HASH(MSG_REMOVED_DISK_FROM_TRAY, + "Éjection du disque du lecteur.") +MSG_HASH(MSG_REMOVING_TEMPORARY_CONTENT_FILE, + "Suppression du fichier temporaire") +MSG_HASH(MSG_RESET, + "Reset") +MSG_HASH(MSG_RESTARTING_RECORDING_DUE_TO_DRIVER_REINIT, + "Redémarrage de l'enregistrement à cause de la réinitialisation du pilote.") +MSG_HASH(MSG_RESTORED_OLD_SAVE_STATE, + "Restored old save state.") +MSG_HASH(MSG_RESTORING_DEFAULT_SHADER_PRESET_TO, + "Shaders: restoring default shader preset to") +MSG_HASH(MSG_REVERTING_SAVEFILE_DIRECTORY_TO, + "Reverting savefile directory to") +MSG_HASH(MSG_REVERTING_SAVESTATE_DIRECTORY_TO, + "Reverting savestate directory to") +MSG_HASH(MSG_REWINDING, + "Rembobinage.") +MSG_HASH(MSG_REWIND_INIT, + "Initialisation du tampon pour le retour rapide avec une taille") +MSG_HASH(MSG_REWIND_INIT_FAILED, + "Échec de l'initialisation du tampon pour le retour rapide. Cette fonctionnalité sera désactivée.") +MSG_HASH(MSG_REWIND_INIT_FAILED_THREADED_AUDIO, + "L'implémentation utilise audio thread. Impossible d'activer le retour rapide.") +MSG_HASH(MSG_REWIND_REACHED_END, + "Atteinte de la fin du tampon de rembobinage.") +MSG_HASH(MSG_SAVED_NEW_CONFIG_TO, + "Saved new config to") +MSG_HASH(MSG_SAVED_STATE_TO_SLOT, + "Savestate vers slot #%d.") +MSG_HASH(MSG_SAVED_STATE_TO_SLOT_AUTO, + "Savestate vers slot #-1 (auto).") +MSG_HASH(MSG_SAVED_SUCCESSFULLY_TO, + "Sauvegarde réussie vers") +MSG_HASH(MSG_SAVING_RAM_TYPE, + "Sauvegarde du type de RAM") +MSG_HASH(MSG_SAVING_STATE, + "Sauvegarde savestate") +MSG_HASH(MSG_SCANNING, + "Analyse") +MSG_HASH(MSG_SCANNING_OF_DIRECTORY_FINISHED, + "Analyse des dossiers terminée") +MSG_HASH(MSG_SENDING_COMMAND, + "Envoi commande") +MSG_HASH(MSG_SEVERAL_PATCHES_ARE_EXPLICITLY_DEFINED, + "Several patches are explicitly defined, ignoring all...") +MSG_HASH(MSG_SHADER, + "Shader") +MSG_HASH(MSG_SHADER_PRESET_SAVED_SUCCESSFULLY, + "Shader preset saved successfully.") +MSG_HASH(MSG_SKIPPING_SRAM_LOAD, + "Ignore le chargement de la SRAM.") +MSG_HASH(MSG_SLOW_MOTION, + "Ralenti.") +MSG_HASH(MSG_SLOW_MOTION_REWIND, + "Rembobinage ralenti.") +MSG_HASH(MSG_SRAM_WILL_NOT_BE_SAVED, + "SRAM ne sera pas sauvegardée.") +MSG_HASH(MSG_STARTING_MOVIE_PLAYBACK, + "Démarrage de la lecture vidéo.") +MSG_HASH(MSG_STARTING_MOVIE_RECORD_TO, + "Démarrage de l'enregistrement vidéo vers") +MSG_HASH(MSG_STATE_SIZE, + "Taille savestate") +MSG_HASH(MSG_STATE_SLOT, + "State slot") +MSG_HASH(MSG_TAKING_SCREENSHOT, + "Réalisation d'une copie d'écran.") +MSG_HASH(MSG_TO, + "de") +MSG_HASH(MSG_UNDID_LOAD_STATE, + "Undid load state.") +MSG_HASH(MSG_UNDOING_SAVE_STATE, + "Undoing save state") +MSG_HASH(MSG_UNKNOWN, + "Inconnu") +MSG_HASH(MSG_UNPAUSED, + "Relancé.") +MSG_HASH(MSG_UNRECOGNIZED_COMMAND, + "Commande non reconnue") +MSG_HASH(MSG_USING_CORE_NAME_FOR_NEW_CONFIG, + "Using core name for new config.") +MSG_HASH(MSG_USING_LIBRETRO_DUMMY_CORE_RECORDING_SKIPPED, + "Utilisation d'un core libretro simple. Ignore l'enregistrement.") +MSG_HASH(MSG_VALUE_CONNECT_DEVICE_FROM_A_VALID_PORT, + "Connect device from a valid port.") +MSG_HASH(MSG_VALUE_DISCONNECTING_DEVICE_FROM_PORT, + "Disconnecting device from port") +MSG_HASH(MSG_VALUE_REBOOTING, + "Rebooting...") +MSG_HASH(MSG_VALUE_SHUTTING_DOWN, + "Shutting down...") +MSG_HASH(MSG_VERSION_OF_LIBRETRO_API, + "Version of libretro API") +MSG_HASH(MSG_VIEWPORT_SIZE_CALCULATION_FAILED, + "Échec du calcul de la taille du visuel ! Utilisation des données brutes. Cela ne fonctionnera probablement pas bien ...") +MSG_HASH(MSG_VIRTUAL_DISK_TRAY, + "Lecteur de disque virtuel.") +MSG_HASH(MENU_ENUM_SUBLABEL_AUDIO_LATENCY, + "Desired audio latency in milliseconds. Might not be honored if the audio driver can't provide given latency.") +MSG_HASH(MENU_ENUM_SUBLABEL_AUDIO_MUTE, + "Mute/unmute audio.") +MSG_HASH( + MENU_ENUM_SUBLABEL_AUDIO_RATE_CONTROL_DELTA, + "Helps smooth out imperfections in timing when synchronizing audio and video at the same time. Be aware that if disabled, proper synchronization is nearly impossible to obtain." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CAMERA_ALLOW, + "Allow or disallow camera access by cores." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_LOCATION_ALLOW, + "Allow or disallow location services access by cores." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_MAX_USERS, + "Maximum amount of users supported by RetroArch." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_POLL_TYPE_BEHAVIOR, + "Influence how input polling is done inside RetroArch. Setting it to 'Early' or 'Late' can result in less latency, depending on your configuration." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_ALL_USERS_CONTROL_MENU, + "Allows any user to control the menu. If disabled, only User 1 can control the menu." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_AUDIO_VOLUME, + "Audio volume (in dB). 0 dB is normal volume, no gain applied." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_AUDIO_SYNC, + "Synchronize audio. Recommended." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_AXIS_THRESHOLD, + "How far an axis must be tilted to result in a button press." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_BIND_TIMEOUT, + "Amount of seconds to wait until proceeding to the next bind." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_TURBO_PERIOD, + "Describes the period of which turbo-enabled buttons toggle. Numbers are described in frames." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_DUTY_CYCLE, + "Describes how long the period of a turbo-enabled button should be. Numbers are described in frames." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_VIDEO_VSYNC, + "Synchronizes the output video of the graphics card to the refresh rate of the monitor. Recommended." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_VIDEO_ALLOW_ROTATE, + "Allow cores to set rotation. When disabled, rotation requests are ignored. Useful for setups where one manually rotates the monitor." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_DUMMY_ON_CORE_SHUTDOWN, + "Some cores might have a shutdown feature. If enabled, it will prevent the core from shutting RetroArch down. Instead, it loads a dummy core." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CHECK_FOR_MISSING_FIRMWARE, + "Check if all the required firmware is present before attempting to load content." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_VIDEO_REFRESH_RATE, + "Vertical refresh rate of your monitor. Used to calculate a suitable audio input rate. NOTE: This will be ignored if 'Threaded Video' is enabled." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_AUDIO_ENABLE, + "Enable audio output." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_AUDIO_MAX_TIMING_SKEW, + "The maximum change in audio input rate. You may want to increase this to enable very large changes in timing, for example running PAL cores on NTSC displays, at the cost of inaccurate audio pitch." + ) +MSG_HASH( + MSG_FAILED, + "failed" + ) +MSG_HASH( + MSG_SUCCEEDED, + "succeeded" + ) +MSG_HASH( + MSG_DEVICE_NOT_CONFIGURED, + "not configured" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST, + "Database Cursor List" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_DEVELOPER, + "Database - Filter : Developer" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_PUBLISHER, + "Database - Filter : Publisher" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_DISABLED, + "Désactivé" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ENABLED, + "Enabled" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONTENT_HISTORY_PATH, + "Content History Path" + ) +MSG_HASH( + MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_ORIGIN, + "Database - Filter : Origin") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_FRANCHISE, + "Database - Filter : Franchise") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_ESRB_RATING, + "Database - Filter : ESRB Rating") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_ELSPA_RATING, + "Database - Filter : ELSPA Rating") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_PEGI_RATING, + "Database - Filter : PEGI Rating") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_CERO_RATING, + "Database - Filter : CERO Rating") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_BBFC_RATING, + "Database - Filter : BBFC Rating") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_MAX_USERS, + "Database - Filter : Max Users") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_RELEASEDATE_BY_MONTH, + "Database - Filter : Releasedate By Month") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_RELEASEDATE_BY_YEAR, + "Database - Filter : Releasedate By Year") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_EDGE_MAGAZINE_ISSUE, + "Database - Filter : Edge Magazine Issue") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_EDGE_MAGAZINE_RATING, + "Database - Filter : Edge Magazine Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_DATABASE_INFO, + "Database Info") +MSG_HASH(MENU_ENUM_SUBLABEL_PAUSE_NONACTIVE, + "Pause gameplay when window focus is lost.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_DISABLE_COMPOSITION, + "Enable or disable composition (Windows only).") +MSG_HASH(MENU_ENUM_SUBLABEL_HISTORY_LIST_ENABLE, + "Enable or disable recent playlist for games, images, music, and videos.") +MSG_HASH(MENU_ENUM_SUBLABEL_CONTENT_HISTORY_SIZE, + "Limit the number of entries in recent playlist for games, images, music, and videos.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_UNIFIED_MENU_CONTROLS, + "Unified Menu Controls") +MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_UNIFIED_MENU_CONTROLS, + "Use the same controls for both the menu and the game. Applies to the keyboard.") diff --git a/intl/msg_hash_it.c b/intl/msg_hash_it.c index af27b24523..c2159671d6 100644 --- a/intl/msg_hash_it.c +++ b/intl/msg_hash_it.c @@ -1177,8 +1177,6 @@ const char *msg_hash_to_str_it(enum msg_hash_enums msg) return "Che cosa è un core?"; case MENU_ENUM_LABEL_VALUE_INFORMATION_LIST: return "Informazioni"; - case MENU_ENUM_LABEL_VALUE_INPUT_BACK_AS_MENU_TOGGLE_ENABLE: - return "Indietro quando il menù a comparsa è abilitato"; case MENU_ENUM_LABEL_VALUE_INPUT_KEYBOARD_GAMEPAD_MAPPING_TYPE: return "Tipologia di mappatura gamepad tastiera"; case MENU_ENUM_LABEL_VALUE_INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO: @@ -1229,41 +1227,16 @@ const char *msg_hash_to_str_it(enum msg_hash_enums msg) return "Aggiorna le info dei core"; case MENU_ENUM_LABEL_VALUE_USE_BUILTIN_PLAYER: return "Usa Media Player interno"; -#if 0 case MENU_ENUM_LABEL_VALUE_HORIZONTAL_MENU: return "Menú orizzontale"; -#else - case MENU_ENUM_LABEL_VALUE_HORIZONTAL_MENU: - return "Horizontal Menu"; -#endif -#if 0 case MENU_ENUM_LABEL_VALUE_SETTINGS_TAB: return "Settaggi scheda"; -#else - case MENU_ENUM_LABEL_VALUE_SETTINGS_TAB: - return "Settings tab"; -#endif -#if 0 case MENU_ENUM_LABEL_VALUE_HISTORY_TAB: return "Cronologia scheda"; -#else - case MENU_ENUM_LABEL_VALUE_HISTORY_TAB: - return "History tab"; -#endif -#if 1 - case MENU_ENUM_LABEL_VALUE_ADD_TAB: - return "Add tab"; -#else case MENU_ENUM_LABEL_VALUE_ADD_TAB: return "Aggiungi scheda"; -#endif -#if 0 case MENU_ENUM_LABEL_VALUE_PLAYLISTS_TAB: return "Scheda Playlist"; -#else - case MENU_ENUM_LABEL_VALUE_PLAYLISTS_TAB: - return "Playlists tab"; -#endif case MENU_ENUM_LABEL_VALUE_NO_SETTINGS_FOUND: return "Nessun settaggio trovato."; case MENU_ENUM_LABEL_VALUE_NO_PERFORMANCE_COUNTERS: @@ -1394,10 +1367,6 @@ const char *msg_hash_to_str_it(enum msg_hash_enums msg) return "Directory Shader Video"; case MENU_ENUM_LABEL_VALUE_VIDEO_FILTER_DIR: return "Directory Filtro Video"; - case MENU_ENUM_LABEL_VALUE_OVERLAY_DIRECTORY: - return "Directory Overlay"; - case MENU_ENUM_LABEL_VALUE_OSK_OVERLAY_DIRECTORY: - return "Directory Overlay OSK"; case MENU_ENUM_LABEL_VALUE_NETPLAY_CLIENT_SWAP_INPUT: return "Giocatore 2 usa Controller 1 in rete"; case MENU_ENUM_LABEL_VALUE_NETPLAY_SPECTATOR_MODE_ENABLE: @@ -1520,8 +1489,6 @@ const char *msg_hash_to_str_it(enum msg_hash_enums msg) return "Carica file di override automaticamente"; case MENU_ENUM_LABEL_VALUE_CONFIG_SAVE_ON_EXIT: return "Salva configurazione all'uscita"; - case MENU_ENUM_LABEL_VALUE_CONFIRM_ON_EXIT: - return "Chiedi conferma all'uscita"; case MENU_ENUM_LABEL_VALUE_SHOW_HIDDEN_FILES: return "Mostra files e cartelle nascoste"; case MENU_ENUM_LABEL_VALUE_VIDEO_SMOOTH: @@ -1536,10 +1503,6 @@ const char *msg_hash_to_str_it(enum msg_hash_enums msg) return "Intervallo di swap vsync"; case MENU_ENUM_LABEL_VALUE_VIDEO_MAX_SWAPCHAIN_IMAGES: return "Massimo swapchain di immagini"; - case MENU_ENUM_LABEL_VALUE_VIDEO_VSYNC: - return "VSync"; - case MENU_ENUM_LABEL_VALUE_VIDEO_THREADED: - return "Threaded Video"; case MENU_ENUM_LABEL_VALUE_VIDEO_ROTATION: return "Rotazione"; case MENU_ENUM_LABEL_VALUE_VIDEO_GPU_SCREENSHOT: @@ -1810,8 +1773,6 @@ const char *msg_hash_to_str_it(enum msg_hash_enums msg) return "Latenza audio (ms)"; case MENU_ENUM_LABEL_VALUE_AUDIO_DEVICE: return "Dispositivo audio"; - case MENU_ENUM_LABEL_VALUE_KEYBOARD_OVERLAY_PRESET: - return "Preimpostato Overlay Tastiera"; case MENU_ENUM_LABEL_VALUE_OVERLAY_OPACITY: return "Opacità Overlay"; case MENU_ENUM_LABEL_VALUE_MENU_WALLPAPER: @@ -1822,8 +1783,6 @@ const char *msg_hash_to_str_it(enum msg_hash_enums msg) return "Opzioni di rimappatura degli input del core"; case MENU_ENUM_LABEL_VALUE_THUMBNAILS: return "Miniature"; - case MENU_ENUM_LABEL_VALUE_SHADER_OPTIONS: - return "Shaders"; case MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PARAMETERS: return "Antemprima Parametri Shader"; case MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_PARAMETERS: @@ -1877,9 +1836,7 @@ const char *msg_hash_to_str_it(enum msg_hash_enums msg) case MENU_ENUM_LABEL_VALUE_CORE_INFO_SUPPORTED_EXTENSIONS: return "Estensioni supportate"; case MENU_ENUM_LABEL_VALUE_CORE_INFO_FIRMWARE: - return "Firmware"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_NOTES: - return "Note del core"; + return "Firmware(s)"; case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_BUILD_DATE: return "Data della build"; case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_GIT_VERSION: @@ -2191,8 +2148,10 @@ const char *msg_hash_to_str_it(enum msg_hash_enums msg) return "Normale"; case MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR_EARLY: return "Presto"; - case MSG_INTERNAL_MEMORY: + case MSG_INTERNAL_STORAGE: return "Memoria interna"; + case MSG_REMOVABLE_STORAGE: + return "Removable storage"; case MSG_EXTERNAL_APPLICATION_DIR: return "Directory app esterna"; case MSG_APPLICATION_DIR: diff --git a/intl/msg_hash_ja.c b/intl/msg_hash_ja.c index 5252682b82..aab54ea489 100644 --- a/intl/msg_hash_ja.c +++ b/intl/msg_hash_ja.c @@ -354,6 +354,16 @@ int menu_hash_get_help_jp_enum(enum msg_hash_enums msg, char *s, size_t len) "inside the menu and RetroArch won't \n" "shutdown."); break; + case MENU_ENUM_LABEL_CHECK_FOR_MISSING_FIRMWARE: + snprintf(s, len, + "Some cores might need \n" + "firmware or bios files. \n" + " \n" + "If this option is disabled, \n" + "it will try to load even if such \n" + "firmware is missing. \n" + "down. \n"); + break; case MENU_ENUM_LABEL_PARENT_DIRECTORY: snprintf(s, len, "Go back to the parent directory."); @@ -574,10 +584,6 @@ int menu_hash_get_help_jp_enum(enum msg_hash_enums msg, char *s, size_t len) "Amount of seconds to wait until proceeding \n" "to the next bind."); break; - case MENU_ENUM_LABEL_KEYBOARD_OVERLAY_PRESET: - snprintf(s, len, - "Path to onscreen keyboard overlay."); - break; case MENU_ENUM_LABEL_OVERLAY_SCALE: snprintf(s, len, "Overlay scale."); @@ -960,6 +966,11 @@ int menu_hash_get_help_jp_enum(enum msg_hash_enums msg, char *s, size_t len) "shaders." ); break; + case MENU_ENUM_LABEL_CONFIGURATION_SETTINGS: + snprintf(s, len, + "Determines how configuration files \n" + "are loaded and prioritized."); + break; case MENU_ENUM_LABEL_CONFIG_SAVE_ON_EXIT: snprintf(s, len, "Saves config to disk on exit.\n" @@ -1604,6 +1615,10 @@ int menu_hash_get_help_jp_enum(enum msg_hash_enums msg, char *s, size_t len) snprintf(s, len, "Setting related to Netplay."); break; + case MENU_ENUM_LABEL_NETPLAY_LAN_SCAN_SETTINGS: + snprintf(s, len, + "Search for and connect to netplay hosts on the local network."); + break; case MENU_ENUM_LABEL_DYNAMIC_WALLPAPER: snprintf(s, len, "Dynamically load a new wallpaper \n" @@ -1882,2957 +1897,11 @@ int menu_hash_get_help_jp_enum(enum msg_hash_enums msg, char *s, size_t len) return 0; } -#ifdef HAVE_MENU -static const char *menu_hash_to_str_jp_label_enum(enum msg_hash_enums msg) -{ - if (msg <= MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_END && - msg >= MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_BEGIN) - { - static char hotkey_lbl[128] = {0}; - unsigned idx = msg - MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_BEGIN; - snprintf(hotkey_lbl, sizeof(hotkey_lbl), "input_hotkey_binds_%d", idx); - return hotkey_lbl; - } - - switch (msg) - { - case MENU_ENUM_LABEL_ACCOUNTS_CHEEVOS_USERNAME: - return "accounts_cheevos_username"; - case MENU_ENUM_LABEL_ACCOUNTS_LIST: - return "accounts_list"; - case MENU_ENUM_LABEL_ACCOUNTS_RETRO_ACHIEVEMENTS: - return "retro_achievements"; - case MENU_ENUM_LABEL_ACHIEVEMENT_LIST: - return "achievement_list"; - case MENU_ENUM_LABEL_ADD_CONTENT_LIST: - return "add_content"; - case MENU_ENUM_LABEL_ADD_TAB: - return "add_tab"; - case MENU_ENUM_LABEL_ARCHIVE_MODE: - return "archive_mode"; - case MENU_ENUM_LABEL_ASSETS_DIRECTORY: - return "assets_directory"; - case MENU_ENUM_LABEL_AUDIO_BLOCK_FRAMES: - return "audio_block_frames"; - case MENU_ENUM_LABEL_AUDIO_DEVICE: - return "audio_device"; - case MENU_ENUM_LABEL_AUDIO_DRIVER: - return "audio_driver"; - case MENU_ENUM_LABEL_AUDIO_DSP_PLUGIN: - return "audio_dsp_plugin"; - case MENU_ENUM_LABEL_AUDIO_ENABLE: - return "audio_enable"; - case MENU_ENUM_LABEL_AUDIO_FILTER_DIR: - return "audio_filter_dir"; - case MENU_ENUM_LABEL_AUDIO_LATENCY: - return "audio_latency"; - case MENU_ENUM_LABEL_AUDIO_MAX_TIMING_SKEW: - return "audio_max_timing_skew"; - case MENU_ENUM_LABEL_AUDIO_MUTE: - return "audio_mute_enable"; - case MENU_ENUM_LABEL_AUDIO_OUTPUT_RATE: - return "audio_output_rate"; - case MENU_ENUM_LABEL_AUDIO_RATE_CONTROL_DELTA: - return "audio_rate_control_delta"; - case MENU_ENUM_LABEL_AUDIO_RESAMPLER_DRIVER: - return "audio_resampler_driver"; - case MENU_ENUM_LABEL_AUDIO_SETTINGS: - return "audio_settings"; - case MENU_ENUM_LABEL_AUDIO_SYNC: - return "audio_sync"; - case MENU_ENUM_LABEL_AUDIO_VOLUME: - return "audio_volume"; - case MENU_ENUM_LABEL_AUTOSAVE_INTERVAL: - return "autosave_interval"; - case MENU_ENUM_LABEL_AUTO_OVERRIDES_ENABLE: - return "auto_overrides_enable"; - case MENU_ENUM_LABEL_AUTO_REMAPS_ENABLE: - return "auto_remaps_enable"; - case MENU_ENUM_LABEL_AUTO_SHADERS_ENABLE: - return "auto_shaders_enable"; - case MENU_ENUM_LABEL_BLOCK_SRAM_OVERWRITE: - return "block_sram_overwrite"; - case MENU_ENUM_LABEL_BLUETOOTH_ENABLE: - return "bluetooth_enable"; - case MENU_ENUM_LABEL_BUILDBOT_ASSETS_URL: - return "buildbot_assets_url"; - case MENU_ENUM_LABEL_CACHE_DIRECTORY: - return "cache_directory"; - case MENU_ENUM_LABEL_CAMERA_ALLOW: - return "camera_allow"; - case MENU_ENUM_LABEL_CAMERA_DRIVER: - return "camera_driver"; - case MENU_ENUM_LABEL_CB_CORE_CONTENT_DIRS_LIST: - return "cb_core_content_dirs_list"; - case MENU_ENUM_LABEL_CB_CORE_CONTENT_DOWNLOAD: - return "cb_core_content_download"; - case MENU_ENUM_LABEL_CB_CORE_CONTENT_LIST: - return "cb_core_content_list"; - case MENU_ENUM_LABEL_CB_CORE_THUMBNAILS_DOWNLOAD: - return "cb_core_thumbnails_download"; - case MENU_ENUM_LABEL_CB_CORE_UPDATER_DOWNLOAD: - return "cb_core_updater_download"; - case MENU_ENUM_LABEL_CB_CORE_UPDATER_LIST: - return "cb_core_updater_list"; - case MENU_ENUM_LABEL_CB_DOWNLOAD_URL: - return "cb_download_url"; - case MENU_ENUM_LABEL_CB_LAKKA_DOWNLOAD: - return "cb_lakka_download"; - case MENU_ENUM_LABEL_CB_LAKKA_LIST: - return "cb_lakka_list"; - case MENU_ENUM_LABEL_CB_MENU_THUMBNAIL: - return "cb_menu_thumbnail"; - case MENU_ENUM_LABEL_CB_MENU_WALLPAPER: - return "cb_menu_wallpaper"; - case MENU_ENUM_LABEL_CB_THUMBNAILS_UPDATER_DOWNLOAD: - return "cb_thumbnails_updater_download"; - case MENU_ENUM_LABEL_CB_THUMBNAILS_UPDATER_LIST: - return "cb_thumbnails_updater_list"; - case MENU_ENUM_LABEL_CB_UPDATE_ASSETS: - return "cb_update_assets"; - case MENU_ENUM_LABEL_CB_UPDATE_AUTOCONFIG_PROFILES: - return "cb_update_autoconfig_profiles"; - case MENU_ENUM_LABEL_CB_UPDATE_CHEATS: - return "cb_update_cheats"; - case MENU_ENUM_LABEL_CB_UPDATE_CORE_INFO_FILES: - return "cb_update_core_info_files"; - case MENU_ENUM_LABEL_CB_UPDATE_DATABASES: - return "cb_update_databases"; - case MENU_ENUM_LABEL_CB_UPDATE_OVERLAYS: - return "cb_update_overlays"; - case MENU_ENUM_LABEL_CB_UPDATE_SHADERS_CG: - return "cb_update_shaders_cg"; - case MENU_ENUM_LABEL_CB_UPDATE_SHADERS_GLSL: - return "cb_update_shaders_glsl"; - case MENU_ENUM_LABEL_CHEAT_APPLY_CHANGES: - return "cheat_apply_changes"; - case MENU_ENUM_LABEL_CHEAT_DATABASE_PATH: - return "cheat_database_path"; - case MENU_ENUM_LABEL_CHEAT_FILE_LOAD: - return "cheat_file_load"; - case MENU_ENUM_LABEL_CHEAT_FILE_SAVE_AS: - return "cheat_file_save_as"; - case MENU_ENUM_LABEL_CHEAT_NUM_PASSES: - return "cheat_num_passes"; - case MENU_ENUM_LABEL_CHEEVOS_DESCRIPTION: - return "cheevos_description"; - case MENU_ENUM_LABEL_CHEEVOS_ENABLE: - return "cheevos_enable"; - case MENU_ENUM_LABEL_CHEEVOS_HARDCORE_MODE_ENABLE: - return "cheevos_hardcore_mode_enable"; - case MENU_ENUM_LABEL_CHEEVOS_LOCKED_ACHIEVEMENTS: - return "cheevos_locked_achievements"; - case MENU_ENUM_LABEL_CHEEVOS_LOCKED_ENTRY: - return "cheevos_locked_entry"; - case MENU_ENUM_LABEL_CHEEVOS_PASSWORD: - return "cheevos_password"; - case MENU_ENUM_LABEL_CHEEVOS_TEST_UNOFFICIAL: - return "cheevos_test_unofficial"; - case MENU_ENUM_LABEL_CHEEVOS_UNLOCKED_ACHIEVEMENTS: - return "cheevos_unlocked_achievements"; - case MENU_ENUM_LABEL_CHEEVOS_UNLOCKED_ENTRY: - return "cheevos_unlocked_entry"; - case MENU_ENUM_LABEL_CHEEVOS_USERNAME: - return "cheevos_username"; - case MENU_ENUM_LABEL_CLOSE_CONTENT: - return "unload_core"; - case MENU_ENUM_LABEL_COLLECTION: - return "collection"; - case MENU_ENUM_LABEL_CONFIGURATIONS: - return "configurations"; - case MENU_ENUM_LABEL_CONFIGURATION_SETTINGS: - return "configuration_settings"; - case MENU_ENUM_LABEL_CONFIG_SAVE_ON_EXIT: - return "config_save_on_exit"; - case MENU_ENUM_LABEL_CONFIRM_ON_EXIT: - return "confirm_on_exit"; - case MENU_ENUM_LABEL_CONNECT_WIFI: - return "connect_wifi"; - case MENU_ENUM_LABEL_CONTENT_ACTIONS: - return "content_actions"; - case MENU_ENUM_LABEL_CONTENT_COLLECTION_LIST: - return "select_from_collection"; - case MENU_ENUM_LABEL_CONTENT_DATABASE_DIRECTORY: - return "content_database_path"; - case MENU_ENUM_LABEL_CONTENT_HISTORY_SIZE: - return "content_history_size"; - case MENU_ENUM_LABEL_CONTENT_SETTINGS: - return "quick_menu"; - case MENU_ENUM_LABEL_CORE_ASSETS_DIRECTORY: - return "core_assets_directory"; - case MENU_ENUM_LABEL_CORE_CHEAT_OPTIONS: - return "core_cheat_options"; - case MENU_ENUM_LABEL_CORE_COUNTERS: - return "core_counters"; - case MENU_ENUM_LABEL_CORE_ENABLE: - return "menu_core_enable"; - case MENU_ENUM_LABEL_CORE_INFORMATION: - return "core_information"; - case MENU_ENUM_LABEL_CORE_INFO_ENTRY: - return "core_info_entry"; - case MENU_ENUM_LABEL_CORE_INPUT_REMAPPING_OPTIONS: - return "core_input_remapping_options"; - case MENU_ENUM_LABEL_CORE_LIST: - return "load_core"; - case MENU_ENUM_LABEL_CORE_OPTIONS: - return "core_options"; - case MENU_ENUM_LABEL_CORE_OPTION_ENTRY: - return "core_option_entry"; - case MENU_ENUM_LABEL_CORE_SETTINGS: - return "core_settings"; - case MENU_ENUM_LABEL_CORE_SET_SUPPORTS_NO_CONTENT_ENABLE: - return "core_set_supports_no_content_enable"; - case MENU_ENUM_LABEL_CORE_SPECIFIC_CONFIG: - return "core_specific_config"; - case MENU_ENUM_LABEL_CORE_UPDATER_AUTO_EXTRACT_ARCHIVE: - return "core_updater_auto_extract_archive"; - case MENU_ENUM_LABEL_CORE_UPDATER_BUILDBOT_URL: - return "core_updater_buildbot_url"; - case MENU_ENUM_LABEL_CORE_UPDATER_LIST: - return "core_updater_list"; - case MENU_ENUM_LABEL_CPU_ARCHITECTURE: - return "system_information_cpu_architecture"; - case MENU_ENUM_LABEL_CPU_CORES: - return "system_information_cpu_cores"; - case MENU_ENUM_LABEL_CURSOR_DIRECTORY: - return "cursor_directory"; - case MENU_ENUM_LABEL_CURSOR_MANAGER_LIST: - return "cursor_manager_list"; - case MENU_ENUM_LABEL_CUSTOM_BIND: - return "custom_bind"; - case MENU_ENUM_LABEL_CUSTOM_BIND_ALL: - return "custom_bind_all"; - case MENU_ENUM_LABEL_CUSTOM_RATIO: - return "custom_ratio"; - case MENU_ENUM_LABEL_DATABASE_MANAGER_LIST: - return "database_manager_list"; - case MENU_ENUM_LABEL_DEFERRED_ACCOUNTS_CHEEVOS_LIST: - return "deferred_accounts_cheevos_list"; - case MENU_ENUM_LABEL_DEFERRED_ACCOUNTS_LIST: - return "deferred_accounts_list"; - case MENU_ENUM_LABEL_DEFERRED_ARCHIVE_ACTION: - return "deferred_archive_action"; - case MENU_ENUM_LABEL_DEFERRED_ARCHIVE_ACTION_DETECT_CORE: - return "deferred_archive_action_detect_core"; - case MENU_ENUM_LABEL_DEFERRED_ARCHIVE_OPEN: - return "deferred_archive_open"; - case MENU_ENUM_LABEL_DEFERRED_ARCHIVE_OPEN_DETECT_CORE: - return "deferred_archive_open_detect_core"; - case MENU_ENUM_LABEL_DEFERRED_AUDIO_SETTINGS_LIST: - return "deferred_audio_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_CONFIGURATION_SETTINGS_LIST: - return "deferred_configuration_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_CORE_CONTENT_DIRS_LIST: - return "deferred_core_content_dirs_list"; - case MENU_ENUM_LABEL_DEFERRED_CORE_CONTENT_DIRS_SUBDIR_LIST: - return "deferred_core_content_dirs_subdir_list"; - case MENU_ENUM_LABEL_DEFERRED_CORE_CONTENT_LIST: - return "deferred_core_content_list"; - case MENU_ENUM_LABEL_DEFERRED_CORE_LIST: - return "deferred_core_list"; - case MENU_ENUM_LABEL_DEFERRED_CORE_LIST_SET: - return "deferred_core_list_set"; - case MENU_ENUM_LABEL_DEFERRED_CORE_SETTINGS_LIST: - return "deferred_core_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_CORE_UPDATER_LIST: - return "core_updater"; - case MENU_ENUM_LABEL_DEFERRED_CURSOR_MANAGER_LIST: - return "deferred_cursor_manager_list"; - case MENU_ENUM_LABEL_DEFERRED_DATABASE_MANAGER_LIST: - return "deferred_database_manager_list"; - case MENU_ENUM_LABEL_DEFERRED_DIRECTORY_SETTINGS_LIST: - return "deferred_directory_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_DRIVER_SETTINGS_LIST: - return "deferred_driver_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_FRAME_THROTTLE_SETTINGS_LIST: - return "deferred_frame_throttle_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_INPUT_HOTKEY_BINDS_LIST: - return "deferred_input_hotkey_binds"; - case MENU_ENUM_LABEL_DEFERRED_INPUT_SETTINGS_LIST: - return "deferred_input_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_LAKKA_LIST: - return "deferred_lakka_list"; - case MENU_ENUM_LABEL_DEFERRED_LAKKA_SERVICES_LIST: - return "deferred_lakka_services_list"; - case MENU_ENUM_LABEL_DEFERRED_LOGGING_SETTINGS_LIST: - return "deferred_logging_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_MENU_FILE_BROWSER_SETTINGS_LIST: - return "deferred_menu_file_browser_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_MENU_SETTINGS_LIST: - return "deferred_menu_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_NETWORK_SETTINGS_LIST: - return "deferred_network_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_ONSCREEN_DISPLAY_SETTINGS_LIST: - return "deferred_onscreen_display_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_ONSCREEN_OVERLAY_SETTINGS_LIST: - return "deferred_onscreen_overlay_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_PLAYLIST_SETTINGS_LIST: - return "deferred_playlist_settings"; - case MENU_ENUM_LABEL_DEFERRED_PRIVACY_SETTINGS_LIST: - return "deferred_privacy_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_RDB_ENTRY_DETAIL: - return "deferred_rdb_entry_detail"; - case MENU_ENUM_LABEL_DEFERRED_RECORDING_SETTINGS_LIST: - return "deferred_recording_settings"; - case MENU_ENUM_LABEL_DEFERRED_RETRO_ACHIEVEMENTS_SETTINGS_LIST: - return "deferred_retro_achievements_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_REWIND_SETTINGS_LIST: - return "deferred_rewind_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_SAVING_SETTINGS_LIST: - return "deferred_saving_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_THUMBNAILS_UPDATER_LIST: - return "deferred_thumbnails_updater_list"; - case MENU_ENUM_LABEL_DEFERRED_UPDATER_SETTINGS_LIST: - return "deferred_updater_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_USER_BINDS_LIST: - return "deferred_user_binds_list"; - case MENU_ENUM_LABEL_DEFERRED_USER_INTERFACE_SETTINGS_LIST: - return "deferred_user_interface_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_USER_SETTINGS_LIST: - return "deferred_user_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_VIDEO_FILTER: - return "deferred_video_filter"; - case MENU_ENUM_LABEL_DEFERRED_VIDEO_SETTINGS_LIST: - return "deferred_video_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_WIFI_SETTINGS_LIST: - return "deferred_wifi_settings_list"; - case MENU_ENUM_LABEL_DELETE_ENTRY: - return "delete_entry"; - case MENU_ENUM_LABEL_DETECT_CORE_LIST: - return "detect_core_list"; - case MENU_ENUM_LABEL_DIRECTORY_SETTINGS: - return "directory_settings"; - case MENU_ENUM_LABEL_DISK_CYCLE_TRAY_STATUS: - return "disk_cycle_tray_status"; - case MENU_ENUM_LABEL_DISK_IMAGE_APPEND: - return "disk_image_append"; - case MENU_ENUM_LABEL_DISK_OPTIONS: - return "core_disk_options"; - case MENU_ENUM_LABEL_DOWNLOADED_FILE_DETECT_CORE_LIST: - return "downloaded_file_detect_core_list"; - case MENU_ENUM_LABEL_DOWNLOAD_CORE_CONTENT: - return "download_core_content"; - case MENU_ENUM_LABEL_DOWNLOAD_CORE_CONTENT_DIRS: - return "download_core_content_dirs"; - case MENU_ENUM_LABEL_DPI_OVERRIDE_ENABLE: - return "dpi_override_enable"; - case MENU_ENUM_LABEL_DPI_OVERRIDE_VALUE: - return "dpi_override_value"; - case MENU_ENUM_LABEL_DRIVER_SETTINGS: - return "driver_settings"; - case MENU_ENUM_LABEL_DUMMY_ON_CORE_SHUTDOWN: - return "dummy_on_core_shutdown"; - case MENU_ENUM_LABEL_DYNAMIC_WALLPAPER: - return "menu_dynamic_wallpaper_enable"; - case MENU_ENUM_LABEL_DYNAMIC_WALLPAPERS_DIRECTORY: - return "dynamic_wallpapers_directory"; - case MENU_ENUM_LABEL_ENTRY_HOVER_COLOR: - return "menu_entry_hover_color"; - case MENU_ENUM_LABEL_ENTRY_NORMAL_COLOR: - return "menu_entry_normal_color"; - case MENU_ENUM_LABEL_FASTFORWARD_RATIO: - return "fastforward_ratio"; - case MENU_ENUM_LABEL_FILE_BROWSER_CORE: - return "file_browser_core"; - case MENU_ENUM_LABEL_FILE_BROWSER_CORE_DETECTED: - return "file_browser_core_detected"; - case MENU_ENUM_LABEL_FILE_BROWSER_CORE_SELECT_FROM_COLLECTION: - return "file_browser_core_select_from_collection"; - case MENU_ENUM_LABEL_FILE_BROWSER_DIRECTORY: - return "file_browser_directory"; - case MENU_ENUM_LABEL_FILE_BROWSER_IMAGE: - return "file_browser_image"; - case MENU_ENUM_LABEL_FILE_BROWSER_IMAGE_OPEN_WITH_VIEWER: - return "file_browser_image_open_with_viewer"; - case MENU_ENUM_LABEL_FILE_BROWSER_MOVIE_OPEN: - return "file_browser_movie_open"; - case MENU_ENUM_LABEL_FILE_BROWSER_MUSIC_OPEN: - return "file_browser_music_open"; - case MENU_ENUM_LABEL_FILE_BROWSER_PLAIN_FILE: - return "file_browser_plain_file"; - case MENU_ENUM_LABEL_FILE_BROWSER_REMAP: - return "file_browser_remap"; - case MENU_ENUM_LABEL_FILE_BROWSER_SHADER: - return "file_browser_shader"; - case MENU_ENUM_LABEL_FILE_BROWSER_SHADER_PRESET: - return "file_browser_shader_preset"; - case MENU_ENUM_LABEL_FPS_SHOW: - return "fps_show"; - case MENU_ENUM_LABEL_FRAME_THROTTLE_ENABLE: - return "fastforward_ratio_throttle_enable"; - case MENU_ENUM_LABEL_FRAME_THROTTLE_SETTINGS: - return "frame_throttle_settings"; - case MENU_ENUM_LABEL_FRONTEND_COUNTERS: - return "frontend_counters"; - case MENU_ENUM_LABEL_GAME_SPECIFIC_OPTIONS: - return "game_specific_options"; - case MENU_ENUM_LABEL_GAME_SPECIFIC_OPTIONS_CREATE: - return "game_specific_options_create"; - case MENU_ENUM_LABEL_GAME_SPECIFIC_OPTIONS_IN_USE: - return "game_specific_options_in_use"; - case MENU_ENUM_LABEL_HELP: - return "help"; - case MENU_ENUM_LABEL_HELP_AUDIO_VIDEO_TROUBLESHOOTING: - return "help_audio_video_troubleshooting"; - case MENU_ENUM_LABEL_HELP_CHANGE_VIRTUAL_GAMEPAD: - return "help_change_virtual_gamepad"; - case MENU_ENUM_LABEL_HELP_CONTROLS: - return "help_controls"; - case MENU_ENUM_LABEL_HELP_LIST: - return "help_list"; - case MENU_ENUM_LABEL_HELP_LOADING_CONTENT: - return "help_loading_content"; - case MENU_ENUM_LABEL_HELP_SCANNING_CONTENT: - return "help_scanning_content"; - case MENU_ENUM_LABEL_HELP_WHAT_IS_A_CORE: - return "help_what_is_a_core"; - case MENU_ENUM_LABEL_HISTORY_LIST_ENABLE: - return "history_list_enable"; - case MENU_ENUM_LABEL_HISTORY_TAB: - return "history_tab"; - case MENU_ENUM_LABEL_HORIZONTAL_MENU: - return "horizontal_menu"; - case MENU_ENUM_LABEL_IMAGES_TAB: - return "images_tab"; - case MENU_ENUM_LABEL_INFORMATION: - return "information"; - case MENU_ENUM_LABEL_INFORMATION_LIST: - return "information_list"; - case MENU_ENUM_LABEL_INFO_SCREEN: - return "info_screen"; - case MENU_ENUM_LABEL_INPUT_ALL_USERS_CONTROL_MENU: - return "all_users_control_menu"; - case MENU_ENUM_LABEL_INPUT_AUTODETECT_ENABLE: - return "input_autodetect_enable"; - case MENU_ENUM_LABEL_INPUT_AXIS_THRESHOLD: - return "input_axis_threshold"; - case MENU_ENUM_LABEL_INPUT_BACK_AS_MENU_ENUM_TOGGLE_ENABLE: - return "back_as_menu_toggle_enable"; - case MENU_ENUM_LABEL_INPUT_BIND_MODE: - return "input_bind_mode"; - case MENU_ENUM_LABEL_INPUT_BIND_TIMEOUT: - return "input_bind_timeout"; - case MENU_ENUM_LABEL_INPUT_DESCRIPTOR_HIDE_UNBOUND: - return "input_descriptor_hide_unbound"; - case MENU_ENUM_LABEL_INPUT_DESCRIPTOR_LABEL_SHOW: - return "input_descriptor_label_show"; - case MENU_ENUM_LABEL_INPUT_DRIVER: - return "input_driver"; - case MENU_ENUM_LABEL_INPUT_DUTY_CYCLE: - return "input_duty_cycle"; - case MENU_ENUM_LABEL_INPUT_HOTKEY_BINDS: - return "input_hotkey_binds"; - case MENU_ENUM_LABEL_INPUT_HOTKEY_BINDS_BEGIN: - return "input_hotkey_binds_begin"; - case MENU_ENUM_LABEL_INPUT_ICADE_ENABLE: - return "input_icade_enable"; - case MENU_ENUM_LABEL_INPUT_KEYBOARD_GAMEPAD_MAPPING_TYPE: - return "keyboard_gamepad_mapping_type"; - case MENU_ENUM_LABEL_INPUT_LIBRETRO_DEVICE: - return "input_libretro_device_p%u"; - case MENU_ENUM_LABEL_INPUT_MAX_USERS: - return "input_max_users"; - case MENU_ENUM_LABEL_INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO: - return "input_menu_toggle_gamepad_combo"; - case MENU_ENUM_LABEL_INPUT_OSK_OVERLAY_ENABLE: - return "input_osk_overlay_enable"; - case MENU_ENUM_LABEL_INPUT_OVERLAY_ENABLE: - return "input_overlay_enable"; - case MENU_ENUM_LABEL_INPUT_OVERLAY_HIDE_IN_MENU: - return "overlay_hide_in_menu"; - case MENU_ENUM_LABEL_INPUT_PLAYER_ANALOG_DPAD_MODE: - return "input_player%u_analog_dpad_mode"; - case MENU_ENUM_LABEL_INPUT_POLL_TYPE_BEHAVIOR: - return "input_poll_type_behavior"; - case MENU_ENUM_LABEL_INPUT_PREFER_FRONT_TOUCH: - return "input_prefer_front_touch"; - case MENU_ENUM_LABEL_INPUT_REMAPPING_DIRECTORY: - return "input_remapping_directory"; - case MENU_ENUM_LABEL_INPUT_REMAP_BINDS_ENABLE: - return "input_remap_binds_enable"; - case MENU_ENUM_LABEL_INPUT_SETTINGS: - return "input_settings"; - case MENU_ENUM_LABEL_INPUT_SETTINGS_BEGIN: - return "input_settings_begin"; - case MENU_ENUM_LABEL_INPUT_SMALL_KEYBOARD_ENABLE: - return "input_small_keyboard_enable"; - case MENU_ENUM_LABEL_INPUT_TOUCH_ENABLE: - return "input_touch_enable"; - case MENU_ENUM_LABEL_INPUT_TURBO_PERIOD: - return "input_turbo_period"; - case MENU_ENUM_LABEL_INPUT_USER_10_BINDS: - return "10_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_11_BINDS: - return "11_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_12_BINDS: - return "12_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_13_BINDS: - return "13_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_14_BINDS: - return "14_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_15_BINDS: - return "15_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_16_BINDS: - return "16_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_1_BINDS: - return "1_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_2_BINDS: - return "2_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_3_BINDS: - return "3_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_4_BINDS: - return "4_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_5_BINDS: - return "5_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_6_BINDS: - return "6_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_7_BINDS: - return "7_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_8_BINDS: - return "8_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_9_BINDS: - return "9_input_binds_list"; - case MENU_ENUM_LABEL_JOYPAD_AUTOCONFIG_DIR: - return "joypad_autoconfig_dir"; - case MENU_ENUM_LABEL_JOYPAD_DRIVER: - return "input_joypad_driver"; - case MENU_ENUM_LABEL_KEYBOARD_OVERLAY_PRESET: - return "input_osk_overlay"; - case MENU_ENUM_LABEL_LAKKA_SERVICES: - return "lakka_services"; - case MENU_ENUM_LABEL_LIBRETRO_DIR_PATH: - return "libretro_dir_path"; - case MENU_ENUM_LABEL_LIBRETRO_INFO_PATH: - return "libretro_info_path"; - case MENU_ENUM_LABEL_LIBRETRO_LOG_LEVEL: - return "libretro_log_level"; - case MENU_ENUM_LABEL_LOAD_ARCHIVE: - return "load_archive"; - case MENU_ENUM_LABEL_LOAD_ARCHIVE_DETECT_CORE: - return "load_archive_detect_core"; - case MENU_ENUM_LABEL_LOAD_CONTENT: - return "load_content_default"; - case MENU_ENUM_LABEL_LOAD_CONTENT_HISTORY: - return "load_recent"; - case MENU_ENUM_LABEL_LOAD_CONTENT_LIST: - return "load_content"; - case MENU_ENUM_LABEL_LOAD_STATE: - return "loadstate"; - case MENU_ENUM_LABEL_LOCATION_ALLOW: - return "location_allow"; - case MENU_ENUM_LABEL_LOCATION_DRIVER: - return "location_driver"; - case MENU_ENUM_LABEL_LOGGING_SETTINGS: - return "logging_settings"; - case MENU_ENUM_LABEL_LOG_VERBOSITY: - return "log_verbosity"; - case MENU_ENUM_LABEL_MAIN_MENU: - return "main_menu"; - case MENU_ENUM_LABEL_MANAGEMENT: - return "database_settings"; - case MENU_ENUM_LABEL_MATERIALUI_MENU_COLOR_THEME: - return "materialui_menu_color_theme"; - case MENU_ENUM_LABEL_MATERIALUI_MENU_FOOTER_OPACITY: - return "materialui_menu_footer_opacity"; - case MENU_ENUM_LABEL_MATERIALUI_MENU_HEADER_OPACITY: - return "materialui_menu_header_opacity"; - case MENU_ENUM_LABEL_MENU_DRIVER: - return "menu_driver"; - case MENU_ENUM_LABEL_MENU_ENUM_THROTTLE_FRAMERATE: - return "menu_throttle_framerate"; - case MENU_ENUM_LABEL_MENU_FILE_BROWSER_SETTINGS: - return "menu_file_browser_settings"; - case MENU_ENUM_LABEL_MENU_LINEAR_FILTER: - return "menu_linear_filter"; - case MENU_ENUM_LABEL_MENU_SETTINGS: - return "menu_settings"; - case MENU_ENUM_LABEL_MENU_WALLPAPER: - return "menu_wallpaper"; - case MENU_ENUM_LABEL_MENU_WALLPAPER_OPACITY: - return "menu_wallpaper_opacity"; - case MENU_ENUM_LABEL_MOUSE_ENABLE: - return "menu_mouse_enable"; - case MENU_ENUM_LABEL_MUSIC_TAB: - return "music_tab"; - case MENU_ENUM_LABEL_NAVIGATION_BROWSER_FILTER_SUPPORTED_EXTENSIONS_ENABLE: - return "menu_navigation_browser_filter_supported_extensions_enable"; - case MENU_ENUM_LABEL_NAVIGATION_WRAPAROUND: - return "menu_navigation_wraparound_enable"; - case MENU_ENUM_LABEL_NETPLAY: - return "netplay"; - case MENU_ENUM_LABEL_NETPLAY_CHECK_FRAMES: - return "netplay_check_frames"; - case MENU_ENUM_LABEL_NETPLAY_CLIENT_SWAP_INPUT: - return "netplay_client_swap_input"; - case MENU_ENUM_LABEL_NETPLAY_DELAY_FRAMES: - return "netplay_delay_frames"; - case MENU_ENUM_LABEL_NETPLAY_DISCONNECT: - return "menu_netplay_disconnect"; - case MENU_ENUM_LABEL_NETPLAY_ENABLE: - return "netplay_enable"; - case MENU_ENUM_LABEL_NETPLAY_ENABLE_CLIENT: - return "menu_netplay_enable_client"; - case MENU_ENUM_LABEL_NETPLAY_ENABLE_HOST: - return "menu_netplay_enable_host"; - case MENU_ENUM_LABEL_NETPLAY_IP_ADDRESS: - return "netplay_ip_address"; - case MENU_ENUM_LABEL_NETPLAY_MODE: - return "netplay_mode"; - case MENU_ENUM_LABEL_NETPLAY_NICKNAME: - return "netplay_nickname"; - case MENU_ENUM_LABEL_NETPLAY_SETTINGS: - return "menu_netplay_settings"; - case MENU_ENUM_LABEL_NETPLAY_SPECTATOR_MODE_ENABLE: - return "netplay_spectator_mode_enable"; - case MENU_ENUM_LABEL_NETPLAY_TCP_UDP_PORT: - return "netplay_tcp_udp_port"; - case MENU_ENUM_LABEL_NETWORK_CMD_ENABLE: - return "network_cmd_enable"; - case MENU_ENUM_LABEL_NETWORK_CMD_PORT: - return "network_cmd_port"; - case MENU_ENUM_LABEL_NETWORK_INFORMATION: - return "network_information"; - case MENU_ENUM_LABEL_NETWORK_INFO_ENTRY: - return "network_info_entry"; - case MENU_ENUM_LABEL_NETWORK_REMOTE_ENABLE: - return "network_remote_enable"; - case MENU_ENUM_LABEL_NETWORK_REMOTE_PORT: - return "network_remote_base_port"; - case MENU_ENUM_LABEL_NETWORK_REMOTE_USER_1_ENABLE: - return "network_remote_user_1_enable"; - case MENU_ENUM_LABEL_NETWORK_REMOTE_USER_LAST_ENABLE: - return "network_remote_user_last_enable"; - case MENU_ENUM_LABEL_NETWORK_SETTINGS: - return "network_settings"; - case MENU_ENUM_LABEL_NO_ACHIEVEMENTS_TO_DISPLAY: - return "no_achievements_to_display"; - case MENU_ENUM_LABEL_NO_CORES_AVAILABLE: - return "no_cores_available"; - case MENU_ENUM_LABEL_NO_CORE_INFORMATION_AVAILABLE: - return "no_core_information_available"; - case MENU_ENUM_LABEL_NO_CORE_OPTIONS_AVAILABLE: - return "no_core_options_available"; - case MENU_ENUM_LABEL_NO_ENTRIES_TO_DISPLAY: - return "no_entries_to_display"; - case MENU_ENUM_LABEL_NO_HISTORY_AVAILABLE: - return "no_history"; - case MENU_ENUM_LABEL_NO_ITEMS: - return "no_items"; - case MENU_ENUM_LABEL_NO_PERFORMANCE_COUNTERS: - return "no_performance_counters"; - case MENU_ENUM_LABEL_NO_PLAYLISTS: - return "no_playlists"; - case MENU_ENUM_LABEL_NO_PLAYLIST_ENTRIES_AVAILABLE: - return "no_playlist_entries_available"; - case MENU_ENUM_LABEL_NO_SETTINGS_FOUND: - return "menu_label_no_settings_found"; - case MENU_ENUM_LABEL_NO_SHADER_PARAMETERS: - return "no_shader_parameters."; - case MENU_ENUM_LABEL_ONLINE_UPDATER: - return "online_updater"; - case MENU_ENUM_LABEL_ONSCREEN_DISPLAY_SETTINGS: - return "onscreen_display_settings"; - case MENU_ENUM_LABEL_ONSCREEN_OVERLAY_SETTINGS: - return "onscreen_overlay_settings"; - case MENU_ENUM_LABEL_OPEN_ARCHIVE: - return "open_archive"; - case MENU_ENUM_LABEL_OPEN_ARCHIVE_DETECT_CORE: - return "open_archive_detect_core"; - case MENU_ENUM_LABEL_OSK_OVERLAY_DIRECTORY: - return "osk_overlay_directory"; - case MENU_ENUM_LABEL_OVERLAY_AUTOLOAD_PREFERRED: - return "overlay_autoload_preferred"; - case MENU_ENUM_LABEL_OVERLAY_DIRECTORY: - return "overlay_directory"; - case MENU_ENUM_LABEL_OVERLAY_OPACITY: - return "input_overlay_opacity"; - case MENU_ENUM_LABEL_OVERLAY_PRESET: - return "input_overlay"; - case MENU_ENUM_LABEL_OVERLAY_SCALE: - return "input_overlay_scale"; - case MENU_ENUM_LABEL_PAL60_ENABLE: - return "pal60_enable"; - case MENU_ENUM_LABEL_PARENT_DIRECTORY: - return "parent_directory"; - case MENU_ENUM_LABEL_PAUSE_LIBRETRO: - return "menu_pause_libretro"; - case MENU_ENUM_LABEL_PAUSE_NONACTIVE: - return "pause_nonactive"; - case MENU_ENUM_LABEL_PERFCNT_ENABLE: - return "perfcnt_enable"; - case MENU_ENUM_LABEL_PLAYLISTS_TAB: - return "playlists_tab"; - case MENU_ENUM_LABEL_PLAYLIST_COLLECTION_ENTRY: - return "playlist_collection_entry"; - case MENU_ENUM_LABEL_PLAYLIST_DIRECTORY: - return "playlist_directory"; - case MENU_ENUM_LABEL_PLAYLIST_ENTRY: - return "playlist_entry"; - case MENU_ENUM_LABEL_PLAYLIST_SETTINGS: - return "playlist_settings"; - case MENU_ENUM_LABEL_PLAYLIST_SETTINGS_BEGIN: - return "playlist_settings_begin"; - case MENU_ENUM_LABEL_POINTER_ENABLE: - return "menu_pointer_enable"; - case MENU_ENUM_LABEL_PRIVACY_SETTINGS: - return "privacy_settings"; - case MENU_ENUM_LABEL_QUIT_RETROARCH: - return "quit_retroarch"; - case MENU_ENUM_LABEL_RDB_ENTRY: - return "rdb_entry"; - case MENU_ENUM_LABEL_RDB_ENTRY_ANALOG: - return "rdb_entry_analog"; - case MENU_ENUM_LABEL_RDB_ENTRY_BBFC_RATING: - return "rdb_entry_bbfc_rating"; - case MENU_ENUM_LABEL_RDB_ENTRY_CERO_RATING: - return "rdb_entry_cero_rating"; - case MENU_ENUM_LABEL_RDB_ENTRY_CRC32: - return "rdb_entry_crc32"; - case MENU_ENUM_LABEL_RDB_ENTRY_DESCRIPTION: - return "rdb_entry_description"; - case MENU_ENUM_LABEL_RDB_ENTRY_DEVELOPER: - return "rdb_entry_developer"; - case MENU_ENUM_LABEL_RDB_ENTRY_EDGE_MAGAZINE_ISSUE: - return "rdb_entry_edge_magazine_issue"; - case MENU_ENUM_LABEL_RDB_ENTRY_EDGE_MAGAZINE_RATING: - return "rdb_entry_edge_magazine_rating"; - case MENU_ENUM_LABEL_RDB_ENTRY_EDGE_MAGAZINE_REVIEW: - return "rdb_entry_edge_magazine_review"; - case MENU_ENUM_LABEL_RDB_ENTRY_ELSPA_RATING: - return "rdb_entry_elspa_rating"; - case MENU_ENUM_LABEL_RDB_ENTRY_ENHANCEMENT_HW: - return "rdb_entry_enhancement_hw"; - case MENU_ENUM_LABEL_RDB_ENTRY_ESRB_RATING: - return "rdb_entry_esrb_rating"; - case MENU_ENUM_LABEL_RDB_ENTRY_FAMITSU_MAGAZINE_RATING: - return "rdb_entry_famitsu_magazine_rating"; - case MENU_ENUM_LABEL_RDB_ENTRY_FRANCHISE: - return "rdb_entry_franchise"; - case MENU_ENUM_LABEL_RDB_ENTRY_GENRE: - return "rdb_entry_genre"; - case MENU_ENUM_LABEL_RDB_ENTRY_MAX_USERS: - return "rdb_entry_max_users"; - case MENU_ENUM_LABEL_RDB_ENTRY_MD5: - return "rdb_entry_md5"; - case MENU_ENUM_LABEL_RDB_ENTRY_NAME: - return "rdb_entry_name"; - case MENU_ENUM_LABEL_RDB_ENTRY_ORIGIN: - return "rdb_entry_origin"; - case MENU_ENUM_LABEL_RDB_ENTRY_PEGI_RATING: - return "rdb_entry_pegi_rating"; - case MENU_ENUM_LABEL_RDB_ENTRY_PUBLISHER: - return "rdb_entry_publisher"; - case MENU_ENUM_LABEL_RDB_ENTRY_RELEASE_MONTH: - return "rdb_entry_releasemonth"; - case MENU_ENUM_LABEL_RDB_ENTRY_RELEASE_YEAR: - return "rdb_entry_releaseyear"; - case MENU_ENUM_LABEL_RDB_ENTRY_SERIAL: - return "rdb_entry_serial"; - case MENU_ENUM_LABEL_RDB_ENTRY_SHA1: - return "rdb_entry_sha1"; - case MENU_ENUM_LABEL_RDB_ENTRY_START_CONTENT: - return "rdb_entry_start_content"; - case MENU_ENUM_LABEL_RDB_ENTRY_TGDB_RATING: - return "rdb_entry_tgdb_rating"; - case MENU_ENUM_LABEL_REBOOT: - return "reboot"; - case MENU_ENUM_LABEL_RECORDING_CONFIG_DIRECTORY: - return "recording_config_directory"; - case MENU_ENUM_LABEL_RECORDING_OUTPUT_DIRECTORY: - return "recording_output_directory"; - case MENU_ENUM_LABEL_RECORDING_SETTINGS: - return "recording_settings"; - case MENU_ENUM_LABEL_RECORD_CONFIG: - return "record_config"; - case MENU_ENUM_LABEL_RECORD_DRIVER: - return "record_driver"; - case MENU_ENUM_LABEL_RECORD_ENABLE: - return "record_enable"; - case MENU_ENUM_LABEL_RECORD_PATH: - return "record_path"; - case MENU_ENUM_LABEL_RECORD_USE_OUTPUT_DIRECTORY: - return "record_use_output_directory"; - case MENU_ENUM_LABEL_REMAP_FILE_LOAD: - return "remap_file_load"; - case MENU_ENUM_LABEL_REMAP_FILE_SAVE_CORE: - return "remap_file_save_core"; - case MENU_ENUM_LABEL_REMAP_FILE_SAVE_GAME: - return "remap_file_save_game"; - case MENU_ENUM_LABEL_RESTART_CONTENT: - return "restart_content"; - case MENU_ENUM_LABEL_RESTART_RETROARCH: - return "restart_retroarch"; - case MENU_ENUM_LABEL_RESUME_CONTENT: - return "resume_content"; - case MENU_ENUM_LABEL_RETRO_ACHIEVEMENTS_SETTINGS: - return "retro_achievements_settings"; - case MENU_ENUM_LABEL_REWIND_ENABLE: - return "rewind_enable"; - case MENU_ENUM_LABEL_REWIND_GRANULARITY: - return "rewind_granularity"; - case MENU_ENUM_LABEL_REWIND_SETTINGS: - return "rewind_settings"; - case MENU_ENUM_LABEL_RGUI_BROWSER_DIRECTORY: - return "rgui_browser_directory"; - case MENU_ENUM_LABEL_RGUI_CONFIG_DIRECTORY: - return "rgui_config_directory"; - case MENU_ENUM_LABEL_RGUI_SHOW_START_SCREEN: - return "rgui_show_start_screen"; - case MENU_ENUM_LABEL_RUN: - return "collection"; - case MENU_ENUM_LABEL_SAMBA_ENABLE: - return "samba_enable"; - case MENU_ENUM_LABEL_SAVEFILE_DIRECTORY: - return "savefile_directory"; - case MENU_ENUM_LABEL_SAVESTATE_AUTO_INDEX: - return "savestate_auto_index"; - case MENU_ENUM_LABEL_SAVESTATE_AUTO_LOAD: - return "savestate_auto_load"; - case MENU_ENUM_LABEL_SAVESTATE_AUTO_SAVE: - return "savestate_auto_save"; - case MENU_ENUM_LABEL_SAVESTATE_DIRECTORY: - return "savestate_directory"; - case MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG: - return "save_current_config"; - case MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_CORE: - return "save_current_config_override_core"; - case MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_GAME: - return "save_current_config_override_game"; - case MENU_ENUM_LABEL_SAVE_NEW_CONFIG: - return "save_new_config"; - case MENU_ENUM_LABEL_SAVE_STATE: - return "savestate"; - case MENU_ENUM_LABEL_SAVING_SETTINGS: - return "saving_settings"; - case MENU_ENUM_LABEL_SCAN_DIRECTORY: - return "scan_directory"; - case MENU_ENUM_LABEL_SCAN_FILE: - return "scan_file"; - case MENU_ENUM_LABEL_SCAN_THIS_DIRECTORY: - return "scan_this_directory"; - case MENU_ENUM_LABEL_SCREENSHOT_DIRECTORY: - return "screenshot_directory"; - case MENU_ENUM_LABEL_SCREEN_RESOLUTION: - return "screen_resolution"; - case MENU_ENUM_LABEL_SETTINGS: - return "settings"; - case MENU_ENUM_LABEL_SETTINGS_TAB: - return "settings_tab"; - case MENU_ENUM_LABEL_SHADER_APPLY_CHANGES: - return "shader_apply_changes"; - case MENU_ENUM_LABEL_SHADER_OPTIONS: - return "shader_options"; - case MENU_ENUM_LABEL_SHADER_PARAMETERS_ENTRY: - return "shader_parameters_entry"; - case MENU_ENUM_LABEL_SHOW_ADVANCED_SETTINGS: - return "menu_show_advanced_settings"; - case MENU_ENUM_LABEL_SHOW_HIDDEN_FILES: - return "show_hidden_files"; - case MENU_ENUM_LABEL_SHUTDOWN: - return "shutdown"; - case MENU_ENUM_LABEL_SLOWMOTION_RATIO: - return "slowmotion_ratio"; - case MENU_ENUM_LABEL_SORT_SAVEFILES_ENABLE: - return "sort_savefiles_enable"; - case MENU_ENUM_LABEL_SORT_SAVESTATES_ENABLE: - return "sort_savestates_enable"; - case MENU_ENUM_LABEL_SSH_ENABLE: - return "ssh_enable"; - case MENU_ENUM_LABEL_START_CORE: - return "start_core"; - case MENU_ENUM_LABEL_START_NET_RETROPAD: - return "menu_start_net_retropad"; - case MENU_ENUM_LABEL_START_VIDEO_PROCESSOR: - return "menu_start_video_processor"; - case MENU_ENUM_LABEL_STATE_SLOT: - return "state_slot"; - case MENU_ENUM_LABEL_STDIN_CMD_ENABLE: - return "stdin_commands"; - case MENU_ENUM_LABEL_SUSPEND_SCREENSAVER_ENABLE: - return "suspend_screensaver_enable"; - case MENU_ENUM_LABEL_SYSTEM_BGM_ENABLE: - return "system_bgm_enable"; - case MENU_ENUM_LABEL_SYSTEM_DIRECTORY: - return "system_directory"; - case MENU_ENUM_LABEL_SYSTEM_INFORMATION: - return "system_information"; - case MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY: - return "system_info_entry"; - case MENU_ENUM_LABEL_TAKE_SCREENSHOT: - return "take_screenshot"; - case MENU_ENUM_LABEL_THREADED_DATA_RUNLOOP_ENABLE: - return "threaded_data_runloop_enable"; - case MENU_ENUM_LABEL_THUMBNAILS: - return "thumbnails"; - case MENU_ENUM_LABEL_THUMBNAILS_DIRECTORY: - return "thumbnails_directory"; - case MENU_ENUM_LABEL_THUMBNAILS_UPDATER_LIST: - return "thumbnails_updater_list"; - case MENU_ENUM_LABEL_TIMEDATE_ENABLE: - return "menu_timedate_enable"; - case MENU_ENUM_LABEL_TITLE_COLOR: - return "menu_title_color"; - case MENU_ENUM_LABEL_UI_COMPANION_ENABLE: - return "ui_companion_enable"; - case MENU_ENUM_LABEL_UI_COMPANION_START_ON_BOOT: - return "ui_companion_start_on_boot"; - case MENU_ENUM_LABEL_UI_MENUBAR_ENABLE: - return "ui_menubar_enable"; - case MENU_ENUM_LABEL_UNDO_LOAD_STATE: - return "undoloadstate"; - case MENU_ENUM_LABEL_UNDO_SAVE_STATE: - return "undosavestate"; - case MENU_ENUM_LABEL_UPDATER_SETTINGS: - return "updater_settings"; - case MENU_ENUM_LABEL_UPDATE_ASSETS: - return "update_assets"; - case MENU_ENUM_LABEL_UPDATE_AUTOCONFIG_PROFILES: - return "update_autoconfig_profiles"; - case MENU_ENUM_LABEL_UPDATE_CG_SHADERS: - return "update_cg_shaders"; - case MENU_ENUM_LABEL_UPDATE_CHEATS: - return "update_cheats"; - case MENU_ENUM_LABEL_UPDATE_CORE_INFO_FILES: - return "update_core_info_files"; - case MENU_ENUM_LABEL_UPDATE_DATABASES: - return "update_databases"; - case MENU_ENUM_LABEL_UPDATE_GLSL_SHADERS: - return "update_glsl_shaders"; - case MENU_ENUM_LABEL_UPDATE_LAKKA: - return "update_lakka"; - case MENU_ENUM_LABEL_UPDATE_OVERLAYS: - return "update_overlays"; - case MENU_ENUM_LABEL_UPDATE_SLANG_SHADERS: - return "update_slang_shaders"; - case MENU_ENUM_LABEL_URL_ENTRY: - return "url_entry"; - case MENU_ENUM_LABEL_USER_INTERFACE_SETTINGS: - return "user_interface_settings"; - case MENU_ENUM_LABEL_USER_LANGUAGE: - return "user_language"; - case MENU_ENUM_LABEL_USER_SETTINGS: - return "user_settings"; - case MENU_ENUM_LABEL_USE_BUILTIN_IMAGE_VIEWER: - return "use_builtin_image_viewer"; - case MENU_ENUM_LABEL_USE_BUILTIN_PLAYER: - return "use_builtin_player"; - case MENU_ENUM_LABEL_USE_THIS_DIRECTORY: - return "use_this_directory"; - case MENU_ENUM_LABEL_VIDEO_ALLOW_ROTATE: - return "video_allow_rotate"; - case MENU_ENUM_LABEL_VIDEO_ASPECT_RATIO_AUTO: - return "video_aspect_ratio_auto"; - case MENU_ENUM_LABEL_VIDEO_ASPECT_RATIO_INDEX: - return "aspect_ratio_index"; - case MENU_ENUM_LABEL_VIDEO_BLACK_FRAME_INSERTION: - return "video_black_frame_insertion"; - case MENU_ENUM_LABEL_VIDEO_CROP_OVERSCAN: - return "video_crop_overscan"; - case MENU_ENUM_LABEL_VIDEO_DISABLE_COMPOSITION: - return "video_disable_composition"; - case MENU_ENUM_LABEL_VIDEO_DRIVER: - return "video_driver"; - case MENU_ENUM_LABEL_VIDEO_FILTER: - return "video_filter"; - case MENU_ENUM_LABEL_VIDEO_FILTER_DIR: - return "video_filter_dir"; - case MENU_ENUM_LABEL_VIDEO_FILTER_FLICKER: - return "video_filter_flicker"; - case MENU_ENUM_LABEL_VIDEO_FONT_ENABLE: - return "video_font_enable"; - case MENU_ENUM_LABEL_VIDEO_FONT_PATH: - return "video_font_path"; - case MENU_ENUM_LABEL_VIDEO_FONT_SIZE: - return "video_font_size"; - case MENU_ENUM_LABEL_VIDEO_FORCE_ASPECT: - return "video_force_aspect"; - case MENU_ENUM_LABEL_VIDEO_FORCE_SRGB_DISABLE: - return "video_force_srgb_disable"; - case MENU_ENUM_LABEL_VIDEO_FRAME_DELAY: - return "video_frame_delay"; - case MENU_ENUM_LABEL_VIDEO_FULLSCREEN: - return "video_fullscreen"; - case MENU_ENUM_LABEL_VIDEO_GAMMA: - return "video_gamma"; - case MENU_ENUM_LABEL_VIDEO_GPU_RECORD: - return "video_gpu_record"; - case MENU_ENUM_LABEL_VIDEO_GPU_SCREENSHOT: - return "video_gpu_screenshot"; - case MENU_ENUM_LABEL_VIDEO_HARD_SYNC: - return "video_hard_sync"; - case MENU_ENUM_LABEL_VIDEO_HARD_SYNC_FRAMES: - return "video_hard_sync_frames"; - case MENU_ENUM_LABEL_VIDEO_MAX_SWAPCHAIN_IMAGES: - return "video_max_swapchain_images"; - case MENU_ENUM_LABEL_VIDEO_MESSAGE_POS_X: - return "video_message_pos_x"; - case MENU_ENUM_LABEL_VIDEO_MESSAGE_POS_Y: - return "video_message_pos_y"; - case MENU_ENUM_LABEL_VIDEO_MONITOR_INDEX: - return "video_monitor_index"; - case MENU_ENUM_LABEL_VIDEO_POST_FILTER_RECORD: - return "video_post_filter_record"; - case MENU_ENUM_LABEL_VIDEO_REFRESH_RATE: - return "video_refresh_rate"; - case MENU_ENUM_LABEL_VIDEO_REFRESH_RATE_AUTO: - return "video_refresh_rate_auto"; - case MENU_ENUM_LABEL_VIDEO_ROTATION: - return "video_rotation"; - case MENU_ENUM_LABEL_VIDEO_SCALE: - return "video_scale"; - case MENU_ENUM_LABEL_VIDEO_SCALE_INTEGER: - return "video_scale_integer"; - case MENU_ENUM_LABEL_VIDEO_SETTINGS: - return "video_settings"; - case MENU_ENUM_LABEL_VIDEO_SHADER_DIR: - return "video_shader_dir"; - case MENU_ENUM_LABEL_VIDEO_SHADER_FILTER_PASS: - return "video_shader_filter_pass"; - case MENU_ENUM_LABEL_VIDEO_SHADER_NUM_PASSES: - return "video_shader_num_passes"; - case MENU_ENUM_LABEL_VIDEO_SHADER_PARAMETERS: - return "video_shader_parameters"; - case MENU_ENUM_LABEL_VIDEO_SHADER_PASS: - return "video_shader_pass"; - case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET: - return "video_shader_preset"; - case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_PARAMETERS: - return "video_shader_preset_parameters"; - case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_AS: - return "video_shader_preset_save_as"; - case MENU_ENUM_LABEL_VIDEO_SHADER_SCALE_PASS: - return "video_shader_scale_pass"; - case MENU_ENUM_LABEL_VIDEO_SHARED_CONTEXT: - return "video_shared_context"; - case MENU_ENUM_LABEL_VIDEO_SMOOTH: - return "video_smooth"; - case MENU_ENUM_LABEL_VIDEO_SOFT_FILTER: - return "soft_filter"; - case MENU_ENUM_LABEL_VIDEO_SWAP_INTERVAL: - return "video_swap_interval"; - case MENU_ENUM_LABEL_VIDEO_TAB: - return "video_tab"; - case MENU_ENUM_LABEL_VIDEO_THREADED: - return "video_threaded"; - case MENU_ENUM_LABEL_VIDEO_VFILTER: - return "video_vfilter"; - case MENU_ENUM_LABEL_VIDEO_VIEWPORT_CUSTOM_HEIGHT: - return "video_viewport_custom_height"; - case MENU_ENUM_LABEL_VIDEO_VIEWPORT_CUSTOM_WIDTH: - return "video_viewport_custom_width"; - case MENU_ENUM_LABEL_VIDEO_VIEWPORT_CUSTOM_X: - return "video_viewport_custom_x"; - case MENU_ENUM_LABEL_VIDEO_VIEWPORT_CUSTOM_Y: - return "video_viewport_custom_y"; - case MENU_ENUM_LABEL_VIDEO_VI_WIDTH: - return "video_vi_width"; - case MENU_ENUM_LABEL_VIDEO_VSYNC: - return "video_vsync"; - case MENU_ENUM_LABEL_VIDEO_WINDOWED_FULLSCREEN: - return "video_windowed_fullscreen"; - case MENU_ENUM_LABEL_WIFI_DRIVER: - return "wifi_driver"; - case MENU_ENUM_LABEL_WIFI_SETTINGS: - return "wifi_settings"; - case MENU_ENUM_LABEL_XMB_ALPHA_FACTOR: - return "xmb_alpha_factor"; - case MENU_ENUM_LABEL_XMB_FONT: - return "xmb_font"; - case MENU_ENUM_LABEL_XMB_MENU_COLOR_THEME: - return "xmb_menu_color_theme"; - case MENU_ENUM_LABEL_XMB_RIBBON_ENABLE: - return "xmb_ribbon_enable"; - case MENU_ENUM_LABEL_XMB_SCALE_FACTOR: - return "xmb_scale_factor"; - case MENU_ENUM_LABEL_XMB_SHADOWS_ENABLE: - return "xmb_shadows_enable"; - case MENU_ENUM_LABEL_XMB_SHOW_HISTORY: - return "xmb_show_history"; - case MENU_ENUM_LABEL_XMB_SHOW_IMAGES: - return "xmb_show_images"; - case MENU_ENUM_LABEL_XMB_SHOW_MUSIC: - return "xmb_show_music"; - case MENU_ENUM_LABEL_XMB_SHOW_SETTINGS: - return "xmb_show_settings"; - case MENU_ENUM_LABEL_XMB_SHOW_VIDEO: - return "xmb_show_video"; - case MENU_ENUM_LABEL_XMB_THEME: - return "xmb_theme"; - case MENU_ENUM_SUBLABEL_MENU_SETTINGS: - return "メニューの外観関係の設定を変更する。"; - case MENU_ENUM_SUBLABEL_VIDEO_HARD_SYNC: - return "CPUとGPUを強制に同期する。遅延が減るけどパフォーマンスも減る。"; - case MENU_ENUM_SUBLABEL_VIDEO_THREADED: - return "パフォーマンスを改良するけど、ビデオの遅延と途切れが増す。フルスピードを取得しない時だけで使用する。"; - case MSG_AUDIO_VOLUME: - return "音量"; - case MSG_AUTODETECT: - return "自動検出"; - case MSG_AUTOLOADING_SAVESTATE_FROM: - return "Auto-loading savestate from"; - case MSG_BRINGING_UP_COMMAND_INTERFACE_ON_PORT: - return "bringing_up_command_interface_at_port"; - case MSG_CONNECTING_TO_NETPLAY_HOST: - return "Connecting to netplay host"; - case MSG_CONNECTING_TO_PORT: - return "Connecting to port"; - case MSG_CONNECTION_SLOT: - return "Connection slot"; - case MSG_CONNECT_DEVICE_FROM_A_VALID_PORT: - return "connect_device_from_a_valid_port"; - case MSG_DEVICE_CONFIGURED_IN_PORT: - return "configured in port"; - case MSG_DEVICE_DISCONNECTED_FROM_PORT: - return "Device disconnected from port"; - case MSG_DEVICE_NOT_CONFIGURED: - return "設定されていない"; - case MSG_DISCONNECTING_DEVICE_FROM_PORT: - return "disconnecting_device_from_port"; - case MSG_DISCONNECT_DEVICE_FROM_A_VALID_PORT: - return "disconnect_device_from_a_valid_port"; - case MSG_FAILED: - return "失敗"; - case MSG_FAILED_TO_SET_DISK: - return "Failed to set disk"; - case MSG_FAILED_TO_START_AUDIO_DRIVER: - return "failed_to_start_audio_driver"; - case MSG_FILE_ALREADY_EXISTS_SAVING_TO_BACKUP_BUFFER: - return "File already exists. Saving to backup buffer"; - case MSG_FOUND_LAST_STATE_SLOT: - return "found_last_state_slot"; - case MSG_GOT_CONNECTION_FROM: - return "Got connection from"; - case MSG_NETPLAY_USERS_HAS_FLIPPED: - return "Netplay users has flipped"; - case MSG_SETTING_DISK_IN_TRAY: - return "Setting disk in tray"; - case MSG_SUCCEEDED: - return "成功しました"; - case MSG_UNKNOWN_NETPLAY_COMMAND_RECEIVED: - return "Unknown netplay command received"; - case MSG_WAITING_FOR_CLIENT: - return "クライアントに待機中"; - default: - break; - } - - return "null"; -} -#endif - const char *msg_hash_to_str_jp(enum msg_hash_enums msg) { -#ifdef HAVE_MENU - const char *ret = menu_hash_to_str_jp_label_enum(msg); - - if (ret && !string_is_equal(ret, "null")) - return ret; -#endif - switch (msg) { - case MENU_ENUM_LABEL_VALUE_ACCOUNTS_CHEEVOS_PASSWORD: - return "パスワード"; - case MENU_ENUM_LABEL_VALUE_ACCOUNTS_CHEEVOS_SETTINGS: - return "Accounts Cheevos"; - case MENU_ENUM_LABEL_VALUE_ACCOUNTS_CHEEVOS_USERNAME: - return "ユーザー名"; - case MENU_ENUM_LABEL_VALUE_ACCOUNTS_LIST: - return "アカウント"; - case MENU_ENUM_LABEL_VALUE_ACCOUNTS_LIST_END: - return "Accounts List Endpoint"; - case MENU_ENUM_LABEL_VALUE_ACCOUNTS_RETRO_ACHIEVEMENTS: - return "Retro Achievements"; - case MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_LIST: - return "Achievement List"; - case MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_LIST_HARDCORE: - return "Achievement List (Hardcore)"; - case MENU_ENUM_LABEL_VALUE_ADD_CONTENT_LIST: - return "コンテンツをスキャン"; - case MENU_ENUM_LABEL_VALUE_ADD_TAB: - return "コンテンツをインポート"; - case MENU_ENUM_LABEL_VALUE_ARCHIVE_MODE: - return "Archive File Association Action"; - case MENU_ENUM_LABEL_VALUE_ASK_ARCHIVE: - return "Ask"; - case MENU_ENUM_LABEL_VALUE_ASSETS_DIRECTORY: - return "資産のディレクトリー"; - case MENU_ENUM_LABEL_VALUE_AUDIO_BLOCK_FRAMES: - return "Block Frames"; - case MENU_ENUM_LABEL_VALUE_AUDIO_DEVICE: - return "オーディオのデバイス"; - case MENU_ENUM_LABEL_VALUE_AUDIO_DRIVER: - return "オーディオのドライバ"; - case MENU_ENUM_LABEL_VALUE_AUDIO_DSP_PLUGIN: - return "オーディオのDSPプラグイン"; - case MENU_ENUM_LABEL_VALUE_AUDIO_ENABLE: - return "オーディオを有効"; - case MENU_ENUM_LABEL_VALUE_AUDIO_FILTER_DIR: - return "オーディオフィルターのディレクトリー"; - case MENU_ENUM_LABEL_VALUE_AUDIO_LATENCY: - return "オーディオの遅延 (ms)"; - case MENU_ENUM_LABEL_VALUE_AUDIO_MAX_TIMING_SKEW: - return "オーディオの最高タイミングスキュー"; - case MENU_ENUM_LABEL_VALUE_AUDIO_MUTE: - return "オーディオの消音"; - case MENU_ENUM_LABEL_VALUE_AUDIO_OUTPUT_RATE: - return "オーディオの出力レート(KHz)"; - case MENU_ENUM_LABEL_VALUE_AUDIO_RATE_CONTROL_DELTA: - return "オーディオのレートコントロールデルタ"; - case MENU_ENUM_LABEL_VALUE_AUDIO_RESAMPLER_DRIVER: - return "オーディをリサンプルのドライバ"; - case MENU_ENUM_LABEL_VALUE_AUDIO_SETTINGS: - return "オーディオ"; - case MENU_ENUM_LABEL_VALUE_AUDIO_SYNC: - return "オーディオの同期を有効"; - case MENU_ENUM_LABEL_VALUE_AUDIO_VOLUME: - return "オーディオの音量 (dB)"; - case MENU_ENUM_LABEL_VALUE_AUTOSAVE_INTERVAL: - return "セーブRAMの自動保存期間"; - case MENU_ENUM_LABEL_VALUE_AUTO_OVERRIDES_ENABLE: - return "オーバーライドファイルを自動的にロード"; - case MENU_ENUM_LABEL_VALUE_AUTO_REMAPS_ENABLE: - return "リマップファイルを自動的にロード"; - case MENU_ENUM_LABEL_VALUE_AUTO_SHADERS_ENABLE: - return "Load Shader Presets Automatically"; - case MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_BACK: - return "戻る"; - case MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_CONFIRM: - return "確認"; - case MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_INFO: - return "情報"; - case MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_QUIT: - return "終了"; - case MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_SCROLL_DOWN: - return "下にスクロール"; - case MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_SCROLL_UP: - return "上にスクロール"; - case MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_START: - return "スタート"; - case MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_TOGGLE_KEYBOARD: - return "キーボードに切り替え"; - case MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_TOGGLE_MENU: - return "メニューに切り替え"; - case MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS: - return "Basic menu controls"; - case MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_CONFIRM: - return "確認/了承"; - case MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_INFO: - return "情報"; - case MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_QUIT: - return "終了"; - case MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_SCROLL_UP: - return "Scroll Up"; - case MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_START: - return "デフォルト"; - case MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_TOGGLE_KEYBOARD: - return "キーボードに切り替え"; - case MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_TOGGLE_MENU: - return "メニューに切り替え"; - case MENU_ENUM_LABEL_VALUE_BLOCK_SRAM_OVERWRITE: - return "保存状態をロード時にセーブRAMを置き換えない"; - case MENU_ENUM_LABEL_VALUE_BLUETOOTH_ENABLE: - return "Bluetoothを有効"; - case MENU_ENUM_LABEL_VALUE_BUILDBOT_ASSETS_URL: - return "Buildbotの資産URL"; - case MENU_ENUM_LABEL_VALUE_CACHE_DIRECTORY: - return "キャッシュのディレクトリー"; - case MENU_ENUM_LABEL_VALUE_CAMERA_ALLOW: - return "カメラを許す"; - case MENU_ENUM_LABEL_VALUE_CAMERA_DRIVER: - return "カメラのドライバ"; - case MENU_ENUM_LABEL_VALUE_CHEAT: - return "チート"; - case MENU_ENUM_LABEL_VALUE_CHEAT_APPLY_CHANGES: - return "チートの変更点を適用"; - case MENU_ENUM_LABEL_VALUE_CHEAT_DATABASE_PATH: - return "チートファイルのディレクトリー"; - case MENU_ENUM_LABEL_VALUE_CHEAT_FILE: - return "チートファイル"; - case MENU_ENUM_LABEL_VALUE_CHEAT_FILE_LOAD: - return "チートファイルをロード"; - case MENU_ENUM_LABEL_VALUE_CHEAT_FILE_SAVE_AS: - return "チートファイルを名前を付けて保存"; - case MENU_ENUM_LABEL_VALUE_CHEAT_NUM_PASSES: - return "チートのパス"; - case MENU_ENUM_LABEL_VALUE_CHEEVOS_DESCRIPTION: - return "説明"; - case MENU_ENUM_LABEL_VALUE_CHEEVOS_HARDCORE_MODE_ENABLE: - return "ハードコアモード"; - case MENU_ENUM_LABEL_VALUE_CHEEVOS_LOCKED_ACHIEVEMENTS: - return "Locked Achievements:"; - case MENU_ENUM_LABEL_VALUE_CHEEVOS_LOCKED_ENTRY: - return "ロックされている"; - case MENU_ENUM_LABEL_VALUE_CHEEVOS_SETTINGS: - return "レトロ"; - case MENU_ENUM_LABEL_VALUE_CHEEVOS_TEST_UNOFFICIAL: - return "非公式をテスト"; - case MENU_ENUM_LABEL_VALUE_CHEEVOS_UNLOCKED_ACHIEVEMENTS: - return "Unlocked Achievements:"; - case MENU_ENUM_LABEL_VALUE_CHEEVOS_UNLOCKED_ENTRY: - return "アンロックされている"; - case MENU_ENUM_LABEL_VALUE_CLOSE_CONTENT: - return "閉じる"; - case MENU_ENUM_LABEL_VALUE_CONFIG: - return "コンフィグ"; - case MENU_ENUM_LABEL_VALUE_CONFIGURATIONS: - return "設定をロード"; - case MENU_ENUM_LABEL_VALUE_CONFIGURATIONS_LIST: - return "設定ファイル"; - case MENU_ENUM_LABEL_VALUE_CONFIGURATION_SETTINGS: - return "設定"; - case MENU_ENUM_LABEL_VALUE_CONFIG_SAVE_ON_EXIT: - return "終了前に設定を自動保存"; - case MENU_ENUM_LABEL_VALUE_CONFIRM_ON_EXIT: - return "終了前に確認"; - case MENU_ENUM_LABEL_VALUE_CONTENT_COLLECTION_LIST: - return "コレクション"; - case MENU_ENUM_LABEL_VALUE_CONTENT_DATABASE_DIRECTORY: - return "コンテンツデータベースのディレクトリー"; - case MENU_ENUM_LABEL_VALUE_CONTENT_DIR: - return "コンテンツのディレクトリー"; - case MENU_ENUM_LABEL_VALUE_CONTENT_HISTORY_SIZE: - return "履歴リストのサイズ"; - case MENU_ENUM_LABEL_VALUE_CONTENT_SETTINGS: - return "クイックメニュー"; - case MENU_ENUM_LABEL_VALUE_CORE_ASSETS_DIR: - return "コアの資産ディレクトリー"; - case MENU_ENUM_LABEL_VALUE_CORE_ASSETS_DIRECTORY: - return "ダウンロードのディレクトリー"; - case MENU_ENUM_LABEL_VALUE_CORE_CHEAT_OPTIONS: - return "チート"; - case MENU_ENUM_LABEL_VALUE_CORE_COUNTERS: - return "Core Counters"; - case MENU_ENUM_LABEL_VALUE_CORE_ENABLE: - return "コアの名前を表示"; - case MENU_ENUM_LABEL_VALUE_CORE_INFORMATION: - return "コアの情報"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_AUTHORS: - return "作家"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_CATEGORIES: - return "カテゴリー"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_LABEL: - return "コアのラベル"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_NAME: - return "コアの名前"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_NOTES: - return "コアのメモ"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_FIRMWARE: - return "ファームウェア"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_LICENSES: - return "ライセンス"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_PERMISSIONS: - return "許可"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_SUPPORTED_EXTENSIONS: - return "対応する拡張子"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_SYSTEM_MANUFACTURER: - return "システムのメーカー"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_SYSTEM_NAME: - return "システム名"; - case MENU_ENUM_LABEL_VALUE_CORE_INPUT_REMAPPING_OPTIONS: - return "コントロール"; - case MENU_ENUM_LABEL_VALUE_CORE_LIST: - return "コアをロード"; - case MENU_ENUM_LABEL_VALUE_CORE_OPTIONS: - return "オプション"; - case MENU_ENUM_LABEL_VALUE_CORE_SETTINGS: - return "コア"; - case MENU_ENUM_LABEL_VALUE_CORE_SET_SUPPORTS_NO_CONTENT_ENABLE: - return "自動的にコアをスタート"; - case MENU_ENUM_LABEL_VALUE_CORE_SPECIFIC_CONFIG: - return "コア特定の設定"; - case MENU_ENUM_LABEL_VALUE_CORE_UPDATER_AUTO_EXTRACT_ARCHIVE: - return "ダウンロードしたアーカイブを自動解凍"; - case MENU_ENUM_LABEL_VALUE_CORE_UPDATER_BUILDBOT_URL: - return "BuildbotのコアURL"; - case MENU_ENUM_LABEL_VALUE_CORE_UPDATER_LIST: - return "コアのアップデーター"; - case MENU_ENUM_LABEL_VALUE_CORE_UPDATER_SETTINGS: - return "アップデーター"; - case MENU_ENUM_LABEL_VALUE_CPU_ARCHITECTURE: - return "CPUアーキテクチャ:"; - case MENU_ENUM_LABEL_VALUE_CPU_CORES: - return "CPUコア数:"; - case MENU_ENUM_LABEL_VALUE_CURSOR_DIRECTORY: - return "カーソルのディレクトリー"; - case MENU_ENUM_LABEL_VALUE_CURSOR_MANAGER: - return "カーソルマネージャー"; - case MENU_ENUM_LABEL_VALUE_CUSTOM_RATIO: - return "カスタム比"; - case MENU_ENUM_LABEL_VALUE_DATABASE_MANAGER: - return "データーベースマネージャー"; - case MENU_ENUM_LABEL_VALUE_DATABASE_SELECTION: - return "Database Selection"; - case MENU_ENUM_LABEL_VALUE_DELETE_ENTRY: - return "削除"; - case MENU_ENUM_LABEL_VALUE_DETECT_CORE_LIST: - return "ファイルを選択とコア検出"; - case MENU_ENUM_LABEL_VALUE_DIRECTORY_CONTENT: - return ""; - case MENU_ENUM_LABEL_VALUE_DIRECTORY_DEFAULT: - return ""; - case MENU_ENUM_LABEL_VALUE_DIRECTORY_NONE: - return ""; - case MENU_ENUM_LABEL_VALUE_DIRECTORY_NOT_FOUND: - return "そのようなフォルダはありません。"; - case MENU_ENUM_LABEL_VALUE_DIRECTORY_SETTINGS: - return "ディレクトリ"; - case MENU_ENUM_LABEL_VALUE_DISABLED: - return "無効"; - case MENU_ENUM_LABEL_VALUE_DISK_CYCLE_TRAY_STATUS: - return "Disk Cycle Tray Status"; - case MENU_ENUM_LABEL_VALUE_DISK_IMAGE_APPEND: - return "Disk Image Append"; - case MENU_ENUM_LABEL_VALUE_DISK_INDEX: - return "Disk Index"; - case MENU_ENUM_LABEL_VALUE_DISK_OPTIONS: - return "ディスク設定"; - case MENU_ENUM_LABEL_VALUE_DONT_CARE: - return "Don't care"; - case MENU_ENUM_LABEL_VALUE_DOWNLOADED_FILE_DETECT_CORE_LIST: - return "ダウンロードのディレクトリー"; - case MENU_ENUM_LABEL_VALUE_DOWNLOAD_CORE: - return "コアをダウンロード..."; - case MENU_ENUM_LABEL_VALUE_DOWNLOAD_CORE_CONTENT: - return "コンテンツをダウンロード"; - case MENU_ENUM_LABEL_VALUE_DPI_OVERRIDE_ENABLE: - return "DPI Override Enable"; - case MENU_ENUM_LABEL_VALUE_DPI_OVERRIDE_VALUE: - return "DPI Override"; - case MENU_ENUM_LABEL_VALUE_DRIVER_SETTINGS: - return "ドライバ"; - case MENU_ENUM_LABEL_VALUE_DUMMY_ON_CORE_SHUTDOWN: - return "コアをシャットダウンでダミー"; - case MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPER: - return "ダイナミック壁紙"; - case MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPERS_DIRECTORY: - return "ダイナミック壁紙のディレクトリー"; - case MENU_ENUM_LABEL_VALUE_CHEEVOS_ENABLE: - return "有効"; - case MENU_ENUM_LABEL_VALUE_ENTRY_HOVER_COLOR: - return "Menu entry hover color"; - case MENU_ENUM_LABEL_VALUE_ENTRY_NORMAL_COLOR: - return "Menu entry normal color"; - case MENU_ENUM_LABEL_VALUE_FALSE: - return "偽"; - case MENU_ENUM_LABEL_VALUE_FASTFORWARD_RATIO: - return "早送り比"; - case MENU_ENUM_LABEL_VALUE_FPS_SHOW: - return "フレームレートを表示"; - case MENU_ENUM_LABEL_VALUE_FRAME_THROTTLE_ENABLE: - return "フレームの減速度"; - case MENU_ENUM_LABEL_VALUE_FRAME_THROTTLE_SETTINGS: - return "フレームの減速度"; - case MENU_ENUM_LABEL_VALUE_FRONTEND_COUNTERS: - return "Frontend Counters"; - case MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_OPTIONS: - return "コンテンツ特定のコア設定を自動的にロード"; - case MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_OPTIONS_CREATE: - return "Create game-options file"; - case MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_OPTIONS_IN_USE: - return "Game-options file"; - case MENU_ENUM_LABEL_VALUE_HELP: - return "ヘルプ"; - case MENU_ENUM_LABEL_VALUE_HELP_AUDIO_VIDEO_TROUBLESHOOTING: - return "Audio/Video Troubleshooting"; - case MENU_ENUM_LABEL_VALUE_HELP_CHANGE_VIRTUAL_GAMEPAD: - return "Changing Virtual Gamepad Overlay"; - case MENU_ENUM_LABEL_VALUE_HELP_CONTROLS: - return "Basic Menu Controls"; - case MENU_ENUM_LABEL_VALUE_HELP_LIST: - return "ヘルプ"; - case MENU_ENUM_LABEL_VALUE_HELP_LOADING_CONTENT: - return "Loading Content"; - case MENU_ENUM_LABEL_VALUE_HELP_SCANNING_CONTENT: - return "Scanning For Content"; - case MENU_ENUM_LABEL_VALUE_HELP_WHAT_IS_A_CORE: - return "What Is A Core?"; - case MENU_ENUM_LABEL_VALUE_HISTORY_LIST_ENABLE: - return "履歴リストを有効"; - case MENU_ENUM_LABEL_VALUE_HISTORY_TAB: - return "履歴"; - case MENU_ENUM_LABEL_VALUE_HORIZONTAL_MENU: - return "Horizontal Menu"; - case MENU_ENUM_LABEL_VALUE_IMAGES_TAB: - return "画像"; - case MENU_ENUM_LABEL_VALUE_INFORMATION: - return "情報"; - case MENU_ENUM_LABEL_VALUE_INFORMATION_LIST: - return "情報"; - case MENU_ENUM_LABEL_VALUE_INPUT_ADC_TYPE: - return "アナログのデジタル化のタイプ"; - case MENU_ENUM_LABEL_VALUE_INPUT_ALL_USERS_CONTROL_MENU: - return "すべてのユーザーがメニューを操作できる"; - case MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_X: - return "左アナログX"; - case MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_X_MINUS: - return "左アナログX- (左)"; - case MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_X_PLUS: - return "左アナログX+ (右)"; - case MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_Y: - return "左アナログY"; - case MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_Y_MINUS: - return "左アナログY- (上)"; - case MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_Y_PLUS: - return "左アナログY+ (下)"; - case MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_X: - return "右アナログX"; - case MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_X_MINUS: - return "右アナログX- (左)"; - case MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_X_PLUS: - return "右アナログX+ (右)"; - case MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_Y: - return "右アナログY"; - case MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_Y_MINUS: - return "右アナログY- (上)"; - case MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_Y_PLUS: - return "右アナログY+ (下)"; - case MENU_ENUM_LABEL_VALUE_INPUT_AUTODETECT_ENABLE: - return "自動コンフィグを有効"; - case MENU_ENUM_LABEL_VALUE_INPUT_AXIS_THRESHOLD: - return "入力軸のしきい値"; - case MENU_ENUM_LABEL_VALUE_INPUT_BACK_AS_MENU_ENUM_TOGGLE_ENABLE: - return "Back As Menu Toggle Enable"; - case MENU_ENUM_LABEL_VALUE_INPUT_BIND_ALL: - return "全てをバインド"; - case MENU_ENUM_LABEL_VALUE_INPUT_BIND_DEFAULT_ALL: - return "全てのバインドを初期化"; - case MENU_ENUM_LABEL_VALUE_INPUT_BIND_TIMEOUT: - return "バインドのタイムアウト"; - case MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_HIDE_UNBOUND: - return "未定義のコア入力の識別子を隠す"; - case MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_LABEL_SHOW: - return "入力の識別子ラベルを表示"; - case MENU_ENUM_LABEL_VALUE_INPUT_DEVICE_INDEX: - return "デバイスインデックス"; - case MENU_ENUM_LABEL_VALUE_INPUT_DEVICE_TYPE: - return "デバイスタイプ"; - case MENU_ENUM_LABEL_VALUE_INPUT_DRIVER: - return "入力のドライバ"; - case MENU_ENUM_LABEL_VALUE_INPUT_DUTY_CYCLE: - return "デューティー比"; - case MENU_ENUM_LABEL_VALUE_INPUT_HOTKEY_BINDS: - return "入力のホットキーバインド"; - case MENU_ENUM_LABEL_VALUE_INPUT_ICADE_ENABLE: - return "Keyboard Gamepad Mapping Enable"; - case MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_A: - return "Aボタン(右)"; - case MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_B: - return "Bボタン(下)"; - case MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_DOWN: - return "下 (十字キー)"; - case MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_L2: - return "L2ボタン(トリガー)"; - case MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_L3: - return "L3ボタン(親指)"; - case MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_L: - return "Lボタン(上面)"; - case MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_LEFT: - return "左 (十字キー)"; - case MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_R2: - return "R2ボタン(トリガー)"; - case MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_R3: - return "R3ボタン(親指)"; - case MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_R: - return "Rボタン(上面)"; - case MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_RIGHT: - return "右 (十字キー)"; - case MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_SELECT: - return "選択ボタン"; - case MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_START: - return "スタートボタン"; - case MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_UP: - return "上 (十字キー)"; - case MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_X: - return "Xボタン(上面)"; - case MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_Y: - return "Yボタン(左)"; - case MENU_ENUM_LABEL_VALUE_INPUT_KEY: - return "(キー: %s)"; - case MENU_ENUM_LABEL_VALUE_INPUT_KEYBOARD_GAMEPAD_MAPPING_TYPE: - return "Keyboard Gamepad Mapping Type"; - case MENU_ENUM_LABEL_VALUE_INPUT_MAX_USERS: - return "最高のユーザー数"; - case MENU_ENUM_LABEL_VALUE_INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO: - return "ゲームパッドのメニュー切り替えコンボ"; - case MENU_ENUM_LABEL_VALUE_INPUT_META_CHEAT_INDEX_MINUS: - return "前のチートインデックス"; - case MENU_ENUM_LABEL_VALUE_INPUT_META_CHEAT_INDEX_PLUS: - return "次のチートインデックス"; - case MENU_ENUM_LABEL_VALUE_INPUT_META_CHEAT_TOGGLE: - return "チートを切り替"; - case MENU_ENUM_LABEL_VALUE_INPUT_META_DISK_EJECT_TOGGLE: - return "ディスクを取り出し"; - case MENU_ENUM_LABEL_VALUE_INPUT_META_DISK_NEXT: - return "次のディスクに切り替え"; - case MENU_ENUM_LABEL_VALUE_INPUT_META_DISK_PREV: - return "前のディスクに切り替え"; - case MENU_ENUM_LABEL_VALUE_INPUT_META_ENABLE_HOTKEY: - return "ホットキーを有効"; - case MENU_ENUM_LABEL_VALUE_INPUT_META_FAST_FORWARD_HOLD_KEY: - return "ホールドで早送"; - case MENU_ENUM_LABEL_VALUE_INPUT_META_FAST_FORWARD_KEY: - return "早送りに切り替え"; - case MENU_ENUM_LABEL_VALUE_INPUT_META_FRAMEADVANCE: - return "コマ送り"; - case MENU_ENUM_LABEL_VALUE_INPUT_META_FULLSCREEN_TOGGLE_KEY: - return "フルスクリーンに切り替え"; - case MENU_ENUM_LABEL_VALUE_INPUT_META_GRAB_MOUSE_TOGGLE: - return "マウスグラブを切り替え"; - case MENU_ENUM_LABEL_VALUE_INPUT_META_LOAD_STATE_KEY: - return "保存状態をロード"; - case MENU_ENUM_LABEL_VALUE_INPUT_META_MENU_TOGGLE: - return "メニューに切り替え"; - case MENU_ENUM_LABEL_VALUE_INPUT_META_MOVIE_RECORD_TOGGLE: - return "録画"; - case MENU_ENUM_LABEL_VALUE_INPUT_META_MUTE: - return "消音"; - case MENU_ENUM_LABEL_VALUE_INPUT_META_NETPLAY_FLIP: - return "ネットプレイのユーザ交換"; - case MENU_ENUM_LABEL_VALUE_INPUT_META_OSK: - return "ソフトウェアキーボードを切りがえ"; - case MENU_ENUM_LABEL_VALUE_INPUT_META_OVERLAY_NEXT: - return "次のオーバーレイ"; - case MENU_ENUM_LABEL_VALUE_INPUT_META_PAUSE_TOGGLE: - return "一時停止"; - case MENU_ENUM_LABEL_VALUE_INPUT_META_QUIT_KEY: - return "RetroArchを終了"; - case MENU_ENUM_LABEL_VALUE_INPUT_META_RESET: - return "リセット"; - case MENU_ENUM_LABEL_VALUE_INPUT_META_REWIND: - return "巻き戻し"; - case MENU_ENUM_LABEL_VALUE_INPUT_META_SAVE_STATE_KEY: - return "状態保存"; - case MENU_ENUM_LABEL_VALUE_INPUT_META_SCREENSHOT: - return "スクリーンショット"; - case MENU_ENUM_LABEL_VALUE_INPUT_META_SHADER_NEXT: - return "次のシェーダー"; - case MENU_ENUM_LABEL_VALUE_INPUT_META_SHADER_PREV: - return "前のシェーダー"; - case MENU_ENUM_LABEL_VALUE_INPUT_META_SLOWMOTION: - return "スローモーション"; - case MENU_ENUM_LABEL_VALUE_INPUT_META_STATE_SLOT_MINUS: - return "前の状態スロット"; - case MENU_ENUM_LABEL_VALUE_INPUT_META_STATE_SLOT_PLUS: - return "次の状態スロット"; - case MENU_ENUM_LABEL_VALUE_INPUT_META_VOLUME_DOWN: - return "音量を減る"; - case MENU_ENUM_LABEL_VALUE_INPUT_META_VOLUME_UP: - return "音量を増す"; - case MENU_ENUM_LABEL_VALUE_INPUT_OSK_OVERLAY_ENABLE: - return "キーボードオーバーレイを表示"; - case MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_ENABLE: - return "ディスプレイのオーバーレイ"; - case MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_HIDE_IN_MENU: - return "メニューにオーバーレイを隠す"; - case MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR: - return "ポールタイプの行動"; - case MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR_EARLY: - return "早い"; - case MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR_LATE: - return "遅い"; - case MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR_NORMAL: - return "普通"; - case MENU_ENUM_LABEL_VALUE_INPUT_PREFER_FRONT_TOUCH: - return "Prefer Front Touch"; - case MENU_ENUM_LABEL_VALUE_INPUT_REMAPPING_DIRECTORY: - return "入力リマップのディレクトリー"; - case MENU_ENUM_LABEL_VALUE_INPUT_REMAP_BINDS_ENABLE: - return "リマップバインドを有効"; - case MENU_ENUM_LABEL_VALUE_INPUT_SAVE_AUTOCONFIG: - return "自動設定を保存"; - case MENU_ENUM_LABEL_VALUE_INPUT_SETTINGS: - return "入力"; - case MENU_ENUM_LABEL_VALUE_INPUT_SMALL_KEYBOARD_ENABLE: - return "Small Keyboard Enable"; - case MENU_ENUM_LABEL_VALUE_INPUT_TOUCH_ENABLE: - return "タッチを有効"; - case MENU_ENUM_LABEL_VALUE_INPUT_TURBO_ENABLE: - return "ターボ有効"; - case MENU_ENUM_LABEL_VALUE_INPUT_TURBO_PERIOD: - return "ターボの期間"; - case MENU_ENUM_LABEL_VALUE_INPUT_USER_BINDS: - return "入力ユーザー%uのバインド"; - case MENU_ENUM_LABEL_VALUE_INTERNAL_STORAGE_STATUS: - return "Internal storage status"; - case MENU_ENUM_LABEL_VALUE_JOYPAD_AUTOCONFIG_DIR: - return "入力デバイスの自動設定ディレクトリー"; - case MENU_ENUM_LABEL_VALUE_JOYPAD_DRIVER: - return "ジョイパッドのドライバ"; - case MENU_ENUM_LABEL_VALUE_KEYBOARD_OVERLAY_PRESET: - return "キーボードのオーバーレイプリセット"; - case MENU_ENUM_LABEL_VALUE_LAKKA_SERVICES: - return "Lakkaのサービス"; - case MENU_ENUM_LABEL_VALUE_LANG_CHINESE_SIMPLIFIED: - return "中国語 (簡体)"; - case MENU_ENUM_LABEL_VALUE_LANG_CHINESE_TRADITIONAL: - return "中国語 (繁体)"; - case MENU_ENUM_LABEL_VALUE_LANG_DUTCH: - return "オランダ語"; - case MENU_ENUM_LABEL_VALUE_LANG_ENGLISH: - return "英語"; - case MENU_ENUM_LABEL_VALUE_LANG_ESPERANTO: - return "エスペラント"; - case MENU_ENUM_LABEL_VALUE_LANG_FRENCH: - return "フランス語"; - case MENU_ENUM_LABEL_VALUE_LANG_GERMAN: - return "ドイツ語"; - case MENU_ENUM_LABEL_VALUE_LANG_ITALIAN: - return "イタリア語"; - case MENU_ENUM_LABEL_VALUE_LANG_JAPANESE: - return "日本語"; - case MENU_ENUM_LABEL_VALUE_LANG_KOREAN: - return "韓国語"; - case MENU_ENUM_LABEL_VALUE_LANG_POLISH: - return "ポーランド語"; - case MENU_ENUM_LABEL_VALUE_LANG_PORTUGUESE: - return "ポルトガル語"; - case MENU_ENUM_LABEL_VALUE_LANG_RUSSIAN: - return "ロシア語"; - case MENU_ENUM_LABEL_VALUE_LANG_SPANISH: - return "スペイン語"; - case MENU_ENUM_LABEL_VALUE_LANG_VIETNAMESE: - return "ベトナム語"; - case MENU_ENUM_LABEL_VALUE_LEFT_ANALOG: - return "左のアナログ"; - case MENU_ENUM_LABEL_VALUE_LIBRETRO_DIR_PATH: - return "コアのディレクトリー"; - case MENU_ENUM_LABEL_VALUE_LIBRETRO_INFO_PATH: - return "コア情報のディレクトリー"; - case MENU_ENUM_LABEL_VALUE_LIBRETRO_LOG_LEVEL: - return "コアのログ出力レベル"; - case MENU_ENUM_LABEL_VALUE_LINEAR: - return "Linear"; - case MENU_ENUM_LABEL_VALUE_LOAD_ARCHIVE: - return "コアでアーカイブをロード"; - case MENU_ENUM_LABEL_VALUE_LOAD_CONTENT: - return "ファイル選択"; - case MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_HISTORY: - return "最近のものをロード"; - case MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_LIST: - return "コンテンツをロード"; - case MENU_ENUM_LABEL_VALUE_LOAD_STATE: - return "保存状態をロード"; - case MENU_ENUM_LABEL_VALUE_LOCATION_ALLOW: - return "ロケーションを許す"; - case MENU_ENUM_LABEL_VALUE_LOCATION_DRIVER: - return "ロケーションのドライバ"; - case MENU_ENUM_LABEL_VALUE_LOGGING_SETTINGS: - return "ログ"; - case MENU_ENUM_LABEL_VALUE_LOG_VERBOSITY: - return "ログの出力レベル"; - case MENU_ENUM_LABEL_VALUE_MAIN_MENU: - return "メインメニュー"; - case MENU_ENUM_LABEL_VALUE_MANAGEMENT: - return "データベースの設定"; - case MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME: - return "メニューの色テーマ"; - case MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_BLUE: - return "青"; - case MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_BLUE_GREY: - return "ブルーグレイ"; - case MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_DARK_BLUE: - return "ダークブルー"; - case MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_GREEN: - return "緑"; - case MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_NVIDIA_SHIELD: - return "SHIELD"; - case MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_RED: - return "赤"; - case MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_YELLOW: - return "黄色"; - case MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_FOOTER_OPACITY: - return "Footer Opacity"; - case MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_HEADER_OPACITY: - return "Header Opacity"; - case MENU_ENUM_LABEL_VALUE_MENU_DRIVER: - return "メニューのドライバ"; - case MENU_ENUM_LABEL_VALUE_MENU_ENUM_THROTTLE_FRAMERATE: - return "メニューのフレームレートを減速"; - case MENU_ENUM_LABEL_VALUE_MENU_FILE_BROWSER_SETTINGS: - return "メニューファイルブラウザー"; - case MENU_ENUM_LABEL_VALUE_MENU_LINEAR_FILTER: - return "メニューのリニアフィルター"; - case MENU_ENUM_LABEL_VALUE_MENU_SETTINGS: - return "メニュー"; - case MENU_ENUM_LABEL_VALUE_MENU_WALLPAPER: - return "メニューの壁紙"; - case MENU_ENUM_LABEL_VALUE_MENU_WALLPAPER_OPACITY: - return "壁紙の不透明性"; - case MENU_ENUM_LABEL_VALUE_MISSING: - return "欠測"; - case MENU_ENUM_LABEL_VALUE_MORE: - return "..."; - case MENU_ENUM_LABEL_VALUE_MOUSE_ENABLE: - return "マウス対応"; - case MENU_ENUM_LABEL_VALUE_MULTIMEDIA_SETTINGS: - return "マルチメディア"; - case MENU_ENUM_LABEL_VALUE_MUSIC_TAB: - return "音楽"; - case MENU_ENUM_LABEL_VALUE_NAVIGATION_BROWSER_FILTER_SUPPORTED_EXTENSIONS_ENABLE: - return "不明な拡張子を隠す"; - case MENU_ENUM_LABEL_VALUE_NAVIGATION_WRAPAROUND: - return "ナビゲーションの回り込み"; - case MENU_ENUM_LABEL_VALUE_NEAREST: - return "Nearest"; - case MENU_ENUM_LABEL_VALUE_NETPLAY: - return "ネットプレイ"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_CHECK_FRAMES: - return "ネットプレイのチェックフレーム"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_CLIENT_SWAP_INPUT: - return "ネットプレイのP2がC1を使用"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_DELAY_FRAMES: - return "ネットプレイの延期フレーム"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_DISCONNECT: - return "切断"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE: - return "ネットプレイを有効"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE_CLIENT: - return "ネットプレイサーバーに接続"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE_HOST: - return "ホストする"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_IP_ADDRESS: - return "サーバーのアドレス"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_MODE: - return "ネットプレイのクライアントを有効"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_NICKNAME: - return "ユーザー名"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_SETTINGS: - return "ネットプレイ設定"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_SPECTATOR_MODE_ENABLE: - return "ネットプレイの観覧者を有効"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_TCP_UDP_PORT: - return "ネットプレイのTCP/UDPポート"; - case MENU_ENUM_LABEL_VALUE_NETWORK_CMD_ENABLE: - return "ネットワークコマンドを有効"; - case MENU_ENUM_LABEL_VALUE_NETWORK_CMD_PORT: - return "ネットワークコマンドのポート"; - case MENU_ENUM_LABEL_VALUE_NETWORK_INFORMATION: - return "ネットワーク情報"; - case MENU_ENUM_LABEL_VALUE_NETWORK_REMOTE_ENABLE: - return "ネットワークゲームパッド"; - case MENU_ENUM_LABEL_VALUE_NETWORK_REMOTE_PORT: - return "Network Remote Base Port"; - case MENU_ENUM_LABEL_VALUE_NETWORK_SETTINGS: - return "ネットワーク"; - case MENU_ENUM_LABEL_VALUE_NO: - return "いいえ"; - case MENU_ENUM_LABEL_VALUE_NONE: - return "無し"; - case MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE: - return "該当なし"; - case MENU_ENUM_LABEL_VALUE_NO_ACHIEVEMENTS_TO_DISPLAY: - return "No achievements to display."; - case MENU_ENUM_LABEL_VALUE_NO_CORE: - return "コアはありません"; - case MENU_ENUM_LABEL_VALUE_NO_CORES_AVAILABLE: - return "コアはありません。"; - case MENU_ENUM_LABEL_VALUE_NO_CORE_INFORMATION_AVAILABLE: - return "コア情報はありません。"; - case MENU_ENUM_LABEL_VALUE_NO_CORE_OPTIONS_AVAILABLE: - return "コア設定はありません。"; - case MENU_ENUM_LABEL_VALUE_NO_ENTRIES_TO_DISPLAY: - return "No entries to display."; - case MENU_ENUM_LABEL_VALUE_NO_HISTORY_AVAILABLE: - return "履歴はありません。"; - case MENU_ENUM_LABEL_VALUE_NO_INFORMATION_AVAILABLE: - return "情報はありません。"; - case MENU_ENUM_LABEL_VALUE_NO_ITEMS: - return "アイテムが見つかりません。"; - case MENU_ENUM_LABEL_VALUE_NO_PERFORMANCE_COUNTERS: - return "No performance counters."; - case MENU_ENUM_LABEL_VALUE_NO_PLAYLISTS: - return "プレイリストが見つかりません。"; - case MENU_ENUM_LABEL_VALUE_NO_PLAYLIST_ENTRIES_AVAILABLE: - return "プレイリストのエントリーはありません。"; - case MENU_ENUM_LABEL_VALUE_NO_SETTINGS_FOUND: - return "設定が見つかりませんでした。"; - case MENU_ENUM_LABEL_VALUE_NO_SHADER_PARAMETERS: - return "シェーダーのパラメータはありません。"; - case MENU_ENUM_LABEL_VALUE_OFF: - return "OFF"; - case MENU_ENUM_LABEL_VALUE_ON: - return "ON"; - case MENU_ENUM_LABEL_VALUE_ONLINE: - return "オンライン"; - case MENU_ENUM_LABEL_VALUE_ONLINE_UPDATER: - return "オンラインアップデーター"; - case MENU_ENUM_LABEL_VALUE_ONSCREEN_DISPLAY_SETTINGS: - return "OSDディスプレイ"; - case MENU_ENUM_LABEL_VALUE_ONSCREEN_OVERLAY_SETTINGS: - return "OSDオーバーレイ"; - case MENU_ENUM_LABEL_VALUE_OPEN_ARCHIVE: - return "フォルダでアーカイブを開く"; - case MENU_ENUM_LABEL_VALUE_OPTIONAL: - return "任意"; - case MENU_ENUM_LABEL_VALUE_OSK_OVERLAY_DIRECTORY: - return "OSKオーバーレイのディレクトリー"; - case MENU_ENUM_LABEL_VALUE_OVERLAY: - return "オーバーレイ"; - case MENU_ENUM_LABEL_VALUE_OVERLAY_AUTOLOAD_PREFERRED: - return "優先オーバーレイを自動ロード"; - case MENU_ENUM_LABEL_VALUE_OVERLAY_DIRECTORY: - return "オーバーレイのディレクトリー"; - case MENU_ENUM_LABEL_VALUE_OVERLAY_OPACITY: - return "オーバーレイの不透明性"; - case MENU_ENUM_LABEL_VALUE_OVERLAY_PRESET: - return "オーバーレイのプリセット"; - case MENU_ENUM_LABEL_VALUE_OVERLAY_SCALE: - return "オーバーレイのスケール"; - case MENU_ENUM_LABEL_VALUE_OVERLAY_SETTINGS: - return "OSDオーバーレイ"; - case MENU_ENUM_LABEL_VALUE_PAL60_ENABLE: - return "PAL60モードを使用"; - case MENU_ENUM_LABEL_VALUE_PARENT_DIRECTORY: - return "親ディレクトリー"; - case MENU_ENUM_LABEL_VALUE_PAUSE_LIBRETRO: - return "メニューが表示時に一時停止"; - case MENU_ENUM_LABEL_VALUE_PAUSE_NONACTIVE: - return "バックグラウンドで実行しない"; - case MENU_ENUM_LABEL_VALUE_PERFCNT_ENABLE: - return "パフォーマンスカウンター"; - case MENU_ENUM_LABEL_VALUE_PLAYLISTS_TAB: - return "プレイリスト"; - case MENU_ENUM_LABEL_VALUE_PLAYLIST_DIRECTORY: - return "プレイリストのディレクトリー"; - case MENU_ENUM_LABEL_VALUE_PLAYLIST_SETTINGS: - return "プレイリスト"; - case MENU_ENUM_LABEL_VALUE_POINTER_ENABLE: - return "タッチ対応"; - case MENU_ENUM_LABEL_VALUE_PORT: - return "ポート"; - case MENU_ENUM_LABEL_VALUE_PRESENT: - return "現在"; - case MENU_ENUM_LABEL_VALUE_PRIVACY_SETTINGS: - return "プライバシー"; - case MENU_ENUM_LABEL_VALUE_QUIT_RETROARCH: - return "終了"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ANALOG: - return "アナログ対応"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_BBFC_RATING: - return "BBFC評価"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_CERO_RATING: - return "CERO評価"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_COOP: - return "Co-op supported"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_CRC32: - return "CRC32"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_DESCRIPTION: - return "記述"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_DEVELOPER: - return "開発者"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_EDGE_MAGAZINE_ISSUE: - return "Edge雑誌の発行"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_EDGE_MAGAZINE_RATING: - return "Edge雑誌の評価"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_EDGE_MAGAZINE_REVIEW: - return "Edge雑誌のレビュー"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ELSPA_RATING: - return "ELSPA評価"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ENHANCEMENT_HW: - return "Enhancement Hardware"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ESRB_RATING: - return "ESRB評価"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_FAMITSU_MAGAZINE_RATING: - return "ファミ通の評価"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_FRANCHISE: - return "フランチャイズ"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_GENRE: - return "ジャンル"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_MD5: - return "MD5"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_NAME: - return "名前"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ORIGIN: - return "元"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_PEGI_RATING: - return "PEGI評価"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_PUBLISHER: - return "出版社"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_RELEASE_MONTH: - return "発売月"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_RELEASE_YEAR: - return "発売年"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_RUMBLE: - return "振動の対応"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_SERIAL: - return "シリアル"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_SHA1: - return "SHA1"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_START_CONTENT: - return "コンテンツをスタート"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_TGDB_RATING: - return "TGDB評価"; - case MENU_ENUM_LABEL_VALUE_REBOOT: - return "再起動"; - case MENU_ENUM_LABEL_VALUE_RECORDING_CONFIG_DIRECTORY: - return "録画設定のディレクトリー"; - case MENU_ENUM_LABEL_VALUE_RECORDING_OUTPUT_DIRECTORY: - return "録画の出力ディレクトリー"; - case MENU_ENUM_LABEL_VALUE_RECORDING_SETTINGS: - return "録画"; - case MENU_ENUM_LABEL_VALUE_RECORD_CONFIG: - return "録画設定ファイル"; - case MENU_ENUM_LABEL_VALUE_RECORD_DRIVER: - return "録画のドライバ"; - case MENU_ENUM_LABEL_VALUE_RECORD_ENABLE: - return "録画を有効"; - case MENU_ENUM_LABEL_VALUE_RECORD_PATH: - return "出力ファイル"; - case MENU_ENUM_LABEL_VALUE_RECORD_USE_OUTPUT_DIRECTORY: - return "出力ディレクトリーを使用"; - case MENU_ENUM_LABEL_VALUE_REMAP_FILE: - return "リマップファイル"; - case MENU_ENUM_LABEL_VALUE_REMAP_FILE_LOAD: - return "リマップファイルをロード"; - case MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_CORE: - return "コアリマップファイルを保存"; - case MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_GAME: - return "ゲームリマップファイルを保存"; - case MENU_ENUM_LABEL_VALUE_REQUIRED: - return "必要"; - case MENU_ENUM_LABEL_VALUE_RESTART_CONTENT: - return "コンテンツを再起動"; - case MENU_ENUM_LABEL_VALUE_RESTART_RETROARCH: - return "RetroArchを再起動"; - case MENU_ENUM_LABEL_VALUE_RESUME: - return "再開"; - case MENU_ENUM_LABEL_VALUE_RESUME_CONTENT: - return "再開"; - case MENU_ENUM_LABEL_VALUE_RETROKEYBOARD: - return "RetroKeyboard"; - case MENU_ENUM_LABEL_VALUE_RETROPAD: - return "レトロパッド"; - case MENU_ENUM_LABEL_VALUE_RETRO_ACHIEVEMENTS_SETTINGS: - return "Retro Achievements"; - case MENU_ENUM_LABEL_VALUE_REWIND_ENABLE: - return "巻き戻しを有効"; - case MENU_ENUM_LABEL_VALUE_REWIND_GRANULARITY: - return "巻き戻しの粒状度"; - case MENU_ENUM_LABEL_VALUE_REWIND_SETTINGS: - return "巻き戻し"; - case MENU_ENUM_LABEL_VALUE_RGUI_BROWSER_DIRECTORY: - return "ファイルブラウザーのディレクトリー"; - case MENU_ENUM_LABEL_VALUE_RGUI_CONFIG_DIRECTORY: - return "設定のディレクトリー"; - case MENU_ENUM_LABEL_VALUE_RGUI_SHOW_START_SCREEN: - return "スタート画面を表示"; - case MENU_ENUM_LABEL_VALUE_RIGHT_ANALOG: - return "右のアナログ"; - case MENU_ENUM_LABEL_VALUE_RUN: - return "実行"; - case MENU_ENUM_LABEL_VALUE_SAMBA_ENABLE: - return "SAMBAを有効"; - case MENU_ENUM_LABEL_VALUE_SAVEFILE_DIRECTORY: - return "セーブファイルのディレクトリー"; - case MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_INDEX: - return "保存状態の自動インデックス"; - case MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_LOAD: - return "自動的に保存状態をロード"; - case MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_SAVE: - return "自動的に状態を保存"; - case MENU_ENUM_LABEL_VALUE_SAVESTATE_DIRECTORY: - return "保存状態のディレクトリー"; - case MENU_ENUM_LABEL_VALUE_SAVE_CURRENT_CONFIG: - return "現在の設定を保存"; - case MENU_ENUM_LABEL_VALUE_SAVE_CURRENT_CONFIG_OVERRIDE_CORE: - return "コアの優先を保存"; - case MENU_ENUM_LABEL_VALUE_SAVE_CURRENT_CONFIG_OVERRIDE_GAME: - return "ゲームの優先を保存"; - case MENU_ENUM_LABEL_VALUE_SAVE_NEW_CONFIG: - return "新しい設定を保存"; - case MENU_ENUM_LABEL_VALUE_SAVE_STATE: - return "状態保存"; - case MENU_ENUM_LABEL_VALUE_SAVING_SETTINGS: - return "保存"; - case MENU_ENUM_LABEL_VALUE_SCAN_DIRECTORY: - return "フォルダをスキャン"; - case MENU_ENUM_LABEL_VALUE_SCAN_FILE: - return "ファイルをスキャン"; - case MENU_ENUM_LABEL_VALUE_SCAN_THIS_DIRECTORY: - return "<このフォルダをスキャン>"; - case MENU_ENUM_LABEL_VALUE_SCREENSHOT_DIRECTORY: - return "スクリーンショットのディレクトリー"; - case MENU_ENUM_LABEL_VALUE_SCREEN_RESOLUTION: - return "スクリーン解像度"; - case MENU_ENUM_LABEL_VALUE_SEARCH: - return "検索:"; - case MENU_ENUM_LABEL_VALUE_SECONDS: - return "秒"; - case MENU_ENUM_LABEL_VALUE_SETTINGS: - return "設定"; - case MENU_ENUM_LABEL_VALUE_SETTINGS_TAB: - return "設定"; - case MENU_ENUM_LABEL_VALUE_SHADER: - return "シェーダー"; - case MENU_ENUM_LABEL_VALUE_SHADER_APPLY_CHANGES: - return "シェーダーの変更点を適用"; - case MENU_ENUM_LABEL_VALUE_SHADER_OPTIONS: - return "シェーダー"; - case MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_RIBBON: - return "リボン"; - case MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_RIBBON_SIMPLIFIED: - return "リボン (単純)"; - case MENU_ENUM_LABEL_VALUE_SHOW_ADVANCED_SETTINGS: - return "詳細設定を表示"; - case MENU_ENUM_LABEL_VALUE_SHOW_HIDDEN_FILES: - return "隠しファイルとフォルダを表示"; - case MENU_ENUM_LABEL_VALUE_SHUTDOWN: - return "シャットダウン"; - case MENU_ENUM_LABEL_VALUE_SLOWMOTION_RATIO: - return "スローモーション比"; - case MENU_ENUM_LABEL_VALUE_SORT_SAVEFILES_ENABLE: - return "フォルダでセーブを並び替え"; - case MENU_ENUM_LABEL_VALUE_SORT_SAVESTATES_ENABLE: - return "フォルダで保存状態を並び替え"; - case MENU_ENUM_LABEL_VALUE_SSH_ENABLE: - return "SSHを有効"; - case MENU_ENUM_LABEL_VALUE_START_CORE: - return "コアをスタート"; - case MENU_ENUM_LABEL_VALUE_START_NET_RETROPAD: - return "リモートレトロパッドをスタート"; - case MENU_ENUM_LABEL_VALUE_START_VIDEO_PROCESSOR: - return "ビデオプロセッサをスタート"; - case MENU_ENUM_LABEL_VALUE_STATE_SLOT: - return "保存状態のスロット"; - case MENU_ENUM_LABEL_VALUE_STATUS: - return "ステータス"; - case MENU_ENUM_LABEL_VALUE_STDIN_CMD_ENABLE: - return "stdinコマンド"; - case MENU_ENUM_LABEL_VALUE_SUPPORTED_CORES: - return "対応するコア"; - case MENU_ENUM_LABEL_VALUE_SUSPEND_SCREENSAVER_ENABLE: - return "スクリーンセーバーをサスペンド"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_BGM_ENABLE: - return "System BGM Enable"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_DIRECTORY: - return "システム/BIOSのディレクトリー"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFORMATION: - return "システム情報"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_7ZIP_SUPPORT: - return "7zip対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_ALSA_SUPPORT: - return "ALSA対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_BUILD_DATE: - return "ビルド日付"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_CG_SUPPORT: - return "Cg対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_COCOA_SUPPORT: - return "Cocoa対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_COMMAND_IFACE_SUPPORT: - return "コマンドインターフェース対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_CORETEXT_SUPPORT: - return "CoreText対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_CPU_FEATURES: - return "CPU機能"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_DPI: - return "ディスプレイの軽量DPI"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_MM_HEIGHT: - return "ディスプレイの軽量縦幅 (mm)"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_MM_WIDTH: - return "ディスプレイの軽量横幅 (mm)"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DSOUND_SUPPORT: - return "DirectSound対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DYLIB_SUPPORT: - return "ダイナミックライブラリー対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DYNAMIC_SUPPORT: - return "ダイナミックlibretroライブラリーのランタイム時にロード対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_EGL_SUPPORT: - return "EGL対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FBO_SUPPORT: - return "OpenGL/Direct3Dテクスチャーにレンダリング (マルチパスシェーダー)対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FFMPEG_SUPPORT: - return "FFmpeg対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FREETYPE_SUPPORT: - return "FreeType対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FRONTEND_IDENTIFIER: - return "フロントエンド識別名"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FRONTEND_NAME: - return "フロントエンド名"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FRONTEND_OS: - return "フロントエンドOS"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_GIT_VERSION: - return "Gitバージョン"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_GLSL_SUPPORT: - return "GLSL対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_HLSL_SUPPORT: - return "HLSL対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_JACK_SUPPORT: - return "JACK対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_KMS_SUPPORT: - return "KMS/EGL対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBRETRODB_SUPPORT: - return "LibretroDB対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT: - return "Libusb対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBXML2_SUPPORT: - return "libxml2 XMLパース対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_NETPLAY_SUPPORT: - return "ネットプレイ(ピアツーピア)対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_NETWORK_COMMAND_IFACE_SUPPORT: - return "ネットワークコマンドインターフェース対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_NETWORK_REMOTE_SUPPORT: - return "ネットワークゲームパッド対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENAL_SUPPORT: - return "OpenAL対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENGLES_SUPPORT: - return "OpenGL ES対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENGL_SUPPORT: - return "OpenGL対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENSL_SUPPORT: - return "OpenSL対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENVG_SUPPORT: - return "OpenVG対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OSS_SUPPORT: - return "OSS対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OVERLAY_SUPPORT: - return "オーバーレイ対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE: - return "パワーソース"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_CHARGED: - return "充電完了"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_CHARGING: - return "充電中"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_DISCHARGING: - return "放電"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_NO_SOURCE: - return "ソースはありません"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PULSEAUDIO_SUPPORT: - return "PulseAudio対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PYTHON_SUPPORT: - return "Python(シェーダーにスクリプト)対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RBMP_SUPPORT: - return "BMP対応 (RBMP)"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RETRORATING_LEVEL: - return "RetroRating level"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RJPEG_SUPPORT: - return "JPEG対応 (RJPEG)"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_ROARAUDIO_SUPPORT: - return "RoarAudio対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RPNG_SUPPORT: - return "PNG対応 (RPNG)"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RSOUND_SUPPORT: - return "RSound対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RTGA_SUPPORT: - return "TGA対応 (RTGA)"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL2_SUPPORT: - return "SDL2対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL_IMAGE_SUPPORT: - return "SDLイメージ対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL_SUPPORT: - return "SDL1.2対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SLANG_SUPPORT: - return "Slang対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_THREADING_SUPPORT: - return "スレッド対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_UDEV_SUPPORT: - return "Udev対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_V4L2_SUPPORT: - return "Video4Linux2対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_VIDEO_CONTEXT_DRIVER: - return "ビデオのコンテクストドライバ"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_VULKAN_SUPPORT: - return "Vulkan対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_WAYLAND_SUPPORT: - return "Wayland対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_X11_SUPPORT: - return "X11対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_XAUDIO2_SUPPORT: - return "XAudio2対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_XVIDEO_SUPPORT: - return "XVideo対応"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_ZLIB_SUPPORT: - return "Zlib対応"; - case MENU_ENUM_LABEL_VALUE_TAKE_SCREENSHOT: - return "スクリーンショットを撮る"; - case MENU_ENUM_LABEL_VALUE_THREADED_DATA_RUNLOOP_ENABLE: - return "データループをスレッド化"; - case MENU_ENUM_LABEL_VALUE_THUMBNAILS: - return "サムネイル"; - case MENU_ENUM_LABEL_VALUE_THUMBNAILS_DIRECTORY: - return "サムネイルのディレクトリー"; - case MENU_ENUM_LABEL_VALUE_THUMBNAILS_UPDATER_LIST: - return "サムネイルのアップデーター"; - case MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_BOXARTS: - return "Boxarts"; - case MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_SCREENSHOTS: - return "スクリーンショット"; - case MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_TITLE_SCREENS: - return "Title Screens"; - case MENU_ENUM_LABEL_VALUE_TIMEDATE_ENABLE: - return "日付と時刻を表示"; - case MENU_ENUM_LABEL_VALUE_TITLE_COLOR: - return "メニューのタイトル色"; - case MENU_ENUM_LABEL_VALUE_TRUE: - return "真"; - case MENU_ENUM_LABEL_VALUE_UI_COMPANION_ENABLE: - return "UI Companion Enable"; - case MENU_ENUM_LABEL_VALUE_UI_COMPANION_START_ON_BOOT: - return "UI Companion Start On Boot"; - case MENU_ENUM_LABEL_VALUE_UI_MENUBAR_ENABLE: - return "メニューバー"; - case MENU_ENUM_LABEL_VALUE_UNABLE_TO_READ_COMPRESSED_FILE: - return "圧縮ファイルの読み込みは失敗しました。"; - case MENU_ENUM_LABEL_VALUE_UNDO_LOAD_STATE: - return "保存状態のロードを前に戻す"; - case MENU_ENUM_LABEL_VALUE_UNDO_SAVE_STATE: - return "状態の保存を前に戻す"; - case MENU_ENUM_LABEL_VALUE_UNKNOWN: - return "不明"; - case MENU_ENUM_LABEL_VALUE_UPDATER_SETTINGS: - return "アップデーター"; - case MENU_ENUM_LABEL_VALUE_UPDATE_ASSETS: - return "資産をアップデート"; - case MENU_ENUM_LABEL_VALUE_UPDATE_AUTOCONFIG_PROFILES: - return "自動コンフィグプロファイルをアップデート"; - case MENU_ENUM_LABEL_VALUE_UPDATE_CG_SHADERS: - return "Cgシェーダーをアップデート"; - case MENU_ENUM_LABEL_VALUE_UPDATE_CHEATS: - return "チーとをアップデート"; - case MENU_ENUM_LABEL_VALUE_UPDATE_CORE_INFO_FILES: - return "コアの情報ファイルをアップデート"; - case MENU_ENUM_LABEL_VALUE_UPDATE_DATABASES: - return "データベースをアップデート"; - case MENU_ENUM_LABEL_VALUE_UPDATE_GLSL_SHADERS: - return "GLSLシェーダーをアップデート"; - case MENU_ENUM_LABEL_VALUE_UPDATE_LAKKA: - return "Lakkaをアップデート"; - case MENU_ENUM_LABEL_VALUE_UPDATE_OVERLAYS: - return "オーバーレイをアップデート"; - case MENU_ENUM_LABEL_VALUE_UPDATE_SLANG_SHADERS: - return "Slangシェーダーをアップデート"; - case MENU_ENUM_LABEL_VALUE_USER: - return "ユーザー"; - case MENU_ENUM_LABEL_VALUE_USER_INTERFACE_SETTINGS: - return "ユーザーインターフェース"; - case MENU_ENUM_LABEL_VALUE_USER_LANGUAGE: - return "言語"; - case MENU_ENUM_LABEL_VALUE_USER_SETTINGS: - return "ユーザー"; - case MENU_ENUM_LABEL_VALUE_USE_BUILTIN_IMAGE_VIEWER: - return "Use Builtin Image Viewer"; - case MENU_ENUM_LABEL_VALUE_USE_BUILTIN_PLAYER: - return "Use Builtin Media Player"; - case MENU_ENUM_LABEL_VALUE_USE_THIS_DIRECTORY: - return "<このフォルダを使用>"; - case MENU_ENUM_LABEL_VALUE_VIDEO_ALLOW_ROTATE: - return "回転を許す"; - case MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_AUTO: - return "自動アスペクト比"; - case MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_INDEX: - return "アスペクト比のインデックス"; - case MENU_ENUM_LABEL_VALUE_VIDEO_BLACK_FRAME_INSERTION: - return "黒いフレームを挿入"; - case MENU_ENUM_LABEL_VALUE_VIDEO_CROP_OVERSCAN: - return "オーバースキャンをクロップ (再起動が必要)"; - case MENU_ENUM_LABEL_VALUE_VIDEO_DISABLE_COMPOSITION: - return "デスクトップのコンポジットを無効"; - case MENU_ENUM_LABEL_VALUE_VIDEO_DRIVER: - return "ビデオのドライバ"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FILTER: - return "ビデオのフィルター"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FILTER_DIR: - return "ビデオフィルターのディレクトリー"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FILTER_FLICKER: - return "Flicker filter"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FONT_ENABLE: - return "OSDメッセージを表示"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FONT_PATH: - return "OSDメッセージのフォント"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FONT_SIZE: - return "OSDメッセージのサイズ"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FORCE_ASPECT: - return "アスペクト比を強制"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FORCE_SRGB_DISABLE: - return "sRGB FBOを強制無効"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FRAME_DELAY: - return "フレームの遅れ"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FULLSCREEN: - return "フルスクリーンモード"; - case MENU_ENUM_LABEL_VALUE_VIDEO_GAMMA: - return "ビデオのガンマ"; - case MENU_ENUM_LABEL_VALUE_VIDEO_GPU_RECORD: - return "GPUの録画を有効"; - case MENU_ENUM_LABEL_VALUE_VIDEO_GPU_SCREENSHOT: - return "GPUスクリーンショットを有効"; - case MENU_ENUM_LABEL_VALUE_VIDEO_HARD_SYNC: - return "強制GPU同期"; - case MENU_ENUM_LABEL_VALUE_VIDEO_HARD_SYNC_FRAMES: - return "強制GPU同期フレーム"; - case MENU_ENUM_LABEL_VALUE_VIDEO_MAX_SWAPCHAIN_IMAGES: - return "最高のスワップチェーンイメージ"; - case MENU_ENUM_LABEL_VALUE_VIDEO_MESSAGE_POS_X: - return "OSDメッセージのX位置"; - case MENU_ENUM_LABEL_VALUE_VIDEO_MESSAGE_POS_Y: - return "OSDメッセージのY位置"; - case MENU_ENUM_LABEL_VALUE_VIDEO_MONITOR_INDEX: - return "モニタのインデックス"; - case MENU_ENUM_LABEL_VALUE_VIDEO_POST_FILTER_RECORD: - return "事後フィルターの録画を有効"; - case MENU_ENUM_LABEL_VALUE_VIDEO_REFRESH_RATE: - return "リフレッシュレート"; - case MENU_ENUM_LABEL_VALUE_VIDEO_REFRESH_RATE_AUTO: - return "モニタの予想フレームレート"; - case MENU_ENUM_LABEL_VALUE_VIDEO_ROTATION: - return "回転"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SCALE: - return "ウィンドウのスケール"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SCALE_INTEGER: - return "整数スケール"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SETTINGS: - return "ビデオ"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_DIR: - return "ビデオシェーダーのディレクトリー"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_NUM_PASSES: - return "シェーダーのパス数"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PARAMETERS: - return "シェーダーのパラメータをプレビュー"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET: - return "シェーダーのプリセットをロード"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_PARAMETERS: - return "メニューのシェーダーパラメータ"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_AS: - return "シェーダーのプリセットを名前を付けて保存"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_CORE: - return "コアのプリセットを保存"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_GAME: - return "ゲームのプリセットを保存"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SHARED_CONTEXT: - return "ハードウェアの共有コンテキストを有効"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SMOOTH: - return "ハードウェアのバイリニアフィルター"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SOFT_FILTER: - return "Soft Filter Enable"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SWAP_INTERVAL: - return "VSYNCのスワップ期間"; - case MENU_ENUM_LABEL_VALUE_VIDEO_TAB: - return "ビデオ"; - case MENU_ENUM_LABEL_VALUE_VIDEO_THREADED: - return "スレッドされているビデオ"; - case MENU_ENUM_LABEL_VALUE_VIDEO_VFILTER: - return "Deflicker"; - case MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_HEIGHT: - return "カスタムのビューポートの縦幅"; - case MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_WIDTH: - return "カスタムのビューポートの横幅"; - case MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_X: - return "カスタムのビューポートのX"; - case MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_Y: - return "カスタムのビューポートのY"; - case MENU_ENUM_LABEL_VALUE_VIDEO_VI_WIDTH: - return "Set VI Screen Width"; - case MENU_ENUM_LABEL_VALUE_VIDEO_VSYNC: - return "VSYNC"; - case MENU_ENUM_LABEL_VALUE_VIDEO_WINDOWED_FULLSCREEN: - return "ウィンドウのフルスクリーンモード"; - case MENU_ENUM_LABEL_VALUE_WIFI_DRIVER: - return "Wi-Fiのドライバ"; - case MENU_ENUM_LABEL_VALUE_WIFI_SETTINGS: - return "Wi-Fi"; - case MENU_ENUM_LABEL_VALUE_XMB_ALPHA_FACTOR: - return "メニューの透明性"; - case MENU_ENUM_LABEL_VALUE_XMB_FONT: - return "メニューのフォント"; - case MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_CUSTOM: - return "カスタム"; - case MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_FLATUI: - return "フラットUI"; - case MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_MONOCHROME: - return "モノクローム"; - case MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_MONOCHROME_JAGGED: - return "モノクロームぎざぎざ"; - case MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_NEOACTIVE: - return "ネオアクティブ"; - case MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_PIXEL: - return "ピクセル"; - case MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_RETROACTIVE: - return "レトロアクティブ"; - case MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME: - return "メニューの色テーマ"; - case MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_APPLE_GREEN: - return "りんご緑"; - case MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_DARK: - return "ダーク"; - case MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_DARK_PURPLE: - return "ぶどう色"; - case MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_ELECTRIC_BLUE: - return "電子ブルー"; - case MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_GOLDEN: - return "ゴールデン"; - case MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_LEGACY_RED: - return "レガシーレッド"; - case MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_MIDNIGHT_BLUE: - return "ミッドナイトブルー"; - case MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_PLAIN: - return "プレーン"; - case MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_UNDERSEA: - return "海底"; - case MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_VOLCANIC_RED: - return "火山レッド"; - case MENU_ENUM_LABEL_VALUE_XMB_RIBBON_ENABLE: - return "メニューのシェーダーパイプライン"; - case MENU_ENUM_LABEL_VALUE_XMB_SCALE_FACTOR: - return "メニューの倍率"; - case MENU_ENUM_LABEL_VALUE_XMB_SHADOWS_ENABLE: - return "アイコンの影を有効"; - case MENU_ENUM_LABEL_VALUE_XMB_SHOW_HISTORY: - return "履歴タブを表示"; - case MENU_ENUM_LABEL_VALUE_XMB_SHOW_IMAGES: - return "画像タブを表示"; - case MENU_ENUM_LABEL_VALUE_XMB_SHOW_MUSIC: - return "音楽タブを表示"; - case MENU_ENUM_LABEL_VALUE_XMB_SHOW_SETTINGS: - return "設定タブを表示"; - case MENU_ENUM_LABEL_VALUE_XMB_SHOW_VIDEO: - return "ビデオタブを表示"; - case MENU_ENUM_LABEL_VALUE_XMB_THEME: - return "メニューのアイコンテーマ"; - case MENU_ENUM_LABEL_VALUE_YES: - return "はい"; - case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_TWO: - return "シェーダーのプリセット"; - case MENU_ENUM_SUBLABEL_ADD_CONTENT_LIST: - return "コンテンツをスキャンしてデータベースに入れる。"; - case MENU_ENUM_SUBLABEL_AUDIO_SETTINGS: - return "オーディオ出力の設定を変更する。"; - case MENU_ENUM_SUBLABEL_BLUETOOTH_ENABLE: - return "Bluetoothを有効する。"; - case MENU_ENUM_SUBLABEL_CONFIG_SAVE_ON_EXIT: - return "終了時に設定を自動的に保存する。"; - case MENU_ENUM_SUBLABEL_CPU_CORES: - return "CPUのコア数"; - case MENU_ENUM_SUBLABEL_FPS_SHOW: - return "画面で現在のフレームレートを表示する。"; - case MENU_ENUM_SUBLABEL_INPUT_HOTKEY_BINDS: - return "ホットキー設定を変更する。"; - case MENU_ENUM_SUBLABEL_INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO: - return "メニューに切り替えるゲームパッドのボタンコンボ"; - case MENU_ENUM_SUBLABEL_INPUT_SETTINGS: - return "ゲームパッド、キーボード、マウスの設定を変更する。"; - case MENU_ENUM_SUBLABEL_INPUT_USER_BINDS: - return "このユーザーの入力設定を変更する。"; - case MENU_ENUM_SUBLABEL_LOG_VERBOSITY: - return "端末にログすることを有効と無効。"; - case MENU_ENUM_SUBLABEL_NETPLAY: - return "ネットプレイのセッションを参加やホストする。"; - case MENU_ENUM_SUBLABEL_ONLINE_UPDATER: - return "RetroArchにアドオン、コンポーネント、コンテンツをダウンロードする。"; - case MENU_ENUM_SUBLABEL_SAMBA_ENABLE: - return "フォルダのネットワーク共有を有効する。"; - case MENU_ENUM_SUBLABEL_SERVICES_SETTINGS: - return "OS関係のサービスを管理する。"; - case MENU_ENUM_SUBLABEL_SHOW_HIDDEN_FILES: - return "ファイルブラウザーの中に隠しファイルとフォルダを表示する。"; - case MENU_ENUM_SUBLABEL_SSH_ENABLE: - return "SSHでのアクセスを有効する。"; - case MENU_ENUM_SUBLABEL_SUSPEND_SCREENSAVER_ENABLE: - return "システムのスクリーンセーバーをアクティブになることを予防する。"; - case MENU_ENUM_SUBLABEL_USER_LANGUAGE: - return "インタフェースの言語を変更する。"; - case MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION: - return "フレームの間で黒フレームを挿入する。60Hzコンテンツを120Hzモニターでやることを役に立つ。"; - case MENU_ENUM_SUBLABEL_VIDEO_FRAME_DELAY: - return "遅延が減るけどビデオ途切れの危険率が増す。"; - case MENU_ENUM_SUBLABEL_VIDEO_HARD_SYNC_FRAMES: - return "CPUが「強制GPU同期」を使用時にGPUからの最高のフレーム前進を選択する。"; - case MENU_ENUM_SUBLABEL_VIDEO_MAX_SWAPCHAIN_IMAGES: - return "指定するバッファーモードをビデオドライバに伝える。"; - case MENU_ENUM_SUBLABEL_VIDEO_MONITOR_INDEX: - return "希望するモニターを選択する。"; - case MENU_ENUM_SUBLABEL_VIDEO_REFRESH_RATE_AUTO: - return "モニターの正確な推定のモニターリフレッシュレート"; - case MENU_ENUM_SUBLABEL_VIDEO_SETTINGS: - return "ビデオ出力の設定を変える。"; - case MENU_ENUM_SUBLABEL_WIFI_SETTINGS: - return "無線ネットワークを検索して接続する。"; - case MSG_APPENDED_DISK: - return "Appended disk"; - case MSG_APPLICATION_DIR: - return "アプリフォルダ"; - case MSG_APPLYING_CHEAT: - return "Applying cheat changes."; - case MSG_APPLYING_SHADER: - return "Applying shader"; - case MSG_AUDIO_MUTED: - return "Audio muted."; - case MSG_AUDIO_UNMUTED: - return "Audio unmuted."; - case MSG_AUTOCONFIG_FILE_ERROR_SAVING: - return "Error saving autoconf file."; - case MSG_AUTOCONFIG_FILE_SAVED_SUCCESSFULLY: - return "Autoconfig file saved successfully."; - case MSG_AUTOSAVE_FAILED: - return "Could not initialize autosave."; - case MSG_AUTO_SAVE_STATE_TO: - return "Auto save state to"; - case MSG_BLOCKING_SRAM_OVERWRITE: - return "Blocking SRAM Overwrite"; - case MSG_BRINGING_UP_COMMAND_INTERFACE_ON_PORT: - return "Bringing up command interface on port"; - case MSG_BYTES: - return "バイト"; - case MSG_CANNOT_INFER_NEW_CONFIG_PATH: - return "Cannot infer new config path. Use current time."; - case MSG_CAPABILITIES: - return "対応された機能"; - case MSG_CHEEVOS_HARDCORE_MODE_ENABLE: - return "Hardcore Mode Enabled: savestate & rewind were disabled."; - case MSG_COMPARING_WITH_KNOWN_MAGIC_NUMBERS: - return "Comparing with known magic numbers..."; - case MSG_COMPILED_AGAINST_API: - return "Compiled against API"; - case MSG_COMPILER: - return "コンパイラ"; - case MSG_CONFIG_DIRECTORY_NOT_SET: - return "Config directory not set. Cannot save new config."; - case MSG_CONNECTED_TO: - return "Connected to"; - case MSG_CONTENT_CRC32S_DIFFER: - return "Content CRC32s differ. Cannot use different games."; - case MSG_CONTENT_LOADING_SKIPPED_IMPLEMENTATION_WILL_DO_IT: - return "Content loading skipped. Implementation will load it on its own."; - case MSG_CORE_DOES_NOT_SUPPORT_SAVESTATES: - return "Core does not support save states."; - case MSG_CORE_OPTIONS_FILE_CREATED_SUCCESSFULLY: - return "Core options file created successfully."; - case MSG_COULD_NOT_FIND_ANY_NEXT_DRIVER: - return "Could not find any next driver"; - case MSG_COULD_NOT_FIND_COMPATIBLE_SYSTEM: - return "Could not find compatible system."; - case MSG_COULD_NOT_FIND_VALID_DATA_TRACK: - return "Could not find valid data track"; - case MSG_COULD_NOT_OPEN_DATA_TRACK: - return "could not open data track"; - case MSG_COULD_NOT_READ_CONTENT_FILE: - return "Could not read content file"; - case MSG_COULD_NOT_READ_MOVIE_HEADER: - return "Could not read movie header."; - case MSG_COULD_NOT_READ_STATE_FROM_MOVIE: - return "Could not read state from movie."; - case MSG_CRC32_CHECKSUM_MISMATCH: - return "CRC32 checksum mismatch between content file and saved content checksum in replay file header; replay highly likely to desync on playback."; - case MSG_CUSTOM_TIMING_GIVEN: - return "Custom timing given"; - case MSG_DECOMPRESSION_ALREADY_IN_PROGRESS: - return "Decompression already in progress."; - case MSG_DECOMPRESSION_FAILED: - return "Decompression failed."; - case MSG_DETECTED_VIEWPORT_OF: - return "Detected viewport of"; - case MSG_DID_NOT_FIND_A_VALID_CONTENT_PATCH: - return "Did not find a valid content patch."; - case MSG_DISCONNECT_DEVICE_FROM_A_VALID_PORT: - return "Disconnect device from a valid port."; - case MSG_DISK_CLOSED: - return "Closed"; - case MSG_DISK_EJECTED: - return "Ejected"; - case MSG_DOWNLOADING: - return "ダウンロード中"; - case MSG_DOWNLOAD_FAILED: - return "ダウンロード失敗"; - case MSG_ERROR: - return "エラー"; - case MSG_ERROR_LIBRETRO_CORE_REQUIRES_CONTENT: - return "Libretro core requires content, but nothing was provided."; - case MSG_ERROR_LIBRETRO_CORE_REQUIRES_SPECIAL_CONTENT: - return "Libretro core requires special content, but none were provided."; - case MSG_ERROR_PARSING_ARGUMENTS: - return "Error parsing arguments."; - case MSG_ERROR_SAVING_CORE_OPTIONS_FILE: - return "Error saving core options file."; - case MSG_ERROR_SAVING_REMAP_FILE: - return "Error saving remap file."; - case MSG_ERROR_SAVING_SHADER_PRESET: - return "Error saving shader preset."; - case MSG_EXTERNAL_APPLICATION_DIR: - return "外部アプリフォルダ"; - case MSG_EXTRACTING: - return "解凍中"; - case MSG_EXTRACTING_FILE: - return "ファイルを解凍中"; - case MSG_FAILED_SAVING_CONFIG_TO: - return "Failed saving config to"; - case MSG_FAILED_TO: - return "Failed to"; - case MSG_FAILED_TO_ACCEPT_INCOMING_SPECTATOR: - return "Failed to accept incoming spectator."; - case MSG_FAILED_TO_ALLOCATE_MEMORY_FOR_PATCHED_CONTENT: - return "Failed to allocate memory for patched content..."; - case MSG_FAILED_TO_APPLY_SHADER: - return "Failed to apply shader."; - case MSG_FAILED_TO_BIND_SOCKET: - return "Failed to bind socket."; - case MSG_FAILED_TO_CREATE_THE_DIRECTORY: - return "Failed to create the directory."; - case MSG_FAILED_TO_EXTRACT_CONTENT_FROM_COMPRESSED_FILE: - return "Failed to extract content from compressed file"; - case MSG_FAILED_TO_GET_NICKNAME_FROM_CLIENT: - return "Failed to get nickname from client."; - case MSG_FAILED_TO_LOAD: - return "ロードに失敗"; - case MSG_FAILED_TO_LOAD_CONTENT: - return "コンテンツをロードに失敗しました。"; - case MSG_FAILED_TO_LOAD_MOVIE_FILE: - return "Failed to load movie file"; - case MSG_FAILED_TO_LOAD_OVERLAY: - return "Failed to load overlay."; - case MSG_FAILED_TO_LOAD_STATE: - return "Failed to load state from"; - case MSG_FAILED_TO_OPEN_LIBRETRO_CORE: - return "Failed to open libretro core"; - case MSG_FAILED_TO_PATCH: - return "パッチに失敗しました"; - case MSG_FAILED_TO_RECEIVE_HEADER_FROM_CLIENT: - return "Failed to receive header from client."; - case MSG_FAILED_TO_RECEIVE_NICKNAME: - return "Failed to receive nickname."; - case MSG_FAILED_TO_RECEIVE_NICKNAME_FROM_HOST: - return "Failed to receive nickname from host."; - case MSG_FAILED_TO_RECEIVE_NICKNAME_SIZE_FROM_HOST: - return "Failed to receive nickname size from host."; - case MSG_FAILED_TO_RECEIVE_SRAM_DATA_FROM_HOST: - return "Failed to receive SRAM data from host."; - case MSG_FAILED_TO_REMOVE_DISK_FROM_TRAY: - return "Failed to remove disk from tray."; - case MSG_FAILED_TO_REMOVE_TEMPORARY_FILE: - return "Failed to remove temporary file"; - case MSG_FAILED_TO_SAVE_SRAM: - return "Failed to save SRAM"; - case MSG_FAILED_TO_SAVE_STATE_TO: - return "Failed to save state to"; - case MSG_FAILED_TO_SEND_NICKNAME: - return "Failed to send nickname."; - case MSG_FAILED_TO_SEND_NICKNAME_SIZE: - return "Failed to send nickname size."; - case MSG_FAILED_TO_SEND_NICKNAME_TO_CLIENT: - return "Failed to send nickname to client."; - case MSG_FAILED_TO_SEND_NICKNAME_TO_HOST: - return "Failed to send nickname to host."; - case MSG_FAILED_TO_SEND_SRAM_DATA_TO_CLIENT: - return "Failed to send SRAM data to client."; - case MSG_FAILED_TO_START_AUDIO_DRIVER: - return "Failed to start audio driver. Will continue without audio."; - case MSG_FAILED_TO_START_MOVIE_RECORD: - return "Failed to start movie record."; - case MSG_FAILED_TO_START_RECORDING: - return "Failed to start recording."; - case MSG_FAILED_TO_TAKE_SCREENSHOT: - return "Failed to take screenshot."; - case MSG_FAILED_TO_UNDO_LOAD_STATE: - return "Failed to undo load state."; - case MSG_FAILED_TO_UNDO_SAVE_STATE: - return "Failed to undo save state."; - case MSG_FAILED_TO_UNMUTE_AUDIO: - return "Failed to unmute audio."; - case MSG_FATAL_ERROR_RECEIVED_IN: - return "Fatal error received in"; - case MSG_FILE_NOT_FOUND: - return "そのようなファイルはありません。"; - case MSG_FOUND_AUTO_SAVESTATE_IN: - return "Found auto savestate in"; - case MSG_FOUND_DISK_LABEL: - return "Found disk label"; - case MSG_FOUND_FIRST_DATA_TRACK_ON_FILE: - return "Found first data track on file"; - case MSG_FOUND_LAST_STATE_SLOT: - return "Found last state slot"; - case MSG_FOUND_SHADER: - return "Found shader"; - case MSG_FRAMES: - return "フレーム"; - case MSG_GAME_SPECIFIC_CORE_OPTIONS_FOUND_AT: - return "Per-Game Options: game-specific core options found at"; - case MSG_GOT_INVALID_DISK_INDEX: - return "Got invalid disk index."; - case MSG_GRAB_MOUSE_STATE: - return "Grab mouse state"; - case MSG_HW_RENDERED_MUST_USE_POSTSHADED_RECORDING: - return "Libretro core is hardware rendered. Must use post-shaded recording as well."; - case MSG_INFLATED_CHECKSUM_DID_NOT_MATCH_CRC32: - return "Inflated checksum did not match CRC32."; - case MSG_INPUT_CHEAT: - return "Input Cheat"; - case MSG_INPUT_CHEAT_FILENAME: - return "Cheat Filename"; - case MSG_INPUT_PRESET_FILENAME: - return "Preset Filename"; - case MSG_INTERFACE: - return "インターフェース"; - case MSG_INTERNAL_MEMORY: - return "内部メモリ"; - case MSG_INVALID_NICKNAME_SIZE: - return "Invalid nickname size."; - case MSG_IN_BYTES: - return "(バイトで)"; - case MSG_IN_GIGABYTES: - return "(ギガバイトで)"; - case MSG_IN_MEGABYTES: - return "(メガバイトで)"; - case MSG_LIBRETRO_ABI_BREAK: - return "is compiled against a different version of libretro than this libretro implementation."; - case MSG_LIBRETRO_FRONTEND: - return "libretroのフロントエンド"; - case MSG_LOADED_STATE_FROM_SLOT: - return "スロット%dから保存状態をロードしました。"; - case MSG_LOADED_STATE_FROM_SLOT_AUTO: - return "スロット-1 (自動)から保存状態をロードしました。"; - case MSG_LOADING: - return "ロード中"; - case MSG_LOADING_CONTENT_FILE: - return "コンテンツをロード中"; - case MSG_LOADING_HISTORY_FILE: - return "Loading history file"; - case MSG_LOADING_STATE: - return "保存状態をロード中"; - case MSG_MEMORY: - return "メモリ"; - case MSG_MOVIE_FILE_IS_NOT_A_VALID_BSV1_FILE: - return "Movie file is not a valid BSV1 file."; - case MSG_MOVIE_FORMAT_DIFFERENT_SERIALIZER_VERSION: - return "Movie format seems to have a different serializer version. Will most likely fail."; - case MSG_MOVIE_PLAYBACK_ENDED: - return "Movie playback ended."; - case MSG_MOVIE_RECORD_STOPPED: - return "Stopping movie record."; - case MSG_NETPLAY_FAILED: - return "Failed to initialize netplay."; - case MSG_NETPLAY_FAILED_MOVIE_PLAYBACK_HAS_STARTED: - return "Movie playback has started. Cannot start netplay."; - case MSG_NO_ARGUMENTS_SUPPLIED_AND_NO_MENU_BUILTIN: - return "No arguments supplied and no menu builtin, displaying help..."; - case MSG_NO_CONTENT_STARTING_DUMMY_CORE: - return "No content, starting dummy core."; - case MSG_NO_SAVE_STATE_HAS_BEEN_OVERWRITTEN_YET: - return "No save state has been overwritten yet."; - case MSG_NO_STATE_HAS_BEEN_LOADED_YET: - return "No state has been loaded yet."; - case MSG_OVERRIDES_ERROR_SAVING: - return "Error saving overrides."; - case MSG_OVERRIDES_SAVED_SUCCESSFULLY: - return "Overrides saved successfully."; - case MSG_PAUSED: - return "Paused."; - case MSG_PROGRAM: - return "RetroArch"; - case MSG_READING_FIRST_DATA_TRACK: - return "Reading first data track..."; - case MSG_RECEIVED: - return "received"; - case MSG_RECORDING_TERMINATED_DUE_TO_RESIZE: - return "Recording terminated due to resize."; - case MSG_RECORDING_TO: - return "Recording to"; - case MSG_REDIRECTING_CHEATFILE_TO: - return "Redirecting cheat file to"; - case MSG_REDIRECTING_SAVEFILE_TO: - return "Redirecting save file to"; - case MSG_REDIRECTING_SAVESTATE_TO: - return "Redirecting savestate to"; - case MSG_REMAP_FILE_SAVED_SUCCESSFULLY: - return "Remap file saved successfully."; - case MSG_REMOVED_DISK_FROM_TRAY: - return "Removed disk from tray."; - case MSG_REMOVING_TEMPORARY_CONTENT_FILE: - return "Removing temporary content file"; - case MSG_RESET: - return "リセット"; - case MSG_RESTARTING_RECORDING_DUE_TO_DRIVER_REINIT: - return "Restarting recording due to driver reinit."; - case MSG_RESTORED_OLD_SAVE_STATE: - return "Restored old save state."; - case MSG_RESTORING_DEFAULT_SHADER_PRESET_TO: - return "Shaders: restoring default shader preset to"; - case MSG_REVERTING_SAVEFILE_DIRECTORY_TO: - return "Reverting savefile directory to"; - case MSG_REVERTING_SAVESTATE_DIRECTORY_TO: - return "Reverting savestate directory to"; - case MSG_REWINDING: - return "巻き戻しています。"; - case MSG_REWIND_INIT: - return "Initializing rewind buffer with size"; - case MSG_REWIND_INIT_FAILED: - return "Failed to initialize rewind buffer. Rewinding will be disabled."; - case MSG_REWIND_INIT_FAILED_THREADED_AUDIO: - return "Implementation uses threaded audio. Cannot use rewind."; - case MSG_REWIND_REACHED_END: - return "Reached end of rewind buffer."; - case MSG_SAVED_NEW_CONFIG_TO: - return "Saved new config to"; - case MSG_SAVED_STATE_TO_SLOT: - return "スロット%dに状態を保存しました。"; - case MSG_SAVED_STATE_TO_SLOT_AUTO: - return "スロット-1 (自動)に状態を保存しました。"; - case MSG_SAVED_SUCCESSFULLY_TO: - return "Saved successfully to"; - case MSG_SAVING_RAM_TYPE: - return "Saving RAM type"; - case MSG_SAVING_STATE: - return "状態を保存中"; - case MSG_SCANNING: - return "スキャン中"; - case MSG_SCANNING_OF_DIRECTORY_FINISHED: - return "ディレクトリーのスキャンは完了しました。"; - case MSG_SENDING_COMMAND: - return "Sending command"; - case MSG_SEVERAL_PATCHES_ARE_EXPLICITLY_DEFINED: - return "Several patches are explicitly defined, ignoring all..."; - case MSG_SHADER: - return "シェーダー"; - case MSG_SHADER_PRESET_SAVED_SUCCESSFULLY: - return "Shader preset saved successfully."; - case MSG_SKIPPING_SRAM_LOAD: - return "Skipping SRAM load."; - case MSG_SLOW_MOTION: - return "スローモーション。"; - case MSG_SLOW_MOTION_REWIND: - return "スローモーション巻き戻し。"; - case MSG_SORRY_UNIMPLEMENTED_CORES_DONT_DEMAND_CONTENT_NETPLAY: - return "Sorry, unimplemented: cores that don't demand content cannot participate in netplay."; - case MSG_SRAM_WILL_NOT_BE_SAVED: - return "SRAM will not be saved."; - case MSG_STARTING_MOVIE_PLAYBACK: - return "Starting movie playback."; - case MSG_STARTING_MOVIE_RECORD_TO: - return "Starting movie record to"; - case MSG_STATE_SIZE: - return "状態のサイズ"; - case MSG_STATE_SLOT: - return "保存状態のスロット"; - case MSG_TAKING_SCREENSHOT: - return "スクリーンショットを撮っています。"; - case MSG_TO: - return "to"; - case MSG_UNDID_LOAD_STATE: - return "保存状態のロードを前に戻した。"; - case MSG_UNDOING_SAVE_STATE: - return "Undoing save state"; - case MSG_UNKNOWN: - return "不明"; - case MSG_UNKNOWN_COMPILER: - return "不明なコンパイラ"; - case MSG_UNPAUSED: - return "Unpaused."; - case MSG_UNRECOGNIZED_COMMAND: - return "Unrecognized command"; - case MSG_USING_CORE_NAME_FOR_NEW_CONFIG: - return "Using core name for new config."; - case MSG_USING_LIBRETRO_DUMMY_CORE_RECORDING_SKIPPED: - return "Using libretro dummy core. Skipping recording."; - case MSG_VALUE_CONNECT_DEVICE_FROM_A_VALID_PORT: - return "Connect device from a valid port."; - case MSG_VALUE_DISCONNECTING_DEVICE_FROM_PORT: - return "Disconnecting device from port"; - case MSG_VALUE_REBOOTING: - return "再起動しています。。。"; - case MSG_VALUE_SHUTTING_DOWN: - return "シャットダウンしています。。。"; - case MSG_VERSION_OF_LIBRETRO_API: - return "Version of libretro API"; - case MSG_VIEWPORT_SIZE_CALCULATION_FAILED: - return "Viewport size calculation failed! Will continue using raw data. This will probably not work right ..."; - case MSG_VIRTUAL_DISK_TRAY: - return "virtual disk tray."; + #include "msg_hash_ja.h" default: #if 0 RARCH_LOG("Unimplemented: [%d]\n", msg); diff --git a/intl/msg_hash_ja.h b/intl/msg_hash_ja.h new file mode 100644 index 0000000000..d1b6bc8aa9 --- /dev/null +++ b/intl/msg_hash_ja.h @@ -0,0 +1,2271 @@ +MSG_HASH( + MSG_COMPILER, + "コンパイラ" + ) +MSG_HASH( + MSG_UNKNOWN_COMPILER, + "不明なコンパイラ" + ) +MSG_HASH( + MSG_DEVICE_DISCONNECTED_FROM_PORT, + "Device disconnected from port" + ) +MSG_HASH( + MSG_UNKNOWN_NETPLAY_COMMAND_RECEIVED, + "Unknown netplay command received" + ) +MSG_HASH( + MSG_FILE_ALREADY_EXISTS_SAVING_TO_BACKUP_BUFFER, + "File already exists. Saving to backup buffer" + ) +MSG_HASH( + MSG_GOT_CONNECTION_FROM, + "「%s」からの接続が確立しますた。" + ) +MSG_HASH( + MSG_GOT_CONNECTION_FROM_NAME, + "「%s (%s)」からの接続が確立しますた。" + ) +MSG_HASH( + MSG_PUBLIC_ADDRESS, + "公式IPアドレス" + ) +MSG_HASH( + MSG_NO_ARGUMENTS_SUPPLIED_AND_NO_MENU_BUILTIN, + "No arguments supplied and no menu builtin, displaying help..." + ) +MSG_HASH( + MSG_NETPLAY_USERS_HAS_FLIPPED, + "Netplay users has flipped" + ) +MSG_HASH( + MSG_SETTING_DISK_IN_TRAY, + "Setting disk in tray" + ) +MSG_HASH( + MSG_WAITING_FOR_CLIENT, + "クライアントに待機中" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_VIDEO_SHARED_CONTEXT, + "Give hardware-rendered cores their own private context. Avoids having to assume hardware state changes inbetween frames." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_MENU_SETTINGS, + "メニューの外観関係の設定を変更する。" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_VIDEO_HARD_SYNC, + "CPUとGPUを強制に同期する。遅延が減るけどパフォーマンスも減る。" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_VIDEO_THREADED, + "パフォーマンスを改良するけど、ビデオの遅延と途切れが増す。フルスピードを取得しない時だけで使用する。" + ) +MSG_HASH( + MSG_AUDIO_VOLUME, + "音量" + ) +MSG_HASH( + MSG_AUTODETECT, + "自動検出" + ) +MSG_HASH( + MSG_AUTOLOADING_SAVESTATE_FROM, + "Auto-loading savestate from" + ) +MSG_HASH( + MSG_CAPABILITIES, + "対応された機能" + ) +MSG_HASH( + MSG_CONNECTING_TO_NETPLAY_HOST, + "Connecting to netplay host" + ) +MSG_HASH( + MSG_CONNECTING_TO_PORT, + "Connecting to port" + ) +MSG_HASH( + MSG_CONNECTION_SLOT, + "Connection slot" + ) +MSG_HASH( + MSG_SORRY_UNIMPLEMENTED_CORES_DONT_DEMAND_CONTENT_NETPLAY, + "Sorry, unimplemented: cores that don't demand content cannot participate in netplay." + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACCOUNTS_CHEEVOS_PASSWORD, + "パスワード" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACCOUNTS_CHEEVOS_SETTINGS, + "Accounts Cheevos" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACCOUNTS_CHEEVOS_USERNAME, + "ユーザー名" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACCOUNTS_LIST, + "アカウント" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACCOUNTS_LIST_END, + "Accounts List Endpoint" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACCOUNTS_RETRO_ACHIEVEMENTS, + "レトロ実績" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_LIST, + "実績表" + ) + +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_LIST_HARDCORE, + "実績表(ハードコア)" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ADD_CONTENT_LIST, + "コンテンツをスキャン" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONFIGURATIONS_LIST, + "設定ファイル" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ADD_TAB, + "コンテンツをインポート" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ARCHIVE_MODE, + "Archive File Association Action" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ASK_ARCHIVE, + "Ask" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ASSETS_DIRECTORY, + "資産" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_BLOCK_FRAMES, + "Block Frames" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_DEVICE, + "オーディオのデバイス" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_DRIVER, + "オーディオのドライバ" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_DSP_PLUGIN, + "オーディオのDSPプラグイン" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_ENABLE, + "オーディオを有効" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_FILTER_DIR, + "オーディオフィルター" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_TURBO_DEADZONE_LIST, + "Turbo/Deadzone" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_LATENCY, + "オーディオの遅延 (ms)" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_MAX_TIMING_SKEW, + "オーディオの最高タイミングスキュー" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_MUTE, + "オーディオの消音" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_OUTPUT_RATE, + "オーディオの出力レート(KHz)" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_RATE_CONTROL_DELTA, + "ダイナミックオーディオレートコントロール" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_RESAMPLER_DRIVER, + "オーディをリサンプルのドライバ" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_SETTINGS, + "オーディオ" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_SYNC, + "オーディオの同期を有効" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_VOLUME, + "オーディオの音量 (dB)" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUTOSAVE_INTERVAL, + "セーブRAMの自動保存期間" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUTO_OVERRIDES_ENABLE, + "オーバーライドファイルを自動的にロード" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUTO_REMAPS_ENABLE, + "リマップファイルを自動的にロード" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUTO_SHADERS_ENABLE, + "Load Shader Presets Automatically" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_BACK, + "戻る" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_CONFIRM, + "確認" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_INFO, + "情報" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_QUIT, + "終了" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_SCROLL_DOWN, + "下にスクロール" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_SCROLL_UP, + "上にスクロール" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_START, + "スタート" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_TOGGLE_KEYBOARD, + "Toggle Keyboard" "キーボードに切り替え" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_TOGGLE_MENU, + "メニューに切り替え" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS, + "Basic menu controls" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_CONFIRM, + "確認/了承" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_INFO, + "情報" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_QUIT, + "終了" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_SCROLL_UP, + "Scroll Up" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_START, + "デフォルト" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_TOGGLE_KEYBOARD, + "キーボードに切り替え" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_TOGGLE_MENU, + "メニューに切り替え" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BLOCK_SRAM_OVERWRITE, + "保存状態をロード時にセーブRAMを置き換えない" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BLUETOOTH_ENABLE, + "Bluetoothを有効" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BUILDBOT_ASSETS_URL, + "Buildbotの資産URL" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CACHE_DIRECTORY, + "キャッシュ" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CAMERA_ALLOW, + "カメラを許す" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CAMERA_DRIVER, + "カメラのドライバ" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT, + "チート"; + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT_APPLY_CHANGES, + "チートの変更点を適用" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT_DATABASE_PATH, + "チートファイル" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT_FILE, + "チートファイル" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT_FILE_LOAD, + "チートファイルをロード" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT_FILE_SAVE_AS, + "チートファイルを名前を付けて保存" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT_NUM_PASSES, + "チートのパス" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_DESCRIPTION, + "説明" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_HARDCORE_MODE_ENABLE, + "ハードコアモード" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_LOCKED_ACHIEVEMENTS, + "解除された実績:" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_LOCKED_ENTRY, + "ロックされている" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_SETTINGS, + "レトロ実績" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_TEST_UNOFFICIAL, + "非公式実績をテスト" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_UNLOCKED_ACHIEVEMENTS, + "解除可能の実績:" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_UNLOCKED_ENTRY, + "解除されている" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CLOSE_CONTENT, + "閉じる" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONFIG, + "コンフィグ" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONFIGURATIONS, + "設定をロード" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONFIGURATION_SETTINGS, + "設定" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONFIG_SAVE_ON_EXIT, + "終了前に設定を自動保存" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONTENT_COLLECTION_LIST, + "コレクション" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONTENT_DATABASE_DIRECTORY, + "コンテンツデータベース" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONTENT_DIR, + "コンテンツ" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONTENT_HISTORY_SIZE, + "履歴リストのサイズ" + ) +MSG_HASH(MENU_ENUM_LABEL_VALUE_CONTENT_SETTINGS, + "クイックメニュー" + ) +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_ASSETS_DIR, + "コアの資産" + ) +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_ASSETS_DIRECTORY, + "ダウンロード" + ) +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_CHEAT_OPTIONS, + "チート" + ) +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_COUNTERS, + "Core Counters" + ) +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_ENABLE, + "コアの名前を表示" + ) +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFORMATION, + "コアの情報" + ) +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_AUTHORS, + "作家" + ) +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_CATEGORIES, + "カテゴリー" + ) +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_LABEL, + "コアのラベル") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_NAME, + "コアの名前") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_FIRMWARE, + "ファームウェア") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_LICENSES, + "ライセンス") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_PERMISSIONS, + "許可") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_SUPPORTED_EXTENSIONS, + "対応する拡張子") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_SYSTEM_MANUFACTURER, + "システムのメーカー") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_SYSTEM_NAME, + "システム名") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INPUT_REMAPPING_OPTIONS, + "コントロール") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_LIST, + "コアをロード") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_OPTIONS, + "オプション") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_SETTINGS, + "コア") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_SET_SUPPORTS_NO_CONTENT_ENABLE, + "自動的にコアをスタート") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_SPECIFIC_CONFIG, + "コア特定の設定") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_UPDATER_AUTO_EXTRACT_ARCHIVE, + "ダウンロードしたアーカイブを自動解凍") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_UPDATER_BUILDBOT_URL, + "BuildbotのコアURL") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_UPDATER_LIST, + "コアのアップデーター") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_UPDATER_SETTINGS, + "アップデーター") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CPU_ARCHITECTURE, + "CPUアーキテクチャ:") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CPU_CORES, + "CPUコア数:") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CURSOR_DIRECTORY, + "カーソル") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CURSOR_MANAGER, + "カーソルマネージャー") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CUSTOM_RATIO, + "カスタム比") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_MANAGER, + "データーベースマネージャー") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_SELECTION, + "Database Selection") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DELETE_ENTRY, + "削除") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DETECT_CORE_LIST, + "ファイルを選択とコア検出") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_CONTENT, + "") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_DEFAULT, + "") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_NONE, + "") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_NOT_FOUND, + "そのようなフォルダはありません。") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_SETTINGS, + "ディレクトリ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DISK_CYCLE_TRAY_STATUS, + "Disk Cycle Tray Status") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DISK_IMAGE_APPEND, + "Disk Image Append") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DISK_INDEX, + "Disk Index") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DISK_OPTIONS, + "ディスク設定") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DONT_CARE, + "Don't care") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DOWNLOADED_FILE_DETECT_CORE_LIST, + "ダウンロード") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DOWNLOAD_CORE, + "コアをダウンロード...") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DOWNLOAD_CORE_CONTENT, + "コンテンツをダウンロード") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DPI_OVERRIDE_ENABLE, + "DPI Override Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DPI_OVERRIDE_VALUE, + "DPI Override") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DRIVER_SETTINGS, + "ドライバ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DUMMY_ON_CORE_SHUTDOWN, + "コアをシャットダウンでダミー") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CHECK_FOR_MISSING_FIRMWARE, + "ロード前に見つからないファームウェアを探す") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPER, + "ダイナミック壁紙") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPERS_DIRECTORY, + "ダイナミック壁紙") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CHEEVOS_ENABLE, + "有効") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ENTRY_HOVER_COLOR, + "Menu entry hover color") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ENTRY_NORMAL_COLOR, + "Menu entry normal color") +MSG_HASH(MENU_ENUM_LABEL_VALUE_FALSE, + "偽") +MSG_HASH(MENU_ENUM_LABEL_VALUE_FASTFORWARD_RATIO, + "早送り比") +MSG_HASH(MENU_ENUM_LABEL_VALUE_FPS_SHOW, + "フレームレートを表示") +MSG_HASH(MENU_ENUM_LABEL_VALUE_FRAME_THROTTLE_ENABLE, + "フレームの減速度") +MSG_HASH(MENU_ENUM_LABEL_VALUE_FRAME_THROTTLE_SETTINGS, + "フレームの減速度") +MSG_HASH(MENU_ENUM_LABEL_VALUE_FRONTEND_COUNTERS, + "Frontend Counters") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_OPTIONS, + "コンテンツ特定のコア設定を自動的にロード") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_OPTIONS_CREATE, + "Create game-options file") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_OPTIONS_IN_USE, + "Game-options file") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP, + "ヘルプ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_AUDIO_VIDEO_TROUBLESHOOTING, + "オーディオとビデオのトラブルシューティング") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_CHANGE_VIRTUAL_GAMEPAD, + "バーチャルゲームパッドオーバーレイを変更すること") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_CONTROLS, + "基本メニューコントロール") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_LIST, + "ヘルプ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_LOADING_CONTENT, + "コンテンツをロードすること") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_SCANNING_CONTENT, + "コンテンツをスキャンすること") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_WHAT_IS_A_CORE, + "コアとは?") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HISTORY_LIST_ENABLE, + "履歴リストを有効") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HISTORY_TAB, + "履歴") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HORIZONTAL_MENU, + "横メニュー") +MSG_HASH(MENU_ENUM_LABEL_VALUE_IMAGES_TAB, + "画像") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INFORMATION, + "情報") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INFORMATION_LIST, + "情報") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ADC_TYPE, + "アナログのデジタル化のタイプ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ALL_USERS_CONTROL_MENU, + "すべてのユーザーがメニューを操作できる") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_X, + "左アナログX") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_X_MINUS, + "左アナログX- (左)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_X_PLUS, + "左アナログX+ (右)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_Y, + "左アナログY") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_Y_MINUS, + "左アナログY- (上)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_Y_PLUS, + "左アナログY+ (下)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_X, + "右アナログX") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_X_MINUS, + "右アナログX- (左)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_X_PLUS, + "右アナログX+ (右)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_Y, + "右アナログY") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_Y_MINUS, + "右アナログY- (上)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_Y_PLUS, + "右アナログY+ (下)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_AUTODETECT_ENABLE, + "自動コンフィグを有効") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_AXIS_THRESHOLD, + "入力軸のしきい値") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_INPUT_SWAP_OK_CANCEL, + "メニューのOKとキャンセルボタンをスワップ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_ALL, + "全てをバインド") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_DEFAULT_ALL, + "全てのバインドを初期化") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_TIMEOUT, + "バインドのタイムアウト") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_HIDE_UNBOUND, + "未定義のコア入力の識別子を隠す") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_LABEL_SHOW, + "入力の識別子ラベルを表示") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DEVICE_INDEX, + "デバイスインデックス") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DEVICE_TYPE, + "デバイスタイプ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DRIVER, + "入力のドライバ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DUTY_CYCLE, + "デューティー比") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_HOTKEY_BINDS, + "入力のホットキーバインド") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ICADE_ENABLE, + "Keyboard Gamepad Mapping Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_A, + "Aボタン(右)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_B, + "Bボタン(下)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_DOWN, + "下 (十字キー)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_L2, + "L2ボタン(トリガー)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_L3, + "L3ボタン(親指)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_L, + "Lボタン(上面)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_LEFT, + "左 (十字キー)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_R2, + "R2ボタン(トリガー)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_R3, + "R3ボタン(親指)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_R, + "Rボタン(上面)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_RIGHT, + "右 (十字キー)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_SELECT, + "選択ボタン") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_START, + "スタートボタン") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_UP, + "上 (十字キー)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_X, + "Xボタン(上面)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_Y, + "Yボタン(左)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_KEY, + "(キー: %s)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_MAX_USERS, + "最高のユーザー数") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO, + "ゲームパッドのメニュー切り替えコンボ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_CHEAT_INDEX_MINUS, + "前のチートインデックス") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_CHEAT_INDEX_PLUS, + "次のチートインデックス") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_CHEAT_TOGGLE, + "チートを切り替") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_DISK_EJECT_TOGGLE, + "ディスクを取り出し") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_DISK_NEXT, + "次のディスクに切り替え") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_DISK_PREV, + "前のディスクに切り替え") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_ENABLE_HOTKEY, + "ホットキーを有効") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_FAST_FORWARD_HOLD_KEY, + "ホールドで早送") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_FAST_FORWARD_KEY, + "早送りに切り替え") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_FRAMEADVANCE, + "コマ送り") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_FULLSCREEN_TOGGLE_KEY, + "フルスクリーンに切り替え") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_GRAB_MOUSE_TOGGLE, + "マウスグラブを切り替え") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_GAME_FOCUS_TOGGLE, + "ゲームのフォーカスを切り替え") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_LOAD_STATE_KEY, + "保存状態をロード") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_MENU_TOGGLE, + "メニューに切り替え") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_MOVIE_RECORD_TOGGLE, + "録画") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_MUTE, + "消音") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_NETPLAY_FLIP, + "ネットプレイのユーザ交換") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_OSK, + "ソフトウェアキーボードを切りがえ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_OVERLAY_NEXT, + "次のオーバーレイ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_PAUSE_TOGGLE, + "一時停止") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_QUIT_KEY, + "RetroArchを終了") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_RESET, + "リセット") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_REWIND, + "巻き戻し") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_SAVE_STATE_KEY, + "状態保存") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_SCREENSHOT, + "スクリーンショット") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_SHADER_NEXT, + "次のシェーダー") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_SHADER_PREV, + "前のシェーダー") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_SLOWMOTION, + "スローモーション") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_STATE_SLOT_MINUS, + "前の状態スロット") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_STATE_SLOT_PLUS, + "次の状態スロット") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_VOLUME_DOWN, + "音量を減る") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_VOLUME_UP, + "音量を増す") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_ENABLE, + "ディスプレイのオーバーレイ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_HIDE_IN_MENU, + "メニューにオーバーレイを隠す") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR, + "ポールタイプの行動") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR_EARLY, + "早い") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR_LATE, + "遅い") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR_NORMAL, + "普通") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_PREFER_FRONT_TOUCH, + "Prefer Front Touch") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_REMAPPING_DIRECTORY, + "入力リマップ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_REMAP_BINDS_ENABLE, + "リマップバインドを有効") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_SAVE_AUTOCONFIG, + "自動設定を保存") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_SETTINGS, + "入力") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_SMALL_KEYBOARD_ENABLE, + "Small Keyboard Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_TOUCH_ENABLE, + "タッチを有効") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_TURBO_ENABLE, + "ターボ有効") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_TURBO_PERIOD, + "ターボの期間") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_USER_BINDS, + "入力ユーザー%uのバインド") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INTERNAL_STORAGE_STATUS, + "Internal storage status") +MSG_HASH(MENU_ENUM_LABEL_VALUE_JOYPAD_AUTOCONFIG_DIR, + "入力デバイスの自動設定") +MSG_HASH(MENU_ENUM_LABEL_VALUE_JOYPAD_DRIVER, + "ジョイパッドのドライバ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LAKKA_SERVICES, + "Lakkaのサービス") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_CHINESE_SIMPLIFIED, + "中国語 (簡体)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_CHINESE_TRADITIONAL, + "中国語 (繁体)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_DUTCH, + "オランダ語") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_ENGLISH, + "英語") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_ESPERANTO, + "エスペラント") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_FRENCH, + "フランス語") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_GERMAN, + "ドイツ語") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_ITALIAN, + "イタリア語") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_JAPANESE, + "日本語") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_KOREAN, + "韓国語") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_POLISH, + "ポーランド語") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_PORTUGUESE, + "ポルトガル語") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_RUSSIAN, + "ロシア語") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_SPANISH, + "スペイン語") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_VIETNAMESE, + "ベトナム語") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LEFT_ANALOG, + "左のアナログ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LIBRETRO_DIR_PATH, + "コア") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LIBRETRO_INFO_PATH, + "コア情報") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LIBRETRO_LOG_LEVEL, + "コアのログ出力レベル") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LINEAR, + "Linear") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_ARCHIVE, + "コアでアーカイブをロード") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_CONTENT, + "ファイル選択") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_HISTORY, + "最近のものをロード") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_LIST, + "コンテンツをロード") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_STATE, + "保存状態をロード") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOCATION_ALLOW, + "ロケーションを許す") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOCATION_DRIVER, + "ロケーションのドライバ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOGGING_SETTINGS, + "ログ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOG_VERBOSITY, + "ログの出力レベル") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MAIN_MENU, + "メインメニュー") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MANAGEMENT, + "データベースの設定") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME, + "メニューの色テーマ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_BLUE, + "青") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_BLUE_GREY, + "ブルーグレイ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_DARK_BLUE, + "ダークブルー") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_GREEN, + "緑") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_NVIDIA_SHIELD, + "シールド") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_RED, + "赤") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_YELLOW, + "黄色") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_FOOTER_OPACITY, + "Footer Opacity") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_HEADER_OPACITY, + "Header Opacity") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_DRIVER, + "メニューのドライバ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_ENUM_THROTTLE_FRAMERATE, + "メニューのフレームレートを減速") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FILE_BROWSER_SETTINGS, + "メニューファイルブラウザー") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_LINEAR_FILTER, + "メニューのリニアフィルター") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_SETTINGS, + "メニュー") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_WALLPAPER, + "メニューの壁紙") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_WALLPAPER_OPACITY, + "壁紙の不透明性") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MISSING, + "欠測") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MORE, + "...") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MOUSE_ENABLE, + "マウス対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MULTIMEDIA_SETTINGS, + "マルチメディア") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MUSIC_TAB, + "音楽") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NAVIGATION_BROWSER_FILTER_SUPPORTED_EXTENSIONS_ENABLE, + "不明な拡張子を隠す") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NAVIGATION_WRAPAROUND, + "ナビゲーションの回り込み") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NEAREST, + "Nearest") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY, + "ネットプレイ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_CHECK_FRAMES, + "ネットプレイのチェックフレーム") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_CLIENT_SWAP_INPUT, + "ネットプレイのP2がC1を使用") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_DELAY_FRAMES, + "ネットプレイの延期フレーム") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_DISCONNECT, + "切断") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE, + "ネットプレイを有効") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE_CLIENT, + "ネットプレイサーバーに接続") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE_HOST, + "ホストする") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_IP_ADDRESS, + "サーバーのIPアドレス") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_LAN_SCAN_SETTINGS, + "ローカルネットワークをスキャン") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_MODE, + "ネットプレイのクライアントを有効") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_NICKNAME, + "ユーザー名") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_SETTINGS, + "ネットプレイ設定") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_SPECTATOR_MODE_ENABLE, + "ネットプレイの観覧者を有効") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_TCP_UDP_PORT, + "ネットプレイのTCP/UDPポート") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_NAT_TRAVERSAL, + "ネットプレイのNAT通過") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_CMD_ENABLE, + "ネットワークコマンドを有効") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_CMD_PORT, + "ネットワークコマンドのポート") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_INFORMATION, + "ネットワーク情報") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_REMOTE_ENABLE, + "ネットワークゲームパッド") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_REMOTE_PORT, + "Network Remote Base Port") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_SETTINGS, + "ネットワーク") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO, + "いいえ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NONE, + "無し") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE, + "該当なし") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_ACHIEVEMENTS_TO_DISPLAY, + "表示する実績はありません。") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_CORE, + "コアはありません") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_CORES_AVAILABLE, + "コアはありません。") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_CORE_INFORMATION_AVAILABLE, + "コア情報はありません。") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_CORE_OPTIONS_AVAILABLE, + "コア設定はありません。") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_ENTRIES_TO_DISPLAY, + "No entries to display.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_HISTORY_AVAILABLE, + "履歴はありません。") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_INFORMATION_AVAILABLE, + "情報はありません。") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_ITEMS, + "アイテムが見つかりません。") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_NETPLAY_HOSTS_FOUND, + "該当するネットプレイホストが見つかりませんでした。") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_NETWORKS_FOUND, + "該当するネットワークが見つかりませんでした。") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_PERFORMANCE_COUNTERS, + "No performance counters.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_PLAYLISTS, + "プレイリストが見つかりません。") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_PLAYLIST_ENTRIES_AVAILABLE, + "プレイリストのエントリーはありません。") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_SETTINGS_FOUND, + "設定が見つかりませんでした。") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_SHADER_PARAMETERS, + "シェーダーのパラメータはありません。") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OFF, + "OFF") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ON, + "ON") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ONLINE, + "オンライン") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ONLINE_UPDATER, + "オンラインアップデーター") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ONSCREEN_DISPLAY_SETTINGS, + "OSDディスプレイ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ONSCREEN_OVERLAY_SETTINGS, + "OSDオーバーレイ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ONSCREEN_NOTIFICATIONS_SETTINGS, + "Onscreen Notifications") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OPEN_ARCHIVE, + "フォルダでアーカイブを開く") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OPTIONAL, + "任意") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY, + "オーバーレイ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_AUTOLOAD_PREFERRED, + "優先オーバーレイを自動ロード") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_DIRECTORY, + "オーバーレイ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_OPACITY, + "オーバーレイの不透明性") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_PRESET, + "オーバーレイのプリセット") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_SCALE, + "オーバーレイのスケール") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_SETTINGS, + "OSDオーバーレイ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PAL60_ENABLE, + "PAL60モードを使用") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PARENT_DIRECTORY, + "親ディレクトリー") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PAUSE_LIBRETRO, + "メニューが表示時に一時停止") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PAUSE_NONACTIVE, + "バックグラウンドで実行しない") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PERFCNT_ENABLE, + "パフォーマンスカウンター") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLISTS_TAB, + "プレイリスト") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_DIRECTORY, + "プレイリスト") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_SETTINGS, + "プレイリスト") +MSG_HASH(MENU_ENUM_LABEL_VALUE_POINTER_ENABLE, + "タッチ対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PORT, + "ポート") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PRESENT, + "現在") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PRIVACY_SETTINGS, + "プライバシー") +MSG_HASH(MENU_ENUM_LABEL_VALUE_QUIT_RETROARCH, + "終了") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ANALOG, + "アナログ対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_BBFC_RATING, + "BBFC評価") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_CERO_RATING, + "CERO評価") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_COOP, + "共同対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_CRC32, + "CRC32") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_DESCRIPTION, + "記述") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_DEVELOPER, + "開発者") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_EDGE_MAGAZINE_ISSUE, + "Edge雑誌の発行") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_EDGE_MAGAZINE_RATING, + "Edge雑誌の評価") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_EDGE_MAGAZINE_REVIEW, + "Edge雑誌のレビュー") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ELSPA_RATING, + "ELSPA評価") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ENHANCEMENT_HW, + "Enhancement Hardware") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ESRB_RATING, + "ESRB評価") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_FAMITSU_MAGAZINE_RATING, + "ファミ通の評価") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_FRANCHISE, + "フランチャイズ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_GENRE, + "ジャンル") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_MD5, + "MD5") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_NAME, + "名前") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ORIGIN, + "元") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_PEGI_RATING, + "PEGI評価") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_PUBLISHER, + "出版社") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_RELEASE_MONTH, + "発売月") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_RELEASE_YEAR, + "発売年") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_RUMBLE, + "振動の対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_SERIAL, + "シリアル") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_SHA1, + "SHA1") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_START_CONTENT, + "コンテンツをスタート") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_TGDB_RATING, + "TGDB評価") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REBOOT, + "再起動") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORDING_CONFIG_DIRECTORY, + "録画設定") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORDING_OUTPUT_DIRECTORY, + "録画の出力") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORDING_SETTINGS, + "録画") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORD_CONFIG, + "録画設定ファイル") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORD_DRIVER, + "録画のドライバ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORD_ENABLE, + "録画を有効") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORD_PATH, + "出力ファイル") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORD_USE_OUTPUT_DIRECTORY, + "出力ディレクトリーを使用") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REMAP_FILE, + "リマップファイル") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REMAP_FILE_LOAD, + "リマップファイルをロード") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_CORE, + "コアリマップファイルを保存") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_GAME, + "ゲームリマップファイルを保存") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REQUIRED, + "必要") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RESTART_CONTENT, + "コンテンツを再起動") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RESTART_RETROARCH, + "RetroArchを再起動") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RESUME, + "再開") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RESUME_CONTENT, + "再開") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RETROKEYBOARD, + "レトロキーボード") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RETROPAD, + "レトロパッド") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RETROPAD_WITH_ANALOG, + "レトロパッド(アナログ付)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RETRO_ACHIEVEMENTS_SETTINGS, + "レトロ実績") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_ENABLE, + "巻き戻しを有効") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_GRANULARITY, + "巻き戻しの粒状度") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_SETTINGS, + "巻き戻し") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RGUI_BROWSER_DIRECTORY, + "ファイルブラウザー") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RGUI_CONFIG_DIRECTORY, + "設定") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RGUI_SHOW_START_SCREEN, + "スタート画面を表示") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RIGHT_ANALOG, + "右のアナログ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RUN, + "実行") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAMBA_ENABLE, + "SAMBAを有効") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVEFILE_DIRECTORY, + "セーブファイル") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_INDEX, + "保存状態の自動インデックス") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_LOAD, + "自動的に保存状態をロード") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_SAVE, + "自動的に状態を保存") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_DIRECTORY, + "保存状態") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_THUMBNAIL_ENABLE, + "保存状態のサムネイル") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVE_CURRENT_CONFIG, + "現在の設定を保存") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVE_CURRENT_CONFIG_OVERRIDE_CORE, + "コアの優先を保存") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVE_CURRENT_CONFIG_OVERRIDE_GAME, + "ゲームの優先を保存") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVE_NEW_CONFIG, + "新しい設定を保存") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVE_STATE, + "状態保存") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVING_SETTINGS, + "保存") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SCAN_DIRECTORY, + "フォルダをスキャン") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SCAN_FILE, + "ファイルをスキャン") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SCAN_THIS_DIRECTORY, + "<このフォルダをスキャン>") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SCREENSHOT_DIRECTORY, + "スクリーンショット") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SCREEN_RESOLUTION, + "スクリーン解像度") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SEARCH, + "検索:") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SECONDS, + "秒") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SETTINGS, + "設定") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SETTINGS_TAB, + "設定") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER, + "シェーダー") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_APPLY_CHANGES, + "シェーダーの変更点を適用") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_OPTIONS, + "シェーダー") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_RIBBON, + "リボン") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_RIBBON_SIMPLIFIED, + "リボン (単純)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_SIMPLE_SNOW, + "単純な雪") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_SNOW, + "雪") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHOW_ADVANCED_SETTINGS, + "詳細設定を表示") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHOW_HIDDEN_FILES, + "隠しファイルとフォルダを表示") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHUTDOWN, + "シャットダウン") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SLOWMOTION_RATIO, + "スローモーション比") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SORT_SAVEFILES_ENABLE, + "フォルダでセーブを並び替え") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SORT_SAVESTATES_ENABLE, + "フォルダで保存状態を並び替え") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SSH_ENABLE, + "SSHを有効") +MSG_HASH(MENU_ENUM_LABEL_VALUE_START_CORE, + "コアをスタート") +MSG_HASH(MENU_ENUM_LABEL_VALUE_START_NET_RETROPAD, + "リモートレトロパッドをスタート") +MSG_HASH(MENU_ENUM_LABEL_VALUE_START_VIDEO_PROCESSOR, + "ビデオプロセッサをスタート") +MSG_HASH(MENU_ENUM_LABEL_VALUE_STATE_SLOT, + "保存状態のスロット") +MSG_HASH(MENU_ENUM_LABEL_VALUE_STATUS, + "ステータス") +MSG_HASH(MENU_ENUM_LABEL_VALUE_STDIN_CMD_ENABLE, + "stdinコマンド") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SUPPORTED_CORES, + "対応するコア") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SUSPEND_SCREENSAVER_ENABLE, + "スクリーンセーバーをサスペンド") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_BGM_ENABLE, + "System BGM Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_DIRECTORY, + "システム/BIOS") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFORMATION, + "システム情報") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_7ZIP_SUPPORT, + "7zip対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_ALSA_SUPPORT, + "ALSA対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_BUILD_DATE, + "ビルド日付") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_CG_SUPPORT, + "Cg対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_COCOA_SUPPORT, + "Cocoa対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_COMMAND_IFACE_SUPPORT, + "コマンドインタフェース対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_CORETEXT_SUPPORT, + "CoreText対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_CPU_FEATURES, + "CPU機能") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_DPI, + "ディスプレイの軽量DPI") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_MM_HEIGHT, + "ディスプレイの軽量縦幅 (mm)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_MM_WIDTH, + "ディスプレイの軽量横幅 (mm)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DSOUND_SUPPORT, + "DirectSound対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DYLIB_SUPPORT, + "ダイナミックライブラリー対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DYNAMIC_SUPPORT, + "ダイナミックlibretroライブラリーのランタイム時にロード対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_EGL_SUPPORT, + "EGL対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FBO_SUPPORT, + "OpenGL/Direct3Dテクスチャーにレンダリング (マルチパスシェーダー)対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FFMPEG_SUPPORT, + "FFmpeg対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FREETYPE_SUPPORT, + "FreeType対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FRONTEND_IDENTIFIER, + "フロントエンド識別名") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FRONTEND_NAME, + "フロントエンド名") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FRONTEND_OS, + "フロントエンドOS") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_GIT_VERSION, + "Gitバージョン") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_GLSL_SUPPORT, + "GLSL対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_HLSL_SUPPORT, + "HLSL対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_JACK_SUPPORT, + "JACK対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_KMS_SUPPORT, + "KMS/EGL対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBRETRODB_SUPPORT, + "LibretroDB対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT, + "Libusb対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBXML2_SUPPORT, + "libxml2 XMLパース対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_NETPLAY_SUPPORT, + "ネットプレイ(ピアツーピア)対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_NETWORK_COMMAND_IFACE_SUPPORT, + "ネットワークコマンドインタフェース対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_NETWORK_REMOTE_SUPPORT, + "ネットワークゲームパッド対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENAL_SUPPORT, + "OpenAL対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENGLES_SUPPORT, + "OpenGL ES対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENGL_SUPPORT, + "OpenGL対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENSL_SUPPORT, + "OpenSL対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENVG_SUPPORT, + "OpenVG対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OSS_SUPPORT, + "OSS対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OVERLAY_SUPPORT, + "オーバーレイ対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE, + "パワーソース") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_CHARGED, + "充電完了") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_CHARGING, + "充電中") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_DISCHARGING, + "放電") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_NO_SOURCE, + "ソースはありません") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PULSEAUDIO_SUPPORT, + "PulseAudio対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PYTHON_SUPPORT, + "Python(シェーダーにスクリプト)対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RBMP_SUPPORT, + "BMP対応 (RBMP)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RETRORATING_LEVEL, + "RetroRating level") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RJPEG_SUPPORT, + "JPEG対応 (RJPEG)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_ROARAUDIO_SUPPORT, + "RoarAudio対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RPNG_SUPPORT, + "PNG対応 (RPNG)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RSOUND_SUPPORT, + "RSound対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RTGA_SUPPORT, + "TGA対応 (RTGA)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL2_SUPPORT, + "SDL2対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL_IMAGE_SUPPORT, + "SDLイメージ対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL_SUPPORT, + "SDL1.2対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SLANG_SUPPORT, + "Slang対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_THREADING_SUPPORT, + "スレッド対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_UDEV_SUPPORT, + "Udev対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_V4L2_SUPPORT, + "Video4Linux2対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_VIDEO_CONTEXT_DRIVER, + "ビデオのコンテクストドライバ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_VULKAN_SUPPORT, + "Vulkan対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_WAYLAND_SUPPORT, + "Wayland対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_X11_SUPPORT, + "X11対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_XAUDIO2_SUPPORT, + "XAudio2対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_XVIDEO_SUPPORT, + "XVideo対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_ZLIB_SUPPORT, + "Zlib対応") +MSG_HASH(MENU_ENUM_LABEL_VALUE_TAKE_SCREENSHOT, + "スクリーンショットを撮る") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THREADED_DATA_RUNLOOP_ENABLE, + "データループをスレッド化") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAILS, + "サムネイル") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAILS_DIRECTORY, + "サムネイル") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAILS_UPDATER_LIST, + "サムネイルのアップデーター") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_BOXARTS, + "Boxarts") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_SCREENSHOTS, + "スクリーンショット") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_TITLE_SCREENS, + "Title Screens") +MSG_HASH(MENU_ENUM_LABEL_VALUE_TIMEDATE_ENABLE, + "日付と時刻を表示") +MSG_HASH(MENU_ENUM_LABEL_VALUE_TITLE_COLOR, + "メニューのタイトル色") +MSG_HASH(MENU_ENUM_LABEL_VALUE_TRUE, + "真") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UI_COMPANION_ENABLE, + "UI Companion Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UI_COMPANION_START_ON_BOOT, + "UI Companion Start On Boot") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UI_MENUBAR_ENABLE, + "メニューバー") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UNABLE_TO_READ_COMPRESSED_FILE, + "圧縮ファイルの読み込みは失敗しました。") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UNDO_LOAD_STATE, + "保存状態のロードを前に戻す") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UNDO_SAVE_STATE, + "状態の保存を前に戻す") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UNKNOWN, + "不明") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATER_SETTINGS, + "アップデーター") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_ASSETS, + "資産をアップデート") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_AUTOCONFIG_PROFILES, + "自動コンフィグプロファイルをアップデート") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_CG_SHADERS, + "Cgシェーダーをアップデート") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_CHEATS, + "チーとをアップデート") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_CORE_INFO_FILES, + "コアの情報ファイルをアップデート") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_DATABASES, + "データベースをアップデート") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_GLSL_SHADERS, + "GLSLシェーダーをアップデート") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_LAKKA, + "Lakkaをアップデート") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_OVERLAYS, + "オーバーレイをアップデート") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_SLANG_SHADERS, + "Slangシェーダーをアップデート") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USER, + "ユーザー") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USER_INTERFACE_SETTINGS, + "ユーザーインタフェース") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USER_LANGUAGE, + "言語") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USER_SETTINGS, + "ユーザー") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USE_BUILTIN_IMAGE_VIEWER, + "Use Builtin Image Viewer") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USE_BUILTIN_PLAYER, + "Use Builtin Media Player") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USE_THIS_DIRECTORY, + "<このフォルダを使用>") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_ALLOW_ROTATE, + "回転を許す") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_AUTO, + "自動アスペクト比") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_INDEX, + "アスペクト比のインデックス") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_BLACK_FRAME_INSERTION, + "黒いフレームを挿入") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_CROP_OVERSCAN, + "オーバースキャンをクロップ (再起動が必要)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_DISABLE_COMPOSITION, + "デスクトップのコンポジットを無効") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_DRIVER, + "ビデオのドライバ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FILTER, + "ビデオのフィルター") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FILTER_DIR, + "ビデオフィルター") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FILTER_FLICKER, + "Flicker filter") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FONT_ENABLE, + "OSDメッセージを表示") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FONT_PATH, + "OSDメッセージのフォント") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FONT_SIZE, + "OSDメッセージのサイズ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FORCE_ASPECT, + "アスペクト比を強制") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FORCE_SRGB_DISABLE, + "sRGB FBOを強制無効") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FRAME_DELAY, + "フレームの遅れ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FULLSCREEN, + "フルスクリーンモード") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_GAMMA, + "ビデオのガンマ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_GPU_RECORD, + "GPUの録画を有効") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_GPU_SCREENSHOT, + "GPUスクリーンショットを有効") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_HARD_SYNC, + "強制GPU同期") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_HARD_SYNC_FRAMES, + "強制GPU同期フレーム") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_MAX_SWAPCHAIN_IMAGES, + "最高のスワップチェーンイメージ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_MESSAGE_POS_X, + "OSDメッセージのX位置") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_MESSAGE_POS_Y, + "OSDメッセージのY位置") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_MONITOR_INDEX, + "モニタのインデックス") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_POST_FILTER_RECORD, + "事後フィルターの録画を有効") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_REFRESH_RATE, + "リフレッシュレート") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_REFRESH_RATE_AUTO, + "モニタの予想フレームレート") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_ROTATION, + "回転") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SCALE, + "ウィンドウのスケール") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SCALE_INTEGER, + "整数スケール") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SETTINGS, + "ビデオ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_DIR, + "ビデオシェーダー") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_NUM_PASSES, + "シェーダーのパス数") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PARAMETERS, + "シェーダーのパラメータをプレビュー") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET, + "シェーダーのプリセットをロード") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_PARAMETERS, + "メニューのシェーダーパラメータ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_AS, + "シェーダーのプリセットを名前を付けて保存") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_CORE, + "コアのプリセットを保存") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_GAME, + "ゲームのプリセットを保存") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHARED_CONTEXT, + "ハードウェアの共有コンテキストを有効") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SMOOTH, + "ハードウェアのバイリニアフィルター") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SOFT_FILTER, + "ソフトフィルターを有効") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SWAP_INTERVAL, + "VSYNCのスワップ期間") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_TAB, + "ビデオ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_THREADED, + "スレッドされているビデオ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VFILTER, + "非フリッカー") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_HEIGHT, + "カスタムのビューポートの縦幅") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_WIDTH, + "カスタムのビューポートの横幅") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_X, + "カスタムのビューポートのX") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_Y, + "カスタムのビューポートのY") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VI_WIDTH, + "Set VI Screen Width") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VSYNC, + "VSYNC") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_WINDOWED_FULLSCREEN, + "ウィンドウのフルスクリーンモード") +MSG_HASH(MENU_ENUM_LABEL_VALUE_WIFI_DRIVER, + "Wi-Fiのドライバ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_WIFI_SETTINGS, + "Wi-Fi") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ALPHA_FACTOR, + "メニューの透明性") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_FONT, + "メニューのフォント") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_CUSTOM, + "カスタム") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_FLATUI, + "フラットUI") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_MONOCHROME, + "モノクローム") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_SYSTEMATIC, + "システマティック") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_NEOACTIVE, + "ネオアクティブ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_PIXEL, + "ピクセル") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_RETROACTIVE, + "レトロアクティブ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME, + "メニューの色テーマ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_APPLE_GREEN, + "りんご緑") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_DARK, + "ダーク") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_DARK_PURPLE, + "ぶどう色") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_ELECTRIC_BLUE, + "電子ブルー") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_GOLDEN, + "ゴールデン") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_LEGACY_RED, + "レガシーレッド") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_MIDNIGHT_BLUE, + "ミッドナイトブルー") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_PLAIN, + "プレーン") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_UNDERSEA, + "海底") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_VOLCANIC_RED, + "火山レッド") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_RIBBON_ENABLE, + "メニューのシェーダーパイプライン") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SCALE_FACTOR, + "メニューの倍率") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHADOWS_ENABLE, + "アイコンの影を有効") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_HISTORY, + "履歴タブを表示") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_IMAGES, + "画像タブを表示") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_MUSIC, + "音楽タブを表示") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_SETTINGS, + "設定タブを表示") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_VIDEO, + "ビデオタブを表示") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_THEME, + "メニューのアイコンテーマ") +MSG_HASH(MENU_ENUM_LABEL_VALUE_YES, + "はい") +MSG_HASH(MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_TWO, + "シェーダーのプリセット") +MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_ENABLE, + "Enable or disable achievements. For more information, visit http://retroachievements.org") +MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_TEST_UNOFFICIAL, + "Enable or disable unofficial achievements and/or beta features for testing purposes.") +MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_HARDCORE_MODE_ENABLE, + "保存状態、チート、巻き戻し、早送り、一時停止、スローモーションを全部のゲームに無効する。") +MSG_HASH(MENU_ENUM_SUBLABEL_DRIVER_SETTINGS, + "システムのドライバを変更する。") +MSG_HASH(MENU_ENUM_SUBLABEL_RETRO_ACHIEVEMENTS_SETTINGS, + "実績関係の設定を変更する。") +MSG_HASH(MENU_ENUM_SUBLABEL_CORE_SETTINGS, + "コアの設定を変更する。") +MSG_HASH(MENU_ENUM_SUBLABEL_RECORDING_SETTINGS, + "録画の設定を変更する。") +MSG_HASH(MENU_ENUM_SUBLABEL_ONSCREEN_DISPLAY_SETTINGS, + "OSDオーバーレイ、キーボードオーバーレイ、OSDメッセージの設定を変更する。") +MSG_HASH(MENU_ENUM_SUBLABEL_FRAME_THROTTLE_SETTINGS, + "巻き戻し、早送り、スローモーションの設定を変更する。") +MSG_HASH(MENU_ENUM_SUBLABEL_SAVING_SETTINGS, + "保存関係の設定を変更する。") +MSG_HASH(MENU_ENUM_SUBLABEL_LOGGING_SETTINGS, + "ログの設定を変更する。") +MSG_HASH(MENU_ENUM_SUBLABEL_USER_INTERFACE_SETTINGS, + "ユーザーインタフェースの設定を変更する。") +MSG_HASH(MENU_ENUM_SUBLABEL_USER_SETTINGS, + "アカウント、ユーザー名、言語を変更する。") +MSG_HASH(MENU_ENUM_SUBLABEL_PRIVACY_SETTINGS, + "プライバシー設定を変更する。") +MSG_HASH(MENU_ENUM_SUBLABEL_DIRECTORY_SETTINGS, + "このシステムの初期ディレクトリーを変更する。") +MSG_HASH(MENU_ENUM_SUBLABEL_PLAYLIST_SETTINGS, + "プレイリストの設定を変更する。") +MSG_HASH(MENU_ENUM_SUBLABEL_NETWORK_SETTINGS, + "ネットワークの設定を変更する。") +MSG_HASH(MENU_ENUM_SUBLABEL_ADD_CONTENT_LIST, + "コンテンツをスキャンしてデータベースに入れる。") +MSG_HASH(MENU_ENUM_SUBLABEL_AUDIO_SETTINGS, + "オーディオ出力の設定を変更する。") +MSG_HASH(MENU_ENUM_SUBLABEL_BLUETOOTH_ENABLE, + "Bluetoothを有効する。") +MSG_HASH(MENU_ENUM_SUBLABEL_CONFIG_SAVE_ON_EXIT, + "終了時に設定を自動的に保存する。") +MSG_HASH(MENU_ENUM_SUBLABEL_CONFIGURATION_SETTINGS, + "コンフィグファイルのデフォルト設定を変更する。") +MSG_HASH(MENU_ENUM_SUBLABEL_CONFIGURATIONS_LIST, + "コンフィグファイルを管理と作成する。") +MSG_HASH(MENU_ENUM_SUBLABEL_CPU_CORES, + "CPUのコア数") +MSG_HASH(MENU_ENUM_SUBLABEL_FPS_SHOW, + "画面で現在のフレームレートを表示する。") +MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_HOTKEY_BINDS, + "ホットキー設定を変更する。") +MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO, + "メニューに切り替えるゲームパッドのボタンコンボ") +MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_SETTINGS, + "ゲームパッド、キーボード、マウスの設定を変更する。") +MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_USER_BINDS, + "このユーザーの入力設定を変更する。") +MSG_HASH(MENU_ENUM_SUBLABEL_LOG_VERBOSITY, + "端末にログすることを有効と無効。") +MSG_HASH(MENU_ENUM_SUBLABEL_NETPLAY, + "ネットプレイのセッションを参加やホストする。") +MSG_HASH(MENU_ENUM_SUBLABEL_NETPLAY_LAN_SCAN_SETTINGS, + "ローカルネットワーク上のネットプレイホストをスキャンと接続する。") +MSG_HASH(MENU_ENUM_SUBLABEL_INFORMATION_LIST_LIST, + "コア、ネットワーク、システムの詳細を表示する。\nデータベースとカーソルのマネジャーを表示する。") +MSG_HASH(MENU_ENUM_SUBLABEL_ONLINE_UPDATER, + "RetroArchにアドオン、コンポーネント、コンテンツをダウンロードする。") +MSG_HASH(MENU_ENUM_SUBLABEL_SAMBA_ENABLE, + "フォルダのネットワーク共有を有効する。") +MSG_HASH(MENU_ENUM_SUBLABEL_SERVICES_SETTINGS, + "OS関係のサービスを管理する。") +MSG_HASH(MENU_ENUM_SUBLABEL_SHOW_HIDDEN_FILES, + "ファイルブラウザーの中に隠しファイルとフォルダを表示する。") +MSG_HASH(MENU_ENUM_SUBLABEL_SSH_ENABLE, + "SSHでのアクセスを有効する。") +MSG_HASH(MENU_ENUM_SUBLABEL_SUSPEND_SCREENSAVER_ENABLE, + "システムのスクリーンセーバーをアクティブになることを予防する。") +MSG_HASH(MENU_ENUM_SUBLABEL_USER_LANGUAGE, + "インタフェースの言語を変更する。") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, + "フレームの間で黒フレームを挿入する。60Hzコンテンツを120Hzモニターでやることを役に立つ。") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_FRAME_DELAY, + "遅延が減るけどビデオ途切れの危険率が増す。") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_HARD_SYNC_FRAMES, + "CPUが「強制GPU同期」を使用時にGPUからの最高のフレーム前進を選択する。") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_MAX_SWAPCHAIN_IMAGES, + "指定するバッファーモードをビデオドライバに伝える。") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_MONITOR_INDEX, + "希望するモニターを選択する。") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_REFRESH_RATE_AUTO, + "モニターの正確な推定のモニターリフレッシュレート") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_SETTINGS, + "ビデオ出力の設定を変える。") +MSG_HASH(MENU_ENUM_SUBLABEL_WIFI_SETTINGS, + "無線ネットワークを検索して接続する。") +MSG_HASH(MENU_ENUM_SUBLABEL_HELP_LIST, + "RetroArchの使い方について学ぶ。") +MSG_HASH(MSG_APPENDED_DISK, + "Appended disk") +MSG_HASH(MSG_APPLICATION_DIR, + "アプリフォルダ") +MSG_HASH(MSG_APPLYING_CHEAT, + "Applying cheat changes.") +MSG_HASH(MSG_APPLYING_SHADER, + "Applying shader") +MSG_HASH(MSG_AUDIO_MUTED, + "消音。") +MSG_HASH(MSG_AUDIO_UNMUTED, + "消音解除。") +MSG_HASH(MSG_AUTOCONFIG_FILE_ERROR_SAVING, + "Error saving autoconf file.") +MSG_HASH(MSG_AUTOCONFIG_FILE_SAVED_SUCCESSFULLY, + "Autoconfig file saved successfully.") +MSG_HASH(MSG_AUTOSAVE_FAILED, + "Could not initialize autosave.") +MSG_HASH(MSG_AUTO_SAVE_STATE_TO, + "Auto save state to") +MSG_HASH(MSG_BLOCKING_SRAM_OVERWRITE, + "Blocking SRAM Overwrite") +MSG_HASH(MSG_BRINGING_UP_COMMAND_INTERFACE_ON_PORT, + "Bringing up command interface on port") +MSG_HASH(MSG_BYTES, + "バイト") +MSG_HASH(MSG_CANNOT_INFER_NEW_CONFIG_PATH, + "Cannot infer new config path. Use current time.") +MSG_HASH(MSG_CHEEVOS_HARDCORE_MODE_ENABLE, + "ハードコアモードが有効された。保存状態と巻き戻しは無効になった。") +MSG_HASH(MSG_COMPARING_WITH_KNOWN_MAGIC_NUMBERS, + "Comparing with known magic numbers...") +MSG_HASH(MSG_COMPILED_AGAINST_API, + "Compiled against API") +MSG_HASH(MSG_CONFIG_DIRECTORY_NOT_SET, + "Config directory not set. Cannot save new config.") +MSG_HASH(MSG_CONNECTED_TO, + "Connected to") +MSG_HASH(MSG_CONTENT_CRC32S_DIFFER, + "Content CRC32s differ. Cannot use different games.") +MSG_HASH(MSG_CONTENT_LOADING_SKIPPED_IMPLEMENTATION_WILL_DO_IT, + "Content loading skipped. Implementation will load it on its own.") +MSG_HASH(MSG_CORE_DOES_NOT_SUPPORT_SAVESTATES, + "コアは保存状態の対応がありません。") +MSG_HASH(MSG_CORE_OPTIONS_FILE_CREATED_SUCCESSFULLY, + "Core options file created successfully.") +MSG_HASH(MSG_COULD_NOT_FIND_ANY_NEXT_DRIVER, + "Could not find any next driver") +MSG_HASH(MSG_COULD_NOT_FIND_COMPATIBLE_SYSTEM, + "Could not find compatible system.") +MSG_HASH(MSG_COULD_NOT_FIND_VALID_DATA_TRACK, + "Could not find valid data track") +MSG_HASH(MSG_COULD_NOT_OPEN_DATA_TRACK, + "could not open data track") +MSG_HASH(MSG_COULD_NOT_READ_CONTENT_FILE, + "コンテンツファイルの読み込みはできませんでした") +MSG_HASH(MSG_COULD_NOT_READ_MOVIE_HEADER, + "Could not read movie header.") +MSG_HASH(MSG_COULD_NOT_READ_STATE_FROM_MOVIE, + "Could not read state from movie.") +MSG_HASH(MSG_CRC32_CHECKSUM_MISMATCH, + "CRC32 checksum mismatch between content file and saved content checksum in replay file header) replay highly likely to desync on playback.") +MSG_HASH(MSG_CUSTOM_TIMING_GIVEN, + "Custom timing given") +MSG_HASH(MSG_DECOMPRESSION_ALREADY_IN_PROGRESS, + "Decompression already in progress.") +MSG_HASH(MSG_DECOMPRESSION_FAILED, + "Decompression failed.") +MSG_HASH(MSG_DETECTED_VIEWPORT_OF, + "Detected viewport of") +MSG_HASH(MSG_DID_NOT_FIND_A_VALID_CONTENT_PATCH, + "Did not find a valid content patch.") +MSG_HASH(MSG_DISCONNECT_DEVICE_FROM_A_VALID_PORT, + "Disconnect device from a valid port.") +MSG_HASH(MSG_DISK_CLOSED, + "閉域") +MSG_HASH(MSG_DISK_EJECTED, + "取り出された") +MSG_HASH(MSG_DOWNLOADING, + "ダウンロード中") +MSG_HASH(MSG_DOWNLOAD_FAILED, + "ダウンロード失敗") +MSG_HASH(MSG_ERROR, + "エラー") +MSG_HASH(MSG_ERROR_LIBRETRO_CORE_REQUIRES_CONTENT, + "Libretro core requires content, but nothing was provided.") +MSG_HASH(MSG_ERROR_LIBRETRO_CORE_REQUIRES_SPECIAL_CONTENT, + "Libretro core requires special content, but none were provided.") +MSG_HASH(MSG_ERROR_PARSING_ARGUMENTS, + "Error parsing arguments.") +MSG_HASH(MSG_ERROR_SAVING_CORE_OPTIONS_FILE, + "Error saving core options file.") +MSG_HASH(MSG_ERROR_SAVING_REMAP_FILE, + "Error saving remap file.") +MSG_HASH(MSG_ERROR_SAVING_SHADER_PRESET, + "Error saving shader preset.") +MSG_HASH(MSG_EXTERNAL_APPLICATION_DIR, + "外部アプリフォルダ") +MSG_HASH(MSG_EXTRACTING, + "解凍中") +MSG_HASH(MSG_EXTRACTING_FILE, + "ファイルを解凍中") +MSG_HASH(MSG_FAILED_SAVING_CONFIG_TO, + "Failed saving config to") +MSG_HASH(MSG_FAILED_TO, + "Failed to") +MSG_HASH(MSG_FAILED_TO_ACCEPT_INCOMING_SPECTATOR, + "Failed to accept incoming spectator.") +MSG_HASH(MSG_FAILED_TO_ALLOCATE_MEMORY_FOR_PATCHED_CONTENT, + "Failed to allocate memory for patched content...") +MSG_HASH(MSG_FAILED_TO_APPLY_SHADER, + "Failed to apply shader.") +MSG_HASH(MSG_FAILED_TO_BIND_SOCKET, + "Failed to bind socket.") +MSG_HASH(MSG_FAILED_TO_CREATE_THE_DIRECTORY, + "Failed to create the directory.") +MSG_HASH(MSG_FAILED_TO_EXTRACT_CONTENT_FROM_COMPRESSED_FILE, + "Failed to extract content from compressed file") +MSG_HASH(MSG_FAILED_TO_GET_NICKNAME_FROM_CLIENT, + "Failed to get nickname from client.") +MSG_HASH(MSG_FAILED_TO_LOAD, + "ロードに失敗") +MSG_HASH(MSG_FAILED_TO_LOAD_CONTENT, + "コンテンツをロードに失敗しました。") +MSG_HASH(MSG_FAILED_TO_LOAD_MOVIE_FILE, + "Failed to load movie file") +MSG_HASH(MSG_FAILED_TO_LOAD_OVERLAY, + "Failed to load overlay.") +MSG_HASH(MSG_FAILED_TO_LOAD_STATE, + "Failed to load state from") +MSG_HASH(MSG_FAILED_TO_OPEN_LIBRETRO_CORE, + "Failed to open libretro core") +MSG_HASH(MSG_FAILED_TO_PATCH, + "パッチに失敗しました") +MSG_HASH(MSG_FAILED_TO_RECEIVE_HEADER_FROM_CLIENT, + "Failed to receive header from client.") +MSG_HASH(MSG_FAILED_TO_RECEIVE_NICKNAME, + "Failed to receive nickname.") +MSG_HASH(MSG_FAILED_TO_RECEIVE_NICKNAME_FROM_HOST, + "Failed to receive nickname from host.") +MSG_HASH(MSG_FAILED_TO_RECEIVE_NICKNAME_SIZE_FROM_HOST, + "Failed to receive nickname size from host.") +MSG_HASH(MSG_FAILED_TO_RECEIVE_SRAM_DATA_FROM_HOST, + "Failed to receive SRAM data from host.") +MSG_HASH(MSG_FAILED_TO_REMOVE_DISK_FROM_TRAY, + "Failed to remove disk from tray.") +MSG_HASH(MSG_FAILED_TO_REMOVE_TEMPORARY_FILE, + "Failed to remove temporary file") +MSG_HASH(MSG_FAILED_TO_SAVE_SRAM, + "Failed to save SRAM") +MSG_HASH(MSG_FAILED_TO_SAVE_STATE_TO, + "Failed to save state to") +MSG_HASH(MSG_FAILED_TO_SEND_NICKNAME, + "Failed to send nickname.") +MSG_HASH(MSG_FAILED_TO_SEND_NICKNAME_SIZE, + "Failed to send nickname size.") +MSG_HASH(MSG_FAILED_TO_SEND_NICKNAME_TO_CLIENT, + "Failed to send nickname to client.") +MSG_HASH(MSG_FAILED_TO_SEND_NICKNAME_TO_HOST, + "Failed to send nickname to host.") +MSG_HASH(MSG_FAILED_TO_SEND_SRAM_DATA_TO_CLIENT, + "Failed to send SRAM data to client.") +MSG_HASH(MSG_FAILED_TO_START_AUDIO_DRIVER, + "Failed to start audio driver. Will continue without audio.") +MSG_HASH(MSG_FAILED_TO_START_MOVIE_RECORD, + "Failed to start movie record.") +MSG_HASH(MSG_FAILED_TO_START_RECORDING, + "Failed to start recording.") +MSG_HASH(MSG_FAILED_TO_TAKE_SCREENSHOT, + "Failed to take screenshot.") +MSG_HASH(MSG_FAILED_TO_UNDO_LOAD_STATE, + "Failed to undo load state.") +MSG_HASH(MSG_FAILED_TO_UNDO_SAVE_STATE, + "Failed to undo save state.") +MSG_HASH(MSG_FAILED_TO_UNMUTE_AUDIO, + "Failed to unmute audio.") +MSG_HASH(MSG_FATAL_ERROR_RECEIVED_IN, + "Fatal error received in") +MSG_HASH(MSG_FILE_NOT_FOUND, + "そのようなファイルはありません。") +MSG_HASH(MSG_FOUND_AUTO_SAVESTATE_IN, + "Found auto savestate in") +MSG_HASH(MSG_FOUND_DISK_LABEL, + "Found disk label") +MSG_HASH(MSG_FOUND_FIRST_DATA_TRACK_ON_FILE, + "Found first data track on file") +MSG_HASH(MSG_FOUND_LAST_STATE_SLOT, + "Found last state slot") +MSG_HASH(MSG_FOUND_SHADER, + "Found shader") +MSG_HASH(MSG_FRAMES, + "フレーム") +MSG_HASH(MSG_GAME_SPECIFIC_CORE_OPTIONS_FOUND_AT, + "Per-Game Options: game-specific core options found at") +MSG_HASH(MSG_GOT_INVALID_DISK_INDEX, + "Got invalid disk index.") +MSG_HASH(MSG_GRAB_MOUSE_STATE, + "マウスステートをグラブする") +MSG_HASH(MSG_GAME_FOCUS_ON, + "ゲームフォーカスをオンにしました。") +MSG_HASH(MSG_GAME_FOCUS_OFF, + "ゲームフォーカスをオフにしました。") +MSG_HASH(MSG_HW_RENDERED_MUST_USE_POSTSHADED_RECORDING, + "Libretro core is hardware rendered. Must use post-shaded recording as well.") +MSG_HASH(MSG_INFLATED_CHECKSUM_DID_NOT_MATCH_CRC32, + "Inflated checksum did not match CRC32.") +MSG_HASH(MSG_INPUT_CHEAT, + "Input Cheat") +MSG_HASH(MSG_INPUT_CHEAT_FILENAME, + "Cheat Filename") +MSG_HASH(MSG_INPUT_PRESET_FILENAME, + "Preset Filename") +MSG_HASH(MSG_INTERFACE, + "インタフェース") +MSG_HASH(MSG_INTERNAL_STORAGE, + "内部ストレージ") +MSG_HASH(MSG_REMOVABLE_STORAGE, + "リムーバブルストレージ") +MSG_HASH(MSG_INVALID_NICKNAME_SIZE, + "Invalid nickname size.") +MSG_HASH(MSG_IN_BYTES, + "(バイトで)") +MSG_HASH(MSG_IN_GIGABYTES, + "(ギガバイトで)") +MSG_HASH(MSG_IN_MEGABYTES, + "(メガバイトで)") +MSG_HASH(MSG_LIBRETRO_ABI_BREAK, + "is compiled against a different version of libretro than this libretro implementation.") +MSG_HASH(MSG_LIBRETRO_FRONTEND, + "libretroのフロントエンド") +MSG_HASH(MSG_LOADED_STATE_FROM_SLOT, + "スロット%dから保存状態をロードしました。") +MSG_HASH(MSG_LOADED_STATE_FROM_SLOT_AUTO, + "スロット-1 (自動)から保存状態をロードしました。") +MSG_HASH(MSG_LOADING, + "ロード中") +MSG_HASH(MSG_FIRMWARE, + "ファームウェアファイルが見つかりませんでした。") +MSG_HASH(MSG_LOADING_CONTENT_FILE, + "コンテンツをロード中") +MSG_HASH(MSG_LOADING_HISTORY_FILE, + "履歴ファイルをロード中") +MSG_HASH(MSG_LOADING_STATE, + "保存状態をロード中") +MSG_HASH(MSG_MEMORY, + "メモリ") +MSG_HASH(MSG_MOVIE_FILE_IS_NOT_A_VALID_BSV1_FILE, + "Movie file is not a valid BSV1 file.") +MSG_HASH(MSG_MOVIE_FORMAT_DIFFERENT_SERIALIZER_VERSION, + "Movie format seems to have a different serializer version. Will most likely fail.") +MSG_HASH(MSG_MOVIE_PLAYBACK_ENDED, + "Movie playback ended.") +MSG_HASH(MSG_MOVIE_RECORD_STOPPED, + "Stopping movie record.") +MSG_HASH(MSG_NETPLAY_FAILED, + "Failed to initialize netplay.") +MSG_HASH(MSG_NETPLAY_FAILED_MOVIE_PLAYBACK_HAS_STARTED, + "Movie playback has started. Cannot start netplay.") +MSG_HASH(MSG_NO_CONTENT_STARTING_DUMMY_CORE, + "No content, starting dummy core.") +MSG_HASH(MSG_NO_SAVE_STATE_HAS_BEEN_OVERWRITTEN_YET, + "No save state has been overwritten yet.") +MSG_HASH(MSG_NO_STATE_HAS_BEEN_LOADED_YET, + "No state has been loaded yet.") +MSG_HASH(MSG_OVERRIDES_ERROR_SAVING, + "Error saving overrides.") +MSG_HASH(MSG_OVERRIDES_SAVED_SUCCESSFULLY, + "Overrides saved successfully.") +MSG_HASH(MSG_PAUSED, + "一時停止。") +MSG_HASH(MSG_PROGRAM, + "RetroArch") +MSG_HASH(MSG_READING_FIRST_DATA_TRACK, + "Reading first data track...") +MSG_HASH(MSG_RECEIVED, + "received") +MSG_HASH(MSG_RECORDING_TERMINATED_DUE_TO_RESIZE, + "Recording terminated due to resize.") +MSG_HASH(MSG_RECORDING_TO, + "Recording to") +MSG_HASH(MSG_REDIRECTING_CHEATFILE_TO, + "Redirecting cheat file to") +MSG_HASH(MSG_REDIRECTING_SAVEFILE_TO, + "Redirecting save file to") +MSG_HASH(MSG_REDIRECTING_SAVESTATE_TO, + "Redirecting savestate to") +MSG_HASH(MSG_REMAP_FILE_SAVED_SUCCESSFULLY, + "Remap file saved successfully.") +MSG_HASH(MSG_REMOVED_DISK_FROM_TRAY, + "Removed disk from tray.") +MSG_HASH(MSG_REMOVING_TEMPORARY_CONTENT_FILE, + "Removing temporary content file") +MSG_HASH(MSG_RESET, + "リセット") +MSG_HASH(MSG_RESTARTING_RECORDING_DUE_TO_DRIVER_REINIT, + "Restarting recording due to driver reinit.") +MSG_HASH(MSG_RESTORED_OLD_SAVE_STATE, + "Restored old save state.") +MSG_HASH(MSG_RESTORING_DEFAULT_SHADER_PRESET_TO, + "Shaders: restoring default shader preset to") +MSG_HASH(MSG_REVERTING_SAVEFILE_DIRECTORY_TO, + "Reverting savefile directory to") +MSG_HASH(MSG_REVERTING_SAVESTATE_DIRECTORY_TO, + "Reverting savestate directory to") +MSG_HASH(MSG_REWINDING, + "巻き戻しています。") +MSG_HASH(MSG_REWIND_INIT, + "Initializing rewind buffer with size") +MSG_HASH(MSG_REWIND_INIT_FAILED, + "Failed to initialize rewind buffer. Rewinding will be disabled.") +MSG_HASH(MSG_REWIND_INIT_FAILED_THREADED_AUDIO, + "Implementation uses threaded audio. Cannot use rewind.") +MSG_HASH(MSG_REWIND_REACHED_END, + "Reached end of rewind buffer.") +MSG_HASH(MSG_SAVED_NEW_CONFIG_TO, + "Saved new config to") +MSG_HASH(MSG_SAVED_STATE_TO_SLOT, + "スロット%dに状態を保存しました。") +MSG_HASH(MSG_SAVED_STATE_TO_SLOT_AUTO, + "スロット-1 (自動)に状態を保存しました。") +MSG_HASH(MSG_SAVED_SUCCESSFULLY_TO, + "Saved successfully to") +MSG_HASH(MSG_SAVING_RAM_TYPE, + "Saving RAM type") +MSG_HASH(MSG_SAVING_STATE, + "状態を保存中") +MSG_HASH(MSG_SCANNING, + "スキャン中") +MSG_HASH(MSG_SCANNING_OF_DIRECTORY_FINISHED, + "ディレクトリーのスキャンは完了しました。") +MSG_HASH(MSG_SENDING_COMMAND, + "Sending command") +MSG_HASH(MSG_SEVERAL_PATCHES_ARE_EXPLICITLY_DEFINED, + "Several patches are explicitly defined, ignoring all...") +MSG_HASH(MSG_SHADER, + "シェーダー") +MSG_HASH(MSG_SHADER_PRESET_SAVED_SUCCESSFULLY, + "Shader preset saved successfully.") +MSG_HASH(MSG_SKIPPING_SRAM_LOAD, + "Skipping SRAM load.") +MSG_HASH(MSG_SLOW_MOTION, + "スローモーション。") +MSG_HASH(MSG_SLOW_MOTION_REWIND, + "スローモーション巻き戻し。") +MSG_HASH(MSG_SRAM_WILL_NOT_BE_SAVED, + "SRAM will not be saved.") +MSG_HASH(MSG_STARTING_MOVIE_PLAYBACK, + "Starting movie playback.") +MSG_HASH(MSG_STARTING_MOVIE_RECORD_TO, + "Starting movie record to") +MSG_HASH(MSG_STATE_SIZE, + "状態のサイズ") +MSG_HASH(MSG_STATE_SLOT, + "保存状態のスロット") +MSG_HASH(MSG_TAKING_SCREENSHOT, + "スクリーンショットを撮っています。") +MSG_HASH(MSG_TO, + "to") +MSG_HASH(MSG_UNDID_LOAD_STATE, + "保存状態のロードを前に戻した。") +MSG_HASH(MSG_UNDOING_SAVE_STATE, + "Undoing save state") +MSG_HASH(MSG_UNKNOWN, + "不明") +MSG_HASH(MSG_UNPAUSED, + "一時停止が解除された。") +MSG_HASH(MSG_UNRECOGNIZED_COMMAND, + "Unrecognized command") +MSG_HASH(MSG_USING_CORE_NAME_FOR_NEW_CONFIG, + "Using core name for new config.") +MSG_HASH(MSG_USING_LIBRETRO_DUMMY_CORE_RECORDING_SKIPPED, + "Using libretro dummy core. Skipping recording.") +MSG_HASH(MSG_VALUE_CONNECT_DEVICE_FROM_A_VALID_PORT, + "Connect device from a valid port.") +MSG_HASH(MSG_VALUE_DISCONNECTING_DEVICE_FROM_PORT, + "Disconnecting device from port") +MSG_HASH(MSG_VALUE_REBOOTING, + "再起動しています。。。") +MSG_HASH(MSG_VALUE_SHUTTING_DOWN, + "シャットダウンしています。。。") +MSG_HASH(MSG_VERSION_OF_LIBRETRO_API, + "Version of libretro API") +MSG_HASH(MSG_VIEWPORT_SIZE_CALCULATION_FAILED, + "Viewport size calculation failed! Will continue using raw data. This will probably not work right ...") +MSG_HASH(MSG_VIRTUAL_DISK_TRAY, + "virtual disk tray.") +MSG_HASH(MENU_ENUM_SUBLABEL_AUDIO_LATENCY, + "ミリ秒でのオーディオ遅延。ドライバ対応による。") +MSG_HASH(MENU_ENUM_SUBLABEL_AUDIO_MUTE, + "オーディオを消音する。") +MSG_HASH( + MENU_ENUM_SUBLABEL_AUDIO_RATE_CONTROL_DELTA, + "Helps smooth out imperfections in timing when synchronizing audio and video at the same time. Be aware that if disabled, proper synchronization is nearly impossible to obtain." + ) +MSG_HASH(MENU_ENUM_SUBLABEL_CAMERA_ALLOW, + "コアでのカメラ使用を許す。") +MSG_HASH(MENU_ENUM_SUBLABEL_LOCATION_ALLOW, + "コアでの位置情報サービスを許す。") +MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_MAX_USERS, + "RetroArchに最大対応のユーザー数") +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_POLL_TYPE_BEHAVIOR, + "Influence how input polling is done inside RetroArch. Setting it to 'Early' or 'Late' can result in less latency, depending on your configuration." + ) +MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_ALL_USERS_CONTROL_MENU, + "どれでもユーザーがメニューを操作できる。オフにすると、ユーザー1のみが操作できる。") +MSG_HASH( + MENU_ENUM_SUBLABEL_AUDIO_VOLUME, + "Audio volume (in dB). 0 dB is normal volume, no gain applied." + ) +MSG_HASH(MENU_ENUM_SUBLABEL_AUDIO_SYNC, + "オーディオを同期する。推奨。") +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_AXIS_THRESHOLD, + "How far an axis must be tilted to result in a button press." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_BIND_TIMEOUT, + "Amount of seconds to wait until proceeding to the next bind." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_TURBO_PERIOD, + "Describes the period of which turbo-enabled buttons toggle. Numbers are described in frames." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_DUTY_CYCLE, + "Describes how long the period of a turbo-enabled button should be. Numbers are described in frames." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_VIDEO_VSYNC, + "Synchronizes the output video of the graphics card to the refresh rate of the monitor. Recommended." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_VIDEO_ALLOW_ROTATE, + "Allow cores to set rotation. When disabled, rotation requests are ignored. Useful for setups where one manually rotates the monitor." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_DUMMY_ON_CORE_SHUTDOWN, + "Some cores might have a shutdown feature. If enabled, it will prevent the core from shutting RetroArch down. Instead, it loads a dummy core." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CHECK_FOR_MISSING_FIRMWARE, + "Check if all the required firmware is present before attempting to load content." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_VIDEO_REFRESH_RATE, + "Vertical refresh rate of your monitor. Used to calculate a suitable audio input rate. NOTE: This will be ignored if 'Threaded Video' is enabled." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_AUDIO_ENABLE, + "Enable audio output." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_AUDIO_MAX_TIMING_SKEW, + "The maximum change in audio input rate. You may want to increase this to enable very large changes in timing, for example running PAL cores on NTSC displays, at the cost of inaccurate audio pitch." + ) +MSG_HASH( + MSG_FAILED, + "失敗" + ) +MSG_HASH( + MSG_SUCCEEDED, + "成功しました" + ) +MSG_HASH( + MSG_DEVICE_NOT_CONFIGURED, + "設定されていない" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST, + "データベースのカーソル表" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_DEVELOPER, + "データベース - 検索条件 : 開発者" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_PUBLISHER, + "データベース - 検索条件 : 出版社" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ENABLED, + "Enabled" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONTENT_HISTORY_PATH, + "コンテンツの履歴ディレクトリ" + ) +MSG_HASH( + MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_ORIGIN, + "データベース - 検索条件 : Origin") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_FRANCHISE, + "データベース - 検索条件 : Franchise") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_ESRB_RATING, + "データベース - 検索条件 : ESRB評価") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_ELSPA_RATING, + "データベース - 検索条件 : ELSPA評価") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_PEGI_RATING, + "データベース - 検索条件 : PEGI評価") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_CERO_RATING, + "データベース - 検索条件 : CERO評価") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_BBFC_RATING, + "データベース - 検索条件 : BBFC評価") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_MAX_USERS, + "データベース - 検索条件 : Max Users") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_RELEASEDATE_BY_MONTH, + "データベース - 検索条件 : Releasedate By Month") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_RELEASEDATE_BY_YEAR, + "データベース - 検索条件 : Releasedate By Year") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_EDGE_MAGAZINE_ISSUE, + "データベース - 検索条件 : Edge Magazine Issue") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_EDGE_MAGAZINE_RATING, + "データベース - 検索条件 : Edge Magazine評価") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_DATABASE_INFO, + "データベース情報") +MSG_HASH(MSG_WIFI_SCAN_COMPLETE, + "Wi-Fiスキャン完了。") +MSG_HASH(MSG_SCANNING_WIRELESS_NETWORKS, + "無線ネットワークをスキャン中") +MSG_HASH(MSG_NETPLAY_LAN_SCAN_COMPLETE, + "ネットプレイスキャン完了。") +MSG_HASH(MSG_NETPLAY_LAN_SCANNING, + "ネットプレイホストをスキャン中") +MSG_HASH(MENU_ENUM_SUBLABEL_PAUSE_NONACTIVE, + "Pause gameplay when window focus is lost.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_DISABLE_COMPOSITION, + "Enable or disable composition (Windows only).") +MSG_HASH(MENU_ENUM_SUBLABEL_HISTORY_LIST_ENABLE, + "Enable or disable recent playlist for games, images, music, and videos.") +MSG_HASH(MENU_ENUM_SUBLABEL_CONTENT_HISTORY_SIZE, + "Limit the number of entries in recent playlist for games, images, music, and videos.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_UNIFIED_MENU_CONTROLS, + "Unified Menu Controls") +MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_UNIFIED_MENU_CONTROLS, + "Use the same controls for both the menu and the game. Applies to the keyboard.") diff --git a/intl/msg_hash_lbl.h b/intl/msg_hash_lbl.h index e72af41289..77618556b5 100644 --- a/intl/msg_hash_lbl.h +++ b/intl/msg_hash_lbl.h @@ -30,6 +30,8 @@ MSG_HASH(MENU_ENUM_LABEL_AUDIO_ENABLE, "audio_enable") MSG_HASH(MENU_ENUM_LABEL_AUDIO_FILTER_DIR, "audio_filter_dir") +MSG_HASH(MENU_ENUM_LABEL_TURBO_DEADZONE_LIST, + "turbo_deadzone_list") MSG_HASH(MENU_ENUM_LABEL_AUDIO_LATENCY, "audio_latency") MSG_HASH(MENU_ENUM_LABEL_AUDIO_MAX_TIMING_SKEW, @@ -147,7 +149,8 @@ MSG_HASH(MENU_ENUM_LABEL_COLLECTION, MSG_HASH(MENU_ENUM_LABEL_CONFIGURATIONS, "configurations") MSG_HASH(MENU_ENUM_LABEL_CONFIGURATION_SETTINGS, - "configuration_settings") + "Determines how configuration files \n" + "are loaded and prioritized.") MSG_HASH(MENU_ENUM_LABEL_CONFIG_SAVE_ON_EXIT, "config_save_on_exit") MSG_HASH(MENU_ENUM_LABEL_CONNECT_WIFI, @@ -270,6 +273,8 @@ MSG_HASH(MENU_ENUM_LABEL_DEFERRED_ONSCREEN_DISPLAY_SETTINGS_LIST, "deferred_onscreen_display_settings_list") MSG_HASH(MENU_ENUM_LABEL_DEFERRED_ONSCREEN_OVERLAY_SETTINGS_LIST, "deferred_onscreen_overlay_settings_list") +MSG_HASH(MENU_ENUM_LABEL_DEFERRED_ONSCREEN_NOTIFICATIONS_SETTINGS_LIST, + "deferred_onscreen_notifications_settings_list") MSG_HASH(MENU_ENUM_LABEL_DEFERRED_PLAYLIST_SETTINGS_LIST, "deferred_playlist_settings") MSG_HASH(MENU_ENUM_LABEL_DEFERRED_PRIVACY_SETTINGS_LIST, @@ -324,6 +329,8 @@ MSG_HASH(MENU_ENUM_LABEL_DPI_OVERRIDE_VALUE, "dpi_override_value") MSG_HASH(MENU_ENUM_LABEL_DRIVER_SETTINGS, "driver_settings") +MSG_HASH(MENU_ENUM_LABEL_CHECK_FOR_MISSING_FIRMWARE, + "check_for_missing_firmware") MSG_HASH(MENU_ENUM_LABEL_DUMMY_ON_CORE_SHUTDOWN, "dummy_on_core_shutdown") MSG_HASH(MENU_ENUM_LABEL_DYNAMIC_WALLPAPER, @@ -406,12 +413,12 @@ MSG_HASH(MENU_ENUM_LABEL_INFO_SCREEN, "info_screen") MSG_HASH(MENU_ENUM_LABEL_INPUT_ALL_USERS_CONTROL_MENU, "all_users_control_menu") +MSG_HASH(MENU_ENUM_LABEL_MENU_INPUT_SWAP_OK_CANCEL, + "menu_swap_ok_cancel") MSG_HASH(MENU_ENUM_LABEL_INPUT_AUTODETECT_ENABLE, "input_autodetect_enable") MSG_HASH(MENU_ENUM_LABEL_INPUT_AXIS_THRESHOLD, "input_axis_threshold") -MSG_HASH(MENU_ENUM_LABEL_INPUT_BACK_AS_MENU_ENUM_TOGGLE_ENABLE, - "back_as_menu_toggle_enable") MSG_HASH(MENU_ENUM_LABEL_INPUT_BIND_MODE, "input_bind_mode") MSG_HASH(MENU_ENUM_LABEL_INPUT_BIND_TIMEOUT, @@ -438,8 +445,6 @@ MSG_HASH(MENU_ENUM_LABEL_INPUT_MAX_USERS, "input_max_users") MSG_HASH(MENU_ENUM_LABEL_INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO, "input_menu_toggle_gamepad_combo") -MSG_HASH(MENU_ENUM_LABEL_INPUT_OSK_OVERLAY_ENABLE, - "input_osk_overlay_enable") MSG_HASH(MENU_ENUM_LABEL_INPUT_OVERLAY_ENABLE, "input_overlay_enable") MSG_HASH(MENU_ENUM_LABEL_INPUT_OVERLAY_HIDE_IN_MENU, @@ -500,8 +505,6 @@ MSG_HASH(MENU_ENUM_LABEL_JOYPAD_AUTOCONFIG_DIR, "joypad_autoconfig_dir") MSG_HASH(MENU_ENUM_LABEL_JOYPAD_DRIVER, "input_joypad_driver") -MSG_HASH(MENU_ENUM_LABEL_KEYBOARD_OVERLAY_PRESET, - "input_osk_overlay") MSG_HASH(MENU_ENUM_LABEL_LAKKA_SERVICES, "lakka_services") MSG_HASH(MENU_ENUM_LABEL_LIBRETRO_DIR_PATH, @@ -590,6 +593,8 @@ MSG_HASH(MENU_ENUM_LABEL_NETPLAY_SPECTATOR_MODE_ENABLE, "netplay_spectator_mode_enable") MSG_HASH(MENU_ENUM_LABEL_NETPLAY_TCP_UDP_PORT, "netplay_tcp_udp_port") +MSG_HASH(MENU_ENUM_LABEL_NETPLAY_LAN_SCAN_SETTINGS, + "Search for and connect to netplay hosts on the local network.") MSG_HASH(MENU_ENUM_LABEL_NETWORK_CMD_ENABLE, "network_cmd_enable") MSG_HASH(MENU_ENUM_LABEL_NETWORK_CMD_PORT, @@ -622,6 +627,10 @@ MSG_HASH(MENU_ENUM_LABEL_NO_HISTORY_AVAILABLE, "no_history") MSG_HASH(MENU_ENUM_LABEL_NO_ITEMS, "no_items") +MSG_HASH(MENU_ENUM_LABEL_NO_NETPLAY_HOSTS_FOUND, + "no_netplay_hosts_found") +MSG_HASH(MENU_ENUM_LABEL_NO_NETWORKS_FOUND, + "no_networks_found") MSG_HASH(MENU_ENUM_LABEL_NO_PERFORMANCE_COUNTERS, "no_performance_counters") MSG_HASH(MENU_ENUM_LABEL_NO_PLAYLISTS, @@ -640,12 +649,12 @@ MSG_HASH(MENU_ENUM_LABEL_ONSCREEN_DISPLAY_SETTINGS, "onscreen_display_settings") MSG_HASH(MENU_ENUM_LABEL_ONSCREEN_OVERLAY_SETTINGS, "onscreen_overlay_settings") +MSG_HASH(MENU_ENUM_LABEL_ONSCREEN_NOTIFICATIONS_SETTINGS, + "onscreen_notifications_settings") MSG_HASH(MENU_ENUM_LABEL_OPEN_ARCHIVE, "open_archive") MSG_HASH(MENU_ENUM_LABEL_OPEN_ARCHIVE_DETECT_CORE, "open_archive_detect_core") -MSG_HASH(MENU_ENUM_LABEL_OSK_OVERLAY_DIRECTORY, - "osk_overlay_directory") MSG_HASH(MENU_ENUM_LABEL_OVERLAY_AUTOLOAD_PREFERRED, "overlay_autoload_preferred") MSG_HASH(MENU_ENUM_LABEL_OVERLAY_DIRECTORY, @@ -1036,6 +1045,10 @@ MSG_HASH(MENU_ENUM_LABEL_VIDEO_VSYNC, "video_vsync") MSG_HASH(MENU_ENUM_LABEL_VIDEO_WINDOWED_FULLSCREEN, "video_windowed_fullscreen") +MSG_HASH(MENU_ENUM_LABEL_VIDEO_WINDOW_WIDTH, + "video_window_width") +MSG_HASH(MENU_ENUM_LABEL_VIDEO_WINDOW_HEIGHT, + "video_window_height") MSG_HASH(MENU_ENUM_LABEL_WIFI_DRIVER, "wifi_driver") MSG_HASH(MENU_ENUM_LABEL_WIFI_SETTINGS, @@ -1070,19 +1083,73 @@ MSG_HASH(MSG_CONNECT_DEVICE_FROM_A_VALID_PORT, "connect_device_from_a_valid_port") MSG_HASH(MSG_DEVICE_CONFIGURED_IN_PORT, "configured in port") -MSG_HASH(MSG_DEVICE_NOT_CONFIGURED, - "not configured") MSG_HASH(MSG_DISCONNECTING_DEVICE_FROM_PORT, "disconnecting_device_from_port") MSG_HASH(MSG_DISCONNECT_DEVICE_FROM_A_VALID_PORT, "disconnect_device_from_a_valid_port") -MSG_HASH(MSG_FAILED, - "failed") MSG_HASH(MSG_FAILED_TO_SET_DISK, "Failed to set disk") MSG_HASH(MSG_FAILED_TO_START_AUDIO_DRIVER, "failed_to_start_audio_driver") MSG_HASH(MSG_FOUND_LAST_STATE_SLOT, "found_last_state_slot") -MSG_HASH(MSG_SUCCEEDED, - "succeeded") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_SELECTION, + "database_selection") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST, + "database_cursor_list") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_DEVELOPER, + "database_cursor_list_entry_developer") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_PUBLISHER, + "database_cursor_list_entry_publisher") +MSG_HASH(MENU_ENUM_LABEL_OFF, "off") +MSG_HASH(MENU_ENUM_LABEL_ON, "on") +MSG_HASH(MENU_ENUM_LABEL_DISABLED, "disabled") +MSG_HASH(MENU_ENUM_LABEL_ENABLED, "enabled") +MSG_HASH(MENU_ENUM_LABEL_SECONDS, "seconds") +MSG_HASH(MENU_ENUM_LABEL_STATUS, "status") +MSG_HASH(MENU_ENUM_LABEL_DETECT_CORE_LIST_OK, + "detect_core_list_ok") +MSG_HASH(MENU_ENUM_LABEL_NO_DISK, + "no_disk") +MSG_HASH(MENU_ENUM_LABEL_DEFERRED_RPL_ENTRY_ACTIONS, + "deferred_rpl_entry_actions") +MSG_HASH(MENU_ENUM_LABEL_MENU_THROTTLE_FRAMERATE, + "menu_throttle_framerate") +MSG_HASH(MENU_ENUM_LABEL_OVERLAY_SETTINGS, + "overlay_settings") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_ORIGIN, + "database_cursor_list_entry_origin") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_FRANCHISE, + "database_cursor_list_entry_franchise") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_ESRB_RATING, + "database_cursor_list_entry_esrb_rating") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_ELSPA_RATING, + "database_cursor_list_entry_elspa_rating") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_PEGI_RATING, + "database_cursor_list_entry_pegi_rating") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_CERO_RATING, + "database_cursor_list_entry_cero_rating") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_BBFC_RATING, + "database_cursor_list_entry_bbfc_rating") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_MAX_USERS, + "database_cursor_list_entry_max_users") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_RELEASEDATE_BY_MONTH, + "database_cursor_list_releasedate_by_month") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_RELEASEDATE_BY_YEAR, + "database_cursor_list_releasedate_by_year") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_EDGE_MAGAZINE_ISSUE, + "database_cursor_list_edge_magazine_issue") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_EDGE_MAGAZINE_RATING, + "database_cursor_list_edge_magazine_rating") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_DATABASE_INFO, + "database_info") +MSG_HASH(MENU_ENUM_LABEL_SHADER_PIPELINE_RIBBON, + "shader_pipeline_ribbon") +MSG_HASH(MENU_ENUM_LABEL_SHADER_PIPELINE_RIBBON_SIMPLIFIED, + "shader_pipeline_ribbon_simplified") +MSG_HASH(MENU_ENUM_LABEL_SHADER_PIPELINE_SIMPLE_SNOW, + "shader_pipeline_simple_snow") +MSG_HASH(MENU_ENUM_LABEL_SHADER_PIPELINE_SNOW, + "shader_pipeline_snow") +MSG_HASH(MENU_ENUM_LABEL_INPUT_UNIFIED_MENU_CONTROLS, + "unified_menu_controls") diff --git a/intl/msg_hash_nl.c b/intl/msg_hash_nl.c index 39c5b3c3fe..133056b57d 100644 --- a/intl/msg_hash_nl.c +++ b/intl/msg_hash_nl.c @@ -45,875 +45,7 @@ const char *msg_hash_to_str_nl(enum msg_hash_enums msg) { switch (msg) { - case MENU_ENUM_LABEL_VALUE_ADD_CONTENT_LIST: - return "Content toevoegen"; - case MENU_ENUM_LABEL_VALUE_ADD_TAB: - return "Importeer inhoud"; - case MENU_ENUM_LABEL_VALUE_ARCHIVE_MODE: - return "Archief Bestand Associatie"; - case MENU_ENUM_LABEL_VALUE_ASK_ARCHIVE: - return "Keuze"; - case MENU_ENUM_LABEL_VALUE_ASSETS_DIRECTORY: - return "Assets Map"; - case MENU_ENUM_LABEL_VALUE_AUDIO_BLOCK_FRAMES: - return "Block Frames"; - case MENU_ENUM_LABEL_VALUE_AUDIO_DEVICE: - return "Audio Apparaat"; - case MENU_ENUM_LABEL_VALUE_AUDIO_DRIVER: - return "Audio Driver"; - case MENU_ENUM_LABEL_VALUE_AUDIO_DSP_PLUGIN: - return "Audio DSP Plugin"; - case MENU_ENUM_LABEL_VALUE_AUDIO_ENABLE: - return "Audio Activeren"; - case MENU_ENUM_LABEL_VALUE_AUDIO_FILTER_DIR: - return "Audio Filter Map"; - case MENU_ENUM_LABEL_VALUE_AUDIO_LATENCY: - return "Audio Latentie (ms)"; - case MENU_ENUM_LABEL_VALUE_AUDIO_MAX_TIMING_SKEW: - return "Audio Maximale Timing Onevenredigheid"; - case MENU_ENUM_LABEL_VALUE_AUDIO_MUTE: - return "Audio Mute"; /* TODO/FIXME */ - case MENU_ENUM_LABEL_VALUE_AUDIO_OUTPUT_RATE: - return "Audio Uitvoer Frequentie (KHz)"; - case MENU_ENUM_LABEL_VALUE_AUDIO_RATE_CONTROL_DELTA: - return "Audio Rate Control Delta"; /* TODO/FIXME */ - case MENU_ENUM_LABEL_VALUE_AUDIO_RESAMPLER_DRIVER: - return "Audio Resampler Driver"; - case MENU_ENUM_LABEL_VALUE_AUDIO_SETTINGS: - return "Geluid"; - case MENU_ENUM_LABEL_VALUE_AUDIO_SYNC: - return "Audio Synchronizatie Activeren"; - case MENU_ENUM_LABEL_VALUE_AUDIO_VOLUME: - return "Audio Uitgangsniveau (dB)"; - case MENU_ENUM_LABEL_VALUE_AUTOSAVE_INTERVAL: - return "SaveRAM Autosave Interval"; - case MENU_ENUM_LABEL_VALUE_AUTO_OVERRIDES_ENABLE: - return "Laad Override Bestanden Automatisch"; - case MENU_ENUM_LABEL_VALUE_AUTO_REMAPS_ENABLE: - return "Laad Remap Bestanden Automatisch"; - case MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS: - return "Basis menu besturing"; - case MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_BACK: - return "Terug"; - case MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_CONFIRM: - return "Bevestigen/OK"; - case MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_INFO: - return "Info"; - case MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_QUIT: - return "Afsluiten"; - case MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_SCROLL_DOWN: - return "Omlaag Scrollen"; - case MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_SCROLL_UP: - return "Omhoog Scrollen"; - case MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_START: - return "Reset"; - case MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_TOGGLE_KEYBOARD: - return "Keyboard Toggle"; - case MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_TOGGLE_MENU: - return "Menu Schakelaar"; - case MENU_ENUM_LABEL_VALUE_BLOCK_SRAM_OVERWRITE: - return "SaveRAM niet overschrijven tijdens laden van savestate"; - case MENU_ENUM_LABEL_VALUE_BUILDBOT_ASSETS_URL: - return "Buildbot Assets URL"; - case MENU_ENUM_LABEL_VALUE_CACHE_DIRECTORY: - return "Cache Map"; - case MENU_ENUM_LABEL_VALUE_CAMERA_ALLOW: - return "Camera Toestaan"; - case MENU_ENUM_LABEL_VALUE_CAMERA_DRIVER: - return "Camera Driver"; - case MENU_ENUM_LABEL_VALUE_CHEAT: - return "Cheat"; - case MENU_ENUM_LABEL_VALUE_CHEAT_APPLY_CHANGES: - return "Cheat Instellingen Toepassen"; - case MENU_ENUM_LABEL_VALUE_CHEAT_DATABASE_PATH: - return "Cheat Bestand Map"; - case MENU_ENUM_LABEL_VALUE_CHEAT_FILE_LOAD: - return "Cheat Bestand Laden"; - case MENU_ENUM_LABEL_VALUE_CHEAT_FILE_SAVE_AS: - return "Cheat Bestand Opslaan Als"; - case MENU_ENUM_LABEL_VALUE_CHEAT_NUM_PASSES: - return "Cheat Passes"; - case MENU_ENUM_LABEL_VALUE_CLOSE_CONTENT: - return "Afsluiten"; - case MENU_ENUM_LABEL_VALUE_CONFIGURATIONS: - return "Laad Configuratie"; - case MENU_ENUM_LABEL_VALUE_CONFIGURATION_SETTINGS: - return "Configuratie"; - case MENU_ENUM_LABEL_VALUE_CONFIG_SAVE_ON_EXIT: - return "Configuratie Opslaan Tijdens Afsluiten"; - case MENU_ENUM_LABEL_VALUE_CONTENT_COLLECTION_LIST: - return "Verzameling"; - case MENU_ENUM_LABEL_VALUE_CONTENT_DATABASE_DIRECTORY: - return "Content Database Map"; - case MENU_ENUM_LABEL_VALUE_CONTENT_HISTORY_SIZE: - return "Geschiedenislijst grootte"; - case MENU_ENUM_LABEL_VALUE_CONTENT_SETTINGS: - return "Snelmenu"; - case MENU_ENUM_LABEL_VALUE_CORE_ASSETS_DIRECTORY: - return "Downloads Map"; - case MENU_ENUM_LABEL_VALUE_CORE_CHEAT_OPTIONS: - return "Cheats"; - case MENU_ENUM_LABEL_VALUE_CORE_COUNTERS: - return "Core Prestatie Tellers"; - case MENU_ENUM_LABEL_VALUE_CORE_ENABLE: - return "Core naam weergeven"; - case MENU_ENUM_LABEL_VALUE_CORE_INFORMATION: - return "Core Informatie"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_AUTHORS: - return "Auteur(s)"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_CATEGORIES: - return "Categories"; /* TODO/FIXME - need accented characters here */ - case MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_LABEL: - return "Core label"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_NAME: - return "Core naam"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_NOTES: - return "Core opmerkingen"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_FIRMWARE: - return "Firmware"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_LICENSES: - return "Licentie(s)"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_PERMISSIONS: - return "Permissies"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_SUPPORTED_EXTENSIONS: - return "Ondersteunde extensies"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_SYSTEM_MANUFACTURER: - return "Systeem fabrikant"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_SYSTEM_NAME: - return "Systeem naam"; - case MENU_ENUM_LABEL_VALUE_CORE_INPUT_REMAPPING_OPTIONS: - return "Besturing"; - case MENU_ENUM_LABEL_VALUE_CORE_LIST: - return "Laad Core"; - case MENU_ENUM_LABEL_VALUE_CORE_OPTIONS: - return "Opties"; - case MENU_ENUM_LABEL_VALUE_CORE_SETTINGS: - return "Core"; - case MENU_ENUM_LABEL_VALUE_CORE_SET_SUPPORTS_NO_CONTENT_ENABLE: - return "Automatisch core opstarten"; - case MENU_ENUM_LABEL_VALUE_CORE_SPECIFIC_CONFIG: - return "Configuratie Per-Core"; - case MENU_ENUM_LABEL_VALUE_CORE_UPDATER_AUTO_EXTRACT_ARCHIVE: - return "Automatisch uitpakken van gedownloade archieven"; - case MENU_ENUM_LABEL_VALUE_CORE_UPDATER_BUILDBOT_URL: - return "Buildbot Cores URL"; - case MENU_ENUM_LABEL_VALUE_CORE_UPDATER_LIST: - return "Core Updater"; - case MENU_ENUM_LABEL_VALUE_CORE_UPDATER_SETTINGS: - return "Updater"; - case MENU_ENUM_LABEL_VALUE_CURSOR_DIRECTORY: - return "Cursor Map"; - case MENU_ENUM_LABEL_VALUE_CURSOR_MANAGER: - return "Cursorbeheer"; - case MENU_ENUM_LABEL_VALUE_CUSTOM_RATIO: - return "Handmatige beeldverhouding"; - case MENU_ENUM_LABEL_VALUE_DATABASE_MANAGER: - return "Databasebeheer"; - case MENU_ENUM_LABEL_VALUE_DELETE_ENTRY: - return "Verwijderen"; - case MENU_ENUM_LABEL_VALUE_DETECT_CORE_LIST: - return "Selecteer bestand en detecteer Core"; - case MENU_ENUM_LABEL_VALUE_DIRECTORY_CONTENT: - return ""; - case MENU_ENUM_LABEL_VALUE_DIRECTORY_DEFAULT: - return ""; - case MENU_ENUM_LABEL_VALUE_DIRECTORY_NONE: - return ""; - case MENU_ENUM_LABEL_VALUE_DIRECTORY_NOT_FOUND: - return "Directory niet gevonden."; - case MENU_ENUM_LABEL_VALUE_DIRECTORY_SETTINGS: - return "Mappen"; - case MENU_ENUM_LABEL_VALUE_DISABLED: - return "Uitgeschakeld"; - case MENU_ENUM_LABEL_VALUE_DISK_CYCLE_TRAY_STATUS: - return "Disk Cycle Tray Status"; /* TODO/FIXME */ - case MENU_ENUM_LABEL_VALUE_DISK_IMAGE_APPEND: - return "Disk Image Toevoegen"; - case MENU_ENUM_LABEL_VALUE_DISK_INDEX: - return "Disk Index"; - case MENU_ENUM_LABEL_VALUE_DISK_OPTIONS: - return "Disk Beheer"; - case MENU_ENUM_LABEL_VALUE_DONT_CARE: - return "Onbelangrijk"; - case MENU_ENUM_LABEL_VALUE_DOWNLOAD_CORE_CONTENT: - return "Download Inhoud"; - case MENU_ENUM_LABEL_VALUE_DPI_OVERRIDE_ENABLE: - return "DPI Override activeren"; - case MENU_ENUM_LABEL_VALUE_DPI_OVERRIDE_VALUE: - return "DPI Override"; - case MENU_ENUM_LABEL_VALUE_DRIVER_SETTINGS: - return "Driver"; - case MENU_ENUM_LABEL_VALUE_DUMMY_ON_CORE_SHUTDOWN: - return "Dummy Tijdens Core Shutdown"; - case MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPER: - return "Dynamic Wallpaper"; - case MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPERS_DIRECTORY: - return "Dynamische Wallpapers Map"; - case MENU_ENUM_LABEL_VALUE_ENTRY_HOVER_COLOR: - return "Menu entry hover kleur"; - case MENU_ENUM_LABEL_VALUE_ENTRY_NORMAL_COLOR: - return "Menu entry normale kleur"; - case MENU_ENUM_LABEL_VALUE_FALSE: - return "Niet waar"; - case MENU_ENUM_LABEL_VALUE_FASTFORWARD_RATIO: - return "Maximale Afspeelsnelheid"; - case MENU_ENUM_LABEL_VALUE_FPS_SHOW: - return "Framerate Weergeven"; - case MENU_ENUM_LABEL_VALUE_FRAME_THROTTLE_ENABLE: - return "Beperk Maximale Afspeelsnelheid"; - case MENU_ENUM_LABEL_VALUE_FRAME_THROTTLE_SETTINGS: - return "Frame Throttle"; - case MENU_ENUM_LABEL_VALUE_FRONTEND_COUNTERS: - return "Frontend Prestatie Tellers"; - case MENU_ENUM_LABEL_VALUE_HELP: - return "Help"; - case MENU_ENUM_LABEL_VALUE_HELP_AUDIO_VIDEO_TROUBLESHOOTING: - return "Audio/Video Raadpleging"; - case MENU_ENUM_LABEL_VALUE_HELP_CHANGE_VIRTUAL_GAMEPAD: - return "Virtuele Gamepad Overlay Veranderen"; - case MENU_ENUM_LABEL_VALUE_HELP_CONTROLS: - return "Basis Menu Besturing"; - case MENU_ENUM_LABEL_VALUE_HELP_LIST: - return "Help"; - case MENU_ENUM_LABEL_VALUE_HELP_LOADING_CONTENT: - return "Hoe Laad je Content?"; - case MENU_ENUM_LABEL_VALUE_HELP_SCANNING_CONTENT: - return "Scannen naar Content"; - case MENU_ENUM_LABEL_VALUE_HELP_WHAT_IS_A_CORE: - return "Wat is een Core?"; - case MENU_ENUM_LABEL_VALUE_HISTORY_LIST_ENABLE: - return "Geschiedenislijst Activeren"; - case MENU_ENUM_LABEL_VALUE_HISTORY_TAB: - return "Geschiedenis"; - case MENU_ENUM_LABEL_VALUE_HORIZONTAL_MENU: - return "Horizontal Menu"; - case MENU_ENUM_LABEL_VALUE_IMAGES_TAB: - return "Afbeeldingen"; - case MENU_ENUM_LABEL_VALUE_INFORMATION_LIST: - return "Informatie"; - case MENU_ENUM_LABEL_VALUE_INPUT_AUTODETECT_ENABLE: - return "Autoconfiguratie Activeren"; - case MENU_ENUM_LABEL_VALUE_INPUT_AXIS_THRESHOLD: - return "Invoer As Threshold"; /* TODO/FIXME */ - case MENU_ENUM_LABEL_VALUE_INPUT_BACK_AS_MENU_TOGGLE_ENABLE: - return "Terug als Menu Schakelaar"; - case MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_HIDE_UNBOUND: - return "Verbergen Niet-gemapte Core Input Descripties"; - case MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_LABEL_SHOW: - return "Descriptie Labels Weergeven"; - case MENU_ENUM_LABEL_VALUE_INPUT_DRIVER: - return "Input Driver"; - case MENU_ENUM_LABEL_VALUE_INPUT_DUTY_CYCLE: - return "Duty Cycle"; /* TODO/FIXME */ - case MENU_ENUM_LABEL_VALUE_INPUT_HOTKEY_BINDS: - return "Invoer Hotkey Binds"; - case MENU_ENUM_LABEL_VALUE_INPUT_MAX_USERS: - return "Maximaal aantal gebruikers"; - case MENU_ENUM_LABEL_VALUE_INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO: - return "Menu Schakelaar Gamepad Combo"; - case MENU_ENUM_LABEL_VALUE_INPUT_OSK_OVERLAY_ENABLE: - return "Toetsenbord Overlay Weergeven"; - case MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_ENABLE: - return "Overlay Weergeven"; - case MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_HIDE_IN_MENU: - return "Verberg Overlay In Menu"; - case MENU_ENUM_LABEL_VALUE_INPUT_REMAPPING_DIRECTORY: - return "Invoer Remapping Map"; - case MENU_ENUM_LABEL_VALUE_INPUT_REMAP_BINDS_ENABLE: - return "Remap Binds Activeren"; - case MENU_ENUM_LABEL_VALUE_INPUT_SETTINGS: - return "Invoer"; - case MENU_ENUM_LABEL_VALUE_INPUT_TURBO_PERIOD: - return "Turbo Period"; /* TODO/FIXME */ - case MENU_ENUM_LABEL_VALUE_INPUT_USER_BINDS: - return "Invoer Gebruiker %u Binds"; - case MENU_ENUM_LABEL_VALUE_JOYPAD_AUTOCONFIG_DIR: - return "Invoerapparaten Autoconfig Map"; - case MENU_ENUM_LABEL_VALUE_JOYPAD_DRIVER: - return "Joypad Driver"; - case MENU_ENUM_LABEL_VALUE_KEYBOARD_OVERLAY_PRESET: - return "Toetsenbord Overlay Preset"; - case MENU_ENUM_LABEL_VALUE_LANG_CHINESE_SIMPLIFIED: - return "Chinees (Gesimplificeerd)"; - case MENU_ENUM_LABEL_VALUE_LANG_CHINESE_TRADITIONAL: - return "Chinees (Traditioneel)"; - case MENU_ENUM_LABEL_VALUE_LANG_DUTCH: - return "Nederlands"; - case MENU_ENUM_LABEL_VALUE_LANG_ENGLISH: - return "Engels"; - case MENU_ENUM_LABEL_VALUE_LANG_ESPERANTO: - return "Esperanto"; - case MENU_ENUM_LABEL_VALUE_LANG_FRENCH: - return "Frans"; - case MENU_ENUM_LABEL_VALUE_LANG_GERMAN: - return "Duits"; - case MENU_ENUM_LABEL_VALUE_LANG_ITALIAN: - return "Italiaans"; - case MENU_ENUM_LABEL_VALUE_LANG_JAPANESE: - return "Japans"; - case MENU_ENUM_LABEL_VALUE_LANG_KOREAN: - return "Koreaans"; - case MENU_ENUM_LABEL_VALUE_LANG_POLISH: - return "Pools"; - case MENU_ENUM_LABEL_VALUE_LANG_PORTUGUESE: - return "Portugees"; - case MENU_ENUM_LABEL_VALUE_LANG_RUSSIAN: - return "Russisch"; - case MENU_ENUM_LABEL_VALUE_LANG_SPANISH: - return "Spaans"; - case MENU_ENUM_LABEL_VALUE_LEFT_ANALOG: - return "Linkse Analog"; - case MENU_ENUM_LABEL_VALUE_LIBRETRO_DIR_PATH: - return "Core Map"; - case MENU_ENUM_LABEL_VALUE_LIBRETRO_INFO_PATH: - return "Core Info Map"; - case MENU_ENUM_LABEL_VALUE_LIBRETRO_LOG_LEVEL: - return "Core Logging Niveau"; - case MENU_ENUM_LABEL_VALUE_LINEAR: - return "Linear"; - case MENU_ENUM_LABEL_VALUE_LOAD_ARCHIVE: - return "Open Archief met Core"; - case MENU_ENUM_LABEL_VALUE_LOAD_CONTENT: - return "Selecteer bestand"; - case MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_HISTORY: - return "Laad Recent"; - case MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_LIST: - return "Laad Inhoud"; - case MENU_ENUM_LABEL_VALUE_LOAD_STATE: - return "Laad State"; - case MENU_ENUM_LABEL_VALUE_LOCATION_ALLOW: - return "Locatie Toestaan"; - case MENU_ENUM_LABEL_VALUE_LOCATION_DRIVER: - return "Locatie Driver"; - case MENU_ENUM_LABEL_VALUE_LOGGING_SETTINGS: - return "Logging"; - case MENU_ENUM_LABEL_VALUE_LOG_VERBOSITY: - return "Logging Uitgebreidheid"; - case MENU_ENUM_LABEL_VALUE_MAIN_MENU: - return "Hoofdmenu"; - case MENU_ENUM_LABEL_VALUE_MANAGEMENT: - return "Database"; - case MENU_ENUM_LABEL_VALUE_MENU_DRIVER: - return "Menu Driver"; - case MENU_ENUM_LABEL_VALUE_MENU_FILE_BROWSER_SETTINGS: - return "Menu Bestandsbeheer"; - case MENU_ENUM_LABEL_VALUE_MENU_SETTINGS: - return "Menu"; - case MENU_ENUM_LABEL_VALUE_MENU_WALLPAPER: - return "Menu Wallpaper"; - case MENU_ENUM_LABEL_VALUE_MISSING: - return "Ontbrekend"; - case MENU_ENUM_LABEL_VALUE_MOUSE_ENABLE: - return "Muis Ondersteuning"; - case MENU_ENUM_LABEL_VALUE_MULTIMEDIA_SETTINGS: - return "Multimedia"; - case MENU_ENUM_LABEL_VALUE_MUSIC_TAB: - return "Muziek"; - case MENU_ENUM_LABEL_VALUE_NAVIGATION_BROWSER_FILTER_SUPPORTED_EXTENSIONS_ENABLE: - return "Filtreer onbekende extensies"; - case MENU_ENUM_LABEL_VALUE_NAVIGATION_WRAPAROUND: - return "Navigatie Wrap-Around"; - case MENU_ENUM_LABEL_VALUE_NEAREST: - return "Nearest"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_CLIENT_SWAP_INPUT: /* TODO: Original string changed */ - return "Swap Netplay Input"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_DELAY_FRAMES: - return "Netplay Vertraging Frames"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE: - return "Netplay Activeren"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_IP_ADDRESS: /* TODO: Original string changed */ - return "IP Adres"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_MODE: - return "Netplay Client Activeren"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_NICKNAME: - return "Gebruikersnaam"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_SPECTATOR_MODE_ENABLE: - return "Netplay Spectator Activeren"; - case MENU_ENUM_LABEL_VALUE_NETPLAY_TCP_UDP_PORT: - return "Netplay TCP/UDP Poort"; - case MENU_ENUM_LABEL_VALUE_NETWORK_CMD_ENABLE: - return "Netwerk Commandos"; - case MENU_ENUM_LABEL_VALUE_NETWORK_CMD_PORT: - return "Netwerk Commandos Poort"; - case MENU_ENUM_LABEL_VALUE_NETWORK_SETTINGS: - return "Netwerk"; - case MENU_ENUM_LABEL_VALUE_NO: - return "Nee"; - case MENU_ENUM_LABEL_VALUE_NONE: - return "Geen"; - case MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE: - return "N.v.t"; - case MENU_ENUM_LABEL_VALUE_NO_CORE: - return "Geen core"; - case MENU_ENUM_LABEL_VALUE_NO_CORES_AVAILABLE: - return "Geen cores beschikbaar."; - case MENU_ENUM_LABEL_VALUE_NO_CORE_INFORMATION_AVAILABLE: - return "Geen core informatie beschikbaar."; - case MENU_ENUM_LABEL_VALUE_NO_CORE_OPTIONS_AVAILABLE: - return "Geen core opties beschikbaar."; - case MENU_ENUM_LABEL_VALUE_NO_INFORMATION_AVAILABLE: - return "Informatie is niet beschikbaar."; - case MENU_ENUM_LABEL_VALUE_NO_ITEMS: - return "Geen items."; - case MENU_ENUM_LABEL_VALUE_NO_PERFORMANCE_COUNTERS: - return "Geen prestatie tellers."; - case MENU_ENUM_LABEL_VALUE_NO_PLAYLIST_ENTRIES_AVAILABLE: - return "Geen afspeellijst items beschikbaar."; - case MENU_ENUM_LABEL_VALUE_NO_SETTINGS_FOUND: - return "Geen instellingen gevonden."; - case MENU_ENUM_LABEL_VALUE_NO_SHADER_PARAMETERS: - return "Geen shader parameters."; - case MENU_ENUM_LABEL_VALUE_OFF: - return "OFF"; - case MENU_ENUM_LABEL_VALUE_ON: - return "ON"; - case MENU_ENUM_LABEL_VALUE_ONLINE_UPDATER: - return "Online Updater"; - case MENU_ENUM_LABEL_VALUE_ONSCREEN_DISPLAY_SETTINGS: - return "Onscreen Weergave"; - case MENU_ENUM_LABEL_VALUE_OPEN_ARCHIVE: - return "Open Archief als map"; - case MENU_ENUM_LABEL_VALUE_OPTIONAL: - return "Optioneel"; - case MENU_ENUM_LABEL_VALUE_OSK_OVERLAY_DIRECTORY: - return "OSK Overlay Map"; - case MENU_ENUM_LABEL_VALUE_OVERLAY_AUTOLOAD_PREFERRED: - return "Laad geprefeerd overlay autom."; - case MENU_ENUM_LABEL_VALUE_OVERLAY_DIRECTORY: - return "Overlay Map"; - case MENU_ENUM_LABEL_VALUE_OVERLAY_OPACITY: - return "Overlay Transparentie"; - case MENU_ENUM_LABEL_VALUE_OVERLAY_PRESET: - return "Overlay Preset"; - case MENU_ENUM_LABEL_VALUE_OVERLAY_SCALE: - return "Overlay Schalering"; - case MENU_ENUM_LABEL_VALUE_OVERLAY_SETTINGS: - return "Onscreen Overlay"; - case MENU_ENUM_LABEL_VALUE_PAL60_ENABLE: - return "PAL60 Mode Activeren"; - case MENU_ENUM_LABEL_VALUE_PAUSE_LIBRETRO: - return "Pauseer als menu op voorgrond is"; - case MENU_ENUM_LABEL_VALUE_PAUSE_NONACTIVE: - return "Laat niet in achtergrond draaien"; - case MENU_ENUM_LABEL_VALUE_PERFCNT_ENABLE: - return "Prestatie Teller"; - case MENU_ENUM_LABEL_VALUE_PLAYLISTS_TAB: - return "Afspeellijsten"; - case MENU_ENUM_LABEL_VALUE_PLAYLIST_DIRECTORY: - return "Afspeellijsten Map"; - case MENU_ENUM_LABEL_VALUE_PLAYLIST_SETTINGS: - return "Playlist"; - case MENU_ENUM_LABEL_VALUE_POINTER_ENABLE: - return "Touch Ondersteuning"; - case MENU_ENUM_LABEL_VALUE_PORT: - return "Poort"; - case MENU_ENUM_LABEL_VALUE_PRESENT: - return "Aanwezig"; - case MENU_ENUM_LABEL_VALUE_PRIVACY_SETTINGS: - return "Privacy"; - case MENU_ENUM_LABEL_VALUE_QUIT_RETROARCH: - return "RetroArch Afsluiten"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_CRC32: - return "CRC32"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_DESCRIPTION: - return "Omschrijving"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_DEVELOPER: - return "Ontwikkelaar"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_FRANCHISE: - return "Franchise"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_MD5: - return "MD5"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_NAME: - return "Naam"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ORIGIN: - return "Afkomst"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_PUBLISHER: - return "Uitgever"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_RELEASE_MONTH: - return "Release datum maand"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_RELEASE_YEAR: - return "Release datum jaar"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_SHA1: - return "SHA1"; - case MENU_ENUM_LABEL_VALUE_RDB_ENTRY_START_CONTENT: - return "Content Opstarten"; - case MENU_ENUM_LABEL_VALUE_RECORDING_CONFIG_DIRECTORY: - return "Opname Config Map"; - case MENU_ENUM_LABEL_VALUE_RECORDING_OUTPUT_DIRECTORY: - return "Opname Uitvoer Map"; - case MENU_ENUM_LABEL_VALUE_RECORDING_SETTINGS: - return "Opname"; - case MENU_ENUM_LABEL_VALUE_RECORD_CONFIG: - return "Opname Configuratie"; - case MENU_ENUM_LABEL_VALUE_RECORD_DRIVER: - return "Opname Driver"; - case MENU_ENUM_LABEL_VALUE_RECORD_ENABLE: - return "Opname"; - case MENU_ENUM_LABEL_VALUE_RECORD_PATH: - return "Uitvoer Bestand"; - case MENU_ENUM_LABEL_VALUE_RECORD_USE_OUTPUT_DIRECTORY: - return "Gebruik uitvoer map"; - case MENU_ENUM_LABEL_VALUE_REMAP_FILE_LOAD: - return "Laad Remap Bestand"; - case MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_CORE: - return "Core Remap Bestand Opslaan"; - case MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_GAME: - return "Game Remap Bestand Opslaan"; - case MENU_ENUM_LABEL_VALUE_REQUIRED: - return "Vereist"; - case MENU_ENUM_LABEL_VALUE_RESTART_CONTENT: - return "Herstart"; - case MENU_ENUM_LABEL_VALUE_RESTART_RETROARCH: - return "RetroArch Opnieuw Opstarten"; - case MENU_ENUM_LABEL_VALUE_RESUME: - return "Hervatten"; - case MENU_ENUM_LABEL_VALUE_RESUME_CONTENT: - return "Hervatten"; - case MENU_ENUM_LABEL_VALUE_RETROKEYBOARD: - return "RetroKeyboard"; - case MENU_ENUM_LABEL_VALUE_RETROPAD: - return "RetroPad"; - case MENU_ENUM_LABEL_VALUE_REWIND_ENABLE: - return "Rewind Activeren"; - case MENU_ENUM_LABEL_VALUE_REWIND_GRANULARITY: - return "Rewind Granulariteit"; - case MENU_ENUM_LABEL_VALUE_REWIND_SETTINGS: - return "Rewind"; - case MENU_ENUM_LABEL_VALUE_RGUI_BROWSER_DIRECTORY: - return "Bestandsbeheer Map"; - case MENU_ENUM_LABEL_VALUE_RGUI_CONFIG_DIRECTORY: - return "Config Map"; - case MENU_ENUM_LABEL_VALUE_RGUI_SHOW_START_SCREEN: - return "Start Scherm Weergeven"; - case MENU_ENUM_LABEL_VALUE_RIGHT_ANALOG: - return "Rechtse Analog"; - case MENU_ENUM_LABEL_VALUE_SAVEFILE_DIRECTORY: - return "Savebestand Map"; - case MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_INDEX: - return "Save State Automatische Index"; - case MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_LOAD: - return "Automatisch State Loaden"; - case MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_SAVE: - return "Automatisch State Saven"; - case MENU_ENUM_LABEL_VALUE_SAVESTATE_DIRECTORY: - return "Savestate Map"; - case MENU_ENUM_LABEL_VALUE_SAVE_CURRENT_CONFIG: - return "Huidige configuratie opslaan"; - case MENU_ENUM_LABEL_VALUE_SAVE_NEW_CONFIG: - return "Nieuwe configuratie opslaan"; - case MENU_ENUM_LABEL_VALUE_SAVE_STATE: - return "Save State"; - case MENU_ENUM_LABEL_VALUE_SAVING_SETTINGS: - return "Saving"; - case MENU_ENUM_LABEL_VALUE_SCAN_DIRECTORY: - return "Scan een Map"; - case MENU_ENUM_LABEL_VALUE_SCAN_FILE: - return "Scan een Bestand"; - case MENU_ENUM_LABEL_VALUE_SCAN_THIS_DIRECTORY: - return ""; - case MENU_ENUM_LABEL_VALUE_SCREENSHOT_DIRECTORY: - return "Screenshot Map"; - case MENU_ENUM_LABEL_VALUE_SCREEN_RESOLUTION: - return "Scherm Resolutie"; - case MENU_ENUM_LABEL_VALUE_SEARCH: - return "Zoeken:"; - case MENU_ENUM_LABEL_VALUE_SECONDS: - return "secondes"; - case MENU_ENUM_LABEL_VALUE_SETTINGS: - return "Instellingen"; - case MENU_ENUM_LABEL_VALUE_SETTINGS_TAB: - return "Instellingen"; - case MENU_ENUM_LABEL_VALUE_SHADER: - return "Shader"; - case MENU_ENUM_LABEL_VALUE_SHADER_APPLY_CHANGES: - return "Shader Instellingen Toepassen"; - case MENU_ENUM_LABEL_VALUE_SHADER_OPTIONS: - return "Shaders"; - case MENU_ENUM_LABEL_VALUE_SHOW_ADVANCED_SETTINGS: - return "Geavanceerde instellingen weergeven"; - case MENU_ENUM_LABEL_VALUE_SLOWMOTION_RATIO: - return "Slow-Motion Ratio"; - case MENU_ENUM_LABEL_VALUE_SORT_SAVEFILES_ENABLE: - return "Saves Sorteren In Map"; - case MENU_ENUM_LABEL_VALUE_SORT_SAVESTATES_ENABLE: - return "Savestates Sorteren In Map"; - case MENU_ENUM_LABEL_VALUE_STATUS: - return "Status"; - case MENU_ENUM_LABEL_VALUE_STDIN_CMD_ENABLE: - return "stdin Commandos"; - case MENU_ENUM_LABEL_VALUE_SUSPEND_SCREENSAVER_ENABLE: - return "Onderbreek Screensaver"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_BGM_ENABLE: - return "Systeem BGM"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_DIRECTORY: - return "Systeem/BIOS Map"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFORMATION: - return "Systeem Informatie"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_7ZIP_SUPPORT: - return "7zip ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_ALSA_SUPPORT: - return "ALSA ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_BUILD_DATE: - return "Build datum"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_CG_SUPPORT: - return "Cg ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_COCOA_SUPPORT: - return "Cocoa ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_COMMAND_IFACE_SUPPORT: - return "Command interface ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_CORETEXT_SUPPORT: - return "CoreText ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_CPU_FEATURES: - return "CPU Features"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_DPI: - return "Display metric DPI"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_MM_HEIGHT: - return "Display metric hoogte (mm)"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_MM_WIDTH: - return "Display metric breedte (mm)"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DSOUND_SUPPORT: - return "DirectSound ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DYLIB_SUPPORT: - return "Dynamic library ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_EGL_SUPPORT: - return "EGL ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FBO_SUPPORT: - return "OpenGL/Direct3D render-to-texture (multi-pass shaders) ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FFMPEG_SUPPORT: - return "FFmpeg ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FREETYPE_SUPPORT: - return "FreeType ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FRONTEND_IDENTIFIER: - return "Frontend identificatie"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FRONTEND_NAME: - return "Frontend naam"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FRONTEND_OS: - return "Frontend OS"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_GIT_VERSION: - return "Git versie"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_GLSL_SUPPORT: - return "GLSL ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_HLSL_SUPPORT: - return "HLSL ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_JACK_SUPPORT: - return "JACK ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_KMS_SUPPORT: - return "KMS/EGL ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBRETRODB_SUPPORT: - return "LibretroDB ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT: - return "Libusb ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBXML2_SUPPORT: - return "libxml2 XML parsing ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_NETPLAY_SUPPORT: - return "Netplay (peer-to-peer) ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_NETWORK_COMMAND_IFACE_SUPPORT: - return "Network Command interface ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENAL_SUPPORT: - return "OpenAL ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENGLES_SUPPORT: - return "OpenGL ES ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENGL_SUPPORT: - return "OpenGL ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENSL_SUPPORT: - return "OpenSL ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENVG_SUPPORT: - return "OpenVG ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OSS_SUPPORT: - return "OSS ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OVERLAY_SUPPORT: - return "Overlay ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE: - return "Energie bron"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_CHARGED: - return "Charged"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_CHARGING: - return "Opladen"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_DISCHARGING: - return "Discharging"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_NO_SOURCE: - return "Geen bron"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PULSEAUDIO_SUPPORT: - return "PulseAudio ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PYTHON_SUPPORT: - return "Python (script ondersteuning in shaders) ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RETRORATING_LEVEL: - return "RetroRating level"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_ROARAUDIO_SUPPORT: - return "RoarAudio ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RPNG_SUPPORT: - return "PNG ondersteuning (RPNG)"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RSOUND_SUPPORT: - return "RSound ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL2_SUPPORT: - return "SDL2 ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL_IMAGE_SUPPORT: - return "SDL afbeeldingen ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL_SUPPORT: - return "SDL1.2 ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_THREADING_SUPPORT: - return "Threading ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_UDEV_SUPPORT: - return "Udev ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_V4L2_SUPPORT: - return "Video4Linux2 ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_VIDEO_CONTEXT_DRIVER: - return "Video context driver"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_WAYLAND_SUPPORT: - return "Wayland ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_X11_SUPPORT: - return "X11 ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_XAUDIO2_SUPPORT: - return "XAudio2 ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_XVIDEO_SUPPORT: - return "XVideo ondersteuning"; - case MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_ZLIB_SUPPORT: - return "Zlib ondersteuning"; - case MENU_ENUM_LABEL_VALUE_TAKE_SCREENSHOT: - return "Schermafdruk"; - case MENU_ENUM_LABEL_VALUE_THREADED_DATA_RUNLOOP_ENABLE: - return "Threaded data runloop"; - case MENU_ENUM_LABEL_VALUE_TIMEDATE_ENABLE: - return "Tijd/datum weergeven"; - case MENU_ENUM_LABEL_VALUE_TITLE_COLOR: - return "Menu titel kleur"; - case MENU_ENUM_LABEL_VALUE_TRUE: - return "Waar"; - case MENU_ENUM_LABEL_VALUE_UI_COMPANION_START_ON_BOOT: - return "UI Companion Start Tijdens Boot"; - case MENU_ENUM_LABEL_VALUE_UI_MENUBAR_ENABLE: - return "Menubalk"; - case MENU_ENUM_LABEL_VALUE_UNABLE_TO_READ_COMPRESSED_FILE: - return "Fout opgetreden tijdens lezen van gecomprimeerd bestand."; - case MENU_ENUM_LABEL_VALUE_UNKNOWN: - return "Onbekend"; - case MENU_ENUM_LABEL_VALUE_UPDATE_ASSETS: - return "Update Assets"; - case MENU_ENUM_LABEL_VALUE_UPDATE_AUTOCONFIG_PROFILES: - return "Update Autoconfiguratie Profielen"; - case MENU_ENUM_LABEL_VALUE_UPDATE_CG_SHADERS: - return "Update Cg Shaders"; - case MENU_ENUM_LABEL_VALUE_UPDATE_CHEATS: - return "Update Cheats"; - case MENU_ENUM_LABEL_VALUE_UPDATE_CORE_INFO_FILES: - return "Update Core Info Bestanden"; - case MENU_ENUM_LABEL_VALUE_UPDATE_DATABASES: - return "Update Databases"; - case MENU_ENUM_LABEL_VALUE_UPDATE_GLSL_SHADERS: - return "Update GLSL Shaders"; - case MENU_ENUM_LABEL_VALUE_UPDATE_OVERLAYS: - return "Update Overlays"; - case MENU_ENUM_LABEL_VALUE_USER: - return "Gebruiker"; - case MENU_ENUM_LABEL_VALUE_USER_INTERFACE_SETTINGS: - return "Gebruikersinterface"; - case MENU_ENUM_LABEL_VALUE_USER_LANGUAGE: - return "Taal"; - case MENU_ENUM_LABEL_VALUE_USER_SETTINGS: - return "Gebruiker"; - case MENU_ENUM_LABEL_VALUE_USE_BUILTIN_PLAYER: - return "Gebruik Ingebouwde Media Speler"; - case MENU_ENUM_LABEL_VALUE_USE_THIS_DIRECTORY: - return ""; - case MENU_ENUM_LABEL_VALUE_VIDEO_ALLOW_ROTATE: - return "Rotatie toestaan"; - case MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_AUTO: - return "Auto Beeldverhouding"; - case MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_INDEX: - return "Beeldverhouding Index"; - case MENU_ENUM_LABEL_VALUE_VIDEO_BLACK_FRAME_INSERTION: - return "Zwarte Frame Injectie"; - case MENU_ENUM_LABEL_VALUE_VIDEO_CROP_OVERSCAN: - return "Overscan Afsnijden (Herladen vereist)"; - case MENU_ENUM_LABEL_VALUE_VIDEO_DISABLE_COMPOSITION: - return "Desktop Compositie deactiveren"; - case MENU_ENUM_LABEL_VALUE_VIDEO_DRIVER: - return "Video Driver"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FILTER: - return "Video Filter"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FILTER_DIR: - return "Video Filter Map"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FILTER_FLICKER: - return "Flicker filter"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FONT_ENABLE: - return "OSD Berichten Weergeven"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FONT_PATH: - return "OSD Berichten Font"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FONT_SIZE: - return "OSD Berichten Grootte"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FORCE_ASPECT: - return "Forceer beeldverhouding"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FORCE_SRGB_DISABLE: - return "Handmatig sRGB FBO deactiveren"; - case MENU_ENUM_LABEL_VALUE_VIDEO_FRAME_DELAY: - return "Frame Delay"; /* TODO/FIXME */ - case MENU_ENUM_LABEL_VALUE_VIDEO_FULLSCREEN: - return "Gebruik Fullscreen Mode"; - case MENU_ENUM_LABEL_VALUE_VIDEO_GAMMA: - return "Video Gamma"; - case MENU_ENUM_LABEL_VALUE_VIDEO_GPU_RECORD: - return "GPU Opname"; - case MENU_ENUM_LABEL_VALUE_VIDEO_GPU_SCREENSHOT: - return "GPU Screenshot Activeren"; - case MENU_ENUM_LABEL_VALUE_VIDEO_HARD_SYNC: - return "Harde GPU Synchronisatie"; - case MENU_ENUM_LABEL_VALUE_VIDEO_HARD_SYNC_FRAMES: - return "Harde GPU Sync Frames"; - case MENU_ENUM_LABEL_VALUE_VIDEO_MESSAGE_POS_X: - return "OSD Berichten X-as positie"; - case MENU_ENUM_LABEL_VALUE_VIDEO_MESSAGE_POS_Y: - return "OSD Berichten Y-as positie"; - case MENU_ENUM_LABEL_VALUE_VIDEO_MONITOR_INDEX: - return "Monitor Index"; - case MENU_ENUM_LABEL_VALUE_VIDEO_POST_FILTER_RECORD: - return "Post filter opname activeren"; - case MENU_ENUM_LABEL_VALUE_VIDEO_REFRESH_RATE: - return "Refresh Rate"; - case MENU_ENUM_LABEL_VALUE_VIDEO_REFRESH_RATE_AUTO: - return "Geschatte Monitor Framerate"; - case MENU_ENUM_LABEL_VALUE_VIDEO_ROTATION: - return "Rotatie"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SCALE: - return "Windowed Schalering"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SCALE_INTEGER: - return "Gehele schalering"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SETTINGS: - return "Video"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_DIR: - return "Video Shader Map"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_NUM_PASSES: - return "Shader Passes"; /* TODO/FIXME */ - case MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PARAMETERS: - return "Voorbeeldweergave Shader Parameters"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET: - return "Laad Shader Preset"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_PARAMETERS: - return "Menu Shader Parameters"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_AS: - return "Shader Preset Opslaan Als"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SHARED_CONTEXT: -/* FIXME? Translate 'Enable Hardware Shared Context' */ - return "Activeren Hardware Shared Context"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SMOOTH: - return "Hardware Bilinear Filtering"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SOFT_FILTER: - return "Soft Filter"; - case MENU_ENUM_LABEL_VALUE_VIDEO_SWAP_INTERVAL: - return "VSync Swap Interval"; - case MENU_ENUM_LABEL_VALUE_VIDEO_TAB: - return "Video"; - case MENU_ENUM_LABEL_VALUE_VIDEO_THREADED: - return "Threaded Video"; - case MENU_ENUM_LABEL_VALUE_VIDEO_VFILTER: - return "Deflicker"; /* TODO/FIXME */ - case MENU_ENUM_LABEL_VALUE_VIDEO_VI_WIDTH: - return "VI Scherm Breedte Instellen"; - case MENU_ENUM_LABEL_VALUE_VIDEO_VSYNC: - return "VSync"; - case MENU_ENUM_LABEL_VALUE_VIDEO_WINDOWED_FULLSCREEN: - return "Windowed Fullscreen Mode"; /* TODO/FIXME */ - case MENU_ENUM_LABEL_VALUE_YES: - return "Ja"; + #include "msg_hash_nl.h" default: break; } diff --git a/intl/msg_hash_nl.h b/intl/msg_hash_nl.h new file mode 100644 index 0000000000..f823f482fc --- /dev/null +++ b/intl/msg_hash_nl.h @@ -0,0 +1,2251 @@ +MSG_HASH( + MSG_COMPILER, + "Compiler" + ) +MSG_HASH( + MSG_UNKNOWN_COMPILER, + "Unknown compiler" + ) +MSG_HASH( + MSG_DEVICE_DISCONNECTED_FROM_PORT, + "Device disconnected from port" + ) +MSG_HASH( + MSG_UNKNOWN_NETPLAY_COMMAND_RECEIVED, + "Unknown netplay command received" + ) +MSG_HASH( + MSG_FILE_ALREADY_EXISTS_SAVING_TO_BACKUP_BUFFER, + "File already exists. Saving to backup buffer" + ) +MSG_HASH( + MSG_GOT_CONNECTION_FROM, + "Got connection from: \"%s\"" + ) +MSG_HASH( + MSG_GOT_CONNECTION_FROM_NAME, + "Got connection from: \"%s (%s)\"" + ) +MSG_HASH( + MSG_NO_ARGUMENTS_SUPPLIED_AND_NO_MENU_BUILTIN, + "No arguments supplied and no menu builtin, displaying help..." + ) +MSG_HASH( + MSG_NETPLAY_USERS_HAS_FLIPPED, + "Netplay users has flipped" + ) +MSG_HASH( + MSG_SETTING_DISK_IN_TRAY, + "Setting disk in tray" + ) +MSG_HASH( + MSG_WAITING_FOR_CLIENT, + "Waiting for client ..." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_VIDEO_SHARED_CONTEXT, + "Give hardware-rendered cores their own private context. Avoids having to assume hardware state changes inbetween frames." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_MENU_SETTINGS, + "Adjusts settings related to the appearance of the menu screen." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_VIDEO_HARD_SYNC, + "Hard-synchronize the CPU and GPU. Reduces latency at the cost of performance." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_VIDEO_THREADED, + "Improves performance at the cost of latency and more video stuttering. Use only if you cannot obtain full speed otherwise." + ) +MSG_HASH( + MSG_AUDIO_VOLUME, + "Audio volume" + ) +MSG_HASH( + MSG_AUTODETECT, + "Autodetect" + ) +MSG_HASH( + MSG_AUTOLOADING_SAVESTATE_FROM, + "Auto-loading savestate from" + ) +MSG_HASH( + MSG_CAPABILITIES, + "Capabilities" + ) +MSG_HASH( + MSG_CONNECTING_TO_NETPLAY_HOST, + "Connecting to netplay host" + ) +MSG_HASH( + MSG_CONNECTING_TO_PORT, + "Connecting to port" + ) +MSG_HASH( + MSG_CONNECTION_SLOT, + "Connection slot" + ) +MSG_HASH( + MSG_SORRY_UNIMPLEMENTED_CORES_DONT_DEMAND_CONTENT_NETPLAY, + "Sorry, unimplemented: cores that don't demand content cannot participate in netplay." + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACCOUNTS_CHEEVOS_PASSWORD, + "Password" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACCOUNTS_CHEEVOS_SETTINGS, + "Accounts Cheevos" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACCOUNTS_CHEEVOS_USERNAME, + "Username" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACCOUNTS_LIST, + "Accounts" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACCOUNTS_LIST_END, + "Accounts List Endpoint" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACCOUNTS_RETRO_ACHIEVEMENTS, + "Retro Achievements" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_LIST, + "Achievement List" + ) + +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_LIST_HARDCORE, + "Achievement List (Hardcore)" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ADD_CONTENT_LIST, + "Content toevoegen" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONFIGURATIONS_LIST, + "Configuraties" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ADD_TAB, + "Importeer inhoud" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ARCHIVE_MODE, + "Archief Bestand Associatie" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ASK_ARCHIVE, + "Keuze" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ASSETS_DIRECTORY, + "Assets" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_BLOCK_FRAMES, + "Block Frames" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_DEVICE, + "Audio Apparaat" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_DRIVER, + "Audio Driver" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_DSP_PLUGIN, + "Audio DSP Plugin" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_ENABLE, + "Audio Activeren" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_FILTER_DIR, + "Audio Filter" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_TURBO_DEADZONE_LIST, + "Turbo/Deadzone" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_LATENCY, + "Audio Latentie (ms)" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_MAX_TIMING_SKEW, + "Audio Maximale Timing Onevenredigheid" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_MUTE, + "Audio Mute" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_OUTPUT_RATE, + "Audio Uitvoer Frequentie (KHz)" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_RATE_CONTROL_DELTA, + "Dynamic Audio Rate Control" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_RESAMPLER_DRIVER, + "Audio Resampler Driver" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_SETTINGS, + "Geluid" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_SYNC, + "Audio Synchronizatie Activeren" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_VOLUME, + "Audio Uitgangsniveau (dB)" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUTOSAVE_INTERVAL, + "SaveRAM Autosave Interval" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUTO_OVERRIDES_ENABLE, + "Laad Override Bestanden Automatisch" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUTO_REMAPS_ENABLE, + "Laad Remap Bestanden Automatisch" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUTO_SHADERS_ENABLE, + "Load Shader Presets Automatically" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_BACK, + "Terug" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_CONFIRM, + "Bevestigen/OK" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_INFO, + "Info" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_QUIT, + "Afsluiten" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_SCROLL_DOWN, + "Omlaag Scrollen" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_SCROLL_UP, + "Omhoog Scrollen" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_START, + "Start" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_TOGGLE_KEYBOARD, + "Toggle Keyboard" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_TOGGLE_MENU, + "Menu Schakelaar" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS, + "Basic menu controls" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_CONFIRM, + "Confirm/OK" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_INFO, + "Info" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_QUIT, + "Quit" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_SCROLL_UP, + "Scroll Up" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_START, + "Defaults" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_TOGGLE_KEYBOARD, + "Toggle Keyboard" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_TOGGLE_MENU, + "Toggle Menu" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BLOCK_SRAM_OVERWRITE, + "SaveRAM niet overschrijven tijdens laden van savestate" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BLUETOOTH_ENABLE, + "Bluetooth Enable" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BUILDBOT_ASSETS_URL, + "Buildbot Assets URL" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CACHE_DIRECTORY, + "Cache" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CAMERA_ALLOW, + "Camera Toestaan" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CAMERA_DRIVER, + "Camera Driver" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT, + "Cheat" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT_APPLY_CHANGES, + "Cheat wijzigingen toepassen" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT_DATABASE_PATH, + "Cheats" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT_FILE, + "Cheat File" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT_FILE_LOAD, + "Load Cheat File" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT_FILE_SAVE_AS, + "Cheats Opslaan Als" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT_NUM_PASSES, + "Cheat Passes" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_DESCRIPTION, + "Description" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_HARDCORE_MODE_ENABLE, + "Achievements Hardcore Mode" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_LOCKED_ACHIEVEMENTS, + "Locked Achievements:" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_LOCKED_ENTRY, + "Locked" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_SETTINGS, + "Retro Achievements" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_TEST_UNOFFICIAL, + "Test Unofficial Achievements" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_UNLOCKED_ACHIEVEMENTS, + "Unlocked Achievements:" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_UNLOCKED_ENTRY, + "Unlocked" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CLOSE_CONTENT, + "Afsluiten" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONFIG, + "Configuratie" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONFIGURATIONS, + "Configuratie laden" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONFIGURATION_SETTINGS, + "Configuratie" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONFIG_SAVE_ON_EXIT, + "Configuratie Opslaan Tijdens Afsluiten" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONTENT_COLLECTION_LIST, + "Collecties" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONTENT_DATABASE_DIRECTORY, + "Inhoud Database" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONTENT_DIR, + "Inhoud" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONTENT_HISTORY_SIZE, + "Geschiedenislijst grootte") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CONTENT_SETTINGS, + "Snel,enu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_ASSETS_DIR, + "Core Assets") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_ASSETS_DIRECTORY, + "Downloads") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_CHEAT_OPTIONS, + "Cheats") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_COUNTERS, + "Core Prestatie tellers") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_ENABLE, + "Core naam weergeven") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFORMATION, + "Core Informatie") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_AUTHORS, + "Auteurs") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_CATEGORIES, + "Categorieen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_LABEL, + "Core label") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_NAME, + "Core naam") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_FIRMWARE, + "Firmware(s)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_LICENSES, + "Licentie(s)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_PERMISSIONS, + "Permissies") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_SUPPORTED_EXTENSIONS, + "Ondersteunde extensies") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_SYSTEM_MANUFACTURER, + "Systeem fabrikant") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_SYSTEM_NAME, + "Systeem naam") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INPUT_REMAPPING_OPTIONS, + "Besturing") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_LIST, + "Core Laden") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_OPTIONS, + "Opties") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_SETTINGS, + "Core") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_SET_SUPPORTS_NO_CONTENT_ENABLE, + "Automatisch core opstarten") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_SPECIFIC_CONFIG, + "Configuratie Per-Core") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_UPDATER_AUTO_EXTRACT_ARCHIVE, + "Automatisch uitpakken van gedownloade archieven") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_UPDATER_BUILDBOT_URL, + "Buildbot Cores URL") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_UPDATER_LIST, + "Core Updater") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_UPDATER_SETTINGS, + "Updater") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CPU_ARCHITECTURE, + "CPU Architecture:") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CPU_CORES, + "CPU Cores:") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CURSOR_DIRECTORY, + "Cursor") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CURSOR_MANAGER, + "Cursor Beheer") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CUSTOM_RATIO, + "Handmatige Beeldverhouding") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_MANAGER, + "Database Beheer") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_SELECTION, + "Database Selectie") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DELETE_ENTRY, + "Verwijderen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DETECT_CORE_LIST, + "Selecteer Bestand En Detecteer Core") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_CONTENT, + "") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_DEFAULT, + "") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_NONE, + "") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_NOT_FOUND, + "Directory niet gevonden.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_SETTINGS, + "Directory") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DISK_CYCLE_TRAY_STATUS, + "Disk Cycle Tray Status") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DISK_IMAGE_APPEND, + "Disk Image Toevoegen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DISK_INDEX, + "Disk Index") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DISK_OPTIONS, + "Disk Beheer") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DONT_CARE, + "Onbelangrijk") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DOWNLOADED_FILE_DETECT_CORE_LIST, + "Downloads") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DOWNLOAD_CORE, + "Download Core...") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DOWNLOAD_CORE_CONTENT, + "Download Inhoud") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DPI_OVERRIDE_ENABLE, + "DPI Override Activeren") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DPI_OVERRIDE_VALUE, + "DPI Override") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DRIVER_SETTINGS, + "Driver") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DUMMY_ON_CORE_SHUTDOWN, + "Dummy Laden Tijdens Afsluiten") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPER, + "Dynamische Wallpaper") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPERS_DIRECTORY, + "Dynamische Wallpapers") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CHEEVOS_ENABLE, + "Achievements Aciveren") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ENTRY_HOVER_COLOR, + "Menu entry hover kleur") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ENTRY_NORMAL_COLOR, + "Menu entry normale kleur") +MSG_HASH(MENU_ENUM_LABEL_VALUE_FALSE, + "Niet waar") +MSG_HASH(MENU_ENUM_LABEL_VALUE_FASTFORWARD_RATIO, + "Maximale afspeelsnelheid") +MSG_HASH(MENU_ENUM_LABEL_VALUE_FPS_SHOW, + "Framerate weergeven") +MSG_HASH(MENU_ENUM_LABEL_VALUE_FRAME_THROTTLE_ENABLE, + "Beperk Maximale Afspeelsnelheid") +MSG_HASH(MENU_ENUM_LABEL_VALUE_FRAME_THROTTLE_SETTINGS, + "Frame Throttle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_FRONTEND_COUNTERS, + "Frontend Prestatie Tellers") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_OPTIONS, + "Load Content-Specific Core Options Automatically") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_OPTIONS_CREATE, + "Create game-options file") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_OPTIONS_IN_USE, + "Game-options file") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP, + "help") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_AUDIO_VIDEO_TROUBLESHOOTING, + "Audio/Video Raadpleging") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_CHANGE_VIRTUAL_GAMEPAD, + "Virtuele Gamepad Overlay Veranderen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_CONTROLS, + "Basis Menu Besturing") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_LIST, + "Help") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_LOADING_CONTENT, + "Hoe Laad je Content?") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_SCANNING_CONTENT, + "Scannen naar Content") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_WHAT_IS_A_CORE, + "Wat is een Core?") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HISTORY_LIST_ENABLE, + "Geschiedenislijst Activeren") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HISTORY_TAB, + "Geschiedenis") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HORIZONTAL_MENU, + "Horizontale Menu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_IMAGES_TAB, + "Afbeeldingen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INFORMATION, + "Informatie") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INFORMATION_LIST, + "Informatie") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ADC_TYPE, + "Analog To Digital Type") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ALL_USERS_CONTROL_MENU, + "All Users Control Menu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_X, + "Left Analog X") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_X_MINUS, + "Left analog X- (left)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_X_PLUS, + "Left analog X+ (right)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_Y, + "Left Analog Y") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_Y_MINUS, + "Left analog Y- (up)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_Y_PLUS, + "Left analog Y+ (down)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_X, + "Right Analog X") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_X_MINUS, + "Right analog X- (left)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_X_PLUS, + "Right analog X+ (right)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_Y, + "Right Analog Y") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_Y_MINUS, + "Right analog Y- (up)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_Y_PLUS, + "Right analog Y+ (down)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_AUTODETECT_ENABLE, + "Autoconfiguratie Activeren") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_AXIS_THRESHOLD, + "Analoge As Deadzone") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_INPUT_SWAP_OK_CANCEL, + "Menu Swap Ok & Cancel Buttons") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_ALL, + "Bind All") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_DEFAULT_ALL, + "Bind Default All") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_TIMEOUT, + "Bind Timeout") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_HIDE_UNBOUND, + "Verbergen Niet-gemapte Core Input Descripties") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_LABEL_SHOW, + "Descriptie Labels Weergeven") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DEVICE_INDEX, + "Device Index") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DEVICE_TYPE, + "Device Type") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DRIVER, + "Input Driver") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DUTY_CYCLE, + "Duty Cycle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_HOTKEY_BINDS, + "Invoer Hotkey Binds") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ICADE_ENABLE, + "Keyboard Gamepad Mapping Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_A, + "A button (right)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_B, + "B button (down)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_DOWN, + "Down D-pad") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_L2, + "L2 button (trigger)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_L3, + "L3 button (thumb)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_L, + "L button (shoulder)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_LEFT, + "Left D-pad") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_R2, + "R2 button (trigger)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_R3, + "R3 button (thumb)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_R, + "R button (shoulder)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_RIGHT, + "Right D-pad") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_SELECT, + "Select button") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_START, + "Start button") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_UP, + "Up D-pad") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_X, + "X button (top)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_Y, + "Y button (left)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_KEY, + "(Key: %s)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_KEYBOARD_GAMEPAD_MAPPING_TYPE, + "Keyboard Gamepad Mapping Type") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_MAX_USERS, + "Maximaal Aantal Gebruikers") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO, + "Menu Schakelaar Gamepad Combo") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_CHEAT_INDEX_MINUS, + "Cheat index -") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_CHEAT_INDEX_PLUS, + "Cheat index +") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_CHEAT_TOGGLE, + "Cheat toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_DISK_EJECT_TOGGLE, + "Disk eject toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_DISK_NEXT, + "Disk next") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_DISK_PREV, + "Disk prev") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_ENABLE_HOTKEY, + "Enable hotkeys") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_FAST_FORWARD_HOLD_KEY, + "Fast forward hold") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_FAST_FORWARD_KEY, + "Fast forward toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_FRAMEADVANCE, + "Frameadvance") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_FULLSCREEN_TOGGLE_KEY, + "Fullscreen toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_GRAB_MOUSE_TOGGLE, + "Grab mouse toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_LOAD_STATE_KEY, + "Load state") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_MENU_TOGGLE, + "Menu toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_MOVIE_RECORD_TOGGLE, + "Movie record toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_MUTE, + "Audio mute toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_NETPLAY_FLIP, + "Netplay flip users") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_OSK, + "On-screen keyboard toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_OVERLAY_NEXT, + "Overlay next") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_PAUSE_TOGGLE, + "Pause toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_QUIT_KEY, + "Quit RetroArch") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_RESET, + "Reset game") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_REWIND, + "Rewind") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_SAVE_STATE_KEY, + "Save state") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_SCREENSHOT, + "Take screenshot") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_SHADER_NEXT, + "Next shader") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_SHADER_PREV, + "Previous shader") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_SLOWMOTION, + "Slow motion") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_STATE_SLOT_MINUS, + "Savestate slot -") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_STATE_SLOT_PLUS, + "Savestate slot +") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_VOLUME_DOWN, + "Volume -") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_VOLUME_UP, + "Volume +") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_ENABLE, + "Overlay Weergeven") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_HIDE_IN_MENU, + "Verberg Overlay In Menu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR, + "Poll Type Behavior") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR_EARLY, + "Early") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR_LATE, + "Late") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR_NORMAL, + "Normal") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_PREFER_FRONT_TOUCH, + "Prefer Front Touch") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_REMAPPING_DIRECTORY, + "Input Remapping") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_REMAP_BINDS_ENABLE, + "Remap Binds Activeren") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_SAVE_AUTOCONFIG, + "Autoconfig Opslaan") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_SETTINGS, + "Invoer") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_SMALL_KEYBOARD_ENABLE, + "Small Keyboard Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_TOUCH_ENABLE, + "Touch Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_TURBO_ENABLE, + "Turbo enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_TURBO_PERIOD, + "Turbo Period") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_USER_BINDS, + "Invoer Gebruiker %u Binds") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INTERNAL_STORAGE_STATUS, + "Internal storage status") +MSG_HASH(MENU_ENUM_LABEL_VALUE_JOYPAD_AUTOCONFIG_DIR, + "Invoerapparaten Autoconfiguratie") +MSG_HASH(MENU_ENUM_LABEL_VALUE_JOYPAD_DRIVER, + "Joypad Driver") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LAKKA_SERVICES, + "Services") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_CHINESE_SIMPLIFIED, + "Chinees (Gesimplificeerd)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_CHINESE_TRADITIONAL, + "Chinees (Traditioneel)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_DUTCH, + "Nederlands") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_ENGLISH, + "Engels") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_ESPERANTO, + "Esperanto") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_FRENCH, + "Frans") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_GERMAN, + "Duits") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_ITALIAN, + "Italiaans") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_JAPANESE, + "Japans") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_KOREAN, + "Koreaans") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_POLISH, + "Pools") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_PORTUGUESE, + "Portugees") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_RUSSIAN, + "Russisch") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_SPANISH, + "Spaans") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_VIETNAMESE, + "Vietnamees") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LEFT_ANALOG, + "Linkse Analoog Stick") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LIBRETRO_DIR_PATH, + "Core") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LIBRETRO_INFO_PATH, + "Core Info") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LIBRETRO_LOG_LEVEL, + "Core Logging Level") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LINEAR, + "Linear") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_ARCHIVE, + "Laad Archief Met Core") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_CONTENT, + "Selecteer Bestand") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_HISTORY, + "Recentelijk gebruikt") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_LIST, + "Laad Inhoud") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_STATE, + "Laad State") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOCATION_ALLOW, + "Locatie toestaan") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOCATION_DRIVER, + "Locatie Driver") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOGGING_SETTINGS, + "Logging") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOG_VERBOSITY, + "Logging Niveau") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MAIN_MENU, + "Hoofdmenu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MANAGEMENT, + "Database Instellingen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME, + "Menu Kleur Thema") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_BLUE, + "Blauw") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_BLUE_GREY, + "Blue Grey") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_DARK_BLUE, + "Dark Blue") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_GREEN, + "Green") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_NVIDIA_SHIELD, + "Shield") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_RED, + "Red") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_YELLOW, + "Yellow") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_FOOTER_OPACITY, + "Footer Opacity") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_HEADER_OPACITY, + "Header Opacity") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_DRIVER, + "Menu Driver") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_ENUM_THROTTLE_FRAMERATE, + "Throttle Menu Framerate") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FILE_BROWSER_SETTINGS, + "Menu Bestandsbeheer") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_LINEAR_FILTER, + "Menu Linear Filter") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_SETTINGS, + "Menu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_WALLPAPER, + "Achtergrond") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_WALLPAPER_OPACITY, + "Achtergrond doorzichtigheid") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MISSING, + "Ontbrekend") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MORE, + "...") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MOUSE_ENABLE, + "Muis Ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MULTIMEDIA_SETTINGS, + "Multimedia") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MUSIC_TAB, + "Muziek") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NAVIGATION_BROWSER_FILTER_SUPPORTED_EXTENSIONS_ENABLE, + "Filtreer onbekende extensies") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NAVIGATION_WRAPAROUND, + "Navigatie Wrap-Around") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NEAREST, + "Nearest") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY, + "Netplay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_CHECK_FRAMES, + "Netplay Check Frames") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_CLIENT_SWAP_INPUT, + "Netplay P2 Uses C1") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_DELAY_FRAMES, + "Netplay Vertraging Frames") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_DISCONNECT, + "Disconnect") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE, + "Netplay Activeren") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE_CLIENT, + "Connect to Netplay host") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE_HOST, + "Start hosting") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_IP_ADDRESS, + "Server Adres") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_MODE, + "Netplay Client Activeren") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_NICKNAME, + "Gebruikersnaam") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_SETTINGS, + "Netplay settings") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_SPECTATOR_MODE_ENABLE, + "Netplay Spectator Activeren") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_TCP_UDP_PORT, + "Netplay TCP/UDP Poort") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_CMD_ENABLE, + "Netwerk Commando's") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_CMD_PORT, + "Netwerk Commando Poort") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_INFORMATION, + "Netwerk Informatie") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_REMOTE_ENABLE, + "Netwerk Gamepad") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_REMOTE_PORT, + "Netwerk Remote Base Port") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_SETTINGS, + "Netwerk") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO, + "Nee") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NONE, + "Geen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE, + "N.v.t") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_ACHIEVEMENTS_TO_DISPLAY, + "No achievements to display.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_CORE, + "No Core") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_CORES_AVAILABLE, + "No cores available.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_CORE_INFORMATION_AVAILABLE, + "Geen core informatie beschikbaar.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_CORE_OPTIONS_AVAILABLE, + "Geen core opties beschikbaar.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_ENTRIES_TO_DISPLAY, + "No entries to display.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_HISTORY_AVAILABLE, + "No history available.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_INFORMATION_AVAILABLE, + "Informatie is niet beschikbaar.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_ITEMS, + "Geen items.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_PERFORMANCE_COUNTERS, + "Geen prestatie tellers.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_PLAYLISTS, + "No playlists.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_PLAYLIST_ENTRIES_AVAILABLE, + "Geen afspeellijst items beschikbaar.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_SETTINGS_FOUND, + "Geen instellingen gevonden.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_SHADER_PARAMETERS, + "Geen shader parameters.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OFF, + "UIT") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ON, + "AAN") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ONLINE, + "Online") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ONLINE_UPDATER, + "Online Updater") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ONSCREEN_DISPLAY_SETTINGS, + "Onscreen Weergave") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ONSCREEN_OVERLAY_SETTINGS, + "Onscreen Overlay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ONSCREEN_NOTIFICATIONS_SETTINGS, + "Onscreen Notifications") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OPEN_ARCHIVE, + "Open Archief Als Map") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OPTIONAL, + "Optioneel") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY, + "Overlay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_AUTOLOAD_PREFERRED, + "Laad geprefeerd overlay autom.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_DIRECTORY, + "Overlay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_OPACITY, + "Overlay Transparantie") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_PRESET, + "Overlay Preset") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_SCALE, + "Overlay Schalering") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_SETTINGS, + "Onscreen Overlay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PAL60_ENABLE, + "PAL60 Mode Activeren") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PARENT_DIRECTORY, + "Parent directory") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PAUSE_LIBRETRO, + "Pauseer als menu op voorgrond is") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PAUSE_NONACTIVE, + "Laat niet in achtergrond draaien") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PERFCNT_ENABLE, + "Prestatie Teller") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLISTS_TAB, + "Afspeellijsten") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_DIRECTORY, + "Afspeellijst") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_SETTINGS, + "Playlists") +MSG_HASH(MENU_ENUM_LABEL_VALUE_POINTER_ENABLE, + "Touch Ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PORT, + "Poort") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PRESENT, + "Aanwezig") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PRIVACY_SETTINGS, + "Privacy") +MSG_HASH(MENU_ENUM_LABEL_VALUE_QUIT_RETROARCH, + "Quit RetroArch") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ANALOG, + "Analog supported") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_BBFC_RATING, + "BBFC Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_CERO_RATING, + "CERO Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_COOP, + "Co-op supported") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_CRC32, + "CRC32") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_DESCRIPTION, + "Omschrijving") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_DEVELOPER, + "Ontwikkelaar") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_EDGE_MAGAZINE_ISSUE, + "Edge Magazine Issue") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_EDGE_MAGAZINE_RATING, + "Edge Magazine Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_EDGE_MAGAZINE_REVIEW, + "Edge Magazine Review") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ELSPA_RATING, + "ELSPA Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ENHANCEMENT_HW, + "Enhancement Hardware") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ESRB_RATING, + "ESRB Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_FAMITSU_MAGAZINE_RATING, + "Famitsu Magazine Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_FRANCHISE, + "Franchise") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_GENRE, + "Genre") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_MD5, + "MD5") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_NAME, + "Naam") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ORIGIN, + "Afkomst") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_PEGI_RATING, + "PEGI Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_PUBLISHER, + "Uitgever") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_RELEASE_MONTH, + "Release datum Maand") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_RELEASE_YEAR, + "Release datum Jaar") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_RUMBLE, + "Rumble supported") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_SERIAL, + "Serial") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_SHA1, + "SHA1") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_START_CONTENT, + "Content Opstarten") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_TGDB_RATING, + "TGDB Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REBOOT, + "Reboot") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORDING_CONFIG_DIRECTORY, + "Opname Config Map") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORDING_OUTPUT_DIRECTORY, + "Opname Uitvoer Map") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORDING_SETTINGS, + "Opname") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORD_CONFIG, + "Laad Opname Configuratie...") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORD_DRIVER, + "Opname Driver") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORD_ENABLE, + "Opname Activeren") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORD_PATH, + "Uitvoer Bestand Opslaan Als...") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORD_USE_OUTPUT_DIRECTORY, + "Gebruik Uitvoer Map") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REMAP_FILE, + "Remap File") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REMAP_FILE_LOAD, + "Laad Remap Bestand") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_CORE, + "Core Remap Bestand Opslaan") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_GAME, + "Game Remap Bestand Opslaan") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REQUIRED, + "Vereist") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RESTART_CONTENT, + "Opnieuw opstarten") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RESTART_RETROARCH, + "RetroArch Opnieuw Opstarten") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RESUME, + "Hervatten") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RESUME_CONTENT, + "Hervatten") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RETROKEYBOARD, + "RetroKeyboard") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RETROPAD, + "RetroPad") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RETROPAD_WITH_ANALOG, + "RetroPad w/ Analog") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RETRO_ACHIEVEMENTS_SETTINGS, + "Achievements") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_ENABLE, + "Rewind Activeren") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_GRANULARITY, + "Rewind Granulariteit") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_SETTINGS, + "Rewind") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RGUI_BROWSER_DIRECTORY, + "Bestandsbeheer") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RGUI_CONFIG_DIRECTORY, + "Config") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RGUI_SHOW_START_SCREEN, + "Start Scherm Weergeven") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RIGHT_ANALOG, + "Rechtse Analog Stick") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RUN, + "Run") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAMBA_ENABLE, + "SAMBA Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVEFILE_DIRECTORY, + "Savebestand") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_INDEX, + "Save State Automatische Index") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_LOAD, + "Automatisch State Loaden") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_SAVE, + "Automatisch State Saven") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_DIRECTORY, + "Savestate") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVE_CURRENT_CONFIG, + "Huidige Configuratie Opslaan") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVE_CURRENT_CONFIG_OVERRIDE_CORE, + "Save Core Overrides") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVE_CURRENT_CONFIG_OVERRIDE_GAME, + "Save Game Overrides") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVE_NEW_CONFIG, + "Nieuwe configuratie opslaan") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVE_STATE, + "Save State") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVING_SETTINGS, + "Saving") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SCAN_DIRECTORY, + "Scan Directory") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SCAN_FILE, + "Scan Een Bestand") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SCAN_THIS_DIRECTORY, + "") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SCREENSHOT_DIRECTORY, + "Screenshot") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SCREEN_RESOLUTION, + "Scherm Resolutie") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SEARCH, + "Zoeken:") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SECONDS, + "secondes") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SETTINGS, + "Instellingen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SETTINGS_TAB, + "Instellingen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER, + "Shader") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_APPLY_CHANGES, + "Shader Instellingen Toepassen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_OPTIONS, + "Shaders") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_RIBBON, + "Ribbon") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_RIBBON_SIMPLIFIED, + "Ribbon (simplified)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_SIMPLE_SNOW, + "Simpel Sneeuw") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_SNOW, + "Sneeuw") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHOW_ADVANCED_SETTINGS, + "Geavanceerde Instellingen weergeven") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHOW_HIDDEN_FILES, + "Show Hidden Files and Folders") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHUTDOWN, + "Shutdown") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SLOWMOTION_RATIO, + "Slow-Motion Ratio") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SORT_SAVEFILES_ENABLE, + "Saves Sorteren In Map") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SORT_SAVESTATES_ENABLE, + "Savestates Sorteren In Map") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SSH_ENABLE, + "SSH Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_START_CORE, + "Start Core") +MSG_HASH(MENU_ENUM_LABEL_VALUE_START_NET_RETROPAD, + "Start Remote RetroPad") +MSG_HASH(MENU_ENUM_LABEL_VALUE_START_VIDEO_PROCESSOR, + "Start Video Processor") +MSG_HASH(MENU_ENUM_LABEL_VALUE_STATE_SLOT, + "State Slot") +MSG_HASH(MENU_ENUM_LABEL_VALUE_STATUS, + "Status") +MSG_HASH(MENU_ENUM_LABEL_VALUE_STDIN_CMD_ENABLE, + "stdin Commandos") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SUPPORTED_CORES, + "Supported cores") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SUSPEND_SCREENSAVER_ENABLE, + "Onderbreek Screensaver") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_BGM_ENABLE, + "Systeem BGM Activeren") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_DIRECTORY, + "Systeem/BIOS") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFORMATION, + "Systeem Informatie") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_7ZIP_SUPPORT, + "7zip ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_ALSA_SUPPORT, + "ALSA ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_BUILD_DATE, + "Build datum") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_CG_SUPPORT, + "Cg ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_COCOA_SUPPORT, + "Cocoa ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_COMMAND_IFACE_SUPPORT, + "Command interface ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_CORETEXT_SUPPORT, + "CoreText ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_CPU_FEATURES, + "CPU Eigenschappen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_DPI, + "Display metric DPI") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_MM_HEIGHT, + "Display metric hoogte (mm)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_MM_WIDTH, + "Display metric breedte (mm)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DSOUND_SUPPORT, + "DirectSound ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DYLIB_SUPPORT, + "Dynamic library ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DYNAMIC_SUPPORT, + "Dynamic run-time loading of libretro library") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_EGL_SUPPORT, + "EGL ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FBO_SUPPORT, + "OpenGL/Direct3D render-to-texture (multi-pass shaders) ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FFMPEG_SUPPORT, + "FFmpeg ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FREETYPE_SUPPORT, + "FreeType ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FRONTEND_IDENTIFIER, + "Frontend identificatie") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FRONTEND_NAME, + "Frontend naam") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FRONTEND_OS, + "Frontend OS") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_GIT_VERSION, + "Git versie") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_GLSL_SUPPORT, + "GLSL ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_HLSL_SUPPORT, + "HLSL ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_JACK_SUPPORT, + "JACK ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_KMS_SUPPORT, + "KMS/EGL ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBRETRODB_SUPPORT, + "LibretroDB ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT, + "Libusb ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBXML2_SUPPORT, + "libxml2 XML parsing ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_NETPLAY_SUPPORT, + "Netplay (peer-to-peer) ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_NETWORK_COMMAND_IFACE_SUPPORT, + "Network Command interface ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_NETWORK_REMOTE_SUPPORT, + "Network Gamepad ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENAL_SUPPORT, + "OpenAL ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENGLES_SUPPORT, + "OpenGL ES ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENGL_SUPPORT, + "OpenGL ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENSL_SUPPORT, + "OpenSL ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENVG_SUPPORT, + "OpenVG ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OSS_SUPPORT, + "OSS ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OVERLAY_SUPPORT, + "Overlay ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE, + "Energie bron") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_CHARGED, + "Opgeladen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_CHARGING, + "Opladen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_DISCHARGING, + "Discharging") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_NO_SOURCE, + "Geen bron") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PULSEAUDIO_SUPPORT, + "PulseAudio ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PYTHON_SUPPORT, + "Python (script ondersteuning in shaders) ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RBMP_SUPPORT, + "BMP ondersteuning (RBMP)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RETRORATING_LEVEL, + "RetroRating level") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RJPEG_SUPPORT, + "JPEG ondersteuning (RJPEG)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_ROARAUDIO_SUPPORT, + "RoarAudio ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RPNG_SUPPORT, + "PNG ondersteuning (RPNG)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RSOUND_SUPPORT, + "RSound ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RTGA_SUPPORT, + "TGA ondersteuning (RTGA)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL2_SUPPORT, + "SDL2 ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL_IMAGE_SUPPORT, + "SDL image ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL_SUPPORT, + "SDL1.2 ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SLANG_SUPPORT, + "Slang ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_THREADING_SUPPORT, + "Threading ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_UDEV_SUPPORT, + "Udev ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_V4L2_SUPPORT, + "Video4Linux2 ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_VIDEO_CONTEXT_DRIVER, + "Video context driver") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_VULKAN_SUPPORT, + "Vulkan ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_WAYLAND_SUPPORT, + "Wayland ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_X11_SUPPORT, + "X11 ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_XAUDIO2_SUPPORT, + "XAudio2 ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_XVIDEO_SUPPORT, + "XVideo ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_ZLIB_SUPPORT, + "Zlib ondersteuning") +MSG_HASH(MENU_ENUM_LABEL_VALUE_TAKE_SCREENSHOT, + "Schermafdruk") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THREADED_DATA_RUNLOOP_ENABLE, + "Threaded data runloop") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAILS, + "Thumbnails") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAILS_DIRECTORY, + "Thumbnails") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAILS_UPDATER_LIST, + "Thumbnails Updater") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_BOXARTS, + "Boxarts") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_SCREENSHOTS, + "Screenshots") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_TITLE_SCREENS, + "Title Screens") +MSG_HASH(MENU_ENUM_LABEL_VALUE_TIMEDATE_ENABLE, + "Tijd/datum weergeven") +MSG_HASH(MENU_ENUM_LABEL_VALUE_TITLE_COLOR, + "Menu titelkleur") +MSG_HASH(MENU_ENUM_LABEL_VALUE_TRUE, + "Waar") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UI_COMPANION_ENABLE, + "UI Companion Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UI_COMPANION_START_ON_BOOT, + "UI Companion Start Tijdens Boot") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UI_MENUBAR_ENABLE, + "Menubalk") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UNABLE_TO_READ_COMPRESSED_FILE, + "Fout opgetreden tijdens lezen van gecomprimeerd bestand.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UNDO_LOAD_STATE, + "Undo Load State") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UNDO_SAVE_STATE, + "Undo Save State") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UNKNOWN, + "Onbekend") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATER_SETTINGS, + "Updater") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_ASSETS, + "Update Assets") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_AUTOCONFIG_PROFILES, + "Update Autoconfiguratie Profielen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_CG_SHADERS, + "Update Cg Shaders") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_CHEATS, + "Update Cheats") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_CORE_INFO_FILES, + "Update Core Info Bestanden") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_DATABASES, + "Update Databases") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_GLSL_SHADERS, + "Update GLSL Shaders") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_LAKKA, + "Update Lakka") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_OVERLAYS, + "Update Overlays") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_SLANG_SHADERS, + "Update Slang Shaders") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USER, + "User") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USER_INTERFACE_SETTINGS, + "Gebruikersinterface") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USER_LANGUAGE, + "Taal") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USER_SETTINGS, + "Gebruiker") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USE_BUILTIN_IMAGE_VIEWER, + "Gebruik ingebouwde afbeeldingsweergave") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USE_BUILTIN_PLAYER, + "Gebruik ingebouwde media speler") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USE_THIS_DIRECTORY, + "") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_ALLOW_ROTATE, + "Rotatie toestaan") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_AUTO, + "Automatische Beeldverhouding") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_INDEX, + "Beeldverhouding Index") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_BLACK_FRAME_INSERTION, + "Zwarte Frame Injectie") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_CROP_OVERSCAN, + "Overscan Afsnijden (Herladen Vereist)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_DISABLE_COMPOSITION, + "Desktop Compositie Deactiveren") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_DRIVER, + "Video Driver") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FILTER, + "Video Filter") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FILTER_DIR, + "Video Filter") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FILTER_FLICKER, + "Flicker filter") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FONT_ENABLE, + "Onscreen Berichten Weergeven") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FONT_PATH, + "Onscreen Berichten Font") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FONT_SIZE, + "Onscreen Berichten Grootte") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FORCE_ASPECT, + "Forceer beeldverhouding") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FORCE_SRGB_DISABLE, + "Handmatig sRGB FBO Deactiveren") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FRAME_DELAY, + "Frame Delay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FULLSCREEN, + "Gebruil Fullscreen Mode") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_GAMMA, + "Video Gamma") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_GPU_RECORD, + "GPU Opname Activeren") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_GPU_SCREENSHOT, + "GPU Screenshots Activeren") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_HARD_SYNC, + "Harde GPU Synchronisatie") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_HARD_SYNC_FRAMES, + "Harde GPU Sync Frames") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_MAX_SWAPCHAIN_IMAGES, + "Max swapchain images") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_MESSAGE_POS_X, + "OSD Berichten X-as positie") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_MESSAGE_POS_Y, + "OSD Berichten Y-as positie") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_MONITOR_INDEX, + "Monitor Index") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_POST_FILTER_RECORD, + "Post Filter Opname Activeren") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_REFRESH_RATE, + "Vertical Refresh Rate") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_REFRESH_RATE_AUTO, + "Geschatte Monitor Framerate") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_ROTATION, + "Rotatie") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SCALE, + "Venster Schalering") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SCALE_INTEGER, + "Vierkantige schalering") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SETTINGS, + "Video") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_DIR, + "Video Shader") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_NUM_PASSES, + "Shader Passes") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PARAMETERS, + "Voorbeeldweergave Shader Parameters") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET, + "Load Shader Preset") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_PARAMETERS, + "Menu Shader Parameters") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_AS, + "Shader Preset Opslaan Als") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_CORE, + "Save Core Preset") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_GAME, + "Save Game Preset") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHARED_CONTEXT, + "Activeer Gedeelde Hardware Context") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SMOOTH, + "HW Bilinear Filtering") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SOFT_FILTER, + "Soft Filter Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SWAP_INTERVAL, + "Vertical Sync (Vsync) Swap Interval") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_TAB, + "Video") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_THREADED, + "Threaded Video") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VFILTER, + "Deflicker") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_HEIGHT, + "Handmatige Viewport Hoogte") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_WIDTH, + "Handmatige Viewport Breedte") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_X, + "Handmatige Viewport X Pos.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_Y, + "Handmatige Viewport Y Positie") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VI_WIDTH, + "VI Scherm Breedte Instellen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VSYNC, + "Verticale Sync (Vsync)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_WINDOWED_FULLSCREEN, + "Windowed Fullscreen Mode") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_WINDOW_WIDTH, + "Window Width") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_WINDOW_HEIGHT, + "Window Height") +MSG_HASH(MENU_ENUM_LABEL_VALUE_WIFI_DRIVER, + "Wi-Fi Driver") +MSG_HASH(MENU_ENUM_LABEL_VALUE_WIFI_SETTINGS, + "Wi-Fi") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ALPHA_FACTOR, + "Menu Alpha Factor") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_FONT, + "Menu Font") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_CUSTOM, + "Custom") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_FLATUI, + "FlatUI") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_MONOCHROME, + "Monochrome") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_SYSTEMATIC, + "Systematic") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_NEOACTIVE, + "NeoActive") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_PIXEL, + "Pixel") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_RETROACTIVE, + "RetroActive") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME, + "Menu Color Theme") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_APPLE_GREEN, + "Apple Green") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_DARK, + "Dark") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_DARK_PURPLE, + "Dark Purple") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_ELECTRIC_BLUE, + "Electric Blue") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_GOLDEN, + "Golden") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_LEGACY_RED, + "Legacy Red") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_MIDNIGHT_BLUE, + "Midnight Blue") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_PLAIN, + "Plain") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_UNDERSEA, + "Undersea") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_VOLCANIC_RED, + "Volcanic Red") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_RIBBON_ENABLE, + "Menu Shader Pipeline") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SCALE_FACTOR, + "Menu Scale Factor") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHADOWS_ENABLE, + "Icon Shadows Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_HISTORY, + "Show History Tab") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_IMAGES, + "Show Images Tab") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_MUSIC, + "Show Music Tab") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_SETTINGS, + "Show Settings Tab") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_VIDEO, + "Show Video Tab") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_THEME, + "Menu Icon Theme") +MSG_HASH(MENU_ENUM_LABEL_VALUE_YES, + "Ja") +MSG_HASH(MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_TWO, + "Shader Preset") +MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_ENABLE, + "Enable or disable achievements. For more information, visit http://retroachievements.org") +MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_TEST_UNOFFICIAL, + "Enable or disable unofficial achievements and/or beta features for testing purposes.") +MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_HARDCORE_MODE_ENABLE, + "Enable or disable savestates, cheats, rewind, fast-forward, pause, and slow-motion for all games.") +MSG_HASH(MENU_ENUM_SUBLABEL_DRIVER_SETTINGS, + "Change drivers for this system.") +MSG_HASH(MENU_ENUM_SUBLABEL_RETRO_ACHIEVEMENTS_SETTINGS, + "Change settings for the achievements.") +MSG_HASH(MENU_ENUM_SUBLABEL_CORE_SETTINGS, + "Change settings for the core.") +MSG_HASH(MENU_ENUM_SUBLABEL_RECORDING_SETTINGS, + "Change settings for the recording.") +MSG_HASH(MENU_ENUM_SUBLABEL_ONSCREEN_DISPLAY_SETTINGS, + "Change settings for display overlay, keyboard overlay and onscreen notifications.") +MSG_HASH(MENU_ENUM_SUBLABEL_FRAME_THROTTLE_SETTINGS, + "Change settings for rewinding, fast-forwarding, and slow-motion.") +MSG_HASH(MENU_ENUM_SUBLABEL_SAVING_SETTINGS, + "Change settings for the saving.") +MSG_HASH(MENU_ENUM_SUBLABEL_LOGGING_SETTINGS, + "Change settings for the logging.") +MSG_HASH(MENU_ENUM_SUBLABEL_USER_INTERFACE_SETTINGS, + "Change settings for the user interface.") +MSG_HASH(MENU_ENUM_SUBLABEL_USER_SETTINGS, + "Change accounts, username, and language.") +MSG_HASH(MENU_ENUM_SUBLABEL_PRIVACY_SETTINGS, + "Change your privacy settings.") +MSG_HASH(MENU_ENUM_SUBLABEL_DIRECTORY_SETTINGS, + "Change default directories for this system.") +MSG_HASH(MENU_ENUM_SUBLABEL_PLAYLIST_SETTINGS, + "Change settings for the playlists.") +MSG_HASH(MENU_ENUM_SUBLABEL_NETWORK_SETTINGS, + "Change settings for the network.") +MSG_HASH(MENU_ENUM_SUBLABEL_ADD_CONTENT_LIST, + "Scan contents and add to the database.") +MSG_HASH(MENU_ENUM_SUBLABEL_AUDIO_SETTINGS, + "Adjusts settings for audio output.") +MSG_HASH(MENU_ENUM_SUBLABEL_BLUETOOTH_ENABLE, + "Enable or disable bluetooth.") +MSG_HASH(MENU_ENUM_SUBLABEL_CONFIG_SAVE_ON_EXIT, + "Saves changes to configuration file on exit.") +MSG_HASH(MENU_ENUM_SUBLABEL_CONFIGURATION_SETTINGS, + "Change default settings for configuration files.") +MSG_HASH(MENU_ENUM_SUBLABEL_CONFIGURATIONS_LIST, + "Manage and create configuration files.") +MSG_HASH(MENU_ENUM_SUBLABEL_CPU_CORES, + "Amount of cores that the CPU has.") +MSG_HASH(MENU_ENUM_SUBLABEL_FPS_SHOW, + "Displays the current framerate per second onscreen.") +MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_HOTKEY_BINDS, + "Configure hotkey settings.") +MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO, + "Gamepad button combination to toggle menu.") +MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_SETTINGS, + "Adjusts settings for joypads, keyboard and mouse.") +MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_USER_BINDS, + "Configure controls for this user.") +MSG_HASH(MENU_ENUM_SUBLABEL_LOG_VERBOSITY, + "Enable or disable logging to the terminal.") +MSG_HASH(MENU_ENUM_SUBLABEL_NETPLAY, + "Join or host a netplay session.") +MSG_HASH(MENU_ENUM_SUBLABEL_INFORMATION_LIST_LIST, + "Display information for core, network, and system. Display manager for database and cursor.") +MSG_HASH(MENU_ENUM_SUBLABEL_ONLINE_UPDATER, + "Download add-ons, components and contents for RetroArch.") +MSG_HASH(MENU_ENUM_SUBLABEL_SAMBA_ENABLE, + "Enable or disable network sharing of your folders.") +MSG_HASH(MENU_ENUM_SUBLABEL_SERVICES_SETTINGS, + "Manage operating system level services.") +MSG_HASH(MENU_ENUM_SUBLABEL_SHOW_HIDDEN_FILES, + "Show hidden files/directories inside the file browser.") +MSG_HASH(MENU_ENUM_SUBLABEL_SSH_ENABLE, + "Enable or disable remote command line access.") +MSG_HASH(MENU_ENUM_SUBLABEL_SUSPEND_SCREENSAVER_ENABLE, + "Prevents your system's screensaver from becoming active.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_WINDOW_SCALE, + "Sets the window size relative to the core viewport size. Alternatively you can set a window width and height below for a fixed window size") +MSG_HASH(MENU_ENUM_SUBLABEL_USER_LANGUAGE, + "Sets the language of the interface.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, + "Inserts a black frame inbetween frames. Useful for users of 120 Hz monitors who want to play 60 Hz material with eliminated ghosting.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_FRAME_DELAY, + "Reduces latency at the cost of higher risk of video stuttering. Adds a delay after V-Sync (in ms).") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_HARD_SYNC_FRAMES, + "Sets how many frames the CPU can run ahead of the GPU when using 'Hard GPU Sync'.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_MAX_SWAPCHAIN_IMAGES, + "Tells the video driver to explicitly use a specified buffering mode.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_MONITOR_INDEX, + "Selects which display monitor to use.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_REFRESH_RATE_AUTO, + "The accurate estimated refresh rate of the monitor in Hz.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_SETTINGS, + "Adjusts settings for video output.") +MSG_HASH(MENU_ENUM_SUBLABEL_WIFI_SETTINGS, + "Scans for wireless networks and establishes connection.") +MSG_HASH(MENU_ENUM_SUBLABEL_HELP_LIST, + "Learn more about how it works.") +MSG_HASH(MSG_APPENDED_DISK, + "Appended disk") +MSG_HASH(MSG_APPLICATION_DIR, + "Application Dir") +MSG_HASH(MSG_APPLYING_CHEAT, + "Applying cheat changes.") +MSG_HASH(MSG_APPLYING_SHADER, + "Applying shader") +MSG_HASH(MSG_AUDIO_MUTED, + "Audio muted.") +MSG_HASH(MSG_AUDIO_UNMUTED, + "Audio unmuted.") +MSG_HASH(MSG_AUTOCONFIG_FILE_ERROR_SAVING, + "Error saving autoconf file.") +MSG_HASH(MSG_AUTOCONFIG_FILE_SAVED_SUCCESSFULLY, + "Autoconfig file saved successfully.") +MSG_HASH(MSG_AUTOSAVE_FAILED, + "Could not initialize autosave.") +MSG_HASH(MSG_AUTO_SAVE_STATE_TO, + "Auto save state to") +MSG_HASH(MSG_BLOCKING_SRAM_OVERWRITE, + "Blocking SRAM Overwrite") +MSG_HASH(MSG_BRINGING_UP_COMMAND_INTERFACE_ON_PORT, + "Bringing up command interface on port") +MSG_HASH(MSG_BYTES, + "bytes") +MSG_HASH(MSG_CANNOT_INFER_NEW_CONFIG_PATH, + "Cannot infer new config path. Use current time.") +MSG_HASH(MSG_CHEEVOS_HARDCORE_MODE_ENABLE, + "Hardcore Mode Enabled, savestate & rewind were disabled.") +MSG_HASH(MSG_COMPARING_WITH_KNOWN_MAGIC_NUMBERS, + "Comparing with known magic numbers...") +MSG_HASH(MSG_COMPILED_AGAINST_API, + "Compiled against API") +MSG_HASH(MSG_CONFIG_DIRECTORY_NOT_SET, + "Config directory not set. Cannot save new config.") +MSG_HASH(MSG_CONNECTED_TO, + "Connected to") +MSG_HASH(MSG_CONTENT_CRC32S_DIFFER, + "Content CRC32s differ. Cannot use different games.") +MSG_HASH(MSG_CONTENT_LOADING_SKIPPED_IMPLEMENTATION_WILL_DO_IT, + "Content loading skipped. Implementation will load it on its own.") +MSG_HASH(MSG_CORE_DOES_NOT_SUPPORT_SAVESTATES, + "Core does not support save states.") +MSG_HASH(MSG_CORE_OPTIONS_FILE_CREATED_SUCCESSFULLY, + "Core options file created successfully.") +MSG_HASH(MSG_COULD_NOT_FIND_ANY_NEXT_DRIVER, + "Could not find any next driver") +MSG_HASH(MSG_COULD_NOT_FIND_COMPATIBLE_SYSTEM, + "Could not find compatible system.") +MSG_HASH(MSG_COULD_NOT_FIND_VALID_DATA_TRACK, + "Could not find valid data track") +MSG_HASH(MSG_COULD_NOT_OPEN_DATA_TRACK, + "could not open data track") +MSG_HASH(MSG_COULD_NOT_READ_CONTENT_FILE, + "Could not read content file") +MSG_HASH(MSG_COULD_NOT_READ_MOVIE_HEADER, + "Could not read movie header.") +MSG_HASH(MSG_COULD_NOT_READ_STATE_FROM_MOVIE, + "Could not read state from movie.") +MSG_HASH(MSG_CRC32_CHECKSUM_MISMATCH, + "CRC32 checksum mismatch between content file and saved content checksum in replay file header) replay highly likely to desync on playback.") +MSG_HASH(MSG_CUSTOM_TIMING_GIVEN, + "Custom timing given") +MSG_HASH(MSG_DECOMPRESSION_ALREADY_IN_PROGRESS, + "Decompression already in progress.") +MSG_HASH(MSG_DECOMPRESSION_FAILED, + "Decompression failed.") +MSG_HASH(MSG_DETECTED_VIEWPORT_OF, + "Detected viewport of") +MSG_HASH(MSG_DID_NOT_FIND_A_VALID_CONTENT_PATCH, + "Did not find a valid content patch.") +MSG_HASH(MSG_DISCONNECT_DEVICE_FROM_A_VALID_PORT, + "Disconnect device from a valid port.") +MSG_HASH(MSG_DISK_CLOSED, + "Closed") +MSG_HASH(MSG_DISK_EJECTED, + "Ejected") +MSG_HASH(MSG_DOWNLOADING, + "Downloading") +MSG_HASH(MSG_DOWNLOAD_FAILED, + "Download failed") +MSG_HASH(MSG_ERROR, + "Error") +MSG_HASH(MSG_ERROR_LIBRETRO_CORE_REQUIRES_CONTENT, + "Libretro core requires content, but nothing was provided.") +MSG_HASH(MSG_ERROR_LIBRETRO_CORE_REQUIRES_SPECIAL_CONTENT, + "Libretro core requires special content, but none were provided.") +MSG_HASH(MSG_ERROR_PARSING_ARGUMENTS, + "Error parsing arguments.") +MSG_HASH(MSG_ERROR_SAVING_CORE_OPTIONS_FILE, + "Error saving core options file.") +MSG_HASH(MSG_ERROR_SAVING_REMAP_FILE, + "Error saving remap file.") +MSG_HASH(MSG_ERROR_SAVING_SHADER_PRESET, + "Error saving shader preset.") +MSG_HASH(MSG_EXTERNAL_APPLICATION_DIR, + "External Application Dir") +MSG_HASH(MSG_EXTRACTING, + "Extracting") +MSG_HASH(MSG_EXTRACTING_FILE, + "Extracting file") +MSG_HASH(MSG_FAILED_SAVING_CONFIG_TO, + "Failed saving config to") +MSG_HASH(MSG_FAILED_TO, + "Failed to") +MSG_HASH(MSG_FAILED_TO_ACCEPT_INCOMING_SPECTATOR, + "Failed to accept incoming spectator.") +MSG_HASH(MSG_FAILED_TO_ALLOCATE_MEMORY_FOR_PATCHED_CONTENT, + "Failed to allocate memory for patched content...") +MSG_HASH(MSG_FAILED_TO_APPLY_SHADER, + "Failed to apply shader.") +MSG_HASH(MSG_FAILED_TO_BIND_SOCKET, + "Failed to bind socket.") +MSG_HASH(MSG_FAILED_TO_CREATE_THE_DIRECTORY, + "Failed to create the directory.") +MSG_HASH(MSG_FAILED_TO_EXTRACT_CONTENT_FROM_COMPRESSED_FILE, + "Failed to extract content from compressed file") +MSG_HASH(MSG_FAILED_TO_GET_NICKNAME_FROM_CLIENT, + "Failed to get nickname from client.") +MSG_HASH(MSG_FAILED_TO_LOAD, + "Failed to load") +MSG_HASH(MSG_FAILED_TO_LOAD_CONTENT, + "Failed to load content") +MSG_HASH(MSG_FAILED_TO_LOAD_MOVIE_FILE, + "Failed to load movie file") +MSG_HASH(MSG_FAILED_TO_LOAD_OVERLAY, + "Failed to load overlay.") +MSG_HASH(MSG_FAILED_TO_LOAD_STATE, + "Failed to load state from") +MSG_HASH(MSG_FAILED_TO_OPEN_LIBRETRO_CORE, + "Failed to open libretro core") +MSG_HASH(MSG_FAILED_TO_PATCH, + "Failed to patch") +MSG_HASH(MSG_FAILED_TO_RECEIVE_HEADER_FROM_CLIENT, + "Failed to receive header from client.") +MSG_HASH(MSG_FAILED_TO_RECEIVE_NICKNAME, + "Failed to receive nickname.") +MSG_HASH(MSG_FAILED_TO_RECEIVE_NICKNAME_FROM_HOST, + "Failed to receive nickname from host.") +MSG_HASH(MSG_FAILED_TO_RECEIVE_NICKNAME_SIZE_FROM_HOST, + "Failed to receive nickname size from host.") +MSG_HASH(MSG_FAILED_TO_RECEIVE_SRAM_DATA_FROM_HOST, + "Failed to receive SRAM data from host.") +MSG_HASH(MSG_FAILED_TO_REMOVE_DISK_FROM_TRAY, + "Failed to remove disk from tray.") +MSG_HASH(MSG_FAILED_TO_REMOVE_TEMPORARY_FILE, + "Failed to remove temporary file") +MSG_HASH(MSG_FAILED_TO_SAVE_SRAM, + "Failed to save SRAM") +MSG_HASH(MSG_FAILED_TO_SAVE_STATE_TO, + "Failed to save state to") +MSG_HASH(MSG_FAILED_TO_SEND_NICKNAME, + "Failed to send nickname.") +MSG_HASH(MSG_FAILED_TO_SEND_NICKNAME_SIZE, + "Failed to send nickname size.") +MSG_HASH(MSG_FAILED_TO_SEND_NICKNAME_TO_CLIENT, + "Failed to send nickname to client.") +MSG_HASH(MSG_FAILED_TO_SEND_NICKNAME_TO_HOST, + "Failed to send nickname to host.") +MSG_HASH(MSG_FAILED_TO_SEND_SRAM_DATA_TO_CLIENT, + "Failed to send SRAM data to client.") +MSG_HASH(MSG_FAILED_TO_START_AUDIO_DRIVER, + "Failed to start audio driver. Will continue without audio.") +MSG_HASH(MSG_FAILED_TO_START_MOVIE_RECORD, + "Failed to start movie record.") +MSG_HASH(MSG_FAILED_TO_START_RECORDING, + "Failed to start recording.") +MSG_HASH(MSG_FAILED_TO_TAKE_SCREENSHOT, + "Failed to take screenshot.") +MSG_HASH(MSG_FAILED_TO_UNDO_LOAD_STATE, + "Failed to undo load state.") +MSG_HASH(MSG_FAILED_TO_UNDO_SAVE_STATE, + "Failed to undo save state.") +MSG_HASH(MSG_FAILED_TO_UNMUTE_AUDIO, + "Failed to unmute audio.") +MSG_HASH(MSG_FATAL_ERROR_RECEIVED_IN, + "Fatal error received in") +MSG_HASH(MSG_FILE_NOT_FOUND, + "File not found") +MSG_HASH(MSG_FOUND_AUTO_SAVESTATE_IN, + "Found auto savestate in") +MSG_HASH(MSG_FOUND_DISK_LABEL, + "Found disk label") +MSG_HASH(MSG_FOUND_FIRST_DATA_TRACK_ON_FILE, + "Found first data track on file") +MSG_HASH(MSG_FOUND_LAST_STATE_SLOT, + "Found last state slot") +MSG_HASH(MSG_FOUND_SHADER, + "Found shader") +MSG_HASH(MSG_FRAMES, + "Frames") +MSG_HASH(MSG_GAME_SPECIFIC_CORE_OPTIONS_FOUND_AT, + "Per-Game Options: game-specific core options found at") +MSG_HASH(MSG_GOT_INVALID_DISK_INDEX, + "Got invalid disk index.") +MSG_HASH(MSG_GRAB_MOUSE_STATE, + "Grab mouse state") +MSG_HASH(MSG_HW_RENDERED_MUST_USE_POSTSHADED_RECORDING, + "Libretro core is hardware rendered. Must use post-shaded recording as well.") +MSG_HASH(MSG_INFLATED_CHECKSUM_DID_NOT_MATCH_CRC32, + "Inflated checksum did not match CRC32.") +MSG_HASH(MSG_INPUT_CHEAT, + "Input Cheat") +MSG_HASH(MSG_INPUT_CHEAT_FILENAME, + "Cheat Filename") +MSG_HASH(MSG_INPUT_PRESET_FILENAME, + "Preset Filename") +MSG_HASH(MSG_INTERFACE, + "Interface") +MSG_HASH(MSG_INTERNAL_STORAGE, + "Internal Storage") +MSG_HASH(MSG_REMOVABLE_STORAGE, + "Removable Storage") +MSG_HASH(MSG_INVALID_NICKNAME_SIZE, + "Invalid nickname size.") +MSG_HASH(MSG_IN_BYTES, + "in bytes") +MSG_HASH(MSG_IN_GIGABYTES, + "in gigabytes") +MSG_HASH(MSG_IN_MEGABYTES, + "in megabytes") +MSG_HASH(MSG_LIBRETRO_ABI_BREAK, + "is compiled against a different version of libretro than this libretro implementation.") +MSG_HASH(MSG_LIBRETRO_FRONTEND, + "Frontend for libretro") +MSG_HASH(MSG_LOADED_STATE_FROM_SLOT, + "Loaded state from slot #%d.") +MSG_HASH(MSG_LOADED_STATE_FROM_SLOT_AUTO, + "Loaded state from slot #-1 (auto).") +MSG_HASH(MSG_LOADING, + "Loading") +MSG_HASH(MSG_FIRMWARE, + "One or more firmware files are missing") +MSG_HASH(MSG_LOADING_CONTENT_FILE, + "Loading content file") +MSG_HASH(MSG_LOADING_HISTORY_FILE, + "Loading history file") +MSG_HASH(MSG_LOADING_STATE, + "Loading state") +MSG_HASH(MSG_MEMORY, + "Memory") +MSG_HASH(MSG_MOVIE_FILE_IS_NOT_A_VALID_BSV1_FILE, + "Movie file is not a valid BSV1 file.") +MSG_HASH(MSG_MOVIE_FORMAT_DIFFERENT_SERIALIZER_VERSION, + "Movie format seems to have a different serializer version. Will most likely fail.") +MSG_HASH(MSG_MOVIE_PLAYBACK_ENDED, + "Movie playback ended.") +MSG_HASH(MSG_MOVIE_RECORD_STOPPED, + "Stopping movie record.") +MSG_HASH(MSG_NETPLAY_FAILED, + "Failed to initialize netplay.") +MSG_HASH(MSG_NETPLAY_FAILED_MOVIE_PLAYBACK_HAS_STARTED, + "Movie playback has started. Cannot start netplay.") +MSG_HASH(MSG_NO_CONTENT_STARTING_DUMMY_CORE, + "No content, starting dummy core.") +MSG_HASH(MSG_NO_SAVE_STATE_HAS_BEEN_OVERWRITTEN_YET, + "No save state has been overwritten yet.") +MSG_HASH(MSG_NO_STATE_HAS_BEEN_LOADED_YET, + "No state has been loaded yet.") +MSG_HASH(MSG_OVERRIDES_ERROR_SAVING, + "Error saving overrides.") +MSG_HASH(MSG_OVERRIDES_SAVED_SUCCESSFULLY, + "Overrides saved successfully.") +MSG_HASH(MSG_PAUSED, + "Paused.") +MSG_HASH(MSG_PROGRAM, + "RetroArch") +MSG_HASH(MSG_READING_FIRST_DATA_TRACK, + "Reading first data track...") +MSG_HASH(MSG_RECEIVED, + "received") +MSG_HASH(MSG_RECORDING_TERMINATED_DUE_TO_RESIZE, + "Recording terminated due to resize.") +MSG_HASH(MSG_RECORDING_TO, + "Recording to") +MSG_HASH(MSG_REDIRECTING_CHEATFILE_TO, + "Redirecting cheat file to") +MSG_HASH(MSG_REDIRECTING_SAVEFILE_TO, + "Redirecting save file to") +MSG_HASH(MSG_REDIRECTING_SAVESTATE_TO, + "Redirecting savestate to") +MSG_HASH(MSG_REMAP_FILE_SAVED_SUCCESSFULLY, + "Remap file saved successfully.") +MSG_HASH(MSG_REMOVED_DISK_FROM_TRAY, + "Removed disk from tray.") +MSG_HASH(MSG_REMOVING_TEMPORARY_CONTENT_FILE, + "Removing temporary content file") +MSG_HASH(MSG_RESET, + "Reset") +MSG_HASH(MSG_RESTARTING_RECORDING_DUE_TO_DRIVER_REINIT, + "Restarting recording due to driver reinit.") +MSG_HASH(MSG_RESTORED_OLD_SAVE_STATE, + "Restored old save state.") +MSG_HASH(MSG_RESTORING_DEFAULT_SHADER_PRESET_TO, + "Shaders: restoring default shader preset to") +MSG_HASH(MSG_REVERTING_SAVEFILE_DIRECTORY_TO, + "Reverting savefile directory to") +MSG_HASH(MSG_REVERTING_SAVESTATE_DIRECTORY_TO, + "Reverting savestate directory to") +MSG_HASH(MSG_REWINDING, + "Rewinding.") +MSG_HASH(MSG_REWIND_INIT, + "Initializing rewind buffer with size") +MSG_HASH(MSG_REWIND_INIT_FAILED, + "Failed to initialize rewind buffer. Rewinding will be disabled.") +MSG_HASH(MSG_REWIND_INIT_FAILED_THREADED_AUDIO, + "Implementation uses threaded audio. Cannot use rewind.") +MSG_HASH(MSG_REWIND_REACHED_END, + "Reached end of rewind buffer.") +MSG_HASH(MSG_SAVED_NEW_CONFIG_TO, + "Saved new config to") +MSG_HASH(MSG_SAVED_STATE_TO_SLOT, + "Saved state to slot #%d.") +MSG_HASH(MSG_SAVED_STATE_TO_SLOT_AUTO, + "Saved state to slot #-1 (auto).") +MSG_HASH(MSG_SAVED_SUCCESSFULLY_TO, + "Saved successfully to") +MSG_HASH(MSG_SAVING_RAM_TYPE, + "Saving RAM type") +MSG_HASH(MSG_SAVING_STATE, + "Saving state") +MSG_HASH(MSG_SCANNING, + "Scanning") +MSG_HASH(MSG_SCANNING_OF_DIRECTORY_FINISHED, + "Scanning of directory finished") +MSG_HASH(MSG_SENDING_COMMAND, + "Sending command") +MSG_HASH(MSG_SEVERAL_PATCHES_ARE_EXPLICITLY_DEFINED, + "Several patches are explicitly defined, ignoring all...") +MSG_HASH(MSG_SHADER, + "Shader") +MSG_HASH(MSG_SHADER_PRESET_SAVED_SUCCESSFULLY, + "Shader preset saved successfully.") +MSG_HASH(MSG_SKIPPING_SRAM_LOAD, + "Skipping SRAM load.") +MSG_HASH(MSG_SLOW_MOTION, + "Slow motion.") +MSG_HASH(MSG_SLOW_MOTION_REWIND, + "Slow motion rewind.") +MSG_HASH(MSG_SRAM_WILL_NOT_BE_SAVED, + "SRAM will not be saved.") +MSG_HASH(MSG_STARTING_MOVIE_PLAYBACK, + "Starting movie playback.") +MSG_HASH(MSG_STARTING_MOVIE_RECORD_TO, + "Starting movie record to") +MSG_HASH(MSG_STATE_SIZE, + "State size") +MSG_HASH(MSG_STATE_SLOT, + "State slot") +MSG_HASH(MSG_TAKING_SCREENSHOT, + "Taking screenshot.") +MSG_HASH(MSG_TO, + "to") +MSG_HASH(MSG_UNDID_LOAD_STATE, + "Undid load state.") +MSG_HASH(MSG_UNDOING_SAVE_STATE, + "Undoing save state") +MSG_HASH(MSG_UNKNOWN, + "Unknown") +MSG_HASH(MSG_UNPAUSED, + "Unpaused.") +MSG_HASH(MSG_UNRECOGNIZED_COMMAND, + "Unrecognized command") +MSG_HASH(MSG_USING_CORE_NAME_FOR_NEW_CONFIG, + "Using core name for new config.") +MSG_HASH(MSG_USING_LIBRETRO_DUMMY_CORE_RECORDING_SKIPPED, + "Using libretro dummy core. Skipping recording.") +MSG_HASH(MSG_VALUE_CONNECT_DEVICE_FROM_A_VALID_PORT, + "Connect device from a valid port.") +MSG_HASH(MSG_VALUE_DISCONNECTING_DEVICE_FROM_PORT, + "Disconnecting device from port") +MSG_HASH(MSG_VALUE_REBOOTING, + "Rebooting...") +MSG_HASH(MSG_VALUE_SHUTTING_DOWN, + "Shutting down...") +MSG_HASH(MSG_VERSION_OF_LIBRETRO_API, + "Version of libretro API") +MSG_HASH(MSG_VIEWPORT_SIZE_CALCULATION_FAILED, + "Viewport size calculation failed! Will continue using raw data. This will probably not work right ...") +MSG_HASH(MSG_VIRTUAL_DISK_TRAY, + "virtual disk tray.") +MSG_HASH(MENU_ENUM_SUBLABEL_AUDIO_LATENCY, + "Desired audio latency in milliseconds. Might not be honored if the audio driver can't provide given latency.") +MSG_HASH(MENU_ENUM_SUBLABEL_AUDIO_MUTE, + "Mute/unmute audio.") +MSG_HASH( + MENU_ENUM_SUBLABEL_AUDIO_RATE_CONTROL_DELTA, + "Helps smooth out imperfections in timing when synchronizing audio and video at the same time. Be aware that if disabled, proper synchronization is nearly impossible to obtain." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CAMERA_ALLOW, + "Allow or disallow camera access by cores." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_LOCATION_ALLOW, + "Allow or disallow location services access by cores." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_MAX_USERS, + "Maximum amount of users supported by RetroArch." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_POLL_TYPE_BEHAVIOR, + "Influence how input polling is done inside RetroArch. Setting it to 'Early' or 'Late' can result in less latency, depending on your configuration." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_ALL_USERS_CONTROL_MENU, + "Allows any user to control the menu. If disabled, only User 1 can control the menu." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_AUDIO_VOLUME, + "Audio volume (in dB). 0 dB is normal volume, no gain applied." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_AUDIO_SYNC, + "Synchronize audio. Recommended." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_AXIS_THRESHOLD, + "How far an axis must be tilted to result in a button press." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_BIND_TIMEOUT, + "Amount of seconds to wait until proceeding to the next bind." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_TURBO_PERIOD, + "Describes the period of which turbo-enabled buttons toggle. Numbers are described in frames." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_DUTY_CYCLE, + "Describes how long the period of a turbo-enabled button should be. Numbers are described in frames." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_VIDEO_VSYNC, + "Synchronizes the output video of the graphics card to the refresh rate of the monitor. Recommended." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_VIDEO_ALLOW_ROTATE, + "Allow cores to set rotation. When disabled, rotation requests are ignored. Useful for setups where one manually rotates the monitor." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_DUMMY_ON_CORE_SHUTDOWN, + "Some cores might have a shutdown feature. If enabled, it will prevent the core from shutting RetroArch down. Instead, it loads a dummy core." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CHECK_FOR_MISSING_FIRMWARE, + "Check if all the required firmware is present before attempting to load content." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_VIDEO_REFRESH_RATE, + "Vertical refresh rate of your monitor. Used to calculate a suitable audio input rate. NOTE: This will be ignored if 'Threaded Video' is enabled." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_AUDIO_ENABLE, + "Enable audio output." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_AUDIO_MAX_TIMING_SKEW, + "The maximum change in audio input rate. You may want to increase this to enable very large changes in timing, for example running PAL cores on NTSC displays, at the cost of inaccurate audio pitch." + ) +MSG_HASH( + MSG_FAILED, + "failed" + ) +MSG_HASH( + MSG_SUCCEEDED, + "succeeded" + ) +MSG_HASH( + MSG_DEVICE_NOT_CONFIGURED, + "not configured" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST, + "Database Cursor List" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_DEVELOPER, + "Database - Filter : Developer" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_PUBLISHER, + "Database - Filter : Publisher" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_DISABLED, + "Uitgeschakeld" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ENABLED, + "Ingeschakeld" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONTENT_HISTORY_PATH, + "Content History Path" + ) +MSG_HASH( + MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_ORIGIN, + "Database - Filter : Origin") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_FRANCHISE, + "Database - Filter : Franchise") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_ESRB_RATING, + "Database - Filter : ESRB Rating") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_ELSPA_RATING, + "Database - Filter : ELSPA Rating") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_PEGI_RATING, + "Database - Filter : PEGI Rating") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_CERO_RATING, + "Database - Filter : CERO Rating") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_BBFC_RATING, + "Database - Filter : BBFC Rating") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_MAX_USERS, + "Database - Filter : Max Users") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_RELEASEDATE_BY_MONTH, + "Database - Filter : Releasedate By Month") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_RELEASEDATE_BY_YEAR, + "Database - Filter : Releasedate By Year") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_EDGE_MAGAZINE_ISSUE, + "Database - Filter : Edge Magazine Issue") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_EDGE_MAGAZINE_RATING, + "Database - Filter : Edge Magazine Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_DATABASE_INFO, + "Database Info") +MSG_HASH(MENU_ENUM_SUBLABEL_PAUSE_NONACTIVE, + "Pause gameplay when window focus is lost.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_DISABLE_COMPOSITION, + "Enable or disable composition (Windows only).") +MSG_HASH(MENU_ENUM_SUBLABEL_HISTORY_LIST_ENABLE, + "Enable or disable recent playlist for games, images, music, and videos.") +MSG_HASH(MENU_ENUM_SUBLABEL_CONTENT_HISTORY_SIZE, + "Limit the number of entries in recent playlist for games, images, music, and videos.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_UNIFIED_MENU_CONTROLS, + "Unified Menu Controls") +MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_UNIFIED_MENU_CONTROLS, + "Use the same controls for both the menu and the game. Applies to the keyboard.") diff --git a/intl/msg_hash_pl.c b/intl/msg_hash_pl.c index e53dfa161b..c32a710bd4 100644 --- a/intl/msg_hash_pl.c +++ b/intl/msg_hash_pl.c @@ -136,10 +136,8 @@ const char *msg_hash_to_str_pl(enum msg_hash_enums msg) return "Oznaczenie rdzenia"; case MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_NAME: return "Nazwa rdzenia"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_NOTES: - return "Dodatkowe informacje o rdzeniu"; case MENU_ENUM_LABEL_VALUE_CORE_INFO_FIRMWARE: - return "Firmware"; + return "Firmware(s)"; case MENU_ENUM_LABEL_VALUE_CORE_INFO_LICENSES: return "Licencja(-e)"; case MENU_ENUM_LABEL_VALUE_CORE_INFO_PERMISSIONS: @@ -276,8 +274,6 @@ const char *msg_hash_to_str_pl(enum msg_hash_enums msg) return "Katalog autokonfiguracji kontrolerów gier"; case MENU_ENUM_LABEL_VALUE_JOYPAD_DRIVER: return "Kontroler gamepadów"; - case MENU_ENUM_LABEL_VALUE_KEYBOARD_OVERLAY_PRESET: - return "Preset klawiatury ekranowej"; case MENU_ENUM_LABEL_VALUE_LANG_CHINESE_SIMPLIFIED: return "chińśki (Uproszczony)"; case MENU_ENUM_LABEL_VALUE_LANG_CHINESE_TRADITIONAL: diff --git a/intl/msg_hash_pt.c b/intl/msg_hash_pt.c index 1218c80f1d..dcf67ab273 100644 --- a/intl/msg_hash_pt.c +++ b/intl/msg_hash_pt.c @@ -1074,10 +1074,8 @@ const char *msg_hash_to_str_pt(enum msg_hash_enums msg) return "Rótulo do core"; case MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_NAME: return "Nome do core"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_NOTES: - return "Notas do core"; case MENU_ENUM_LABEL_VALUE_CORE_INFO_FIRMWARE: - return "Firmware"; + return "Firmware(s)"; case MENU_ENUM_LABEL_VALUE_CORE_INFO_LICENSES: return "Licença(s)"; case MENU_ENUM_LABEL_VALUE_CORE_INFO_PERMISSIONS: @@ -1210,8 +1208,6 @@ const char *msg_hash_to_str_pt(enum msg_hash_enums msg) return "Autoconfigurações de Dispositivos de Entrada"; case MENU_ENUM_LABEL_VALUE_JOYPAD_DRIVER: return "Driver de Joypad"; - case MENU_ENUM_LABEL_VALUE_KEYBOARD_OVERLAY_PRESET: - return "Predefinições de Overlay de Teclado"; case MENU_ENUM_LABEL_VALUE_LANG_CHINESE_SIMPLIFIED: return "Chinês (Simplificado)"; case MENU_ENUM_LABEL_VALUE_LANG_CHINESE_TRADITIONAL: diff --git a/intl/msg_hash_ru.c b/intl/msg_hash_ru.c index 2044a6b9a7..d167ca995b 100644 --- a/intl/msg_hash_ru.c +++ b/intl/msg_hash_ru.c @@ -20,173 +20,7 @@ const char *msg_hash_to_str_ru(enum msg_hash_enums msg) { switch (msg) { - case MSG_APPENDED_DISK: - return "Вставлен диск"; -/* TODO */ - case MSG_APPLYING_CHEAT: - return "Applying cheat changes."; - case MSG_APPLYING_SHADER: - return "Применён шейдер"; - case MSG_AUDIO_MUTED: - return "Звук откл."; - case MSG_AUDIO_UNMUTED: - return "Звук вкл."; - case MSG_AUTOSAVE_FAILED: - return "Ошибка автосохранения."; - case MSG_BLOCKING_SRAM_OVERWRITE: - return "Перезапись SRAM запрещена."; - case MSG_BYTES: - return "байт"; - case MSG_CONFIG_DIRECTORY_NOT_SET: - return "Не задана папка хранения настроек. Невозможно сохранить конфигурацию."; - case MSG_CORE_DOES_NOT_SUPPORT_SAVESTATES: - return "Ядро не поддерживает быстрые сохранения."; - case MSG_COULD_NOT_READ_CONTENT_FILE: - return "Не удалось прочитать файл контента"; - case MSG_CUSTOM_TIMING_GIVEN: - return "Задано ручное значение тайминга."; - case MSG_DETECTED_VIEWPORT_OF: - return "Обнаружено окно проекции"; - case MSG_DOWNLOADING: - return "Прогресс загрузки"; - case MSG_FAILED_TO: - return "Ошибка"; - case MSG_FAILED_TO_APPLY_SHADER: - return "Не удалось применить шейдер"; - case MSG_FAILED_TO_LOAD_CONTENT: - return "Не удалось загрузить контент"; - case MSG_FAILED_TO_LOAD_MOVIE_FILE: - return "Не удалось загрузить файл записи."; - case MSG_FAILED_TO_LOAD_OVERLAY: - return "Ошибка загрузки оверлея."; - case MSG_FAILED_TO_LOAD_STATE: - return "Ошибка загрузки сохранения из"; - case MSG_FAILED_TO_REMOVE_DISK_FROM_TRAY: - return "Невозможно извлечь диск."; - case MSG_FAILED_TO_REMOVE_TEMPORARY_FILE: - return "Ошибка удаления временного файла."; - case MSG_FAILED_TO_SAVE_SRAM: - return "Ошибка сохранения SRAM"; - case MSG_FAILED_TO_SAVE_STATE_TO: - return "Ошибка записи сохранения в"; - case MSG_FAILED_TO_START_MOVIE_RECORD: - return "Невозможно начать запись видео."; - case MSG_FAILED_TO_START_RECORDING: - return "Невозможно начать запись."; - case MSG_FAILED_TO_TAKE_SCREENSHOT: - return "Невозможно создать скриншот."; - case MSG_FAILED_TO_UNMUTE_AUDIO: - return "Не удалось включить звук."; - case MSG_FOUND_SHADER: - return "Обнаружен шейдер"; - case MSG_GOT_INVALID_DISK_INDEX: - return "Задан неверный номер диска."; - case MSG_GRAB_MOUSE_STATE: - return "Режим перехвата мыши"; - case MSG_HW_RENDERED_MUST_USE_POSTSHADED_RECORDING: - return "Ядро использует аппаратный рендеринг. Включите запись с GPU."; - case MSG_LIBRETRO_ABI_BREAK: - return "скомпилировано для другой версии libretro."; - case MSG_LOADED_STATE_FROM_SLOT: - return "Загружено сохранение из слота #%d."; - case MSG_LOADED_STATE_FROM_SLOT_AUTO: - return "Загружено сохранение из слота #-1 (auto)."; - case MSG_LOADING_CONTENT_FILE: - return "Загружен файл контента"; - case MSG_LOADING_STATE: - return "Загружено сохранение"; - case MSG_MOVIE_PLAYBACK_ENDED: - return "Достигнут конец записи."; - case MSG_MOVIE_RECORD_STOPPED: - return "Запись остановлена."; - case MSG_NETPLAY_FAILED: - return "Ошибка запуска сетевой игры."; - case MSG_NETPLAY_FAILED_MOVIE_PLAYBACK_HAS_STARTED: - return "Воспроизведение записи. Невозможно начать сетевую игру."; - case MSG_PAUSED: - return "Пауза вкл."; - case MSG_PROGRAM: - return "RetroArch"; - case MSG_RECEIVED: - return "получено"; - case MSG_RECORDING_TERMINATED_DUE_TO_RESIZE: - return "Размеры окна были изменены. Запись остановлена."; - case MSG_RECORDING_TO: - return "Запись в"; - case MSG_REDIRECTING_CHEATFILE_TO: - return "Файл с чит-кодами перенаправлен в"; - case MSG_REDIRECTING_SAVEFILE_TO: - return "Файл карты памяти перенаправлен в"; - case MSG_REDIRECTING_SAVESTATE_TO: - return "Файл сохранения перенаправлен в"; - case MSG_REMOVED_DISK_FROM_TRAY: - return "Диск извлечён."; - case MSG_REMOVING_TEMPORARY_CONTENT_FILE: - return "Удалён временный файл контента"; - case MSG_RESET: - return "Сброс"; - case MSG_RESTARTING_RECORDING_DUE_TO_DRIVER_REINIT: - return "Реинициализация драйвера. Запись перезапущена."; - case MSG_REWINDING: - return "Перемотка."; - case MSG_REWIND_INIT: - return "Инициализация буфера перемотки с размером"; - case MSG_REWIND_INIT_FAILED: - return "Ошибка создания буфера перемотки. Перемотка будет отключена."; - case MSG_REWIND_INIT_FAILED_THREADED_AUDIO: - return "Ядро использует многопоточный звук. Перемотка невозможна."; - case MSG_REWIND_REACHED_END: - return "Достигнут предел буфера перемотки."; - case MSG_SAVED_STATE_TO_SLOT: - return "Сохранено в слот #%d."; - case MSG_SAVED_STATE_TO_SLOT_AUTO: - return "Сохранено в слот #-1 (auto)."; - case MSG_SAVED_SUCCESSFULLY_TO: - return "Успешно сохранено в"; - case MSG_SAVING_RAM_TYPE: - return "Запись RAM"; - case MSG_SAVING_STATE: - return "Сохранено"; - case MSG_SCANNING: - return "Сканирование"; - case MSG_SCANNING_OF_DIRECTORY_FINISHED: - return "Сканирование папки завершено"; - case MSG_SENDING_COMMAND: - return "Отправка команды"; - case MSG_SHADER: - return "Шейдер"; - case MSG_SKIPPING_SRAM_LOAD: - return "Пропуск загрузки SRAM."; - case MSG_SLOW_MOTION: - return "Замедление."; - case MSG_SLOW_MOTION_REWIND: - return "Замедленная перемотка."; - case MSG_SRAM_WILL_NOT_BE_SAVED: - return "Невозможно сохранить SRAM."; - case MSG_STARTING_MOVIE_PLAYBACK: - return "Воспроизведение записи."; - case MSG_STARTING_MOVIE_RECORD_TO: - return "Запись видео в"; - case MSG_STATE_SIZE: - return "Размер сохранения"; - case MSG_STATE_SLOT: - return "Слот сохранения"; - case MSG_TAKING_SCREENSHOT: - return "Скриншот сохранён."; - case MSG_TO: - return "в"; - case MSG_UNKNOWN: - return "Неизвестно."; - case MSG_UNPAUSED: - return "Пауза откл."; - case MSG_UNRECOGNIZED_COMMAND: - return "Неизвестная команда"; - case MSG_USING_LIBRETRO_DUMMY_CORE_RECORDING_SKIPPED: - return "Используется фиктивное ядро. Запись не производится."; - case MSG_VIEWPORT_SIZE_CALCULATION_FAILED: - return "Ошибка расчёта размеров окна проекции. Будут использованы необработанные данные. Возможны ошибки."; - case MSG_VIRTUAL_DISK_TRAY: - return "виртуальный лоток cd-привода"; + #include "msg_hash_ru.h" default: break; } diff --git a/intl/msg_hash_ru.h b/intl/msg_hash_ru.h new file mode 100644 index 0000000000..0ac4afd22c --- /dev/null +++ b/intl/msg_hash_ru.h @@ -0,0 +1,2245 @@ +MSG_HASH( + MSG_COMPILER, + "Compiler" + ) +MSG_HASH( + MSG_UNKNOWN_COMPILER, + "Unknown compiler" + ) +MSG_HASH( + MSG_DEVICE_DISCONNECTED_FROM_PORT, + "Device disconnected from port" + ) +MSG_HASH( + MSG_UNKNOWN_NETPLAY_COMMAND_RECEIVED, + "Unknown netplay command received" + ) +MSG_HASH( + MSG_FILE_ALREADY_EXISTS_SAVING_TO_BACKUP_BUFFER, + "File already exists. Saving to backup buffer" + ) +MSG_HASH( + MSG_GOT_CONNECTION_FROM, + "Got connection from: \"%s\"" + ) +MSG_HASH( + MSG_GOT_CONNECTION_FROM_NAME, + "Got connection from: \"%s (%s)\"" + ) +MSG_HASH( + MSG_NO_ARGUMENTS_SUPPLIED_AND_NO_MENU_BUILTIN, + "No arguments supplied and no menu builtin, displaying help..." + ) +MSG_HASH( + MSG_NETPLAY_USERS_HAS_FLIPPED, + "Netplay users has flipped" + ) +MSG_HASH( + MSG_SETTING_DISK_IN_TRAY, + "Setting disk in tray" + ) +MSG_HASH( + MSG_WAITING_FOR_CLIENT, + "Waiting for client ..." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_VIDEO_SHARED_CONTEXT, + "Give hardware-rendered cores their own private context. Avoids having to assume hardware state changes inbetween frames." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_MENU_SETTINGS, + "Adjusts settings related to the appearance of the menu screen." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_VIDEO_HARD_SYNC, + "Hard-synchronize the CPU and GPU. Reduces latency at the cost of performance." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_VIDEO_THREADED, + "Improves performance at the cost of latency and more video stuttering. Use only if you cannot obtain full speed otherwise." + ) +MSG_HASH( + MSG_AUDIO_VOLUME, + "Audio volume" + ) +MSG_HASH( + MSG_AUTODETECT, + "Autodetect" + ) +MSG_HASH( + MSG_AUTOLOADING_SAVESTATE_FROM, + "Auto-loading savestate from" + ) +MSG_HASH( + MSG_CAPABILITIES, + "Capabilities" + ) +MSG_HASH( + MSG_CONNECTING_TO_NETPLAY_HOST, + "Connecting to netplay host" + ) +MSG_HASH( + MSG_CONNECTING_TO_PORT, + "Connecting to port" + ) +MSG_HASH( + MSG_CONNECTION_SLOT, + "Connection slot" + ) +MSG_HASH( + MSG_SORRY_UNIMPLEMENTED_CORES_DONT_DEMAND_CONTENT_NETPLAY, + "Sorry, unimplemented: cores that don't demand content cannot participate in netplay." + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACCOUNTS_CHEEVOS_PASSWORD, + "Password" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACCOUNTS_CHEEVOS_SETTINGS, + "Accounts Cheevos" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACCOUNTS_CHEEVOS_USERNAME, + "Username" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACCOUNTS_LIST, + "Accounts" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACCOUNTS_LIST_END, + "Accounts List Endpoint" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACCOUNTS_RETRO_ACHIEVEMENTS, + "Retro Achievements" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_LIST, + "Achievement List" + ) + +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_LIST_HARDCORE, + "Achievement List (Hardcore)" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ADD_CONTENT_LIST, + "Scan Content" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONFIGURATIONS_LIST, + "Configurations" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ADD_TAB, + "Import content" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ARCHIVE_MODE, + "Archive File Association Action" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ASK_ARCHIVE, + "Ask" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ASSETS_DIRECTORY, + "Assets" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_BLOCK_FRAMES, + "Block Frames" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_DEVICE, + "Audio Device" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_DRIVER, + "Audio Driver" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_DSP_PLUGIN, + "Audio DSP Plugin" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_ENABLE, + "Audio Enable" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_FILTER_DIR, + "Audio Filter" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_TURBO_DEADZONE_LIST, + "Turbo/Deadzone" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_LATENCY, + "Audio Latency (ms)" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_MAX_TIMING_SKEW, + "Audio Maximum Timing Skew" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_MUTE, + "Audio Mute" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_OUTPUT_RATE, + "Audio Output Rate (KHz)" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_RATE_CONTROL_DELTA, + "Dynamic Audio Rate Control" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_RESAMPLER_DRIVER, + "Audio Resampler Driver" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_SETTINGS, + "Audio" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_SYNC, + "Audio Sync Enable" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_VOLUME, + "Audio Volume Level (dB)" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUTOSAVE_INTERVAL, + "SaveRAM Autosave Interval" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUTO_OVERRIDES_ENABLE, + "Load Override Files Automatically" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUTO_REMAPS_ENABLE, + "Load Remap Files Automatically" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUTO_SHADERS_ENABLE, + "Load Shader Presets Automatically" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_BACK, + "Back" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_CONFIRM, + "Confirm" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_INFO, + "Info" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_QUIT, + "Quit" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_SCROLL_DOWN, + "Scroll Down" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_SCROLL_UP, + "Scroll Up" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_START, + "Start" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_TOGGLE_KEYBOARD, + "Toggle Keyboard" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_TOGGLE_MENU, + "Toggle Menu" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS, + "Basic menu controls" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_CONFIRM, + "Confirm/OK" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_INFO, + "Info" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_QUIT, + "Quit" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_SCROLL_UP, + "Scroll Up" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_START, + "Defaults" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_TOGGLE_KEYBOARD, + "Toggle Keyboard" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_TOGGLE_MENU, + "Toggle Menu" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BLOCK_SRAM_OVERWRITE, + "Don't overwrite SaveRAM on loading savestate" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BLUETOOTH_ENABLE, + "Bluetooth Enable" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BUILDBOT_ASSETS_URL, + "Buildbot Assets URL" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CACHE_DIRECTORY, + "Cache" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CAMERA_ALLOW, + "Allow Camera" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CAMERA_DRIVER, + "Camera Driver" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT, + "Cheat" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT_APPLY_CHANGES, + "Apply Cheat Changes" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT_DATABASE_PATH, + "Cheat File" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT_FILE, + "Cheat File" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT_FILE_LOAD, + "Load Cheat File" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT_FILE_SAVE_AS, + "Save Cheat File As" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEAT_NUM_PASSES, + "Cheat Passes" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_DESCRIPTION, + "Description" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_HARDCORE_MODE_ENABLE, + "Achievements Hardcore Mode" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_LOCKED_ACHIEVEMENTS, + "Locked Achievements:" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_LOCKED_ENTRY, + "Locked" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_SETTINGS, + "Retro Achievements" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_TEST_UNOFFICIAL, + "Test Unofficial Achievements" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_UNLOCKED_ACHIEVEMENTS, + "Unlocked Achievements:" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_UNLOCKED_ENTRY, + "Unlocked" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CLOSE_CONTENT, + "Close" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONFIG, + "Config" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONFIGURATIONS, + "Load Configuration" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONFIGURATION_SETTINGS, + "Configuration" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONFIG_SAVE_ON_EXIT, + "Save Configuration on Exit" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONTENT_COLLECTION_LIST, + "Collections" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONTENT_DATABASE_DIRECTORY, + "Content Database" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONTENT_DIR, + "Content" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONTENT_HISTORY_SIZE, + "History List Size") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CONTENT_SETTINGS, + "Quick Menu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_ASSETS_DIR, + "Core Assets") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_ASSETS_DIRECTORY, + "Downloads") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_CHEAT_OPTIONS, + "Cheats") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_COUNTERS, + "Core Counters") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_ENABLE, + "Display core name") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFORMATION, + "Core Information") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_AUTHORS, + "Authors") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_CATEGORIES, + "Categories") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_LABEL, + "Core label") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_NAME, + "Core name") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_FIRMWARE, + "Firmware(s)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_LICENSES, + "License(s)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_PERMISSIONS, + "Permissions") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_SUPPORTED_EXTENSIONS, + "Supported extensions") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_SYSTEM_MANUFACTURER, + "System manufacturer") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_SYSTEM_NAME, + "System name") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INPUT_REMAPPING_OPTIONS, + "Controls") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_LIST, + "Load Core") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_OPTIONS, + "Options") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_SETTINGS, + "Core") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_SET_SUPPORTS_NO_CONTENT_ENABLE, + "Start a Core Automatically") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_SPECIFIC_CONFIG, + "Configuration Per-Core") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_UPDATER_AUTO_EXTRACT_ARCHIVE, + "Automatically extract downloaded archive") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_UPDATER_BUILDBOT_URL, + "Buildbot Cores URL") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_UPDATER_LIST, + "Core Updater") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_UPDATER_SETTINGS, + "Updater") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CPU_ARCHITECTURE, + "CPU Architecture:") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CPU_CORES, + "CPU Cores:") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CURSOR_DIRECTORY, + "Cursor") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CURSOR_MANAGER, + "Cursor Manager") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CUSTOM_RATIO, + "Custom Ratio") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_MANAGER, + "Database Manager") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_SELECTION, + "Database Selection") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DELETE_ENTRY, + "Remove") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DETECT_CORE_LIST, + "Select File And Detect Core") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_CONTENT, + "") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_DEFAULT, + "") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_NONE, + "") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_NOT_FOUND, + "Directory not found.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_SETTINGS, + "Directory") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DISK_CYCLE_TRAY_STATUS, + "Disk Cycle Tray Status") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DISK_IMAGE_APPEND, + "Disk Image Append") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DISK_INDEX, + "Disk Index") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DISK_OPTIONS, + "Disk Control") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DONT_CARE, + "Don't care") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DOWNLOADED_FILE_DETECT_CORE_LIST, + "Downloads") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DOWNLOAD_CORE, + "Download Core...") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DOWNLOAD_CORE_CONTENT, + "Content Downloader") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DPI_OVERRIDE_ENABLE, + "DPI Override Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DPI_OVERRIDE_VALUE, + "DPI Override") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DRIVER_SETTINGS, + "Driver") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DUMMY_ON_CORE_SHUTDOWN, + "Load Dummy on Core Shutdown") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPER, + "Dynamic Wallpaper") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPERS_DIRECTORY, + "Dynamic Wallpapers") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CHEEVOS_ENABLE, + "Enable Achievements") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ENTRY_HOVER_COLOR, + "Menu entry hover color") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ENTRY_NORMAL_COLOR, + "Menu entry normal color") +MSG_HASH(MENU_ENUM_LABEL_VALUE_FALSE, + "False") +MSG_HASH(MENU_ENUM_LABEL_VALUE_FASTFORWARD_RATIO, + "Maximum Run Speed") +MSG_HASH(MENU_ENUM_LABEL_VALUE_FPS_SHOW, + "Display Framerate") +MSG_HASH(MENU_ENUM_LABEL_VALUE_FRAME_THROTTLE_ENABLE, + "Limit Maximum Run Speed") +MSG_HASH(MENU_ENUM_LABEL_VALUE_FRAME_THROTTLE_SETTINGS, + "Frame Throttle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_FRONTEND_COUNTERS, + "Frontend Counters") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_OPTIONS, + "Load Content-Specific Core Options Automatically") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_OPTIONS_CREATE, + "Create game-options file") +MSG_HASH(MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_OPTIONS_IN_USE, + "Game-options file") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP, + "help") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_AUDIO_VIDEO_TROUBLESHOOTING, + "Audio/Video Troubleshooting") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_CHANGE_VIRTUAL_GAMEPAD, + "Changing Virtual Gamepad Overlay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_CONTROLS, + "Basic Menu Controls") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_LIST, + "Help") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_LOADING_CONTENT, + "Loading Content") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_SCANNING_CONTENT, + "Scanning For Content") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_WHAT_IS_A_CORE, + "What Is A Core?") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HISTORY_LIST_ENABLE, + "History List Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HISTORY_TAB, + "History") +MSG_HASH(MENU_ENUM_LABEL_VALUE_HORIZONTAL_MENU, + "Horizontal Menu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_IMAGES_TAB, + "Images") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INFORMATION, + "Information") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INFORMATION_LIST, + "Information") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ADC_TYPE, + "Analog To Digital Type") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ALL_USERS_CONTROL_MENU, + "All Users Control Menu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_X, + "Left Analog X") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_X_MINUS, + "Left analog X- (left)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_X_PLUS, + "Left analog X+ (right)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_Y, + "Left Analog Y") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_Y_MINUS, + "Left analog Y- (up)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_LEFT_Y_PLUS, + "Left analog Y+ (down)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_X, + "Right Analog X") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_X_MINUS, + "Right analog X- (left)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_X_PLUS, + "Right analog X+ (right)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_Y, + "Right Analog Y") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_Y_MINUS, + "Right analog Y- (up)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_Y_PLUS, + "Right analog Y+ (down)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_AUTODETECT_ENABLE, + "Autoconfig Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_AXIS_THRESHOLD, + "Analog Stick Deadzone") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_INPUT_SWAP_OK_CANCEL, + "Menu Swap Ok & Cancel Buttons") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_ALL, + "Bind All") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_DEFAULT_ALL, + "Bind Default All") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_TIMEOUT, + "Bind Timeout") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_HIDE_UNBOUND, + "Hide Unbound Core Input Descriptors") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_LABEL_SHOW, + "Display Input Descriptor Labels") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DEVICE_INDEX, + "Device Index") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DEVICE_TYPE, + "Device Type") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DRIVER, + "Input Driver") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DUTY_CYCLE, + "Duty Cycle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_HOTKEY_BINDS, + "Input Hotkey Binds") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ICADE_ENABLE, + "Keyboard Gamepad Mapping Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_A, + "A button (right)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_B, + "B button (down)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_DOWN, + "Down D-pad") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_L2, + "L2 button (trigger)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_L3, + "L3 button (thumb)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_L, + "L button (shoulder)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_LEFT, + "Left D-pad") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_R2, + "R2 button (trigger)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_R3, + "R3 button (thumb)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_R, + "R button (shoulder)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_RIGHT, + "Right D-pad") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_SELECT, + "Select button") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_START, + "Start button") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_UP, + "Up D-pad") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_X, + "X button (top)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_JOYPAD_Y, + "Y button (left)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_KEY, + "(Key: %s)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_KEYBOARD_GAMEPAD_MAPPING_TYPE, + "Keyboard Gamepad Mapping Type") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_MAX_USERS, + "Max Users") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO, + "Menu Toggle Gamepad Combo") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_CHEAT_INDEX_MINUS, + "Cheat index -") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_CHEAT_INDEX_PLUS, + "Cheat index +") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_CHEAT_TOGGLE, + "Cheat toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_DISK_EJECT_TOGGLE, + "Disk eject toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_DISK_NEXT, + "Disk next") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_DISK_PREV, + "Disk prev") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_ENABLE_HOTKEY, + "Enable hotkeys") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_FAST_FORWARD_HOLD_KEY, + "Fast forward hold") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_FAST_FORWARD_KEY, + "Fast forward toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_FRAMEADVANCE, + "Frameadvance") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_FULLSCREEN_TOGGLE_KEY, + "Fullscreen toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_GRAB_MOUSE_TOGGLE, + "Grab mouse toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_LOAD_STATE_KEY, + "Load state") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_MENU_TOGGLE, + "Menu toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_MOVIE_RECORD_TOGGLE, + "Movie record toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_MUTE, + "Audio mute toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_NETPLAY_FLIP, + "Netplay flip users") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_OSK, + "On-screen keyboard toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_OVERLAY_NEXT, + "Overlay next") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_PAUSE_TOGGLE, + "Pause toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_QUIT_KEY, + "Quit RetroArch") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_RESET, + "Reset game") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_REWIND, + "Rewind") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_SAVE_STATE_KEY, + "Save state") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_SCREENSHOT, + "Take screenshot") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_SHADER_NEXT, + "Next shader") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_SHADER_PREV, + "Previous shader") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_SLOWMOTION, + "Slow motion") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_STATE_SLOT_MINUS, + "Savestate slot -") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_STATE_SLOT_PLUS, + "Savestate slot +") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_VOLUME_DOWN, + "Volume -") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_VOLUME_UP, + "Volume +") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_ENABLE, + "Display Overlay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_HIDE_IN_MENU, + "Hide Overlay In Menu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR, + "Poll Type Behavior") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR_EARLY, + "Early") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR_LATE, + "Late") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR_NORMAL, + "Normal") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_PREFER_FRONT_TOUCH, + "Prefer Front Touch") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_REMAPPING_DIRECTORY, + "Input Remapping") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_REMAP_BINDS_ENABLE, + "Remap Binds Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_SAVE_AUTOCONFIG, + "Save Autoconfig") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_SETTINGS, + "Input") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_SMALL_KEYBOARD_ENABLE, + "Small Keyboard Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_TOUCH_ENABLE, + "Touch Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_TURBO_ENABLE, + "Turbo enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_TURBO_PERIOD, + "Turbo Period") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_USER_BINDS, + "Input User %u Binds") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INTERNAL_STORAGE_STATUS, + "Internal storage status") +MSG_HASH(MENU_ENUM_LABEL_VALUE_JOYPAD_AUTOCONFIG_DIR, + "Input Autoconfig") +MSG_HASH(MENU_ENUM_LABEL_VALUE_JOYPAD_DRIVER, + "Joypad Driver") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LAKKA_SERVICES, + "Services") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_CHINESE_SIMPLIFIED, + "Chinese (Simplified)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_CHINESE_TRADITIONAL, + "Chinese (Traditional)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_DUTCH, + "Dutch") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_ENGLISH, + "English") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_ESPERANTO, + "Esperanto") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_FRENCH, + "French") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_GERMAN, + "German") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_ITALIAN, + "Italian") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_JAPANESE, + "Japanese") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_KOREAN, + "Korean") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_POLISH, + "Polish") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_PORTUGUESE, + "Portuguese") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_RUSSIAN, + "Russian") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_SPANISH, + "Spanish") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_VIETNAMESE, + "Vietnamese") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LEFT_ANALOG, + "Left Analog") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LIBRETRO_DIR_PATH, + "Core") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LIBRETRO_INFO_PATH, + "Core Info") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LIBRETRO_LOG_LEVEL, + "Core Logging Level") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LINEAR, + "Linear") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_ARCHIVE, + "Load Archive With Core") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_CONTENT, + "Select File") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_HISTORY, + "Load Recent") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_LIST, + "Load Content") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_STATE, + "Load State") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOCATION_ALLOW, + "Allow Location") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOCATION_DRIVER, + "Location Driver") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOGGING_SETTINGS, + "Logging") +MSG_HASH(MENU_ENUM_LABEL_VALUE_LOG_VERBOSITY, + "Logging Verbosity") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MAIN_MENU, + "Main Menu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MANAGEMENT, + "Database Settings") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME, + "Menu Color Theme") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_BLUE, + "Blue") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_BLUE_GREY, + "Blue Grey") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_DARK_BLUE, + "Dark Blue") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_GREEN, + "Green") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_NVIDIA_SHIELD, + "Shield") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_RED, + "Red") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_YELLOW, + "Yellow") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_FOOTER_OPACITY, + "Footer Opacity") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_HEADER_OPACITY, + "Header Opacity") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_DRIVER, + "Menu Driver") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_ENUM_THROTTLE_FRAMERATE, + "Throttle Menu Framerate") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FILE_BROWSER_SETTINGS, + "Menu File Browser") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_LINEAR_FILTER, + "Menu Linear Filter") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_SETTINGS, + "Menu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_WALLPAPER, + "Background") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_WALLPAPER_OPACITY, + "Background opacity") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MISSING, + "Missing") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MORE, + "...") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MOUSE_ENABLE, + "Mouse Support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MULTIMEDIA_SETTINGS, + "Multimedia") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MUSIC_TAB, + "Music") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NAVIGATION_BROWSER_FILTER_SUPPORTED_EXTENSIONS_ENABLE, + "Filter unknown extensions") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NAVIGATION_WRAPAROUND, + "Navigation Wrap-Around") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NEAREST, + "Nearest") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY, + "Netplay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_CHECK_FRAMES, + "Netplay Check Frames") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_CLIENT_SWAP_INPUT, + "Netplay P2 Uses C1") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_DELAY_FRAMES, + "Netplay Delay Frames") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_DISCONNECT, + "Disconnect") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE, + "Netplay Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE_CLIENT, + "Connect to Netplay host") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE_HOST, + "Start hosting") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_IP_ADDRESS, + "Server Address") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_MODE, + "Netplay Client Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_NICKNAME, + "Username") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_SETTINGS, + "Netplay settings") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_SPECTATOR_MODE_ENABLE, + "Netplay Spectator Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_TCP_UDP_PORT, + "Netplay TCP/UDP Port") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_CMD_ENABLE, + "Network Commands") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_CMD_PORT, + "Network Command Port") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_INFORMATION, + "Network Information") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_REMOTE_ENABLE, + "Network Gamepad") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_REMOTE_PORT, + "Network Remote Base Port") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_SETTINGS, + "Network") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO, + "No") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NONE, + "None") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE, + "N/A") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_ACHIEVEMENTS_TO_DISPLAY, + "No achievements to display.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_CORE, + "No Core") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_CORES_AVAILABLE, + "No cores available.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_CORE_INFORMATION_AVAILABLE, + "No core information available.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_CORE_OPTIONS_AVAILABLE, + "No core options available.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_ENTRIES_TO_DISPLAY, + "No entries to display.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_HISTORY_AVAILABLE, + "No history available.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_INFORMATION_AVAILABLE, + "No information is available.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_ITEMS, + "No items.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_PERFORMANCE_COUNTERS, + "No performance counters.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_PLAYLISTS, + "No playlists.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_PLAYLIST_ENTRIES_AVAILABLE, + "No playlist entries available.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_SETTINGS_FOUND, + "No settings found.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_SHADER_PARAMETERS, + "No shader parameters.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OFF, + "OFF") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ON, + "ON") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ONLINE, + "Online") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ONLINE_UPDATER, + "Online Updater") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ONSCREEN_DISPLAY_SETTINGS, + "Onscreen Display") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ONSCREEN_OVERLAY_SETTINGS, + "Onscreen Overlay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ONSCREEN_NOTIFICATIONS_SETTINGS, + "Onscreen Notifications") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OPEN_ARCHIVE, + "Open Archive As Folder") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OPTIONAL, + "Optional") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY, + "Overlay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_AUTOLOAD_PREFERRED, + "Autoload Preferred Overlay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_DIRECTORY, + "Overlay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_OPACITY, + "Overlay Opacity") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_PRESET, + "Overlay Preset") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_SCALE, + "Overlay Scale") +MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_SETTINGS, + "Onscreen Overlay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PAL60_ENABLE, + "Use PAL60 Mode") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PARENT_DIRECTORY, + "Parent directory") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PAUSE_LIBRETRO, + "Pause when menu activated") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PAUSE_NONACTIVE, + "Don't run in background") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PERFCNT_ENABLE, + "Performance Counters") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLISTS_TAB, + "Playlists") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_DIRECTORY, + "Playlist") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_SETTINGS, + "Playlists") +MSG_HASH(MENU_ENUM_LABEL_VALUE_POINTER_ENABLE, + "Touch Support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PORT, + "Port") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PRESENT, + "Present") +MSG_HASH(MENU_ENUM_LABEL_VALUE_PRIVACY_SETTINGS, + "Privacy") +MSG_HASH(MENU_ENUM_LABEL_VALUE_QUIT_RETROARCH, + "Quit RetroArch") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ANALOG, + "Analog supported") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_BBFC_RATING, + "BBFC Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_CERO_RATING, + "CERO Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_COOP, + "Co-op supported") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_CRC32, + "CRC32") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_DESCRIPTION, + "Description") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_DEVELOPER, + "Developer") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_EDGE_MAGAZINE_ISSUE, + "Edge Magazine Issue") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_EDGE_MAGAZINE_RATING, + "Edge Magazine Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_EDGE_MAGAZINE_REVIEW, + "Edge Magazine Review") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ELSPA_RATING, + "ELSPA Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ENHANCEMENT_HW, + "Enhancement Hardware") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ESRB_RATING, + "ESRB Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_FAMITSU_MAGAZINE_RATING, + "Famitsu Magazine Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_FRANCHISE, + "Franchise") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_GENRE, + "Genre") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_MD5, + "MD5") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_NAME, + "Name") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ORIGIN, + "Origin") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_PEGI_RATING, + "PEGI Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_PUBLISHER, + "Publisher") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_RELEASE_MONTH, + "Releasedate Month") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_RELEASE_YEAR, + "Releasedate Year") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_RUMBLE, + "Rumble supported") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_SERIAL, + "Serial") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_SHA1, + "SHA1") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_START_CONTENT, + "Start Content") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_TGDB_RATING, + "TGDB Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REBOOT, + "Reboot") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORDING_CONFIG_DIRECTORY, + "Recording Config") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORDING_OUTPUT_DIRECTORY, + "Recording Output") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORDING_SETTINGS, + "Recording") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORD_CONFIG, + "Load Recording Config...") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORD_DRIVER, + "Record Driver") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORD_ENABLE, + "Enable Recording") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORD_PATH, + "Save Output Recording as...") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORD_USE_OUTPUT_DIRECTORY, + "Save Recordings in Output Dir") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REMAP_FILE, + "Remap File") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REMAP_FILE_LOAD, + "Load Remap File") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_CORE, + "Save Core Remap File") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_GAME, + "Save Game Remap File") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REQUIRED, + "Required") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RESTART_CONTENT, + "Restart") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RESTART_RETROARCH, + "Restart RetroArch") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RESUME, + "Resume") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RESUME_CONTENT, + "Resume") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RETROKEYBOARD, + "RetroKeyboard") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RETROPAD, + "RetroPad") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RETROPAD_WITH_ANALOG, + "RetroPad w/ Analog") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RETRO_ACHIEVEMENTS_SETTINGS, + "Achievements") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_ENABLE, + "Rewind Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_GRANULARITY, + "Rewind Granularity") +MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_SETTINGS, + "Rewind") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RGUI_BROWSER_DIRECTORY, + "File Browser") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RGUI_CONFIG_DIRECTORY, + "Config") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RGUI_SHOW_START_SCREEN, + "Show Start Screen") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RIGHT_ANALOG, + "Right Analog") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RUN, + "Run") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAMBA_ENABLE, + "SAMBA Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVEFILE_DIRECTORY, + "Savefile") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_INDEX, + "Save State Auto Index") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_LOAD, + "Auto Load State") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_SAVE, + "Auto Save State") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_DIRECTORY, + "Savestate") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVE_CURRENT_CONFIG, + "Save Current Configuration") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVE_CURRENT_CONFIG_OVERRIDE_CORE, + "Save Core Overrides") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVE_CURRENT_CONFIG_OVERRIDE_GAME, + "Save Game Overrides") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVE_NEW_CONFIG, + "Save New Configuration") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVE_STATE, + "Save State") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVING_SETTINGS, + "Saving") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SCAN_DIRECTORY, + "Scan Directory") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SCAN_FILE, + "Scan File") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SCAN_THIS_DIRECTORY, + "") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SCREENSHOT_DIRECTORY, + "Screenshot") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SCREEN_RESOLUTION, + "Screen Resolution") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SEARCH, + "Search:") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SECONDS, + "seconds") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SETTINGS, + "Settings") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SETTINGS_TAB, + "Settings") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER, + "Shader") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_APPLY_CHANGES, + "Apply Shader Changes") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_OPTIONS, + "Shaders") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_RIBBON, + "Ribbon") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_RIBBON_SIMPLIFIED, + "Ribbon (simplified)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_SIMPLE_SNOW, + "Simple Snow") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_SNOW, + "Snow") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHOW_ADVANCED_SETTINGS, + "Show Advanced Settings") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHOW_HIDDEN_FILES, + "Show Hidden Files and Folders") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHUTDOWN, + "Shutdown") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SLOWMOTION_RATIO, + "Slow-Motion Ratio") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SORT_SAVEFILES_ENABLE, + "Sort Saves In Folders") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SORT_SAVESTATES_ENABLE, + "Sort Savestates In Folders") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SSH_ENABLE, + "SSH Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_START_CORE, + "Start Core") +MSG_HASH(MENU_ENUM_LABEL_VALUE_START_NET_RETROPAD, + "Start Remote RetroPad") +MSG_HASH(MENU_ENUM_LABEL_VALUE_START_VIDEO_PROCESSOR, + "Start Video Processor") +MSG_HASH(MENU_ENUM_LABEL_VALUE_STATE_SLOT, + "State Slot") +MSG_HASH(MENU_ENUM_LABEL_VALUE_STATUS, + "Status") +MSG_HASH(MENU_ENUM_LABEL_VALUE_STDIN_CMD_ENABLE, + "stdin Commands") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SUPPORTED_CORES, + "Supported cores") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SUSPEND_SCREENSAVER_ENABLE, + "Suspend Screensaver") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_BGM_ENABLE, + "System BGM Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_DIRECTORY, + "System/BIOS") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFORMATION, + "System Information") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_7ZIP_SUPPORT, + "7zip support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_ALSA_SUPPORT, + "ALSA support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_BUILD_DATE, + "Build date") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_CG_SUPPORT, + "Cg support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_COCOA_SUPPORT, + "Cocoa support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_COMMAND_IFACE_SUPPORT, + "Command interface support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_CORETEXT_SUPPORT, + "CoreText support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_CPU_FEATURES, + "CPU Features") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_DPI, + "Display metric DPI") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_MM_HEIGHT, + "Display metric height (mm)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DISPLAY_METRIC_MM_WIDTH, + "Display metric width (mm)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DSOUND_SUPPORT, + "DirectSound support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DYLIB_SUPPORT, + "Dynamic library support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DYNAMIC_SUPPORT, + "Dynamic run-time loading of libretro library") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_EGL_SUPPORT, + "EGL support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FBO_SUPPORT, + "OpenGL/Direct3D render-to-texture (multi-pass shaders) support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FFMPEG_SUPPORT, + "FFmpeg support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FREETYPE_SUPPORT, + "FreeType support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FRONTEND_IDENTIFIER, + "Frontend identifier") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FRONTEND_NAME, + "Frontend name") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_FRONTEND_OS, + "Frontend OS") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_GIT_VERSION, + "Git version") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_GLSL_SUPPORT, + "GLSL support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_HLSL_SUPPORT, + "HLSL support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_JACK_SUPPORT, + "JACK support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_KMS_SUPPORT, + "KMS/EGL support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBRETRODB_SUPPORT, + "LibretroDB support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT, + "Libusb support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBXML2_SUPPORT, + "libxml2 XML parsing support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_NETPLAY_SUPPORT, + "Netplay (peer-to-peer) support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_NETWORK_COMMAND_IFACE_SUPPORT, + "Network Command interface support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_NETWORK_REMOTE_SUPPORT, + "Network Gamepad support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENAL_SUPPORT, + "OpenAL support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENGLES_SUPPORT, + "OpenGL ES support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENGL_SUPPORT, + "OpenGL support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENSL_SUPPORT, + "OpenSL support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OPENVG_SUPPORT, + "OpenVG support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OSS_SUPPORT, + "OSS support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_OVERLAY_SUPPORT, + "Overlay support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE, + "Power source") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_CHARGED, + "Charged") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_CHARGING, + "Charging") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_DISCHARGING, + "Discharging") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_POWER_SOURCE_NO_SOURCE, + "No source") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PULSEAUDIO_SUPPORT, + "PulseAudio support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PYTHON_SUPPORT, + "Python (script support in shaders) support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RBMP_SUPPORT, + "BMP support (RBMP)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RETRORATING_LEVEL, + "RetroRating level") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RJPEG_SUPPORT, + "JPEG support (RJPEG)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_ROARAUDIO_SUPPORT, + "RoarAudio support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RPNG_SUPPORT, + "PNG support (RPNG)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RSOUND_SUPPORT, + "RSound support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_RTGA_SUPPORT, + "TGA support (RTGA)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL2_SUPPORT, + "SDL2 support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL_IMAGE_SUPPORT, + "SDL image support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL_SUPPORT, + "SDL1.2 support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SLANG_SUPPORT, + "Slang support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_THREADING_SUPPORT, + "Threading support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_UDEV_SUPPORT, + "Udev support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_V4L2_SUPPORT, + "Video4Linux2 support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_VIDEO_CONTEXT_DRIVER, + "Video context driver") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_VULKAN_SUPPORT, + "Vulkan support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_WAYLAND_SUPPORT, + "Wayland support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_X11_SUPPORT, + "X11 support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_XAUDIO2_SUPPORT, + "XAudio2 support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_XVIDEO_SUPPORT, + "XVideo support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_ZLIB_SUPPORT, + "Zlib support") +MSG_HASH(MENU_ENUM_LABEL_VALUE_TAKE_SCREENSHOT, + "Take Screenshot") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THREADED_DATA_RUNLOOP_ENABLE, + "Threaded data runloop") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAILS, + "Thumbnails") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAILS_DIRECTORY, + "Thumbnails") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAILS_UPDATER_LIST, + "Thumbnails Updater") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_BOXARTS, + "Boxarts") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_SCREENSHOTS, + "Screenshots") +MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_TITLE_SCREENS, + "Title Screens") +MSG_HASH(MENU_ENUM_LABEL_VALUE_TIMEDATE_ENABLE, + "Display time / date") +MSG_HASH(MENU_ENUM_LABEL_VALUE_TITLE_COLOR, + "Menu title color") +MSG_HASH(MENU_ENUM_LABEL_VALUE_TRUE, + "True") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UI_COMPANION_ENABLE, + "UI Companion Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UI_COMPANION_START_ON_BOOT, + "UI Companion Start On Boot") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UI_MENUBAR_ENABLE, + "Menubar") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UNABLE_TO_READ_COMPRESSED_FILE, + "Unable to read compressed file.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UNDO_LOAD_STATE, + "Undo Load State") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UNDO_SAVE_STATE, + "Undo Save State") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UNKNOWN, + "Unknown") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATER_SETTINGS, + "Updater") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_ASSETS, + "Update Assets") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_AUTOCONFIG_PROFILES, + "Update Autoconfig Profiles") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_CG_SHADERS, + "Update Cg Shaders") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_CHEATS, + "Update Cheats") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_CORE_INFO_FILES, + "Update Core Info Files") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_DATABASES, + "Update Databases") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_GLSL_SHADERS, + "Update GLSL Shaders") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_LAKKA, + "Update Lakka") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_OVERLAYS, + "Update Overlays") +MSG_HASH(MENU_ENUM_LABEL_VALUE_UPDATE_SLANG_SHADERS, + "Update Slang Shaders") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USER, + "User") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USER_INTERFACE_SETTINGS, + "User Interface") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USER_LANGUAGE, + "Language") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USER_SETTINGS, + "User") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USE_BUILTIN_IMAGE_VIEWER, + "Use Builtin Image Viewer") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USE_BUILTIN_PLAYER, + "Use Builtin Media Player") +MSG_HASH(MENU_ENUM_LABEL_VALUE_USE_THIS_DIRECTORY, + "") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_ALLOW_ROTATE, + "Allow rotation") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_AUTO, + "Auto Aspect Ratio") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_INDEX, + "Aspect Ratio Index") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_BLACK_FRAME_INSERTION, + "Black Frame Insertion") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_CROP_OVERSCAN, + "Crop Overscan (Reload)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_DISABLE_COMPOSITION, + "Disable Desktop Composition") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_DRIVER, + "Video Driver") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FILTER, + "Video Filter") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FILTER_DIR, + "Video Filter") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FILTER_FLICKER, + "Flicker filter") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FONT_ENABLE, + "Enable Onscreen Notifications") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FONT_PATH, + "Onscreen Notification Font") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FONT_SIZE, + "Onscreen Notification Size") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FORCE_ASPECT, + "Force aspect ratio") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FORCE_SRGB_DISABLE, + "Force-disable sRGB FBO") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FRAME_DELAY, + "Frame Delay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FULLSCREEN, + "Use Fullscreen Mode") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_GAMMA, + "Video Gamma") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_GPU_RECORD, + "Use GPU Recording") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_GPU_SCREENSHOT, + "GPU Screenshot Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_HARD_SYNC, + "Hard GPU Sync") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_HARD_SYNC_FRAMES, + "Hard GPU Sync Frames") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_MAX_SWAPCHAIN_IMAGES, + "Max swapchain images") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_MESSAGE_POS_X, + "Onscreen Notification X Position") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_MESSAGE_POS_Y, + "Onscreen Notification Y Position") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_MONITOR_INDEX, + "Monitor Index") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_POST_FILTER_RECORD, + "Use Post Filter Recording") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_REFRESH_RATE, + "Vertical Refresh Rate") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_REFRESH_RATE_AUTO, + "Estimated Monitor Framerate") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_ROTATION, + "Rotation") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SCALE, + "Windowed Scale") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SCALE_INTEGER, + "Integer Scale") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SETTINGS, + "Video") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_DIR, + "Video Shader") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_NUM_PASSES, + "Shader Passes") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PARAMETERS, + "Preview Shader Parameters") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET, + "Load Shader Preset") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_PARAMETERS, + "Menu Shader Parameters") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_AS, + "Save Shader Preset As") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_CORE, + "Save Core Preset") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_GAME, + "Save Game Preset") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHARED_CONTEXT, + "Enable Hardware Shared Context") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SMOOTH, + "HW Bilinear Filtering") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SOFT_FILTER, + "Soft Filter Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SWAP_INTERVAL, + "Vertical Sync (Vsync) Swap Interval") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_TAB, + "Video") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_THREADED, + "Threaded Video") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VFILTER, + "Deflicker") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_HEIGHT, + "Custom Viewport Height") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_WIDTH, + "Custom Viewport Width") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_X, + "Custom Viewport X Pos.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_Y, + "Custom Viewport Y Pos.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VI_WIDTH, + "Set VI Screen Width") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VSYNC, + "Vertical Sync (Vsync)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_WINDOWED_FULLSCREEN, + "Windowed Fullscreen Mode") +MSG_HASH(MENU_ENUM_LABEL_VALUE_WIFI_DRIVER, + "Wi-Fi Driver") +MSG_HASH(MENU_ENUM_LABEL_VALUE_WIFI_SETTINGS, + "Wi-Fi") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ALPHA_FACTOR, + "Menu Alpha Factor") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_FONT, + "Menu Font") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_CUSTOM, + "Custom") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_FLATUI, + "FlatUI") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_MONOCHROME, + "Monochrome") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_SYSTEMATIC, + "Systematic") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_NEOACTIVE, + "NeoActive") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_PIXEL, + "Pixel") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_RETROACTIVE, + "RetroActive") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME, + "Menu Color Theme") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_APPLE_GREEN, + "Apple Green") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_DARK, + "Dark") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_DARK_PURPLE, + "Dark Purple") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_ELECTRIC_BLUE, + "Electric Blue") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_GOLDEN, + "Golden") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_LEGACY_RED, + "Legacy Red") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_MIDNIGHT_BLUE, + "Midnight Blue") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_PLAIN, + "Plain") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_UNDERSEA, + "Undersea") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_VOLCANIC_RED, + "Volcanic Red") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_RIBBON_ENABLE, + "Menu Shader Pipeline") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SCALE_FACTOR, + "Menu Scale Factor") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHADOWS_ENABLE, + "Icon Shadows Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_HISTORY, + "Show History Tab") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_IMAGES, + "Show Images Tab") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_MUSIC, + "Show Music Tab") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_SETTINGS, + "Show Settings Tab") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHOW_VIDEO, + "Show Video Tab") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_THEME, + "Menu Icon Theme") +MSG_HASH(MENU_ENUM_LABEL_VALUE_YES, + "Yes") +MSG_HASH(MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_TWO, + "Shader Preset") +MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_ENABLE, + "Enable or disable achievements. For more information, visit http://retroachievements.org") +MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_TEST_UNOFFICIAL, + "Enable or disable unofficial achievements and/or beta features for testing purposes.") +MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_HARDCORE_MODE_ENABLE, + "Enable or disable savestates, cheats, rewind, fast-forward, pause, and slow-motion for all games.") +MSG_HASH(MENU_ENUM_SUBLABEL_DRIVER_SETTINGS, + "Change drivers for this system.") +MSG_HASH(MENU_ENUM_SUBLABEL_RETRO_ACHIEVEMENTS_SETTINGS, + "Change settings for the achievements.") +MSG_HASH(MENU_ENUM_SUBLABEL_CORE_SETTINGS, + "Change settings for the core.") +MSG_HASH(MENU_ENUM_SUBLABEL_RECORDING_SETTINGS, + "Change settings for the recording.") +MSG_HASH(MENU_ENUM_SUBLABEL_ONSCREEN_DISPLAY_SETTINGS, + "Change settings for display overlay, keyboard overlay and onscreen notifications.") +MSG_HASH(MENU_ENUM_SUBLABEL_FRAME_THROTTLE_SETTINGS, + "Change settings for rewinding, fast-forwarding, and slow-motion.") +MSG_HASH(MENU_ENUM_SUBLABEL_SAVING_SETTINGS, + "Change settings for the saving.") +MSG_HASH(MENU_ENUM_SUBLABEL_LOGGING_SETTINGS, + "Change settings for the logging.") +MSG_HASH(MENU_ENUM_SUBLABEL_USER_INTERFACE_SETTINGS, + "Change settings for the user interface.") +MSG_HASH(MENU_ENUM_SUBLABEL_USER_SETTINGS, + "Change accounts, username, and language.") +MSG_HASH(MENU_ENUM_SUBLABEL_PRIVACY_SETTINGS, + "Change your privacy settings.") +MSG_HASH(MENU_ENUM_SUBLABEL_DIRECTORY_SETTINGS, + "Change default directories for this system.") +MSG_HASH(MENU_ENUM_SUBLABEL_PLAYLIST_SETTINGS, + "Change settings for the playlists.") +MSG_HASH(MENU_ENUM_SUBLABEL_NETWORK_SETTINGS, + "Change settings for the network.") +MSG_HASH(MENU_ENUM_SUBLABEL_ADD_CONTENT_LIST, + "Scan contents and add to the database.") +MSG_HASH(MENU_ENUM_SUBLABEL_AUDIO_SETTINGS, + "Adjusts settings for audio output.") +MSG_HASH(MENU_ENUM_SUBLABEL_BLUETOOTH_ENABLE, + "Enable or disable bluetooth.") +MSG_HASH(MENU_ENUM_SUBLABEL_CONFIG_SAVE_ON_EXIT, + "Saves changes to configuration file on exit.") +MSG_HASH(MENU_ENUM_SUBLABEL_CONFIGURATION_SETTINGS, + "Change default settings for configuration files.") +MSG_HASH(MENU_ENUM_SUBLABEL_CONFIGURATIONS_LIST, + "Manage and create configuration files.") +MSG_HASH(MENU_ENUM_SUBLABEL_CPU_CORES, + "Amount of cores that the CPU has.") +MSG_HASH(MENU_ENUM_SUBLABEL_FPS_SHOW, + "Displays the current framerate per second onscreen.") +MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_HOTKEY_BINDS, + "Configure hotkey settings.") +MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO, + "Gamepad button combination to toggle menu.") +MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_SETTINGS, + "Adjusts settings for joypads, keyboard and mouse.") +MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_USER_BINDS, + "Configure controls for this user.") +MSG_HASH(MENU_ENUM_SUBLABEL_LOG_VERBOSITY, + "Enable or disable logging to the terminal.") +MSG_HASH(MENU_ENUM_SUBLABEL_NETPLAY, + "Join or host a netplay session.") +MSG_HASH(MENU_ENUM_SUBLABEL_INFORMATION_LIST_LIST, + "Display information for core, network, and system. Display manager for database and cursor.") +MSG_HASH(MENU_ENUM_SUBLABEL_ONLINE_UPDATER, + "Download add-ons, components and contents for RetroArch.") +MSG_HASH(MENU_ENUM_SUBLABEL_SAMBA_ENABLE, + "Enable or disable network sharing of your folders.") +MSG_HASH(MENU_ENUM_SUBLABEL_SERVICES_SETTINGS, + "Manage operating system level services.") +MSG_HASH(MENU_ENUM_SUBLABEL_SHOW_HIDDEN_FILES, + "Show hidden files/directories inside the file browser.") +MSG_HASH(MENU_ENUM_SUBLABEL_SSH_ENABLE, + "Enable or disable remote command line access.") +MSG_HASH(MENU_ENUM_SUBLABEL_SUSPEND_SCREENSAVER_ENABLE, + "Prevents your system's screensaver from becoming active.") +MSG_HASH(MENU_ENUM_SUBLABEL_USER_LANGUAGE, + "Sets the language of the interface.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, + "Inserts a black frame inbetween frames. Useful for users of 120 Hz monitors who want to play 60 Hz material with eliminated ghosting.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_FRAME_DELAY, + "Reduces latency at the cost of higher risk of video stuttering. Adds a delay after V-Sync (in ms).") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_HARD_SYNC_FRAMES, + "Sets how many frames the CPU can run ahead of the GPU when using 'Hard GPU Sync'.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_MAX_SWAPCHAIN_IMAGES, + "Tells the video driver to explicitly use a specified buffering mode.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_MONITOR_INDEX, + "Selects which display monitor to use.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_REFRESH_RATE_AUTO, + "The accurate estimated refresh rate of the monitor in Hz.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_SETTINGS, + "Adjusts settings for video output.") +MSG_HASH(MENU_ENUM_SUBLABEL_WIFI_SETTINGS, + "Scans for wireless networks and establishes connection.") +MSG_HASH(MENU_ENUM_SUBLABEL_HELP_LIST, + "Learn more about how it works.") +MSG_HASH(MSG_APPENDED_DISK, + "Вставлен диск") +MSG_HASH(MSG_APPLICATION_DIR, + "Application Dir") +MSG_HASH(MSG_APPLYING_CHEAT, + "Applying cheat changes.") +MSG_HASH(MSG_APPLYING_SHADER, + "Применён шейдер") +MSG_HASH(MSG_AUDIO_MUTED, + "Звук откл.") +MSG_HASH(MSG_AUDIO_UNMUTED, + "Звук вкл.") +MSG_HASH(MSG_AUTOCONFIG_FILE_ERROR_SAVING, + "Error saving autoconf file.") +MSG_HASH(MSG_AUTOCONFIG_FILE_SAVED_SUCCESSFULLY, + "Autoconfig file saved successfully.") +MSG_HASH(MSG_AUTOSAVE_FAILED, + "Ошибка автосохранения.") +MSG_HASH(MSG_AUTO_SAVE_STATE_TO, + "Auto save state to") +MSG_HASH(MSG_BLOCKING_SRAM_OVERWRITE, + "Перезапись SRAM запрещена.") +MSG_HASH(MSG_BRINGING_UP_COMMAND_INTERFACE_ON_PORT, + "Bringing up command interface on port") +MSG_HASH(MSG_BYTES, + "байт") +MSG_HASH(MSG_CANNOT_INFER_NEW_CONFIG_PATH, + "Cannot infer new config path. Use current time.") +MSG_HASH(MSG_CHEEVOS_HARDCORE_MODE_ENABLE, + "Hardcore Mode Enabled, savestate & rewind were disabled.") +MSG_HASH(MSG_COMPARING_WITH_KNOWN_MAGIC_NUMBERS, + "Comparing with known magic numbers...") +MSG_HASH(MSG_COMPILED_AGAINST_API, + "Compiled against API") +MSG_HASH(MSG_CONFIG_DIRECTORY_NOT_SET, + "Не задана папка хранения настроек. Невозможно сохранить конфигурацию.") +MSG_HASH(MSG_CONNECTED_TO, + "Connected to") +MSG_HASH(MSG_CONTENT_CRC32S_DIFFER, + "Content CRC32s differ. Cannot use different games.") +MSG_HASH(MSG_CONTENT_LOADING_SKIPPED_IMPLEMENTATION_WILL_DO_IT, + "Content loading skipped. Implementation will load it on its own.") +MSG_HASH(MSG_CORE_DOES_NOT_SUPPORT_SAVESTATES, + "Ядро не поддерживает быстрые сохранения.") +MSG_HASH(MSG_CORE_OPTIONS_FILE_CREATED_SUCCESSFULLY, + "Core options file created successfully.") +MSG_HASH(MSG_COULD_NOT_FIND_ANY_NEXT_DRIVER, + "Could not find any next driver") +MSG_HASH(MSG_COULD_NOT_FIND_COMPATIBLE_SYSTEM, + "Could not find compatible system.") +MSG_HASH(MSG_COULD_NOT_FIND_VALID_DATA_TRACK, + "Could not find valid data track") +MSG_HASH(MSG_COULD_NOT_OPEN_DATA_TRACK, + "could not open data track") +MSG_HASH(MSG_COULD_NOT_READ_CONTENT_FILE, + "Не удалось прочитать файл контента") +MSG_HASH(MSG_COULD_NOT_READ_MOVIE_HEADER, + "Could not read movie header.") +MSG_HASH(MSG_COULD_NOT_READ_STATE_FROM_MOVIE, + "Could not read state from movie.") +MSG_HASH(MSG_CRC32_CHECKSUM_MISMATCH, + "CRC32 checksum mismatch between content file and saved content checksum in replay file header) replay highly likely to desync on playback.") +MSG_HASH(MSG_CUSTOM_TIMING_GIVEN, + "Задано ручное значение тайминга.") +MSG_HASH(MSG_DECOMPRESSION_ALREADY_IN_PROGRESS, + "Decompression already in progress.") +MSG_HASH(MSG_DECOMPRESSION_FAILED, + "Decompression failed.") +MSG_HASH(MSG_DETECTED_VIEWPORT_OF, + "Обнаружено окно проекции") +MSG_HASH(MSG_DID_NOT_FIND_A_VALID_CONTENT_PATCH, + "Did not find a valid content patch.") +MSG_HASH(MSG_DISCONNECT_DEVICE_FROM_A_VALID_PORT, + "Disconnect device from a valid port.") +MSG_HASH(MSG_DISK_CLOSED, + "Closed") +MSG_HASH(MSG_DISK_EJECTED, + "Ejected") +MSG_HASH(MSG_DOWNLOADING, + "Прогресс загрузки") +MSG_HASH(MSG_DOWNLOAD_FAILED, + "Download failed") +MSG_HASH(MSG_ERROR, + "Error") +MSG_HASH(MSG_ERROR_LIBRETRO_CORE_REQUIRES_CONTENT, + "Libretro core requires content, but nothing was provided.") +MSG_HASH(MSG_ERROR_LIBRETRO_CORE_REQUIRES_SPECIAL_CONTENT, + "Libretro core requires special content, but none were provided.") +MSG_HASH(MSG_ERROR_PARSING_ARGUMENTS, + "Error parsing arguments.") +MSG_HASH(MSG_ERROR_SAVING_CORE_OPTIONS_FILE, + "Error saving core options file.") +MSG_HASH(MSG_ERROR_SAVING_REMAP_FILE, + "Error saving remap file.") +MSG_HASH(MSG_ERROR_SAVING_SHADER_PRESET, + "Error saving shader preset.") +MSG_HASH(MSG_EXTERNAL_APPLICATION_DIR, + "External Application Dir") +MSG_HASH(MSG_EXTRACTING, + "Extracting") +MSG_HASH(MSG_EXTRACTING_FILE, + "Extracting file") +MSG_HASH(MSG_FAILED_SAVING_CONFIG_TO, + "Failed saving config to") +MSG_HASH(MSG_FAILED_TO, + "Ошибка") +MSG_HASH(MSG_FAILED_TO_ACCEPT_INCOMING_SPECTATOR, + "Failed to accept incoming spectator.") +MSG_HASH(MSG_FAILED_TO_ALLOCATE_MEMORY_FOR_PATCHED_CONTENT, + "Failed to allocate memory for patched content...") +MSG_HASH(MSG_FAILED_TO_APPLY_SHADER, + "Не удалось применить шейдер") +MSG_HASH(MSG_FAILED_TO_BIND_SOCKET, + "Failed to bind socket.") +MSG_HASH(MSG_FAILED_TO_CREATE_THE_DIRECTORY, + "Failed to create the directory.") +MSG_HASH(MSG_FAILED_TO_EXTRACT_CONTENT_FROM_COMPRESSED_FILE, + "Failed to extract content from compressed file") +MSG_HASH(MSG_FAILED_TO_GET_NICKNAME_FROM_CLIENT, + "Failed to get nickname from client.") +MSG_HASH(MSG_FAILED_TO_LOAD, + "Failed to load") +MSG_HASH(MSG_FAILED_TO_LOAD_CONTENT, + "Не удалось загрузить контент") +MSG_HASH(MSG_FAILED_TO_LOAD_MOVIE_FILE, + "Не удалось загрузить файл записи.") +MSG_HASH(MSG_FAILED_TO_LOAD_OVERLAY, + "Ошибка загрузки оверлея.") +MSG_HASH(MSG_FAILED_TO_LOAD_STATE, + "Ошибка загрузки сохранения из") +MSG_HASH(MSG_FAILED_TO_OPEN_LIBRETRO_CORE, + "Failed to open libretro core") +MSG_HASH(MSG_FAILED_TO_PATCH, + "Failed to patch") +MSG_HASH(MSG_FAILED_TO_RECEIVE_HEADER_FROM_CLIENT, + "Failed to receive header from client.") +MSG_HASH(MSG_FAILED_TO_RECEIVE_NICKNAME, + "Failed to receive nickname.") +MSG_HASH(MSG_FAILED_TO_RECEIVE_NICKNAME_FROM_HOST, + "Failed to receive nickname from host.") +MSG_HASH(MSG_FAILED_TO_RECEIVE_NICKNAME_SIZE_FROM_HOST, + "Failed to receive nickname size from host.") +MSG_HASH(MSG_FAILED_TO_RECEIVE_SRAM_DATA_FROM_HOST, + "Failed to receive SRAM data from host.") +MSG_HASH(MSG_FAILED_TO_REMOVE_DISK_FROM_TRAY, + "Невозможно извлечь диск.") +MSG_HASH(MSG_FAILED_TO_REMOVE_TEMPORARY_FILE, + "Ошибка удаления временного файла.") +MSG_HASH(MSG_FAILED_TO_SAVE_SRAM, + "Ошибка сохранения SRAM") +MSG_HASH(MSG_FAILED_TO_SAVE_STATE_TO, + "Ошибка записи сохранения в") +MSG_HASH(MSG_FAILED_TO_SEND_NICKNAME, + "Failed to send nickname.") +MSG_HASH(MSG_FAILED_TO_SEND_NICKNAME_SIZE, + "Failed to send nickname size.") +MSG_HASH(MSG_FAILED_TO_SEND_NICKNAME_TO_CLIENT, + "Failed to send nickname to client.") +MSG_HASH(MSG_FAILED_TO_SEND_NICKNAME_TO_HOST, + "Failed to send nickname to host.") +MSG_HASH(MSG_FAILED_TO_SEND_SRAM_DATA_TO_CLIENT, + "Failed to send SRAM data to client.") +MSG_HASH(MSG_FAILED_TO_START_AUDIO_DRIVER, + "Failed to start audio driver. Will continue without audio.") +MSG_HASH(MSG_FAILED_TO_START_MOVIE_RECORD, + "Невозможно начать запись видео.") +MSG_HASH(MSG_FAILED_TO_START_RECORDING, + "Невозможно начать запись.") +MSG_HASH(MSG_FAILED_TO_TAKE_SCREENSHOT, + "Невозможно создать скриншот.") +MSG_HASH(MSG_FAILED_TO_UNDO_LOAD_STATE, + "Failed to undo load state.") +MSG_HASH(MSG_FAILED_TO_UNDO_SAVE_STATE, + "Failed to undo save state.") +MSG_HASH(MSG_FAILED_TO_UNMUTE_AUDIO, + "Не удалось включить звук.") +MSG_HASH(MSG_FATAL_ERROR_RECEIVED_IN, + "Fatal error received in") +MSG_HASH(MSG_FILE_NOT_FOUND, + "File not found") +MSG_HASH(MSG_FOUND_AUTO_SAVESTATE_IN, + "Found auto savestate in") +MSG_HASH(MSG_FOUND_DISK_LABEL, + "Found disk label") +MSG_HASH(MSG_FOUND_FIRST_DATA_TRACK_ON_FILE, + "Found first data track on file") +MSG_HASH(MSG_FOUND_LAST_STATE_SLOT, + "Found last state slot") +MSG_HASH(MSG_FOUND_SHADER, + "Обнаружен шейдер") +MSG_HASH(MSG_FRAMES, + "Frames") +MSG_HASH(MSG_GAME_SPECIFIC_CORE_OPTIONS_FOUND_AT, + "Per-Game Options: game-specific core options found at") +MSG_HASH(MSG_GOT_INVALID_DISK_INDEX, + "Задан неверный номер диска.") +MSG_HASH(MSG_GRAB_MOUSE_STATE, + "Режим перехвата мыши") +MSG_HASH(MSG_HW_RENDERED_MUST_USE_POSTSHADED_RECORDING, + "Ядро использует аппаратный рендеринг. Включите запись с GPU.") +MSG_HASH(MSG_INFLATED_CHECKSUM_DID_NOT_MATCH_CRC32, + "Inflated checksum did not match CRC32.") +MSG_HASH(MSG_INPUT_CHEAT, + "Input Cheat") +MSG_HASH(MSG_INPUT_CHEAT_FILENAME, + "Cheat Filename") +MSG_HASH(MSG_INPUT_PRESET_FILENAME, + "Preset Filename") +MSG_HASH(MSG_INTERFACE, + "Interface") +MSG_HASH(MSG_INTERNAL_STORAGE, + "Internal Storage") +MSG_HASH(MSG_REMOVABLE_STORAGE, + "Removable Storage") +MSG_HASH(MSG_INVALID_NICKNAME_SIZE, + "Invalid nickname size.") +MSG_HASH(MSG_IN_BYTES, + "in bytes") +MSG_HASH(MSG_IN_GIGABYTES, + "in gigabytes") +MSG_HASH(MSG_IN_MEGABYTES, + "in megabytes") +MSG_HASH(MSG_LIBRETRO_ABI_BREAK, + "скомпилировано для другой версии libretro.") +MSG_HASH(MSG_LIBRETRO_FRONTEND, + "Frontend for libretro") +MSG_HASH(MSG_LOADED_STATE_FROM_SLOT, + "Загружено сохранение из слота #%d.") +MSG_HASH(MSG_LOADED_STATE_FROM_SLOT_AUTO, + "Загружено сохранение из слота #-1 (auto).") +MSG_HASH(MSG_LOADING, + "Loading") +MSG_HASH(MSG_FIRMWARE, + "One or more firmware files are missing") +MSG_HASH(MSG_LOADING_CONTENT_FILE, + "Загружен файл контента") +MSG_HASH(MSG_LOADING_HISTORY_FILE, + "Loading history file") +MSG_HASH(MSG_LOADING_STATE, + "Загружено сохранение") +MSG_HASH(MSG_MEMORY, + "Memory") +MSG_HASH(MSG_MOVIE_FILE_IS_NOT_A_VALID_BSV1_FILE, + "Movie file is not a valid BSV1 file.") +MSG_HASH(MSG_MOVIE_FORMAT_DIFFERENT_SERIALIZER_VERSION, + "Movie format seems to have a different serializer version. Will most likely fail.") +MSG_HASH(MSG_MOVIE_PLAYBACK_ENDED, + "Достигнут конец записи.") +MSG_HASH(MSG_MOVIE_RECORD_STOPPED, + "Запись остановлена.") +MSG_HASH(MSG_NETPLAY_FAILED, + "Ошибка запуска сетевой игры.") +MSG_HASH(MSG_NETPLAY_FAILED_MOVIE_PLAYBACK_HAS_STARTED, + "Воспроизведение записи. Невозможно начать сетевую игру.") +MSG_HASH(MSG_NO_CONTENT_STARTING_DUMMY_CORE, + "No content, starting dummy core.") +MSG_HASH(MSG_NO_SAVE_STATE_HAS_BEEN_OVERWRITTEN_YET, + "No save state has been overwritten yet.") +MSG_HASH(MSG_NO_STATE_HAS_BEEN_LOADED_YET, + "No state has been loaded yet.") +MSG_HASH(MSG_OVERRIDES_ERROR_SAVING, + "Error saving overrides.") +MSG_HASH(MSG_OVERRIDES_SAVED_SUCCESSFULLY, + "Overrides saved successfully.") +MSG_HASH(MSG_PAUSED, + "Пауза вкл.") +MSG_HASH(MSG_PROGRAM, + "RetroArch") +MSG_HASH(MSG_READING_FIRST_DATA_TRACK, + "Reading first data track...") +MSG_HASH(MSG_RECEIVED, + "получено") +MSG_HASH(MSG_RECORDING_TERMINATED_DUE_TO_RESIZE, + "Размеры окна были изменены. Запись остановлена.") +MSG_HASH(MSG_RECORDING_TO, + "Запись в") +MSG_HASH(MSG_REDIRECTING_CHEATFILE_TO, + "Файл с чит-кодами перенаправлен в") +MSG_HASH(MSG_REDIRECTING_SAVEFILE_TO, + "Файл карты памяти перенаправлен в") +MSG_HASH(MSG_REDIRECTING_SAVESTATE_TO, + "Файл сохранения перенаправлен в") +MSG_HASH(MSG_REMAP_FILE_SAVED_SUCCESSFULLY, + "Remap file saved successfully.") +MSG_HASH(MSG_REMOVED_DISK_FROM_TRAY, + "Диск извлечён.") +MSG_HASH(MSG_REMOVING_TEMPORARY_CONTENT_FILE, + "Удалён временный файл контента") +MSG_HASH(MSG_RESET, + "Сброс") +MSG_HASH(MSG_RESTARTING_RECORDING_DUE_TO_DRIVER_REINIT, + "Реинициализация драйвера. Запись перезапущена.") +MSG_HASH(MSG_RESTORED_OLD_SAVE_STATE, + "Restored old save state.") +MSG_HASH(MSG_RESTORING_DEFAULT_SHADER_PRESET_TO, + "Shaders: restoring default shader preset to") +MSG_HASH(MSG_REVERTING_SAVEFILE_DIRECTORY_TO, + "Reverting savefile directory to") +MSG_HASH(MSG_REVERTING_SAVESTATE_DIRECTORY_TO, + "Reverting savestate directory to") +MSG_HASH(MSG_REWINDING, + "Перемотка.") +MSG_HASH(MSG_REWIND_INIT, + "Инициализация буфера перемотки с размером") +MSG_HASH(MSG_REWIND_INIT_FAILED, + "Ошибка создания буфера перемотки. Перемотка будет отключена.") +MSG_HASH(MSG_REWIND_INIT_FAILED_THREADED_AUDIO, + "Ядро использует многопоточный звук. Перемотка невозможна.") +MSG_HASH(MSG_REWIND_REACHED_END, + "Достигнут предел буфера перемотки.") +MSG_HASH(MSG_SAVED_NEW_CONFIG_TO, + "Saved new config to") +MSG_HASH(MSG_SAVED_STATE_TO_SLOT, + "Сохранено в слот #%d.") +MSG_HASH(MSG_SAVED_STATE_TO_SLOT_AUTO, + "Сохранено в слот #-1 (auto).") +MSG_HASH(MSG_SAVED_SUCCESSFULLY_TO, + "Успешно сохранено в") +MSG_HASH(MSG_SAVING_RAM_TYPE, + "Запись RAM") +MSG_HASH(MSG_SAVING_STATE, + "Сохранено") +MSG_HASH(MSG_SCANNING, + "Сканирование") +MSG_HASH(MSG_SCANNING_OF_DIRECTORY_FINISHED, + "Сканирование папки завершено") +MSG_HASH(MSG_SENDING_COMMAND, + "Отправка команды") +MSG_HASH(MSG_SEVERAL_PATCHES_ARE_EXPLICITLY_DEFINED, + "Several patches are explicitly defined, ignoring all...") +MSG_HASH(MSG_SHADER, + "Шейдер") +MSG_HASH(MSG_SHADER_PRESET_SAVED_SUCCESSFULLY, + "Shader preset saved successfully.") +MSG_HASH(MSG_SKIPPING_SRAM_LOAD, + "Пропуск загрузки SRAM.") +MSG_HASH(MSG_SLOW_MOTION, + "Замедление.") +MSG_HASH(MSG_SLOW_MOTION_REWIND, + "Замедленная перемотка.") +MSG_HASH(MSG_SRAM_WILL_NOT_BE_SAVED, + "Невозможно сохранить SRAM.") +MSG_HASH(MSG_STARTING_MOVIE_PLAYBACK, + "Воспроизведение записи.") +MSG_HASH(MSG_STARTING_MOVIE_RECORD_TO, + "Запись видео в") +MSG_HASH(MSG_STATE_SIZE, + "Размер сохранения") +MSG_HASH(MSG_STATE_SLOT, + "Слот сохранения") +MSG_HASH(MSG_TAKING_SCREENSHOT, + "Скриншот сохранён.") +MSG_HASH(MSG_TO, + "в") +MSG_HASH(MSG_UNDID_LOAD_STATE, + "Undid load state.") +MSG_HASH(MSG_UNDOING_SAVE_STATE, + "Undoing save state") +MSG_HASH(MSG_UNKNOWN, + "Неизвестно.") +MSG_HASH(MSG_UNPAUSED, + "Пауза откл.") +MSG_HASH(MSG_UNRECOGNIZED_COMMAND, + "Неизвестная команда") +MSG_HASH(MSG_USING_CORE_NAME_FOR_NEW_CONFIG, + "Using core name for new config.") +MSG_HASH(MSG_USING_LIBRETRO_DUMMY_CORE_RECORDING_SKIPPED, + "Используется фиктивное ядро. Запись не производится.") +MSG_HASH(MSG_VALUE_CONNECT_DEVICE_FROM_A_VALID_PORT, + "Connect device from a valid port.") +MSG_HASH(MSG_VALUE_DISCONNECTING_DEVICE_FROM_PORT, + "Disconnecting device from port") +MSG_HASH(MSG_VALUE_REBOOTING, + "Rebooting...") +MSG_HASH(MSG_VALUE_SHUTTING_DOWN, + "Shutting down...") +MSG_HASH(MSG_VERSION_OF_LIBRETRO_API, + "Version of libretro API") +MSG_HASH(MSG_VIEWPORT_SIZE_CALCULATION_FAILED, + "Ошибка расчёта размеров окна проекции. Будут использованы необработанные данные. Возможны ошибки.") +MSG_HASH(MSG_VIRTUAL_DISK_TRAY, + "виртуальный лоток cd-привода") +MSG_HASH(MENU_ENUM_SUBLABEL_AUDIO_LATENCY, + "Desired audio latency in milliseconds. Might not be honored if the audio driver can't provide given latency.") +MSG_HASH(MENU_ENUM_SUBLABEL_AUDIO_MUTE, + "Mute/unmute audio.") +MSG_HASH( + MENU_ENUM_SUBLABEL_AUDIO_RATE_CONTROL_DELTA, + "Helps smooth out imperfections in timing when synchronizing audio and video at the same time. Be aware that if disabled, proper synchronization is nearly impossible to obtain." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CAMERA_ALLOW, + "Allow or disallow camera access by cores." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_LOCATION_ALLOW, + "Allow or disallow location services access by cores." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_MAX_USERS, + "Maximum amount of users supported by RetroArch." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_POLL_TYPE_BEHAVIOR, + "Influence how input polling is done inside RetroArch. Setting it to 'Early' or 'Late' can result in less latency, depending on your configuration." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_ALL_USERS_CONTROL_MENU, + "Allows any user to control the menu. If disabled, only User 1 can control the menu." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_AUDIO_VOLUME, + "Audio volume (in dB). 0 dB is normal volume, no gain applied." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_AUDIO_SYNC, + "Synchronize audio. Recommended." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_AXIS_THRESHOLD, + "How far an axis must be tilted to result in a button press." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_BIND_TIMEOUT, + "Amount of seconds to wait until proceeding to the next bind." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_TURBO_PERIOD, + "Describes the period of which turbo-enabled buttons toggle. Numbers are described in frames." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_DUTY_CYCLE, + "Describes how long the period of a turbo-enabled button should be. Numbers are described in frames." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_VIDEO_VSYNC, + "Synchronizes the output video of the graphics card to the refresh rate of the monitor. Recommended." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_VIDEO_ALLOW_ROTATE, + "Allow cores to set rotation. When disabled, rotation requests are ignored. Useful for setups where one manually rotates the monitor." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_DUMMY_ON_CORE_SHUTDOWN, + "Some cores might have a shutdown feature. If enabled, it will prevent the core from shutting RetroArch down. Instead, it loads a dummy core." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CHECK_FOR_MISSING_FIRMWARE, + "Check if all the required firmware is present before attempting to load content." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_VIDEO_REFRESH_RATE, + "Vertical refresh rate of your monitor. Used to calculate a suitable audio input rate. NOTE: This will be ignored if 'Threaded Video' is enabled." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_AUDIO_ENABLE, + "Enable audio output." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_AUDIO_MAX_TIMING_SKEW, + "The maximum change in audio input rate. You may want to increase this to enable very large changes in timing, for example running PAL cores on NTSC displays, at the cost of inaccurate audio pitch." + ) +MSG_HASH( + MSG_FAILED, + "failed" + ) +MSG_HASH( + MSG_SUCCEEDED, + "succeeded" + ) +MSG_HASH( + MSG_DEVICE_NOT_CONFIGURED, + "not configured" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST, + "Database Cursor List" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_DEVELOPER, + "Database - Filter : Developer" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_PUBLISHER, + "Database - Filter : Publisher" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_DISABLED, + "Disabled" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ENABLED, + "Enabled" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONTENT_HISTORY_PATH, + "Content History Path" + ) +MSG_HASH( + MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_ORIGIN, + "Database - Filter : Origin") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_FRANCHISE, + "Database - Filter : Franchise") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_ESRB_RATING, + "Database - Filter : ESRB Rating") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_ELSPA_RATING, + "Database - Filter : ELSPA Rating") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_PEGI_RATING, + "Database - Filter : PEGI Rating") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_CERO_RATING, + "Database - Filter : CERO Rating") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_BBFC_RATING, + "Database - Filter : BBFC Rating") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_MAX_USERS, + "Database - Filter : Max Users") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_RELEASEDATE_BY_MONTH, + "Database - Filter : Releasedate By Month") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_RELEASEDATE_BY_YEAR, + "Database - Filter : Releasedate By Year") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_EDGE_MAGAZINE_ISSUE, + "Database - Filter : Edge Magazine Issue") +MSG_HASH(MENU_ENUM_LABEL_DATABASE_CURSOR_LIST_ENTRY_EDGE_MAGAZINE_RATING, + "Database - Filter : Edge Magazine Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_DATABASE_INFO, + "Database Info") +MSG_HASH(MENU_ENUM_SUBLABEL_PAUSE_NONACTIVE, + "Pause gameplay when window focus is lost.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_DISABLE_COMPOSITION, + "Enable or disable composition (Windows only).") +MSG_HASH(MENU_ENUM_SUBLABEL_HISTORY_LIST_ENABLE, + "Enable or disable recent playlist for games, images, music, and videos.") +MSG_HASH(MENU_ENUM_SUBLABEL_CONTENT_HISTORY_SIZE, + "Limit the number of entries in recent playlist for games, images, music, and videos.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_UNIFIED_MENU_CONTROLS, + "Unified Menu Controls") +MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_UNIFIED_MENU_CONTROLS, + "Use the same controls for both the menu and the game. Applies to the keyboard.") diff --git a/intl/msg_hash_us.c b/intl/msg_hash_us.c index 1d0ce716fc..76738fbb22 100644 --- a/intl/msg_hash_us.c +++ b/intl/msg_hash_us.c @@ -146,6 +146,13 @@ int menu_hash_get_help_us_enum(enum msg_hash_enums msg, char *s, size_t len) "the window to allow relative mouse input to \n" "work better."); break; + case RARCH_GAME_FOCUS_TOGGLE: + snprintf(s, len, + "Toggles game focus.\n" + " \n" + "When a game has focus, RetroArch will both disable \n" + "hotkeys and keep/warp the mouse pointer inside the window."); + break; case RARCH_MENU_TOGGLE: snprintf(s, len, "Toggles menu."); break; @@ -342,7 +349,7 @@ int menu_hash_get_help_us_enum(enum msg_hash_enums msg, char *s, size_t len) break; case MENU_ENUM_LABEL_DUMMY_ON_CORE_SHUTDOWN: snprintf(s, len, - "Some libretro cores might have \n" + "Some cores might have \n" "a shutdown feature. \n" " \n" "If this option is left disabled, \n" @@ -355,6 +362,16 @@ int menu_hash_get_help_us_enum(enum msg_hash_enums msg, char *s, size_t len) "inside the menu and RetroArch won't \n" "shutdown."); break; + case MENU_ENUM_LABEL_CHECK_FOR_MISSING_FIRMWARE: + snprintf(s, len, + "Some cores might need \n" + "firmware or bios files. \n" + " \n" + "If this option is disabled, \n" + "it will try to load even if such \n" + "firmware is missing. \n" + "down. \n"); + break; case MENU_ENUM_LABEL_PARENT_DIRECTORY: snprintf(s, len, "Go back to the parent directory."); @@ -575,10 +592,6 @@ int menu_hash_get_help_us_enum(enum msg_hash_enums msg, char *s, size_t len) "Amount of seconds to wait until proceeding \n" "to the next bind."); break; - case MENU_ENUM_LABEL_KEYBOARD_OVERLAY_PRESET: - snprintf(s, len, - "Path to onscreen keyboard overlay."); - break; case MENU_ENUM_LABEL_OVERLAY_SCALE: snprintf(s, len, "Overlay scale."); @@ -945,6 +958,11 @@ int menu_hash_get_help_us_enum(enum msg_hash_enums msg, char *s, size_t len) "shaders." ); break; + case MENU_ENUM_LABEL_CONFIGURATION_SETTINGS: + snprintf(s, len, + "Determines how configuration files \n" + "are loaded and prioritized."); + break; case MENU_ENUM_LABEL_CONFIG_SAVE_ON_EXIT: snprintf(s, len, "Saves config to disk on exit.\n" @@ -1060,6 +1078,13 @@ int menu_hash_get_help_us_enum(enum msg_hash_enums msg, char *s, size_t len) "the window to allow relative mouse input to \n" "work better."); break; + case MENU_ENUM_LABEL_GAME_FOCUS_TOGGLE: + snprintf(s, len, + "Toggles game focus.\n" + " \n" + "When a game has focus, RetroArch will both disable \n" + "hotkeys and keep/warp the mouse pointer inside the window."); + break; case MENU_ENUM_LABEL_DISK_NEXT: snprintf(s, len, "Cycles through disk images. Use after \n" @@ -1448,7 +1473,7 @@ int menu_hash_get_help_us_enum(enum msg_hash_enums msg, char *s, size_t len) snprintf(s, len, "Dynamic Wallpapers Directory. \n" " \n" - " The place to store wallpapers that will \n" + " The place to store backgrounds that will \n" "be loaded dynamically by the menu depending \n" "on context."); break; @@ -1500,7 +1525,7 @@ int menu_hash_get_help_us_enum(enum msg_hash_enums msg, char *s, size_t len) snprintf(s, len, "Enable touch input inside the menu."); break; case MENU_ENUM_LABEL_MENU_WALLPAPER: - snprintf(s, len, "Path to an image to set as menu wallpaper."); + snprintf(s, len, "Path to an image to set as the background."); break; case MENU_ENUM_LABEL_NAVIGATION_WRAPAROUND: snprintf(s, len, @@ -1548,6 +1573,12 @@ int menu_hash_get_help_us_enum(enum msg_hash_enums msg, char *s, size_t len) "no checks. This value is only used on the \n" "netplay host. \n"); break; + case MENU_ENUM_LABEL_NETPLAY_NAT_TRAVERSAL: + snprintf(s, len, + "When hosting, attempt to listen for\n" + "connections from the public internet, using\n" + "UPnP or similar technologies to escape LANs. \n"); + break; case MENU_ENUM_LABEL_VIDEO_MAX_SWAPCHAIN_IMAGES: snprintf(s, len, "Maximum amount of swapchain images. This \n" @@ -1586,13 +1617,17 @@ int menu_hash_get_help_us_enum(enum msg_hash_enums msg, char *s, size_t len) snprintf(s, len, "Disconnects an active Netplay connection."); break; + case MENU_ENUM_LABEL_NETPLAY_LAN_SCAN_SETTINGS: + snprintf(s, len, + "Search for and connect to netplay hosts on the local network."); + break; case MENU_ENUM_LABEL_NETPLAY_SETTINGS: snprintf(s, len, "Setting related to Netplay."); break; case MENU_ENUM_LABEL_DYNAMIC_WALLPAPER: snprintf(s, len, - "Dynamically load a new wallpaper \n" + "Dynamically load a new background \n" "depending on context."); break; case MENU_ENUM_LABEL_CORE_UPDATER_BUILDBOT_URL: @@ -1681,7 +1716,9 @@ int menu_hash_get_help_us_enum(enum msg_hash_enums msg, char *s, size_t len) "3 - Press Start + Select simultaneously."); break; case MENU_ENUM_LABEL_INPUT_ALL_USERS_CONTROL_MENU: - snprintf(s, len, "Allow any RetroPad to control the menu."); + snprintf(s, len, "Allows any user to control the menu. \n" + " \n" + "When disabled, only user 1 can control the menu."); break; case MENU_ENUM_LABEL_INPUT_AUTODETECT_ENABLE: snprintf(s, len, @@ -1868,8 +1905,6 @@ int menu_hash_get_help_us_enum(enum msg_hash_enums msg, char *s, size_t len) return 0; } -#define MSG_HASH(Id, str) case Id: return str; - #ifdef HAVE_MENU static const char *menu_hash_to_str_us_label_enum(enum msg_hash_enums msg) { @@ -1911,11 +1946,12 @@ const char *msg_hash_to_str_us(enum msg_hash_enums msg) default: #if 0 RARCH_LOG("Unimplemented: [%d]\n", msg); + { + RARCH_LOG("[%d] : %s\n", msg - 1, msg_hash_to_str(((enum msg_hash_enums)(msg - 1)))); + } #endif break; } return "null"; } - -#undef MSG_HASH diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index 9e92d3acb9..5b972159ac 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -20,7 +20,15 @@ MSG_HASH( ) MSG_HASH( MSG_GOT_CONNECTION_FROM, - "Got connection from" + "Got connection from: \"%s\"" + ) +MSG_HASH( + MSG_GOT_CONNECTION_FROM_NAME, + "Got connection from: \"%s (%s)\"" + ) +MSG_HASH( + MSG_PUBLIC_ADDRESS, + "Public address" ) MSG_HASH( MSG_NO_ARGUMENTS_SUPPLIED_AND_NO_MENU_BUILTIN, @@ -141,7 +149,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_LABEL_VALUE_ASSETS_DIRECTORY, - "Assets Dir" + "Assets" ) MSG_HASH( MENU_ENUM_LABEL_VALUE_AUDIO_BLOCK_FRAMES, @@ -165,7 +173,11 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_LABEL_VALUE_AUDIO_FILTER_DIR, - "Audio Filter Dir" + "Audio Filter" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_TURBO_DEADZONE_LIST, + "Turbo/Deadzone" ) MSG_HASH( MENU_ENUM_LABEL_VALUE_AUDIO_LATENCY, @@ -185,7 +197,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_LABEL_VALUE_AUDIO_RATE_CONTROL_DELTA, - "Audio Rate Control Delta" + "Dynamic Audio Rate Control" ) MSG_HASH( MENU_ENUM_LABEL_VALUE_AUDIO_RESAMPLER_DRIVER, @@ -301,7 +313,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_LABEL_VALUE_CACHE_DIRECTORY, - "Cache Dir" + "Cache" ) MSG_HASH( MENU_ENUM_LABEL_VALUE_CAMERA_ALLOW, @@ -321,7 +333,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_LABEL_VALUE_CHEAT_DATABASE_PATH, - "Cheat File Dir" + "Cheat File" ) MSG_HASH( MENU_ENUM_LABEL_VALUE_CHEAT_FILE, @@ -389,11 +401,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_LABEL_VALUE_CONFIG_SAVE_ON_EXIT, - "Save Configuration On Exit" - ) -MSG_HASH( - MENU_ENUM_LABEL_VALUE_CONFIRM_ON_EXIT, - "Ask For Confirmation On Exit" + "Save Configuration on Exit" ) MSG_HASH( MENU_ENUM_LABEL_VALUE_CONTENT_COLLECTION_LIST, @@ -401,11 +409,11 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_LABEL_VALUE_CONTENT_DATABASE_DIRECTORY, - "Content Database Dir" + "Content Database" ) MSG_HASH( MENU_ENUM_LABEL_VALUE_CONTENT_DIR, - "Content Dir" + "Content" ) MSG_HASH( MENU_ENUM_LABEL_VALUE_CONTENT_HISTORY_SIZE, @@ -413,9 +421,9 @@ MSG_HASH( MSG_HASH(MENU_ENUM_LABEL_VALUE_CONTENT_SETTINGS, "Quick Menu") MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_ASSETS_DIR, - "Core Assets Dir") + "Core Assets") MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_ASSETS_DIRECTORY, - "Downloads Dir") + "Downloads") MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_CHEAT_OPTIONS, "Cheats") MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_COUNTERS, @@ -432,10 +440,8 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_LABEL, "Core label") MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_NAME, "Core name") -MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_NOTES, - "Core notes") MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_FIRMWARE, - "Firmware") + "Firmware(s)") MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_LICENSES, "License(s)") MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_INFO_PERMISSIONS, @@ -471,7 +477,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_CPU_ARCHITECTURE, MSG_HASH(MENU_ENUM_LABEL_VALUE_CPU_CORES, "CPU Cores:") MSG_HASH(MENU_ENUM_LABEL_VALUE_CURSOR_DIRECTORY, - "Cursor Dir") + "Cursor") MSG_HASH(MENU_ENUM_LABEL_VALUE_CURSOR_MANAGER, "Cursor Manager") MSG_HASH(MENU_ENUM_LABEL_VALUE_CUSTOM_RATIO, @@ -494,8 +500,6 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_NOT_FOUND, "Directory not found.") MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_SETTINGS, "Directory") -MSG_HASH(MENU_ENUM_LABEL_VALUE_DISABLED, - "Disabled") MSG_HASH(MENU_ENUM_LABEL_VALUE_DISK_CYCLE_TRAY_STATUS, "Disk Cycle Tray Status") MSG_HASH(MENU_ENUM_LABEL_VALUE_DISK_IMAGE_APPEND, @@ -507,7 +511,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_DISK_OPTIONS, MSG_HASH(MENU_ENUM_LABEL_VALUE_DONT_CARE, "Don't care") MSG_HASH(MENU_ENUM_LABEL_VALUE_DOWNLOADED_FILE_DETECT_CORE_LIST, - "Downloads Dir") + "Downloads") MSG_HASH(MENU_ENUM_LABEL_VALUE_DOWNLOAD_CORE, "Download Core...") MSG_HASH(MENU_ENUM_LABEL_VALUE_DOWNLOAD_CORE_CONTENT, @@ -520,10 +524,12 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_DRIVER_SETTINGS, "Driver") MSG_HASH(MENU_ENUM_LABEL_VALUE_DUMMY_ON_CORE_SHUTDOWN, "Load Dummy on Core Shutdown") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CHECK_FOR_MISSING_FIRMWARE, + "Check for Missing Firmware Before Loading") MSG_HASH(MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPER, - "Dynamic Wallpaper") + "Dynamic Background") MSG_HASH(MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPERS_DIRECTORY, - "Dynamic Wallpapers Dir") + "Dynamic Backgrounds") MSG_HASH(MENU_ENUM_LABEL_VALUE_CHEEVOS_ENABLE, "Enable Achievements") MSG_HASH(MENU_ENUM_LABEL_VALUE_ENTRY_HOVER_COLOR, @@ -543,7 +549,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_FRAME_THROTTLE_SETTINGS, MSG_HASH(MENU_ENUM_LABEL_VALUE_FRONTEND_COUNTERS, "Frontend Counters") MSG_HASH(MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_OPTIONS, - "Load Content-specific core options automatically") + "Load Content-Specific Core Options Automatically") MSG_HASH(MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_OPTIONS_CREATE, "Create game-options file") MSG_HASH(MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_OPTIONS_IN_USE, @@ -607,9 +613,9 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_ANALOG_RIGHT_Y_PLUS, MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_AUTODETECT_ENABLE, "Autoconfig Enable") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_AXIS_THRESHOLD, - "Input Axis Threshold") -MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BACK_AS_MENU_ENUM_TOGGLE_ENABLE, - "Back As Menu Toggle Enable") + "Analog Stick Deadzone") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_INPUT_SWAP_OK_CANCEL, + "Menu Swap Ok & Cancel Buttons") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_ALL, "Bind All") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_DEFAULT_ALL, @@ -696,6 +702,8 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_FULLSCREEN_TOGGLE_KEY, "Fullscreen toggle") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_GRAB_MOUSE_TOGGLE, "Grab mouse toggle") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_GAME_FOCUS_TOGGLE, + "Game focus toggle") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_LOAD_STATE_KEY, "Load state") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_MENU_TOGGLE, @@ -736,8 +744,6 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_VOLUME_DOWN, "Volume -") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_META_VOLUME_UP, "Volume +") -MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_OSK_OVERLAY_ENABLE, - "Display Keyboard Overlay") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_ENABLE, "Display Overlay") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_HIDE_IN_MENU, @@ -753,7 +759,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR_NORMAL, MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_PREFER_FRONT_TOUCH, "Prefer Front Touch") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_REMAPPING_DIRECTORY, - "Input Remapping Dir") + "Input Remapping") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_REMAP_BINDS_ENABLE, "Remap Binds Enable") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_SAVE_AUTOCONFIG, @@ -773,13 +779,11 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_USER_BINDS, MSG_HASH(MENU_ENUM_LABEL_VALUE_INTERNAL_STORAGE_STATUS, "Internal storage status") MSG_HASH(MENU_ENUM_LABEL_VALUE_JOYPAD_AUTOCONFIG_DIR, - "Input Device Autoconfig Dir") + "Input Autoconfig") MSG_HASH(MENU_ENUM_LABEL_VALUE_JOYPAD_DRIVER, "Joypad Driver") -MSG_HASH(MENU_ENUM_LABEL_VALUE_KEYBOARD_OVERLAY_PRESET, - "Keyboard Overlay Preset") MSG_HASH(MENU_ENUM_LABEL_VALUE_LAKKA_SERVICES, - "Lakka Services") + "Services") MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_CHINESE_SIMPLIFIED, "Chinese (Simplified)") MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_CHINESE_TRADITIONAL, @@ -813,9 +817,9 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_VIETNAMESE, MSG_HASH(MENU_ENUM_LABEL_VALUE_LEFT_ANALOG, "Left Analog") MSG_HASH(MENU_ENUM_LABEL_VALUE_LIBRETRO_DIR_PATH, - "Core Dir") + "Core") MSG_HASH(MENU_ENUM_LABEL_VALUE_LIBRETRO_INFO_PATH, - "Core Info Dir") + "Core Info") MSG_HASH(MENU_ENUM_LABEL_VALUE_LIBRETRO_LOG_LEVEL, "Core Logging Level") MSG_HASH(MENU_ENUM_LABEL_VALUE_LINEAR, @@ -873,9 +877,9 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_LINEAR_FILTER, MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_SETTINGS, "Menu") MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_WALLPAPER, - "Menu Wallpaper") + "Background") MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_WALLPAPER_OPACITY, - "Wallpaper opacity") + "Background opacity") MSG_HASH(MENU_ENUM_LABEL_VALUE_MISSING, "Missing") MSG_HASH(MENU_ENUM_LABEL_VALUE_MORE, @@ -910,6 +914,8 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE_HOST, "Start hosting") MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_IP_ADDRESS, "Server Address") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_LAN_SCAN_SETTINGS, + "Scan local network") MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_MODE, "Netplay Client Enable") MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_NICKNAME, @@ -920,6 +926,8 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_SPECTATOR_MODE_ENABLE, "Netplay Spectator Enable") MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_TCP_UDP_PORT, "Netplay TCP/UDP Port") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_NAT_TRAVERSAL, + "Netplay NAT Traversal") MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_CMD_ENABLE, "Network Commands") MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_CMD_PORT, @@ -956,6 +964,10 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_INFORMATION_AVAILABLE, "No information is available.") MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_ITEMS, "No items.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_NETPLAY_HOSTS_FOUND, + "No netplay hosts found.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_NETWORKS_FOUND, + "No networks found.") MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_PERFORMANCE_COUNTERS, "No performance counters.") MSG_HASH(MENU_ENUM_LABEL_VALUE_NO_PLAYLISTS, @@ -978,18 +990,18 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_ONSCREEN_DISPLAY_SETTINGS, "Onscreen Display") MSG_HASH(MENU_ENUM_LABEL_VALUE_ONSCREEN_OVERLAY_SETTINGS, "Onscreen Overlay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_ONSCREEN_NOTIFICATIONS_SETTINGS, + "Onscreen Notifications") MSG_HASH(MENU_ENUM_LABEL_VALUE_OPEN_ARCHIVE, "Open Archive As Folder") MSG_HASH(MENU_ENUM_LABEL_VALUE_OPTIONAL, "Optional") -MSG_HASH(MENU_ENUM_LABEL_VALUE_OSK_OVERLAY_DIRECTORY, - "OSK Overlay Dir") MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY, "Overlay") MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_AUTOLOAD_PREFERRED, "Autoload Preferred Overlay") MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_DIRECTORY, - "Overlay Dir") + "Overlay") MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_OPACITY, "Overlay Opacity") MSG_HASH(MENU_ENUM_LABEL_VALUE_OVERLAY_PRESET, @@ -1011,7 +1023,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_PERFCNT_ENABLE, MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLISTS_TAB, "Playlists") MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_DIRECTORY, - "Playlist Dir") + "Playlist") MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_SETTINGS, "Playlists") MSG_HASH(MENU_ENUM_LABEL_VALUE_POINTER_ENABLE, @@ -1083,21 +1095,21 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_TGDB_RATING, MSG_HASH(MENU_ENUM_LABEL_VALUE_REBOOT, "Reboot") MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORDING_CONFIG_DIRECTORY, - "Recording Config Dir") + "Recording Config") MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORDING_OUTPUT_DIRECTORY, - "Recording Output Dir") + "Recording Output") MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORDING_SETTINGS, "Recording") MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORD_CONFIG, - "Record Config") + "Load Recording Config...") MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORD_DRIVER, "Record Driver") MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORD_ENABLE, - "Record Enable") + "Enable Recording") MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORD_PATH, - "Output File") + "Save Output Recording as...") MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORD_USE_OUTPUT_DIRECTORY, - "Use Output Dir") + "Save Recordings in Output Dir") MSG_HASH(MENU_ENUM_LABEL_VALUE_REMAP_FILE, "Remap File") MSG_HASH(MENU_ENUM_LABEL_VALUE_REMAP_FILE_LOAD, @@ -1120,8 +1132,10 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_RETROKEYBOARD, "RetroKeyboard") MSG_HASH(MENU_ENUM_LABEL_VALUE_RETROPAD, "RetroPad") +MSG_HASH(MENU_ENUM_LABEL_VALUE_RETROPAD_WITH_ANALOG, + "RetroPad w/ Analog") MSG_HASH(MENU_ENUM_LABEL_VALUE_RETRO_ACHIEVEMENTS_SETTINGS, - "Retro Achievements") + "Achievements") MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_ENABLE, "Rewind Enable") MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_GRANULARITY, @@ -1129,9 +1143,9 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_GRANULARITY, MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_SETTINGS, "Rewind") MSG_HASH(MENU_ENUM_LABEL_VALUE_RGUI_BROWSER_DIRECTORY, - "File Browser Dir") + "File Browser") MSG_HASH(MENU_ENUM_LABEL_VALUE_RGUI_CONFIG_DIRECTORY, - "Config Dir") + "Config") MSG_HASH(MENU_ENUM_LABEL_VALUE_RGUI_SHOW_START_SCREEN, "Show Start Screen") MSG_HASH(MENU_ENUM_LABEL_VALUE_RIGHT_ANALOG, @@ -1141,7 +1155,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_RUN, MSG_HASH(MENU_ENUM_LABEL_VALUE_SAMBA_ENABLE, "SAMBA Enable") MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVEFILE_DIRECTORY, - "Savefile Dir") + "Savefile") MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_INDEX, "Save State Auto Index") MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_LOAD, @@ -1149,7 +1163,9 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_LOAD, MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_SAVE, "Auto Save State") MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_DIRECTORY, - "Savestate Dir") + "Savestate") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVESTATE_THUMBNAIL_ENABLE, + "Savestate Thumbnails") MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVE_CURRENT_CONFIG, "Save Current Configuration") MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVE_CURRENT_CONFIG_OVERRIDE_CORE, @@ -1169,7 +1185,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_SCAN_FILE, MSG_HASH(MENU_ENUM_LABEL_VALUE_SCAN_THIS_DIRECTORY, "") MSG_HASH(MENU_ENUM_LABEL_VALUE_SCREENSHOT_DIRECTORY, - "Screenshot Dir") + "Screenshot") MSG_HASH(MENU_ENUM_LABEL_VALUE_SCREEN_RESOLUTION, "Screen Resolution") MSG_HASH(MENU_ENUM_LABEL_VALUE_SEARCH, @@ -1190,6 +1206,10 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_RIBBON, "Ribbon") MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_RIBBON_SIMPLIFIED, "Ribbon (simplified)") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_SIMPLE_SNOW, + "Simple Snow") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_SNOW, + "Snow") MSG_HASH(MENU_ENUM_LABEL_VALUE_SHOW_ADVANCED_SETTINGS, "Show Advanced Settings") MSG_HASH(MENU_ENUM_LABEL_VALUE_SHOW_HIDDEN_FILES, @@ -1223,7 +1243,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_SUSPEND_SCREENSAVER_ENABLE, MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_BGM_ENABLE, "System BGM Enable") MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_DIRECTORY, - "System/BIOS Dir") + "System/BIOS") MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFORMATION, "System Information") MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_7ZIP_SUPPORT, @@ -1367,7 +1387,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_THREADED_DATA_RUNLOOP_ENABLE, MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAILS, "Thumbnails") MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAILS_DIRECTORY, - "Thumbnails Dir") + "Thumbnails") MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAILS_UPDATER_LIST, "Thumbnails Updater") MSG_HASH(MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_BOXARTS, @@ -1449,7 +1469,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_DRIVER, MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FILTER, "Video Filter") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FILTER_DIR, - "Video Filter Dir") + "Video Filter") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FILTER_FLICKER, "Flicker filter") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FONT_ENABLE, @@ -1469,7 +1489,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FULLSCREEN, MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_GAMMA, "Video Gamma") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_GPU_RECORD, - "GPU Record Enable") + "Use GPU Recording") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_GPU_SCREENSHOT, "GPU Screenshot Enable") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_HARD_SYNC, @@ -1485,9 +1505,9 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_MESSAGE_POS_Y, MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_MONITOR_INDEX, "Monitor Index") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_POST_FILTER_RECORD, - "Post filter record Enable") + "Use Post Filter Recording") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_REFRESH_RATE, - "Refresh Rate") + "Vertical Refresh Rate") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_REFRESH_RATE_AUTO, "Estimated Monitor Framerate") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_ROTATION, @@ -1499,7 +1519,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SCALE_INTEGER, MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SETTINGS, "Video") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_DIR, - "Video Shader Dir") + "Video Shader") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_NUM_PASSES, "Shader Passes") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PARAMETERS, @@ -1521,7 +1541,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SMOOTH, MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SOFT_FILTER, "Soft Filter Enable") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SWAP_INTERVAL, - "VSync Swap Interval") + "Vertical Sync (Vsync) Swap Interval") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_TAB, "Video") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_THREADED, @@ -1533,15 +1553,19 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_HEIGHT, MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_WIDTH, "Custom Viewport Width") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_X, - "Custom Viewport X") + "Custom Viewport X Pos.") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_Y, - "Custom Viewport Y") + "Custom Viewport Y Pos.") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VI_WIDTH, "Set VI Screen Width") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VSYNC, - "VSync") + "Vertical Sync (Vsync)") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_WINDOWED_FULLSCREEN, "Windowed Fullscreen Mode") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_WINDOW_WIDTH, + "Window Width") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_WINDOW_HEIGHT, + "Window Height") MSG_HASH(MENU_ENUM_LABEL_VALUE_WIFI_DRIVER, "Wi-Fi Driver") MSG_HASH(MENU_ENUM_LABEL_VALUE_WIFI_SETTINGS, @@ -1556,8 +1580,8 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_FLATUI, "FlatUI") MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_MONOCHROME, "Monochrome") -MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_MONOCHROME_JAGGED, - "Monochrome Jagged") +MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_SYSTEMATIC, + "Systematic") MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_NEOACTIVE, "NeoActive") MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_PIXEL, @@ -1608,10 +1632,40 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_YES, "Yes") MSG_HASH(MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_TWO, "Shader Preset") +MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_ENABLE, + "Enable or disable achievements. For more information, visit http://retroachievements.org") +MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_TEST_UNOFFICIAL, + "Enable or disable unofficial achievements and/or beta features for testing purposes.") MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_HARDCORE_MODE_ENABLE, "Enable or disable savestates, cheats, rewind, fast-forward, pause, and slow-motion for all games.") +MSG_HASH(MENU_ENUM_SUBLABEL_DRIVER_SETTINGS, + "Change drivers for this system.") +MSG_HASH(MENU_ENUM_SUBLABEL_RETRO_ACHIEVEMENTS_SETTINGS, + "Change settings for the achievements.") MSG_HASH(MENU_ENUM_SUBLABEL_CORE_SETTINGS, "Change settings for the core.") +MSG_HASH(MENU_ENUM_SUBLABEL_RECORDING_SETTINGS, + "Change settings for the recording.") +MSG_HASH(MENU_ENUM_SUBLABEL_ONSCREEN_DISPLAY_SETTINGS, + "Change settings for display overlay, keyboard overlay and onscreen notifications.") +MSG_HASH(MENU_ENUM_SUBLABEL_FRAME_THROTTLE_SETTINGS, + "Change settings for rewinding, fast-forwarding, and slow-motion.") +MSG_HASH(MENU_ENUM_SUBLABEL_SAVING_SETTINGS, + "Change settings for the saving.") +MSG_HASH(MENU_ENUM_SUBLABEL_LOGGING_SETTINGS, + "Change settings for the logging.") +MSG_HASH(MENU_ENUM_SUBLABEL_USER_INTERFACE_SETTINGS, + "Change settings for the user interface.") +MSG_HASH(MENU_ENUM_SUBLABEL_USER_SETTINGS, + "Change accounts, username, and language.") +MSG_HASH(MENU_ENUM_SUBLABEL_PRIVACY_SETTINGS, + "Change your privacy settings.") +MSG_HASH(MENU_ENUM_SUBLABEL_DIRECTORY_SETTINGS, + "Change default directories for this system.") +MSG_HASH(MENU_ENUM_SUBLABEL_PLAYLIST_SETTINGS, + "Change settings for the playlists.") +MSG_HASH(MENU_ENUM_SUBLABEL_NETWORK_SETTINGS, + "Change settings for the network.") MSG_HASH(MENU_ENUM_SUBLABEL_ADD_CONTENT_LIST, "Scan contents and add to the database.") MSG_HASH(MENU_ENUM_SUBLABEL_AUDIO_SETTINGS, @@ -1620,6 +1674,10 @@ MSG_HASH(MENU_ENUM_SUBLABEL_BLUETOOTH_ENABLE, "Enable or disable bluetooth.") MSG_HASH(MENU_ENUM_SUBLABEL_CONFIG_SAVE_ON_EXIT, "Saves changes to configuration file on exit.") +MSG_HASH(MENU_ENUM_SUBLABEL_CONFIGURATION_SETTINGS, + "Change default settings for configuration files.") +MSG_HASH(MENU_ENUM_SUBLABEL_CONFIGURATIONS_LIST, + "Manage and create configuration files.") MSG_HASH(MENU_ENUM_SUBLABEL_CPU_CORES, "Amount of cores that the CPU has.") MSG_HASH(MENU_ENUM_SUBLABEL_FPS_SHOW, @@ -1636,8 +1694,10 @@ MSG_HASH(MENU_ENUM_SUBLABEL_LOG_VERBOSITY, "Enable or disable logging to the terminal.") MSG_HASH(MENU_ENUM_SUBLABEL_NETPLAY, "Join or host a netplay session.") +MSG_HASH(MENU_ENUM_SUBLABEL_NETPLAY_LAN_SCAN_SETTINGS, + "Search for and connect to netplay hosts on the local network.") MSG_HASH(MENU_ENUM_SUBLABEL_INFORMATION_LIST_LIST, - "Display information for core, network, and system.\nDisplay manager for database and cursor.") + "Display information for core, network, and system. Display manager for database and cursor.") MSG_HASH(MENU_ENUM_SUBLABEL_ONLINE_UPDATER, "Download add-ons, components and contents for RetroArch.") MSG_HASH(MENU_ENUM_SUBLABEL_SAMBA_ENABLE, @@ -1650,6 +1710,8 @@ MSG_HASH(MENU_ENUM_SUBLABEL_SSH_ENABLE, "Enable or disable remote command line access.") MSG_HASH(MENU_ENUM_SUBLABEL_SUSPEND_SCREENSAVER_ENABLE, "Prevents your system's screensaver from becoming active.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_WINDOW_SCALE, + "Sets the window size relative to the core viewport size. Alternatively you can set a window width and height below for a fixed window size") MSG_HASH(MENU_ENUM_SUBLABEL_USER_LANGUAGE, "Sets the language of the interface.") MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, @@ -1668,6 +1730,8 @@ MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_SETTINGS, "Adjusts settings for video output.") MSG_HASH(MENU_ENUM_SUBLABEL_WIFI_SETTINGS, "Scans for wireless networks and establishes connection.") +MSG_HASH(MENU_ENUM_SUBLABEL_HELP_LIST, + "Learn more about how it works.") MSG_HASH(MSG_APPENDED_DISK, "Appended disk") MSG_HASH(MSG_APPLICATION_DIR, @@ -1866,6 +1930,10 @@ MSG_HASH(MSG_GOT_INVALID_DISK_INDEX, "Got invalid disk index.") MSG_HASH(MSG_GRAB_MOUSE_STATE, "Grab mouse state") +MSG_HASH(MSG_GAME_FOCUS_ON, + "Game focus on") +MSG_HASH(MSG_GAME_FOCUS_OFF, + "Game focus off") MSG_HASH(MSG_HW_RENDERED_MUST_USE_POSTSHADED_RECORDING, "Libretro core is hardware rendered. Must use post-shaded recording as well.") MSG_HASH(MSG_INFLATED_CHECKSUM_DID_NOT_MATCH_CRC32, @@ -1878,8 +1946,10 @@ MSG_HASH(MSG_INPUT_PRESET_FILENAME, "Preset Filename") MSG_HASH(MSG_INTERFACE, "Interface") -MSG_HASH(MSG_INTERNAL_MEMORY, - "Internal Memory") +MSG_HASH(MSG_INTERNAL_STORAGE, + "Internal Storage") +MSG_HASH(MSG_REMOVABLE_STORAGE, + "Removable Storage") MSG_HASH(MSG_INVALID_NICKNAME_SIZE, "Invalid nickname size.") MSG_HASH(MSG_IN_BYTES, @@ -1898,6 +1968,8 @@ MSG_HASH(MSG_LOADED_STATE_FROM_SLOT_AUTO, "Loaded state from slot #-1 (auto).") MSG_HASH(MSG_LOADING, "Loading") +MSG_HASH(MSG_FIRMWARE, + "One or more firmware files are missing") MSG_HASH(MSG_LOADING_CONTENT_FILE, "Loading content file") MSG_HASH(MSG_LOADING_HISTORY_FILE, @@ -2046,3 +2118,166 @@ MSG_HASH(MSG_VIEWPORT_SIZE_CALCULATION_FAILED, "Viewport size calculation failed! Will continue using raw data. This will probably not work right ...") MSG_HASH(MSG_VIRTUAL_DISK_TRAY, "virtual disk tray.") +MSG_HASH(MENU_ENUM_SUBLABEL_AUDIO_LATENCY, + "Desired audio latency in milliseconds. Might not be honored if the audio driver can't provide given latency.") +MSG_HASH(MENU_ENUM_SUBLABEL_AUDIO_MUTE, + "Mute/unmute audio.") +MSG_HASH( + MENU_ENUM_SUBLABEL_AUDIO_RATE_CONTROL_DELTA, + "Helps smooth out imperfections in timing when synchronizing audio and video at the same time. Be aware that if disabled, proper synchronization is nearly impossible to obtain." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CAMERA_ALLOW, + "Allow or disallow camera access by cores." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_LOCATION_ALLOW, + "Allow or disallow location services access by cores." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_MAX_USERS, + "Maximum amount of users supported by RetroArch." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_POLL_TYPE_BEHAVIOR, + "Influence how input polling is done inside RetroArch. Setting it to 'Early' or 'Late' can result in less latency, depending on your configuration." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_ALL_USERS_CONTROL_MENU, + "Allows any user to control the menu. If disabled, only User 1 can control the menu." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_AUDIO_VOLUME, + "Audio volume (in dB). 0 dB is normal volume, no gain applied." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_AUDIO_SYNC, + "Synchronize audio. Recommended." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_AXIS_THRESHOLD, + "How far an axis must be tilted to result in a button press." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_BIND_TIMEOUT, + "Amount of seconds to wait until proceeding to the next bind." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_TURBO_PERIOD, + "Describes the period of which turbo-enabled buttons toggle. Numbers are described in frames." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_DUTY_CYCLE, + "Describes how long the period of a turbo-enabled button should be. Numbers are described in frames." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_VIDEO_VSYNC, + "Synchronizes the output video of the graphics card to the refresh rate of the monitor. Recommended." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_VIDEO_ALLOW_ROTATE, + "Allow cores to set rotation. When disabled, rotation requests are ignored. Useful for setups where one manually rotates the monitor." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_DUMMY_ON_CORE_SHUTDOWN, + "Some cores might have a shutdown feature. If enabled, it will prevent the core from shutting RetroArch down. Instead, it loads a dummy core." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CHECK_FOR_MISSING_FIRMWARE, + "Check if all the required firmware is present before attempting to load content." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_VIDEO_REFRESH_RATE, + "Vertical refresh rate of your monitor. Used to calculate a suitable audio input rate. NOTE: This will be ignored if 'Threaded Video' is enabled." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_AUDIO_ENABLE, + "Enable audio output." + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_AUDIO_MAX_TIMING_SKEW, + "The maximum change in audio input rate. You may want to increase this to enable very large changes in timing, for example running PAL cores on NTSC displays, at the cost of inaccurate audio pitch." + ) +MSG_HASH( + MSG_FAILED, + "failed" + ) +MSG_HASH( + MSG_SUCCEEDED, + "succeeded" + ) +MSG_HASH( + MSG_DEVICE_NOT_CONFIGURED, + "not configured" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST, + "Database Cursor List" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_DEVELOPER, + "Database - Filter : Developer" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_PUBLISHER, + "Database - Filter : Publisher" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_DISABLED, + "Disabled" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ENABLED, + "Enabled" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CONTENT_HISTORY_PATH, + "Content History Path" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_ORIGIN, + "Database - Filter : Origin") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_FRANCHISE, + "Database - Filter : Franchise") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_ESRB_RATING, + "Database - Filter : ESRB Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_ELSPA_RATING, + "Database - Filter : ELSPA Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_PEGI_RATING, + "Database - Filter : PEGI Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_CERO_RATING, + "Database - Filter : CERO Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_BBFC_RATING, + "Database - Filter : BBFC Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_MAX_USERS, + "Database - Filter : Max Users") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_RELEASEDATE_BY_MONTH, + "Database - Filter : Releasedate By Month") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_RELEASEDATE_BY_YEAR, + "Database - Filter : Releasedate By Year") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_EDGE_MAGAZINE_ISSUE, + "Database - Filter : Edge Magazine Issue") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_EDGE_MAGAZINE_RATING, + "Database - Filter : Edge Magazine Rating") +MSG_HASH(MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_DATABASE_INFO, + "Database Info") +MSG_HASH(MSG_WIFI_SCAN_COMPLETE, + "Wi-Fi scan complete.") +MSG_HASH(MSG_SCANNING_WIRELESS_NETWORKS, + "Scanning wireless networks...") +MSG_HASH(MSG_NETPLAY_LAN_SCAN_COMPLETE, + "Netplay scan complete.") +MSG_HASH(MSG_NETPLAY_LAN_SCANNING, + "Scanning for netplay hosts...") +MSG_HASH(MENU_ENUM_SUBLABEL_PAUSE_NONACTIVE, + "Pause gameplay when window focus is lost.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_DISABLE_COMPOSITION, + "Enable or disable composition (Windows only).") +MSG_HASH(MENU_ENUM_SUBLABEL_HISTORY_LIST_ENABLE, + "Enable or disable recent playlist for games, images, music, and videos.") +MSG_HASH(MENU_ENUM_SUBLABEL_CONTENT_HISTORY_SIZE, + "Limit the number of entries in recent playlist for games, images, music, and videos.") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_UNIFIED_MENU_CONTROLS, + "Unified Menu Controls") +MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_UNIFIED_MENU_CONTROLS, + "Use the same controls for both the menu and the game. Applies to the keyboard.") diff --git a/intl/msg_hash_vn.c b/intl/msg_hash_vn.c index 983822def7..62abe2e732 100644 --- a/intl/msg_hash_vn.c +++ b/intl/msg_hash_vn.c @@ -38,42 +38,42 @@ int menu_hash_get_help_vn_enum(enum msg_hash_enums msg, char *s, size_t len) { case RARCH_FAST_FORWARD_KEY: snprintf(s, len, - "Bật/tắt between fast-forwarding and \n" - "normal speed." + "Chọn giữa tốc độ nhanh và \n" + "bình thường." ); break; case RARCH_FAST_FORWARD_HOLD_KEY: snprintf(s, len, - "Hold for fast-forward. \n" + "Nhấn nút để xem nhanh. \n" " \n" - "Releasing button disables fast-forward." + "Thả nút để ngừng xem nhanh." ); break; case RARCH_PAUSE_TOGGLE: snprintf(s, len, - "Toggle between paused and non-paused state."); + "Bật/tắt chức năng tạm dừng."); break; case RARCH_FRAMEADVANCE: snprintf(s, len, - "Frame advance when content is paused."); + "Xem Frame kế tiếp khi đã tạm dừng."); break; case RARCH_SHADER_NEXT: snprintf(s, len, - "Applies next shader in directory."); + "Áp dụng shader kế tiếp trong thư mục."); break; case RARCH_SHADER_PREV: snprintf(s, len, - "Applies previous shader in directory."); + "Áp dụng shader trước trong thư mục."); break; case RARCH_CHEAT_INDEX_PLUS: case RARCH_CHEAT_INDEX_MINUS: case RARCH_CHEAT_TOGGLE: snprintf(s, len, - "Cheats."); + "Gian lận."); break; case RARCH_RESET: snprintf(s, len, - "Reset the content."); + "Đặt lại nội dung."); break; case RARCH_SCREENSHOT: snprintf(s, len, @@ -93,7 +93,7 @@ int menu_hash_get_help_vn_enum(enum msg_hash_enums msg, char *s, size_t len) break; case RARCH_SLOWMOTION: snprintf(s, len, - "Hold for slowmotion."); + "Nhấn để xem chậm."); break; case RARCH_ENABLE_HOTKEY: snprintf(s, len, @@ -122,20 +122,20 @@ int menu_hash_get_help_vn_enum(enum msg_hash_enums msg, char *s, size_t len) break; case RARCH_OVERLAY_NEXT: snprintf(s, len, - "Switches to next overlay. Wraps around."); + "Đổi qua overlay kế tiếp."); break; case RARCH_DISK_EJECT_TOGGLE: snprintf(s, len, - "Bật/tắt eject for disks. \n" + "Bật/tắt nhả đĩa. \n" " \n" - "Used for multiple-disk content. "); + "Được sử dụng cho nội dung có nhiều đĩa. "); break; case RARCH_DISK_NEXT: case RARCH_DISK_PREV: snprintf(s, len, - "Cycles through disk images. Use after ejecting. \n" + "Xem qua các đĩa game. Sử dụng sau khi nhả đĩa. \n" " \n" - "Complete by toggling eject again."); + "Bấm nút 'Bật/tắt nhả đĩa' để chọn đĩa."); break; case RARCH_GRAB_MOUSE_TOGGLE: snprintf(s, len, @@ -159,7 +159,7 @@ int menu_hash_get_help_vn_enum(enum msg_hash_enums msg, char *s, size_t len) break; case RARCH_QUIT_KEY: snprintf(s, len, - "Key to exit RetroArch cleanly. \n" + "Nút để an toàn thoát RetroArch. \n" " \n" "Killing it in any hard way (SIGKILL, etc.) will \n" "terminate RetroArch without saving RAM, etc." @@ -182,17 +182,17 @@ int menu_hash_get_help_vn_enum(enum msg_hash_enums msg, char *s, size_t len) break; case RARCH_SAVE_STATE_KEY: snprintf(s, len, - "Saves state."); + "Lưu state."); break; case RARCH_REWIND: snprintf(s, len, - "Hold button down to rewind. \n" + "Giữ nút đễ quay lại. \n" " \n" - "Rewinding must be enabled."); + "Cần phải bật chức năng quay lại."); break; case RARCH_MOVIE_RECORD_TOGGLE: snprintf(s, len, - "Toggle between recording and not."); + "Bật/tắt ghi chép video."); break; default: if (string_is_empty(s)) @@ -206,21 +206,21 @@ int menu_hash_get_help_vn_enum(enum msg_hash_enums msg, char *s, size_t len) switch (msg) { case MENU_ENUM_LABEL_ACCOUNTS_RETRO_ACHIEVEMENTS: - snprintf(s, len, "Login details for your \n" - "Retro Achievements account. \n" + snprintf(s, len, "Chi tiết đăng nhập cho tài khoản \n" + "Retro Achievements của bạn. \n" " \n" - "Visit retroachievements.org and sign up \n" - "for a free account. \n" + "Truy cập retroachievements.org đễ \n" + "đăng ký tài khoản miễn phí. \n" " \n" - "After you are done registering, you need \n" - "to input the username and password into \n" + "Sau khi đăng ký, bạn phải \n" + "cung cấp tên tài khoản và mật mã vào \n" "RetroArch."); break; case MENU_ENUM_LABEL_CHEEVOS_USERNAME: - snprintf(s, len, "Username for your Retro Achievements account."); + snprintf(s, len, "Tên tài khoản của Retro Achievements."); break; case MENU_ENUM_LABEL_CHEEVOS_PASSWORD: - snprintf(s, len, "Password for your Retro Achievements account."); + snprintf(s, len, "Mật mã của Retro Achievements tài khoản."); break; case MENU_ENUM_LABEL_USER_LANGUAGE: snprintf(s, len, "Localizes the menu and all onscreen messages \n" @@ -280,7 +280,7 @@ int menu_hash_get_help_vn_enum(enum msg_hash_enums msg, char *s, size_t len) snprintf(s, len, "Create a screenshot. \n" " \n" "The screenshot will be stored inside the \n" - "Screenshot Directory."); + "Screenshot Thư mục."); break; case MENU_ENUM_LABEL_RUN: snprintf(s, len, "Start the content."); @@ -306,39 +306,39 @@ int menu_hash_get_help_vn_enum(enum msg_hash_enums msg, char *s, size_t len) break; case MENU_ENUM_LABEL_SCAN_THIS_DIRECTORY: snprintf(s, len, - "Select this to scan the current directory \n" + "Select this to scan the current thư mục \n" "for content."); break; case MENU_ENUM_LABEL_USE_THIS_DIRECTORY: snprintf(s, len, - "Select this to set this as the directory."); + "Select this to set this as the thư mục."); break; case MENU_ENUM_LABEL_CONTENT_DATABASE_DIRECTORY: snprintf(s, len, - "Content Database Directory. \n" + "Content Database thư mục. \n" " \n" "Path to content database \n" - "directory."); + "thư mục."); break; case MENU_ENUM_LABEL_THUMBNAILS_DIRECTORY: snprintf(s, len, - "Thumbnails Directory. \n" + "Thumbnails thư mục. \n" " \n" "To store thumbnail files."); break; case MENU_ENUM_LABEL_LIBRETRO_INFO_PATH: snprintf(s, len, - "Core Info Directory. \n" + "Core Info thư mục. \n" " \n" - "A directory for where to search \n" + "A thư mục for where to search \n" "for libretro core information."); break; case MENU_ENUM_LABEL_PLAYLIST_DIRECTORY: snprintf(s, len, - "Playlist Directory. \n" + "Playlist thư mục. \n" " \n" "Save all playlist files to this \n" - "directory."); + "thư mục."); break; case MENU_ENUM_LABEL_DUMMY_ON_CORE_SHUTDOWN: snprintf(s, len, @@ -355,9 +355,19 @@ int menu_hash_get_help_vn_enum(enum msg_hash_enums msg, char *s, size_t len) "inside the menu and RetroArch won't \n" "shutdown."); break; + case MENU_ENUM_LABEL_CHECK_FOR_MISSING_FIRMWARE: + snprintf(s, len, + "Some cores might need \n" + "firmware or bios files. \n" + " \n" + "If this option is disabled, \n" + "it will try to load even if such \n" + "firmware is missing. \n" + "down. \n"); + break; case MENU_ENUM_LABEL_PARENT_DIRECTORY: snprintf(s, len, - "Go back to the parent directory."); + "Go back to the parent thư mục."); break; case MENU_ENUM_LABEL_FILE_BROWSER_SHADER_PRESET: snprintf(s, len, @@ -431,16 +441,16 @@ int menu_hash_get_help_vn_enum(enum msg_hash_enums msg, char *s, size_t len) break; case MENU_ENUM_LABEL_FILE_BROWSER_DIRECTORY: snprintf(s, len, - "Directory. \n" + "thư mục. \n" " \n" - "Select it to open this directory."); + "Select it to open this thư mục."); break; case MENU_ENUM_LABEL_CACHE_DIRECTORY: snprintf(s, len, - "Cache Directory. \n" + "Cache thư mục. \n" " \n" "Content decompressed by RetroArch will be \n" - "temporarily extracted to this directory."); + "temporarily extracted to this thư mục."); break; case MENU_ENUM_LABEL_HISTORY_LIST_ENABLE: snprintf(s, len, @@ -450,9 +460,9 @@ int menu_hash_get_help_vn_enum(enum msg_hash_enums msg, char *s, size_t len) break; case MENU_ENUM_LABEL_RGUI_BROWSER_DIRECTORY: snprintf(s, len, - "File Browser Directory. \n" + "File Browser thư mục. \n" " \n" - "Sets start directory for menu file browser."); + "Sets start thư mục for menu file browser."); break; case MENU_ENUM_LABEL_INPUT_POLL_TYPE_BEHAVIOR: snprintf(s, len, @@ -575,10 +585,6 @@ int menu_hash_get_help_vn_enum(enum msg_hash_enums msg, char *s, size_t len) "Amount of seconds to wait until proceeding \n" "to the next bind."); break; - case MENU_ENUM_LABEL_KEYBOARD_OVERLAY_PRESET: - snprintf(s, len, - "Path to onscreen keyboard overlay."); - break; case MENU_ENUM_LABEL_OVERLAY_SCALE: snprintf(s, len, "Overlay scale."); @@ -601,12 +607,12 @@ int menu_hash_get_help_vn_enum(enum msg_hash_enums msg, char *s, size_t len) " \n" "Browse for a libretro core \n" "implementation. Where the browser \n" - "starts depends on your Core Directory \n" + "starts depends on your Core thư mục \n" "path. If blank, it will start in root. \n" " \n" - "If Core Directory is a directory, the menu \n" + "If Core thư mục is a thư mục, the menu \n" "will use that as top folder. If Core \n" - "Directory is a full path, it will start \n" + "thư mục is a full path, it will start \n" "in the folder where the file is."); break; case MENU_ENUM_LABEL_VALUE_MENU_ENUM_CONTROLS_PROLOG: @@ -742,7 +748,7 @@ int menu_hash_get_help_vn_enum(enum msg_hash_enums msg, char *s, size_t len) " \n" "To control where the menu starts \n" "to browse for content, set \n" - "'File Browser Directory'. \n" + "'File Browser thư mục'. \n" "If not set, it will start in root. \n" " \n" "The browser will filter out \n" @@ -759,7 +765,7 @@ int menu_hash_get_help_vn_enum(enum msg_hash_enums msg, char *s, size_t len) "core combinations are saved to history. \n" " \n" "The history is saved to a file in the same \n" - "directory as the RetroArch config file. If \n" + "thư mục as the RetroArch config file. If \n" "no config file was loaded in startup, history \n" "will not be saved or loaded, and will not exist \n" "in the main menu." @@ -956,11 +962,16 @@ int menu_hash_get_help_vn_enum(enum msg_hash_enums msg, char *s, size_t len) "All shaders must be of the same \n" "type (i.e. CG, GLSL or HLSL). \n" " \n" - "Set Shader Directory to set where \n" + "Set Shader thư mục to set where \n" "the browser starts to look for \n" "shaders." ); break; + case MENU_ENUM_LABEL_CONFIGURATION_SETTINGS: + snprintf(s, len, + "Determines how configuration files \n" + "are loaded and prioritized."); + break; case MENU_ENUM_LABEL_CONFIG_SAVE_ON_EXIT: snprintf(s, len, "Saves config to disk on exit.\n" @@ -1060,7 +1071,7 @@ int menu_hash_get_help_vn_enum(enum msg_hash_enums msg, char *s, size_t len) "settings are saved to a temporary file (either \n" "menu.cgp or menu.glslp) and loaded. The file \n" "persists after RetroArch exits. The file is \n" - "saved to Shader Directory." + "saved to Shader thư mục." ); break; case MENU_ENUM_LABEL_MENU_TOGGLE: @@ -1148,9 +1159,9 @@ int menu_hash_get_help_vn_enum(enum msg_hash_enums msg, char *s, size_t len) break; case MENU_ENUM_LABEL_LIBRETRO_DIR_PATH: snprintf(s, len, - "Core Directory. \n" + "Core thư mục. \n" " \n" - "A directory for where to search for \n" + "A thư mục for where to search for \n" "libretro core implementations."); break; case MENU_ENUM_LABEL_VIDEO_REFRESH_RATE_AUTO: @@ -1298,11 +1309,11 @@ int menu_hash_get_help_vn_enum(enum msg_hash_enums msg, char *s, size_t len) break; case MENU_ENUM_LABEL_SYSTEM_DIRECTORY: snprintf(s, len, - "System Directory. \n" + "System thư mục. \n" " \n" - "Sets the 'system' directory.\n" + "Sets the 'system' thư mục.\n" "Cores can query for this\n" - "directory to tải BIOSes, \n" + "thư mục to tải BIOSes, \n" "system-specific configs, etc."); break; case MENU_ENUM_LABEL_SAVESTATE_AUTO_SAVE: @@ -1419,9 +1430,9 @@ int menu_hash_get_help_vn_enum(enum msg_hash_enums msg, char *s, size_t len) break; case MENU_ENUM_LABEL_SCREENSHOT_DIRECTORY: snprintf(s, len, - "Screenshot Directory. \n" + "Screenshot thư mục. \n" " \n" - "Directory to dump screenshots to." + "thư mục to dump screenshots to." ); break; case MENU_ENUM_LABEL_VIDEO_SWAP_INTERVAL: @@ -1433,10 +1444,10 @@ int menu_hash_get_help_vn_enum(enum msg_hash_enums msg, char *s, size_t len) break; case MENU_ENUM_LABEL_SAVEFILE_DIRECTORY: snprintf(s, len, - "Savefile Directory. \n" + "Savefile thư mục. \n" " \n" "Save all save files (*.srm) to this \n" - "directory. This includes related files like \n" + "thư mục. This includes related files like \n" ".bsv, .rt, .psrm, etc...\n" " \n" "This will be overridden by explicit command line\n" @@ -1444,17 +1455,17 @@ int menu_hash_get_help_vn_enum(enum msg_hash_enums msg, char *s, size_t len) break; case MENU_ENUM_LABEL_SAVESTATE_DIRECTORY: snprintf(s, len, - "Savestate Directory. \n" + "Savestate thư mục. \n" " \n" "Save all save states (*.state) to this \n" - "directory.\n" + "thư mục.\n" " \n" "This will be overridden by explicit command line\n" "options."); break; case MENU_ENUM_LABEL_ASSETS_DIRECTORY: snprintf(s, len, - "Assets Directory. \n" + "Assets thư mục. \n" " \n" " This location is queried by default when \n" "menu interfaces try to look for loadable \n" @@ -1462,7 +1473,7 @@ int menu_hash_get_help_vn_enum(enum msg_hash_enums msg, char *s, size_t len) break; case MENU_ENUM_LABEL_DYNAMIC_WALLPAPERS_DIRECTORY: snprintf(s, len, - "Dynamic Wallpapers Directory. \n" + "Dynamic Wallpapers thư mục. \n" " \n" " The place to store wallpapers that will \n" "be loaded dynamically by the menu depending \n" @@ -1516,7 +1527,7 @@ int menu_hash_get_help_vn_enum(enum msg_hash_enums msg, char *s, size_t len) snprintf(s, len, "Enable touch input inside the menu."); break; case MENU_ENUM_LABEL_MENU_WALLPAPER: - snprintf(s, len, "Path to an image to set as menu wallpaper."); + snprintf(s, len, "Path to an image to set as the background."); break; case MENU_ENUM_LABEL_NAVIGATION_WRAPAROUND: snprintf(s, len, @@ -1606,6 +1617,10 @@ int menu_hash_get_help_vn_enum(enum msg_hash_enums msg, char *s, size_t len) snprintf(s, len, "Setting related to Netplay."); break; + case MENU_ENUM_LABEL_NETPLAY_LAN_SCAN_SETTINGS: + snprintf(s, len, + "Search for and connect to netplay hosts on the local network."); + break; case MENU_ENUM_LABEL_DYNAMIC_WALLPAPER: snprintf(s, len, "Dynamically tải a new wallpaper \n" @@ -1613,12 +1628,12 @@ int menu_hash_get_help_vn_enum(enum msg_hash_enums msg, char *s, size_t len) break; case MENU_ENUM_LABEL_CORE_UPDATER_BUILDBOT_URL: snprintf(s, len, - "URL to core updater directory on the \n" + "URL to core updater thư mục on the \n" "Libretro buildbot."); break; case MENU_ENUM_LABEL_BUILDBOT_ASSETS_URL: snprintf(s, len, - "URL to assets updater directory on the \n" + "URL to assets updater thư mục on the \n" "Libretro buildbot."); break; case MENU_ENUM_LABEL_INPUT_REMAP_BINDS_ENABLE: @@ -1629,9 +1644,9 @@ int menu_hash_get_help_vn_enum(enum msg_hash_enums msg, char *s, size_t len) break; case MENU_ENUM_LABEL_OVERLAY_DIRECTORY: snprintf(s, len, - "Overlay Directory. \n" + "Overlay thư mục. \n" " \n" - "Defines a directory where overlays are \n" + "Defines a thư mục where overlays are \n" "kept for easy access."); break; case MENU_ENUM_LABEL_INPUT_MAX_USERS: @@ -1776,11 +1791,11 @@ int menu_hash_get_help_vn_enum(enum msg_hash_enums msg, char *s, size_t len) break; case MENU_ENUM_LABEL_SHADER_PREV: snprintf(s, len, - "Applies previous shader in directory."); + "Áp dụng previous shader in thư mục."); break; case MENU_ENUM_LABEL_SHADER_NEXT: snprintf(s, len, - "Applies next shader in directory."); + "Áp dụng next shader in thư mục."); break; case MENU_ENUM_LABEL_RESET: snprintf(s, len, @@ -1884,1155 +1899,38 @@ int menu_hash_get_help_vn_enum(enum msg_hash_enums msg, char *s, size_t len) return 0; } -#ifdef HAVE_MENU -static const char *menu_hash_to_str_vn_label_enum(enum msg_hash_enums msg) +const char *msg_hash_to_str_vn(enum msg_hash_enums msg) { - if (msg <= MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_END && - msg >= MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_BEGIN) - { - static char hotkey_lbl[128] = {0}; - unsigned idx = msg - MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_BEGIN; - snprintf(hotkey_lbl, sizeof(hotkey_lbl), "input_hotkey_binds_%d", idx); - return hotkey_lbl; - } - switch (msg) { - case MENU_ENUM_LABEL_ACCOUNTS_CHEEVOS_USERNAME: - return "accounts_cheevos_username"; - case MENU_ENUM_LABEL_ACCOUNTS_LIST: - return "accounts_list"; - case MENU_ENUM_LABEL_ACCOUNTS_RETRO_ACHIEVEMENTS: - return "retro_achievements"; - case MENU_ENUM_LABEL_ACHIEVEMENT_LIST: - return "achievement_list"; - case MENU_ENUM_LABEL_ADD_CONTENT_LIST: - return "add_content"; - case MENU_ENUM_LABEL_ADD_TAB: - return "add_tab"; - case MENU_ENUM_LABEL_ARCHIVE_MODE: - return "archive_mode"; - case MENU_ENUM_LABEL_ASSETS_DIRECTORY: - return "assets_directory"; - case MENU_ENUM_LABEL_AUDIO_BLOCK_FRAMES: - return "audio_block_frames"; - case MENU_ENUM_LABEL_AUDIO_DEVICE: - return "audio_device"; - case MENU_ENUM_LABEL_AUDIO_DRIVER: - return "audio_driver"; - case MENU_ENUM_LABEL_AUDIO_DSP_PLUGIN: - return "audio_dsp_plugin"; - case MENU_ENUM_LABEL_AUDIO_ENABLE: - return "audio_enable"; - case MENU_ENUM_LABEL_AUDIO_FILTER_DIR: - return "audio_filter_dir"; - case MENU_ENUM_LABEL_AUDIO_LATENCY: - return "audio_latency"; - case MENU_ENUM_LABEL_AUDIO_MAX_TIMING_SKEW: - return "audio_max_timing_skew"; - case MENU_ENUM_LABEL_AUDIO_MUTE: - return "audio_mute_enable"; - case MENU_ENUM_LABEL_AUDIO_OUTPUT_RATE: - return "audio_output_rate"; - case MENU_ENUM_LABEL_AUDIO_RATE_CONTROL_DELTA: - return "audio_rate_control_delta"; - case MENU_ENUM_LABEL_AUDIO_RESAMPLER_DRIVER: - return "audio_resampler_driver"; - case MENU_ENUM_LABEL_AUDIO_SETTINGS: - return "audio_settings"; - case MENU_ENUM_LABEL_AUDIO_SYNC: - return "audio_sync"; - case MENU_ENUM_LABEL_AUDIO_VOLUME: - return "audio_volume"; - case MENU_ENUM_LABEL_AUTOSAVE_INTERVAL: - return "autosave_interval"; - case MENU_ENUM_LABEL_AUTO_OVERRIDES_ENABLE: - return "auto_overrides_enable"; - case MENU_ENUM_LABEL_AUTO_REMAPS_ENABLE: - return "auto_remaps_enable"; - case MENU_ENUM_LABEL_AUTO_SHADERS_ENABLE: - return "auto_shaders_enable"; - case MENU_ENUM_LABEL_BLOCK_SRAM_OVERWRITE: - return "block_sram_overwrite"; - case MENU_ENUM_LABEL_BLUETOOTH_ENABLE: - return "bluetooth_enable"; - case MENU_ENUM_LABEL_BUILDBOT_ASSETS_URL: - return "buildbot_assets_url"; - case MENU_ENUM_LABEL_CACHE_DIRECTORY: - return "cache_directory"; - case MENU_ENUM_LABEL_CAMERA_ALLOW: - return "camera_allow"; - case MENU_ENUM_LABEL_CAMERA_DRIVER: - return "camera_driver"; - case MENU_ENUM_LABEL_CB_CORE_CONTENT_DIRS_LIST: - return "cb_core_content_dirs_list"; - case MENU_ENUM_LABEL_CB_CORE_CONTENT_DOWNLOAD: - return "cb_core_content_download"; - case MENU_ENUM_LABEL_CB_CORE_CONTENT_LIST: - return "cb_core_content_list"; - case MENU_ENUM_LABEL_CB_CORE_THUMBNAILS_DOWNLOAD: - return "cb_core_thumbnails_download"; - case MENU_ENUM_LABEL_CB_CORE_UPDATER_DOWNLOAD: - return "cb_core_updater_download"; - case MENU_ENUM_LABEL_CB_CORE_UPDATER_LIST: - return "cb_core_updater_list"; - case MENU_ENUM_LABEL_CB_DOWNLOAD_URL: - return "cb_download_url"; - case MENU_ENUM_LABEL_CB_LAKKA_DOWNLOAD: - return "cb_lakka_download"; - case MENU_ENUM_LABEL_CB_LAKKA_LIST: - return "cb_lakka_list"; - case MENU_ENUM_LABEL_CB_MENU_THUMBNAIL: - return "cb_menu_thumbnail"; - case MENU_ENUM_LABEL_CB_MENU_WALLPAPER: - return "cb_menu_wallpaper"; - case MENU_ENUM_LABEL_CB_THUMBNAILS_UPDATER_DOWNLOAD: - return "cb_thumbnails_updater_download"; - case MENU_ENUM_LABEL_CB_THUMBNAILS_UPDATER_LIST: - return "cb_thumbnails_updater_list"; - case MENU_ENUM_LABEL_CB_UPDATE_ASSETS: - return "cb_update_assets"; - case MENU_ENUM_LABEL_CB_UPDATE_AUTOCONFIG_PROFILES: - return "cb_update_autoconfig_profiles"; - case MENU_ENUM_LABEL_CB_UPDATE_CHEATS: - return "cb_update_cheats"; - case MENU_ENUM_LABEL_CB_UPDATE_CORE_INFO_FILES: - return "cb_update_core_info_files"; - case MENU_ENUM_LABEL_CB_UPDATE_DATABASES: - return "cb_update_databases"; - case MENU_ENUM_LABEL_CB_UPDATE_OVERLAYS: - return "cb_update_overlays"; - case MENU_ENUM_LABEL_CB_UPDATE_SHADERS_CG: - return "cb_update_shaders_cg"; - case MENU_ENUM_LABEL_CB_UPDATE_SHADERS_GLSL: - return "cb_update_shaders_glsl"; - case MENU_ENUM_LABEL_CHEAT_APPLY_CHANGES: - return "cheat_apply_changes"; - case MENU_ENUM_LABEL_CHEAT_DATABASE_PATH: - return "cheat_database_path"; - case MENU_ENUM_LABEL_CHEAT_FILE_LOAD: - return "cheat_file_load"; - case MENU_ENUM_LABEL_CHEAT_FILE_SAVE_AS: - return "cheat_file_save_as"; - case MENU_ENUM_LABEL_CHEAT_NUM_PASSES: - return "cheat_num_passes"; - case MENU_ENUM_LABEL_CHEEVOS_DESCRIPTION: - return "cheevos_description"; - case MENU_ENUM_LABEL_CHEEVOS_ENABLE: - return "cheevos_enable"; - case MENU_ENUM_LABEL_CHEEVOS_HARDCORE_MODE_ENABLE: - return "cheevos_hardcore_mode_enable"; - case MENU_ENUM_LABEL_CHEEVOS_LOCKED_ACHIEVEMENTS: - return "cheevos_locked_achievements"; - case MENU_ENUM_LABEL_CHEEVOS_LOCKED_ENTRY: - return "cheevos_locked_entry"; - case MENU_ENUM_LABEL_CHEEVOS_PASSWORD: - return "cheevos_password"; - case MENU_ENUM_LABEL_CHEEVOS_TEST_UNOFFICIAL: - return "cheevos_test_unofficial"; - case MENU_ENUM_LABEL_CHEEVOS_UNLOCKED_ACHIEVEMENTS: - return "cheevos_unlocked_achievements"; - case MENU_ENUM_LABEL_CHEEVOS_UNLOCKED_ENTRY: - return "cheevos_unlocked_entry"; - case MENU_ENUM_LABEL_CHEEVOS_USERNAME: - return "cheevos_username"; - case MENU_ENUM_LABEL_CLOSE_CONTENT: - return "unload_core"; - case MENU_ENUM_LABEL_COLLECTION: - return "collection"; - case MENU_ENUM_LABEL_CONFIGURATIONS: - return "configurations"; - case MENU_ENUM_LABEL_CONFIGURATION_SETTINGS: - return "configuration_settings"; - case MENU_ENUM_LABEL_CONFIG_SAVE_ON_EXIT: - return "config_save_on_exit"; - case MENU_ENUM_LABEL_CONFIRM_ON_EXIT: - return "confirm_on_exit"; - case MENU_ENUM_LABEL_CONNECT_WIFI: - return "connect_wifi"; - case MENU_ENUM_LABEL_CONTENT_ACTIONS: - return "content_actions"; - case MENU_ENUM_LABEL_CONTENT_COLLECTION_LIST: - return "select_from_collection"; - case MENU_ENUM_LABEL_CONTENT_DATABASE_DIRECTORY: - return "content_database_path"; - case MENU_ENUM_LABEL_CONTENT_HISTORY_SIZE: - return "content_history_size"; - case MENU_ENUM_LABEL_CONTENT_SETTINGS: - return "quick_menu"; - case MENU_ENUM_LABEL_CORE_ASSETS_DIRECTORY: - return "core_assets_directory"; - case MENU_ENUM_LABEL_CORE_CHEAT_OPTIONS: - return "core_cheat_options"; - case MENU_ENUM_LABEL_CORE_COUNTERS: - return "core_counters"; - case MENU_ENUM_LABEL_CORE_ENABLE: - return "menu_core_enable"; - case MENU_ENUM_LABEL_CORE_INFORMATION: - return "core_information"; - case MENU_ENUM_LABEL_CORE_INFO_ENTRY: - return "core_info_entry"; - case MENU_ENUM_LABEL_CORE_INPUT_REMAPPING_OPTIONS: - return "core_input_remapping_options"; - case MENU_ENUM_LABEL_CORE_LIST: - return "load_core"; - case MENU_ENUM_LABEL_CORE_OPTIONS: - return "core_options"; - case MENU_ENUM_LABEL_CORE_OPTION_ENTRY: - return "core_option_entry"; - case MENU_ENUM_LABEL_CORE_SETTINGS: - return "core_settings"; - case MENU_ENUM_LABEL_CORE_SET_SUPPORTS_NO_CONTENT_ENABLE: - return "core_set_supports_no_content_enable"; - case MENU_ENUM_LABEL_CORE_SPECIFIC_CONFIG: - return "core_specific_config"; - case MENU_ENUM_LABEL_CORE_UPDATER_AUTO_EXTRACT_ARCHIVE: - return "core_updater_auto_extract_archive"; - case MENU_ENUM_LABEL_CORE_UPDATER_BUILDBOT_URL: - return "core_updater_buildbot_url"; - case MENU_ENUM_LABEL_CORE_UPDATER_LIST: - return "core_updater_list"; - case MENU_ENUM_LABEL_CPU_ARCHITECTURE: - return "system_information_cpu_architecture"; - case MENU_ENUM_LABEL_CPU_CORES: - return "system_information_cpu_cores"; - case MENU_ENUM_LABEL_CURSOR_DIRECTORY: - return "cursor_directory"; - case MENU_ENUM_LABEL_CURSOR_MANAGER_LIST: - return "cursor_manager_list"; - case MENU_ENUM_LABEL_CUSTOM_BIND: - return "custom_bind"; - case MENU_ENUM_LABEL_CUSTOM_BIND_ALL: - return "custom_bind_all"; - case MENU_ENUM_LABEL_CUSTOM_RATIO: - return "custom_ratio"; - case MENU_ENUM_LABEL_DATABASE_MANAGER_LIST: - return "database_manager_list"; - case MENU_ENUM_LABEL_DEFERRED_ACCOUNTS_CHEEVOS_LIST: - return "deferred_accounts_cheevos_list"; - case MENU_ENUM_LABEL_DEFERRED_ACCOUNTS_LIST: - return "deferred_accounts_list"; - case MENU_ENUM_LABEL_DEFERRED_ARCHIVE_ACTION: - return "deferred_archive_action"; - case MENU_ENUM_LABEL_DEFERRED_ARCHIVE_ACTION_DETECT_CORE: - return "deferred_archive_action_detect_core"; - case MENU_ENUM_LABEL_DEFERRED_ARCHIVE_OPEN: - return "deferred_archive_open"; - case MENU_ENUM_LABEL_DEFERRED_ARCHIVE_OPEN_DETECT_CORE: - return "deferred_archive_open_detect_core"; - case MENU_ENUM_LABEL_DEFERRED_AUDIO_SETTINGS_LIST: - return "deferred_audio_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_CONFIGURATION_SETTINGS_LIST: - return "deferred_configuration_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_CORE_CONTENT_DIRS_LIST: - return "deferred_core_content_dirs_list"; - case MENU_ENUM_LABEL_DEFERRED_CORE_CONTENT_DIRS_SUBDIR_LIST: - return "deferred_core_content_dirs_subdir_list"; - case MENU_ENUM_LABEL_DEFERRED_CORE_CONTENT_LIST: - return "deferred_core_content_list"; - case MENU_ENUM_LABEL_DEFERRED_CORE_LIST: - return "deferred_core_list"; - case MENU_ENUM_LABEL_DEFERRED_CORE_LIST_SET: - return "deferred_core_list_set"; - case MENU_ENUM_LABEL_DEFERRED_CORE_SETTINGS_LIST: - return "deferred_core_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_CORE_UPDATER_LIST: - return "core_updater"; - case MENU_ENUM_LABEL_DEFERRED_CURSOR_MANAGER_LIST: - return "deferred_cursor_manager_list"; - case MENU_ENUM_LABEL_DEFERRED_DATABASE_MANAGER_LIST: - return "deferred_database_manager_list"; - case MENU_ENUM_LABEL_DEFERRED_DIRECTORY_SETTINGS_LIST: - return "deferred_directory_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_DRIVER_SETTINGS_LIST: - return "deferred_driver_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_FRAME_THROTTLE_SETTINGS_LIST: - return "deferred_frame_throttle_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_INPUT_HOTKEY_BINDS_LIST: - return "deferred_input_hotkey_binds"; - case MENU_ENUM_LABEL_DEFERRED_INPUT_SETTINGS_LIST: - return "deferred_input_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_LAKKA_LIST: - return "deferred_lakka_list"; - case MENU_ENUM_LABEL_DEFERRED_LAKKA_SERVICES_LIST: - return "deferred_lakka_services_list"; - case MENU_ENUM_LABEL_DEFERRED_LOGGING_SETTINGS_LIST: - return "deferred_logging_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_MENU_FILE_BROWSER_SETTINGS_LIST: - return "deferred_menu_file_browser_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_MENU_SETTINGS_LIST: - return "deferred_menu_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_NETWORK_SETTINGS_LIST: - return "deferred_network_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_ONSCREEN_DISPLAY_SETTINGS_LIST: - return "deferred_onscreen_display_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_ONSCREEN_OVERLAY_SETTINGS_LIST: - return "deferred_onscreen_overlay_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_PLAYLIST_SETTINGS_LIST: - return "deferred_playlist_settings"; - case MENU_ENUM_LABEL_DEFERRED_PRIVACY_SETTINGS_LIST: - return "deferred_privacy_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_RDB_ENTRY_DETAIL: - return "deferred_rdb_entry_detail"; - case MENU_ENUM_LABEL_DEFERRED_RECORDING_SETTINGS_LIST: - return "deferred_recording_settings"; - case MENU_ENUM_LABEL_DEFERRED_RETRO_ACHIEVEMENTS_SETTINGS_LIST: - return "deferred_retro_achievements_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_REWIND_SETTINGS_LIST: - return "deferred_rewind_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_SAVING_SETTINGS_LIST: - return "deferred_saving_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_THUMBNAILS_UPDATER_LIST: - return "deferred_thumbnails_updater_list"; - case MENU_ENUM_LABEL_DEFERRED_UPDATER_SETTINGS_LIST: - return "deferred_updater_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_USER_BINDS_LIST: - return "deferred_user_binds_list"; - case MENU_ENUM_LABEL_DEFERRED_USER_INTERFACE_SETTINGS_LIST: - return "deferred_user_interface_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_USER_SETTINGS_LIST: - return "deferred_user_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_VIDEO_FILTER: - return "deferred_video_filter"; - case MENU_ENUM_LABEL_DEFERRED_VIDEO_SETTINGS_LIST: - return "deferred_video_settings_list"; - case MENU_ENUM_LABEL_DEFERRED_WIFI_SETTINGS_LIST: - return "deferred_wifi_settings_list"; - case MENU_ENUM_LABEL_DELETE_ENTRY: - return "delete_entry"; - case MENU_ENUM_LABEL_DETECT_CORE_LIST: - return "detect_core_list"; - case MENU_ENUM_LABEL_DIRECTORY_SETTINGS: - return "directory_settings"; - case MENU_ENUM_LABEL_DISK_CYCLE_TRAY_STATUS: - return "disk_cycle_tray_status"; - case MENU_ENUM_LABEL_DISK_IMAGE_APPEND: - return "disk_image_append"; - case MENU_ENUM_LABEL_DISK_OPTIONS: - return "core_disk_options"; - case MENU_ENUM_LABEL_DOWNLOADED_FILE_DETECT_CORE_LIST: - return "downloaded_file_detect_core_list"; - case MENU_ENUM_LABEL_DOWNLOAD_CORE_CONTENT: - return "download_core_content"; - case MENU_ENUM_LABEL_DOWNLOAD_CORE_CONTENT_DIRS: - return "download_core_content_dirs"; - case MENU_ENUM_LABEL_DPI_OVERRIDE_ENABLE: - return "dpi_override_enable"; - case MENU_ENUM_LABEL_DPI_OVERRIDE_VALUE: - return "dpi_override_value"; - case MENU_ENUM_LABEL_DRIVER_SETTINGS: - return "driver_settings"; - case MENU_ENUM_LABEL_DUMMY_ON_CORE_SHUTDOWN: - return "dummy_on_core_shutdown"; - case MENU_ENUM_LABEL_DYNAMIC_WALLPAPER: - return "menu_dynamic_wallpaper_enable"; - case MENU_ENUM_LABEL_DYNAMIC_WALLPAPERS_DIRECTORY: - return "dynamic_wallpapers_directory"; - case MENU_ENUM_LABEL_ENTRY_HOVER_COLOR: - return "menu_entry_hover_color"; - case MENU_ENUM_LABEL_ENTRY_NORMAL_COLOR: - return "menu_entry_normal_color"; - case MENU_ENUM_LABEL_FASTFORWARD_RATIO: - return "fastforward_ratio"; - case MENU_ENUM_LABEL_FILE_BROWSER_CORE: - return "file_browser_core"; - case MENU_ENUM_LABEL_FILE_BROWSER_CORE_DETECTED: - return "file_browser_core_detected"; - case MENU_ENUM_LABEL_FILE_BROWSER_CORE_SELECT_FROM_COLLECTION: - return "file_browser_core_select_from_collection"; - case MENU_ENUM_LABEL_FILE_BROWSER_DIRECTORY: - return "file_browser_directory"; - case MENU_ENUM_LABEL_FILE_BROWSER_IMAGE: - return "file_browser_image"; - case MENU_ENUM_LABEL_FILE_BROWSER_IMAGE_OPEN_WITH_VIEWER: - return "file_browser_image_open_with_viewer"; - case MENU_ENUM_LABEL_FILE_BROWSER_MOVIE_OPEN: - return "file_browser_movie_open"; - case MENU_ENUM_LABEL_FILE_BROWSER_MUSIC_OPEN: - return "file_browser_music_open"; - case MENU_ENUM_LABEL_FILE_BROWSER_PLAIN_FILE: - return "file_browser_plain_file"; - case MENU_ENUM_LABEL_FILE_BROWSER_REMAP: - return "file_browser_remap"; - case MENU_ENUM_LABEL_FILE_BROWSER_SHADER: - return "file_browser_shader"; - case MENU_ENUM_LABEL_FILE_BROWSER_SHADER_PRESET: - return "file_browser_shader_preset"; - case MENU_ENUM_LABEL_FPS_SHOW: - return "fps_show"; - case MENU_ENUM_LABEL_FRAME_THROTTLE_ENABLE: - return "fastforward_ratio_throttle_enable"; - case MENU_ENUM_LABEL_FRAME_THROTTLE_SETTINGS: - return "frame_throttle_settings"; - case MENU_ENUM_LABEL_FRONTEND_COUNTERS: - return "frontend_counters"; - case MENU_ENUM_LABEL_GAME_SPECIFIC_OPTIONS: - return "game_specific_options"; - case MENU_ENUM_LABEL_GAME_SPECIFIC_OPTIONS_CREATE: - return "game_specific_options_create"; - case MENU_ENUM_LABEL_GAME_SPECIFIC_OPTIONS_IN_USE: - return "game_specific_options_in_use"; - case MENU_ENUM_LABEL_HELP: - return "help"; - case MENU_ENUM_LABEL_HELP_AUDIO_VIDEO_TROUBLESHOOTING: - return "help_audio_video_troubleshooting"; - case MENU_ENUM_LABEL_HELP_CHANGE_VIRTUAL_GAMEPAD: - return "help_change_virtual_gamepad"; - case MENU_ENUM_LABEL_HELP_CONTROLS: - return "help_controls"; - case MENU_ENUM_LABEL_HELP_LIST: - return "help_list"; - case MENU_ENUM_LABEL_HELP_LOADING_CONTENT: - return "help_loading_content"; - case MENU_ENUM_LABEL_HELP_SCANNING_CONTENT: - return "help_scanning_content"; - case MENU_ENUM_LABEL_HELP_WHAT_IS_A_CORE: - return "help_what_is_a_core"; - case MENU_ENUM_LABEL_HISTORY_LIST_ENABLE: - return "history_list_enable"; - case MENU_ENUM_LABEL_HISTORY_TAB: - return "history_tab"; - case MENU_ENUM_LABEL_HORIZONTAL_MENU: - return "horizontal_menu"; - case MENU_ENUM_LABEL_IMAGES_TAB: - return "images_tab"; - case MENU_ENUM_LABEL_INFORMATION: - return "information"; - case MENU_ENUM_LABEL_INFORMATION_LIST: - return "information_list"; - case MENU_ENUM_LABEL_INFO_SCREEN: - return "info_screen"; - case MENU_ENUM_LABEL_INPUT_ALL_USERS_CONTROL_MENU: - return "all_users_control_menu"; - case MENU_ENUM_LABEL_INPUT_AUTODETECT_ENABLE: - return "input_autodetect_enable"; - case MENU_ENUM_LABEL_INPUT_AXIS_THRESHOLD: - return "input_axis_threshold"; - case MENU_ENUM_LABEL_INPUT_BACK_AS_MENU_ENUM_TOGGLE_ENABLE: - return "back_as_menu_toggle_enable"; - case MENU_ENUM_LABEL_INPUT_BIND_MODE: - return "input_bind_mode"; - case MENU_ENUM_LABEL_INPUT_BIND_TIMEOUT: - return "input_bind_timeout"; - case MENU_ENUM_LABEL_INPUT_DESCRIPTOR_HIDE_UNBOUND: - return "input_descriptor_hide_unbound"; - case MENU_ENUM_LABEL_INPUT_DESCRIPTOR_LABEL_SHOW: - return "input_descriptor_label_show"; - case MENU_ENUM_LABEL_INPUT_DRIVER: - return "input_driver"; - case MENU_ENUM_LABEL_INPUT_DUTY_CYCLE: - return "input_duty_cycle"; - case MENU_ENUM_LABEL_INPUT_HOTKEY_BINDS: - return "input_hotkey_binds"; - case MENU_ENUM_LABEL_INPUT_HOTKEY_BINDS_BEGIN: - return "input_hotkey_binds_begin"; - case MENU_ENUM_LABEL_INPUT_ICADE_ENABLE: - return "input_icade_enable"; - case MENU_ENUM_LABEL_INPUT_KEYBOARD_GAMEPAD_MAPPING_TYPE: - return "keyboard_gamepad_mapping_type"; - case MENU_ENUM_LABEL_INPUT_LIBRETRO_DEVICE: - return "input_libretro_device_p%u"; - case MENU_ENUM_LABEL_INPUT_MAX_USERS: - return "input_max_users"; - case MENU_ENUM_LABEL_INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO: - return "input_menu_toggle_gamepad_combo"; - case MENU_ENUM_LABEL_INPUT_OSK_OVERLAY_ENABLE: - return "input_osk_overlay_enable"; - case MENU_ENUM_LABEL_INPUT_OVERLAY_ENABLE: - return "input_overlay_enable"; - case MENU_ENUM_LABEL_INPUT_OVERLAY_HIDE_IN_MENU: - return "overlay_hide_in_menu"; - case MENU_ENUM_LABEL_INPUT_PLAYER_ANALOG_DPAD_MODE: - return "input_player%u_analog_dpad_mode"; - case MENU_ENUM_LABEL_INPUT_POLL_TYPE_BEHAVIOR: - return "input_poll_type_behavior"; - case MENU_ENUM_LABEL_INPUT_PREFER_FRONT_TOUCH: - return "input_prefer_front_touch"; - case MENU_ENUM_LABEL_INPUT_REMAPPING_DIRECTORY: - return "input_remapping_directory"; - case MENU_ENUM_LABEL_INPUT_REMAP_BINDS_ENABLE: - return "input_remap_binds_enable"; - case MENU_ENUM_LABEL_INPUT_SETTINGS: - return "input_settings"; - case MENU_ENUM_LABEL_INPUT_SETTINGS_BEGIN: - return "input_settings_begin"; - case MENU_ENUM_LABEL_INPUT_SMALL_KEYBOARD_ENABLE: - return "input_small_keyboard_enable"; - case MENU_ENUM_LABEL_INPUT_TOUCH_ENABLE: - return "input_touch_enable"; - case MENU_ENUM_LABEL_INPUT_TURBO_PERIOD: - return "input_turbo_period"; - case MENU_ENUM_LABEL_INPUT_USER_10_BINDS: - return "10_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_11_BINDS: - return "11_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_12_BINDS: - return "12_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_13_BINDS: - return "13_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_14_BINDS: - return "14_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_15_BINDS: - return "15_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_16_BINDS: - return "16_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_1_BINDS: - return "1_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_2_BINDS: - return "2_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_3_BINDS: - return "3_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_4_BINDS: - return "4_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_5_BINDS: - return "5_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_6_BINDS: - return "6_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_7_BINDS: - return "7_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_8_BINDS: - return "8_input_binds_list"; - case MENU_ENUM_LABEL_INPUT_USER_9_BINDS: - return "9_input_binds_list"; - case MENU_ENUM_LABEL_JOYPAD_AUTOCONFIG_DIR: - return "joypad_autoconfig_dir"; - case MENU_ENUM_LABEL_JOYPAD_DRIVER: - return "input_joypad_driver"; - case MENU_ENUM_LABEL_KEYBOARD_OVERLAY_PRESET: - return "input_osk_overlay"; - case MENU_ENUM_LABEL_LAKKA_SERVICES: - return "lakka_services"; - case MENU_ENUM_LABEL_LIBRETRO_DIR_PATH: - return "libretro_dir_path"; - case MENU_ENUM_LABEL_LIBRETRO_INFO_PATH: - return "libretro_info_path"; - case MENU_ENUM_LABEL_LIBRETRO_LOG_LEVEL: - return "libretro_log_level"; - case MENU_ENUM_LABEL_LOAD_ARCHIVE: - return "load_archive"; - case MENU_ENUM_LABEL_LOAD_ARCHIVE_DETECT_CORE: - return "load_archive_detect_core"; - case MENU_ENUM_LABEL_LOAD_CONTENT: - return "load_content_default"; - case MENU_ENUM_LABEL_LOAD_CONTENT_HISTORY: - return "load_recent"; - case MENU_ENUM_LABEL_LOAD_CONTENT_LIST: - return "load_content"; - case MENU_ENUM_LABEL_LOAD_STATE: - return "loadstate"; - case MENU_ENUM_LABEL_LOCATION_ALLOW: - return "location_allow"; - case MENU_ENUM_LABEL_LOCATION_DRIVER: - return "location_driver"; - case MENU_ENUM_LABEL_LOGGING_SETTINGS: - return "logging_settings"; - case MENU_ENUM_LABEL_LOG_VERBOSITY: - return "log_verbosity"; - case MENU_ENUM_LABEL_MAIN_MENU: - return "main_menu"; - case MENU_ENUM_LABEL_MANAGEMENT: - return "database_settings"; - case MENU_ENUM_LABEL_MATERIALUI_MENU_COLOR_THEME: - return "materialui_menu_color_theme"; - case MENU_ENUM_LABEL_MATERIALUI_MENU_FOOTER_OPACITY: - return "materialui_menu_footer_opacity"; - case MENU_ENUM_LABEL_MATERIALUI_MENU_HEADER_OPACITY: - return "materialui_menu_header_opacity"; - case MENU_ENUM_LABEL_MENU_DRIVER: - return "menu_driver"; - case MENU_ENUM_LABEL_MENU_ENUM_THROTTLE_FRAMERATE: - return "menu_throttle_framerate"; - case MENU_ENUM_LABEL_MENU_FILE_BROWSER_SETTINGS: - return "menu_file_browser_settings"; - case MENU_ENUM_LABEL_MENU_LINEAR_FILTER: - return "menu_linear_filter"; - case MENU_ENUM_LABEL_MENU_SETTINGS: - return "menu_settings"; - case MENU_ENUM_LABEL_MENU_WALLPAPER: - return "menu_wallpaper"; - case MENU_ENUM_LABEL_MENU_WALLPAPER_OPACITY: - return "menu_wallpaper_opacity"; - case MENU_ENUM_LABEL_MOUSE_ENABLE: - return "menu_mouse_enable"; - case MENU_ENUM_LABEL_MUSIC_TAB: - return "music_tab"; - case MENU_ENUM_LABEL_NAVIGATION_BROWSER_FILTER_SUPPORTED_EXTENSIONS_ENABLE: - return "menu_navigation_browser_filter_supported_extensions_enable"; - case MENU_ENUM_LABEL_NAVIGATION_WRAPAROUND: - return "menu_navigation_wraparound_enable"; - case MENU_ENUM_LABEL_NETPLAY: - return "netplay"; - case MENU_ENUM_LABEL_NETPLAY_CHECK_FRAMES: - return "netplay_check_frames"; - case MENU_ENUM_LABEL_NETPLAY_CLIENT_SWAP_INPUT: - return "netplay_client_swap_input"; - case MENU_ENUM_LABEL_NETPLAY_DELAY_FRAMES: - return "netplay_delay_frames"; - case MENU_ENUM_LABEL_NETPLAY_DISCONNECT: - return "menu_netplay_disconnect"; - case MENU_ENUM_LABEL_NETPLAY_ENABLE: - return "netplay_enable"; - case MENU_ENUM_LABEL_NETPLAY_ENABLE_CLIENT: - return "menu_netplay_enable_client"; - case MENU_ENUM_LABEL_NETPLAY_ENABLE_HOST: - return "menu_netplay_enable_host"; - case MENU_ENUM_LABEL_NETPLAY_IP_ADDRESS: - return "netplay_ip_address"; - case MENU_ENUM_LABEL_NETPLAY_MODE: - return "netplay_mode"; - case MENU_ENUM_LABEL_NETPLAY_NICKNAME: - return "netplay_nickname"; - case MENU_ENUM_LABEL_NETPLAY_SETTINGS: - return "menu_netplay_settings"; - case MENU_ENUM_LABEL_NETPLAY_SPECTATOR_MODE_ENABLE: - return "netplay_spectator_mode_enable"; - case MENU_ENUM_LABEL_NETPLAY_TCP_UDP_PORT: - return "netplay_tcp_udp_port"; - case MENU_ENUM_LABEL_NETWORK_CMD_ENABLE: - return "network_cmd_enable"; - case MENU_ENUM_LABEL_NETWORK_CMD_PORT: - return "network_cmd_port"; - case MENU_ENUM_LABEL_NETWORK_INFORMATION: - return "network_information"; - case MENU_ENUM_LABEL_NETWORK_INFO_ENTRY: - return "network_info_entry"; - case MENU_ENUM_LABEL_NETWORK_REMOTE_ENABLE: - return "network_remote_enable"; - case MENU_ENUM_LABEL_NETWORK_REMOTE_PORT: - return "network_remote_base_port"; - case MENU_ENUM_LABEL_NETWORK_REMOTE_USER_1_ENABLE: - return "network_remote_user_1_enable"; - case MENU_ENUM_LABEL_NETWORK_REMOTE_USER_LAST_ENABLE: - return "network_remote_user_last_enable"; - case MENU_ENUM_LABEL_NETWORK_SETTINGS: - return "network_settings"; - case MENU_ENUM_LABEL_NO_ACHIEVEMENTS_TO_DISPLAY: - return "no_achievements_to_display"; - case MENU_ENUM_LABEL_NO_CORES_AVAILABLE: - return "no_cores_available"; - case MENU_ENUM_LABEL_NO_CORE_INFORMATION_AVAILABLE: - return "no_core_information_available"; - case MENU_ENUM_LABEL_NO_CORE_OPTIONS_AVAILABLE: - return "no_core_options_available"; - case MENU_ENUM_LABEL_NO_ENTRIES_TO_DISPLAY: - return "no_entries_to_display"; - case MENU_ENUM_LABEL_NO_HISTORY_AVAILABLE: - return "no_history"; - case MENU_ENUM_LABEL_NO_ITEMS: - return "no_items"; - case MENU_ENUM_LABEL_NO_PERFORMANCE_COUNTERS: - return "no_performance_counters"; - case MENU_ENUM_LABEL_NO_PLAYLISTS: - return "no_playlists"; - case MENU_ENUM_LABEL_NO_PLAYLIST_ENTRIES_AVAILABLE: - return "no_playlist_entries_available"; - case MENU_ENUM_LABEL_NO_SETTINGS_FOUND: - return "menu_label_no_settings_found"; - case MENU_ENUM_LABEL_NO_SHADER_PARAMETERS: - return "no_shader_parameters."; - case MENU_ENUM_LABEL_ONLINE_UPDATER: - return "online_updater"; - case MENU_ENUM_LABEL_ONSCREEN_DISPLAY_SETTINGS: - return "onscreen_display_settings"; - case MENU_ENUM_LABEL_ONSCREEN_OVERLAY_SETTINGS: - return "onscreen_overlay_settings"; - case MENU_ENUM_LABEL_OPEN_ARCHIVE: - return "open_archive"; - case MENU_ENUM_LABEL_OPEN_ARCHIVE_DETECT_CORE: - return "open_archive_detect_core"; - case MENU_ENUM_LABEL_OSK_OVERLAY_DIRECTORY: - return "osk_overlay_directory"; - case MENU_ENUM_LABEL_OVERLAY_AUTOLOAD_PREFERRED: - return "overlay_autoload_preferred"; - case MENU_ENUM_LABEL_OVERLAY_DIRECTORY: - return "overlay_directory"; - case MENU_ENUM_LABEL_OVERLAY_OPACITY: - return "input_overlay_opacity"; - case MENU_ENUM_LABEL_OVERLAY_PRESET: - return "input_overlay"; - case MENU_ENUM_LABEL_OVERLAY_SCALE: - return "input_overlay_scale"; - case MENU_ENUM_LABEL_PAL60_ENABLE: - return "pal60_enable"; - case MENU_ENUM_LABEL_PARENT_DIRECTORY: - return "parent_directory"; - case MENU_ENUM_LABEL_PAUSE_LIBRETRO: - return "menu_pause_libretro"; - case MENU_ENUM_LABEL_PAUSE_NONACTIVE: - return "pause_nonactive"; - case MENU_ENUM_LABEL_PERFCNT_ENABLE: - return "perfcnt_enable"; - case MENU_ENUM_LABEL_PLAYLISTS_TAB: - return "playlists_tab"; - case MENU_ENUM_LABEL_PLAYLIST_COLLECTION_ENTRY: - return "playlist_collection_entry"; - case MENU_ENUM_LABEL_PLAYLIST_DIRECTORY: - return "playlist_directory"; - case MENU_ENUM_LABEL_PLAYLIST_ENTRY: - return "playlist_entry"; - case MENU_ENUM_LABEL_PLAYLIST_SETTINGS: - return "playlist_settings"; - case MENU_ENUM_LABEL_PLAYLIST_SETTINGS_BEGIN: - return "playlist_settings_begin"; - case MENU_ENUM_LABEL_POINTER_ENABLE: - return "menu_pointer_enable"; - case MENU_ENUM_LABEL_PRIVACY_SETTINGS: - return "privacy_settings"; - case MENU_ENUM_LABEL_QUIT_RETROARCH: - return "quit_retroarch"; - case MENU_ENUM_LABEL_RDB_ENTRY: - return "rdb_entry"; - case MENU_ENUM_LABEL_RDB_ENTRY_ANALOG: - return "rdb_entry_analog"; - case MENU_ENUM_LABEL_RDB_ENTRY_BBFC_RATING: - return "rdb_entry_bbfc_rating"; - case MENU_ENUM_LABEL_RDB_ENTRY_CERO_RATING: - return "rdb_entry_cero_rating"; - case MENU_ENUM_LABEL_RDB_ENTRY_CRC32: - return "rdb_entry_crc32"; - case MENU_ENUM_LABEL_RDB_ENTRY_DESCRIPTION: - return "rdb_entry_description"; - case MENU_ENUM_LABEL_RDB_ENTRY_DEVELOPER: - return "rdb_entry_developer"; - case MENU_ENUM_LABEL_RDB_ENTRY_EDGE_MAGAZINE_ISSUE: - return "rdb_entry_edge_magazine_issue"; - case MENU_ENUM_LABEL_RDB_ENTRY_EDGE_MAGAZINE_RATING: - return "rdb_entry_edge_magazine_rating"; - case MENU_ENUM_LABEL_RDB_ENTRY_EDGE_MAGAZINE_REVIEW: - return "rdb_entry_edge_magazine_review"; - case MENU_ENUM_LABEL_RDB_ENTRY_ELSPA_RATING: - return "rdb_entry_elspa_rating"; - case MENU_ENUM_LABEL_RDB_ENTRY_ENHANCEMENT_HW: - return "rdb_entry_enhancement_hw"; - case MENU_ENUM_LABEL_RDB_ENTRY_ESRB_RATING: - return "rdb_entry_esrb_rating"; - case MENU_ENUM_LABEL_RDB_ENTRY_FAMITSU_MAGAZINE_RATING: - return "rdb_entry_famitsu_magazine_rating"; - case MENU_ENUM_LABEL_RDB_ENTRY_FRANCHISE: - return "rdb_entry_franchise"; - case MENU_ENUM_LABEL_RDB_ENTRY_GENRE: - return "rdb_entry_genre"; - case MENU_ENUM_LABEL_RDB_ENTRY_MAX_USERS: - return "rdb_entry_max_users"; - case MENU_ENUM_LABEL_RDB_ENTRY_MD5: - return "rdb_entry_md5"; - case MENU_ENUM_LABEL_RDB_ENTRY_NAME: - return "rdb_entry_name"; - case MENU_ENUM_LABEL_RDB_ENTRY_ORIGIN: - return "rdb_entry_origin"; - case MENU_ENUM_LABEL_RDB_ENTRY_PEGI_RATING: - return "rdb_entry_pegi_rating"; - case MENU_ENUM_LABEL_RDB_ENTRY_PUBLISHER: - return "rdb_entry_publisher"; - case MENU_ENUM_LABEL_RDB_ENTRY_RELEASE_MONTH: - return "rdb_entry_releasemonth"; - case MENU_ENUM_LABEL_RDB_ENTRY_RELEASE_YEAR: - return "rdb_entry_releaseyear"; - case MENU_ENUM_LABEL_RDB_ENTRY_SERIAL: - return "rdb_entry_serial"; - case MENU_ENUM_LABEL_RDB_ENTRY_SHA1: - return "rdb_entry_sha1"; - case MENU_ENUM_LABEL_RDB_ENTRY_START_CONTENT: - return "rdb_entry_start_content"; - case MENU_ENUM_LABEL_RDB_ENTRY_TGDB_RATING: - return "rdb_entry_tgdb_rating"; - case MENU_ENUM_LABEL_REBOOT: - return "reboot"; - case MENU_ENUM_LABEL_RECORDING_CONFIG_DIRECTORY: - return "recording_config_directory"; - case MENU_ENUM_LABEL_RECORDING_OUTPUT_DIRECTORY: - return "recording_output_directory"; - case MENU_ENUM_LABEL_RECORDING_SETTINGS: - return "recording_settings"; - case MENU_ENUM_LABEL_RECORD_CONFIG: - return "record_config"; - case MENU_ENUM_LABEL_RECORD_DRIVER: - return "record_driver"; - case MENU_ENUM_LABEL_RECORD_ENABLE: - return "record_enable"; - case MENU_ENUM_LABEL_RECORD_PATH: - return "record_path"; - case MENU_ENUM_LABEL_RECORD_USE_OUTPUT_DIRECTORY: - return "record_use_output_directory"; - case MENU_ENUM_LABEL_REMAP_FILE_LOAD: - return "remap_file_load"; - case MENU_ENUM_LABEL_REMAP_FILE_SAVE_CORE: - return "remap_file_save_core"; - case MENU_ENUM_LABEL_REMAP_FILE_SAVE_GAME: - return "remap_file_save_game"; - case MENU_ENUM_LABEL_RESTART_CONTENT: - return "restart_content"; - case MENU_ENUM_LABEL_RESTART_RETROARCH: - return "restart_retroarch"; - case MENU_ENUM_LABEL_RESUME_CONTENT: - return "resume_content"; - case MENU_ENUM_LABEL_RETRO_ACHIEVEMENTS_SETTINGS: - return "retro_achievements_settings"; - case MENU_ENUM_LABEL_REWIND_ENABLE: - return "rewind_enable"; - case MENU_ENUM_LABEL_REWIND_GRANULARITY: - return "rewind_granularity"; - case MENU_ENUM_LABEL_REWIND_SETTINGS: - return "rewind_settings"; - case MENU_ENUM_LABEL_RGUI_BROWSER_DIRECTORY: - return "rgui_browser_directory"; - case MENU_ENUM_LABEL_RGUI_CONFIG_DIRECTORY: - return "rgui_config_directory"; - case MENU_ENUM_LABEL_RGUI_SHOW_START_SCREEN: - return "rgui_show_start_screen"; - case MENU_ENUM_LABEL_RUN: - return "collection"; - case MENU_ENUM_LABEL_SAMBA_ENABLE: - return "samba_enable"; - case MENU_ENUM_LABEL_SAVEFILE_DIRECTORY: - return "savefile_directory"; - case MENU_ENUM_LABEL_SAVESTATE_AUTO_INDEX: - return "savestate_auto_index"; - case MENU_ENUM_LABEL_SAVESTATE_AUTO_LOAD: - return "savestate_auto_load"; - case MENU_ENUM_LABEL_SAVESTATE_AUTO_SAVE: - return "savestate_auto_save"; - case MENU_ENUM_LABEL_SAVESTATE_DIRECTORY: - return "savestate_directory"; - case MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG: - return "save_current_config"; - case MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_CORE: - return "save_current_config_override_core"; - case MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_GAME: - return "save_current_config_override_game"; - case MENU_ENUM_LABEL_SAVE_NEW_CONFIG: - return "save_new_config"; - case MENU_ENUM_LABEL_SAVE_STATE: - return "savestate"; - case MENU_ENUM_LABEL_SAVING_SETTINGS: - return "saving_settings"; - case MENU_ENUM_LABEL_SCAN_DIRECTORY: - return "scan_directory"; - case MENU_ENUM_LABEL_SCAN_FILE: - return "scan_file"; - case MENU_ENUM_LABEL_SCAN_THIS_DIRECTORY: - return "scan_this_directory"; - case MENU_ENUM_LABEL_SCREENSHOT_DIRECTORY: - return "screenshot_directory"; - case MENU_ENUM_LABEL_SCREEN_RESOLUTION: - return "screen_resolution"; - case MENU_ENUM_LABEL_SETTINGS: - return "settings"; - case MENU_ENUM_LABEL_SETTINGS_TAB: - return "settings_tab"; - case MENU_ENUM_LABEL_SHADER_APPLY_CHANGES: - return "shader_apply_changes"; - case MENU_ENUM_LABEL_SHADER_OPTIONS: - return "shader_options"; - case MENU_ENUM_LABEL_SHADER_PARAMETERS_ENTRY: - return "shader_parameters_entry"; - case MENU_ENUM_LABEL_SHOW_ADVANCED_SETTINGS: - return "menu_show_advanced_settings"; - case MENU_ENUM_LABEL_SHOW_HIDDEN_FILES: - return "show_hidden_files"; - case MENU_ENUM_LABEL_SHUTDOWN: - return "shutdown"; - case MENU_ENUM_LABEL_SLOWMOTION_RATIO: - return "slowmotion_ratio"; - case MENU_ENUM_LABEL_SORT_SAVEFILES_ENABLE: - return "sort_savefiles_enable"; - case MENU_ENUM_LABEL_SORT_SAVESTATES_ENABLE: - return "sort_savestates_enable"; - case MENU_ENUM_LABEL_SSH_ENABLE: - return "ssh_enable"; - case MENU_ENUM_LABEL_START_CORE: - return "start_core"; - case MENU_ENUM_LABEL_START_NET_RETROPAD: - return "menu_start_net_retropad"; - case MENU_ENUM_LABEL_START_VIDEO_PROCESSOR: - return "menu_start_video_processor"; - case MENU_ENUM_LABEL_STATE_SLOT: - return "state_slot"; - case MENU_ENUM_LABEL_STDIN_CMD_ENABLE: - return "stdin_commands"; - case MENU_ENUM_LABEL_SUSPEND_SCREENSAVER_ENABLE: - return "suspend_screensaver_enable"; - case MENU_ENUM_LABEL_SYSTEM_BGM_ENABLE: - return "system_bgm_enable"; - case MENU_ENUM_LABEL_SYSTEM_DIRECTORY: - return "system_directory"; - case MENU_ENUM_LABEL_SYSTEM_INFORMATION: - return "system_information"; - case MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY: - return "system_info_entry"; - case MENU_ENUM_LABEL_TAKE_SCREENSHOT: - return "take_screenshot"; - case MENU_ENUM_LABEL_THREADED_DATA_RUNLOOP_ENABLE: - return "threaded_data_runloop_enable"; - case MENU_ENUM_LABEL_THUMBNAILS: - return "thumbnails"; - case MENU_ENUM_LABEL_THUMBNAILS_DIRECTORY: - return "thumbnails_directory"; - case MENU_ENUM_LABEL_THUMBNAILS_UPDATER_LIST: - return "thumbnails_updater_list"; - case MENU_ENUM_LABEL_TIMEDATE_ENABLE: - return "menu_timedate_enable"; - case MENU_ENUM_LABEL_TITLE_COLOR: - return "menu_title_color"; - case MENU_ENUM_LABEL_UI_COMPANION_ENABLE: - return "ui_companion_enable"; - case MENU_ENUM_LABEL_UI_COMPANION_START_ON_BOOT: - return "ui_companion_start_on_boot"; - case MENU_ENUM_LABEL_UI_MENUBAR_ENABLE: - return "ui_menubar_enable"; - case MENU_ENUM_LABEL_UNDO_LOAD_STATE: - return "undoloadstate"; - case MENU_ENUM_LABEL_UNDO_SAVE_STATE: - return "undosavestate"; - case MENU_ENUM_LABEL_UPDATER_SETTINGS: - return "updater_settings"; - case MENU_ENUM_LABEL_UPDATE_ASSETS: - return "update_assets"; - case MENU_ENUM_LABEL_UPDATE_AUTOCONFIG_PROFILES: - return "update_autoconfig_profiles"; - case MENU_ENUM_LABEL_UPDATE_CG_SHADERS: - return "update_cg_shaders"; - case MENU_ENUM_LABEL_UPDATE_CHEATS: - return "update_cheats"; - case MENU_ENUM_LABEL_UPDATE_CORE_INFO_FILES: - return "update_core_info_files"; - case MENU_ENUM_LABEL_UPDATE_DATABASES: - return "update_databases"; - case MENU_ENUM_LABEL_UPDATE_GLSL_SHADERS: - return "update_glsl_shaders"; - case MENU_ENUM_LABEL_UPDATE_LAKKA: - return "update_lakka"; - case MENU_ENUM_LABEL_UPDATE_OVERLAYS: - return "update_overlays"; - case MENU_ENUM_LABEL_UPDATE_SLANG_SHADERS: - return "update_slang_shaders"; - case MENU_ENUM_LABEL_URL_ENTRY: - return "url_entry"; - case MENU_ENUM_LABEL_USER_INTERFACE_SETTINGS: - return "user_interface_settings"; - case MENU_ENUM_LABEL_USER_LANGUAGE: - return "user_language"; - case MENU_ENUM_LABEL_USER_SETTINGS: - return "user_settings"; - case MENU_ENUM_LABEL_USE_BUILTIN_IMAGE_VIEWER: - return "use_builtin_image_viewer"; - case MENU_ENUM_LABEL_USE_BUILTIN_PLAYER: - return "use_builtin_player"; - case MENU_ENUM_LABEL_USE_THIS_DIRECTORY: - return "use_this_directory"; - case MENU_ENUM_LABEL_VIDEO_ALLOW_ROTATE: - return "video_allow_rotate"; - case MENU_ENUM_LABEL_VIDEO_ASPECT_RATIO_AUTO: - return "video_aspect_ratio_auto"; - case MENU_ENUM_LABEL_VIDEO_ASPECT_RATIO_INDEX: - return "aspect_ratio_index"; - case MENU_ENUM_LABEL_VIDEO_BLACK_FRAME_INSERTION: - return "video_black_frame_insertion"; - case MENU_ENUM_LABEL_VIDEO_CROP_OVERSCAN: - return "video_crop_overscan"; - case MENU_ENUM_LABEL_VIDEO_DISABLE_COMPOSITION: - return "video_disable_composition"; - case MENU_ENUM_LABEL_VIDEO_DRIVER: - return "video_driver"; - case MENU_ENUM_LABEL_VIDEO_FILTER: - return "video_filter"; - case MENU_ENUM_LABEL_VIDEO_FILTER_DIR: - return "video_filter_dir"; - case MENU_ENUM_LABEL_VIDEO_FILTER_FLICKER: - return "video_filter_flicker"; - case MENU_ENUM_LABEL_VIDEO_FONT_ENABLE: - return "video_font_enable"; - case MENU_ENUM_LABEL_VIDEO_FONT_PATH: - return "video_font_path"; - case MENU_ENUM_LABEL_VIDEO_FONT_SIZE: - return "video_font_size"; - case MENU_ENUM_LABEL_VIDEO_FORCE_ASPECT: - return "video_force_aspect"; - case MENU_ENUM_LABEL_VIDEO_FORCE_SRGB_DISABLE: - return "video_force_srgb_disable"; - case MENU_ENUM_LABEL_VIDEO_FRAME_DELAY: - return "video_frame_delay"; - case MENU_ENUM_LABEL_VIDEO_FULLSCREEN: - return "video_fullscreen"; - case MENU_ENUM_LABEL_VIDEO_GAMMA: - return "video_gamma"; - case MENU_ENUM_LABEL_VIDEO_GPU_RECORD: - return "video_gpu_record"; - case MENU_ENUM_LABEL_VIDEO_GPU_SCREENSHOT: - return "video_gpu_screenshot"; - case MENU_ENUM_LABEL_VIDEO_HARD_SYNC: - return "video_hard_sync"; - case MENU_ENUM_LABEL_VIDEO_HARD_SYNC_FRAMES: - return "video_hard_sync_frames"; - case MENU_ENUM_LABEL_VIDEO_MAX_SWAPCHAIN_IMAGES: - return "video_max_swapchain_images"; - case MENU_ENUM_LABEL_VIDEO_MESSAGE_POS_X: - return "video_message_pos_x"; - case MENU_ENUM_LABEL_VIDEO_MESSAGE_POS_Y: - return "video_message_pos_y"; - case MENU_ENUM_LABEL_VIDEO_MONITOR_INDEX: - return "video_monitor_index"; - case MENU_ENUM_LABEL_VIDEO_POST_FILTER_RECORD: - return "video_post_filter_record"; - case MENU_ENUM_LABEL_VIDEO_REFRESH_RATE: - return "video_refresh_rate"; - case MENU_ENUM_LABEL_VIDEO_REFRESH_RATE_AUTO: - return "video_refresh_rate_auto"; - case MENU_ENUM_LABEL_VIDEO_ROTATION: - return "video_rotation"; - case MENU_ENUM_LABEL_VIDEO_SCALE: - return "video_scale"; - case MENU_ENUM_LABEL_VIDEO_SCALE_INTEGER: - return "video_scale_integer"; - case MENU_ENUM_LABEL_VIDEO_SETTINGS: - return "video_settings"; - case MENU_ENUM_LABEL_VIDEO_SHADER_DIR: - return "video_shader_dir"; - case MENU_ENUM_LABEL_VIDEO_SHADER_FILTER_PASS: - return "video_shader_filter_pass"; - case MENU_ENUM_LABEL_VIDEO_SHADER_NUM_PASSES: - return "video_shader_num_passes"; - case MENU_ENUM_LABEL_VIDEO_SHADER_PARAMETERS: - return "video_shader_parameters"; - case MENU_ENUM_LABEL_VIDEO_SHADER_PASS: - return "video_shader_pass"; - case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET: - return "video_shader_preset"; - case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_PARAMETERS: - return "video_shader_preset_parameters"; - case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_AS: - return "video_shader_preset_save_as"; - case MENU_ENUM_LABEL_VIDEO_SHADER_SCALE_PASS: - return "video_shader_scale_pass"; - case MENU_ENUM_LABEL_VIDEO_SHARED_CONTEXT: - return "video_shared_context"; - case MENU_ENUM_LABEL_VIDEO_SMOOTH: - return "video_smooth"; - case MENU_ENUM_LABEL_VIDEO_SOFT_FILTER: - return "soft_filter"; - case MENU_ENUM_LABEL_VIDEO_SWAP_INTERVAL: - return "video_swap_interval"; - case MENU_ENUM_LABEL_VIDEO_TAB: - return "video_tab"; - case MENU_ENUM_LABEL_VIDEO_THREADED: - return "video_threaded"; - case MENU_ENUM_LABEL_VIDEO_VFILTER: - return "video_vfilter"; - case MENU_ENUM_LABEL_VIDEO_VIEWPORT_CUSTOM_HEIGHT: - return "video_viewport_custom_height"; - case MENU_ENUM_LABEL_VIDEO_VIEWPORT_CUSTOM_WIDTH: - return "video_viewport_custom_width"; - case MENU_ENUM_LABEL_VIDEO_VIEWPORT_CUSTOM_X: - return "video_viewport_custom_x"; - case MENU_ENUM_LABEL_VIDEO_VIEWPORT_CUSTOM_Y: - return "video_viewport_custom_y"; - case MENU_ENUM_LABEL_VIDEO_VI_WIDTH: - return "video_vi_width"; - case MENU_ENUM_LABEL_VIDEO_VSYNC: - return "video_vsync"; - case MENU_ENUM_LABEL_VIDEO_WINDOWED_FULLSCREEN: - return "video_windowed_fullscreen"; - case MENU_ENUM_LABEL_WIFI_DRIVER: - return "wifi_driver"; - case MENU_ENUM_LABEL_WIFI_SETTINGS: - return "wifi_settings"; - case MENU_ENUM_LABEL_XMB_ALPHA_FACTOR: - return "xmb_alpha_factor"; - case MENU_ENUM_LABEL_XMB_FONT: - return "xmb_font"; - case MENU_ENUM_LABEL_XMB_MENU_COLOR_THEME: - return "xmb_menu_color_theme"; - case MENU_ENUM_LABEL_XMB_RIBBON_ENABLE: - return "xmb_ribbon_enable"; - case MENU_ENUM_LABEL_XMB_SCALE_FACTOR: - return "xmb_scale_factor"; - case MENU_ENUM_LABEL_XMB_SHADOWS_ENABLE: - return "xmb_shadows_enable"; - case MENU_ENUM_LABEL_XMB_SHOW_HISTORY: - return "xmb_show_history"; - case MENU_ENUM_LABEL_XMB_SHOW_IMAGES: - return "xmb_show_images"; - case MENU_ENUM_LABEL_XMB_SHOW_MUSIC: - return "xmb_show_music"; - case MENU_ENUM_LABEL_XMB_SHOW_SETTINGS: - return "xmb_show_settings"; - case MENU_ENUM_LABEL_XMB_SHOW_VIDEO: - return "xmb_show_video"; - case MENU_ENUM_LABEL_XMB_THEME: - return "xmb_theme"; case MENU_ENUM_SUBLABEL_MENU_SETTINGS: return "Điều chỉnh thiết lập related to the appearance of the menu screen."; - case MENU_ENUM_SUBLABEL_VIDEO_HARD_SYNC: - return "Hard-synchronize the CPU and GPU. Reduces latency at the cost of performance."; - case MENU_ENUM_SUBLABEL_VIDEO_THREADED: - return "Improves performance at the cost of latency and more video stuttering. Use only if you cannot obtain full speed otherwise."; case MSG_AUDIO_VOLUME: return "Âm lượng âm thanh"; case MSG_AUTODETECT: return "Tự động phát hiện"; case MSG_AUTOLOADING_SAVESTATE_FROM: return "Đang tự đông tải savestate từ"; - case MSG_BRINGING_UP_COMMAND_INTERFACE_ON_PORT: - return "bringing_up_command_interface_at_port"; case MSG_CONNECTING_TO_NETPLAY_HOST: return "Đang kết nối vào máy chủ netplay"; case MSG_CONNECTING_TO_PORT: return "Đang kết nối vào port"; case MSG_CONNECTION_SLOT: return "Khe kết nối"; - case MSG_CONNECT_DEVICE_FROM_A_VALID_PORT: - return "connect_device_from_a_valid_port"; - case MSG_DEVICE_CONFIGURED_IN_PORT: - return "configured in port"; - case MSG_DEVICE_DISCONNECTED_FROM_PORT: - return "Device disconnected from port"; - case MSG_DEVICE_NOT_CONFIGURED: - return "not configured"; - case MSG_DISCONNECTING_DEVICE_FROM_PORT: - return "disconnecting_device_from_port"; - case MSG_DISCONNECT_DEVICE_FROM_A_VALID_PORT: - return "disconnect_device_from_a_valid_port"; case MSG_FAILED: return "Bị Lỗi"; - case MSG_FAILED_TO_SET_DISK: - return "Failed to set disk"; - case MSG_FAILED_TO_START_AUDIO_DRIVER: - return "failed_to_start_audio_driver"; case MSG_FILE_ALREADY_EXISTS_SAVING_TO_BACKUP_BUFFER: return "Ttệp đã tồn tại. Đang lưu vào backup buffer"; - case MSG_FOUND_LAST_STATE_SLOT: - return "found_last_state_slot"; case MSG_GOT_CONNECTION_FROM: - return "Được kết nối từ"; + return "Được kết nối từ: \"%s\""; case MSG_NETPLAY_USERS_HAS_FLIPPED: return "Người dùng Netplay đã flipped"; - case MSG_SETTING_DISK_IN_TRAY: - return "Setting disk in tray"; case MSG_SUCCEEDED: return "Đã thành công"; case MSG_UNKNOWN_NETPLAY_COMMAND_RECEIVED: return "Netplay không biết lệnh nhận được"; case MSG_WAITING_FOR_CLIENT: return "Đang đợi máy khách ..."; - default: - break; - } - - return "null"; -} -#endif - -const char *msg_hash_to_str_vn(enum msg_hash_enums msg) -{ -#ifdef HAVE_MENU - const char *ret = menu_hash_to_str_vn_label_enum(msg); - - if (ret && !string_is_equal(ret, "null")) - return ret; -#endif - - switch (msg) - { case MSG_SHADER: return "Shader"; case MSG_SORRY_UNIMPLEMENTED_CORES_DONT_DEMAND_CONTENT_NETPLAY: @@ -3184,9 +2082,7 @@ const char *msg_hash_to_str_vn(enum msg_hash_enums msg) case MENU_ENUM_LABEL_VALUE_CONFIGURATION_SETTINGS: return "Configuration"; case MENU_ENUM_LABEL_VALUE_CONFIG_SAVE_ON_EXIT: - return "Save Configuration On Exit"; - case MENU_ENUM_LABEL_VALUE_CONFIRM_ON_EXIT: - return "Ask For Confirmation On Exit"; + return "Save Configuration on Exit"; case MENU_ENUM_LABEL_VALUE_CONTENT_COLLECTION_LIST: return "Collections"; case MENU_ENUM_LABEL_VALUE_CONTENT_DATABASE_DIRECTORY: @@ -3217,10 +2113,8 @@ const char *msg_hash_to_str_vn(enum msg_hash_enums msg) return "Core label"; case MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_NAME: return "Core name"; - case MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_NOTES: - return "Core notes"; case MENU_ENUM_LABEL_VALUE_CORE_INFO_FIRMWARE: - return "Firmware"; + return "Firmware(s)"; case MENU_ENUM_LABEL_VALUE_CORE_INFO_LICENSES: return "License(s)"; case MENU_ENUM_LABEL_VALUE_CORE_INFO_PERMISSIONS: @@ -3308,9 +2202,9 @@ const char *msg_hash_to_str_vn(enum msg_hash_enums msg) /* FIXME? Translate 'Load Dummy on Core Shutdown' */ return "Load Dummy on Core Shutdown"; case MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPER: - return "Dynamic Wallpaper"; + return "Dynamic Background"; case MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPERS_DIRECTORY: - return "Dynamic Wallpapers Dir"; + return "Dynamic Background Dir"; case MENU_ENUM_LABEL_VALUE_CHEEVOS_ENABLE: return "Enable"; case MENU_ENUM_LABEL_VALUE_ENTRY_HOVER_COLOR: @@ -3330,7 +2224,7 @@ const char *msg_hash_to_str_vn(enum msg_hash_enums msg) case MENU_ENUM_LABEL_VALUE_FRONTEND_COUNTERS: return "Frontend Counters"; case MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_OPTIONS: - return "Tải Content-specific core options automatically"; + return "Tải Content-Specific Core Options Automatically"; case MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_OPTIONS_CREATE: return "Create game-options file"; case MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_OPTIONS_IN_USE: @@ -3395,8 +2289,6 @@ const char *msg_hash_to_str_vn(enum msg_hash_enums msg) return "Autoconfig Enable"; case MENU_ENUM_LABEL_VALUE_INPUT_AXIS_THRESHOLD: return "Input Axis Threshold"; - case MENU_ENUM_LABEL_VALUE_INPUT_BACK_AS_MENU_ENUM_TOGGLE_ENABLE: - return "Back As Menu Toggle Enable"; case MENU_ENUM_LABEL_VALUE_INPUT_BIND_ALL: return "Bind All"; case MENU_ENUM_LABEL_VALUE_INPUT_BIND_DEFAULT_ALL: @@ -3561,10 +2453,8 @@ const char *msg_hash_to_str_vn(enum msg_hash_enums msg) return "Input Device Autoconfig Dir"; case MENU_ENUM_LABEL_VALUE_JOYPAD_DRIVER: return "Joypad Driver"; - case MENU_ENUM_LABEL_VALUE_KEYBOARD_OVERLAY_PRESET: - return "Keyboard Overlay Preset"; case MENU_ENUM_LABEL_VALUE_LAKKA_SERVICES: - return "Lakka Services"; + return "Services"; case MENU_ENUM_LABEL_VALUE_LANG_CHINESE_SIMPLIFIED: return "Tiếng Trung Quốc (Chữ Hán giản thể)"; case MENU_ENUM_LABEL_VALUE_LANG_CHINESE_TRADITIONAL: @@ -3658,9 +2548,9 @@ const char *msg_hash_to_str_vn(enum msg_hash_enums msg) case MENU_ENUM_LABEL_VALUE_MENU_SETTINGS: return "Menu"; case MENU_ENUM_LABEL_VALUE_MENU_WALLPAPER: - return "Menu Wallpaper"; + return "Background"; case MENU_ENUM_LABEL_VALUE_MENU_WALLPAPER_OPACITY: - return "Wallpaper opacity"; + return "Background opacity"; case MENU_ENUM_LABEL_VALUE_MISSING: return "Missing"; case MENU_ENUM_LABEL_VALUE_MORE: @@ -3872,15 +2762,15 @@ const char *msg_hash_to_str_vn(enum msg_hash_enums msg) case MENU_ENUM_LABEL_VALUE_RECORDING_SETTINGS: return "Recording"; case MENU_ENUM_LABEL_VALUE_RECORD_CONFIG: - return "Record Config"; + return "Load Recording Config..."; case MENU_ENUM_LABEL_VALUE_RECORD_DRIVER: return "Record Driver"; case MENU_ENUM_LABEL_VALUE_RECORD_ENABLE: - return "Record Enable"; + return "Enabel Recording"; case MENU_ENUM_LABEL_VALUE_RECORD_PATH: - return "Output File"; + return "Save Recording Output as..."; case MENU_ENUM_LABEL_VALUE_RECORD_USE_OUTPUT_DIRECTORY: - return "Use Output Dir"; + return "Save Recordings in Output Dir"; case MENU_ENUM_LABEL_VALUE_REMAP_FILE: return "Remap File"; case MENU_ENUM_LABEL_VALUE_REMAP_FILE_LOAD: @@ -4252,7 +3142,7 @@ const char *msg_hash_to_str_vn(enum msg_hash_enums msg) case MENU_ENUM_LABEL_VALUE_VIDEO_GAMMA: return "Video Gamma"; case MENU_ENUM_LABEL_VALUE_VIDEO_GPU_RECORD: - return "GPU Record Enable"; + return "Use GPU Recording"; case MENU_ENUM_LABEL_VALUE_VIDEO_GPU_SCREENSHOT: return "GPU Screenshot Enable"; case MENU_ENUM_LABEL_VALUE_VIDEO_HARD_SYNC: @@ -4268,7 +3158,7 @@ const char *msg_hash_to_str_vn(enum msg_hash_enums msg) case MENU_ENUM_LABEL_VALUE_VIDEO_MONITOR_INDEX: return "Monitor Index"; case MENU_ENUM_LABEL_VALUE_VIDEO_POST_FILTER_RECORD: - return "Post filter record Enable"; + return "Enable Post Filter Recording"; case MENU_ENUM_LABEL_VALUE_VIDEO_REFRESH_RATE: return "Refresh Rate"; case MENU_ENUM_LABEL_VALUE_VIDEO_REFRESH_RATE_AUTO: @@ -4340,8 +3230,8 @@ const char *msg_hash_to_str_vn(enum msg_hash_enums msg) return "FlatUI"; case MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_MONOCHROME: return "Monochrome"; - case MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_MONOCHROME_JAGGED: - return "Monochrome Jagged"; + case MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_SYSTEMATIC: + return "Systematic"; case MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_PIXEL: return "Pixel"; case MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_RETROACTIVE: @@ -4398,6 +3288,10 @@ const char *msg_hash_to_str_vn(enum msg_hash_enums msg) return "Bật/tắt bluetooth."; case MENU_ENUM_SUBLABEL_CONFIG_SAVE_ON_EXIT: return "Lưu cấu hình khi thoát retroarch."; + case MENU_ENUM_SUBLABEL_CONFIGURATION_SETTINGS: + return "Change default settings for configuration files."; + case MENU_ENUM_SUBLABEL_CONFIGURATIONS_LIST: + return "Manage and create configuration files."; case MENU_ENUM_SUBLABEL_CPU_CORES: return "Số lượng lõi của CPU."; case MENU_ENUM_SUBLABEL_FPS_SHOW: @@ -4654,8 +3548,10 @@ const char *msg_hash_to_str_vn(enum msg_hash_enums msg) return "Preset Filename"; case MSG_INTERFACE: return "Interface"; - case MSG_INTERNAL_MEMORY: - return "Internal Memory"; + case MSG_INTERNAL_STORAGE: + return "Internal Storage"; + case MSG_REMOVABLE_STORAGE: + return "Removable Storage"; case MSG_INVALID_NICKNAME_SIZE: return "Invalid nickname size."; case MSG_IN_BYTES: diff --git a/libretro-common/conversion/float_to_s16_neon.c b/libretro-common/conversion/float_to_s16_neon.c new file mode 100644 index 0000000000..4b9be62329 --- /dev/null +++ b/libretro-common/conversion/float_to_s16_neon.c @@ -0,0 +1,64 @@ +/* Copyright (C) 2010-2016 The RetroArch team + * + * --------------------------------------------------------------------------------------- + * The following license statement only applies to this file (float_to_s16_neon.S). + * --------------------------------------------------------------------------------------- + * + * Permission is hereby granted, free of charge, + * to any person obtaining a copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#if defined(__ARM_NEON__) + +#if defined(__thumb__) +#define DECL_ARMMODE(x) " .align 2\n" " .global " x "\n" " .thumb\n" " .thumb_func\n" " .type " x ", %function\n" x ":\n" +#else +#define DECL_ARMMODE(x) " .align 4\n" " .global " x "\n" " .arm\n" x ":\n" +#endif + +asm( + DECL_ARMMODE("convert_float_s16_asm") + DECL_ARMMODE("_convert_float_s16_asm") + "# convert_float_s16_asm(int16_t *out, const float *in, size_t samples)\n" + " # Hacky way to get a constant of 2^15.\n" + " # ((2^4)^2)^2 * 0.5 = 2^15\n" + " vmov.f32 q8, #16.0\n" + " vmov.f32 q9, #0.5\n" + " vmul.f32 q8, q8, q8\n" + " vmul.f32 q8, q8, q8\n" + " vmul.f32 q8, q8, q9\n" + "\n" + "1:\n" + " # Preload here?\n" + " vld1.f32 {q0-q1}, [r1]!\n" + "\n" + " vmul.f32 q0, q0, q8\n" + " vmul.f32 q1, q1, q8\n" + "\n" + " vcvt.s32.f32 q0, q0\n" + " vcvt.s32.f32 q1, q1\n" + "\n" + " vqmovn.s32 d4, q0\n" + " vqmovn.s32 d5, q1\n" + "\n" + " vst1.f32 {d4-d5}, [r0]!\n" + "\n" + " # Guaranteed to get samples in multiples of 8.\n" + " subs r2, r2, #8\n" + " bne 1b\n" + "\n" + " bx lr\n" + "\n" + ); +#endif diff --git a/libretro-common/conversion/s16_to_float_neon.c b/libretro-common/conversion/s16_to_float_neon.c new file mode 100644 index 0000000000..e6b24c00c3 --- /dev/null +++ b/libretro-common/conversion/s16_to_float_neon.c @@ -0,0 +1,71 @@ +/* Copyright (C) 2010-2016 The RetroArch team + * + * --------------------------------------------------------------------------------------- + * The following license statement only applies to this file (s16_to_float_neon.S). + * --------------------------------------------------------------------------------------- + * + * Permission is hereby granted, free of charge, + * to any person obtaining a copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#if defined(__ARM_NEON__) + +#if defined(__thumb__) +#define DECL_ARMMODE(x) " .align 2\n" " .global " x "\n" " .thumb\n" " .thumb_func\n" " .type " x ", %function\n" x ":\n" +#else +#define DECL_ARMMODE(x) " .align 4\n" " .global " x "\n" " .arm\n" x ":\n" +#endif + +asm( + DECL_ARMMODE("convert_s16_float_asm") + DECL_ARMMODE("_convert_s16_float_asm") + "# convert_s16_float_asm(float *out, const int16_t *in, size_t samples, const float *gain)\n" + " # Hacky way to get a constant of 2^-15.\n" + " # Might be faster to just load a constant from memory.\n" + " # It's just done once however ...\n" + " vmov.f32 q8, #0.25\n" + " vmul.f32 q8, q8, q8\n" + " vmul.f32 q8, q8, q8\n" + " vmul.f32 q8, q8, q8\n" + " vadd.f32 q8, q8, q8\n" + "\n" + " # Apply gain\n" + " vld1.f32 {d6[0]}, [r3]\n" + " vmul.f32 q8, q8, d6[0]\n" + "\n" + "1:\n" + " # Preload here?\n" + " vld1.s16 {q0}, [r1]!\n" + "\n" + " # Widen to 32-bit\n" + " vmovl.s16 q1, d0\n" + " vmovl.s16 q2, d1\n" + "\n" + " # Convert to float\n" + " vcvt.f32.s32 q1, q1\n" + " vcvt.f32.s32 q2, q2\n" + "\n" + " vmul.f32 q1, q1, q8\n" + " vmul.f32 q2, q2, q8\n" + "\n" + " vst1.f32 {q1-q2}, [r0]!\n" + "\n" + " # Guaranteed to get samples in multiples of 8.\n" + " subs r2, r2, #8\n" + " bne 1b\n" + "\n" + " bx lr\n" + "\n" + ); +#endif diff --git a/libretro-common/features/features_cpu.c b/libretro-common/features/features_cpu.c index 0dafa77eba..ddaa01f9ce 100644 --- a/libretro-common/features/features_cpu.c +++ b/libretro-common/features/features_cpu.c @@ -108,7 +108,7 @@ static int ra_clock_gettime(int clk_ik, struct timespec *t) } #endif -#if defined(__MACH__) && __IPHONE_OS_VERSION_MAX_ALLOWED < 100000 +#if defined(__MACH__) && __IPHONE_OS_VERSION_MIN_REQUIRED < 100000 #else #define ra_clock_gettime clock_gettime #endif diff --git a/libretro-common/file/archive_file_7z.c b/libretro-common/file/archive_file_7z.c index 992b2cbffd..b1234eabc9 100644 --- a/libretro-common/file/archive_file_7z.c +++ b/libretro-common/file/archive_file_7z.c @@ -424,17 +424,8 @@ static uint32_t sevenzip_stream_crc32_calculate(uint32_t crc, const struct file_archive_file_backend sevenzip_backend = { sevenzip_stream_new, sevenzip_stream_free, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, sevenzip_stream_decompress_data_to_file_init, sevenzip_stream_decompress_data_to_file_iterate, - NULL, - NULL, - NULL, sevenzip_stream_crc32_calculate, sevenzip_file_read, sevenzip_parse_file_init, diff --git a/libretro-common/file/archive_file_zlib.c b/libretro-common/file/archive_file_zlib.c index 0269dea358..ab4356af43 100644 --- a/libretro-common/file/archive_file_zlib.c +++ b/libretro-common/file/archive_file_zlib.c @@ -22,13 +22,16 @@ #include -#include #include #include +#include #include #include #include +/* Only for MAX_WBITS */ +#include + #ifndef CENTRAL_FILE_HEADER_SIGNATURE #define CENTRAL_FILE_HEADER_SIGNATURE 0x02014b50 #endif @@ -37,107 +40,14 @@ #define END_OF_CENTRAL_DIR_SIGNATURE 0x06054b50 #endif -static void* zlib_stream_new(void) +static void *zlib_stream_new(void) { - return (z_stream*)calloc(1, sizeof(z_stream)); + return zlib_inflate_backend.stream_new(); } -static void zlib_stream_free(void *data) +static void zlib_stream_free(void *stream) { - z_stream *ret = (z_stream*)data; - if (ret) - inflateEnd(ret); -} - -static void zlib_stream_set(void *data, - uint32_t avail_in, - uint32_t avail_out, - const uint8_t *next_in, - uint8_t *next_out - ) -{ - z_stream *stream = (z_stream*)data; - - if (!stream) - return; - - stream->avail_in = avail_in; - stream->avail_out = avail_out; - - stream->next_in = (uint8_t*)next_in; - stream->next_out = next_out; -} - -static uint32_t zlib_stream_get_avail_in(void *data) -{ - z_stream *stream = (z_stream*)data; - - if (!stream) - return 0; - - return stream->avail_in; -} - -static uint32_t zlib_stream_get_avail_out(void *data) -{ - z_stream *stream = (z_stream*)data; - - if (!stream) - return 0; - - return stream->avail_out; -} - -static uint64_t zlib_stream_get_total_out(void *data) -{ - z_stream *stream = (z_stream*)data; - - if (!stream) - return 0; - - return stream->total_out; -} - -static void zlib_stream_decrement_total_out(void *data, unsigned subtraction) -{ - z_stream *stream = (z_stream*)data; - - if (stream) - stream->total_out -= subtraction; -} - -static void zlib_stream_compress_free(void *data) -{ - z_stream *ret = (z_stream*)data; - if (ret) - deflateEnd(ret); -} - -static int zlib_stream_compress_data_to_file(void *data) -{ - int zstatus; - z_stream *stream = (z_stream*)data; - - if (!stream) - return -1; - - zstatus = deflate(stream, Z_FINISH); - - if (zstatus == Z_STREAM_END) - return 1; - - return 0; -} - -static bool zlib_stream_decompress_init(void *data) -{ - z_stream *stream = (z_stream*)data; - - if (!stream) - return false; - if (inflateInit(stream) != Z_OK) - return false; - return true; + zlib_inflate_backend.stream_free(stream); } static bool zlib_stream_decompress_data_to_file_init( @@ -147,59 +57,51 @@ static bool zlib_stream_decompress_data_to_file_init( if (!handle) return false; - if (!(handle->stream = (z_stream*)zlib_stream_new())) + if (!(handle->stream = zlib_inflate_backend.stream_new())) goto error; - if (inflateInit2((z_streamp)handle->stream, -MAX_WBITS) != Z_OK) - goto error; + if (zlib_inflate_backend.define) + zlib_inflate_backend.define(handle->stream, "window_bits", (uint32_t)-MAX_WBITS); handle->data = (uint8_t*)malloc(size); if (!handle->data) goto error; - zlib_stream_set(handle->stream, csize, size, - (const uint8_t*)cdata, handle->data); + zlib_inflate_backend.set_in(handle->stream, + (const uint8_t*)cdata, csize); + zlib_inflate_backend.set_out(handle->stream, + handle->data, size); return true; error: - zlib_stream_free(handle->stream); - free(handle->stream); + if (handle->stream) + zlib_inflate_backend.stream_free(handle->stream); if (handle->data) free(handle->data); return false; } -static int zlib_stream_decompress_data_to_file_iterate(void *data) +static int zlib_stream_decompress_data_to_file_iterate(void *stream) { - int zstatus; - z_stream *stream = (z_stream*)data; + bool zstatus; + uint32_t rd, wn; + enum trans_stream_error terror; if (!stream) - goto error; + return -1; - zstatus = inflate(stream, Z_NO_FLUSH); + zstatus = zlib_inflate_backend.trans(stream, false, &rd, &wn, &terror); - if (zstatus == Z_STREAM_END) + if (!zstatus && terror != TRANS_STREAM_ERROR_BUFFER_FULL) + return -1; + + if (zstatus && !terror) return 1; - if (zstatus != Z_OK && zstatus != Z_BUF_ERROR) - goto error; - return 0; - -error: - return -1; -} - -static void zlib_stream_compress_init(void *data, int level) -{ - z_stream *stream = (z_stream*)data; - - if (stream) - deflateInit(stream, level); } static uint32_t zlib_stream_crc32_calculate(uint32_t crc, @@ -462,17 +364,8 @@ static int zip_parse_file_iterate_step(file_archive_transfer_t *state, const struct file_archive_file_backend zlib_backend = { zlib_stream_new, zlib_stream_free, - zlib_stream_set, - zlib_stream_get_avail_in, - zlib_stream_get_avail_out, - zlib_stream_get_total_out, - zlib_stream_decrement_total_out, - zlib_stream_decompress_init, zlib_stream_decompress_data_to_file_init, zlib_stream_decompress_data_to_file_iterate, - zlib_stream_compress_init, - zlib_stream_compress_free, - zlib_stream_compress_data_to_file, zlib_stream_crc32_calculate, zip_file_read, zip_parse_file_init, diff --git a/libretro-common/file/retro_dirent.c b/libretro-common/file/retro_dirent.c index 54c77b6a24..87b7e1bc7e 100644 --- a/libretro-common/file/retro_dirent.c +++ b/libretro-common/file/retro_dirent.c @@ -28,11 +28,12 @@ #include #include #include +#include struct RDIR *retro_opendir(const char *name) { #if defined(_WIN32) - char path_buf[1024]; + char path_buf[1024] = {0}; #endif struct RDIR *rdir = (struct RDIR*)calloc(1, sizeof(*rdir)); diff --git a/libretro-common/file/retro_stat.c b/libretro-common/file/retro_stat.c index 077a1b7e60..0cd7fd9a4b 100644 --- a/libretro-common/file/retro_stat.c +++ b/libretro-common/file/retro_stat.c @@ -24,6 +24,7 @@ #include #include #include +#include #if defined(_WIN32) #ifdef _MSC_VER @@ -102,7 +103,9 @@ static bool path_stat(const char *path, enum stat_mode mode, int32_t *size) #elif defined(_WIN32) WIN32_FILE_ATTRIBUTE_DATA file_info; GET_FILEEX_INFO_LEVELS fInfoLevelId = GetFileExInfoStandard; + DWORD ret = GetFileAttributesEx(path, fInfoLevelId, &file_info); + if (ret == 0) return false; #else diff --git a/libretro-common/formats/png/rpng.c b/libretro-common/formats/png/rpng.c index e1204414f0..2ad8c9017d 100644 --- a/libretro-common/formats/png/rpng.c +++ b/libretro-common/formats/png/rpng.c @@ -32,7 +32,7 @@ #include #include #include -#include +#include #include "rpng_internal.h" @@ -112,7 +112,8 @@ struct rpng_process unsigned pos; } pass; void *stream; - const struct file_archive_file_backend *stream_backend; + size_t avail_in, avail_out, total_out; + const struct trans_stream_backend *stream_backend; }; struct rpng @@ -538,7 +539,7 @@ static int png_reverse_filter_init(const struct png_ihdr *ihdr, png_pass_geom(&pngp->ihdr, pngp->pass.width, pngp->pass.height, NULL, NULL, &pngp->pass.size); - if (pngp->pass.size > pngp->stream_backend->stream_get_total_out(pngp->stream)) + if (pngp->pass.size > pngp->total_out) { free(pngp->data); return -1; @@ -554,7 +555,7 @@ static int png_reverse_filter_init(const struct png_ihdr *ihdr, png_pass_geom(ihdr, ihdr->width, ihdr->height, &pngp->bpp, &pngp->pitch, &pass_size); - if (pngp->stream_backend->stream_get_total_out(pngp->stream) < pass_size) + if (pngp->total_out < pass_size) return -1; pngp->restore_buf_size = 0; @@ -711,7 +712,7 @@ static int png_reverse_filter_adam7_iterate(uint32_t **data_, pngp->inflate_buf += pngp->pass.size; pngp->adam7_restore_buf_size += pngp->pass.size; - pngp->stream_backend->stream_decrement_total_out(pngp->stream, pngp->pass.size); + pngp->total_out -= pngp->pass.size; png_reverse_filter_adam7_deinterlace_pass(data, ihdr, pngp->data, pngp->pass.width, pngp->pass.height, &passes[pngp->pass.pos]); @@ -768,30 +769,31 @@ static int png_reverse_filter_iterate(rpng_t *rpng, uint32_t **data) static int rpng_load_image_argb_process_inflate_init(rpng_t *rpng, uint32_t **data, unsigned *width, unsigned *height) { - int zstatus; + bool zstatus; + enum trans_stream_error terror; + uint32_t rd, wn; struct rpng_process *process = (struct rpng_process*)rpng->process; - bool to_continue = (process->stream_backend->stream_get_avail_in(process->stream) > 0 - && process->stream_backend->stream_get_avail_out(process->stream) > 0); + bool to_continue = (process->avail_in > 0 + && process->avail_out > 0); if (!to_continue) goto end; - zstatus = process->stream_backend->stream_decompress_data_to_file_iterate(process->stream); + zstatus = process->stream_backend->trans(process->stream, false, &rd, &wn, &terror); - switch (zstatus) - { - case 1: - goto end; - case -1: - goto error; - default: - break; - } + if (!zstatus && terror != TRANS_STREAM_ERROR_BUFFER_FULL) + goto error; - return 0; + process->avail_in -= rd; + process->avail_out -= wn; + process->total_out += wn; + + if (terror) + return 0; end: process->stream_backend->stream_free(process->stream); + process->stream = NULL; *width = rpng->ihdr.width; *height = rpng->ihdr.height; @@ -870,7 +872,7 @@ static struct rpng_process *rpng_process_init(rpng_t *rpng, unsigned *width, uns if (!process) return NULL; - process->stream_backend = file_archive_get_zlib_file_backend(); + process->stream_backend = trans_stream_get_zlib_inflate_backend(); png_pass_geom(&rpng->ihdr, rpng->ihdr.width, rpng->ihdr.height, NULL, NULL, &process->inflate_buf_size); @@ -885,23 +887,22 @@ static struct rpng_process *rpng_process_init(rpng_t *rpng, unsigned *width, uns return NULL; } - if (!process->stream_backend->stream_decompress_init(process->stream)) - { - free(process); - return NULL; - } - inflate_buf = (uint8_t*)malloc(process->inflate_buf_size); if (!inflate_buf) goto error; process->inflate_buf = inflate_buf; - process->stream_backend->stream_set( + process->avail_in = rpng->idat_buf.size; + process->avail_out = process->inflate_buf_size; + process->total_out = 0; + process->stream_backend->set_in( process->stream, - rpng->idat_buf.size, - process->inflate_buf_size, rpng->idat_buf.data, - process->inflate_buf); + rpng->idat_buf.size); + process->stream_backend->set_out( + process->stream, + process->inflate_buf, + process->inflate_buf_size); return process; @@ -1130,7 +1131,8 @@ void rpng_free(rpng_t *rpng) { if (rpng->process->stream_backend) rpng->process->stream_backend->stream_free(rpng->process->stream); - free(rpng->process->stream); + else + free(rpng->process->stream); } free(rpng->process); } diff --git a/libretro-common/formats/png/rpng_encode.c b/libretro-common/formats/png/rpng_encode.c index 000e876a98..f580ed2646 100644 --- a/libretro-common/formats/png/rpng_encode.c +++ b/libretro-common/formats/png/rpng_encode.c @@ -26,7 +26,7 @@ #include #include -#include +#include #include "rpng_internal.h" @@ -213,7 +213,7 @@ static bool rpng_save_image(const char *path, bool ret = true; struct png_ihdr ihdr = {0}; - const struct file_archive_file_backend *stream_backend = NULL; + const struct trans_stream_backend *stream_backend = NULL; size_t encode_buf_size = 0; uint8_t *encode_buf = NULL; uint8_t *deflate_buf = NULL; @@ -225,11 +225,13 @@ static bool rpng_save_image(const char *path, uint8_t *prev_encoded = NULL; uint8_t *encode_target = NULL; void *stream = NULL; + uint32_t total_in = 0; + uint32_t total_out = 0; RFILE *file = filestream_open(path, RFILE_MODE_WRITE, -1); if (!file) GOTO_END_ERROR(); - stream_backend = file_archive_get_zlib_file_backend(); + stream_backend = trans_stream_get_zlib_deflate_backend(); if (filestream_write(file, png_magic, sizeof(png_magic)) != sizeof(png_magic)) GOTO_END_ERROR(); @@ -328,26 +330,23 @@ static bool rpng_save_image(const char *path, if (!stream) GOTO_END_ERROR(); - stream_backend->stream_set( + stream_backend->set_in( stream, - encode_buf_size, - encode_buf_size * 2, encode_buf, - deflate_buf + 8); + encode_buf_size); + stream_backend->set_out( + stream, + deflate_buf + 8, + encode_buf_size * 2); - stream_backend->stream_compress_init(stream, 9); - - if (stream_backend->stream_compress_data_to_file(stream) != 1) + if (!stream_backend->trans(stream, true, &total_in, &total_out, NULL)) { - stream_backend->stream_compress_free(stream); GOTO_END_ERROR(); } - stream_backend->stream_compress_free(stream); - memcpy(deflate_buf + 4, "IDAT", 4); - dword_write_be(deflate_buf + 0, ((uint32_t)stream_backend->stream_get_total_out(stream))); - if (!png_write_idat(file, deflate_buf, ((size_t)stream_backend->stream_get_total_out(stream) + 8))) + dword_write_be(deflate_buf + 0, ((uint32_t)total_out)); + if (!png_write_idat(file, deflate_buf, ((size_t)total_out + 8))) GOTO_END_ERROR(); if (!png_write_iend(file)) diff --git a/libretro-common/gfx/gl_capabilities.c b/libretro-common/gfx/gl_capabilities.c index 3bfcf2b6a4..d89fff5a8e 100644 --- a/libretro-common/gfx/gl_capabilities.c +++ b/libretro-common/gfx/gl_capabilities.c @@ -48,7 +48,7 @@ void gl_query_core_context_unset(void) gl_core_context = false; } -static bool gl_query_extension(const char *ext) +bool gl_query_extension(const char *ext) { bool ret = false; @@ -120,6 +120,7 @@ bool gl_check_capability(enum gl_capability_enum enum_idx) major = minor = 0; (void)vendor; + (void)renderer; switch (enum_idx) { @@ -195,7 +196,8 @@ bool gl_check_capability(enum gl_capability_enum enum_idx) case GL_CAPS_ARGB8: #ifdef HAVE_OPENGLES if (gl_query_extension("OES_rgb8_rgba8") - || gl_query_extension("ARM_argb8")) + || gl_query_extension("ARM_rgba8") + || major >= 3) return true; #else /* TODO/FIXME - implement this for non-GLES? */ @@ -302,6 +304,15 @@ bool gl_check_capability(enum gl_capability_enum enum_idx) return true; #else return true; +#endif + break; + case GL_CAPS_TEX_STORAGE: +#ifdef HAVE_OPENGLES + if (major >= 3) + return true; +#else + if (gl_query_extension("ARB_texture_storage")) + return true; #endif break; case GL_CAPS_NONE: diff --git a/libretro-common/include/file/archive_file.h b/libretro-common/include/file/archive_file.h index 048387c857..407bc3cfc7 100644 --- a/libretro-common/include/file/archive_file.h +++ b/libretro-common/include/file/archive_file.h @@ -121,19 +121,9 @@ struct file_archive_file_backend { void *(*stream_new)(void); void (*stream_free)(void *); - void (*stream_set)(void *, uint32_t, uint32_t, - const uint8_t *, uint8_t *); - uint32_t (*stream_get_avail_in)(void*); - uint32_t (*stream_get_avail_out)(void*); - uint64_t (*stream_get_total_out)(void*); - void (*stream_decrement_total_out)(void *, unsigned); - bool (*stream_decompress_init)(void *); bool (*stream_decompress_data_to_file_init)( file_archive_file_handle_t *, const uint8_t *, uint32_t, uint32_t); int (*stream_decompress_data_to_file_iterate)(void *); - void (*stream_compress_init)(void *, int); - void (*stream_compress_free)(void *); - int (*stream_compress_data_to_file)(void *); uint32_t (*stream_crc_calculate)(uint32_t, const uint8_t *, size_t); int (*compressed_file_read)(const char *path, const char *needle, void **buf, const char *optional_outfile); diff --git a/libretro-common/include/gfx/gl_capabilities.h b/libretro-common/include/gfx/gl_capabilities.h index dd05a2cbde..2c72593bc9 100644 --- a/libretro-common/include/gfx/gl_capabilities.h +++ b/libretro-common/include/gfx/gl_capabilities.h @@ -44,7 +44,8 @@ enum gl_capability_enum GL_CAPS_SRGB_FBO_ES3, GL_CAPS_FP_FBO, GL_CAPS_BGRA8888, - GL_CAPS_GLES3_SUPPORTED + GL_CAPS_GLES3_SUPPORTED, + GL_CAPS_TEX_STORAGE }; bool gl_check_error(char **error_string); @@ -57,4 +58,6 @@ void gl_query_core_context_unset(void); bool gl_check_capability(enum gl_capability_enum enum_idx); +bool gl_query_extension(const char *ext); + #endif diff --git a/libretro-common/include/glsym/glsym_es2.h b/libretro-common/include/glsym/glsym_es2.h index 0b91d7936e..08aedbdbdc 100644 --- a/libretro-common/include/glsym/glsym_es2.h +++ b/libretro-common/include/glsym/glsym_es2.h @@ -23,7 +23,7 @@ typedef void *GLeglImageOES; typedef GLint GLfixed; #endif -#if (__STDC_VERSION__ <= 199901L) || (OSX && !MAC_OS_X_VERSION_10_7) +#if (__STDC_VERSION__ <= 199409L) || (OSX && !MAC_OS_X_VERSION_10_7) #ifndef GLint64 typedef long long int GLint64; #endif diff --git a/libretro-common/include/hash/rhash.c b/libretro-common/include/hash/rhash.c deleted file mode 100644 index a36c27d698..0000000000 --- a/libretro-common/include/hash/rhash.c +++ /dev/null @@ -1,557 +0,0 @@ -/* Copyright (C) 2010-2015 The RetroArch team - * - * --------------------------------------------------------------------------------------- - * The following license statement only applies to this file (rhash.c). - * --------------------------------------------------------------------------------------- - * - * Permission is hereby granted, free of charge, - * to any person obtaining a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, - * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#include -#include -#ifdef _WIN32 -#include -#else -#include -#endif -#include -#include -#include -#include - -#define LSL32(x, n) ((uint32_t)(x) << (n)) -#define LSR32(x, n) ((uint32_t)(x) >> (n)) -#define ROR32(x, n) (LSR32(x, n) | LSL32(x, 32 - (n))) - -/* First 32 bits of the fractional parts of the square roots of the first 8 primes 2..19 */ -static const uint32_t T_H[8] = { - 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19, -}; - -/* First 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311 */ -static const uint32_t T_K[64] = { - 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, - 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, - 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, - 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, - 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, - 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, - 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, - 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2, -}; - -/* SHA256 implementation from bSNES. Written by valditx. */ - -struct sha256_ctx -{ - union - { - uint8_t u8[64]; - uint32_t u32[16]; - } in; - unsigned inlen; - - uint32_t w[64]; - uint32_t h[8]; - uint64_t len; -}; - -static void sha256_init(struct sha256_ctx *p) -{ - memset(p, 0, sizeof(struct sha256_ctx)); - memcpy(p->h, T_H, sizeof(T_H)); -} - -static void sha256_block(struct sha256_ctx *p) -{ - unsigned i; - uint32_t s0, s1; - uint32_t a, b, c, d, e, f, g, h; - - for (i = 0; i < 16; i++) - p->w[i] = load32be(p->in.u32 + i); - - for (i = 16; i < 64; i++) - { - s0 = ROR32(p->w[i - 15], 7) ^ ROR32(p->w[i - 15], 18) ^ LSR32(p->w[i - 15], 3); - s1 = ROR32(p->w[i - 2], 17) ^ ROR32(p->w[i - 2], 19) ^ LSR32(p->w[i - 2], 10); - p->w[i] = p->w[i - 16] + s0 + p->w[i - 7] + s1; - } - - a = p->h[0]; b = p->h[1]; c = p->h[2]; d = p->h[3]; - e = p->h[4]; f = p->h[5]; g = p->h[6]; h = p->h[7]; - - for (i = 0; i < 64; i++) - { - uint32_t t1, t2, maj, ch; - - s0 = ROR32(a, 2) ^ ROR32(a, 13) ^ ROR32(a, 22); - maj = (a & b) ^ (a & c) ^ (b & c); - t2 = s0 + maj; - s1 = ROR32(e, 6) ^ ROR32(e, 11) ^ ROR32(e, 25); - ch = (e & f) ^ (~e & g); - t1 = h + s1 + ch + T_K[i] + p->w[i]; - - h = g; - g = f; - f = e; - e = d + t1; - d = c; - c = b; - b = a; - a = t1 + t2; - } - - p->h[0] += a; p->h[1] += b; p->h[2] += c; p->h[3] += d; - p->h[4] += e; p->h[5] += f; p->h[6] += g; p->h[7] += h; - - /* Next block */ - p->inlen = 0; -} - -static void sha256_chunk(struct sha256_ctx *p, - const uint8_t *s, unsigned len) -{ - p->len += len; - - while (len) - { - unsigned l = 64 - p->inlen; - - if (len < l) - l = len; - - memcpy(p->in.u8 + p->inlen, s, l); - - s += l; - p->inlen += l; - len -= l; - - if (p->inlen == 64) - sha256_block(p); - } -} - -static void sha256_final(struct sha256_ctx *p) -{ - uint64_t len; - p->in.u8[p->inlen++] = 0x80; - - if (p->inlen > 56) - { - memset(p->in.u8 + p->inlen, 0, 64 - p->inlen); - sha256_block(p); - } - - memset(p->in.u8 + p->inlen, 0, 56 - p->inlen); - - len = p->len << 3; - store32be(p->in.u32 + 14, (uint32_t)(len >> 32)); - store32be(p->in.u32 + 15, (uint32_t)len); - sha256_block(p); -} - -static void sha256_subhash(struct sha256_ctx *p, uint32_t *t) -{ - unsigned i; - for (i = 0; i < 8; i++) - store32be(t++, p->h[i]); -} - -/** - * sha256_hash: - * @s : Output. - * @in : Input. - * @size : Size of @s. - * - * Hashes SHA256 and outputs a human readable string. - **/ -void sha256_hash(char *s, const uint8_t *in, size_t size) -{ - unsigned i; - struct sha256_ctx sha; - - union - { - uint32_t u32[8]; - uint8_t u8[32]; - } shahash; - - sha256_init(&sha); - sha256_chunk(&sha, in, size); - sha256_final(&sha); - sha256_subhash(&sha, shahash.u32); - - for (i = 0; i < 32; i++) - snprintf(s + 2 * i, 3, "%02x", (unsigned)shahash.u8[i]); -} - -#ifndef HAVE_ZLIB -/* Zlib CRC32. */ -static const uint32_t crc32_table[256] = { - 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, - 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, - 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, - 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, - 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, - 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, - 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, - 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, - 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, - 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, - 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, - 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, - 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, - 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, - 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, - 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, - 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, - 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, - 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, - 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, - 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, - 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, - 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, - 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, - 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, - 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, - 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, - 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, - 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, - 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, - 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, - 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, - 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, - 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, - 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, - 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, - 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, - 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, - 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, - 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, - 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, - 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, - 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d -}; - -uint32_t crc32_adjust(uint32_t checksum, uint8_t input) -{ - return ((checksum >> 8) & 0x00ffffff) ^ crc32_table[(checksum ^ input) & 0xff]; -} - -uint32_t crc32_calculate(const uint8_t *data, size_t length) -{ - size_t i; - uint32_t checksum = ~0; - for (i = 0; i < length; i++) - checksum = crc32_adjust(checksum, data[i]); - return ~checksum; -} -#endif - -/* SHA-1 implementation. */ - -/* - * sha1.c - * - * Copyright (C) 1998, 2009 - * Paul E. Jones - * All Rights Reserved - * - ***************************************************************************** - * $Id: sha1.c 12 2009-06-22 19:34:25Z paulej $ - ***************************************************************************** - * - * Description: - * This file implements the Secure Hashing Standard as defined - * in FIPS PUB 180-1 published April 17, 1995. - * - * The Secure Hashing Standard, which uses the Secure Hashing - * Algorithm (SHA), produces a 160-bit message digest for a - * given data stream. In theory, it is highly improbable that - * two messages will produce the same message digest. Therefore, - * this algorithm can serve as a means of providing a "fingerprint" - * for a message. - * - * Portability Issues: - * SHA-1 is defined in terms of 32-bit "words". This code was - * written with the expectation that the processor has at least - * a 32-bit machine word size. If the machine word size is larger, - * the code should still function properly. One caveat to that - * is that the input functions taking characters and character - * arrays assume that only 8 bits of information are stored in each - * character. - * - * Caveats: - * SHA-1 is designed to work with messages less than 2^64 bits - * long. Although SHA-1 allows a message digest to be generated for - * messages of any number of bits less than 2^64, this - * implementation only works with messages with a length that is a - * multiple of the size of an 8-bit character. - * - */ - -/* Define the circular shift macro */ -#define SHA1CircularShift(bits,word) ((((word) << (bits)) & 0xFFFFFFFF) | ((word) >> (32-(bits)))) - -static void SHA1Reset(SHA1Context *context) -{ - if (!context) - return; - - context->Length_Low = 0; - context->Length_High = 0; - context->Message_Block_Index = 0; - - context->Message_Digest[0] = 0x67452301; - context->Message_Digest[1] = 0xEFCDAB89; - context->Message_Digest[2] = 0x98BADCFE; - context->Message_Digest[3] = 0x10325476; - context->Message_Digest[4] = 0xC3D2E1F0; - - context->Computed = 0; - context->Corrupted = 0; -} - -static void SHA1ProcessMessageBlock(SHA1Context *context) -{ - const unsigned K[] = /* Constants defined in SHA-1 */ - { - 0x5A827999, - 0x6ED9EBA1, - 0x8F1BBCDC, - 0xCA62C1D6 - }; - int t; /* Loop counter */ - unsigned temp; /* Temporary word value */ - unsigned W[80]; /* Word sequence */ - unsigned A, B, C, D, E; /* Word buffers */ - - /* Initialize the first 16 words in the array W */ - for(t = 0; t < 16; t++) - { - W[t] = ((unsigned) context->Message_Block[t * 4]) << 24; - W[t] |= ((unsigned) context->Message_Block[t * 4 + 1]) << 16; - W[t] |= ((unsigned) context->Message_Block[t * 4 + 2]) << 8; - W[t] |= ((unsigned) context->Message_Block[t * 4 + 3]); - } - - for(t = 16; t < 80; t++) - W[t] = SHA1CircularShift(1,W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16]); - - A = context->Message_Digest[0]; - B = context->Message_Digest[1]; - C = context->Message_Digest[2]; - D = context->Message_Digest[3]; - E = context->Message_Digest[4]; - - for(t = 0; t < 20; t++) - { - temp = SHA1CircularShift(5,A) + - ((B & C) | ((~B) & D)) + E + W[t] + K[0]; - temp &= 0xFFFFFFFF; - E = D; - D = C; - C = SHA1CircularShift(30,B); - B = A; - A = temp; - } - - for(t = 20; t < 40; t++) - { - temp = SHA1CircularShift(5,A) + (B ^ C ^ D) + E + W[t] + K[1]; - temp &= 0xFFFFFFFF; - E = D; - D = C; - C = SHA1CircularShift(30,B); - B = A; - A = temp; - } - - for(t = 40; t < 60; t++) - { - temp = SHA1CircularShift(5,A) + - ((B & C) | (B & D) | (C & D)) + E + W[t] + K[2]; - temp &= 0xFFFFFFFF; - E = D; - D = C; - C = SHA1CircularShift(30,B); - B = A; - A = temp; - } - - for(t = 60; t < 80; t++) - { - temp = SHA1CircularShift(5,A) + (B ^ C ^ D) + E + W[t] + K[3]; - temp &= 0xFFFFFFFF; - E = D; - D = C; - C = SHA1CircularShift(30,B); - B = A; - A = temp; - } - - context->Message_Digest[0] = - (context->Message_Digest[0] + A) & 0xFFFFFFFF; - context->Message_Digest[1] = - (context->Message_Digest[1] + B) & 0xFFFFFFFF; - context->Message_Digest[2] = - (context->Message_Digest[2] + C) & 0xFFFFFFFF; - context->Message_Digest[3] = - (context->Message_Digest[3] + D) & 0xFFFFFFFF; - context->Message_Digest[4] = - (context->Message_Digest[4] + E) & 0xFFFFFFFF; - - context->Message_Block_Index = 0; -} - -static void SHA1PadMessage(SHA1Context *context) -{ - if (!context) - return; - - /* - * Check to see if the current message block is too small to hold - * the initial padding bits and length. If so, we will pad the - * block, process it, and then continue padding into a second - * block. - */ - context->Message_Block[context->Message_Block_Index++] = 0x80; - - if (context->Message_Block_Index > 55) - { - while(context->Message_Block_Index < 64) - context->Message_Block[context->Message_Block_Index++] = 0; - - SHA1ProcessMessageBlock(context); - } - - while(context->Message_Block_Index < 56) - context->Message_Block[context->Message_Block_Index++] = 0; - - /* Store the message length as the last 8 octets */ - context->Message_Block[56] = (context->Length_High >> 24) & 0xFF; - context->Message_Block[57] = (context->Length_High >> 16) & 0xFF; - context->Message_Block[58] = (context->Length_High >> 8) & 0xFF; - context->Message_Block[59] = (context->Length_High) & 0xFF; - context->Message_Block[60] = (context->Length_Low >> 24) & 0xFF; - context->Message_Block[61] = (context->Length_Low >> 16) & 0xFF; - context->Message_Block[62] = (context->Length_Low >> 8) & 0xFF; - context->Message_Block[63] = (context->Length_Low) & 0xFF; - - SHA1ProcessMessageBlock(context); -} - -static int SHA1Result(SHA1Context *context) -{ - if (context->Corrupted) - return 0; - - if (!context->Computed) - { - SHA1PadMessage(context); - context->Computed = 1; - } - - return 1; -} - -static void SHA1Input(SHA1Context *context, - const unsigned char *message_array, - unsigned length) -{ - if (!length) - return; - - if (context->Computed || context->Corrupted) - { - context->Corrupted = 1; - return; - } - - while(length-- && !context->Corrupted) - { - context->Message_Block[context->Message_Block_Index++] = - (*message_array & 0xFF); - - context->Length_Low += 8; - /* Force it to 32 bits */ - context->Length_Low &= 0xFFFFFFFF; - if (context->Length_Low == 0) - { - context->Length_High++; - /* Force it to 32 bits */ - context->Length_High &= 0xFFFFFFFF; - if (context->Length_High == 0) - context->Corrupted = 1; /* Message is too long */ - } - - if (context->Message_Block_Index == 64) - SHA1ProcessMessageBlock(context); - - message_array++; - } -} - -int sha1_calculate(const char *path, char *result) -{ - unsigned char buff[4096] = {0}; - SHA1Context sha; - int rv = 1; - RFILE *fd = filestream_open(path, RFILE_MODE_READ, -1); - - if (!fd) - goto error; - - SHA1Reset(&sha); - - do - { - rv = filestream_read(fd, buff, 4096); - if (rv < 0) - goto error; - - SHA1Input(&sha, buff, rv); - }while(rv); - - if (!SHA1Result(&sha)) - goto error; - - sprintf(result, "%08X%08X%08X%08X%08X", - sha.Message_Digest[0], - sha.Message_Digest[1], - sha.Message_Digest[2], - sha.Message_Digest[3], sha.Message_Digest[4]); - - filestream_close(fd); - return 0; - -error: - if (fd) - filestream_close(fd); - return -1; -} - -uint32_t djb2_calculate(const char *str) -{ - const unsigned char *aux = (const unsigned char*)str; - uint32_t hash = 5381; - - while ( *aux ) - hash = ( hash << 5 ) + hash + *aux++; - - return hash; -} diff --git a/libretro-common/include/net/net_natt.h b/libretro-common/include/net/net_natt.h new file mode 100644 index 0000000000..9ef0eb8fba --- /dev/null +++ b/libretro-common/include/net/net_natt.h @@ -0,0 +1,83 @@ +/* Copyright (C) 2016 The RetroArch team + * + * --------------------------------------------------------------------------------------- + * The following license statement only applies to this file (net_natt.h). + * --------------------------------------------------------------------------------------- + * + * Permission is hereby granted, free of charge, + * to any person obtaining a copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef _LIBRETRO_SDK_NET_NATT_H +#define _LIBRETRO_SDK_NET_NATT_H + +#include +#include + +struct natt_status { + /** nfds for select when checking for input */ + int nfds; + + /** The fdset to be selected upon to check for responses */ + fd_set fds; + + /** True if there might be a request outstanding */ + bool request_outstanding; + + /** True if we've resolved an external IPv4 address */ + bool have_inet4; + + /** External IPv4 address */ + struct sockaddr_in ext_inet4_addr; + + /** True if we've resolved an external IPv6 address */ + bool have_inet6; + +#if defined(AF_INET6) && !defined(HAVE_SOCKET_LEGACY) + /** External IPv6 address */ + struct sockaddr_in6 ext_inet6_addr; +#endif + + /** Internal status (currently unused) */ + void *internal; +}; + +/** + * Initialize global NAT traversal structures (must be called once to use other + * functions) */ +void natt_init(void); + +/** Initialize a NAT traversal status object */ +bool natt_new(struct natt_status *status); + +/** Free a NAT traversal status object */ +void natt_free(struct natt_status *status); + +/** + * Make a port forwarding request. This may finish immediately or just send a + * request to the network. */ +bool natt_open_port(struct natt_status *status, struct sockaddr *addr, + socklen_t addrlen, enum socket_protocol proto); + +/** + * Make a port forwarding request when only the port is known. Forwards any + * address it can find. */ +bool natt_open_port_any(struct natt_status *status, uint16_t port, + enum socket_protocol proto); + +/** Check for port forwarding responses */ +bool natt_read(struct natt_status *status); + +#endif diff --git a/libretro-common/include/retro_dirent.h b/libretro-common/include/retro_dirent.h index 4a44934e46..6270287a00 100644 --- a/libretro-common/include/retro_dirent.h +++ b/libretro-common/include/retro_dirent.h @@ -24,6 +24,7 @@ #define __RETRO_DIRENT_H #include +#include #include @@ -65,6 +66,7 @@ struct RDIR WIN32_FIND_DATA entry; HANDLE directory; bool next; + char path[PATH_MAX_LENGTH]; #elif defined(VITA) || defined(PSP) SceUID directory; SceIoDirent entry; diff --git a/libretro-common/include/streams/trans_stream.h b/libretro-common/include/streams/trans_stream.h new file mode 100644 index 0000000000..6cb7420f19 --- /dev/null +++ b/libretro-common/include/streams/trans_stream.h @@ -0,0 +1,101 @@ +/* Copyright (C) 2016 The RetroArch team + * + * --------------------------------------------------------------------------------------- + * The following license statement only applies to this file (trans_stream.h). + * --------------------------------------------------------------------------------------- + * + * Permission is hereby granted, free of charge, + * to any person obtaining a copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef LIBRETRO_SDK_TRANS_STREAM_H__ +#define LIBRETRO_SDK_TRANS_STREAM_H__ + +#include +#include +#include + +#ifdef _WIN32 +#include +#else +#include +#endif + +#include + +enum trans_stream_error +{ + TRANS_STREAM_ERROR_NONE = 0, + TRANS_STREAM_ERROR_AGAIN, /* more work to do */ + TRANS_STREAM_ERROR_ALLOCATION_FAILURE, /* malloc failure */ + TRANS_STREAM_ERROR_INVALID, /* invalid state */ + TRANS_STREAM_ERROR_BUFFER_FULL, /* output buffer full */ + TRANS_STREAM_ERROR_OTHER +}; + +struct trans_stream_backend +{ + const char *ident; + const struct trans_stream_backend *reverse; + + /* Create a stream data structure */ + void *(*stream_new)(void); + + /* Free it */ + void (*stream_free)(void *); + + /* (Optional) Set extra properties, defined per transcoder */ + bool (*define)(void *, const char *, uint32_t); + + /* Set our input source */ + void (*set_in)(void *, const uint8_t *, uint32_t); + + /* Set our output target */ + void (*set_out)(void *, uint8_t *, uint32_t); + + /* Perform a transcoding, flushing/finalizing if asked to. Writes out how + * many bytes were read and written. Error target optional. */ + bool (*trans)(void *, bool, uint32_t *, uint32_t *, enum trans_stream_error *); +}; + +/** + * trans_stream_trans_full: + * @backend : transcoding backend + * @data : (optional) existing stream data, or a target + * for the new stream data to be saved + * @in : input data + * @in_size : input size + * @out : output data + * @out_size : output size + * @error : (optional) output for error code + * + * Perform a full transcoding from a source to a destination. + */ +bool trans_stream_trans_full( + struct trans_stream_backend *backend, void **data, + const uint8_t *in, uint32_t in_size, + uint8_t *out, uint32_t out_size, + enum trans_stream_error *error); + +const struct trans_stream_backend* trans_stream_get_zlib_deflate_backend(void); +const struct trans_stream_backend* trans_stream_get_zlib_inflate_backend(void); +const struct trans_stream_backend* trans_stream_get_pipe_backend(void); + +extern const struct trans_stream_backend zlib_deflate_backend; +extern const struct trans_stream_backend zlib_inflate_backend; +extern const struct trans_stream_backend pipe_backend; + +#endif + diff --git a/libretro-common/lists/dir_list.c b/libretro-common/lists/dir_list.c index fdba0dc475..3f2277c1c2 100644 --- a/libretro-common/lists/dir_list.c +++ b/libretro-common/lists/dir_list.c @@ -22,7 +22,9 @@ #include -#ifdef _WIN32 +#if defined(_WIN32) && defined(_XBOX) +#include +#elif defined(_WIN32) #include #endif diff --git a/libretro-common/net/net_compat.c b/libretro-common/net/net_compat.c index e61c145b9c..0976068f0b 100644 --- a/libretro-common/net/net_compat.c +++ b/libretro-common/net/net_compat.c @@ -165,11 +165,14 @@ int getaddrinfo_retro(const char *node, const char *service, (void)in_addr; (void)info; + if (!hints->ai_family) + { #if defined(_WIN32) || defined(HAVE_SOCKET_LEGACY) - hints->ai_family = AF_INET; + hints->ai_family = AF_INET; #else - hints->ai_family = AF_UNSPEC; + hints->ai_family = AF_UNSPEC; #endif + } #ifdef HAVE_SOCKET_LEGACY info = (struct addrinfo*)calloc(1, sizeof(*info)); diff --git a/libretro-common/net/net_ifinfo.c b/libretro-common/net/net_ifinfo.c index b119d207ce..5432f5a73d 100644 --- a/libretro-common/net/net_ifinfo.c +++ b/libretro-common/net/net_ifinfo.c @@ -65,7 +65,6 @@ void net_ifinfo_free(net_ifinfo_t *list) ptr->host = NULL; } free(list->entries); - free(list); } bool net_ifinfo_new(net_ifinfo_t *list) @@ -82,6 +81,8 @@ bool net_ifinfo_new(net_ifinfo_t *list) rv = GetAdaptersAddresses(AF_UNSPEC, GAA_FLAG_INCLUDE_PREFIX, NULL, adapter_addresses, &size); + memset(list, 0, sizeof(net_ifinfo_t)); + if (rv != ERROR_SUCCESS) goto error; @@ -122,6 +123,8 @@ bool net_ifinfo_new(net_ifinfo_t *list) struct ifaddrs *ifa = NULL; struct ifaddrs *ifaddr = NULL; + memset(list, 0, sizeof(net_ifinfo_t)); + if (getifaddrs(&ifaddr) == -1) goto error; diff --git a/libretro-common/net/net_natt.c b/libretro-common/net/net_natt.c new file mode 100644 index 0000000000..dc21275e7a --- /dev/null +++ b/libretro-common/net/net_natt.c @@ -0,0 +1,232 @@ +/* Copyright (C) 2016 The RetroArch team + * + * --------------------------------------------------------------------------------------- + * The following license statement only applies to this file (net_natt.c). + * --------------------------------------------------------------------------------------- + * + * Permission is hereby granted, free of charge, + * to any person obtaining a copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include +#include +#include +#include + +#include +#include +#include + +#include + +#if HAVE_MINIUPNPC +#include +#include +#include + +#if MINIUPNPC_API_VERSION < 16 +#undef HAVE_MINIUPNPC +#endif +#endif + +#if HAVE_MINIUPNPC +static struct UPNPUrls urls; +static struct IGDdatas data; +#endif + +void natt_init(void) +{ +#ifndef HAVE_SOCKET_LEGACY +#if HAVE_MINIUPNPC + struct UPNPDev * devlist; + struct UPNPDev * dev; + char * descXML; + int descXMLsize = 0; + int upnperror = 0; + memset(&urls, 0, sizeof(struct UPNPUrls)); + memset(&data, 0, sizeof(struct IGDdatas)); + devlist = upnpDiscover(2000, NULL, NULL, 0, 0, 2, &upnperror); + if (devlist) + { + dev = devlist; + while (dev) + { + if (strstr (dev->st, "InternetGatewayDevice")) + break; + dev = dev->pNext; + } + if (!dev) + dev = devlist; + + descXML = (char *) miniwget(dev->descURL, &descXMLsize, 0, NULL); + if (descXML) + { + parserootdesc (descXML, descXMLsize, &data); + free (descXML); descXML = 0; + GetUPNPUrls (&urls, &data, dev->descURL, 0); + } + freeUPNPDevlist(devlist); + } +#endif +#endif +} + +bool natt_new(struct natt_status *status) +{ + memset(status, 0, sizeof(struct natt_status)); + return true; +} + +void natt_free(struct natt_status *status) +{ + /* Nothing */ +} + +bool natt_open_port(struct natt_status *status, struct sockaddr *addr, socklen_t addrlen, enum socket_protocol proto) +{ +#ifndef HAVE_SOCKET_LEGACY +#if HAVE_MINIUPNPC + char host[PATH_MAX_LENGTH], ext_host[PATH_MAX_LENGTH], + port_str[6], ext_port_str[6]; + const char *proto_str; + struct addrinfo hints = {0}, *ext_addrinfo; + int r; + + /* if NAT traversal is uninitialized or unavailable, oh well */ + if (!urls.controlURL[0]) + return false; + + /* figure out the internal info */ + if (getnameinfo(addr, addrlen, host, PATH_MAX_LENGTH, port_str, 6, NI_NUMERICHOST|NI_NUMERICSERV) != 0) + return false; + proto_str = (proto == SOCKET_PROTOCOL_UDP) ? "UDP" : "TCP"; + + /* add the port mapping */ + r = UPNP_AddAnyPortMapping(urls.controlURL, data.first.servicetype, port_str, + port_str, host, "retroarch", proto_str, NULL, "3600", ext_port_str); + if (r == 501 /* Action Failed */) + { + /* try the older AddPortMapping */ + memcpy(ext_port_str, port_str, 6); + r = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype, port_str, + port_str, host, "retroarch", proto_str, NULL, "3600"); + } + if (r != 0) + return false; + + /* get the external IP */ + r = UPNP_GetExternalIPAddress(urls.controlURL, data.first.servicetype, ext_host); + if (r != 0) + return false; + + /* update the status */ + if (getaddrinfo_retro(ext_host, ext_port_str, &hints, &ext_addrinfo) != 0) + return false; + + if (ext_addrinfo->ai_family == AF_INET && + ext_addrinfo->ai_addrlen >= sizeof(struct sockaddr_in)) + { + status->have_inet4 = true; + status->ext_inet4_addr = *((struct sockaddr_in *) ext_addrinfo->ai_addr); + } +#if defined(AF_INET6) && !defined(HAVE_SOCKET_LEGACY) + else if (ext_addrinfo->ai_family == AF_INET6 && + ext_addrinfo->ai_addrlen >= sizeof(struct sockaddr_in6)) + { + status->have_inet6 = true; + status->ext_inet6_addr = *((struct sockaddr_in6 *) ext_addrinfo->ai_addr); + } + else + { + freeaddrinfo_retro(ext_addrinfo); + return false; + } +#endif + + return true; + +#else + return false; +#endif +#else + return false; +#endif +} + +bool natt_open_port_any(struct natt_status *status, uint16_t port, enum socket_protocol proto) +{ +#ifndef HAVE_SOCKET_LEGACY + struct net_ifinfo list; + bool ret = false; + size_t i; + struct addrinfo hints = {0}, *addr; + char port_str[6]; + + sprintf(port_str, "%hu", port); + + /* get our interfaces */ + if (!net_ifinfo_new(&list)) + return false; + + /* loop through them */ + for (i = 0; i < list.size; i++) + { + struct net_ifinfo_entry *entry = list.entries + i; + + /* ignore localhost */ + if (!strcmp(entry->host, "127.0.0.1") || !strcmp(entry->host, "::1")) + continue; + + /* make a request for this host */ + if (getaddrinfo_retro(entry->host, port_str, &hints, &addr) == 0) + { + ret = natt_open_port(status, addr->ai_addr, addr->ai_addrlen, proto) || ret; + freeaddrinfo_retro(addr); + } + } + + net_ifinfo_free(&list); + + return ret; + +#else + return false; +#endif +} + +bool natt_read(struct natt_status *status) +{ + /* MiniUPNPC is always synchronous, so there's nothing to read here. + * Reserved for future backends. */ + return false; +} + +#if 0 +/* If we want to remove redirects in the future, this is a sample of how to do + * that */ +void upnp_rem_redir (int port) +{ + char port_str[16]; + int t; + printf("TB : upnp_rem_redir (%d)\n", port); + if(urls.controlURL[0] == '\0') + { + printf("TB : the init was not done !\n"); + return; + } + sprintf(port_str, "%d", port); + UPNP_DeletePortMapping(urls.controlURL, data.first.servicetype, port_str, "TCP", NULL); +} +#endif diff --git a/libretro-common/samples/net/net_ifinfo_test.c b/libretro-common/samples/net/net_ifinfo_test.c index 4ac96bcbe0..1b825b3093 100644 --- a/libretro-common/samples/net/net_ifinfo_test.c +++ b/libretro-common/samples/net/net_ifinfo_test.c @@ -29,21 +29,17 @@ int main(int argc, const char *argv[]) { unsigned k = 0; - net_ifinfo_t *list = - (net_ifinfo_t*)calloc(1, sizeof(*list)); + net_ifinfo_t list; - if (!list) + if (!net_ifinfo_new(&list)) return -1; - if (!net_ifinfo_new(list)) - return -1; - - for (k = 0; k < list->size; k++) + for (k = 0; k < list.size; k++) { - printf("%s:%s\n", list->entries[k].name, list->entries[k].host); + printf("%s:%s\n", list.entries[k].name, list.entries[k].host); } - net_ifinfo_free(list); + net_ifinfo_free(&list); return 0; } diff --git a/libretro-common/streams/file_stream.c b/libretro-common/streams/file_stream.c index 6d74a9a106..b3ad1dcac9 100644 --- a/libretro-common/streams/file_stream.c +++ b/libretro-common/streams/file_stream.c @@ -63,6 +63,7 @@ #include #include +#include struct RFILE { @@ -73,6 +74,11 @@ struct RFILE #define HAVE_BUFFERED_IO 1 +#define MODE_STR_READ "r" +#define MODE_STR_READ_UNBUF "rb" +#define MODE_STR_WRITE_UNBUF "wb" +#define MODE_STR_WRITE_PLUS "w+" + #if defined(HAVE_BUFFERED_IO) FILE *fp; #endif @@ -129,7 +135,7 @@ RFILE *filestream_open(const char *path, unsigned mode, ssize_t len) #else #if defined(HAVE_BUFFERED_IO) if ((stream->hints & RFILE_HINT_UNBUFFERED) == 0) - mode_str = "r"; + mode_str = MODE_STR_READ; #endif /* No "else" here */ flags = O_RDONLY; @@ -142,7 +148,7 @@ RFILE *filestream_open(const char *path, unsigned mode, ssize_t len) #else #if defined(HAVE_BUFFERED_IO) if ((stream->hints & RFILE_HINT_UNBUFFERED) == 0) - mode_str = "rb"; + mode_str = MODE_STR_READ_UNBUF; #endif /* No "else" here */ flags = O_RDONLY; @@ -155,7 +161,7 @@ RFILE *filestream_open(const char *path, unsigned mode, ssize_t len) #else #if defined(HAVE_BUFFERED_IO) if ((stream->hints & RFILE_HINT_UNBUFFERED) == 0) - mode_str = "wb"; + mode_str = MODE_STR_WRITE_UNBUF; #endif else { @@ -173,7 +179,7 @@ RFILE *filestream_open(const char *path, unsigned mode, ssize_t len) #else #if defined(HAVE_BUFFERED_IO) if ((stream->hints & RFILE_HINT_UNBUFFERED) == 0) - mode_str = "w+"; + mode_str = MODE_STR_WRITE_PLUS; #endif else { @@ -199,6 +205,7 @@ RFILE *filestream_open(const char *path, unsigned mode, ssize_t len) else #endif { + /* FIXME: HAVE_BUFFERED_IO is always 1, but if it is ever changed, open() needs to be changed to _wopen() for WIndows. */ stream->fd = open(path, flags); if (stream->fd == -1) goto error; diff --git a/libretro-common/streams/trans_stream.c b/libretro-common/streams/trans_stream.c new file mode 100644 index 0000000000..d6acfa5e00 --- /dev/null +++ b/libretro-common/streams/trans_stream.c @@ -0,0 +1,95 @@ +/* Copyright (C) 2016 The RetroArch team + * + * --------------------------------------------------------------------------------------- + * The following license statement only applies to this file (trans_stream.c). + * --------------------------------------------------------------------------------------- + * + * Permission is hereby granted, free of charge, + * to any person obtaining a copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include + +/** + * trans_stream_trans_full: + * @data : (optional) existing stream data, or a target + * for the new stream data to be saved + * @in : input data + * @in_size : input size + * @out : output data + * @out_size : output size + * @error : (optional) output for error code + * + * Perform a full transcoding from a source to a destination. + */ +bool trans_stream_trans_full( + struct trans_stream_backend *backend, void **data, + const uint8_t *in, uint32_t in_size, + uint8_t *out, uint32_t out_size, + enum trans_stream_error *error) +{ + void *rdata; + bool ret; + uint32_t rd, wn; + + if (data && *data) + { + rdata = *data; + } + else + { + rdata = backend->stream_new(); + if (!rdata) + { + if (error) + *error = TRANS_STREAM_ERROR_ALLOCATION_FAILURE; + return false; + } + } + + backend->set_in(rdata, in, in_size); + backend->set_out(rdata, out, out_size); + ret = backend->trans(rdata, true, &rd, &wn, error); + + if (data) + *data = rdata; + else + backend->stream_free(rdata); + + return ret; +} + +const struct trans_stream_backend* trans_stream_get_zlib_deflate_backend(void) +{ +#if HAVE_ZLIB + return &zlib_deflate_backend; +#else + return NULL; +#endif +} + +const struct trans_stream_backend* trans_stream_get_zlib_inflate_backend(void) +{ +#if HAVE_ZLIB + return &zlib_inflate_backend; +#else + return NULL; +#endif +} + +const struct trans_stream_backend* trans_stream_get_pipe_backend(void) +{ + return &pipe_backend; +} diff --git a/libretro-common/streams/trans_stream_pipe.c b/libretro-common/streams/trans_stream_pipe.c new file mode 100644 index 0000000000..34ac61e4c8 --- /dev/null +++ b/libretro-common/streams/trans_stream_pipe.c @@ -0,0 +1,95 @@ +/* Copyright (C) 2016 The RetroArch team + * + * --------------------------------------------------------------------------------------- + * The following license statement only applies to this file (trans_stream_pipe.c). + * --------------------------------------------------------------------------------------- + * + * Permission is hereby granted, free of charge, + * to any person obtaining a copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include +#include + +#include + +struct pipe_trans_stream +{ + const uint8_t *in; + uint8_t *out; + uint32_t in_size, out_size; +}; + +static void *pipe_stream_new(void) +{ + return (struct pipe_trans_stream*)calloc(1, sizeof(struct pipe_trans_stream)); +} + +static void pipe_stream_free(void *data) +{ + free(data); +} + +static void pipe_set_in(void *data, const uint8_t *in, uint32_t in_size) +{ + struct pipe_trans_stream *p = (struct pipe_trans_stream *) data; + p->in = in; + p->in_size = in_size; +} + +static void pipe_set_out(void *data, uint8_t *out, uint32_t out_size) +{ + struct pipe_trans_stream *p = (struct pipe_trans_stream *) data; + p->out = out; + p->out_size = out_size; +} + +static bool pipe_trans( + void *data, bool flush, + uint32_t *rd, uint32_t *wn, + enum trans_stream_error *error) +{ + struct pipe_trans_stream *p = (struct pipe_trans_stream *) data; + + if (p->out_size < p->in_size) + { + memcpy(p->out, p->in, p->out_size); + *rd = *wn = p->out_size; + p->in += p->out_size; + p->out += p->out_size; + *error = TRANS_STREAM_ERROR_BUFFER_FULL; + return false; + } + else + { + memcpy(p->out, p->in, p->in_size); + *rd = *wn = p->in_size; + p->in += p->in_size; + p->out += p->in_size; + *error = TRANS_STREAM_ERROR_NONE; + return true; + } +} + +const struct trans_stream_backend pipe_backend = { + "pipe", + &pipe_backend, + pipe_stream_new, + pipe_stream_free, + NULL, + pipe_set_in, + pipe_set_out, + pipe_trans +}; diff --git a/libretro-common/streams/trans_stream_zlib.c b/libretro-common/streams/trans_stream_zlib.c new file mode 100644 index 0000000000..dfa9cacba3 --- /dev/null +++ b/libretro-common/streams/trans_stream_zlib.c @@ -0,0 +1,265 @@ +/* Copyright (C) 2016 The RetroArch team + * + * --------------------------------------------------------------------------------------- + * The following license statement only applies to this file (trans_stream_zlib.c). + * --------------------------------------------------------------------------------------- + * + * Permission is hereby granted, free of charge, + * to any person obtaining a copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include +#include + +#include +#include + +struct zlib_trans_stream +{ + z_stream z; + int ex; /* window_bits or level */ + bool inited; +}; + +static void *zlib_deflate_stream_new(void) +{ + struct zlib_trans_stream *ret = (struct zlib_trans_stream*)calloc(1, sizeof(struct zlib_trans_stream)); + if (ret) + ret->ex = 9; + return (void *) ret; +} + +static void *zlib_inflate_stream_new(void) +{ + struct zlib_trans_stream *ret = (struct zlib_trans_stream*)calloc(1, sizeof(struct zlib_trans_stream)); + if (ret) + ret->ex = MAX_WBITS; + return (void *) ret; +} + +static void zlib_deflate_stream_free(void *data) +{ + struct zlib_trans_stream *z = (struct zlib_trans_stream *) data; + if (z->inited) + deflateEnd(&z->z); + free(z); +} + +static void zlib_inflate_stream_free(void *data) +{ + struct zlib_trans_stream *z = (struct zlib_trans_stream *) data; + if (z->inited) + inflateEnd(&z->z); + free(z); +} + +static bool zlib_deflate_define(void *data, const char *prop, uint32_t val) +{ + struct zlib_trans_stream *z = (struct zlib_trans_stream *) data; + if (!strcmp(prop, "level")) + { + z->ex = (int) val; + return true; + } + return false; +} + +static bool zlib_inflate_define(void *data, const char *prop, uint32_t val) +{ + struct zlib_trans_stream *z = (struct zlib_trans_stream *) data; + if (!strcmp(prop, "window_bits")) + { + z->ex = (int) val; + return true; + } + return false; +} + +static void zlib_deflate_set_in(void *data, const uint8_t *in, uint32_t in_size) +{ + struct zlib_trans_stream *z = (struct zlib_trans_stream *) data; + z->z.next_in = (uint8_t *) in; + z->z.avail_in = in_size; + if (!z->inited) + { + deflateInit(&z->z, z->ex); + z->inited = true; + } +} + +static void zlib_inflate_set_in(void *data, const uint8_t *in, uint32_t in_size) +{ + struct zlib_trans_stream *z = (struct zlib_trans_stream *) data; + z->z.next_in = (uint8_t *) in; + z->z.avail_in = in_size; + if (!z->inited) + { + inflateInit2(&z->z, z->ex); + z->inited = true; + } +} + +static void zlib_set_out(void *data, uint8_t *out, uint32_t out_size) +{ + struct zlib_trans_stream *z = (struct zlib_trans_stream *) data; + z->z.next_out = out; + z->z.avail_out = out_size; +} + +static bool zlib_deflate_trans( + void *data, bool flush, + uint32_t *rd, uint32_t *wn, + enum trans_stream_error *error) +{ + int zret; + bool ret; + uint32_t pre_avail_in, pre_avail_out; + struct zlib_trans_stream *zt = (struct zlib_trans_stream *) data; + z_stream *z = &zt->z; + + if (!zt->inited) + { + deflateInit(z, zt->ex); + zt->inited = true; + } + + pre_avail_in = z->avail_in; + pre_avail_out = z->avail_out; + zret = deflate(z, flush ? Z_FINISH : Z_NO_FLUSH); + + if (zret == Z_OK) + { + if (error) + *error = TRANS_STREAM_ERROR_AGAIN; + } + else if (zret == Z_STREAM_END) + { + if (error) + *error = TRANS_STREAM_ERROR_NONE; + } + else + { + if (error) + *error = TRANS_STREAM_ERROR_OTHER; + return false; + } + ret = true; + + if (z->avail_out == 0) + { + /* Filled buffer, maybe an error */ + if (z->avail_in != 0) + { + ret = false; + if (error) + *error = TRANS_STREAM_ERROR_BUFFER_FULL; + } + } + + *rd = pre_avail_in - z->avail_in; + *wn = pre_avail_out - z->avail_out; + + if (flush && zret == Z_STREAM_END) + { + deflateEnd(z); + zt->inited = false; + } + + return ret; +} + +static bool zlib_inflate_trans( + void *data, bool flush, + uint32_t *rd, uint32_t *wn, + enum trans_stream_error *error) +{ + int zret; + bool ret; + uint32_t pre_avail_in, pre_avail_out; + struct zlib_trans_stream *zt = (struct zlib_trans_stream *) data; + z_stream *z = &zt->z; + + if (!zt->inited) + { + inflateInit2(z, zt->ex); + zt->inited = true; + } + + pre_avail_in = z->avail_in; + pre_avail_out = z->avail_out; + zret = inflate(z, flush ? Z_FINISH : Z_NO_FLUSH); + + if (zret == Z_OK) + { + if (error) + *error = TRANS_STREAM_ERROR_AGAIN; + } + else if (zret == Z_STREAM_END) + { + if (error) + *error = TRANS_STREAM_ERROR_NONE; + } + else + { + if (error) + *error = TRANS_STREAM_ERROR_OTHER; + return false; + } + ret = true; + + if (z->avail_out == 0) + { + /* Filled buffer, maybe an error */ + if (z->avail_in != 0) + { + ret = false; + if (error) + *error = TRANS_STREAM_ERROR_BUFFER_FULL; + } + } + + *rd = pre_avail_in - z->avail_in; + *wn = pre_avail_out - z->avail_out; + + if (flush && zret == Z_STREAM_END) + { + inflateEnd(z); + zt->inited = false; + } + + return ret; +} + +const struct trans_stream_backend zlib_deflate_backend = { + "zlib_deflate", + &zlib_inflate_backend, + zlib_deflate_stream_new, + zlib_deflate_stream_free, + zlib_deflate_define, + zlib_deflate_set_in, + zlib_set_out, + zlib_deflate_trans +}; + +const struct trans_stream_backend zlib_inflate_backend = { + "zlib_inflate", + &zlib_deflate_backend, + zlib_inflate_stream_new, + zlib_inflate_stream_free, + zlib_inflate_define, + zlib_inflate_set_in, + zlib_set_out, + zlib_inflate_trans +}; diff --git a/menu/cbs/menu_cbs_cancel.c b/menu/cbs/menu_cbs_cancel.c index 5bbc48469f..f79221e831 100644 --- a/menu/cbs/menu_cbs_cancel.c +++ b/menu/cbs/menu_cbs_cancel.c @@ -37,6 +37,9 @@ static int action_cancel_pop_default(const char *path, menu_entries_pop_stack(&new_selection_ptr, 0, 1); menu_navigation_ctl(MENU_NAVIGATION_CTL_SET_SELECTION, &new_selection_ptr); + menu_driver_ctl(RARCH_MENU_CTL_UPDATE_SAVESTATE_THUMBNAIL_PATH, NULL); + menu_driver_ctl(RARCH_MENU_CTL_UPDATE_SAVESTATE_THUMBNAIL_IMAGE, NULL); + return 0; } diff --git a/menu/cbs/menu_cbs_deferred_push.c b/menu/cbs/menu_cbs_deferred_push.c index bd9f3f8050..299108bfec 100644 --- a/menu/cbs/menu_cbs_deferred_push.c +++ b/menu/cbs/menu_cbs_deferred_push.c @@ -150,6 +150,11 @@ static int deferred_push_onscreen_display_settings_list(menu_displaylist_info_t return deferred_push_dlist(info, DISPLAYLIST_ONSCREEN_DISPLAY_SETTINGS_LIST); } +static int deferred_push_onscreen_notifications_settings_list(menu_displaylist_info_t *info) +{ + return deferred_push_dlist(info, DISPLAYLIST_ONSCREEN_NOTIFICATIONS_SETTINGS_LIST); +} + static int deferred_push_onscreen_overlay_settings_list(menu_displaylist_info_t *info) { return deferred_push_dlist(info, DISPLAYLIST_ONSCREEN_OVERLAY_SETTINGS_LIST); @@ -185,6 +190,11 @@ static int deferred_push_network_settings_list(menu_displaylist_info_t *info) return deferred_push_dlist(info, DISPLAYLIST_NETWORK_SETTINGS_LIST); } +static int deferred_push_netplay_lan_scan_settings_list(menu_displaylist_info_t *info) +{ + return deferred_push_dlist(info, DISPLAYLIST_NETPLAY_LAN_SCAN_SETTINGS_LIST); +} + static int deferred_push_lakka_services_list(menu_displaylist_info_t *info) { return deferred_push_dlist(info, DISPLAYLIST_LAKKA_SERVICES_LIST); @@ -688,11 +698,6 @@ static int deferred_push_input_overlay(menu_displaylist_info_t *info) return deferred_push_dlist(info, DISPLAYLIST_OVERLAYS); } -static int deferred_push_input_osk_overlay(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_OVERLAYS); -} - static int deferred_push_video_font_path(menu_displaylist_info_t *info) { return deferred_push_dlist(info, DISPLAYLIST_FONTS); @@ -747,6 +752,11 @@ static int menu_cbs_init_bind_deferred_push_compare_label( BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_onscreen_display_settings_list); return 0; } + if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_ONSCREEN_NOTIFICATIONS_SETTINGS_LIST))) + { + BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_onscreen_notifications_settings_list); + return 0; + } if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_ONSCREEN_OVERLAY_SETTINGS_LIST))) { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_onscreen_overlay_settings_list); @@ -787,6 +797,12 @@ static int menu_cbs_init_bind_deferred_push_compare_label( return 0; } + if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_NETPLAY_LAN_SCAN_SETTINGS_LIST))) + { + BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_netplay_lan_scan_settings_list); + return 0; + } + if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_LAKKA_SERVICES_LIST))) { BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_lakka_services_list); @@ -1055,9 +1071,6 @@ static int menu_cbs_init_bind_deferred_push_compare_label( case MENU_ENUM_LABEL_INPUT_OVERLAY: BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_input_overlay); break; - case MENU_ENUM_LABEL_INPUT_OSK_OVERLAY: - BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_input_osk_overlay); - break; case MENU_ENUM_LABEL_VIDEO_FONT_PATH: BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_video_font_path); break; @@ -1318,9 +1331,6 @@ static int menu_cbs_init_bind_deferred_push_compare_label( case MENU_LABEL_INPUT_OVERLAY: BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_input_overlay); break; - case MENU_LABEL_INPUT_OSK_OVERLAY: - BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_input_osk_overlay); - break; case MENU_LABEL_VIDEO_FONT_PATH: BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_video_font_path); break; diff --git a/menu/cbs/menu_cbs_get_value.c b/menu/cbs/menu_cbs_get_value.c index 4905bfd256..eb56c8eb51 100644 --- a/menu/cbs/menu_cbs_get_value.c +++ b/menu/cbs/menu_cbs_get_value.c @@ -28,7 +28,7 @@ #include "../menu_shader.h" #include "../menu_display.h" -#include "../../input/input_autodetect.h" +#include "../../tasks/tasks_internal.h" #include "../../input/input_config.h" #include "../../core.h" @@ -225,6 +225,16 @@ static void menu_action_setting_disp_set_label_pipeline( msg_hash_to_str( MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_RIBBON), len); break; + case XMB_SHADER_PIPELINE_SIMPLE_SNOW: + strlcpy(s, + msg_hash_to_str( + MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_SIMPLE_SNOW), len); + break; + case XMB_SHADER_PIPELINE_SNOW: + strlcpy(s, + msg_hash_to_str( + MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_SNOW), len); + break; } strlcpy(s2, path, len2); @@ -470,7 +480,7 @@ static void menu_action_setting_disp_set_label_input_desc( keybind = (const struct retro_keybind*) &settings->input.binds[inp_desc_user][remap_id]; auto_bind = (const struct retro_keybind*) - input_get_auto_bind(inp_desc_user, remap_id); + input_config_get_bind_auto(inp_desc_user, remap_id); input_config_get_bind_string(descriptor, keybind, auto_bind, sizeof(descriptor)); @@ -747,9 +757,9 @@ static void menu_action_setting_disp_set_label_xmb_theme( strlcpy(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_NEOACTIVE), len); break; - case XMB_ICON_THEME_MONOCHROME_JAGGED: + case XMB_ICON_THEME_SYSTEMATIC: strlcpy(s, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_MONOCHROME_JAGGED), len); + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_SYSTEMATIC), len); break; case XMB_ICON_THEME_CUSTOM: strlcpy(s, diff --git a/menu/cbs/menu_cbs_label.c b/menu/cbs/menu_cbs_label.c index d0b4d656f4..64ab226e78 100644 --- a/menu/cbs/menu_cbs_label.c +++ b/menu/cbs/menu_cbs_label.c @@ -18,7 +18,6 @@ #include "../menu_driver.h" #include "../menu_cbs.h" -#include "../menu_navigation.h" #include "../../file_path_special.h" #ifndef BIND_ACTION_LABEL @@ -52,7 +51,17 @@ static int action_bind_label_internal_memory( const char *label, const char *path, char *s, size_t len) { - strlcpy(s, msg_hash_to_str(MSG_INTERNAL_MEMORY), len); + strlcpy(s, msg_hash_to_str(MSG_INTERNAL_STORAGE), len); + return 0; +} + +static int action_bind_label_removable_storage( + file_list_t *list, + unsigned type, unsigned i, + const char *label, const char *path, + char *s, size_t len) +{ + strlcpy(s, msg_hash_to_str(MSG_REMOVABLE_STORAGE), len); return 0; } @@ -110,9 +119,12 @@ int menu_cbs_init_bind_label(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_PLAYLIST_COLLECTION_ENTRY: BIND_ACTION_LABEL(cbs, action_bind_label_playlist_collection_entry); break; - case MSG_INTERNAL_MEMORY: + case MSG_INTERNAL_STORAGE: BIND_ACTION_LABEL(cbs, action_bind_label_internal_memory); break; + case MSG_REMOVABLE_STORAGE: + BIND_ACTION_LABEL(cbs, action_bind_label_removable_storage); + break; case MSG_APPLICATION_DIR: BIND_ACTION_LABEL(cbs, action_bind_label_application_dir); break; diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index adfaf6c0f7..314598f6fb 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -53,6 +53,7 @@ #ifdef HAVE_NETWORKING #include "../../network/netplay/netplay.h" +#include "../../network/netplay/netplay_discovery.h" #endif typedef struct @@ -71,9 +72,9 @@ typedef struct /* FIXME - Global variables, refactor */ static char detect_content_path[PATH_MAX_LENGTH]; -unsigned rpl_entry_selection_ptr; -unsigned rdb_entry_start_game_selection_ptr; -size_t hack_shader_pass = 0; +unsigned rpl_entry_selection_ptr = 0; +unsigned rdb_entry_start_game_selection_ptr = 0; +size_t hack_shader_pass = 0; #ifdef HAVE_NETWORKING /* HACK - we have to find some way to pass state inbetween @@ -143,7 +144,7 @@ finish: /* defined in menu_cbs_deferred_push */ static void cb_net_generic(void *task_data, void *user_data, const char *err) { - bool refresh = false; + bool refresh = false; http_transfer_data_t *data = (http_transfer_data_t*)task_data; menu_file_transfer_t *state = (menu_file_transfer_t*)user_data; @@ -682,6 +683,14 @@ int generic_action_ok_displaylist_push(const char *path, info.enum_idx = MENU_ENUM_LABEL_DEFERRED_ONSCREEN_DISPLAY_SETTINGS_LIST; dl_type = DISPLAYLIST_GENERIC; break; + case ACTION_OK_DL_ONSCREEN_NOTIFICATIONS_SETTINGS_LIST: + info.directory_ptr = idx; + info.type = type; + info_path = path; + info_label = msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_ONSCREEN_NOTIFICATIONS_SETTINGS_LIST); + info.enum_idx = MENU_ENUM_LABEL_DEFERRED_ONSCREEN_NOTIFICATIONS_SETTINGS_LIST; + dl_type = DISPLAYLIST_GENERIC; + break; case ACTION_OK_DL_ONSCREEN_OVERLAY_SETTINGS_LIST: info.directory_ptr = idx; info.type = type; @@ -746,6 +755,14 @@ int generic_action_ok_displaylist_push(const char *path, info.enum_idx = MENU_ENUM_LABEL_DEFERRED_WIFI_SETTINGS_LIST; dl_type = DISPLAYLIST_GENERIC; break; + case ACTION_OK_DL_NETPLAY_LAN_SCAN_SETTINGS_LIST: + info.directory_ptr = idx; + info.type = type; + info_path = path; + info_label = msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_NETPLAY_LAN_SCAN_SETTINGS_LIST); + info.enum_idx = MENU_ENUM_LABEL_DEFERRED_NETPLAY_LAN_SCAN_SETTINGS_LIST; + dl_type = DISPLAYLIST_GENERIC; + break; case ACTION_OK_DL_LAKKA_SERVICES_LIST: info.directory_ptr = idx; info.type = type; @@ -972,20 +989,20 @@ static int action_ok_file_load_with_detect_core_collection(const char *path, static int action_ok_playlist_entry_collection(const char *path, const char *label, unsigned type, size_t idx, size_t entry_idx) { - size_t selection; menu_content_ctx_playlist_info_t playlist_info; char new_core_path[PATH_MAX_LENGTH]; - enum rarch_core_type action_type = CORE_TYPE_PLAIN; + size_t selection = 0; + size_t selection_ptr = 0; + enum rarch_core_type action_type = CORE_TYPE_PLAIN; enum content_mode_load content_enum_idx = CONTENT_MODE_LOAD_CONTENT_FROM_PLAYLIST_FROM_MENU; - size_t selection_ptr = 0; - playlist_t *playlist = NULL; - bool playlist_initialized = false; - const char *entry_path = NULL; - const char *entry_label = NULL; - const char *core_path = NULL; - const char *core_name = NULL; - playlist_t *tmp_playlist = NULL; - menu_handle_t *menu = NULL; + bool playlist_initialized = false; + playlist_t *playlist = NULL; + const char *entry_path = NULL; + const char *entry_label = NULL; + const char *core_path = NULL; + const char *core_name = NULL; + playlist_t *tmp_playlist = NULL; + menu_handle_t *menu = NULL; if (!menu_driver_ctl(RARCH_MENU_CTL_DRIVER_DATA_GET, &menu)) return menu_cbs_exit(); @@ -1006,8 +1023,7 @@ static int action_ok_playlist_entry_collection(const char *path, playlist_initialized = true; } - playlist = tmp_playlist; - + playlist = tmp_playlist; selection_ptr = entry_idx; playlist_get_index(playlist, selection_ptr, @@ -1029,8 +1045,8 @@ static int action_ok_playlist_entry_collection(const char *path, new_display_name[0] = '\0'; - core_info.inf = NULL; - core_info.path = new_core_path; + core_info.inf = NULL; + core_info.path = new_core_path; if (!core_info_find(&core_info, new_core_path)) found_associated_core = false; @@ -1166,8 +1182,8 @@ static int action_ok_playlist_entry(const char *path, static int action_ok_playlist_entry_start_content(const char *path, const char *label, unsigned type, size_t idx, size_t entry_idx) { - size_t selection; menu_content_ctx_playlist_info_t playlist_info; + size_t selection = 0; size_t selection_ptr = 0; bool playlist_initialized = false; playlist_t *playlist = NULL; @@ -1758,10 +1774,11 @@ static int generic_action_ok_remap_file_save(const char *path, switch (action_type) { case ACTION_OK_REMAP_FILE_SAVE_CORE: - fill_pathname_join(file, core_name, core_name, sizeof(file)); + if (!string_is_empty(core_name)) + fill_pathname_join(file, core_name, core_name, sizeof(file)); break; case ACTION_OK_REMAP_FILE_SAVE_GAME: - if (core_name) + if (!string_is_empty(core_name)) fill_pathname_join(file, core_name, path_basename(path_get(RARCH_PATH_BASENAME)), sizeof(file)); break; @@ -1868,7 +1885,6 @@ static int action_ok_load_core_deferred(const char *path, const char *label, unsigned type, size_t idx, size_t entry_idx) { menu_handle_t *menu = NULL; - if (!menu_driver_ctl(RARCH_MENU_CTL_DRIVER_DATA_GET, &menu)) return menu_cbs_exit(); @@ -2856,6 +2872,13 @@ static int action_ok_onscreen_display_list(const char *path, entry_idx, ACTION_OK_DL_ONSCREEN_DISPLAY_SETTINGS_LIST); } +static int action_ok_onscreen_notifications_list(const char *path, + const char *label, unsigned type, size_t idx, size_t entry_idx) +{ + return generic_action_ok_displaylist_push(path, NULL, label, type, idx, + entry_idx, ACTION_OK_DL_ONSCREEN_NOTIFICATIONS_SETTINGS_LIST); +} + static int action_ok_onscreen_overlay_list(const char *path, const char *label, unsigned type, size_t idx, size_t entry_idx) { @@ -2912,6 +2935,13 @@ static int action_ok_network_list(const char *path, entry_idx, ACTION_OK_DL_NETWORK_SETTINGS_LIST); } +static int action_ok_netplay_lan_scan_list(const char *path, + const char *label, unsigned type, size_t idx, size_t entry_idx) +{ + return generic_action_ok_displaylist_push(path, NULL, label, type, idx, + entry_idx, ACTION_OK_DL_NETPLAY_LAN_SCAN_SETTINGS_LIST); +} + static int action_ok_lakka_services(const char *path, const char *label, unsigned type, size_t idx, size_t entry_idx) { @@ -2964,6 +2994,44 @@ static int action_ok_wifi(const char *path, return 0; } +static int action_ok_netplay_lan_scan(const char *path, + const char *label, unsigned type, size_t idx, size_t entry_idx) +{ +#ifdef HAVE_NETWORKING + struct netplay_host_list *hosts; + struct netplay_host *host; + bool netplay_was_on = false; + + /* Figure out what host we're connecting to */ + if (!netplay_discovery_driver_ctl(RARCH_NETPLAY_DISCOVERY_CTL_LAN_GET_RESPONSES, &hosts)) + return -1; + if (entry_idx >= hosts->size) + return -1; + host = &hosts->hosts[entry_idx]; + + /* Enable Netplay client mode */ + if (netplay_driver_ctl(RARCH_NETPLAY_CTL_IS_DATA_INITED, NULL)) + { + netplay_was_on = true; + command_event(CMD_EVENT_NETPLAY_DEINIT, NULL); + } + netplay_driver_ctl(RARCH_NETPLAY_CTL_ENABLE_CLIENT, NULL); + + /* Enable Netplay */ + if (!command_event(CMD_EVENT_NETPLAY_INIT, (void *) host)) + return -1; + + /* And make sure we use its callbacks */ + if (!netplay_was_on && !core_set_netplay_callbacks()) + return -1; + + return generic_action_ok_command(CMD_EVENT_RESUME); + +#else + return -1; +#endif +} + static int action_ok_content_collection_list(const char *path, const char *label, unsigned type, size_t idx, size_t entry_idx) { @@ -3787,6 +3855,9 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_ONSCREEN_DISPLAY_SETTINGS: BIND_ACTION_OK(cbs, action_ok_onscreen_display_list); break; + case MENU_ENUM_LABEL_ONSCREEN_NOTIFICATIONS_SETTINGS: + BIND_ACTION_OK(cbs, action_ok_onscreen_notifications_list); + break; case MENU_ENUM_LABEL_ONSCREEN_OVERLAY_SETTINGS: BIND_ACTION_OK(cbs, action_ok_onscreen_overlay_list); break; @@ -3811,6 +3882,9 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_NETWORK_SETTINGS: BIND_ACTION_OK(cbs, action_ok_network_list); break; + case MENU_ENUM_LABEL_NETPLAY_LAN_SCAN_SETTINGS: + BIND_ACTION_OK(cbs, action_ok_netplay_lan_scan_list); + break; case MENU_ENUM_LABEL_LAKKA_SERVICES: BIND_ACTION_OK(cbs, action_ok_lakka_services); break; @@ -4136,6 +4210,9 @@ static int menu_cbs_init_bind_ok_compare_type(menu_file_list_cbs_t *cbs, case MENU_WIFI: BIND_ACTION_OK(cbs, action_ok_wifi); break; + case MENU_NETPLAY_LAN_SCAN: + BIND_ACTION_OK(cbs, action_ok_netplay_lan_scan); + break; case FILE_TYPE_CURSOR: switch (menu_label_hash) { diff --git a/menu/cbs/menu_cbs_scan.c b/menu/cbs/menu_cbs_scan.c index 38c9aafdf1..dc49656dac 100644 --- a/menu/cbs/menu_cbs_scan.c +++ b/menu/cbs/menu_cbs_scan.c @@ -25,7 +25,6 @@ #include "../menu_setting.h" #include "../../configuration.h" -#include "../../runloop.h" #include "../../tasks/tasks_internal.h" #ifndef BIND_ACTION_SCAN diff --git a/menu/cbs/menu_cbs_select.c b/menu/cbs/menu_cbs_select.c index 97a62dd642..a3fd587761 100644 --- a/menu/cbs/menu_cbs_select.c +++ b/menu/cbs/menu_cbs_select.c @@ -24,8 +24,6 @@ #include "../menu_cbs.h" #include "../menu_setting.h" -#include "../../runloop.h" - #ifndef BIND_ACTION_SELECT #define BIND_ACTION_SELECT(cbs, name) \ cbs->action_select = name; \ diff --git a/menu/cbs/menu_cbs_sublabel.c b/menu/cbs/menu_cbs_sublabel.c index e45fd0fe52..51f179f964 100644 --- a/menu/cbs/menu_cbs_sublabel.c +++ b/menu/cbs/menu_cbs_sublabel.c @@ -14,12 +14,9 @@ */ #include -#include #include "../menu_driver.h" #include "../menu_cbs.h" -#include "../menu_navigation.h" -#include "../../file_path_special.h" #ifdef HAVE_CHEEVOS #include "../../cheevos.h" @@ -31,338 +28,93 @@ cbs->action_sublabel_ident = #name; #endif -static int action_bind_sublabel_generic( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - return 0; +#define default_sublabel_macro(func_name, lbl) \ + static int (func_name)(file_list_t *list, unsigned type, unsigned i, const char *label, const char *path, char *s, size_t len) \ +{ \ + strlcpy(s, msg_hash_to_str(lbl), len); \ + return 0; \ } -static int action_bind_sublabel_core_settings_list( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_CORE_SETTINGS), len); - return 0; -} - -static int action_bind_sublabel_information_list_list( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_INFORMATION_LIST_LIST), len); - return 0; -} - -static int action_bind_sublabel_cheevos_hardcore_mode_enable( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_CHEEVOS_HARDCORE_MODE_ENABLE), len); - return 0; -} - -static int action_bind_sublabel_menu_settings_list( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_MENU_SETTINGS), len); - return 0; -} - -static int action_bind_sublabel_video_settings_list( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_VIDEO_SETTINGS), len); - return 0; -} - -static int action_bind_sublabel_suspend_screensaver_enable( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_SUSPEND_SCREENSAVER_ENABLE), len); - return 0; -} - -static int action_bind_sublabel_audio_settings_list( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_AUDIO_SETTINGS), len); - return 0; -} - -static int action_bind_sublabel_input_settings_list( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_INPUT_SETTINGS), len); - return 0; -} - -static int action_bind_sublabel_wifi_settings_list( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_WIFI_SETTINGS), len); - return 0; -} - -static int action_bind_sublabel_services_settings_list( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_SERVICES_SETTINGS), len); - return 0; -} - -static int action_bind_sublabel_ssh_enable( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_SSH_ENABLE), len); - return 0; -} - -static int action_bind_sublabel_samba_enable( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_SAMBA_ENABLE), len); - return 0; -} - -static int action_bind_sublabel_bluetooth_enable( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_BLUETOOTH_ENABLE), len); - return 0; -} - -static int action_bind_sublabel_user_language( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_USER_LANGUAGE), len); - return 0; -} - -static int action_bind_sublabel_max_swapchain_images( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_VIDEO_MAX_SWAPCHAIN_IMAGES), len); - return 0; -} - -static int action_bind_sublabel_online_updater( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_ONLINE_UPDATER), len); - return 0; -} - -static int action_bind_sublabel_fps_show( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_FPS_SHOW), len); - return 0; -} - -static int action_bind_sublabel_netplay_settings( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - - strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_NETPLAY), len); - return 0; -} - -static int action_bind_sublabel_user_bind_settings( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - - strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_INPUT_USER_BINDS), len); - return 0; -} - -static int action_bind_sublabel_input_hotkey_settings( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - - strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_INPUT_HOTKEY_BINDS), len); - return 0; -} - -static int action_bind_sublabel_add_content_list( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - - strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_ADD_CONTENT_LIST), len); - return 0; -} - -static int action_bind_sublabel_video_frame_delay( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_VIDEO_FRAME_DELAY), len); - return 0; -} - -static int action_bind_sublabel_video_black_frame_insertion( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION), len); - return 0; -} - -static int action_bind_sublabel_systeminfo_cpu_cores( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_CPU_CORES), len); - return 0; -} - -static int action_bind_sublabel_toggle_gamepad_combo( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO), len); - return 0; -} - -static int action_bind_sublabel_show_hidden_files( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_SHOW_HIDDEN_FILES), len); - return 0; -} - -static int action_bind_sublabel_log_verbosity( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_LOG_VERBOSITY), len); - return 0; -} - -static int action_bind_sublabel_video_monitor_index( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_VIDEO_MONITOR_INDEX), len); - return 0; -} - -static int action_bind_sublabel_video_refresh_rate_auto( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_VIDEO_REFRESH_RATE_AUTO), len); - return 0; -} - -static int action_bind_sublabel_video_hard_sync( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_VIDEO_HARD_SYNC), len); - return 0; -} - -static int action_bind_sublabel_video_hard_sync_frames( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_VIDEO_HARD_SYNC_FRAMES), len); - return 0; -} - -static int action_bind_sublabel_video_threaded( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_VIDEO_THREADED), len); - return 0; -} +default_sublabel_macro(action_bind_sublabel_driver_settings_list, MENU_ENUM_SUBLABEL_DRIVER_SETTINGS) +default_sublabel_macro(action_bind_sublabel_retro_achievements_settings_list, MENU_ENUM_SUBLABEL_RETRO_ACHIEVEMENTS_SETTINGS) +default_sublabel_macro(action_bind_sublabel_saving_settings_list, MENU_ENUM_SUBLABEL_SAVING_SETTINGS) +default_sublabel_macro(action_bind_sublabel_logging_settings_list, MENU_ENUM_SUBLABEL_LOGGING_SETTINGS) +default_sublabel_macro(action_bind_sublabel_user_interface_settings_list, MENU_ENUM_SUBLABEL_USER_INTERFACE_SETTINGS) +default_sublabel_macro(action_bind_sublabel_privacy_settings_list, MENU_ENUM_SUBLABEL_PRIVACY_SETTINGS) +default_sublabel_macro(action_bind_sublabel_directory_settings_list, MENU_ENUM_SUBLABEL_DIRECTORY_SETTINGS) +default_sublabel_macro(action_bind_sublabel_playlist_settings_list, MENU_ENUM_SUBLABEL_PLAYLIST_SETTINGS) +default_sublabel_macro(action_bind_sublabel_network_settings_list, MENU_ENUM_SUBLABEL_NETWORK_SETTINGS) +default_sublabel_macro(action_bind_sublabel_user_settings_list, MENU_ENUM_SUBLABEL_USER_SETTINGS) +default_sublabel_macro(action_bind_sublabel_recording_settings_list, MENU_ENUM_SUBLABEL_RECORDING_SETTINGS) +default_sublabel_macro(action_bind_sublabel_frame_throttle_settings_list, MENU_ENUM_SUBLABEL_FRAME_THROTTLE_SETTINGS) +default_sublabel_macro(action_bind_sublabel_onscreen_display_settings_list,MENU_ENUM_SUBLABEL_ONSCREEN_DISPLAY_SETTINGS) +default_sublabel_macro(action_bind_sublabel_core_settings_list, MENU_ENUM_SUBLABEL_CORE_SETTINGS) +default_sublabel_macro(action_bind_sublabel_information_list_list, MENU_ENUM_SUBLABEL_INFORMATION_LIST_LIST) +default_sublabel_macro(action_bind_sublabel_cheevos_enable, MENU_ENUM_SUBLABEL_CHEEVOS_ENABLE) +default_sublabel_macro(action_bind_sublabel_cheevos_test_unofficial, MENU_ENUM_SUBLABEL_CHEEVOS_TEST_UNOFFICIAL) +default_sublabel_macro(action_bind_sublabel_cheevos_hardcore_mode_enable, MENU_ENUM_SUBLABEL_CHEEVOS_HARDCORE_MODE_ENABLE) +default_sublabel_macro(action_bind_sublabel_menu_settings_list, MENU_ENUM_SUBLABEL_MENU_SETTINGS) +default_sublabel_macro(action_bind_sublabel_video_settings_list, MENU_ENUM_SUBLABEL_VIDEO_SETTINGS) +default_sublabel_macro(action_bind_sublabel_suspend_screensaver_enable, MENU_ENUM_SUBLABEL_SUSPEND_SCREENSAVER_ENABLE) +default_sublabel_macro(action_bind_sublabel_video_window_scale, MENU_ENUM_SUBLABEL_VIDEO_WINDOW_SCALE) +default_sublabel_macro(action_bind_sublabel_audio_settings_list, MENU_ENUM_SUBLABEL_AUDIO_SETTINGS) +default_sublabel_macro(action_bind_sublabel_input_settings_list, MENU_ENUM_SUBLABEL_INPUT_SETTINGS) +default_sublabel_macro(action_bind_sublabel_wifi_settings_list, MENU_ENUM_SUBLABEL_WIFI_SETTINGS) +default_sublabel_macro(action_bind_sublabel_netplay_lan_scan_settings_list,MENU_ENUM_SUBLABEL_NETPLAY_LAN_SCAN_SETTINGS) +default_sublabel_macro(action_bind_sublabel_help_list, MENU_ENUM_SUBLABEL_HELP_LIST) +default_sublabel_macro(action_bind_sublabel_services_settings_list, MENU_ENUM_SUBLABEL_SERVICES_SETTINGS) +default_sublabel_macro(action_bind_sublabel_ssh_enable, MENU_ENUM_SUBLABEL_SSH_ENABLE) +default_sublabel_macro(action_bind_sublabel_samba_enable, MENU_ENUM_SUBLABEL_SAMBA_ENABLE ) +default_sublabel_macro(action_bind_sublabel_bluetooth_enable, MENU_ENUM_SUBLABEL_BLUETOOTH_ENABLE ) +default_sublabel_macro(action_bind_sublabel_user_language, MENU_ENUM_SUBLABEL_USER_LANGUAGE) +default_sublabel_macro(action_bind_sublabel_max_swapchain_images, MENU_ENUM_SUBLABEL_VIDEO_MAX_SWAPCHAIN_IMAGES ) +default_sublabel_macro(action_bind_sublabel_online_updater, MENU_ENUM_SUBLABEL_ONLINE_UPDATER) +default_sublabel_macro(action_bind_sublabel_fps_show, MENU_ENUM_SUBLABEL_FPS_SHOW) +default_sublabel_macro(action_bind_sublabel_netplay_settings, MENU_ENUM_SUBLABEL_NETPLAY) +default_sublabel_macro(action_bind_sublabel_user_bind_settings, MENU_ENUM_SUBLABEL_INPUT_USER_BINDS) +default_sublabel_macro(action_bind_sublabel_input_hotkey_settings, MENU_ENUM_SUBLABEL_INPUT_HOTKEY_BINDS) +default_sublabel_macro(action_bind_sublabel_add_content_list, MENU_ENUM_SUBLABEL_ADD_CONTENT_LIST) +default_sublabel_macro(action_bind_sublabel_video_frame_delay, MENU_ENUM_SUBLABEL_VIDEO_FRAME_DELAY) +default_sublabel_macro(action_bind_sublabel_video_black_frame_insertion, MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION) +default_sublabel_macro(action_bind_sublabel_systeminfo_cpu_cores, MENU_ENUM_SUBLABEL_CPU_CORES) +default_sublabel_macro(action_bind_sublabel_toggle_gamepad_combo, MENU_ENUM_SUBLABEL_INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO) +default_sublabel_macro(action_bind_sublabel_show_hidden_files, MENU_ENUM_SUBLABEL_SHOW_HIDDEN_FILES) +default_sublabel_macro(action_bind_sublabel_log_verbosity, MENU_ENUM_SUBLABEL_LOG_VERBOSITY) +default_sublabel_macro(action_bind_sublabel_video_monitor_index, MENU_ENUM_SUBLABEL_VIDEO_MONITOR_INDEX) +default_sublabel_macro(action_bind_sublabel_video_refresh_rate_auto, MENU_ENUM_SUBLABEL_VIDEO_REFRESH_RATE_AUTO) +default_sublabel_macro(action_bind_sublabel_video_hard_sync, MENU_ENUM_SUBLABEL_VIDEO_HARD_SYNC) +default_sublabel_macro(action_bind_sublabel_video_hard_sync_frames, MENU_ENUM_SUBLABEL_VIDEO_HARD_SYNC_FRAMES) +default_sublabel_macro(action_bind_sublabel_video_threaded, MENU_ENUM_SUBLABEL_VIDEO_THREADED) +default_sublabel_macro(action_bind_sublabel_config_save_on_exit, MENU_ENUM_SUBLABEL_CONFIG_SAVE_ON_EXIT) +default_sublabel_macro(action_bind_sublabel_configuration_settings_list, MENU_ENUM_SUBLABEL_CONFIGURATION_SETTINGS) +default_sublabel_macro(action_bind_sublabel_configurations_list_list, MENU_ENUM_SUBLABEL_CONFIGURATIONS_LIST) +default_sublabel_macro(action_bind_sublabel_video_shared_context, MENU_ENUM_SUBLABEL_VIDEO_SHARED_CONTEXT) +default_sublabel_macro(action_bind_sublabel_audio_latency, MENU_ENUM_SUBLABEL_AUDIO_LATENCY) +default_sublabel_macro(action_bind_sublabel_audio_rate_control_delta, MENU_ENUM_SUBLABEL_AUDIO_RATE_CONTROL_DELTA) +default_sublabel_macro(action_bind_sublabel_audio_mute, MENU_ENUM_SUBLABEL_AUDIO_MUTE) +default_sublabel_macro(action_bind_sublabel_camera_allow, MENU_ENUM_SUBLABEL_CAMERA_ALLOW) +default_sublabel_macro(action_bind_sublabel_location_allow, MENU_ENUM_SUBLABEL_LOCATION_ALLOW) +default_sublabel_macro(action_bind_sublabel_input_max_users, MENU_ENUM_SUBLABEL_INPUT_MAX_USERS) +default_sublabel_macro(action_bind_sublabel_input_poll_type_behavior, MENU_ENUM_SUBLABEL_INPUT_POLL_TYPE_BEHAVIOR) +default_sublabel_macro(action_bind_sublabel_input_all_users_control_menu, MENU_ENUM_SUBLABEL_INPUT_ALL_USERS_CONTROL_MENU) +default_sublabel_macro(action_bind_sublabel_input_bind_timeout, MENU_ENUM_SUBLABEL_INPUT_BIND_TIMEOUT) +default_sublabel_macro(action_bind_sublabel_audio_volume, MENU_ENUM_SUBLABEL_AUDIO_VOLUME) +default_sublabel_macro(action_bind_sublabel_audio_sync, MENU_ENUM_SUBLABEL_AUDIO_SYNC) +default_sublabel_macro(action_bind_sublabel_axis_threshold, MENU_ENUM_SUBLABEL_INPUT_AXIS_THRESHOLD) +default_sublabel_macro(action_bind_sublabel_input_turbo_period, MENU_ENUM_SUBLABEL_INPUT_TURBO_PERIOD) +default_sublabel_macro(action_bind_sublabel_input_duty_cycle, MENU_ENUM_SUBLABEL_INPUT_DUTY_CYCLE) +default_sublabel_macro(action_bind_sublabel_video_vertical_sync, MENU_ENUM_SUBLABEL_VIDEO_VSYNC) +default_sublabel_macro(action_bind_sublabel_core_allow_rotate, MENU_ENUM_SUBLABEL_VIDEO_ALLOW_ROTATE) +default_sublabel_macro(action_bind_sublabel_dummy_on_core_shutdown, MENU_ENUM_SUBLABEL_DUMMY_ON_CORE_SHUTDOWN) +default_sublabel_macro(action_bind_sublabel_dummy_check_missing_firmware, MENU_ENUM_SUBLABEL_CHECK_FOR_MISSING_FIRMWARE) +default_sublabel_macro(action_bind_sublabel_video_refresh_rate, MENU_ENUM_SUBLABEL_VIDEO_REFRESH_RATE) +default_sublabel_macro(action_bind_sublabel_audio_enable, MENU_ENUM_SUBLABEL_AUDIO_ENABLE) +default_sublabel_macro(action_bind_sublabel_audio_max_timing_skew, MENU_ENUM_SUBLABEL_AUDIO_MAX_TIMING_SKEW) +default_sublabel_macro(action_bind_sublabel_pause_nonactive, MENU_ENUM_SUBLABEL_PAUSE_NONACTIVE) +default_sublabel_macro(action_bind_sublabel_video_disable_composition, MENU_ENUM_SUBLABEL_VIDEO_DISABLE_COMPOSITION) +default_sublabel_macro(action_bind_sublabel_history_list_enable, MENU_ENUM_SUBLABEL_HISTORY_LIST_ENABLE) +default_sublabel_macro(action_bind_sublabel_content_history_size, MENU_ENUM_SUBLABEL_CONTENT_HISTORY_SIZE) +default_sublabel_macro(action_bind_sublabel_menu_input_unified_controls, MENU_ENUM_SUBLABEL_INPUT_UNIFIED_MENU_CONTROLS) static int action_bind_sublabel_cheevos_entry( file_list_t *list, @@ -383,25 +135,12 @@ static int action_bind_sublabel_cheevos_entry( return 0; } -static int action_bind_sublabel_config_save_on_exit( +static int action_bind_sublabel_generic( file_list_t *list, unsigned type, unsigned i, const char *label, const char *path, char *s, size_t len) { - - strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_CONFIG_SAVE_ON_EXIT), len); - return 0; -} - -static int action_bind_sublabel_video_shared_context( - file_list_t *list, - unsigned type, unsigned i, - const char *label, const char *path, - char *s, size_t len) -{ - - strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_VIDEO_SHARED_CONTEXT), len); return 0; } @@ -417,6 +156,72 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs, { switch (cbs->enum_idx) { + case MENU_ENUM_LABEL_INPUT_UNIFIED_MENU_CONTROLS: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_input_unified_controls); + break; + case MENU_ENUM_LABEL_AUDIO_MAX_TIMING_SKEW: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_audio_max_timing_skew); + break; + case MENU_ENUM_LABEL_AUDIO_ENABLE: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_audio_enable); + break; + case MENU_ENUM_LABEL_VIDEO_REFRESH_RATE: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_video_refresh_rate); + break; + case MENU_ENUM_LABEL_DUMMY_ON_CORE_SHUTDOWN: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_dummy_on_core_shutdown); + break; + case MENU_ENUM_LABEL_CHECK_FOR_MISSING_FIRMWARE: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_dummy_check_missing_firmware); + break; + case MENU_ENUM_LABEL_VIDEO_ALLOW_ROTATE: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_core_allow_rotate); + break; + case MENU_ENUM_LABEL_VIDEO_VSYNC: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_video_vertical_sync); + break; + case MENU_ENUM_LABEL_INPUT_DUTY_CYCLE: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_input_duty_cycle); + break; + case MENU_ENUM_LABEL_INPUT_TURBO_PERIOD: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_input_turbo_period); + break; + case MENU_ENUM_LABEL_INPUT_BIND_TIMEOUT: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_input_bind_timeout); + break; + case MENU_ENUM_LABEL_INPUT_AXIS_THRESHOLD: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_axis_threshold); + break; + case MENU_ENUM_LABEL_AUDIO_SYNC: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_audio_sync); + break; + case MENU_ENUM_LABEL_AUDIO_VOLUME: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_audio_volume); + break; + case MENU_ENUM_LABEL_INPUT_ALL_USERS_CONTROL_MENU: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_input_all_users_control_menu); + break; + case MENU_ENUM_LABEL_INPUT_POLL_TYPE_BEHAVIOR: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_input_poll_type_behavior); + break; + case MENU_ENUM_LABEL_INPUT_MAX_USERS: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_input_max_users); + break; + case MENU_ENUM_LABEL_LOCATION_ALLOW: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_location_allow); + break; + case MENU_ENUM_LABEL_CAMERA_ALLOW: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_camera_allow); + break; + case MENU_ENUM_LABEL_AUDIO_RATE_CONTROL_DELTA: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_audio_rate_control_delta); + break; + case MENU_ENUM_LABEL_AUDIO_MUTE: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_audio_mute); + break; + case MENU_ENUM_LABEL_AUDIO_LATENCY: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_audio_latency); + break; case MENU_ENUM_LABEL_VIDEO_SHARED_CONTEXT: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_video_shared_context); break; @@ -424,12 +229,24 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_CHEEVOS_LOCKED_ENTRY: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_entry); break; + case MENU_ENUM_LABEL_CHEEVOS_ENABLE: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_enable); + break; + case MENU_ENUM_LABEL_CHEEVOS_TEST_UNOFFICIAL: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_test_unofficial); + break; case MENU_ENUM_LABEL_CHEEVOS_HARDCORE_MODE_ENABLE: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheevos_hardcore_mode_enable); break; case MENU_ENUM_LABEL_CONFIG_SAVE_ON_EXIT: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_config_save_on_exit); break; + case MENU_ENUM_LABEL_CONFIGURATION_SETTINGS: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_configuration_settings_list); + break; + case MENU_ENUM_LABEL_CONFIGURATIONS_LIST: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_configurations_list_list); + break; case MENU_ENUM_LABEL_VIDEO_THREADED: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_video_threaded); break; @@ -511,15 +328,60 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_AUDIO_SETTINGS: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_audio_settings_list); break; + case MENU_ENUM_LABEL_RECORDING_SETTINGS: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_recording_settings_list); + break; case MENU_ENUM_LABEL_CORE_SETTINGS: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_core_settings_list); break; + case MENU_ENUM_LABEL_DRIVER_SETTINGS: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_driver_settings_list); + break; + case MENU_ENUM_LABEL_SAVING_SETTINGS: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_saving_settings_list); + break; + case MENU_ENUM_LABEL_LOGGING_SETTINGS: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_logging_settings_list); + break; + case MENU_ENUM_LABEL_PLAYLIST_SETTINGS: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_playlist_settings_list); + break; + case MENU_ENUM_LABEL_USER_INTERFACE_SETTINGS: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_user_interface_settings_list); + break; + case MENU_ENUM_LABEL_PRIVACY_SETTINGS: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_privacy_settings_list); + break; + case MENU_ENUM_LABEL_DIRECTORY_SETTINGS: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_directory_settings_list); + break; + case MENU_ENUM_LABEL_FRAME_THROTTLE_SETTINGS: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_frame_throttle_settings_list); + break; + case MENU_ENUM_LABEL_ONSCREEN_DISPLAY_SETTINGS: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_onscreen_display_settings_list); + break; + case MENU_ENUM_LABEL_NETWORK_SETTINGS: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_network_settings_list); + break; + case MENU_ENUM_LABEL_USER_SETTINGS: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_user_settings_list); + break; + case MENU_ENUM_LABEL_RETRO_ACHIEVEMENTS_SETTINGS: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_retro_achievements_settings_list); + break; case MENU_ENUM_LABEL_INPUT_SETTINGS: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_input_settings_list); break; case MENU_ENUM_LABEL_WIFI_SETTINGS: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_wifi_settings_list); break; + case MENU_ENUM_LABEL_NETPLAY_LAN_SCAN_SETTINGS: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_netplay_lan_scan_settings_list); + break; + case MENU_ENUM_LABEL_HELP_LIST: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_help_list); + break; case MENU_ENUM_LABEL_LAKKA_SERVICES: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_services_settings_list); break; @@ -538,6 +400,21 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_SUSPEND_SCREENSAVER_ENABLE: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_suspend_screensaver_enable); break; + case MENU_ENUM_LABEL_VIDEO_SCALE: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_video_window_scale); + break; + case MENU_ENUM_LABEL_PAUSE_NONACTIVE: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_pause_nonactive); + break; + case MENU_ENUM_LABEL_VIDEO_DISABLE_COMPOSITION: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_video_disable_composition); + break; + case MENU_ENUM_LABEL_HISTORY_LIST_ENABLE: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_history_list_enable); + break; + case MENU_ENUM_LABEL_CONTENT_HISTORY_SIZE: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_content_history_size); + break; default: case MSG_UNKNOWN: return -1; diff --git a/menu/cbs/menu_cbs_title.c b/menu/cbs/menu_cbs_title.c index e8e4ecab1d..ed69c9907c 100644 --- a/menu/cbs/menu_cbs_title.c +++ b/menu/cbs/menu_cbs_title.c @@ -46,374 +46,9 @@ static void sanitize_to_string(char *s, const char *label, size_t len) replace_chars(s, '_', ' '); } -static int action_get_user_accounts_cheevos_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) +static int fill_title(char *s, const char *title, const char *path, size_t len) { - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_ACCOUNTS_RETRO_ACHIEVEMENTS), len); - return 0; -} - -static int action_get_download_core_content_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DOWNLOAD_CORE_CONTENT), len); - return 0; -} - -static int action_get_user_accounts_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_ACCOUNTS_LIST), len); - return 0; -} - -static int action_get_core_information_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_INFORMATION), len); - return 0; -} - -static int action_get_core_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_LIST), len); - return 0; -} - -static int action_get_online_updater_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_ONLINE_UPDATER), len); - return 0; -} - -static int action_get_netplay_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NETPLAY), len); - return 0; -} - -static int action_get_online_thumbnails_updater_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_THUMBNAILS_UPDATER_LIST), len); - return 0; -} - -static int action_get_core_updater_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_UPDATER_LIST), len); - return 0; -} - -static int action_get_add_content_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_ADD_CONTENT_LIST), len); - return 0; -} - -static int action_get_configurations_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CONFIGURATIONS_LIST), len); - return 0; -} - -static int action_get_core_options_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_OPTIONS), len); - return 0; -} - -static int action_get_load_recent_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_HISTORY), len); - return 0; -} - -static int action_get_quick_menu_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CONTENT_SETTINGS), len); - return 0; -} - -static int action_get_input_remapping_options_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_INPUT_REMAPPING_OPTIONS), len); - return 0; -} - -static int action_get_shader_options_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SHADER_OPTIONS), len); - return 0; -} - -static int action_get_disk_options_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DISK_OPTIONS), len); - return 0; -} - -static int action_get_frontend_counters_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_FRONTEND_COUNTERS), len); - return 0; -} - -static int action_get_core_counters_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_COUNTERS), len); - return 0; -} - -static int action_get_recording_settings_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RECORDING_SETTINGS), len); - return 0; -} - -static int action_get_playlist_settings_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_PLAYLIST_SETTINGS), len); - return 0; -} - -static int action_get_input_hotkey_binds_settings_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_INPUT_HOTKEY_BINDS), len); - return 0; -} - -static int action_get_driver_settings_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DRIVER_SETTINGS), len); - return 0; -} - -static int action_get_core_settings_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_SETTINGS), len); - return 0; -} - -static int action_get_video_settings_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_SETTINGS), len); - return 0; -} - -static int action_get_configuration_settings_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CONFIGURATION_SETTINGS), len); - return 0; -} - -static int action_get_saving_settings_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SAVING_SETTINGS), len); - return 0; -} - -static int action_get_logging_settings_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_LOGGING_SETTINGS), len); - return 0; -} - -static int action_get_frame_throttle_settings_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_FRAME_THROTTLE_SETTINGS), len); - return 0; -} - -static int action_get_rewind_settings_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_REWIND_SETTINGS), len); - return 0; -} - -static int action_get_onscreen_display_settings_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_ONSCREEN_DISPLAY_SETTINGS), len); - return 0; -} - -static int action_get_onscreen_overlay_settings_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_ONSCREEN_OVERLAY_SETTINGS), len); - return 0; -} - -static int action_get_menu_settings_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_MENU_SETTINGS), len); - return 0; -} - -static int action_get_user_interface_settings_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_USER_INTERFACE_SETTINGS), len); - return 0; -} - -static int action_get_menu_file_browser_settings_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_MENU_FILE_BROWSER_SETTINGS), len); - return 0; -} - -static int action_get_retro_achievements_settings_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RETRO_ACHIEVEMENTS_SETTINGS), len); - return 0; -} - -static int action_get_wifi_settings_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_WIFI_SETTINGS), len); - return 0; -} - -static int action_get_network_settings_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NETWORK_SETTINGS), len); - return 0; -} - -static int action_get_lakka_services_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_LAKKA_SERVICES), len); - return 0; -} - -static int action_get_user_settings_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_USER_SETTINGS), len); - return 0; -} - -static int action_get_directory_settings_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DIRECTORY_SETTINGS), len); - return 0; -} - -static int action_get_privacy_settings_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_PRIVACY_SETTINGS), len); - return 0; -} - -static int action_get_updater_settings_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_UPDATER_SETTINGS), len); - return 0; -} - -static int action_get_audio_settings_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_AUDIO_SETTINGS), len); - return 0; -} - -static int action_get_input_settings_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_INPUT_SETTINGS), len); - return 0; -} - -static int action_get_core_cheat_options_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_CHEAT_OPTIONS), len); - return 0; -} - -static int action_get_load_content_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_LIST), len); - return 0; -} - -static int action_get_cursor_manager_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CURSOR_MANAGER), len); - return 0; -} - -static int action_get_database_manager_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DATABASE_MANAGER), len); - return 0; -} - -static int action_get_system_information_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_INFORMATION), len); - return 0; -} - -static int action_get_network_information_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NETWORK_INFORMATION), len); - return 0; -} - -static int action_get_settings_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SETTINGS), len); - return 0; -} - -static int action_get_title_information_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - sanitize_to_string(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_INFORMATION_LIST), len); + fill_pathname_join_delim(s, title, path, ' ', len); return 0; } @@ -424,268 +59,122 @@ static int action_get_title_action_generic(const char *path, const char *label, return 0; } -static int fill_title(char *s, const char *title, const char *path, size_t len) -{ - fill_pathname_join_delim(s, title, path, ' ', len); - return 0; +#define default_title_macro(func_name, lbl) \ + static int (func_name)(const char *path, const char *label, unsigned menu_type, char *s, size_t len) \ +{ \ + sanitize_to_string(s, msg_hash_to_str(lbl), len); \ + return 0; \ } -static int action_get_title_disk_image_append(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DISK_IMAGE_APPEND), - path, len); +#define default_fill_title_macro(func_name, lbl) \ + static int (func_name)(const char *path, const char *label, unsigned menu_type, char *s, size_t len) \ +{ \ + return fill_title(s, msg_hash_to_str(lbl), path, len); \ } -static int action_get_title_cheat_file_load(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CHEAT_FILE), - path, len); +#define default_title_copy_macro(func_name, lbl) \ + static int (func_name)(const char *path, const char *label, unsigned menu_type, char *s, size_t len) \ +{ \ + strlcpy(s, msg_hash_to_str(lbl), len); \ + return 0; \ } -static int action_get_title_remap_file_load(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_REMAP_FILE), path, len); -} +default_title_macro(action_get_user_accounts_cheevos_list, MENU_ENUM_LABEL_VALUE_ACCOUNTS_RETRO_ACHIEVEMENTS) +default_title_macro(action_get_download_core_content_list, MENU_ENUM_LABEL_VALUE_DOWNLOAD_CORE_CONTENT) +default_title_macro(action_get_user_accounts_list, MENU_ENUM_LABEL_VALUE_ACCOUNTS_LIST) +default_title_macro(action_get_core_information_list, MENU_ENUM_LABEL_VALUE_CORE_INFORMATION) +default_title_macro(action_get_core_list, MENU_ENUM_LABEL_VALUE_CORE_LIST) +default_title_macro(action_get_online_updater_list, MENU_ENUM_LABEL_VALUE_ONLINE_UPDATER) +default_title_macro(action_get_netplay_list, MENU_ENUM_LABEL_VALUE_NETPLAY) +default_title_macro(action_get_online_thumbnails_updater_list, MENU_ENUM_LABEL_VALUE_THUMBNAILS_UPDATER_LIST) +default_title_macro(action_get_core_updater_list, MENU_ENUM_LABEL_VALUE_CORE_UPDATER_LIST) +default_title_macro(action_get_add_content_list, MENU_ENUM_LABEL_VALUE_ADD_CONTENT_LIST) +default_title_macro(action_get_configurations_list, MENU_ENUM_LABEL_VALUE_CONFIGURATIONS_LIST) +default_title_macro(action_get_core_options_list, MENU_ENUM_LABEL_VALUE_CORE_OPTIONS) +default_title_macro(action_get_load_recent_list, MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_HISTORY) +default_title_macro(action_get_quick_menu_list, MENU_ENUM_LABEL_VALUE_CONTENT_SETTINGS) +default_title_macro(action_get_input_remapping_options_list, MENU_ENUM_LABEL_VALUE_CORE_INPUT_REMAPPING_OPTIONS) +default_title_macro(action_get_shader_options_list, MENU_ENUM_LABEL_VALUE_SHADER_OPTIONS) +default_title_macro(action_get_disk_options_list, MENU_ENUM_LABEL_VALUE_DISK_OPTIONS) +default_title_macro(action_get_frontend_counters_list, MENU_ENUM_LABEL_VALUE_FRONTEND_COUNTERS) +default_title_macro(action_get_core_counters_list, MENU_ENUM_LABEL_VALUE_CORE_COUNTERS) +default_title_macro(action_get_recording_settings_list, MENU_ENUM_LABEL_VALUE_RECORDING_SETTINGS) +default_title_macro(action_get_playlist_settings_list, MENU_ENUM_LABEL_VALUE_PLAYLIST_SETTINGS) +default_title_macro(action_get_input_hotkey_binds_settings_list,MENU_ENUM_LABEL_VALUE_INPUT_HOTKEY_BINDS) +default_title_macro(action_get_driver_settings_list, MENU_ENUM_LABEL_VALUE_DRIVER_SETTINGS) +default_title_macro(action_get_core_settings_list, MENU_ENUM_LABEL_VALUE_CORE_SETTINGS) +default_title_macro(action_get_video_settings_list, MENU_ENUM_LABEL_VALUE_VIDEO_SETTINGS) +default_title_macro(action_get_configuration_settings_list, MENU_ENUM_LABEL_VALUE_CONFIGURATION_SETTINGS) +default_title_macro(action_get_saving_settings_list, MENU_ENUM_LABEL_VALUE_SAVING_SETTINGS) +default_title_macro(action_get_logging_settings_list, MENU_ENUM_LABEL_VALUE_LOGGING_SETTINGS) +default_title_macro(action_get_frame_throttle_settings_list, MENU_ENUM_LABEL_VALUE_FRAME_THROTTLE_SETTINGS) +default_title_macro(action_get_rewind_settings_list, MENU_ENUM_LABEL_VALUE_REWIND_SETTINGS) +default_title_macro(action_get_onscreen_display_settings_list, MENU_ENUM_LABEL_VALUE_ONSCREEN_DISPLAY_SETTINGS) +default_title_macro(action_get_onscreen_notifications_settings_list, MENU_ENUM_LABEL_VALUE_ONSCREEN_NOTIFICATIONS_SETTINGS) +default_title_macro(action_get_onscreen_overlay_settings_list, MENU_ENUM_LABEL_VALUE_ONSCREEN_OVERLAY_SETTINGS) +default_title_macro(action_get_menu_settings_list, MENU_ENUM_LABEL_VALUE_MENU_SETTINGS) +default_title_macro(action_get_user_interface_settings_list, MENU_ENUM_LABEL_VALUE_USER_INTERFACE_SETTINGS) +default_title_macro(action_get_menu_file_browser_settings_list, MENU_ENUM_LABEL_VALUE_MENU_FILE_BROWSER_SETTINGS) +default_title_macro(action_get_retro_achievements_settings_list,MENU_ENUM_LABEL_VALUE_RETRO_ACHIEVEMENTS_SETTINGS) +default_title_macro(action_get_wifi_settings_list, MENU_ENUM_LABEL_VALUE_WIFI_SETTINGS) +default_title_macro(action_get_network_settings_list, MENU_ENUM_LABEL_VALUE_NETWORK_SETTINGS) +default_title_macro(action_get_netplay_lan_scan_settings_list, MENU_ENUM_LABEL_VALUE_NETPLAY_LAN_SCAN_SETTINGS) +default_title_macro(action_get_lakka_services_list, MENU_ENUM_LABEL_VALUE_LAKKA_SERVICES) +default_title_macro(action_get_user_settings_list, MENU_ENUM_LABEL_VALUE_USER_SETTINGS) +default_title_macro(action_get_directory_settings_list, MENU_ENUM_LABEL_VALUE_DIRECTORY_SETTINGS) +default_title_macro(action_get_privacy_settings_list, MENU_ENUM_LABEL_VALUE_PRIVACY_SETTINGS) +default_title_macro(action_get_updater_settings_list, MENU_ENUM_LABEL_VALUE_UPDATER_SETTINGS) +default_title_macro(action_get_audio_settings_list, MENU_ENUM_LABEL_VALUE_AUDIO_SETTINGS) +default_title_macro(action_get_input_settings_list, MENU_ENUM_LABEL_VALUE_INPUT_SETTINGS) +default_title_macro(action_get_core_cheat_options_list, MENU_ENUM_LABEL_VALUE_CORE_CHEAT_OPTIONS) +default_title_macro(action_get_load_content_list, MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_LIST) +default_title_macro(action_get_cursor_manager_list, MENU_ENUM_LABEL_VALUE_CURSOR_MANAGER) +default_title_macro(action_get_database_manager_list, MENU_ENUM_LABEL_VALUE_DATABASE_MANAGER) +default_title_macro(action_get_system_information_list, MENU_ENUM_LABEL_VALUE_SYSTEM_INFORMATION) +default_title_macro(action_get_network_information_list, MENU_ENUM_LABEL_VALUE_NETWORK_INFORMATION) +default_title_macro(action_get_settings_list, MENU_ENUM_LABEL_VALUE_SETTINGS) +default_title_macro(action_get_title_information_list, MENU_ENUM_LABEL_VALUE_INFORMATION_LIST) -static int action_get_title_overlay(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_OVERLAY), path, len); -} +default_fill_title_macro(action_get_title_disk_image_append, MENU_ENUM_LABEL_VALUE_DISK_IMAGE_APPEND) +default_fill_title_macro(action_get_title_cheat_file_load, MENU_ENUM_LABEL_VALUE_CHEAT_FILE) +default_fill_title_macro(action_get_title_remap_file_load, MENU_ENUM_LABEL_VALUE_REMAP_FILE) +default_fill_title_macro(action_get_title_overlay, MENU_ENUM_LABEL_VALUE_OVERLAY) +default_fill_title_macro(action_get_title_video_filter, MENU_ENUM_LABEL_VALUE_VIDEO_FILTER) +default_fill_title_macro(action_get_title_cheat_directory, MENU_ENUM_LABEL_VALUE_CHEAT_DATABASE_PATH) +default_fill_title_macro(action_get_title_core_directory, MENU_ENUM_LABEL_VALUE_LIBRETRO_DIR_PATH) +default_fill_title_macro(action_get_title_core_info_directory, MENU_ENUM_LABEL_VALUE_LIBRETRO_INFO_PATH) +default_fill_title_macro(action_get_title_audio_filter, MENU_ENUM_LABEL_VALUE_AUDIO_FILTER_DIR) +default_fill_title_macro(action_get_title_video_shader_preset, MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_TWO) +default_fill_title_macro(action_get_title_deferred_core_list, MENU_ENUM_LABEL_VALUE_SUPPORTED_CORES) +default_fill_title_macro(action_get_title_configurations, MENU_ENUM_LABEL_VALUE_CONFIG) +default_fill_title_macro(action_get_title_content_database_directory, MENU_ENUM_LABEL_VALUE_CONTENT_DATABASE_DIRECTORY) +default_fill_title_macro(action_get_title_savestate_directory, MENU_ENUM_LABEL_VALUE_SAVESTATE_DIRECTORY) +default_fill_title_macro(action_get_title_dynamic_wallpapers_directory, MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPERS_DIRECTORY) +default_fill_title_macro(action_get_title_core_assets_directory, MENU_ENUM_LABEL_VALUE_CORE_ASSETS_DIR) +default_fill_title_macro(action_get_title_config_directory, MENU_ENUM_LABEL_VALUE_RGUI_CONFIG_DIRECTORY) +default_fill_title_macro(action_get_title_input_remapping_directory, MENU_ENUM_LABEL_VALUE_INPUT_REMAPPING_DIRECTORY) +default_fill_title_macro(action_get_title_autoconfig_directory, MENU_ENUM_LABEL_VALUE_JOYPAD_AUTOCONFIG_DIR ) +default_fill_title_macro(action_get_title_playlist_directory, MENU_ENUM_LABEL_VALUE_PLAYLIST_DIRECTORY) +default_fill_title_macro(action_get_title_browser_directory, MENU_ENUM_LABEL_VALUE_RGUI_BROWSER_DIRECTORY) +default_fill_title_macro(action_get_title_content_directory, MENU_ENUM_LABEL_VALUE_CONTENT_DIR) +default_fill_title_macro(action_get_title_screenshot_directory, MENU_ENUM_LABEL_VALUE_SCREENSHOT_DIRECTORY) +default_fill_title_macro(action_get_title_cursor_directory, MENU_ENUM_LABEL_VALUE_CURSOR_DIRECTORY) +default_fill_title_macro(action_get_title_onscreen_overlay_keyboard_directory, MENU_ENUM_LABEL_VALUE_OSK_OVERLAY_DIRECTORY) +default_fill_title_macro(action_get_title_recording_config_directory, MENU_ENUM_LABEL_VALUE_RECORDING_CONFIG_DIRECTORY) +default_fill_title_macro(action_get_title_recording_output_directory, MENU_ENUM_LABEL_VALUE_RECORDING_OUTPUT_DIRECTORY) +default_fill_title_macro(action_get_title_video_shader_directory, MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_DIR) +default_fill_title_macro(action_get_title_audio_filter_directory, MENU_ENUM_LABEL_VALUE_AUDIO_FILTER_DIR) +default_fill_title_macro(action_get_title_video_filter_directory, MENU_ENUM_LABEL_VALUE_VIDEO_FILTER_DIR) +default_fill_title_macro(action_get_title_savefile_directory, MENU_ENUM_LABEL_VALUE_SAVEFILE_DIRECTORY) +default_fill_title_macro(action_get_title_overlay_directory, MENU_ENUM_LABEL_VALUE_OVERLAY_DIRECTORY) +default_fill_title_macro(action_get_title_system_directory, MENU_ENUM_LABEL_VALUE_SYSTEM_DIRECTORY) +default_fill_title_macro(action_get_title_assets_directory, MENU_ENUM_LABEL_VALUE_ASSETS_DIRECTORY) +default_fill_title_macro(action_get_title_extraction_directory, MENU_ENUM_LABEL_VALUE_CACHE_DIRECTORY) +default_fill_title_macro(action_get_title_menu, MENU_ENUM_LABEL_VALUE_MENU_SETTINGS) +default_fill_title_macro(action_get_title_font_path, MENU_ENUM_LABEL_VALUE_XMB_FONT) -static int action_get_title_video_filter(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_FILTER), path, len); -} - -static int action_get_title_cheat_directory(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CHEAT_DATABASE_PATH), path, len); -} - -static int action_get_title_core_directory(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_LIBRETRO_DIR_PATH), path, len); -} - -static int action_get_title_core_info_directory(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_LIBRETRO_INFO_PATH), path, len); -} - -static int action_get_title_audio_filter(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_AUDIO_FILTER_DIR), path, len); -} - -static int action_get_title_font_path(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, "Font", path, len); -} - -static int action_get_title_video_shader_preset(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, - msg_hash_to_str(MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_TWO), path, len); -} - -static int action_get_title_deferred_core_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SUPPORTED_CORES), - path, len); -} - -static int action_get_title_configurations(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CONFIG), path, len); -} - -static int action_get_title_content_database_directory(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CONTENT_DATABASE_DIRECTORY), path, len); -} - -static int action_get_title_savestate_directory(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SAVESTATE_DIRECTORY), path, len); -} - -static int action_get_title_dynamic_wallpapers_directory(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPERS_DIRECTORY), path, len); -} - -static int action_get_title_core_assets_directory(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_ASSETS_DIR), path, len); -} - -static int action_get_title_config_directory(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RGUI_CONFIG_DIRECTORY), path, len); -} - -static int action_get_title_input_remapping_directory(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_INPUT_REMAPPING_DIRECTORY), path, len); -} - -static int action_get_title_autoconfig_directory(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_JOYPAD_AUTOCONFIG_DIR), path, len); -} - -static int action_get_title_playlist_directory(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_PLAYLIST_DIRECTORY), path, len); -} - -static int action_get_title_browser_directory(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RGUI_BROWSER_DIRECTORY), path, len); -} - -static int action_get_title_content_directory(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CONTENT_DIR), path, len); -} - -static int action_get_title_screenshot_directory(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SCREENSHOT_DIRECTORY), path, len); -} - -static int action_get_title_cursor_directory(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CURSOR_DIRECTORY), path, len); -} - -static int action_get_title_onscreen_overlay_keyboard_directory(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_OSK_OVERLAY_DIRECTORY), path, len); -} - -static int action_get_title_recording_config_directory(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RECORDING_CONFIG_DIRECTORY), path, len); -} - -static int action_get_title_recording_output_directory(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RECORDING_OUTPUT_DIRECTORY), path, len); -} - -static int action_get_title_video_shader_directory(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_DIR), path, len); -} - -static int action_get_title_audio_filter_directory(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_AUDIO_FILTER_DIR), path, len); -} - -static int action_get_title_video_filter_directory(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_FILTER_DIR), path, len); -} - -static int action_get_title_savefile_directory(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SAVEFILE_DIRECTORY), path, len); -} - -static int action_get_title_overlay_directory(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_OVERLAY_DIRECTORY), path, len); -} - -static int action_get_title_system_directory(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SYSTEM_DIRECTORY), path, len); -} - -static int action_get_title_assets_directory(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_ASSETS_DIRECTORY), path, len); -} - -static int action_get_title_extraction_directory(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CACHE_DIRECTORY), path, len); -} - -static int action_get_title_menu(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return fill_title(s, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_MENU_SETTINGS), path, len); -} - -static int action_get_title_help(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - strlcpy(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_HELP_LIST), len); - return 0; -} +default_title_copy_macro(action_get_title_help, MENU_ENUM_LABEL_VALUE_HELP_LIST) +default_title_copy_macro(action_get_title_input_settings, MENU_ENUM_LABEL_VALUE_INPUT_SETTINGS) static int action_get_title_generic(char *s, size_t len, const char *path, const char *text) @@ -713,108 +202,29 @@ static int action_get_title_generic(char *s, size_t len, const char *path, return 0; } -static int action_get_title_deferred_database_manager_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return action_get_title_generic(s, len, path, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DATABASE_SELECTION)); -} +#define default_title_generic_macro(func_name, lbl) \ + static int (func_name)(const char *path, const char *label, unsigned menu_type, char *s, size_t len) \ + { \ + return action_get_title_generic(s, len, path, msg_hash_to_str(lbl)); \ +} \ -static int action_get_title_deferred_cursor_manager_list(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return action_get_title_generic(s, len, path, "Database Cursor List"); -} - -static int action_get_title_list_rdb_entry_developer(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return action_get_title_generic(s, len, path, "Database Cursor List - Filter: Developer "); -} - -static int action_get_title_list_rdb_entry_publisher(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return action_get_title_generic(s, len, path, "Database Cursor List - Filter: Publisher "); -} - -static int action_get_title_list_rdb_entry_origin(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return action_get_title_generic(s, len, path, "Database Cursor List - Filter: Origin "); -} - -static int action_get_title_list_rdb_entry_franchise(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return action_get_title_generic(s, len, path, "Database Cursor List - Filter: Franchise "); -} - -static int action_get_title_list_rdb_entry_edge_magazine_rating(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return action_get_title_generic(s, len, path, "Database Cursor List - Filter: Edge Magazine Rating "); -} - -static int action_get_title_list_rdb_entry_edge_magazine_issue(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return action_get_title_generic(s, len, path, "Database Cursor List - Filter: Edge Magazine Issue "); -} - -static int action_get_title_list_rdb_entry_releasedate_by_month(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return action_get_title_generic(s, len, path, "Database Cursor List - Filter: Releasedate By Month "); -} - -static int action_get_title_list_rdb_entry_releasedate_by_year(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return action_get_title_generic(s, len, path, "Database Cursor List - Filter: Releasedate By Year "); -} - -static int action_get_title_list_rdb_entry_esrb_rating(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return action_get_title_generic(s, len, path, "Database Cursor List - Filter: ESRB Rating "); -} - -static int action_get_title_list_rdb_entry_database_info(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return action_get_title_generic(s, len, path, "Database Info "); -} - -static int action_get_title_list_rdb_entry_elspa_rating(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return action_get_title_generic(s, len, path, "Databsae Cursor List - Filter: ELSPA Rating "); -} - -static int action_get_title_list_rdb_entry_pegi_rating(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return action_get_title_generic(s, len, path, "Database Cursor List - Filter: PEGI Rating "); -} - -static int action_get_title_list_rdb_entry_cero_rating(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return action_get_title_generic(s, len, path, "Database Cursor List - Filter: CERO Rating "); -} - -static int action_get_title_list_rdb_entry_bbfc_rating(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return action_get_title_generic(s, len, path, "Database Cursor List - Filter: BBFC Rating "); -} - -static int action_get_title_list_rdb_entry_max_users(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - return action_get_title_generic(s, len, path, "Database Cursor List - Filter: Max Users "); -} +default_title_generic_macro(action_get_title_deferred_database_manager_list,MENU_ENUM_LABEL_VALUE_DATABASE_SELECTION) +default_title_generic_macro(action_get_title_deferred_cursor_manager_list,MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST) +default_title_generic_macro(action_get_title_list_rdb_entry_developer,MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_DEVELOPER) +default_title_generic_macro(action_get_title_list_rdb_entry_publisher,MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_PUBLISHER) +default_title_generic_macro(action_get_title_list_rdb_entry_origin,MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_ORIGIN) +default_title_generic_macro(action_get_title_list_rdb_entry_franchise,MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_FRANCHISE) +default_title_generic_macro(action_get_title_list_rdb_entry_edge_magazine_rating,MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_EDGE_MAGAZINE_RATING) +default_title_generic_macro(action_get_title_list_rdb_entry_edge_magazine_issue,MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_EDGE_MAGAZINE_ISSUE) +default_title_generic_macro(action_get_title_list_rdb_entry_releasedate_by_month,MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_RELEASEDATE_BY_MONTH) +default_title_generic_macro(action_get_title_list_rdb_entry_releasedate_by_year,MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_RELEASEDATE_BY_YEAR) +default_title_generic_macro(action_get_title_list_rdb_entry_esrb_rating,MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_ESRB_RATING) +default_title_generic_macro(action_get_title_list_rdb_entry_elspa_rating,MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_ELSPA_RATING) +default_title_generic_macro(action_get_title_list_rdb_entry_pegi_rating,MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_PEGI_RATING) +default_title_generic_macro(action_get_title_list_rdb_entry_cero_rating,MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_CERO_RATING) +default_title_generic_macro(action_get_title_list_rdb_entry_bbfc_rating,MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_BBFC_RATING) +default_title_generic_macro(action_get_title_list_rdb_entry_max_users,MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_MAX_USERS) +default_title_generic_macro(action_get_title_list_rdb_entry_database_info,MENU_ENUM_LABEL_VALUE_DATABASE_CURSOR_LIST_ENTRY_DATABASE_INFO) static int action_get_title_default(const char *path, const char *label, unsigned menu_type, char *s, size_t len) @@ -875,15 +285,6 @@ static int action_get_title_group_settings(const char *path, const char *label, return 0; } - -static int action_get_title_input_settings(const char *path, const char *label, - unsigned menu_type, char *s, size_t len) -{ - strlcpy(s, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_INPUT_SETTINGS), len); - return 0; -} - static int action_get_title_input_binds_list(const char *path, const char *label, unsigned menu_type, char *s, size_t len) { @@ -949,6 +350,12 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs, return 0; } + if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_ONSCREEN_NOTIFICATIONS_SETTINGS_LIST))) + { + BIND_ACTION_GET_TITLE(cbs, action_get_onscreen_notifications_settings_list); + return 0; + } + if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_ONSCREEN_OVERLAY_SETTINGS_LIST))) { BIND_ACTION_GET_TITLE(cbs, action_get_onscreen_overlay_settings_list); @@ -997,6 +404,12 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs, return 0; } + if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_NETPLAY_LAN_SCAN_SETTINGS_LIST))) + { + BIND_ACTION_GET_TITLE(cbs, action_get_netplay_lan_scan_settings_list); + return 0; + } + if (string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_LAKKA_SERVICES_LIST))) { BIND_ACTION_GET_TITLE(cbs, action_get_lakka_services_list); diff --git a/menu/drivers/materialui.c b/menu/drivers/materialui.c index 9434b44995..447d294615 100644 --- a/menu/drivers/materialui.c +++ b/menu/drivers/materialui.c @@ -525,8 +525,9 @@ static void mui_render(void *data) if (settings->menu.pointer.enable) { - int16_t pointer_y = menu_input_pointer_state(MENU_POINTER_Y_AXIS); - float old_accel_val, new_accel_val; + int16_t pointer_y = menu_input_pointer_state(MENU_POINTER_Y_AXIS); + float old_accel_val = 0.0f; + float new_accel_val = 0.0f; unsigned new_pointer_val = (pointer_y - mui->line_height + mui->scroll_y - 16) / mui->line_height; @@ -632,18 +633,22 @@ static void mui_render_label_value(mui_handle_t *mui, y + mui->line_height / 2 + label_offset, width, height, color, TEXT_ALIGN_LEFT, 1.0f, false, 0); - if (string_is_equal(value, "disabled") || string_is_equal(value, "off")) + if (string_is_equal(value, msg_hash_to_str(MENU_ENUM_LABEL_DISABLED)) || + (string_is_equal(value, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_OFF)))) { - if (mui->textures.list[MUI_TEXTURE_SWITCH_OFF]) { + if (mui->textures.list[MUI_TEXTURE_SWITCH_OFF]) + { texture_switch = mui->textures.list[MUI_TEXTURE_SWITCH_OFF]; switch_is_on = false; } else do_draw_text = true; } - else if (string_is_equal(value, "enabled") || string_is_equal(value, "on")) + else if (string_is_equal(value, msg_hash_to_str(MENU_ENUM_LABEL_ENABLED)) || + (string_is_equal(value, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_ON)))) { - if (mui->textures.list[MUI_TEXTURE_SWITCH_ON]) { + if (mui->textures.list[MUI_TEXTURE_SWITCH_ON]) + { texture_switch = mui->textures.list[MUI_TEXTURE_SWITCH_ON]; switch_is_on = true; } @@ -652,7 +657,9 @@ static void mui_render_label_value(mui_handle_t *mui, } else { - switch (msg_hash_to_file_type(msg_hash_calculate(value))) + enum msg_file_type type = msg_hash_to_file_type(msg_hash_calculate(value)); + + switch (type) { case FILE_TYPE_COMPRESSED: case FILE_TYPE_MORE: @@ -1449,6 +1456,7 @@ static bool mui_load_image(void *userdata, void *data, enum menu_image_type type menu_display_allocate_white_texture(); break; case MENU_IMAGE_THUMBNAIL: + case MENU_IMAGE_SAVESTATE_THUMBNAIL: break; } @@ -1866,4 +1874,6 @@ menu_ctx_driver_t menu_ctx_mui = { NULL, NULL, mui_osk_ptr_at_pos, + NULL, + NULL }; diff --git a/menu/drivers/menu_generic.c b/menu/drivers/menu_generic.c index 304298d3a6..40c8710cc5 100644 --- a/menu/drivers/menu_generic.c +++ b/menu/drivers/menu_generic.c @@ -28,7 +28,6 @@ #include "../widgets/menu_input_bind_dialog.h" #include "../../verbosity.h" -#include "../../runloop.h" #include "../../content.h" #include "../../retroarch.h" @@ -69,14 +68,14 @@ static enum action_iterate_type action_iterate_type(uint32_t hash) **/ int generic_menu_iterate(void *data, void *userdata, enum menu_action action) { - size_t selection; menu_entry_t entry; enum action_iterate_type iterate_type; + size_t selection = 0; unsigned file_type = 0; - const char *label = NULL; int ret = 0; uint32_t hash = 0; enum msg_hash_enums enum_idx = MSG_UNKNOWN; + const char *label = NULL; menu_handle_t *menu = (menu_handle_t*)data; menu_entries_get_last_stack(NULL, &label, &file_type, &enum_idx, NULL); @@ -264,8 +263,8 @@ end: bool generic_menu_init_list(void *data) { menu_displaylist_info_t info = {0}; - file_list_t *menu_stack = menu_entries_get_menu_stack_ptr(0); - file_list_t *selection_buf = menu_entries_get_selection_buf_ptr(0); + file_list_t *menu_stack = menu_entries_get_menu_stack_ptr(0); + file_list_t *selection_buf = menu_entries_get_selection_buf_ptr(0); strlcpy(info.label, msg_hash_to_str(MENU_ENUM_LABEL_MAIN_MENU), sizeof(info.label)); diff --git a/menu/drivers/nuklear/nk_common.c b/menu/drivers/nuklear/nk_common.c index a27635f3c3..5862c41a3f 100644 --- a/menu/drivers/nuklear/nk_common.c +++ b/menu/drivers/nuklear/nk_common.c @@ -194,7 +194,7 @@ void nk_common_device_draw(struct nk_device *dev, shader_info.data = NULL; shader_info.idx = dev->prog; shader_info.set_active = false; - video_shader_driver_use(&shader_info); + video_shader_driver_use(shader_info); #if defined(HAVE_OPENGL) || defined(HAVE_OPENGLES) glUniformMatrix4fv(dev->uniform_proj, 1, GL_FALSE, &ortho[0][0]); @@ -259,7 +259,7 @@ void nk_common_device_draw(struct nk_device *dev, shader_info.data = NULL; shader_info.idx = (GLint)last_prog; shader_info.set_active = false; - video_shader_driver_use(&shader_info); + video_shader_driver_use(shader_info); #if defined(HAVE_OPENGL) || defined(HAVE_OPENGLES) glBindTexture(GL_TEXTURE_2D, (GLuint)last_tex); diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index 728e9d34fe..e9305ab51c 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -55,6 +55,8 @@ #include "../../verbosity.h" #include "../../configuration.h" #include "../../retroarch.h" +#include "../../playlist.h" +#include "../../runloop.h" #include "../../tasks/tasks_internal.h" @@ -164,10 +166,14 @@ typedef struct xmb_handle float x; float alpha; uintptr_t thumbnail; + uintptr_t savestate_thumbnail; float thumbnail_width; float thumbnail_height; + float savestate_thumbnail_width; + float savestate_thumbnail_height; char background_file_path[PATH_MAX_LENGTH]; char thumbnail_file_path[PATH_MAX_LENGTH]; + char savestate_thumbnail_file_path[PATH_MAX_LENGTH]; struct { @@ -369,8 +375,8 @@ const char *xmb_theme_ident(void) return "pixel"; case XMB_ICON_THEME_NEOACTIVE: return "neoactive"; - case XMB_ICON_THEME_MONOCHROME_JAGGED: - return "monochrome-jagged"; + case XMB_ICON_THEME_SYSTEMATIC: + return "systematic"; case XMB_ICON_THEME_CUSTOM: return "custom"; case XMB_ICON_THEME_MONOCHROME: @@ -583,7 +589,7 @@ static void xmb_draw_icon( } static void xmb_draw_thumbnail(xmb_handle_t *xmb, float *color, - unsigned width, unsigned height) + unsigned width, unsigned height, float w, float h, uintptr_t texture) { settings_t *settings = config_get_ptr(); unsigned i; @@ -592,7 +598,7 @@ static void xmb_draw_thumbnail(xmb_handle_t *xmb, float *color, struct video_coords coords; math_matrix_4x4 mymat; float shadow[16]; - float y = xmb->margins.screen.top + xmb->icon.size + xmb->thumbnail_height; + float y = xmb->margins.screen.top + xmb->icon.size + h; float x = xmb->margins.screen.left + xmb->icon.spacing.horizontal + xmb->icon.spacing.horizontal*4 - xmb->icon.size / 4; @@ -610,11 +616,11 @@ static void xmb_draw_thumbnail(xmb_handle_t *xmb, float *color, coords.tex_coord = NULL; coords.lut_tex_coord = NULL; - draw.width = xmb->thumbnail_width; - draw.height = xmb->thumbnail_height; + draw.width = w; + draw.height = h; draw.coords = &coords; draw.matrix_data = &mymat; - draw.texture = xmb->thumbnail; + draw.texture = texture; draw.prim_type = MENU_DISPLAY_PRIM_TRIANGLESTRIP; draw.pipeline.id = 0; @@ -833,9 +839,14 @@ end: static void xmb_update_thumbnail_path(void *data, unsigned i) { menu_entry_t entry; - char *tmp = NULL; - settings_t *settings = config_get_ptr(); - xmb_handle_t *xmb = (xmb_handle_t*)data; + char tmp_new[PATH_MAX_LENGTH]; + char *tmp = NULL; + char *scrub_char_pointer = NULL; + settings_t *settings = config_get_ptr(); + xmb_handle_t *xmb = (xmb_handle_t*)data; + playlist_t *playlist = NULL; + const char *core_name = NULL; + if (!xmb) return; @@ -852,6 +863,21 @@ static void xmb_update_thumbnail_path(void *data, unsigned i) menu_entry_get(&entry, 0, i, NULL, true); + menu_driver_ctl(RARCH_MENU_CTL_PLAYLIST_GET, &playlist); + + if (playlist) + { + playlist_get_index(playlist, i, + NULL, NULL, NULL, &core_name, NULL, NULL); + + if (core_name && string_is_equal(core_name, "imageviewer")) + { + strlcpy(xmb->thumbnail_file_path, entry.label, + sizeof(xmb->thumbnail_file_path)); + return; + } + } + fill_pathname_join( xmb->thumbnail_file_path, settings->directory.thumbnails, @@ -861,44 +887,111 @@ static void xmb_update_thumbnail_path(void *data, unsigned i) fill_pathname_join(xmb->thumbnail_file_path, xmb->thumbnail_file_path, xmb_thumbnails_ident(), sizeof(xmb->thumbnail_file_path)); - tmp = string_replace_substring(entry.path, "/", "-"); + /* Scrub characters that are not cross-platform and/or violate the No-Intro filename standard: + * http://datomatic.no-intro.org/stuff/The%20Official%20No-Intro%20Convention%20(20071030).zip + * Replace these characters in the entry name with underscores + */ + tmp = strdup(entry.path); - if (tmp) - { - char tmp_new[PATH_MAX_LENGTH]; + while((scrub_char_pointer = strpbrk(tmp, "&*/:`<>?\\|"))) + *scrub_char_pointer = '_'; - tmp_new[0] = '\0'; + /* Look for thumbnail file with this scrubbed filename */ + tmp_new[0] = '\0'; - fill_pathname_join(tmp_new, xmb->thumbnail_file_path, tmp, sizeof(tmp_new)); - strlcpy(xmb->thumbnail_file_path, tmp_new, sizeof(xmb->thumbnail_file_path)); - free(tmp); - } + fill_pathname_join(tmp_new, xmb->thumbnail_file_path, tmp, sizeof(tmp_new)); + strlcpy(xmb->thumbnail_file_path, tmp_new, sizeof(xmb->thumbnail_file_path)); + free(tmp); strlcat(xmb->thumbnail_file_path, file_path_str(FILE_PATH_PNG_EXTENSION), sizeof(xmb->thumbnail_file_path)); } +static void xmb_update_savestate_thumbnail_path(void *data, unsigned i) +{ + menu_entry_t entry; + settings_t *settings = config_get_ptr(); + global_t *global = global_get_ptr(); + xmb_handle_t *xmb = (xmb_handle_t*)data; + playlist_t *playlist = NULL; + + if (!xmb) + return; + + entry.path[0] = '\0'; + entry.label[0] = '\0'; + entry.sublabel[0] = '\0'; + entry.value[0] = '\0'; + entry.rich_label[0] = '\0'; + entry.enum_idx = MSG_UNKNOWN; + entry.entry_idx = 0; + entry.idx = 0; + entry.type = 0; + entry.spacing = 0; + + menu_entry_get(&entry, 0, i, NULL, true); + + menu_driver_ctl(RARCH_MENU_CTL_PLAYLIST_GET, &playlist); + + if (settings->savestate_thumbnail_enable + && (string_is_equal(entry.label, "state_slot") + || string_is_equal(entry.label, "loadstate") + || string_is_equal(entry.label, "savestate"))) + { + char path[PATH_MAX_LENGTH] = {0}; + if (settings->state_slot > 0) + snprintf(path, sizeof(path), "%s%d", + global->name.savestate, settings->state_slot); + else if (settings->state_slot < 0) + fill_pathname_join_delim(path, + global->name.savestate, "auto", '.', sizeof(path)); + else + strlcpy(path, global->name.savestate, sizeof(path)); + + strlcat(path, file_path_str(FILE_PATH_PNG_EXTENSION), sizeof(path)); + + if (path_file_exists(path)) + { + strlcpy(xmb->savestate_thumbnail_file_path, path, + sizeof(xmb->savestate_thumbnail_file_path)); + return; + } + else + xmb->savestate_thumbnail_file_path[0] = '\0'; + } + else + xmb->savestate_thumbnail_file_path[0] = '\0'; +} + static void xmb_update_thumbnail_image(void *data) { xmb_handle_t *xmb = (xmb_handle_t*)data; if (!xmb) return; - if (path_file_exists(xmb->thumbnail_file_path)) - { -#if 0 - RARCH_LOG("path: %s\n", xmb->thumbnail_file_path); -#endif task_push_image_load(xmb->thumbnail_file_path, MENU_ENUM_LABEL_CB_MENU_THUMBNAIL, menu_display_handle_thumbnail_upload, NULL); - } else if (xmb->depth == 1) xmb->thumbnail = 0; } +static void xmb_update_savestate_thumbnail_image(void *data) +{ + xmb_handle_t *xmb = (xmb_handle_t*)data; + if (!xmb) + return; + + if (path_file_exists(xmb->savestate_thumbnail_file_path)) + task_push_image_load(xmb->savestate_thumbnail_file_path, + MENU_ENUM_LABEL_CB_MENU_SAVESTATE_THUMBNAIL, + menu_display_handle_savestate_thumbnail_upload, NULL); + else + xmb->savestate_thumbnail = 0; +} + static void xmb_selection_pointer_changed( xmb_handle_t *xmb, bool allow_animations) { @@ -951,6 +1044,8 @@ static void xmb_selection_pointer_changed( xmb_update_thumbnail_path(xmb, i); xmb_update_thumbnail_image(xmb); } + xmb_update_savestate_thumbnail_path(xmb, i); + xmb_update_savestate_thumbnail_image(xmb); } if ( (!allow_animations) @@ -1481,7 +1576,7 @@ static void xmb_init_horizontal_list(xmb_handle_t *xmb) strlcpy(info.path, settings->directory.playlist, sizeof(info.path)); - strlcpy(info.exts, "lpl", sizeof(info.exts)); + strlcpy(info.exts, file_path_str(FILE_PATH_LPL_EXTENSION_NO_DOT), sizeof(info.exts)); if (menu_displaylist_ctl(DISPLAYLIST_DATABASE_PLAYLISTS_HORIZONTAL, &info)) { @@ -1718,6 +1813,7 @@ static void xmb_populate_entries(void *data, menu_driver_ctl(RARCH_MENU_CTL_UNSET_PREVENT_POPULATE, NULL); if (!string_is_equal(xmb_thumbnails_ident(), "OFF")) xmb_update_thumbnail_image(xmb); + xmb_update_savestate_thumbnail_image(xmb); return; } @@ -1856,32 +1952,32 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb, return xmb->textures.list[XMB_TEXTURE_SUBSETTING]; } -char* word_wrap (char* buffer, char* string, int line_width) { +char* word_wrap(char* buffer, char* string, int line_width) { unsigned i = 0; int k, counter; - while(i < strlen( string ) ) + while(i < strlen(string)) { /* copy string until the end of the line is reached */ - for ( counter = 1; counter <= line_width; counter++ ) + for (counter = 1; counter <= line_width; counter++) { /* check if end of string reached */ - if ( i == strlen( string ) ) + if (i == strlen(string)) { - buffer[ i ] = 0; + buffer[i] = 0; return buffer; } - buffer[ i ] = string[ i ]; + buffer[i] = string[i]; /* check for newlines embedded in the original input * and reset the index */ - if ( buffer[ i ] == '\n' ) + if (buffer[i] == '\n') counter = 1; i++; } /* check for whitespace */ - if ( isspace( string[ i ] ) ) + if (string[i] == ' ') { buffer[i] = '\n'; i++; @@ -1889,11 +1985,11 @@ char* word_wrap (char* buffer, char* string, int line_width) { else { /* check for nearest whitespace back in string */ - for ( k = i; k > 0; k--) + for (k = i; k > 0; k--) { - if ( isspace( string[ k ] ) ) + if (string[k] == ' ') { - buffer[ k ] = '\n'; + buffer[k] = '\n'; /* set string index back to character after this one */ i = k + 1; break; @@ -1901,7 +1997,8 @@ char* word_wrap (char* buffer, char* string, int line_width) { } } } - buffer[ i ] = 0; + + buffer[i] = 0; return buffer; } @@ -2000,16 +2097,16 @@ static void xmb_draw_items(xmb_handle_t *xmb, menu_entry_get_value(i, list, entry_value, sizeof(entry_value)); - if (string_is_equal(entry_value, "disabled") || - string_is_equal(entry_value, "off")) + if (string_is_equal(entry_value, msg_hash_to_str(MENU_ENUM_LABEL_DISABLED)) || + (string_is_equal(entry_value, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_OFF)))) { if (xmb->textures.list[XMB_TEXTURE_SWITCH_OFF]) texture_switch = xmb->textures.list[XMB_TEXTURE_SWITCH_OFF]; else do_draw_text = true; } - else if (string_is_equal(entry_value, "enabled") || - string_is_equal(entry_value, "on")) + else if (string_is_equal(entry_value, msg_hash_to_str(MENU_ENUM_LABEL_ENABLED)) || + (string_is_equal(entry_value, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_ON)))) { if (xmb->textures.list[XMB_TEXTURE_SWITCH_ON]) texture_switch = xmb->textures.list[XMB_TEXTURE_SWITCH_ON]; @@ -2018,7 +2115,9 @@ static void xmb_draw_items(xmb_handle_t *xmb, } else { - switch (msg_hash_to_file_type(msg_hash_calculate(entry_value))) + enum msg_file_type type = msg_hash_to_file_type(msg_hash_calculate(entry_value)); + + switch (type) { case FILE_TYPE_COMPRESSED: case FILE_TYPE_MORE: @@ -2051,7 +2150,8 @@ static void xmb_draw_items(xmb_handle_t *xmb, if (string_is_empty(entry_value)) { - if (!string_is_equal(xmb_thumbnails_ident(), "OFF") && xmb->thumbnail) + if (xmb->savestate_thumbnail || + (!string_is_equal(xmb_thumbnails_ident(), "OFF") && xmb->thumbnail)) ticker_limit = 40; else ticker_limit = 70; @@ -2277,9 +2377,22 @@ static void xmb_draw_bg( menu_display_draw_gradient(&draw); - draw.pipeline.id = VIDEO_SHADER_MENU_SEC; - if (settings->menu.xmb.shader_pipeline == XMB_SHADER_PIPELINE_RIBBON) - draw.pipeline.id = VIDEO_SHADER_MENU; + draw.pipeline.id = VIDEO_SHADER_MENU_2; + + switch (settings->menu.xmb.shader_pipeline) + { + case XMB_SHADER_PIPELINE_RIBBON: + draw.pipeline.id = VIDEO_SHADER_MENU; + break; + case XMB_SHADER_PIPELINE_SIMPLE_SNOW: + draw.pipeline.id = VIDEO_SHADER_MENU_3; + break; + case XMB_SHADER_PIPELINE_SNOW: + draw.pipeline.id = VIDEO_SHADER_MENU_4; + break; + default: + break; + } menu_display_draw_pipeline(&draw); } @@ -2415,19 +2528,10 @@ static void xmb_frame(void *data) xmb->margins.title.top, 1, 1, TEXT_ALIGN_LEFT, width, height, xmb->font); -/* uncomment to print the messages on the XMB status line - if (string_is_empty(runloop_msg_queue_pull())) - {*/ - if (menu_entries_get_core_title(title_msg, sizeof(title_msg)) == 0) - xmb_draw_text(xmb, title_msg, xmb->margins.title.left, - height - xmb->margins.title.bottom, 1, 1, TEXT_ALIGN_LEFT, - width, height, xmb->font); -/* } - else - xmb_draw_text(xmb, runloop_msg_queue_pull(), xmb->margins.title.left, - height - xmb->margins.title.bottom, 1, 1, TEXT_ALIGN_LEFT, - width, height); -*/ + if (menu_entries_get_core_title(title_msg, sizeof(title_msg)) == 0) + xmb_draw_text(xmb, title_msg, xmb->margins.title.left, + height - xmb->margins.title.bottom, 1, 1, TEXT_ALIGN_LEFT, + width, height, xmb->font); rotate_draw.matrix = &mymat; rotate_draw.rotation = 0; @@ -2439,8 +2543,15 @@ static void xmb_frame(void *data) menu_display_rotate_z(&rotate_draw); menu_display_blend_begin(); - if (!string_is_equal(xmb_thumbnails_ident(), "OFF") && xmb->thumbnail) - xmb_draw_thumbnail(xmb, &coord_white[0], width, height); + if (xmb->savestate_thumbnail) + xmb_draw_thumbnail(xmb, &coord_white[0], width, height, + xmb->savestate_thumbnail_width, xmb->savestate_thumbnail_height, + xmb->savestate_thumbnail); + else if (xmb->thumbnail + && !string_is_equal(xmb_thumbnails_ident(), "OFF")) + xmb_draw_thumbnail(xmb, &coord_white[0], width, height, + xmb->thumbnail_width, xmb->thumbnail_height, + xmb->thumbnail); /* Clock image */ menu_display_set_alpha(coord_white, MIN(xmb->alpha, 1.00f)); @@ -2647,6 +2758,7 @@ static void xmb_layout_ps3(xmb_handle_t *xmb, int width) xmb->margins.screen.top = (256+32) * scale_factor; xmb->thumbnail_width = 460.0 * scale_factor; + xmb->savestate_thumbnail_width= 460.0 * scale_factor; xmb->cursor.size = 64.0; xmb->icon.spacing.horizontal = 200.0 * scale_factor; @@ -2699,6 +2811,7 @@ static void xmb_layout_psp(xmb_handle_t *xmb, int width) xmb->margins.screen.top = (256+32) * scale_factor; xmb->thumbnail_width = 460.0 * scale_factor; + xmb->savestate_thumbnail_width= 460.0 * scale_factor; xmb->cursor.size = 64.0; xmb->icon.spacing.horizontal = 250.0 * scale_factor; @@ -2798,24 +2911,28 @@ static void xmb_ribbon_set_vertex(float *ribbon_verts, unsigned idx, unsigned ro static void xmb_init_ribbon(xmb_handle_t * xmb) { video_coords_t coords; - float ribbon_verts[2 * XMB_RIBBON_VERTICES]; - float dummy[4 * XMB_RIBBON_VERTICES]; - unsigned i, r, c, col; - video_coord_array_t *ca = NULL; + unsigned vertices_total; + unsigned r, c, col; + unsigned i = 0; + float *ribbon_verts = NULL; + float *dummy = NULL; + video_coord_array_t *ca = menu_display_get_coords_array(); + + vertices_total = XMB_RIBBON_VERTICES; + + dummy = (float*)calloc(4 * vertices_total, sizeof(float)); + ribbon_verts = (float*)calloc(2 * vertices_total, sizeof(float)); - memset(&dummy[0], 0, 4 * XMB_RIBBON_VERTICES * sizeof(float)); - ca = menu_display_get_coords_array(); /* Set up vertices */ - i = 0; for (r = 0; r < XMB_RIBBON_ROWS - 1; r++) { for (c = 0; c < XMB_RIBBON_COLS; c++) { col = r % 2 ? XMB_RIBBON_COLS - c - 1 : c; - xmb_ribbon_set_vertex(ribbon_verts, i, r, col); + xmb_ribbon_set_vertex(ribbon_verts, i, r, col); xmb_ribbon_set_vertex(ribbon_verts, i + 2, r + 1, col); - i += 4; + i += 4; } } @@ -2823,11 +2940,16 @@ static void xmb_init_ribbon(xmb_handle_t * xmb) coords.vertex = ribbon_verts; coords.tex_coord = dummy; coords.lut_tex_coord = dummy; - coords.vertices = XMB_RIBBON_VERTICES; + coords.vertices = vertices_total; - video_coord_array_append(ca, &coords, XMB_RIBBON_VERTICES); + video_coord_array_append(ca, &coords, coords.vertices); + + free(dummy); + free(ribbon_verts); } + + static void *xmb_init(void **userdata) { unsigned width, height; @@ -2901,6 +3023,7 @@ static void *xmb_init(void **userdata) menu_display_allocate_white_texture(); xmb_init_horizontal_list(xmb); + xmb_init_ribbon(xmb); return menu; @@ -2986,6 +3109,16 @@ static bool xmb_load_image(void *userdata, void *data, enum menu_image_type type TEXTURE_FILTER_MIPMAP_LINEAR, &xmb->thumbnail); } break; + case MENU_IMAGE_SAVESTATE_THUMBNAIL: + { + struct texture_image *img = (struct texture_image*)data; + xmb->savestate_thumbnail_height = xmb->savestate_thumbnail_width + * (float)img->height / (float)img->width; + video_driver_texture_unload(&xmb->savestate_thumbnail); + video_driver_texture_load(data, + TEXTURE_FILTER_MIPMAP_LINEAR, &xmb->savestate_thumbnail); + } + break; } return true; @@ -3177,6 +3310,7 @@ static void xmb_context_reset(void *data) if (!string_is_equal(xmb_thumbnails_ident(), "OFF")) xmb_update_thumbnail_image(xmb); + xmb_update_savestate_thumbnail_image(xmb); } static void xmb_navigation_clear(void *data, bool pending_push) @@ -3714,4 +3848,6 @@ menu_ctx_driver_t menu_ctx_xmb = { xmb_update_thumbnail_path, xmb_update_thumbnail_image, xmb_osk_ptr_at_pos, + xmb_update_savestate_thumbnail_path, + xmb_update_savestate_thumbnail_image }; diff --git a/menu/drivers/zarch.c b/menu/drivers/zarch.c index 9a07d3a8c3..f6d8f0b4b5 100644 --- a/menu/drivers/zarch.c +++ b/menu/drivers/zarch.c @@ -1061,6 +1061,9 @@ static bool zarch_load_image(void *userdata, break; case MENU_IMAGE_THUMBNAIL: break; + case MENU_IMAGE_SAVESTATE_THUMBNAIL: + /* TODO/FIXME -implement */ + break; } return true; diff --git a/menu/drivers_display/menu_display_caca.c b/menu/drivers_display/menu_display_caca.c new file mode 100644 index 0000000000..1fbca75a6b --- /dev/null +++ b/menu/drivers_display/menu_display_caca.c @@ -0,0 +1,101 @@ +/* RetroArch - A frontend for libretro. + * Copyright (C) 2011-2016 - Daniel De Matteis + * Copyright (C) 2016 - Brad Parker + * + * RetroArch is free software: you can redistribute it and/or modify it under the terms + * of the GNU General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with RetroArch. + * If not, see . + */ + +#include + +#include +#include + +#include "../../config.def.h" +#include "../../gfx/font_driver.h" +#include "../../gfx/video_context_driver.h" + +#include "../menu_display.h" + +static void *menu_display_caca_get_default_mvp(void) +{ + return NULL; +} + +static void menu_display_caca_blend_begin(void) +{ +} + +static void menu_display_caca_blend_end(void) +{ +} + +static void menu_display_caca_draw(void *data) +{ + (void)data; +} + +static void menu_display_caca_draw_pipeline(void *data) +{ + (void)data; +} + +static void menu_display_caca_viewport(void *data) +{ + (void)data; +} + +static void menu_display_caca_restore_clear_color(void) +{ +} + +static void menu_display_caca_clear_color(menu_display_ctx_clearcolor_t *clearcolor) +{ + (void)clearcolor; +} + +static bool menu_display_caca_font_init_first( + void **font_handle, void *video_data, + const char *font_path, float font_size) +{ + font_data_t **handle = (font_data_t**)font_handle; + *handle = font_driver_init_first(video_data, + font_path, font_size, true, FONT_DRIVER_RENDER_CACA); + return *handle; +} + +static const float *menu_display_caca_get_default_vertices(void) +{ + static float dummy[16] = {0.0f}; + return &dummy[0]; +} + +static const float *menu_display_caca_get_default_tex_coords(void) +{ + static float dummy[16] = {0.0f}; + return &dummy[0]; +} + +menu_display_ctx_driver_t menu_display_ctx_caca = { + menu_display_caca_draw, + menu_display_caca_draw_pipeline, + menu_display_caca_viewport, + menu_display_caca_blend_begin, + menu_display_caca_blend_end, + menu_display_caca_restore_clear_color, + menu_display_caca_clear_color, + menu_display_caca_get_default_mvp, + menu_display_caca_get_default_vertices, + menu_display_caca_get_default_tex_coords, + menu_display_caca_font_init_first, + MENU_VIDEO_DRIVER_CACA, + "menu_display_caca", +}; diff --git a/menu/drivers_display/menu_display_ctr.c b/menu/drivers_display/menu_display_ctr.c index 3aadc92b6c..843ca4e86e 100644 --- a/menu/drivers_display/menu_display_ctr.c +++ b/menu/drivers_display/menu_display_ctr.c @@ -21,7 +21,6 @@ #include "../menu_display.h" -#include "../../config.def.h" #include "../../retroarch.h" #include "../../gfx/font_driver.h" #include "../../gfx/video_context_driver.h" diff --git a/menu/drivers_display/menu_display_d3d.cpp b/menu/drivers_display/menu_display_d3d.cpp index 6fd9dbce7d..9a4bbed7d8 100644 --- a/menu/drivers_display/menu_display_d3d.cpp +++ b/menu/drivers_display/menu_display_d3d.cpp @@ -23,13 +23,15 @@ #include "../menu_display.h" -#include "../../config.def.h" #include "../../retroarch.h" #include "../../gfx/font_driver.h" #include "../../gfx/video_context_driver.h" #include "../../gfx/drivers/d3d.h" #include "../../gfx/common/d3d_common.h" + +#ifdef HAVE_D3D9 #include "../../gfx/include/d3d9/d3dx9math.h" +#endif #define BYTE_CLAMP(i) (int) ((((i) > 255) ? 255 : (((i) < 0) ? 0 : (i)))) @@ -175,8 +177,8 @@ static void menu_display_d3d_draw(void *data) if (!mat) mat = (math_matrix_4x4*) menu_display_d3d_get_default_mvp(); - video_shader_driver_set_coords(d3d, draw->coords); - video_shader_driver_set_mvp(d3d, mat); + video_shader_driver_set_coords(draw->coords); + video_shader_driver_set_mvp(mat); #endif d3d_draw_primitive(d3d->dev, (D3DPRIMITIVETYPE) @@ -203,12 +205,13 @@ static void menu_display_d3d_draw_pipeline(void *data) switch (draw->pipeline.id) { case VIDEO_SHADER_MENU: - case VIDEO_SHADER_MENU_SEC: - shader_info.data = NULL; - shader_info.idx = draw->pipeline.id; - shader_info.set_active = true; + case VIDEO_SHADER_MENU_2: + case VIDEO_SHADER_MENU_3: + shader_info.data = NULL; + shader_info.idx = draw->pipeline.id; + shader_info.set_active = true; - video_shader_driver_use(&shader_info); + video_shader_driver_use(shader_info); t += 0.01; @@ -221,7 +224,7 @@ static void menu_display_d3d_draw_pipeline(void *data) uniform_param.lookup.ident = "time"; uniform_param.result.f.v0 = t; - video_shader_driver_set_parameter(&uniform_param); + video_shader_driver_set_parameter(uniform_param); break; } #endif diff --git a/menu/drivers_display/menu_display_gl.c b/menu/drivers_display/menu_display_gl.c index c4424e8108..f1d056862d 100644 --- a/menu/drivers_display/menu_display_gl.c +++ b/menu/drivers_display/menu_display_gl.c @@ -19,7 +19,6 @@ #include "../../config.h" #endif -#include "../../config.def.h" #include "../../retroarch.h" #include "../../gfx/font_driver.h" #include "../../gfx/video_context_driver.h" @@ -86,11 +85,11 @@ static void menu_display_gl_blend_begin(void) glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - shader_info.data = NULL; - shader_info.idx = VIDEO_SHADER_STOCK_BLEND; + shader_info.data = NULL; + shader_info.idx = VIDEO_SHADER_STOCK_BLEND; shader_info.set_active = true; - video_shader_driver_use(&shader_info); + video_shader_driver_use(shader_info); } static void menu_display_gl_blend_end(void) @@ -141,13 +140,13 @@ static void menu_display_gl_draw(void *data) coords.handle_data = gl; coords.data = draw->coords; - video_shader_driver_set_coords(&coords); + video_shader_driver_set_coords(coords); mvp.data = gl; mvp.matrix = draw->matrix_data ? (math_matrix_4x4*)draw->matrix_data : (math_matrix_4x4*)menu_display_gl_get_default_mvp(); - video_shader_driver_set_mvp(&mvp); + video_shader_driver_set_mvp(mvp); glDrawArrays(menu_display_prim_to_gl_enum( draw->prim_type), 0, draw->coords->vertices); @@ -169,7 +168,9 @@ static void menu_display_gl_draw_pipeline(void *data) switch (draw->pipeline.id) { case VIDEO_SHADER_MENU: - case VIDEO_SHADER_MENU_SEC: + case VIDEO_SHADER_MENU_2: + case VIDEO_SHADER_MENU_3: + case VIDEO_SHADER_MENU_4: { static float t = 0; video_shader_ctx_info_t shader_info; @@ -179,7 +180,7 @@ static void menu_display_gl_draw_pipeline(void *data) shader_info.idx = draw->pipeline.id; shader_info.set_active = true; - video_shader_driver_use(&shader_info); + video_shader_driver_use(shader_info); t += 0.01; @@ -192,7 +193,14 @@ static void menu_display_gl_draw_pipeline(void *data) uniform_param.lookup.ident = "time"; uniform_param.result.f.v0 = t; - video_shader_driver_set_parameter(&uniform_param); + video_shader_driver_set_parameter(uniform_param); + + uniform_param.type = UNIFORM_2F; + uniform_param.lookup.ident = "OutputSize"; + uniform_param.result.f.v0 = draw->width; + uniform_param.result.f.v1 = draw->height; + + video_shader_driver_set_parameter(uniform_param); } break; } diff --git a/menu/drivers_display/menu_display_null.c b/menu/drivers_display/menu_display_null.c index 94727f709f..a15c9c735b 100644 --- a/menu/drivers_display/menu_display_null.c +++ b/menu/drivers_display/menu_display_null.c @@ -18,7 +18,6 @@ #include #include -#include "../../config.def.h" #include "../../gfx/font_driver.h" #include "../../gfx/video_context_driver.h" diff --git a/menu/drivers_display/menu_display_vita2d.c b/menu/drivers_display/menu_display_vita2d.c index 8499234d70..56b61ac7a3 100644 --- a/menu/drivers_display/menu_display_vita2d.c +++ b/menu/drivers_display/menu_display_vita2d.c @@ -23,7 +23,6 @@ #include "../menu_display.h" -#include "../../config.def.h" #include "../../retroarch.h" #include "../../gfx/font_driver.h" #include "../../gfx/video_context_driver.h" diff --git a/menu/drivers_display/menu_display_vulkan.c b/menu/drivers_display/menu_display_vulkan.c index 725633eac1..2840288da1 100644 --- a/menu/drivers_display/menu_display_vulkan.c +++ b/menu/drivers_display/menu_display_vulkan.c @@ -22,7 +22,6 @@ #include "../menu_display.h" -#include "../../config.def.h" #include "../../gfx/font_driver.h" #include "../../gfx/video_context_driver.h" #include "../../gfx/common/vulkan_common.h" @@ -74,7 +73,7 @@ static unsigned to_menu_pipeline( { case VIDEO_SHADER_MENU: return 4 + (type == MENU_DISPLAY_PRIM_TRIANGLESTRIP); - case VIDEO_SHADER_MENU_SEC: + case VIDEO_SHADER_MENU_2: return 6 + (type == MENU_DISPLAY_PRIM_TRIANGLESTRIP); default: return 0; @@ -174,7 +173,7 @@ static void menu_display_vk_draw(void *data) { #ifdef HAVE_SHADERPIPELINE case VIDEO_SHADER_MENU: - case VIDEO_SHADER_MENU_SEC: + case VIDEO_SHADER_MENU_2: { const struct vk_draw_triangles call = { vk->display.pipelines[ diff --git a/menu/menu_cbs.h b/menu/menu_cbs.h index 6963772151..7f9ac751c3 100644 --- a/menu/menu_cbs.h +++ b/menu/menu_cbs.h @@ -85,6 +85,7 @@ enum ACTION_OK_DL_DEFERRED_CORE_LIST_SET, ACTION_OK_DL_ONSCREEN_DISPLAY_SETTINGS_LIST, ACTION_OK_DL_ONSCREEN_OVERLAY_SETTINGS_LIST, + ACTION_OK_DL_ONSCREEN_NOTIFICATIONS_SETTINGS_LIST, ACTION_OK_DL_MENU_SETTINGS_LIST, ACTION_OK_DL_USER_INTERFACE_SETTINGS_LIST, ACTION_OK_DL_MENU_FILE_BROWSER_SETTINGS_LIST, @@ -92,6 +93,7 @@ enum ACTION_OK_DL_UPDATER_SETTINGS_LIST, ACTION_OK_DL_WIFI_SETTINGS_LIST, ACTION_OK_DL_NETWORK_SETTINGS_LIST, + ACTION_OK_DL_NETPLAY_LAN_SCAN_SETTINGS_LIST, ACTION_OK_DL_LAKKA_SERVICES_LIST, ACTION_OK_DL_USER_SETTINGS_LIST, ACTION_OK_DL_DIRECTORY_SETTINGS_LIST, diff --git a/menu/menu_content.c b/menu/menu_content.c index 30af25d8a1..6bee83478d 100644 --- a/menu/menu_content.c +++ b/menu/menu_content.c @@ -49,13 +49,8 @@ **/ bool menu_content_playlist_load(menu_content_ctx_playlist_info_t *info) { - playlist_t *playlist = NULL; - const char *path = NULL; - - if (!info) - return false; - - playlist = (playlist_t*)info->data; + const char *path = NULL; + playlist_t *playlist = (playlist_t*)info->data; if (!playlist) return false; @@ -102,8 +97,8 @@ error: bool menu_content_playlist_find_associated_core(const char *path, char *s, size_t len) { unsigned j; - bool ret = false; - settings_t *settings = config_get_ptr(); + bool ret = false; + settings_t *settings = config_get_ptr(); struct string_list *existing_core_names = string_split(settings->playlist_names, ";"); struct string_list *existing_core_paths = diff --git a/menu/menu_display.c b/menu/menu_display.c index 6c8e8e2747..4d2d2ceddb 100644 --- a/menu/menu_display.c +++ b/menu/menu_display.c @@ -45,12 +45,25 @@ #include "menu_animation.h" #include "menu_display.h" - +#define PARTICLES_COUNT 100 uintptr_t menu_display_white_texture; static enum menu_toggle_reason menu_display_toggle_reason = MENU_TOGGLE_REASON_NONE; +static video_coord_array_t menu_disp_ca; + +static unsigned menu_display_framebuf_width = 0; +static unsigned menu_display_framebuf_height = 0; +static size_t menu_display_framebuf_pitch = 0; +static unsigned menu_display_header_height = 0; +static bool menu_display_msg_force = false; +static bool menu_display_font_alloc_framebuf = false; +static bool menu_display_framebuf_dirty = false; +static const uint8_t *menu_display_font_framebuf = NULL; +static msg_queue_t *menu_display_msg_queue = NULL; +static menu_display_ctx_driver_t *menu_disp = NULL; + static menu_display_ctx_driver_t *menu_display_ctx_drivers[] = { #ifdef HAVE_D3D &menu_display_ctx_d3d, @@ -66,6 +79,9 @@ static menu_display_ctx_driver_t *menu_display_ctx_drivers[] = { #endif #ifdef _3DS &menu_display_ctx_ctr, +#endif +#ifdef HAVE_CACA + &menu_display_ctx_caca, #endif &menu_display_ctx_null, NULL, @@ -122,6 +138,10 @@ static bool menu_display_check_compatibility( if (string_is_equal(video_driver, "ctr")) return true; break; + case MENU_VIDEO_DRIVER_CACA: + if (string_is_equal(video_driver, "caca")) + return true; + break; } return false; @@ -161,18 +181,6 @@ void menu_display_timedate(menu_display_ctx_datetime_t *datetime) } } -static video_coord_array_t menu_disp_ca; -static unsigned menu_display_framebuf_width = 0; -static unsigned menu_display_framebuf_height = 0; -static size_t menu_display_framebuf_pitch = 0; -static unsigned menu_display_header_height = 0; -static bool menu_display_msg_force = false; -static bool menu_display_font_alloc_framebuf = false; -static bool menu_display_framebuf_dirty = false; -static const uint8_t *menu_display_font_framebuf = NULL; -static msg_queue_t *menu_display_msg_queue = NULL; -static menu_display_ctx_driver_t *menu_disp = NULL; - void menu_display_blend_begin(void) { if (!menu_disp || !menu_disp->blend_begin) @@ -660,6 +668,22 @@ void menu_display_handle_thumbnail_upload(void *task_data, free(user_data); } +void menu_display_handle_savestate_thumbnail_upload(void *task_data, + void *user_data, const char *err) +{ + menu_ctx_load_image_t load_image_info; + struct texture_image *img = (struct texture_image*)task_data; + + load_image_info.data = img; + load_image_info.type = MENU_IMAGE_SAVESTATE_THUMBNAIL; + + menu_driver_ctl(RARCH_MENU_CTL_LOAD_IMAGE, &load_image_info); + + image_texture_free(img); + free(img); + free(user_data); +} + void menu_display_handle_wallpaper_upload(void *task_data, void *user_data, const char *err) { @@ -743,12 +767,10 @@ void menu_display_push_quad( const float *colors, int x1, int y1, int x2, int y2) { - menu_display_ctx_coord_draw_t coord_draw; float vertex[8]; video_coords_t coords; - video_coord_array_t *ca = NULL; - - ca = menu_display_get_coords_array(); + menu_display_ctx_coord_draw_t coord_draw; + video_coord_array_t *ca = menu_display_get_coords_array(); vertex[0] = x1 / (float)width; vertex[1] = y1 / (float)height; @@ -779,8 +801,6 @@ void menu_display_push_quad( video_coord_array_append(ca, &coords, 3); } -#define PARTICLES_COUNT 100 - void menu_display_snow(int width, int height) { struct display_particle diff --git a/menu/menu_display.h b/menu/menu_display.h index 33a1bcc18d..2db2997c84 100644 --- a/menu/menu_display.h +++ b/menu/menu_display.h @@ -65,7 +65,7 @@ enum xmb_icon_theme XMB_ICON_THEME_RETROACTIVE, XMB_ICON_THEME_PIXEL, XMB_ICON_THEME_NEOACTIVE, - XMB_ICON_THEME_MONOCHROME_JAGGED, + XMB_ICON_THEME_SYSTEMATIC, XMB_ICON_THEME_CUSTOM }; @@ -74,6 +74,8 @@ enum xmb_shader_pipeline XMB_SHADER_PIPELINE_WALLPAPER = 0, XMB_SHADER_PIPELINE_SIMPLE_RIBBON, XMB_SHADER_PIPELINE_RIBBON, + XMB_SHADER_PIPELINE_SIMPLE_SNOW, + XMB_SHADER_PIPELINE_SNOW, XMB_SHADER_PIPELINE_LAST }; @@ -91,7 +93,8 @@ enum menu_display_driver_type MENU_VIDEO_DRIVER_VULKAN, MENU_VIDEO_DRIVER_DIRECT3D, MENU_VIDEO_DRIVER_VITA2D, - MENU_VIDEO_DRIVER_CTR + MENU_VIDEO_DRIVER_CTR, + MENU_VIDEO_DRIVER_CACA }; typedef struct menu_display_ctx_clearcolor @@ -247,6 +250,9 @@ void menu_display_handle_wallpaper_upload(void *task_data, void menu_display_handle_thumbnail_upload(void *task_data, void *user_data, const char *err); +void menu_display_handle_savestate_thumbnail_upload(void *task_data, + void *user_data, const char *err); + void menu_display_push_quad( unsigned width, unsigned height, const float *colors, int x1, int y1, @@ -282,6 +288,7 @@ extern menu_display_ctx_driver_t menu_display_ctx_vulkan; extern menu_display_ctx_driver_t menu_display_ctx_d3d; extern menu_display_ctx_driver_t menu_display_ctx_vita2d; extern menu_display_ctx_driver_t menu_display_ctx_ctr; +extern menu_display_ctx_driver_t menu_display_ctx_caca; extern menu_display_ctx_driver_t menu_display_ctx_null; RETRO_END_DECLS diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index a141d7e894..1fc78c7600 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -40,6 +40,10 @@ #include "../cheevos.h" #endif +#ifdef HAVE_NETWORKING +#include "../network/netplay/netplay_discovery.h" +#endif + #ifdef __linux__ #include "../frontend/drivers/platform_linux.h" #endif @@ -70,6 +74,7 @@ #include "../performance_counters.h" #include "../core_info.h" #include "../wifi/wifi_driver.h" +#include "../tasks/tasks_internal.h" #ifdef HAVE_NETWORKING static void print_buf_lines(file_list_t *list, char *buf, @@ -376,23 +381,18 @@ static int menu_displaylist_parse_core_info(menu_displaylist_info_t *info) { if (core_info->firmware[i].desc) { - snprintf(tmp, sizeof(tmp), " %s: %s", - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_NAME), - core_info->firmware[i].desc ? - core_info->firmware[i].desc : ""); - menu_entries_append_enum(info->list, tmp, "", - MENU_ENUM_LABEL_CORE_INFO_ENTRY, - MENU_SETTINGS_CORE_INFO_NONE, 0, 0); - - snprintf(tmp, sizeof(tmp), " %s: %s, %s", - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_STATUS), + snprintf(tmp, sizeof(tmp), "(!) %s, %s: %s", core_info->firmware[i].missing ? msg_hash_to_str(MENU_ENUM_LABEL_VALUE_MISSING) : msg_hash_to_str(MENU_ENUM_LABEL_VALUE_PRESENT), core_info->firmware[i].optional ? msg_hash_to_str(MENU_ENUM_LABEL_VALUE_OPTIONAL) : - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_REQUIRED) + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_REQUIRED), + core_info->firmware[i].desc ? + core_info->firmware[i].desc : + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RDB_ENTRY_NAME) ); + menu_entries_append_enum(info->list, tmp, "", MENU_ENUM_LABEL_CORE_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0); @@ -403,13 +403,6 @@ static int menu_displaylist_parse_core_info(menu_displaylist_info_t *info) if (core_info->notes) { - fill_pathname_noext(tmp, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_NOTES), - ": ", - sizeof(tmp)); - menu_entries_append_enum(info->list, tmp, "", - MENU_ENUM_LABEL_CORE_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0); - for (i = 0; i < core_info->note_list->size; i++) { strlcpy(tmp, @@ -429,16 +422,12 @@ static int menu_displaylist_parse_core_info(menu_displaylist_info_t *info) static int menu_displaylist_parse_network_info(menu_displaylist_info_t *info) { unsigned k = 0; - net_ifinfo_t *list = - (net_ifinfo_t*)calloc(1, sizeof(*list)); + net_ifinfo_t list; - if (!list) + if (!net_ifinfo_new(&list)) return -1; - if (!net_ifinfo_new(list)) - return -1; - - for (k = 0; k < list->size; k++) + for (k = 0; k < list.size; k++) { char tmp[255]; @@ -446,12 +435,12 @@ static int menu_displaylist_parse_network_info(menu_displaylist_info_t *info) snprintf(tmp, sizeof(tmp), "%s (%s) : %s\n", msg_hash_to_str(MSG_INTERFACE), - list->entries[k].name, list->entries[k].host); + list.entries[k].name, list.entries[k].host); menu_entries_append_enum(info->list, tmp, "", MENU_ENUM_LABEL_NETWORK_INFO_ENTRY, MENU_SETTINGS_CORE_INFO_NONE, 0, 0); } - net_ifinfo_free(list); + net_ifinfo_free(&list); return 0; } #endif @@ -1563,6 +1552,10 @@ static int menu_displaylist_parse_netplay( msg_hash_to_str(MENU_ENUM_LABEL_NETPLAY_SETTINGS), MENU_ENUM_LABEL_NETWORK_SETTINGS, MENU_SETTING_GROUP, 0, 0); + menu_entries_append_enum(info->list, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NETPLAY_LAN_SCAN_SETTINGS), + msg_hash_to_str(MENU_ENUM_LABEL_NETPLAY_LAN_SCAN_SETTINGS), + MENU_ENUM_LABEL_NETPLAY_LAN_SCAN_SETTINGS, MENU_SETTING_GROUP, 0, 0); #else menu_entries_append_enum(info->list, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_ITEMS), @@ -3379,6 +3372,8 @@ static int menu_displaylist_parse_cores( return 0; } + info->download_core = true; + dir_list_sort(str_list, true); list_size = str_list->size; @@ -3390,13 +3385,6 @@ static int menu_displaylist_parse_cores( msg_hash_to_str(MENU_ENUM_LABEL_NO_ITEMS), MENU_ENUM_LABEL_NO_ITEMS, MENU_SETTING_NO_ITEM, 0, 0); -#ifdef HAVE_NETWORKING - menu_entries_append_enum(info->list, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DOWNLOAD_CORE), - msg_hash_to_str(MENU_ENUM_LABEL_CORE_UPDATER_LIST), - MENU_ENUM_LABEL_CORE_UPDATER_LIST, - MENU_SETTING_ACTION, 0, 0); -#endif string_list_free(str_list); @@ -3875,6 +3863,17 @@ static bool menu_displaylist_push_list_process(menu_displaylist_info_t *info) MENU_SETTING_ACTION, 0, 0); } +#ifdef HAVE_NETWORKING + if (info->download_core) + { + menu_entries_prepend(info->list, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DOWNLOAD_CORE), + msg_hash_to_str(MENU_ENUM_LABEL_CORE_UPDATER_LIST), + MENU_ENUM_LABEL_CORE_UPDATER_LIST, + MENU_SETTING_ACTION, 0, 0); + } +#endif + if (info->need_refresh) menu_entries_ctl(MENU_ENTRIES_CTL_REFRESH, info->list); @@ -3913,7 +3912,9 @@ static bool menu_displaylist_push_internal( menu_displaylist_reset_filebrowser(); info->type = 42; - strlcpy(info->exts, "lpl", sizeof(info->exts)); + strlcpy(info->exts, + file_path_str(FILE_PATH_LPL_EXTENSION_NO_DOT), + sizeof(info->exts)); strlcpy(info->label, msg_hash_to_str(MENU_ENUM_LABEL_CONTENT_COLLECTION_LIST), sizeof(info->label)); @@ -3926,7 +3927,9 @@ static bool menu_displaylist_push_internal( { menu_displaylist_reset_filebrowser(); info->type = 42; - strlcpy(info->exts, "lpl", sizeof(info->exts)); + strlcpy(info->exts, + file_path_str(FILE_PATH_LPL_EXTENSION_NO_DOT), + sizeof(info->exts)); strlcpy(info->label, msg_hash_to_str(MENU_ENUM_LABEL_CONTENT_COLLECTION_LIST), sizeof(info->label)); @@ -3940,7 +3943,9 @@ static bool menu_displaylist_push_internal( menu_displaylist_reset_filebrowser(); info->type = 42; - strlcpy(info->exts, "lpl", sizeof(info->exts)); + strlcpy(info->exts, + file_path_str(FILE_PATH_LPL_EXTENSION_NO_DOT), + sizeof(info->exts)); strlcpy(info->label, msg_hash_to_str(MENU_ENUM_LABEL_CONTENT_COLLECTION_LIST), sizeof(info->label)); @@ -3973,7 +3978,9 @@ static bool menu_displaylist_push_internal( menu_displaylist_reset_filebrowser(); info->type = 42; - strlcpy(info->exts, "lpl", sizeof(info->exts)); + strlcpy(info->exts, + file_path_str(FILE_PATH_LPL_EXTENSION_NO_DOT), + sizeof(info->exts)); strlcpy(info->label, msg_hash_to_str(MENU_ENUM_LABEL_CONTENT_COLLECTION_LIST), sizeof(info->label)); @@ -4205,6 +4212,7 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) case DISPLAYLIST_FRAME_THROTTLE_SETTINGS_LIST: case DISPLAYLIST_REWIND_SETTINGS_LIST: case DISPLAYLIST_ONSCREEN_DISPLAY_SETTINGS_LIST: + case DISPLAYLIST_ONSCREEN_NOTIFICATIONS_SETTINGS_LIST: case DISPLAYLIST_ONSCREEN_OVERLAY_SETTINGS_LIST: case DISPLAYLIST_MENU_SETTINGS_LIST: case DISPLAYLIST_USER_INTERFACE_SETTINGS_LIST: @@ -4212,6 +4220,7 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) case DISPLAYLIST_UPDATER_SETTINGS_LIST: case DISPLAYLIST_WIFI_SETTINGS_LIST: case DISPLAYLIST_NETWORK_SETTINGS_LIST: + case DISPLAYLIST_NETPLAY_LAN_SCAN_SETTINGS_LIST: case DISPLAYLIST_LAKKA_SERVICES_LIST: case DISPLAYLIST_USER_SETTINGS_LIST: case DISPLAYLIST_DIRECTORY_SETTINGS_LIST: @@ -4493,10 +4502,10 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) MENU_ENUM_LABEL_RECORD_USE_OUTPUT_DIRECTORY, PARSE_ONLY_BOOL, false); menu_displaylist_parse_settings_enum(menu, info, - MENU_ENUM_LABEL_VIDEO_POST_FILTER_RECORD, + MENU_ENUM_LABEL_VIDEO_GPU_RECORD, PARSE_ONLY_BOOL, false); menu_displaylist_parse_settings_enum(menu, info, - MENU_ENUM_LABEL_VIDEO_GPU_RECORD, + MENU_ENUM_LABEL_VIDEO_POST_FILTER_RECORD, PARSE_ONLY_BOOL, false); info->need_push = true; @@ -4606,6 +4615,9 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_SAVESTATE_AUTO_LOAD, PARSE_ONLY_BOOL, false); + menu_displaylist_parse_settings_enum(menu, info, + MENU_ENUM_LABEL_SAVESTATE_THUMBNAIL_ENABLE, + PARSE_ONLY_BOOL, false); info->need_refresh = true; info->need_push = true; @@ -4625,6 +4637,8 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) info->need_push = true; break; case DISPLAYLIST_FRAME_THROTTLE_SETTINGS_LIST: + menu_displaylist_parse_settings_enum(menu, info, + MENU_ENUM_LABEL_REWIND_SETTINGS, PARSE_ACTION, false); menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_FASTFORWARD_RATIO, PARSE_ONLY_FLOAT, false); @@ -4652,6 +4666,13 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) case DISPLAYLIST_ONSCREEN_DISPLAY_SETTINGS_LIST: menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_ONSCREEN_OVERLAY_SETTINGS, PARSE_ACTION, false); + menu_displaylist_parse_settings_enum(menu, info, + MENU_ENUM_LABEL_ONSCREEN_NOTIFICATIONS_SETTINGS, PARSE_ACTION, false); + + info->need_refresh = true; + info->need_push = true; + break; + case DISPLAYLIST_ONSCREEN_NOTIFICATIONS_SETTINGS_LIST: menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_VIDEO_FONT_ENABLE, PARSE_ONLY_BOOL, false); @@ -4681,9 +4702,6 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_INPUT_OVERLAY_HIDE_IN_MENU, PARSE_ONLY_BOOL, false); - menu_displaylist_parse_settings_enum(menu, info, - MENU_ENUM_LABEL_INPUT_OSK_OVERLAY_ENABLE, - PARSE_ONLY_BOOL, false); menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_OVERLAY_PRESET, PARSE_ONLY_PATH, false); @@ -4693,9 +4711,6 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_OVERLAY_SCALE, PARSE_ONLY_FLOAT, false); - menu_displaylist_parse_settings_enum(menu, info, - MENU_ENUM_LABEL_KEYBOARD_OVERLAY_PRESET, - PARSE_ONLY_PATH, false); info->need_refresh = true; info->need_push = true; @@ -4812,6 +4827,8 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) info->need_push = true; break; case DISPLAYLIST_USER_INTERFACE_SETTINGS_LIST: + menu_displaylist_parse_settings_enum(menu, info, + MENU_ENUM_LABEL_MENU_SETTINGS, PARSE_ACTION, false); menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_PAUSE_NONACTIVE, PARSE_ONLY_BOOL, false); @@ -4875,27 +4892,47 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) case DISPLAYLIST_WIFI_SETTINGS_LIST: if (string_is_equal(settings->wifi.driver, "null")) menu_entries_append_enum(info->list, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_SETTINGS_FOUND), - msg_hash_to_str(MENU_ENUM_LABEL_NO_SETTINGS_FOUND), - MENU_ENUM_LABEL_NO_SETTINGS_FOUND, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_NETWORKS_FOUND), + msg_hash_to_str(MENU_ENUM_LABEL_NO_NETWORKS_FOUND), + MENU_ENUM_LABEL_NO_NETWORKS_FOUND, 0, 0, 0); +#ifdef HAVE_NETWORKING else { - unsigned i; struct string_list *ssid_list = string_list_new(); - driver_wifi_scan(); driver_wifi_get_ssids(ssid_list); - for (i = 0; i < ssid_list->size; i++) + if (ssid_list->size == 0) { - const char *ssid = ssid_list->elems[i].data; + task_push_wifi_scan(); + menu_entries_append_enum(info->list, - ssid, - msg_hash_to_str(MENU_ENUM_LABEL_CONNECT_WIFI), - MENU_ENUM_LABEL_CONNECT_WIFI, - MENU_WIFI, 0, 0); + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_NETWORKS_FOUND), + msg_hash_to_str(MENU_ENUM_LABEL_NO_NETWORKS_FOUND), + MENU_ENUM_LABEL_NO_NETWORKS_FOUND, + 0, 0, 0); + } + else + { + unsigned i; + for (i = 0; i < ssid_list->size; i++) + { + const char *ssid = ssid_list->elems[i].data; + menu_entries_append_enum(info->list, + ssid, + msg_hash_to_str(MENU_ENUM_LABEL_CONNECT_WIFI), + MENU_ENUM_LABEL_CONNECT_WIFI, + MENU_WIFI, 0, 0); + } } } +#else + menu_entries_append_enum(info->list, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_NETWORKS_FOUND), + msg_hash_to_str(MENU_ENUM_LABEL_NO_NETWORKS_FOUND), + MENU_ENUM_LABEL_NO_NETWORKS_FOUND, + 0, 0, 0); +#endif info->need_refresh = true; info->need_push = true; @@ -4930,6 +4967,10 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) MENU_ENUM_LABEL_NETPLAY_CLIENT_SWAP_INPUT, PARSE_ONLY_BOOL, false) != -1) count++; + if (menu_displaylist_parse_settings_enum(menu, info, + MENU_ENUM_LABEL_NETPLAY_NAT_TRAVERSAL, + PARSE_ONLY_BOOL, false) != -1) + count++; if (menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_NETWORK_CMD_ENABLE, PARSE_ONLY_BOOL, false) != -1) @@ -4972,6 +5013,50 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) 0, 0, 0); } + info->need_refresh = true; + info->need_push = true; + break; + case DISPLAYLIST_NETPLAY_LAN_SCAN_SETTINGS_LIST: +#ifdef HAVE_NETWORKING + { + struct netplay_host_list *hosts; + + if (!netplay_discovery_driver_ctl(RARCH_NETPLAY_DISCOVERY_CTL_LAN_GET_RESPONSES, &hosts)) + hosts = NULL; + + if (!hosts || hosts->size == 0) + { + if (!hosts) + task_push_netplay_lan_scan(); + + menu_entries_append_enum(info->list, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_NETPLAY_HOSTS_FOUND), + msg_hash_to_str(MENU_ENUM_LABEL_NO_NETPLAY_HOSTS_FOUND), + MENU_ENUM_LABEL_NO_NETPLAY_HOSTS_FOUND, + 0, 0, 0); + } + else + { + size_t i; + for (i = 0; i < hosts->size; i++) + { + struct netplay_host *host = &hosts->hosts[i]; + menu_entries_append_enum(info->list, + host->nick, + msg_hash_to_str(MENU_ENUM_LABEL_CONNECT_NETPLAY_LAN), + MENU_ENUM_LABEL_CONNECT_NETPLAY_LAN, + MENU_NETPLAY_LAN_SCAN, 0, 0); + } + } + } +#else + menu_entries_append_enum(info->list, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_NETPLAY_HOSTS_FOUND), + msg_hash_to_str(MENU_ENUM_LABEL_NO_NETPLAY_HOSTS_FOUND), + MENU_ENUM_LABEL_NO_NETPLAY_HOSTS_FOUND, + 0, 0, 0); +#endif + info->need_refresh = true; info->need_push = true; break; @@ -5060,9 +5145,6 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_OVERLAY_DIRECTORY, PARSE_ONLY_DIR, false); - menu_displaylist_parse_settings_enum(menu, info, - MENU_ENUM_LABEL_OSK_OVERLAY_DIRECTORY, - PARSE_ONLY_DIR, false); menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_SCREENSHOT_DIRECTORY, PARSE_ONLY_DIR, false); @@ -5169,6 +5251,12 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_VIDEO_SCALE, PARSE_ONLY_FLOAT, false); + menu_displaylist_parse_settings_enum(menu, info, + MENU_ENUM_LABEL_VIDEO_WINDOW_WIDTH, + PARSE_ONLY_UINT, false); + menu_displaylist_parse_settings_enum(menu, info, + MENU_ENUM_LABEL_VIDEO_WINDOW_HEIGHT, + PARSE_ONLY_UINT, false); menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_VIDEO_SCALE_INTEGER, PARSE_ONLY_BOOL, false); @@ -5211,9 +5299,6 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_VIDEO_GPU_SCREENSHOT, PARSE_ONLY_BOOL, false); - menu_displaylist_parse_settings_enum(menu, info, - MENU_ENUM_LABEL_VIDEO_ALLOW_ROTATE, - PARSE_ONLY_BOOL, false); menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_VIDEO_CROP_OVERSCAN, PARSE_ONLY_BOOL, false); @@ -5231,6 +5316,12 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_DUMMY_ON_CORE_SHUTDOWN, PARSE_ONLY_BOOL, false); + menu_displaylist_parse_settings_enum(menu, info, + MENU_ENUM_LABEL_CHECK_FOR_MISSING_FIRMWARE, + PARSE_ONLY_BOOL, false); + menu_displaylist_parse_settings_enum(menu, info, + MENU_ENUM_LABEL_VIDEO_ALLOW_ROTATE, + PARSE_ONLY_BOOL, false); info->need_refresh = true; info->need_push = true; @@ -5285,6 +5376,9 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) MENU_ENUM_LABEL_INPUT_SMALL_KEYBOARD_ENABLE, PARSE_ONLY_BOOL, false); #endif + ret = menu_displaylist_parse_settings_enum(menu, info, + MENU_ENUM_LABEL_INPUT_UNIFIED_MENU_CONTROLS, + PARSE_ONLY_BOOL, false); ret = menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_INPUT_POLL_TYPE_BEHAVIOR, PARSE_ONLY_UINT, false); @@ -5294,11 +5388,6 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) ret = menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_INPUT_KEYBOARD_GAMEPAD_MAPPING_TYPE, PARSE_ONLY_UINT, false); -#ifdef ANDROID - ret = menu_displaylist_parse_settings_enum(menu, info, - MENU_ENUM_LABEL_INPUT_BACK_AS_MENU_TOGGLE_ENABLE, - PARSE_ONLY_BOOL, false); -#endif #ifdef VITA ret = menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_INPUT_TOUCH_ENABLE, @@ -5309,6 +5398,8 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) #endif ret = menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO, PARSE_ONLY_UINT, false); + ret = menu_displaylist_parse_settings_enum(menu, info, + MENU_ENUM_LABEL_MENU_INPUT_SWAP_OK_CANCEL, PARSE_ONLY_BOOL, false); ret = menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_INPUT_ALL_USERS_CONTROL_MENU, PARSE_ONLY_BOOL, false); ret = menu_displaylist_parse_settings_enum(menu, info, @@ -5364,15 +5455,11 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) MENU_ENUM_LABEL_LOGGING_SETTINGS, PARSE_ACTION, false); ret = menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_FRAME_THROTTLE_SETTINGS, PARSE_ACTION, false); - ret = menu_displaylist_parse_settings_enum(menu, info, - MENU_ENUM_LABEL_REWIND_SETTINGS, PARSE_ACTION, false); if (!string_is_equal(settings->record.driver, "null")) ret = menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_RECORDING_SETTINGS, PARSE_ACTION, false); ret = menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_ONSCREEN_DISPLAY_SETTINGS, PARSE_ACTION, false); - ret = menu_displaylist_parse_settings_enum(menu, info, - MENU_ENUM_LABEL_MENU_SETTINGS, PARSE_ACTION, false); ret = menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_USER_INTERFACE_SETTINGS, PARSE_ACTION, false); #ifdef HAVE_CHEEVOS @@ -5383,6 +5470,8 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) MENU_ENUM_LABEL_WIFI_SETTINGS, PARSE_ACTION, false); ret = menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_NETWORK_SETTINGS, PARSE_ACTION, false); + ret = menu_displaylist_parse_settings_enum(menu, info, + MENU_ENUM_LABEL_NETPLAY_LAN_SCAN_SETTINGS, PARSE_ACTION, false); ret = menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_LAKKA_SERVICES, PARSE_ACTION, false); ret = menu_displaylist_parse_settings_enum(menu, info, @@ -5816,13 +5905,7 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) msg_hash_to_str(MENU_ENUM_LABEL_NO_CORES_AVAILABLE), MENU_ENUM_LABEL_NO_CORES_AVAILABLE, 0, 0, 0); -#ifdef HAVE_NETWORKING - menu_entries_append_enum(info->list, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DOWNLOAD_CORE), - msg_hash_to_str(MENU_ENUM_LABEL_CORE_UPDATER_LIST), - MENU_ENUM_LABEL_CORE_UPDATER_LIST, - MENU_SETTING_ACTION, 0, 0); -#endif + info->download_core = true; } else { diff --git a/menu/menu_displaylist.h b/menu/menu_displaylist.h index 4f3650405e..d03324acea 100644 --- a/menu/menu_displaylist.h +++ b/menu/menu_displaylist.h @@ -121,12 +121,14 @@ enum menu_displaylist_ctl_state DISPLAYLIST_INPUT_HOTKEY_BINDS_LIST, DISPLAYLIST_ONSCREEN_OVERLAY_SETTINGS_LIST, DISPLAYLIST_ONSCREEN_DISPLAY_SETTINGS_LIST, + DISPLAYLIST_ONSCREEN_NOTIFICATIONS_SETTINGS_LIST, DISPLAYLIST_MENU_SETTINGS_LIST, DISPLAYLIST_USER_INTERFACE_SETTINGS_LIST, DISPLAYLIST_RETRO_ACHIEVEMENTS_SETTINGS_LIST, DISPLAYLIST_UPDATER_SETTINGS_LIST, DISPLAYLIST_WIFI_SETTINGS_LIST, DISPLAYLIST_NETWORK_SETTINGS_LIST, + DISPLAYLIST_NETPLAY_LAN_SCAN_SETTINGS_LIST, DISPLAYLIST_LAKKA_SERVICES_LIST, DISPLAYLIST_USER_SETTINGS_LIST, DISPLAYLIST_DIRECTORY_SETTINGS_LIST, @@ -165,6 +167,7 @@ typedef struct menu_displaylist_info bool need_push; bool need_clear; bool push_builtin_cores; + bool download_core; bool need_navigation_clear; file_list_t *list; file_list_t *menu_list; diff --git a/menu/menu_driver.c b/menu/menu_driver.c index e0a7ddec3d..f9f2875f16 100644 --- a/menu/menu_driver.c +++ b/menu/menu_driver.c @@ -90,7 +90,7 @@ static menu_handle_t *menu_driver_data = NULL; static const menu_ctx_driver_t *menu_driver_ctx = NULL; static void *menu_userdata = NULL; -bool menu_driver_is_binding_state() +bool menu_driver_is_binding_state(void) { return menu_driver_is_binding; } @@ -963,6 +963,24 @@ bool menu_driver_ctl(enum rarch_menu_ctl_state state, void *data) menu_driver_ctx->update_thumbnail_image(menu_userdata); } break; + case RARCH_MENU_CTL_UPDATE_SAVESTATE_THUMBNAIL_PATH: + { + size_t selection; + if (!menu_navigation_ctl(MENU_NAVIGATION_CTL_GET_SELECTION, &selection)) + return false; + + if (!menu_driver_ctx || !menu_driver_ctx->update_savestate_thumbnail_path) + return false; + menu_driver_ctx->update_savestate_thumbnail_path(menu_userdata, selection); + } + break; + case RARCH_MENU_CTL_UPDATE_SAVESTATE_THUMBNAIL_IMAGE: + { + if (!menu_driver_ctx || !menu_driver_ctx->update_savestate_thumbnail_image) + return false; + menu_driver_ctx->update_savestate_thumbnail_image(menu_userdata); + } + break; default: case RARCH_MENU_CTL_NONE: break; diff --git a/menu/menu_driver.h b/menu/menu_driver.h index c53985519d..ffcc5935f5 100644 --- a/menu/menu_driver.h +++ b/menu/menu_driver.h @@ -55,7 +55,8 @@ enum menu_image_type { MENU_IMAGE_NONE = 0, MENU_IMAGE_WALLPAPER, - MENU_IMAGE_THUMBNAIL + MENU_IMAGE_THUMBNAIL, + MENU_IMAGE_SAVESTATE_THUMBNAIL }; enum menu_environ_cb @@ -145,7 +146,9 @@ enum rarch_menu_ctl_state RARCH_MENU_CTL_OSK_PTR_AT_POS, RARCH_MENU_CTL_BIND_INIT, RARCH_MENU_CTL_UPDATE_THUMBNAIL_PATH, - RARCH_MENU_CTL_UPDATE_THUMBNAIL_IMAGE + RARCH_MENU_CTL_UPDATE_THUMBNAIL_IMAGE, + RARCH_MENU_CTL_UPDATE_SAVESTATE_THUMBNAIL_PATH, + RARCH_MENU_CTL_UPDATE_SAVESTATE_THUMBNAIL_IMAGE }; enum menu_settings_type @@ -180,6 +183,7 @@ enum menu_settings_type MENU_SETTING_SUBGROUP, MENU_SETTING_HORIZONTAL_MENU, MENU_WIFI, + MENU_NETPLAY_LAN_SCAN, MENU_INFO_MESSAGE, MENU_SETTINGS_SHADER_PARAMETER_0, MENU_SETTINGS_SHADER_PARAMETER_LAST = MENU_SETTINGS_SHADER_PARAMETER_0 + (GFX_MAX_PARAMETERS - 1), @@ -276,6 +280,8 @@ typedef struct menu_ctx_driver void (*update_thumbnail_path)(void *data, unsigned i); void (*update_thumbnail_image)(void *data); int (*osk_ptr_at_pos)(void *data, int x, int y); + void (*update_savestate_thumbnail_path)(void *data, unsigned i); + void (*update_savestate_thumbnail_image)(void *data); } menu_ctx_driver_t; typedef struct menu_ctx_load_image @@ -382,7 +388,8 @@ const char *menu_driver_ident(void); bool menu_driver_ctl(enum rarch_menu_ctl_state state, void *data); -bool menu_driver_is_binding_state(); +bool menu_driver_is_binding_state(void); + void menu_driver_set_binding_state(bool on); extern menu_ctx_driver_t menu_ctx_xui; diff --git a/menu/menu_event.c b/menu/menu_event.c index 3150189b12..7f0bf6e904 100644 --- a/menu/menu_event.c +++ b/menu/menu_event.c @@ -45,6 +45,8 @@ #include "../retroarch.h" #include "../runloop.h" +#define OSK_CHARS_PER_LINE 11 + static unsigned char menu_keyboard_key_state[RETROK_LAST]; enum osk_type @@ -198,6 +200,15 @@ unsigned menu_event(uint64_t input, uint64_t trigger_input) size_t new_scroll_accel = 0; menu_input_t *menu_input = NULL; settings_t *settings = config_get_ptr(); + static unsigned ok_old = 0; + unsigned menu_ok_btn = settings->input.menu_swap_ok_cancel_buttons ? + RETRO_DEVICE_ID_JOYPAD_B : RETRO_DEVICE_ID_JOYPAD_A; + unsigned menu_cancel_btn = settings->input.menu_swap_ok_cancel_buttons ? + RETRO_DEVICE_ID_JOYPAD_A : RETRO_DEVICE_ID_JOYPAD_B; + unsigned ok_current = input & UINT64_C(1) << menu_ok_btn; + unsigned ok_trigger = ok_current & ~ok_old; + + ok_old = ok_current; if (input) { @@ -291,13 +302,13 @@ unsigned menu_event(uint64_t input, uint64_t trigger_input) if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_DOWN)) { if (osk_ptr < 33) - osk_ptr = osk_ptr + 11; + osk_ptr = osk_ptr + OSK_CHARS_PER_LINE; } if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_UP)) { - if (osk_ptr > 10) - osk_ptr = osk_ptr - 11; + if (osk_ptr >= OSK_CHARS_PER_LINE) + osk_ptr = osk_ptr - OSK_CHARS_PER_LINE; } if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_RIGHT)) @@ -328,7 +339,7 @@ unsigned menu_event(uint64_t input, uint64_t trigger_input) osk_idx = (enum osk_type)(OSK_TYPE_UNKNOWN + 1); } - if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_A)) + if (trigger_input & (UINT64_C(1) << menu_ok_btn)) { if (osk_ptr >= 0) { @@ -336,7 +347,7 @@ unsigned menu_event(uint64_t input, uint64_t trigger_input) } } - if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_B)) + if (trigger_input & (UINT64_C(1) << menu_cancel_btn)) { input_keyboard_event(true, '\x7f', '\x7f', 0, RETRO_DEVICE_KEYBOARD); } @@ -346,6 +357,7 @@ unsigned menu_event(uint64_t input, uint64_t trigger_input) input_keyboard_event(true, '\n', '\n', 0, RETRO_DEVICE_KEYBOARD); trigger_input = 0; + ok_trigger = 0; } if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_UP)) @@ -356,21 +368,21 @@ unsigned menu_event(uint64_t input, uint64_t trigger_input) ret = MENU_ACTION_LEFT; else if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_RIGHT)) ret = MENU_ACTION_RIGHT; - else if (trigger_input & (UINT64_C(1) << settings->menu_scroll_up_btn)) + else if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_L)) ret = MENU_ACTION_SCROLL_UP; - else if (trigger_input & (UINT64_C(1) << settings->menu_scroll_down_btn)) + else if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_R)) ret = MENU_ACTION_SCROLL_DOWN; - else if (trigger_input & (UINT64_C(1) << settings->menu_cancel_btn)) - ret = MENU_ACTION_CANCEL; - else if (trigger_input & (UINT64_C(1) << settings->menu_ok_btn)) + else if (ok_trigger) ret = MENU_ACTION_OK; - else if (trigger_input & (UINT64_C(1) << settings->menu_search_btn)) + else if (trigger_input & (UINT64_C(1) << menu_cancel_btn)) + ret = MENU_ACTION_CANCEL; + else if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_X)) ret = MENU_ACTION_SEARCH; else if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_Y)) ret = MENU_ACTION_SCAN; - else if (trigger_input & (UINT64_C(1) << settings->menu_default_btn)) + else if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_START)) ret = MENU_ACTION_START; - else if (trigger_input & (UINT64_C(1) << settings->menu_info_btn)) + else if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_SELECT)) ret = MENU_ACTION_INFO; else if (trigger_input & (UINT64_C(1) << RARCH_MENU_TOGGLE)) ret = MENU_ACTION_TOGGLE; @@ -388,7 +400,7 @@ unsigned menu_event(uint64_t input, uint64_t trigger_input) #ifdef HAVE_OVERLAY if (!mouse_enabled) mouse_enabled = !(settings->input.overlay_enable - && input_overlay_is_alive(NULL)); + && input_overlay_is_alive(overlay_ptr)); #endif if (!(menu_input = menu_input_get_ptr())) diff --git a/menu/menu_input.c b/menu/menu_input.c index 3ae987dd08..e2476c7744 100644 --- a/menu/menu_input.c +++ b/menu/menu_input.c @@ -36,9 +36,6 @@ #include "../configuration.h" -static int mouse_old_x; -static int mouse_old_y; - enum menu_mouse_action { MENU_MOUSE_ACTION_NONE = 0, @@ -52,6 +49,9 @@ enum menu_mouse_action MENU_MOUSE_ACTION_HORIZ_WHEEL_DOWN }; +static int mouse_old_x = 0; +static int mouse_old_y = 0; + menu_input_t *menu_input_get_ptr(void) { static menu_input_t menu_input_state; @@ -87,16 +87,10 @@ bool menu_input_ctl(enum menu_input_ctl_state state, void *data) pointer_dragging = false; break; case MENU_INPUT_CTL_MOUSE_PTR: - { - unsigned *ptr = (unsigned*)data; - menu_input->mouse.ptr = *ptr; - } + menu_input->mouse.ptr = (*(unsigned*)data); break; case MENU_INPUT_CTL_POINTER_PTR: - { - unsigned *ptr = (unsigned*)data; - menu_input->pointer.ptr = *ptr; - } + menu_input->pointer.ptr = (*(unsigned*)data); break; case MENU_INPUT_CTL_POINTER_ACCEL_READ: { @@ -105,10 +99,7 @@ bool menu_input_ctl(enum menu_input_ctl_state state, void *data) } break; case MENU_INPUT_CTL_POINTER_ACCEL_WRITE: - { - float *ptr = (float*)data; - menu_input->pointer.accel = *ptr; - } + menu_input->pointer.accel = (*(float*)data); break; case MENU_INPUT_CTL_IS_POINTER_DRAGGED: return pointer_dragging; @@ -136,7 +127,7 @@ static int menu_input_mouse_post_iterate(uint64_t *input_mouse, if ( !settings->menu.mouse.enable #ifdef HAVE_OVERLAY - || (settings->input.overlay_enable && input_overlay_is_alive(NULL)) + || (settings->input.overlay_enable && input_overlay_is_alive(overlay_ptr)) #endif ) { @@ -385,7 +376,7 @@ static int menu_input_pointer_post_iterate( #ifdef HAVE_OVERLAY if (!check_overlay) check_overlay = (settings->input.overlay_enable - && input_overlay_is_alive(NULL)); + && input_overlay_is_alive(overlay_ptr)); #endif if (check_overlay) diff --git a/menu/menu_setting.c b/menu/menu_setting.c index 5b72ce2288..39f4b32456 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -70,7 +70,7 @@ #include "../audio/audio_driver.h" #include "../audio/audio_resampler_driver.h" #include "../input/input_config.h" -#include "../input/input_autodetect.h" +#include "../tasks/tasks_internal.h" #include "../config.def.h" #include "../ui/ui_companion_driver.h" #include "../performance_counters.h" @@ -459,7 +459,7 @@ static void setting_get_string_representation_uint_libretro_device(void *data, name = msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RETROPAD); break; case RETRO_DEVICE_ANALOG: - name = "RetroPad w/ Analog"; + name = msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RETROPAD_WITH_ANALOG); break; default: name = msg_hash_to_str(MENU_ENUM_LABEL_VALUE_UNKNOWN); @@ -655,11 +655,21 @@ static int setting_handler(rarch_setting_t *setting, unsigned action) break; case MENU_ACTION_LEFT: if (setting->action_left) - return setting->action_left(setting, true); + { + int ret = setting->action_left(setting, false); + menu_driver_ctl(RARCH_MENU_CTL_UPDATE_SAVESTATE_THUMBNAIL_PATH, NULL); + menu_driver_ctl(RARCH_MENU_CTL_UPDATE_SAVESTATE_THUMBNAIL_IMAGE, NULL); + return ret; + } break; case MENU_ACTION_RIGHT: if (setting->action_right) - return setting->action_right(setting, false); + { + int ret = setting->action_right(setting, false); + menu_driver_ctl(RARCH_MENU_CTL_UPDATE_SAVESTATE_THUMBNAIL_PATH, NULL); + menu_driver_ctl(RARCH_MENU_CTL_UPDATE_SAVESTATE_THUMBNAIL_IMAGE, NULL); + return ret; + } break; case MENU_ACTION_SELECT: if (setting->action_select) @@ -1717,7 +1727,7 @@ void general_write_handler(void *data) case MENU_ENUM_LABEL_NETPLAY_DELAY_FRAMES: #ifdef HAVE_NETWORKING { - bool val = (settings->netplay.sync_frames > 0); + bool val = (settings->netplay.delay_frames > 0); if (val) retroarch_override_setting_set(RARCH_OVERRIDE_SETTING_NETPLAY_DELAY_FRAMES, NULL); @@ -2407,16 +2417,14 @@ static bool setting_append_list( &subgroup_info, parent_group); - if (settings->menu.show_advanced_settings) - { - CONFIG_ACTION( - list, list_info, - MENU_ENUM_LABEL_CORE_SETTINGS, - MENU_ENUM_LABEL_VALUE_CORE_SETTINGS, - &group_info, - &subgroup_info, - parent_group); - } + CONFIG_ACTION( + list, list_info, + MENU_ENUM_LABEL_CORE_SETTINGS, + MENU_ENUM_LABEL_VALUE_CORE_SETTINGS, + &group_info, + &subgroup_info, + parent_group); + settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); CONFIG_ACTION( list, list_info, @@ -2434,16 +2442,14 @@ static bool setting_append_list( &subgroup_info, parent_group); - if (settings->menu.show_advanced_settings) - { - CONFIG_ACTION( - list, list_info, - MENU_ENUM_LABEL_LOGGING_SETTINGS, - MENU_ENUM_LABEL_VALUE_LOGGING_SETTINGS, - &group_info, - &subgroup_info, - parent_group); - } + CONFIG_ACTION( + list, list_info, + MENU_ENUM_LABEL_LOGGING_SETTINGS, + MENU_ENUM_LABEL_VALUE_LOGGING_SETTINGS, + &group_info, + &subgroup_info, + parent_group); + settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); CONFIG_ACTION( list, list_info, @@ -2485,6 +2491,14 @@ static bool setting_append_list( &subgroup_info, parent_group); + CONFIG_ACTION( + list, list_info, + MENU_ENUM_LABEL_ONSCREEN_NOTIFICATIONS_SETTINGS, + MENU_ENUM_LABEL_VALUE_ONSCREEN_NOTIFICATIONS_SETTINGS, + &group_info, + &subgroup_info, + parent_group); + CONFIG_ACTION( list, list_info, MENU_ENUM_LABEL_MENU_SETTINGS, @@ -2493,7 +2507,7 @@ static bool setting_append_list( &subgroup_info, parent_group); -#if !defined(RARCH_CONSOLE) && !defined(HAVE_LAKKA) +#if !defined(RARCH_CONSOLE) CONFIG_ACTION( list, list_info, MENU_ENUM_LABEL_USER_INTERFACE_SETTINGS, @@ -2704,7 +2718,7 @@ static bool setting_append_list( case SETTINGS_LIST_CORE: { unsigned i; - struct bool_entry bool_entries[3]; + struct bool_entry bool_entries[5]; START_GROUP(list, list_info, &group_info, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_SETTINGS), parent_group); @@ -2735,6 +2749,18 @@ static bool setting_append_list( bool_entries[2].default_value = true; bool_entries[2].flags = SD_FLAG_ADVANCED; + bool_entries[3].target = &settings->check_firmware_before_loading; + bool_entries[3].name_enum_idx = MENU_ENUM_LABEL_CHECK_FOR_MISSING_FIRMWARE; + bool_entries[3].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_CHECK_FOR_MISSING_FIRMWARE; + bool_entries[3].default_value = true; + bool_entries[3].flags = SD_FLAG_ADVANCED; + + bool_entries[4].target = &settings->video.allow_rotate; + bool_entries[4].name_enum_idx = MENU_ENUM_LABEL_VIDEO_ALLOW_ROTATE; + bool_entries[4].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_VIDEO_ALLOW_ROTATE; + bool_entries[4].default_value = allow_rotate; + bool_entries[4].flags = SD_FLAG_ADVANCED; + for (i = 0; i < ARRAY_SIZE(bool_entries); i++) { CONFIG_BOOL( @@ -2898,7 +2924,7 @@ static bool setting_append_list( case SETTINGS_LIST_SAVING: { unsigned i; - struct bool_entry bool_entries[6]; + struct bool_entry bool_entries[7]; START_GROUP(list, list_info, &group_info, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SAVING_SETTINGS), parent_group); parent_group = msg_hash_to_str(MENU_ENUM_LABEL_SAVING_SETTINGS); @@ -2942,6 +2968,12 @@ static bool setting_append_list( bool_entries[5].default_value = savestate_auto_load; bool_entries[5].flags = SD_FLAG_NONE; + bool_entries[6].target = &settings->savestate_thumbnail_enable; + bool_entries[6].name_enum_idx = MENU_ENUM_LABEL_SAVESTATE_THUMBNAIL_ENABLE; + bool_entries[6].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_SAVESTATE_THUMBNAIL_ENABLE; + bool_entries[6].default_value = savestate_thumbnail_enable; + bool_entries[6].flags = SD_FLAG_ADVANCED; + for (i = 0; i < ARRAY_SIZE(bool_entries); i++) { CONFIG_BOOL( @@ -3139,7 +3171,6 @@ static bool setting_append_list( general_read_handler, SD_FLAG_NONE); } - CONFIG_FLOAT( list, list_info, &settings->video.refresh_rate, @@ -3317,6 +3348,30 @@ static bool setting_append_list( general_write_handler, general_read_handler); menu_settings_list_current_add_range(list, list_info, 1.0, 10.0, 1.0, true, true); + CONFIG_UINT( + list, list_info, + &settings->video.window_x, + MENU_ENUM_LABEL_VIDEO_WINDOW_WIDTH, + MENU_ENUM_LABEL_VALUE_VIDEO_WINDOW_WIDTH, + 0, + &group_info, + &subgroup_info, + parent_group, + general_write_handler, + general_read_handler); + menu_settings_list_current_add_range(list, list_info, 0, 7680, 8, true, true); + CONFIG_UINT( + list, list_info, + &settings->video.window_y, + MENU_ENUM_LABEL_VIDEO_WINDOW_HEIGHT, + MENU_ENUM_LABEL_VALUE_VIDEO_WINDOW_HEIGHT, + 0, + &group_info, + &subgroup_info, + parent_group, + general_write_handler, + general_read_handler); + menu_settings_list_current_add_range(list, list_info, 0, 4320, 8, true, true); } CONFIG_BOOL( @@ -3383,6 +3438,7 @@ static bool setting_append_list( general_read_handler, SD_FLAG_NONE ); + menu_settings_list_current_add_cmd(list, list_info, CMD_EVENT_REINIT); CONFIG_UINT( list, list_info, @@ -3423,7 +3479,7 @@ static bool setting_append_list( parent_group, general_write_handler, general_read_handler, - SD_FLAG_CMD_APPLY_AUTO | SD_FLAG_ADVANCED + SD_FLAG_CMD_APPLY_AUTO ); menu_settings_list_current_add_cmd(list, list_info, CMD_EVENT_REINIT); #endif @@ -3457,7 +3513,7 @@ static bool setting_append_list( general_read_handler); menu_settings_list_current_add_cmd(list, list_info, CMD_EVENT_VIDEO_SET_BLOCKING_STATE); menu_settings_list_current_add_range(list, list_info, 1, 4, 1, true, true); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_CMD_APPLY_AUTO|SD_FLAG_ADVANCED); + settings_data_list_current_add_flags(list, list_info, SD_FLAG_CMD_APPLY_AUTO); CONFIG_UINT( list, list_info, @@ -3471,7 +3527,7 @@ static bool setting_append_list( general_write_handler, general_read_handler); menu_settings_list_current_add_range(list, list_info, 1, 4, 1, true, true); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_CMD_APPLY_AUTO|SD_FLAG_ADVANCED); + settings_data_list_current_add_flags(list, list_info, SD_FLAG_CMD_APPLY_AUTO); if (string_is_equal(settings->video.driver, "gl")) { @@ -3503,7 +3559,6 @@ static bool setting_append_list( general_write_handler, general_read_handler); menu_settings_list_current_add_range(list, list_info, 0, 3, 1, true, true); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); } CONFIG_UINT( @@ -3518,7 +3573,6 @@ static bool setting_append_list( general_write_handler, general_read_handler); menu_settings_list_current_add_range(list, list_info, 0, 15, 1, true, true); - settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); #if !defined(RARCH_MOBILE) CONFIG_BOOL( @@ -3563,22 +3617,6 @@ static bool setting_append_list( ); settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); - CONFIG_BOOL( - list, list_info, - &settings->video.allow_rotate, - MENU_ENUM_LABEL_VIDEO_ALLOW_ROTATE, - MENU_ENUM_LABEL_VALUE_VIDEO_ALLOW_ROTATE, - allow_rotate, - MENU_ENUM_LABEL_VALUE_OFF, - MENU_ENUM_LABEL_VALUE_ON, - &group_info, - &subgroup_info, - parent_group, - general_write_handler, - general_read_handler, - SD_FLAG_ADVANCED - ); - CONFIG_BOOL( list, list_info, &settings->video.crop_overscan, @@ -3872,6 +3910,22 @@ static bool setting_append_list( general_read_handler); menu_settings_list_current_add_range(list, list_info, 1, MAX_USERS, 1, true, true); + CONFIG_BOOL( + list, list_info, + &settings->menu.unified_controls, + MENU_ENUM_LABEL_INPUT_UNIFIED_MENU_CONTROLS, + MENU_ENUM_LABEL_VALUE_INPUT_UNIFIED_MENU_CONTROLS, + false, + MENU_ENUM_LABEL_VALUE_OFF, + MENU_ENUM_LABEL_VALUE_ON, + &group_info, + &subgroup_info, + parent_group, + general_write_handler, + general_read_handler, + SD_FLAG_NONE + ); + CONFIG_UINT( list, list_info, &settings->input.poll_type_behavior, @@ -3966,24 +4020,6 @@ static bool setting_append_list( ); #endif -#ifdef ANDROID - CONFIG_BOOL( - list, list_info, - &settings->input.back_as_menu_toggle_enable, - MENU_ENUM_LABEL_INPUT_BACK_AS_MENU_TOGGLE_ENABLE, - MENU_ENUM_LABEL_VALUE_INPUT_BACK_AS_MENU_TOGGLE_ENABLE, - back_as_menu_toggle_enable, - MENU_ENUM_LABEL_VALUE_OFF, - MENU_ENUM_LABEL_VALUE_ON, - &group_info, - &subgroup_info, - parent_group, - general_write_handler, - general_read_handler, - SD_FLAG_NONE - ); -#endif - CONFIG_UINT( list, list_info, &settings->input.menu_toggle_gamepad_combo, @@ -3995,7 +4031,23 @@ static bool setting_append_list( parent_group, general_write_handler, general_read_handler); - menu_settings_list_current_add_range(list, list_info, 0, 3, 1, true, true); + menu_settings_list_current_add_range(list, list_info, 0, 4, 1, true, true); + + CONFIG_BOOL( + list, list_info, + &settings->input.menu_swap_ok_cancel_buttons, + MENU_ENUM_LABEL_MENU_INPUT_SWAP_OK_CANCEL, + MENU_ENUM_LABEL_VALUE_MENU_INPUT_SWAP_OK_CANCEL, + menu_swap_ok_cancel_buttons, + MENU_ENUM_LABEL_VALUE_OFF, + MENU_ENUM_LABEL_VALUE_ON, + &group_info, + &subgroup_info, + parent_group, + general_write_handler, + general_read_handler, + SD_FLAG_NONE + ); CONFIG_BOOL( list, list_info, @@ -4045,6 +4097,7 @@ static bool setting_append_list( SD_FLAG_NONE ); +#if 0 CONFIG_BOOL( list, list_info, &settings->input.input_descriptor_label_show, @@ -4076,6 +4129,7 @@ static bool setting_append_list( general_read_handler, SD_FLAG_ADVANCED ); +#endif END_SUB_GROUP(list, list_info, parent_group); @@ -4083,7 +4137,7 @@ static bool setting_append_list( START_SUB_GROUP( list, list_info, - "Turbo/Deadzone", + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_TURBO_DEADZONE_LIST), &group_info, &subgroup_info, parent_group); @@ -4375,7 +4429,7 @@ static bool setting_append_list( parent_group, general_write_handler, general_read_handler, - SD_FLAG_NONE + SD_FLAG_ADVANCED ); END_SUB_GROUP(list, list_info, parent_group); @@ -4528,22 +4582,6 @@ static bool setting_append_list( ); (*list)[list_info->index - 1].change_handler = overlay_enable_toggle_change_handler; - CONFIG_BOOL( - list, list_info, - &settings->osk.enable, - MENU_ENUM_LABEL_INPUT_OSK_OVERLAY_ENABLE, - MENU_ENUM_LABEL_VALUE_INPUT_OSK_OVERLAY_ENABLE, - display_keyboard_overlay, - MENU_ENUM_LABEL_VALUE_OFF, - MENU_ENUM_LABEL_VALUE_ON, - &group_info, - &subgroup_info, - parent_group, - general_write_handler, - general_read_handler, - SD_FLAG_NONE - ); - CONFIG_PATH( list, list_info, settings->path.overlay, @@ -4595,20 +4633,6 @@ static bool setting_append_list( START_SUB_GROUP(list, list_info, "Onscreen Keyboard Overlay", &group_info, &subgroup_info, parent_group); - CONFIG_PATH( - list, list_info, - settings->path.osk_overlay, - sizeof(settings->path.osk_overlay), - MENU_ENUM_LABEL_KEYBOARD_OVERLAY_PRESET, - MENU_ENUM_LABEL_VALUE_KEYBOARD_OVERLAY_PRESET, - dir_get_ptr(RARCH_DIR_OSK_OVERLAY), - &group_info, - &subgroup_info, - parent_group, - general_write_handler, - general_read_handler); - menu_settings_list_current_add_values(list, list_info, "cfg"); - END_SUB_GROUP(list, list_info, parent_group); END_GROUP(list, list_info, parent_group); #endif @@ -4737,7 +4761,7 @@ static bool setting_append_list( parent_group, general_write_handler, general_read_handler, - SD_FLAG_NONE + SD_FLAG_ADVANCED ); #ifdef RARCH_MOBILE @@ -5125,7 +5149,7 @@ static bool setting_append_list( parent_group, general_write_handler, general_read_handler, - SD_FLAG_NONE); + SD_FLAG_ADVANCED); if (string_is_equal(settings->menu.driver, "xmb")) { @@ -5156,7 +5180,7 @@ static bool setting_append_list( parent_group, general_write_handler, general_read_handler, - SD_FLAG_NONE); + SD_FLAG_ADVANCED); CONFIG_BOOL( list, list_info, @@ -5171,7 +5195,7 @@ static bool setting_append_list( parent_group, general_write_handler, general_read_handler, - SD_FLAG_NONE); + SD_FLAG_ADVANCED); END_SUB_GROUP(list, list_info, parent_group); END_GROUP(list, list_info, parent_group); @@ -5252,7 +5276,6 @@ static bool setting_append_list( END_GROUP(list, list_info, parent_group); break; case SETTINGS_LIST_USER_INTERFACE: -#ifndef HAVE_LAKKA START_GROUP(list, list_info, &group_info, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_USER_INTERFACE_SETTINGS), parent_group); @@ -5345,7 +5368,6 @@ static bool setting_append_list( END_SUB_GROUP(list, list_info, parent_group); END_GROUP(list, list_info, parent_group); -#endif break; case SETTINGS_LIST_PLAYLIST: START_GROUP(list, list_info, &group_info, @@ -5357,7 +5379,6 @@ static bool setting_append_list( START_SUB_GROUP(list, list_info, "History", &group_info, &subgroup_info, parent_group); -#ifndef HAVE_LAKKA CONFIG_BOOL( list, list_info, &settings->history_list_enable, @@ -5371,9 +5392,8 @@ static bool setting_append_list( parent_group, general_write_handler, general_read_handler, - SD_FLAG_NONE + SD_FLAG_ADVANCED ); -#endif CONFIG_UINT( list, list_info, @@ -5428,7 +5448,7 @@ static bool setting_append_list( parent_group, general_write_handler, general_read_handler, - SD_FLAG_NONE + SD_FLAG_ADVANCED ); CONFIG_BOOL( @@ -5550,10 +5570,10 @@ static bool setting_append_list( CONFIG_UINT( list, list_info, - &settings->netplay.sync_frames, + &settings->netplay.delay_frames, MENU_ENUM_LABEL_NETPLAY_DELAY_FRAMES, MENU_ENUM_LABEL_VALUE_NETPLAY_DELAY_FRAMES, - 0, + netplay_delay_frames, &group_info, &subgroup_info, parent_group, @@ -5567,7 +5587,7 @@ static bool setting_append_list( &settings->netplay.check_frames, MENU_ENUM_LABEL_NETPLAY_CHECK_FRAMES, MENU_ENUM_LABEL_VALUE_NETPLAY_CHECK_FRAMES, - 0, + netplay_check_frames, &group_info, &subgroup_info, parent_group, @@ -5591,6 +5611,21 @@ static bool setting_append_list( general_read_handler, SD_FLAG_NONE); + CONFIG_BOOL( + list, list_info, + &settings->netplay.nat_traversal, + MENU_ENUM_LABEL_NETPLAY_NAT_TRAVERSAL, + MENU_ENUM_LABEL_VALUE_NETPLAY_NAT_TRAVERSAL, + false, + MENU_ENUM_LABEL_VALUE_OFF, + MENU_ENUM_LABEL_VALUE_ON, + &group_info, + &subgroup_info, + parent_group, + general_write_handler, + general_read_handler, + SD_FLAG_NONE); + CONFIG_BOOL( list, list_info, &settings->netplay.swap_input, @@ -6185,20 +6220,6 @@ static bool setting_append_list( parent_group, general_write_handler, general_read_handler); - - CONFIG_DIR( - list, list_info, - dir_get_ptr(RARCH_DIR_OSK_OVERLAY), - dir_get_size(RARCH_DIR_OSK_OVERLAY), - MENU_ENUM_LABEL_OSK_OVERLAY_DIRECTORY, - MENU_ENUM_LABEL_VALUE_OSK_OVERLAY_DIRECTORY, - g_defaults.dir.osk_overlay, - MENU_ENUM_LABEL_VALUE_DIRECTORY_DEFAULT, - &group_info, - &subgroup_info, - parent_group, - general_write_handler, - general_read_handler); #endif CONFIG_DIR( diff --git a/menu/menu_shader.c b/menu/menu_shader.c index 40746afb8b..0d03b67246 100644 --- a/menu/menu_shader.c +++ b/menu/menu_shader.c @@ -30,7 +30,6 @@ #include "../file_path_special.h" #include "../configuration.h" #include "../paths.h" -#include "../runloop.h" #include "../verbosity.h" #include "../gfx/video_shader_driver.h" @@ -163,10 +162,10 @@ void menu_shader_manager_set_preset(void *data, unsigned type, const char *preset_path) { #ifdef HAVE_SHADER_MANAGER - struct video_shader *shader = (struct video_shader*)data; - config_file_t *conf = NULL; - bool refresh = false; - settings_t *settings = config_get_ptr(); + struct video_shader *shader = (struct video_shader*)data; + config_file_t *conf = NULL; + bool refresh = false; + settings_t *settings = config_get_ptr(); settings->video.shader_enable = false; @@ -314,11 +313,29 @@ bool menu_shader_manager_save_preset( dirs[2] = config_directory; } - if (!(conf = (config_file_t*)config_file_new(NULL))) + conf = (config_file_t*)config_file_new(NULL); + + if (!conf) return false; + video_shader_write_conf_cgp(conf, shader); - if (!fullpath) + if (fullpath) + { + if (!string_is_empty(basename)) + strlcpy(preset_path, buffer, sizeof(preset_path)); + + if (config_file_write(conf, preset_path)) + { + RARCH_LOG("Saved shader preset to %s.\n", preset_path); + if (apply) + menu_shader_manager_set_preset(NULL, type, preset_path); + ret = true; + } + else + RARCH_LOG("Failed writing shader preset to %s.\n", preset_path); + } + else { for (d = 0; d < ARRAY_SIZE(dirs); d++) { @@ -340,20 +357,6 @@ bool menu_shader_manager_save_preset( RARCH_LOG("Failed writing shader preset to %s.\n", preset_path); } } - else - { - if (!string_is_empty(basename)) - strlcpy(preset_path, buffer, sizeof(preset_path)); - if (config_file_write(conf, preset_path)) - { - RARCH_LOG("Saved shader preset to %s.\n", preset_path); - if (apply) - menu_shader_manager_set_preset(NULL, type, preset_path); - ret = true; - } - else - RARCH_LOG("Failed writing shader preset to %s.\n", preset_path); - } config_file_free(conf); if (ret) diff --git a/menu/widgets/menu_dialog.c b/menu/widgets/menu_dialog.c index f272685156..a4f19879ab 100644 --- a/menu/widgets/menu_dialog.c +++ b/menu/widgets/menu_dialog.c @@ -33,7 +33,7 @@ #include "../../retroarch.h" #include "../../configuration.h" -#include "../../input/input_autodetect.h" +#include "../../tasks/tasks_internal.h" #include "../../input/input_config.h" static bool menu_dialog_pending_push = false; @@ -111,7 +111,7 @@ int menu_dialog_iterate(char *s, size_t len, const char *label) &settings->input.binds[0][binds[i]]; const struct retro_keybind *auto_bind = (const struct retro_keybind*) - input_get_auto_bind(0, binds[i]); + input_config_get_bind_auto(0, binds[i]); input_config_get_bind_string(desc[i], keybind, auto_bind, sizeof(desc[i])); diff --git a/msg_hash.h b/msg_hash.h index beaacd1826..777a62f85d 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -25,6 +25,8 @@ #include "input/input_defines.h" +#define MSG_HASH(Id, str) case Id: return str; + RETRO_BEGIN_DECLS enum msg_file_type @@ -126,6 +128,11 @@ enum msg_file_type FILE_TYPE_LAST }; +#define MENU_LABEL(STR) \ + MENU_ENUM_LABEL_##STR, \ + MENU_ENUM_SUBLABEL_##STR, \ + MENU_ENUM_LABEL_VALUE_##STR + enum msg_hash_enums { MSG_UNKNOWN = 0, @@ -134,6 +141,8 @@ enum msg_hash_enums MSG_NETPLAY_USERS_HAS_FLIPPED, MSG_UNKNOWN_NETPLAY_COMMAND_RECEIVED, MSG_CONNECTING_TO_NETPLAY_HOST, + MSG_NETPLAY_LAN_SCAN_COMPLETE, + MSG_NETPLAY_LAN_SCANNING, MSG_WAITING_FOR_CLIENT, MSG_AUTODETECT, MSG_AUDIO_VOLUME, @@ -148,6 +157,7 @@ enum msg_hash_enums MSG_FAILED, MSG_SUCCEEDED, MSG_LOADING, + MSG_FIRMWARE, MSG_CONNECTING_TO_PORT, MSG_CONNECTED_TO, MSG_FAILED_TO_LOAD, @@ -164,7 +174,9 @@ enum msg_hash_enums MSG_RESTORED_OLD_SAVE_STATE, MSG_NO_STATE_HAS_BEEN_LOADED_YET, MSG_GOT_CONNECTION_FROM, + MSG_GOT_CONNECTION_FROM_NAME, MSG_CONNECTION_SLOT, + MSG_PUBLIC_ADDRESS, MSG_NO_SAVE_STATE_HAS_BEEN_OVERWRITTEN_YET, MSG_CANNOT_INFER_NEW_CONFIG_PATH, MSG_UNDID_LOAD_STATE, @@ -269,6 +281,8 @@ enum msg_hash_enums MSG_MOVIE_RECORD_STOPPED, MSG_MOVIE_PLAYBACK_ENDED, MSG_TAKING_SCREENSHOT, + MSG_WIFI_SCAN_COMPLETE, + MSG_SCANNING_WIRELESS_NETWORKS, MSG_FAILED_TO_TAKE_SCREENSHOT, MSG_CUSTOM_TIMING_GIVEN, MSG_SAVING_STATE, @@ -324,6 +338,8 @@ enum msg_hash_enums MSG_UNPAUSED, MSG_CORE_DOES_NOT_SUPPORT_DISK_OPTIONS, MSG_GRAB_MOUSE_STATE, + MSG_GAME_FOCUS_ON, + MSG_GAME_FOCUS_OFF, MSG_FAILED_TO_LOAD_MOVIE_FILE, MSG_FAILED_TO, MSG_SAVING_RAM_TYPE, @@ -337,18 +353,16 @@ enum msg_hash_enums MSG_EXTRACTING_FILE, MSG_NO_CONTENT_STARTING_DUMMY_CORE, - MENU_ENUM_LABEL_VALUE_CONTENT_HISTORY_SIZE, MENU_ENUM_LABEL_MENU_TOGGLE, - MENU_ENUM_LABEL_VALUE_NO_HISTORY_AVAILABLE, - MENU_ENUM_LABEL_NO_HISTORY_AVAILABLE, + + MENU_LABEL(NO_HISTORY_AVAILABLE), MENU_ENUM_LABEL_VALUE_REMAP_FILE, MENU_ENUM_LABEL_VALUE_CHEAT_FILE, MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_BEGIN, MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_END = MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_BEGIN + RARCH_BIND_LIST_END, - MENU_ENUM_LABEL_MENU_WALLPAPER_OPACITY, - MENU_ENUM_LABEL_VALUE_MENU_WALLPAPER_OPACITY, + MENU_LABEL(MENU_WALLPAPER_OPACITY), MENU_ENUM_LABEL_VALUE_CONFIG, MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET, @@ -360,7 +374,7 @@ enum msg_hash_enums MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_RETROACTIVE, MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_PIXEL, MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_NEOACTIVE, - MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_MONOCHROME_JAGGED, + MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_SYSTEMATIC, MENU_ENUM_LABEL_VALUE_XMB_ICON_THEME_CUSTOM, MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_LEGACY_RED, @@ -374,13 +388,13 @@ enum msg_hash_enums MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_DARK, MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_PLAIN, - MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_RIBBON_SIMPLIFIED, - MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_RIBBON, + MENU_LABEL(SHADER_PIPELINE_RIBBON_SIMPLIFIED), + MENU_LABEL(SHADER_PIPELINE_RIBBON), + MENU_LABEL(SHADER_PIPELINE_SIMPLE_SNOW), + MENU_LABEL(SHADER_PIPELINE_SNOW), - MENU_ENUM_LABEL_MATERIALUI_MENU_HEADER_OPACITY, - MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_HEADER_OPACITY, - MENU_ENUM_LABEL_MATERIALUI_MENU_FOOTER_OPACITY, - MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_FOOTER_OPACITY, + MENU_LABEL(MATERIALUI_MENU_HEADER_OPACITY), + MENU_LABEL(MATERIALUI_MENU_FOOTER_OPACITY), MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_BLUE, MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_BLUE_GREY, MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME_RED, @@ -393,10 +407,10 @@ enum msg_hash_enums MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR_NORMAL, MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR_EARLY, MENU_ENUM_LABEL_PLAYLIST_COLLECTION_ENTRY, - MENU_ENUM_LABEL_VALUE_CHEEVOS_UNLOCKED_ENTRY, - MENU_ENUM_LABEL_CHEEVOS_UNLOCKED_ENTRY, - MENU_ENUM_LABEL_VALUE_CHEEVOS_LOCKED_ENTRY, - MENU_ENUM_LABEL_CHEEVOS_LOCKED_ENTRY, + + MENU_LABEL(CHEEVOS_UNLOCKED_ENTRY), + MENU_LABEL(CHEEVOS_LOCKED_ENTRY), + MENU_ENUM_LABEL_SHADER_PARAMETERS_ENTRY, MENU_ENUM_LABEL_RDB_ENTRY, MENU_ENUM_LABEL_URL_ENTRY, @@ -405,20 +419,15 @@ enum msg_hash_enums MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY, MENU_ENUM_LABEL_CORE_INFO_ENTRY, MENU_ENUM_LABEL_PLAYLIST_ENTRY, - MENU_ENUM_LABEL_START_VIDEO_PROCESSOR, - MENU_ENUM_LABEL_VALUE_START_VIDEO_PROCESSOR, - MENU_ENUM_LABEL_START_NET_RETROPAD, - MENU_ENUM_LABEL_VALUE_START_NET_RETROPAD, + + MENU_LABEL(START_VIDEO_PROCESSOR), + MENU_LABEL(START_NET_RETROPAD), MENU_ENUM_LABEL_VALUE_INTERNAL_STORAGE_STATUS, /* System information */ - - MENU_ENUM_LABEL_CPU_ARCHITECTURE, - MENU_ENUM_LABEL_CPU_CORES, - - MENU_ENUM_LABEL_VALUE_CPU_ARCHITECTURE, - MENU_ENUM_LABEL_VALUE_CPU_CORES, + MENU_LABEL(CPU_CORES), + MENU_LABEL(CPU_ARCHITECTURE), /* Input */ @@ -426,20 +435,14 @@ enum msg_hash_enums MENU_ENUM_LABEL_INPUT_LIBRETRO_DEVICE_LAST = MENU_ENUM_LABEL_INPUT_LIBRETRO_DEVICE + MAX_USERS, MENU_ENUM_LABEL_INPUT_PLAYER_ANALOG_DPAD_MODE, MENU_ENUM_LABEL_INPUT_PLAYER_ANALOG_DPAD_MODE_LAST = MENU_ENUM_LABEL_INPUT_PLAYER_ANALOG_DPAD_MODE + MAX_USERS, - MENU_ENUM_LABEL_INPUT_BACK_AS_MENU_TOGGLE, - MENU_ENUM_LABEL_INPUT_BACK_AS_MENU_TOGGLE_ENABLE, - MENU_ENUM_LABEL_INPUT_HOTKEY_BINDS_BEGIN, - MENU_ENUM_LABEL_INPUT_KEYBOARD_GAMEPAD_MAPPING_TYPE, - MENU_ENUM_LABEL_INPUT_POLL_TYPE_BEHAVIOR, - MENU_ENUM_LABEL_INPUT_SETTINGS, MENU_ENUM_LABEL_INPUT_SETTINGS_BEGIN, - MENU_ENUM_LABEL_INPUT_OVERLAY_HIDE_IN_MENU, - MENU_ENUM_LABEL_INPUT_BACK_AS_MENU_ENUM_TOGGLE_ENABLE, - MENU_ENUM_LABEL_INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO, - MENU_ENUM_LABEL_INPUT_ALL_USERS_CONTROL_MENU, - MENU_ENUM_LABEL_INPUT_HOTKEY_BINDS, - MENU_ENUM_LABEL_INPUT_OSK_OVERLAY_ENABLE, - MENU_ENUM_LABEL_INPUT_OVERLAY_ENABLE, + + MENU_LABEL(INPUT_HOTKEY_BINDS), + + MENU_ENUM_LABEL_INPUT_HOTKEY_BINDS_BEGIN, + + MENU_LABEL(INPUT_TURBO_PERIOD), + MENU_ENUM_LABEL_INPUT_PLAYER1_JOYPAD_INDEX, MENU_ENUM_LABEL_INPUT_PLAYER2_JOYPAD_INDEX, MENU_ENUM_LABEL_INPUT_PLAYER3_JOYPAD_INDEX, @@ -448,15 +451,6 @@ enum msg_hash_enums MENU_ENUM_LABEL_INPUT_BIND_DEVICE_TYPE, MENU_ENUM_LABEL_INPUT_DRIVER_LINUXRAW, MENU_ENUM_LABEL_INPUT_DRIVER_UDEV, - MENU_ENUM_LABEL_INPUT_BIND_TIMEOUT, - MENU_ENUM_LABEL_INPUT_TURBO_PERIOD, - MENU_ENUM_LABEL_INPUT_MAX_USERS, - MENU_ENUM_LABEL_INPUT_REMAP_BINDS_ENABLE, - MENU_ENUM_LABEL_INPUT_AXIS_THRESHOLD, - MENU_ENUM_LABEL_INPUT_SMALL_KEYBOARD_ENABLE, - MENU_ENUM_LABEL_INPUT_TOUCH_ENABLE, - MENU_ENUM_LABEL_INPUT_PREFER_FRONT_TOUCH, - MENU_ENUM_LABEL_INPUT_ICADE_ENABLE, MENU_ENUM_LABEL_INPUT_USER_1_BINDS, MENU_ENUM_LABEL_INPUT_USER_2_BINDS, MENU_ENUM_LABEL_INPUT_USER_3_BINDS, @@ -474,12 +468,10 @@ enum msg_hash_enums MENU_ENUM_LABEL_INPUT_USER_15_BINDS, MENU_ENUM_LABEL_INPUT_USER_16_BINDS, MENU_ENUM_LABEL_INPUT_HOTKEY_SETTINGS, - MENU_ENUM_LABEL_INPUT_AUTODETECT_ENABLE, - MENU_ENUM_LABEL_INPUT_REMAPPING_DIRECTORY, - MENU_ENUM_LABEL_INPUT_DUTY_CYCLE, + + MENU_LABEL(INPUT_REMAPPING_DIRECTORY), + MENU_ENUM_LABEL_INPUT_BIND_MODE, - MENU_ENUM_LABEL_INPUT_DESCRIPTOR_HIDE_UNBOUND, - MENU_ENUM_LABEL_INPUT_DESCRIPTOR_LABEL_SHOW, MENU_ENUM_LABEL_INPUT_OVERLAY, MENU_ENUM_LABEL_INPUT_OSK_OVERLAY, @@ -545,6 +537,7 @@ enum msg_hash_enums MENU_ENUM_LABEL_VALUE_INPUT_META_DISK_NEXT, MENU_ENUM_LABEL_VALUE_INPUT_META_DISK_PREV, MENU_ENUM_LABEL_VALUE_INPUT_META_GRAB_MOUSE_TOGGLE, + MENU_ENUM_LABEL_VALUE_INPUT_META_GAME_FOCUS_TOGGLE, MENU_ENUM_LABEL_VALUE_INPUT_META_MENU_TOGGLE, MENU_ENUM_LABEL_VALUE_INPUT_DEVICE_INDEX, @@ -554,196 +547,114 @@ enum msg_hash_enums MENU_ENUM_LABEL_VALUE_INPUT_BIND_DEFAULT_ALL, MENU_ENUM_LABEL_VALUE_INPUT_SAVE_AUTOCONFIG, - MENU_ENUM_LABEL_VALUE_INPUT_USER_BINDS, - MENU_ENUM_LABEL_VALUE_INPUT_AUTODETECT_ENABLE, - MENU_ENUM_LABEL_VALUE_INPUT_DUTY_CYCLE, - MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_LABEL_SHOW, - MENU_ENUM_LABEL_VALUE_INPUT_DESCRIPTOR_HIDE_UNBOUND, - MENU_ENUM_LABEL_VALUE_INPUT_MAX_USERS, - MENU_ENUM_LABEL_VALUE_INPUT_REMAP_BINDS_ENABLE, - MENU_ENUM_LABEL_VALUE_INPUT_AXIS_THRESHOLD, - MENU_ENUM_LABEL_VALUE_INPUT_BIND_TIMEOUT, - MENU_ENUM_LABEL_VALUE_INPUT_TURBO_PERIOD, - MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_ENABLE, - MENU_ENUM_LABEL_VALUE_INPUT_OSK_OVERLAY_ENABLE, - MENU_ENUM_LABEL_VALUE_INPUT_HOTKEY_BINDS, - MENU_ENUM_LABEL_VALUE_INPUT_BACK_AS_MENU_ENUM_TOGGLE_ENABLE, - MENU_ENUM_LABEL_VALUE_INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO, - MENU_ENUM_LABEL_VALUE_INPUT_ALL_USERS_CONTROL_MENU, - MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_HIDE_IN_MENU, - MENU_ENUM_LABEL_VALUE_INPUT_KEYBOARD_GAMEPAD_MAPPING_TYPE, - MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR, - MENU_ENUM_LABEL_VALUE_INPUT_BACK_AS_MENU_TOGGLE_ENABLE, - MENU_ENUM_LABEL_VALUE_INPUT_SMALL_KEYBOARD_ENABLE, - MENU_ENUM_LABEL_VALUE_INPUT_TOUCH_ENABLE, - MENU_ENUM_LABEL_VALUE_INPUT_PREFER_FRONT_TOUCH, - MENU_ENUM_LABEL_VALUE_INPUT_ICADE_ENABLE, + MENU_LABEL(INPUT_MAX_USERS), + MENU_LABEL(INPUT_USER_BINDS), + MENU_LABEL(INPUT_DUTY_CYCLE), + MENU_LABEL(INPUT_AUTODETECT_ENABLE), + MENU_LABEL(INPUT_DESCRIPTOR_LABEL_SHOW), + MENU_LABEL(INPUT_DESCRIPTOR_HIDE_UNBOUND), + MENU_LABEL(INPUT_AXIS_THRESHOLD), + MENU_LABEL(INPUT_BIND_TIMEOUT), + MENU_LABEL(INPUT_REMAP_BINDS_ENABLE), + MENU_LABEL(MENU_INPUT_SWAP_OK_CANCEL), + MENU_LABEL(INPUT_OVERLAY_ENABLE), + MENU_LABEL(INPUT_OSK_OVERLAY_ENABLE), + MENU_LABEL(INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO), + MENU_LABEL(INPUT_OVERLAY_HIDE_IN_MENU), + MENU_LABEL(INPUT_KEYBOARD_GAMEPAD_MAPPING_TYPE), + MENU_LABEL(INPUT_SMALL_KEYBOARD_ENABLE), + MENU_LABEL(INPUT_TOUCH_ENABLE), + MENU_LABEL(INPUT_PREFER_FRONT_TOUCH), + MENU_LABEL(INPUT_ICADE_ENABLE), + MENU_LABEL(INPUT_ALL_USERS_CONTROL_MENU), + MENU_LABEL(INPUT_POLL_TYPE_BEHAVIOR), + MENU_LABEL(INPUT_UNIFIED_MENU_CONTROLS), /* Video */ - MENU_ENUM_LABEL_VIDEO_FONT_ENABLE, - MENU_ENUM_LABEL_VIDEO_FONT_PATH, - MENU_ENUM_LABEL_VIDEO_FONT_SIZE, - MENU_ENUM_LABEL_VIDEO_MESSAGE_POS_X, - MENU_ENUM_LABEL_VIDEO_MESSAGE_POS_Y, - MENU_ENUM_LABEL_VIDEO_FILTER_FLICKER, - MENU_ENUM_LABEL_VIDEO_SOFT_FILTER, - MENU_ENUM_LABEL_VIDEO_SWAP_INTERVAL, - MENU_ENUM_LABEL_VIDEO_MAX_SWAPCHAIN_IMAGES, - MENU_ENUM_LABEL_VIDEO_GPU_SCREENSHOT, - MENU_ENUM_LABEL_VIDEO_FULLSCREEN, - MENU_ENUM_LABEL_VIDEO_BLACK_FRAME_INSERTION, - MENU_ENUM_LABEL_VIDEO_HARD_SYNC_FRAMES, - MENU_ENUM_LABEL_VIDEO_FRAME_DELAY, - MENU_ENUM_LABEL_VIDEO_THREADED, - MENU_ENUM_LABEL_VIDEO_VSYNC, - MENU_ENUM_LABEL_VIDEO_HARD_SYNC, - MENU_ENUM_LABEL_VIDEO_MONITOR_INDEX, - MENU_ENUM_LABEL_VIDEO_REFRESH_RATE_AUTO, - MENU_ENUM_LABEL_VIDEO_REFRESH_RATE, - MENU_ENUM_LABEL_VIDEO_WINDOWED_FULLSCREEN, - MENU_ENUM_LABEL_VIDEO_FORCE_SRGB_DISABLE, - MENU_ENUM_LABEL_VIDEO_ROTATION, - MENU_ENUM_LABEL_VIDEO_SCALE, - MENU_ENUM_LABEL_VIDEO_SMOOTH, - MENU_ENUM_LABEL_VIDEO_CROP_OVERSCAN, - MENU_ENUM_LABEL_VIDEO_SCALE_INTEGER, - MENU_ENUM_LABEL_VIDEO_VIEWPORT_CUSTOM_X, - MENU_ENUM_LABEL_VIDEO_VIEWPORT_CUSTOM_Y, - MENU_ENUM_LABEL_VIDEO_VIEWPORT_CUSTOM_WIDTH, - MENU_ENUM_LABEL_VIDEO_VIEWPORT_CUSTOM_HEIGHT, - MENU_ENUM_LABEL_VIDEO_GAMMA, - MENU_ENUM_LABEL_VIDEO_ALLOW_ROTATE, + MENU_LABEL(VIDEO_FONT_ENABLE), + MENU_LABEL(VIDEO_FONT_PATH), + MENU_LABEL(VIDEO_FONT_SIZE), + MENU_LABEL(VIDEO_MESSAGE_POS_X), + MENU_LABEL(VIDEO_MESSAGE_POS_Y), + MENU_LABEL(VIDEO_FILTER_FLICKER), + MENU_LABEL(VIDEO_SOFT_FILTER), + MENU_LABEL(VIDEO_MAX_SWAPCHAIN_IMAGES), + MENU_LABEL(VIDEO_GPU_SCREENSHOT), + MENU_LABEL(VIDEO_BLACK_FRAME_INSERTION), + MENU_LABEL(VIDEO_FRAME_DELAY), + MENU_LABEL(VIDEO_VSYNC), + MENU_LABEL(VIDEO_HARD_SYNC), + MENU_LABEL(VIDEO_HARD_SYNC_FRAMES), + MENU_LABEL(VIDEO_WINDOWED_FULLSCREEN), + MENU_LABEL(VIDEO_WINDOW_WIDTH), + MENU_LABEL(VIDEO_WINDOW_HEIGHT), + MENU_LABEL(VIDEO_FORCE_SRGB_DISABLE), + MENU_LABEL(VIDEO_ROTATION), + MENU_LABEL(VIDEO_SCALE), + MENU_LABEL(VIDEO_SMOOTH), - MENU_ENUM_LABEL_VIDEO_SHARED_CONTEXT, - MENU_ENUM_LABEL_VALUE_VIDEO_SHARED_CONTEXT, - MENU_ENUM_SUBLABEL_VIDEO_SHARED_CONTEXT, + MENU_LABEL(VIDEO_CROP_OVERSCAN), - MENU_ENUM_LABEL_VALUE_VIDEO_VI_WIDTH, - MENU_ENUM_LABEL_VALUE_VIDEO_SETTINGS, - MENU_ENUM_LABEL_VALUE_VIDEO_FILTER, - MENU_ENUM_LABEL_VALUE_VIDEO_FONT_ENABLE, - MENU_ENUM_LABEL_VALUE_VIDEO_FONT_PATH, - MENU_ENUM_LABEL_VALUE_VIDEO_FONT_SIZE, - MENU_ENUM_LABEL_VALUE_VIDEO_MESSAGE_POS_X, - MENU_ENUM_LABEL_VALUE_VIDEO_MESSAGE_POS_Y, - MENU_ENUM_LABEL_VALUE_VIDEO_FILTER_FLICKER, - MENU_ENUM_LABEL_VALUE_VIDEO_SOFT_FILTER, - MENU_ENUM_LABEL_VALUE_VIDEO_BLACK_FRAME_INSERTION, - MENU_ENUM_LABEL_VALUE_VIDEO_HARD_SYNC_FRAMES, - MENU_ENUM_LABEL_VALUE_VIDEO_FRAME_DELAY, - MENU_ENUM_LABEL_VALUE_VIDEO_ROTATION, - MENU_ENUM_LABEL_VALUE_VIDEO_THREADED, - MENU_ENUM_LABEL_VALUE_VIDEO_VSYNC, - MENU_ENUM_LABEL_VALUE_VIDEO_HARD_SYNC, - MENU_ENUM_LABEL_VALUE_VIDEO_SWAP_INTERVAL, - MENU_ENUM_LABEL_VALUE_VIDEO_MAX_SWAPCHAIN_IMAGES, - MENU_ENUM_LABEL_VALUE_VIDEO_GPU_SCREENSHOT, - MENU_ENUM_LABEL_VALUE_VIDEO_FULLSCREEN, - MENU_ENUM_LABEL_VALUE_VIDEO_FORCE_ASPECT, - MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_AUTO, - MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO_INDEX, - MENU_ENUM_LABEL_VALUE_VIDEO_VFILTER, - MENU_ENUM_LABEL_VALUE_VIDEO_GPU_RECORD, - MENU_ENUM_LABEL_VALUE_VIDEO_GAMMA, - MENU_ENUM_LABEL_VALUE_VIDEO_ALLOW_ROTATE, - MENU_ENUM_LABEL_VALUE_VIDEO_MONITOR_INDEX, - MENU_ENUM_LABEL_VALUE_VIDEO_REFRESH_RATE, - MENU_ENUM_LABEL_VALUE_VIDEO_WINDOWED_FULLSCREEN, - MENU_ENUM_LABEL_VALUE_VIDEO_FORCE_SRGB_DISABLE, - MENU_ENUM_LABEL_VALUE_VIDEO_SCALE, - MENU_ENUM_LABEL_VALUE_VIDEO_SMOOTH, - MENU_ENUM_LABEL_VALUE_VIDEO_CROP_OVERSCAN, - MENU_ENUM_LABEL_VALUE_VIDEO_SCALE_INTEGER, - MENU_ENUM_LABEL_VALUE_VIDEO_REFRESH_RATE_AUTO, - MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_X, - MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_Y, - MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_WIDTH, - MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_HEIGHT, - MENU_ENUM_LABEL_VALUE_VIDEO_DISABLE_COMPOSITION, + MENU_LABEL(VIDEO_SCALE_INTEGER), + MENU_LABEL(VIDEO_VIEWPORT_CUSTOM_X), + MENU_LABEL(VIDEO_VIEWPORT_CUSTOM_Y), + MENU_LABEL(VIDEO_VIEWPORT_CUSTOM_WIDTH), + MENU_LABEL(VIDEO_VIEWPORT_CUSTOM_HEIGHT), + MENU_LABEL(VIDEO_GAMMA), + MENU_LABEL(VIDEO_ALLOW_ROTATE), + MENU_LABEL(VIDEO_SHARED_CONTEXT), + MENU_LABEL(VIDEO_THREADED), + + + MENU_LABEL(VIDEO_SWAP_INTERVAL), + MENU_LABEL(VIDEO_FULLSCREEN), + MENU_LABEL(VIDEO_MONITOR_INDEX), + MENU_LABEL(VIDEO_WINDOW_SCALE), + MENU_LABEL(VIDEO_REFRESH_RATE), + MENU_LABEL(VIDEO_REFRESH_RATE_AUTO), MENU_ENUM_LABEL_VALUE_DOWNLOAD_CORE, - MENU_ENUM_LABEL_VALUE_PARENT_DIRECTORY, - MENU_ENUM_LABEL_PARENT_DIRECTORY, + MENU_LABEL(PARENT_DIRECTORY), MENU_ENUM_LABEL_CONTENT_ACTIONS, MENU_ENUM_LABEL_RUN, - /* Menu settings */ - MENU_ENUM_LABEL_MENU_WALLPAPER, - MENU_ENUM_LABEL_VALUE_MENU_WALLPAPER, - MENU_ENUM_LABEL_DYNAMIC_WALLPAPER, - MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPER, - - MENU_ENUM_LABEL_PAUSE_NONACTIVE, - MENU_ENUM_LABEL_VALUE_PAUSE_NONACTIVE, - - MENU_ENUM_LABEL_MOUSE_ENABLE, - MENU_ENUM_LABEL_VALUE_MOUSE_ENABLE, - - MENU_ENUM_LABEL_POINTER_ENABLE, - MENU_ENUM_LABEL_VALUE_POINTER_ENABLE, - - MENU_ENUM_LABEL_MENU_LINEAR_FILTER, - MENU_ENUM_LABEL_VALUE_MENU_LINEAR_FILTER, - - MENU_ENUM_LABEL_NAVIGATION_WRAPAROUND, - MENU_ENUM_LABEL_VALUE_NAVIGATION_WRAPAROUND, - - MENU_ENUM_LABEL_SHOW_ADVANCED_SETTINGS, - MENU_ENUM_LABEL_VALUE_SHOW_ADVANCED_SETTINGS, - - MENU_ENUM_LABEL_THREADED_DATA_RUNLOOP_ENABLE, - MENU_ENUM_LABEL_VALUE_THREADED_DATA_RUNLOOP_ENABLE, - - MENU_ENUM_LABEL_ENTRY_NORMAL_COLOR, - MENU_ENUM_LABEL_ENTRY_HOVER_COLOR, - MENU_ENUM_LABEL_XMB_ALPHA_FACTOR, - MENU_ENUM_LABEL_XMB_FONT, - MENU_ENUM_LABEL_XMB_THEME, - MENU_ENUM_LABEL_XMB_MENU_COLOR_THEME, - MENU_ENUM_LABEL_XMB_SHADOWS_ENABLE, - MENU_ENUM_LABEL_XMB_SHOW_SETTINGS, - MENU_ENUM_LABEL_XMB_SHOW_IMAGES, - MENU_ENUM_LABEL_XMB_SHOW_MUSIC, - MENU_ENUM_LABEL_XMB_SHOW_VIDEO, - MENU_ENUM_LABEL_XMB_SHOW_HISTORY, - MENU_ENUM_LABEL_XMB_RIBBON_ENABLE, - MENU_ENUM_LABEL_THUMBNAILS, - MENU_ENUM_LABEL_TIMEDATE_ENABLE, - MENU_ENUM_LABEL_MATERIALUI_MENU_COLOR_THEME, - - MENU_ENUM_LABEL_VALUE_ENTRY_NORMAL_COLOR, - MENU_ENUM_LABEL_VALUE_ENTRY_HOVER_COLOR, - MENU_ENUM_LABEL_VALUE_XMB_SCALE_FACTOR, - MENU_ENUM_LABEL_VALUE_XMB_ALPHA_FACTOR, - MENU_ENUM_LABEL_VALUE_XMB_FONT, - MENU_ENUM_LABEL_VALUE_XMB_THEME, - MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME, - MENU_ENUM_LABEL_VALUE_XMB_SHADOWS_ENABLE, - MENU_ENUM_LABEL_VALUE_XMB_SHOW_SETTINGS, - MENU_ENUM_LABEL_VALUE_XMB_SHOW_IMAGES, - MENU_ENUM_LABEL_VALUE_XMB_SHOW_MUSIC, - MENU_ENUM_LABEL_VALUE_XMB_SHOW_VIDEO, - MENU_ENUM_LABEL_VALUE_XMB_SHOW_HISTORY, - MENU_ENUM_LABEL_VALUE_XMB_RIBBON_ENABLE, - MENU_ENUM_LABEL_VALUE_THUMBNAILS, - MENU_ENUM_LABEL_VALUE_TIMEDATE_ENABLE, - - MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME, + MENU_LABEL(MENU_WALLPAPER), + MENU_LABEL(DYNAMIC_WALLPAPER), + MENU_LABEL(PAUSE_NONACTIVE), + MENU_LABEL(MOUSE_ENABLE), + MENU_LABEL(POINTER_ENABLE), + MENU_LABEL(MENU_LINEAR_FILTER), + MENU_LABEL(NAVIGATION_WRAPAROUND), + MENU_LABEL(SHOW_ADVANCED_SETTINGS), + MENU_LABEL(THREADED_DATA_RUNLOOP_ENABLE), + MENU_LABEL(ENTRY_NORMAL_COLOR), + MENU_LABEL(ENTRY_HOVER_COLOR), + MENU_LABEL(XMB_ALPHA_FACTOR), + MENU_LABEL(XMB_SCALE_FACTOR), + MENU_LABEL(XMB_FONT), + MENU_LABEL(XMB_THEME), + MENU_LABEL(XMB_MENU_COLOR_THEME), + MENU_LABEL(XMB_SHADOWS_ENABLE), + MENU_LABEL(XMB_SHOW_SETTINGS), + MENU_LABEL(XMB_SHOW_IMAGES), + MENU_LABEL(XMB_SHOW_MUSIC), + MENU_LABEL(XMB_SHOW_VIDEO), + MENU_LABEL(XMB_SHOW_HISTORY), + MENU_LABEL(XMB_RIBBON_ENABLE), + MENU_LABEL(THUMBNAILS), + MENU_LABEL(TIMEDATE_ENABLE), + MENU_LABEL(MATERIALUI_MENU_COLOR_THEME), /* UI settings */ - MENU_ENUM_LABEL_VIDEO_DISABLE_COMPOSITION, - MENU_ENUM_LABEL_UI_COMPANION_ENABLE, - MENU_ENUM_LABEL_UI_COMPANION_START_ON_BOOT, - MENU_ENUM_LABEL_UI_MENUBAR_ENABLE, - - MENU_ENUM_LABEL_VALUE_UI_COMPANION_ENABLE, - MENU_ENUM_LABEL_VALUE_UI_COMPANION_START_ON_BOOT, - MENU_ENUM_LABEL_VALUE_UI_MENUBAR_ENABLE, + MENU_LABEL(VIDEO_DISABLE_COMPOSITION), + MENU_LABEL(UI_COMPANION_ENABLE), + MENU_LABEL(UI_COMPANION_START_ON_BOOT), + MENU_LABEL(UI_MENUBAR_ENABLE), MENU_ENUM_LABEL_FILE_CONFIG, MENU_ENUM_LABEL_FILE_BROWSER_COMPRESSED_ARCHIVE, @@ -768,23 +679,14 @@ enum msg_hash_enums MENU_ENUM_LABEL_FILE_BROWSER_MUSIC_OPEN, /* Menu file browser */ - MENU_ENUM_LABEL_VALUE_MENU_FILE_BROWSER_SETTINGS, - MENU_ENUM_LABEL_NAVIGATION_BROWSER_FILTER_SUPPORTED_EXTENSIONS_ENABLE, - MENU_ENUM_LABEL_VALUE_NAVIGATION_BROWSER_FILTER_SUPPORTED_EXTENSIONS_ENABLE, + MENU_LABEL(NAVIGATION_BROWSER_FILTER_SUPPORTED_EXTENSIONS_ENABLE), /* Playlists */ - MENU_ENUM_LABEL_HISTORY_LIST_ENABLE, - MENU_ENUM_LABEL_CONTENT_HISTORY_SIZE, - - MENU_ENUM_LABEL_VALUE_HISTORY_LIST_ENABLE, - - MENU_ENUM_LABEL_MENU_THROTTLE_FRAMERATE, - - MENU_ENUM_LABEL_NO_ACHIEVEMENTS_TO_DISPLAY, - MENU_ENUM_LABEL_VALUE_NO_ACHIEVEMENTS_TO_DISPLAY, - - MENU_ENUM_LABEL_NO_ENTRIES_TO_DISPLAY, - MENU_ENUM_LABEL_VALUE_NO_ENTRIES_TO_DISPLAY, + MENU_LABEL(HISTORY_LIST_ENABLE), + MENU_LABEL(CONTENT_HISTORY_SIZE), + MENU_LABEL(MENU_THROTTLE_FRAMERATE), + MENU_LABEL(NO_ACHIEVEMENTS_TO_DISPLAY), + MENU_LABEL(NO_ENTRIES_TO_DISPLAY), /* Help */ @@ -808,39 +710,28 @@ enum msg_hash_enums MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_QUIT, MENU_ENUM_LABEL_VALUE_BASIC_MENU_ENUM_CONTROLS_TOGGLE_KEYBOARD, - MENU_ENUM_LABEL_MENU_SETTINGS, - MENU_ENUM_LABEL_VALUE_MENU_SETTINGS, - - MENU_ENUM_LABEL_THUMBNAILS_UPDATER_LIST, - MENU_ENUM_LABEL_VALUE_THUMBNAILS_UPDATER_LIST, - - MENU_ENUM_LABEL_USER_INTERFACE_SETTINGS, - MENU_ENUM_LABEL_MENU_FILE_BROWSER_SETTINGS, - MENU_ENUM_LABEL_RETRO_ACHIEVEMENTS_SETTINGS, - MENU_ENUM_LABEL_VALUE_RETRO_ACHIEVEMENTS_SETTINGS, - MENU_ENUM_LABEL_UPDATER_SETTINGS, - MENU_ENUM_LABEL_VALUE_UPDATER_SETTINGS, - MENU_ENUM_LABEL_NETWORK_SETTINGS, - MENU_ENUM_LABEL_WIFI_SETTINGS, - MENU_ENUM_LABEL_USER_SETTINGS, - MENU_ENUM_LABEL_DIRECTORY_SETTINGS, - MENU_ENUM_LABEL_PRIVACY_SETTINGS, + MENU_LABEL(MENU_SETTINGS), + MENU_LABEL(THUMBNAILS_UPDATER_LIST), + MENU_LABEL(USER_INTERFACE_SETTINGS), + MENU_LABEL(RETRO_ACHIEVEMENTS_SETTINGS), + MENU_LABEL(MENU_FILE_BROWSER_SETTINGS), + MENU_LABEL(UPDATER_SETTINGS), + MENU_LABEL(WIFI_SETTINGS), + MENU_LABEL(USER_SETTINGS), + MENU_LABEL(DIRECTORY_SETTINGS), + MENU_LABEL(PRIVACY_SETTINGS), + MENU_LABEL(NETWORK_SETTINGS), + MENU_LABEL(NETPLAY_LAN_SCAN_SETTINGS), MENU_ENUM_LABEL_CONNECT_WIFI, + MENU_ENUM_LABEL_CONNECT_NETPLAY_LAN, - MENU_ENUM_LABEL_MENU_ENUM_LINEAR_FILTER, - MENU_ENUM_LABEL_VALUE_MENU_ENUM_LINEAR_FILTER, - - MENU_ENUM_LABEL_MENU_ENUM_THROTTLE_FRAMERATE, - MENU_ENUM_LABEL_VALUE_MENU_ENUM_THROTTLE_FRAMERATE, - - MENU_ENUM_LABEL_STATE_SLOT, - MENU_ENUM_LABEL_VALUE_STATE_SLOT, - + MENU_LABEL(MENU_ENUM_LINEAR_FILTER), + MENU_LABEL(MENU_ENUM_THROTTLE_FRAMERATE), + MENU_LABEL(STATE_SLOT), MENU_ENUM_LABEL_PLAYLIST_SETTINGS_BEGIN, - MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DYNAMIC_SUPPORT, MENU_ENUM_LABEL_VALUE_CHEEVOS_SETTINGS, @@ -850,48 +741,25 @@ enum msg_hash_enums MENU_ENUM_LABEL_VALUE_ACCOUNTS_CHEEVOS_SETTINGS, MENU_ENUM_LABEL_VALUE_ACCOUNTS_CHEEVOS_PASSWORD, - MENU_ENUM_LABEL_ACCOUNTS_CHEEVOS_USERNAME, - MENU_ENUM_LABEL_VALUE_ACCOUNTS_CHEEVOS_USERNAME, + MENU_LABEL(ACCOUNTS_CHEEVOS_USERNAME), + MENU_LABEL(CHEEVOS_HARDCORE_MODE_ENABLE), + MENU_LABEL(CHEEVOS_TEST_UNOFFICIAL), + MENU_LABEL(CHEEVOS_ENABLE), + MENU_LABEL(CHEEVOS_DESCRIPTION), + MENU_LABEL(CHEEVOS_UNLOCKED_ACHIEVEMENTS), + MENU_LABEL(CHEEVOS_LOCKED_ACHIEVEMENTS), + MENU_LABEL(ACCOUNTS_RETRO_ACHIEVEMENTS), - MENU_ENUM_LABEL_CHEEVOS_HARDCORE_MODE_ENABLE, - MENU_ENUM_LABEL_VALUE_CHEEVOS_HARDCORE_MODE_ENABLE, + MENU_LABEL(ACCOUNTS_LIST), - MENU_ENUM_LABEL_CHEEVOS_TEST_UNOFFICIAL, - MENU_ENUM_LABEL_VALUE_CHEEVOS_TEST_UNOFFICIAL, - - MENU_ENUM_LABEL_CHEEVOS_ENABLE, - MENU_ENUM_LABEL_VALUE_CHEEVOS_ENABLE, - - MENU_ENUM_LABEL_CHEEVOS_DESCRIPTION, - MENU_ENUM_LABEL_VALUE_CHEEVOS_DESCRIPTION, - - MENU_ENUM_LABEL_CHEEVOS_UNLOCKED_ACHIEVEMENTS, - MENU_ENUM_LABEL_VALUE_CHEEVOS_UNLOCKED_ACHIEVEMENTS, - - MENU_ENUM_LABEL_CHEEVOS_LOCKED_ACHIEVEMENTS, - MENU_ENUM_LABEL_VALUE_CHEEVOS_LOCKED_ACHIEVEMENTS, - - MENU_ENUM_LABEL_ACCOUNTS_RETRO_ACHIEVEMENTS, - MENU_ENUM_LABEL_VALUE_ACCOUNTS_RETRO_ACHIEVEMENTS, - - MENU_ENUM_LABEL_ACCOUNTS_LIST, - MENU_ENUM_LABEL_VALUE_ACCOUNTS_LIST, MENU_ENUM_LABEL_VALUE_ACCOUNTS_LIST_END, MENU_ENUM_LABEL_VALUE_MENU_ENUM_CONTROLS_PROLOG, - MENU_ENUM_LABEL_VALUE_HELP_WHAT_IS_A_CORE, - MENU_ENUM_LABEL_HELP_WHAT_IS_A_CORE, - - MENU_ENUM_LABEL_HELP_LOADING_CONTENT, - MENU_ENUM_LABEL_VALUE_HELP_LOADING_CONTENT, - - MENU_ENUM_LABEL_HELP_LIST, - MENU_ENUM_LABEL_VALUE_HELP_LIST, - - MENU_ENUM_LABEL_VALUE_HELP_CONTROLS, - MENU_ENUM_LABEL_HELP_CONTROLS, - + MENU_LABEL(HELP_WHAT_IS_A_CORE), + MENU_LABEL(HELP_LOADING_CONTENT), + MENU_LABEL(HELP_LIST), + MENU_LABEL(HELP_CONTROLS), MENU_ENUM_LABEL_VALUE_EXTRACTING_PLEASE_WAIT, @@ -943,6 +811,7 @@ enum msg_hash_enums MENU_ENUM_LABEL_DEFERRED_REWIND_SETTINGS_LIST, MENU_ENUM_LABEL_DEFERRED_ONSCREEN_DISPLAY_SETTINGS_LIST, MENU_ENUM_LABEL_DEFERRED_ONSCREEN_OVERLAY_SETTINGS_LIST, + MENU_ENUM_LABEL_DEFERRED_ONSCREEN_NOTIFICATIONS_SETTINGS_LIST, MENU_ENUM_LABEL_DEFERRED_MENU_SETTINGS_LIST, MENU_ENUM_LABEL_DEFERRED_USER_INTERFACE_SETTINGS_LIST, MENU_ENUM_LABEL_DEFERRED_MENU_FILE_BROWSER_SETTINGS_LIST, @@ -950,6 +819,7 @@ enum msg_hash_enums MENU_ENUM_LABEL_DEFERRED_UPDATER_SETTINGS_LIST, MENU_ENUM_LABEL_DEFERRED_WIFI_SETTINGS_LIST, MENU_ENUM_LABEL_DEFERRED_NETWORK_SETTINGS_LIST, + MENU_ENUM_LABEL_DEFERRED_NETPLAY_LAN_SCAN_SETTINGS_LIST, MENU_ENUM_LABEL_DEFERRED_LAKKA_SERVICES_LIST, MENU_ENUM_LABEL_DEFERRED_USER_SETTINGS_LIST, MENU_ENUM_LABEL_DEFERRED_DIRECTORY_SETTINGS_LIST, @@ -961,31 +831,17 @@ enum msg_hash_enums MENU_ENUM_LABEL_DEFERRED_ACCOUNTS_CHEEVOS_LIST, MENU_ENUM_LABEL_DEFERRED_ACCOUNTS_LIST, - - MENU_ENUM_LABEL_VALUE_DOWNLOADED_FILE_DETECT_CORE_LIST, - MENU_ENUM_LABEL_DOWNLOADED_FILE_DETECT_CORE_LIST, - + MENU_LABEL(DOWNLOADED_FILE_DETECT_CORE_LIST), MENU_ENUM_LABEL_VALUE_SEARCH, - MENU_ENUM_LABEL_VALUE_DOWNLOAD_CORE_CONTENT, - MENU_ENUM_LABEL_DOWNLOAD_CORE_CONTENT, - MENU_ENUM_LABEL_DOWNLOAD_CORE_CONTENT_DIRS, - - MENU_ENUM_LABEL_SCAN_THIS_DIRECTORY, - MENU_ENUM_LABEL_VALUE_SCAN_THIS_DIRECTORY, - - MENU_ENUM_LABEL_SCAN_DIRECTORY, - MENU_ENUM_LABEL_VALUE_SCAN_DIRECTORY, - - MENU_ENUM_LABEL_VALUE_SCAN_FILE, - MENU_ENUM_LABEL_SCAN_FILE, - - MENU_ENUM_LABEL_ADD_CONTENT_LIST, - MENU_ENUM_LABEL_VALUE_ADD_CONTENT_LIST, - - MENU_ENUM_LABEL_CONFIGURATIONS_LIST, - MENU_ENUM_LABEL_VALUE_CONFIGURATIONS_LIST, + MENU_LABEL(DOWNLOAD_CORE_CONTENT), + MENU_LABEL(DOWNLOAD_CORE_CONTENT_DIRS), + MENU_LABEL(SCAN_THIS_DIRECTORY), + MENU_LABEL(SCAN_DIRECTORY), + MENU_LABEL(SCAN_FILE), + MENU_LABEL(ADD_CONTENT_LIST), + MENU_LABEL(CONFIGURATIONS_LIST), MENU_ENUM_LABEL_VALUE_DONT_CARE, MENU_ENUM_LABEL_VALUE_LINEAR, @@ -1002,74 +858,36 @@ enum msg_hash_enums /* Online Updater */ - MENU_ENUM_LABEL_UPDATE_ASSETS, - MENU_ENUM_LABEL_UPDATE_LAKKA, - MENU_ENUM_LABEL_UPDATE_CHEATS, - MENU_ENUM_LABEL_UPDATE_AUTOCONFIG_PROFILES, - MENU_ENUM_LABEL_UPDATE_DATABASES, - MENU_ENUM_LABEL_UPDATE_CG_SHADERS, - MENU_ENUM_LABEL_UPDATE_OVERLAYS, - MENU_ENUM_LABEL_UPDATE_GLSL_SHADERS, - MENU_ENUM_LABEL_UPDATE_SLANG_SHADERS, - MENU_ENUM_LABEL_UPDATE_CORE_INFO_FILES, - - MENU_ENUM_LABEL_VALUE_UPDATE_CORE_INFO_FILES, - MENU_ENUM_LABEL_VALUE_UPDATE_ASSETS, - MENU_ENUM_LABEL_VALUE_UPDATE_LAKKA, - MENU_ENUM_LABEL_VALUE_UPDATE_CHEATS, - MENU_ENUM_LABEL_VALUE_UPDATE_AUTOCONFIG_PROFILES, - MENU_ENUM_LABEL_VALUE_UPDATE_DATABASES, - MENU_ENUM_LABEL_VALUE_UPDATE_OVERLAYS, - MENU_ENUM_LABEL_VALUE_UPDATE_CG_SHADERS, - MENU_ENUM_LABEL_VALUE_UPDATE_GLSL_SHADERS, - MENU_ENUM_LABEL_VALUE_UPDATE_SLANG_SHADERS, - - MENU_ENUM_LABEL_INFORMATION, - MENU_ENUM_LABEL_VALUE_INFORMATION, - MENU_ENUM_LABEL_INFORMATION_LIST, - MENU_ENUM_LABEL_VALUE_INFORMATION_LIST, - - MENU_ENUM_LABEL_USE_BUILTIN_PLAYER, - MENU_ENUM_LABEL_VALUE_USE_BUILTIN_PLAYER, - - MENU_ENUM_LABEL_CONTENT_SETTINGS, - MENU_ENUM_LABEL_VALUE_CONTENT_SETTINGS, - - MENU_ENUM_LABEL_LOAD_CONTENT_LIST, - MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_LIST, - - MENU_ENUM_LABEL_NO_SETTINGS_FOUND, - MENU_ENUM_LABEL_VALUE_NO_SETTINGS_FOUND, - - MENU_ENUM_LABEL_NO_PERFORMANCE_COUNTERS, - MENU_ENUM_LABEL_VALUE_NO_PERFORMANCE_COUNTERS, - - - MENU_ENUM_LABEL_FRAME_THROTTLE_SETTINGS, - MENU_ENUM_LABEL_VALUE_FRAME_THROTTLE_SETTINGS, - - MENU_ENUM_LABEL_FRAME_THROTTLE_ENABLE, - MENU_ENUM_LABEL_VALUE_FRAME_THROTTLE_ENABLE, - - MENU_ENUM_LABEL_CORE_ENABLE, - MENU_ENUM_LABEL_VALUE_CORE_ENABLE, - + MENU_LABEL(UPDATE_ASSETS), + MENU_LABEL(UPDATE_LAKKA), + MENU_LABEL(UPDATE_CHEATS), + MENU_LABEL(UPDATE_AUTOCONFIG_PROFILES), + MENU_LABEL(UPDATE_DATABASES), + MENU_LABEL(UPDATE_CG_SHADERS), + MENU_LABEL(UPDATE_OVERLAYS), + MENU_LABEL(UPDATE_GLSL_SHADERS), + MENU_LABEL(UPDATE_SLANG_SHADERS), + MENU_LABEL(UPDATE_CORE_INFO_FILES), + MENU_LABEL(INFORMATION), + MENU_LABEL(INFORMATION_LIST), + MENU_LABEL(USE_BUILTIN_PLAYER), + MENU_LABEL(CONTENT_SETTINGS), + MENU_LABEL(LOAD_CONTENT_LIST), + MENU_LABEL(NO_SETTINGS_FOUND), + MENU_LABEL(NO_NETWORKS_FOUND), + MENU_LABEL(NO_PERFORMANCE_COUNTERS), + MENU_LABEL(FRAME_THROTTLE_SETTINGS), + MENU_LABEL(FRAME_THROTTLE_ENABLE), + MENU_LABEL(CORE_ENABLE), /* Netplay */ - MENU_ENUM_LABEL_NETPLAY_ENABLE_HOST, - MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE_HOST, - MENU_ENUM_LABEL_NETPLAY_ENABLE_CLIENT, - MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE_CLIENT, - MENU_ENUM_LABEL_NETPLAY_DISCONNECT, - MENU_ENUM_LABEL_VALUE_NETPLAY_DISCONNECT, - MENU_ENUM_LABEL_NETPLAY_SETTINGS, - MENU_ENUM_LABEL_VALUE_NETPLAY_SETTINGS, - - - - MENU_ENUM_LABEL_COLLAPSE_SUBGROUPS_ENABLE, - MENU_ENUM_LABEL_VALUE_COLLAPSE_SUBGROUPS_ENABLE, + MENU_LABEL(NETPLAY_ENABLE_HOST), + MENU_LABEL(NETPLAY_ENABLE_CLIENT), + MENU_LABEL(NETPLAY_DISCONNECT), + MENU_LABEL(NETPLAY_SETTINGS), + MENU_LABEL(NETPLAY_CONNECT_TO), + MENU_LABEL(NO_NETPLAY_HOSTS_FOUND), MENU_ENUM_LABEL_RESET, MENU_ENUM_LABEL_SLOWMOTION, @@ -1077,86 +895,54 @@ enum msg_hash_enums MENU_ENUM_LABEL_CHEAT_TOGGLE, MENU_ENUM_LABEL_PAUSE_TOGGLE, - MENU_ENUM_LABEL_PAUSE_LIBRETRO, - MENU_ENUM_LABEL_VALUE_PAUSE_LIBRETRO, - - MENU_ENUM_LABEL_VALUE_DIRECTORY_NOT_FOUND, - - MENU_ENUM_LABEL_NO_ITEMS, - MENU_ENUM_LABEL_VALUE_NO_ITEMS, - - MENU_ENUM_LABEL_NO_PLAYLISTS, - MENU_ENUM_LABEL_VALUE_NO_PLAYLISTS, - - MENU_ENUM_LABEL_NO_SHADER_PARAMETERS, + MENU_LABEL(PAUSE_LIBRETRO), + MENU_LABEL(DIRECTORY_NOT_FOUND), + MENU_LABEL(NO_ITEMS), + MENU_LABEL(NO_PLAYLISTS), MSG_INTERFACE, MSG_MEMORY, MSG_IN_BYTES, MSG_IN_MEGABYTES, MSG_IN_GIGABYTES, - MSG_INTERNAL_MEMORY, + MSG_INTERNAL_STORAGE, + MSG_REMOVABLE_STORAGE, MSG_APPLICATION_DIR, MSG_EXTERNAL_APPLICATION_DIR, - MENU_ENUM_LABEL_ARCHIVE_MODE, - MENU_ENUM_LABEL_VALUE_ARCHIVE_MODE, - MENU_ENUM_LABEL_VALUE_SHADER_OPTIONS, - MENU_ENUM_LABEL_VALUE_USE_THIS_DIRECTORY, - MENU_ENUM_LABEL_USE_THIS_DIRECTORY, - MENU_ENUM_LABEL_VALUE_CORE_OPTIONS, - MENU_ENUM_LABEL_VALUE_NO_SHADER_PARAMETERS, - - MENU_ENUM_LABEL_NO_CORE_INFORMATION_AVAILABLE, - MENU_ENUM_LABEL_VALUE_NO_CORE_INFORMATION_AVAILABLE, - - MENU_ENUM_LABEL_NO_CORES_AVAILABLE, - MENU_ENUM_LABEL_VALUE_NO_CORES_AVAILABLE, + MENU_LABEL(ARCHIVE_MODE), + MENU_LABEL(SHADER_OPTIONS), + MENU_LABEL(USE_THIS_DIRECTORY), + MENU_LABEL(CORE_OPTIONS), + MENU_LABEL(NO_SHADER_PARAMETERS), + MENU_LABEL(NO_CORE_INFORMATION_AVAILABLE), + MENU_LABEL(NO_CORES_AVAILABLE), /* Audio */ - MENU_ENUM_LABEL_AUDIO_ENABLE, - MENU_ENUM_LABEL_AUDIO_SYNC, - MENU_ENUM_LABEL_AUDIO_VOLUME, - MENU_ENUM_LABEL_AUDIO_LATENCY, - MENU_ENUM_LABEL_AUDIO_RATE_CONTROL_DELTA, - MENU_ENUM_LABEL_AUDIO_MAX_TIMING_SKEW, - MENU_ENUM_LABEL_AUDIO_DEVICE, - MENU_ENUM_LABEL_AUDIO_BLOCK_FRAMES, - MENU_ENUM_LABEL_AUDIO_MUTE, - MENU_ENUM_LABEL_AUDIO_OUTPUT_RATE, - MENU_ENUM_LABEL_AUDIO_DSP_PLUGIN, + MENU_LABEL(AUDIO_ENABLE), + MENU_LABEL(AUDIO_MAX_TIMING_SKEW), + MENU_LABEL(AUDIO_OUTPUT_RATE), + MENU_LABEL(AUDIO_DEVICE), + MENU_LABEL(AUDIO_BLOCK_FRAMES), + MENU_LABEL(AUDIO_DSP_PLUGIN), + MENU_LABEL(AUDIO_MUTE), + MENU_LABEL(AUDIO_SYNC), + MENU_LABEL(AUDIO_VOLUME), + MENU_LABEL(AUDIO_RATE_CONTROL_DELTA), + MENU_LABEL(AUDIO_LATENCY), + MENU_LABEL(SAVE_STATE), + MENU_LABEL(LOAD_STATE), + MENU_LABEL(UNDO_LOAD_STATE), + MENU_LABEL(UNDO_SAVE_STATE), - MENU_ENUM_LABEL_VALUE_AUDIO_MUTE, - MENU_ENUM_LABEL_VALUE_AUDIO_OUTPUT_RATE, - MENU_ENUM_LABEL_VALUE_AUDIO_DSP_PLUGIN, - MENU_ENUM_LABEL_VALUE_AUDIO_BLOCK_FRAMES, - MENU_ENUM_LABEL_VALUE_AUDIO_ENABLE, - MENU_ENUM_LABEL_VALUE_AUDIO_SYNC, - MENU_ENUM_LABEL_VALUE_AUDIO_VOLUME, - MENU_ENUM_LABEL_VALUE_AUDIO_LATENCY, - MENU_ENUM_LABEL_VALUE_AUDIO_RATE_CONTROL_DELTA, - MENU_ENUM_LABEL_VALUE_AUDIO_MAX_TIMING_SKEW, - MENU_ENUM_LABEL_VALUE_AUDIO_DEVICE, - - MENU_ENUM_LABEL_SAVE_STATE, - MENU_ENUM_LABEL_VALUE_LOAD_STATE, - MENU_ENUM_LABEL_VALUE_UNDO_LOAD_STATE, - MENU_ENUM_LABEL_VALUE_UNDO_SAVE_STATE, - MENU_ENUM_LABEL_VALUE_SAVE_STATE, - MENU_ENUM_LABEL_LOAD_STATE, - MENU_ENUM_LABEL_UNDO_LOAD_STATE, - MENU_ENUM_LABEL_UNDO_SAVE_STATE, - MENU_ENUM_LABEL_REWIND, - MENU_ENUM_LABEL_NETPLAY_FLIP_PLAYERS, - MENU_ENUM_LABEL_CHEAT_INDEX_MINUS, - MENU_ENUM_LABEL_CHEAT_INDEX_PLUS, - MENU_ENUM_LABEL_SCREENSHOT_DIRECTORY, - MENU_ENUM_LABEL_SHADER_NEXT, - MENU_ENUM_LABEL_SHADER_PREV, - MENU_ENUM_LABEL_FRAME_ADVANCE, - MENU_ENUM_LABEL_FPS_SHOW, - MENU_ENUM_LABEL_VALUE_FPS_SHOW, - MENU_ENUM_LABEL_MOVIE_RECORD_TOGGLE, + MENU_LABEL(NETPLAY_FLIP_PLAYERS), + MENU_LABEL(CHEAT_INDEX_MINUS), + MENU_LABEL(CHEAT_INDEX_PLUS), + MENU_LABEL(SHADER_NEXT), + MENU_LABEL(SHADER_PREV), + MENU_LABEL(FRAME_ADVANCE), + MENU_LABEL(FPS_SHOW), + MENU_LABEL(MOVIE_RECORD_TOGGLE), MENU_ENUM_LABEL_L_X_PLUS, MENU_ENUM_LABEL_L_X_MINUS, MENU_ENUM_LABEL_L_Y_PLUS, @@ -1165,144 +951,88 @@ enum msg_hash_enums MENU_ENUM_LABEL_R_X_MINUS, MENU_ENUM_LABEL_R_Y_MINUS, MENU_ENUM_LABEL_R_Y_PLUS, - MENU_ENUM_LABEL_BLOCK_SRAM_OVERWRITE, - MENU_ENUM_LABEL_VALUE_BLOCK_SRAM_OVERWRITE, - MENU_ENUM_LABEL_CORE_SPECIFIC_CONFIG, - MENU_ENUM_LABEL_VALUE_CORE_SPECIFIC_CONFIG, - MENU_ENUM_LABEL_GAME_SPECIFIC_OPTIONS, - MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_OPTIONS, - MENU_ENUM_LABEL_GAME_SPECIFIC_OPTIONS_CREATE, - MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_OPTIONS_CREATE, - MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_OPTIONS_IN_USE, - MENU_ENUM_LABEL_GAME_SPECIFIC_OPTIONS_IN_USE, - MENU_ENUM_LABEL_AUTO_OVERRIDES_ENABLE, - MENU_ENUM_LABEL_VALUE_AUTO_OVERRIDES_ENABLE, - MENU_ENUM_LABEL_AUTO_REMAPS_ENABLE, - MENU_ENUM_LABEL_VALUE_AUTO_REMAPS_ENABLE, - MENU_ENUM_LABEL_AUTO_SHADERS_ENABLE, - MENU_ENUM_LABEL_VALUE_AUTO_SHADERS_ENABLE, - MENU_ENUM_LABEL_RGUI_SHOW_START_SCREEN, - MENU_ENUM_LABEL_VALUE_RGUI_SHOW_START_SCREEN, - MENU_ENUM_LABEL_SCREENSHOT, - MENU_ENUM_LABEL_REWIND_GRANULARITY, - MENU_ENUM_LABEL_VALUE_REWIND_GRANULARITY, - MENU_ENUM_LABEL_VALUE_RUN, - MENU_ENUM_LABEL_SCREEN_RESOLUTION, - MENU_ENUM_LABEL_VALUE_SCREEN_RESOLUTION, - MENU_ENUM_LABEL_TITLE_COLOR, - MENU_ENUM_LABEL_VALUE_TITLE_COLOR, - MENU_ENUM_LABEL_SAVESTATE_AUTO_SAVE, - MENU_ENUM_LABEL_SAVESTATE_AUTO_LOAD, - MENU_ENUM_LABEL_SAVESTATE_AUTO_INDEX, - MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_INDEX, - MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_SAVE, - MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_LOAD, - MENU_ENUM_LABEL_SYSTEM_DIRECTORY, - MENU_ENUM_LABEL_SUSPEND_SCREENSAVER_ENABLE, - MENU_ENUM_LABEL_VALUE_SUSPEND_SCREENSAVER_ENABLE, - MENU_ENUM_LABEL_DPI_OVERRIDE_ENABLE, - MENU_ENUM_LABEL_VALUE_DPI_OVERRIDE_ENABLE, - MENU_ENUM_LABEL_DPI_OVERRIDE_VALUE, - MENU_ENUM_LABEL_VALUE_DPI_OVERRIDE_VALUE, - MENU_ENUM_LABEL_XMB_SCALE_FACTOR, + MENU_LABEL(BLOCK_SRAM_OVERWRITE), + MENU_LABEL(CORE_SPECIFIC_CONFIG), + MENU_LABEL(GAME_SPECIFIC_OPTIONS), + MENU_LABEL(GAME_SPECIFIC_OPTIONS_CREATE), + MENU_LABEL(GAME_SPECIFIC_OPTIONS_IN_USE), + MENU_LABEL(AUTO_OVERRIDES_ENABLE), + MENU_LABEL(AUTO_REMAPS_ENABLE), + MENU_LABEL(AUTO_SHADERS_ENABLE), + MENU_LABEL(RGUI_SHOW_START_SCREEN), + MENU_LABEL(SCREENSHOT), + MENU_LABEL(REWIND), + MENU_LABEL(REWIND_GRANULARITY), + + MENU_ENUM_LABEL_VALUE_RUN, + + MENU_LABEL(SCREEN_RESOLUTION), + MENU_LABEL(TITLE_COLOR), + MENU_LABEL(SAVESTATE_AUTO_INDEX), + MENU_LABEL(SAVESTATE_AUTO_SAVE), + MENU_LABEL(SAVESTATE_AUTO_LOAD), + MENU_LABEL(SAVESTATE_THUMBNAIL_ENABLE), + + MENU_LABEL(SUSPEND_SCREENSAVER_ENABLE), + MENU_LABEL(DPI_OVERRIDE_ENABLE), + MENU_LABEL(DPI_OVERRIDE_VALUE), MENU_ENUM_LABEL_VOLUME_UP, MENU_ENUM_LABEL_VOLUME_DOWN, - MENU_ENUM_LABEL_LOG_VERBOSITY, - MENU_ENUM_LABEL_VALUE_LOG_VERBOSITY, + + MENU_LABEL(LOG_VERBOSITY), + MENU_ENUM_LABEL_OVERLAY_NEXT, - MENU_ENUM_LABEL_NETPLAY_ENABLE, - MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE, - MENU_ENUM_LABEL_SSH_ENABLE, - MENU_ENUM_LABEL_VALUE_SSH_ENABLE, - MENU_ENUM_LABEL_SAMBA_ENABLE, - MENU_ENUM_LABEL_VALUE_SAMBA_ENABLE, - MENU_ENUM_LABEL_BLUETOOTH_ENABLE, - MENU_ENUM_LABEL_VALUE_BLUETOOTH_ENABLE, - MENU_ENUM_LABEL_NETPLAY_CLIENT_SWAP_INPUT, - MENU_ENUM_LABEL_VALUE_NETPLAY_CLIENT_SWAP_INPUT, - MENU_ENUM_LABEL_NETPLAY_DELAY_FRAMES, - MENU_ENUM_LABEL_VALUE_NETPLAY_DELAY_FRAMES, - MENU_ENUM_LABEL_NETPLAY_CHECK_FRAMES, - MENU_ENUM_LABEL_VALUE_NETPLAY_CHECK_FRAMES, - MENU_ENUM_LABEL_NETPLAY_SPECTATOR_MODE_ENABLE, - MENU_ENUM_LABEL_VALUE_NETPLAY_SPECTATOR_MODE_ENABLE, - MENU_ENUM_LABEL_NETPLAY_TCP_UDP_PORT, - MENU_ENUM_LABEL_VALUE_NETPLAY_TCP_UDP_PORT, - MENU_ENUM_LABEL_SORT_SAVEFILES_ENABLE, - MENU_ENUM_LABEL_VALUE_SORT_SAVEFILES_ENABLE, - MENU_ENUM_LABEL_SORT_SAVESTATES_ENABLE, - MENU_ENUM_LABEL_VALUE_SORT_SAVESTATES_ENABLE, - MENU_ENUM_LABEL_NETPLAY_IP_ADDRESS, - MENU_ENUM_LABEL_VALUE_NETPLAY_IP_ADDRESS, - MENU_ENUM_LABEL_NETPLAY_MODE, - MENU_ENUM_LABEL_VALUE_NETPLAY_MODE, - MENU_ENUM_LABEL_PERFCNT_ENABLE, - MENU_ENUM_LABEL_VALUE_PERFCNT_ENABLE, - MENU_ENUM_LABEL_OVERLAY_SCALE, - MENU_ENUM_LABEL_VALUE_OVERLAY_SCALE, - MENU_ENUM_LABEL_KEYBOARD_OVERLAY_PRESET, - MENU_ENUM_LABEL_VALUE_KEYBOARD_OVERLAY_PRESET, - MENU_ENUM_LABEL_OVERLAY_PRESET, - MENU_ENUM_LABEL_VALUE_OVERLAY_PRESET, - MENU_ENUM_LABEL_OVERLAY_OPACITY, - MENU_ENUM_LABEL_VALUE_OVERLAY_OPACITY, - MENU_ENUM_LABEL_MENU_ENUM_WALLPAPER, - MENU_ENUM_LABEL_VALUE_MENU_ENUM_WALLPAPER, + MENU_LABEL(NETPLAY_ENABLE), + MENU_LABEL(SSH_ENABLE), + MENU_LABEL(SAMBA_ENABLE), + MENU_LABEL(BLUETOOTH_ENABLE), + MENU_LABEL(NETPLAY_CLIENT_SWAP_INPUT), + MENU_LABEL(NETPLAY_DELAY_FRAMES), + MENU_LABEL(NETPLAY_CHECK_FRAMES), + MENU_LABEL(NETPLAY_SPECTATOR_MODE_ENABLE), + MENU_LABEL(NETPLAY_TCP_UDP_PORT), + MENU_LABEL(NETPLAY_NAT_TRAVERSAL), + MENU_LABEL(SORT_SAVEFILES_ENABLE), + MENU_LABEL(SORT_SAVESTATES_ENABLE), + MENU_LABEL(NETPLAY_IP_ADDRESS), + MENU_LABEL(NETPLAY_MODE), + MENU_LABEL(PERFCNT_ENABLE), + MENU_LABEL(OVERLAY_SCALE), + MENU_LABEL(OVERLAY_PRESET), + MENU_LABEL(OVERLAY_OPACITY), - MENU_ENUM_LABEL_FASTFORWARD_RATIO, - MENU_ENUM_LABEL_VALUE_FASTFORWARD_RATIO, + MENU_LABEL(FASTFORWARD_RATIO), + MENU_LABEL(REWIND_ENABLE), - - MENU_ENUM_LABEL_REWIND_ENABLE, - MENU_ENUM_LABEL_VALUE_REWIND_ENABLE, MENU_ENUM_LABEL_ENABLE_HOTKEY, MENU_ENUM_LABEL_DISK_EJECT_TOGGLE, MENU_ENUM_LABEL_DISK_NEXT, MENU_ENUM_LABEL_GRAB_MOUSE_TOGGLE, - MENU_ENUM_LABEL_MENU_ENUM_TOGGLE, - MENU_ENUM_LABEL_STATE_SLOT_DECREASE, - MENU_ENUM_LABEL_STATE_SLOT_INCREASE, + MENU_ENUM_LABEL_GAME_FOCUS_TOGGLE, + MENU_LABEL(STATE_SLOT_DECREASE), + MENU_LABEL(STATE_SLOT_INCREASE), - MENU_ENUM_LABEL_LIBRETRO_LOG_LEVEL, - MENU_ENUM_LABEL_VALUE_LIBRETRO_LOG_LEVEL, - - - MENU_ENUM_LABEL_AUTOSAVE_INTERVAL, - MENU_ENUM_LABEL_VALUE_AUTOSAVE_INTERVAL, - MENU_ENUM_LABEL_CONFIG_SAVE_ON_EXIT, - MENU_ENUM_LABEL_VALUE_CONFIG_SAVE_ON_EXIT, - - MENU_ENUM_LABEL_CONFIRM_ON_EXIT, - MENU_ENUM_LABEL_VALUE_CONFIRM_ON_EXIT, - - MENU_ENUM_LABEL_SHOW_HIDDEN_FILES, - MENU_ENUM_LABEL_VALUE_SHOW_HIDDEN_FILES, + MENU_LABEL(LIBRETRO_LOG_LEVEL), + MENU_LABEL(AUTOSAVE_INTERVAL), + MENU_LABEL(CONFIG_SAVE_ON_EXIT), + MENU_LABEL(CONFIGURATION_LIST), + MENU_LABEL(CONFIRM_ON_EXIT), + MENU_LABEL(SHOW_HIDDEN_FILES), /* Driver settings */ - MENU_ENUM_LABEL_AUDIO_DRIVER, - MENU_ENUM_LABEL_JOYPAD_DRIVER, - MENU_ENUM_LABEL_MENU_DRIVER, - MENU_ENUM_LABEL_LOCATION_DRIVER, - MENU_ENUM_LABEL_CAMERA_DRIVER, - MENU_ENUM_LABEL_WIFI_DRIVER, - MENU_ENUM_LABEL_AUDIO_RESAMPLER_DRIVER, - MENU_ENUM_LABEL_RECORD_DRIVER, - MENU_ENUM_LABEL_VIDEO_DRIVER, - MENU_ENUM_LABEL_INPUT_DRIVER, - - MENU_ENUM_LABEL_VALUE_AUDIO_RESAMPLER_DRIVER, - MENU_ENUM_LABEL_VALUE_AUDIO_DRIVER, - MENU_ENUM_LABEL_VALUE_JOYPAD_DRIVER, - MENU_ENUM_LABEL_VALUE_INPUT_DRIVER, - MENU_ENUM_LABEL_VALUE_VIDEO_DRIVER, - MENU_ENUM_LABEL_VALUE_LOCATION_DRIVER, - MENU_ENUM_LABEL_VALUE_CAMERA_DRIVER, - MENU_ENUM_LABEL_VALUE_WIFI_DRIVER, - MENU_ENUM_LABEL_VALUE_RECORD_DRIVER, - MENU_ENUM_LABEL_VALUE_MENU_DRIVER, + MENU_LABEL(AUDIO_DRIVER), + MENU_LABEL(JOYPAD_DRIVER), + MENU_LABEL(MENU_DRIVER), + MENU_LABEL(LOCATION_DRIVER), + MENU_LABEL(CAMERA_DRIVER), + MENU_LABEL(WIFI_DRIVER), + MENU_LABEL(AUDIO_RESAMPLER_DRIVER), + MENU_LABEL(RECORD_DRIVER), + MENU_LABEL(VIDEO_DRIVER), + MENU_LABEL(INPUT_DRIVER), MENU_ENUM_LABEL_VIDEO_DRIVER_GL, MENU_ENUM_LABEL_VIDEO_DRIVER_SDL2, @@ -1312,148 +1042,87 @@ enum msg_hash_enums MENU_ENUM_LABEL_VIDEO_DRIVER_SUNXI, MENU_ENUM_LABEL_VIDEO_DRIVER_DRM, - MENU_ENUM_LABEL_MENU_ENUM_DRIVER, - MENU_ENUM_LABEL_VALUE_MENU_ENUM_DRIVER, + MENU_LABEL(MENU_ENUM_DRIVER), MENU_ENUM_LABEL_AUDIO_RESAMPLER_DRIVER_SINC, MENU_ENUM_LABEL_AUDIO_RESAMPLER_DRIVER_CC, - MENU_ENUM_LABEL_SAVEFILE_DIRECTORY, - MENU_ENUM_LABEL_VALUE_SAVEFILE_DIRECTORY, - MENU_ENUM_LABEL_SAVESTATE_DIRECTORY, - MENU_ENUM_LABEL_VALUE_SAVESTATE_DIRECTORY, - MENU_ENUM_LABEL_DYNAMIC_WALLPAPERS_DIRECTORY, - MENU_ENUM_LABEL_VALUE_DYNAMIC_WALLPAPERS_DIRECTORY, - MENU_ENUM_LABEL_THUMBNAILS_DIRECTORY, - MENU_ENUM_LABEL_VALUE_THUMBNAILS_DIRECTORY, + MENU_LABEL(SAVEFILE_DIRECTORY), + MENU_LABEL(SAVESTATE_DIRECTORY), + MENU_LABEL(DYNAMIC_WALLPAPERS_DIRECTORY), + MENU_LABEL(THUMBNAILS_DIRECTORY), - MENU_ENUM_LABEL_SLOWMOTION_RATIO, - MENU_ENUM_LABEL_VALUE_SLOWMOTION_RATIO, - - MENU_ENUM_LABEL_TURBO, + MENU_LABEL(SLOWMOTION_RATIO), + MENU_LABEL(TURBO), /* Privacy settings */ - MENU_ENUM_LABEL_CAMERA_ALLOW, - MENU_ENUM_LABEL_LOCATION_ALLOW, - - MENU_ENUM_LABEL_VALUE_CAMERA_ALLOW, - MENU_ENUM_LABEL_VALUE_LOCATION_ALLOW, - + MENU_LABEL(CAMERA_ALLOW), + MENU_LABEL(LOCATION_ALLOW), /* RDB Settings */ - MENU_ENUM_LABEL_RDB_ENTRY_ANALOG, - MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ANALOG, - MENU_ENUM_LABEL_RDB_ENTRY_SERIAL, - MENU_ENUM_LABEL_VALUE_RDB_ENTRY_SERIAL, - MENU_ENUM_LABEL_VALUE_RDB_ENTRY_RUMBLE, - MENU_ENUM_LABEL_VALUE_RDB_ENTRY_COOP, - MENU_ENUM_LABEL_RDB_ENTRY_RUMBLE, - MENU_ENUM_LABEL_RDB_ENTRY_COOP, - MENU_ENUM_LABEL_RDB_ENTRY_START_CONTENT, - MENU_ENUM_LABEL_RDB_ENTRY_DESCRIPTION, - MENU_ENUM_LABEL_RDB_ENTRY_GENRE, - MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ENHANCEMENT_HW, - MENU_ENUM_LABEL_RDB_ENTRY_ENHANCEMENT_HW, - MENU_ENUM_LABEL_RDB_ENTRY_FRANCHISE, - MENU_ENUM_LABEL_RDB_ENTRY_ORIGIN, - MENU_ENUM_LABEL_RDB_ENTRY_DEVELOPER, - MENU_ENUM_LABEL_RDB_ENTRY_NAME, - MENU_ENUM_LABEL_RDB_ENTRY_PUBLISHER, - MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ESRB_RATING, - MENU_ENUM_LABEL_RDB_ENTRY_ESRB_RATING, - MENU_ENUM_LABEL_VALUE_RDB_ENTRY_BBFC_RATING, - MENU_ENUM_LABEL_RDB_ENTRY_BBFC_RATING, - MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ELSPA_RATING, - MENU_ENUM_LABEL_RDB_ENTRY_ELSPA_RATING, - MENU_ENUM_LABEL_VALUE_RDB_ENTRY_PEGI_RATING, - MENU_ENUM_LABEL_RDB_ENTRY_PEGI_RATING, - MENU_ENUM_LABEL_VALUE_RDB_ENTRY_CERO_RATING, - MENU_ENUM_LABEL_RDB_ENTRY_CERO_RATING, - MENU_ENUM_LABEL_RDB_ENTRY_EDGE_MAGAZINE_RATING, - MENU_ENUM_LABEL_VALUE_RDB_ENTRY_EDGE_MAGAZINE_ISSUE, - MENU_ENUM_LABEL_RDB_ENTRY_EDGE_MAGAZINE_ISSUE, - MENU_ENUM_LABEL_RDB_ENTRY_EDGE_MAGAZINE_REVIEW, - MENU_ENUM_LABEL_RDB_ENTRY_FAMITSU_MAGAZINE_RATING, - MENU_ENUM_LABEL_RDB_ENTRY_TGDB_RATING, - MENU_ENUM_LABEL_RDB_ENTRY_RELEASE_MONTH, - MENU_ENUM_LABEL_RDB_ENTRY_RELEASE_YEAR, - MENU_ENUM_LABEL_RDB_ENTRY_MAX_USERS, - MENU_ENUM_LABEL_RDB_ENTRY_SHA1, - MENU_ENUM_LABEL_RDB_ENTRY_MD5, - MENU_ENUM_LABEL_RDB_ENTRY_CRC32, - MENU_ENUM_LABEL_VALUE_RDB_ENTRY_START_CONTENT, - MENU_ENUM_LABEL_VALUE_RDB_ENTRY_DESCRIPTION, - MENU_ENUM_LABEL_VALUE_RDB_ENTRY_GENRE, - MENU_ENUM_LABEL_VALUE_RDB_ENTRY_NAME, - MENU_ENUM_LABEL_VALUE_RDB_ENTRY_PUBLISHER, - MENU_ENUM_LABEL_VALUE_RDB_ENTRY_DEVELOPER, - MENU_ENUM_LABEL_VALUE_RDB_ENTRY_ORIGIN, - MENU_ENUM_LABEL_VALUE_RDB_ENTRY_FRANCHISE, - MENU_ENUM_LABEL_VALUE_RDB_ENTRY_EDGE_MAGAZINE_RATING, + MENU_LABEL(RDB_ENTRY_ANALOG), + MENU_LABEL(RDB_ENTRY_SERIAL), + MENU_LABEL(RDB_ENTRY_RUMBLE), + MENU_LABEL(RDB_ENTRY_COOP), + MENU_LABEL(RDB_ENTRY_START_CONTENT), + MENU_LABEL(RDB_ENTRY_DESCRIPTION), + MENU_LABEL(RDB_ENTRY_GENRE), + MENU_LABEL(RDB_ENTRY_ENHANCEMENT_HW), + MENU_LABEL(RDB_ENTRY_FRANCHISE), + MENU_LABEL(RDB_ENTRY_ORIGIN), + MENU_LABEL(RDB_ENTRY_DEVELOPER), + MENU_LABEL(RDB_ENTRY_NAME), + MENU_LABEL(RDB_ENTRY_PUBLISHER), + MENU_LABEL(RDB_ENTRY_ESRB_RATING), + MENU_LABEL(RDB_ENTRY_BBFC_RATING), + MENU_LABEL(RDB_ENTRY_ELSPA_RATING), + MENU_LABEL(RDB_ENTRY_PEGI_RATING), + MENU_LABEL(RDB_ENTRY_CERO_RATING), + MENU_LABEL(RDB_ENTRY_EDGE_MAGAZINE_RATING), + MENU_LABEL(RDB_ENTRY_EDGE_MAGAZINE_ISSUE), + MENU_LABEL(RDB_ENTRY_EDGE_MAGAZINE_REVIEW), + MENU_LABEL(RDB_ENTRY_FAMITSU_MAGAZINE_RATING), + MENU_LABEL(RDB_ENTRY_TGDB_RATING), + MENU_LABEL(RDB_ENTRY_RELEASE_MONTH), + MENU_LABEL(RDB_ENTRY_RELEASE_YEAR), + MENU_LABEL(RDB_ENTRY_MAX_USERS), + MENU_LABEL(RDB_ENTRY_SHA1), + MENU_LABEL(RDB_ENTRY_MD5), + MENU_LABEL(RDB_ENTRY_CRC32), - MENU_ENUM_LABEL_VALUE_RDB_ENTRY_EDGE_MAGAZINE_REVIEW, - - MENU_ENUM_LABEL_VALUE_RDB_ENTRY_FAMITSU_MAGAZINE_RATING, - - MENU_ENUM_LABEL_VALUE_RDB_ENTRY_TGDB_RATING, - - MENU_ENUM_LABEL_VALUE_RDB_ENTRY_RELEASE_MONTH, - MENU_ENUM_LABEL_VALUE_RDB_ENTRY_RELEASE_YEAR, - MENU_ENUM_LABEL_VALUE_RDB_ENTRY_MAX_USERS, - MENU_ENUM_LABEL_VALUE_RDB_ENTRY_SHA1, - MENU_ENUM_LABEL_VALUE_RDB_ENTRY_MD5, - MENU_ENUM_LABEL_VALUE_RDB_ENTRY_CRC32, - - MENU_ENUM_LABEL_NO_PLAYLIST_ENTRIES_AVAILABLE, - MENU_ENUM_LABEL_VALUE_NO_PLAYLIST_ENTRIES_AVAILABLE, + MENU_LABEL(NO_PLAYLIST_ENTRIES_AVAILABLE), MENU_ENUM_LABEL_VIDEO_SHADER_DEFAULT_FILTER, MENU_ENUM_LABEL_VIDEO_SHADER_FILTER_PASS, MENU_ENUM_LABEL_VIDEO_SHADER_SCALE_PASS, - MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_NUM_PASSES, - MENU_ENUM_LABEL_VIDEO_SHADER_NUM_PASSES, - MENU_ENUM_LABEL_VALUE_CHEAT_NUM_PASSES, - MENU_ENUM_LABEL_CHEAT_NUM_PASSES, - MENU_ENUM_LABEL_VALUE_NO_DISK, + MENU_LABEL(VIDEO_SHADER_NUM_PASSES), + MENU_LABEL(CHEAT_NUM_PASSES), + + MENU_LABEL(NO_DISK), MENU_ENUM_LABEL_VALUE_MD5, MENU_ENUM_LABEL_VALUE_SHA1, MENU_ENUM_LABEL_VALUE_CRC, MENU_ENUM_LABEL_VALUE_MORE, - MENU_ENUM_LABEL_VIDEO_TAB, - MENU_ENUM_LABEL_VALUE_VIDEO_TAB, + MENU_LABEL(VIDEO_TAB), + MENU_LABEL(MUSIC_TAB), + MENU_LABEL(IMAGES_TAB), + MENU_LABEL(HORIZONTAL_MENU), + MENU_LABEL(SETTINGS_TAB), + MENU_LABEL(HISTORY_TAB), + MENU_LABEL(ADD_TAB), + MENU_LABEL(PLAYLISTS_TAB), + MENU_LABEL(MAIN_MENU), + MENU_LABEL(INPUT_SETTINGS), - MENU_ENUM_LABEL_MUSIC_TAB, - MENU_ENUM_LABEL_VALUE_MUSIC_TAB, - - MENU_ENUM_LABEL_IMAGES_TAB, - MENU_ENUM_LABEL_VALUE_IMAGES_TAB, - - MENU_ENUM_LABEL_HORIZONTAL_MENU, - MENU_ENUM_LABEL_VALUE_HORIZONTAL_MENU, - - MENU_ENUM_LABEL_SETTINGS_TAB, - MENU_ENUM_LABEL_VALUE_SETTINGS_TAB, - - MENU_ENUM_LABEL_HISTORY_TAB, - MENU_ENUM_LABEL_VALUE_HISTORY_TAB, - - MENU_ENUM_LABEL_ADD_TAB, - MENU_ENUM_LABEL_VALUE_ADD_TAB, - - MENU_ENUM_LABEL_PLAYLISTS_TAB, - MENU_ENUM_LABEL_VALUE_PLAYLISTS_TAB, - - MENU_ENUM_LABEL_MAIN_MENU, - MENU_ENUM_LABEL_VALUE_MAIN_MENU, - MENU_ENUM_LABEL_VALUE_SETTINGS, - MENU_ENUM_LABEL_VALUE_INPUT_SETTINGS, - MENU_ENUM_LABEL_VALUE_ON, - MENU_ENUM_LABEL_VALUE_OFF, + MENU_LABEL(ON), + MENU_LABEL(OFF), + MENU_LABEL(DISABLED), + MENU_LABEL(ENABLED), MENU_ENUM_LABEL_VALUE_TRUE, MENU_ENUM_LABEL_VALUE_FALSE, MENU_ENUM_LABEL_VALUE_COMP, @@ -1479,104 +1148,62 @@ enum msg_hash_enums MENU_ENUM_LABEL_VALUE_SLANGP, MENU_ENUM_LABEL_VALUE_RETROPAD, + MENU_ENUM_LABEL_VALUE_RETROPAD_WITH_ANALOG, MENU_ENUM_LABEL_VALUE_RETROKEYBOARD, - MENU_ENUM_LABEL_SYSTEM_BGM_ENABLE, - MENU_ENUM_LABEL_VALUE_SYSTEM_BGM_ENABLE, + MENU_LABEL(SYSTEM_BGM_ENABLE), - - - MENU_ENUM_LABEL_NETWORK_CMD_ENABLE, - MENU_ENUM_LABEL_VALUE_NETWORK_CMD_ENABLE, - MENU_ENUM_LABEL_NETWORK_CMD_PORT, - MENU_ENUM_LABEL_VALUE_NETWORK_CMD_PORT, - MENU_ENUM_LABEL_STDIN_CMD_ENABLE, - MENU_ENUM_LABEL_NETWORK_REMOTE_ENABLE, - MENU_ENUM_LABEL_NETWORK_REMOTE_PORT, - MENU_ENUM_LABEL_VALUE_NETWORK_REMOTE_PORT, + MENU_LABEL(NETWORK_CMD_ENABLE), + MENU_LABEL(NETWORK_CMD_PORT), + MENU_LABEL(STDIN_CMD_ENABLE), + MENU_LABEL(NETWORK_REMOTE_ENABLE), + MENU_LABEL(NETWORK_REMOTE_PORT), MENU_ENUM_LABEL_NETWORK_REMOTE_USER_1_ENABLE, MENU_ENUM_LABEL_NETWORK_REMOTE_USER_LAST_ENABLE = MENU_ENUM_LABEL_NETWORK_REMOTE_USER_1_ENABLE + MAX_USERS, - MENU_ENUM_LABEL_VALUE_STDIN_CMD_ENABLE, - MENU_ENUM_LABEL_VALUE_NETWORK_REMOTE_ENABLE, - MENU_ENUM_LABEL_DETECT_CORE_LIST, - MENU_ENUM_LABEL_VALUE_DETECT_CORE_LIST, - MENU_ENUM_LABEL_DETECT_CORE_LIST_OK, - MENU_ENUM_LABEL_START_CORE, - MENU_ENUM_LABEL_VALUE_START_CORE, - MENU_ENUM_LABEL_LOAD_CONTENT, - MENU_ENUM_LABEL_VALUE_LOAD_CONTENT, - MENU_ENUM_LABEL_VALUE_CORE_UPDATER_LIST, - MENU_ENUM_LABEL_CORE_UPDATER_LIST, - MENU_ENUM_LABEL_CORE_UPDATER_AUTO_EXTRACT_ARCHIVE, - MENU_ENUM_LABEL_VALUE_CORE_UPDATER_AUTO_EXTRACT_ARCHIVE, - MENU_ENUM_LABEL_CORE_UPDATER_BUILDBOT_URL, - MENU_ENUM_LABEL_VALUE_CORE_UPDATER_BUILDBOT_URL, - MENU_ENUM_LABEL_BUILDBOT_ASSETS_URL, - MENU_ENUM_LABEL_VALUE_BUILDBOT_ASSETS_URL, - MENU_ENUM_LABEL_DUMMY_ON_CORE_SHUTDOWN, - MENU_ENUM_LABEL_VALUE_DUMMY_ON_CORE_SHUTDOWN, - MENU_ENUM_LABEL_CORE_SET_SUPPORTS_NO_CONTENT_ENABLE, - MENU_ENUM_LABEL_VALUE_CORE_SET_SUPPORTS_NO_CONTENT_ENABLE, - MENU_ENUM_LABEL_CLOSE_CONTENT, - MENU_ENUM_LABEL_VALUE_CLOSE_CONTENT, - MENU_ENUM_LABEL_QUIT_RETROARCH, - MENU_ENUM_LABEL_VALUE_QUIT_RETROARCH, - MENU_ENUM_LABEL_SHUTDOWN, - MENU_ENUM_LABEL_VALUE_SHUTDOWN, - MENU_ENUM_LABEL_REBOOT, - MENU_ENUM_LABEL_VALUE_REBOOT, - MENU_ENUM_LABEL_DISK_IMAGE_APPEND, - MENU_ENUM_LABEL_CORE_LIST, - MENU_ENUM_LABEL_VALUE_CORE_LIST, - MENU_ENUM_LABEL_MANAGEMENT, - MENU_ENUM_LABEL_VALUE_MANAGEMENT, - MENU_ENUM_LABEL_ONLINE, - MENU_ENUM_LABEL_VALUE_ONLINE, - MENU_ENUM_LABEL_ONLINE_UPDATER, - MENU_ENUM_LABEL_VALUE_ONLINE_UPDATER, - MENU_ENUM_LABEL_NETPLAY, - MENU_ENUM_LABEL_VALUE_NETPLAY, - MENU_ENUM_LABEL_SETTINGS, - MENU_ENUM_LABEL_FRONTEND_COUNTERS, - MENU_ENUM_LABEL_VALUE_FRONTEND_COUNTERS, - MENU_ENUM_LABEL_VALUE_CORE_COUNTERS, - MENU_ENUM_LABEL_CORE_COUNTERS, - MENU_ENUM_LABEL_LOAD_CONTENT_HISTORY, - MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_HISTORY, - MENU_ENUM_LABEL_NETWORK_INFORMATION, - MENU_ENUM_LABEL_VALUE_NETWORK_INFORMATION, - MENU_ENUM_LABEL_SYSTEM_INFORMATION, - MENU_ENUM_LABEL_ACHIEVEMENT_LIST, - MENU_ENUM_LABEL_ACHIEVEMENT_LIST_HARDCORE, - MENU_ENUM_LABEL_VALUE_SYSTEM_INFORMATION, - MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_LIST, - MENU_ENUM_LABEL_VALUE_ACHIEVEMENT_LIST_HARDCORE, - MENU_ENUM_LABEL_CORE_INFORMATION, - MENU_ENUM_LABEL_VALUE_CORE_INFORMATION, - MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PARAMETERS, - MENU_ENUM_LABEL_VIDEO_SHADER_PARAMETERS, - MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_PARAMETERS, - MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_PARAMETERS, - MENU_ENUM_LABEL_DISK_OPTIONS, - MENU_ENUM_LABEL_VALUE_DISK_OPTIONS, - MENU_ENUM_LABEL_CORE_OPTIONS, - MENU_ENUM_LABEL_DISK_CYCLE_TRAY_STATUS, - MENU_ENUM_LABEL_VALUE_DISK_CYCLE_TRAY_STATUS, + MENU_LABEL(DUMMY_ON_CORE_SHUTDOWN), + MENU_LABEL(CHECK_FOR_MISSING_FIRMWARE), - MENU_ENUM_LABEL_NO_CORE_OPTIONS_AVAILABLE, - MENU_ENUM_LABEL_VALUE_NO_CORE_OPTIONS_AVAILABLE, + MENU_LABEL(DETECT_CORE_LIST_OK), + MENU_LABEL(DETECT_CORE_LIST), + MENU_LABEL(START_CORE), + MENU_LABEL(LOAD_CONTENT), + MENU_LABEL(CORE_UPDATER_LIST), + MENU_LABEL(CORE_UPDATER_AUTO_EXTRACT_ARCHIVE), + MENU_LABEL(CORE_UPDATER_BUILDBOT_URL), + MENU_LABEL(BUILDBOT_ASSETS_URL), + MENU_LABEL(CORE_SET_SUPPORTS_NO_CONTENT_ENABLE), + MENU_LABEL(CLOSE_CONTENT), + MENU_LABEL(QUIT_RETROARCH), + MENU_LABEL(SHUTDOWN), + MENU_LABEL(REBOOT), + MENU_LABEL(DISK_IMAGE_APPEND), + MENU_LABEL(CORE_LIST), + MENU_LABEL(MANAGEMENT), + MENU_LABEL(ONLINE), + MENU_LABEL(ONLINE_UPDATER), + MENU_LABEL(NETPLAY), + MENU_LABEL(SETTINGS), + MENU_LABEL(FRONTEND_COUNTERS), + MENU_LABEL(CORE_COUNTERS), + MENU_LABEL(LOAD_CONTENT_HISTORY), + MENU_LABEL(NETWORK_INFORMATION), + MENU_LABEL(SYSTEM_INFORMATION), + MENU_LABEL(ACHIEVEMENT_LIST), + MENU_LABEL(ACHIEVEMENT_LIST_HARDCORE), + MENU_LABEL(CORE_INFORMATION), + + MENU_LABEL(VIDEO_SHADER_PARAMETERS), + MENU_LABEL(VIDEO_SHADER_PRESET_PARAMETERS), + MENU_LABEL(DISK_OPTIONS), + MENU_LABEL(DISK_CYCLE_TRAY_STATUS), + MENU_LABEL(NO_CORE_OPTIONS_AVAILABLE), + MENU_LABEL(DISK_INDEX), + MENU_LABEL(CORE_CHEAT_OPTIONS), + MENU_LABEL(CORE_INPUT_REMAPPING_OPTIONS), - MENU_ENUM_LABEL_VALUE_DISK_INDEX, - MENU_ENUM_LABEL_VALUE_DISK_IMAGE_APPEND, - MENU_ENUM_LABEL_DISK_INDEX, - MENU_ENUM_LABEL_SHADER_OPTIONS, - MENU_ENUM_LABEL_VALUE_CORE_CHEAT_OPTIONS, - MENU_ENUM_LABEL_CORE_CHEAT_OPTIONS, - MENU_ENUM_LABEL_VALUE_CORE_INPUT_REMAPPING_OPTIONS, - MENU_ENUM_LABEL_CORE_INPUT_REMAPPING_OPTIONS, MENU_ENUM_LABEL_VALUE_CURSOR_MANAGER, MENU_ENUM_LABEL_VALUE_DATABASE_MANAGER, MENU_ENUM_LABEL_DATABASE_MANAGER_LIST, @@ -1585,189 +1212,114 @@ enum msg_hash_enums MENU_ENUM_LABEL_VIDEO_SHADER_PASS, MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_TWO, MENU_ENUM_LABEL_VIDEO_SHADER_PRESET, - MENU_ENUM_LABEL_CHEAT_FILE_LOAD, - MENU_ENUM_LABEL_VALUE_CHEAT_FILE_LOAD, - MENU_ENUM_LABEL_REMAP_FILE_LOAD, - MENU_ENUM_LABEL_VALUE_REMAP_FILE_LOAD, + + MENU_LABEL(CHEAT_FILE_LOAD), + MENU_LABEL(REMAP_FILE_LOAD), + MENU_ENUM_LABEL_MESSAGE, MENU_ENUM_LABEL_INFO_SCREEN, - MENU_ENUM_LABEL_CUSTOM_RATIO, - MENU_ENUM_LABEL_VALUE_CUSTOM_RATIO, - MENU_ENUM_LABEL_HELP, - MENU_ENUM_LABEL_VALUE_HELP, - MENU_ENUM_LABEL_CHEAT_DATABASE_PATH, - MENU_ENUM_LABEL_VALUE_CHEAT_DATABASE_PATH, - MENU_ENUM_LABEL_CURSOR_DIRECTORY, - MENU_ENUM_LABEL_VALUE_CURSOR_DIRECTORY, - MENU_ENUM_LABEL_OSK_OVERLAY_DIRECTORY, - MENU_ENUM_LABEL_VALUE_OSK_OVERLAY_DIRECTORY, - MENU_ENUM_LABEL_RECORDING_OUTPUT_DIRECTORY, - MENU_ENUM_LABEL_VALUE_RECORDING_OUTPUT_DIRECTORY, - MENU_ENUM_LABEL_RECORDING_CONFIG_DIRECTORY, - MENU_ENUM_LABEL_VALUE_RECORDING_CONFIG_DIRECTORY, - MENU_ENUM_LABEL_VIDEO_FILTER, - MENU_ENUM_LABEL_PAL60_ENABLE, - MENU_ENUM_LABEL_VALUE_PAL60_ENABLE, - MENU_ENUM_LABEL_CONTENT_HISTORY_PATH, - MENU_ENUM_LABEL_RGUI_BROWSER_DIRECTORY, - MENU_ENUM_LABEL_VALUE_RGUI_BROWSER_DIRECTORY, - MENU_ENUM_LABEL_CONTENT_DATABASE_DIRECTORY, - MENU_ENUM_LABEL_VALUE_CONTENT_DATABASE_DIRECTORY, - MENU_ENUM_LABEL_PLAYLIST_DIRECTORY, - MENU_ENUM_LABEL_VALUE_PLAYLIST_DIRECTORY, - MENU_ENUM_LABEL_CORE_ASSETS_DIRECTORY, - MENU_ENUM_LABEL_VALUE_CORE_ASSETS_DIRECTORY, - MENU_ENUM_LABEL_CONTENT_DIRECTORY, - MENU_ENUM_LABEL_VALUE_SCREENSHOT_DIRECTORY, - MENU_ENUM_LABEL_VALUE_INPUT_REMAPPING_DIRECTORY, - MENU_ENUM_LABEL_VIDEO_SHADER_DIR, - MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_DIR, - MENU_ENUM_LABEL_VIDEO_FILTER_DIR, - MENU_ENUM_LABEL_VALUE_VIDEO_FILTER_DIR, - MENU_ENUM_LABEL_AUDIO_FILTER_DIR, - MENU_ENUM_LABEL_VALUE_AUDIO_FILTER_DIR, - MENU_ENUM_LABEL_LIBRETRO_DIR_PATH, - MENU_ENUM_LABEL_VALUE_LIBRETRO_DIR_PATH, - MENU_ENUM_LABEL_LIBRETRO_INFO_PATH, - MENU_ENUM_LABEL_VALUE_LIBRETRO_INFO_PATH, - MENU_ENUM_LABEL_RGUI_CONFIG_DIRECTORY, - MENU_ENUM_LABEL_VALUE_RGUI_CONFIG_DIRECTORY, - MENU_ENUM_LABEL_OVERLAY_DIRECTORY, - MENU_ENUM_LABEL_VALUE_OVERLAY_DIRECTORY, - MENU_ENUM_LABEL_VALUE_SYSTEM_DIRECTORY, - MENU_ENUM_LABEL_ASSETS_DIRECTORY, - MENU_ENUM_LABEL_VALUE_ASSETS_DIRECTORY, - MENU_ENUM_LABEL_CACHE_DIRECTORY, - MENU_ENUM_LABEL_VALUE_CACHE_DIRECTORY, - MENU_ENUM_LABEL_JOYPAD_AUTOCONFIG_DIR, - MENU_ENUM_LABEL_VALUE_JOYPAD_AUTOCONFIG_DIR, - MENU_ENUM_LABEL_DRIVER_SETTINGS, - MENU_ENUM_LABEL_VALUE_DRIVER_SETTINGS, + MENU_LABEL(CUSTOM_RATIO), + MENU_LABEL(HELP), + MENU_LABEL(CHEAT_DATABASE_PATH), + MENU_LABEL(CURSOR_DIRECTORY), + MENU_LABEL(OSK_OVERLAY_DIRECTORY), + MENU_LABEL(RECORDING_OUTPUT_DIRECTORY), + MENU_LABEL(RECORDING_CONFIG_DIRECTORY), + MENU_LABEL(VIDEO_FILTER), + MENU_LABEL(PAL60_ENABLE), + MENU_LABEL(CONTENT_HISTORY_PATH), - MENU_ENUM_LABEL_VIDEO_SETTINGS, + MENU_LABEL(RGUI_BROWSER_DIRECTORY), + MENU_LABEL(CONTENT_DATABASE_DIRECTORY), + MENU_LABEL(PLAYLIST_DIRECTORY), + MENU_LABEL(CORE_ASSETS_DIRECTORY), + MENU_LABEL(SCREENSHOT_DIRECTORY), + MENU_LABEL(CONTENT_DIRECTORY), + MENU_LABEL(VIDEO_SHADER_DIR), + MENU_LABEL(VIDEO_FILTER_DIR), + MENU_LABEL(AUDIO_FILTER_DIR), - MENU_ENUM_LABEL_AUDIO_SETTINGS, - MENU_ENUM_LABEL_VALUE_AUDIO_SETTINGS, + MENU_LABEL(TURBO_DEADZONE_LIST), + MENU_LABEL(LIBRETRO_DIR_PATH), + MENU_LABEL(LIBRETRO_INFO_PATH), + MENU_LABEL(RGUI_CONFIG_DIRECTORY), + MENU_LABEL(OVERLAY_DIRECTORY), + MENU_LABEL(SYSTEM_DIRECTORY), + MENU_LABEL(ASSETS_DIRECTORY), + MENU_LABEL(CACHE_DIRECTORY), + MENU_LABEL(JOYPAD_AUTOCONFIG_DIR), + MENU_LABEL(DRIVER_SETTINGS), + MENU_LABEL(VIDEO_SETTINGS), + MENU_LABEL(AUDIO_SETTINGS), + MENU_LABEL(CORE_SETTINGS), + MENU_LABEL(CONFIGURATION_SETTINGS), + MENU_LABEL(LOGGING_SETTINGS), + MENU_LABEL(SAVING_SETTINGS), + MENU_LABEL(RECORDING_SETTINGS), + MENU_LABEL(OVERLAY_SETTINGS), + MENU_LABEL(REWIND_SETTINGS), - MENU_ENUM_LABEL_CORE_SETTINGS, - MENU_ENUM_LABEL_VALUE_CORE_SETTINGS, - - MENU_ENUM_LABEL_CONFIGURATION_SETTINGS, - MENU_ENUM_LABEL_VALUE_CONFIGURATION_SETTINGS, - - MENU_ENUM_LABEL_LOGGING_SETTINGS, - MENU_ENUM_LABEL_VALUE_LOGGING_SETTINGS, - - MENU_ENUM_LABEL_SAVING_SETTINGS, - MENU_ENUM_LABEL_VALUE_SAVING_SETTINGS, - - MENU_ENUM_LABEL_REWIND_SETTINGS, - MENU_ENUM_LABEL_VALUE_REWIND_SETTINGS, - - MENU_ENUM_LABEL_RECORDING_SETTINGS, - MENU_ENUM_LABEL_VALUE_RECORDING_SETTINGS, - MENU_ENUM_LABEL_SHADER_SETTINGS, - MENU_ENUM_LABEL_FONT_SETTINGS, - MENU_ENUM_LABEL_OVERLAY_SETTINGS, - MENU_ENUM_LABEL_VALUE_OVERLAY_SETTINGS, MENU_ENUM_LABEL_ONSCREEN_KEYBOARD_OVERLAY_SETTINGS, - MENU_ENUM_LABEL_VALUE_MULTIMEDIA_SETTINGS, - MENU_ENUM_LABEL_VALUE_MENU_ENUM_FILE_BROWSER_SETTINGS, - MENU_ENUM_LABEL_MENU_ENUM_SETTINGS, - MENU_ENUM_LABEL_VALUE_MENU_ENUM_SETTINGS, - MENU_ENUM_LABEL_VALUE_USER_INTERFACE_SETTINGS, - MENU_ENUM_LABEL_PATCH_SETTINGS, - MENU_ENUM_LABEL_PLAYLIST_SETTINGS, - MENU_ENUM_LABEL_VALUE_PLAYLIST_SETTINGS, - MENU_ENUM_LABEL_CORE_UPDATER_SETTINGS, - MENU_ENUM_LABEL_VALUE_CORE_UPDATER_SETTINGS, - MENU_ENUM_LABEL_VALUE_NETWORK_SETTINGS, - MENU_ENUM_LABEL_VALUE_WIFI_SETTINGS, - MENU_ENUM_LABEL_VALUE_LAKKA_SERVICES, - MENU_ENUM_LABEL_LAKKA_SERVICES, - MENU_ENUM_LABEL_ARCHIVE_SETTINGS, - MENU_ENUM_LABEL_VALUE_USER_SETTINGS, - MENU_ENUM_LABEL_VALUE_DIRECTORY_SETTINGS, - MENU_ENUM_LABEL_VALUE_PRIVACY_SETTINGS, - MENU_ENUM_LABEL_SHADER_APPLY_CHANGES, - MENU_ENUM_LABEL_VALUE_SHADER_APPLY_CHANGES, - MENU_ENUM_LABEL_SAVE_NEW_CONFIG, - MENU_ENUM_LABEL_VALUE_SAVE_NEW_CONFIG, - MENU_ENUM_LABEL_ONSCREEN_DISPLAY_SETTINGS, - MENU_ENUM_LABEL_VALUE_ONSCREEN_DISPLAY_SETTINGS, - MENU_ENUM_LABEL_ONSCREEN_OVERLAY_SETTINGS, - MENU_ENUM_LABEL_VALUE_ONSCREEN_OVERLAY_SETTINGS, - MENU_ENUM_LABEL_VALUE_CHEAT_APPLY_CHANGES, - MENU_ENUM_LABEL_CHEAT_APPLY_CHANGES, - MENU_ENUM_LABEL_CUSTOM_BIND, - MENU_ENUM_LABEL_CUSTOM_BIND_ALL, - MENU_ENUM_LABEL_CUSTOM_BIND_DEFAULTS, - MENU_ENUM_LABEL_RESUME_CONTENT, - MENU_ENUM_LABEL_VALUE_RESUME_CONTENT, - MENU_ENUM_LABEL_VALUE_RESUME, - MENU_ENUM_LABEL_RESTART_CONTENT, - MENU_ENUM_LABEL_RESTART_RETROARCH, - MENU_ENUM_LABEL_VALUE_RESTART_RETROARCH, - MENU_ENUM_LABEL_VALUE_RESTART_CONTENT, - MENU_ENUM_LABEL_TAKE_SCREENSHOT, - MENU_ENUM_LABEL_VALUE_TAKE_SCREENSHOT, - MENU_ENUM_LABEL_DELETE_ENTRY, - MENU_ENUM_LABEL_VALUE_DELETE_ENTRY, - MENU_ENUM_LABEL_CONFIGURATIONS, - MENU_ENUM_LABEL_VALUE_CONFIGURATIONS, - MENU_ENUM_LABEL_VALUE_CHEAT_FILE_SAVE_AS, - MENU_ENUM_LABEL_CHEAT_FILE_SAVE_AS, - MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_AS, - MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_CORE, - MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_GAME, - MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_AS, - MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_CORE, - MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_GAME, - MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_CORE, - MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_GAME, - MENU_ENUM_LABEL_REMAP_FILE_SAVE_CORE, - MENU_ENUM_LABEL_REMAP_FILE_SAVE_GAME, - MENU_ENUM_LABEL_CONTENT_COLLECTION_LIST, - MENU_ENUM_LABEL_VALUE_CONTENT_COLLECTION_LIST, - MENU_ENUM_LABEL_VALUE_UNABLE_TO_READ_COMPRESSED_FILE, - MENU_ENUM_LABEL_OSK_ENABLE, - MENU_ENUM_LABEL_EXIT_EMULATOR, + + MENU_LABEL(MULTIMEDIA_SETTINGS), + MENU_LABEL(PLAYLIST_SETTINGS), + MENU_LABEL(CORE_UPDATER_SETTINGS), + MENU_LABEL(LAKKA_SERVICES), + MENU_LABEL(SHADER_APPLY_CHANGES), + MENU_LABEL(SAVE_NEW_CONFIG), + MENU_LABEL(ONSCREEN_DISPLAY_SETTINGS), + MENU_LABEL(ONSCREEN_OVERLAY_SETTINGS), + MENU_LABEL(ONSCREEN_NOTIFICATIONS_SETTINGS), + MENU_LABEL(CHEAT_APPLY_CHANGES), + MENU_ENUM_LABEL_COLLECTION, - MENU_ENUM_LABEL_USER_LANGUAGE, - MENU_ENUM_LABEL_VALUE_USER_LANGUAGE, - MENU_ENUM_LABEL_NETPLAY_NICKNAME, - MENU_ENUM_LABEL_VALUE_NETPLAY_NICKNAME, - MENU_ENUM_LABEL_VIDEO_VI_WIDTH, + MENU_LABEL(CONFIGURATIONS), + MENU_LABEL(CONTENT_COLLECTION_LIST), - MENU_ENUM_LABEL_VIDEO_FORCE_ASPECT, + MENU_ENUM_LABEL_CUSTOM_BIND, - MENU_ENUM_LABEL_VIDEO_ASPECT_RATIO_AUTO, + MENU_ENUM_LABEL_CUSTOM_BIND_ALL, - MENU_ENUM_LABEL_VIDEO_ASPECT_RATIO_INDEX, + MENU_ENUM_LABEL_CUSTOM_BIND_DEFAULTS, + MENU_ENUM_LABEL_EXIT_EMULATOR, + MENU_ENUM_LABEL_OSK_ENABLE, - MENU_ENUM_LABEL_VIDEO_VFILTER, + MENU_LABEL(REMAP_FILE_SAVE_CORE), + MENU_LABEL(REMAP_FILE_SAVE_GAME), + MENU_LABEL(RESTART_CONTENT), + MENU_LABEL(RESUME_CONTENT), - MENU_ENUM_LABEL_VIDEO_GPU_RECORD, + MENU_LABEL(CHEAT_FILE_SAVE_AS), + MENU_LABEL(DELETE_ENTRY), + MENU_LABEL(RESTART_RETROARCH), - MENU_ENUM_LABEL_RECORD_USE_OUTPUT_DIRECTORY, - MENU_ENUM_LABEL_VALUE_RECORD_USE_OUTPUT_DIRECTORY, + MENU_ENUM_LABEL_VALUE_RESUME, - MENU_ENUM_LABEL_RECORD_CONFIG, - MENU_ENUM_LABEL_VALUE_RECORD_CONFIG, + MENU_LABEL(TAKE_SCREENSHOT), - MENU_ENUM_LABEL_RECORD_PATH, - MENU_ENUM_LABEL_VALUE_RECORD_PATH, + MENU_ENUM_LABEL_VALUE_UNABLE_TO_READ_COMPRESSED_FILE, - MENU_ENUM_LABEL_VIDEO_POST_FILTER_RECORD, - MENU_ENUM_LABEL_VALUE_VIDEO_POST_FILTER_RECORD, + MENU_LABEL(VIDEO_SHADER_PRESET_SAVE_AS), + MENU_LABEL(VIDEO_SHADER_PRESET_SAVE_CORE), + MENU_LABEL(VIDEO_SHADER_PRESET_SAVE_GAME), + MENU_LABEL(USER_LANGUAGE), + MENU_LABEL(NETPLAY_NICKNAME), + MENU_LABEL(VIDEO_VI_WIDTH), + MENU_LABEL(VIDEO_FORCE_ASPECT), + MENU_LABEL(VIDEO_ASPECT_RATIO_AUTO), + MENU_LABEL(VIDEO_ASPECT_RATIO_INDEX), + MENU_LABEL(VIDEO_VFILTER), + MENU_LABEL(VIDEO_GPU_RECORD), + MENU_LABEL(RECORD_USE_OUTPUT_DIRECTORY), + MENU_LABEL(RECORD_CONFIG), + MENU_LABEL(RECORD_PATH), + MENU_LABEL(VIDEO_POST_FILTER_RECORD), + MENU_LABEL(RECORD_ENABLE), - MENU_ENUM_LABEL_RECORD_ENABLE, - MENU_ENUM_LABEL_VALUE_RECORD_ENABLE, - - MENU_ENUM_LABEL_VALUE_SECONDS, - MENU_ENUM_LABEL_VALUE_STATUS, + MENU_LABEL(SECONDS), + MENU_LABEL(STATUS), MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_NAME, MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_LABEL, @@ -1779,10 +1331,10 @@ enum msg_hash_enums MENU_ENUM_LABEL_VALUE_CORE_INFO_LICENSES, MENU_ENUM_LABEL_VALUE_CORE_INFO_SUPPORTED_EXTENSIONS, MENU_ENUM_LABEL_VALUE_CORE_INFO_FIRMWARE, - MENU_ENUM_LABEL_VALUE_CORE_INFO_CORE_NOTES, /* System information */ + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_DYNAMIC_SUPPORT, MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_BUILD_DATE, MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_GIT_VERSION, MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_CPU_FEATURES, @@ -1850,15 +1402,30 @@ enum msg_hash_enums MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_V4L2_SUPPORT, MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT, - MENU_ENUM_LABEL_VALUE_CORE_ASSETS_DIR, MENU_ENUM_LABEL_VALUE_CONTENT_DIR, + MENU_ENUM_LABEL_VALUE_CORE_ASSETS_DIR, - MENU_ENUM_LABEL_VALUE_DATABASE_SELECTION, + MENU_LABEL(DATABASE_SELECTION), + MENU_LABEL(DATABASE_CURSOR_LIST), + MENU_LABEL(DATABASE_CURSOR_LIST_ENTRY_DEVELOPER), + MENU_LABEL(DATABASE_CURSOR_LIST_ENTRY_PUBLISHER), + MENU_LABEL(DATABASE_CURSOR_LIST_ENTRY_ORIGIN), + MENU_LABEL(DATABASE_CURSOR_LIST_ENTRY_FRANCHISE), + MENU_LABEL(DATABASE_CURSOR_LIST_ENTRY_ESRB_RATING), + MENU_LABEL(DATABASE_CURSOR_LIST_ENTRY_ELSPA_RATING), + MENU_LABEL(DATABASE_CURSOR_LIST_ENTRY_PEGI_RATING), + MENU_LABEL(DATABASE_CURSOR_LIST_ENTRY_CERO_RATING), + MENU_LABEL(DATABASE_CURSOR_LIST_ENTRY_BBFC_RATING), + MENU_LABEL(DATABASE_CURSOR_LIST_ENTRY_MAX_USERS), + MENU_LABEL(DATABASE_CURSOR_LIST_ENTRY_EDGE_MAGAZINE_ISSUE), + MENU_LABEL(DATABASE_CURSOR_LIST_ENTRY_EDGE_MAGAZINE_RATING), + MENU_LABEL(DATABASE_CURSOR_LIST_ENTRY_RELEASEDATE_BY_MONTH), + MENU_LABEL(DATABASE_CURSOR_LIST_ENTRY_RELEASEDATE_BY_YEAR), + MENU_LABEL(DATABASE_CURSOR_LIST_ENTRY_DATABASE_INFO), - MENU_ENUM_LABEL_VALUE_YES, MENU_ENUM_LABEL_VALUE_NO, + MENU_ENUM_LABEL_VALUE_YES, - MENU_ENUM_LABEL_VALUE_DISABLED, MENU_ENUM_LABEL_VALUE_PORT, MENU_ENUM_LABEL_VALUE_LEFT_ANALOG, @@ -1881,48 +1448,35 @@ enum msg_hash_enums MENU_ENUM_LABEL_VALUE_LANG_VIETNAMESE, MENU_ENUM_LABEL_VALUE_NONE, - MENU_ENUM_LABEL_VALUE_NO_INFORMATION_AVAILABLE, - - MENU_ENUM_LABEL_USE_BUILTIN_IMAGE_VIEWER, - MENU_ENUM_LABEL_VALUE_USE_BUILTIN_IMAGE_VIEWER, - - MENU_ENUM_LABEL_OVERLAY_AUTOLOAD_PREFERRED, - MENU_ENUM_LABEL_VALUE_OVERLAY_AUTOLOAD_PREFERRED, - - MENU_ENUM_LABEL_OPEN_ARCHIVE, - MENU_ENUM_LABEL_OPEN_ARCHIVE_DETECT_CORE, + MENU_LABEL(USE_BUILTIN_IMAGE_VIEWER), + MENU_LABEL(OVERLAY_AUTOLOAD_PREFERRED), + MENU_LABEL(LOAD_ARCHIVE), + MENU_LABEL(OPEN_ARCHIVE), MENU_ENUM_LABEL_LOAD_ARCHIVE_DETECT_CORE, - MENU_ENUM_LABEL_LOAD_ARCHIVE, - - MENU_ENUM_LABEL_VALUE_OPEN_ARCHIVE, - MENU_ENUM_LABEL_VALUE_LOAD_ARCHIVE, + MENU_ENUM_LABEL_OPEN_ARCHIVE_DETECT_CORE, MENU_ENUM_LABEL_VALUE_WHAT_IS_A_CORE_DESC, - MENU_ENUM_LABEL_HELP_CHANGE_VIRTUAL_GAMEPAD, - MENU_ENUM_LABEL_VALUE_HELP_CHANGE_VIRTUAL_GAMEPAD, - MENU_ENUM_LABEL_VALUE_HELP_CHANGE_VIRTUAL_GAMEPAD_DESC, + MENU_LABEL(HELP_CHANGE_VIRTUAL_GAMEPAD), + MENU_LABEL(HELP_CHANGE_VIRTUAL_GAMEPAD_DESC), + + MENU_LABEL(HELP_AUDIO_VIDEO_TROUBLESHOOTING), - MENU_ENUM_LABEL_HELP_AUDIO_VIDEO_TROUBLESHOOTING, - MENU_ENUM_LABEL_VALUE_HELP_AUDIO_VIDEO_TROUBLESHOOTING, MENU_ENUM_LABEL_VALUE_HELP_AUDIO_VIDEO_TROUBLESHOOTING_DESC, - MENU_ENUM_LABEL_HELP_SCANNING_CONTENT, - MENU_ENUM_LABEL_VALUE_HELP_SCANNING_CONTENT, + MENU_LABEL(HELP_SCANNING_CONTENT), + MENU_ENUM_LABEL_VALUE_HELP_SCANNING_CONTENT_DESC, - MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG, - MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_CORE, - MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_GAME, - MENU_ENUM_LABEL_VALUE_SAVE_CURRENT_CONFIG, - MENU_ENUM_LABEL_VALUE_SAVE_CURRENT_CONFIG_OVERRIDE_CORE, - MENU_ENUM_LABEL_VALUE_SAVE_CURRENT_CONFIG_OVERRIDE_GAME, + MENU_LABEL(SAVE_CURRENT_CONFIG), + MENU_LABEL(SAVE_CURRENT_CONFIG_OVERRIDE_CORE), + MENU_LABEL(SAVE_CURRENT_CONFIG_OVERRIDE_GAME), + MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_BOXARTS, MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_SCREENSHOTS, MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_TITLE_SCREENS, - MENU_ENUM_LABEL_VALUE_THUMBNAIL_MODE_BOXARTS, /* Callback strings */ MENU_ENUM_LABEL_CB_CORE_CONTENT_DIRS_LIST, @@ -1935,6 +1489,7 @@ enum msg_hash_enums MENU_ENUM_LABEL_CB_LAKKA_DOWNLOAD, MENU_ENUM_LABEL_CB_LAKKA_LIST, MENU_ENUM_LABEL_CB_MENU_THUMBNAIL, + MENU_ENUM_LABEL_CB_MENU_SAVESTATE_THUMBNAIL, MENU_ENUM_LABEL_CB_MENU_WALLPAPER, MENU_ENUM_LABEL_CB_THUMBNAILS_UPDATER_DOWNLOAD, MENU_ENUM_LABEL_CB_THUMBNAILS_UPDATER_LIST, @@ -1949,39 +1504,10 @@ enum msg_hash_enums MENU_ENUM_LABEL_CB_UPDATE_SHADERS_SLANG, /* Sublabels */ - MENU_ENUM_SUBLABEL_ADD_CONTENT_LIST, - MENU_ENUM_SUBLABEL_AUDIO_SETTINGS, - MENU_ENUM_SUBLABEL_BLUETOOTH_ENABLE, - MENU_ENUM_SUBLABEL_CHEEVOS_HARDCORE_MODE_ENABLE, - MENU_ENUM_SUBLABEL_CONFIG_SAVE_ON_EXIT, - MENU_ENUM_SUBLABEL_CORE_SETTINGS, - MENU_ENUM_SUBLABEL_CPU_CORES, - MENU_ENUM_SUBLABEL_FPS_SHOW, MENU_ENUM_SUBLABEL_INFORMATION_LIST_LIST, - MENU_ENUM_SUBLABEL_INPUT_HOTKEY_BINDS, - MENU_ENUM_SUBLABEL_INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO, - MENU_ENUM_SUBLABEL_INPUT_SETTINGS, - MENU_ENUM_SUBLABEL_INPUT_USER_BINDS, - MENU_ENUM_SUBLABEL_LOG_VERBOSITY, - MENU_ENUM_SUBLABEL_MENU_SETTINGS, - MENU_ENUM_SUBLABEL_NETPLAY, - MENU_ENUM_SUBLABEL_ONLINE_UPDATER, - MENU_ENUM_SUBLABEL_SAMBA_ENABLE, MENU_ENUM_SUBLABEL_SERVICES_SETTINGS, - MENU_ENUM_SUBLABEL_SHOW_HIDDEN_FILES, - MENU_ENUM_SUBLABEL_SSH_ENABLE, - MENU_ENUM_SUBLABEL_SUSPEND_SCREENSAVER_ENABLE, - MENU_ENUM_SUBLABEL_USER_LANGUAGE, - MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - MENU_ENUM_SUBLABEL_VIDEO_FRAME_DELAY, - MENU_ENUM_SUBLABEL_VIDEO_HARD_SYNC, - MENU_ENUM_SUBLABEL_VIDEO_HARD_SYNC_FRAMES, - MENU_ENUM_SUBLABEL_VIDEO_MAX_SWAPCHAIN_IMAGES, - MENU_ENUM_SUBLABEL_VIDEO_MONITOR_INDEX, - MENU_ENUM_SUBLABEL_VIDEO_REFRESH_RATE_AUTO, - MENU_ENUM_SUBLABEL_VIDEO_SETTINGS, - MENU_ENUM_SUBLABEL_VIDEO_THREADED, - MENU_ENUM_SUBLABEL_WIFI_SETTINGS + + MSG_LAST }; diff --git a/network/netplay/README b/network/netplay/README index 8f0ca71057..e5a5384163 100644 --- a/network/netplay/README +++ b/network/netplay/README @@ -60,10 +60,10 @@ During the frame of execution, when the core requests input, it receives the input from the state buffer, both local and real or simulated remote. Post-frame, it checks whether it's read more than it's actioned, i.e. if read > -other self > other. If so, it first checks whether its simulated remote data -was correct. If it was, it simply moves other up. If not, it rewinds to other -(by loading the serialized state there) and runs the core in replay mode with -the real data up to the least of self and read, then sets other to that. +other and self > other. If so, it first checks whether its simulated remote +data was correct. If it was, it simply moves other up. If not, it rewinds to +other (by loading the serialized state there) and runs the core in replay mode +with the real data up to the least of self and read, then sets other to that. When in Netplay mode, the callback for receiving input is replaced by input_state_net. It is the role of input_state_net to combine the true local @@ -146,8 +146,18 @@ Command: LOAD_SAVESTATE Payload: { frame number: uint32 + uncompressed size: uint32 serialized save state: blob (variable size) } Description: Cause the other side to load a savestate, notionally one which the sending - side has also loaded. + side has also loaded. If both sides support zlib compression, the + serialized state is zlib compressed. Otherwise it is uncompressed. + +Command: PAUSE +Payload: None + Indicates that the core is paused. The receiving peer should also pause. + +Command: RESUME +Payload: None + Indicates that the core is no longer paused. diff --git a/network/netplay/netplay.c b/network/netplay/netplay.c index 14fcd618a9..a716b5b79b 100644 --- a/network/netplay/netplay.c +++ b/network/netplay/netplay.c @@ -30,6 +30,7 @@ #include #include "netplay_private.h" +#include "netplay_discovery.h" #include "../../autosave.h" #include "../../configuration.h" @@ -41,6 +42,10 @@ #define MAX_RETRIES 16 #define RETRY_MS 500 +#if defined(AF_INET6) && !defined(HAVE_SOCKET_LEGACY) +#define HAVE_INET6 1 +#endif + enum { CMD_OPT_ALLOWED_IN_SPECTATE_MODE = 0x1, @@ -54,15 +59,16 @@ enum static bool netplay_enabled = false; static bool netplay_is_client = false; -/* Used to advertise or request advertisement of Netplay */ -static int netplay_ad_fd = -1; - /* Used while Netplay is running */ static netplay_t *netplay_data = NULL; /* Used to avoid recursive netplay calls */ static bool in_netplay = false; +#ifndef HAVE_SOCKET_LEGACY +static void announce_nat_traversal(netplay_t *netplay); +#endif + static int init_tcp_connection(const struct addrinfo *res, bool server, bool spectate, struct sockaddr *other_addr, socklen_t addr_size) @@ -79,7 +85,14 @@ static int init_tcp_connection(const struct addrinfo *res, #if defined(IPPROTO_TCP) && defined(TCP_NODELAY) { int flag = 1; - if (setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (void*)&flag, sizeof(int)) < 0) + if (setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, +#ifdef _WIN32 + (const char*) +#else + (const void*) +#endif + &flag, + sizeof(int)) < 0) RARCH_WARN("Could not set netplay TCP socket to nodelay. Expect jitter.\n"); } #endif @@ -100,6 +113,15 @@ static int init_tcp_connection(const struct addrinfo *res, } else { +#if defined(HAVE_INET6) && defined(IPPROTO_IPV6) && defined(IPV6_V6ONLY) + /* Make sure we accept connections on both IPv6 and IPv4 */ + int on = 0; + if (res->ai_family == AF_INET6) + { + if (setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, (void*)&on, sizeof(on)) < 0) + RARCH_WARN("Failed to listen on both IPv6 and IPv4\n"); + } +#endif if ( !socket_bind(fd, (void*)res) || listen(fd, spectate ? MAX_SPECTATORS : 1) < 0) { @@ -118,8 +140,8 @@ end: return fd; } -static bool init_tcp_socket(netplay_t *netplay, const char *server, - uint16_t port, bool spectate) +static bool init_tcp_socket(netplay_t *netplay, void *direct_host, + const char *server, uint16_t port, bool spectate) { char port_buf[16]; bool ret = false; @@ -129,16 +151,59 @@ static bool init_tcp_socket(netplay_t *netplay, const char *server, port_buf[0] = '\0'; - hints.ai_socktype = SOCK_STREAM; - if (!server) - hints.ai_flags = AI_PASSIVE; + if (!direct_host) + { +#ifdef HAVE_INET6 + /* Default to hosting on IPv6 and IPv4 */ + if (!server) + hints.ai_family = AF_INET6; +#endif + hints.ai_socktype = SOCK_STREAM; + if (!server) + hints.ai_flags = AI_PASSIVE; - snprintf(port_buf, sizeof(port_buf), "%hu", (unsigned short)port); - if (getaddrinfo_retro(server, port_buf, &hints, &res) < 0) - return false; + snprintf(port_buf, sizeof(port_buf), "%hu", (unsigned short)port); + if (getaddrinfo_retro(server, port_buf, &hints, &res) < 0) + { +#ifdef HAVE_INET6 + if (!server) + { + /* Didn't work with IPv6, try wildcard */ + hints.ai_family = 0; + if (getaddrinfo_retro(server, port_buf, &hints, &res) < 0) + return false; + } + else +#endif + return false; + } - if (!res) - return false; + if (!res) + return false; + + } + else + { + /* I'll build my own addrinfo! With blackjack and hookers! */ + struct netplay_host *host = (struct netplay_host *) direct_host; + hints.ai_family = host->addr.sa_family; + hints.ai_socktype = SOCK_STREAM; + hints.ai_protocol = 0; + hints.ai_addrlen = host->addrlen; + hints.ai_addr = &host->addr; + res = &hints; + + } + + /* If we're serving on IPv6, make sure we accept all connections, including + * IPv4 */ +#ifdef HAVE_INET6 + if (!direct_host && !server && res->ai_family == AF_INET6) + { + struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) res->ai_addr; + sin6->sin6_addr = in6addr_any; + } +#endif /* If "localhost" is used, it is important to check every possible * address for IPv4/IPv6. */ @@ -148,7 +213,7 @@ static bool init_tcp_socket(netplay_t *netplay, const char *server, { int fd = init_tcp_connection( tmp_info, - server, + direct_host || server, netplay->spectate.enabled, (struct sockaddr*)&netplay->other_addr, sizeof(netplay->other_addr)); @@ -163,7 +228,7 @@ static bool init_tcp_socket(netplay_t *netplay, const char *server, tmp_info = tmp_info->ai_next; } - if (res) + if (res && !direct_host) freeaddrinfo_retro(res); if (!ret) @@ -172,36 +237,35 @@ static bool init_tcp_socket(netplay_t *netplay, const char *server, return ret; } -static bool init_ad_socket(netplay_t *netplay, uint16_t port) +static void init_nat_traversal(netplay_t *netplay) { - int fd = socket_init((void**)&netplay->addr, port, NULL, SOCKET_TYPE_DATAGRAM); + natt_init(); - if (fd < 0) - goto error; - - if (!socket_bind(fd, (void*)netplay->addr)) + if (!natt_new(&netplay->nat_traversal_state)) { - socket_close(fd); - goto error; + netplay->nat_traversal = false; + return; } - netplay_ad_fd = fd; + natt_open_port_any(&netplay->nat_traversal_state, netplay->tcp_port, SOCKET_PROTOCOL_TCP); - return true; - -error: - RARCH_ERR("Failed to initialize netplay advertisement socket.\n"); - return false; +#ifndef HAVE_SOCKET_LEGACY + if (!netplay->nat_traversal_state.request_outstanding) + announce_nat_traversal(netplay); +#endif } -static bool init_socket(netplay_t *netplay, const char *server, uint16_t port) +static bool init_socket(netplay_t *netplay, void *direct_host, const char *server, uint16_t port) { if (!network_init()) return false; - if (!init_tcp_socket(netplay, server, port, netplay->spectate.enabled)) + if (!init_tcp_socket(netplay, direct_host, server, port, netplay->spectate.enabled)) return false; + if (netplay->is_server && netplay->nat_traversal) + init_nat_traversal(netplay); + return true; } @@ -226,7 +290,7 @@ static void hangup(netplay_t *netplay) if (netplay->is_server && !netplay->spectate.enabled) { /* In server mode, make the socket listen for a new connection */ - if (!init_socket(netplay, NULL, netplay->tcp_port)) + if (!init_socket(netplay, NULL, NULL, netplay->tcp_port)) { RARCH_WARN("Failed to reinitialize Netplay.\n"); runloop_msg_queue_push("Failed to reinitialize Netplay.", 0, 480, false); @@ -242,9 +306,9 @@ static void hangup(netplay_t *netplay) netplay->stall = 0; } -static bool netplay_info_cb(netplay_t* netplay, unsigned frames) +static bool netplay_info_cb(netplay_t* netplay, unsigned delay_frames) { - return netplay->net_cbs->info_cb(netplay, frames); + return netplay->net_cbs->info_cb(netplay, delay_frames); } /** @@ -584,6 +648,8 @@ static bool netplay_get_cmd(netplay_t *netplay) case NETPLAY_CMD_LOAD_SAVESTATE: { uint32_t frame; + uint32_t isize; + uint32_t rd, wn; /* Make sure we're ready for it */ if (netplay->quirks & NETPLAY_QUIRK_INITIALIZATION) @@ -612,9 +678,9 @@ static bool netplay_get_cmd(netplay_t *netplay) * (strangely) force a rewind to the frame we're already on, so it * gets loaded. This is just to avoid having reloading implemented in * too many places. */ - if (cmd_size > netplay->state_size + sizeof(uint32_t)) + if (cmd_size > netplay->zbuffer_size + 2*sizeof(uint32_t)) { - RARCH_ERR("CMD_LOAD_SAVESTATE received an unexpected save state size.\n"); + RARCH_ERR("CMD_LOAD_SAVESTATE received an unexpected payload size.\n"); return netplay_cmd_nak(netplay); } @@ -631,14 +697,34 @@ static bool netplay_get_cmd(netplay_t *netplay) return netplay_cmd_nak(netplay); } + if (!socket_receive_all_blocking(netplay->fd, &isize, sizeof(isize))) + { + RARCH_ERR("CMD_LOAD_SAVESTATE failed to receive inflated size.\n"); + return netplay_cmd_nak(netplay); + } + isize = ntohl(isize); + + if (isize != netplay->state_size) + { + RARCH_ERR("CMD_LOAD_SAVESTATE received an unexpected save state size.\n"); + return netplay_cmd_nak(netplay); + } + if (!socket_receive_all_blocking(netplay->fd, - netplay->buffer[netplay->read_ptr].state, - cmd_size - sizeof(uint32_t))) + netplay->zbuffer, cmd_size - 2*sizeof(uint32_t))) { RARCH_ERR("CMD_LOAD_SAVESTATE failed to receive savestate.\n"); return netplay_cmd_nak(netplay); } + /* And decompress it */ + netplay->decompression_backend->set_in(netplay->decompression_stream, + netplay->zbuffer, cmd_size - 2*sizeof(uint32_t)); + netplay->decompression_backend->set_out(netplay->decompression_stream, + (uint8_t*)netplay->buffer[netplay->read_ptr].state, netplay->state_size); + netplay->decompression_backend->trans(netplay->decompression_stream, + true, &rd, &wn, NULL); + /* Skip ahead if it's past where we are */ if (frame > netplay->self_frame_count) { @@ -775,7 +861,7 @@ static bool netplay_poll(void) /* Read Netplay input, block if we're configured to stall for input every * frame */ - if (netplay_data->stall_frames == 0 && + if (netplay_data->delay_frames == 0 && netplay_data->read_frame_count <= netplay_data->self_frame_count) res = poll_input(netplay_data, true); else @@ -799,7 +885,7 @@ static bool netplay_poll(void) break; default: /* not stalling */ - if (netplay_data->read_frame_count + netplay_data->stall_frames + if (netplay_data->read_frame_count + netplay_data->delay_frames <= netplay_data->self_frame_count) { netplay_data->stall = RARCH_NETPLAY_STALL_RUNNING_FAST; @@ -988,21 +1074,19 @@ void netplay_log_connection(const struct sockaddr_storage *their_addr, if (str) { - snprintf(msg, sizeof(msg), "%s: \"%s (%s)\"", - msg_hash_to_str(MSG_GOT_CONNECTION_FROM), + snprintf(msg, sizeof(msg), msg_hash_to_str(MSG_GOT_CONNECTION_FROM_NAME), nick, str); runloop_msg_queue_push(msg, 1, 180, false); RARCH_LOG("%s\n", msg); } else { - snprintf(msg, sizeof(msg), "%s: \"%s\"", - msg_hash_to_str(MSG_GOT_CONNECTION_FROM), + snprintf(msg, sizeof(msg), msg_hash_to_str(MSG_GOT_CONNECTION_FROM), nick); runloop_msg_queue_push(msg, 1, 180, false); RARCH_LOG("%s\n", msg); } - RARCH_LOG("%s %u\n", msg_hash_to_str(MSG_CONNECTION_SLOT), + RARCH_LOG("%s %u\n", msg_hash_to_str(MSG_CONNECTION_SLOT), slot); } @@ -1014,8 +1098,7 @@ void netplay_log_connection(const struct sockaddr_storage *their_addr, msg[0] = '\0'; - snprintf(msg, sizeof(msg), "%s: \"%s\"", - msg_hash_to_str(MSG_GOT_CONNECTION_FROM), + snprintf(msg, sizeof(msg), msg_hash_to_str(MSG_GOT_CONNECTION_FROM), nick); runloop_msg_queue_push(msg, 1, 180, false); RARCH_LOG("%s\n", msg); @@ -1025,7 +1108,39 @@ void netplay_log_connection(const struct sockaddr_storage *their_addr, #endif +#ifndef HAVE_SOCKET_LEGACY +static void announce_nat_traversal(netplay_t *netplay) +{ + char msg[512], host[PATH_MAX_LENGTH], port[6]; + if (netplay->nat_traversal_state.have_inet4) + { + if (getnameinfo((const struct sockaddr *) &netplay->nat_traversal_state.ext_inet4_addr, + sizeof(struct sockaddr_in), + host, PATH_MAX_LENGTH, port, 6, NI_NUMERICHOST|NI_NUMERICSERV) != 0) + return; + + } +#ifdef HAVE_INET6 + else if (netplay->nat_traversal_state.have_inet6) + { + if (getnameinfo((const struct sockaddr *) &netplay->nat_traversal_state.ext_inet6_addr, + sizeof(struct sockaddr_in6), + host, PATH_MAX_LENGTH, port, 6, NI_NUMERICHOST|NI_NUMERICSERV) != 0) + return; + + } +#endif + else + return; + + snprintf(msg, sizeof(msg), "%s: %s:%s\n", + msg_hash_to_str(MSG_PUBLIC_ADDRESS), + host, port); + runloop_msg_queue_push(msg, 1, 180, false); + RARCH_LOG("%s\n", msg); +} +#endif bool netplay_try_init_serialization(netplay_t *netplay) { @@ -1101,6 +1216,15 @@ bool netplay_init_serialization(netplay_t *netplay) } } + netplay->zbuffer_size = netplay->state_size * 2; + netplay->zbuffer = (uint8_t *) calloc(netplay->zbuffer_size, 1); + if (!netplay->zbuffer) + { + netplay->quirks |= NETPLAY_QUIRK_NO_TRANSMISSION; + netplay->zbuffer_size = 0; + return false; + } + return true; } @@ -1129,12 +1253,14 @@ static bool netplay_init_buffers(netplay_t *netplay, unsigned frames) /** * netplay_new: + * @direct_host : Netplay host discovered from scanning. * @server : IP address of server. * @port : Port of server. - * @frames : Amount of lag frames. + * @delay_frames : Amount of delay frames. * @check_frames : Frequency with which to check CRCs. * @cb : Libretro callbacks. * @spectate : If true, enable spectator mode. + * @nat_traversal : If true, attempt NAT traversal. * @nick : Nickname of user. * @quirks : Netplay quirks required for this session. * @@ -1143,10 +1269,10 @@ static bool netplay_init_buffers(netplay_t *netplay, unsigned frames) * * Returns: new netplay handle. **/ -netplay_t *netplay_new(const char *server, uint16_t port, - unsigned frames, unsigned check_frames, - const struct retro_callbacks *cb, - bool spectate, const char *nick, uint64_t quirks) +netplay_t *netplay_new(void *direct_host, const char *server, uint16_t port, + unsigned delay_frames, unsigned check_frames, + const struct retro_callbacks *cb, bool spectate, bool nat_traversal, + const char *nick, uint64_t quirks) { netplay_t *netplay = (netplay_t*)calloc(1, sizeof(*netplay)); if (!netplay) @@ -1158,13 +1284,14 @@ netplay_t *netplay_new(const char *server, uint16_t port, netplay->port = server ? 0 : 1; netplay->spectate.enabled = spectate; netplay->is_server = server == NULL; - netplay->stall_frames = frames; + netplay->nat_traversal = netplay->is_server ? nat_traversal : false; + netplay->delay_frames = delay_frames; netplay->check_frames = check_frames; netplay->quirks = quirks; - strlcpy(netplay->nick, nick, sizeof(netplay->nick)); + strlcpy(netplay->nick, nick[0] ? nick : RARCH_DEFAULT_NICK, sizeof(netplay->nick)); - if (!netplay_init_buffers(netplay, frames)) + if (!netplay_init_buffers(netplay, delay_frames)) { free(netplay); return NULL; @@ -1175,13 +1302,13 @@ netplay_t *netplay_new(const char *server, uint16_t port, else netplay->net_cbs = netplay_get_cbs_net(); - if (!init_socket(netplay, server, port)) + if (!init_socket(netplay, direct_host, server, port)) { free(netplay); return NULL; } - if(!netplay_info_cb(netplay, frames)) + if(!netplay_info_cb(netplay, delay_frames)) goto error; return netplay; @@ -1292,7 +1419,11 @@ void netplay_free(netplay_t *netplay) free(netplay->spectate.input); } - else + + if (netplay->nat_traversal) + natt_free(&netplay->nat_traversal_state); + + if (netplay->buffer) { for (i = 0; i < netplay->buffer_size; i++) if (netplay->buffer[i].state) @@ -1301,6 +1432,12 @@ void netplay_free(netplay_t *netplay) free(netplay->buffer); } + if (netplay->zbuffer) + free(netplay->zbuffer); + + if (netplay->compression_stream) + netplay->compression_backend->stream_free(netplay->compression_stream); + if (netplay->addr) freeaddrinfo_retro(netplay->addr); @@ -1331,11 +1468,27 @@ bool netplay_pre_frame(netplay_t *netplay) netplay_try_init_serialization(netplay); } - /* Advertise our server if applicable */ if (netplay->is_server) { - if (netplay_ad_fd >= 0 || init_ad_socket(netplay, RARCH_DEFAULT_PORT)) - netplay_ad_server(netplay, netplay_ad_fd); + /* Advertise our server */ + netplay_lan_ad_server(netplay); + + /* NAT traversal if applicable */ + if (netplay->nat_traversal && + netplay->nat_traversal_state.request_outstanding && + !netplay->nat_traversal_state.have_inet4) + { + struct timeval tmptv = {0}; + fd_set fds = netplay->nat_traversal_state.fds; + if (socket_select(netplay->nat_traversal_state.nfds, &fds, NULL, NULL, &tmptv) > 0) + natt_read(&netplay->nat_traversal_state); + +#ifndef HAVE_SOCKET_LEGACY + if (!netplay->nat_traversal_state.request_outstanding || + netplay->nat_traversal_state.have_inet4) + announce_nat_traversal(netplay); +#endif + } } if (!netplay->net_cbs->pre_frame(netplay)) @@ -1391,8 +1544,9 @@ void netplay_frontend_paused(netplay_t *netplay, bool paused) void netplay_load_savestate(netplay_t *netplay, retro_ctx_serialize_info_t *serial_info, bool save) { - uint32_t header[3]; + uint32_t header[4]; retro_ctx_serialize_info_t tmp_serial_info; + uint32_t rd, wn; if (!netplay->has_connection) return; @@ -1442,10 +1596,23 @@ void netplay_load_savestate(netplay_t *netplay, | NETPLAY_QUIRK_NO_TRANSMISSION)) return; - /* And send it to the peer (FIXME: this is an ugly way to do this) */ + /* Compress it */ + netplay->compression_backend->set_in(netplay->compression_stream, + (const uint8_t*)serial_info->data_const, serial_info->size); + netplay->compression_backend->set_out(netplay->compression_stream, + netplay->zbuffer, netplay->zbuffer_size); + if (!netplay->compression_backend->trans(netplay->compression_stream, + true, &rd, &wn, NULL)) + { + hangup(netplay); + return; + } + + /* And send it to the peer */ header[0] = htonl(NETPLAY_CMD_LOAD_SAVESTATE); - header[1] = htonl(serial_info->size + sizeof(uint32_t)); + header[1] = htonl(wn + 2*sizeof(uint32_t)); header[2] = htonl(netplay->self_frame_count); + header[3] = htonl(serial_info->size); if (!socket_send_all_blocking(netplay->fd, header, sizeof(header), false)) { @@ -1454,7 +1621,7 @@ void netplay_load_savestate(netplay_t *netplay, } if (!socket_send_all_blocking(netplay->fd, - serial_info->data_const, serial_info->size, false)) + netplay->zbuffer, wn, false)) { hangup(netplay); return; @@ -1494,7 +1661,7 @@ void deinit_netplay(void) * Returns: true (1) if successful, otherwise false (0). **/ -bool init_netplay(bool is_spectate, const char *server, unsigned port) +bool init_netplay(bool is_spectate, void *direct_host, const char *server, unsigned port) { struct retro_callbacks cbs = {0}; settings_t *settings = config_get_ptr(); @@ -1544,10 +1711,12 @@ bool init_netplay(bool is_spectate, const char *server, unsigned port) } netplay_data = (netplay_t*)netplay_new( + netplay_is_client ? direct_host : NULL, netplay_is_client ? server : NULL, port ? port : RARCH_DEFAULT_PORT, - settings->netplay.sync_frames, settings->netplay.check_frames, &cbs, - is_spectate, settings->username, quirks); + settings->netplay.delay_frames, settings->netplay.check_frames, &cbs, + is_spectate, settings->netplay.nat_traversal, settings->username, + quirks); if (netplay_data) return true; diff --git a/network/netplay/netplay.h b/network/netplay/netplay.h index 83b41b69a1..69fce43df8 100644 --- a/network/netplay/netplay.h +++ b/network/netplay/netplay.h @@ -1,6 +1,7 @@ /* RetroArch - A frontend for libretro. * Copyright (C) 2010-2014 - Hans-Kristian Arntzen * Copyright (C) 2011-2016 - Daniel De Matteis + * Copyright (C) 2016 - Gregor Richards * * RetroArch is free software: you can redistribute it and/or modify it under the terms * of the GNU General Public License as published by the Free Software Found- @@ -110,7 +111,7 @@ enum netplay_cmd_cfg /* input.netplay_client_swap_input */ NETPLAY_CFG_SWAP_INPUT = 0x0002, - /* netplay.sync_frames */ + /* netplay.delay_frames */ NETPLAY_CFG_DELAY_FRAMES = 0x0004, /* For more than 2 players */ @@ -131,12 +132,14 @@ size_t audio_sample_batch_net(const int16_t *data, size_t frames); /** * netplay_new: + * @direct_host : Netplay host discovered from scanning. * @server : IP address of server. * @port : Port of server. - * @frames : Amount of lag frames. + * @delay_frames : Amount of delay frames. * @check_frames : Frequency with which to check CRCs. * @cb : Libretro callbacks. * @spectate : If true, enable spectator mode. + * @nat_traversal : If true, attempt NAT traversal. * @nick : Nickname of user. * @quirks : Netplay quirks. * @@ -145,9 +148,9 @@ size_t audio_sample_batch_net(const int16_t *data, size_t frames); * * Returns: new netplay handle. **/ -netplay_t *netplay_new(const char *server, - uint16_t port, unsigned frames, unsigned check_frames, - const struct retro_callbacks *cb, bool spectate, +netplay_t *netplay_new(void *direct_host, const char *server, + uint16_t port, unsigned delay_frames, unsigned check_frames, + const struct retro_callbacks *cb, bool spectate, bool nat_traversal, const char *nick, uint64_t quirks); /** @@ -221,7 +224,7 @@ bool netplay_disconnect(netplay_t *netplay); * * Returns: true (1) if successful, otherwise false (0). **/ -bool init_netplay(bool is_spectate, const char *server, unsigned port); +bool init_netplay(bool is_spectate, void *direct_host, const char *server, unsigned port); void deinit_netplay(void); diff --git a/network/netplay/netplay_common.c b/network/netplay/netplay_common.c index da7a9a9926..73e1632886 100644 --- a/network/netplay/netplay_common.c +++ b/network/netplay/netplay_common.c @@ -19,6 +19,7 @@ #include "netplay_private.h" #include +#include #include @@ -166,8 +167,9 @@ bool netplay_handshake(netplay_t *netplay) char msg[512]; uint32_t *content_crc_ptr = NULL; void *sram = NULL; - uint32_t header[4] = {0}; + uint32_t header[5] = {0}; bool is_server = netplay->is_server; + int compression = 0; msg[0] = '\0'; @@ -182,28 +184,28 @@ bool netplay_handshake(netplay_t *netplay) header[1] = htonl(netplay_impl_magic()); header[2] = htonl(mem_info.size); header[3] = htonl(local_pmagic); + header[4] = htonl(NETPLAY_COMPRESSION_SUPPORTED); if (!socket_send_all_blocking(netplay->fd, header, sizeof(header), false)) return false; if (!socket_receive_all_blocking(netplay->fd, header, sizeof(header))) { - RARCH_ERR("%s\n", - msg_hash_to_str(MSG_FAILED_TO_RECEIVE_HEADER_FROM_CLIENT)); - return false; + strlcpy(msg, msg_hash_to_str(MSG_FAILED_TO_RECEIVE_HEADER_FROM_CLIENT), sizeof(msg)); + goto error; } if (*content_crc_ptr != ntohl(header[0])) { - RARCH_ERR("%s\n", msg_hash_to_str(MSG_CONTENT_CRC32S_DIFFER)); - return false; + strlcpy(msg, msg_hash_to_str(MSG_CONTENT_CRC32S_DIFFER), sizeof(msg)); + goto error; } if (netplay_impl_magic() != ntohl(header[1])) { - RARCH_ERR("Implementations differ, make sure you're using exact same " - "libretro implementations and RetroArch version.\n"); - return false; + strlcpy(msg, "Implementations differ. Make sure you're using exact same " + "libretro implementations and RetroArch version.", sizeof(msg)); + goto error; } /* Some cores only report the correct sram size late, so we can't actually @@ -221,12 +223,46 @@ bool netplay_handshake(netplay_t *netplay) netplay_endian_mismatch(local_pmagic, remote_pmagic)) { RARCH_ERR("Endianness mismatch with an endian-sensitive core.\n"); - return false; + strlcpy(msg, "This core does not support inter-architecture netplay " + "between these systems.", sizeof(msg)); + goto error; } if ((netplay->quirks & NETPLAY_QUIRK_PLATFORM_DEPENDENT) && (local_pmagic != remote_pmagic)) { RARCH_ERR("Platform mismatch with a platform-sensitive core.\n"); + strlcpy(msg, "This core does not support inter-architecture netplay.", + sizeof(msg)); + goto error; + } + + /* Clear any existing compression */ + if (netplay->compression_stream) + netplay->compression_backend->stream_free(netplay->compression_stream); + if (netplay->decompression_stream) + netplay->decompression_backend->stream_free(netplay->decompression_stream); + + /* Check what compression is supported */ + compression = ntohl(header[4]); + compression &= NETPLAY_COMPRESSION_SUPPORTED; + if (compression & NETPLAY_COMPRESSION_ZLIB) + { + netplay->compression_backend = trans_stream_get_zlib_deflate_backend(); + if (!netplay->compression_backend) + netplay->compression_backend = trans_stream_get_pipe_backend(); + } + else + { + netplay->compression_backend = trans_stream_get_pipe_backend(); + } + netplay->decompression_backend = netplay->compression_backend->reverse; + + /* Allocate our compression stream */ + netplay->compression_stream = netplay->compression_backend->stream_new(); + netplay->decompression_stream = netplay->decompression_backend->stream_new(); + if (!netplay->compression_stream || !netplay->decompression_stream) + { + RARCH_ERR("Failed to allocate compression transcoder!\n"); return false; } @@ -235,21 +271,22 @@ bool netplay_handshake(netplay_t *netplay) { if (!netplay_send_nickname(netplay, netplay->fd)) { - RARCH_ERR("%s\n", - msg_hash_to_str(MSG_FAILED_TO_SEND_NICKNAME_TO_HOST)); - return false; + strlcpy(msg, msg_hash_to_str(MSG_FAILED_TO_SEND_NICKNAME_TO_HOST), + sizeof(msg)); + goto error; } } if (!netplay_get_nickname(netplay, netplay->fd)) { if (is_server) - RARCH_ERR("%s\n", - msg_hash_to_str(MSG_FAILED_TO_GET_NICKNAME_FROM_CLIENT)); + strlcpy(msg, msg_hash_to_str(MSG_FAILED_TO_GET_NICKNAME_FROM_CLIENT), + sizeof(msg)); else - RARCH_ERR("%s\n", - msg_hash_to_str(MSG_FAILED_TO_RECEIVE_NICKNAME_FROM_HOST)); - return false; + strlcpy(msg, + msg_hash_to_str(MSG_FAILED_TO_RECEIVE_NICKNAME_FROM_HOST), + sizeof(msg)); + goto error; } if (is_server) @@ -346,6 +383,14 @@ bool netplay_handshake(netplay_t *netplay) } return true; + +error: + if (msg[0]) + { + RARCH_ERR("%s\n", msg); + runloop_msg_queue_push(msg, 1, 180, false); + } + return false; } bool netplay_is_server(netplay_t* netplay) @@ -388,103 +433,3 @@ uint32_t netplay_delta_frame_crc(netplay_t *netplay, struct delta_frame *delta) return 0; return encoding_crc32(0L, (const unsigned char*)delta->state, netplay->state_size); } - -/* - * AD PACKET FORMAT: - * - * Request: - * 1 word: RANQ (RetroArch Netplay Query) - * 1 word: Netplay protocol version - * - * Reply: - * 1 word : RANS (RetroArch Netplay Server) - * 1 word : Netplay protocol version - * 1 word : Port - * 8 words: RetroArch version - * 8 words: Nick - * 8 words: Core name - * 8 words: Core version - * 8 words: Content name (currently always blank) - */ - -#define AD_PACKET_MAX_SIZE 512 -#define AD_PACKET_STRING_SIZE 32 -#define AD_PACKET_STRING_WORDS (AD_PACKET_STRING_SIZE/sizeof(uint32_t)) -static uint32_t *ad_packet_buffer = NULL; - -bool netplay_ad_server(netplay_t *netplay, int ad_fd) -{ - fd_set fds; - struct timeval tmp_tv = {0}; - struct sockaddr their_addr; - socklen_t addr_size; - rarch_system_info_t *info = NULL; - size_t bufloc; - - if (!ad_packet_buffer) - { - ad_packet_buffer = (uint32_t *) malloc(AD_PACKET_MAX_SIZE); - if (!ad_packet_buffer) - return false; - } - - /* Check for any ad queries */ - while (1) - { - FD_ZERO(&fds); - FD_SET(ad_fd, &fds); - if (socket_select(ad_fd + 1, &fds, NULL, NULL, &tmp_tv) <= 0) - break; - if (!FD_ISSET(ad_fd, &fds)) - break; - - /* Somebody queried, so check that it's valid */ - if (recvfrom(ad_fd, (char*)ad_packet_buffer, AD_PACKET_MAX_SIZE, 0, - &their_addr, &addr_size) >= (ssize_t) (2*sizeof(uint32_t))) - { - /* Make sure it's a valid query */ - if (memcmp(ad_packet_buffer, "RANQ", 4)) - continue; - - /* For this version */ - if (ntohl(ad_packet_buffer[1]) != NETPLAY_PROTOCOL_VERSION) - continue; - - runloop_ctl(RUNLOOP_CTL_SYSTEM_INFO_GET, &info); - - /* Now build our response */ - memset(ad_packet_buffer, 0, AD_PACKET_MAX_SIZE); - memcpy(ad_packet_buffer, "RANS", 4); - ad_packet_buffer[1] = htonl(NETPLAY_PROTOCOL_VERSION); - ad_packet_buffer[2] = htonl(netplay->tcp_port); - bufloc = 3; - strncpy((char *) (ad_packet_buffer + bufloc), - PACKAGE_VERSION, AD_PACKET_STRING_SIZE); - bufloc += AD_PACKET_STRING_WORDS; - strncpy((char *) (ad_packet_buffer + bufloc), - netplay->nick, AD_PACKET_STRING_SIZE); - bufloc += AD_PACKET_STRING_WORDS; - if (info) - { - strncpy((char *) (ad_packet_buffer + bufloc), - info->info.library_name, AD_PACKET_STRING_SIZE); - bufloc += AD_PACKET_STRING_WORDS; - strncpy((char *) (ad_packet_buffer + bufloc), - info->info.library_version, AD_PACKET_STRING_SIZE); - bufloc += AD_PACKET_STRING_WORDS; - /* Blank content */ - bufloc += AD_PACKET_STRING_WORDS; - } - else - { - bufloc += 3*AD_PACKET_STRING_WORDS; - } - - /* And send it */ - sendto(ad_fd, (const char*)ad_packet_buffer, bufloc*sizeof(uint32_t), 0, - &their_addr, addr_size); - } - } - - return true; -} diff --git a/network/netplay/netplay_discovery.c b/network/netplay/netplay_discovery.c new file mode 100644 index 0000000000..b360db50b4 --- /dev/null +++ b/network/netplay/netplay_discovery.c @@ -0,0 +1,373 @@ +/* RetroArch - A frontend for libretro. + * Copyright (C) 2016 - Gregor Richards + * + * RetroArch is free software: you can redistribute it and/or modify it under the terms + * of the GNU General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with RetroArch. + * If not, see . + */ + +/* + * AD PACKET FORMAT: + * + * Request: + * 1 word: RANQ (RetroArch Netplay Query) + * 1 word: Netplay protocol version + * + * Reply: + * 1 word : RANS (RetroArch Netplay Server) + * 1 word : Netplay protocol version + * 1 word : Port + * 8 words: RetroArch version + * 8 words: Nick + * 8 words: Core name + * 8 words: Core version + * 8 words: Content name (currently always blank) + */ + +#include +#include + +#include +#include + +#include "../../runloop.h" +#include "../../version.h" +#include "netplay.h" +#include "netplay_discovery.h" +#include "netplay_private.h" + +#if defined(AF_INET6) && !defined(HAVE_SOCKET_LEGACY) +#define HAVE_INET6 1 +#endif + +struct ad_packet +{ + uint32_t header; + uint32_t protocol_version; + uint32_t port; + char retroarch_version[NETPLAY_HOST_STR_LEN]; + char nick[NETPLAY_HOST_STR_LEN]; + char core[NETPLAY_HOST_STR_LEN]; + char core_version[NETPLAY_HOST_STR_LEN]; + char content[NETPLAY_HOST_STR_LEN]; +}; + +bool netplay_lan_ad_client(void); + +/* LAN discovery sockets */ +static int lan_ad_server_fd = -1; +static int lan_ad_client_fd = -1; + +/* Packet buffer for advertisement and responses */ +static struct ad_packet ad_packet_buffer; + +/* List of discovered hosts */ +static struct netplay_host_list discovered_hosts; +static size_t discovered_hosts_allocated; + +/** Initialize Netplay discovery (client) */ +bool init_netplay_discovery(void) +{ + struct addrinfo *addr = NULL; + int fd = socket_init((void **) &addr, 0, NULL, SOCKET_TYPE_DATAGRAM); + + if (fd < 0) + goto error; + + if (!socket_bind(fd, (void*)addr)) + { + socket_close(fd); + goto error; + } + + lan_ad_client_fd = fd; + freeaddrinfo_retro(addr); + return true; + +error: + if (addr) + freeaddrinfo_retro(addr); + RARCH_ERR("Failed to initialize netplay advertisement client socket.\n"); + return false; +} + +/** Deinitialize and free Netplay discovery */ +void deinit_netplay_discovery(void) +{ + if (lan_ad_client_fd >= 0) + { + socket_close(lan_ad_client_fd); + lan_ad_client_fd = -1; + } +} + +/** Discovery control */ +bool netplay_discovery_driver_ctl(enum rarch_netplay_discovery_ctl_state state, void *data) +{ + char port_str[6]; + + if (lan_ad_client_fd < 0) + return false; + + switch (state) + { + case RARCH_NETPLAY_DISCOVERY_CTL_LAN_SEND_QUERY: + { + struct addrinfo hints = {0}, *addr; + int canBroadcast = 1; + + /* Get the broadcast address (IPv4 only for now) */ + snprintf(port_str, 6, "%hu", (unsigned short) RARCH_DEFAULT_PORT); + if (getaddrinfo_retro("255.255.255.255", port_str, &hints, &addr) < 0) + return false; + + /* Make it broadcastable */ +#if defined(SOL_SOCKET) && defined(SO_BROADCAST) + if (setsockopt(lan_ad_client_fd, SOL_SOCKET, SO_BROADCAST, (const char *) &canBroadcast, sizeof(canBroadcast)) < 0) + RARCH_WARN("Failed to set netplay discovery port to broadcast.\n"); +#endif + + /* Put together the request */ + memcpy((void *) &ad_packet_buffer, "RANQ", 4); + ad_packet_buffer.protocol_version = htonl(NETPLAY_PROTOCOL_VERSION); + + /* And send it off */ + if (sendto(lan_ad_client_fd, (const char *) &ad_packet_buffer, + 2*sizeof(uint32_t), 0, addr->ai_addr, addr->ai_addrlen) < + 2*sizeof(uint32_t)) + RARCH_WARN("Failed to send netplay discovery response.\n"); + + freeaddrinfo_retro(addr); + break; + } + + case RARCH_NETPLAY_DISCOVERY_CTL_LAN_GET_RESPONSES: + if (!netplay_lan_ad_client()) + return false; + *((struct netplay_host_list **) data) = &discovered_hosts; + break; + + case RARCH_NETPLAY_DISCOVERY_CTL_LAN_CLEAR_RESPONSES: + discovered_hosts.size = 0; + break; + + default: + return false; + } + + return true; +} + +static bool init_lan_ad_server_socket(netplay_t *netplay, uint16_t port) +{ + struct addrinfo *addr = NULL; + int fd = socket_init((void **) &addr, port, NULL, SOCKET_TYPE_DATAGRAM); + + if (fd < 0) + goto error; + + if (!socket_bind(fd, (void*)addr)) + { + socket_close(fd); + goto error; + } + + lan_ad_server_fd = fd; + freeaddrinfo_retro(addr); + + return true; + +error: + if (addr) + freeaddrinfo_retro(addr); + RARCH_ERR("Failed to initialize netplay advertisement socket.\n"); + return false; +} + +bool netplay_lan_ad_server(netplay_t *netplay) +{ + fd_set fds; + struct timeval tmp_tv = {0}; + struct sockaddr their_addr; + socklen_t addr_size; + rarch_system_info_t *info = NULL; + + if (lan_ad_server_fd < 0 && !init_lan_ad_server_socket(netplay, RARCH_DEFAULT_PORT)) + return false; + + /* Check for any ad queries */ + while (1) + { + FD_ZERO(&fds); + FD_SET(lan_ad_server_fd, &fds); + if (socket_select(lan_ad_server_fd + 1, &fds, NULL, NULL, &tmp_tv) <= 0) + break; + if (!FD_ISSET(lan_ad_server_fd, &fds)) + break; + + /* Somebody queried, so check that it's valid */ + addr_size = sizeof(their_addr); + if (recvfrom(lan_ad_server_fd, (char*)&ad_packet_buffer, + sizeof(struct ad_packet), 0, &their_addr, &addr_size) >= + (ssize_t) (2*sizeof(uint32_t))) + { + /* Make sure it's a valid query */ + if (memcmp((void *) &ad_packet_buffer, "RANQ", 4)) + continue; + + /* For this version */ + if (ntohl(ad_packet_buffer.protocol_version) != + NETPLAY_PROTOCOL_VERSION) + continue; + + runloop_ctl(RUNLOOP_CTL_SYSTEM_INFO_GET, &info); + + /* Now build our response */ + memset(&ad_packet_buffer, 0, sizeof(struct ad_packet)); + memcpy(&ad_packet_buffer, "RANS", 4); + ad_packet_buffer.protocol_version = + htonl(NETPLAY_PROTOCOL_VERSION); + ad_packet_buffer.port = htonl(netplay->tcp_port); + strlcpy(ad_packet_buffer.retroarch_version, PACKAGE_VERSION, + NETPLAY_HOST_STR_LEN); + strlcpy(ad_packet_buffer.nick, netplay->nick, NETPLAY_HOST_STR_LEN); + if (info) + { + strlcpy(ad_packet_buffer.core, info->info.library_name, + NETPLAY_HOST_STR_LEN); + strlcpy(ad_packet_buffer.core_version, info->info.library_version, + NETPLAY_HOST_STR_LEN); + } + + /* And send it */ + sendto(lan_ad_server_fd, (const char*)&ad_packet_buffer, + sizeof(struct ad_packet), 0, &their_addr, addr_size); + } + } + + return true; +} + +#ifdef HAVE_SOCKET_LEGACY +/* The fact that I need to write this is deeply depressing */ +static int16_t htons_for_morons(int16_t value) +{ + union { + int32_t l; + int16_t s[2]; + } val; + val.l = htonl(value); + return val.s[1]; +} +#ifndef htons +#define htons htons_for_morons +#endif +#endif + +bool netplay_lan_ad_client(void) +{ + fd_set fds; + struct timeval tmp_tv = {0}; + struct sockaddr their_addr; + socklen_t addr_size; + + if (lan_ad_client_fd < 0) + return false; + + /* Check for any ad queries */ + while (1) + { + FD_ZERO(&fds); + FD_SET(lan_ad_client_fd, &fds); + if (socket_select(lan_ad_client_fd + 1, &fds, NULL, NULL, &tmp_tv) <= 0) + break; + if (!FD_ISSET(lan_ad_client_fd, &fds)) + break; + + /* Somebody queried, so check that it's valid */ + addr_size = sizeof(their_addr); + if (recvfrom(lan_ad_client_fd, (char*)&ad_packet_buffer, + sizeof(struct ad_packet), 0, &their_addr, &addr_size) >= + (ssize_t) sizeof(struct ad_packet)) + { + struct netplay_host *host; + + /* Make sure it's a valid response */ + if (memcmp((void *) &ad_packet_buffer, "RANS", 4)) + continue; + + /* For this version */ + if (ntohl(ad_packet_buffer.protocol_version) != NETPLAY_PROTOCOL_VERSION) + continue; + + /* And that we know how to handle it */ + if (their_addr.sa_family == AF_INET) + { + struct sockaddr_in *sin = (struct sockaddr_in *) &their_addr; + sin->sin_port = htons(ntohl(ad_packet_buffer.port)); + + } +#ifdef HAVE_INET6 + else if (their_addr.sa_family == AF_INET6) + { + struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) &their_addr; + sin6->sin6_port = htons(ad_packet_buffer.port); + + } +#endif + else continue; + + /* Allocate space for it */ + if (discovered_hosts.size >= discovered_hosts_allocated) + { + size_t allocated = discovered_hosts_allocated; + struct netplay_host *new_hosts; + + if (allocated == 0) allocated = 2; + else allocated *= 2; + + if (discovered_hosts.hosts) + new_hosts = (struct netplay_host *) + realloc(discovered_hosts.hosts, allocated * sizeof(struct + netplay_host)); + else + /* Should be equivalent to realloc, but I don't trust screwy libcs */ + new_hosts = (struct netplay_host *) + malloc(allocated * sizeof(struct netplay_host)); + + if (!new_hosts) + return false; + + discovered_hosts.hosts = new_hosts; + discovered_hosts_allocated = allocated; + } + + /* Get our host structure */ + host = &discovered_hosts.hosts[discovered_hosts.size++]; + + /* Copy in the response */ + memset(host, 0, sizeof(struct netplay_host)); + host->addr = their_addr; + host->addrlen = addr_size; + strlcpy(host->nick, ad_packet_buffer.nick, NETPLAY_HOST_STR_LEN); + strlcpy(host->core, ad_packet_buffer.core, NETPLAY_HOST_STR_LEN); + strlcpy(host->core_version, ad_packet_buffer.core_version, + NETPLAY_HOST_STR_LEN); + strlcpy(host->content, ad_packet_buffer.content, + NETPLAY_HOST_STR_LEN); + host->nick[NETPLAY_HOST_STR_LEN-1] = + host->core[NETPLAY_HOST_STR_LEN-1] = + host->core_version[NETPLAY_HOST_STR_LEN-1] = + host->content[NETPLAY_HOST_STR_LEN-1] = '\0'; + } + } + + return true; +} diff --git a/network/netplay/netplay_discovery.h b/network/netplay/netplay_discovery.h new file mode 100644 index 0000000000..f0b7358c78 --- /dev/null +++ b/network/netplay/netplay_discovery.h @@ -0,0 +1,56 @@ +/* RetroArch - A frontend for libretro. + * Copyright (C) 2016 - Gregor Richards + * + * RetroArch is free software: you can redistribute it and/or modify it under the terms + * of the GNU General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with RetroArch. + * If not, see . + */ + + +#ifndef __RARCH_NETPLAY_DISCOVERY_H +#define __RARCH_NETPLAY_DISCOVERY_H + +#include + +#define NETPLAY_HOST_STR_LEN 32 + +enum rarch_netplay_discovery_ctl_state +{ + RARCH_NETPLAY_DISCOVERY_CTL_NONE = 0, + RARCH_NETPLAY_DISCOVERY_CTL_LAN_SEND_QUERY, + RARCH_NETPLAY_DISCOVERY_CTL_LAN_GET_RESPONSES, + RARCH_NETPLAY_DISCOVERY_CTL_LAN_CLEAR_RESPONSES +}; + +struct netplay_host { + struct sockaddr addr; + socklen_t addrlen; + + char nick[NETPLAY_HOST_STR_LEN]; + char core[NETPLAY_HOST_STR_LEN]; + char core_version[NETPLAY_HOST_STR_LEN]; + char content[NETPLAY_HOST_STR_LEN]; +}; + +struct netplay_host_list { + struct netplay_host *hosts; + size_t size; +}; + +/** Initialize Netplay discovery */ +bool init_netplay_discovery(void); + +/** Deinitialize and free Netplay discovery */ +void deinit_netplay_discovery(void); + +/** Discovery control */ +bool netplay_discovery_driver_ctl(enum rarch_netplay_discovery_ctl_state state, void *data); + +#endif diff --git a/network/netplay/netplay_net.c b/network/netplay/netplay_net.c index c594587e0f..f9cb1c549f 100644 --- a/network/netplay/netplay_net.c +++ b/network/netplay/netplay_net.c @@ -20,6 +20,7 @@ #include #include +#include #include "netplay_private.h" @@ -100,7 +101,7 @@ static bool netplay_net_pre_frame(netplay_t *netplay) /* If the core can't serialize properly, we must stall for the * remote input on EVERY frame, because we can't recover */ netplay->quirks |= NETPLAY_QUIRK_NO_SAVESTATES; - netplay->stall_frames = 0; + netplay->delay_frames = 0; } /* If we can't transmit savestates, we must stall until the client is ready */ @@ -138,7 +139,14 @@ static bool netplay_net_pre_frame(netplay_t *netplay) #if defined(IPPROTO_TCP) && defined(TCP_NODELAY) { int flag = 1; - if (setsockopt(netplay->fd, IPPROTO_TCP, TCP_NODELAY, (void*)&flag, sizeof(int)) < 0) + if (setsockopt(netplay->fd, IPPROTO_TCP, TCP_NODELAY, +#ifdef _WIN32 + (const char*) +#else + (const void*) +#endif + &flag, + sizeof(int)) < 0) RARCH_WARN("Could not set netplay TCP socket to nodelay. Expect jitter.\n"); } #endif diff --git a/network/netplay/netplay_private.h b/network/netplay/netplay_private.h index 4cfbe9273e..e8bf108da7 100644 --- a/network/netplay/netplay_private.h +++ b/network/netplay/netplay_private.h @@ -1,6 +1,7 @@ /* RetroArch - A frontend for libretro. * Copyright (C) 2010-2014 - Hans-Kristian Arntzen * Copyright (C) 2011-2016 - Daniel De Matteis + * Copyright (C) 2016 - Gregor Richards * * RetroArch is free software: you can redistribute it and/or modify it under the terms * of the GNU General Public License as published by the Free Software Found- @@ -20,7 +21,9 @@ #include "netplay.h" #include +#include #include +#include #include #include "../../core.h" @@ -34,8 +37,9 @@ #define WORDS_PER_FRAME 4 /* Allows us to send 128 bits worth of state per frame. */ #define MAX_SPECTATORS 16 #define RARCH_DEFAULT_PORT 55435 +#define RARCH_DEFAULT_NICK "Anonymous" -#define NETPLAY_PROTOCOL_VERSION 2 +#define NETPLAY_PROTOCOL_VERSION 3 #define PREV_PTR(x) ((x) == 0 ? netplay->buffer_size - 1 : (x) - 1) #define NEXT_PTR(x) ((x + 1) % netplay->buffer_size) @@ -66,6 +70,14 @@ #define NETPLAY_QUIRK_MAP_PLATFORM_DEPENDENT \ (RETRO_SERIALIZATION_QUIRK_PLATFORM_DEPENDENT) +/* Compression protocols supported */ +#define NETPLAY_COMPRESSION_ZLIB (1<<0) +#if HAVE_ZLIB +#define NETPLAY_COMPRESSION_SUPPORTED NETPLAY_COMPRESSION_ZLIB +#else +#define NETPLAY_COMPRESSION_SUPPORTED 0 +#endif + struct delta_frame { bool used; /* a bit derpy, but this is how we know if the delta's been used at all */ @@ -115,6 +127,9 @@ struct netplay int fd; /* TCP port (if serving) */ uint16_t tcp_port; + /* NAT traversal info (if NAT traversal is used and serving) */ + bool nat_traversal; + struct natt_status nat_traversal_state; /* Which port is governed by netplay (other user)? */ unsigned port; bool has_connection; @@ -122,6 +137,16 @@ struct netplay struct delta_frame *buffer; size_t buffer_size; + /* Compression transcoder */ + const struct trans_stream_backend *compression_backend; + void *compression_stream; + const struct trans_stream_backend *decompression_backend; + void *decompression_stream; + + /* A buffer into which to compress frames for transfer */ + uint8_t *zbuffer; + size_t zbuffer_size; + /* Pointer where we are now. */ size_t self_ptr; /* Points to the last reliable state that self ever had. */ @@ -189,7 +214,7 @@ struct netplay bool remote_paused; /* And stalling */ - uint32_t stall_frames; + uint32_t delay_frames; int stall; retro_time_t stall_time; @@ -234,6 +259,8 @@ bool netplay_cmd_crc(netplay_t *netplay, struct delta_frame *delta); bool netplay_cmd_request_savestate(netplay_t *netplay); -bool netplay_ad_server(netplay_t *netplay, int ad_fd); +/* DISCOVERY: */ + +bool netplay_lan_ad_server(netplay_t *netplay); #endif diff --git a/network/netplay/netplay_spectate.c b/network/netplay/netplay_spectate.c index 5fbd3aa61b..7f20f7e976 100644 --- a/network/netplay/netplay_spectate.c +++ b/network/netplay/netplay_spectate.c @@ -243,7 +243,7 @@ static void netplay_spectate_post_frame(netplay_t *netplay) } /* If the server gets significantly ahead, skip to catch up */ - if (netplay->self_frame_count + netplay->stall_frames <= netplay->read_frame_count) + if (netplay->self_frame_count + netplay->delay_frames <= netplay->read_frame_count) { /* "Replay" into the future */ netplay->is_replay = true; diff --git a/pkg/android/phoenix/AndroidManifest.xml b/pkg/android/phoenix/AndroidManifest.xml index da36cb326a..36edccbb32 100644 --- a/pkg/android/phoenix/AndroidManifest.xml +++ b/pkg/android/phoenix/AndroidManifest.xml @@ -2,7 +2,7 @@ package="com.retroarch" android:versionCode="48" android:versionName="1.3.6" - android:installLocation="preferExternal"> + android:installLocation="internalOnly"> diff --git a/pkg/android/phoenix/jni/Android.mk b/pkg/android/phoenix/jni/Android.mk index f6897c0397..e80b7c6d3b 100644 --- a/pkg/android/phoenix/jni/Android.mk +++ b/pkg/android/phoenix/jni/Android.mk @@ -1,4 +1,5 @@ LOCAL_PATH := $(call my-dir) + include $(CLEAR_VARS) RARCH_DIR := ../../../.. @@ -13,6 +14,11 @@ DEFINES := LIBRETRO_COMM_DIR := $(RARCH_DIR)/libretro-common DEPS_DIR := $(RARCH_DIR)/deps +GIT_VERSION := $(shell git rev-parse --short HEAD 2>/dev/null) +ifneq ($(GIT_VERSION),) + DEFINES += -DHAVE_GIT_VERSION -DGIT_VERSION=$(GIT_VERSION) +endif + include $(CLEAR_VARS) ifeq ($(TARGET_ARCH),arm) DEFINES += -DANDROID_ARM -marm @@ -55,9 +61,10 @@ ifeq ($(GLES),3) DEFINES += -DHAVE_OPENGLES3 else GLES_LIB := -lGLESv2 + DEFINES += -DHAVE_OPENGLES2 endif -DEFINES += -DRARCH_MOBILE -DHAVE_GRIFFIN -DHAVE_LANGEXTRA -DANDROID -DHAVE_DYNAMIC -DHAVE_OPENGL -DHAVE_FBO -DHAVE_OVERLAY -DHAVE_OPENGLES -DHAVE_OPENGLES2 -DGLSL_DEBUG -DHAVE_DYLIB -DHAVE_EGL -DHAVE_GLSL -DHAVE_MENU -DHAVE_RGUI -DHAVE_ZLIB -DHAVE_RPNG -DHAVE_RJPEG -DHAVE_RBMP -DHAVE_RTGA -DINLINE=inline -DHAVE_THREADS -D__LIBRETRO__ -DHAVE_RSOUND -DHAVE_NETWORKGAMEPAD -DHAVE_NETWORKING -DRARCH_INTERNAL -DHAVE_FILTERS_BUILTIN -DHAVE_MATERIALUI -DHAVE_XMB -DHAVE_SHADERPIPELINE -DHAVE_LIBRETRODB -DHAVE_STB_FONT -DHAVE_IMAGEVIEWER -DHAVE_UPDATE_ASSETS +DEFINES += -DRARCH_MOBILE -DHAVE_GRIFFIN -DHAVE_LANGEXTRA -DANDROID -DHAVE_DYNAMIC -DHAVE_OPENGL -DHAVE_FBO -DHAVE_OVERLAY -DHAVE_OPENGLES -DGLSL_DEBUG -DHAVE_DYLIB -DHAVE_EGL -DHAVE_GLSL -DHAVE_MENU -DHAVE_RGUI -DHAVE_ZLIB -DHAVE_RPNG -DHAVE_RJPEG -DHAVE_RBMP -DHAVE_RTGA -DINLINE=inline -DHAVE_THREADS -D__LIBRETRO__ -DHAVE_RSOUND -DHAVE_NETWORKGAMEPAD -DHAVE_NETWORKING -DRARCH_INTERNAL -DHAVE_FILTERS_BUILTIN -DHAVE_MATERIALUI -DHAVE_XMB -DHAVE_SHADERPIPELINE -DHAVE_LIBRETRODB -DHAVE_STB_FONT -DHAVE_IMAGEVIEWER -DHAVE_UPDATE_ASSETS DEFINES += -DWANT_IFADDRS ifeq ($(HAVE_VULKAN),1) @@ -99,6 +106,7 @@ LOCAL_SRC_FILES += $(DEPS_DIR)/glslang/glslang.cpp \ $(DEPS_DIR)/glslang/glslang/OGLCompilersDLL/InitializeDll.cpp \ $(DEPS_DIR)/glslang/glslang/glslang/GenericCodeGen/Link.cpp \ $(DEPS_DIR)/glslang/glslang/glslang/GenericCodeGen/CodeGen.cpp \ + $(DEPS_DIR)/glslang/glslang/hlsl/hlslAttributes.cpp \ $(DEPS_DIR)/glslang/glslang/hlsl/hlslGrammar.cpp \ $(DEPS_DIR)/glslang/glslang/hlsl/hlslOpMap.cpp \ $(DEPS_DIR)/glslang/glslang/hlsl/hlslTokenStream.cpp \ @@ -115,9 +123,11 @@ LOCAL_SRC_FILES += $(DEPS_DIR)/glslang/glslang.cpp \ $(DEPS_DIR)/glslang/glslang/glslang/MachineIndependent/Initialize.cpp \ $(DEPS_DIR)/glslang/glslang/glslang/MachineIndependent/SymbolTable.cpp \ $(DEPS_DIR)/glslang/glslang/glslang/MachineIndependent/parseConst.cpp \ + $(DEPS_DIR)/glslang/glslang/glslang/MachineIndependent/ParseContextBase.cpp \ $(DEPS_DIR)/glslang/glslang/glslang/MachineIndependent/ParseHelper.cpp \ $(DEPS_DIR)/glslang/glslang/glslang/MachineIndependent/ShaderLang.cpp \ $(DEPS_DIR)/glslang/glslang/glslang/MachineIndependent/IntermTraverse.cpp \ + $(DEPS_DIR)/glslang/glslang/glslang/MachineIndependent/iomapper.cpp \ $(DEPS_DIR)/glslang/glslang/glslang/MachineIndependent/InfoSink.cpp \ $(DEPS_DIR)/glslang/glslang/glslang/MachineIndependent/Constant.cpp \ $(DEPS_DIR)/glslang/glslang/glslang/MachineIndependent/Scan.cpp \ diff --git a/pkg/apple/RetroArch_iOS10.xcodeproj/project.pbxproj b/pkg/apple/RetroArch_iOS10.xcodeproj/project.pbxproj index a99d8b6716..570ccef6df 100644 --- a/pkg/apple/RetroArch_iOS10.xcodeproj/project.pbxproj +++ b/pkg/apple/RetroArch_iOS10.xcodeproj/project.pbxproj @@ -453,7 +453,7 @@ }; }; }; - buildConfigurationList = 96AFAE1F16C1D4EA009DE44C /* Build configuration list for PBXProject "RetroArch_iOS" */; + buildConfigurationList = 96AFAE1F16C1D4EA009DE44C /* Build configuration list for PBXProject "RetroArch_iOS10" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; @@ -636,7 +636,7 @@ "-DHAVE_NETWORKING", "-DHAVE_AVFOUNDATION", "-DHAVE_GRIFFIN", - "-DHAVE_UPDATE_ASSETS", + "-DHAVE_UPDATE_ASSETS", "-DHAVE_LANGEXTRA", "-DHAVE_CHEEVOS", "-DHAVE_IMAGEVIEWER", @@ -714,7 +714,7 @@ "-DHAVE_NETWORKING", "-DHAVE_AVFOUNDATION", "-DHAVE_GRIFFIN", - "-DHAVE_UPDATE_ASSETS", + "-DHAVE_UPDATE_ASSETS", "-DHAVE_LANGEXTRA", "-DHAVE_CHEEVOS", "-DHAVE_IMAGEVIEWER", @@ -763,7 +763,7 @@ "-DHAVE_NETWORKING", "-DHAVE_AVFOUNDATION", "-DHAVE_GRIFFIN", - "-DHAVE_UPDATE_ASSETS", + "-DHAVE_UPDATE_ASSETS", "-DHAVE_LANGEXTRA", "-DHAVE_CHEEVOS", "-DHAVE_IMAGEVIEWER", @@ -841,7 +841,7 @@ "-DHAVE_NETWORKING", "-DHAVE_AVFOUNDATION", "-DHAVE_GRIFFIN", - "-DHAVE_UPDATE_ASSETS", + "-DHAVE_UPDATE_ASSETS", "-DHAVE_LANGEXTRA", "-DHAVE_CHEEVOS", "-DHAVE_IMAGEVIEWER", @@ -915,7 +915,7 @@ "-DHAVE_NETWORKING", "-DHAVE_AVFOUNDATION", "-DHAVE_GRIFFIN", - "-DHAVE_UPDATE_ASSETS", + "-DHAVE_UPDATE_ASSETS", "-DHAVE_LANGEXTRA", "-DHAVE_CHEEVOS", "-DHAVE_IMAGEVIEWER", @@ -961,7 +961,7 @@ "-DHAVE_NETWORKING", "-DHAVE_AVFOUNDATION", "-DHAVE_GRIFFIN", - "-DHAVE_UPDATE_ASSETS", + "-DHAVE_UPDATE_ASSETS", "-DHAVE_LANGEXTRA", "-DHAVE_CHEEVOS", "-DHAVE_IMAGEVIEWER", @@ -1023,7 +1023,7 @@ "../../libretro-common/include", ); INFOPLIST_FILE = "$(SRCROOT)/iOS/Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_NO_PIE = YES; LIBRARY_SEARCH_PATHS = ""; ONLY_ACTIVE_ARCH = NO; @@ -1034,7 +1034,7 @@ "-DHAVE_NETWORKING", "-DHAVE_AVFOUNDATION", "-DHAVE_GRIFFIN", - "-DHAVE_UPDATE_ASSETS", + "-DHAVE_UPDATE_ASSETS", "-DHAVE_LANGEXTRA", "-DHAVE_CHEEVOS", "-DHAVE_IMAGEVIEWER", @@ -1099,7 +1099,7 @@ "../../libretro-common/include", ); INFOPLIST_FILE = "$(SRCROOT)/iOS/Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_NO_PIE = YES; LIBRARY_SEARCH_PATHS = ""; OTHER_CFLAGS = ( @@ -1111,7 +1111,7 @@ "-DHAVE_NETWORKING", "-DHAVE_AVFOUNDATION", "-DHAVE_GRIFFIN", - "-DHAVE_UPDATE_ASSETS", + "-DHAVE_UPDATE_ASSETS", "-DHAVE_LANGEXTRA", "-DHAVE_CHEEVOS", "-DHAVE_IMAGEVIEWER", @@ -1160,7 +1160,7 @@ "-DHAVE_NETWORKING", "-DHAVE_AVFOUNDATION", "-DHAVE_GRIFFIN", - "-DHAVE_UPDATE_ASSETS", + "-DHAVE_UPDATE_ASSETS", "-DHAVE_LANGEXTRA", "-DHAVE_CHEEVOS", "-DHAVE_IMAGEVIEWER", @@ -1242,7 +1242,7 @@ "-DHAVE_NETWORKING", "-DHAVE_AVFOUNDATION", "-DHAVE_GRIFFIN", - "-DHAVE_UPDATE_ASSETS", + "-DHAVE_UPDATE_ASSETS", "-DHAVE_LANGEXTRA", "-DHAVE_CHEEVOS", "-DHAVE_IMAGEVIEWER", @@ -1310,7 +1310,7 @@ "-DHAVE_NETWORKING", "-DHAVE_AVFOUNDATION", "-DHAVE_GRIFFIN", - "-DHAVE_UPDATE_ASSETS", + "-DHAVE_UPDATE_ASSETS", "-DHAVE_LANGEXTRA", "-DHAVE_CHEEVOS", "-DHAVE_IMAGEVIEWER", @@ -1379,7 +1379,7 @@ "-DHAVE_NETWORKING", "-DHAVE_AVFOUNDATION", "-DHAVE_GRIFFIN", - "-DHAVE_UPDATE_ASSETS", + "-DHAVE_UPDATE_ASSETS", "-DHAVE_LANGEXTRA", "-DHAVE_CHEEVOS", "-DHAVE_IMAGEVIEWER", @@ -1456,7 +1456,7 @@ "-DHAVE_NETWORKING", "-DHAVE_AVFOUNDATION", "-DHAVE_GRIFFIN", - "-DHAVE_UPDATE_ASSETS", + "-DHAVE_UPDATE_ASSETS", "-DHAVE_LANGEXTRA", "-DHAVE_CHEEVOS", "-DHAVE_IMAGEVIEWER", @@ -1505,7 +1505,7 @@ "-DHAVE_NETWORKING", "-DHAVE_AVFOUNDATION", "-DHAVE_GRIFFIN", - "-DHAVE_UPDATE_ASSETS", + "-DHAVE_UPDATE_ASSETS", "-DHAVE_LANGEXTRA", "-DHAVE_CHEEVOS", "-DHAVE_IMAGEVIEWER", @@ -1583,7 +1583,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 96AFAE1F16C1D4EA009DE44C /* Build configuration list for PBXProject "RetroArch_iOS" */ = { + 96AFAE1F16C1D4EA009DE44C /* Build configuration list for PBXProject "RetroArch_iOS10" */ = { isa = XCConfigurationList; buildConfigurations = ( 96AFAE5216C1D4EA009DE44C /* Debug */, diff --git a/pkg/apple/RetroArch_iOS10.xcodeproj/project.xcworkspace/xcshareddata/RetroArch_iOS10.xcscmblueprint b/pkg/apple/RetroArch_iOS10.xcodeproj/project.xcworkspace/xcshareddata/RetroArch_iOS10.xcscmblueprint new file mode 100644 index 0000000000..b1429b86f1 --- /dev/null +++ b/pkg/apple/RetroArch_iOS10.xcodeproj/project.xcworkspace/xcshareddata/RetroArch_iOS10.xcscmblueprint @@ -0,0 +1,30 @@ +{ + "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "C7C12374C7051F8843B3EFA1ACCAF2907102CCF7", + "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : { + + }, + "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : { + "76200F0D6584D865E96F58DE862E738E88B23A3C" : 9223372036854775807, + "C7C12374C7051F8843B3EFA1ACCAF2907102CCF7" : 9223372036854775807 + }, + "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "8BA6E269-73BB-4AAE-8F4A-967CCF8ACA14", + "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : { + "76200F0D6584D865E96F58DE862E738E88B23A3C" : "", + "C7C12374C7051F8843B3EFA1ACCAF2907102CCF7" : "retroarch\/" + }, + "DVTSourceControlWorkspaceBlueprintNameKey" : "RetroArch_iOS10", + "DVTSourceControlWorkspaceBlueprintVersion" : 204, + "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "pkg\/apple\/RetroArch_iOS10.xcodeproj", + "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [ + { + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/libretro\/libretro-super.git", + "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "76200F0D6584D865E96F58DE862E738E88B23A3C" + }, + { + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/libretro\/RetroArch.git", + "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "C7C12374C7051F8843B3EFA1ACCAF2907102CCF7" + } + ] +} \ No newline at end of file diff --git a/pkg/emscripten/embed/embed.js b/pkg/emscripten/embed/embed.js index e5c9e12327..dc3a21e3ca 100644 --- a/pkg/emscripten/embed/embed.js +++ b/pkg/emscripten/embed/embed.js @@ -48,9 +48,24 @@ var showError = function(error) { function cleanupStorage() { localStorage.clear(); - document.getElementById('btnClean').disabled = true; + if (BrowserFS.FileSystem.IndexedDB.isAvailable()) + { + var req = indexedDB.deleteDatabase("RetroArch"); + req.onsuccess = function () { + console.log("Deleted database successfully"); + }; + req.onerror = function () { + console.log("Couldn't delete database"); + }; + req.onblocked = function () { + console.log("Couldn't delete database due to the operation being blocked"); + }; + } + + document.getElementById("btnClean").disabled = true; } + function dropboxInit() { //document.getElementById("btnDrop").disabled = true; diff --git a/pkg/emscripten/itch/index.html b/pkg/emscripten/itch/index.html index bcd52fcddd..e16e0cd527 100644 --- a/pkg/emscripten/itch/index.html +++ b/pkg/emscripten/itch/index.html @@ -131,5 +131,9 @@ +
+ + +
diff --git a/pkg/emscripten/itch/itch.js b/pkg/emscripten/itch/itch.js index ed7940d0f2..7a09a3a7a8 100644 --- a/pkg/emscripten/itch/itch.js +++ b/pkg/emscripten/itch/itch.js @@ -48,9 +48,24 @@ var showError = function(error) { function cleanupStorage() { localStorage.clear(); - document.getElementById('btnClean').disabled = true; + if (BrowserFS.FileSystem.IndexedDB.isAvailable()) + { + var req = indexedDB.deleteDatabase("RetroArch"); + req.onsuccess = function () { + console.log("Deleted database successfully"); + }; + req.onerror = function () { + console.log("Couldn't delete database"); + }; + req.onblocked = function () { + console.log("Couldn't delete database due to the operation being blocked"); + }; + } + + document.getElementById("btnClean").disabled = true; } + function dropboxInit() { document.getElementById('btnRun').disabled = true; diff --git a/pkg/emscripten/libretro/index.html b/pkg/emscripten/libretro/index.html index e0a77e1ea9..89ecbe4eef 100644 --- a/pkg/emscripten/libretro/index.html +++ b/pkg/emscripten/libretro/index.html @@ -10,12 +10,12 @@ - + - + - +