Merge remote-tracking branch 'origin/master' into net-rollback

# Conflicts:
#	CMakeLists.txt
#	shell/libretro/libretro.cpp
#	shell/libretro/libretro_core_options.h
This commit is contained in:
Flyinghead 2021-12-22 21:31:17 +01:00
commit 300c74e3fc
5 changed files with 618 additions and 467 deletions

View File

@ -18,6 +18,7 @@ option(USE_OPENMP "Use OpenMP if available" ON)
option(USE_VULKAN "Build with Vulkan support" ON)
option(LIBRETRO "Build libretro core" OFF)
option(USE_OPENGL "Use Open GL API" ON)
option(USE_VIDEOCORE "RPI: use the legacy Broadcom GLES libraries" OFF)
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/shell/cmake")
@ -107,10 +108,16 @@ elseif(LIBRETRO)
target_compile_definitions(${PROJECT_NAME} PRIVATE LIBRETRO)
if(ANDROID OR USE_GLES)
target_compile_definitions(${PROJECT_NAME} PRIVATE GLES GLES3 HAVE_OPENGLES HAVE_OPENGLES3)
target_link_libraries(${PROJECT_NAME} PRIVATE "-lGLESv3")
find_library(GLES3_LIBRARIES NAMES GLESv3 GLESv2 NO_CACHE REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE ${GLES3_LIBRARIES})
elseif(USE_GLES2)
target_compile_definitions(${PROJECT_NAME} PRIVATE GLES GLES2 HAVE_OPENGLES HAVE_OPENGLES2)
target_link_libraries(${PROJECT_NAME} PRIVATE "-lGLESv2")
if(USE_VIDEOCORE)
target_link_libraries(${PROJECT_NAME} PRIVATE "-lbrcmGLESv2")
target_link_directories(${PROJECT_NAME} PRIVATE "/opt/vc/lib")
else()
target_link_libraries(${PROJECT_NAME} PRIVATE "-GLESv2")
endif()
else()
target_compile_definitions(${PROJECT_NAME} PRIVATE HAVE_OPENGL)
if(APPLE)
@ -349,12 +356,19 @@ if(UNIX AND NOT APPLE AND NOT ANDROID)
if(USE_GLES2)
target_compile_definitions(${PROJECT_NAME} PRIVATE GLES GLES2)
target_link_libraries(${PROJECT_NAME} PRIVATE GLESv2)
if(USE_VIDEOCORE)
target_link_libraries(${PROJECT_NAME} PRIVATE "-lbrcmGLESv2")
target_link_directories(${PROJECT_NAME} PRIVATE "/opt/vc/lib")
else()
target_link_libraries(${PROJECT_NAME} PRIVATE GLESv2)
endif()
elseif(USE_GLES)
target_compile_definitions(${PROJECT_NAME} PRIVATE GLES GLES3)
if(NOT SDL2_FOUND)
target_link_libraries(${PROJECT_NAME} PRIVATE EGL)
endif()
find_library(GLES3_LIBRARIES NAMES GLESv3 GLESv2 NO_CACHE REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE ${GLES3_LIBRARIES})
elseif(USE_OPENGL)
set(OpenGL_GL_PREFERENCE LEGACY)
find_package(OpenGL REQUIRED)

View File

