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

We Need to Go Deeper · handler “WNTGD”

Version 4

Release notes

fix update with xp gain fix

Released
Size
613 KB
Downloads
4
Check
Verified
SHA-256
2ad20c2740f17684d4c2ca99d4ed2110db97550169ee09bb2391d3fb047d191e
Download v4 (.nc)All versions

Files 25

PathSize
handler.js13 KB
WeNeedToGoDeeper/BepInEx/config/WeNeedToGoDeeperFix.cfg1.0 KB
WeNeedToGoDeeper/BepInEx/core/0Harmony.dll200 KB
WeNeedToGoDeeper/BepInEx/core/0Harmony.xml261 KB
WeNeedToGoDeeper/BepInEx/core/0Harmony20.dll109 KB
WeNeedToGoDeeper/BepInEx/core/BepInEx.dll114 KB
WeNeedToGoDeeper/BepInEx/core/BepInEx.Harmony.dll5.5 KB
WeNeedToGoDeeper/BepInEx/core/BepInEx.Harmony.xml4.0 KB
WeNeedToGoDeeper/BepInEx/core/BepInEx.Preloader.dll42 KB
WeNeedToGoDeeper/BepInEx/core/BepInEx.Preloader.xml7.8 KB
WeNeedToGoDeeper/BepInEx/core/BepInEx.xml84 KB
WeNeedToGoDeeper/BepInEx/core/HarmonyXInterop.dll23 KB
WeNeedToGoDeeper/BepInEx/core/Mono.Cecil.dll332 KB
WeNeedToGoDeeper/BepInEx/core/Mono.Cecil.Mdb.dll42 KB
WeNeedToGoDeeper/BepInEx/core/Mono.Cecil.Pdb.dll85 KB
WeNeedToGoDeeper/BepInEx/core/Mono.Cecil.Rocks.dll27 KB
WeNeedToGoDeeper/BepInEx/core/MonoMod.RuntimeDetour.dll104 KB
WeNeedToGoDeeper/BepInEx/core/MonoMod.RuntimeDetour.xml9.2 KB
WeNeedToGoDeeper/BepInEx/core/MonoMod.Utils.dll184 KB
WeNeedToGoDeeper/BepInEx/core/MonoMod.Utils.xml77 KB
WeNeedToGoDeeper/BepInEx/Plugins/WeNeedToGoDeeperFix.dll11 KB
WeNeedToGoDeeper/changelog.txt58 B
WeNeedToGoDeeper/doorstop_config.ini891 B
WeNeedToGoDeeper/README.md1.6 KB
WeNeedToGoDeeper/winhttp.dll25 KB

handler.js

Plain text
Hub.Handler.Version = 4; // Released at https://hub.splitscreen.me/ on Mon Mar 21 2022 10:55:22 GMT+0000 (Coordinated Universal Time).
Hub.Handler.Id = "vBTed4tXx854xWf2Z";
Hub.Maintainer.Name = "Talos91";
Hub.Maintainer.Id = "eeL7HAz8zJovChWw4";

var answers1 = ["Yes", "No"];
Game.AddOption(
  "Ultra wide and custom resolutions fix by Lyall?",
  "Fixes the UI distortion in horizontal UW instances, do not use if you already have it installed in your main game files.",
  "Fix",
  answers1
);

