Skip to content
Beta: this is a preview of the new SplitScreen.Me. Data may be reset before launch.

Subnautica · handler “Subnautica Nitrox”

Version 8 (current)

Release notes

updated for nitrox 1.8

Released
Size
23.2 MB
Downloads
14,217
Check
Verified
SHA-256
db23835838156aa9e32ea1edfa54b7385ae6a1acd82cb0bc9660a0c7cee4ec86
Download v8 (.nc)All versions

Files 176

PathSize
handler.js12 KB
SubnauticaNitrox/Nitrox/lib/AssetsTools.NET.dll214 KB
SubnauticaNitrox/Nitrox/lib/Autofac.dll226 KB
SubnauticaNitrox/Nitrox/lib/Avalonia.Base.dll2.0 MB
SubnauticaNitrox/Nitrox/lib/Avalonia.Controls.dll1.0 MB
SubnauticaNitrox/Nitrox/lib/Avalonia.DesignerSupport.dll204 KB
SubnauticaNitrox/Nitrox/lib/Avalonia.Desktop.dll15 KB
SubnauticaNitrox/Nitrox/lib/Avalonia.Dialogs.dll237 KB
SubnauticaNitrox/Nitrox/lib/Avalonia.dll4.0 KB
SubnauticaNitrox/Nitrox/lib/Avalonia.FreeDesktop.dll193 KB
SubnauticaNitrox/Nitrox/lib/Avalonia.Markup.dll64 KB
SubnauticaNitrox/Nitrox/lib/Avalonia.Markup.Xaml.dll83 KB
SubnauticaNitrox/Nitrox/lib/Avalonia.Metal.dll14 KB
SubnauticaNitrox/Nitrox/lib/Avalonia.MicroCom.dll15 KB
SubnauticaNitrox/Nitrox/lib/Avalonia.Native.dll289 KB
SubnauticaNitrox/Nitrox/lib/Avalonia.OpenGL.dll112 KB
SubnauticaNitrox/Nitrox/lib/Avalonia.Remote.Protocol.dll68 KB
SubnauticaNitrox/Nitrox/lib/Avalonia.Skia.dll125 KB
SubnauticaNitrox/Nitrox/lib/Avalonia.Svg.Skia.dll33 KB
SubnauticaNitrox/Nitrox/lib/Avalonia.Themes.Fluent.dll563 KB
SubnauticaNitrox/Nitrox/lib/Avalonia.Vulkan.dll186 KB
SubnauticaNitrox/Nitrox/lib/Avalonia.Win32.Automation.dll111 KB
SubnauticaNitrox/Nitrox/lib/Avalonia.Win32.dll887 KB
SubnauticaNitrox/Nitrox/lib/Avalonia.X11.dll330 KB
SubnauticaNitrox/Nitrox/lib/Avalonia.Xaml.Interactions.dll74 KB
SubnauticaNitrox/Nitrox/lib/Avalonia.Xaml.Interactivity.dll54 KB
SubnauticaNitrox/Nitrox/lib/av_libglesv2.dll5.2 MB
SubnauticaNitrox/Nitrox/lib/BinaryPack.dll63 KB
SubnauticaNitrox/Nitrox/lib/CommunityToolkit.Mvvm.dll118 KB
SubnauticaNitrox/Nitrox/lib/dnlib.dll1.1 MB
SubnauticaNitrox/Nitrox/lib/ExCSS.dll339 KB
SubnauticaNitrox/Nitrox/lib/HarfBuzzSharp.dll120 KB
SubnauticaNitrox/Nitrox/lib/JetBrains.Annotations.dll111 KB
SubnauticaNitrox/Nitrox/lib/libHarfBuzzSharp.dll1.7 MB
SubnauticaNitrox/Nitrox/lib/libSkiaSharp.dll9.2 MB
SubnauticaNitrox/Nitrox/lib/LiteNetLib.dll109 KB
SubnauticaNitrox/Nitrox/lib/LitJSON.dll68 KB
SubnauticaNitrox/Nitrox/lib/MicroCom.Runtime.dll14 KB
SubnauticaNitrox/Nitrox/lib/Microsoft.Extensions.Configuration.Abstractions.dll29 KB
SubnauticaNitrox/Nitrox/lib/Microsoft.Extensions.Configuration.Binder.dll44 KB
SubnauticaNitrox/Nitrox/lib/Microsoft.Extensions.Configuration.dll44 KB
SubnauticaNitrox/Nitrox/lib/Microsoft.Extensions.DependencyInjection.Abstractions.dll64 KB
SubnauticaNitrox/Nitrox/lib/Microsoft.Extensions.DependencyInjection.dll91 KB
SubnauticaNitrox/Nitrox/lib/Microsoft.Extensions.Diagnostics.Abstractions.dll31 KB
SubnauticaNitrox/Nitrox/lib/Microsoft.Extensions.Diagnostics.dll36 KB
SubnauticaNitrox/Nitrox/lib/Microsoft.Extensions.Http.dll91 KB
SubnauticaNitrox/Nitrox/lib/Microsoft.Extensions.Logging.Abstractions.dll66 KB
SubnauticaNitrox/Nitrox/lib/Microsoft.Extensions.Logging.dll51 KB
SubnauticaNitrox/Nitrox/lib/Microsoft.Extensions.Options.ConfigurationExtensions.dll22 KB
SubnauticaNitrox/Nitrox/lib/Microsoft.Extensions.Options.dll65 KB
SubnauticaNitrox/Nitrox/lib/Microsoft.Extensions.Primitives.dll44 KB
SubnauticaNitrox/Nitrox/lib/Mono.Cecil.dll348 KB
SubnauticaNitrox/Nitrox/lib/Mono.Cecil.Mdb.dll39 KB
SubnauticaNitrox/Nitrox/lib/Mono.Cecil.Pdb.dll87 KB
SubnauticaNitrox/Nitrox/lib/Mono.Cecil.Rocks.dll24 KB
SubnauticaNitrox/Nitrox/lib/Mono.Nat.dll69 KB
SubnauticaNitrox/Nitrox/lib/net472/0Harmony.dll258 KB
SubnauticaNitrox/Nitrox/lib/net472/Autofac.dll227 KB
SubnauticaNitrox/Nitrox/lib/net472/BinaryPack.dll62 KB
SubnauticaNitrox/Nitrox/lib/net472/DiscordGameSDKWrapper.dll104 KB
SubnauticaNitrox/Nitrox/lib/net472/discord_game_sdk.dll3.3 MB
SubnauticaNitrox/Nitrox/lib/net472/FMODUnity.dll208 KB
SubnauticaNitrox/Nitrox/lib/net472/JetBrains.Annotations.dll111 KB
SubnauticaNitrox/Nitrox/lib/net472/LiteNetLib.dll106 KB
SubnauticaNitrox/Nitrox/lib/net472/LitJSON.dll63 KB
SubnauticaNitrox/Nitrox/lib/net472/Microsoft.Bcl.AsyncInterfaces.dll26 KB
SubnauticaNitrox/Nitrox/lib/net472/Microsoft.Win32.Registry.dll26 KB
SubnauticaNitrox/Nitrox/lib/net472/Mono.Cecil.dll350 KB
SubnauticaNitrox/Nitrox/lib/net472/Mono.Cecil.Mdb.dll42 KB
SubnauticaNitrox/Nitrox/lib/net472/Mono.Cecil.Pdb.dll88 KB
SubnauticaNitrox/Nitrox/lib/net472/Mono.Cecil.Rocks.dll27 KB
SubnauticaNitrox/Nitrox/lib/net472/Mono.Nat.dll67 KB
SubnauticaNitrox/Nitrox/lib/net472/MonoMod.RuntimeDetour.dll109 KB
SubnauticaNitrox/Nitrox/lib/net472/MonoMod.Utils.dll193 KB
SubnauticaNitrox/Nitrox/lib/net472/Newtonsoft.Json.dll684 KB
SubnauticaNitrox/Nitrox/lib/net472/NitroxClient.dll893 KB
SubnauticaNitrox/Nitrox/lib/net472/NitroxModel-Subnautica.dll68 KB
SubnauticaNitrox/Nitrox/lib/net472/NitroxModel.dll457 KB
SubnauticaNitrox/Nitrox/lib/net472/NitroxPatcher.dll565 KB
SubnauticaNitrox/Nitrox/lib/net472/NitroxPatcher.dll.config541 B
SubnauticaNitrox/Nitrox/lib/net472/protobuf-net.dll179 KB
SubnauticaNitrox/Nitrox/lib/net472/Sentry.dll21 KB
SubnauticaNitrox/Nitrox/lib/net472/Serilog.dll160 KB
SubnauticaNitrox/Nitrox/lib/net472/Serilog.Sinks.Async.dll17 KB
SubnauticaNitrox/Nitrox/lib/net472/Serilog.Sinks.File.dll32 KB
SubnauticaNitrox/Nitrox/lib/net472/Serilog.Sinks.Map.dll14 KB
SubnauticaNitrox/Nitrox/lib/net472/System.Buffers.dll23 KB
SubnauticaNitrox/Nitrox/lib/net472/System.Diagnostics.DiagnosticSource.dll185 KB
SubnauticaNitrox/Nitrox/lib/net472/System.IO.FileSystem.AccessControl.dll28 KB
SubnauticaNitrox/Nitrox/lib/net472/System.IO.Pipelines.dll83 KB
SubnauticaNitrox/Nitrox/lib/net472/System.Memory.dll139 KB
SubnauticaNitrox/Nitrox/lib/net472/System.Numerics.Vectors.dll108 KB
SubnauticaNitrox/Nitrox/lib/net472/System.Runtime.CompilerServices.Unsafe.dll19 KB
SubnauticaNitrox/Nitrox/lib/net472/System.Security.AccessControl.dll33 KB
SubnauticaNitrox/Nitrox/lib/net472/System.Security.Principal.Windows.dll18 KB
SubnauticaNitrox/Nitrox/lib/net472/System.Text.Encodings.Web.dll78 KB
SubnauticaNitrox/Nitrox/lib/net472/System.Text.Json.dll710 KB
SubnauticaNitrox/Nitrox/lib/net472/System.Threading.Channels.dll72 KB
SubnauticaNitrox/Nitrox/lib/net472/System.Threading.Tasks.Extensions.dll25 KB
SubnauticaNitrox/Nitrox/lib/net472/System.ValueTuple.dll25 KB
SubnauticaNitrox/Nitrox/lib/Newtonsoft.Json.dll677 KB
SubnauticaNitrox/Nitrox/lib/NitroxModel-Subnautica.dll41 KB
SubnauticaNitrox/Nitrox/lib/NitroxModel.dll452 KB
SubnauticaNitrox/Nitrox/lib/NitroxServer.dll268 KB
SubnauticaNitrox/Nitrox/lib/NitroxServer.dll.config1.2 KB
SubnauticaNitrox/Nitrox/lib/protobuf-net.dll179 KB
SubnauticaNitrox/Nitrox/lib/Serilog.dll158 KB
SubnauticaNitrox/Nitrox/lib/Serilog.Sinks.Async.dll15 KB
SubnauticaNitrox/Nitrox/lib/Serilog.Sinks.File.dll30 KB
SubnauticaNitrox/Nitrox/lib/Serilog.Sinks.Map.dll12 KB
SubnauticaNitrox/Nitrox/lib/ShimSkiaSharp.dll154 KB
SubnauticaNitrox/Nitrox/lib/SixLabors.ImageSharp.dll1.7 MB
SubnauticaNitrox/Nitrox/lib/SkiaSharp.dll471 KB
SubnauticaNitrox/Nitrox/lib/SkiaSharp.HarfBuzz.dll24 KB
SubnauticaNitrox/Nitrox/lib/Svg.Custom.dll717 KB
SubnauticaNitrox/Nitrox/lib/Svg.Model.dll143 KB
SubnauticaNitrox/Nitrox/lib/Svg.Skia.dll55 KB
SubnauticaNitrox/Nitrox/lib/Tmds.DBus.Protocol.dll196 KB
SubnauticaNitrox/Nitrox/LICENSE.txt32 KB
SubnauticaNitrox/Nitrox/Nitrox.Launcher.deps.json52 KB
SubnauticaNitrox/Nitrox/Nitrox.Launcher.dll6.8 MB
SubnauticaNitrox/Nitrox/Nitrox.Launcher.exe186 KB
SubnauticaNitrox/Nitrox/Nitrox.Launcher.runtimeconfig.json485 B
SubnauticaNitrox/Nitrox/NitroxServer-Subnautica.deps.json18 KB
SubnauticaNitrox/Nitrox/NitroxServer-Subnautica.dll113 KB
SubnauticaNitrox/Nitrox/NitroxServer-Subnautica.dll.config723 B
SubnauticaNitrox/Nitrox/NitroxServer-Subnautica.exe153 KB
SubnauticaNitrox/Nitrox/NitroxServer-Subnautica.runtimeconfig.json340 B
SubnauticaNitrox/Nitrox/PATCH NOTES.txt32 KB
SubnauticaNitrox/Nitrox/README.txt957 B
SubnauticaNitrox/Nitrox/Resources/AssetBundles/chatkeyhint55 KB
SubnauticaNitrox/Nitrox/Resources/AssetBundles/chatlog23 KB
SubnauticaNitrox/Nitrox/Resources/AssetBundles/discordjoinrequest9.2 KB
SubnauticaNitrox/Nitrox/Resources/AssetBundles/playerlisttab24 KB
SubnauticaNitrox/Nitrox/Resources/AssetBundles/sharedassets154 KB
SubnauticaNitrox/Nitrox/Resources/classdata.tpk154 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/af.json2.4 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/bg.json8.7 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/ca.json3.8 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/cs.json7.2 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/da.json6.8 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/de.json7.6 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/el.json11 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/en.json6.6 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/es-419.json4.1 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/es.json7.1 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/et.json2.4 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/fi.json7.0 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/fr.json7.4 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/ga.json7.6 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/hr.json4.5 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/hu.json7.7 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/it.json7.3 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/ja.json6.3 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/ko.json6.8 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/lt.json6.4 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/lv.json3.3 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/nl.json6.4 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/no.json6.9 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/pl.json7.1 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/pt-BR.json7.3 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/pt.json6.1 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/ro.json6.8 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/ru.json9.8 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/sk.json6.3 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/sl.json5.5 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/sr-Cyrl.json852 B
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/sr.json6.9 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/sv.json5.9 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/th.json9.0 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/tr.json7.3 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/uk.json8.7 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/vi.json7.9 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/zh-Hans.json6.4 KB
SubnauticaNitrox/Nitrox/Resources/LanguageFiles/zh-Hant.json6.5 KB
SubnauticaNitrox/Nitrox/Resources/SoundWhitelist_Subnautica.csv53 KB

