MP4 adv movies support, CREDIT(S) options, launcher options
This commit is contained in:
@@ -9,23 +9,29 @@ Skip=0
|
||||
[Patches]
|
||||
#Enable or disable mouse cursor
|
||||
Cursor=1
|
||||
#Hide Freeplay text
|
||||
#Hide "CREDIT(S)"/"FREE PLAY"
|
||||
Hide_Freeplay=0
|
||||
#Show "FREE PLAY" instead of "CREDIT(S)"
|
||||
Freeplay=1
|
||||
#Show "PD Loader <version>" instead of "FREE PLAY"
|
||||
PDLoaderText=1
|
||||
#Set the card reader and network status icons -- 0=default, 1=hidden, 2=error, 3=OK, 4=partial OK
|
||||
Status_Icons=0
|
||||
#Hide the watermark that's usually shown in PV viewing mode
|
||||
Hide_PV_Watermark=0
|
||||
#Permanently the photo controls during PV playback
|
||||
No_PV_UI=0
|
||||
#Disables showing lyrics
|
||||
#Disable showing lyrics
|
||||
No_Lyrics=0
|
||||
#Disables movies (enable this if the game hangs when loading certain PVs)
|
||||
#Disable movies (enable this if the game hangs when loading certain PVs)
|
||||
No_Movies=0
|
||||
#Enable custom MP4 adv movies (experimental)
|
||||
MP4_Movies=0
|
||||
#Hide the volume and SE control buttons
|
||||
Hide_Volume=0
|
||||
#Disables the error banner
|
||||
#Disable the error banner
|
||||
No_Error=1
|
||||
#Allows using a real arcade slider attached to COM11
|
||||
#Allow using a real arcade slider attached to COM11
|
||||
Hardware_Slider=0
|
||||
#Enhanced Stage Manager (sets a custom number of stages; "stage_manager" should be disabled in "components.ini")
|
||||
#Number of stages (0 = disabled)
|
||||
|
||||
@@ -147,15 +147,21 @@ ConfigOptionBase* optionsArray[] = {
|
||||
new BooleanOption(L"TAA", GRAPHICS_SECTION, CONFIG_FILE, L"TAA", L"Temporal Anti-Aliasing", true, false),
|
||||
new BooleanOption(L"MLAA", GRAPHICS_SECTION, CONFIG_FILE, L"MLAA", L"Morphological Anti-Aliasing", true, false),
|
||||
|
||||
new BooleanOption(L"hide_freeplay", PATCHES_SECTION, CONFIG_FILE, L"Hide Freeplay", L"Hide Freeplay text.", false, false),
|
||||
new BooleanOption(L"hide_freeplay", PATCHES_SECTION, CONFIG_FILE, L"Hide \"CREDIT(S)\"", L"Hide the \"CREDIT(S)\" text.", false, false),
|
||||
new BooleanOption(L"freeplay", PATCHES_SECTION, CONFIG_FILE, L"FREE PLAY", L"Show \"FREE PLAY\" instead of \"CREDIT(S)\".", false, false),
|
||||
new BooleanOption(L"pdloadertext", PATCHES_SECTION, CONFIG_FILE, L"PD Loader FREE PLAY", L"Show the version of PD Loader instead of \"FREE PLAY\".", false, false),
|
||||
new BooleanOption(L"hide_volume", PATCHES_SECTION, CONFIG_FILE, L"Hide Volume Buttons", L"Hide the volume and SE control buttons.", false, false),
|
||||
new BooleanOption(L"no_movies", PATCHES_SECTION, CONFIG_FILE, L"Disable Movies", L"Disables movies (enable this if the game hangs when loading certain PVs).", false, false),
|
||||
new BooleanOption(L"no_pv_ui", PATCHES_SECTION, CONFIG_FILE, L"Disable PV UI", L"Removes the photo controls during PV playback.", false, false),
|
||||
new BooleanOption(L"no_lyrics", PATCHES_SECTION, CONFIG_FILE, L"Disable Lyrics", L"Disables showing lyrics.", false, false),
|
||||
new BooleanOption(L"hide_pv_watermark", PATCHES_SECTION, CONFIG_FILE, L"Hide PV Watermark", L"Hides the watermark that's usually shown in PV viewing mode.", false, false),
|
||||
new BooleanOption(L"no_error", PATCHES_SECTION, CONFIG_FILE, L"Disable Error Banner", L"Disables the error banner on the attract screen.", true, false),
|
||||
new BooleanOption(L"no_movies", PATCHES_SECTION, CONFIG_FILE, L"Disable Movies", L"Disable movies (enable this if the game hangs when loading certain PVs).", false, false),
|
||||
new BooleanOption(L"mp4_movies", PATCHES_SECTION, CONFIG_FILE, L"Custom MP4 Adv Movies", L"Enable custom MP4 adv movies (experimental).", false, false),
|
||||
new BooleanOption(L"no_pv_ui", PATCHES_SECTION, CONFIG_FILE, L"Disable PV UI", L"Remove the photo controls during PV playback.", false, false),
|
||||
new BooleanOption(L"no_lyrics", PATCHES_SECTION, CONFIG_FILE, L"Disable Lyrics", L"Disable showing lyrics.", false, false),
|
||||
new BooleanOption(L"hide_pv_watermark", PATCHES_SECTION, CONFIG_FILE, L"Hide PV Watermark", L"Hide the watermark that's usually shown in PV viewing mode.", false, false),
|
||||
new BooleanOption(L"no_error", PATCHES_SECTION, CONFIG_FILE, L"Disable Error Banner", L"Disable the error banner on the attract screen.", true, false),
|
||||
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 NumericOption(L"Enhanced_Stage_Manager", GRAPHICS_SECTION, CONFIG_FILE, L"Number of stages:", L"Set the number of stages (0 = default).", 0, 0, INT_MAX),
|
||||
new BooleanOption(L"Enhanced_Stage_Manager_Encore", PATCHES_SECTION, CONFIG_FILE, L"Encore", L"Enable the Encore stage.", false, false),
|
||||
|
||||
new BooleanOption(L"skip", LAUNCHER_SECTION, CONFIG_FILE, L"Skip Launcher", L"Forces the launcher to be skipped, you can also use the --launch parameter instead of this.", false, false),
|
||||
|
||||
new DropdownOption(L"status_icons", PATCHES_SECTION, CONFIG_FILE, L"Status Icons:", L"Set the state of card reader and network status icons.", 3, std::vector<LPCWSTR>({ L"Default", L"Hidden", L"Error", L"OK", L"Partial OK" })),
|
||||
|
||||
@@ -2,6 +2,10 @@
|
||||
#include "vector"
|
||||
#include <tchar.h>
|
||||
#include <GL/freeglut.h>
|
||||
#include <iostream>
|
||||
#include <filesystem>
|
||||
#include <sstream>
|
||||
#include <iomanip>
|
||||
|
||||
void InjectCode(void* address, const std::vector<uint8_t> data);
|
||||
void ApplyPatches();
|
||||
@@ -25,6 +29,30 @@ BOOL APIENTRY DllMain(HMODULE hModule,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void patchMovieExt(std::string moviefile, void* address)
|
||||
{
|
||||
bool isinmdata = 0;
|
||||
for (int i = 0; i < 1000; i++)
|
||||
{
|
||||
std::stringstream ss;
|
||||
ss << std::setw(3) << std::setfill('0') << i;
|
||||
if (std::filesystem::exists("../mdata/M" + ss.str() + "/rom/movie/" + moviefile + ".mp4"))
|
||||
{
|
||||
isinmdata = 1;
|
||||
//std::cout << "Movie " << moviefile << ".mp4 found in M" << ss.str() << std::endl;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (isinmdata || std::filesystem::exists("../rom/movie/" + moviefile + ".mp4"))
|
||||
{
|
||||
InjectCode(address, { 0x6D, 0x70, 0x34 });
|
||||
std::cout << "Movie " << moviefile << " patched to mp4\n";
|
||||
return;
|
||||
}
|
||||
//std::cout << "Movie " << moviefile << " NOT patched to mp4\n";
|
||||
return;
|
||||
}
|
||||
|
||||
void ApplyPatches() {
|
||||
|
||||
const struct { void* Address; std::vector<uint8_t> Data; } patches[] =
|
||||
@@ -68,8 +96,6 @@ void ApplyPatches() {
|
||||
{ (void*)0x0000000140136CFA,{ 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 } },
|
||||
// enable module selector without use_card
|
||||
{ (void*)0x00000001405C513B, { 0x01 } },
|
||||
// Show Freeplay instead
|
||||
{ (void*)0x00000001403BABEA, { 0x75 } },
|
||||
// Force Hide IDs
|
||||
{ (void*)0x00000001409A5918, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
|
||||
{ (void*)0x00000001409A5928, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }
|
||||
@@ -81,22 +107,48 @@ void ApplyPatches() {
|
||||
|
||||
auto nCursor = GetPrivateProfileIntW(L"patches", L"cursor", TRUE, CONFIG_FILE);
|
||||
auto nHideFreeplay = GetPrivateProfileIntW(L"patches", L"hide_freeplay", FALSE, CONFIG_FILE);
|
||||
auto nFreeplay = GetPrivateProfileIntW(L"patches", L"freeplay", TRUE, CONFIG_FILE);
|
||||
auto nPDLoaderText = GetPrivateProfileIntW(L"patches", L"pdloader_text", TRUE, CONFIG_FILE);
|
||||
auto nStatusIcons = GetPrivateProfileIntW(L"patches", L"status_icons", 0, CONFIG_FILE);
|
||||
auto nHidePVWatermark = GetPrivateProfileIntW(L"patches", L"hide_pv_watermark", FALSE, CONFIG_FILE);
|
||||
auto nNoPVUi = GetPrivateProfileIntW(L"patches", L"no_pv_ui", FALSE, CONFIG_FILE);
|
||||
auto nHideVolCtrl = GetPrivateProfileIntW(L"patches", L"hide_volume", FALSE, CONFIG_FILE);
|
||||
auto nNoLyrics = GetPrivateProfileIntW(L"patches", L"no_lyrics", FALSE, CONFIG_FILE);
|
||||
auto nNoMovies = GetPrivateProfileIntW(L"patches", L"no_movies", FALSE, CONFIG_FILE);
|
||||
auto nMP4Movies = GetPrivateProfileIntW(L"patches", L"mp4_movies", FALSE, CONFIG_FILE);
|
||||
auto nNoError = GetPrivateProfileIntW(L"patches", L"no_error", FALSE, 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 nHardwareSlider = GetPrivateProfileIntW(L"patches", L"hardware_slider", FALSE, CONFIG_FILE);
|
||||
|
||||
// Hides the Freeplay text
|
||||
// Replace the hardcoded videos with MP4s, if they exist
|
||||
if (nMP4Movies)
|
||||
{
|
||||
patchMovieExt("adv_cm_01", (void*)0x00000001409A53CC);
|
||||
patchMovieExt("adv_cm_02", (void*)0x00000001409A53E4);
|
||||
patchMovieExt("adv_cm_03", (void*)0x00000001409A53FC);
|
||||
patchMovieExt("adv_cfm_cm", (void*)0x00000001409C22CD);
|
||||
patchMovieExt("adv_sega_cm", (void*)0x00000001409C22EE);
|
||||
patchMovieExt("diva_adv02", (void*)0x00000001409FF455);
|
||||
patchMovieExt("diva_adv", (void*)0x00000001409FF483);
|
||||
}
|
||||
// Hide "FREE PLAY"
|
||||
if (nHideFreeplay)
|
||||
{
|
||||
InjectCode((void*)0x00000001403BABEF, { 0x06, 0xB6 });
|
||||
printf("[Patches] Hide Freeplay enabled\n");
|
||||
printf("[Patches] Hide FREE PLAY/CREDIT(S) enabled\n");
|
||||
}
|
||||
// Enable "FREE PLAY" mode
|
||||
else if (nFreeplay)
|
||||
{
|
||||
InjectCode((void*)0x00000001403BABEA, { 0x75 });
|
||||
printf("[Patches] Show FREE PLAY instead of CREDIT(S)\n");
|
||||
|
||||
if (nPDLoaderText)
|
||||
{
|
||||
InjectCode((void*)0x00000001409F61F0, { 0x50, 0x44, 0x20, 0x4C, 0x6F, 0x61, 0x64, 0x65, 0x72, 0x20, 0x41, 0x4C, 0x50, 0x48, 0x41});
|
||||
printf("[Patches] Show PD Loader version\n");
|
||||
}
|
||||
}
|
||||
// Use GLUT_CURSOR_RIGHT_ARROW instead of GLUT_CURSOR_NONE
|
||||
if (nCursor)
|
||||
|
||||
Reference in New Issue
Block a user