public override ProcessStartInfo Generate(string system, string emulator, string core, string rom, string playersControllers, ScreenResolution resolution) { if (string.IsNullOrEmpty(RetroarchPath)) { return(null); } if (Path.GetExtension(rom).ToLowerInvariant() == ".libretro") { core = Path.GetFileNameWithoutExtension(rom); if (core == "xrick") { rom = Path.Combine(Path.GetDirectoryName(rom), "xrick", "data.zip"); } else if (core == "dinothawr") { rom = Path.Combine(Path.GetDirectoryName(rom), "dinothawr", "dinothawr.game"); } else { rom = null; } } if (core != null && core.IndexOf("dosbox", StringComparison.InvariantCultureIgnoreCase) >= 0) { string bat = Path.Combine(rom, "dosbox.bat"); if (File.Exists(bat)) { rom = bat; } else { string ext = Path.GetExtension(rom).ToLower(); if ((ext == ".dosbox" || ext == ".dos" || ext == ".pc") && File.Exists(rom)) { string tempRom = Path.Combine(Path.GetDirectoryName(rom), "dosbox.conf"); if (File.Exists(tempRom) && !new FileInfo(tempRom).Attributes.HasFlag(FileAttributes.Hidden)) { rom = tempRom; } else { try { if (File.Exists(tempRom)) { File.Delete(tempRom); } } catch { } try { File.Copy(rom, tempRom); new FileInfo(tempRom).Attributes |= FileAttributes.Hidden; rom = tempRom; _dosBoxTempRom = tempRom; } catch { } } } } } Configure(system, core, rom, resolution); ConfigureCoreOptions(system, core); List <string> commandArray = new List <string>(); string subSystem = SubSystem.GetSubSystem(core, system); if (!string.IsNullOrEmpty(subSystem)) { commandArray.Add("--subsystem"); commandArray.Add(subSystem); } if (!string.IsNullOrEmpty(SystemConfig["netplaymode"])) { // Netplay mode if (SystemConfig["netplaymode"] == "host") { commandArray.Add("--host"); } else if (SystemConfig["netplaymode"] == "client") { commandArray.Add("--connect"); commandArray.Add(SystemConfig["netplay.server.address"]); } } // RetroArch 1.7.8 requires the shaders to be passed as command line argument if (AppConfig.isOptSet("shaders") && SystemConfig.isOptSet("shader") && SystemConfig["shader"] != "None") { string shaderFilename = SystemConfig["shader"] + ".glslp"; string videoShader = Path.Combine(AppConfig.GetFullPath("shaders"), shaderFilename).Replace("/", "\\"); if (File.Exists(videoShader)) { commandArray.Add("--set-shader"); commandArray.Add("\"" + videoShader + "\""); } } string args = string.Join(" ", commandArray); return(new ProcessStartInfo() { FileName = Path.Combine(RetroarchPath, "retroarch.exe"), WorkingDirectory = RetroarchPath, Arguments = string.IsNullOrEmpty(rom) ? ("-L \"" + Path.Combine(RetroarchCorePath, core + "_libretro.dll") + "\" " + args).Trim() : ("-L \"" + Path.Combine(RetroarchCorePath, core + "_libretro.dll") + "\" \"" + rom + "\" " + args).Trim() }); }
public override ProcessStartInfo Generate(string system, string emulator, string core, string rom, string playersControllers, ScreenResolution resolution) { if (string.IsNullOrEmpty(RetroarchPath)) { return(null); } if (Path.GetExtension(rom).ToLowerInvariant() == ".game") { core = Path.GetFileNameWithoutExtension(rom); } else if (Path.GetExtension(rom).ToLowerInvariant() == ".libretro") { core = Path.GetFileNameWithoutExtension(rom); if (core == "xrick") { rom = Path.Combine(Path.GetDirectoryName(rom), "xrick", "data.zip"); } else if (core == "dinothawr") { rom = Path.Combine(Path.GetDirectoryName(rom), "dinothawr", "dinothawr.game"); } else { rom = null; } } // Extension used by hypseus .daphne but lr-daphne starts with .zip if (system == "daphne" || core == "daphne") { string datadir = Path.GetDirectoryName(rom); string romName = Path.GetFileNameWithoutExtension(rom); //romName = os.path.splitext(os.path.basename(rom))[0] rom = Path.GetFullPath(datadir + "/roms/" + romName + ".zip"); } if (core != null && core.IndexOf("dosbox", StringComparison.InvariantCultureIgnoreCase) >= 0) { string bat = Path.Combine(rom, "dosbox.bat"); if (File.Exists(bat)) { rom = bat; } else { string ext = Path.GetExtension(rom).ToLower(); if ((ext == ".dosbox" || ext == ".dos" || ext == ".pc") && File.Exists(rom)) { string tempRom = Path.Combine(Path.GetDirectoryName(rom), "dosbox.conf"); if (File.Exists(tempRom) && !new FileInfo(tempRom).Attributes.HasFlag(FileAttributes.Hidden)) { rom = tempRom; } else { try { if (File.Exists(tempRom)) { File.Delete(tempRom); } } catch { } try { File.Copy(rom, tempRom); new FileInfo(tempRom).Attributes |= FileAttributes.Hidden; rom = tempRom; _dosBoxTempRom = tempRom; } catch { } } } } } Configure(system, core, rom, resolution); List <string> commandArray = new List <string>(); string subSystem = SubSystem.GetSubSystem(core, system); if (!string.IsNullOrEmpty(subSystem)) { commandArray.Add("--subsystem"); commandArray.Add(subSystem); } if (!string.IsNullOrEmpty(SystemConfig["netplaymode"])) { // Netplay mode if (SystemConfig["netplaymode"] == "host") { commandArray.Add("--host"); } else if (SystemConfig["netplaymode"] == "client" || SystemConfig["netplaymode"] == "spectator") { commandArray.Add("--connect " + SystemConfig["netplayip"]); commandArray.Add("--port " + SystemConfig["netplayport"]); } } // RetroArch 1.7.8 requires the shaders to be passed as command line argument if (AppConfig.isOptSet("shaders") && SystemConfig.isOptSet("shader") && SystemConfig["shader"] != "None") { string videoDriver = ConfigFile.FromFile(Path.Combine(RetroarchPath, "retroarch.cfg"))["video_driver"]; bool isOpenGL = (emulator != "angle") && (videoDriver == "gl"); string shaderFilename = SystemConfig["shader"] + (isOpenGL ? ".glslp" : ".slangp"); string videoShader = Path.Combine(AppConfig.GetFullPath("shaders"), shaderFilename).Replace("/", "\\"); if (!File.Exists(videoShader)) { videoShader = Path.Combine(AppConfig.GetFullPath("shaders"), isOpenGL ? "shaders_glsl" : "shaders_slang", shaderFilename).Replace("/", "\\"); } if (!File.Exists(videoShader)) { videoShader = Path.Combine(AppConfig.GetFullPath("shaders"), isOpenGL ? "glsl" : "slang", shaderFilename).Replace("/", "\\"); } if (!File.Exists(videoShader)) { videoShader = Path.Combine(RetroarchPath, "shaders", isOpenGL ? "shaders_glsl" : "shaders_slang", shaderFilename).Replace("/", "\\"); } if (!File.Exists(videoShader) && !isOpenGL && shaderFilename.Contains("zfast-")) { videoShader = Path.Combine(RetroarchPath, "shaders", isOpenGL ? "shaders_glsl" : "shaders_slang", "crt/crt-geom.slangp").Replace("/", "\\"); } if (File.Exists(videoShader)) { commandArray.Add("--set-shader"); commandArray.Add("\"" + videoShader + "\""); } } string args = string.Join(" ", commandArray); return(new ProcessStartInfo() { FileName = Path.Combine(RetroarchPath, emulator == "angle" ? "retroarch_angle.exe" : "retroarch.exe"), WorkingDirectory = RetroarchPath, Arguments = string.IsNullOrEmpty(rom) ? ("-L \"" + Path.Combine(RetroarchCorePath, core + "_libretro.dll") + "\" " + args).Trim() : ("-L \"" + Path.Combine(RetroarchCorePath, core + "_libretro.dll") + "\" \"" + rom + "\" " + args).Trim() }); }