libretro: Add core option sublabels

This commit is contained in:
retro-wertz 2019-07-17 21:32:28 +08:00
parent c5e6a3409a
commit 7e8828986e
5 changed files with 1797 additions and 435 deletions

View File

@ -1,4 +1,6 @@
INCFLAGS := -I$(CORE_DIR)
LIBRETRO_COMMON := $(CORE_DIR)/libretro/libretro-common/include
INCFLAGS := -I$(CORE_DIR) -I$(LIBRETRO_COMMON)
SOURCES_CXX :=
SOURCES_CXX += \

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,39 @@
/* Copyright (C) 2010-2018 The RetroArch team
*
* ---------------------------------------------------------------------------------------
* The following license statement only applies to this file (retro_inline.h).
* ---------------------------------------------------------------------------------------
*
* Permission is hereby granted, free of charge,
* to any person obtaining a copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
* and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#ifndef __LIBRETRO_SDK_INLINE_H
#define __LIBRETRO_SDK_INLINE_H
#ifndef INLINE
#if defined(_WIN32) || defined(__INTEL_COMPILER)
#define INLINE __inline
#elif defined(__STDC_VERSION__) && __STDC_VERSION__>=199901L
#define INLINE inline
#elif defined(__GNUC__)
#define INLINE __inline__
#else
#define INLINE
#endif
#endif
#endif

View File

@ -7,6 +7,7 @@
#include "SoundRetro.h"
#include "libretro.h"
#include "libretro_core_options.h"
#include "../System.h"
#include "../Util.h"
@ -502,8 +503,8 @@ void retro_set_environment(retro_environment_t cb)
{ "vbam_usebios", "Use BIOS file (Restart); disabled|enabled" },
{ "vbam_soundinterpolation", "Sound Interpolation; enabled|disabled" },
{ "vbam_soundfiltering", "Sound Filtering; 5|6|7|8|9|10|0|1|2|3|4" },
{ "vbam_gbHardware", "(GB) Emulated Hardware; Game Boy Color|Automatic|Super Game Boy|Game Boy|Game Boy Advance|Super Game Boy 2" },
{ "vbam_palettes", "(GB) Color Palette; Standard|Blue Sea|Dark Knight|Green Forest|Hot Desert|Pink Dreams|Wierd Colors|Original|GBA SP" },
{ "vbam_gbHardware", "(GB) Emulated Hardware; gbc|auto|sgb|gb|gba|sgb2" },
{ "vbam_palettes", "(GB) Color Palette; black and white|blue sea|dark knight|green forest|hot desert|pink dreams|wierd colors|original gameboy|gba sp" },
{ "vbam_showborders", "(GB) Show Borders; disabled|enabled|auto" },
{ "vbam_turboenable", "Enable Turbo Buttons; disabled|enabled" },
{ "vbam_turbodelay", "Turbo Delay (in frames); 3|4|5|6|7|8|9|10|11|12|13|14|15|1|2" },
@ -528,7 +529,9 @@ void retro_set_environment(retro_environment_t cb)
{ NULL, NULL },
};
cb(RETRO_ENVIRONMENT_SET_VARIABLES, variables);
// cb(RETRO_ENVIRONMENT_SET_VARIABLES, variables);
libretro_set_core_options(environ_cb);
}
void retro_get_system_info(struct retro_system_info *info)
@ -1083,17 +1086,17 @@ static void update_variables(bool startup)
var.value = NULL;
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) {
if (strcmp(var.value, "Automatic") == 0)
if (strcmp(var.value, "auto") == 0)
gbEmulatorType = 0;
else if (strcmp(var.value, "Game Boy Color") == 0)
else if (strcmp(var.value, "gbc") == 0)
gbEmulatorType = 1;
else if (strcmp(var.value, "Super Game Boy") == 0)
else if (strcmp(var.value, "sgb") == 0)
gbEmulatorType = 2;
else if (strcmp(var.value, "Game Boy") == 0)
else if (strcmp(var.value, "gb") == 0)
gbEmulatorType = 3;
else if (strcmp(var.value, "Game Boy Advance") == 0)
else if (strcmp(var.value, "gba") == 0)
gbEmulatorType = 4;
else if (strcmp(var.value, "Super Game Boy 2") == 0)
else if (strcmp(var.value, "sgb2") == 0)
gbEmulatorType = 5;
}
@ -1151,23 +1154,23 @@ static void update_variables(bool startup)
{
int lastpal = current_gbPalette;
if (!strcmp(var.value, "Standard"))
if (!strcmp(var.value, "black and white"))
current_gbPalette = 0;
else if (!strcmp(var.value, "Blue Sea"))
else if (!strcmp(var.value, "blue sea"))
current_gbPalette = 1;
else if (!strcmp(var.value, "Dark Knight"))
else if (!strcmp(var.value, "dark knight"))
current_gbPalette = 2;
else if (!strcmp(var.value, "Green Forest"))
else if (!strcmp(var.value, "green forest"))
current_gbPalette = 3;
else if (!strcmp(var.value, "Hot Desert"))
else if (!strcmp(var.value, "hot desert"))
current_gbPalette = 4;
else if (!strcmp(var.value, "Pink Dreams"))
else if (!strcmp(var.value, "pink dreams"))
current_gbPalette = 5;
else if (!strcmp(var.value, "Wierd Colors"))
else if (!strcmp(var.value, "wierd colors"))
current_gbPalette = 6;
else if (!strcmp(var.value, "Original"))
else if (!strcmp(var.value, "original gameboy"))
current_gbPalette = 7;
else if (!strcmp(var.value, "GBA SP"))
else if (!strcmp(var.value, "gba sp"))
current_gbPalette = 8;
if (lastpal != current_gbPalette)

View File

@ -0,0 +1,642 @@
#ifndef LIBRETRO_CORE_OPTIONS_H__
#define LIBRETRO_CORE_OPTIONS_H__
#include <stdlib.h>
#include <string.h>
#include <libretro.h>
#include <retro_inline.h>
#ifdef __cplusplus
extern "C" {
#endif
/*
********************************
* Core Option Definitions
********************************
*/
/* RETRO_LANGUAGE_ENGLISH */
/* Default language:
* - All other languages must include the same keys and values
* - Will be used as a fallback in the event that frontend language
* is not available
* - Will be used as a fallback for any missing entries in
* frontend language definition */
struct retro_core_option_definition option_defs_us[] = {
{
"vbam_solarsensor",
"Solar sensor level",
"Adjusts simulated solar level in Boktai games. L2/R2 buttons can also be used to quickly change levels.",
{
{ "0", NULL },
{ "1", NULL },
{ "2", NULL },
{ "3", NULL },
{ "4", NULL },
{ "5", NULL },
{ "6", NULL },
{ "7", NULL },
{ "8", NULL },
{ "9", NULL },
{ "10", NULL },
{ NULL, NULL },
},
"0"
},
{
"vbam_usebios",
"Use BIOS file if available (Restart)",
"Use official bios when available. Core needs to be restarted for changes to apply.",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"disabled"
},
{
"vbam_soundinterpolation",
"Sound Interpolation",
"Enable or disable sound filtering.",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"enabled"
},
{
"vbam_soundfiltering",
"Sound Filtering",
"Sets the amount filtering to use. Higher value reduces more high frequencies.",
{
{ "0", NULL },
{ "1", NULL },
{ "2", NULL },
{ "3", NULL },
{ "4", NULL },
{ "5", NULL },
{ "6", NULL },
{ "7", NULL },
{ "8", NULL },
{ "9", NULL },
{ "10", NULL },
{ NULL, NULL },
},
"5"
},
{
"vbam_gbHardware",
"(GB) Emulated Hardware",
"Sets the Game Boy hardware type to emulate.",
{
{ "gbc", "Game Boy Color" },
{ "auto", "Automatic" },
{ "sgb", "Super Game Boy" },
{ "gb", "Game Boy" },
{ "gba", "Game Boy Advance" },
{ "sgb2", "Super Game Boy 2" },
{ NULL, NULL },
},
"gbc"
},
{
"vbam_palettes",
"(GB) Color Palette",
"Set Game Boy palettes.",
{
{ "black and white", NULL },
{ "blue sea", NULL },
{ "dark knight", NULL },
{ "green forest", NULL },
{ "hot desert", NULL },
{ "pink dreams", NULL },
{ "wierd colors", NULL },
{ "original gameboy", NULL },
{ "gba sp", NULL },
{ NULL, NULL },
},
"standard"
},
{
"vbam_showborders",
"(GB) Show Borders",
"When enabled, if loaded content is SGB compatible, this will show the border from game if available.",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ "auto", NULL },
{ NULL, NULL },
},
"disabled"
},
{
"vbam_turboenable",
"Enable Turbo Buttons",
"Enable or disable gamepad turbo buttons.",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"enabled"
},
{
"vbam_turbodelay",
"Turbo Delay (in frames)",
"Repeat rate of turbo triggers in frames. Higher value triggers more.",
{
{ "1", NULL },
{ "2", NULL },
{ "3", NULL },
{ "4", NULL },
{ "5", NULL },
{ "6", NULL },
{ "7", NULL },
{ "8", NULL },
{ "9", NULL },
{ "10", NULL },
{ "11", NULL },
{ "12", NULL },
{ "13", NULL },
{ "14", NULL },
{ "15", NULL },
{ NULL, NULL },
},
"3"
},
{
"vbam_astick_deadzone",
"Sensors Deadzone (%)",
"Set deadzone (in percent) of analog sticks.",
{
{ "0", NULL },
{ "5", NULL },
{ "10", NULL },
{ "15", NULL },
{ "20", NULL },
{ "25", NULL },
{ "30", NULL },
{ NULL, NULL },
},
"15"
},
{
"vbam_gyro_sensitivity",
"Sensor Sensitivity (Gyroscope) (%)",
"Default bind is left analog. Used to adjust sensitivity level for gyro-enabled games.",
{
{ "10", NULL },
{ "15", NULL },
{ "20", NULL },
{ "25", NULL },
{ "30", NULL },
{ "35", NULL },
{ "40", NULL },
{ "45", NULL },
{ "50", NULL },
{ "55", NULL },
{ "60", NULL },
{ "65", NULL },
{ "70", NULL },
{ "75", NULL },
{ "80", NULL },
{ "85", NULL },
{ "90", NULL },
{ "95", NULL },
{ "100", NULL },
{ "105", NULL },
{ "110", NULL },
{ "115", NULL },
{ "120", NULL },
{ NULL, NULL },
},
"100"
},
{
"vbam_tilt_sensitivity",
"Sensor Sensitivity (Tilt) (%)",
"Default bind is right analog. Used to adjust sensitivity level for gyro-enabled games.",
{
{ "10", NULL },
{ "15", NULL },
{ "20", NULL },
{ "25", NULL },
{ "30", NULL },
{ "35", NULL },
{ "40", NULL },
{ "45", NULL },
{ "50", NULL },
{ "55", NULL },
{ "60", NULL },
{ "65", NULL },
{ "70", NULL },
{ "75", NULL },
{ "80", NULL },
{ "85", NULL },
{ "90", NULL },
{ "95", NULL },
{ "100", NULL },
{ "105", NULL },
{ "110", NULL },
{ "115", NULL },
{ "120", NULL },
{ NULL, NULL },
},
"100"
},
{
"vbam_swap_astick",
"Swap Left/Right Analog",
"Swaps left and right analog stick function for gyro and tilt.",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"disabled"
},
{
"vbam_sound_1",
"Sound channel 1",
"Enables or disables tone & sweep sound channel.",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"enabled"
},
{
"vbam_sound_2",
"Sound channel 2",
"Enables or disables tone sound channel.",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"enabled"
},
{
"vbam_sound_3",
"Sound channel 3",
"Enables or disables wave output sound channel.",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"enabled"
},
{
"vbam_sound_4",
"Sound channel 4",
"Enables or disables noise audio channel.",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"enabled"
},
{
"vbam_sound_5",
"Sound DMA channel A",
"Enables or disables DMA sound channel A.",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"enabled"
},
{
"vbam_sound_6",
"Sound DMA channel B",
"Enables or disables DMA sound channel B.",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"enabled"
},
{
"vbam_layer_1",
"Show background layer 1",
"Shows or hides background layer 1.",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"enabled"
},
{
"vbam_layer_2",
"Show background layer 2",
"Shows or hides background layer 2.",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"enabled"
},
{
"vbam_layer_3",
"Show background layer 3",
"Shows or hides background layer 3.",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"enabled"
},
{
"vbam_layer_4",
"Show background layer 4",
"Shows or hides background layer 4.",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"enabled"
},
{
"vbam_layer_5",
"Show sprite layer",
"Shows or hides sprite layer.",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"enabled"
},
{
"vbam_layer_6",
"Show window layer 1",
"Shows or hides window layer 1.",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"enabled"
},
{
"vbam_layer_7",
"Show window layer 2",
"Shows or hides window layer 2.",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"enabled"
},
{
"vbam_layer_8",
"Show sprite window layer",
"Shows or hides sprite window layer.",
{
{ "disabled", NULL },
{ "enabled", NULL },
{ NULL, NULL },
},
"enabled"
},
{ NULL, NULL, NULL, {{0}}, NULL }
};
/* RETRO_LANGUAGE_JAPANESE */
/* RETRO_LANGUAGE_FRENCH */
/* RETRO_LANGUAGE_SPANISH */
/* RETRO_LANGUAGE_GERMAN */
/* RETRO_LANGUAGE_ITALIAN */
/* RETRO_LANGUAGE_DUTCH */
/* RETRO_LANGUAGE_PORTUGUESE_BRAZIL */
/* RETRO_LANGUAGE_PORTUGUESE_PORTUGAL */
/* RETRO_LANGUAGE_RUSSIAN */
/* RETRO_LANGUAGE_KOREAN */
/* RETRO_LANGUAGE_CHINESE_TRADITIONAL */
/* RETRO_LANGUAGE_CHINESE_SIMPLIFIED */
/* RETRO_LANGUAGE_ESPERANTO */
/* RETRO_LANGUAGE_POLISH */
/* RETRO_LANGUAGE_VIETNAMESE */
/* RETRO_LANGUAGE_ARABIC */
/* RETRO_LANGUAGE_GREEK */
/* RETRO_LANGUAGE_TURKISH */
/*
********************************
* Language Mapping
********************************
*/
struct retro_core_option_definition *option_defs_intl[RETRO_LANGUAGE_LAST] = {
option_defs_us, /* RETRO_LANGUAGE_ENGLISH */
NULL, /* RETRO_LANGUAGE_JAPANESE */
NULL, /* RETRO_LANGUAGE_FRENCH */
NULL, /* RETRO_LANGUAGE_SPANISH */
NULL, /* RETRO_LANGUAGE_GERMAN */
NULL, /* RETRO_LANGUAGE_ITALIAN */
NULL, /* RETRO_LANGUAGE_DUTCH */
NULL, /* RETRO_LANGUAGE_PORTUGUESE_BRAZIL */
NULL, /* RETRO_LANGUAGE_PORTUGUESE_PORTUGAL */
NULL, /* RETRO_LANGUAGE_RUSSIAN */
NULL, /* RETRO_LANGUAGE_KOREAN */
NULL, /* RETRO_LANGUAGE_CHINESE_TRADITIONAL */
NULL, /* RETRO_LANGUAGE_CHINESE_SIMPLIFIED */
NULL, /* RETRO_LANGUAGE_ESPERANTO */
NULL, /* RETRO_LANGUAGE_POLISH */
NULL, /* RETRO_LANGUAGE_VIETNAMESE */
NULL, /* RETRO_LANGUAGE_ARABIC */
NULL, /* RETRO_LANGUAGE_GREEK */
NULL, /* RETRO_LANGUAGE_TURKISH */
};
/*
********************************
* Functions
********************************
*/
/* Handles configuration/setting of core options.
* Should only be called inside retro_set_environment().
* > We place the function body in the header to avoid the
* necessity of adding more .c files (i.e. want this to
* be as painless as possible for core devs)
*/
static INLINE void libretro_set_core_options(retro_environment_t environ_cb)
{
unsigned version = 0;
if (!environ_cb)
return;
if (environ_cb(RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION, &version) && (version == 1))
{
struct retro_core_options_intl core_options_intl;
unsigned language = 0;
core_options_intl.us = option_defs_us;
core_options_intl.local = NULL;
if (environ_cb(RETRO_ENVIRONMENT_GET_LANGUAGE, &language) &&
(language < RETRO_LANGUAGE_LAST) && (language != RETRO_LANGUAGE_ENGLISH))
core_options_intl.local = option_defs_intl[language];
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_INTL, &core_options_intl);
}
else
{
size_t i;
size_t num_options = 0;
struct retro_variable *variables = NULL;
char **values_buf = NULL;
/* Determine number of options */
while (true)
{
if (option_defs_us[num_options].key)
num_options++;
else
break;
}
/* Allocate arrays */
variables = (struct retro_variable *)calloc(num_options + 1, sizeof(struct retro_variable));
values_buf = (char **)calloc(num_options, sizeof(char *));
if (!variables || !values_buf)
goto error;
/* Copy parameters from option_defs_us array */
for (i = 0; i < num_options; i++)
{
const char *key = option_defs_us[i].key;
const char *desc = option_defs_us[i].desc;
const char *default_value = option_defs_us[i].default_value;
struct retro_core_option_value *values = option_defs_us[i].values;
size_t buf_len = 3;
size_t default_index = 0;
values_buf[i] = NULL;
if (desc)
{
size_t num_values = 0;
/* Determine number of values */
while (true)
{
if (values[num_values].value)
{
/* Check if this is the default value */
if (default_value)
if (strcmp(values[num_values].value, default_value) == 0)
default_index = num_values;
buf_len += strlen(values[num_values].value);
num_values++;
}
else
break;
}
/* Build values string */
if (num_values > 1)
{
size_t j;
buf_len += num_values - 1;
buf_len += strlen(desc);
values_buf[i] = (char *)calloc(buf_len, sizeof(char));
if (!values_buf[i])
goto error;
strcpy(values_buf[i], desc);
strcat(values_buf[i], "; ");
/* Default value goes first */
strcat(values_buf[i], values[default_index].value);
/* Add remaining values */
for (j = 0; j < num_values; j++)
{
if (j != default_index)
{
strcat(values_buf[i], "|");
strcat(values_buf[i], values[j].value);
}
}
}
}
variables[i].key = key;
variables[i].value = values_buf[i];
}
/* Set variables */
environ_cb(RETRO_ENVIRONMENT_SET_VARIABLES, variables);
error:
/* Clean up */
if (values_buf)
{
for (i = 0; i < num_options; i++)
{
if (values_buf[i])
{
free(values_buf[i]);
values_buf[i] = NULL;
}
}
free(values_buf);
values_buf = NULL;
}
if (variables)
{
free(variables);
variables = NULL;
}
}
}
#ifdef __cplusplus
}
#endif
#endif