From 0a0cc6494ac284fc3afdd6bbca6da30b1b6be11e Mon Sep 17 00:00:00 2001 From: Brad Parker Date: Fri, 2 Dec 2016 12:15:38 -0500 Subject: [PATCH 1/4] build fixes for MSVC, start moving back to TCHAR usage so we can switch unicode on and off --- audio/drivers/dsound.c | 24 +- input/drivers/dinput.c | 2 +- input/drivers_joypad/dinput_joypad.c | 21 +- libretro-common/dynamic/dylib.c | 18 +- libretro-common/file/retro_dirent.c | 5 +- libretro-common/include/encodings/win32.h | 53 + menu/menu_event.c | 6 +- retroarch.cfg | 2410 +++++++++++++------- ui/drivers/ui_win32.c | 67 +- ui/drivers/win32/ui_win32_browser_window.c | 50 +- ui/drivers/win32/ui_win32_window.cpp | 9 +- 11 files changed, 1797 insertions(+), 868 deletions(-) create mode 100644 libretro-common/include/encodings/win32.h diff --git a/audio/drivers/dsound.c b/audio/drivers/dsound.c index 2cdcf4d234..ff2d8368b8 100644 --- a/audio/drivers/dsound.c +++ b/audio/drivers/dsound.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. @@ -19,6 +19,8 @@ #include #include +#include + #ifndef _XBOX #include #include @@ -93,7 +95,7 @@ static INLINE bool grab_region(dsound_t *ds, uint32_t write_ptr, struct audio_lock *region) { const char *err = NULL; - HRESULT res = IDirectSoundBuffer_Lock(ds->dsb, write_ptr, CHUNK_SIZE, + HRESULT res = IDirectSoundBuffer_Lock(ds->dsb, write_ptr, CHUNK_SIZE, ®ion->chunk1, ®ion->size1, ®ion->chunk2, ®ion->size2, 0); if (res == DSERR_BUFFERLOST) @@ -152,7 +154,7 @@ static void dsound_thread(void *data) struct audio_lock region; DWORD read_ptr, avail, fifo_avail; get_positions(ds, &read_ptr, NULL); - + avail = write_avail(read_ptr, write_ptr, ds->buffer_size); EnterCriticalSection(&ds->crit); @@ -161,12 +163,12 @@ static void dsound_thread(void *data) if (avail < CHUNK_SIZE || ((fifo_avail < CHUNK_SIZE) && (avail < ds->buffer_size / 2))) { - /* No space to write, or we don't have data in our fifo, + /* No space to write, or we don't have data in our fifo, * but we can wait some time before it underruns ... */ /* We could opt for using the notification interface, - * but it is not guaranteed to work, so use high + * but it is not guaranteed to work, so use high * priority sleeping patterns. */ retro_sleep(1); @@ -182,7 +184,7 @@ static void dsound_thread(void *data) if (fifo_avail < CHUNK_SIZE) { - /* Got space to write, but nothing in FIFO (underrun), + /* Got space to write, but nothing in FIFO (underrun), * fill block with silence. */ memset(region.chunk1, 0, region.size1); @@ -191,7 +193,7 @@ static void dsound_thread(void *data) release_region(ds, ®ion); write_ptr = (write_ptr + region.size1 + region.size2) % ds->buffer_size; } - else + else { /* All is good. Pull from it and notify FIFO. */ @@ -291,11 +293,15 @@ struct dsound_dev LPGUID guid; }; -static BOOL CALLBACK enumerate_cb(LPGUID guid, LPCSTR desc, LPCSTR module, LPVOID context) +static BOOL CALLBACK enumerate_cb(LPGUID guid, LPCTSTR desc, LPCTSTR module, LPVOID context) { struct dsound_dev *dev = (struct dsound_dev*)context; + WCHAR_TO_CHAR_ALLOC(desc, desc_str) - RARCH_LOG("\t%u: %s\n", dev->total_count, desc); + RARCH_LOG("\t%u: %s\n", dev->total_count, desc_str); + + if (desc_str) + free(desc_str); if (dev->device == dev->total_count) dev->guid = guid; diff --git a/input/drivers/dinput.c b/input/drivers/dinput.c index c5f96d0ec5..51f76b4eab 100644 --- a/input/drivers/dinput.c +++ b/input/drivers/dinput.c @@ -48,7 +48,7 @@ #include "../../configuration.h" #include "../../verbosity.h" -#include "../tasks/tasks_internal.h" +#include "../../tasks/tasks_internal.h" #include "../input_config.h" #include "../input_joypad_driver.h" #include "../input_keymaps.h" diff --git a/input/drivers_joypad/dinput_joypad.c b/input/drivers_joypad/dinput_joypad.c index f3ceddb62e..1765410428 100644 --- a/input/drivers_joypad/dinput_joypad.c +++ b/input/drivers_joypad/dinput_joypad.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. @@ -17,6 +17,7 @@ #include #include #include +#include #include #include @@ -76,7 +77,7 @@ static void dinput_joypad_destroy(void) IDirectInputDevice8_Unacquire(g_pads[i].joypad); IDirectInputDevice8_Release(g_pads[i].joypad); } - + free(g_pads[i].joy_name); g_pads[i].joy_name = NULL; free(g_pads[i].joy_friendly_name); @@ -115,11 +116,11 @@ static bool guid_is_xinput_device(const GUID* product_guid) unsigned i, num_raw_devs = 0; PRAWINPUTDEVICELIST raw_devs = NULL; - /* Check for well known XInput device GUIDs, + /* Check for well known XInput device GUIDs, * thereby removing the need for the IG_ check. - * This lets us skip RAWINPUT for popular devices. + * This lets us skip RAWINPUT for popular devices. * - * Also, we need to do this for the Valve Streaming Gamepad + * Also, we need to do this for the Valve Streaming Gamepad * because it's virtualized and doesn't show up in the device list. */ for (i = 0; i < ARRAY_SIZE(common_xinput_guids); ++i) @@ -208,6 +209,7 @@ static BOOL CALLBACK enum_joypad_cb(const DIDEVICEINSTANCE *inst, void *p) #endif LPDIRECTINPUTDEVICE8 *pad = NULL; settings_t *settings = config_get_ptr(); + WCHAR_TO_CHAR_ALLOC(inst->tszInstanceName, name) (void)p; @@ -223,10 +225,13 @@ static BOOL CALLBACK enum_joypad_cb(const DIDEVICEINSTANCE *inst, void *p) if (FAILED(IDirectInput8_CreateDevice( g_dinput_ctx, &inst->guidInstance, pad, NULL))) #endif - return DIENUM_CONTINUE; + return DIENUM_CONTINUE; - g_pads[g_joypad_cnt].joy_name = strdup(inst->tszProductName); - g_pads[g_joypad_cnt].joy_friendly_name = strdup(inst->tszInstanceName); + g_pads[g_joypad_cnt].joy_name = strdup(name); + g_pads[g_joypad_cnt].joy_friendly_name = strdup(name); + + if (name) + free(name); /* there may be more useful info in the GUID so leave this here for a while */ #if 0 diff --git a/libretro-common/dynamic/dylib.c b/libretro-common/dynamic/dylib.c index 611c9f8771..a1da7b8a45 100644 --- a/libretro-common/dynamic/dylib.c +++ b/libretro-common/dynamic/dylib.c @@ -23,6 +23,7 @@ #include #include #include +#include #ifdef NEED_DYNAMIC @@ -34,7 +35,7 @@ #endif #ifdef _WIN32 -static char last_dyn_error[512]; +static TCHAR last_dyn_error[512]; static void set_dl_error(void) { @@ -45,11 +46,16 @@ static void set_dl_error(void) NULL, err, MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT), - last_dyn_error, + (LPTSTR)last_dyn_error, sizeof(last_dyn_error) - 1, NULL) == 0) - snprintf(last_dyn_error, sizeof(last_dyn_error) - 1, + { + WCHAR_TO_CHAR_ALLOC(last_dyn_error, last_dyn_error_str) + snprintf(last_dyn_error_str, sizeof(last_dyn_error) - 1, "unknown error %lu", err); + if (last_dyn_error_str) + free(last_dyn_error_str); + } } #endif @@ -65,8 +71,12 @@ dylib_t dylib_load(const char *path) { #ifdef _WIN32 int prevmode = SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX); - dylib_t lib = LoadLibrary(path); + dylib_t lib = NULL; + CHAR_TO_WCHAR_ALLOC(path, path_wide) + lib = LoadLibrary(path_wide); + + free(path_wide); SetErrorMode(prevmode); if (!lib) diff --git a/libretro-common/file/retro_dirent.c b/libretro-common/file/retro_dirent.c index dda73a682b..f29705b15d 100644 --- a/libretro-common/file/retro_dirent.c +++ b/libretro-common/file/retro_dirent.c @@ -24,6 +24,7 @@ #include #include +#include #include #include @@ -97,7 +98,9 @@ const char *retro_dirent_get_name(struct RDIR *rdir) { #if defined(_WIN32) memset(rdir->path, 0, sizeof(rdir->path)); - utf16_to_char_string(rdir->entry.cFileName, rdir->path, sizeof(rdir->path)); +#ifdef UNICODE + utf16_to_char_string((const uint16_t*)rdir->entry.cFileName, rdir->path, sizeof(rdir->path)); +#endif return rdir->path; #elif defined(VITA) || defined(PSP) || defined(__CELLOS_LV2__) return rdir->entry.d_name; diff --git a/libretro-common/include/encodings/win32.h b/libretro-common/include/encodings/win32.h new file mode 100644 index 0000000000..13ca67ce7b --- /dev/null +++ b/libretro-common/include/encodings/win32.h @@ -0,0 +1,53 @@ +/* Copyright (C) 2010-2016 The RetroArch team + * + * --------------------------------------------------------------------------------------- + * The following license statement only applies to this file (utf.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_ENCODINGS_WIN32_H +#define _LIBRETRO_ENCODINGS_WIN32_H + +#ifndef _XBOX +#ifdef _WIN32 +#define UNICODE +#include +#include +#include +#endif +#endif + +#ifdef UNICODE +#define CHAR_TO_WCHAR_ALLOC(s, ws) \ + size_t ws##_size = (s[0] ? strlen(s) : 0) + 1; \ + wchar_t *ws = (wchar_t*)calloc(ws##_size, 2); \ + if (s[0]) \ + MultiByteToWideChar(CP_UTF8, 0, s, -1, ws, ws##_size / sizeof(wchar_t)); + +#define WCHAR_TO_CHAR_ALLOC(ws, s) \ + size_t s##_size = ((ws[0] ? wcslen((const wchar_t*)ws) : 0) / 2) + 1; \ + char *s = (char*)calloc(s##_size, 1); \ + if (ws[0]) \ + utf16_to_char_string((const uint16_t*)ws, s, s##_size); + +#else +#define CHAR_TO_WCHAR_ALLOC(s, ws) char *ws = strdup(s); +#define WCHAR_TO_CHAR_ALLOC(ws, s) char *s = strdup(ws); +#endif + +#endif diff --git a/menu/menu_event.c b/menu/menu_event.c index 5d7cdaab5e..dc31e700e4 100644 --- a/menu/menu_event.c +++ b/menu/menu_event.c @@ -200,14 +200,12 @@ 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 bool ok_old = false; + static char 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; - bool ok_current = input & UINT64_C(1) << menu_ok_btn; - - /* TODO/FIXME - unsafe use of type 'bool' in operation */ + char ok_current = input & UINT64_C(1) << menu_ok_btn; bool ok_trigger = ok_current & ~ok_old; ok_old = ok_current; diff --git a/retroarch.cfg b/retroarch.cfg index 7d9890a08f..489ff50820 100644 --- a/retroarch.cfg +++ b/retroarch.cfg @@ -1,800 +1,1610 @@ -## Skeleton config file for RetroArch - -# Save all save files (*.srm) to this directory. This includes related files like .bsv, .rtc, .psrm, etc ... -# This will be overridden by explicit command line options. -# savefile_directory = - -# Save all save states (*.state) to this directory. -# This will be overridden by explicit command line options. -# savestate_directory = - -# If set to a directory, content which is temporarily extracted -# will be extracted to this directory. -# cache_directory = - -# Save all input remapping files to this directory. -# input_remapping_directory = - -# Save all playlist files to this directory. -# playlist_directory = - -# If set to a directory, the content history playlist will be saved -# to this directory. -# content_history_dir = - -# Automatically saves a savestate at the end of RetroArch's lifetime. -# The path is $SRAM_PATH.auto. -# RetroArch will automatically load any savestate with this path on startup if savestate_auto_load is set. -# savestate_auto_save = false -# savestate_auto_load = true - -# Load libretro from a dynamic location for dynamically built RetroArch. -# This option is mandatory. - -# Path to a libretro implementation. -# libretro_path = "/path/to/libretro.so" - -# A directory for where to search for libretro core implementations. -# libretro_directory = - -# A directory for where to search for libretro core information. -# libretro_info_path = - -# Sets log level for libretro cores (GET_LOG_INTERFACE). -# If a log level issued by a libretro core is below libretro_log_level, it is ignored. -# DEBUG logs are always ignored unless verbose mode is activated (--verbose). -# DEBUG = 0, INFO = 1, WARN = 2, ERROR = 3. -# libretro_log_level = 0 - -# Enable or disable verbosity level of frontend. -# log_verbosity = false - -# If this option is enabled, every content file loaded in RetroArch will be -# automatically added to a history list. -# history_list_enable = true - -# Enable or disable RetroArch performance counters -# perfcnt_enable = false - -# Path to core options config file. -# This config file is used to expose core-specific options. -# It will be written to by RetroArch. -# A default path will be assigned if not set. -# core_options_path = - -# Path to content history file. -# RetroArch keeps track of all content loaded in the menu and from CLI directly for convenient quick loading. -# A default path will be assigned if not set. -# content_history_path = - -# Path to music content history file (optional). -# RetroArch keeps track of all music content loaded in the menu and from CLI directly for convenient quick loading. -# A default path will be assigned if not set. -# content_music_history_path = - -# Path to image content history file (optional). -# RetroArch keeps track of all image content loaded in the menu and from CLI directly for convenient quick loading. -# A default path will be assigned if not set. -# content_image_history_path = - -# Path to video content history file (optional). -# RetroArch keeps track of all video content loaded in the menu and from CLI directly for convenient quick loading. -# A default path will be assigned if not set. -# content_video_history_path = - -# Number of entries that will be kept in content history file. -# content_history_size = 100 - -# Sets the "system" directory. -# Implementations can query for this directory to load BIOSes, system-specific configs, etc. -# system_directory = - -# Sets start directory for menu file browser. -# rgui_browser_directory = - -# Content directory. Interacts with RETRO_ENVIRONMENT_GET_CONTENT_DIRECTORY. -# Usually set by developers who bundle libretro/RetroArch apps to point to assets. -# content_directory = - -# Assets directory. This location is queried by default when menu interfaces try to look for -# loadable assets, etc. -# assets_directory = - -# Dynamic wallpapers directory. The place to store the wallpapers dynamically -# loaded by the menu depending on context. -# dynamic_wallpapers_directory = - -# Thumbnails directory. To store thumbnail files. -# thumbnails_directory = - -# Sets start directory for menu config browser. -# rgui_config_directory = - -# Show startup screen in menu. -# Is automatically set to false when seen for the first time. -# This is only updated in config if config_save_on_exit is set to true, however. -# rgui_show_start_screen = true - -# Flushes config to disk on exit. Useful for menu as settings can be modified. -# Overwrites the config. #include's and comments are not preserved. -# config_save_on_exit = true - -# Load up a specific config file based on the core being used. -# core_specific_config = false - -# Shows hidden files and folders in directory listings. -# show_hidden_files = true - -#### Video - -# Video driver to use. "gl", "xvideo", "sdl" -# video_driver = "gl" - -# Which context implementation to use. -# Possible ones for desktop are: glx, x-egl, kms-egl, sdl-gl, wgl. -# By default, tries to use first suitable driver. -# video_context_driver = - -# Windowed x resolution scale and y resolution scale -# (Real x res: base_size * xscale * aspect_ratio, real y res: base_size * yscale) -# video_scale = 3.0 - -# Fullscreen resolution. Resolution of 0 uses the resolution of the desktop. -# video_fullscreen_x = 0 -# video_fullscreen_y = 0 - -# Start in fullscreen. Can be changed at runtime. -# video_fullscreen = false - -# If fullscreen, prefer using a windowed fullscreen mode. -# video_windowed_fullscreen = true - -# Which monitor to prefer. 0 (default) means no particular monitor is preferred, 1 and up (1 being first monitor), -# suggests RetroArch to use that particular monitor. -# video_monitor_index = 0 - -# Forcibly disable composition. Only works in Windows Vista/7 for now. -# video_disable_composition = false - -# Video vsync. -# video_vsync = true - -# Max amount of swapchain images. -# Single buffering = 1, Double buffering = 2, 3 = Triple buffering -# video_max_swapchain_images = 3 - -# Forcibly disable sRGB FBO support. Some Intel OpenGL drivers on Windows -# have video problems with sRGB FBO support enabled. -# video_force_srgb_disable = false - -# Attempts to hard-synchronize CPU and GPU. Can reduce latency at cost of performance. -# video_hard_sync = false - -# Sets how many frames CPU can run ahead of GPU when using video_hard_sync. -# Maximum is 3. -# video_hard_sync_frames = 0 - -# Sets how many milliseconds to delay after VSync before running the core. -# Can reduce latency at cost of higher risk of stuttering. -# Maximum is 15. -# video_frame_delay = 0 - -# Inserts a black frame inbetween frames. -# Useful for 120 Hz monitors who want to play 60 Hz material with eliminated ghosting. -# video_refresh_rate should still be configured as if it is a 60 Hz monitor (divide refresh rate by 2). -# video_black_frame_insertion = false - -# Use threaded video driver. Using this might improve performance at possible cost of latency and more video stuttering. -# video_threaded = false - -# Use a shared context for HW rendered libretro cores. -# Avoids having to assume HW state changes inbetween frames. -# video_shared_context = false - -# Smoothens picture with bilinear filtering. Should be disabled if using pixel shaders. -# video_smooth = true - -# Forces rendering area to stay equal to content aspect ratio or as defined in video_aspect_ratio. -# video_force_aspect = true - -# Only scales video in integer steps. -# The base size depends on system-reported geometry and aspect ratio. -# If video_force_aspect is not set, X/Y will be integer scaled independently. -# video_scale_integer = false - -# A floating point value for video aspect ratio (width / height). -# If this is not set, aspect ratio is assumed to be automatic. -# Behavior then is defined by video_aspect_ratio_auto. -# video_aspect_ratio = - -# If this is true and video_aspect_ratio is not set, -# aspect ratio is decided by libretro implementation. -# If this is false, 1:1 PAR will always be assumed if video_aspect_ratio is not set. -# video_aspect_ratio_auto = false - -# Forces cropping of overscanned frames. -# Exact behavior of this option is implementation specific. -# video_crop_overscan = true - -# Path to shader. Shader can be either Cg, CGP (Cg preset) or GLSL, GLSLP (GLSL preset) -# video_shader = "/path/to/shader.{cg,cgp,glsl,glslp}" - -# Load video_shader on startup. -# Other shaders can still be loaded later in runtime. -# video_shader_enable = false - -# Defines a directory where shaders (Cg, CGP, GLSL) are kept for easy access. -# video_shader_dir = - -# CPU-based video filter. Path to a dynamic library. -# video_filter = - -# Defines a directory where CPU-based video filters are kept. -# video_filter_dir = - -# Path to a font used for rendering messages. This path must be defined to enable fonts. -# Do note that the _full_ path of the font is necessary! -# video_font_path = - -# Size of the font rendered. -# video_font_size = 32 - -# Enable usage of OSD messages. -# video_font_enable = true - -# Offset for where messages will be placed on screen. Values are in range 0.0 to 1.0 for both x and y values. -# [0.0, 0.0] maps to the lower left corner of the screen. -# video_message_pos_x = 0.05 -# video_message_pos_y = 0.05 - -# Color for message. The value is treated as a hexadecimal value. -# It is a regular RGB hex number, i.e. red is "ff0000". -# video_message_color = ffffff - -# Video refresh rate of your monitor. -# Used to calculate a suitable audio input rate. -# video_refresh_rate = 59.94 - -# Allows libretro cores to set rotation modes. -# Setting this to false will honor, but ignore this request. -# This is useful for vertically oriented content where one manually rotates the monitor. -# video_allow_rotate = true - -# Forces a certain rotation of the screen. -# The rotation is added to rotations which the libretro core sets (see video_allow_rotate). -# The angle is * 90 degrees counter-clockwise. -# video_rotation = 0 - -#### Audio - -# Enable audio. -# audio_enable = true - -# Mutes audio. -# audio_mute_enable = false - -# Audio output samplerate. -# audio_out_rate = 48000 - -# Audio resampler backend. Which audio resampler to use. -# Default will use "sinc". -# audio_resampler = - -# Audio driver backend. Depending on configuration possible candidates are: alsa, pulse, oss, jack, rsound, roar, openal, sdl, xaudio. -# audio_driver = - -# Override the default audio device the audio_driver uses. This is driver dependant. E.g. ALSA wants a PCM device, OSS wants a path (e.g. /dev/dsp), Jack wants portnames (e.g. system:playback1,system:playback_2), and so on ... -# audio_device = - -# Audio DSP plugin that processes audio before it's sent to the driver. Path to a dynamic library. -# audio_dsp_plugin = - -# Directory where DSP plugins are kept. -# audio_filter_dir = - -# Will sync (block) on audio. Recommended. -# audio_sync = true - -# Desired audio latency in milliseconds. Might not be honored if driver can't provide given latency. -# audio_latency = 64 - -# Enable audio rate control. -# audio_rate_control = true - -# Controls audio rate control delta. Defines how much input rate can be adjusted dynamically. -# Input rate = in_rate * (1.0 +/- audio_rate_control_delta) -# audio_rate_control_delta = 0.005 - -# Controls maximum audio timing skew. Defines the maximum change in input rate. -# Input rate = in_rate * (1.0 +/- max_timing_skew) -# audio_max_timing_skew = 0.05 - -# Audio volume. Volume is expressed in dB. -# 0 dB is normal volume. No gain will be applied. -# Gain can be controlled in runtime with input_volume_up/input_volume_down. -# audio_volume = 0.0 - -#### Overlay - -# Defines a directory where overlays are kept for easy access. -# overlay_directory = - -# Enable or disable the current overlay. -# input_overlay_enable = true - -# Hide the current overlay from appearing inside the menu. -# input_overlay_hide_in_menu = true - -# Path to input overlay. -# input_overlay = - -# Overlay opacity. -# input_overlay_opacity = 1.0 - -# Overlay scale. -# input_overlay_scale = 1.0 - -#### Input - -# Input driver. Depending on video driver, it might force a different input driver. -# input_driver = sdl - -# Input device driver. (Valid: linuxraw, sdl, dinput) -# input_joypad_driver = - -# Path to input remapping file. -# input_remapping_path = - -# Input bind timer timeout. -# Amount of seconds to wait until proceeding to the next bind. Default: 5, minimum: 1 -# input_bind_timeout = 1 - -# If enabled, overrides the input binds with the remapped binds set for the current core. -# input_remap_binds_enable = true - -# Maximum amount of users supported by RetroArch. -# input_max_users = 16 - -# Keyboard layout for input driver if applicable (udev/evdev for now). -# Syntax is either just layout (e.g. "no"), or a layout and variant separated with colon ("no:nodeadkeys"). -# input_keyboard_layout = - -# Defines axis threshold. Possible values are [0.0, 1.0] -# input_axis_threshold = 0.5 - -# Enable input auto-detection. Will attempt to autoconfigure -# joypads, Plug-and-Play style. -# input_autodetect_enable = true - -# Show the input descriptors set by the core instead of the -# default ones. -# input_descriptor_label_show = true - -# Hide input descriptors that were not set by the core. -# input_descriptor_hide_unbound = false - -# Influence how input polling is done inside RetroArch. -# 0 : Early - Input polling is performed before call to retro_run. -# 1 : Normal - Input polling is performed when retro_input_poll is -# requested. -# 2 : Late - Input polling is performed on first call to retro_input_state -# per frame -# -# Setting it to 0 or 2 can result in less latency depending on -# your configuration. -# -# When netplay is enabled, the default polling behavior (1) will -# be used regardless of the value set here. -# input_poll_type_behavior = 1 - -# Directory for joypad autoconfigs. -# If a joypad is plugged in, that joypad will be autoconfigured if a config file -# corresponding to that joypad is present in joypad_autoconfig_dir. -# Input binds which are made explicit (input_playerN_*_btn/axis) will take priority over autoconfigs. -# Autoconfigs can be created with retroarch-joyconfig, manually, or with a frontend. -# Requires input_autodetect_enable to be enabled. -# joypad_autoconfig_dir = - -# Sets which libretro device is used for a user. -# Devices are indentified with a number. -# This is normally saved by the menu. -# Device IDs are found in libretro.h. -# These settings are overridden by explicit command-line arguments which refer to input devices. -# None: 0 -# Joypad (RetroPad): 1 -# Mouse: 2 -# Keyboard: 3 -# Generic Lightgun: 4 -# Joypad w/ Analog (RetroPad + Analog sticks): 5 -# Multitap (SNES specific): 257 -# Super Scope (SNES specific): 260 -# Justifier (SNES specific): 516 -# Justifiers (SNES specific): 772 - -# input_libretro_device_p1 = -# input_libretro_device_p2 = -# input_libretro_device_p3 = -# input_libretro_device_p4 = -# input_libretro_device_p5 = -# input_libretro_device_p6 = -# input_libretro_device_p7 = -# input_libretro_device_p8 = - -# Keyboard input. Will recognize letters ("a" to "z") and the following special keys (where "kp_" -# is for keypad keys): -# -# left, right, up, down, enter, kp_enter, tab, insert, del, end, home, -# rshift, shift, ctrl, alt, space, escape, add, subtract, kp_plus, kp_minus, -# f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, -# num0, num1, num2, num3, num4, num5, num6, num7, num8, num9, pageup, pagedown, -# keypad0, keypad1, keypad2, keypad3, keypad4, keypad5, keypad6, keypad7, keypad8, keypad9, -# period, capslock, numlock, backspace, multiply, divide, print_screen, scroll_lock, -# tilde, backquote, pause, quote, comma, minus, slash, semicolon, equals, leftbracket, -# backslash, rightbracket, kp_period, kp_equals, rctrl, ralt -# -# Keyboard input, Joypad and Joyaxis will all obey the "nul" bind, which disables the bind completely, -# rather than relying on a default. -# input_player1_a = "x" -# input_player1_b = "z" -# input_player1_y = "a" -# input_player1_x = "s" -# input_player1_start = "enter" -# input_player1_select = "rshift" -# input_player1_l = "q" -# input_player1_r = "w" -# input_player1_left = "left" -# input_player1_right = "right" -# input_player1_up = "up" -# input_player1_down = "down" -# input_player1_l2 = -# input_player1_r2 = -# input_player1_l3 = -# input_player1_r3 = - -# Two analog sticks (DualShock-esque). -# Bound as usual, however, if a real analog axis is bound, -# it can be read as a true analog. -# Positive X axis is right, Positive Y axis is down. -# input_player1_l_x_plus = -# input_player1_l_x_minus = -# input_player1_l_y_plus = -# input_player1_l_y_minus = -# input_player1_r_x_plus = -# input_player1_r_x_minus = -# input_player1_r_y_plus = -# input_player1_r_y_minus = - -# If desired, it is possible to override which joypads are being used for user 1 through 8. -# First joypad available is 0. -# input_player1_joypad_index = 0 -# input_player2_joypad_index = 1 -# input_player3_joypad_index = 2 -# input_player4_joypad_index = 3 -# input_player5_joypad_index = 4 -# input_player6_joypad_index = 5 -# input_player7_joypad_index = 6 -# input_player8_joypad_index = 7 - -# Input device buttons. -# Figure these out by using RetroArch-Phoenix or retroarch-joyconfig. -# You can use joypad hats with hnxx, where n is the hat, and xx is a string representing direction. -# E.g. "h0up" -# input_player1_a_btn = -# input_player1_b_btn = -# input_player1_y_btn = -# input_player1_x_btn = -# input_player1_start_btn = -# input_player1_select_btn = -# input_player1_l_btn = -# input_player1_r_btn = -# input_player1_left_btn = -# input_player1_right_btn = -# input_player1_up_btn = -# input_player1_down_btn = -# input_player1_l2_btn = -# input_player1_r2_btn = -# input_player1_l3_btn = -# input_player1_r3_btn = - -# Menu buttons. -# menu_search_btn = -# menu_info_btn = -# menu_default_btn = -# menu_scroll_down_btn = -# menu_scroll_up_btn = - -# Swap buttons for OK/Cancel -# menu_swap_ok_cancel_buttons = false - -# Axis for RetroArch D-Pad. -# Needs to be either '+' or '-' in the first character signaling either positive or negative direction of the axis, then the axis number. -# Do note that every other input option has the corresponding _btn and _axis binds as well; they are omitted here for clarity. -# input_player1_left_axis = -# input_player1_right_axis = -# input_player1_up_axis = -# input_player1_down_axis = - -# Holding the turbo while pressing another button will let the button enter a turbo mode -# where the button state is modulated with a periodic signal. -# The modulation stops when the button itself (not turbo button) is released. -# input_player1_turbo = - -# Describes the period and how long of that period a turbo-enabled button should behave. -# Numbers are described in frames. -# input_turbo_period = 6 -# input_turbo_duty_cycle = 3 - -# This goes all the way to user 8 (*_player2_*, *_player3_*, etc), but omitted for clarity. -# All input binds have corresponding binds for keyboard (none), joykeys (_btn) and joyaxes (_axis) as well. - -# Toggles fullscreen. -# input_toggle_fullscreen = f - -# Saves state. -# input_save_state = f2 -# Loads state. -# input_load_state = f4 - -# State slots. With slot set to 0, save state name is *.state (or whatever defined on commandline). -# When slot is != 0, path will be $path%d, where %d is slot number. -# input_state_slot_increase = f7 -# input_state_slot_decrease = f6 - -# Toggles between fast-forwarding and normal speed. -# input_toggle_fast_forward = space - -# Hold for fast-forward. Releasing button disables fast-forward. -# input_hold_fast_forward = l - -# Key to exit RetroArch cleanly. -# Killing it in any hard way (SIGKILL, etc) will terminate RetroArch without saving RAM, etc. -# On Unix-likes, SIGINT/SIGTERM allows a clean deinitialization. -# input_exit_emulator = escape - - -# Applies next and previous shader in directory. -# input_shader_next = m -# input_shader_prev = n - -# Hold button down to rewind. Rewinding must be enabled. -# input_rewind = r - -# Toggle between recording and not. -# input_movie_record_toggle = o - -# Toggle between paused and non-paused state -# input_pause_toggle = p - -# Frame advance when content is paused -# input_frame_advance = k - -# Reset the content. -# input_reset = h - -# Cheats. -# input_cheat_index_plus = y -# input_cheat_index_minus = t -# input_cheat_toggle = u - -# Mute/unmute audio -# input_audio_mute = f9 - -# Take screenshot -# input_screenshot = f8 - -# Netplay flip users. -# input_netplay_flip_players = i - -# Hold for slowmotion. -# input_slowmotion = e - -# Enable other hotkeys. -# If this hotkey is bound to either keyboard, joybutton or joyaxis, -# all other hotkeys will be disabled unless this hotkey is also held at the same time. -# This is useful for RETRO_KEYBOARD centric implementations -# which query a large area of the keyboard, where it is not desirable -# that hotkeys get in the way. - -# Alternatively, all hotkeys for keyboard could be disabled by the user. -# input_enable_hotkey_btn = - -# Increases audio volume. -# input_volume_up = kp_plus -# Decreases audio volume. -# input_volume_down = kp_minus - -# Toggles to next overlay. Wraps around. -# input_overlay_next = - -# Toggles eject for disks. Used for multiple-disk content. -# input_disk_eject_toggle = - -# Cycles through disk images. Use after ejecting. -# Complete by toggling eject again. -# input_disk_next = - -# Toggles menu. -# input_menu_toggle = f1 - -# RetroPad button combination to toggle menu -# 0 = none, 1 = L + R + Y + D-Pad Down, 2 = L3 + R3, 3 = Start + Select -# input_menu_toggle_gamepad_combo = 0 - -# allow any RetroPad to control the menu -# all_users_control_menu = false - -# Toggles mouse grab. When mouse is grabbed, RetroArch hides the mouse, -# and keeps the mouse pointer inside the window to allow relative mouse input -# to work better. -# input_grab_mouse_toggle = f11 - -#### Menu - -# Menu driver to use. "rgui", "lakka", etc. -# menu_driver = "rgui" - -# If disabled, the libretro core will keep running in the background when we -# are in the menu. -# menu_pause_libretro = false - -# Enable mouse input inside the menu. -# menu_mouse_enable = false - -# Enable touch input inside the menu. -# menu_pointer_enable = false - -# Shows current date and/or time inside menu. -# menu_timedate_enable = true - -# Shows current core inside menu. -# menu_core_enable = true - -# Path to an image to set as menu wallpaper. -# menu_wallpaper = - -# Dynamically load a new wallpaper depending on context. -# menu_dynamic_wallpaper_enable = false - -# Type of thumbnail to display. 0 = none, 1 = snaps, 2 = titles, 3 = boxarts -# menu_thumbnails = 0 - -# Wrap-around to beginning and/or end if boundary of list is reached horizontally or vertically -# menu_navigation_wraparound_enable = false - -# Filter files being show in 'Load Content' by supported extensions -# menu_navigation_browser_filter_supported_extensions_enable = true - -# Collapse subgroup settings into main group to create one big listing of settings -# per category. -# menu_collapse_subgroups_enable = false - -#### Core -# -# Prevent libretro cores from closing RetroArch on exit by loading a dummy core. -# load_dummy_on_core_shutdown = "true" - -# Check for firmware requirement(s) before loading a content. -# check_firmware_before_loading = "false" - -#### UI - -# Suspends the screensaver if set to true. Is a hint that does not necessarily have to be honored -# by video driver. -# suspend_screensaver_enable = true - -# Start UI companion driver's interface on boot (if available). -# ui_companion_start_on_boot = true - -#### Camera - -# Override the default camera device the camera driver uses. This is driver dependant. -# camera_device = - -# Override the default privacy permission for cores that want to access camera services. Is "false" by default. -# camera_allow = false - -#### Location - -# Override the default privacy permission for cores that want to access location services. Is "false" by default. -# location_allow = false - -#### Core Updater - -# URL to core update directory on buildbot. -# core_updater_buildbot_url = "http://buildbot.libretro.com" - -# URL to assets update directory on buildbot. -# core_updater_buildbot_assets_url = "http://buildbot.libretro.com/assets/" - -# After downloading, automatically extract archives that the downloads are contained inside. -# core_updater_auto_extract_archive = true - -#### Network - -# When being client over netplay, use keybinds for user 1. -# netplay_client_swap_input = false - -# The username of the person running RetroArch. This will be used for playing online, for instance. -# netplay_nickname = - -# The amount of delay frames to use for netplay. Increasing this value will increase -# performance, but introduce more latency. -# netplay_delay_frames = 0 - -# Netplay mode for the current user. -# false is Server, true is Client. -# netplay_mode = false - -# Enable or disable spectator mode for the user during netplay. -# netplay_spectator_mode_enable = false - -# The IP Address of the host to connect to. -# netplay_ip_address = - -# The port of the host IP Address. Can be either a TCP or UDP port. -# netplay_ip_port = 55435 - -#### Misc - -# Enable rewinding. This will take a performance hit when playing, so it is disabled by default. -# rewind_enable = false - -# Rewinding buffer size in megabytes. Bigger rewinding buffer means you can rewind longer. -# The buffer should be approx. 20MB per minute of buffer time. -# rewind_buffer_size = 20 - -# Rewind granularity. When rewinding defined number of frames, you can rewind several frames at a time, increasing the rewinding speed. -# rewind_granularity = 1 - -# Pause gameplay when window focus is lost. -# pause_nonactive = true - -# Autosaves the non-volatile SRAM at a regular interval. This is disabled by default unless set otherwise. -# The interval is measured in seconds. A value of 0 disables autosave. -# autosave_interval = - -# Path to content database directory. -# content_database_path = - -# Path to cheat database directory. -# cheat_database_path = - -# Directory to dump screenshots to. -# screenshot_directory = - -# Records video after CPU video filter. -# video_post_filter_record = false - -# Records output of GPU shaded material if available. -# video_gpu_record = false - -# Screenshots output of GPU shaded material if available. -# video_gpu_screenshot = true - -# Block SRAM from being overwritten when loading save states. -# Might potentially lead to buggy games. -# block_sram_overwrite = false - -# When saving a savestate, save state index is automatically increased before -# it is saved. -# Also, when loading content, the index will be set to the highest existing index. -# There is no upper bound on the index. -# savestate_auto_index = false - -# Slowmotion ratio. When slowmotion, content will slow down by factor. -# slowmotion_ratio = 3.0 - -# The maximum rate at which content will be run when using fast forward. (E.g. 5.0 for 60 fps content => 300 fps cap). -# RetroArch will go to sleep to ensure that the maximum rate will not be exceeded. -# Do not rely on this cap to be perfectly accurate. -# If this is set at 0, then fastforward ratio is unlimited (no FPS cap) -# fastforward_ratio = 0.0 - -# Enable stdin/network command interface. -# network_cmd_enable = false -# network_cmd_port = 55355 -# stdin_cmd_enable = false - -#### Bundle extraction - - +video_driver = "caca" +core_updater_buildbot_url = "http://buildbot.libretro.com/nightly/win-x86_64/latest/" +core_updater_buildbot_assets_url = "http://buildbot.libretro.com/assets/" +libretro_directory = "cores" +libretro_info_path = "info" +content_database_path = "database\rdb" +cheat_database_path = "cheats" +content_history_path = ".\content_history.lpl" +content_music_history_path = ".\content_music_history.lpl" +content_video_history_path = ".\content_video_history.lpl" +content_image_history_path = ".\content_image_history.lpl" +cursor_directory = "database\cursors" +screenshot_directory = "default" +system_directory = "default" +input_remapping_directory = "config\remaps" +video_shader_dir = "shaders" +video_filter_dir = "filters\video" +core_assets_directory = "downloads" +assets_directory = "assets" +dynamic_wallpapers_directory = "assets\wallpapers" +thumbnails_directory = "thumbnails" +playlist_directory = "playlists" +joypad_autoconfig_dir = "autoconfig" +audio_filter_dir = "filters\audio" +savefile_directory = "default" +savestate_directory = "default" +rgui_browser_directory = "default" +rgui_config_directory = "config" +overlay_directory = "overlays" +screenshot_directory = "default" +record_driver = "null" +camera_driver = "null" +wifi_driver = "null" +location_driver = "null" +menu_driver = "xmb" +audio_driver = "xaudio" +audio_resampler = "sinc" +input_driver = "dinput" +input_joypad_driver = "xinput" +video_aspect_ratio = "-1.000000" +video_scale = "3.000000" +video_refresh_rate = "59.940060" +audio_rate_control_delta = "0.005000" +audio_max_timing_skew = "0.050000" +audio_volume = "0.000000" +input_overlay_opacity = "0.700000" +input_overlay_scale = "1.000000" +menu_wallpaper_opacity = "0.300000" +menu_footer_opacity = "1.000000" +menu_header_opacity = "1.000000" +video_message_pos_x = "0.050000" +video_message_pos_y = "0.050000" +video_font_size = "32.000000" +fastforward_ratio = "0.000000" +slowmotion_ratio = "3.000000" +input_axis_threshold = "0.500000" +input_bind_timeout = "5" +input_turbo_period = "6" +input_duty_cycle = "3" +input_max_users = "5" +input_menu_toggle_gamepad_combo = "0" +audio_latency = "64" +audio_block_frames = "0" +rewind_granularity = "1" +autosave_interval = "0" +libretro_log_level = "0" +keyboard_gamepad_mapping_type = "1" +input_poll_type_behavior = "2" +video_monitor_index = "0" +video_fullscreen_x = "0" +video_fullscreen_y = "0" +video_window_x = "0" +video_window_y = "0" +network_cmd_port = "55355" +network_remote_base_port = "55400" +dpi_override_value = "200" +menu_thumbnails = "3" +xmb_alpha_factor = "75" +xmb_scale_factor = "100" +xmb_theme = "0" +xmb_menu_color_theme = "4" +materialui_menu_color_theme = "0" +menu_shader_pipeline = "2" +audio_out_rate = "48000" +custom_viewport_width = "960" +custom_viewport_height = "720" +custom_viewport_x = "0" +custom_viewport_y = "0" +content_history_size = "100" +video_hard_sync_frames = "0" +video_frame_delay = "0" +video_max_swapchain_images = "3" +video_swap_interval = "1" +video_rotation = "0" +aspect_ratio_index = "21" +state_slot = "0" +netplay_ip_port = "0" +netplay_delay_frames = "16" +netplay_check_frames = "30" +user_language = "0" +bundle_assets_extract_version_current = "0" +bundle_assets_extract_last_version = "0" +input_device_p1 = "0" +input_player1_joypad_index = "0" +input_libretro_device_p1 = "1" +input_player1_analog_dpad_mode = "0" +input_device_p2 = "0" +input_player2_joypad_index = "1" +input_libretro_device_p2 = "1" +input_player2_analog_dpad_mode = "0" +input_device_p3 = "0" +input_player3_joypad_index = "2" +input_libretro_device_p3 = "1" +input_player3_analog_dpad_mode = "0" +input_device_p4 = "0" +input_player4_joypad_index = "3" +input_libretro_device_p4 = "1" +input_player4_analog_dpad_mode = "0" +input_device_p5 = "0" +input_player5_joypad_index = "4" +input_libretro_device_p5 = "1" +input_player5_analog_dpad_mode = "0" +input_device_p6 = "0" +input_player6_joypad_index = "5" +input_libretro_device_p6 = "1" +input_player6_analog_dpad_mode = "0" +input_device_p7 = "0" +input_player7_joypad_index = "6" +input_libretro_device_p7 = "1" +input_player7_analog_dpad_mode = "0" +input_device_p8 = "0" +input_player8_joypad_index = "7" +input_libretro_device_p8 = "1" +input_player8_analog_dpad_mode = "0" +input_device_p9 = "0" +input_player9_joypad_index = "8" +input_libretro_device_p9 = "1" +input_player9_analog_dpad_mode = "0" +input_device_p10 = "0" +input_player10_joypad_index = "9" +input_libretro_device_p10 = "1" +input_player10_analog_dpad_mode = "0" +input_device_p11 = "0" +input_player11_joypad_index = "10" +input_libretro_device_p11 = "1" +input_player11_analog_dpad_mode = "0" +input_device_p12 = "0" +input_player12_joypad_index = "11" +input_libretro_device_p12 = "1" +input_player12_analog_dpad_mode = "0" +input_device_p13 = "0" +input_player13_joypad_index = "12" +input_libretro_device_p13 = "1" +input_player13_analog_dpad_mode = "0" +input_device_p14 = "0" +input_player14_joypad_index = "13" +input_libretro_device_p14 = "1" +input_player14_analog_dpad_mode = "0" +input_device_p15 = "0" +input_player15_joypad_index = "14" +input_libretro_device_p15 = "1" +input_player15_analog_dpad_mode = "0" +input_device_p16 = "0" +input_player16_joypad_index = "15" +input_libretro_device_p16 = "1" +input_player16_analog_dpad_mode = "0" +ui_companion_start_on_boot = "true" +ui_companion_enable = "false" +video_gpu_record = "false" +input_remap_binds_enable = "true" +all_users_control_menu = "false" +menu_swap_ok_cancel_buttons = "true" +netplay_client_swap_input = "true" +input_descriptor_label_show = "true" +input_descriptor_hide_unbound = "false" +load_dummy_on_core_shutdown = "true" +check_firmware_before_loading = "false" +builtin_mediaplayer_enable = "false" +builtin_imageviewer_enable = "true" +fps_show = "false" +ui_menubar_enable = "true" +suspend_screensaver_enable = "true" +rewind_enable = "false" +audio_sync = "true" +video_shader_enable = "false" +video_aspect_ratio_auto = "false" +video_allow_rotate = "true" +video_windowed_fullscreen = "true" +video_crop_overscan = "true" +video_scale_integer = "false" +video_smooth = "true" +video_force_aspect = "true" +video_threaded = "false" +video_shared_context = "false" +custom_bgm_enable = "false" +auto_screenshot_filename = "true" +video_force_srgb_disable = "false" +video_fullscreen = "false" +bundle_assets_extract_enable = "false" +video_vsync = "true" +video_hard_sync = "false" +video_black_frame_insertion = "false" +video_disable_composition = "false" +pause_nonactive = "true" +video_gpu_screenshot = "true" +video_post_filter_record = "false" +keyboard_gamepad_enable = "true" +core_set_supports_no_game_enable = "true" +audio_enable = "true" +audio_mute_enable = "false" +location_allow = "false" +video_font_enable = "true" +core_updater_auto_extract_archive = "true" +camera_allow = "false" +threaded_data_runloop_enable = "true" +menu_throttle_framerate = "true" +menu_linear_filter = "true" +dpi_override_enable = "true" +menu_pause_libretro = "true" +menu_mouse_enable = "true" +menu_pointer_enable = "false" +menu_timedate_enable = "true" +menu_core_enable = "true" +menu_dynamic_wallpaper_enable = "false" +xmb_shadows_enable = "true" +xmb_show_settings = "true" +xmb_show_images = "true" +xmb_show_history = "true" +rgui_show_start_screen = "false" +menu_navigation_wraparound_enable = "true" +menu_navigation_browser_filter_supported_extensions_enable = "true" +menu_show_advanced_settings = "true" +cheevos_enable = "false" +cheevos_test_unofficial = "false" +cheevos_hardcore_mode_enable = "false" +input_overlay_enable = "true" +input_overlay_enable_autopreferred = "true" +input_overlay_hide_in_menu = "true" +network_cmd_enable = "false" +stdin_cmd_enable = "false" +network_remote_enable = "false" +netplay_spectator_mode_enable = "false" +netplay_nat_traversal = "true" +block_sram_overwrite = "false" +savestate_auto_index = "false" +savestate_auto_save = "false" +savestate_auto_load = "false" +savestate_thumbnail_enable = "false" +history_list_enable = "true" +game_specific_options = "false" +auto_overrides_enable = "true" +auto_remaps_enable = "true" +auto_shaders_enable = "true" +sort_savefiles_enable = "false" +sort_savestates_enable = "false" +config_save_on_exit = "true" +show_hidden_files = "true" +input_autodetect_enable = "true" +audio_rate_control = "true" +network_remote_enable_user_p1 = "false" +network_remote_enable_user_p2 = "false" +network_remote_enable_user_p3 = "false" +network_remote_enable_user_p4 = "false" +network_remote_enable_user_p5 = "false" +network_remote_enable_user_p6 = "false" +network_remote_enable_user_p7 = "false" +network_remote_enable_user_p8 = "false" +network_remote_enable_user_p9 = "false" +network_remote_enable_user_p10 = "false" +network_remote_enable_user_p11 = "false" +network_remote_enable_user_p12 = "false" +network_remote_enable_user_p13 = "false" +network_remote_enable_user_p14 = "false" +network_remote_enable_user_p15 = "false" +network_remote_enable_user_p16 = "false" +log_verbosity = "false" +perfcnt_enable = "false" +video_message_color = "ffff00" +menu_entry_normal_color = "ffffffff" +menu_entry_hover_color = "ff64ff64" +menu_title_color = "ff64ff64" +gamma_correction = "false" +flicker_filter_enable = "false" +soft_filter_enable = "false" +soft_filter_index = "0" +current_resolution_id = "0" +flicker_filter_index = "0" +input_player1_b = "z" +input_player1_b_btn = "nul" +input_player1_b_axis = "nul" +input_player1_y = "a" +input_player1_y_btn = "nul" +input_player1_y_axis = "nul" +input_player1_select = "rshift" +input_player1_select_btn = "nul" +input_player1_select_axis = "nul" +input_player1_start = "enter" +input_player1_start_btn = "nul" +input_player1_start_axis = "nul" +input_player1_up = "up" +input_player1_up_btn = "nul" +input_player1_up_axis = "nul" +input_player1_down = "down" +input_player1_down_btn = "nul" +input_player1_down_axis = "nul" +input_player1_left = "left" +input_player1_left_btn = "nul" +input_player1_left_axis = "nul" +input_player1_right = "right" +input_player1_right_btn = "nul" +input_player1_right_axis = "nul" +input_player1_a = "x" +input_player1_a_btn = "nul" +input_player1_a_axis = "nul" +input_player1_x = "s" +input_player1_x_btn = "nul" +input_player1_x_axis = "nul" +input_player1_l = "q" +input_player1_l_btn = "nul" +input_player1_l_axis = "nul" +input_player1_r = "w" +input_player1_r_btn = "nul" +input_player1_r_axis = "nul" +input_player1_l2 = "nul" +input_player1_l2_btn = "nul" +input_player1_l2_axis = "nul" +input_player1_r2 = "nul" +input_player1_r2_btn = "nul" +input_player1_r2_axis = "nul" +input_player1_l3 = "nul" +input_player1_l3_btn = "nul" +input_player1_l3_axis = "nul" +input_player1_r3 = "nul" +input_player1_r3_btn = "nul" +input_player1_r3_axis = "nul" +input_player1_l_x_plus = "nul" +input_player1_l_x_plus_btn = "nul" +input_player1_l_x_plus_axis = "nul" +input_player1_l_x_minus = "nul" +input_player1_l_x_minus_btn = "nul" +input_player1_l_x_minus_axis = "nul" +input_player1_l_y_plus = "nul" +input_player1_l_y_plus_btn = "nul" +input_player1_l_y_plus_axis = "nul" +input_player1_l_y_minus = "nul" +input_player1_l_y_minus_btn = "nul" +input_player1_l_y_minus_axis = "nul" +input_player1_r_x_plus = "nul" +input_player1_r_x_plus_btn = "nul" +input_player1_r_x_plus_axis = "nul" +input_player1_r_x_minus = "nul" +input_player1_r_x_minus_btn = "nul" +input_player1_r_x_minus_axis = "nul" +input_player1_r_y_plus = "nul" +input_player1_r_y_plus_btn = "nul" +input_player1_r_y_plus_axis = "nul" +input_player1_r_y_minus = "nul" +input_player1_r_y_minus_btn = "nul" +input_player1_r_y_minus_axis = "nul" +input_player1_turbo = "nul" +input_player1_turbo_btn = "nul" +input_player1_turbo_axis = "nul" +input_toggle_fast_forward = "space" +input_toggle_fast_forward_btn = "nul" +input_toggle_fast_forward_axis = "nul" +input_hold_fast_forward = "l" +input_hold_fast_forward_btn = "nul" +input_hold_fast_forward_axis = "nul" +input_load_state = "f4" +input_load_state_btn = "nul" +input_load_state_axis = "nul" +input_save_state = "f2" +input_save_state_btn = "nul" +input_save_state_axis = "nul" +input_toggle_fullscreen = "f" +input_toggle_fullscreen_btn = "nul" +input_toggle_fullscreen_axis = "nul" +input_exit_emulator = "escape" +input_exit_emulator_btn = "nul" +input_exit_emulator_axis = "nul" +input_state_slot_increase = "f7" +input_state_slot_increase_btn = "nul" +input_state_slot_increase_axis = "nul" +input_state_slot_decrease = "f6" +input_state_slot_decrease_btn = "nul" +input_state_slot_decrease_axis = "nul" +input_rewind = "r" +input_rewind_btn = "nul" +input_rewind_axis = "nul" +input_movie_record_toggle = "o" +input_movie_record_toggle_btn = "nul" +input_movie_record_toggle_axis = "nul" +input_pause_toggle = "p" +input_pause_toggle_btn = "nul" +input_pause_toggle_axis = "nul" +input_frame_advance = "k" +input_frame_advance_btn = "nul" +input_frame_advance_axis = "nul" +input_reset = "h" +input_reset_btn = "nul" +input_reset_axis = "nul" +input_shader_next = "m" +input_shader_next_btn = "nul" +input_shader_next_axis = "nul" +input_shader_prev = "n" +input_shader_prev_btn = "nul" +input_shader_prev_axis = "nul" +input_cheat_index_plus = "y" +input_cheat_index_plus_btn = "nul" +input_cheat_index_plus_axis = "nul" +input_cheat_index_minus = "t" +input_cheat_index_minus_btn = "nul" +input_cheat_index_minus_axis = "nul" +input_cheat_toggle = "u" +input_cheat_toggle_btn = "nul" +input_cheat_toggle_axis = "nul" +input_screenshot = "f8" +input_screenshot_btn = "nul" +input_screenshot_axis = "nul" +input_audio_mute = "f9" +input_audio_mute_btn = "nul" +input_audio_mute_axis = "nul" +input_osk_toggle = "f12" +input_osk_toggle_btn = "nul" +input_osk_toggle_axis = "nul" +input_netplay_flip_players = "i" +input_netplay_flip_players_btn = "nul" +input_netplay_flip_players_axis = "nul" +input_slowmotion = "e" +input_slowmotion_btn = "nul" +input_slowmotion_axis = "nul" +input_enable_hotkey = "nul" +input_enable_hotkey_btn = "nul" +input_enable_hotkey_axis = "nul" +input_volume_up = "add" +input_volume_up_btn = "nul" +input_volume_up_axis = "nul" +input_volume_down = "subtract" +input_volume_down_btn = "nul" +input_volume_down_axis = "nul" +input_overlay_next = "nul" +input_overlay_next_btn = "nul" +input_overlay_next_axis = "nul" +input_disk_eject_toggle = "nul" +input_disk_eject_toggle_btn = "nul" +input_disk_eject_toggle_axis = "nul" +input_disk_next = "nul" +input_disk_next_btn = "nul" +input_disk_next_axis = "nul" +input_disk_prev = "nul" +input_disk_prev_btn = "nul" +input_disk_prev_axis = "nul" +input_grab_mouse_toggle = "f11" +input_grab_mouse_toggle_btn = "nul" +input_grab_mouse_toggle_axis = "nul" +input_menu_toggle = "f1" +input_menu_toggle_btn = "nul" +input_menu_toggle_axis = "nul" +input_player2_b = "nul" +input_player2_b_btn = "nul" +input_player2_b_axis = "nul" +input_player2_y = "nul" +input_player2_y_btn = "nul" +input_player2_y_axis = "nul" +input_player2_select = "nul" +input_player2_select_btn = "nul" +input_player2_select_axis = "nul" +input_player2_start = "nul" +input_player2_start_btn = "nul" +input_player2_start_axis = "nul" +input_player2_up = "nul" +input_player2_up_btn = "nul" +input_player2_up_axis = "nul" +input_player2_down = "nul" +input_player2_down_btn = "nul" +input_player2_down_axis = "nul" +input_player2_left = "nul" +input_player2_left_btn = "nul" +input_player2_left_axis = "nul" +input_player2_right = "nul" +input_player2_right_btn = "nul" +input_player2_right_axis = "nul" +input_player2_a = "nul" +input_player2_a_btn = "nul" +input_player2_a_axis = "nul" +input_player2_x = "nul" +input_player2_x_btn = "nul" +input_player2_x_axis = "nul" +input_player2_l = "nul" +input_player2_l_btn = "nul" +input_player2_l_axis = "nul" +input_player2_r = "nul" +input_player2_r_btn = "nul" +input_player2_r_axis = "nul" +input_player2_l2 = "nul" +input_player2_l2_btn = "nul" +input_player2_l2_axis = "nul" +input_player2_r2 = "nul" +input_player2_r2_btn = "nul" +input_player2_r2_axis = "nul" +input_player2_l3 = "nul" +input_player2_l3_btn = "nul" +input_player2_l3_axis = "nul" +input_player2_r3 = "nul" +input_player2_r3_btn = "nul" +input_player2_r3_axis = "nul" +input_player2_l_x_plus = "nul" +input_player2_l_x_plus_btn = "nul" +input_player2_l_x_plus_axis = "nul" +input_player2_l_x_minus = "nul" +input_player2_l_x_minus_btn = "nul" +input_player2_l_x_minus_axis = "nul" +input_player2_l_y_plus = "nul" +input_player2_l_y_plus_btn = "nul" +input_player2_l_y_plus_axis = "nul" +input_player2_l_y_minus = "nul" +input_player2_l_y_minus_btn = "nul" +input_player2_l_y_minus_axis = "nul" +input_player2_r_x_plus = "nul" +input_player2_r_x_plus_btn = "nul" +input_player2_r_x_plus_axis = "nul" +input_player2_r_x_minus = "nul" +input_player2_r_x_minus_btn = "nul" +input_player2_r_x_minus_axis = "nul" +input_player2_r_y_plus = "nul" +input_player2_r_y_plus_btn = "nul" +input_player2_r_y_plus_axis = "nul" +input_player2_r_y_minus = "nul" +input_player2_r_y_minus_btn = "nul" +input_player2_r_y_minus_axis = "nul" +input_player2_turbo = "nul" +input_player2_turbo_btn = "nul" +input_player2_turbo_axis = "nul" +input_player3_b = "nul" +input_player3_b_btn = "nul" +input_player3_b_axis = "nul" +input_player3_y = "nul" +input_player3_y_btn = "nul" +input_player3_y_axis = "nul" +input_player3_select = "nul" +input_player3_select_btn = "nul" +input_player3_select_axis = "nul" +input_player3_start = "nul" +input_player3_start_btn = "nul" +input_player3_start_axis = "nul" +input_player3_up = "nul" +input_player3_up_btn = "nul" +input_player3_up_axis = "nul" +input_player3_down = "nul" +input_player3_down_btn = "nul" +input_player3_down_axis = "nul" +input_player3_left = "nul" +input_player3_left_btn = "nul" +input_player3_left_axis = "nul" +input_player3_right = "nul" +input_player3_right_btn = "nul" +input_player3_right_axis = "nul" +input_player3_a = "nul" +input_player3_a_btn = "nul" +input_player3_a_axis = "nul" +input_player3_x = "nul" +input_player3_x_btn = "nul" +input_player3_x_axis = "nul" +input_player3_l = "nul" +input_player3_l_btn = "nul" +input_player3_l_axis = "nul" +input_player3_r = "nul" +input_player3_r_btn = "nul" +input_player3_r_axis = "nul" +input_player3_l2 = "nul" +input_player3_l2_btn = "nul" +input_player3_l2_axis = "nul" +input_player3_r2 = "nul" +input_player3_r2_btn = "nul" +input_player3_r2_axis = "nul" +input_player3_l3 = "nul" +input_player3_l3_btn = "nul" +input_player3_l3_axis = "nul" +input_player3_r3 = "nul" +input_player3_r3_btn = "nul" +input_player3_r3_axis = "nul" +input_player3_l_x_plus = "nul" +input_player3_l_x_plus_btn = "nul" +input_player3_l_x_plus_axis = "nul" +input_player3_l_x_minus = "nul" +input_player3_l_x_minus_btn = "nul" +input_player3_l_x_minus_axis = "nul" +input_player3_l_y_plus = "nul" +input_player3_l_y_plus_btn = "nul" +input_player3_l_y_plus_axis = "nul" +input_player3_l_y_minus = "nul" +input_player3_l_y_minus_btn = "nul" +input_player3_l_y_minus_axis = "nul" +input_player3_r_x_plus = "nul" +input_player3_r_x_plus_btn = "nul" +input_player3_r_x_plus_axis = "nul" +input_player3_r_x_minus = "nul" +input_player3_r_x_minus_btn = "nul" +input_player3_r_x_minus_axis = "nul" +input_player3_r_y_plus = "nul" +input_player3_r_y_plus_btn = "nul" +input_player3_r_y_plus_axis = "nul" +input_player3_r_y_minus = "nul" +input_player3_r_y_minus_btn = "nul" +input_player3_r_y_minus_axis = "nul" +input_player3_turbo = "nul" +input_player3_turbo_btn = "nul" +input_player3_turbo_axis = "nul" +input_player4_b = "nul" +input_player4_b_btn = "nul" +input_player4_b_axis = "nul" +input_player4_y = "nul" +input_player4_y_btn = "nul" +input_player4_y_axis = "nul" +input_player4_select = "nul" +input_player4_select_btn = "nul" +input_player4_select_axis = "nul" +input_player4_start = "nul" +input_player4_start_btn = "nul" +input_player4_start_axis = "nul" +input_player4_up = "nul" +input_player4_up_btn = "nul" +input_player4_up_axis = "nul" +input_player4_down = "nul" +input_player4_down_btn = "nul" +input_player4_down_axis = "nul" +input_player4_left = "nul" +input_player4_left_btn = "nul" +input_player4_left_axis = "nul" +input_player4_right = "nul" +input_player4_right_btn = "nul" +input_player4_right_axis = "nul" +input_player4_a = "nul" +input_player4_a_btn = "nul" +input_player4_a_axis = "nul" +input_player4_x = "nul" +input_player4_x_btn = "nul" +input_player4_x_axis = "nul" +input_player4_l = "nul" +input_player4_l_btn = "nul" +input_player4_l_axis = "nul" +input_player4_r = "nul" +input_player4_r_btn = "nul" +input_player4_r_axis = "nul" +input_player4_l2 = "nul" +input_player4_l2_btn = "nul" +input_player4_l2_axis = "nul" +input_player4_r2 = "nul" +input_player4_r2_btn = "nul" +input_player4_r2_axis = "nul" +input_player4_l3 = "nul" +input_player4_l3_btn = "nul" +input_player4_l3_axis = "nul" +input_player4_r3 = "nul" +input_player4_r3_btn = "nul" +input_player4_r3_axis = "nul" +input_player4_l_x_plus = "nul" +input_player4_l_x_plus_btn = "nul" +input_player4_l_x_plus_axis = "nul" +input_player4_l_x_minus = "nul" +input_player4_l_x_minus_btn = "nul" +input_player4_l_x_minus_axis = "nul" +input_player4_l_y_plus = "nul" +input_player4_l_y_plus_btn = "nul" +input_player4_l_y_plus_axis = "nul" +input_player4_l_y_minus = "nul" +input_player4_l_y_minus_btn = "nul" +input_player4_l_y_minus_axis = "nul" +input_player4_r_x_plus = "nul" +input_player4_r_x_plus_btn = "nul" +input_player4_r_x_plus_axis = "nul" +input_player4_r_x_minus = "nul" +input_player4_r_x_minus_btn = "nul" +input_player4_r_x_minus_axis = "nul" +input_player4_r_y_plus = "nul" +input_player4_r_y_plus_btn = "nul" +input_player4_r_y_plus_axis = "nul" +input_player4_r_y_minus = "nul" +input_player4_r_y_minus_btn = "nul" +input_player4_r_y_minus_axis = "nul" +input_player4_turbo = "nul" +input_player4_turbo_btn = "nul" +input_player4_turbo_axis = "nul" +input_player5_b = "nul" +input_player5_b_btn = "nul" +input_player5_b_axis = "nul" +input_player5_y = "nul" +input_player5_y_btn = "nul" +input_player5_y_axis = "nul" +input_player5_select = "nul" +input_player5_select_btn = "nul" +input_player5_select_axis = "nul" +input_player5_start = "nul" +input_player5_start_btn = "nul" +input_player5_start_axis = "nul" +input_player5_up = "nul" +input_player5_up_btn = "nul" +input_player5_up_axis = "nul" +input_player5_down = "nul" +input_player5_down_btn = "nul" +input_player5_down_axis = "nul" +input_player5_left = "nul" +input_player5_left_btn = "nul" +input_player5_left_axis = "nul" +input_player5_right = "nul" +input_player5_right_btn = "nul" +input_player5_right_axis = "nul" +input_player5_a = "nul" +input_player5_a_btn = "nul" +input_player5_a_axis = "nul" +input_player5_x = "nul" +input_player5_x_btn = "nul" +input_player5_x_axis = "nul" +input_player5_l = "nul" +input_player5_l_btn = "nul" +input_player5_l_axis = "nul" +input_player5_r = "nul" +input_player5_r_btn = "nul" +input_player5_r_axis = "nul" +input_player5_l2 = "nul" +input_player5_l2_btn = "nul" +input_player5_l2_axis = "nul" +input_player5_r2 = "nul" +input_player5_r2_btn = "nul" +input_player5_r2_axis = "nul" +input_player5_l3 = "nul" +input_player5_l3_btn = "nul" +input_player5_l3_axis = "nul" +input_player5_r3 = "nul" +input_player5_r3_btn = "nul" +input_player5_r3_axis = "nul" +input_player5_l_x_plus = "nul" +input_player5_l_x_plus_btn = "nul" +input_player5_l_x_plus_axis = "nul" +input_player5_l_x_minus = "nul" +input_player5_l_x_minus_btn = "nul" +input_player5_l_x_minus_axis = "nul" +input_player5_l_y_plus = "nul" +input_player5_l_y_plus_btn = "nul" +input_player5_l_y_plus_axis = "nul" +input_player5_l_y_minus = "nul" +input_player5_l_y_minus_btn = "nul" +input_player5_l_y_minus_axis = "nul" +input_player5_r_x_plus = "nul" +input_player5_r_x_plus_btn = "nul" +input_player5_r_x_plus_axis = "nul" +input_player5_r_x_minus = "nul" +input_player5_r_x_minus_btn = "nul" +input_player5_r_x_minus_axis = "nul" +input_player5_r_y_plus = "nul" +input_player5_r_y_plus_btn = "nul" +input_player5_r_y_plus_axis = "nul" +input_player5_r_y_minus = "nul" +input_player5_r_y_minus_btn = "nul" +input_player5_r_y_minus_axis = "nul" +input_player5_turbo = "nul" +input_player5_turbo_btn = "nul" +input_player5_turbo_axis = "nul" +input_player6_b = "nul" +input_player6_b_btn = "nul" +input_player6_b_axis = "nul" +input_player6_y = "nul" +input_player6_y_btn = "nul" +input_player6_y_axis = "nul" +input_player6_select = "nul" +input_player6_select_btn = "nul" +input_player6_select_axis = "nul" +input_player6_start = "nul" +input_player6_start_btn = "nul" +input_player6_start_axis = "nul" +input_player6_up = "nul" +input_player6_up_btn = "nul" +input_player6_up_axis = "nul" +input_player6_down = "nul" +input_player6_down_btn = "nul" +input_player6_down_axis = "nul" +input_player6_left = "nul" +input_player6_left_btn = "nul" +input_player6_left_axis = "nul" +input_player6_right = "nul" +input_player6_right_btn = "nul" +input_player6_right_axis = "nul" +input_player6_a = "nul" +input_player6_a_btn = "nul" +input_player6_a_axis = "nul" +input_player6_x = "nul" +input_player6_x_btn = "nul" +input_player6_x_axis = "nul" +input_player6_l = "nul" +input_player6_l_btn = "nul" +input_player6_l_axis = "nul" +input_player6_r = "nul" +input_player6_r_btn = "nul" +input_player6_r_axis = "nul" +input_player6_l2 = "nul" +input_player6_l2_btn = "nul" +input_player6_l2_axis = "nul" +input_player6_r2 = "nul" +input_player6_r2_btn = "nul" +input_player6_r2_axis = "nul" +input_player6_l3 = "nul" +input_player6_l3_btn = "nul" +input_player6_l3_axis = "nul" +input_player6_r3 = "nul" +input_player6_r3_btn = "nul" +input_player6_r3_axis = "nul" +input_player6_l_x_plus = "nul" +input_player6_l_x_plus_btn = "nul" +input_player6_l_x_plus_axis = "nul" +input_player6_l_x_minus = "nul" +input_player6_l_x_minus_btn = "nul" +input_player6_l_x_minus_axis = "nul" +input_player6_l_y_plus = "nul" +input_player6_l_y_plus_btn = "nul" +input_player6_l_y_plus_axis = "nul" +input_player6_l_y_minus = "nul" +input_player6_l_y_minus_btn = "nul" +input_player6_l_y_minus_axis = "nul" +input_player6_r_x_plus = "nul" +input_player6_r_x_plus_btn = "nul" +input_player6_r_x_plus_axis = "nul" +input_player6_r_x_minus = "nul" +input_player6_r_x_minus_btn = "nul" +input_player6_r_x_minus_axis = "nul" +input_player6_r_y_plus = "nul" +input_player6_r_y_plus_btn = "nul" +input_player6_r_y_plus_axis = "nul" +input_player6_r_y_minus = "nul" +input_player6_r_y_minus_btn = "nul" +input_player6_r_y_minus_axis = "nul" +input_player6_turbo = "nul" +input_player6_turbo_btn = "nul" +input_player6_turbo_axis = "nul" +input_player7_b = "nul" +input_player7_b_btn = "nul" +input_player7_b_axis = "nul" +input_player7_y = "nul" +input_player7_y_btn = "nul" +input_player7_y_axis = "nul" +input_player7_select = "nul" +input_player7_select_btn = "nul" +input_player7_select_axis = "nul" +input_player7_start = "nul" +input_player7_start_btn = "nul" +input_player7_start_axis = "nul" +input_player7_up = "nul" +input_player7_up_btn = "nul" +input_player7_up_axis = "nul" +input_player7_down = "nul" +input_player7_down_btn = "nul" +input_player7_down_axis = "nul" +input_player7_left = "nul" +input_player7_left_btn = "nul" +input_player7_left_axis = "nul" +input_player7_right = "nul" +input_player7_right_btn = "nul" +input_player7_right_axis = "nul" +input_player7_a = "nul" +input_player7_a_btn = "nul" +input_player7_a_axis = "nul" +input_player7_x = "nul" +input_player7_x_btn = "nul" +input_player7_x_axis = "nul" +input_player7_l = "nul" +input_player7_l_btn = "nul" +input_player7_l_axis = "nul" +input_player7_r = "nul" +input_player7_r_btn = "nul" +input_player7_r_axis = "nul" +input_player7_l2 = "nul" +input_player7_l2_btn = "nul" +input_player7_l2_axis = "nul" +input_player7_r2 = "nul" +input_player7_r2_btn = "nul" +input_player7_r2_axis = "nul" +input_player7_l3 = "nul" +input_player7_l3_btn = "nul" +input_player7_l3_axis = "nul" +input_player7_r3 = "nul" +input_player7_r3_btn = "nul" +input_player7_r3_axis = "nul" +input_player7_l_x_plus = "nul" +input_player7_l_x_plus_btn = "nul" +input_player7_l_x_plus_axis = "nul" +input_player7_l_x_minus = "nul" +input_player7_l_x_minus_btn = "nul" +input_player7_l_x_minus_axis = "nul" +input_player7_l_y_plus = "nul" +input_player7_l_y_plus_btn = "nul" +input_player7_l_y_plus_axis = "nul" +input_player7_l_y_minus = "nul" +input_player7_l_y_minus_btn = "nul" +input_player7_l_y_minus_axis = "nul" +input_player7_r_x_plus = "nul" +input_player7_r_x_plus_btn = "nul" +input_player7_r_x_plus_axis = "nul" +input_player7_r_x_minus = "nul" +input_player7_r_x_minus_btn = "nul" +input_player7_r_x_minus_axis = "nul" +input_player7_r_y_plus = "nul" +input_player7_r_y_plus_btn = "nul" +input_player7_r_y_plus_axis = "nul" +input_player7_r_y_minus = "nul" +input_player7_r_y_minus_btn = "nul" +input_player7_r_y_minus_axis = "nul" +input_player7_turbo = "nul" +input_player7_turbo_btn = "nul" +input_player7_turbo_axis = "nul" +input_player8_b = "nul" +input_player8_b_btn = "nul" +input_player8_b_axis = "nul" +input_player8_y = "nul" +input_player8_y_btn = "nul" +input_player8_y_axis = "nul" +input_player8_select = "nul" +input_player8_select_btn = "nul" +input_player8_select_axis = "nul" +input_player8_start = "nul" +input_player8_start_btn = "nul" +input_player8_start_axis = "nul" +input_player8_up = "nul" +input_player8_up_btn = "nul" +input_player8_up_axis = "nul" +input_player8_down = "nul" +input_player8_down_btn = "nul" +input_player8_down_axis = "nul" +input_player8_left = "nul" +input_player8_left_btn = "nul" +input_player8_left_axis = "nul" +input_player8_right = "nul" +input_player8_right_btn = "nul" +input_player8_right_axis = "nul" +input_player8_a = "nul" +input_player8_a_btn = "nul" +input_player8_a_axis = "nul" +input_player8_x = "nul" +input_player8_x_btn = "nul" +input_player8_x_axis = "nul" +input_player8_l = "nul" +input_player8_l_btn = "nul" +input_player8_l_axis = "nul" +input_player8_r = "nul" +input_player8_r_btn = "nul" +input_player8_r_axis = "nul" +input_player8_l2 = "nul" +input_player8_l2_btn = "nul" +input_player8_l2_axis = "nul" +input_player8_r2 = "nul" +input_player8_r2_btn = "nul" +input_player8_r2_axis = "nul" +input_player8_l3 = "nul" +input_player8_l3_btn = "nul" +input_player8_l3_axis = "nul" +input_player8_r3 = "nul" +input_player8_r3_btn = "nul" +input_player8_r3_axis = "nul" +input_player8_l_x_plus = "nul" +input_player8_l_x_plus_btn = "nul" +input_player8_l_x_plus_axis = "nul" +input_player8_l_x_minus = "nul" +input_player8_l_x_minus_btn = "nul" +input_player8_l_x_minus_axis = "nul" +input_player8_l_y_plus = "nul" +input_player8_l_y_plus_btn = "nul" +input_player8_l_y_plus_axis = "nul" +input_player8_l_y_minus = "nul" +input_player8_l_y_minus_btn = "nul" +input_player8_l_y_minus_axis = "nul" +input_player8_r_x_plus = "nul" +input_player8_r_x_plus_btn = "nul" +input_player8_r_x_plus_axis = "nul" +input_player8_r_x_minus = "nul" +input_player8_r_x_minus_btn = "nul" +input_player8_r_x_minus_axis = "nul" +input_player8_r_y_plus = "nul" +input_player8_r_y_plus_btn = "nul" +input_player8_r_y_plus_axis = "nul" +input_player8_r_y_minus = "nul" +input_player8_r_y_minus_btn = "nul" +input_player8_r_y_minus_axis = "nul" +input_player8_turbo = "nul" +input_player8_turbo_btn = "nul" +input_player8_turbo_axis = "nul" +input_player9_b = "nul" +input_player9_b_btn = "nul" +input_player9_b_axis = "nul" +input_player9_y = "nul" +input_player9_y_btn = "nul" +input_player9_y_axis = "nul" +input_player9_select = "nul" +input_player9_select_btn = "nul" +input_player9_select_axis = "nul" +input_player9_start = "nul" +input_player9_start_btn = "nul" +input_player9_start_axis = "nul" +input_player9_up = "nul" +input_player9_up_btn = "nul" +input_player9_up_axis = "nul" +input_player9_down = "nul" +input_player9_down_btn = "nul" +input_player9_down_axis = "nul" +input_player9_left = "nul" +input_player9_left_btn = "nul" +input_player9_left_axis = "nul" +input_player9_right = "nul" +input_player9_right_btn = "nul" +input_player9_right_axis = "nul" +input_player9_a = "nul" +input_player9_a_btn = "nul" +input_player9_a_axis = "nul" +input_player9_x = "nul" +input_player9_x_btn = "nul" +input_player9_x_axis = "nul" +input_player9_l = "nul" +input_player9_l_btn = "nul" +input_player9_l_axis = "nul" +input_player9_r = "nul" +input_player9_r_btn = "nul" +input_player9_r_axis = "nul" +input_player9_l2 = "nul" +input_player9_l2_btn = "nul" +input_player9_l2_axis = "nul" +input_player9_r2 = "nul" +input_player9_r2_btn = "nul" +input_player9_r2_axis = "nul" +input_player9_l3 = "nul" +input_player9_l3_btn = "nul" +input_player9_l3_axis = "nul" +input_player9_r3 = "nul" +input_player9_r3_btn = "nul" +input_player9_r3_axis = "nul" +input_player9_l_x_plus = "nul" +input_player9_l_x_plus_btn = "nul" +input_player9_l_x_plus_axis = "nul" +input_player9_l_x_minus = "nul" +input_player9_l_x_minus_btn = "nul" +input_player9_l_x_minus_axis = "nul" +input_player9_l_y_plus = "nul" +input_player9_l_y_plus_btn = "nul" +input_player9_l_y_plus_axis = "nul" +input_player9_l_y_minus = "nul" +input_player9_l_y_minus_btn = "nul" +input_player9_l_y_minus_axis = "nul" +input_player9_r_x_plus = "nul" +input_player9_r_x_plus_btn = "nul" +input_player9_r_x_plus_axis = "nul" +input_player9_r_x_minus = "nul" +input_player9_r_x_minus_btn = "nul" +input_player9_r_x_minus_axis = "nul" +input_player9_r_y_plus = "nul" +input_player9_r_y_plus_btn = "nul" +input_player9_r_y_plus_axis = "nul" +input_player9_r_y_minus = "nul" +input_player9_r_y_minus_btn = "nul" +input_player9_r_y_minus_axis = "nul" +input_player9_turbo = "nul" +input_player9_turbo_btn = "nul" +input_player9_turbo_axis = "nul" +input_player10_b = "nul" +input_player10_b_btn = "nul" +input_player10_b_axis = "nul" +input_player10_y = "nul" +input_player10_y_btn = "nul" +input_player10_y_axis = "nul" +input_player10_select = "nul" +input_player10_select_btn = "nul" +input_player10_select_axis = "nul" +input_player10_start = "nul" +input_player10_start_btn = "nul" +input_player10_start_axis = "nul" +input_player10_up = "nul" +input_player10_up_btn = "nul" +input_player10_up_axis = "nul" +input_player10_down = "nul" +input_player10_down_btn = "nul" +input_player10_down_axis = "nul" +input_player10_left = "nul" +input_player10_left_btn = "nul" +input_player10_left_axis = "nul" +input_player10_right = "nul" +input_player10_right_btn = "nul" +input_player10_right_axis = "nul" +input_player10_a = "nul" +input_player10_a_btn = "nul" +input_player10_a_axis = "nul" +input_player10_x = "nul" +input_player10_x_btn = "nul" +input_player10_x_axis = "nul" +input_player10_l = "nul" +input_player10_l_btn = "nul" +input_player10_l_axis = "nul" +input_player10_r = "nul" +input_player10_r_btn = "nul" +input_player10_r_axis = "nul" +input_player10_l2 = "nul" +input_player10_l2_btn = "nul" +input_player10_l2_axis = "nul" +input_player10_r2 = "nul" +input_player10_r2_btn = "nul" +input_player10_r2_axis = "nul" +input_player10_l3 = "nul" +input_player10_l3_btn = "nul" +input_player10_l3_axis = "nul" +input_player10_r3 = "nul" +input_player10_r3_btn = "nul" +input_player10_r3_axis = "nul" +input_player10_l_x_plus = "nul" +input_player10_l_x_plus_btn = "nul" +input_player10_l_x_plus_axis = "nul" +input_player10_l_x_minus = "nul" +input_player10_l_x_minus_btn = "nul" +input_player10_l_x_minus_axis = "nul" +input_player10_l_y_plus = "nul" +input_player10_l_y_plus_btn = "nul" +input_player10_l_y_plus_axis = "nul" +input_player10_l_y_minus = "nul" +input_player10_l_y_minus_btn = "nul" +input_player10_l_y_minus_axis = "nul" +input_player10_r_x_plus = "nul" +input_player10_r_x_plus_btn = "nul" +input_player10_r_x_plus_axis = "nul" +input_player10_r_x_minus = "nul" +input_player10_r_x_minus_btn = "nul" +input_player10_r_x_minus_axis = "nul" +input_player10_r_y_plus = "nul" +input_player10_r_y_plus_btn = "nul" +input_player10_r_y_plus_axis = "nul" +input_player10_r_y_minus = "nul" +input_player10_r_y_minus_btn = "nul" +input_player10_r_y_minus_axis = "nul" +input_player10_turbo = "nul" +input_player10_turbo_btn = "nul" +input_player10_turbo_axis = "nul" +input_player11_b = "nul" +input_player11_b_btn = "nul" +input_player11_b_axis = "nul" +input_player11_y = "nul" +input_player11_y_btn = "nul" +input_player11_y_axis = "nul" +input_player11_select = "nul" +input_player11_select_btn = "nul" +input_player11_select_axis = "nul" +input_player11_start = "nul" +input_player11_start_btn = "nul" +input_player11_start_axis = "nul" +input_player11_up = "nul" +input_player11_up_btn = "nul" +input_player11_up_axis = "nul" +input_player11_down = "nul" +input_player11_down_btn = "nul" +input_player11_down_axis = "nul" +input_player11_left = "nul" +input_player11_left_btn = "nul" +input_player11_left_axis = "nul" +input_player11_right = "nul" +input_player11_right_btn = "nul" +input_player11_right_axis = "nul" +input_player11_a = "nul" +input_player11_a_btn = "nul" +input_player11_a_axis = "nul" +input_player11_x = "nul" +input_player11_x_btn = "nul" +input_player11_x_axis = "nul" +input_player11_l = "nul" +input_player11_l_btn = "nul" +input_player11_l_axis = "nul" +input_player11_r = "nul" +input_player11_r_btn = "nul" +input_player11_r_axis = "nul" +input_player11_l2 = "nul" +input_player11_l2_btn = "nul" +input_player11_l2_axis = "nul" +input_player11_r2 = "nul" +input_player11_r2_btn = "nul" +input_player11_r2_axis = "nul" +input_player11_l3 = "nul" +input_player11_l3_btn = "nul" +input_player11_l3_axis = "nul" +input_player11_r3 = "nul" +input_player11_r3_btn = "nul" +input_player11_r3_axis = "nul" +input_player11_l_x_plus = "nul" +input_player11_l_x_plus_btn = "nul" +input_player11_l_x_plus_axis = "nul" +input_player11_l_x_minus = "nul" +input_player11_l_x_minus_btn = "nul" +input_player11_l_x_minus_axis = "nul" +input_player11_l_y_plus = "nul" +input_player11_l_y_plus_btn = "nul" +input_player11_l_y_plus_axis = "nul" +input_player11_l_y_minus = "nul" +input_player11_l_y_minus_btn = "nul" +input_player11_l_y_minus_axis = "nul" +input_player11_r_x_plus = "nul" +input_player11_r_x_plus_btn = "nul" +input_player11_r_x_plus_axis = "nul" +input_player11_r_x_minus = "nul" +input_player11_r_x_minus_btn = "nul" +input_player11_r_x_minus_axis = "nul" +input_player11_r_y_plus = "nul" +input_player11_r_y_plus_btn = "nul" +input_player11_r_y_plus_axis = "nul" +input_player11_r_y_minus = "nul" +input_player11_r_y_minus_btn = "nul" +input_player11_r_y_minus_axis = "nul" +input_player11_turbo = "nul" +input_player11_turbo_btn = "nul" +input_player11_turbo_axis = "nul" +input_player12_b = "nul" +input_player12_b_btn = "nul" +input_player12_b_axis = "nul" +input_player12_y = "nul" +input_player12_y_btn = "nul" +input_player12_y_axis = "nul" +input_player12_select = "nul" +input_player12_select_btn = "nul" +input_player12_select_axis = "nul" +input_player12_start = "nul" +input_player12_start_btn = "nul" +input_player12_start_axis = "nul" +input_player12_up = "nul" +input_player12_up_btn = "nul" +input_player12_up_axis = "nul" +input_player12_down = "nul" +input_player12_down_btn = "nul" +input_player12_down_axis = "nul" +input_player12_left = "nul" +input_player12_left_btn = "nul" +input_player12_left_axis = "nul" +input_player12_right = "nul" +input_player12_right_btn = "nul" +input_player12_right_axis = "nul" +input_player12_a = "nul" +input_player12_a_btn = "nul" +input_player12_a_axis = "nul" +input_player12_x = "nul" +input_player12_x_btn = "nul" +input_player12_x_axis = "nul" +input_player12_l = "nul" +input_player12_l_btn = "nul" +input_player12_l_axis = "nul" +input_player12_r = "nul" +input_player12_r_btn = "nul" +input_player12_r_axis = "nul" +input_player12_l2 = "nul" +input_player12_l2_btn = "nul" +input_player12_l2_axis = "nul" +input_player12_r2 = "nul" +input_player12_r2_btn = "nul" +input_player12_r2_axis = "nul" +input_player12_l3 = "nul" +input_player12_l3_btn = "nul" +input_player12_l3_axis = "nul" +input_player12_r3 = "nul" +input_player12_r3_btn = "nul" +input_player12_r3_axis = "nul" +input_player12_l_x_plus = "nul" +input_player12_l_x_plus_btn = "nul" +input_player12_l_x_plus_axis = "nul" +input_player12_l_x_minus = "nul" +input_player12_l_x_minus_btn = "nul" +input_player12_l_x_minus_axis = "nul" +input_player12_l_y_plus = "nul" +input_player12_l_y_plus_btn = "nul" +input_player12_l_y_plus_axis = "nul" +input_player12_l_y_minus = "nul" +input_player12_l_y_minus_btn = "nul" +input_player12_l_y_minus_axis = "nul" +input_player12_r_x_plus = "nul" +input_player12_r_x_plus_btn = "nul" +input_player12_r_x_plus_axis = "nul" +input_player12_r_x_minus = "nul" +input_player12_r_x_minus_btn = "nul" +input_player12_r_x_minus_axis = "nul" +input_player12_r_y_plus = "nul" +input_player12_r_y_plus_btn = "nul" +input_player12_r_y_plus_axis = "nul" +input_player12_r_y_minus = "nul" +input_player12_r_y_minus_btn = "nul" +input_player12_r_y_minus_axis = "nul" +input_player12_turbo = "nul" +input_player12_turbo_btn = "nul" +input_player12_turbo_axis = "nul" +input_player13_b = "nul" +input_player13_b_btn = "nul" +input_player13_b_axis = "nul" +input_player13_y = "nul" +input_player13_y_btn = "nul" +input_player13_y_axis = "nul" +input_player13_select = "nul" +input_player13_select_btn = "nul" +input_player13_select_axis = "nul" +input_player13_start = "nul" +input_player13_start_btn = "nul" +input_player13_start_axis = "nul" +input_player13_up = "nul" +input_player13_up_btn = "nul" +input_player13_up_axis = "nul" +input_player13_down = "nul" +input_player13_down_btn = "nul" +input_player13_down_axis = "nul" +input_player13_left = "nul" +input_player13_left_btn = "nul" +input_player13_left_axis = "nul" +input_player13_right = "nul" +input_player13_right_btn = "nul" +input_player13_right_axis = "nul" +input_player13_a = "nul" +input_player13_a_btn = "nul" +input_player13_a_axis = "nul" +input_player13_x = "nul" +input_player13_x_btn = "nul" +input_player13_x_axis = "nul" +input_player13_l = "nul" +input_player13_l_btn = "nul" +input_player13_l_axis = "nul" +input_player13_r = "nul" +input_player13_r_btn = "nul" +input_player13_r_axis = "nul" +input_player13_l2 = "nul" +input_player13_l2_btn = "nul" +input_player13_l2_axis = "nul" +input_player13_r2 = "nul" +input_player13_r2_btn = "nul" +input_player13_r2_axis = "nul" +input_player13_l3 = "nul" +input_player13_l3_btn = "nul" +input_player13_l3_axis = "nul" +input_player13_r3 = "nul" +input_player13_r3_btn = "nul" +input_player13_r3_axis = "nul" +input_player13_l_x_plus = "nul" +input_player13_l_x_plus_btn = "nul" +input_player13_l_x_plus_axis = "nul" +input_player13_l_x_minus = "nul" +input_player13_l_x_minus_btn = "nul" +input_player13_l_x_minus_axis = "nul" +input_player13_l_y_plus = "nul" +input_player13_l_y_plus_btn = "nul" +input_player13_l_y_plus_axis = "nul" +input_player13_l_y_minus = "nul" +input_player13_l_y_minus_btn = "nul" +input_player13_l_y_minus_axis = "nul" +input_player13_r_x_plus = "nul" +input_player13_r_x_plus_btn = "nul" +input_player13_r_x_plus_axis = "nul" +input_player13_r_x_minus = "nul" +input_player13_r_x_minus_btn = "nul" +input_player13_r_x_minus_axis = "nul" +input_player13_r_y_plus = "nul" +input_player13_r_y_plus_btn = "nul" +input_player13_r_y_plus_axis = "nul" +input_player13_r_y_minus = "nul" +input_player13_r_y_minus_btn = "nul" +input_player13_r_y_minus_axis = "nul" +input_player13_turbo = "nul" +input_player13_turbo_btn = "nul" +input_player13_turbo_axis = "nul" +input_player14_b = "nul" +input_player14_b_btn = "nul" +input_player14_b_axis = "nul" +input_player14_y = "nul" +input_player14_y_btn = "nul" +input_player14_y_axis = "nul" +input_player14_select = "nul" +input_player14_select_btn = "nul" +input_player14_select_axis = "nul" +input_player14_start = "nul" +input_player14_start_btn = "nul" +input_player14_start_axis = "nul" +input_player14_up = "nul" +input_player14_up_btn = "nul" +input_player14_up_axis = "nul" +input_player14_down = "nul" +input_player14_down_btn = "nul" +input_player14_down_axis = "nul" +input_player14_left = "nul" +input_player14_left_btn = "nul" +input_player14_left_axis = "nul" +input_player14_right = "nul" +input_player14_right_btn = "nul" +input_player14_right_axis = "nul" +input_player14_a = "nul" +input_player14_a_btn = "nul" +input_player14_a_axis = "nul" +input_player14_x = "nul" +input_player14_x_btn = "nul" +input_player14_x_axis = "nul" +input_player14_l = "nul" +input_player14_l_btn = "nul" +input_player14_l_axis = "nul" +input_player14_r = "nul" +input_player14_r_btn = "nul" +input_player14_r_axis = "nul" +input_player14_l2 = "nul" +input_player14_l2_btn = "nul" +input_player14_l2_axis = "nul" +input_player14_r2 = "nul" +input_player14_r2_btn = "nul" +input_player14_r2_axis = "nul" +input_player14_l3 = "nul" +input_player14_l3_btn = "nul" +input_player14_l3_axis = "nul" +input_player14_r3 = "nul" +input_player14_r3_btn = "nul" +input_player14_r3_axis = "nul" +input_player14_l_x_plus = "nul" +input_player14_l_x_plus_btn = "nul" +input_player14_l_x_plus_axis = "nul" +input_player14_l_x_minus = "nul" +input_player14_l_x_minus_btn = "nul" +input_player14_l_x_minus_axis = "nul" +input_player14_l_y_plus = "nul" +input_player14_l_y_plus_btn = "nul" +input_player14_l_y_plus_axis = "nul" +input_player14_l_y_minus = "nul" +input_player14_l_y_minus_btn = "nul" +input_player14_l_y_minus_axis = "nul" +input_player14_r_x_plus = "nul" +input_player14_r_x_plus_btn = "nul" +input_player14_r_x_plus_axis = "nul" +input_player14_r_x_minus = "nul" +input_player14_r_x_minus_btn = "nul" +input_player14_r_x_minus_axis = "nul" +input_player14_r_y_plus = "nul" +input_player14_r_y_plus_btn = "nul" +input_player14_r_y_plus_axis = "nul" +input_player14_r_y_minus = "nul" +input_player14_r_y_minus_btn = "nul" +input_player14_r_y_minus_axis = "nul" +input_player14_turbo = "nul" +input_player14_turbo_btn = "nul" +input_player14_turbo_axis = "nul" +input_player15_b = "nul" +input_player15_b_btn = "nul" +input_player15_b_axis = "nul" +input_player15_y = "nul" +input_player15_y_btn = "nul" +input_player15_y_axis = "nul" +input_player15_select = "nul" +input_player15_select_btn = "nul" +input_player15_select_axis = "nul" +input_player15_start = "nul" +input_player15_start_btn = "nul" +input_player15_start_axis = "nul" +input_player15_up = "nul" +input_player15_up_btn = "nul" +input_player15_up_axis = "nul" +input_player15_down = "nul" +input_player15_down_btn = "nul" +input_player15_down_axis = "nul" +input_player15_left = "nul" +input_player15_left_btn = "nul" +input_player15_left_axis = "nul" +input_player15_right = "nul" +input_player15_right_btn = "nul" +input_player15_right_axis = "nul" +input_player15_a = "nul" +input_player15_a_btn = "nul" +input_player15_a_axis = "nul" +input_player15_x = "nul" +input_player15_x_btn = "nul" +input_player15_x_axis = "nul" +input_player15_l = "nul" +input_player15_l_btn = "nul" +input_player15_l_axis = "nul" +input_player15_r = "nul" +input_player15_r_btn = "nul" +input_player15_r_axis = "nul" +input_player15_l2 = "nul" +input_player15_l2_btn = "nul" +input_player15_l2_axis = "nul" +input_player15_r2 = "nul" +input_player15_r2_btn = "nul" +input_player15_r2_axis = "nul" +input_player15_l3 = "nul" +input_player15_l3_btn = "nul" +input_player15_l3_axis = "nul" +input_player15_r3 = "nul" +input_player15_r3_btn = "nul" +input_player15_r3_axis = "nul" +input_player15_l_x_plus = "nul" +input_player15_l_x_plus_btn = "nul" +input_player15_l_x_plus_axis = "nul" +input_player15_l_x_minus = "nul" +input_player15_l_x_minus_btn = "nul" +input_player15_l_x_minus_axis = "nul" +input_player15_l_y_plus = "nul" +input_player15_l_y_plus_btn = "nul" +input_player15_l_y_plus_axis = "nul" +input_player15_l_y_minus = "nul" +input_player15_l_y_minus_btn = "nul" +input_player15_l_y_minus_axis = "nul" +input_player15_r_x_plus = "nul" +input_player15_r_x_plus_btn = "nul" +input_player15_r_x_plus_axis = "nul" +input_player15_r_x_minus = "nul" +input_player15_r_x_minus_btn = "nul" +input_player15_r_x_minus_axis = "nul" +input_player15_r_y_plus = "nul" +input_player15_r_y_plus_btn = "nul" +input_player15_r_y_plus_axis = "nul" +input_player15_r_y_minus = "nul" +input_player15_r_y_minus_btn = "nul" +input_player15_r_y_minus_axis = "nul" +input_player15_turbo = "nul" +input_player15_turbo_btn = "nul" +input_player15_turbo_axis = "nul" +input_player16_b = "nul" +input_player16_b_btn = "nul" +input_player16_b_axis = "nul" +input_player16_y = "nul" +input_player16_y_btn = "nul" +input_player16_y_axis = "nul" +input_player16_select = "nul" +input_player16_select_btn = "nul" +input_player16_select_axis = "nul" +input_player16_start = "nul" +input_player16_start_btn = "nul" +input_player16_start_axis = "nul" +input_player16_up = "nul" +input_player16_up_btn = "nul" +input_player16_up_axis = "nul" +input_player16_down = "nul" +input_player16_down_btn = "nul" +input_player16_down_axis = "nul" +input_player16_left = "nul" +input_player16_left_btn = "nul" +input_player16_left_axis = "nul" +input_player16_right = "nul" +input_player16_right_btn = "nul" +input_player16_right_axis = "nul" +input_player16_a = "nul" +input_player16_a_btn = "nul" +input_player16_a_axis = "nul" +input_player16_x = "nul" +input_player16_x_btn = "nul" +input_player16_x_axis = "nul" +input_player16_l = "nul" +input_player16_l_btn = "nul" +input_player16_l_axis = "nul" +input_player16_r = "nul" +input_player16_r_btn = "nul" +input_player16_r_axis = "nul" +input_player16_l2 = "nul" +input_player16_l2_btn = "nul" +input_player16_l2_axis = "nul" +input_player16_r2 = "nul" +input_player16_r2_btn = "nul" +input_player16_r2_axis = "nul" +input_player16_l3 = "nul" +input_player16_l3_btn = "nul" +input_player16_l3_axis = "nul" +input_player16_r3 = "nul" +input_player16_r3_btn = "nul" +input_player16_r3_axis = "nul" +input_player16_l_x_plus = "nul" +input_player16_l_x_plus_btn = "nul" +input_player16_l_x_plus_axis = "nul" +input_player16_l_x_minus = "nul" +input_player16_l_x_minus_btn = "nul" +input_player16_l_x_minus_axis = "nul" +input_player16_l_y_plus = "nul" +input_player16_l_y_plus_btn = "nul" +input_player16_l_y_plus_axis = "nul" +input_player16_l_y_minus = "nul" +input_player16_l_y_minus_btn = "nul" +input_player16_l_y_minus_axis = "nul" +input_player16_r_x_plus = "nul" +input_player16_r_x_plus_btn = "nul" +input_player16_r_x_plus_axis = "nul" +input_player16_r_x_minus = "nul" +input_player16_r_x_minus_btn = "nul" +input_player16_r_x_minus_axis = "nul" +input_player16_r_y_plus = "nul" +input_player16_r_y_plus_btn = "nul" +input_player16_r_y_plus_axis = "nul" +input_player16_r_y_minus = "nul" +input_player16_r_y_minus_btn = "nul" +input_player16_r_y_minus_axis = "nul" +input_player16_turbo = "nul" +input_player16_turbo_btn = "nul" +input_player16_turbo_axis = "nul" +xmb_font = "" +netplay_nickname = "" +video_filter = "" +audio_dsp_plugin = "" +netplay_ip_address = "" +recording_output_directory = "" +recording_config_directory = "" +core_options_path = "" +video_shader = "" +menu_wallpaper = "" +input_overlay = "" +video_font_path = "" +content_history_dir = "" +cache_directory = "" +resampler_directory = "" +xmb_font = "" +playlist_names = "" +playlist_cores = "" +audio_device = "" +camera_device = "" +cheevos_username = "" +cheevos_password = "" +video_context_driver = "" +input_keyboard_layout = "" +bundle_assets_src_path = "" +bundle_assets_dst_path = "" +bundle_assets_dst_path_subdir = "" diff --git a/ui/drivers/ui_win32.c b/ui/drivers/ui_win32.c index d2a3a44ec0..2a8fc12836 100644 --- a/ui/drivers/ui_win32.c +++ b/ui/drivers/ui_win32.c @@ -19,6 +19,7 @@ #include #include #include +#include #ifdef _MSC_VER #pragma comment( lib, "comctl32" ) @@ -121,7 +122,7 @@ static void shader_dlg_refresh_trackbar_label(int index) video_shader_driver_get_current_shader(&shader_info); - if (floorf(shader_info.data->parameters[index].current) + if (floorf(shader_info.data->parameters[index].current) == shader_info.data->parameters[index].current) snprintf(val_buffer, sizeof(val_buffer), "%.0f", shader_info.data->parameters[index].current); @@ -152,8 +153,8 @@ static void shader_dlg_params_refresh(void) { case SHADER_PARAM_CTRL_CHECKBOX: { - bool checked = - (shader_info.data->parameters[i].current == + bool checked = + (shader_info.data->parameters[i].current == shader_info.data->parameters[i].maximum); SendMessageW(control->checkbox.hwnd, BM_SETCHECK, checked, 0); } @@ -165,12 +166,12 @@ static void shader_dlg_params_refresh(void) TBM_SETRANGEMIN, (WPARAM)TRUE, (LPARAM)0); SendMessageW(control->trackbar.hwnd, TBM_SETRANGEMAX, (WPARAM)TRUE, - (LPARAM)((shader_info.data->parameters[i].maximum - - shader_info.data->parameters[i].minimum) + (LPARAM)((shader_info.data->parameters[i].maximum - + shader_info.data->parameters[i].minimum) / shader_info.data->parameters[i].step)); SendMessageW(control->trackbar.hwnd, TBM_SETPOS, (WPARAM)TRUE, - (LPARAM)((shader_info.data->parameters[i].current - - shader_info.data->parameters[i].minimum) / + (LPARAM)((shader_info.data->parameters[i].current - + shader_info.data->parameters[i].minimum) / shader_info.data->parameters[i].step)); break; case SHADER_PARAM_CTRL_NONE: @@ -233,21 +234,16 @@ void shader_dlg_params_reload(void) for (i = 0; i < (int)shader_info.data->num_parameters; i++) { - shader_param_ctrl_t*control = &g_shader_dlg.controls[i]; - size_t param_desc_wide_size = sizeof(shader_info.data->parameters[i].desc) * 2; - wchar_t param_desc_wide[param_desc_wide_size]; - - memset(param_desc_wide, 0, sizeof(param_desc_wide)); - MultiByteToWideChar(CP_UTF8, 0, shader_info.data->parameters[i].desc, -1, param_desc_wide, sizeof(param_desc_wide) / sizeof(param_desc_wide[0])); - + shader_param_ctrl_t *control = &g_shader_dlg.controls[i]; + CHAR_TO_WCHAR_ALLOC(shader_info.data->parameters[i].desc, param_desc_wide) if ((shader_info.data->parameters[i].minimum == 0.0) - && (shader_info.data->parameters[i].maximum - == (shader_info.data->parameters[i].minimum + && (shader_info.data->parameters[i].maximum + == (shader_info.data->parameters[i].minimum + shader_info.data->parameters[i].step))) { - if ((pos_y + SHADER_DLG_CHECKBOX_HEIGHT - + SHADER_DLG_CTRL_MARGIN + 20) + if ((pos_y + SHADER_DLG_CHECKBOX_HEIGHT + + SHADER_DLG_CTRL_MARGIN + 20) > SHADER_DLG_MAX_HEIGHT) { pos_y = g_shader_dlg.parameters_start_y; @@ -300,6 +296,8 @@ void shader_dlg_params_reload(void) } + if (param_desc_wide) + free(param_desc_wide); } if (window && g_shader_dlg.separator.hwnd) @@ -328,7 +326,7 @@ static void shader_dlg_update_on_top_state(void) bool on_top = SendMessage(g_shader_dlg.on_top_checkbox.hwnd, BM_GETCHECK, 0, 0) == BST_CHECKED; - SetWindowPos(g_shader_dlg.window.hwnd, on_top + SetWindowPos(g_shader_dlg.window.hwnd, on_top ? HWND_TOPMOST : HWND_NOTOPMOST , 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); } @@ -397,10 +395,10 @@ static LRESULT CALLBACK ShaderDlgWndProc(HWND hwnd, UINT message, if (SendMessageW(g_shader_dlg.controls[i].checkbox.hwnd, BM_GETCHECK, 0, 0) == BST_CHECKED) - shader_info.data->parameters[i].current = + shader_info.data->parameters[i].current = shader_info.data->parameters[i].maximum; else - shader_info.data->parameters[i].current = + shader_info.data->parameters[i].current = shader_info.data->parameters[i].minimum; break; @@ -415,7 +413,7 @@ static LRESULT CALLBACK ShaderDlgWndProc(HWND hwnd, UINT message, break; pos = (int)SendMessageW(g_shader_dlg.controls[i].trackbar.hwnd, TBM_GETPOS, 0, 0); - shader_info.data->parameters[i].current = + shader_info.data->parameters[i].current = shader_info.data->parameters[i].minimum + pos * shader_info.data->parameters[i].step; shader_dlg_refresh_trackbar_label(i); @@ -451,10 +449,10 @@ bool win32_window_init(WNDCLASSEX *wndclass, if (!RegisterClassExW(wndclass)) return false; - /* This is non-NULL when we want a window for shader dialogs, + /* This is non-NULL when we want a window for shader dialogs, * therefore early return here */ /* TODO/FIXME - this is ugly. Find a better way */ - if (class_name != NULL) + if (class_name != NULL) return true; if (!win32_shader_dlg_init()) @@ -523,7 +521,7 @@ static bool win32_browser( const char *initial_dir) { bool result = false; - const ui_browser_window_t *browser = + const ui_browser_window_t *browser = ui_companion_driver_get_browser_window_ptr(); if (browser) @@ -534,14 +532,17 @@ static bool win32_browser( browser_state.title = strdup(title); browser_state.startdir = strdup(initial_dir); browser_state.path = strdup(filename); - browser_state.window = owner; result = browser->open(&browser_state); - free(browser_state.filters); - free(browser_state.title); - free(browser_state.startdir); - free(browser_state.path); + if (browser_state.filters) + free(browser_state.filters); + if (browser_state.title) + free(browser_state.title); + if (browser_state.startdir) + free(browser_state.startdir); + if (browser_state.path) + free(browser_state.path); } return result; @@ -554,7 +555,7 @@ LRESULT win32_menu_loop(HWND owner, WPARAM wparam) bool do_wm_close = false; settings_t *settings = config_get_ptr(); - switch (mode) + switch (mode) { case ID_M_LOAD_CORE: case ID_M_LOAD_CONTENT: @@ -663,7 +664,7 @@ LRESULT win32_menu_loop(HWND owner, WPARAM wparam) signed idx = -1; settings->state_slot = idx; } - else if (mode >= (ID_M_STATE_INDEX_AUTO+1) + else if (mode >= (ID_M_STATE_INDEX_AUTO+1) && mode <= (ID_M_STATE_INDEX_AUTO+10)) { signed idx = (mode - (ID_M_STATE_INDEX_AUTO+1)); @@ -677,7 +678,7 @@ LRESULT win32_menu_loop(HWND owner, WPARAM wparam) if (do_wm_close) PostMessageW(owner, WM_CLOSE, 0, 0); - + return 0L; } diff --git a/ui/drivers/win32/ui_win32_browser_window.c b/ui/drivers/win32/ui_win32_browser_window.c index 1aeaccf0d8..25203866ce 100644 --- a/ui/drivers/win32/ui_win32_browser_window.c +++ b/ui/drivers/win32/ui_win32_browser_window.c @@ -18,6 +18,7 @@ #include #include #include +#include #include @@ -26,23 +27,60 @@ static bool ui_browser_window_win32_core(ui_browser_window_state_t *state, bool save) { OPENFILENAME ofn = {}; + bool success = true; +#ifdef UNICODE + size_t filters_size = (state->filters ? strlen(state->filters) : 0) + 1; + size_t path_size = strlen(state->path) + 1; + size_t title_size = strlen(state->title) + 1; + size_t startdir_size = strlen(state->startdir) + 1; - ofn.lStructSize = sizeof(OPENFILENAME); - ofn.hwndOwner = (HWND)state->window; + wchar_t *filters_wide = (wchar_t*)calloc(filters_size, 2); + wchar_t *path_wide = (wchar_t*)calloc(path_size, 2); + wchar_t *title_wide = (wchar_t*)calloc(title_size, 2); + wchar_t *startdir_wide = (wchar_t*)calloc(startdir_size, 2); + + if (state->filters) + MultiByteToWideChar(CP_UTF8, 0, state->filters, -1, filters_wide, filters_size); + if (state->title) + MultiByteToWideChar(CP_UTF8, 0, state->title, -1, title_wide, title_size); + if (state->path) + MultiByteToWideChar(CP_UTF8, 0, state->path, -1, path_wide, path_size); + if (state->startdir) + MultiByteToWideChar(CP_UTF8, 0, state->startdir, -1, startdir_wide, startdir_size); + + ofn.lpstrFilter = filters_wide; + ofn.lpstrFile = path_wide; + ofn.lpstrTitle = title_wide; + ofn.lpstrInitialDir = startdir_wide; +#else ofn.lpstrFilter = state->filters; ofn.lpstrFile = state->path; ofn.lpstrTitle = state->title; ofn.lpstrInitialDir = state->startdir; - ofn.lpstrDefExt = ""; +#endif + ofn.lStructSize = sizeof(OPENFILENAME); + ofn.hwndOwner = (HWND)state->window; + ofn.lpstrDefExt = TEXT(""); ofn.nMaxFile = PATH_MAX; ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_NOCHANGEDIR; if ( save && !GetOpenFileName(&ofn)) - return false; + success = false; if (!save && !GetSaveFileName(&ofn)) - return false; + success = false; - return true; +#ifdef UNICODE + if (filters_wide) + free(filters_wide); + if (title_wide) + free(title_wide); + if (path_wide) + free(path_wide); + if (startdir_wide) + free(startdir_wide); +#endif + + return success; } static bool ui_browser_window_win32_open(ui_browser_window_state_t *state) diff --git a/ui/drivers/win32/ui_win32_window.cpp b/ui/drivers/win32/ui_win32_window.cpp index d76866a0ba..4a14da3296 100644 --- a/ui/drivers/win32/ui_win32_window.cpp +++ b/ui/drivers/win32/ui_win32_window.cpp @@ -20,6 +20,8 @@ #include #include +#include + #include #ifdef _MSC_VER @@ -62,7 +64,7 @@ static void ui_window_win32_set_focused(void *data) SetFocus(window->hwnd); } -static void ui_window_win32_set_visible(void *data, +static void ui_window_win32_set_visible(void *data, bool set_visible) { ui_window_win32_t *window = (ui_window_win32_t*)data; @@ -72,7 +74,10 @@ static void ui_window_win32_set_visible(void *data, static void ui_window_win32_set_title(void *data, char *buf) { ui_window_win32_t *window = (ui_window_win32_t*)data; - SetWindowText(window->hwnd, buf); + CHAR_TO_WCHAR_ALLOC(buf, buf_wide) + SetWindowText(window->hwnd, buf_wide); + if (buf_wide) + free(buf_wide); } void ui_window_win32_set_droppable(void *data, bool droppable) From 5bd8c096dc2ef14f2162c97dcad364bd33e56c39 Mon Sep 17 00:00:00 2001 From: Brad Parker Date: Fri, 2 Dec 2016 12:18:19 -0500 Subject: [PATCH 2/4] revert retroarch.cfg --- retroarch.cfg | 2410 ++++++++++++++++--------------------------------- 1 file changed, 800 insertions(+), 1610 deletions(-) diff --git a/retroarch.cfg b/retroarch.cfg index 489ff50820..7d9890a08f 100644 --- a/retroarch.cfg +++ b/retroarch.cfg @@ -1,1610 +1,800 @@ -video_driver = "caca" -core_updater_buildbot_url = "http://buildbot.libretro.com/nightly/win-x86_64/latest/" -core_updater_buildbot_assets_url = "http://buildbot.libretro.com/assets/" -libretro_directory = "cores" -libretro_info_path = "info" -content_database_path = "database\rdb" -cheat_database_path = "cheats" -content_history_path = ".\content_history.lpl" -content_music_history_path = ".\content_music_history.lpl" -content_video_history_path = ".\content_video_history.lpl" -content_image_history_path = ".\content_image_history.lpl" -cursor_directory = "database\cursors" -screenshot_directory = "default" -system_directory = "default" -input_remapping_directory = "config\remaps" -video_shader_dir = "shaders" -video_filter_dir = "filters\video" -core_assets_directory = "downloads" -assets_directory = "assets" -dynamic_wallpapers_directory = "assets\wallpapers" -thumbnails_directory = "thumbnails" -playlist_directory = "playlists" -joypad_autoconfig_dir = "autoconfig" -audio_filter_dir = "filters\audio" -savefile_directory = "default" -savestate_directory = "default" -rgui_browser_directory = "default" -rgui_config_directory = "config" -overlay_directory = "overlays" -screenshot_directory = "default" -record_driver = "null" -camera_driver = "null" -wifi_driver = "null" -location_driver = "null" -menu_driver = "xmb" -audio_driver = "xaudio" -audio_resampler = "sinc" -input_driver = "dinput" -input_joypad_driver = "xinput" -video_aspect_ratio = "-1.000000" -video_scale = "3.000000" -video_refresh_rate = "59.940060" -audio_rate_control_delta = "0.005000" -audio_max_timing_skew = "0.050000" -audio_volume = "0.000000" -input_overlay_opacity = "0.700000" -input_overlay_scale = "1.000000" -menu_wallpaper_opacity = "0.300000" -menu_footer_opacity = "1.000000" -menu_header_opacity = "1.000000" -video_message_pos_x = "0.050000" -video_message_pos_y = "0.050000" -video_font_size = "32.000000" -fastforward_ratio = "0.000000" -slowmotion_ratio = "3.000000" -input_axis_threshold = "0.500000" -input_bind_timeout = "5" -input_turbo_period = "6" -input_duty_cycle = "3" -input_max_users = "5" -input_menu_toggle_gamepad_combo = "0" -audio_latency = "64" -audio_block_frames = "0" -rewind_granularity = "1" -autosave_interval = "0" -libretro_log_level = "0" -keyboard_gamepad_mapping_type = "1" -input_poll_type_behavior = "2" -video_monitor_index = "0" -video_fullscreen_x = "0" -video_fullscreen_y = "0" -video_window_x = "0" -video_window_y = "0" -network_cmd_port = "55355" -network_remote_base_port = "55400" -dpi_override_value = "200" -menu_thumbnails = "3" -xmb_alpha_factor = "75" -xmb_scale_factor = "100" -xmb_theme = "0" -xmb_menu_color_theme = "4" -materialui_menu_color_theme = "0" -menu_shader_pipeline = "2" -audio_out_rate = "48000" -custom_viewport_width = "960" -custom_viewport_height = "720" -custom_viewport_x = "0" -custom_viewport_y = "0" -content_history_size = "100" -video_hard_sync_frames = "0" -video_frame_delay = "0" -video_max_swapchain_images = "3" -video_swap_interval = "1" -video_rotation = "0" -aspect_ratio_index = "21" -state_slot = "0" -netplay_ip_port = "0" -netplay_delay_frames = "16" -netplay_check_frames = "30" -user_language = "0" -bundle_assets_extract_version_current = "0" -bundle_assets_extract_last_version = "0" -input_device_p1 = "0" -input_player1_joypad_index = "0" -input_libretro_device_p1 = "1" -input_player1_analog_dpad_mode = "0" -input_device_p2 = "0" -input_player2_joypad_index = "1" -input_libretro_device_p2 = "1" -input_player2_analog_dpad_mode = "0" -input_device_p3 = "0" -input_player3_joypad_index = "2" -input_libretro_device_p3 = "1" -input_player3_analog_dpad_mode = "0" -input_device_p4 = "0" -input_player4_joypad_index = "3" -input_libretro_device_p4 = "1" -input_player4_analog_dpad_mode = "0" -input_device_p5 = "0" -input_player5_joypad_index = "4" -input_libretro_device_p5 = "1" -input_player5_analog_dpad_mode = "0" -input_device_p6 = "0" -input_player6_joypad_index = "5" -input_libretro_device_p6 = "1" -input_player6_analog_dpad_mode = "0" -input_device_p7 = "0" -input_player7_joypad_index = "6" -input_libretro_device_p7 = "1" -input_player7_analog_dpad_mode = "0" -input_device_p8 = "0" -input_player8_joypad_index = "7" -input_libretro_device_p8 = "1" -input_player8_analog_dpad_mode = "0" -input_device_p9 = "0" -input_player9_joypad_index = "8" -input_libretro_device_p9 = "1" -input_player9_analog_dpad_mode = "0" -input_device_p10 = "0" -input_player10_joypad_index = "9" -input_libretro_device_p10 = "1" -input_player10_analog_dpad_mode = "0" -input_device_p11 = "0" -input_player11_joypad_index = "10" -input_libretro_device_p11 = "1" -input_player11_analog_dpad_mode = "0" -input_device_p12 = "0" -input_player12_joypad_index = "11" -input_libretro_device_p12 = "1" -input_player12_analog_dpad_mode = "0" -input_device_p13 = "0" -input_player13_joypad_index = "12" -input_libretro_device_p13 = "1" -input_player13_analog_dpad_mode = "0" -input_device_p14 = "0" -input_player14_joypad_index = "13" -input_libretro_device_p14 = "1" -input_player14_analog_dpad_mode = "0" -input_device_p15 = "0" -input_player15_joypad_index = "14" -input_libretro_device_p15 = "1" -input_player15_analog_dpad_mode = "0" -input_device_p16 = "0" -input_player16_joypad_index = "15" -input_libretro_device_p16 = "1" -input_player16_analog_dpad_mode = "0" -ui_companion_start_on_boot = "true" -ui_companion_enable = "false" -video_gpu_record = "false" -input_remap_binds_enable = "true" -all_users_control_menu = "false" -menu_swap_ok_cancel_buttons = "true" -netplay_client_swap_input = "true" -input_descriptor_label_show = "true" -input_descriptor_hide_unbound = "false" -load_dummy_on_core_shutdown = "true" -check_firmware_before_loading = "false" -builtin_mediaplayer_enable = "false" -builtin_imageviewer_enable = "true" -fps_show = "false" -ui_menubar_enable = "true" -suspend_screensaver_enable = "true" -rewind_enable = "false" -audio_sync = "true" -video_shader_enable = "false" -video_aspect_ratio_auto = "false" -video_allow_rotate = "true" -video_windowed_fullscreen = "true" -video_crop_overscan = "true" -video_scale_integer = "false" -video_smooth = "true" -video_force_aspect = "true" -video_threaded = "false" -video_shared_context = "false" -custom_bgm_enable = "false" -auto_screenshot_filename = "true" -video_force_srgb_disable = "false" -video_fullscreen = "false" -bundle_assets_extract_enable = "false" -video_vsync = "true" -video_hard_sync = "false" -video_black_frame_insertion = "false" -video_disable_composition = "false" -pause_nonactive = "true" -video_gpu_screenshot = "true" -video_post_filter_record = "false" -keyboard_gamepad_enable = "true" -core_set_supports_no_game_enable = "true" -audio_enable = "true" -audio_mute_enable = "false" -location_allow = "false" -video_font_enable = "true" -core_updater_auto_extract_archive = "true" -camera_allow = "false" -threaded_data_runloop_enable = "true" -menu_throttle_framerate = "true" -menu_linear_filter = "true" -dpi_override_enable = "true" -menu_pause_libretro = "true" -menu_mouse_enable = "true" -menu_pointer_enable = "false" -menu_timedate_enable = "true" -menu_core_enable = "true" -menu_dynamic_wallpaper_enable = "false" -xmb_shadows_enable = "true" -xmb_show_settings = "true" -xmb_show_images = "true" -xmb_show_history = "true" -rgui_show_start_screen = "false" -menu_navigation_wraparound_enable = "true" -menu_navigation_browser_filter_supported_extensions_enable = "true" -menu_show_advanced_settings = "true" -cheevos_enable = "false" -cheevos_test_unofficial = "false" -cheevos_hardcore_mode_enable = "false" -input_overlay_enable = "true" -input_overlay_enable_autopreferred = "true" -input_overlay_hide_in_menu = "true" -network_cmd_enable = "false" -stdin_cmd_enable = "false" -network_remote_enable = "false" -netplay_spectator_mode_enable = "false" -netplay_nat_traversal = "true" -block_sram_overwrite = "false" -savestate_auto_index = "false" -savestate_auto_save = "false" -savestate_auto_load = "false" -savestate_thumbnail_enable = "false" -history_list_enable = "true" -game_specific_options = "false" -auto_overrides_enable = "true" -auto_remaps_enable = "true" -auto_shaders_enable = "true" -sort_savefiles_enable = "false" -sort_savestates_enable = "false" -config_save_on_exit = "true" -show_hidden_files = "true" -input_autodetect_enable = "true" -audio_rate_control = "true" -network_remote_enable_user_p1 = "false" -network_remote_enable_user_p2 = "false" -network_remote_enable_user_p3 = "false" -network_remote_enable_user_p4 = "false" -network_remote_enable_user_p5 = "false" -network_remote_enable_user_p6 = "false" -network_remote_enable_user_p7 = "false" -network_remote_enable_user_p8 = "false" -network_remote_enable_user_p9 = "false" -network_remote_enable_user_p10 = "false" -network_remote_enable_user_p11 = "false" -network_remote_enable_user_p12 = "false" -network_remote_enable_user_p13 = "false" -network_remote_enable_user_p14 = "false" -network_remote_enable_user_p15 = "false" -network_remote_enable_user_p16 = "false" -log_verbosity = "false" -perfcnt_enable = "false" -video_message_color = "ffff00" -menu_entry_normal_color = "ffffffff" -menu_entry_hover_color = "ff64ff64" -menu_title_color = "ff64ff64" -gamma_correction = "false" -flicker_filter_enable = "false" -soft_filter_enable = "false" -soft_filter_index = "0" -current_resolution_id = "0" -flicker_filter_index = "0" -input_player1_b = "z" -input_player1_b_btn = "nul" -input_player1_b_axis = "nul" -input_player1_y = "a" -input_player1_y_btn = "nul" -input_player1_y_axis = "nul" -input_player1_select = "rshift" -input_player1_select_btn = "nul" -input_player1_select_axis = "nul" -input_player1_start = "enter" -input_player1_start_btn = "nul" -input_player1_start_axis = "nul" -input_player1_up = "up" -input_player1_up_btn = "nul" -input_player1_up_axis = "nul" -input_player1_down = "down" -input_player1_down_btn = "nul" -input_player1_down_axis = "nul" -input_player1_left = "left" -input_player1_left_btn = "nul" -input_player1_left_axis = "nul" -input_player1_right = "right" -input_player1_right_btn = "nul" -input_player1_right_axis = "nul" -input_player1_a = "x" -input_player1_a_btn = "nul" -input_player1_a_axis = "nul" -input_player1_x = "s" -input_player1_x_btn = "nul" -input_player1_x_axis = "nul" -input_player1_l = "q" -input_player1_l_btn = "nul" -input_player1_l_axis = "nul" -input_player1_r = "w" -input_player1_r_btn = "nul" -input_player1_r_axis = "nul" -input_player1_l2 = "nul" -input_player1_l2_btn = "nul" -input_player1_l2_axis = "nul" -input_player1_r2 = "nul" -input_player1_r2_btn = "nul" -input_player1_r2_axis = "nul" -input_player1_l3 = "nul" -input_player1_l3_btn = "nul" -input_player1_l3_axis = "nul" -input_player1_r3 = "nul" -input_player1_r3_btn = "nul" -input_player1_r3_axis = "nul" -input_player1_l_x_plus = "nul" -input_player1_l_x_plus_btn = "nul" -input_player1_l_x_plus_axis = "nul" -input_player1_l_x_minus = "nul" -input_player1_l_x_minus_btn = "nul" -input_player1_l_x_minus_axis = "nul" -input_player1_l_y_plus = "nul" -input_player1_l_y_plus_btn = "nul" -input_player1_l_y_plus_axis = "nul" -input_player1_l_y_minus = "nul" -input_player1_l_y_minus_btn = "nul" -input_player1_l_y_minus_axis = "nul" -input_player1_r_x_plus = "nul" -input_player1_r_x_plus_btn = "nul" -input_player1_r_x_plus_axis = "nul" -input_player1_r_x_minus = "nul" -input_player1_r_x_minus_btn = "nul" -input_player1_r_x_minus_axis = "nul" -input_player1_r_y_plus = "nul" -input_player1_r_y_plus_btn = "nul" -input_player1_r_y_plus_axis = "nul" -input_player1_r_y_minus = "nul" -input_player1_r_y_minus_btn = "nul" -input_player1_r_y_minus_axis = "nul" -input_player1_turbo = "nul" -input_player1_turbo_btn = "nul" -input_player1_turbo_axis = "nul" -input_toggle_fast_forward = "space" -input_toggle_fast_forward_btn = "nul" -input_toggle_fast_forward_axis = "nul" -input_hold_fast_forward = "l" -input_hold_fast_forward_btn = "nul" -input_hold_fast_forward_axis = "nul" -input_load_state = "f4" -input_load_state_btn = "nul" -input_load_state_axis = "nul" -input_save_state = "f2" -input_save_state_btn = "nul" -input_save_state_axis = "nul" -input_toggle_fullscreen = "f" -input_toggle_fullscreen_btn = "nul" -input_toggle_fullscreen_axis = "nul" -input_exit_emulator = "escape" -input_exit_emulator_btn = "nul" -input_exit_emulator_axis = "nul" -input_state_slot_increase = "f7" -input_state_slot_increase_btn = "nul" -input_state_slot_increase_axis = "nul" -input_state_slot_decrease = "f6" -input_state_slot_decrease_btn = "nul" -input_state_slot_decrease_axis = "nul" -input_rewind = "r" -input_rewind_btn = "nul" -input_rewind_axis = "nul" -input_movie_record_toggle = "o" -input_movie_record_toggle_btn = "nul" -input_movie_record_toggle_axis = "nul" -input_pause_toggle = "p" -input_pause_toggle_btn = "nul" -input_pause_toggle_axis = "nul" -input_frame_advance = "k" -input_frame_advance_btn = "nul" -input_frame_advance_axis = "nul" -input_reset = "h" -input_reset_btn = "nul" -input_reset_axis = "nul" -input_shader_next = "m" -input_shader_next_btn = "nul" -input_shader_next_axis = "nul" -input_shader_prev = "n" -input_shader_prev_btn = "nul" -input_shader_prev_axis = "nul" -input_cheat_index_plus = "y" -input_cheat_index_plus_btn = "nul" -input_cheat_index_plus_axis = "nul" -input_cheat_index_minus = "t" -input_cheat_index_minus_btn = "nul" -input_cheat_index_minus_axis = "nul" -input_cheat_toggle = "u" -input_cheat_toggle_btn = "nul" -input_cheat_toggle_axis = "nul" -input_screenshot = "f8" -input_screenshot_btn = "nul" -input_screenshot_axis = "nul" -input_audio_mute = "f9" -input_audio_mute_btn = "nul" -input_audio_mute_axis = "nul" -input_osk_toggle = "f12" -input_osk_toggle_btn = "nul" -input_osk_toggle_axis = "nul" -input_netplay_flip_players = "i" -input_netplay_flip_players_btn = "nul" -input_netplay_flip_players_axis = "nul" -input_slowmotion = "e" -input_slowmotion_btn = "nul" -input_slowmotion_axis = "nul" -input_enable_hotkey = "nul" -input_enable_hotkey_btn = "nul" -input_enable_hotkey_axis = "nul" -input_volume_up = "add" -input_volume_up_btn = "nul" -input_volume_up_axis = "nul" -input_volume_down = "subtract" -input_volume_down_btn = "nul" -input_volume_down_axis = "nul" -input_overlay_next = "nul" -input_overlay_next_btn = "nul" -input_overlay_next_axis = "nul" -input_disk_eject_toggle = "nul" -input_disk_eject_toggle_btn = "nul" -input_disk_eject_toggle_axis = "nul" -input_disk_next = "nul" -input_disk_next_btn = "nul" -input_disk_next_axis = "nul" -input_disk_prev = "nul" -input_disk_prev_btn = "nul" -input_disk_prev_axis = "nul" -input_grab_mouse_toggle = "f11" -input_grab_mouse_toggle_btn = "nul" -input_grab_mouse_toggle_axis = "nul" -input_menu_toggle = "f1" -input_menu_toggle_btn = "nul" -input_menu_toggle_axis = "nul" -input_player2_b = "nul" -input_player2_b_btn = "nul" -input_player2_b_axis = "nul" -input_player2_y = "nul" -input_player2_y_btn = "nul" -input_player2_y_axis = "nul" -input_player2_select = "nul" -input_player2_select_btn = "nul" -input_player2_select_axis = "nul" -input_player2_start = "nul" -input_player2_start_btn = "nul" -input_player2_start_axis = "nul" -input_player2_up = "nul" -input_player2_up_btn = "nul" -input_player2_up_axis = "nul" -input_player2_down = "nul" -input_player2_down_btn = "nul" -input_player2_down_axis = "nul" -input_player2_left = "nul" -input_player2_left_btn = "nul" -input_player2_left_axis = "nul" -input_player2_right = "nul" -input_player2_right_btn = "nul" -input_player2_right_axis = "nul" -input_player2_a = "nul" -input_player2_a_btn = "nul" -input_player2_a_axis = "nul" -input_player2_x = "nul" -input_player2_x_btn = "nul" -input_player2_x_axis = "nul" -input_player2_l = "nul" -input_player2_l_btn = "nul" -input_player2_l_axis = "nul" -input_player2_r = "nul" -input_player2_r_btn = "nul" -input_player2_r_axis = "nul" -input_player2_l2 = "nul" -input_player2_l2_btn = "nul" -input_player2_l2_axis = "nul" -input_player2_r2 = "nul" -input_player2_r2_btn = "nul" -input_player2_r2_axis = "nul" -input_player2_l3 = "nul" -input_player2_l3_btn = "nul" -input_player2_l3_axis = "nul" -input_player2_r3 = "nul" -input_player2_r3_btn = "nul" -input_player2_r3_axis = "nul" -input_player2_l_x_plus = "nul" -input_player2_l_x_plus_btn = "nul" -input_player2_l_x_plus_axis = "nul" -input_player2_l_x_minus = "nul" -input_player2_l_x_minus_btn = "nul" -input_player2_l_x_minus_axis = "nul" -input_player2_l_y_plus = "nul" -input_player2_l_y_plus_btn = "nul" -input_player2_l_y_plus_axis = "nul" -input_player2_l_y_minus = "nul" -input_player2_l_y_minus_btn = "nul" -input_player2_l_y_minus_axis = "nul" -input_player2_r_x_plus = "nul" -input_player2_r_x_plus_btn = "nul" -input_player2_r_x_plus_axis = "nul" -input_player2_r_x_minus = "nul" -input_player2_r_x_minus_btn = "nul" -input_player2_r_x_minus_axis = "nul" -input_player2_r_y_plus = "nul" -input_player2_r_y_plus_btn = "nul" -input_player2_r_y_plus_axis = "nul" -input_player2_r_y_minus = "nul" -input_player2_r_y_minus_btn = "nul" -input_player2_r_y_minus_axis = "nul" -input_player2_turbo = "nul" -input_player2_turbo_btn = "nul" -input_player2_turbo_axis = "nul" -input_player3_b = "nul" -input_player3_b_btn = "nul" -input_player3_b_axis = "nul" -input_player3_y = "nul" -input_player3_y_btn = "nul" -input_player3_y_axis = "nul" -input_player3_select = "nul" -input_player3_select_btn = "nul" -input_player3_select_axis = "nul" -input_player3_start = "nul" -input_player3_start_btn = "nul" -input_player3_start_axis = "nul" -input_player3_up = "nul" -input_player3_up_btn = "nul" -input_player3_up_axis = "nul" -input_player3_down = "nul" -input_player3_down_btn = "nul" -input_player3_down_axis = "nul" -input_player3_left = "nul" -input_player3_left_btn = "nul" -input_player3_left_axis = "nul" -input_player3_right = "nul" -input_player3_right_btn = "nul" -input_player3_right_axis = "nul" -input_player3_a = "nul" -input_player3_a_btn = "nul" -input_player3_a_axis = "nul" -input_player3_x = "nul" -input_player3_x_btn = "nul" -input_player3_x_axis = "nul" -input_player3_l = "nul" -input_player3_l_btn = "nul" -input_player3_l_axis = "nul" -input_player3_r = "nul" -input_player3_r_btn = "nul" -input_player3_r_axis = "nul" -input_player3_l2 = "nul" -input_player3_l2_btn = "nul" -input_player3_l2_axis = "nul" -input_player3_r2 = "nul" -input_player3_r2_btn = "nul" -input_player3_r2_axis = "nul" -input_player3_l3 = "nul" -input_player3_l3_btn = "nul" -input_player3_l3_axis = "nul" -input_player3_r3 = "nul" -input_player3_r3_btn = "nul" -input_player3_r3_axis = "nul" -input_player3_l_x_plus = "nul" -input_player3_l_x_plus_btn = "nul" -input_player3_l_x_plus_axis = "nul" -input_player3_l_x_minus = "nul" -input_player3_l_x_minus_btn = "nul" -input_player3_l_x_minus_axis = "nul" -input_player3_l_y_plus = "nul" -input_player3_l_y_plus_btn = "nul" -input_player3_l_y_plus_axis = "nul" -input_player3_l_y_minus = "nul" -input_player3_l_y_minus_btn = "nul" -input_player3_l_y_minus_axis = "nul" -input_player3_r_x_plus = "nul" -input_player3_r_x_plus_btn = "nul" -input_player3_r_x_plus_axis = "nul" -input_player3_r_x_minus = "nul" -input_player3_r_x_minus_btn = "nul" -input_player3_r_x_minus_axis = "nul" -input_player3_r_y_plus = "nul" -input_player3_r_y_plus_btn = "nul" -input_player3_r_y_plus_axis = "nul" -input_player3_r_y_minus = "nul" -input_player3_r_y_minus_btn = "nul" -input_player3_r_y_minus_axis = "nul" -input_player3_turbo = "nul" -input_player3_turbo_btn = "nul" -input_player3_turbo_axis = "nul" -input_player4_b = "nul" -input_player4_b_btn = "nul" -input_player4_b_axis = "nul" -input_player4_y = "nul" -input_player4_y_btn = "nul" -input_player4_y_axis = "nul" -input_player4_select = "nul" -input_player4_select_btn = "nul" -input_player4_select_axis = "nul" -input_player4_start = "nul" -input_player4_start_btn = "nul" -input_player4_start_axis = "nul" -input_player4_up = "nul" -input_player4_up_btn = "nul" -input_player4_up_axis = "nul" -input_player4_down = "nul" -input_player4_down_btn = "nul" -input_player4_down_axis = "nul" -input_player4_left = "nul" -input_player4_left_btn = "nul" -input_player4_left_axis = "nul" -input_player4_right = "nul" -input_player4_right_btn = "nul" -input_player4_right_axis = "nul" -input_player4_a = "nul" -input_player4_a_btn = "nul" -input_player4_a_axis = "nul" -input_player4_x = "nul" -input_player4_x_btn = "nul" -input_player4_x_axis = "nul" -input_player4_l = "nul" -input_player4_l_btn = "nul" -input_player4_l_axis = "nul" -input_player4_r = "nul" -input_player4_r_btn = "nul" -input_player4_r_axis = "nul" -input_player4_l2 = "nul" -input_player4_l2_btn = "nul" -input_player4_l2_axis = "nul" -input_player4_r2 = "nul" -input_player4_r2_btn = "nul" -input_player4_r2_axis = "nul" -input_player4_l3 = "nul" -input_player4_l3_btn = "nul" -input_player4_l3_axis = "nul" -input_player4_r3 = "nul" -input_player4_r3_btn = "nul" -input_player4_r3_axis = "nul" -input_player4_l_x_plus = "nul" -input_player4_l_x_plus_btn = "nul" -input_player4_l_x_plus_axis = "nul" -input_player4_l_x_minus = "nul" -input_player4_l_x_minus_btn = "nul" -input_player4_l_x_minus_axis = "nul" -input_player4_l_y_plus = "nul" -input_player4_l_y_plus_btn = "nul" -input_player4_l_y_plus_axis = "nul" -input_player4_l_y_minus = "nul" -input_player4_l_y_minus_btn = "nul" -input_player4_l_y_minus_axis = "nul" -input_player4_r_x_plus = "nul" -input_player4_r_x_plus_btn = "nul" -input_player4_r_x_plus_axis = "nul" -input_player4_r_x_minus = "nul" -input_player4_r_x_minus_btn = "nul" -input_player4_r_x_minus_axis = "nul" -input_player4_r_y_plus = "nul" -input_player4_r_y_plus_btn = "nul" -input_player4_r_y_plus_axis = "nul" -input_player4_r_y_minus = "nul" -input_player4_r_y_minus_btn = "nul" -input_player4_r_y_minus_axis = "nul" -input_player4_turbo = "nul" -input_player4_turbo_btn = "nul" -input_player4_turbo_axis = "nul" -input_player5_b = "nul" -input_player5_b_btn = "nul" -input_player5_b_axis = "nul" -input_player5_y = "nul" -input_player5_y_btn = "nul" -input_player5_y_axis = "nul" -input_player5_select = "nul" -input_player5_select_btn = "nul" -input_player5_select_axis = "nul" -input_player5_start = "nul" -input_player5_start_btn = "nul" -input_player5_start_axis = "nul" -input_player5_up = "nul" -input_player5_up_btn = "nul" -input_player5_up_axis = "nul" -input_player5_down = "nul" -input_player5_down_btn = "nul" -input_player5_down_axis = "nul" -input_player5_left = "nul" -input_player5_left_btn = "nul" -input_player5_left_axis = "nul" -input_player5_right = "nul" -input_player5_right_btn = "nul" -input_player5_right_axis = "nul" -input_player5_a = "nul" -input_player5_a_btn = "nul" -input_player5_a_axis = "nul" -input_player5_x = "nul" -input_player5_x_btn = "nul" -input_player5_x_axis = "nul" -input_player5_l = "nul" -input_player5_l_btn = "nul" -input_player5_l_axis = "nul" -input_player5_r = "nul" -input_player5_r_btn = "nul" -input_player5_r_axis = "nul" -input_player5_l2 = "nul" -input_player5_l2_btn = "nul" -input_player5_l2_axis = "nul" -input_player5_r2 = "nul" -input_player5_r2_btn = "nul" -input_player5_r2_axis = "nul" -input_player5_l3 = "nul" -input_player5_l3_btn = "nul" -input_player5_l3_axis = "nul" -input_player5_r3 = "nul" -input_player5_r3_btn = "nul" -input_player5_r3_axis = "nul" -input_player5_l_x_plus = "nul" -input_player5_l_x_plus_btn = "nul" -input_player5_l_x_plus_axis = "nul" -input_player5_l_x_minus = "nul" -input_player5_l_x_minus_btn = "nul" -input_player5_l_x_minus_axis = "nul" -input_player5_l_y_plus = "nul" -input_player5_l_y_plus_btn = "nul" -input_player5_l_y_plus_axis = "nul" -input_player5_l_y_minus = "nul" -input_player5_l_y_minus_btn = "nul" -input_player5_l_y_minus_axis = "nul" -input_player5_r_x_plus = "nul" -input_player5_r_x_plus_btn = "nul" -input_player5_r_x_plus_axis = "nul" -input_player5_r_x_minus = "nul" -input_player5_r_x_minus_btn = "nul" -input_player5_r_x_minus_axis = "nul" -input_player5_r_y_plus = "nul" -input_player5_r_y_plus_btn = "nul" -input_player5_r_y_plus_axis = "nul" -input_player5_r_y_minus = "nul" -input_player5_r_y_minus_btn = "nul" -input_player5_r_y_minus_axis = "nul" -input_player5_turbo = "nul" -input_player5_turbo_btn = "nul" -input_player5_turbo_axis = "nul" -input_player6_b = "nul" -input_player6_b_btn = "nul" -input_player6_b_axis = "nul" -input_player6_y = "nul" -input_player6_y_btn = "nul" -input_player6_y_axis = "nul" -input_player6_select = "nul" -input_player6_select_btn = "nul" -input_player6_select_axis = "nul" -input_player6_start = "nul" -input_player6_start_btn = "nul" -input_player6_start_axis = "nul" -input_player6_up = "nul" -input_player6_up_btn = "nul" -input_player6_up_axis = "nul" -input_player6_down = "nul" -input_player6_down_btn = "nul" -input_player6_down_axis = "nul" -input_player6_left = "nul" -input_player6_left_btn = "nul" -input_player6_left_axis = "nul" -input_player6_right = "nul" -input_player6_right_btn = "nul" -input_player6_right_axis = "nul" -input_player6_a = "nul" -input_player6_a_btn = "nul" -input_player6_a_axis = "nul" -input_player6_x = "nul" -input_player6_x_btn = "nul" -input_player6_x_axis = "nul" -input_player6_l = "nul" -input_player6_l_btn = "nul" -input_player6_l_axis = "nul" -input_player6_r = "nul" -input_player6_r_btn = "nul" -input_player6_r_axis = "nul" -input_player6_l2 = "nul" -input_player6_l2_btn = "nul" -input_player6_l2_axis = "nul" -input_player6_r2 = "nul" -input_player6_r2_btn = "nul" -input_player6_r2_axis = "nul" -input_player6_l3 = "nul" -input_player6_l3_btn = "nul" -input_player6_l3_axis = "nul" -input_player6_r3 = "nul" -input_player6_r3_btn = "nul" -input_player6_r3_axis = "nul" -input_player6_l_x_plus = "nul" -input_player6_l_x_plus_btn = "nul" -input_player6_l_x_plus_axis = "nul" -input_player6_l_x_minus = "nul" -input_player6_l_x_minus_btn = "nul" -input_player6_l_x_minus_axis = "nul" -input_player6_l_y_plus = "nul" -input_player6_l_y_plus_btn = "nul" -input_player6_l_y_plus_axis = "nul" -input_player6_l_y_minus = "nul" -input_player6_l_y_minus_btn = "nul" -input_player6_l_y_minus_axis = "nul" -input_player6_r_x_plus = "nul" -input_player6_r_x_plus_btn = "nul" -input_player6_r_x_plus_axis = "nul" -input_player6_r_x_minus = "nul" -input_player6_r_x_minus_btn = "nul" -input_player6_r_x_minus_axis = "nul" -input_player6_r_y_plus = "nul" -input_player6_r_y_plus_btn = "nul" -input_player6_r_y_plus_axis = "nul" -input_player6_r_y_minus = "nul" -input_player6_r_y_minus_btn = "nul" -input_player6_r_y_minus_axis = "nul" -input_player6_turbo = "nul" -input_player6_turbo_btn = "nul" -input_player6_turbo_axis = "nul" -input_player7_b = "nul" -input_player7_b_btn = "nul" -input_player7_b_axis = "nul" -input_player7_y = "nul" -input_player7_y_btn = "nul" -input_player7_y_axis = "nul" -input_player7_select = "nul" -input_player7_select_btn = "nul" -input_player7_select_axis = "nul" -input_player7_start = "nul" -input_player7_start_btn = "nul" -input_player7_start_axis = "nul" -input_player7_up = "nul" -input_player7_up_btn = "nul" -input_player7_up_axis = "nul" -input_player7_down = "nul" -input_player7_down_btn = "nul" -input_player7_down_axis = "nul" -input_player7_left = "nul" -input_player7_left_btn = "nul" -input_player7_left_axis = "nul" -input_player7_right = "nul" -input_player7_right_btn = "nul" -input_player7_right_axis = "nul" -input_player7_a = "nul" -input_player7_a_btn = "nul" -input_player7_a_axis = "nul" -input_player7_x = "nul" -input_player7_x_btn = "nul" -input_player7_x_axis = "nul" -input_player7_l = "nul" -input_player7_l_btn = "nul" -input_player7_l_axis = "nul" -input_player7_r = "nul" -input_player7_r_btn = "nul" -input_player7_r_axis = "nul" -input_player7_l2 = "nul" -input_player7_l2_btn = "nul" -input_player7_l2_axis = "nul" -input_player7_r2 = "nul" -input_player7_r2_btn = "nul" -input_player7_r2_axis = "nul" -input_player7_l3 = "nul" -input_player7_l3_btn = "nul" -input_player7_l3_axis = "nul" -input_player7_r3 = "nul" -input_player7_r3_btn = "nul" -input_player7_r3_axis = "nul" -input_player7_l_x_plus = "nul" -input_player7_l_x_plus_btn = "nul" -input_player7_l_x_plus_axis = "nul" -input_player7_l_x_minus = "nul" -input_player7_l_x_minus_btn = "nul" -input_player7_l_x_minus_axis = "nul" -input_player7_l_y_plus = "nul" -input_player7_l_y_plus_btn = "nul" -input_player7_l_y_plus_axis = "nul" -input_player7_l_y_minus = "nul" -input_player7_l_y_minus_btn = "nul" -input_player7_l_y_minus_axis = "nul" -input_player7_r_x_plus = "nul" -input_player7_r_x_plus_btn = "nul" -input_player7_r_x_plus_axis = "nul" -input_player7_r_x_minus = "nul" -input_player7_r_x_minus_btn = "nul" -input_player7_r_x_minus_axis = "nul" -input_player7_r_y_plus = "nul" -input_player7_r_y_plus_btn = "nul" -input_player7_r_y_plus_axis = "nul" -input_player7_r_y_minus = "nul" -input_player7_r_y_minus_btn = "nul" -input_player7_r_y_minus_axis = "nul" -input_player7_turbo = "nul" -input_player7_turbo_btn = "nul" -input_player7_turbo_axis = "nul" -input_player8_b = "nul" -input_player8_b_btn = "nul" -input_player8_b_axis = "nul" -input_player8_y = "nul" -input_player8_y_btn = "nul" -input_player8_y_axis = "nul" -input_player8_select = "nul" -input_player8_select_btn = "nul" -input_player8_select_axis = "nul" -input_player8_start = "nul" -input_player8_start_btn = "nul" -input_player8_start_axis = "nul" -input_player8_up = "nul" -input_player8_up_btn = "nul" -input_player8_up_axis = "nul" -input_player8_down = "nul" -input_player8_down_btn = "nul" -input_player8_down_axis = "nul" -input_player8_left = "nul" -input_player8_left_btn = "nul" -input_player8_left_axis = "nul" -input_player8_right = "nul" -input_player8_right_btn = "nul" -input_player8_right_axis = "nul" -input_player8_a = "nul" -input_player8_a_btn = "nul" -input_player8_a_axis = "nul" -input_player8_x = "nul" -input_player8_x_btn = "nul" -input_player8_x_axis = "nul" -input_player8_l = "nul" -input_player8_l_btn = "nul" -input_player8_l_axis = "nul" -input_player8_r = "nul" -input_player8_r_btn = "nul" -input_player8_r_axis = "nul" -input_player8_l2 = "nul" -input_player8_l2_btn = "nul" -input_player8_l2_axis = "nul" -input_player8_r2 = "nul" -input_player8_r2_btn = "nul" -input_player8_r2_axis = "nul" -input_player8_l3 = "nul" -input_player8_l3_btn = "nul" -input_player8_l3_axis = "nul" -input_player8_r3 = "nul" -input_player8_r3_btn = "nul" -input_player8_r3_axis = "nul" -input_player8_l_x_plus = "nul" -input_player8_l_x_plus_btn = "nul" -input_player8_l_x_plus_axis = "nul" -input_player8_l_x_minus = "nul" -input_player8_l_x_minus_btn = "nul" -input_player8_l_x_minus_axis = "nul" -input_player8_l_y_plus = "nul" -input_player8_l_y_plus_btn = "nul" -input_player8_l_y_plus_axis = "nul" -input_player8_l_y_minus = "nul" -input_player8_l_y_minus_btn = "nul" -input_player8_l_y_minus_axis = "nul" -input_player8_r_x_plus = "nul" -input_player8_r_x_plus_btn = "nul" -input_player8_r_x_plus_axis = "nul" -input_player8_r_x_minus = "nul" -input_player8_r_x_minus_btn = "nul" -input_player8_r_x_minus_axis = "nul" -input_player8_r_y_plus = "nul" -input_player8_r_y_plus_btn = "nul" -input_player8_r_y_plus_axis = "nul" -input_player8_r_y_minus = "nul" -input_player8_r_y_minus_btn = "nul" -input_player8_r_y_minus_axis = "nul" -input_player8_turbo = "nul" -input_player8_turbo_btn = "nul" -input_player8_turbo_axis = "nul" -input_player9_b = "nul" -input_player9_b_btn = "nul" -input_player9_b_axis = "nul" -input_player9_y = "nul" -input_player9_y_btn = "nul" -input_player9_y_axis = "nul" -input_player9_select = "nul" -input_player9_select_btn = "nul" -input_player9_select_axis = "nul" -input_player9_start = "nul" -input_player9_start_btn = "nul" -input_player9_start_axis = "nul" -input_player9_up = "nul" -input_player9_up_btn = "nul" -input_player9_up_axis = "nul" -input_player9_down = "nul" -input_player9_down_btn = "nul" -input_player9_down_axis = "nul" -input_player9_left = "nul" -input_player9_left_btn = "nul" -input_player9_left_axis = "nul" -input_player9_right = "nul" -input_player9_right_btn = "nul" -input_player9_right_axis = "nul" -input_player9_a = "nul" -input_player9_a_btn = "nul" -input_player9_a_axis = "nul" -input_player9_x = "nul" -input_player9_x_btn = "nul" -input_player9_x_axis = "nul" -input_player9_l = "nul" -input_player9_l_btn = "nul" -input_player9_l_axis = "nul" -input_player9_r = "nul" -input_player9_r_btn = "nul" -input_player9_r_axis = "nul" -input_player9_l2 = "nul" -input_player9_l2_btn = "nul" -input_player9_l2_axis = "nul" -input_player9_r2 = "nul" -input_player9_r2_btn = "nul" -input_player9_r2_axis = "nul" -input_player9_l3 = "nul" -input_player9_l3_btn = "nul" -input_player9_l3_axis = "nul" -input_player9_r3 = "nul" -input_player9_r3_btn = "nul" -input_player9_r3_axis = "nul" -input_player9_l_x_plus = "nul" -input_player9_l_x_plus_btn = "nul" -input_player9_l_x_plus_axis = "nul" -input_player9_l_x_minus = "nul" -input_player9_l_x_minus_btn = "nul" -input_player9_l_x_minus_axis = "nul" -input_player9_l_y_plus = "nul" -input_player9_l_y_plus_btn = "nul" -input_player9_l_y_plus_axis = "nul" -input_player9_l_y_minus = "nul" -input_player9_l_y_minus_btn = "nul" -input_player9_l_y_minus_axis = "nul" -input_player9_r_x_plus = "nul" -input_player9_r_x_plus_btn = "nul" -input_player9_r_x_plus_axis = "nul" -input_player9_r_x_minus = "nul" -input_player9_r_x_minus_btn = "nul" -input_player9_r_x_minus_axis = "nul" -input_player9_r_y_plus = "nul" -input_player9_r_y_plus_btn = "nul" -input_player9_r_y_plus_axis = "nul" -input_player9_r_y_minus = "nul" -input_player9_r_y_minus_btn = "nul" -input_player9_r_y_minus_axis = "nul" -input_player9_turbo = "nul" -input_player9_turbo_btn = "nul" -input_player9_turbo_axis = "nul" -input_player10_b = "nul" -input_player10_b_btn = "nul" -input_player10_b_axis = "nul" -input_player10_y = "nul" -input_player10_y_btn = "nul" -input_player10_y_axis = "nul" -input_player10_select = "nul" -input_player10_select_btn = "nul" -input_player10_select_axis = "nul" -input_player10_start = "nul" -input_player10_start_btn = "nul" -input_player10_start_axis = "nul" -input_player10_up = "nul" -input_player10_up_btn = "nul" -input_player10_up_axis = "nul" -input_player10_down = "nul" -input_player10_down_btn = "nul" -input_player10_down_axis = "nul" -input_player10_left = "nul" -input_player10_left_btn = "nul" -input_player10_left_axis = "nul" -input_player10_right = "nul" -input_player10_right_btn = "nul" -input_player10_right_axis = "nul" -input_player10_a = "nul" -input_player10_a_btn = "nul" -input_player10_a_axis = "nul" -input_player10_x = "nul" -input_player10_x_btn = "nul" -input_player10_x_axis = "nul" -input_player10_l = "nul" -input_player10_l_btn = "nul" -input_player10_l_axis = "nul" -input_player10_r = "nul" -input_player10_r_btn = "nul" -input_player10_r_axis = "nul" -input_player10_l2 = "nul" -input_player10_l2_btn = "nul" -input_player10_l2_axis = "nul" -input_player10_r2 = "nul" -input_player10_r2_btn = "nul" -input_player10_r2_axis = "nul" -input_player10_l3 = "nul" -input_player10_l3_btn = "nul" -input_player10_l3_axis = "nul" -input_player10_r3 = "nul" -input_player10_r3_btn = "nul" -input_player10_r3_axis = "nul" -input_player10_l_x_plus = "nul" -input_player10_l_x_plus_btn = "nul" -input_player10_l_x_plus_axis = "nul" -input_player10_l_x_minus = "nul" -input_player10_l_x_minus_btn = "nul" -input_player10_l_x_minus_axis = "nul" -input_player10_l_y_plus = "nul" -input_player10_l_y_plus_btn = "nul" -input_player10_l_y_plus_axis = "nul" -input_player10_l_y_minus = "nul" -input_player10_l_y_minus_btn = "nul" -input_player10_l_y_minus_axis = "nul" -input_player10_r_x_plus = "nul" -input_player10_r_x_plus_btn = "nul" -input_player10_r_x_plus_axis = "nul" -input_player10_r_x_minus = "nul" -input_player10_r_x_minus_btn = "nul" -input_player10_r_x_minus_axis = "nul" -input_player10_r_y_plus = "nul" -input_player10_r_y_plus_btn = "nul" -input_player10_r_y_plus_axis = "nul" -input_player10_r_y_minus = "nul" -input_player10_r_y_minus_btn = "nul" -input_player10_r_y_minus_axis = "nul" -input_player10_turbo = "nul" -input_player10_turbo_btn = "nul" -input_player10_turbo_axis = "nul" -input_player11_b = "nul" -input_player11_b_btn = "nul" -input_player11_b_axis = "nul" -input_player11_y = "nul" -input_player11_y_btn = "nul" -input_player11_y_axis = "nul" -input_player11_select = "nul" -input_player11_select_btn = "nul" -input_player11_select_axis = "nul" -input_player11_start = "nul" -input_player11_start_btn = "nul" -input_player11_start_axis = "nul" -input_player11_up = "nul" -input_player11_up_btn = "nul" -input_player11_up_axis = "nul" -input_player11_down = "nul" -input_player11_down_btn = "nul" -input_player11_down_axis = "nul" -input_player11_left = "nul" -input_player11_left_btn = "nul" -input_player11_left_axis = "nul" -input_player11_right = "nul" -input_player11_right_btn = "nul" -input_player11_right_axis = "nul" -input_player11_a = "nul" -input_player11_a_btn = "nul" -input_player11_a_axis = "nul" -input_player11_x = "nul" -input_player11_x_btn = "nul" -input_player11_x_axis = "nul" -input_player11_l = "nul" -input_player11_l_btn = "nul" -input_player11_l_axis = "nul" -input_player11_r = "nul" -input_player11_r_btn = "nul" -input_player11_r_axis = "nul" -input_player11_l2 = "nul" -input_player11_l2_btn = "nul" -input_player11_l2_axis = "nul" -input_player11_r2 = "nul" -input_player11_r2_btn = "nul" -input_player11_r2_axis = "nul" -input_player11_l3 = "nul" -input_player11_l3_btn = "nul" -input_player11_l3_axis = "nul" -input_player11_r3 = "nul" -input_player11_r3_btn = "nul" -input_player11_r3_axis = "nul" -input_player11_l_x_plus = "nul" -input_player11_l_x_plus_btn = "nul" -input_player11_l_x_plus_axis = "nul" -input_player11_l_x_minus = "nul" -input_player11_l_x_minus_btn = "nul" -input_player11_l_x_minus_axis = "nul" -input_player11_l_y_plus = "nul" -input_player11_l_y_plus_btn = "nul" -input_player11_l_y_plus_axis = "nul" -input_player11_l_y_minus = "nul" -input_player11_l_y_minus_btn = "nul" -input_player11_l_y_minus_axis = "nul" -input_player11_r_x_plus = "nul" -input_player11_r_x_plus_btn = "nul" -input_player11_r_x_plus_axis = "nul" -input_player11_r_x_minus = "nul" -input_player11_r_x_minus_btn = "nul" -input_player11_r_x_minus_axis = "nul" -input_player11_r_y_plus = "nul" -input_player11_r_y_plus_btn = "nul" -input_player11_r_y_plus_axis = "nul" -input_player11_r_y_minus = "nul" -input_player11_r_y_minus_btn = "nul" -input_player11_r_y_minus_axis = "nul" -input_player11_turbo = "nul" -input_player11_turbo_btn = "nul" -input_player11_turbo_axis = "nul" -input_player12_b = "nul" -input_player12_b_btn = "nul" -input_player12_b_axis = "nul" -input_player12_y = "nul" -input_player12_y_btn = "nul" -input_player12_y_axis = "nul" -input_player12_select = "nul" -input_player12_select_btn = "nul" -input_player12_select_axis = "nul" -input_player12_start = "nul" -input_player12_start_btn = "nul" -input_player12_start_axis = "nul" -input_player12_up = "nul" -input_player12_up_btn = "nul" -input_player12_up_axis = "nul" -input_player12_down = "nul" -input_player12_down_btn = "nul" -input_player12_down_axis = "nul" -input_player12_left = "nul" -input_player12_left_btn = "nul" -input_player12_left_axis = "nul" -input_player12_right = "nul" -input_player12_right_btn = "nul" -input_player12_right_axis = "nul" -input_player12_a = "nul" -input_player12_a_btn = "nul" -input_player12_a_axis = "nul" -input_player12_x = "nul" -input_player12_x_btn = "nul" -input_player12_x_axis = "nul" -input_player12_l = "nul" -input_player12_l_btn = "nul" -input_player12_l_axis = "nul" -input_player12_r = "nul" -input_player12_r_btn = "nul" -input_player12_r_axis = "nul" -input_player12_l2 = "nul" -input_player12_l2_btn = "nul" -input_player12_l2_axis = "nul" -input_player12_r2 = "nul" -input_player12_r2_btn = "nul" -input_player12_r2_axis = "nul" -input_player12_l3 = "nul" -input_player12_l3_btn = "nul" -input_player12_l3_axis = "nul" -input_player12_r3 = "nul" -input_player12_r3_btn = "nul" -input_player12_r3_axis = "nul" -input_player12_l_x_plus = "nul" -input_player12_l_x_plus_btn = "nul" -input_player12_l_x_plus_axis = "nul" -input_player12_l_x_minus = "nul" -input_player12_l_x_minus_btn = "nul" -input_player12_l_x_minus_axis = "nul" -input_player12_l_y_plus = "nul" -input_player12_l_y_plus_btn = "nul" -input_player12_l_y_plus_axis = "nul" -input_player12_l_y_minus = "nul" -input_player12_l_y_minus_btn = "nul" -input_player12_l_y_minus_axis = "nul" -input_player12_r_x_plus = "nul" -input_player12_r_x_plus_btn = "nul" -input_player12_r_x_plus_axis = "nul" -input_player12_r_x_minus = "nul" -input_player12_r_x_minus_btn = "nul" -input_player12_r_x_minus_axis = "nul" -input_player12_r_y_plus = "nul" -input_player12_r_y_plus_btn = "nul" -input_player12_r_y_plus_axis = "nul" -input_player12_r_y_minus = "nul" -input_player12_r_y_minus_btn = "nul" -input_player12_r_y_minus_axis = "nul" -input_player12_turbo = "nul" -input_player12_turbo_btn = "nul" -input_player12_turbo_axis = "nul" -input_player13_b = "nul" -input_player13_b_btn = "nul" -input_player13_b_axis = "nul" -input_player13_y = "nul" -input_player13_y_btn = "nul" -input_player13_y_axis = "nul" -input_player13_select = "nul" -input_player13_select_btn = "nul" -input_player13_select_axis = "nul" -input_player13_start = "nul" -input_player13_start_btn = "nul" -input_player13_start_axis = "nul" -input_player13_up = "nul" -input_player13_up_btn = "nul" -input_player13_up_axis = "nul" -input_player13_down = "nul" -input_player13_down_btn = "nul" -input_player13_down_axis = "nul" -input_player13_left = "nul" -input_player13_left_btn = "nul" -input_player13_left_axis = "nul" -input_player13_right = "nul" -input_player13_right_btn = "nul" -input_player13_right_axis = "nul" -input_player13_a = "nul" -input_player13_a_btn = "nul" -input_player13_a_axis = "nul" -input_player13_x = "nul" -input_player13_x_btn = "nul" -input_player13_x_axis = "nul" -input_player13_l = "nul" -input_player13_l_btn = "nul" -input_player13_l_axis = "nul" -input_player13_r = "nul" -input_player13_r_btn = "nul" -input_player13_r_axis = "nul" -input_player13_l2 = "nul" -input_player13_l2_btn = "nul" -input_player13_l2_axis = "nul" -input_player13_r2 = "nul" -input_player13_r2_btn = "nul" -input_player13_r2_axis = "nul" -input_player13_l3 = "nul" -input_player13_l3_btn = "nul" -input_player13_l3_axis = "nul" -input_player13_r3 = "nul" -input_player13_r3_btn = "nul" -input_player13_r3_axis = "nul" -input_player13_l_x_plus = "nul" -input_player13_l_x_plus_btn = "nul" -input_player13_l_x_plus_axis = "nul" -input_player13_l_x_minus = "nul" -input_player13_l_x_minus_btn = "nul" -input_player13_l_x_minus_axis = "nul" -input_player13_l_y_plus = "nul" -input_player13_l_y_plus_btn = "nul" -input_player13_l_y_plus_axis = "nul" -input_player13_l_y_minus = "nul" -input_player13_l_y_minus_btn = "nul" -input_player13_l_y_minus_axis = "nul" -input_player13_r_x_plus = "nul" -input_player13_r_x_plus_btn = "nul" -input_player13_r_x_plus_axis = "nul" -input_player13_r_x_minus = "nul" -input_player13_r_x_minus_btn = "nul" -input_player13_r_x_minus_axis = "nul" -input_player13_r_y_plus = "nul" -input_player13_r_y_plus_btn = "nul" -input_player13_r_y_plus_axis = "nul" -input_player13_r_y_minus = "nul" -input_player13_r_y_minus_btn = "nul" -input_player13_r_y_minus_axis = "nul" -input_player13_turbo = "nul" -input_player13_turbo_btn = "nul" -input_player13_turbo_axis = "nul" -input_player14_b = "nul" -input_player14_b_btn = "nul" -input_player14_b_axis = "nul" -input_player14_y = "nul" -input_player14_y_btn = "nul" -input_player14_y_axis = "nul" -input_player14_select = "nul" -input_player14_select_btn = "nul" -input_player14_select_axis = "nul" -input_player14_start = "nul" -input_player14_start_btn = "nul" -input_player14_start_axis = "nul" -input_player14_up = "nul" -input_player14_up_btn = "nul" -input_player14_up_axis = "nul" -input_player14_down = "nul" -input_player14_down_btn = "nul" -input_player14_down_axis = "nul" -input_player14_left = "nul" -input_player14_left_btn = "nul" -input_player14_left_axis = "nul" -input_player14_right = "nul" -input_player14_right_btn = "nul" -input_player14_right_axis = "nul" -input_player14_a = "nul" -input_player14_a_btn = "nul" -input_player14_a_axis = "nul" -input_player14_x = "nul" -input_player14_x_btn = "nul" -input_player14_x_axis = "nul" -input_player14_l = "nul" -input_player14_l_btn = "nul" -input_player14_l_axis = "nul" -input_player14_r = "nul" -input_player14_r_btn = "nul" -input_player14_r_axis = "nul" -input_player14_l2 = "nul" -input_player14_l2_btn = "nul" -input_player14_l2_axis = "nul" -input_player14_r2 = "nul" -input_player14_r2_btn = "nul" -input_player14_r2_axis = "nul" -input_player14_l3 = "nul" -input_player14_l3_btn = "nul" -input_player14_l3_axis = "nul" -input_player14_r3 = "nul" -input_player14_r3_btn = "nul" -input_player14_r3_axis = "nul" -input_player14_l_x_plus = "nul" -input_player14_l_x_plus_btn = "nul" -input_player14_l_x_plus_axis = "nul" -input_player14_l_x_minus = "nul" -input_player14_l_x_minus_btn = "nul" -input_player14_l_x_minus_axis = "nul" -input_player14_l_y_plus = "nul" -input_player14_l_y_plus_btn = "nul" -input_player14_l_y_plus_axis = "nul" -input_player14_l_y_minus = "nul" -input_player14_l_y_minus_btn = "nul" -input_player14_l_y_minus_axis = "nul" -input_player14_r_x_plus = "nul" -input_player14_r_x_plus_btn = "nul" -input_player14_r_x_plus_axis = "nul" -input_player14_r_x_minus = "nul" -input_player14_r_x_minus_btn = "nul" -input_player14_r_x_minus_axis = "nul" -input_player14_r_y_plus = "nul" -input_player14_r_y_plus_btn = "nul" -input_player14_r_y_plus_axis = "nul" -input_player14_r_y_minus = "nul" -input_player14_r_y_minus_btn = "nul" -input_player14_r_y_minus_axis = "nul" -input_player14_turbo = "nul" -input_player14_turbo_btn = "nul" -input_player14_turbo_axis = "nul" -input_player15_b = "nul" -input_player15_b_btn = "nul" -input_player15_b_axis = "nul" -input_player15_y = "nul" -input_player15_y_btn = "nul" -input_player15_y_axis = "nul" -input_player15_select = "nul" -input_player15_select_btn = "nul" -input_player15_select_axis = "nul" -input_player15_start = "nul" -input_player15_start_btn = "nul" -input_player15_start_axis = "nul" -input_player15_up = "nul" -input_player15_up_btn = "nul" -input_player15_up_axis = "nul" -input_player15_down = "nul" -input_player15_down_btn = "nul" -input_player15_down_axis = "nul" -input_player15_left = "nul" -input_player15_left_btn = "nul" -input_player15_left_axis = "nul" -input_player15_right = "nul" -input_player15_right_btn = "nul" -input_player15_right_axis = "nul" -input_player15_a = "nul" -input_player15_a_btn = "nul" -input_player15_a_axis = "nul" -input_player15_x = "nul" -input_player15_x_btn = "nul" -input_player15_x_axis = "nul" -input_player15_l = "nul" -input_player15_l_btn = "nul" -input_player15_l_axis = "nul" -input_player15_r = "nul" -input_player15_r_btn = "nul" -input_player15_r_axis = "nul" -input_player15_l2 = "nul" -input_player15_l2_btn = "nul" -input_player15_l2_axis = "nul" -input_player15_r2 = "nul" -input_player15_r2_btn = "nul" -input_player15_r2_axis = "nul" -input_player15_l3 = "nul" -input_player15_l3_btn = "nul" -input_player15_l3_axis = "nul" -input_player15_r3 = "nul" -input_player15_r3_btn = "nul" -input_player15_r3_axis = "nul" -input_player15_l_x_plus = "nul" -input_player15_l_x_plus_btn = "nul" -input_player15_l_x_plus_axis = "nul" -input_player15_l_x_minus = "nul" -input_player15_l_x_minus_btn = "nul" -input_player15_l_x_minus_axis = "nul" -input_player15_l_y_plus = "nul" -input_player15_l_y_plus_btn = "nul" -input_player15_l_y_plus_axis = "nul" -input_player15_l_y_minus = "nul" -input_player15_l_y_minus_btn = "nul" -input_player15_l_y_minus_axis = "nul" -input_player15_r_x_plus = "nul" -input_player15_r_x_plus_btn = "nul" -input_player15_r_x_plus_axis = "nul" -input_player15_r_x_minus = "nul" -input_player15_r_x_minus_btn = "nul" -input_player15_r_x_minus_axis = "nul" -input_player15_r_y_plus = "nul" -input_player15_r_y_plus_btn = "nul" -input_player15_r_y_plus_axis = "nul" -input_player15_r_y_minus = "nul" -input_player15_r_y_minus_btn = "nul" -input_player15_r_y_minus_axis = "nul" -input_player15_turbo = "nul" -input_player15_turbo_btn = "nul" -input_player15_turbo_axis = "nul" -input_player16_b = "nul" -input_player16_b_btn = "nul" -input_player16_b_axis = "nul" -input_player16_y = "nul" -input_player16_y_btn = "nul" -input_player16_y_axis = "nul" -input_player16_select = "nul" -input_player16_select_btn = "nul" -input_player16_select_axis = "nul" -input_player16_start = "nul" -input_player16_start_btn = "nul" -input_player16_start_axis = "nul" -input_player16_up = "nul" -input_player16_up_btn = "nul" -input_player16_up_axis = "nul" -input_player16_down = "nul" -input_player16_down_btn = "nul" -input_player16_down_axis = "nul" -input_player16_left = "nul" -input_player16_left_btn = "nul" -input_player16_left_axis = "nul" -input_player16_right = "nul" -input_player16_right_btn = "nul" -input_player16_right_axis = "nul" -input_player16_a = "nul" -input_player16_a_btn = "nul" -input_player16_a_axis = "nul" -input_player16_x = "nul" -input_player16_x_btn = "nul" -input_player16_x_axis = "nul" -input_player16_l = "nul" -input_player16_l_btn = "nul" -input_player16_l_axis = "nul" -input_player16_r = "nul" -input_player16_r_btn = "nul" -input_player16_r_axis = "nul" -input_player16_l2 = "nul" -input_player16_l2_btn = "nul" -input_player16_l2_axis = "nul" -input_player16_r2 = "nul" -input_player16_r2_btn = "nul" -input_player16_r2_axis = "nul" -input_player16_l3 = "nul" -input_player16_l3_btn = "nul" -input_player16_l3_axis = "nul" -input_player16_r3 = "nul" -input_player16_r3_btn = "nul" -input_player16_r3_axis = "nul" -input_player16_l_x_plus = "nul" -input_player16_l_x_plus_btn = "nul" -input_player16_l_x_plus_axis = "nul" -input_player16_l_x_minus = "nul" -input_player16_l_x_minus_btn = "nul" -input_player16_l_x_minus_axis = "nul" -input_player16_l_y_plus = "nul" -input_player16_l_y_plus_btn = "nul" -input_player16_l_y_plus_axis = "nul" -input_player16_l_y_minus = "nul" -input_player16_l_y_minus_btn = "nul" -input_player16_l_y_minus_axis = "nul" -input_player16_r_x_plus = "nul" -input_player16_r_x_plus_btn = "nul" -input_player16_r_x_plus_axis = "nul" -input_player16_r_x_minus = "nul" -input_player16_r_x_minus_btn = "nul" -input_player16_r_x_minus_axis = "nul" -input_player16_r_y_plus = "nul" -input_player16_r_y_plus_btn = "nul" -input_player16_r_y_plus_axis = "nul" -input_player16_r_y_minus = "nul" -input_player16_r_y_minus_btn = "nul" -input_player16_r_y_minus_axis = "nul" -input_player16_turbo = "nul" -input_player16_turbo_btn = "nul" -input_player16_turbo_axis = "nul" -xmb_font = "" -netplay_nickname = "" -video_filter = "" -audio_dsp_plugin = "" -netplay_ip_address = "" -recording_output_directory = "" -recording_config_directory = "" -core_options_path = "" -video_shader = "" -menu_wallpaper = "" -input_overlay = "" -video_font_path = "" -content_history_dir = "" -cache_directory = "" -resampler_directory = "" -xmb_font = "" -playlist_names = "" -playlist_cores = "" -audio_device = "" -camera_device = "" -cheevos_username = "" -cheevos_password = "" -video_context_driver = "" -input_keyboard_layout = "" -bundle_assets_src_path = "" -bundle_assets_dst_path = "" -bundle_assets_dst_path_subdir = "" +## Skeleton config file for RetroArch + +# Save all save files (*.srm) to this directory. This includes related files like .bsv, .rtc, .psrm, etc ... +# This will be overridden by explicit command line options. +# savefile_directory = + +# Save all save states (*.state) to this directory. +# This will be overridden by explicit command line options. +# savestate_directory = + +# If set to a directory, content which is temporarily extracted +# will be extracted to this directory. +# cache_directory = + +# Save all input remapping files to this directory. +# input_remapping_directory = + +# Save all playlist files to this directory. +# playlist_directory = + +# If set to a directory, the content history playlist will be saved +# to this directory. +# content_history_dir = + +# Automatically saves a savestate at the end of RetroArch's lifetime. +# The path is $SRAM_PATH.auto. +# RetroArch will automatically load any savestate with this path on startup if savestate_auto_load is set. +# savestate_auto_save = false +# savestate_auto_load = true + +# Load libretro from a dynamic location for dynamically built RetroArch. +# This option is mandatory. + +# Path to a libretro implementation. +# libretro_path = "/path/to/libretro.so" + +# A directory for where to search for libretro core implementations. +# libretro_directory = + +# A directory for where to search for libretro core information. +# libretro_info_path = + +# Sets log level for libretro cores (GET_LOG_INTERFACE). +# If a log level issued by a libretro core is below libretro_log_level, it is ignored. +# DEBUG logs are always ignored unless verbose mode is activated (--verbose). +# DEBUG = 0, INFO = 1, WARN = 2, ERROR = 3. +# libretro_log_level = 0 + +# Enable or disable verbosity level of frontend. +# log_verbosity = false + +# If this option is enabled, every content file loaded in RetroArch will be +# automatically added to a history list. +# history_list_enable = true + +# Enable or disable RetroArch performance counters +# perfcnt_enable = false + +# Path to core options config file. +# This config file is used to expose core-specific options. +# It will be written to by RetroArch. +# A default path will be assigned if not set. +# core_options_path = + +# Path to content history file. +# RetroArch keeps track of all content loaded in the menu and from CLI directly for convenient quick loading. +# A default path will be assigned if not set. +# content_history_path = + +# Path to music content history file (optional). +# RetroArch keeps track of all music content loaded in the menu and from CLI directly for convenient quick loading. +# A default path will be assigned if not set. +# content_music_history_path = + +# Path to image content history file (optional). +# RetroArch keeps track of all image content loaded in the menu and from CLI directly for convenient quick loading. +# A default path will be assigned if not set. +# content_image_history_path = + +# Path to video content history file (optional). +# RetroArch keeps track of all video content loaded in the menu and from CLI directly for convenient quick loading. +# A default path will be assigned if not set. +# content_video_history_path = + +# Number of entries that will be kept in content history file. +# content_history_size = 100 + +# Sets the "system" directory. +# Implementations can query for this directory to load BIOSes, system-specific configs, etc. +# system_directory = + +# Sets start directory for menu file browser. +# rgui_browser_directory = + +# Content directory. Interacts with RETRO_ENVIRONMENT_GET_CONTENT_DIRECTORY. +# Usually set by developers who bundle libretro/RetroArch apps to point to assets. +# content_directory = + +# Assets directory. This location is queried by default when menu interfaces try to look for +# loadable assets, etc. +# assets_directory = + +# Dynamic wallpapers directory. The place to store the wallpapers dynamically +# loaded by the menu depending on context. +# dynamic_wallpapers_directory = + +# Thumbnails directory. To store thumbnail files. +# thumbnails_directory = + +# Sets start directory for menu config browser. +# rgui_config_directory = + +# Show startup screen in menu. +# Is automatically set to false when seen for the first time. +# This is only updated in config if config_save_on_exit is set to true, however. +# rgui_show_start_screen = true + +# Flushes config to disk on exit. Useful for menu as settings can be modified. +# Overwrites the config. #include's and comments are not preserved. +# config_save_on_exit = true + +# Load up a specific config file based on the core being used. +# core_specific_config = false + +# Shows hidden files and folders in directory listings. +# show_hidden_files = true + +#### Video + +# Video driver to use. "gl", "xvideo", "sdl" +# video_driver = "gl" + +# Which context implementation to use. +# Possible ones for desktop are: glx, x-egl, kms-egl, sdl-gl, wgl. +# By default, tries to use first suitable driver. +# video_context_driver = + +# Windowed x resolution scale and y resolution scale +# (Real x res: base_size * xscale * aspect_ratio, real y res: base_size * yscale) +# video_scale = 3.0 + +# Fullscreen resolution. Resolution of 0 uses the resolution of the desktop. +# video_fullscreen_x = 0 +# video_fullscreen_y = 0 + +# Start in fullscreen. Can be changed at runtime. +# video_fullscreen = false + +# If fullscreen, prefer using a windowed fullscreen mode. +# video_windowed_fullscreen = true + +# Which monitor to prefer. 0 (default) means no particular monitor is preferred, 1 and up (1 being first monitor), +# suggests RetroArch to use that particular monitor. +# video_monitor_index = 0 + +# Forcibly disable composition. Only works in Windows Vista/7 for now. +# video_disable_composition = false + +# Video vsync. +# video_vsync = true + +# Max amount of swapchain images. +# Single buffering = 1, Double buffering = 2, 3 = Triple buffering +# video_max_swapchain_images = 3 + +# Forcibly disable sRGB FBO support. Some Intel OpenGL drivers on Windows +# have video problems with sRGB FBO support enabled. +# video_force_srgb_disable = false + +# Attempts to hard-synchronize CPU and GPU. Can reduce latency at cost of performance. +# video_hard_sync = false + +# Sets how many frames CPU can run ahead of GPU when using video_hard_sync. +# Maximum is 3. +# video_hard_sync_frames = 0 + +# Sets how many milliseconds to delay after VSync before running the core. +# Can reduce latency at cost of higher risk of stuttering. +# Maximum is 15. +# video_frame_delay = 0 + +# Inserts a black frame inbetween frames. +# Useful for 120 Hz monitors who want to play 60 Hz material with eliminated ghosting. +# video_refresh_rate should still be configured as if it is a 60 Hz monitor (divide refresh rate by 2). +# video_black_frame_insertion = false + +# Use threaded video driver. Using this might improve performance at possible cost of latency and more video stuttering. +# video_threaded = false + +# Use a shared context for HW rendered libretro cores. +# Avoids having to assume HW state changes inbetween frames. +# video_shared_context = false + +# Smoothens picture with bilinear filtering. Should be disabled if using pixel shaders. +# video_smooth = true + +# Forces rendering area to stay equal to content aspect ratio or as defined in video_aspect_ratio. +# video_force_aspect = true + +# Only scales video in integer steps. +# The base size depends on system-reported geometry and aspect ratio. +# If video_force_aspect is not set, X/Y will be integer scaled independently. +# video_scale_integer = false + +# A floating point value for video aspect ratio (width / height). +# If this is not set, aspect ratio is assumed to be automatic. +# Behavior then is defined by video_aspect_ratio_auto. +# video_aspect_ratio = + +# If this is true and video_aspect_ratio is not set, +# aspect ratio is decided by libretro implementation. +# If this is false, 1:1 PAR will always be assumed if video_aspect_ratio is not set. +# video_aspect_ratio_auto = false + +# Forces cropping of overscanned frames. +# Exact behavior of this option is implementation specific. +# video_crop_overscan = true + +# Path to shader. Shader can be either Cg, CGP (Cg preset) or GLSL, GLSLP (GLSL preset) +# video_shader = "/path/to/shader.{cg,cgp,glsl,glslp}" + +# Load video_shader on startup. +# Other shaders can still be loaded later in runtime. +# video_shader_enable = false + +# Defines a directory where shaders (Cg, CGP, GLSL) are kept for easy access. +# video_shader_dir = + +# CPU-based video filter. Path to a dynamic library. +# video_filter = + +# Defines a directory where CPU-based video filters are kept. +# video_filter_dir = + +# Path to a font used for rendering messages. This path must be defined to enable fonts. +# Do note that the _full_ path of the font is necessary! +# video_font_path = + +# Size of the font rendered. +# video_font_size = 32 + +# Enable usage of OSD messages. +# video_font_enable = true + +# Offset for where messages will be placed on screen. Values are in range 0.0 to 1.0 for both x and y values. +# [0.0, 0.0] maps to the lower left corner of the screen. +# video_message_pos_x = 0.05 +# video_message_pos_y = 0.05 + +# Color for message. The value is treated as a hexadecimal value. +# It is a regular RGB hex number, i.e. red is "ff0000". +# video_message_color = ffffff + +# Video refresh rate of your monitor. +# Used to calculate a suitable audio input rate. +# video_refresh_rate = 59.94 + +# Allows libretro cores to set rotation modes. +# Setting this to false will honor, but ignore this request. +# This is useful for vertically oriented content where one manually rotates the monitor. +# video_allow_rotate = true + +# Forces a certain rotation of the screen. +# The rotation is added to rotations which the libretro core sets (see video_allow_rotate). +# The angle is * 90 degrees counter-clockwise. +# video_rotation = 0 + +#### Audio + +# Enable audio. +# audio_enable = true + +# Mutes audio. +# audio_mute_enable = false + +# Audio output samplerate. +# audio_out_rate = 48000 + +# Audio resampler backend. Which audio resampler to use. +# Default will use "sinc". +# audio_resampler = + +# Audio driver backend. Depending on configuration possible candidates are: alsa, pulse, oss, jack, rsound, roar, openal, sdl, xaudio. +# audio_driver = + +# Override the default audio device the audio_driver uses. This is driver dependant. E.g. ALSA wants a PCM device, OSS wants a path (e.g. /dev/dsp), Jack wants portnames (e.g. system:playback1,system:playback_2), and so on ... +# audio_device = + +# Audio DSP plugin that processes audio before it's sent to the driver. Path to a dynamic library. +# audio_dsp_plugin = + +# Directory where DSP plugins are kept. +# audio_filter_dir = + +# Will sync (block) on audio. Recommended. +# audio_sync = true + +# Desired audio latency in milliseconds. Might not be honored if driver can't provide given latency. +# audio_latency = 64 + +# Enable audio rate control. +# audio_rate_control = true + +# Controls audio rate control delta. Defines how much input rate can be adjusted dynamically. +# Input rate = in_rate * (1.0 +/- audio_rate_control_delta) +# audio_rate_control_delta = 0.005 + +# Controls maximum audio timing skew. Defines the maximum change in input rate. +# Input rate = in_rate * (1.0 +/- max_timing_skew) +# audio_max_timing_skew = 0.05 + +# Audio volume. Volume is expressed in dB. +# 0 dB is normal volume. No gain will be applied. +# Gain can be controlled in runtime with input_volume_up/input_volume_down. +# audio_volume = 0.0 + +#### Overlay + +# Defines a directory where overlays are kept for easy access. +# overlay_directory = + +# Enable or disable the current overlay. +# input_overlay_enable = true + +# Hide the current overlay from appearing inside the menu. +# input_overlay_hide_in_menu = true + +# Path to input overlay. +# input_overlay = + +# Overlay opacity. +# input_overlay_opacity = 1.0 + +# Overlay scale. +# input_overlay_scale = 1.0 + +#### Input + +# Input driver. Depending on video driver, it might force a different input driver. +# input_driver = sdl + +# Input device driver. (Valid: linuxraw, sdl, dinput) +# input_joypad_driver = + +# Path to input remapping file. +# input_remapping_path = + +# Input bind timer timeout. +# Amount of seconds to wait until proceeding to the next bind. Default: 5, minimum: 1 +# input_bind_timeout = 1 + +# If enabled, overrides the input binds with the remapped binds set for the current core. +# input_remap_binds_enable = true + +# Maximum amount of users supported by RetroArch. +# input_max_users = 16 + +# Keyboard layout for input driver if applicable (udev/evdev for now). +# Syntax is either just layout (e.g. "no"), or a layout and variant separated with colon ("no:nodeadkeys"). +# input_keyboard_layout = + +# Defines axis threshold. Possible values are [0.0, 1.0] +# input_axis_threshold = 0.5 + +# Enable input auto-detection. Will attempt to autoconfigure +# joypads, Plug-and-Play style. +# input_autodetect_enable = true + +# Show the input descriptors set by the core instead of the +# default ones. +# input_descriptor_label_show = true + +# Hide input descriptors that were not set by the core. +# input_descriptor_hide_unbound = false + +# Influence how input polling is done inside RetroArch. +# 0 : Early - Input polling is performed before call to retro_run. +# 1 : Normal - Input polling is performed when retro_input_poll is +# requested. +# 2 : Late - Input polling is performed on first call to retro_input_state +# per frame +# +# Setting it to 0 or 2 can result in less latency depending on +# your configuration. +# +# When netplay is enabled, the default polling behavior (1) will +# be used regardless of the value set here. +# input_poll_type_behavior = 1 + +# Directory for joypad autoconfigs. +# If a joypad is plugged in, that joypad will be autoconfigured if a config file +# corresponding to that joypad is present in joypad_autoconfig_dir. +# Input binds which are made explicit (input_playerN_*_btn/axis) will take priority over autoconfigs. +# Autoconfigs can be created with retroarch-joyconfig, manually, or with a frontend. +# Requires input_autodetect_enable to be enabled. +# joypad_autoconfig_dir = + +# Sets which libretro device is used for a user. +# Devices are indentified with a number. +# This is normally saved by the menu. +# Device IDs are found in libretro.h. +# These settings are overridden by explicit command-line arguments which refer to input devices. +# None: 0 +# Joypad (RetroPad): 1 +# Mouse: 2 +# Keyboard: 3 +# Generic Lightgun: 4 +# Joypad w/ Analog (RetroPad + Analog sticks): 5 +# Multitap (SNES specific): 257 +# Super Scope (SNES specific): 260 +# Justifier (SNES specific): 516 +# Justifiers (SNES specific): 772 + +# input_libretro_device_p1 = +# input_libretro_device_p2 = +# input_libretro_device_p3 = +# input_libretro_device_p4 = +# input_libretro_device_p5 = +# input_libretro_device_p6 = +# input_libretro_device_p7 = +# input_libretro_device_p8 = + +# Keyboard input. Will recognize letters ("a" to "z") and the following special keys (where "kp_" +# is for keypad keys): +# +# left, right, up, down, enter, kp_enter, tab, insert, del, end, home, +# rshift, shift, ctrl, alt, space, escape, add, subtract, kp_plus, kp_minus, +# f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, +# num0, num1, num2, num3, num4, num5, num6, num7, num8, num9, pageup, pagedown, +# keypad0, keypad1, keypad2, keypad3, keypad4, keypad5, keypad6, keypad7, keypad8, keypad9, +# period, capslock, numlock, backspace, multiply, divide, print_screen, scroll_lock, +# tilde, backquote, pause, quote, comma, minus, slash, semicolon, equals, leftbracket, +# backslash, rightbracket, kp_period, kp_equals, rctrl, ralt +# +# Keyboard input, Joypad and Joyaxis will all obey the "nul" bind, which disables the bind completely, +# rather than relying on a default. +# input_player1_a = "x" +# input_player1_b = "z" +# input_player1_y = "a" +# input_player1_x = "s" +# input_player1_start = "enter" +# input_player1_select = "rshift" +# input_player1_l = "q" +# input_player1_r = "w" +# input_player1_left = "left" +# input_player1_right = "right" +# input_player1_up = "up" +# input_player1_down = "down" +# input_player1_l2 = +# input_player1_r2 = +# input_player1_l3 = +# input_player1_r3 = + +# Two analog sticks (DualShock-esque). +# Bound as usual, however, if a real analog axis is bound, +# it can be read as a true analog. +# Positive X axis is right, Positive Y axis is down. +# input_player1_l_x_plus = +# input_player1_l_x_minus = +# input_player1_l_y_plus = +# input_player1_l_y_minus = +# input_player1_r_x_plus = +# input_player1_r_x_minus = +# input_player1_r_y_plus = +# input_player1_r_y_minus = + +# If desired, it is possible to override which joypads are being used for user 1 through 8. +# First joypad available is 0. +# input_player1_joypad_index = 0 +# input_player2_joypad_index = 1 +# input_player3_joypad_index = 2 +# input_player4_joypad_index = 3 +# input_player5_joypad_index = 4 +# input_player6_joypad_index = 5 +# input_player7_joypad_index = 6 +# input_player8_joypad_index = 7 + +# Input device buttons. +# Figure these out by using RetroArch-Phoenix or retroarch-joyconfig. +# You can use joypad hats with hnxx, where n is the hat, and xx is a string representing direction. +# E.g. "h0up" +# input_player1_a_btn = +# input_player1_b_btn = +# input_player1_y_btn = +# input_player1_x_btn = +# input_player1_start_btn = +# input_player1_select_btn = +# input_player1_l_btn = +# input_player1_r_btn = +# input_player1_left_btn = +# input_player1_right_btn = +# input_player1_up_btn = +# input_player1_down_btn = +# input_player1_l2_btn = +# input_player1_r2_btn = +# input_player1_l3_btn = +# input_player1_r3_btn = + +# Menu buttons. +# menu_search_btn = +# menu_info_btn = +# menu_default_btn = +# menu_scroll_down_btn = +# menu_scroll_up_btn = + +# Swap buttons for OK/Cancel +# menu_swap_ok_cancel_buttons = false + +# Axis for RetroArch D-Pad. +# Needs to be either '+' or '-' in the first character signaling either positive or negative direction of the axis, then the axis number. +# Do note that every other input option has the corresponding _btn and _axis binds as well; they are omitted here for clarity. +# input_player1_left_axis = +# input_player1_right_axis = +# input_player1_up_axis = +# input_player1_down_axis = + +# Holding the turbo while pressing another button will let the button enter a turbo mode +# where the button state is modulated with a periodic signal. +# The modulation stops when the button itself (not turbo button) is released. +# input_player1_turbo = + +# Describes the period and how long of that period a turbo-enabled button should behave. +# Numbers are described in frames. +# input_turbo_period = 6 +# input_turbo_duty_cycle = 3 + +# This goes all the way to user 8 (*_player2_*, *_player3_*, etc), but omitted for clarity. +# All input binds have corresponding binds for keyboard (none), joykeys (_btn) and joyaxes (_axis) as well. + +# Toggles fullscreen. +# input_toggle_fullscreen = f + +# Saves state. +# input_save_state = f2 +# Loads state. +# input_load_state = f4 + +# State slots. With slot set to 0, save state name is *.state (or whatever defined on commandline). +# When slot is != 0, path will be $path%d, where %d is slot number. +# input_state_slot_increase = f7 +# input_state_slot_decrease = f6 + +# Toggles between fast-forwarding and normal speed. +# input_toggle_fast_forward = space + +# Hold for fast-forward. Releasing button disables fast-forward. +# input_hold_fast_forward = l + +# Key to exit RetroArch cleanly. +# Killing it in any hard way (SIGKILL, etc) will terminate RetroArch without saving RAM, etc. +# On Unix-likes, SIGINT/SIGTERM allows a clean deinitialization. +# input_exit_emulator = escape + + +# Applies next and previous shader in directory. +# input_shader_next = m +# input_shader_prev = n + +# Hold button down to rewind. Rewinding must be enabled. +# input_rewind = r + +# Toggle between recording and not. +# input_movie_record_toggle = o + +# Toggle between paused and non-paused state +# input_pause_toggle = p + +# Frame advance when content is paused +# input_frame_advance = k + +# Reset the content. +# input_reset = h + +# Cheats. +# input_cheat_index_plus = y +# input_cheat_index_minus = t +# input_cheat_toggle = u + +# Mute/unmute audio +# input_audio_mute = f9 + +# Take screenshot +# input_screenshot = f8 + +# Netplay flip users. +# input_netplay_flip_players = i + +# Hold for slowmotion. +# input_slowmotion = e + +# Enable other hotkeys. +# If this hotkey is bound to either keyboard, joybutton or joyaxis, +# all other hotkeys will be disabled unless this hotkey is also held at the same time. +# This is useful for RETRO_KEYBOARD centric implementations +# which query a large area of the keyboard, where it is not desirable +# that hotkeys get in the way. + +# Alternatively, all hotkeys for keyboard could be disabled by the user. +# input_enable_hotkey_btn = + +# Increases audio volume. +# input_volume_up = kp_plus +# Decreases audio volume. +# input_volume_down = kp_minus + +# Toggles to next overlay. Wraps around. +# input_overlay_next = + +# Toggles eject for disks. Used for multiple-disk content. +# input_disk_eject_toggle = + +# Cycles through disk images. Use after ejecting. +# Complete by toggling eject again. +# input_disk_next = + +# Toggles menu. +# input_menu_toggle = f1 + +# RetroPad button combination to toggle menu +# 0 = none, 1 = L + R + Y + D-Pad Down, 2 = L3 + R3, 3 = Start + Select +# input_menu_toggle_gamepad_combo = 0 + +# allow any RetroPad to control the menu +# all_users_control_menu = false + +# Toggles mouse grab. When mouse is grabbed, RetroArch hides the mouse, +# and keeps the mouse pointer inside the window to allow relative mouse input +# to work better. +# input_grab_mouse_toggle = f11 + +#### Menu + +# Menu driver to use. "rgui", "lakka", etc. +# menu_driver = "rgui" + +# If disabled, the libretro core will keep running in the background when we +# are in the menu. +# menu_pause_libretro = false + +# Enable mouse input inside the menu. +# menu_mouse_enable = false + +# Enable touch input inside the menu. +# menu_pointer_enable = false + +# Shows current date and/or time inside menu. +# menu_timedate_enable = true + +# Shows current core inside menu. +# menu_core_enable = true + +# Path to an image to set as menu wallpaper. +# menu_wallpaper = + +# Dynamically load a new wallpaper depending on context. +# menu_dynamic_wallpaper_enable = false + +# Type of thumbnail to display. 0 = none, 1 = snaps, 2 = titles, 3 = boxarts +# menu_thumbnails = 0 + +# Wrap-around to beginning and/or end if boundary of list is reached horizontally or vertically +# menu_navigation_wraparound_enable = false + +# Filter files being show in 'Load Content' by supported extensions +# menu_navigation_browser_filter_supported_extensions_enable = true + +# Collapse subgroup settings into main group to create one big listing of settings +# per category. +# menu_collapse_subgroups_enable = false + +#### Core +# +# Prevent libretro cores from closing RetroArch on exit by loading a dummy core. +# load_dummy_on_core_shutdown = "true" + +# Check for firmware requirement(s) before loading a content. +# check_firmware_before_loading = "false" + +#### UI + +# Suspends the screensaver if set to true. Is a hint that does not necessarily have to be honored +# by video driver. +# suspend_screensaver_enable = true + +# Start UI companion driver's interface on boot (if available). +# ui_companion_start_on_boot = true + +#### Camera + +# Override the default camera device the camera driver uses. This is driver dependant. +# camera_device = + +# Override the default privacy permission for cores that want to access camera services. Is "false" by default. +# camera_allow = false + +#### Location + +# Override the default privacy permission for cores that want to access location services. Is "false" by default. +# location_allow = false + +#### Core Updater + +# URL to core update directory on buildbot. +# core_updater_buildbot_url = "http://buildbot.libretro.com" + +# URL to assets update directory on buildbot. +# core_updater_buildbot_assets_url = "http://buildbot.libretro.com/assets/" + +# After downloading, automatically extract archives that the downloads are contained inside. +# core_updater_auto_extract_archive = true + +#### Network + +# When being client over netplay, use keybinds for user 1. +# netplay_client_swap_input = false + +# The username of the person running RetroArch. This will be used for playing online, for instance. +# netplay_nickname = + +# The amount of delay frames to use for netplay. Increasing this value will increase +# performance, but introduce more latency. +# netplay_delay_frames = 0 + +# Netplay mode for the current user. +# false is Server, true is Client. +# netplay_mode = false + +# Enable or disable spectator mode for the user during netplay. +# netplay_spectator_mode_enable = false + +# The IP Address of the host to connect to. +# netplay_ip_address = + +# The port of the host IP Address. Can be either a TCP or UDP port. +# netplay_ip_port = 55435 + +#### Misc + +# Enable rewinding. This will take a performance hit when playing, so it is disabled by default. +# rewind_enable = false + +# Rewinding buffer size in megabytes. Bigger rewinding buffer means you can rewind longer. +# The buffer should be approx. 20MB per minute of buffer time. +# rewind_buffer_size = 20 + +# Rewind granularity. When rewinding defined number of frames, you can rewind several frames at a time, increasing the rewinding speed. +# rewind_granularity = 1 + +# Pause gameplay when window focus is lost. +# pause_nonactive = true + +# Autosaves the non-volatile SRAM at a regular interval. This is disabled by default unless set otherwise. +# The interval is measured in seconds. A value of 0 disables autosave. +# autosave_interval = + +# Path to content database directory. +# content_database_path = + +# Path to cheat database directory. +# cheat_database_path = + +# Directory to dump screenshots to. +# screenshot_directory = + +# Records video after CPU video filter. +# video_post_filter_record = false + +# Records output of GPU shaded material if available. +# video_gpu_record = false + +# Screenshots output of GPU shaded material if available. +# video_gpu_screenshot = true + +# Block SRAM from being overwritten when loading save states. +# Might potentially lead to buggy games. +# block_sram_overwrite = false + +# When saving a savestate, save state index is automatically increased before +# it is saved. +# Also, when loading content, the index will be set to the highest existing index. +# There is no upper bound on the index. +# savestate_auto_index = false + +# Slowmotion ratio. When slowmotion, content will slow down by factor. +# slowmotion_ratio = 3.0 + +# The maximum rate at which content will be run when using fast forward. (E.g. 5.0 for 60 fps content => 300 fps cap). +# RetroArch will go to sleep to ensure that the maximum rate will not be exceeded. +# Do not rely on this cap to be perfectly accurate. +# If this is set at 0, then fastforward ratio is unlimited (no FPS cap) +# fastforward_ratio = 0.0 + +# Enable stdin/network command interface. +# network_cmd_enable = false +# network_cmd_port = 55355 +# stdin_cmd_enable = false + +#### Bundle extraction + + From f64fb911b8ad2323d7324f21541e8bc267f10b34 Mon Sep 17 00:00:00 2001 From: Brad Parker Date: Fri, 2 Dec 2016 12:46:32 -0500 Subject: [PATCH 3/4] remove explicit unicode def/undefs --- gfx/common/win32_common.cpp | 48 +++++++++---------- gfx/common/win32_common.h | 8 ++-- gfx/drivers/d3d.cpp | 48 +++++++++---------- gfx/drivers_context/wgl_ctx.cpp | 19 ++++---- input/drivers/dinput.c | 5 +- libretro-common/include/compat/msvc.h | 5 +- libretro-common/include/encodings/win32.h | 10 ++++ libretro-common/include/retro_miscellaneous.h | 7 +-- libretro-common/streams/file_stream.c | 10 ++-- 9 files changed, 79 insertions(+), 81 deletions(-) diff --git a/gfx/common/win32_common.cpp b/gfx/common/win32_common.cpp index aa091e33de..a9792c3730 100644 --- a/gfx/common/win32_common.cpp +++ b/gfx/common/win32_common.cpp @@ -1,6 +1,6 @@ /* 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. @@ -76,7 +76,7 @@ ui_window_win32_t main_window; /* Power Request APIs */ #if !defined(_XBOX) && (_MSC_VER == 1310) -typedef struct _REASON_CONTEXT +typedef struct _REASON_CONTEXT { ULONG Version; DWORD Flags; @@ -129,7 +129,7 @@ extern "C" } }; -INT_PTR CALLBACK PickCoreProc(HWND hDlg, UINT message, +INT_PTR CALLBACK PickCoreProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { size_t list_size; @@ -148,16 +148,16 @@ INT_PTR CALLBACK PickCoreProc(HWND hDlg, UINT message, core_info_list_get_supported_cores(core_info_list, path_get(RARCH_PATH_CONTENT), &core_info, &list_size); - hwndList = GetDlgItem(hDlg, ID_CORELISTBOX); + hwndList = GetDlgItem(hDlg, ID_CORELISTBOX); for (i = 0; i < list_size; i++) { const core_info_t *info = (const core_info_t*)&core_info[i]; - SendMessage(hwndList, LB_ADDSTRING, 0, - (LPARAM)info->display_name); + SendMessage(hwndList, LB_ADDSTRING, 0, + (LPARAM)info->display_name); } - SetFocus(hwndList); - return TRUE; + SetFocus(hwndList); + return TRUE; } case WM_COMMAND: @@ -168,20 +168,20 @@ INT_PTR CALLBACK PickCoreProc(HWND hDlg, UINT message, EndDialog(hDlg, LOWORD(wParam)); break; case ID_CORELISTBOX: - switch (HIWORD(wParam)) - { + switch (HIWORD(wParam)) + { case LBN_SELCHANGE: { int lbItem; const core_info_t *info = NULL; - HWND hwndList = GetDlgItem(hDlg, ID_CORELISTBOX); - lbItem = (int)SendMessage(hwndList, LB_GETCURSEL, 0, 0); + HWND hwndList = GetDlgItem(hDlg, ID_CORELISTBOX); + lbItem = (int)SendMessage(hwndList, LB_GETCURSEL, 0, 0); core_info_get_list(&core_info_list); core_info_list_get_supported_cores(core_info_list, path_get(RARCH_PATH_CONTENT), &core_info, &list_size); info = (const core_info_t*)&core_info[lbItem]; runloop_ctl(RUNLOOP_CTL_SET_LIBRETRO_PATH,info->path); - } + } break; } return TRUE; @@ -336,7 +336,7 @@ static int win32_drag_query_file(HWND hwnd, WPARAM wparam) { /* Pick one core that could be compatible, ew */ if(DialogBoxParamW(GetModuleHandleW(NULL),MAKEINTRESOURCE(IDD_PICKCORE), - hwnd,PickCoreProc,(LPARAM)NULL)==IDOK) + hwnd,PickCoreProc,(LPARAM)NULL)==IDOK) { task_push_content_load_default( NULL, NULL, @@ -408,7 +408,7 @@ static LRESULT CALLBACK WndProcCommon(bool *quit, HWND hwnd, UINT message, } *quit = true; break; - case WM_COMMAND: + case WM_COMMAND: { settings_t *settings = config_get_ptr(); if (settings->ui.menubar_enable) @@ -453,7 +453,7 @@ LRESULT CALLBACK WndProcD3D(HWND hwnd, UINT message, LPCREATESTRUCT p_cs = (LPCREATESTRUCT)lparam; curD3D = p_cs->lpCreateParams; g_inited = true; - + win32_window.hwnd = hwnd; ui_window_win32_set_droppable(&win32_window, true); @@ -533,7 +533,7 @@ bool win32_window_create(void *data, unsigned style, #endif bool win32_get_metrics(void *data, - enum display_metric_types type, float *value) + enum display_metric_types type, float *value) { #ifdef _XBOX return false; @@ -616,7 +616,7 @@ void win32_check_window(bool *quit, bool *resize, unsigned *width, unsigned *height) { #ifndef _XBOX - const ui_application_t *application = + const ui_application_t *application = ui_companion_driver_get_application_ptr(); if (application) application->process_events(); @@ -696,12 +696,12 @@ void win32_set_style(MONITORINFOEXW *current_mon, HMONITOR *hm_to_use, #ifndef _XBOX settings_t *settings = config_get_ptr(); - /* Windows only reports the refresh rates for modelines as - * an integer, so video.refresh_rate needs to be rounded. Also, account + /* Windows only reports the refresh rates for modelines as + * an integer, so video.refresh_rate needs to be rounded. Also, account * for black frame insertion using video.refresh_rate set to half * of the display refresh rate, as well as higher vsync swap intervals. */ float refresh_mod = settings->video.black_frame_insertion ? 2.0f : 1.0f; - unsigned refresh = roundf(settings->video.refresh_rate + unsigned refresh = roundf(settings->video.refresh_rate * refresh_mod * settings->video.swap_interval); if (fullscreen) @@ -714,14 +714,14 @@ void win32_set_style(MONITORINFOEXW *current_mon, HMONITOR *hm_to_use, } else { - char dev_name[CCHDEVICENAME] = {0}; + char dev_name[CCHDEVICENAME] = {0}; *style = WS_POPUP | WS_VISIBLE; utf16_to_char_string((const uint16_t*)current_mon->szDevice, dev_name, sizeof(dev_name)); if (!win32_monitor_set_fullscreen(*width, *height, refresh, dev_name)) - {} + {} /* Display settings might have changed, get new coordinates. */ GetMonitorInfoW(*hm_to_use, (MONITORINFOEXW*)current_mon); @@ -801,7 +801,7 @@ bool win32_set_video_mode(void *data, if (!win32_window_create(data, style, &mon_rect, width, height, fullscreen)) return false; - + win32_set_window(&width, &height, fullscreen, windowed_full, &rect); /* Wait until context is created (or failed to do so ...) */ diff --git a/gfx/common/win32_common.h b/gfx/common/win32_common.h index 704cb40e35..f3496b095c 100644 --- a/gfx/common/win32_common.h +++ b/gfx/common/win32_common.h @@ -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. @@ -18,12 +18,10 @@ #define WIN32_COMMON_H__ #include +#include #ifndef _XBOX #define WIN32_LEAN_AND_MEAN -#define UNICODE -#include -#include #include #endif @@ -83,7 +81,7 @@ bool win32_window_create(void *data, unsigned style, bool win32_suppress_screensaver(void *data, bool enable); bool win32_get_metrics(void *data, - enum display_metric_types type, float *value); + enum display_metric_types type, float *value); void win32_show_cursor(bool state); diff --git a/gfx/drivers/d3d.cpp b/gfx/drivers/d3d.cpp index 95bfc96f8b..b429ac8319 100644 --- a/gfx/drivers/d3d.cpp +++ b/gfx/drivers/d3d.cpp @@ -15,13 +15,11 @@ * If not, see . */ +#include + #ifdef _XBOX #include #include -#else -#define UNICODE -#include -#include #endif #include @@ -155,14 +153,14 @@ static bool d3d_init_chain(d3d_video_t *d3d, const video_info_t *video_info) video_info->input_scale * RARCH_SCALE_BASE; if (!renderchain_init_first(&d3d->renderchain_driver, - &d3d->renderchain_data)) + &d3d->renderchain_data)) { - RARCH_ERR("Renderchain could not be initialized.\n"); - return false; + RARCH_ERR("Renderchain could not be initialized.\n"); + return false; } if (!d3d->renderchain_driver || !d3d->renderchain_data) - return false; + return false; if ( !d3d->renderchain_driver->init( @@ -187,7 +185,7 @@ static bool d3d_init_chain(d3d_video_t *d3d, const video_info_t *video_info) for (i = 1; i < d3d->shader.passes; i++) { d3d->renderchain_driver->convert_geometry(d3d->renderchain_data, - &link_info, + &link_info, &out_width, &out_height, current_width, current_height, &d3d->final_viewport); @@ -327,8 +325,8 @@ static void d3d_viewport_info(void *data, struct video_viewport *vp) { d3d_video_t *d3d = (d3d_video_t*)data; - if ( !d3d || - !d3d->renderchain_driver || + if ( !d3d || + !d3d->renderchain_driver || !d3d->renderchain_driver->viewport_info) return; @@ -364,7 +362,7 @@ static void d3d_overlay_render(d3d_video_t *d3d, overlay_t *overlay) vert[i][7] = 1.0f; vert[i][8] = overlay->alpha_mod; } - + d3d_viewport_info(d3d, &vp); overlay_width = vp.width; @@ -502,7 +500,7 @@ void d3d_make_d3dpp(void *data, #ifdef _XBOX d3dpp->Windowed = false; #else - d3dpp->Windowed = settings->video.windowed_fullscreen + d3dpp->Windowed = settings->video.windowed_fullscreen || !info->fullscreen; #endif d3dpp->PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; @@ -533,13 +531,13 @@ void d3d_make_d3dpp(void *data, d3dpp->BackBufferFormat = #ifdef _XBOX360 global->console.screen.gamma_correction ? - (D3DFORMAT)MAKESRGBFMT(info->rgb32 ? + (D3DFORMAT)MAKESRGBFMT(info->rgb32 ? D3DFMT_X8R8G8B8 : D3DFMT_LIN_R5G6B5) : #endif info->rgb32 ? D3DFMT_X8R8G8B8 : D3DFMT_LIN_R5G6B5; #else d3dpp->hDeviceWindow = win32_get_window(); - d3dpp->BackBufferFormat = !d3dpp->Windowed ? + d3dpp->BackBufferFormat = !d3dpp->Windowed ? D3DFMT_X8R8G8B8 : D3DFMT_UNKNOWN; #endif @@ -713,8 +711,8 @@ static void d3d_calculate_rect(void *data, if (fabsf(device_aspect - desired_aspect) < 0.0001f) { - /* If the aspect ratios of screen and desired aspect - * ratio are sufficiently equal (floating point stuff), + /* If the aspect ratios of screen and desired aspect + * ratio are sufficiently equal (floating point stuff), * assume they are actually equal. */ } @@ -806,7 +804,7 @@ static bool d3d_initialize(d3d_video_t *d3d, const video_info_t *info) video_driver_get_size(&width, &height); d3d_set_viewport(d3d, - width, height, false, true); + width, height, false, true); #if defined(_XBOX360) strlcpy(settings->path.font, "game:\\media\\Arial_12.xpr", @@ -1047,7 +1045,7 @@ static bool d3d_construct(d3d_video_t *d3d, win_height, info->fullscreen); win32_set_window(&win_width, &win_height, info->fullscreen, - windowed_full, &rect); + windowed_full, &rect); #endif #ifdef HAVE_SHADERS @@ -1337,7 +1335,7 @@ static bool d3d_overlay_load(void *data, image_data; if (!d3d) - return false; + return false; d3d_free_overlays(d3d); d3d->overlays.resize(num_images); @@ -1542,8 +1540,8 @@ static bool d3d_read_viewport(void *data, uint8_t *buffer) { d3d_video_t *d3d = (d3d_video_t*)data; - if ( !d3d || - !d3d->renderchain_driver || + if ( !d3d || + !d3d->renderchain_driver || !d3d->renderchain_driver->read_viewport) return false; @@ -1603,7 +1601,7 @@ static void d3d_set_menu_texture_frame(void *data, || d3d->menu->tex_h != height) { if (d3d->menu) - d3d_texture_free(d3d->menu->tex); + d3d_texture_free(d3d->menu->tex); d3d->menu->tex = d3d_texture_new(d3d->dev, NULL, width, height, 1, @@ -1686,7 +1684,7 @@ static void video_texture_load_d3d(d3d_video_t *d3d, uintptr_t *id) { *id = (uintptr_t)d3d_texture_new(d3d->dev, NULL, - ti->width, ti->height, 1, + ti->width, ti->height, 1, 0, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, 0, 0, 0, NULL, NULL); } @@ -1739,7 +1737,7 @@ static void d3d_unload_texture(void *data, uintptr_t id) { LPDIRECT3DTEXTURE texid; if (!id) - return; + return; texid = (LPDIRECT3DTEXTURE)id; d3d_texture_free(texid); diff --git a/gfx/drivers_context/wgl_ctx.cpp b/gfx/drivers_context/wgl_ctx.cpp index 648f2123ec..b1575e9ae5 100644 --- a/gfx/drivers_context/wgl_ctx.cpp +++ b/gfx/drivers_context/wgl_ctx.cpp @@ -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. @@ -23,10 +23,7 @@ #define _WIN32_WINNT 0x0500 //_WIN32_WINNT_WIN2K #endif -#define UNICODE -#include -#include - +#include #include #include @@ -146,9 +143,9 @@ static void create_gl_context(HWND hwnd, bool *quit) else { g_hrc = wglCreateContext(g_hdc); - + /* We'll create shared context later if not. */ - if (g_hrc && !core_context && !debug) + if (g_hrc && !core_context && !debug) { g_hw_hrc = wglCreateContext(g_hdc); if (g_hw_hrc) @@ -190,7 +187,7 @@ static void create_gl_context(HWND hwnd, bool *quit) *aptr++ = g_minor; /* Technically, we don't have core/compat until 3.2. - * Version 3.1 is either compat or not depending + * Version 3.1 is either compat or not depending * on GL_ARB_compatibility. */ if ((g_major * 1000 + g_minor) >= 3002) @@ -262,7 +259,7 @@ void create_graphics_context(HWND hwnd, bool *quit) GetClientRect(hwnd, &rect); HINSTANCE instance = GetModuleHandle(NULL); if (!vulkan_surface_create(&g_vk, VULKAN_WSI_WIN32, - &instance, &hwnd, + &instance, &hwnd, width, height, g_interval)) *quit = true; g_inited = true; @@ -439,7 +436,7 @@ static void *gfx_ctx_wgl_init(void *video_driver) if (g_inited) return NULL; - + win32_window_reset(); win32_monitor_init(); @@ -601,7 +598,7 @@ static gfx_ctx_proc_t gfx_ctx_wgl_get_proc_address(const char *symbol) } static bool gfx_ctx_wgl_get_metrics(void *data, - enum display_metric_types type, float *value) + enum display_metric_types type, float *value) { return win32_get_metrics(data, type, value); } diff --git a/input/drivers/dinput.c b/input/drivers/dinput.c index 51f76b4eab..dfb3033711 100644 --- a/input/drivers/dinput.c +++ b/input/drivers/dinput.c @@ -29,10 +29,7 @@ #define WM_MOUSEWHEEL 0x020A #endif -#define UNICODE -#include -#include - +#include #include #include diff --git a/libretro-common/include/compat/msvc.h b/libretro-common/include/compat/msvc.h index e767bef7f8..b56a51fad3 100644 --- a/libretro-common/include/compat/msvc.h +++ b/libretro-common/include/compat/msvc.h @@ -35,12 +35,12 @@ extern "C" { #ifndef snprintf #define snprintf c99_snprintf_retro__ #endif - + int c99_snprintf_retro__(char *outBuf, size_t size, const char *format, ...); #endif /* Pre-MSVC 2010 compilers don't implement vsnprintf in a cross-platform manner? Not sure about this one. */ -#if _MSC_VER < 1600 +#if _MSC_VER < 1600 #include #include #ifndef vsnprintf @@ -53,7 +53,6 @@ extern "C" { } #endif -#undef UNICODE /* Do not bother with UNICODE at this time. */ #include #include #include diff --git a/libretro-common/include/encodings/win32.h b/libretro-common/include/encodings/win32.h index 13ca67ce7b..8a911c556f 100644 --- a/libretro-common/include/encodings/win32.h +++ b/libretro-common/include/encodings/win32.h @@ -28,7 +28,17 @@ #define UNICODE #include #include + +#ifdef __cplusplus +extern "C" { +#endif + #include + +#ifdef __cplusplus +} +#endif + #endif #endif diff --git a/libretro-common/include/retro_miscellaneous.h b/libretro-common/include/retro_miscellaneous.h index 2ab71c52dc..e9405eae63 100644 --- a/libretro-common/include/retro_miscellaneous.h +++ b/libretro-common/include/retro_miscellaneous.h @@ -45,11 +45,12 @@ #include #endif +#ifdef _WIN32 +#include +#endif + #if defined(_WIN32) && !defined(_XBOX) #define WIN32_LEAN_AND_MEAN -#define UNICODE -#include -#include #include #elif defined(_WIN32) && defined(_XBOX) #include diff --git a/libretro-common/streams/file_stream.c b/libretro-common/streams/file_stream.c index d9406dba80..dfa2ef1a96 100644 --- a/libretro-common/streams/file_stream.c +++ b/libretro-common/streams/file_stream.c @@ -26,9 +26,7 @@ #include #if defined(_WIN32) -# define UNICODE -# include -# include +#include # ifdef _MSC_VER # define setmode _setmode # endif @@ -295,7 +293,7 @@ char *filestream_getline(RFILE *stream) } newline[idx] = '\0'; - return newline; + return newline; } char *filestream_gets(RFILE *stream, char *s, size_t len) @@ -346,7 +344,7 @@ ssize_t filestream_seek(RFILE *stream, ssize_t offset, int whence) #endif #ifdef HAVE_MMAP - /* Need to check stream->mapped because this function is + /* Need to check stream->mapped because this function is * called in filestream_open() */ if (stream->mapped && stream->hints & RFILE_HINT_MMAP) { @@ -416,7 +414,7 @@ ssize_t filestream_tell(RFILE *stream) return ftell(stream->fp); #endif #ifdef HAVE_MMAP - /* Need to check stream->mapped because this function + /* Need to check stream->mapped because this function * is called in filestream_open() */ if (stream->mapped && stream->hints & RFILE_HINT_MMAP) return stream->mappos; From a109df9271de5905d61ba30acd82da7052fd025e Mon Sep 17 00:00:00 2001 From: Brad Parker Date: Fri, 2 Dec 2016 14:15:39 -0500 Subject: [PATCH 4/4] make existing hard-coded unicode calls switchable back to ansi --- file_path_special.c | 25 ++++++---- frontend/drivers/platform_win32.c | 16 +++--- gfx/common/win32_common.cpp | 59 ++++++++++++---------- gfx/common/win32_common.h | 2 +- gfx/drivers_font/d3d_w32_font.cpp | 5 +- libretro-common/dynamic/dylib.c | 2 +- libretro-common/file/retro_dirent.c | 10 +++- libretro-common/file/retro_stat.c | 11 ++-- libretro-common/include/encodings/win32.h | 12 ++--- ui/drivers/ui_win32.c | 61 +++++++++++------------ 10 files changed, 110 insertions(+), 93 deletions(-) diff --git a/file_path_special.c b/file_path_special.c index 9d17045311..9a32780993 100644 --- a/file_path_special.c +++ b/file_path_special.c @@ -1,6 +1,6 @@ /* 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. @@ -124,7 +124,7 @@ void fill_pathname_abbreviate_special(char *out_path, fill_pathname_application_path(application_dir, sizeof(application_dir)); path_basedir(application_dir); - + for (i = 0; candidates[i]; i++) { if (!string_is_empty(candidates[i]) && strstr(in_path, candidates[i]) == in_path) @@ -132,11 +132,11 @@ void fill_pathname_abbreviate_special(char *out_path, size_t src_size = strlcpy(out_path, notations[i], size); retro_assert(src_size < size); - + out_path += src_size; size -= src_size; in_path += strlen(candidates[i]); - + if (!path_char_is_slash(*in_path)) { retro_assert(strlcpy(out_path, path_default_slash(), size) < size); @@ -208,8 +208,10 @@ void fill_pathname_application_path(char *s, size_t len) #endif #ifdef _WIN32 DWORD ret; +#ifdef UNICODE wchar_t ws[PATH_MAX_LENGTH] = {0}; #endif +#endif #ifdef __HAIKU__ image_info info; int32_t cookie = 0; @@ -220,10 +222,13 @@ void fill_pathname_application_path(char *s, size_t len) return; #ifdef _WIN32 +#ifdef UNICODE MultiByteToWideChar(CP_UTF8, 0, s, -1, ws, sizeof(ws) / sizeof(ws[0])); - - ret = GetModuleFileNameW(GetModuleHandleW(NULL), ws, sizeof(ws) / sizeof(ws[0])); +#else + ret = GetModuleFileName(GetModuleHandle(NULL), s, len - 1); +#endif + s[ret] = '\0'; #elif defined(__APPLE__) if (bundle) @@ -233,7 +238,7 @@ void fill_pathname_application_path(char *s, size_t len) CFStringGetCString(bundle_path, s, len, kCFStringEncodingUTF8); CFRelease(bundle_path); CFRelease(bundle_url); - + retro_assert(strlcat(s, "nobin", len) < len); return; } @@ -253,7 +258,7 @@ void fill_pathname_application_path(char *s, size_t len) char link_path[255]; link_path[0] = *s = '\0'; - pid = getpid(); + pid = getpid(); /* Linux, BSD and Solaris paths. Not standardized. */ for (i = 0; i < ARRAY_SIZE(exts); i++) @@ -271,7 +276,7 @@ void fill_pathname_application_path(char *s, size_t len) } } } - + RARCH_ERR("Cannot resolve application path! This should not happen.\n"); #endif } @@ -329,7 +334,7 @@ void fill_pathname_application_special(char *s, size_t len, enum application_spe #ifdef HAVE_ZARCH { settings_t *settings = config_get_ptr(); - fill_pathname_join(s, + fill_pathname_join(s, settings->directory.assets, "zarch", len); diff --git a/frontend/drivers/platform_win32.c b/frontend/drivers/platform_win32.c index 2480e61f4e..8e5b8e3673 100644 --- a/frontend/drivers/platform_win32.c +++ b/frontend/drivers/platform_win32.c @@ -40,8 +40,8 @@ #include "../../runloop.h" #include "../../verbosity.h" -/* We only load this library once, so we let it be - * unloaded at application shutdown, since unloading +/* We only load this library once, so we let it be + * unloaded at application shutdown, since unloading * it early seems to cause issues on some systems. */ @@ -71,7 +71,7 @@ static bool gfx_init_dwm(void) } atexit(gfx_dwm_shutdown); - HRESULT (WINAPI *mmcss)(BOOL) = + HRESULT (WINAPI *mmcss)(BOOL) = (HRESULT (WINAPI*)(BOOL))dylib_proc(dwmlib, "DwmEnableMMCSS"); if (mmcss) { @@ -94,7 +94,7 @@ static void gfx_set_dwm(void) if (settings->video.disable_composition == dwm_composition_disabled) return; - HRESULT (WINAPI *composition_enable)(UINT) = + HRESULT (WINAPI *composition_enable)(UINT) = (HRESULT (WINAPI*)(UINT))dylib_proc(dwmlib, "DwmEnableComposition"); if (!composition_enable) { @@ -177,7 +177,7 @@ static void frontend_win32_init(void *data) { typedef BOOL (WINAPI *isProcessDPIAwareProc)(); typedef BOOL (WINAPI *setProcessDPIAwareProc)(); - HMODULE handle = GetModuleHandleW(L"User32.dll"); + HMODULE handle = GetModuleHandle(TEXT("User32.dll")); isProcessDPIAwareProc isDPIAwareProc = (isProcessDPIAwareProc)dylib_proc(handle, "IsProcessDPIAware"); setProcessDPIAwareProc setDPIAwareProc = (setProcessDPIAwareProc)dylib_proc(handle, "SetProcessDPIAware"); @@ -189,13 +189,13 @@ static void frontend_win32_init(void *data) setDPIAwareProc(); } } - + } enum frontend_powerstate frontend_win32_get_powerstate(int *seconds, int *percent) { SYSTEM_POWER_STATUS status; - enum frontend_powerstate ret = FRONTEND_POWERSTATE_NONE; + enum frontend_powerstate ret = FRONTEND_POWERSTATE_NONE; if (!GetSystemPowerStatus(&status)) return ret; @@ -338,7 +338,7 @@ static void frontend_win32_detach_console(void) { HWND wnd = GetConsoleWindow(); FreeConsole(); - PostMessageW(wnd, WM_CLOSE, 0, 0); + PostMessage(wnd, WM_CLOSE, 0, 0); } #endif } diff --git a/gfx/common/win32_common.cpp b/gfx/common/win32_common.cpp index a9792c3730..3d4bda7462 100644 --- a/gfx/common/win32_common.cpp +++ b/gfx/common/win32_common.cpp @@ -212,20 +212,20 @@ void win32_monitor_from_window(void) void win32_monitor_get_info(void) { - MONITORINFOEXW current_mon; + MONITORINFOEX current_mon; memset(¤t_mon, 0, sizeof(current_mon)); - current_mon.cbSize = sizeof(MONITORINFOEXW); + current_mon.cbSize = sizeof(MONITORINFOEX); - GetMonitorInfoW(win32_monitor_last, (MONITORINFOEXW*)¤t_mon); - ChangeDisplaySettingsExW(current_mon.szDevice, NULL, NULL, 0, NULL); + GetMonitorInfo(win32_monitor_last, (MONITORINFOEX*)¤t_mon); + ChangeDisplaySettingsEx(current_mon.szDevice, NULL, NULL, 0, NULL); } void win32_monitor_info(void *data, void *hm_data, unsigned *mon_id) { unsigned i, fs_monitor; settings_t *settings = config_get_ptr(); - MONITORINFOEXW *mon = (MONITORINFOEXW*)data; + MONITORINFOEX *mon = (MONITORINFOEX*)data; HMONITOR *hm_to_use = (HMONITOR*)hm_data; if (!win32_monitor_last) @@ -254,8 +254,8 @@ void win32_monitor_info(void *data, void *hm_data, unsigned *mon_id) } memset(mon, 0, sizeof(*mon)); - mon->cbSize = sizeof(MONITORINFOEXW); - GetMonitorInfoW(*hm_to_use, (MONITORINFOEXW*)mon); + mon->cbSize = sizeof(MONITORINFOEX); + GetMonitorInfo(*hm_to_use, (MONITORINFOEX*)mon); } /* Get the count of the files dropped */ @@ -264,18 +264,19 @@ static int win32_drag_query_file(HWND hwnd, WPARAM wparam) char szFilename[1024] = {0}; wchar_t wszFilename[1024] = {0}; - if (DragQueryFileW((HDROP)wparam, 0xFFFFFFFF, NULL, 0)) + if (DragQueryFile((HDROP)wparam, 0xFFFFFFFF, NULL, 0)) { /*poll list of current cores */ size_t list_size; content_ctx_info_t content_info = {0}; core_info_list_t *core_info_list = NULL; const core_info_t *core_info = NULL; - +#ifdef UNICODE DragQueryFileW((HDROP)wparam, 0, wszFilename, sizeof(wszFilename) / sizeof(wszFilename[0])); - utf16_to_char_string((const uint16_t*)wszFilename, szFilename, sizeof(szFilename)); - +#else + DragQueryFile((HDROP)wparam, 0, szFilename, sizeof(szFilename)); +#endif core_info_get_list(&core_info_list); if (!core_info_list) @@ -335,7 +336,7 @@ static int win32_drag_query_file(HWND hwnd, WPARAM wparam) else { /* Pick one core that could be compatible, ew */ - if(DialogBoxParamW(GetModuleHandleW(NULL),MAKEINTRESOURCE(IDD_PICKCORE), + if(DialogBoxParam(GetModuleHandle(NULL),MAKEINTRESOURCE(IDD_PICKCORE), hwnd,PickCoreProc,(LPARAM)NULL)==IDOK) { task_push_content_load_default( @@ -507,7 +508,7 @@ LRESULT CALLBACK WndProcGL(HWND hwnd, UINT message, if (dinput_wgl && dinput_handle_message(dinput_wgl, message, wparam, lparam)) return 0; - return DefWindowProcW(hwnd, message, wparam, lparam); + return DefWindowProc(hwnd, message, wparam, lparam); } bool win32_window_create(void *data, unsigned style, @@ -515,7 +516,7 @@ bool win32_window_create(void *data, unsigned style, unsigned height, bool fullscreen) { #ifndef _XBOX - main_window.hwnd = CreateWindowExW(0, L"RetroArch", L"RetroArch", + main_window.hwnd = CreateWindowEx(0, TEXT("RetroArch"), TEXT("RetroArch"), style, fullscreen ? mon_rect->left : g_pos_x, fullscreen ? mon_rect->top : g_pos_y, @@ -583,7 +584,8 @@ static bool win32_monitor_set_fullscreen(unsigned width, unsigned height, { #ifndef _XBOX DEVMODE devmode; - wchar_t dev_name_wide[1024] = {0}; + unsigned res = 0; + CHAR_TO_WCHAR_ALLOC(dev_name, dev_name_wide) memset(&devmode, 0, sizeof(devmode)); devmode.dmSize = sizeof(DEVMODE); @@ -595,10 +597,13 @@ 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); - MultiByteToWideChar(CP_UTF8, 0, dev_name, -1, dev_name_wide, sizeof(dev_name_wide) / sizeof(dev_name_wide[0])); - - return ChangeDisplaySettingsExW(dev_name_wide, &devmode, + res = ChangeDisplaySettingsEx(dev_name_wide, &devmode, NULL, CDS_FULLSCREEN, NULL) == DISP_CHANGE_SUCCESSFUL; + + if (dev_name_wide) + free(dev_name_wide); + + return res; #endif } @@ -655,7 +660,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(TEXT("kernel32.dll")); PowerCreateRequestPtr powerCreateRequest = (PowerCreateRequestPtr)GetProcAddress(kernel32, "PowerCreateRequest"); PowerSetRequestPtr powerSetRequest = @@ -689,7 +694,7 @@ bool win32_suppress_screensaver(void *data, bool enable) } /* FIXME: It should not be necessary to add the W after MONITORINFOEX, but linking fails without it. */ -void win32_set_style(MONITORINFOEXW *current_mon, HMONITOR *hm_to_use, +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) { @@ -724,7 +729,7 @@ void win32_set_style(MONITORINFOEXW *current_mon, HMONITOR *hm_to_use, {} /* Display settings might have changed, get new coordinates. */ - GetMonitorInfoW(*hm_to_use, (MONITORINFOEXW*)current_mon); + GetMonitorInfo(*hm_to_use, (MONITORINFOEX*)current_mon); *mon_rect = current_mon->rcMonitor; } } @@ -755,8 +760,8 @@ void win32_set_window(unsigned *width, unsigned *height, { RECT rc_temp = {0, 0, (LONG)*height, 0x7FFF}; SetMenu(main_window.hwnd, - LoadMenuW(GetModuleHandleW(NULL),MAKEINTRESOURCE(IDR_MENU))); - SendMessageW(main_window.hwnd, WM_NCCALCSIZE, FALSE, (LPARAM)&rc_temp); + LoadMenu(GetModuleHandle(NULL),MAKEINTRESOURCE(IDR_MENU))); + SendMessage(main_window.hwnd, WM_NCCALCSIZE, FALSE, (LPARAM)&rc_temp); g_resize_height = *height += rc_temp.top + rect->top; SetWindowPos(main_window.hwnd, NULL, 0, 0, *width, *height, SWP_NOMOVE); } @@ -782,7 +787,7 @@ bool win32_set_video_mode(void *data, MSG msg; RECT mon_rect; unsigned mon_id; - MONITORINFOEXW current_mon; + MONITORINFOEX current_mon; bool windowed_full; RECT rect = {0}; HMONITOR hm_to_use = NULL; @@ -805,10 +810,10 @@ bool win32_set_video_mode(void *data, win32_set_window(&width, &height, fullscreen, windowed_full, &rect); /* Wait until context is created (or failed to do so ...) */ - while (!g_inited && !g_quit && GetMessageW(&msg, main_window.hwnd, 0, 0)) + while (!g_inited && !g_quit && GetMessage(&msg, main_window.hwnd, 0, 0)) { TranslateMessage(&msg); - DispatchMessageW(&msg); + DispatchMessage(&msg); } if (g_quit) @@ -866,7 +871,7 @@ void win32_window_reset(void) void win32_destroy_window(void) { #ifndef _XBOX - UnregisterClassW(L"RetroArch", GetModuleHandleW(NULL)); + UnregisterClass(TEXT("RetroArch"), GetModuleHandle(NULL)); #endif main_window.hwnd = NULL; } diff --git a/gfx/common/win32_common.h b/gfx/common/win32_common.h index f3496b095c..d7a803c300 100644 --- a/gfx/common/win32_common.h +++ b/gfx/common/win32_common.h @@ -97,7 +97,7 @@ void win32_set_window(unsigned *width, unsigned *height, #ifndef _XBOX /* FIXME: It should not be necessary to add the W after MONITORINFOEX, but linking fails without it. */ -void win32_set_style(MONITORINFOEXW *current_mon, HMONITOR *hm_to_use, +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 diff --git a/gfx/drivers_font/d3d_w32_font.cpp b/gfx/drivers_font/d3d_w32_font.cpp index 35d6e26f43..b7d310d592 100644 --- a/gfx/drivers_font/d3d_w32_font.cpp +++ b/gfx/drivers_font/d3d_w32_font.cpp @@ -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. @@ -18,6 +18,7 @@ #include "../../config.h" #endif +#include #include "../drivers/d3d.h" #include "../font_driver.h" @@ -45,7 +46,7 @@ static void *d3dfonts_w32_init_font(void *video_data, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_PITCH, - L"Verdana" /* Hardcode FTL */ + TEXT("Verdana") /* Hardcode FTL */ }; d3dfonts = (d3dfonts_t*)calloc(1, sizeof(*d3dfonts)); diff --git a/libretro-common/dynamic/dylib.c b/libretro-common/dynamic/dylib.c index a1da7b8a45..d73172ed1e 100644 --- a/libretro-common/dynamic/dylib.c +++ b/libretro-common/dynamic/dylib.c @@ -35,7 +35,7 @@ #endif #ifdef _WIN32 -static TCHAR last_dyn_error[512]; +static TCHAR last_dyn_error[512] = {0}; static void set_dl_error(void) { diff --git a/libretro-common/file/retro_dirent.c b/libretro-common/file/retro_dirent.c index f29705b15d..4a9a02aeca 100644 --- a/libretro-common/file/retro_dirent.c +++ b/libretro-common/file/retro_dirent.c @@ -35,7 +35,9 @@ struct RDIR *retro_opendir(const char *name) { #if defined(_WIN32) char path_buf[1024] = {0}; +#ifdef UNICODE wchar_t pathW[1024] = {0}; +#endif #endif struct RDIR *rdir = (struct RDIR*)calloc(1, sizeof(*rdir)); @@ -43,9 +45,13 @@ struct RDIR *retro_opendir(const char *name) return NULL; #if defined(_WIN32) +#ifdef UNICODE snprintf(path_buf, sizeof(path_buf), "%s\\*", name); MultiByteToWideChar(CP_UTF8, 0, path_buf, -1, pathW, sizeof(pathW) / sizeof(pathW[0])); rdir->directory = FindFirstFileW(pathW, &rdir->entry); +#else + rdir->directory = FindFirstFile(path_buf, &rdir->entry); +#endif #elif defined(VITA) || defined(PSP) rdir->directory = sceIoDopen(name); #elif defined(_3DS) @@ -78,7 +84,7 @@ int retro_readdir(struct RDIR *rdir) { #if defined(_WIN32) if(rdir->next) - return (FindNextFileW(rdir->directory, &rdir->entry) != 0); + return (FindNextFile(rdir->directory, &rdir->entry) != 0); else { rdir->next = true; return (rdir->directory != INVALID_HANDLE_VALUE); @@ -123,7 +129,7 @@ const char *retro_dirent_get_name(struct RDIR *rdir) bool retro_dirent_is_dir(struct RDIR *rdir, const char *path) { #if defined(_WIN32) - const WIN32_FIND_DATAW *entry = (const WIN32_FIND_DATAW*)&rdir->entry; + const WIN32_FIND_DATA *entry = (const WIN32_FIND_DATA*)&rdir->entry; return entry->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY; #elif defined(PSP) || defined(VITA) const SceIoDirent *entry = (const SceIoDirent*)&rdir->entry; diff --git a/libretro-common/file/retro_stat.c b/libretro-common/file/retro_stat.c index 95c79c18c3..e918956f3b 100644 --- a/libretro-common/file/retro_stat.c +++ b/libretro-common/file/retro_stat.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #if defined(_WIN32) @@ -103,11 +104,13 @@ 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; - wchar_t path_wide[PATH_MAX_LENGTH] = {0}; + CHAR_TO_WCHAR_ALLOC(path, path_wide) - MultiByteToWideChar(CP_UTF8, 0, path, -1, path_wide, sizeof(path_wide) / sizeof(path_wide[0])); + DWORD ret = GetFileAttributesEx(path_wide, fInfoLevelId, &file_info); + + if (path_wide) + free(path_wide); - DWORD ret = GetFileAttributesExW(path_wide, fInfoLevelId, &file_info); if (ret == 0) return false; #else @@ -208,7 +211,7 @@ bool mkdir_norecurse(const char *dir) #elif defined(PSP) || defined(_3DS) if ((ret == -1) && path_is_directory(dir)) ret = 0; -#else +#else if (ret < 0 && errno == EEXIST && path_is_directory(dir)) ret = 0; #endif diff --git a/libretro-common/include/encodings/win32.h b/libretro-common/include/encodings/win32.h index 8a911c556f..03b385a5fb 100644 --- a/libretro-common/include/encodings/win32.h +++ b/libretro-common/include/encodings/win32.h @@ -44,20 +44,20 @@ extern "C" { #ifdef UNICODE #define CHAR_TO_WCHAR_ALLOC(s, ws) \ - size_t ws##_size = (s[0] ? strlen(s) : 0) + 1; \ + size_t ws##_size = (NULL != s && s[0] ? strlen(s) : 0) + 1; \ wchar_t *ws = (wchar_t*)calloc(ws##_size, 2); \ - if (s[0]) \ + if (NULL != s && s[0]) \ MultiByteToWideChar(CP_UTF8, 0, s, -1, ws, ws##_size / sizeof(wchar_t)); #define WCHAR_TO_CHAR_ALLOC(ws, s) \ - size_t s##_size = ((ws[0] ? wcslen((const wchar_t*)ws) : 0) / 2) + 1; \ + size_t s##_size = ((NULL != ws && ws[0] ? wcslen((const wchar_t*)ws) : 0) / 2) + 1; \ char *s = (char*)calloc(s##_size, 1); \ - if (ws[0]) \ + if (NULL != ws && ws[0]) \ utf16_to_char_string((const uint16_t*)ws, s, s##_size); #else -#define CHAR_TO_WCHAR_ALLOC(s, ws) char *ws = strdup(s); -#define WCHAR_TO_CHAR_ALLOC(ws, s) char *s = strdup(ws); +#define CHAR_TO_WCHAR_ALLOC(s, ws) char *ws = (NULL != s && s[0] ? strdup(s) : NULL); +#define WCHAR_TO_CHAR_ALLOC(ws, s) char *s = (NULL != ws && ws[0] ? strdup(ws) : NULL); #endif #endif diff --git a/ui/drivers/ui_win32.c b/ui/drivers/ui_win32.c index 2a8fc12836..8dc324223a 100644 --- a/ui/drivers/ui_win32.c +++ b/ui/drivers/ui_win32.c @@ -156,20 +156,20 @@ static void shader_dlg_params_refresh(void) bool checked = (shader_info.data->parameters[i].current == shader_info.data->parameters[i].maximum); - SendMessageW(control->checkbox.hwnd, BM_SETCHECK, checked, 0); + SendMessage(control->checkbox.hwnd, BM_SETCHECK, checked, 0); } break; case SHADER_PARAM_CTRL_TRACKBAR: shader_dlg_refresh_trackbar_label(i); - SendMessageW(control->trackbar.hwnd, + SendMessage(control->trackbar.hwnd, TBM_SETRANGEMIN, (WPARAM)TRUE, (LPARAM)0); - SendMessageW(control->trackbar.hwnd, + SendMessage(control->trackbar.hwnd, TBM_SETRANGEMAX, (WPARAM)TRUE, (LPARAM)((shader_info.data->parameters[i].maximum - shader_info.data->parameters[i].minimum) / shader_info.data->parameters[i].step)); - SendMessageW(control->trackbar.hwnd, TBM_SETPOS, (WPARAM)TRUE, + SendMessage(control->trackbar.hwnd, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)((shader_info.data->parameters[i].current - shader_info.data->parameters[i].minimum) / shader_info.data->parameters[i].step)); @@ -251,12 +251,12 @@ void shader_dlg_params_reload(void) } control->type = SHADER_PARAM_CTRL_CHECKBOX; - control->checkbox.hwnd = CreateWindowExW(0, L"BUTTON", + control->checkbox.hwnd = CreateWindowEx(0, TEXT("BUTTON"), param_desc_wide, WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX, pos_x, pos_y, SHADER_DLG_CTRL_WIDTH, SHADER_DLG_CHECKBOX_HEIGHT, g_shader_dlg.window.hwnd, (HMENU)(size_t)i, NULL, NULL); - SendMessageW(control->checkbox.hwnd, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0)); + SendMessage(control->checkbox.hwnd, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0)); pos_y += SHADER_DLG_CHECKBOX_HEIGHT + SHADER_DLG_CTRL_MARGIN; } else @@ -269,27 +269,27 @@ void shader_dlg_params_reload(void) } control->type = SHADER_PARAM_CTRL_TRACKBAR; - control->trackbar.label_title = CreateWindowExW(0, L"STATIC", + control->trackbar.label_title = CreateWindowEx(0, TEXT("STATIC"), param_desc_wide, WS_CHILD | WS_VISIBLE | SS_LEFT, pos_x, pos_y, SHADER_DLG_CTRL_WIDTH, SHADER_DLG_LABEL_HEIGHT, g_shader_dlg.window.hwnd, (HMENU)(size_t)i, NULL, NULL); - SendMessageW(control->trackbar.label_title, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0)); + SendMessage(control->trackbar.label_title, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0)); pos_y += SHADER_DLG_LABEL_HEIGHT; - control->trackbar.hwnd = CreateWindowExW(0, TRACKBAR_CLASS, L"", + control->trackbar.hwnd = CreateWindowEx(0, TRACKBAR_CLASS, TEXT(""), WS_CHILD | WS_VISIBLE | TBS_HORZ | TBS_NOTICKS, pos_x + SHADER_DLG_TRACKBAR_LABEL_WIDTH, pos_y, SHADER_DLG_TRACKBAR_WIDTH, SHADER_DLG_TRACKBAR_HEIGHT, g_shader_dlg.window.hwnd, (HMENU)(size_t)i, NULL, NULL); - control->trackbar.label_val = CreateWindowExW(0, L"STATIC", L"", + control->trackbar.label_val = CreateWindowEx(0, TEXT("STATIC"), TEXT(""), WS_CHILD | WS_VISIBLE | SS_LEFT, pos_x, pos_y, SHADER_DLG_TRACKBAR_LABEL_WIDTH, SHADER_DLG_LABEL_HEIGHT, g_shader_dlg.window.hwnd, (HMENU)(size_t)i, NULL, NULL); - SendMessageW(control->trackbar.label_val, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0)); + SendMessage(control->trackbar.label_val, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0)); - SendMessageW(control->trackbar.hwnd, TBM_SETBUDDY, (WPARAM)TRUE, + SendMessage(control->trackbar.hwnd, TBM_SETBUDDY, (WPARAM)TRUE, (LPARAM)control->trackbar.label_val); pos_y += SHADER_DLG_TRACKBAR_HEIGHT + SHADER_DLG_CTRL_MARGIN; @@ -303,7 +303,7 @@ void shader_dlg_params_reload(void) if (window && g_shader_dlg.separator.hwnd) window->destroy(&g_shader_dlg.separator); - g_shader_dlg.separator.hwnd = CreateWindowExW(0, L"STATIC", L"", + g_shader_dlg.separator.hwnd = CreateWindowEx(0, TEXT("STATIC"), TEXT(""), SS_ETCHEDHORZ | WS_VISIBLE | WS_CHILD, SHADER_DLG_CTRL_X, g_shader_dlg.parameters_start_y - SHADER_DLG_CTRL_MARGIN - SHADER_DLG_SEPARATOR_HEIGHT / 2, (pos_x - SHADER_DLG_CTRL_X) + SHADER_DLG_CTRL_WIDTH, @@ -393,7 +393,7 @@ static LRESULT CALLBACK ShaderDlgWndProc(HWND hwnd, UINT message, if (g_shader_dlg.controls[i].type != SHADER_PARAM_CTRL_CHECKBOX) break; - if (SendMessageW(g_shader_dlg.controls[i].checkbox.hwnd, + if (SendMessage(g_shader_dlg.controls[i].checkbox.hwnd, BM_GETCHECK, 0, 0) == BST_CHECKED) shader_info.data->parameters[i].current = shader_info.data->parameters[i].maximum; @@ -404,7 +404,7 @@ static LRESULT CALLBACK ShaderDlgWndProc(HWND hwnd, UINT message, break; case WM_HSCROLL: - i = GetWindowLongW((HWND)lparam, GWL_ID); + i = GetWindowLong((HWND)lparam, GWL_ID); if (i >= GFX_MAX_PARAMETERS) break; @@ -412,7 +412,7 @@ static LRESULT CALLBACK ShaderDlgWndProc(HWND hwnd, UINT message, if (g_shader_dlg.controls[i].type != SHADER_PARAM_CTRL_TRACKBAR) break; - pos = (int)SendMessageW(g_shader_dlg.controls[i].trackbar.hwnd, TBM_GETPOS, 0, 0); + pos = (int)SendMessage(g_shader_dlg.controls[i].trackbar.hwnd, TBM_GETPOS, 0, 0); shader_info.data->parameters[i].current = shader_info.data->parameters[i].minimum + pos * shader_info.data->parameters[i].step; @@ -421,24 +421,21 @@ static LRESULT CALLBACK ShaderDlgWndProc(HWND hwnd, UINT message, } - return DefWindowProcW(hwnd, message, wparam, lparam); + return DefWindowProc(hwnd, message, wparam, lparam); } bool win32_window_init(WNDCLASSEX *wndclass, bool fullscreen, const char *class_name) { - wchar_t class_name_wide[1024] = {0}; - - if (class_name) - MultiByteToWideChar(CP_UTF8, 0, class_name, -1, class_name_wide, sizeof(class_name_wide) / sizeof(class_name_wide[0])); + CHAR_TO_WCHAR_ALLOC(class_name, class_name_wide) wndclass->cbSize = sizeof(WNDCLASSEX); wndclass->style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; - wndclass->hInstance = GetModuleHandleW(NULL); - wndclass->hCursor = LoadCursorW(NULL, IDC_ARROW); - wndclass->lpszClassName = (class_name != NULL) ? class_name_wide : L"RetroArch"; - wndclass->hIcon = LoadIconW(GetModuleHandleW(NULL), MAKEINTRESOURCE(IDI_ICON)); - wndclass->hIconSm = (HICON)LoadImageW(GetModuleHandleW(NULL), + wndclass->hInstance = GetModuleHandle(NULL); + wndclass->hCursor = LoadCursor(NULL, IDC_ARROW); + wndclass->lpszClassName = (class_name_wide != NULL) ? class_name_wide : TEXT("RetroArch"); + wndclass->hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON)); + wndclass->hIconSm = (HICON)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON), IMAGE_ICON, 16, 16, 0); if (!fullscreen) wndclass->hbrBackground = (HBRUSH)COLOR_WINDOW; @@ -446,7 +443,7 @@ bool win32_window_init(WNDCLASSEX *wndclass, if (class_name != NULL) wndclass->style |= CS_CLASSDC; - if (!RegisterClassExW(wndclass)) + if (!RegisterClassEx(wndclass)) return false; /* This is non-NULL when we want a window for shader dialogs, @@ -471,7 +468,7 @@ bool win32_shader_dlg_init(void) if (!inited) { - WNDCLASSEXW wc_shader_dlg = {0}; + WNDCLASSEX wc_shader_dlg = {0}; INITCOMMONCONTROLSEX comm_ctrl_init = {0}; comm_ctrl_init.dwSize = sizeof(comm_ctrl_init); @@ -491,19 +488,19 @@ bool win32_shader_dlg_init(void) hFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT); - g_shader_dlg.window.hwnd = CreateWindowExW(0, L"Shader Dialog", L"Shader Parameters", + g_shader_dlg.window.hwnd = CreateWindowEx(0, TEXT("Shader Dialog"), TEXT("Shader Parameters"), WS_POPUPWINDOW | WS_CAPTION, 100, 100, SHADER_DLG_WIDTH, SHADER_DLG_MIN_HEIGHT, NULL, NULL, NULL, NULL); pos_y = SHADER_DLG_CTRL_MARGIN; - g_shader_dlg.on_top_checkbox.hwnd = CreateWindowExW(0, L"BUTTON", L"Always on Top", + g_shader_dlg.on_top_checkbox.hwnd = CreateWindowEx(0, TEXT("BUTTON"), TEXT("Always on Top"), BS_AUTOCHECKBOX | WS_VISIBLE | WS_CHILD, SHADER_DLG_CTRL_X, pos_y, SHADER_DLG_CTRL_WIDTH, SHADER_DLG_CHECKBOX_HEIGHT, g_shader_dlg.window.hwnd, (HMENU)SHADER_DLG_CHECKBOX_ONTOP_ID, NULL, NULL); pos_y += SHADER_DLG_CHECKBOX_HEIGHT + SHADER_DLG_CTRL_MARGIN; - SendMessageW(g_shader_dlg.on_top_checkbox.hwnd, + SendMessage(g_shader_dlg.on_top_checkbox.hwnd, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0)); pos_y += SHADER_DLG_SEPARATOR_HEIGHT + SHADER_DLG_CTRL_MARGIN; @@ -677,7 +674,7 @@ LRESULT win32_menu_loop(HWND owner, WPARAM wparam) command_event(cmd, NULL); if (do_wm_close) - PostMessageW(owner, WM_CLOSE, 0, 0); + PostMessage(owner, WM_CLOSE, 0, 0); return 0L; }