handler.js

Plain text
Hub.Handler.Version = 8; // Released at https://hub.splitscreen.me/ on Sat Oct 25 2025 09:53:11 GMT+0000 (Coordinated Universal Time).
Hub.Handler.Id = "SXxys76eLF6BC36PF";
Hub.Maintainer.Name = "Talos91";
Hub.Maintainer.Id = "eeL7HAz8zJovChWw4";

Game.ExecutableContext = ["Subnautica_Data"];
Game.RequiresAdmin = true;
Game.HandlerInterval = 100;
Game.SymlinkExe = false;
Game.SymlinkGame = false;
Game.ExecutableName = "Subnautica.exe";
Game.SteamID = "264710";
Game.GUID = "Subnautica";
Game.GameName = "Subnautica Nitrox";
Game.MaxPlayers = 5;
Game.MaxPlayersOneMonitor = 5;
Game.UseGoldberg = false;
Game.SetTopMostAtEnd = true;
Game.Hook.ForceFocus = false;
Game.Hook.ForceFocusWindowName = "Subnautica";
Game.ResetWindows = true;
Game.RefreshWindowAfterStart = true;
Game.SetForegroundWindowElsewhere = true;
Game.Hook.DInputEnabled = false;
Game.Hook.XInputEnabled = true;
Game.Hook.XInputReroute = false;
Game.Hook.CustomDllEnabled = false;
Game.Description =
  "IMPORTANT: This uses the Subnautica [Nitrox]{https://github.com/SubnauticaNitrox/Nitrox} Alpha v1.8.0.1 build, credit to the great devs that made Nitrox, you need the latest game version. After running this via Nucleus go to options and enable allow multiple game instances in the Nitrox launcher window that will open, then select play game-play multiplayer, once the first game instance has launched set the game to windowed if it is in exclusive fullscreen, join the local server using the game multiplayer menu, write a name and select a color using your main mouse\\kb, once you are in-game select the Subnautica process on Nucleus process picker window, click refresh if you do not see it, wait for the instance to reposition then open the next Subnautica instance via the Nitrox Launcher too, repeat the same steps as in the previous instance. Enable the controller in the game options for the gamepad instances or go to options and move the controller left stick. If you use keyboards and mice after all the instances have launched, resized and positioned correctly, press the END key once to lock the input for all instances to have their own cursor, you need to left click each mouse to make the emulated cursors appear after locking the input. Press the END key again to unlock the input when you finish playing. You can also use CTRL+Q to close Nucleus and all its instances when the input is unlocked. Reduce in-game graphics settings in your main game to improve performance.";
