public static bool InitWithArguments(string[] args) { AppDomain.CurrentDomain.AssemblyResolve += OnAssemblyResolve; //Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException); AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); ClipboardHandler.Default = new WinFormsClipboard(); OperatingSystem os = Environment.OSVersion; PlatformID pid = os.Platform; ILocator gameLocator; bool linux = pid == PlatformID.MacOSX || pid == PlatformID.Unix; if (linux && Directory.Exists("/Users")) { gameLocator = new MacOSLocator(); } else if (linux) { gameLocator = new LinuxLocator(); } else { gameLocator = new WindowsLocator(); } bool useDX = false; #region User resolution parmeters foreach (var arg in args) { if (char.IsDigit(arg[0])) { //attempt parsing resoulution try { var split = arg.Split("x".ToCharArray()); int ScreenWidth = int.Parse(split[0]); int ScreenHeight = int.Parse(split[1]); GlobalSettings.Default.GraphicsWidth = ScreenWidth; GlobalSettings.Default.GraphicsHeight = ScreenHeight; } catch (Exception) { } } else if (arg[0] == '-') { var cmd = arg.Substring(1); if (cmd.StartsWith("lang")) { GlobalSettings.Default.LanguageCode = byte.Parse(cmd.Substring(4)); } else if (cmd.StartsWith("hz")) { GlobalSettings.Default.TargetRefreshRate = int.Parse(cmd.Substring(2)); } else { //normal style param switch (cmd) { case "dx11": case "dx": useDX = true; break; case "gl": case "ogl": useDX = false; break; } } } else { if (arg.Equals("w", StringComparison.InvariantCultureIgnoreCase)) { GlobalSettings.Default.Windowed = true; } else if (arg.Equals("f", StringComparison.InvariantCultureIgnoreCase)) { GlobalSettings.Default.Windowed = false; } } } #endregion UseDX = MonogameLinker.Link(useDX); /*if (GlobalSettings.Default.Windowed == false && !UseDX) * { * //temporary while SDL issues are fixed * MessageBox.Show("Fullscreen is currently disabled on OpenGL. Please switch to DirectX (-dx flag) if you really need to use fullscreen."); * }*/ var path = gameLocator.FindTheSimsOnline(); if (UseDX) { GlobalSettings.Default.AntiAlias = false; } if (path != null) { FSOEnvironment.ContentDir = "Content/"; FSOEnvironment.GFXContentDir = "Content/" + (UseDX ? "DX/" : "OGL/"); FSOEnvironment.Linux = linux; FSOEnvironment.DirectX = UseDX; FSOEnvironment.GameThread = Thread.CurrentThread; if (GlobalSettings.Default.LanguageCode == 0) { GlobalSettings.Default.LanguageCode = 1; } Files.Formats.IFF.Chunks.STR.DefaultLangCode = (Files.Formats.IFF.Chunks.STRLangCode)GlobalSettings.Default.LanguageCode; GlobalSettings.Default.StartupPath = path; GlobalSettings.Default.ClientVersion = GetClientVersion(); return(true); } else { //MessageBox.Show("The Sims Online was not found on your system. FreeSO will not be able to run without access to the original game files."); return(false); } }
public bool InitWithArguments(string[] args) { string baseDir = AppDomain.CurrentDomain.BaseDirectory; Directory.SetCurrentDirectory(baseDir); AppDomain.CurrentDomain.AssemblyResolve += OnAssemblyResolve; AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); OperatingSystem os = Environment.OSVersion; PlatformID pid = os.Platform; ILocator gameLocator; bool linux = pid == PlatformID.MacOSX || pid == PlatformID.Unix; if (linux && Directory.Exists("/Users")) { gameLocator = new MacOSLocator(); } else if (linux) { gameLocator = new LinuxLocator(); } else { gameLocator = new WindowsLocator(); } bool useDX = false; #region User resolution parmeters foreach (var arg in args) { if (char.IsDigit(arg[0])) { //attempt parsing resoulution try { var split = arg.Split("x".ToCharArray()); int ScreenWidth = int.Parse(split[0]); int ScreenHeight = int.Parse(split[1]); GlobalSettings.Default.GraphicsWidth = ScreenWidth; GlobalSettings.Default.GraphicsHeight = ScreenHeight; } catch (Exception) { } } else if (arg[0] == '-') { var cmd = arg.Substring(1); if (cmd.StartsWith("lang")) { GlobalSettings.Default.LanguageCode = byte.Parse(cmd.Substring(4)); } else if (cmd.StartsWith("hz")) { GlobalSettings.Default.TargetRefreshRate = int.Parse(cmd.Substring(2)); } else { //normal style param switch (cmd) { case "dx11": case "dx": useDX = true; break; case "gl": case "ogl": useDX = false; break; case "ts1": GlobalSettings.Default.TS1HybridEnable = true; break; case "tso": GlobalSettings.Default.TS1HybridEnable = false; break; case "3d": FSOEnvironment.Enable3D = true; break; case "touch": FSOEnvironment.SoftwareKeyboard = true; break; case "nosound": FSOEnvironment.NoSound = true; break; } } } else { if (arg.Equals("w", StringComparison.InvariantCultureIgnoreCase)) { GlobalSettings.Default.Windowed = true; } else if (arg.Equals("f", StringComparison.InvariantCultureIgnoreCase)) { GlobalSettings.Default.Windowed = false; } } } #endregion UseDX = MonogameLinker.Link(useDX); var path = gameLocator.FindTheSimsOnline(); if (path != null) { //check if this path has tso in it. tuning.dat should be a good indication. if (!File.Exists(Path.Combine(path, "tuning.dat"))) { ShowDialog("The Sims Online appears to be missing. The game expects TSO at directory '" + path + "', but some core files are missing from that folder. If you know you installed TSO into a different directory, please move it into the directory specified."); return(false); } FSOEnvironment.Args = string.Join(" ", args); FSOEnvironment.ContentDir = "Content/"; FSOEnvironment.GFXContentDir = "Content/" + (UseDX ? "DX/" : "OGL/"); FSOEnvironment.Linux = linux; FSOEnvironment.DirectX = UseDX; FSOEnvironment.GameThread = Thread.CurrentThread; if (GlobalSettings.Default.LanguageCode == 0) { GlobalSettings.Default.LanguageCode = 1; } Files.Formats.IFF.Chunks.STR.DefaultLangCode = (Files.Formats.IFF.Chunks.STRLangCode)GlobalSettings.Default.LanguageCode; GlobalSettings.Default.StartupPath = path; GlobalSettings.Default.ClientVersion = GetClientVersion(); return(true); } else { ShowDialog("The Sims Online was not found on your system. FreeSO will not be able to run without access to the original game files."); return(false); } }
static void Main(string[] args) { FSO.Windows.Program.InitWindows(); TimedReferenceController.SetMode(CacheType.PERMANENT); Console.WriteLine("Loading Config..."); try { var configString = File.ReadAllText("facadeconfig.json"); Config = Newtonsoft.Json.JsonConvert.DeserializeObject <FacadeConfig>(configString); } catch (Exception e) { Console.WriteLine("Could not find configuration file 'facadeconfig.json'. Please ensure it is valid and present in the same folder as this executable."); return; } Console.WriteLine("Locating The Sims Online..."); string baseDir = AppDomain.CurrentDomain.BaseDirectory; Directory.SetCurrentDirectory(baseDir); //Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException); OperatingSystem os = Environment.OSVersion; PlatformID pid = os.Platform; ILocator gameLocator; bool linux = pid == PlatformID.MacOSX || pid == PlatformID.Unix; if (linux && Directory.Exists("/Users")) { gameLocator = new MacOSLocator(); } else if (linux) { gameLocator = new LinuxLocator(); } else { gameLocator = new WindowsLocator(); } bool useDX = true; FSOEnvironment.Enable3D = true; GameThread.NoGame = true; GameThread.UpdateExecuting = true; var path = gameLocator.FindTheSimsOnline(); if (path != null) { FSOEnvironment.ContentDir = "Content/"; FSOEnvironment.GFXContentDir = "Content/" + (useDX ? "DX/" : "OGL/"); FSOEnvironment.Linux = linux; FSOEnvironment.DirectX = useDX; FSOEnvironment.GameThread = Thread.CurrentThread; FSO.HIT.HITVM.Init(); FSO.HIT.HITVM.Get().SetMasterVolume(FSO.HIT.Model.HITVolumeGroup.AMBIENCE, 0); FSO.HIT.HITVM.Get().SetMasterVolume(FSO.HIT.Model.HITVolumeGroup.FX, 0); FSO.HIT.HITVM.Get().SetMasterVolume(FSO.HIT.Model.HITVolumeGroup.MUSIC, 0); FSO.HIT.HITVM.Get().SetMasterVolume(FSO.HIT.Model.HITVolumeGroup.VOX, 0); FSO.Files.Formats.IFF.Chunks.STR.DefaultLangCode = FSO.Files.Formats.IFF.Chunks.STRLangCode.EnglishUS; } Console.WriteLine("Creating Graphics Device..."); var gds = new GraphicsDeviceServiceMock(); var gd = gds.GraphicsDevice; //set up some extra stuff like the content manager var services = new GameServiceContainer(); var content = new ContentManager(services); content.RootDirectory = FSOEnvironment.GFXContentDir; services.AddService <IGraphicsDeviceService>(gds); var vitaboyEffect = content.Load <Effect>("Effects/Vitaboy"); FSO.Vitaboy.Avatar.setVitaboyEffect(vitaboyEffect); WorldConfig.Current = new WorldConfig() { LightingMode = 3, SmoothZoom = true, SurroundingLots = 0 }; DGRP3DMesh.Sync = true; Console.WriteLine("Looks like that worked. Loading FSO Content!"); VMContext.InitVMConfig(false); Content.Init(path, gd); WorldContent.Init(services, content.RootDirectory); VMAmbientSound.ForceDisable = true; Layer = new _3DLayer(); Layer.Initialize(gd); GD = gd; Console.WriteLine("Starting Worker Loop!"); WorkerLoop(); Console.WriteLine("Exiting."); GameThread.Killed = true; GameThread.OnKilled.Set(); gds.Release(); }
static void Main(string[] args) { AppDomain.CurrentDomain.AssemblyResolve += OnAssemblyResolve; OperatingSystem os = Environment.OSVersion; PlatformID pid = os.Platform; ILocator gameLocator; bool linux = pid == PlatformID.MacOSX || pid == PlatformID.Unix; if (linux && Directory.Exists("/Users")) { gameLocator = new MacOSLocator(); } else if (linux) { gameLocator = new LinuxLocator(); } else { gameLocator = new WindowsLocator(); } var useDX = !linux; var path = gameLocator.FindTheSims1(); FSOEnvironment.Enable3D = false; bool ide = false; bool aa = false; bool jit = false; #region User resolution parmeters foreach (var arg in args) { if (arg[0] == '-') { var cmd = arg.Substring(1); if (cmd.StartsWith("lang")) { GlobalSettings.Default.LanguageCode = byte.Parse(cmd.Substring(4)); } else if (cmd.StartsWith("hz")) { GlobalSettings.Default.TargetRefreshRate = int.Parse(cmd.Substring(2)); } else { //normal style param switch (cmd) { case "ide": ide = true; break; case "3d": FSOEnvironment.Enable3D = true; break; case "aa": aa = true; break; case "jit": jit = true; break; case "dx": case "dx11": useDX = true; break; case "gl": case "ogl": useDX = false; break; case "touch": FSOEnvironment.SoftwareKeyboard = true; break; case "nosound": FSOEnvironment.NoSound = true; break; } } } } #endregion useDX = MonogameLinker.Link(useDX); FSO.Files.ImageLoaderHelpers.BitmapFunction = BitmapReader; AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; FSOEnvironment.SoftwareDepth = false; FSOEnvironment.UseMRT = true; if (path != null) { FSOEnvironment.ContentDir = "Content/"; FSOEnvironment.GFXContentDir = "Content/" + (useDX ? "DX/" : "OGL/"); FSOEnvironment.UserDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Simitone/").Replace('\\', '/'); Directory.CreateDirectory(FSOEnvironment.UserDir); FSOEnvironment.Linux = false; FSOEnvironment.DirectX = useDX; FSOEnvironment.GameThread = Thread.CurrentThread; if (GlobalSettings.Default.LanguageCode == 0) { GlobalSettings.Default.LanguageCode = 1; } FSO.Files.Formats.IFF.Chunks.STR.DefaultLangCode = (FSO.Files.Formats.IFF.Chunks.STRLangCode)GlobalSettings.Default.LanguageCode; GlobalSettings.Default.StartupPath = path; GlobalSettings.Default.TS1HybridEnable = true; GlobalSettings.Default.TS1HybridPath = path; GlobalSettings.Default.ClientVersion = "0"; GlobalSettings.Default.LightingMode = 3; GlobalSettings.Default.AntiAlias = aa ? 1 : 0; GlobalSettings.Default.ComplexShaders = true; GlobalSettings.Default.EnableTransitions = true; if (ide) { new FSO.IDE.VolcanicStartProxy().InitVolcanic(args); } var assemblies = new FSO.SimAntics.JIT.Runtime.AssemblyStore(); //var globals = new TS1.Scripts.Dummy(); //make sure scripts assembly is loaded if (jit) { assemblies.InitAOT(); } FSO.SimAntics.Engine.VMTranslator.INSTANCE = new FSO.SimAntics.JIT.Runtime.VMAOTTranslator(assemblies); var start = new GameStartProxy(); start.Start(useDX); } }