## Link to GitHub Issue or related Pull Request, if one exists User reported ## Description of change Sometimes the game moved the main window after `CreateWindowExA` returned but before D3D initialization called `graphics_capture_initial_window`. During this gap, `GRAPHICS_HOOKED_WINDOW` was not set, so the placement hooks could not identify the main window and preserve its monitor override. GITADORA main, LEFT, and RIGHT windows are now registered immediately after creation so later placement calls cannot undo their overrides. This also adds `-gdwsmallsize` and `-gdwsmallpos` for explicitly setting the SMALL window size and position. Explicit values override the corresponding monitor-derived geometry, allowing the SMALL window's 10:16 aspect ratio to be preserved instead of stretching it to fill a monitor. ## Testing
357 lines
11 KiB
C++
357 lines
11 KiB
C++
#pragma once
|
|
|
|
#include <memory>
|
|
#include <vector>
|
|
|
|
#include "cfg/option.h"
|
|
|
|
namespace launcher {
|
|
|
|
// options list - order matters
|
|
namespace Options {
|
|
enum {
|
|
GameExecutable,
|
|
OpenConfigurator,
|
|
OpenKFControl,
|
|
EAmusementEmulation,
|
|
ServiceURL,
|
|
PCBID,
|
|
Player1Card,
|
|
Player2Card,
|
|
Player1PinMacro,
|
|
Player2PinMacro,
|
|
AutoPinMacroTrigger0,
|
|
AutoPinMacroTrigger1,
|
|
WindowedMode,
|
|
InjectHook,
|
|
EarlyInjectHook,
|
|
ExecuteScript,
|
|
CaptureCursor,
|
|
ShowCursor,
|
|
PrimaryMonitor,
|
|
DXDisplayAdapter,
|
|
GraphicsForceSingleAdapter,
|
|
GraphicsForceRefresh,
|
|
FullscreenResolution,
|
|
FullscreenOrientationFlip,
|
|
FullscreenSubResolution,
|
|
FullscreenSubRefreshRate,
|
|
Graphics9On12,
|
|
spice2x_Dx9On12,
|
|
NoLegacy,
|
|
RichPresence,
|
|
DiscordAppID,
|
|
SmartEAmusement,
|
|
EAmusementMaintenance,
|
|
spice2x_EAmusementMaintenance,
|
|
AdapterNetwork,
|
|
AdapterSubnet,
|
|
DisableNetworkFixes,
|
|
HTTP11,
|
|
DisableSSL,
|
|
URLSlash,
|
|
SOFTID,
|
|
VREnable,
|
|
DisableOverlay,
|
|
OverlayKeyboardNavigation,
|
|
OverlayScaling,
|
|
NotificationPosition,
|
|
spice2x_FpsAutoShow,
|
|
spice2x_FpsOpposite,
|
|
FpsLocation,
|
|
spice2x_SubScreenAutoShow,
|
|
spice2x_IOPanelAutoShow,
|
|
spice2x_KeypadAutoShow,
|
|
LoadIIDXModule,
|
|
IIDXCameraOrderFlip,
|
|
IIDXDisableCameras,
|
|
IIDXCabCamAccess,
|
|
IIDXCamHook,
|
|
IIDXCamHookRatio,
|
|
IIDXCamHookOverride,
|
|
IIDXCamHookTopId,
|
|
IIDXCamHookFrontId,
|
|
IIDXSoundOutputDevice,
|
|
IIDXAsioDriver,
|
|
IIDXBIO2FW,
|
|
IIDXTDJMode,
|
|
spice2x_IIDXDigitalTTSensitivity,
|
|
IIDXDigitalTTSocd,
|
|
spice2x_IIDXLDJForce720p,
|
|
spice2x_IIDXTDJSubSize,
|
|
spice2x_IIDXLEDFontSize,
|
|
spice2x_IIDXLEDColor,
|
|
spice2x_IIDXLEDPos,
|
|
IIDXLEDBorderless,
|
|
LoadSoundVoltexModule,
|
|
SDVXForce720p,
|
|
SDVXPrinterEmulation,
|
|
SDVXPrinterOutputPath,
|
|
SDVXPrinterOutputClear,
|
|
SDVXPrinterOutputOverwrite,
|
|
SDVXPrinterOutputFormat,
|
|
SDVXPrinterJPGQuality,
|
|
SDVXDisableCameras,
|
|
SDVXNativeTouch,
|
|
spice2x_SDVXSubRedraw,
|
|
spice2x_SDVXDigitalKnobSensitivity,
|
|
SDVXDigitalKnobSocd,
|
|
spice2x_SDVXAsioDriver,
|
|
SDVXAsioTwoChannel,
|
|
SDVXDisableLive2D,
|
|
spice2x_SDVXSubPos,
|
|
SDVXSubMonitorOverride,
|
|
LoadDDRModule,
|
|
DDR43Mode,
|
|
DDRSkipCodecRegisteration,
|
|
LoadPopnMusicModule,
|
|
PopnMusicForceHDMode,
|
|
PopnMusicForceSDMode,
|
|
PopnNoSub,
|
|
PopnSubMonitorOverride,
|
|
PopnNativeTouch,
|
|
PopnSubRedraw,
|
|
LoadHelloPopnMusicModule,
|
|
LoadGitaDoraModule,
|
|
GitaDoraTwoChannelAudio,
|
|
GitaDoraCabinetType,
|
|
GitaDoraLefty,
|
|
GitaDoraWailHold,
|
|
GitaDoraPickAlgo,
|
|
GitaDoraSubOverlaySize,
|
|
GitaDoraArenaSingleWindow,
|
|
GitaDoraArenaWindowLayout,
|
|
GitaDoraArenaAsioDriver,
|
|
GitaDoraArenaRealtekAccess,
|
|
LoadJubeatModule,
|
|
LoadReflecBeatModule,
|
|
LoadShogikaiModule,
|
|
LoadBeatstreamModule,
|
|
LoadNostalgiaModule,
|
|
LoadDanceEvolutionModule,
|
|
LoadFutureTomTomModule,
|
|
LoadBBCModule,
|
|
LoadMetalGearArcadeModule,
|
|
LoadQuizMagicAcademyModule,
|
|
LoadRoadFighters3DModule,
|
|
LoadSteelChronicleModule,
|
|
LoadMahjongFightClubModule,
|
|
LoadScottoModule,
|
|
LoadDanceRushModule,
|
|
LoadWinningElevenModule,
|
|
LoadOtocaModule,
|
|
LoadLovePlusModule,
|
|
LoadChargeMachineModule,
|
|
LoadOngakuParadiseModule,
|
|
LoadBusouShinkiModule,
|
|
LoadCCJModule,
|
|
LoadQKSModule,
|
|
LoadMFGModule,
|
|
LoadPCModule,
|
|
LoadMusecaModule,
|
|
PathToModules,
|
|
ScreenshotFolder,
|
|
ConfigurationPath,
|
|
ScreenResizeConfigPath,
|
|
PatchManagerConfigPath,
|
|
IntelSDEFolder,
|
|
PathToEa3Config,
|
|
PathToAppConfig,
|
|
PathToAvsConfig,
|
|
PathToBootstrap,
|
|
PathToLog,
|
|
APITCPPort,
|
|
APIPassword,
|
|
APIVerboseLogging,
|
|
APISerialPort,
|
|
APISerialBaud,
|
|
APIPretty,
|
|
APIDebugMode,
|
|
APIScreenMirrorQuality,
|
|
APIScreenMirrorDivide,
|
|
EnableAllIOModules,
|
|
EnableACIOModule,
|
|
EnableICCAModule,
|
|
EnableDEVICEModule,
|
|
EnableEXTDEVModule,
|
|
EnableAMI2000Module,
|
|
EnableSCIUNITModule,
|
|
EnableDevicePassthrough,
|
|
ForceWinTouch,
|
|
ForceTouchEmulation,
|
|
InvertTouchCoordinates,
|
|
RawInputTouchAspectRatio,
|
|
DisableTouchCardInsert,
|
|
spice2x_TouchCardInsert,
|
|
ICCAReaderPort,
|
|
ICCAReaderPortToggle,
|
|
CardIOHIDReaderSupport,
|
|
CardIOHIDReaderOrderFlip,
|
|
CardIOHIDReaderOrderToggle,
|
|
HIDSmartCard,
|
|
HIDSmartCardOrderFlip,
|
|
HIDSmartCardOrderToggle,
|
|
HIDSmartCardIdConvert,
|
|
SextetStreamPort,
|
|
EnableBemaniTools5API,
|
|
RealtimeProcessPriority,
|
|
spice2x_ProcessPriority,
|
|
spice2x_ProcessAffinity,
|
|
spice2x_ProcessorEfficiencyClass,
|
|
HeapSize,
|
|
DisableGSyncDetection,
|
|
spice2x_NvapiProfile,
|
|
DisableAudioHooks,
|
|
spice2x_DisableVolumeHook,
|
|
AudioShared,
|
|
spice2x_LowLatencySharedAudio,
|
|
AudioBackend,
|
|
AsioDriverId,
|
|
AsioDriverName,
|
|
AudioDummy,
|
|
DownmixAudioToStereo,
|
|
VolumeBoost,
|
|
AudioResample,
|
|
AudioExclusiveBuffer,
|
|
AsioDownmixToStereo,
|
|
DelayBy5Seconds,
|
|
spice2x_DelayByNSeconds,
|
|
LoadStubs,
|
|
AdjustOrientation,
|
|
spice2x_AutoOrientation,
|
|
ChangeResolution,
|
|
LogLevel,
|
|
EAAutomap,
|
|
EANetdump,
|
|
BlockingLogger,
|
|
DebugCreateFile,
|
|
VerboseGraphicsLogging,
|
|
VerboseAVSLogging,
|
|
AllowEA3Verbose,
|
|
DisableColoredOutput,
|
|
DisableACPHook,
|
|
DisableSignalHandling,
|
|
DisableDebugHooks,
|
|
DisableAvsVfsDriveMountRedirection,
|
|
DisableAvsCache,
|
|
OutputPEB,
|
|
DumpSystemInfo,
|
|
QKSArgs,
|
|
CCJArgs,
|
|
CCJMouseTrackball,
|
|
CCJMouseTrackballWithToggle,
|
|
CCJTrackballSensitivity,
|
|
MFGArgs,
|
|
MFGCabType,
|
|
MFGNoIO,
|
|
PCArgs,
|
|
PCNoIO,
|
|
PCKnobMode,
|
|
spice2x_LightsOverallBrightness,
|
|
spice2x_WindowBorder,
|
|
spice2x_WindowSize,
|
|
spice2x_WindowPosition,
|
|
spice2x_WindowAlwaysOnTop,
|
|
WindowForceScaling,
|
|
WindowDisableRoundedCorners,
|
|
GitaDoraWindowedMainMonitor,
|
|
GitaDoraWindowedLeftMonitor,
|
|
GitaDoraWindowedRightMonitor,
|
|
GitaDoraWindowedSmallMonitor,
|
|
GitaDoraWindowedSmallSize,
|
|
GitaDoraWindowedSmallPosition,
|
|
spice2x_IIDXWindowedSubscreenSize,
|
|
spice2x_IIDXWindowedSubscreenPosition,
|
|
IIDXWindowedSubscreenBorderless,
|
|
IIDXWindowedSubscreenAlwaysOnTop,
|
|
spice2x_JubeatLegacyTouch,
|
|
JubeatTouchAlgo,
|
|
JubeatTouchDebug,
|
|
JubeatTouchDebounce,
|
|
RBTouchDebug,
|
|
spice2x_RBTouchScale,
|
|
RBTouchSize,
|
|
RBTouchPollRate,
|
|
spice2x_AsioForceUnload,
|
|
spice2x_IIDXNoESpec,
|
|
spice2x_IIDXWindowedTDJ,
|
|
spice2x_DRSDisableTouch,
|
|
spice2x_DRSTransposeTouch,
|
|
DRSRGBCameraHook,
|
|
spice2x_IIDXNativeTouch,
|
|
spice2x_IIDXNoSub,
|
|
IIDXSubMonitorOverride,
|
|
spice2x_IIDXEmulateSubscreenKeypadTouch,
|
|
spice2x_AutoCard,
|
|
spice2x_TapeLedAlgorithm,
|
|
spice2x_NoNVAPI,
|
|
spice2x_NoD3D9DeviceHook,
|
|
spice2x_SDVXNoSub,
|
|
SDVXFullscreenLandscape,
|
|
spice2x_EnableSMXStage,
|
|
spice2x_EnableSMXDedicab,
|
|
IIDXRecQuality,
|
|
IIDXRecDisable,
|
|
MidiAlgoVer,
|
|
MidiNoteSustain,
|
|
DDRP4IOBufferMode,
|
|
InputRequiresFocus,
|
|
NostalgiaPoke,
|
|
ForceBackBufferCount,
|
|
SDVXWindowedSubscreenSize,
|
|
SDVXWindowedSubscreenPosition,
|
|
SDVXWindowedSubscreenBorderless,
|
|
SDVXWindowedSubscreenAlwaysOnTop,
|
|
LovePlusCamEnable,
|
|
LovePlusPrinterOutputPath,
|
|
LovePlusPrinterOutputClear,
|
|
LovePlusPrinterOutputOverwrite,
|
|
LovePlusPrinterOutputFormat,
|
|
LovePlusPrinterJPGQuality,
|
|
OptionConflictResolution,
|
|
OtocaCamHook,
|
|
DisableHighResTimer,
|
|
EnableICMPHook,
|
|
AutoElevate,
|
|
CfgForceSoftwareRender,
|
|
OBSWebSocketEnabled,
|
|
OBSWebSocketHost,
|
|
OBSWebSocketPort,
|
|
OBSWebSocketPassword,
|
|
OBSWebSocketDebug
|
|
};
|
|
|
|
enum class OptionsCategory {
|
|
Everything,
|
|
GameOptions,
|
|
Display,
|
|
Audio,
|
|
Network,
|
|
Overlay,
|
|
Advanced,
|
|
Dev,
|
|
API
|
|
};
|
|
}
|
|
|
|
extern bool USE_CMD_OVERRIDE;
|
|
|
|
const std::vector<std::string> &get_categories(Options::OptionsCategory category);
|
|
const std::vector<std::string> &get_quick_setting_categories();
|
|
const std::vector<OptionDefinition> &get_option_definitions();
|
|
void validate_option_categories();
|
|
std::unique_ptr<std::vector<Option>> parse_options(int argc, char *argv[]);
|
|
std::vector<Option> merge_options(const std::vector<Option> &options, const std::vector<Option> &overrides);
|
|
|
|
struct GameVersion {
|
|
std::string model;
|
|
std::string dest;
|
|
std::string spec;
|
|
std::string rev;
|
|
std::string ext;
|
|
};
|
|
|
|
std::string detect_bootstrap_release_code(const std::string& bootstrap_user);
|
|
GameVersion detect_gameversion(const std::string& ea3_user, const std::string& bootstrap_user);
|
|
}
|