using System.Reflection; using HarmonyLib; using Sandbox; using Sandbox.Engine.Multiplayer; using Sandbox.Engine.Networking; using Sandbox.Engine.Platform.VideoMode; using Sandbox.Engine.Utils; using Sandbox.Game; using Sandbox.Game.Localization; using SpaceEngineers.Game; using SpaceEngineers.Game.Achievements; using SpaceEngineers.Game.GUI; using VRage; using VRage.EOS; using VRage.FileSystem; using VRage.Game; using VRage.GameServices; using VRage.Mod.Io; using VRage.Platform.Windows; using VRage.Plugins; using VRage.Steam; using VRage.UserInterface; using VRageRender; namespace CringeLauncher; public class Launcher : IDisposable { private const uint AppId = 244850U; private SpaceEngineersGame? _game; private readonly Harmony _harmony = new("CringeLauncher"); public void Initialize(string[] args) { _harmony.PatchAll(typeof(Launcher).Assembly); InitTexts(); SpaceEngineersGame.SetupBasicGameInfo(); MyFinalBuildConstants.APP_VERSION = MyPerGameSettings.BasicGameInfo.GameVersion.GetValueOrDefault(); MyShaderCompiler.Init(MyShaderCompiler.TargetPlatform.PC, false); MyVRageWindows.Init(MyPerGameSettings.BasicGameInfo.ApplicationName, MySandboxGame.Log, Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), MyPerGameSettings.BasicGameInfo.ApplicationName), false, false); if (MyVRage.Platform.System.SimulationQuality == SimulationQuality.Normal) { MyPlatformGameSettings.SIMPLIFIED_SIMULATION_OVERRIDE = false; } MyInitializer.InvokeBeforeRun(AppId, MyPerGameSettings.BasicGameInfo.ApplicationName, MyVRage.Platform.System.GetRootPath(), MyVRage.Platform.System.GetAppDataPath(),true, 3, () => { MyFakes.VOICE_CHAT_MIC_SENSITIVITY = MySandboxGame.Config.MicSensitivity; MyPlatformGameSettings.VOICE_CHAT_AUTOMATIC_ACTIVATION = MySandboxGame.Config.AutomaticVoiceChatActivation; }); MyVRage.Platform.Init(); InitUgc(); SpaceEngineersGame.SetupPerGameSettings(); MySandboxGame.InitMultithreading(); MyVRage.Platform.System.OnThreadpoolInitialized(); InitRender(); MyFileSystem.InitUserSpecific(MyGameService.UserId.ToString()); AccessTools.MethodDelegate>>(AccessTools.Method(typeof(MyPlugins), "LoadPlugins"))(new() { typeof(PluginLoader.Main).Assembly }); _game = new(args); } public void Run() => _game?.Run(); #region Keen shit private static void InitTexts() { MyLanguage.ObtainCurrentOSCulture(); var textsPath = Path.Combine(MyFileSystem.RootPath, "Content\\Data\\Localization\\CoreTexts"); var hashSet = new HashSet(); MyTexts.LoadSupportedLanguages(textsPath, hashSet); if (!MyTexts.Languages.TryGetValue(MyLanguage.GetOsLanguageCurrentOfficial(), out var description) && !MyTexts.Languages.TryGetValue(MyLanguagesEnum.English, out description)) return; MyTexts.LoadTexts(textsPath, description.CultureName, description.SubcultureName); } private static void InitUgc() { var steamGameService = MySteamGameService.Create(false, AppId); MyServiceManager.Instance.AddService(steamGameService); var aggregator = new MyServerDiscoveryAggregator(); MySteamGameService.InitNetworking(false, steamGameService, MyPerGameSettings.GameName, aggregator); MyEOSService.InitNetworking(false, false, MyPerGameSettings.GameName, steamGameService, "xyza7891964JhtVD93nm3nZp8t1MbnhC", "AKGM16qoFtct0IIIA8RCqEIYG4d4gXPPDNpzGuvlhLA", "24b1cd652a18461fa9b3d533ac8d6b5b", "1958fe26c66d4151a327ec162e4d49c8", "07c169b3b641401496d352cad1c905d6", "https://retail.epicgames.com/", MyEOSService.CreatePlatform(), MyPlatformGameSettings.VERBOSE_NETWORK_LOGGING, ArraySegment.Empty, aggregator, MyMultiplayer.Channels); MyServiceManager.Instance.AddService(aggregator); MyServiceManager.Instance.AddService(MySteamGameService.CreateMicrophone()); MyGameService.WorkshopService.AddAggregate(MySteamUgcService.Create(AppId, steamGameService)); var modUgc = MyModIoService.Create(MyServiceManager.Instance.GetService(), "spaceengineers", "264", "1fb4489996a5e8ffc6ec1135f9985b5b", "331", "f2b64abe55452252b030c48adc0c1f0e", MyPlatformGameSettings.UGC_TEST_ENVIRONMENT, false, MyPlatformGameSettings.MODIO_PLATFORM, MyPlatformGameSettings.MODIO_PORTAL); modUgc.IsConsentGiven = MySandboxGame.Config.ModIoConsent; MyGameService.WorkshopService.AddAggregate(modUgc); MySpaceEngineersAchievements.Initialize(); } private static void InitRender() { var renderQualityHint = MyVRage.Platform.Render.GetRenderQualityHint(); var preset = MyGuiScreenOptionsGraphics.GetPreset(renderQualityHint); MyRenderProxy.Settings.User = MyVideoSettingsManager .GetGraphicsSettingsFromConfig(ref preset, renderQualityHint > MyRenderPresetEnum.CUSTOM) .PerformanceSettings.RenderSettings; MyRenderProxy.Settings.EnableAnsel = MyPlatformGameSettings.ENABLE_ANSEL; MyRenderProxy.Settings.EnableAnselWithSprites = MyPlatformGameSettings.ENABLE_ANSEL_WITH_SPRITES; var graphicsRenderer = MySandboxGame.Config.GraphicsRenderer; MySandboxGame.Config.GraphicsRenderer = graphicsRenderer; _ = new MyEngine(); MyRenderProxy.Initialize(new MyDX11Render(MyRenderProxy.Settings)); } #endregion public void Dispose() { _game?.Dispose(); MyGameService.ShutDown(); MyInitializer.InvokeAfterRun(); MyVRage.Done(); } }