static void Main(string[] args) { SimpleLogger.Instance.Info("--------------------------------------------------------------"); SimpleLogger.Instance.Info(Environment.CommandLine); try { SetProcessDPIAware(); } catch { } LocalPath = Path.GetDirectoryName(typeof(Program).Assembly.Location); AppConfig = ConfigFile.FromFile(Path.Combine(LocalPath, "emulatorLauncher.cfg")); AppConfig.ImportOverrides(ConfigFile.FromArguments(args)); SystemConfig = ConfigFile.LoadEmulationStationSettings(Path.Combine(Program.AppConfig.GetFullPath("home"), "es_settings.cfg")); SystemConfig.ImportOverrides(ConfigFile.FromArguments(args)); SystemConfig.ImportOverrides(SystemConfig.LoadAll("global")); SystemConfig.ImportOverrides(SystemConfig.LoadAll(SystemConfig["system"])); SystemConfig.ImportOverrides(SystemConfig.LoadAll(SystemConfig["system"] + "[\"" + Path.GetFileName(SystemConfig["rom"]) + "\"]")); SystemConfig.ImportOverrides(ConfigFile.FromArguments(args)); LoadControllerConfiguration(args); ImportShaderOverrides(); if (!SystemConfig.isOptSet("rom")) { SimpleLogger.Instance.Error("rom not set"); return; } if (!File.Exists(SystemConfig.GetFullPath("rom")) && !Directory.Exists(SystemConfig.GetFullPath("rom"))) { SimpleLogger.Instance.Error("rom does not exist"); return; } if (!SystemConfig.isOptSet("system")) { SimpleLogger.Instance.Error("system not set"); return; } if (string.IsNullOrEmpty(SystemConfig["emulator"])) { SystemConfig["emulator"] = SystemDefaults.GetDefaultEmulator(SystemConfig["system"]); } if (string.IsNullOrEmpty(SystemConfig["core"])) { SystemConfig["core"] = SystemDefaults.GetDefaultCore(SystemConfig["system"]); } if (string.IsNullOrEmpty(SystemConfig["emulator"])) { SystemConfig["emulator"] = SystemConfig["system"]; } Generator generator = generators.Where(g => g.Key == SystemConfig["emulator"]).Select(g => g.Value()).FirstOrDefault(); if (generator == null && !string.IsNullOrEmpty(SystemConfig["emulator"]) && SystemConfig["emulator"].StartsWith("lr-")) { generator = new LibRetroGenerator(); } if (generator == null) { generator = generators.Where(g => g.Key == SystemConfig["system"]).Select(g => g.Value()).FirstOrDefault(); } if (generator != null) { using (var screenResolution = ScreenResolution.Parse(SystemConfig["videomode"])) { ProcessStartInfo path = generator.Generate(SystemConfig["system"], SystemConfig["emulator"], SystemConfig["core"], SystemConfig["rom"], null, screenResolution); if (path != null) { if (path.Arguments != null) { SimpleLogger.Instance.Info("-> " + path.FileName + " " + path.Arguments); } else { SimpleLogger.Instance.Info("-> " + path.FileName); } path.UseShellExecute = true; if (screenResolution != null && generator.DependsOnDesktopResolution) { screenResolution.Apply(); } Cursor.Position = new System.Drawing.Point(Screen.PrimaryScreen.Bounds.Right, Screen.PrimaryScreen.Bounds.Bottom / 2); PadToKey mapping = null; if (generator.UsePadToKey) { mapping = PadToKey.Load(Path.Combine(Program.AppConfig.GetFullPath("home"), "es_padtokey.cfg")); } mapping = LoadGamePadToKeyMapping(path, mapping); mapping = generator.SetupCustomPadToKeyMapping(mapping); using (new HighPerformancePowerScheme()) using (new JoystickListener(Controllers.Where(c => c.Config.DeviceName != "Keyboard").ToArray(), mapping)) generator.RunAndWait(path); } else { SimpleLogger.Instance.Error("generator failed"); } } generator.Cleanup(); } else { SimpleLogger.Instance.Error("Can't find generator"); } }