Game.ExecutableContext = ["WeNeedToGoDeeper_Data"];
Game.DirSymlinkExclusions = ["WeNeedToGoDeeper_Data\\Plugins", "BepInEx\\config"];
Game.FileSymlinkExclusions = ["steam_api.dll", "steam_api64.dll", "steam_appid.txt", "doorstop_config.ini", "winhttp.dll", "WeNeedToGoDeeperFix.cfg", "WeNeedToGoDeeperFix.dll", "xinput1_3.dll"];
Game.NeedsSteamEmulation = false;
Game.UseGoldberg = true;
Game.HandlerInterval = 100;
Game.SymlinkExe = false;
Game.SymlinkGame = true;
Game.SymlinkFolders = false;
Game.ExecutableName = "WeNeedToGoDeeper.exe";
Game.SteamID = "307110";
Game.GUID = "We Need To Go Deeper";
Game.GameName = "We Need To Go Deeper";
Game.MaxPlayers = 4;
Game.MaxPlayersOneMonitor = 4;
Game.LauncherTitle = "";
Game.HideTaskbar = false;
Game.NotTopMost = true;
Game.Hook.ForceFocus = true;
Game.Hook.ForceFocusWindowName = "We Need to Go Deeper";
Game.FakeFocus = true;
Game.FakeFocusInterval = 7000;
Game.SendFakeFocusMsg = true;
Game.Hook.DInputEnabled = false;
Game.Hook.XInputEnabled = true;
Game.Hook.XInputReroute = false;
Game.Hook.CustomDllEnabled = false;
Game.CreateSingleDeviceFile = false;
Game.BlockRawInput = true;
Game.StartHookInstances = "2,3,4";
Game.UserProfileSavePath = "AppData\\LocalLow\\Deli Interactive\\We Need to Go Deeper";
Game.Description =
  "IMPORTANT: On first run select the correct custom resolution in the game options-video options and click save in each instance otherwise they will resize again on their own after you click play in the game (if you have a 1920x1080 monitor for example select 1920x540 res in all for horizontal split-screen or 960x1080 for vertical). You need to create custom resolutions in your AMD/Nvidia/Intel panel (for example: 960x540, 1920x540 etc.) so the game can see and use them, set the correct custom res in-game for the instances to resize correctly and for the mice to work correctly. Select the We Need To Go Deeper process in the Nucleus process picker window after you set the correct custom resolution in an instance, click refresh if you do not see the game process. Only working with one gamepad as the first player/instance (because the game has very poor controller support and uses Unity horrible default input for controllers instead of xinput, connect only one gamepad) and multiple keyboards and mice. The game also does not have gamepad support in menus only during gameplay. 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. Create a LAN or Online game in the first instance and join in the others, LAN has a max 2 players cap in the same PC. Make sure players do not use the customization option at the same time or one player model will be invisible.";
Game.ForceProcessPick = true;
Game.PromptBetweenInstances = false;
Game.PauseBetweenProcessGrab = 10;
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.InjectHookXinput = 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 = true;
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 = false;
Game.ProtoInput.EnableToggleFakeCursorVisibilityShortcut = false;
Game.ProtoInput.DontShowCursorWhenImageUpdated = false;
Game.ProtoInput.SetWindowPosHook = false;
Game.ProtoInput.SetWindowStyleHook = false;
Game.ProtoInput.AutoHideTaskbar = true;
//Game.HideDesktop = 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.SendMouseWheelMessages = true;
Game.ProtoInput.SendMouseButtonMessages = true;
Game.ProtoInput.SendMouseMovementMessages = true;
Game.ProtoInput.SendKeyboardButtonMessages = true;
Game.ProtoInput.XinputHook = false;
Game.ProtoInput.UseOpenXinput = false;
Game.ProtoInput.UseDinputRedirection = false;
Game.ProtoInput.DinputDeviceHook = false;
Game.ProtoInput.DinputHookAlsoHooksGetDeviceState = false;
Game.ProtoInput.MultipleProtoControllers = false;

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() {
  var Args = (Context.Args = " -popupwindow");

  Context.StartArguments = Args;

  Context.EditRegKey("HKEY_CURRENT_USER", "SOFTWARE\\Deli Interactive\\We Need to Go Deeper", "Screenmanager Fullscreen mode_h3630240806", 3, Nucleus.RegType.DWord);

  //Context.EditRegKey("HKEY_CURRENT_USER", "SOFTWARE\\Deli Interactive\\We Need to Go Deeper", "Screenmanager Resolution Height_h2627697771", Context.Height, Nucleus.RegType.DWord);

  //Context.EditRegKey("HKEY_CURRENT_USER", "SOFTWARE\\Deli Interactive\\We Need to Go Deeper", "Screenmanager Resolution Width_h182942802", Context.Width, Nucleus.RegType.DWord);

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

  var fix = Context.Options["Fix"];

  if (fix == "Yes") {
    Context.CopyScriptFolder(Context.GetFolder(Nucleus.Folder.InstancedGameFolder));

    var txtPath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\BepInEx\\config\\WeNeedToGoDeeperFix.cfg";
    var dict = [
      Context.FindLineNumberInTextFile(txtPath, "CustomResolution", Nucleus.SearchType.StartsWith) + "|CustomResolution = true",
      Context.FindLineNumberInTextFile(txtPath, "ResolutionWidth", Nucleus.SearchType.StartsWith) + "|ResolutionWidth = " + Context.Width,
      Context.FindLineNumberInTextFile(txtPath, "ResolutionHeight", Nucleus.SearchType.StartsWith) + "|ResolutionHeight = " + Context.Height,
      Context.FindLineNumberInTextFile(txtPath, "Fullscreen", Nucleus.SearchType.StartsWith) + "|Fullscreen = false"
    ];
    Context.ReplaceLinesInTextFile(txtPath, dict);
  }

  if (fix == "No") {
    Game.KeepMonitorAspectRatio = true;
  }

  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.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.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);
    }
  };
};