diff --git a/source-code/data/plugins/config.ini b/source-code/data/plugins/config.ini index 797902d..ef52558 100644 --- a/source-code/data/plugins/config.ini +++ b/source-code/data/plugins/config.ini @@ -38,7 +38,7 @@ Hide_Volume=0 #Disable the error banner No_Error=1 #Freeze the timer -No_Timer_Sprite=1 +No_Timer=1 #Disable the timer sprite No_Timer_Sprite=1 #Allow using a real arcade slider attached to COM11 @@ -48,6 +48,8 @@ Hardware_Slider=0 Enhanced_Stage_Manager=0 #Use encore stages or not Enhanced_Stage_Manager_Encore=1 +#Unlock PSEUDO modules (incomplete, will default to Miku) +Unlock_Pseudo=0 [Graphics] # Set to -1 to unlock the frame rate. diff --git a/source-code/source/plugins/Launcher/framework.h b/source-code/source/plugins/Launcher/framework.h index 0326ad0..26ea109 100644 --- a/source-code/source/plugins/Launcher/framework.h +++ b/source-code/source/plugins/Launcher/framework.h @@ -174,6 +174,9 @@ ConfigOptionBase* optionsArray[] = { new NumericOption(L"Enhanced_Stage_Manager", PATCHES_SECTION, CONFIG_FILE, L"Number of stages:", L"Set the number of stages (0 = default).", 0, 0, INT_MAX), new OptionMetaSpacer(8), + new BooleanOption(L"unlock_pseudo", PATCHES_SECTION, CONFIG_FILE, L"Unlock PSEUDO modules (incomplete)", L"Lets you play any PV with any performer.\n(incomplete, recommended modules will default to Miku)", false, false), + new OptionMetaSpacer(8), + new BooleanOption(L"hardware_slider", PATCHES_SECTION, CONFIG_FILE, L"Use Hardware Slider", L"Enable this if using a real arcade slider.\n(set the slider to port COM11)", false, false), new OptionMetaSpacer(8), diff --git a/source-code/source/plugins/Patches/dllmain.cpp b/source-code/source/plugins/Patches/dllmain.cpp index 254e75c..e4dfd01 100644 --- a/source-code/source/plugins/Patches/dllmain.cpp +++ b/source-code/source/plugins/Patches/dllmain.cpp @@ -140,6 +140,7 @@ void ApplyPatches() { auto nNoTimerSprite = GetPrivateProfileIntW(L"patches", L"no_timer_sprite", TRUE, CONFIG_FILE); auto nEStageManager = GetPrivateProfileIntW(L"patches", L"enhanced_stage_manager", 0, CONFIG_FILE); auto nEStageManagerEncore = GetPrivateProfileIntW(L"patches", L"enhanced_stage_manager_encore", TRUE, CONFIG_FILE); + auto nUnlockPseudo = GetPrivateProfileIntW(L"patches", L"unlock_pseudo", FALSE, CONFIG_FILE); auto nHardwareSlider = GetPrivateProfileIntW(L"patches", L"hardware_slider", FALSE, CONFIG_FILE); // Replace the hardcoded videos with MP4s, if they exist @@ -324,6 +325,15 @@ void ApplyPatches() { printf("[Patches] Enhanced Stage Manager enabled\n"); } + // Unlock PSEUDO modules (which will all default to Miku, unless we also patch them to match the first performer) + if (nUnlockPseudo) + { + InjectCode((void*)0x0000000140A21770, { 0x56, 0x4F, 0x43, 0x41, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }); + InjectCode((void*)0x0000000140A21780, { 0x56, 0x4F, 0x43, 0x41, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }); + InjectCode((void*)0x0000000140A21790, { 0x56, 0x4F, 0x43, 0x41, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }); + InjectCode((void*)0x0000000140A217A0, { 0x56, 0x4F, 0x43, 0x41, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }); + InjectCode((void*)0x0000000140A217B0, { 0x56, 0x4F, 0x43, 0x41, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }); + } // The original slider update needs to run for hardware sliders to work -- only patch it when using emulation if (!nHardwareSlider) {