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
Files 96
| Path | Size |
|---|---|
| handler.js | 13 KB |
| SubnauticaNitrox/Nitrox/AssetBundles/chatkeyhint | 55 KB |
| SubnauticaNitrox/Nitrox/AssetBundles/chatlog | 23 KB |
| SubnauticaNitrox/Nitrox/AssetBundles/discordjoinrequest | 9.2 KB |
| SubnauticaNitrox/Nitrox/AssetBundles/playerlisttab | 24 KB |
| SubnauticaNitrox/Nitrox/AssetBundles/sharedassets | 154 KB |
| SubnauticaNitrox/Nitrox/LanguageFiles/af.json | 2.8 KB |
| SubnauticaNitrox/Nitrox/LanguageFiles/bg.json | 4 B |
| SubnauticaNitrox/Nitrox/LanguageFiles/cs.json | 2.7 KB |
| SubnauticaNitrox/Nitrox/LanguageFiles/da.json | 2.6 KB |
| SubnauticaNitrox/Nitrox/LanguageFiles/de.json | 4.1 KB |
| SubnauticaNitrox/Nitrox/LanguageFiles/el.json | 4.0 KB |
| SubnauticaNitrox/Nitrox/LanguageFiles/en.json | 3.7 KB |
| SubnauticaNitrox/Nitrox/LanguageFiles/es-419.json | 4.0 KB |
| SubnauticaNitrox/Nitrox/LanguageFiles/es.json | 3.8 KB |
| SubnauticaNitrox/Nitrox/LanguageFiles/et.json | 2.5 KB |
| SubnauticaNitrox/Nitrox/LanguageFiles/fi.json | 2.8 KB |
| SubnauticaNitrox/Nitrox/LanguageFiles/fr.json | 3.9 KB |
| SubnauticaNitrox/Nitrox/LanguageFiles/ga.json | 4 B |
| SubnauticaNitrox/Nitrox/LanguageFiles/hr.json | 3.6 KB |
| SubnauticaNitrox/Nitrox/LanguageFiles/hu.json | 3.8 KB |
| SubnauticaNitrox/Nitrox/LanguageFiles/it.json | 3.9 KB |
| SubnauticaNitrox/Nitrox/LanguageFiles/ja.json | 4 B |
| SubnauticaNitrox/Nitrox/LanguageFiles/ko.json | 2.9 KB |
| SubnauticaNitrox/Nitrox/LanguageFiles/lt.json | 1.1 KB |
| SubnauticaNitrox/Nitrox/LanguageFiles/lv.json | 51 B |
| SubnauticaNitrox/Nitrox/LanguageFiles/nl.json | 2.7 KB |
| SubnauticaNitrox/Nitrox/LanguageFiles/no.json | 2.6 KB |
| SubnauticaNitrox/Nitrox/LanguageFiles/pl.json | 3.1 KB |
| SubnauticaNitrox/Nitrox/LanguageFiles/pt-BR.json | 3.8 KB |
| SubnauticaNitrox/Nitrox/LanguageFiles/pt.json | 3.9 KB |
| SubnauticaNitrox/Nitrox/LanguageFiles/ro.json | 4.1 KB |
| SubnauticaNitrox/Nitrox/LanguageFiles/ru.json | 5.0 KB |
| SubnauticaNitrox/Nitrox/LanguageFiles/sk.json | 2.2 KB |
| SubnauticaNitrox/Nitrox/LanguageFiles/sl.json | 4 B |
| SubnauticaNitrox/Nitrox/LanguageFiles/sr.json | 230 B |
| SubnauticaNitrox/Nitrox/LanguageFiles/sv.json | 2.7 KB |
| SubnauticaNitrox/Nitrox/LanguageFiles/th.json | 2.7 KB |
| SubnauticaNitrox/Nitrox/LanguageFiles/tr.json | 2.6 KB |
| SubnauticaNitrox/Nitrox/LanguageFiles/uk.json | 4.8 KB |
| SubnauticaNitrox/Nitrox/LanguageFiles/vi.json | 3.7 KB |
| SubnauticaNitrox/Nitrox/LanguageFiles/zh-Hans.json | 3.2 KB |
| SubnauticaNitrox/Nitrox/lib/0Harmony.dll | 186 KB |
| SubnauticaNitrox/Nitrox/lib/AssetsTools.NET.dll | 164 KB |
| SubnauticaNitrox/Nitrox/lib/Autofac.dll | 227 KB |
| SubnauticaNitrox/Nitrox/lib/BinaryPack.dll | 61 KB |
| SubnauticaNitrox/Nitrox/lib/DiscordGameSDKWrapper.dll | 96 KB |
| SubnauticaNitrox/Nitrox/lib/discord_game_sdk.dll | 3.3 MB |
| SubnauticaNitrox/Nitrox/lib/dnlib.dll | 1.1 MB |
| SubnauticaNitrox/Nitrox/lib/JetBrains.Annotations.dll | 96 KB |
| SubnauticaNitrox/Nitrox/lib/LiteNetLib.dll | 92 KB |
| SubnauticaNitrox/Nitrox/lib/LitJSON.dll | 60 KB |
| SubnauticaNitrox/Nitrox/lib/LZ4.dll | 44 KB |
| SubnauticaNitrox/Nitrox/lib/Microsoft.Win32.Registry.dll | 26 KB |
| SubnauticaNitrox/Nitrox/lib/Microsoft.WindowsAPICodePack.dll | 103 KB |
| SubnauticaNitrox/Nitrox/lib/Microsoft.WindowsAPICodePack.Shell.dll | 530 KB |
| SubnauticaNitrox/Nitrox/lib/Mono.Cecil.dll | 350 KB |
| SubnauticaNitrox/Nitrox/lib/Mono.Cecil.Mdb.dll | 42 KB |
| SubnauticaNitrox/Nitrox/lib/Mono.Cecil.Pdb.dll | 88 KB |
| SubnauticaNitrox/Nitrox/lib/Mono.Cecil.Rocks.dll | 27 KB |
| SubnauticaNitrox/Nitrox/lib/Mono.Nat.dll | 67 KB |
| SubnauticaNitrox/Nitrox/lib/MonoMod.RuntimeDetour.dll | 106 KB |
| SubnauticaNitrox/Nitrox/lib/MonoMod.Utils.dll | 191 KB |
| SubnauticaNitrox/Nitrox/lib/Newtonsoft.Json.dll | 684 KB |
| SubnauticaNitrox/Nitrox/lib/NitroxClient.dll | 520 KB |
| SubnauticaNitrox/Nitrox/lib/NitroxClient.pdb | 185 KB |
| SubnauticaNitrox/Nitrox/lib/NitroxModel-Subnautica.dll | 40 KB |
| SubnauticaNitrox/Nitrox/lib/NitroxModel-Subnautica.pdb | 20 KB |
| SubnauticaNitrox/Nitrox/lib/NitroxModel.dll | 224 KB |
| SubnauticaNitrox/Nitrox/lib/NitroxModel.pdb | 82 KB |
| SubnauticaNitrox/Nitrox/lib/NitroxPatcher.dll | 188 KB |
| SubnauticaNitrox/Nitrox/lib/NitroxPatcher.dll.config | 541 B |
| SubnauticaNitrox/Nitrox/lib/NitroxPatcher.pdb | 72 KB |
| SubnauticaNitrox/Nitrox/lib/NitroxServer.dll | 184 KB |
| SubnauticaNitrox/Nitrox/lib/NitroxServer.dll.config | 1.2 KB |
| SubnauticaNitrox/Nitrox/lib/NitroxServer.pdb | 69 KB |
| SubnauticaNitrox/Nitrox/lib/protobuf-net.dll | 179 KB |
| SubnauticaNitrox/Nitrox/lib/Serilog.dll | 124 KB |
| SubnauticaNitrox/Nitrox/lib/Serilog.Sinks.Async.dll | 9.0 KB |
| SubnauticaNitrox/Nitrox/lib/Serilog.Sinks.File.dll | 33 KB |
| SubnauticaNitrox/Nitrox/lib/Serilog.Sinks.Map.dll | 12 KB |
| SubnauticaNitrox/Nitrox/lib/System.Buffers.dll | 20 KB |
| SubnauticaNitrox/Nitrox/lib/System.Drawing.Common.dll | 52 KB |
| SubnauticaNitrox/Nitrox/lib/System.IO.FileSystem.AccessControl.dll | 28 KB |
| SubnauticaNitrox/Nitrox/lib/System.Memory.dll | 138 KB |
| SubnauticaNitrox/Nitrox/lib/System.Numerics.Vectors.dll | 113 KB |
| SubnauticaNitrox/Nitrox/lib/System.Runtime.CompilerServices.Unsafe.dll | 18 KB |
| SubnauticaNitrox/Nitrox/lib/System.Security.AccessControl.dll | 33 KB |
| SubnauticaNitrox/Nitrox/lib/System.Security.Principal.Windows.dll | 18 KB |
| SubnauticaNitrox/Nitrox/lib/ToastNotifications.dll | 107 KB |
| SubnauticaNitrox/Nitrox/lib/ToastNotifications.Messages.dll | 88 KB |
| SubnauticaNitrox/Nitrox/lib/WindowsFirewallHelper.dll | 196 KB |
| SubnauticaNitrox/Nitrox/NitroxLauncher.exe | 3.5 MB |
| SubnauticaNitrox/Nitrox/NitroxLauncher.exe.config | 2.0 KB |
| SubnauticaNitrox/Nitrox/NitroxServer-Subnautica.exe | 53 KB |
| SubnauticaNitrox/Nitrox/NitroxServer-Subnautica.exe.config | 1011 B |
handler.js
Plain textHub.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;
}
};