Game.ThirdPartyLaunch = true;
Game.IgnoreThirdPartyPrompt = true;
Game.ForceProcessPick = true;
Game.PauseBetweenProcessGrab = 15;
Game.PauseBetweenStarts = 30;

//USS deprecated options:

Game.HookSetCursorPos = false;
Game.HookGetCursorPos = false;
Game.HookGetKeyState = false;
Game.HookGetAsyncKeyState = false;
Game.HookGetKeyboardState = false;
Game.HookFilterRawInput = false;
Game.HookFilterMouseMessages = false;
Game.HookUseLegacyInput = false;
Game.HookDontUpdateLegacyInMouseMsg = false;
Game.HookMouseVisibility = false;

Game.SendNormalMouseInput = false;
Game.SendNormalKeyboardInput = false;
Game.SendScrollWheel = false;
Game.ForwardRawKeyboardInput = false;
Game.ForwardRawMouseInput = false;
Game.HookReRegisterRawInput = false;
Game.HookReRegisterRawInputMouse = false;
Game.HookReRegisterRawInputKeyboard = false;
Game.DrawFakeMouseCursor = false;

//ProtoInput:

Game.SupportsMultipleKeyboardsAndMice = true;

Game.ProtoInput.InjectStartup = false;
Game.ProtoInput.InjectRuntime_RemoteLoadMethod = false;
Game.ProtoInput.InjectRuntime_EasyHookMethod = true;
Game.ProtoInput.InjectRuntime_EasyHookStealthMethod = false;

