Merge branch 'spice2x' into spice22x
This commit is contained in:
+572
-123
File diff suppressed because it is too large
Load Diff
+929
-111
File diff suppressed because it is too large
Load Diff
+69
-2
@@ -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
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
@@ -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() {
|
||||
|
||||
@@ -4,6 +4,7 @@ namespace launcher::signal {
|
||||
|
||||
// settings
|
||||
extern bool DISABLE;
|
||||
extern bool USE_VEH_WORKAROUND;
|
||||
|
||||
//void print_stacktrace();
|
||||
void attach();
|
||||
|
||||
+23
-4
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user