macOS: ignore -psn arg on first launch. LoadSpecialSettings() clean up

This commit is contained in:
Flyinghead 2020-12-29 17:56:35 +01:00
parent 467e7954a5
commit bbedcaa37b
2 changed files with 62 additions and 57 deletions

View File

@ -100,10 +100,10 @@ static void LoadSpecialSettings()
{ {
if (settings.platform.system == DC_PLATFORM_DREAMCAST) if (settings.platform.system == DC_PLATFORM_DREAMCAST)
{ {
char prod_id[sizeof(ip_meta.product_number) + 1] = {0}; std::string prod_id(ip_meta.product_number, sizeof(ip_meta.product_number));
memcpy(prod_id, ip_meta.product_number, sizeof(ip_meta.product_number)); prod_id = trim_trailing_ws(prod_id);
NOTICE_LOG(BOOT, "Game ID is [%s]", prod_id); NOTICE_LOG(BOOT, "Game ID is [%s]", prod_id.c_str());
rtt_to_buffer_game = false; rtt_to_buffer_game = false;
safemode_game = false; safemode_game = false;
tr_poly_depth_mask_game = false; tr_poly_depth_mask_game = false;
@ -113,7 +113,7 @@ static void LoadSpecialSettings()
forced_game_cable = -1; forced_game_cable = -1;
if (ip_meta.isWindowsCE() || settings.dreamcast.ForceWindowsCE if (ip_meta.isWindowsCE() || settings.dreamcast.ForceWindowsCE
|| !strncmp("T26702N", prod_id, 7)) // PBA Tour Bowling 2001 || prod_id == "T26702N") // PBA Tour Bowling 2001
{ {
INFO_LOG(BOOT, "Enabling Full MMU and Extra depth scaling for Windows CE game"); INFO_LOG(BOOT, "Enabling Full MMU and Extra depth scaling for Windows CE game");
settings.rend.ExtraDepthScale = 0.1; // taxi 2 needs 0.01 for FMV (amd, per-tri) settings.rend.ExtraDepthScale = 0.1; // taxi 2 needs 0.01 for FMV (amd, per-tri)
@ -123,94 +123,94 @@ static void LoadSpecialSettings()
} }
// Tony Hawk's Pro Skater 2 // Tony Hawk's Pro Skater 2
if (!strncmp("T13008D", prod_id, 7) || !strncmp("T13006N", prod_id, 7) if (prod_id == "T13008D" || prod_id == "T13006N"
// Tony Hawk's Pro Skater 1 // Tony Hawk's Pro Skater 1
|| !strncmp("T40205N", prod_id, 7) || prod_id == "T40205N"
// Tony Hawk's Skateboarding // Tony Hawk's Skateboarding
|| !strncmp("T40204D", prod_id, 7) || prod_id == "T40204D"
// Skies of Arcadia // Skies of Arcadia
|| !strncmp("MK-51052", prod_id, 8) || prod_id == "MK-51052"
// Eternal Arcadia (JP) // Eternal Arcadia (JP)
|| !strncmp("HDR-0076", prod_id, 8) || prod_id == "HDR-0076"
// Flag to Flag (US) // Flag to Flag (US)
|| !strncmp("MK-51007", prod_id, 8) || prod_id == "MK-51007"
// Super Speed Racing (JP) // Super Speed Racing (JP)
|| !strncmp("HDR-0013", prod_id, 8) || prod_id == "HDR-0013"
// Yu Suzuki Game Works Vol. 1 // Yu Suzuki Game Works Vol. 1
|| !strncmp("6108099", prod_id, 7) || prod_id == "6108099"
// L.O.L // L.O.L
|| !strncmp("T2106M", prod_id, 6) || prod_id == "T2106M"
// Miss Moonlight // Miss Moonlight
|| !strncmp("T18702M", prod_id, 7) || prod_id == "T18702M"
// Tom Clancy's Rainbow Six (US) // Tom Clancy's Rainbow Six (US)
|| !strncmp("T40401N", prod_id, 7) || prod_id == "T40401N"
// Tom Clancy's Rainbow Six incl. Eagle Watch Missions (EU) // Tom Clancy's Rainbow Six incl. Eagle Watch Missions (EU)
|| !strncmp("T-45001D05", prod_id, 10)) || prod_id == "T-45001D05")
{ {
INFO_LOG(BOOT, "Enabling render to texture buffer for game %s", prod_id); INFO_LOG(BOOT, "Enabling render to texture buffer for game %s", prod_id.c_str());
settings.rend.RenderToTextureBuffer = 1; settings.rend.RenderToTextureBuffer = 1;
rtt_to_buffer_game = true; rtt_to_buffer_game = true;
} }
if (!strncmp("HDR-0176", prod_id, 8) || !strncmp("RDC-0057", prod_id, 8)) if (prod_id == "HDR-0176" || prod_id == "RDC-0057")
{ {
INFO_LOG(BOOT, "Enabling translucent depth multipass for game %s", prod_id); INFO_LOG(BOOT, "Enabling translucent depth multipass for game %s", prod_id.c_str());
// Cosmic Smash // Cosmic Smash
settings.rend.TranslucentPolygonDepthMask = 1; settings.rend.TranslucentPolygonDepthMask = 1;
tr_poly_depth_mask_game = true; tr_poly_depth_mask_game = true;
} }
// NHL 2K2 // NHL 2K2
if (!strncmp("MK-51182", prod_id, 8)) if (prod_id == "MK-51182")
{ {
INFO_LOG(BOOT, "Enabling Extra depth scaling for game %s", prod_id); INFO_LOG(BOOT, "Enabling Extra depth scaling for game %s", prod_id.c_str());
settings.rend.ExtraDepthScale = 1000000; // Mali needs 1M, 10K is enough for others settings.rend.ExtraDepthScale = 1000000; // Mali needs 1M, 10K is enough for others
extra_depth_game = true; extra_depth_game = true;
} }
// Re-Volt (US, EU) // Re-Volt (US, EU)
else if (!strncmp("T-8109N", prod_id, 7) || !strncmp("T8107D 50", prod_id, 10)) else if (prod_id == "T-8109N" || prod_id == "T8107D 50")
{ {
INFO_LOG(BOOT, "Enabling Extra depth scaling for game %s", prod_id); INFO_LOG(BOOT, "Enabling Extra depth scaling for game %s", prod_id.c_str());
settings.rend.ExtraDepthScale = 100; settings.rend.ExtraDepthScale = 100;
extra_depth_game = true; extra_depth_game = true;
} }
// Samurai Shodown 6 dc port // Samurai Shodown 6 dc port
else if (!strncmp("T0002M", prod_id, 6)) else if (prod_id == "T0002M")
{ {
INFO_LOG(BOOT, "Enabling Extra depth scaling for game %s", prod_id); INFO_LOG(BOOT, "Enabling Extra depth scaling for game %s", prod_id.c_str());
settings.rend.ExtraDepthScale = 1e26; settings.rend.ExtraDepthScale = 1e26;
extra_depth_game = true; extra_depth_game = true;
} }
// Super Producers // Super Producers
if (!strncmp("T14303M", prod_id, 7) if (prod_id == "T14303M"
// Giant Killers // Giant Killers
|| !strncmp("T45401D 50", prod_id, 10) || prod_id == "T45401D 50"
// Wild Metal (US) // Wild Metal (US)
|| !strncmp("T42101N 00", prod_id, 10) || prod_id == "T42101N 00"
// Wild Metal (EU) // Wild Metal (EU)
|| !strncmp("T40501D-50", prod_id, 10) || prod_id == "T40501D-50"
// Resident Evil 2 (US) // Resident Evil 2 (US)
|| !strncmp("T1205N", prod_id, 6) || prod_id == "T1205N"
// Resident Evil 2 (EU) // Resident Evil 2 (EU)
|| !strncmp("T7004D 50", prod_id, 10) || prod_id == "T7004D 50"
// Rune Jade // Rune Jade
|| !strncmp("T14304M", prod_id, 7) || prod_id == "T14304M"
// Marionette Company // Marionette Company
|| !strncmp("T5202M", prod_id, 6) || prod_id == "T5202M"
// Marionette Company 2 // Marionette Company 2
|| !strncmp("T5203M", prod_id, 6) || prod_id == "T5203M"
// Maximum Pool (for online support) // Maximum Pool (for online support)
|| !strncmp("T11010N", prod_id, 7) || prod_id == "T11010N"
// StarLancer (US) (for online support) // StarLancer (US) (for online support)
|| !strncmp("T40209N", prod_id, 7) || prod_id == "T40209N"
// StarLancer (EU) (for online support) // StarLancer (EU) (for online support)
|| !strncmp("T17723D 05", prod_id, 10) || prod_id == "T17723D 05"
// Heroes of might and magic III // Heroes of might and magic III
|| !strncmp("T0000M", prod_id, 6) || prod_id == "T0000M"
// WebTV // WebTV
|| !strncmp("6107117", prod_id, 7) || prod_id == "6107117"
// PBA // PBA
|| !strncmp("T26702N", prod_id, 7)) || prod_id == "T26702N")
{ {
INFO_LOG(BOOT, "Disabling 32-bit virtual memory for game %s", prod_id); INFO_LOG(BOOT, "Disabling 32-bit virtual memory for game %s", prod_id.c_str());
settings.dynarec.disable_vmem32 = true; settings.dynarec.disable_vmem32 = true;
disable_vmem32_game = true; disable_vmem32_game = true;
} }
@ -266,17 +266,17 @@ static void LoadSpecialSettings()
forced_game_cable = settings.dreamcast.cable; forced_game_cable = settings.dreamcast.cable;
} }
if (settings.dreamcast.cable == 2 && if (settings.dreamcast.cable == 2 &&
(!strncmp("T40602N", prod_id, 7) // Centipede (prod_id == "T40602N" // Centipede
|| !strncmp("T9710N", prod_id, 6) // Gauntlet Legends (US) || prod_id == "T9710N" // Gauntlet Legends (US)
|| !strncmp("MK-51152", prod_id, 8) // World Series Baseball 2K2 || prod_id == "MK-51152" // World Series Baseball 2K2
|| !strncmp("T-9701N", prod_id, 7) // Mortal Kombat Gold (US) || prod_id == "T-9701N" // Mortal Kombat Gold (US)
|| !strncmp("T1203N", prod_id, 6) // Street Fighter Alpha 3 (US) || prod_id == "T1203N" // Street Fighter Alpha 3 (US)
|| !strncmp("T1203M", prod_id, 6) // Street Fighter Zero 3 (JP) || prod_id == "T1203M" // Street Fighter Zero 3 (JP)
|| !strncmp("T13002N", prod_id, 7) // Vigilante 8 (US) || prod_id == "T13002N" // Vigilante 8 (US)
|| !strncmp("T13003N", prod_id, 7) // Toy Story 2 (US) || prod_id == "T13003N" // Toy Story 2 (US)
|| !strncmp("T1209N", prod_id, 6) // Gigawing (US) || prod_id == "T1209N" // Gigawing (US)
|| !strncmp("T1208M", prod_id, 6) // Gigawing (JP) || prod_id == "T1208M" // Gigawing (JP)
|| !strncmp("T1235M", prod_id, 6))) // Vampire Chronicle for Matching Service || prod_id == "T1235M")) // Vampire Chronicle for Matching Service
{ {
NOTICE_LOG(BOOT, "Game doesn't support RGB. Using TV Composite instead"); NOTICE_LOG(BOOT, "Game doesn't support RGB. Using TV Composite instead");
settings.dreamcast.cable = 3; settings.dreamcast.cable = 3;
@ -435,8 +435,6 @@ int reicast_init(int argc, char* argv[])
LogManager::Init(); LogManager::Init();
LoadSettings(false); LoadSettings(false);
} }
for (int i = 1; i < argc; i++)
NOTICE_LOG(BOOT, "Arg %d: %s", i, argv[i]);
settings.pvr.rend = (RenderType)cfgLoadInt("config", "pvr.rend", (int)settings.pvr.rend); settings.pvr.rend = (RenderType)cfgLoadInt("config", "pvr.rend", (int)settings.pvr.rend);
os_CreateWindow(); os_CreateWindow();

View File

@ -201,12 +201,19 @@ extern "C" int emu_reicast_init()
NSArray *arguments = [[NSProcessInfo processInfo] arguments]; NSArray *arguments = [[NSProcessInfo processInfo] arguments];
unsigned long argc = [arguments count]; unsigned long argc = [arguments count];
char **argv = (char **)malloc(argc * sizeof(char*)); char **argv = (char **)malloc(argc * sizeof(char*));
int paramCount = 0;
for (unsigned long i = 0; i < argc; i++) for (unsigned long i = 0; i < argc; i++)
argv[i] = strdup([[arguments objectAtIndex:i] UTF8String]); {
const char *arg = [[arguments objectAtIndex:i] UTF8String];
if (!strncmp(arg, "-psn_", 5))
// ignore Process Serial Number argument on first launch
continue;
argv[paramCount++] = strdup(arg);
}
int rc = reicast_init((int)argc, argv); int rc = reicast_init(paramCount, argv);
for (unsigned long i = 0; i < argc; i++) for (unsigned long i = 0; i < paramCount; i++)
free(argv[i]); free(argv[i]);
free(argv); free(argv);