@ -59,9 +59,9 @@ const std::array<Register, 6> alloc_regs{
r5, r6, r7, r9, r10, r11
};
class Arm32ArmRegAlloc : public ArmRegAlloc<alloc_regs.size(), Arm32ArmRegAlloc>
class Arm32ArmRegAlloc : public ArmRegAlloc<ARRAY_SIZE(alloc_regs), Arm32ArmRegAlloc>
{
using super = ArmRegAlloc<alloc_regs.size(), Arm32ArmRegAlloc>;
using super = ArmRegAlloc<ARRAY_SIZE(alloc_regs), Arm32ArmRegAlloc>;
void LoadReg(int host_reg, Arm7Reg armreg, ArmOp::Condition cc = ArmOp::AL)
{

View File

@ -113,6 +113,15 @@ static bool allow_service_buttons = false;
static bool libretro_supports_bitmasks = false;
static bool categoriesSupported = false;
static bool platformIsDreamcast = true;
static bool platformIsArcade = false;
static bool threadedRenderingEnabled = true;
static bool oitEnabled = false;
#if defined(HAVE_TEXUPSCALE)
static bool textureUpscaleEnabled = false;
#endif
static bool vmuScreenSettingsShown = true;
static bool lightgunSettingsShown = true;
u32 kcode[4] = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF};
u8 rt[4];
@ -193,6 +202,9 @@ static std::vector<std::string> disk_paths;
static std::vector<std::string> disk_labels;
static bool disc_tray_open = false;
void UpdateInputState();
static bool set_variable_visibility(void);
void retro_set_video_refresh(retro_video_refresh_t cb)
{
video_cb = cb;
@ -234,7 +246,20 @@ void retro_set_environment(retro_environment_t cb)
{
environ_cb = cb;
libretro_set_core_options(environ_cb, &categoriesSupported);
// An annoyance: retro_set_environment() can be called
// multiple times, and depending upon the current frontend
// state various environment callbacks may be disabled.
// This means the reported 'categories_supported' status
// may change on subsequent iterations. We therefore have
// to record whether 'categories_supported' is true on any
// iteration, and latch the result
bool optionCategoriesSupported = false;
libretro_set_core_options(environ_cb, &optionCategoriesSupported);
categoriesSupported |= optionCategoriesSupported;
struct retro_core_options_update_display_callback update_display_cb;
update_display_cb.callback = set_variable_visibility;
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_UPDATE_DISPLAY_CALLBACK, &update_display_cb);
static const struct retro_controller_description ports_default[] =
{
@ -309,126 +334,222 @@ void retro_deinit()
}
os_UninstallFaultHandler();
libretro_supports_bitmasks = false;
categoriesSupported = false;
platformIsDreamcast = true;
platformIsArcade = false;
threadedRenderingEnabled = true;
oitEnabled = false;
#if defined(HAVE_TEXUPSCALE)
textureUpscaleEnabled = false;
#endif
vmuScreenSettingsShown = true;
lightgunSettingsShown = true;
LogManager::Shutdown();
retro_audio_deinit();
}
static void set_variable_visibility()
static bool set_variable_visibility(void)
{
struct retro_core_option_display option_display;
struct retro_variable var;
bool updated = false;
// Show/hide NAOMI/Atomiswave options
option_display.visible = ((settings.platform.system == DC_PLATFORM_NAOMI) ||
(settings.platform.system == DC_PLATFORM_ATOMISWAVE));
bool platformWasDreamcast = platformIsDreamcast;
bool platformWasArcade = platformIsArcade;
option_display.key = CORE_OPTION_NAME "_allow_service_buttons";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
option_display.key = CORE_OPTION_NAME "_enable_naomi_15khz_dipswitch";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
platformIsDreamcast = (settings.platform.system == DC_PLATFORM_DREAMCAST);
platformIsArcade = (settings.platform.system == DC_PLATFORM_NAOMI) ||
(settings.platform.system == DC_PLATFORM_ATOMISWAVE);
// Show/hide Dreamcast options
option_display.visible = (settings.platform.system == DC_PLATFORM_DREAMCAST);
// Show/hide platform-dependent options
if (first_run || (platformIsDreamcast != platformWasDreamcast) || (platformIsArcade != platformWasArcade))
{
// Show/hide NAOMI/Atomiswave options
option_display.visible = platformIsArcade;
option_display.key = CORE_OPTION_NAME "_allow_service_buttons";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
option_display.key = CORE_OPTION_NAME "_boot_to_bios";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
option_display.key = CORE_OPTION_NAME "_hle_bios";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
option_display.key = CORE_OPTION_NAME "_gdrom_fast_loading";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
option_display.key = CORE_OPTION_NAME "_cable_type";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
option_display.key = CORE_OPTION_NAME "_broadcast";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
option_display.key = CORE_OPTION_NAME "_language";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
option_display.key = CORE_OPTION_NAME "_force_wince";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
option_display.key = CORE_OPTION_NAME "_enable_purupuru";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
option_display.key = CORE_OPTION_NAME "_per_content_vmus";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
// Show/hide Dreamcast options
option_display.visible = platformIsDreamcast;
option_display.key = CORE_OPTION_NAME "_boot_to_bios";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
option_display.key = CORE_OPTION_NAME "_hle_bios";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
option_display.key = CORE_OPTION_NAME "_gdrom_fast_loading";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
option_display.key = CORE_OPTION_NAME "_cable_type";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
option_display.key = CORE_OPTION_NAME "_broadcast";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
option_display.key = CORE_OPTION_NAME "_language";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
option_display.key = CORE_OPTION_NAME "_force_wince";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
option_display.key = CORE_OPTION_NAME "_enable_purupuru";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
option_display.key = CORE_OPTION_NAME "_per_content_vmus";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
/* only show, if categories not supported */
option_display.visible = ((settings.platform.system == DC_PLATFORM_DREAMCAST)
&& (!categoriesSupported));
option_display.key = CORE_OPTION_NAME "_show_vmu_screen_settings";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
vmuScreenSettingsShown = option_display.visible;
for (unsigned i = 0; i < 4; i++)
{
char key[256];
option_display.key = key;
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_vmu", i + 1, "_screen_display");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_vmu", i + 1, "_screen_position");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_vmu", i + 1, "_screen_size_mult");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_vmu", i + 1, "_pixel_on_color");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_vmu", i + 1, "_pixel_off_color");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_vmu", i + 1, "_screen_opacity");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
}
// Show/hide manual option visibility toggles
// > Only show if categories are not supported
option_display.visible = platformIsDreamcast && !categoriesSupported;
option_display.key = CORE_OPTION_NAME "_show_vmu_screen_settings";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
updated = true;
}
// Show/hide additional manual option visibility toggles
// > Only show if categories are not supported
if (first_run)
{
option_display.visible = !categoriesSupported;
option_display.key = CORE_OPTION_NAME "_show_lightgun_settings";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
updated = true;
}
// Show/hide settings-dependent options
option_display.visible = config::ThreadedRendering;
option_display.key = CORE_OPTION_NAME "_auto_skip_frame";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
// Only for threaded renderer
bool threadedRenderingWasEnabled = threadedRenderingEnabled;
threadedRenderingEnabled = true;
var.key = CORE_OPTION_NAME "_threaded_rendering";
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value && !strcmp(var.value, "disabled"))
threadedRenderingEnabled = false;
if (first_run || (threadedRenderingEnabled != threadedRenderingWasEnabled))
{
option_display.visible = threadedRenderingEnabled;
option_display.key = CORE_OPTION_NAME "_auto_skip_frame";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
updated = true;
}
#if defined(HAVE_OIT) || defined(HAVE_VULKAN)
// Only for per-pixel renderers
option_display.visible = config::RendererType == RenderType::OpenGL_OIT || config::RendererType == RenderType::Vulkan_OIT || config::RendererType == RenderType::DirectX11_OIT;
option_display.key = CORE_OPTION_NAME "_oit_abuffer_size";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
bool oitWasEnabled = oitEnabled;
oitEnabled = false;
var.key = CORE_OPTION_NAME "_alpha_sorting";
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value && !strcmp(var.value, "per-pixel (accurate)"))
oitEnabled = true;
if (first_run || (oitEnabled != oitWasEnabled))
{
option_display.visible = oitEnabled;
option_display.key = CORE_OPTION_NAME "_oit_abuffer_size";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
updated = true;
}
#endif
#if defined(HAVE_TEXUPSCALE)
// Only if texture upscaling is enabled
option_display.visible = config::TextureUpscale > 1;
option_display.key = CORE_OPTION_NAME "_texupscale_max_filtered_texture_size";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
bool textureUpscaleWasEnabled = textureUpscaleEnabled;
textureUpscaleEnabled = false;
var.key = CORE_OPTION_NAME "_texupscale";
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value && strcmp(var.value, "off"))
textureUpscaleEnabled = true;
if (first_run || (textureUpscaleEnabled != textureUpscaleWasEnabled))
{
option_display.visible = textureUpscaleEnabled;
option_display.key = CORE_OPTION_NAME "_texupscale_max_filtered_texture_size";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
updated = true;
}
#endif
// If categories are supported, no further action is required
if (categoriesSupported)
return updated;
// Show/hide VMU screen options
if (settings.platform.system == DC_PLATFORM_DREAMCAST)
bool vmuScreenSettingsWereShown = vmuScreenSettingsShown;
if (platformIsDreamcast)
{
option_display.visible = true;
vmuScreenSettingsShown = true;
var.key = CORE_OPTION_NAME "_show_vmu_screen_settings";
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var)
&& var.value
&& !categoriesSupported)
if (!strcmp(var.value, "disabled"))
option_display.visible = false;
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value && !strcmp(var.value, "disabled"))
vmuScreenSettingsShown = false;
}
else
option_display.visible = false;
vmuScreenSettingsShown = false;
for (int i = 0; i < 4; i++)
if (first_run || (vmuScreenSettingsShown != vmuScreenSettingsWereShown))
{
char key[256];
option_display.key = key;
option_display.visible = vmuScreenSettingsShown;
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_vmu", i + 1, "_screen_display");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_vmu", i + 1, "_screen_position");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_vmu", i + 1, "_screen_size_mult");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_vmu", i + 1, "_pixel_on_color");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_vmu", i + 1, "_pixel_off_color");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_vmu", i + 1, "_screen_opacity");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
for (unsigned i = 0; i < 4; i++)
{
char key[256];
option_display.key = key;
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_vmu", i + 1, "_screen_display");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_vmu", i + 1, "_screen_position");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_vmu", i + 1, "_screen_size_mult");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_vmu", i + 1, "_pixel_on_color");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_vmu", i + 1, "_pixel_off_color");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_vmu", i + 1, "_screen_opacity");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
}
updated = true;
}
/* only show, if categories not supported */
option_display.visible = !categoriesSupported;
option_display.key = CORE_OPTION_NAME "_show_lightgun_settings";
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
// Show/hide light gun options
option_display.visible = true;
bool lightgunSettingsWereShown = lightgunSettingsShown;
lightgunSettingsShown = true;
var.key = CORE_OPTION_NAME "_show_lightgun_settings";
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var)
&& var.value
&& !categoriesSupported)
if (!strcmp(var.value, "disabled"))
option_display.visible = false;
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value && !strcmp(var.value, "disabled"))
lightgunSettingsShown = false;
for (int i = 0; i < 4; i++)
if (first_run || (lightgunSettingsShown != lightgunSettingsWereShown))
{
char key[256];
option_display.key = key;
option_display.visible = lightgunSettingsShown;
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_lightgun", i + 1, "_crosshair");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
for (unsigned i = 0; i < 4; i++)
{
char key[256];
option_display.key = key;
snprintf(key, sizeof(key), "%s%u%s", CORE_OPTION_NAME "_lightgun", i + 1, "_crosshair");
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
}
updated = true;
}
return updated;
}
static void setFramebufferSize()
@ -865,10 +986,7 @@ void retro_run()
// On the first call, we start the emulator
if (first_run)
{
emu.start();
first_run = false;
}
poll_cb();
UpdateInputState();
@ -904,6 +1022,8 @@ void retro_run()
retro_audio_flush_buffer();
video_cb(is_dupe ? 0 : RETRO_HW_FRAME_BUFFER_VALID, framebufferWidth, framebufferHeight, 0);
first_run = false;
}
static bool loadGame()
@ -1639,8 +1759,6 @@ bool retro_load_game(const struct retro_game_info *game)
}
}
}
// System may have changed - have to update hidden core options
set_variable_visibility();
if (game->path[0] == '\0')
{
@ -1772,6 +1890,9 @@ bool retro_load_game(const struct retro_game_info *game)
if (devices_need_refresh)
refresh_devices(true);
// System may have changed - have to update hidden core options
set_variable_visibility();
return true;
}

