Merge branch 'spice2x' into spice22x

This commit is contained in:
[ ]
2025-05-09 02:54:57 +09:00
550 changed files with 78570 additions and 91704 deletions
+572 -123
View File
File diff suppressed because it is too large Load Diff
+929 -111
View File
File diff suppressed because it is too large Load Diff
+69 -2
View File
@@ -18,19 +18,26 @@ namespace launcher {
PCBID,
Player1Card,
Player2Card,
Player1PinMacro,
Player2PinMacro,
WindowedMode,
InjectHook,
EarlyInjectHook,
ExecuteScript,
CaptureCursor,
ShowCursor,
DisplayAdapter,
GraphicsForceRefresh,
GraphicsForceSingleAdapter,
GraphicsForceRefresh,
FullscreenResolution,
FullscreenOrientationFlip,
Graphics9On12,
spice2x_Dx9On12,
NoLegacy,
RichPresence,
SmartEAmusement,
EAmusementMaintenance,
spice2x_EAmusementMaintenance,
AdapterNetwork,
AdapterSubnet,
DisableNetworkFixes,
@@ -41,12 +48,18 @@ namespace launcher {
VREnable,
DisableOverlay,
spice2x_FpsAutoShow,
spice2x_FpsOpposite,
spice2x_SubScreenAutoShow,
spice2x_IOPanelAutoShow,
spice2x_KeypadAutoShow,
LoadIIDXModule,
IIDXCameraOrderFlip,
IIDXDisableCameras,
IIDXCamHook,
IIDXCamHookRatio,
IIDXCamHookOverride,
IIDXCamHookTopId,
IIDXCamHookFrontId,
IIDXSoundOutputDevice,
IIDXAsioDriver,
IIDXBIO2FW,
@@ -101,9 +114,15 @@ namespace launcher {
LoadChargeMachineModule,
LoadOngakuParadiseModule,
LoadBusouShinkiModule,
LoadCCJModule,
LoadQKSModule,
LoadMFGModule,
LoadMusecaModule,
PathToModules,
ScreenshotFolder,
ConfigurationPath,
ScreenResizeConfigPath,
PatchManagerConfigPath,
IntelSDEFolder,
PathToEa3Config,
PathToAppConfig,
@@ -128,21 +147,27 @@ namespace launcher {
ForceTouchEmulation,
InvertTouchCoordinates,
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,
AudioBackend,
AsioDriverId,
AudioDummy,
@@ -165,17 +190,59 @@ namespace launcher {
DisableDebugHooks,
DisableAvsVfsDriveMountRedirection,
OutputPEB,
DumpSystemInfo,
QKSArgs,
CCJArgs,
CCJMouseTrackball,
CCJMouseTrackballWithToggle,
CCJTrackballSensitivity,
MFGArgs,
MFGCabType,
MFGNoIO,
spice2x_LightsOverallBrightness,
spice2x_WindowBorder,
spice2x_WindowSize,
spice2x_WindowPosition,
spice2x_WindowAlwaysOnTop,
WindowForceScaling,
spice2x_IIDXWindowedSubscreenSize,
spice2x_IIDXWindowedSubscreenPosition,
spice2x_JubeatLegacyTouch,
spice2x_RBTouchScale,
spice2x_AsioForceUnload,
spice2x_IIDXNoESpec,
spice2x_IIDXWindowedTDJ,
spice2x_DRSDisableTouch,
spice2x_DRSTransposeTouch,
spice2x_IIDXNativeTouch,
spice2x_IIDXNoSub,
spice2x_IIDXEmulateSubscreenKeypadTouch,
spice2x_AutoCard,
spice2x_LowLatencySharedAudio,
spice2x_TapeLedAlgorithm,
spice2x_NoNVAPI,
spice2x_NoD3D9DeviceHook,
spice2x_SDVXNoSub,
SDVXFullscreenLandscape,
spice2x_EnableSMXStage,
spice2x_EnableSMXDedicab,
IIDXRecQuality,
MidiAlgoVer,
MidiNoteSustain,
NostalgiaPoke,
ForceBackBufferCount,
};
enum class OptionsCategory {
Everything,
Basic,
Advanced,
Dev,
API
};
}
const std::vector<std::string> &get_categories(bool advanced);
const std::vector<std::string> &get_categories(Options::OptionsCategory category);
const std::vector<OptionDefinition> &get_option_definitions();
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);
+31 -20
View File
@@ -10,26 +10,36 @@ namespace richpresence {
// application IDs
static robin_hood::unordered_map<std::string, std::string> APP_IDS = {
{"Sound Voltex", "609803246617231377"},
{"Beatmania IIDX", "609870727654539266"},
{"Jubeat", "609870833032364035"},
{"Dance Evolution", "609870916259938314"},
{"Beatstream", "609871030609248256"},
{"Metal Gear", "609871105213071449"},
{"Reflec Beat", "609871162570178560"},
{"Pop'n Music", "609871244782862387"},
{"Steel Chronicle", "609871515974107136"},
{"Road Fighters 3D", "609871634295291914"},
{"Museca", "609871785323790336"},
{"Bishi Bashi Channel", "609874994989760522"},
{"GitaDora", "609875077416091734"},
{"Dance Dance Revolution", "609875139890380800"},
{"Nostalgia", "609875303711375475"},
{"Quiz Magic Academy", "609875394610462720"},
{"FutureTomTom", "609875462436421652"},
{"Mahjong Fight Club", "609875523665002497"},
{"HELLO! Pop'n Music", "609875610474381322"},
{"LovePlus", "609875666279858199"},
{"Sound Voltex", "1225989533317992509"},
{"Beatmania IIDX", "1225993043010912258"},
{"Jubeat", "1226662675497484288"},
{"Dance Evolution", "1226662773010727003"},
{"Beatstream", "1226664029666152600"},
{"Metal Gear", "1226664830178693291"},
{"Reflec Beat", "1226666988450087012"},
{"Pop'n Music", "1226667130033016922"},
{"Steel Chronicle", "1226669022859231293"},
{"Road Fighters 3D", "1226669786017042493"},
{"Museca", "1226669886579802252"},
{"Bishi Bashi Channel", "1226671221467512853"},
{"GitaDora", "1226671586661371945"},
{"Dance Dance Revolution", "1226672373143699456"},
{"Nostalgia", "1226680552963309618"},
{"Quiz Magic Academy", "1226681569989754941"},
{"FutureTomTom", "1226693733484068974"},
{"Mahjong Fight Club", "1226693952829128714"},
{"HELLO! Pop'n Music", "1226695294838898761"},
{"LovePlus", "1226702489659641896"},
{"Tenkaichi Shogikai", "1226703627687559218"},
{"DANCERUSH", "1226709135828193282"},
{"Scotto", "1226716024305619016"},
{"Winning Eleven", "1226721709500137574"},
{"Otoca D'or", "1226737298285133836"},
{"Charge Machine", "1226739364126654516"},
{"Ongaku Paradise", "1226739545559531621"},
{"Busou Shinki: Armored Princess Battle Conductor", "1226739666741366916"},
{"Chase Chase Jokers", "1226739863915593770"},
{"QuizKnock STADIUM", "1226739930328334478"},
};
// state
@@ -78,6 +88,7 @@ namespace richpresence {
// update presence
DiscordRichPresence presence {};
presence.startTimestamp = std::time(nullptr);
Discord_UpdatePresence(&presence);
}
+7 -4
View File
@@ -6,24 +6,24 @@
#include "api/controller.h"
#include "easrv/easrv.h"
#include "rawinput/rawinput.h"
#include "misc/vrutil.h"
#include "hooks/audio/audio.h"
#include "util/logging.h"
#include "launcher.h"
#include "logger.h"
#include "nvapi/nvapi.h"
namespace launcher {
void stop_subsystems() {
// note that it is possible for stop_subsystems to be called multiple times
// (e.g., crashing, and then closing the window)
// therefore, subsystems need to be guarded against multiple unload attempts
log_info("launcher", "stopping subsystems");
// flush/stop logger
logger::stop();
// VR
vrutil::shutdown();
// stop ea server
easrv_shutdown();
@@ -39,6 +39,9 @@ namespace launcher {
if (RI_MGR) {
RI_MGR->stop();
}
// unload nvapi and free library (if loaded)
nvapi::unload();
}
void kill(UINT exit_code) {
+2 -1
View File
@@ -27,6 +27,7 @@ namespace launcher::signal {
// settings
bool DISABLE = false;
bool USE_VEH_WORKAROUND = false;
}
#define V(variant) case variant: return #variant
@@ -167,7 +168,7 @@ static LPTOP_LEVEL_EXCEPTION_FILTER WINAPI SetUnhandledExceptionFilter_hook(
static PVOID WINAPI AddVectoredExceptionHandler_hook(ULONG First, PVECTORED_EXCEPTION_HANDLER Handler) {
log_info("signal", "AddVectoredExceptionHandler hook hit");
return nullptr;
return launcher::signal::USE_VEH_WORKAROUND ? INVALID_HANDLE_VALUE : nullptr;
}
void launcher::signal::attach() {
+1
View File
@@ -4,6 +4,7 @@ namespace launcher::signal {
// settings
extern bool DISABLE;
extern bool USE_VEH_WORKAROUND;
//void print_stacktrace();
void attach();
+23 -4
View File
@@ -7,7 +7,9 @@
#include "rawinput/rawinput.h"
#include "util/logging.h"
#include "touch/touch.h"
#include "misc/eamuse.h"
#include "games/io.h"
#include "overlay/overlay.h"
namespace superexit {
@@ -65,15 +67,29 @@ namespace superexit {
}
}
// check for exit
if (rawinput_exit || (GetAsyncKeyState(VK_MENU) && GetAsyncKeyState(VK_F4))) {
bool async_key_exit = GetAsyncKeyState(VK_MENU) && GetAsyncKeyState(VK_F4);
// check if in focus
bool overlay_exit = false;
auto buttons = games::get_buttons_overlay(eamuse_get_game());
if (buttons &&
(!overlay::OVERLAY || overlay::OVERLAY->hotkeys_triggered()) &&
GameAPI::Buttons::getState(RI_MGR, buttons->at(games::OverlayButtons::SuperExit))) {
overlay_exit = true;
}
// check for exit
if (rawinput_exit || async_key_exit) {
if (has_focus()) {
log_info("superexit", "detected ALT+F4, exiting...");
launcher::shutdown();
}
}
if (overlay_exit) {
if (has_focus()) {
log_info("superexit", "detected Force Exit Game overlay shortcut, exiting...");
launcher::shutdown();
}
}
// slow down
Sleep(100);
@@ -84,6 +100,9 @@ namespace superexit {
}
void disable() {
if (!THREAD) {
return;
}
// stop old thread
THREAD_RUNNING = false;