Merge branch 'spice2x' into spice22x
This commit is contained in:
+320
-70
@@ -17,7 +17,6 @@ static const std::vector<std::string> CATEGORY_ORDER_BASIC = {
|
||||
"Game Options",
|
||||
"Common",
|
||||
"Network",
|
||||
"Overlay",
|
||||
"Graphics (Common)",
|
||||
"Graphics (Full Screen)",
|
||||
"Graphics (Windowed)",
|
||||
@@ -26,35 +25,42 @@ static const std::vector<std::string> CATEGORY_ORDER_BASIC = {
|
||||
|
||||
static const std::vector<std::string> CATEGORY_ORDER_ADVANCED = {
|
||||
"Game Options (Advanced)",
|
||||
"Overlay",
|
||||
"Network (Advanced)",
|
||||
"Performance",
|
||||
"Miscellaneous",
|
||||
"Paths",
|
||||
"Touch Parameters",
|
||||
"I/O Options",
|
||||
"NFC Card Readers",
|
||||
};
|
||||
static const std::vector<std::string> CATEGORY_ORDER_DEV = {
|
||||
"Network Adapters",
|
||||
"Path Overrides",
|
||||
"Network (Development)",
|
||||
"Audio (Hacks)",
|
||||
"I/O Modules",
|
||||
"Development",
|
||||
"Debug Log",
|
||||
};
|
||||
static const std::vector<std::string> CATEGORY_ORDER_NONE = {
|
||||
""
|
||||
};
|
||||
|
||||
bool launcher::USE_CMD_OVERRIDE = false;
|
||||
|
||||
/*
|
||||
* Option Definitions
|
||||
* Be aware that the order must be the same as in the enum launcher::Options!
|
||||
*/
|
||||
static const std::vector<OptionDefinition> OPTION_DEFINITIONS = {
|
||||
{
|
||||
.title = "Game Executable",
|
||||
.title = "Override Game Executable & Disable Hooks",
|
||||
.name = "exec",
|
||||
.desc = "Path to the game DLL file",
|
||||
.desc = "Path to the game DLL file.\n\n"
|
||||
"This option is typically not needed; leave it empty to allow spice to auto-detect your game.\n\n"
|
||||
"WARNING: this option also disables all game-specific hooks and turns off most I/O modules!",
|
||||
.type = OptionType::Text,
|
||||
.setting_name = "*.dll",
|
||||
.category = "Paths",
|
||||
.category = "Path Overrides",
|
||||
},
|
||||
{
|
||||
.title = "Open Configurator",
|
||||
@@ -81,6 +87,7 @@ static const std::vector<OptionDefinition> OPTION_DEFINITIONS = {
|
||||
.category = "Network",
|
||||
},
|
||||
{
|
||||
// ServiceURL
|
||||
.title = "EA Service URL",
|
||||
.name = "url",
|
||||
.desc = "Sets a custom service URL override",
|
||||
@@ -142,6 +149,7 @@ static const std::vector<OptionDefinition> OPTION_DEFINITIONS = {
|
||||
.category = "Graphics (Windowed)",
|
||||
},
|
||||
{
|
||||
// InjectHook
|
||||
.title = "Inject DLL Hooks",
|
||||
.name = "k",
|
||||
.desc = "Multiple files are allowed; use multiple -k flags, or in SpiceCfg, separate by "
|
||||
@@ -152,6 +160,7 @@ static const std::vector<OptionDefinition> OPTION_DEFINITIONS = {
|
||||
.category = "Common",
|
||||
},
|
||||
{
|
||||
// EarlyInjectHook
|
||||
.title = "Inject Early DLL Hooks",
|
||||
.name = "z",
|
||||
.desc = "Equivalent to 'Inject DLL Hooks' option, but ensures hooks are injected before "
|
||||
@@ -263,7 +272,7 @@ static const std::vector<OptionDefinition> OPTION_DEFINITIONS = {
|
||||
.name = "nolegacy",
|
||||
.desc = "Disables legacy key activation in-game.",
|
||||
.type = OptionType::Bool,
|
||||
.category = "Miscellaneous",
|
||||
.category = "I/O Options",
|
||||
},
|
||||
{
|
||||
.title = "Discord Rich Presence",
|
||||
@@ -305,28 +314,29 @@ static const std::vector<OptionDefinition> OPTION_DEFINITIONS = {
|
||||
.desc = "This is NOT the EA service URL; use -url for that. "
|
||||
"Force the use of an adapter with the specified network. Must also provide -subnet",
|
||||
.type = OptionType::Text,
|
||||
.category = "Network Adapters",
|
||||
.category = "Network (Development)",
|
||||
.sensitive = true,
|
||||
},
|
||||
{
|
||||
.title = "Preferred NetAdapter Subnet",
|
||||
.name = "subnet",
|
||||
.desc = "Force the use of an adapter with the specified subnet. Must also provide -network",
|
||||
.type = OptionType::Text,
|
||||
.category = "Network Adapters",
|
||||
.category = "Network (Development)",
|
||||
},
|
||||
{
|
||||
.title = "Disable Network Fixes",
|
||||
.name = "netfixdisable",
|
||||
.desc = "Force disables network fixes",
|
||||
.type = OptionType::Bool,
|
||||
.category = "Network Adapters",
|
||||
.category = "Network (Development)",
|
||||
},
|
||||
{
|
||||
.title = "HTTP/1.1",
|
||||
.name = "http11",
|
||||
.desc = "Sets EA3 http11 value",
|
||||
.type = OptionType::Enum,
|
||||
.category = "Network (Advanced)",
|
||||
.category = "Network (Development)",
|
||||
.elements = {{"0", "Off"}, {"1", "On"}},
|
||||
},
|
||||
{
|
||||
@@ -334,7 +344,7 @@ static const std::vector<OptionDefinition> OPTION_DEFINITIONS = {
|
||||
.name = "ssldisable",
|
||||
.desc = "Prevents the SSL protocol from being registered",
|
||||
.type = OptionType::Bool,
|
||||
.category = "Network (Advanced)",
|
||||
.category = "Network (Development)",
|
||||
},
|
||||
{
|
||||
.title = "URL Slash",
|
||||
@@ -349,7 +359,7 @@ static const std::vector<OptionDefinition> OPTION_DEFINITIONS = {
|
||||
.name = "r",
|
||||
.desc = "Set custom SOFTID override",
|
||||
.type = OptionType::Text,
|
||||
.category = "Network (Advanced)",
|
||||
.category = "Development",
|
||||
.sensitive = true,
|
||||
},
|
||||
{
|
||||
@@ -544,10 +554,11 @@ static const std::vector<OptionDefinition> OPTION_DEFINITIONS = {
|
||||
.category = "Game Options",
|
||||
},
|
||||
{
|
||||
.title = "IIDX BIO2 Firmware",
|
||||
.title = "IIDX BIO2 Firmware Update",
|
||||
.name = "iidxbio2fw",
|
||||
.desc = "Enables BIO2 firmware updates",
|
||||
.desc = "Enables BIO2 firmware updates. WARNING - can cause semi-permanent change to your I/O board",
|
||||
.type = OptionType::Bool,
|
||||
.hidden = true,
|
||||
.game_name = "Beatmania IIDX",
|
||||
.category = "Game Options (Advanced)",
|
||||
},
|
||||
@@ -667,6 +678,7 @@ static const std::vector<OptionDefinition> OPTION_DEFINITIONS = {
|
||||
.category = "Game Options (Advanced)",
|
||||
},
|
||||
{
|
||||
// SDVXPrinterOutputPath
|
||||
.title = "SDVX Printer Output Path",
|
||||
.name = "printerpath",
|
||||
.desc = "Path to folder where images will be stored",
|
||||
@@ -691,9 +703,10 @@ static const std::vector<OptionDefinition> OPTION_DEFINITIONS = {
|
||||
.category = "Game Options (Advanced)",
|
||||
},
|
||||
{
|
||||
// SDVXPrinterOutputFormat
|
||||
.title = "SDVX Printer Output Format",
|
||||
.name = "printerformat",
|
||||
.desc = "Path to folder where images will be stored",
|
||||
.desc = "File format for printer output",
|
||||
.type = OptionType::Text,
|
||||
.setting_name = "(png/bmp/tga/jpg)",
|
||||
.game_name = "Sound Voltex",
|
||||
@@ -709,10 +722,13 @@ static const std::vector<OptionDefinition> OPTION_DEFINITIONS = {
|
||||
.category = "Game Options (Advanced)",
|
||||
},
|
||||
{
|
||||
.title = "SDVX Disable Cameras",
|
||||
.title = "SDVX Disable Cameras (DEPRECATED - no longer needed)",
|
||||
.name = "sdvxdisablecams",
|
||||
.desc = "Disables cameras",
|
||||
.desc = "This option does nothing.\n\n"
|
||||
"This option was used in the past to fix cameras in SDVX5 but this is no longer "
|
||||
"needed as camera check will always be skipped with a built-in patch.",
|
||||
.type = OptionType::Bool,
|
||||
.hidden = true,
|
||||
.game_name = "Sound Voltex",
|
||||
.category = "Game Options",
|
||||
},
|
||||
@@ -798,6 +814,15 @@ static const std::vector<OptionDefinition> OPTION_DEFINITIONS = {
|
||||
.game_name = "Dance Dance Revolution",
|
||||
.category = "Game Options",
|
||||
},
|
||||
{
|
||||
// DDRSkipCodecRegisteration
|
||||
.title = "DDR Skip Codec Registration",
|
||||
.name = "ddrnocodec",
|
||||
.desc = "Prevent automatic registration of codecs in the com folder",
|
||||
.type = OptionType::Bool,
|
||||
.game_name = "Dance Dance Revolution",
|
||||
.category = "Game Options (Advanced)",
|
||||
},
|
||||
{
|
||||
.title = "Force Load Pop'n Music Module",
|
||||
.name = "pnm",
|
||||
@@ -1025,7 +1050,7 @@ static const std::vector<OptionDefinition> OPTION_DEFINITIONS = {
|
||||
},
|
||||
{
|
||||
// LoadCCJModule
|
||||
.title = "Force Load Chase Chase Jokers",
|
||||
.title = "Force Load Chase Chase Jokers Module",
|
||||
.name = "ccj",
|
||||
.desc = "manually enable Chase Chase Jokers module",
|
||||
.type = OptionType::Bool,
|
||||
@@ -1034,7 +1059,7 @@ static const std::vector<OptionDefinition> OPTION_DEFINITIONS = {
|
||||
},
|
||||
{
|
||||
// LoadQKSModule
|
||||
.title = "Force Load QuizKnock STADIUM",
|
||||
.title = "Force Load QuizKnock STADIUM Module",
|
||||
.name = "qks",
|
||||
.desc = "manually enable QuizKnock STADIUM module",
|
||||
.type = OptionType::Bool,
|
||||
@@ -1043,16 +1068,25 @@ static const std::vector<OptionDefinition> OPTION_DEFINITIONS = {
|
||||
},
|
||||
{
|
||||
// LoadMFGModule
|
||||
.title = "Force Load Mahjong Fight Girl",
|
||||
.title = "Force Load Mahjong Fight Girl Module",
|
||||
.name = "mfg",
|
||||
.desc = "manually enable Mahjong Fight Girl module",
|
||||
.type = OptionType::Bool,
|
||||
.game_name = "Mahjong Fight Girl",
|
||||
.category = "Game Options (Advanced)",
|
||||
},
|
||||
{
|
||||
// LoadPCModule
|
||||
.title = "Force Load Polaris Chord Module",
|
||||
.name = "pc",
|
||||
.desc = "manually enable Polaris Chord module",
|
||||
.type = OptionType::Bool,
|
||||
.game_name = "Polaris Chord",
|
||||
.category = "Game Options (Advanced)",
|
||||
},
|
||||
{
|
||||
// LoadMusecaModule
|
||||
.title = "Force Load Museca",
|
||||
.title = "Force Load Museca Module",
|
||||
.name = "museca",
|
||||
.desc = "manually enable Museca module",
|
||||
.type = OptionType::Bool,
|
||||
@@ -1060,88 +1094,88 @@ static const std::vector<OptionDefinition> OPTION_DEFINITIONS = {
|
||||
.category = "Game Options (Advanced)",
|
||||
},
|
||||
{
|
||||
.title = "Modules Folder Path",
|
||||
.title = "Modules Folder Override",
|
||||
.name = "modules",
|
||||
.desc = "Sets a custom path to the modules folder",
|
||||
.type = OptionType::Text,
|
||||
.category = "Paths",
|
||||
.category = "Path Overrides",
|
||||
},
|
||||
{
|
||||
.title = "Screenshot Folder Path",
|
||||
.title = "Screenshot Folder Override",
|
||||
.name = "screenshotpath",
|
||||
.desc = "Sets a custom path to the screenshots folder",
|
||||
.type = OptionType::Text,
|
||||
.category = "Paths",
|
||||
.category = "Path Overrides",
|
||||
},
|
||||
{
|
||||
.title = "Configuration Path",
|
||||
.title = "Configuration Path Override",
|
||||
.name = "cfgpath",
|
||||
.desc = "Sets a custom file path for config file. Must be passed via the command line. "
|
||||
"If left empty, %appdata%\\spicetools.xml will be used",
|
||||
.type = OptionType::Text,
|
||||
.setting_name = "(default)",
|
||||
.category = "Paths",
|
||||
.category = "Path Overrides",
|
||||
.disabled = true,
|
||||
},
|
||||
{
|
||||
// ScreenResizeConfigPath
|
||||
.title = "Screen Resize Config Path",
|
||||
.title = "Screen Resize Config Path Override",
|
||||
.name = "resizecfgpath",
|
||||
.desc = "Sets a custom file path for screen resize config file. "
|
||||
"If left empty, %appdata%\\spice2x\\spicetools_screen_resize.json will be used",
|
||||
.type = OptionType::Text,
|
||||
.category = "Paths",
|
||||
.category = "Path Overrides",
|
||||
},
|
||||
{
|
||||
// PatchManagerConfigPath
|
||||
.title = "Patch Manager Config Path",
|
||||
.title = "Patch Manager Config Path Override",
|
||||
.name = "patchcfgpath",
|
||||
.desc = "Sets a custom file path for patch manager config file. Can be used to manage 'profiles' for auto-patches. "
|
||||
"If left empty, %appdata%\\spice2x\\spicetools_patch_manager.json will be used",
|
||||
.type = OptionType::Text,
|
||||
.category = "Paths",
|
||||
.category = "Path Overrides",
|
||||
},
|
||||
{
|
||||
.title = "Intel SDE Folder Path",
|
||||
.title = "Intel SDE",
|
||||
.name = "sde",
|
||||
.desc = "Path to Intel SDE kit path for automatic attaching",
|
||||
.type = OptionType::Text,
|
||||
.category = "Paths",
|
||||
.category = "Development",
|
||||
},
|
||||
{
|
||||
.title = "Path to ea3-config.xml",
|
||||
.title = "ea3-config.xml Override",
|
||||
.name = "e",
|
||||
.desc = "Sets a custom path to ea3-config.xml",
|
||||
.type = OptionType::Text,
|
||||
.category = "Paths",
|
||||
.category = "Path Overrides",
|
||||
},
|
||||
{
|
||||
.title = "Path to app-config.xml",
|
||||
.title = "app-config.xml Override",
|
||||
.name = "a",
|
||||
.desc = "Sets a custom path to app-config.xml",
|
||||
.type = OptionType::Text,
|
||||
.category = "Paths",
|
||||
.category = "Path Overrides",
|
||||
},
|
||||
{
|
||||
.title = "Path to avs-config.xml",
|
||||
.title = "avs-config.xml Override",
|
||||
.name = "v",
|
||||
.desc = "Sets a custom path to avs-config.xml",
|
||||
.type = OptionType::Text,
|
||||
.category = "Paths",
|
||||
.category = "Path Overrides",
|
||||
},
|
||||
{
|
||||
.title = "Path to bootstrap.xml",
|
||||
.title = "bootstrap.xml Override",
|
||||
.name = "b",
|
||||
.desc = "Sets a custom path to bootstrap.xml",
|
||||
.type = OptionType::Text,
|
||||
.category = "Paths",
|
||||
.category = "Path Overrides",
|
||||
},
|
||||
{
|
||||
.title = "Path to log.txt",
|
||||
.title = "log.txt Override",
|
||||
.name = "y",
|
||||
.desc = "Sets a custom path to log.txt",
|
||||
.type = OptionType::Text,
|
||||
.category = "Paths",
|
||||
.category = "Path Overrides",
|
||||
},
|
||||
{
|
||||
.title = "API TCP Port",
|
||||
@@ -1193,6 +1227,28 @@ static const std::vector<OptionDefinition> OPTION_DEFINITIONS = {
|
||||
.type = OptionType::Bool,
|
||||
.category = "API (Dev)",
|
||||
},
|
||||
{
|
||||
// APIScreenMirrorQuality
|
||||
.title = "API Screen Mirror Quality Override",
|
||||
.name = "apiscreenq",
|
||||
.desc = "JPEG compression level of mirrored images, overriding any client request. "
|
||||
"Value must be between 0 (poor quality) and 100 (best quality), inclusive. Default: 70",
|
||||
.type = OptionType::Integer,
|
||||
.setting_name = "(0-100)",
|
||||
.category = "SpiceCompanion and API",
|
||||
},
|
||||
{
|
||||
// APIScreenMirrorDivide
|
||||
.title = "API Screen Mirror Divide Override",
|
||||
.name = "apiscreendiv",
|
||||
.desc = "Divide value of mirrored images, overriding any client request. "
|
||||
"Divide of 1 means send every pixel, 2 means every other pixel, 3 means every third pixel, and so on; "
|
||||
"increasing the value drastically reduces transfer size at the cost of image quality. "
|
||||
"Value must be 1 or greater. Default: 1",
|
||||
.type = OptionType::Integer,
|
||||
.setting_name = "1",
|
||||
.category = "SpiceCompanion and API",
|
||||
},
|
||||
{
|
||||
.title = "Enable All IO Modules",
|
||||
.name = "io",
|
||||
@@ -1288,6 +1344,7 @@ static const std::vector<OptionDefinition> OPTION_DEFINITIONS = {
|
||||
.category = "Touch Parameters",
|
||||
},
|
||||
{
|
||||
// ICCAReaderPort
|
||||
.title = "ICCA Reader Port",
|
||||
.name = "reader",
|
||||
.desc = "Connects to and uses a ICCA on a given COM port",
|
||||
@@ -1364,11 +1421,12 @@ static const std::vector<OptionDefinition> OPTION_DEFINITIONS = {
|
||||
},
|
||||
},
|
||||
{
|
||||
// SextetStreamPort
|
||||
.title = "SextetStream Port",
|
||||
.name = "sextet",
|
||||
.desc = "Use a SextetStream device on a given COM port",
|
||||
.type = OptionType::Text,
|
||||
.category = "Miscellaneous",
|
||||
.category = "I/O Options",
|
||||
},
|
||||
{
|
||||
.title = "Enable BemaniTools 5 API",
|
||||
@@ -1469,7 +1527,7 @@ static const std::vector<OptionDefinition> OPTION_DEFINITIONS = {
|
||||
"you use a different backend instead of exclusive WASAPI).\n\n"
|
||||
"Check this if you want games to natively access your audio device",
|
||||
.type = OptionType::Bool,
|
||||
.category = "Audio",
|
||||
.category = "Audio (Hacks)",
|
||||
},
|
||||
{
|
||||
// spice2x_DisableVolumeHook
|
||||
@@ -1481,16 +1539,21 @@ static const std::vector<OptionDefinition> OPTION_DEFINITIONS = {
|
||||
"Default: off (prevent games from changing audio volume by hooking IAudioEndpointVolume).\n\n"
|
||||
"Check this if you want games to freely change your volume",
|
||||
.type = OptionType::Bool,
|
||||
.category = "Audio",
|
||||
.category = "Audio (Hacks)",
|
||||
},
|
||||
{
|
||||
.title = "Spice Audio Hook Backend",
|
||||
.name = "audiobackend",
|
||||
.desc = "Selects the audio backend to use when spice audio hook is enabled, overriding exclusive WASAPI. "
|
||||
" Does nothing for games that do not output to exclusive WASAPI",
|
||||
"Does nothing for games that do not output to exclusive WASAPI",
|
||||
.type = OptionType::Enum,
|
||||
.category = "Audio",
|
||||
.elements = {{"asio", "ASIO"}, {"waveout", "waveOut"},{"pipewire", "Pipewire (Linux)"},{"none", "None"}},
|
||||
.elements = {
|
||||
{"asio", "ASIO"},
|
||||
{"waveout", "broken, do not use"},
|
||||
{"pipewire", "Pipewire (Linux)"},
|
||||
{"none", "None"}
|
||||
},
|
||||
},
|
||||
{
|
||||
.title = "Spice Audio Hook ASIO Driver ID",
|
||||
@@ -1506,7 +1569,7 @@ static const std::vector<OptionDefinition> OPTION_DEFINITIONS = {
|
||||
"This is automatically enabled when required and not normally needed",
|
||||
.type = OptionType::Bool,
|
||||
.hidden = true,
|
||||
.category = "Audio",
|
||||
.category = "Audio (Hacks)",
|
||||
},
|
||||
{
|
||||
// DelayBy5Seconds
|
||||
@@ -1559,11 +1622,11 @@ static const std::vector<OptionDefinition> OPTION_DEFINITIONS = {
|
||||
.elements = {{"0", "90 (CW)"}, {"1", "270 (CCW)"}},
|
||||
},
|
||||
{
|
||||
.title = "Log Level",
|
||||
.title = "AVS Log Level",
|
||||
.name = "loglevel",
|
||||
.desc = "Set the level of detail that gets written to the log",
|
||||
.desc = "Set the level of detail for AVS log messages written to the log. Does not affect logging from spice",
|
||||
.type = OptionType::Enum,
|
||||
.category = "Performance",
|
||||
.category = "Debug Log",
|
||||
.elements = {{"fatal", ""}, {"warning", ""}, {"info", ""}, {"misc", ""}, {"all", ""}, {"disable", ""}},
|
||||
},
|
||||
{
|
||||
@@ -1571,14 +1634,14 @@ static const std::vector<OptionDefinition> OPTION_DEFINITIONS = {
|
||||
.name = "automap",
|
||||
.desc = "Enable automap in patch configuration",
|
||||
.type = OptionType::Bool,
|
||||
.category = "Development",
|
||||
.category = "Network (Development)",
|
||||
},
|
||||
{
|
||||
.title = "EA Netdump",
|
||||
.name = "netdump",
|
||||
.desc = "Enable automap in network dumping configuration",
|
||||
.type = OptionType::Bool,
|
||||
.category = "Development",
|
||||
.category = "Network (Development)",
|
||||
},
|
||||
{
|
||||
.title = "Discord RPC AppID Override",
|
||||
@@ -1592,35 +1655,45 @@ static const std::vector<OptionDefinition> OPTION_DEFINITIONS = {
|
||||
.name = "logblock",
|
||||
.desc = "Slower but safer logging used for debugging",
|
||||
.type = OptionType::Bool,
|
||||
.category = "Development",
|
||||
.category = "Debug Log",
|
||||
},
|
||||
{
|
||||
.title = "Debug CreateFile",
|
||||
.name = "createfiledebug",
|
||||
.desc = "Outputs CreateFile debug prints",
|
||||
.type = OptionType::Bool,
|
||||
.category = "Development",
|
||||
.category = "Debug Log",
|
||||
},
|
||||
{
|
||||
.title = "Verbose Graphics Logging",
|
||||
.name = "graphicsverbose",
|
||||
.desc = "Enable the verbose logging of graphics hook code",
|
||||
.type = OptionType::Bool,
|
||||
.category = "Development",
|
||||
.category = "Debug Log",
|
||||
},
|
||||
{
|
||||
.title = "Verbose AVS Logging",
|
||||
.name = "avsverbose",
|
||||
.desc = "Enable the verbose logging of AVS filesystem functions",
|
||||
.type = OptionType::Bool,
|
||||
.category = "Development",
|
||||
.category = "Debug Log",
|
||||
},
|
||||
{
|
||||
// AllowEA3Verbose
|
||||
.title = "Allow EA3 Verbose Debug Logging",
|
||||
.name = "ea3verbose",
|
||||
.desc = "This option is only useful for network developers; leave this OFF.\n\n"
|
||||
"By default, ea3/debug/verbose node is removed by spice to prevent exposing PCBID in the logs. "
|
||||
"When this is enabled, ea3/debug/verbose node in the XML will be kept and exposed to the game",
|
||||
.type = OptionType::Bool,
|
||||
.category = "Debug Log",
|
||||
},
|
||||
{
|
||||
.title = "Disable Colored Output",
|
||||
.name = "nocolor",
|
||||
.desc = "Disable terminal colors for log outputs to console",
|
||||
.type = OptionType::Bool,
|
||||
.category = "Development",
|
||||
.category = "Debug Log",
|
||||
},
|
||||
{
|
||||
.title = "Disable ACP Hook",
|
||||
@@ -1655,7 +1728,7 @@ static const std::vector<OptionDefinition> OPTION_DEFINITIONS = {
|
||||
.name = "pebprint",
|
||||
.desc = "Prints PEB on startup to console",
|
||||
.type = OptionType::Bool,
|
||||
.category = "Development",
|
||||
.category = "Debug Log",
|
||||
},
|
||||
{
|
||||
// DumpSystemInfo
|
||||
@@ -1663,7 +1736,7 @@ static const std::vector<OptionDefinition> OPTION_DEFINITIONS = {
|
||||
.name = "sysdump",
|
||||
.desc = "Print system information to the log on startup. Default: basic",
|
||||
.type = OptionType::Enum,
|
||||
.category = "Development",
|
||||
.category = "Debug Log",
|
||||
.elements = {
|
||||
{"none", "Nothing"},
|
||||
{"basic", "OS, CPU, SMBIOS, GPU"},
|
||||
@@ -1748,6 +1821,35 @@ static const std::vector<OptionDefinition> OPTION_DEFINITIONS = {
|
||||
.game_name = "Mahjong Fight Girl",
|
||||
.category = "Game Options (Advanced)"
|
||||
},
|
||||
{
|
||||
// PCArgs
|
||||
.title = "PC Arguments Override",
|
||||
.name = "pcargs",
|
||||
.desc = "Command line arguments passed to the game.",
|
||||
.type = OptionType::Text,
|
||||
.setting_name = "",
|
||||
.game_name = "Polaris Chord",
|
||||
.category = "Game Options (Advanced)",
|
||||
},
|
||||
{
|
||||
// PCNoIO
|
||||
.title = "PC Disable IO Emulation",
|
||||
.name = "pcnoio",
|
||||
.desc = "Disables BI2X hooks for PC",
|
||||
.type = OptionType::Bool,
|
||||
.setting_name = "",
|
||||
.game_name = "Polaris Chord",
|
||||
.category = "Game Options (Advanced)"
|
||||
},
|
||||
{
|
||||
// PCKnobMode
|
||||
.title = "PC Fader Knobs Mode",
|
||||
.name = "pcknobs",
|
||||
.desc = "Allows SDVX knobs and IIDX turntables to be bound as Polaris Chord faders",
|
||||
.type = OptionType::Bool,
|
||||
.game_name = "Polaris Chord",
|
||||
.category = "Game Options",
|
||||
},
|
||||
{
|
||||
// spice2x_LightsOverallBrightness
|
||||
.title = "Lights Brightness Adjustment",
|
||||
@@ -1842,6 +1944,24 @@ static const std::vector<OptionDefinition> OPTION_DEFINITIONS = {
|
||||
.game_name = "Beatmania IIDX",
|
||||
.category = "Graphics (Windowed)",
|
||||
},
|
||||
{
|
||||
// IIDXWindowedSubscreenBorderless
|
||||
.title = "IIDX Windowed Subscreen Borderless",
|
||||
.name = "iidxwsubborderless",
|
||||
.desc = "Remove window decoration from windowed subscreen",
|
||||
.type = OptionType::Bool,
|
||||
.game_name = "Beatmania IIDX",
|
||||
.category = "Graphics (Windowed)",
|
||||
},
|
||||
{
|
||||
// IIDXWindowedSubscreenAlwaysOnTop
|
||||
.title = "IIDX Windowed Subscreen Always On Top",
|
||||
.name = "iidxwsubtop",
|
||||
.desc = "Keep windowed subscreen on top",
|
||||
.type = OptionType::Bool,
|
||||
.game_name = "Beatmania IIDX",
|
||||
.category = "Graphics (Windowed)",
|
||||
},
|
||||
{
|
||||
// spice2x_JubeatLegacyTouch
|
||||
.title = "JB Legacy Touch Targets",
|
||||
@@ -1875,7 +1995,7 @@ static const std::vector<OptionDefinition> OPTION_DEFINITIONS = {
|
||||
.desc = "For certain buggy ASIO drivers, force unload of ASIO driver when audio stream stops. "
|
||||
"Used for working around ASIO drivers that lock up after force quitting games",
|
||||
.type = OptionType::Bool,
|
||||
.category = "Audio",
|
||||
.category = "Audio (Hacks)",
|
||||
},
|
||||
{
|
||||
// spice2x_IIDXNoESpec
|
||||
@@ -2129,6 +2249,23 @@ static const std::vector<OptionDefinition> OPTION_DEFINITIONS = {
|
||||
.setting_name = "20",
|
||||
.category = "I/O Options",
|
||||
},
|
||||
{
|
||||
// InputRequiresFocus
|
||||
.title = "Input Requires Focus",
|
||||
.name = "inputfocus",
|
||||
.desc =
|
||||
"Determine input behavior when game window is not in focus.\n\n"
|
||||
"never: allow input regardless of focus\n"
|
||||
"naive (default): only naive bindings check for window focus, rawinput binds are always allowed\n"
|
||||
"always: only process input when window is in focus",
|
||||
.type = OptionType::Enum,
|
||||
.category = "I/O Options",
|
||||
.elements = {
|
||||
{"never", ""},
|
||||
{"naive", ""},
|
||||
{"always", ""},
|
||||
},
|
||||
},
|
||||
{
|
||||
// NostalgiaPoke
|
||||
.title = "Nost Screen Poke",
|
||||
@@ -2153,6 +2290,107 @@ static const std::vector<OptionDefinition> OPTION_DEFINITIONS = {
|
||||
{"2", "double buffer"},
|
||||
{"3", "triple buffer"},
|
||||
},
|
||||
},
|
||||
{
|
||||
// SDVXWindowedSubscreenSize
|
||||
.title = "SDVX Windowed Subscreen Size",
|
||||
.name = "sdvxwsubsize",
|
||||
.desc = "Size of the subscreen window. Defaults to (1920,1080)",
|
||||
.type = OptionType::Text,
|
||||
.setting_name = "1920,1080",
|
||||
.game_name = "Sound Voltex",
|
||||
.category = "Graphics (Windowed)",
|
||||
},
|
||||
{
|
||||
// SDVXWindowedSubscreenPosition
|
||||
.title = "SDVX Windowed Subscreen Position",
|
||||
.name = "sdvxwsubpos",
|
||||
.desc = "Initial position of the subscreen window. Defaults to (0,0)",
|
||||
.type = OptionType::Text,
|
||||
.setting_name = "0,0",
|
||||
.game_name = "Sound Voltex",
|
||||
.category = "Graphics (Windowed)",
|
||||
},
|
||||
{
|
||||
// SDVXWindowedSubscreenBorderless
|
||||
.title = "SDVX Windowed Subscreen Borderless",
|
||||
.name = "sdvxwsubborderless",
|
||||
.desc = "Remove window decoration from windowed subscreen",
|
||||
.type = OptionType::Bool,
|
||||
.game_name = "Sound Voltex",
|
||||
.category = "Graphics (Windowed)",
|
||||
},
|
||||
{
|
||||
// SDVXWindowedSubscreenAlwaysOnTop
|
||||
.title = "SDVX Windowed Subscreen Always On Top",
|
||||
.name = "sdvxwsubtop",
|
||||
.desc = "Keep windowed subscreen on top",
|
||||
.type = OptionType::Bool,
|
||||
.game_name = "Sound Voltex",
|
||||
.category = "Graphics (Windowed)",
|
||||
},
|
||||
{
|
||||
// LovePlusCamEnable
|
||||
.title = "LovePlus Camera Enable",
|
||||
.name = "lovepluscam",
|
||||
.desc = "Allow game to access camera; camera must be compatible with game",
|
||||
.type = OptionType::Bool,
|
||||
.game_name = "LovePlus",
|
||||
.category = "Game Options",
|
||||
},
|
||||
{
|
||||
// LovePlusPrinterOutputPath
|
||||
.title = "LovePlus Printer Output Path",
|
||||
.name = "lpprinterpath",
|
||||
.desc = "Path to folder where images will be stored",
|
||||
.type = OptionType::Text,
|
||||
.game_name = "LovePlus",
|
||||
.category = "Game Options (Advanced)",
|
||||
},
|
||||
{
|
||||
.title = "LovePlus Printer Output Clear",
|
||||
.name = "lpprinterclear",
|
||||
.desc = "Clean up saved images in the output directory on startup",
|
||||
.type = OptionType::Bool,
|
||||
.game_name = "LovePlus",
|
||||
.category = "Game Options (Advanced)",
|
||||
},
|
||||
{
|
||||
.title = "LovePlus Printer Output Overwrite",
|
||||
.name = "lpprinteroverwrite",
|
||||
.desc = "Always overwrite the same file in output directory",
|
||||
.type = OptionType::Bool,
|
||||
.game_name = "LovePlus",
|
||||
.category = "Game Options (Advanced)",
|
||||
},
|
||||
{
|
||||
// LovePlusPrinterOutputFormat
|
||||
.title = "LovePlus Printer Output Format",
|
||||
.name = "lpprinterformat",
|
||||
.desc = "File format for printer output",
|
||||
.type = OptionType::Text,
|
||||
.setting_name = "(png/bmp/tga/jpg)",
|
||||
.game_name = "LovePlus",
|
||||
.category = "Game Options (Advanced)",
|
||||
},
|
||||
{
|
||||
.title = "LovePlus Printer JPG Quality",
|
||||
.name = "lpprinterjpgquality",
|
||||
.desc = "Quality setting in percent if JPG format is used",
|
||||
.type = OptionType::Integer,
|
||||
.setting_name = "(0-100)",
|
||||
.game_name = "LovePlus",
|
||||
.category = "Game Options (Advanced)",
|
||||
},
|
||||
{
|
||||
// OptionConflictResolution
|
||||
.title = "Command Line Args Override",
|
||||
.name = "cmdoverride",
|
||||
.desc = "By default, option values in spicecfg take precedence over command-line args, for legacy compat.\n"
|
||||
"When this is specified in command line, command-line args take precedence instead",
|
||||
.type = OptionType::Bool,
|
||||
.category = "Development",
|
||||
.disabled = true,
|
||||
}
|
||||
};
|
||||
|
||||
@@ -2234,7 +2472,7 @@ std::unique_ptr<std::vector<Option>> launcher::parse_options(int argc, char *arg
|
||||
} else {
|
||||
// validate it is an integer
|
||||
try {
|
||||
std::stoull(argv[i], nullptr, 16);
|
||||
auto _ = std::stoull(argv[i], nullptr, 16);
|
||||
} catch (const std::exception &ex) {
|
||||
log_fatal("options", "parameter for -{} is not a hex number: {}", alias, argv[i]);
|
||||
}
|
||||
@@ -2335,12 +2573,25 @@ std::vector<Option> launcher::merge_options(
|
||||
auto &new_option = merged.emplace_back(option.get_definition(), "");
|
||||
new_option.disabled = true;
|
||||
|
||||
for (auto &value : option.values()) {
|
||||
new_option.value_add(value);
|
||||
}
|
||||
for (auto &value : override.values()) {
|
||||
new_option.value_add(value);
|
||||
if (USE_CMD_OVERRIDE) {
|
||||
// command-line arguments take precedence (opt-in)
|
||||
for (auto &value : override.values()) {
|
||||
new_option.value_add(value);
|
||||
}
|
||||
for (auto &value : option.values()) {
|
||||
new_option.value_add(value);
|
||||
}
|
||||
} else {
|
||||
// spicecfg options take precedence (default)
|
||||
// this sucks, but it's the default for legacy spicetools compat
|
||||
for (auto &value : option.values()) {
|
||||
new_option.value_add(value);
|
||||
}
|
||||
for (auto &value : override.values()) {
|
||||
new_option.value_add(value);
|
||||
}
|
||||
}
|
||||
new_option.conflicting = true;
|
||||
} else {
|
||||
auto &new_option = merged.emplace_back(override.get_definition(), "");
|
||||
new_option.disabled = true;
|
||||
@@ -2356,7 +2607,6 @@ std::vector<Option> launcher::merge_options(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return merged;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user