View File

@ -69,37 +69,96 @@ extern "C" {
struct retro_core_option_v2_category option_cats_us[] = {
{
"system",
"System",
"Configure region, language, BIOS and base hardware settings."
},
{
"video",
"Video",
"Change visual buffers & effects, display parameters, framerate/-skip and rendering/texture settings."
"Configure resolution, order-independent transparency and visual effect settings."
},
{
"input",
"Input",
"Change controller & light gun settings."
},
{
"vmu",
"Visual Memory",
"Change settings related to the Visual Memory Units/Systems (VMU)."
"performance",
"Performance",
"Configure threaded rendering, integer division optimisations and frame skip settings."
},
{
"hacks",
"Emulation Hacks",
"Change different emulation hacks."
"Configure widescreen overrides, GD-ROM loading speed and texture replacement settings."
},
{
"input",
"Input",
"Configure gamepad and light gun settings."
},
{
"vmu",
"Visual Memory Unit",
"Configure per-game VMU save files and on-screen VMU visibility settings."
},
{ NULL, NULL, NULL },
};
struct retro_core_option_v2_definition option_defs_us[] = {
{
CORE_OPTION_NAME "_region",
"Region",
NULL,
"",
NULL,
"system",
{
{ "Japan", NULL },
{ "USA", NULL },
{ "Europe", NULL },
{ "Default", NULL },
{ NULL, NULL },
},
"Default",
},
{
CORE_OPTION_NAME "_language",
"Language",
NULL,
"Changes the language used by the BIOS and by any games that contain multiple languages.",
NULL,
"system",
{
{ "Japanese", NULL },
{ "English", NULL },
{ "German", NULL },
{ "French", NULL },
{ "Spanish", NULL },
{ "Italian", NULL },
{ "Default", NULL },
{ NULL, NULL },
},
"Default",
},
{
CORE_OPTION_NAME "_hle_bios",
"HLE BIOS",
NULL,
"Force use of high-level emulation BIOS.",
NULL,
"system",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL},
},
"disabled",
},
{
CORE_OPTION_NAME "_boot_to_bios",
"Boot to BIOS (Restart Required)",
NULL,
"Boot directly into the Dreamcast BIOS menu.",
NULL,
NULL,
"system",
{
{ "disabled", NULL },
{ "enabled", NULL },
@ -108,37 +167,51 @@ struct retro_core_option_v2_definition option_defs_us[] = {
"disabled",
},
{
CORE_OPTION_NAME "_hle_bios",
"HLE BIOS",
NULL,
"Force use of high-level emulation BIOS.",
CORE_OPTION_NAME "_enable_dsp",
"Enable DSP",
NULL,
"Enable emulation of the Dreamcast's audio DSP (digital signal processor). Improves the accuracy of generated sound, but increases performance requirements.",
NULL,
"system",
{
{ "disabled", NULL },
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL},
{ NULL, NULL },
},
#ifdef LOW_END
"disabled",
#else
"enabled",
#endif
},
{
CORE_OPTION_NAME "_force_wince",
"Force Windows CE Mode",
NULL,
"Enable full MMU (Memory Management Unit) emulation and other settings for Windows CE games.",
NULL,
"system",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"disabled",
},
#if defined(HAVE_OIT) || defined(HAVE_VULKAN)
{
CORE_OPTION_NAME "_oit_abuffer_size",
"Accumulation Pixel Buffer Size (Restart Required)",
CORE_OPTION_NAME "_allow_service_buttons",
"Allow NAOMI Service Buttons",
NULL,
"Higher values might be required for higher resolutions to output correctly.",
"Enables SERVICE button for NAOMI, to enter cabinet settings.",
NULL,
"video",
"system",
{
{ "512MB", NULL },
{ "1GB", NULL },
{ "2GB", NULL },
{ "4GB", NULL },
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"512MB",
"disabled",
},
#endif
{
CORE_OPTION_NAME "_internal_resolution",
"Internal Resolution",
@ -182,6 +255,38 @@ struct retro_core_option_v2_definition option_defs_us[] = {
"640x480",
#endif
},
{
CORE_OPTION_NAME "_cable_type",
"Cable Type",
NULL,
"The output signal type. 'TV (Composite)' is the most widely supported.",
NULL,
"video",
{
{ "VGA", NULL },
{ "TV (RGB)", NULL },
{ "TV (Composite)", NULL },
{ NULL, NULL },
},
"TV (Composite)",
},
{
CORE_OPTION_NAME "_broadcast",
"Broadcast Standard",
NULL,
"",
NULL,
"video",
{
{ "NTSC", NULL },
{ "PAL", "PAL (World)" },
{ "PAL_N", "PAL-N (Argentina, Paraguay, Uruguay)" },
{ "PAL_M", "PAL-M (Brazil)" },
{ "Default", NULL },
{ NULL, NULL },
},
"NTSC",
},
{
CORE_OPTION_NAME "_screen_rotation",
"Screen Orientation",
@ -202,7 +307,7 @@ struct retro_core_option_v2_definition option_defs_us[] = {
NULL,
"",
NULL,
NULL,
"video",
{
{ "per-strip (fast, least accurate)", "Per-Strip (fast, least accurate)" },
{ "per-triangle (normal)", "Per-Triangle (normal)" },
@ -217,23 +322,37 @@ struct retro_core_option_v2_definition option_defs_us[] = {
"per-triangle (normal)",
#endif
},
#if defined(HAVE_OIT) || defined(HAVE_VULKAN)
{
CORE_OPTION_NAME "_gdrom_fast_loading",
"GD-ROM Fast Loading (inaccurate)",
CORE_OPTION_NAME "_oit_abuffer_size",
"Accumulation Pixel Buffer Size (Restart Required)",
NULL,
"Speeds up GD-ROM loading.",
"Higher values might be required for higher resolutions to output correctly.",
NULL,
"video",
{
{ "512MB", NULL },
{ "1GB", NULL },
{ "2GB", NULL },
{ "4GB", NULL },
{ NULL, NULL },
},
"512MB",
},
#endif
{/* TODO: needs explanation */
CORE_OPTION_NAME "_enable_rttb",
"Enable RTT (Render To Texture) Buffer",
NULL,
"",
NULL,
"video",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
#ifdef LOW_END
"enabled",
#else
"disabled",
#endif
},
{/* TODO: needs explanation */
CORE_OPTION_NAME "_mipmapping",
@ -271,19 +390,36 @@ struct retro_core_option_v2_definition option_defs_us[] = {
NULL,
"video",
{
{ "disabled", NULL },
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"enabled",
},
{
CORE_OPTION_NAME "_widescreen_hack",
"Widescreen Hack",
CORE_OPTION_NAME "_anisotropic_filtering",
"Anisotropic Filtering",
NULL,
"Draw geometry outside of the normal 4:3 aspect ratio. May produce graphical glitches in the revealed areas.",
"Enhance the quality of textures on surfaces that are at oblique viewing angles with respect to the camera.",
NULL,
"hacks",
"video",
{
{ "off", "disabled" },
{ "2", NULL },
{ "4", NULL },
{ "8", NULL },
{ "16", NULL },
{ NULL, NULL },
},
"4",
},
{
CORE_OPTION_NAME "_delay_frame_swapping",
"Delay Frame Swapping",
NULL,
"Useful to avoid flashing screens or glitchy videos. Not recommended on slow platforms.",
NULL,
"video",
{
{ "disabled", NULL },
{ "enabled", NULL },
@ -291,6 +427,105 @@ struct retro_core_option_v2_definition option_defs_us[] = {
},
"disabled",
},
{
CORE_OPTION_NAME "_pvr2_filtering",
"PowerVR2 Post-processing Filter",
NULL,
"Post-process the rendered image to simulate effects specific to the PowerVR2 GPU and analog video signals.",
NULL,
"video",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"disabled",
},
#ifdef HAVE_TEXUPSCALE
{
CORE_OPTION_NAME "_texupscale",
"Texture Upscaling (xBRZ)",
NULL,
"Enhance hand-drawn 2D pixel art graphics. Should only be used with 2D pixelated games.",
NULL,
"video",
{
{ "off", "disabled" },
{ "2x", NULL },
{ "4x", NULL },
{ "6x", NULL },
{ NULL, NULL },
},
"off",
},
{/* TODO: needs clarification */
CORE_OPTION_NAME "_texupscale_max_filtered_texture_size",
"Texture Upscaling Max. Filtered Size",
NULL,
"",
NULL,
"video",
{
{ "256", NULL },
{ "512", NULL },
{ "1024", NULL },
{ NULL, NULL },
},
"256",
},
#endif
{
CORE_OPTION_NAME "_threaded_rendering",
"Threaded Rendering",
NULL,
"Runs the GPU and CPU on different threads. Highly recommended.",
NULL,
"performance",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"enabled",
},
{
CORE_OPTION_NAME "_auto_skip_frame",
"Auto Skip Frame",
NULL,
"Automatically skip frames when the emulator is running slow. Note: This setting only applies when 'Threaded Rendering' is enabled.",
NULL,
"performance",
{
{ "disabled", NULL },
{ "some", "Normal" },
{ "more", "Maximum" },
{ NULL, NULL },
},
#ifdef LOW_END
"some",
#else
"disabled",
#endif
},
{
CORE_OPTION_NAME "_frame_skipping",
"Frame Skipping",
NULL,
"Sets the number of frames to skip between each displayed frame.",
NULL,
"performance",
{
{ "disabled", NULL },
{ "1", NULL },
{ "2", NULL },
{ "3", NULL },
{ "4", NULL },
{ "5", NULL },
{ "6", NULL },
{ NULL, NULL },
},
"disabled",
},
{
CORE_OPTION_NAME "_widescreen_cheats",
"Widescreen Cheats (Restart Required)",
@ -306,79 +541,58 @@ struct retro_core_option_v2_definition option_defs_us[] = {
"disabled",
},
{
CORE_OPTION_NAME "_cable_type",
"Cable Type",
CORE_OPTION_NAME "_widescreen_hack",
"Widescreen Hack",
NULL,
"The output signal type. 'TV (Composite)' is the most widely supported.",
"Draw geometry outside of the normal 4:3 aspect ratio. May produce graphical glitches in the revealed areas.",
NULL,
"video",
"hacks",
{
{ "VGA", NULL },
{ "TV (RGB)", NULL },
{ "TV (Composite)", NULL },
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"TV (Composite)",
"disabled",
},
{
CORE_OPTION_NAME "_broadcast",
"Broadcast Standard",
CORE_OPTION_NAME "_gdrom_fast_loading",
"GD-ROM Fast Loading (inaccurate)",
NULL,
"Speeds up GD-ROM loading.",
NULL,
"hacks",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
#ifdef LOW_END
"enabled",
#else
"disabled",
#endif
},
{
CORE_OPTION_NAME "_custom_textures",
"Load Custom Textures",
NULL,
"",
NULL,
"video",
"hacks",
{
{ "NTSC", NULL },
{ "PAL", "PAL (World)" },
{ "PAL_N", "PAL-N (Argentina, Paraguay, Uruguay)" },
{ "PAL_M", "PAL-M (Brazil)" },
{ "Default", NULL },
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"NTSC",
"disabled",
},
{
CORE_OPTION_NAME "_region",
"Region",
{/* TODO: probably needs explanation */
CORE_OPTION_NAME "_dump_textures",
"Dump Textures",
NULL,
"",
NULL,
NULL,
{
{ "Japan", NULL },
{ "USA", NULL },
{ "Europe", NULL },
{ "Default", NULL },
{ NULL, NULL },
},
"Default",
},
{
CORE_OPTION_NAME "_language",
"Language",
NULL,
"Changes the language used by the BIOS and by any games that contain multiple languages.",
NULL,
NULL,
{
{ "Japanese", NULL },
{ "English", NULL },
{ "German", NULL },
{ "French", NULL },
{ "Spanish", NULL },
{ "Italian", NULL },
{ "Default", NULL },
{ NULL, NULL },
},
"Default",
},
{
CORE_OPTION_NAME "_force_wince",
"Force Windows CE Mode",
NULL,
"Enable full MMU (Memory Management Unit) emulation and other settings for Windows CE games.",
NULL,
NULL,
"hacks",
{
{ "disabled", NULL },
{ "enabled", NULL },
@ -438,168 +652,6 @@ struct retro_core_option_v2_definition option_defs_us[] = {
},
"disabled",
},
{
CORE_OPTION_NAME "_enable_dsp",
"Enable DSP",
NULL,
"Enable emulation of the Dreamcast's audio DSP (digital signal processor). Improves the accuracy of generated sound, but increases performance requirements.",
NULL,
NULL,
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
#ifdef LOW_END
"disabled",
#else
"enabled",
#endif
},
{
CORE_OPTION_NAME "_anisotropic_filtering",
"Anisotropic Filtering",
NULL,
"Enhance the quality of textures on surfaces that are at oblique viewing angles with respect to the camera.",
NULL,
"video",
{
{ "off", "disabled" },
{ "2", NULL },
{ "4", NULL },
{ "8", NULL },
{ "16", NULL },
{ NULL, NULL },
},
"4",
},
{
CORE_OPTION_NAME "_pvr2_filtering",
"PowerVR2 Post-processing Filter",
NULL,
"Post-process the rendered image to simulate effects specific to the PowerVR2 GPU and analog video signals.",
NULL,
"video",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"disabled",
},
#ifdef HAVE_TEXUPSCALE
{
CORE_OPTION_NAME "_texupscale",
"Texture Upscaling (xBRZ)",
NULL,
"Enhance hand-drawn 2D pixel art graphics. Should only be used with 2D pixelated games.",
NULL,
"video",
{
{ "off", "disabled" },
{ "2x", NULL },
{ "4x", NULL },
{ "6x", NULL },
{ NULL, NULL },
},
"off",
},
{/* TODO: needs clarification */
CORE_OPTION_NAME "_texupscale_max_filtered_texture_size",
"Texture Upscaling Max. Filtered Size",
NULL,
"",
NULL,
"video",
{
{ "256", NULL },
{ "512", NULL },
{ "1024", NULL },
{ NULL, NULL },
},
"256",
},
#endif
{/* TODO: needs explanation */
CORE_OPTION_NAME "_enable_rttb",
"Enable RTT (Render To Texture) Buffer",
NULL,
"",
NULL,
"video",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"disabled",
},
{
CORE_OPTION_NAME "_threaded_rendering",
"Threaded Rendering",
NULL,
"Runs the GPU and CPU on different threads. Highly recommended.",
NULL,
NULL,
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"enabled",
},
{
CORE_OPTION_NAME "_delay_frame_swapping",
"Delay Frame Swapping",
NULL,
"Useful to avoid flashing screens or glitchy videos. Not recommended on slow platforms.",
NULL,
"video",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"disabled",
},
{
CORE_OPTION_NAME "_auto_skip_frame",
"Auto Skip Frame",
NULL,
"Automatically skip frames when the emulator is running slow. Note: This setting only applies when 'Threaded Rendering' is enabled.",
NULL,
"video",
{
{ "disabled", NULL },
{ "some", "Normal" },
{ "more", "Maximum" },
{ NULL, NULL },
},
#ifdef LOW_END
"some",
#else
"disabled",
#endif
},
{
CORE_OPTION_NAME "_frame_skipping",
"Frame Skipping",
NULL,
"Sets the number of frames to skip between each displayed frame.",
NULL,
"video",
{
{ "disabled", NULL },
{ "1", NULL },
{ "2", NULL },
{ "3", NULL },
{ "4", NULL },
{ "5", NULL },
{ "6", NULL },
{ NULL, NULL },
},
"disabled",
},
{
CORE_OPTION_NAME "_enable_purupuru",
"Purupuru Pack/Vibration Pack",
@ -615,44 +667,84 @@ struct retro_core_option_v2_definition option_defs_us[] = {
"enabled",
},
{
CORE_OPTION_NAME "_allow_service_buttons",
"Allow NAOMI Service Buttons",
CORE_OPTION_NAME "_show_lightgun_settings",
"Show Light Gun Settings",
NULL,
"Enables SERVICE button for NAOMI, to enter cabinet settings.",
"Enable configuration of light gun crosshair display options. NOTE: Quick Menu may need to be toggled for this setting to take effect.",
NULL,
"input",
{
{ "enabled", NULL },
{ "disabled", NULL },
{ NULL, NULL},
},
"disabled"
},
{
CORE_OPTION_NAME "_lightgun1_crosshair",
"Gun Crosshair 1 Display",
NULL,
"",
NULL,
"input",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
{ "White", NULL },
{ "Red", NULL },
{ "Green", NULL },
{ "Blue", NULL },
{ NULL, NULL },
},
"disabled",
},
{
CORE_OPTION_NAME "_custom_textures",
"Load Custom Textures",
CORE_OPTION_NAME "_lightgun2_crosshair",
"Gun Crosshair 2 Display",
NULL,
"",
NULL,
"video",
"input",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
{ "White", NULL },
{ "Red", NULL },
{ "Green", NULL },
{ "Blue", NULL },
{ NULL, NULL },
},
"disabled",
},
{/* TODO: probably needs explanation */
CORE_OPTION_NAME "_dump_textures",
"Dump Textures",
{
CORE_OPTION_NAME "_lightgun3_crosshair",
"Gun Crosshair 3 Display",
NULL,
"",
NULL,
"video",
"input",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
{ "White", NULL },
{ "Red", NULL },
{ "Green", NULL },
{ "Blue", NULL },
{ NULL, NULL },
},
"disabled",
},
{
CORE_OPTION_NAME "_lightgun4_crosshair",
"Gun Crosshair 4 Display",
NULL,
"",
NULL,
"input",
{
{ "disabled", NULL },
{ "White", NULL },
{ "Red", NULL },
{ "Green", NULL },
{ "Blue", NULL },
{ NULL, NULL },
},
"disabled",
},
@ -675,7 +767,7 @@ struct retro_core_option_v2_definition option_defs_us[] = {
CORE_OPTION_NAME "_show_vmu_screen_settings",
"Show Visual Memory Unit/System (VMU) Display Settings",
"Show VMU Display Settings",
"Enable configuration of emulated VMU LCD screen visibility, size, position and color. NOTE: Quick Menu must be toggled for this setting to take effect.",
"Enable configuration of emulated VMU LCD screen visibility, size, position and color. NOTE: Quick Menu may need to be toggled for this setting to take effect.",
NULL,
"vmu",
{
@ -1289,88 +1381,6 @@ struct retro_core_option_v2_definition option_defs_us[] = {
},
"100%",
},
{
CORE_OPTION_NAME "_show_lightgun_settings",
"Show Light Gun Settings",
NULL,
"Enable configuration of light gun crosshair display options. NOTE: Quick Menu must be toggled for this setting to take effect.",
NULL,
"input",
{
{ "enabled", NULL },
{ "disabled", NULL },
{ NULL, NULL},
},
"disabled"
},
{
CORE_OPTION_NAME "_lightgun1_crosshair",
"Gun Crosshair 1 Display",
NULL,
"",
NULL,
"input",
{
{ "disabled", NULL },
{ "White", NULL },
{ "Red", NULL },
{ "Green", NULL },
{ "Blue", NULL },
{ NULL, NULL },
},
"disabled",
},
{
CORE_OPTION_NAME "_lightgun2_crosshair",
"Gun Crosshair 2 Display",
NULL,
"",
NULL,
"input",
{
{ "disabled", NULL },
{ "White", NULL },
{ "Red", NULL },
{ "Green", NULL },
{ "Blue", NULL },
{ NULL, NULL },
},
"disabled",
},
{
CORE_OPTION_NAME "_lightgun3_crosshair",
"Gun Crosshair 3 Display",
NULL,
"",
NULL,
"input",
{
{ "disabled", NULL },
{ "White", NULL },
{ "Red", NULL },
{ "Green", NULL },
{ "Blue", NULL },
{ NULL, NULL },
},
"disabled",
},
{
CORE_OPTION_NAME "_lightgun4_crosshair",
"Gun Crosshair 4 Display",
NULL,
"",
NULL,
"input",
{
{ "disabled", NULL },
{ "White", NULL },
{ "Red", NULL },
{ "Green", NULL },
{ "Blue", NULL },
{ NULL, NULL },
},
"disabled",
},
{ NULL, NULL, NULL, NULL, NULL, NULL, {{0}}, NULL },
};
@ -1597,6 +1607,12 @@ static INLINE void libretro_set_core_options(retro_environment_t environ_cb,
values_buf[i] = NULL;
/* Skip options that are irrelevant when using the
* old style core options interface */
if (!strcmp(key, CORE_OPTION_NAME "_show_vmu_screen_settings") ||
!strcmp(key, CORE_OPTION_NAME "_show_lightgun_settings"))
continue;
if (desc)
{
size_t num_values = 0;

View File

@ -44653,18 +44653,18 @@ struct retro_core_options_v2 options_ro = {
#define CATEGORY_VMU_INFO_0_RU NULL
#define CATEGORY_HACKS_LABEL_RU "Хаки эмуляции"
#define CATEGORY_HACKS_INFO_0_RU NULL
#define CORE_OPTION_NAME_BOOT_TO_BIOS_LABEL_RU NULL
#define CORE_OPTION_NAME_BOOT_TO_BIOS_INFO_0_RU NULL
#define CORE_OPTION_NAME_BOOT_TO_BIOS_LABEL_RU "Загрузка в BIOS (требуется перезапуск)"
#define CORE_OPTION_NAME_BOOT_TO_BIOS_INFO_0_RU "Загружаться непосредственно в меню Dreamcast BIOS."
#define CORE_OPTION_NAME_HLE_BIOS_LABEL_RU NULL
#define CORE_OPTION_NAME_HLE_BIOS_INFO_0_RU NULL
#define CORE_OPTION_NAME_OIT_ABUFFER_SIZE_LABEL_RU NULL
#define CORE_OPTION_NAME_HLE_BIOS_INFO_0_RU "Принудительно использовать высокоуровневую эмуляцию BIOS."
#define CORE_OPTION_NAME_OIT_ABUFFER_SIZE_LABEL_RU "Размер накопительного пикс. буфера (требуется перезапуск)"
#define CORE_OPTION_NAME_OIT_ABUFFER_SIZE_INFO_0_RU "Большие значения могут требоваться для правильного отображения высоких разрешений."
#define OPTION_VAL_512MB_RU NULL
#define OPTION_VAL_1GB_RU NULL
#define OPTION_VAL_2GB_RU NULL
#define OPTION_VAL_4GB_RU NULL
#define CORE_OPTION_NAME_INTERNAL_RESOLUTION_LABEL_RU NULL
#define CORE_OPTION_NAME_INTERNAL_RESOLUTION_INFO_0_RU NULL
#define OPTION_VAL_512MB_RU "512 МБ"
#define OPTION_VAL_1GB_RU "1 ГБ"
#define OPTION_VAL_2GB_RU "2 ГБ"
#define OPTION_VAL_4GB_RU "4 ГБ"
#define CORE_OPTION_NAME_INTERNAL_RESOLUTION_LABEL_RU "Внутреннее разрешение (требуется перезапуск)"
#define CORE_OPTION_NAME_INTERNAL_RESOLUTION_INFO_0_RU "Настройка разрешения рендеринга."
#define OPTION_VAL_320X240_RU NULL
#define OPTION_VAL_640X480_RU NULL
#define OPTION_VAL_800X600_RU NULL
@ -44693,9 +44693,9 @@ struct retro_core_options_v2 options_ro = {
#define OPTION_VAL_12160X9120_RU NULL
#define OPTION_VAL_12800X9600_RU NULL
#define CORE_OPTION_NAME_SCREEN_ROTATION_LABEL_RU "Положение экрана"
#define OPTION_VAL_HORIZONTAL_RU NULL
#define OPTION_VAL_VERTICAL_RU NULL
#define CORE_OPTION_NAME_ALPHA_SORTING_LABEL_RU NULL
#define OPTION_VAL_HORIZONTAL_RU "Горизонтальная"
#define OPTION_VAL_VERTICAL_RU "Вертикальная"
#define CORE_OPTION_NAME_ALPHA_SORTING_LABEL_RU "Альфа-сортировка"
#define OPTION_VAL_PER_STRIP_FAST_LEAST_ACCURATE_RU NULL
#define OPTION_VAL_PER_TRIANGLE_NORMAL_RU NULL
#define OPTION_VAL_PER_PIXEL_ACCURATE_RU NULL
@ -44824,7 +44824,7 @@ struct retro_core_options_v2 options_ro = {
#define OPTION_VAL_LIGHT_YELLOW_26_RU NULL
#define OPTION_VAL_LIGHT_YELLOW_2_27_RU NULL
#define OPTION_VAL_WHITE_28_RU "Белый"
#define CORE_OPTION_NAME_VMU1_PIXEL_OFF_COLOR_LABEL_RU NULL
#define CORE_OPTION_NAME_VMU1_PIXEL_OFF_COLOR_LABEL_RU "Цвет выкл. пикселей VMU 1"
#define CORE_OPTION_NAME_VMU1_SCREEN_OPACITY_LABEL_RU NULL
#define OPTION_VAL_40_RU NULL
#define OPTION_VAL_50_RU NULL
@ -44837,19 +44837,19 @@ struct retro_core_options_v2 options_ro = {
#define CORE_OPTION_NAME_VMU2_SCREEN_POSITION_LABEL_RU NULL
#define CORE_OPTION_NAME_VMU2_SCREEN_SIZE_MULT_LABEL_RU NULL
#define CORE_OPTION_NAME_VMU2_PIXEL_ON_COLOR_LABEL_RU NULL
#define CORE_OPTION_NAME_VMU2_PIXEL_OFF_COLOR_LABEL_RU NULL
#define CORE_OPTION_NAME_VMU2_PIXEL_OFF_COLOR_LABEL_RU "Цвет выкл. пикселей VMU 2"
#define CORE_OPTION_NAME_VMU2_SCREEN_OPACITY_LABEL_RU NULL
#define CORE_OPTION_NAME_VMU3_SCREEN_DISPLAY_LABEL_RU NULL
#define CORE_OPTION_NAME_VMU3_SCREEN_POSITION_LABEL_RU NULL
#define CORE_OPTION_NAME_VMU3_SCREEN_SIZE_MULT_LABEL_RU NULL
#define CORE_OPTION_NAME_VMU3_PIXEL_ON_COLOR_LABEL_RU NULL
#define CORE_OPTION_NAME_VMU3_PIXEL_OFF_COLOR_LABEL_RU NULL
#define CORE_OPTION_NAME_VMU3_PIXEL_OFF_COLOR_LABEL_RU "Цвет выкл. пикселей VMU 3"
#define CORE_OPTION_NAME_VMU3_SCREEN_OPACITY_LABEL_RU NULL
#define CORE_OPTION_NAME_VMU4_SCREEN_DISPLAY_LABEL_RU NULL
#define CORE_OPTION_NAME_VMU4_SCREEN_POSITION_LABEL_RU NULL
#define CORE_OPTION_NAME_VMU4_SCREEN_SIZE_MULT_LABEL_RU NULL
#define CORE_OPTION_NAME_VMU4_PIXEL_ON_COLOR_LABEL_RU NULL
#define CORE_OPTION_NAME_VMU4_PIXEL_OFF_COLOR_LABEL_RU NULL
#define CORE_OPTION_NAME_VMU4_PIXEL_OFF_COLOR_LABEL_RU "Цвет выкл. пикселей VMU 4"
#define CORE_OPTION_NAME_VMU4_SCREEN_OPACITY_LABEL_RU NULL
#define CORE_OPTION_NAME_SHOW_LIGHTGUN_SETTINGS_LABEL_RU NULL
#define CORE_OPTION_NAME_SHOW_LIGHTGUN_SETTINGS_INFO_0_RU NULL