Game.LockInputAtStart = false;
Game.LockInputSuspendsExplorer = true;
Game.ProtoInput.FreezeExternalInputWhenInputNotLocked = false;
Game.LockInputToggleKey = 0x23;

Game.ProtoInput.RenameHandlesHook = false;
Game.ProtoInput.RenameHandles = [];
Game.ProtoInput.RenameNamedPipes = [];

Game.ProtoInput.RegisterRawInputHook = false;
Game.ProtoInput.GetRawInputDataHook = false;
Game.ProtoInput.MessageFilterHook = true;
Game.ProtoInput.GetCursorPosHook = false;
Game.ProtoInput.SetCursorPosHook = false;
Game.ProtoInput.GetKeyStateHook = false;
Game.ProtoInput.GetAsyncKeyStateHook = false;
Game.ProtoInput.GetKeyboardStateHook = false;
Game.ProtoInput.CursorVisibilityHook = false;
Game.ProtoInput.ClipCursorHook = true;
Game.ProtoInput.FocusHooks = false;
Game.ProtoInput.DrawFakeCursor = false;
Game.ProtoInput.ClipCursorHookCreatesFakeClip = true;
Game.ProtoInput.EnableToggleFakeCursorVisibilityShortcut = false;
Game.ProtoInput.DontShowCursorWhenImageUpdated = true;

