mirror of
https://github.com/spice2x/spice2x.github.io.git
synced 2026-08-01 22:30:42 -07:00
popn: boot with 3 monitors (#636)
## Link to GitHub Issue or related Pull Request, if one exists #618 ## Description of change Take the monitor hooks added for IIDX/SDVX #612 and apply it to popn as well now that popn has a subscreen. There is a debug option in game that actually uses three monitors, which can be activated via hex edits. This will prevent that from working. ## Testing Tested with 3 monitors, fs and windowed.
This commit is contained in:
@@ -232,6 +232,7 @@ namespace games::popn {
|
|||||||
// TODO: is this what the game expects for subscreen?
|
// TODO: is this what the game expects for subscreen?
|
||||||
// TODO: what if there are 3+ monitors?
|
// TODO: what if there are 3+ monitors?
|
||||||
targetName->outputTechnology = DISPLAYCONFIG_OUTPUT_TECHNOLOGY_HDMI;
|
targetName->outputTechnology = DISPLAYCONFIG_OUTPUT_TECHNOLOGY_HDMI;
|
||||||
|
targetName->connectorInstance = 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -634,6 +635,8 @@ namespace games::popn {
|
|||||||
wintouchemu::hook_title_ends("", "Main Screen", avs::game::DLL_INSTANCE);
|
wintouchemu::hook_title_ends("", "Main Screen", avs::game::DLL_INSTANCE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sysutils::hook_EnumDisplayDevicesA();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -594,6 +594,9 @@ int main_implementation(int argc, char *argv[]) {
|
|||||||
GRAPHICS_FORCE_SINGLE_ADAPTER = true;
|
GRAPHICS_FORCE_SINGLE_ADAPTER = true;
|
||||||
GRAPHICS_PREVENT_SECONDARY_WINDOW = true;
|
GRAPHICS_PREVENT_SECONDARY_WINDOW = true;
|
||||||
}
|
}
|
||||||
|
if (options[launcher::Options::PopnSubMonitorOverride].is_active()) {
|
||||||
|
sysutils::SECOND_MONITOR_OVERRIDE = options[launcher::Options::PopnSubMonitorOverride].value_text();
|
||||||
|
}
|
||||||
if (options[launcher::Options::LoadMetalGearArcadeModule].value_bool()) {
|
if (options[launcher::Options::LoadMetalGearArcadeModule].value_bool()) {
|
||||||
attach_mga = true;
|
attach_mga = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -997,6 +997,17 @@ static const std::vector<OptionDefinition> OPTION_DEFINITIONS = {
|
|||||||
.game_name = "Pop'n Music",
|
.game_name = "Pop'n Music",
|
||||||
.category = "Game Options",
|
.category = "Game Options",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
// PopnSubMonitorOverride
|
||||||
|
.title = "Pop'n Music PikaPika Subscreen Monitor Override",
|
||||||
|
.name = "popnsubmonitor",
|
||||||
|
.desc = "If you have three or more monitors, this option can be set to tell the game which monitor is the subscreen.",
|
||||||
|
.type = OptionType::Text,
|
||||||
|
.setting_name = "\\\\.\\DISPLAY3",
|
||||||
|
.game_name = "Pop'n Music",
|
||||||
|
.category = "Monitor",
|
||||||
|
.picker = OptionPickerType::Monitor,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.title = "Force Load HELLO! Pop'n Music Module",
|
.title = "Force Load HELLO! Pop'n Music Module",
|
||||||
.name = "hpm",
|
.name = "hpm",
|
||||||
|
|||||||
@@ -100,6 +100,7 @@ namespace launcher {
|
|||||||
PopnMusicForceHDMode,
|
PopnMusicForceHDMode,
|
||||||
PopnMusicForceSDMode,
|
PopnMusicForceSDMode,
|
||||||
PopnNoSub,
|
PopnNoSub,
|
||||||
|
PopnSubMonitorOverride,
|
||||||
LoadHelloPopnMusicModule,
|
LoadHelloPopnMusicModule,
|
||||||
LoadGitaDoraModule,
|
LoadGitaDoraModule,
|
||||||
GitaDoraTwoChannelAudio,
|
GitaDoraTwoChannelAudio,
|
||||||
|
|||||||
@@ -576,7 +576,13 @@ namespace sysutils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void hook_EnumDisplayDevicesA() {
|
void hook_EnumDisplayDevicesA() {
|
||||||
EnumDisplayDevicesA_orig = detour::iat_try(
|
// the goal is to trick DX9 into thinking that some monitors are not attached
|
||||||
"EnumDisplayDevicesA", EnumDisplayDevicesA_hook, avs::game::DLL_INSTANCE);
|
// so we need to trampoline hook at user32 instead of IAT at game level
|
||||||
|
log_misc("sysutils", "hooking EnumDisplayDevicesA to hide if there are more than 3 monitors...");
|
||||||
|
detour::trampoline_try(
|
||||||
|
"user32.dll",
|
||||||
|
"EnumDisplayDevicesA",
|
||||||
|
(void*)EnumDisplayDevicesA_hook,
|
||||||
|
(void**)&EnumDisplayDevicesA_orig);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user