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

Subnautica · handler “Subnautica Nitrox”

Version 6

Release notes

latest game version nitro fix?

Released
Size
7.7 MB
Downloads
6,979
Check
Verified
SHA-256
a526d86e272e82bfd23601fd9542ce89e7197a4db6dcac17b01f2ddbf664889d
Download v6 (.nc)All versions

Files 94

PathSize
handler.js12 KB
SubnauticaNitrox/Nitrox/AssetBundles/chatkeyhint55 KB
SubnauticaNitrox/Nitrox/AssetBundles/chatlog23 KB
SubnauticaNitrox/Nitrox/AssetBundles/discordjoinrequest9.2 KB
SubnauticaNitrox/Nitrox/AssetBundles/playerlisttab24 KB
SubnauticaNitrox/Nitrox/AssetBundles/sharedassets154 KB
SubnauticaNitrox/Nitrox/classdata.tpk154 KB
SubnauticaNitrox/Nitrox/LanguageFiles/af.json2.8 KB
SubnauticaNitrox/Nitrox/LanguageFiles/bg.json4 B
SubnauticaNitrox/Nitrox/LanguageFiles/cs.json2.7 KB
SubnauticaNitrox/Nitrox/LanguageFiles/da.json2.6 KB
SubnauticaNitrox/Nitrox/LanguageFiles/de.json4.1 KB
SubnauticaNitrox/Nitrox/LanguageFiles/el.json4.0 KB
SubnauticaNitrox/Nitrox/LanguageFiles/en.json3.8 KB
SubnauticaNitrox/Nitrox/LanguageFiles/es-419.json4.0 KB
SubnauticaNitrox/Nitrox/LanguageFiles/es.json3.8 KB
SubnauticaNitrox/Nitrox/LanguageFiles/et.json2.5 KB
SubnauticaNitrox/Nitrox/LanguageFiles/fi.json2.8 KB
SubnauticaNitrox/Nitrox/LanguageFiles/fr.json3.9 KB
SubnauticaNitrox/Nitrox/LanguageFiles/ga.json4 B
SubnauticaNitrox/Nitrox/LanguageFiles/hr.json3.6 KB
SubnauticaNitrox/Nitrox/LanguageFiles/hu.json3.8 KB
SubnauticaNitrox/Nitrox/LanguageFiles/it.json3.9 KB
SubnauticaNitrox/Nitrox/LanguageFiles/ja.json4 B
SubnauticaNitrox/Nitrox/LanguageFiles/ko.json2.9 KB
SubnauticaNitrox/Nitrox/LanguageFiles/lt.json1.1 KB
SubnauticaNitrox/Nitrox/LanguageFiles/lv.json51 B
SubnauticaNitrox/Nitrox/LanguageFiles/nl.json2.7 KB
SubnauticaNitrox/Nitrox/LanguageFiles/no.json2.6 KB
SubnauticaNitrox/Nitrox/LanguageFiles/pl.json3.1 KB
SubnauticaNitrox/Nitrox/LanguageFiles/pt-BR.json3.8 KB
SubnauticaNitrox/Nitrox/LanguageFiles/pt.json3.9 KB
SubnauticaNitrox/Nitrox/LanguageFiles/ro.json4.1 KB
SubnauticaNitrox/Nitrox/LanguageFiles/ru.json5.0 KB
SubnauticaNitrox/Nitrox/LanguageFiles/sk.json2.2 KB
SubnauticaNitrox/Nitrox/LanguageFiles/sl.json4 B
SubnauticaNitrox/Nitrox/LanguageFiles/sr.json230 B
SubnauticaNitrox/Nitrox/LanguageFiles/sv.json2.7 KB
SubnauticaNitrox/Nitrox/LanguageFiles/th.json2.7 KB
SubnauticaNitrox/Nitrox/LanguageFiles/tr.json2.6 KB
SubnauticaNitrox/Nitrox/LanguageFiles/uk.json4.8 KB
SubnauticaNitrox/Nitrox/LanguageFiles/vi.json3.7 KB
SubnauticaNitrox/Nitrox/LanguageFiles/zh-Hans.json3.2 KB
SubnauticaNitrox/Nitrox/lib/0Harmony.dll258 KB
SubnauticaNitrox/Nitrox/lib/AssetsTools.NET.dll214 KB
SubnauticaNitrox/Nitrox/lib/Autofac.dll227 KB
SubnauticaNitrox/Nitrox/lib/BinaryPack.dll61 KB
SubnauticaNitrox/Nitrox/lib/DiscordGameSDKWrapper.dll96 KB
SubnauticaNitrox/Nitrox/lib/discord_game_sdk.dll3.3 MB
SubnauticaNitrox/Nitrox/lib/dnlib.dll1.1 MB
SubnauticaNitrox/Nitrox/lib/IndexRange.dll12 KB
SubnauticaNitrox/Nitrox/lib/iTween.dll74 KB
SubnauticaNitrox/Nitrox/lib/JetBrains.Annotations.dll96 KB
SubnauticaNitrox/Nitrox/lib/LiteNetLib.dll92 KB
SubnauticaNitrox/Nitrox/lib/LitJSON.dll60 KB
SubnauticaNitrox/Nitrox/lib/LZ4.dll44 KB
SubnauticaNitrox/Nitrox/lib/Microsoft.Win32.Registry.dll26 KB
SubnauticaNitrox/Nitrox/lib/Microsoft.WindowsAPICodePack.dll103 KB
SubnauticaNitrox/Nitrox/lib/Microsoft.WindowsAPICodePack.Shell.dll530 KB
SubnauticaNitrox/Nitrox/lib/Mono.Cecil.dll350 KB
SubnauticaNitrox/Nitrox/lib/Mono.Cecil.Mdb.dll42 KB
SubnauticaNitrox/Nitrox/lib/Mono.Cecil.Pdb.dll88 KB
SubnauticaNitrox/Nitrox/lib/Mono.Cecil.Rocks.dll27 KB
SubnauticaNitrox/Nitrox/lib/Mono.Nat.dll67 KB
SubnauticaNitrox/Nitrox/lib/MonoMod.RuntimeDetour.dll109 KB
SubnauticaNitrox/Nitrox/lib/MonoMod.Utils.dll193 KB
SubnauticaNitrox/Nitrox/lib/Newtonsoft.Json.dll684 KB
SubnauticaNitrox/Nitrox/lib/NitroxClient.dll552 KB
SubnauticaNitrox/Nitrox/lib/NitroxModel-Subnautica.dll30 KB
SubnauticaNitrox/Nitrox/lib/NitroxModel.dll236 KB
SubnauticaNitrox/Nitrox/lib/NitroxPatcher.dll204 KB
SubnauticaNitrox/Nitrox/lib/NitroxPatcher.dll.config541 B
SubnauticaNitrox/Nitrox/lib/NitroxServer.dll178 KB
SubnauticaNitrox/Nitrox/lib/NitroxServer.dll.config1.2 KB
SubnauticaNitrox/Nitrox/lib/protobuf-net.dll179 KB
SubnauticaNitrox/Nitrox/lib/Serilog.dll124 KB
SubnauticaNitrox/Nitrox/lib/Serilog.Sinks.Async.dll9.0 KB
SubnauticaNitrox/Nitrox/lib/Serilog.Sinks.File.dll33 KB
SubnauticaNitrox/Nitrox/lib/Serilog.Sinks.Map.dll12 KB
SubnauticaNitrox/Nitrox/lib/System.Buffers.dll20 KB
SubnauticaNitrox/Nitrox/lib/System.Drawing.Common.dll52 KB
SubnauticaNitrox/Nitrox/lib/System.IO.FileSystem.AccessControl.dll28 KB
SubnauticaNitrox/Nitrox/lib/System.Memory.dll139 KB
SubnauticaNitrox/Nitrox/lib/System.Numerics.Vectors.dll113 KB
SubnauticaNitrox/Nitrox/lib/System.Runtime.CompilerServices.Unsafe.dll18 KB
SubnauticaNitrox/Nitrox/lib/System.Security.AccessControl.dll33 KB
SubnauticaNitrox/Nitrox/lib/System.Security.Principal.Windows.dll18 KB
SubnauticaNitrox/Nitrox/lib/ToastNotifications.dll107 KB
SubnauticaNitrox/Nitrox/lib/ToastNotifications.Messages.dll88 KB
SubnauticaNitrox/Nitrox/lib/WindowsFirewallHelper.dll196 KB
SubnauticaNitrox/Nitrox/NitroxLauncher.exe3.5 MB
SubnauticaNitrox/Nitrox/NitroxLauncher.exe.config2.4 KB
SubnauticaNitrox/Nitrox/NitroxServer-Subnautica.exe58 KB
SubnauticaNitrox/Nitrox/NitroxServer-Subnautica.exe.config1.3 KB

handler.js

Plain text
Hub.Handler.Version = 6; // Released at https://hub.splitscreen.me/ on Fri Apr 07 2023 00:43:32 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.LauncherTitle = "";
Game.UseGoldberg = false;
Game.SetTopMostAtEnd = true;
Game.Hook.ForceFocus = false;
Game.Hook.ForceFocusWindowName = "Subnautica";
Game.FakeFocus = true;
Game.FakeFocusInterval = 10000;
Game.SendFakeFocusMsg = true;
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 a Nucleus forked Subnautica Nitrox build to allow for multiple instances. After running via Nucleus select multiplayer in the Nitrox launcher window that will open, once the 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 in 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. If you use keyboards and mice after all the instances have launched, resized and positioned correctly, press the END key 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 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\\NitroxLauncher.exe"], false, 1);

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

  Game.KillProcessesOnClose = ["NitroxLauncher", "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.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;
  }
};