Game.ProtoInput.RawInputFilter = false;
Game.ProtoInput.MouseMoveFilter = false;
Game.ProtoInput.MouseActivateFilter = false;
Game.ProtoInput.WindowActivateFilter = false;
Game.ProtoInput.WindowActvateAppFilter = false;
Game.ProtoInput.MouseWheelFilter = false;
Game.ProtoInput.MouseButtonFilter = false;
Game.ProtoInput.KeyboardButtonFilter = true;
Game.ProtoInput.AutoHideTaskbar = false;

Game.ProtoInput.SendMouseWheelMessages = true;
Game.ProtoInput.SendMouseButtonMessages = true;
Game.ProtoInput.SendMouseMovementMessages = true;
Game.ProtoInput.SendKeyboardButtonMessages = true;
Game.ProtoInput.XinputHook = true;
Game.ProtoInput.UseDinputRedirection = false;
Game.ProtoInput.UseOpenXinput = true;
Game.ProtoInput.MultipleProtoControllers = true;

Game.ProtoInput.EnableFocusMessageLoop = false;
//Game.ProtoInput.FocusLoopIntervalMilliseconds = 5;
//Game.ProtoInput.FocusLoop_WM_ACTIVATE = true;
//Game.ProtoInput.FocusLoop_WM_ACTIVATEAPP = true;
//Game.ProtoInput.FocusLoop_WM_NCACTIVATE = true;
//Game.ProtoInput.FocusLoop_WM_SETFOCUS = true;
//Game.ProtoInput.FocusLoop_WM_MOUSEACTIVATE = true;
Game.ProtoInput.BlockedMessages = [0x0008, 0x02a3, 0x02a1]; // Blocks WM_KILLFOCUS, WM_MOUSEHOVER and WM_MOUSELEAVE

