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

Subnautica · handler “Subnautica Nitrox”

Version 7

Release notes

changed custom nitrox to version 1.7.1.0, requires Subnautica Legacy now.

Released
Size
7.7 MB
Downloads
12,972
Check
Verified
SHA-256
f5704be0b8702507df55d7fe9a9ed9b5e1a725539f2fc3a6a8aa3ae778b714b4
Download v7 (.nc)All versions

Files 96

PathSize
handler.js13 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/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.7 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.dll186 KB
SubnauticaNitrox/Nitrox/lib/AssetsTools.NET.dll164 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/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.dll106 KB
SubnauticaNitrox/Nitrox/lib/MonoMod.Utils.dll191 KB
SubnauticaNitrox/Nitrox/lib/Newtonsoft.Json.dll684 KB
SubnauticaNitrox/Nitrox/lib/NitroxClient.dll520 KB
SubnauticaNitrox/Nitrox/lib/NitroxClient.pdb185 KB
SubnauticaNitrox/Nitrox/lib/NitroxModel-Subnautica.dll40 KB
SubnauticaNitrox/Nitrox/lib/NitroxModel-Subnautica.pdb20 KB
SubnauticaNitrox/Nitrox/lib/NitroxModel.dll224 KB
SubnauticaNitrox/Nitrox/lib/NitroxModel.pdb82 KB
SubnauticaNitrox/Nitrox/lib/NitroxPatcher.dll188 KB
SubnauticaNitrox/Nitrox/lib/NitroxPatcher.dll.config541 B
SubnauticaNitrox/Nitrox/lib/NitroxPatcher.pdb72 KB
SubnauticaNitrox/Nitrox/lib/NitroxServer.dll184 KB
SubnauticaNitrox/Nitrox/lib/NitroxServer.dll.config1.2 KB
SubnauticaNitrox/Nitrox/lib/NitroxServer.pdb69 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.dll138 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.0 KB
SubnauticaNitrox/Nitrox/NitroxServer-Subnautica.exe53 KB
SubnauticaNitrox/Nitrox/NitroxServer-Subnautica.exe.config1011 B

handler.js

Plain text
Hub.Handler.Version = 7; // Released at https://hub.splitscreen.me/ on Thu Apr 25 2024 07:36:58 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 = 8000;
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 custom Subnautica Nitrox Alpha v1.7.1.0 build to allow for multiple instances. You need Subnautica Legacy version for this Nitrox to work, to get it right click Subnautica in Steam, click properties, click betas, select Legacy - Public legacy builds, close it out and run Subnautica through Steam (make sure the game has updated to the legacy version. It will say Subnautica legacy in your library). 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 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 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;
  }
};