Game.Play = function() {
  Context.EditRegKey("HKEY_CURRENT_USER", "SOFTWARE\\Unknown Worlds\\Subnautica", "Screenmanager Fullscreen mode_h3630240806", 3, Nucleus.RegType.DWord);
  Context.EditRegKey("HKEY_CURRENT_USER", "SOFTWARE\\Unknown Worlds\\Subnautica", "Screenmanager Is Fullscreen mode_h3981298716", 0, Nucleus.RegType.DWord);
  Context.EditRegKey("HKEY_CURRENT_USER", "SOFTWARE\\Unknown Worlds\\Subnautica", "Screenmanager Resolution Height_h2627697771", Context.Height, Nucleus.RegType.DWord);
  Context.EditRegKey("HKEY_CURRENT_USER", "SOFTWARE\\Unknown Worlds\\Subnautica", "Screenmanager Resolution Width_h182942802", Context.Width, Nucleus.RegType.DWord);
  Context.EditRegKey("HKEY_CURRENT_USER", "SOFTWARE\\Unknown Worlds\\Subnautica", "Screenmanager Resolution Use Native_h1405027254", 0, Nucleus.RegType.DWord);

  var appid = Context.RootInstallFolder + "\\steam_appid.txt";
  var lines = ["264710"];
  Context.WriteTextFile(appid, lines);

  var Gamefolder = System.IO.Path.Combine(Game.Folder);

  Context.RunAdditionalFiles(["1|" + Gamefolder + "\\Nitrox\\NitroxServer-Subnautica.exe"], false, 1);

  Context.RunAdditionalFiles(["1|" + Gamefolder + "\\Nitrox\\Nitrox.Launcher.exe"], false, 1);

  var path = Gamefolder + "\\Nitrox\\path.txt";
  var lines = ["" + Context.RootInstallFolder];
  Context.WriteTextFile(path, lines);

  Game.KillProcessesOnClose = ["Nitrox.Launcher", "NitroxServer-Subnautica"];

  if (Context.IsKeyboardPlayer) {
    Game.ProtoInput.KeyboardButtonFilter = true;
  } else {
    Game.ProtoInput.KeyboardButtonFilter = false;
  }

  Game.ProtoInput.OnInputLocked = function() {
    for (var i = 0; i < PlayerList.Count; i++) {
      var player = PlayerList[i];

      ProtoInput.InstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.GetCursorPosHookID);
      ProtoInput.InstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.SetCursorPosHookID);
      ProtoInput.InstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.GetKeyStateHookID);
      ProtoInput.InstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.GetAsyncKeyStateHookID);
      ProtoInput.InstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.GetKeyboardStateHookID);
      ProtoInput.InstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.CursorVisibilityStateHookID);
      ProtoInput.InstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.GetRawInputDataHookID);
      ProtoInput.InstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.RegisterRawInputHookID);
      //ProtoInput.InstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.MessageFilterHookID);

      //ProtoInput.InstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.FocusHooksHookID);

      //Avoid the mouse move filter unless absolutely necessary as it can massively affect performance if the game gets primary input from mouse move messages
      //ProtoInput.EnableMessageFilter(player.ProtoInputInstanceHandle, ProtoInput.Values.MouseMoveFilterID);

      ProtoInput.EnableMessageFilter(player.ProtoInputInstanceHandle, ProtoInput.Values.RawInputFilterID);
      ProtoInput.EnableMessageFilter(player.ProtoInputInstanceHandle, ProtoInput.Values.MouseActivateFilterID);
      ProtoInput.EnableMessageFilter(player.ProtoInputInstanceHandle, ProtoInput.Values.WindowActivateFilterID);
      ProtoInput.EnableMessageFilter(player.ProtoInputInstanceHandle, ProtoInput.Values.WindowActivateAppFilterID);
      ProtoInput.EnableMessageFilter(player.ProtoInputInstanceHandle, ProtoInput.Values.MouseWheelFilterID);
      ProtoInput.EnableMessageFilter(player.ProtoInputInstanceHandle, ProtoInput.Values.MouseButtonFilterID);

      ProtoInput.SetDrawFakeCursor(player.ProtoInputInstanceHandle, true);
    }
  };

  Game.ProtoInput.OnInputUnlocked = function() {
    for (var i = 0; i < PlayerList.Count; i++) {
      var player = PlayerList[i];

      ProtoInput.UninstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.GetCursorPosHookID);
      ProtoInput.UninstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.SetCursorPosHookID);
      ProtoInput.UninstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.GetKeyStateHookID);
      ProtoInput.UninstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.GetAsyncKeyStateHookID);
      ProtoInput.UninstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.GetKeyboardStateHookID);
      ProtoInput.UninstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.CursorVisibilityStateHookID);
      ProtoInput.UninstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.GetRawInputDataHookID);
      ProtoInput.UninstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.RegisterRawInputHookID);
      //ProtoInput.UninstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.MessageFilterHookID);

      ProtoInput.UninstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.FocusHooksHookID);

      ProtoInput.DisableMessageFilter(player.ProtoInputInstanceHandle, ProtoInput.Values.RawInputFilterID);
      ProtoInput.DisableMessageFilter(player.ProtoInputInstanceHandle, ProtoInput.Values.MouseMoveFilterID);
      ProtoInput.DisableMessageFilter(player.ProtoInputInstanceHandle, ProtoInput.Values.MouseActivateFilterID);
      ProtoInput.DisableMessageFilter(player.ProtoInputInstanceHandle, ProtoInput.Values.WindowActivateFilterID);
      ProtoInput.DisableMessageFilter(player.ProtoInputInstanceHandle, ProtoInput.Values.WindowActivateAppFilterID);
      ProtoInput.DisableMessageFilter(player.ProtoInputInstanceHandle, ProtoInput.Values.MouseWheelFilterID);
      ProtoInput.DisableMessageFilter(player.ProtoInputInstanceHandle, ProtoInput.Values.MouseButtonFilterID);

      ProtoInput.StartFocusMessageLoop(player.ProtoInputInstanceHandle, 8000, true, true, false, false, false);

      ProtoInput.SetDrawFakeCursor(player.ProtoInputInstanceHandle, false);
    }
  };

  var numPlayers = 0;

  for (var i = 0; i < PlayerList.Count; i++) {
    var player = PlayerList[i];

    if (player.IsXInput && player.ScreenIndex !== -1) {
      numPlayers++;
    }
    player.ProtoController1 = Context.GamepadId;
    player.ProtoController2 = Context.GamepadId;
    player.ProtoController3 = Context.GamepadId;
    player.ProtoController4 = Context.GamepadId;
    player.ProtoController5 = Context.GamepadId;
    player.ProtoController6 = Context.GamepadId;
    player.ProtoController7 = Context.GamepadId;
    player.ProtoController8 = Context.GamepadId;
    player.ProtoController9 = Context.GamepadId;
    player.ProtoController10 = Context.GamepadId;
    player.ProtoController11 = Context.GamepadId;
    player.ProtoController12 = Context.GamepadId;
  }
};