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

Elden Ring · handler “Elden Ring Seamless Co-op”

Version 1

Release notes

First version

Released
Size
129 KB
Downloads
406
Check
Verified
SHA-256
72bd5af3353f179fdac33b0dc24e083b2979154dc1174af71b33140c954c993a
Download v1 (.nc)All versions

Files 5

PathSize
handler.js20 KB
EldenRing/GraphicsConfig.xml2.3 KB
EldenRing/SeamlessCoop/cooppassword.ini297 B
EldenRing/steam_settings/disable_overlay.txt0 B
EldenRing/steam_settings/load_dlls/elden_ring_seamless_coop.dll313 KB

handler.js

Plain text
Hub.Handler.Version = 1; // Released at https://hub.splitscreen.me/ on Sat May 28 2022 22:08:39 GMT+0000 (Coordinated Universal Time).
Hub.Handler.Id = "CgTFu6jc83pMKPZBy";
Hub.Maintainer.Name = "PoundlandBacon";
Hub.Maintainer.Id = "AdiAjSyfZPMvu3a4M";

var answers = ["No Change", "Low", "Medium", "High", "Maximum"];
Game.AddOption("Graphics preset", "Reduce GPU power required by using lower settings.", "gfx", answers);
Game.KillMutex = ["SekiroMutex"];
Game.NeedsSteamEmulation = false;
Game.HandlerInterval = 100;
Game.SymlinkExe = false;
Game.SymlinkGame = true;
Game.SymlinkFolders = true;
Game.FileSymlinkExclusions = ["eldenring.exe", "steam_api64.dll", "steam_appid.txt", "launch_elden_ring_seamlesscoop.exe", "elden_ring_seamless_coop.dll", "cooppassword.ini"];
Game.DirSymlinkExclusions = ["SeamlessCoop"];
Game.UseNucleusEnvironment = true;
Game.SupportsKeyboard = false;
Game.ExecutableName = "eldenring.exe";
Game.SteamID = "1245620";
Game.GUID = "ELDENRING";
Game.GameName = "Elden Ring";
Game.MaxPlayers = 4;
Game.MaxPlayersOneMonitor = 4;
Game.UseGoldberg = true;
Game.GoldbergExperimental = true;
Game.BinariesFolder = "";
Game.LauncherTitle = "";
Game.SupportsPositioning = true;
Game.Hook.ForceFocus = true;
Game.Hook.ForceFocusWindowName = "Elden Ring";
Game.HasDynamicWindowTitle = true;
Game.SetForegroundWindowElsewhere = true;
Game.SetTopMostAtEnd = true;
Game.HideDesktop = true;
Game.Hook.DInputEnabled = false;
Game.Hook.DInputForceDisable = true;
Game.Hook.XInputEnabled = false;
Game.Hook.CustomDllEnabled = false;
Game.Hook.XInputReroute = false;
Game.PauseBetweenContextAndLaunch = 3;
Game.PauseBetweenProcessGrab = 6;
Game.PauseBetweenStarts = 20;
Game.UserProfileConfigPath = "AppData\\Roaming\\EldenRing";
Game.UserProfileConfigPathNoCopy = true;
Game.Description =
  "This handler uses the Seamless Co-op mod by LukeYui - https://www.nexusmods.com/eldenring/mods/510  Let all instances load to the title screen before using inputs. If your monitor doesn't have an overall 16:9 aspect ratio the image may be distorted. The host must use the Tiny Great Pot to create a session. At that point, the other players can join using the Effigy of Meleina. You should spawn in at a point nearby the host. Any player can leave at any time using the Separating Mist - If the host uses this item, the session will be disbanded and all players will disconnect. Make sure to complete the tutorial before attempting to connect the instances. Script by Talos91 and PoundlandBacon, special thanks to LukeYui and Mr Goldberg";

//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.SetWindowStyleHook = true;
Game.ProtoInput.SetWindowPosHook = true;
Game.ProtoInput.AutoHideTaskbar = 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 = true;
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 = false;

Game.ProtoInput.SendMouseWheelMessages = true;
Game.ProtoInput.SendMouseButtonMessages = true;
Game.ProtoInput.SendMouseMovementMessages = true;
Game.ProtoInput.SendKeyboardButtonMessages = true;
Game.ProtoInput.XinputHook = true;
Game.ProtoInput.UseOpenXinput = false;
Game.ProtoInput.UseDinputRedirection = false;
Game.ProtoInput.DinputDeviceHook = false;
Game.ProtoInput.DinputHookAlsoHooksGetDeviceState = 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]; // Blocks WM_KILLFOCUS

Game.Play = function() {
  Game.ProtoInput.MultipleProtoControllers = true;

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

  Context.PatchFile(
    System.IO.Path.Combine(Context.RootInstallFolder, "eldenring.exe"),
    System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
    [0x74, 0x50, 0x45, 0x8b, 0x94, 0xcc, 0xdc, 0x03, 0x00, 0x00, 0x45, 0x85, 0xd2, 0x74, 0x43, 0x41, 0x8b, 0xd2, 0x41, 0x0f, 0xaf],
    [0xeb, 0x50, 0x45, 0x8b, 0x94, 0xcc, 0xdc, 0x03, 0x00, 0x00, 0x45, 0x85, 0xd2, 0x74, 0x43, 0x41, 0x8b, 0xd2, 0x41, 0x0f, 0xaf]
  );

  Context.PatchFile(
    System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
    System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
    [0x45, 0x0f, 0x59, 0xc2, 0x4c, 0x8d, 0x9c, 0x24, 0xa0, 0x00],
    [0x0f, 0x5c, 0xc0, 0x90, 0x4c, 0x8d, 0x9c, 0x24, 0xa0, 0x00]
  );

  var screenreswidth = Context.Width;
  var screenresheight = Context.Height;

  if (screenreswidth == 1920 && screenresheight == 540) {
    //1080p Horizontal
    Context.PatchFile(
      System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
      System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
      [0x00, 0x80, 0x07, 0x00, 0x00, 0x38, 0x04], //1920x1080
      [0x00, 0x80, 0x07, 0x00, 0x00, 0x1c, 0x02]
    );
  }

  if (screenreswidth == 960 && screenresheight == 1080) {
    //1080p Vertical
    Context.PatchFile(
      System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
      System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
      [0x00, 0x80, 0x07, 0x00, 0x00, 0x38, 0x04],
      [0x00, 0xc0, 0x03, 0x00, 0x00, 0x38, 0x04]
    );
  }

  if (screenreswidth == 960 && screenresheight == 540) {
    //1080p 1/4
    Context.PatchFile(
      System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
      System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
      [0x00, 0x80, 0x07, 0x00, 0x00, 0x38, 0x04],
      [0x00, 0xc0, 0x03, 0x00, 0x00, 0x1c, 0x02]
    );
  }

  if (screenreswidth == 1280 && screenresheight == 360) {
    //720p Horizontal
    Context.PatchFile(
      System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
      System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
      [0x00, 0x80, 0x07, 0x00, 0x00, 0x38, 0x04],
      [0x00, 0x00, 0x05, 0x00, 0x00, 0x68, 0x01]
    );
  }

  if (screenreswidth == 640 && screenresheight == 720) {
    //720p Vertical
    Context.PatchFile(
      System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
      System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
      [0x00, 0x80, 0x07, 0x00, 0x00, 0x38, 0x04],
      [0x00, 0x80, 0x02, 0x00, 0x00, 0xd0, 0x02]
    );
  }

  if (screenreswidth == 640 && screenresheight == 360) {
    //720p 1/4
    Context.PatchFile(
      System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
      System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
      [0x00, 0x80, 0x07, 0x00, 0x00, 0x38, 0x04],
      [0x00, 0x80, 0x02, 0x00, 0x00, 0x68, 0x01]
    );
  }

  if (screenreswidth == 2560 && screenresheight == 720) {
    //1440p Horizontal
    Context.PatchFile(
      System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
      System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
      [0x00, 0x80, 0x07, 0x00, 0x00, 0x38, 0x04],
      [0x00, 0x00, 0x0a, 0x00, 0x00, 0xd0, 0x02]
    );
  }

  if (screenreswidth == 1280 && screenresheight == 1440) {
    //1440p Vertical
    Context.PatchFile(
      System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
      System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
      [0x00, 0x80, 0x07, 0x00, 0x00, 0x38, 0x04],
      [0x00, 0x00, 0x05, 0x00, 0x00, 0xa0, 0x05]
    );
  }

  if (screenreswidth == 1280 && screenresheight == 720) {
    //1440p 1/4
    Context.PatchFile(
      System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
      System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
      [0x00, 0x80, 0x07, 0x00, 0x00, 0x38, 0x04],
      [0x00, 0x00, 0x05, 0x00, 0x00, 0xd0, 0x02]
    );
  }

  if (screenreswidth == 3840 && screenresheight == 1080) {
    //4k Horizontal
    Context.PatchFile(
      System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
      System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
      [0x00, 0x80, 0x07, 0x00, 0x00, 0x38, 0x04],
      [0x00, 0x00, 0x0f, 0x00, 0x00, 0x38, 0x04]
    );
  }

  if (screenreswidth == 1920 && screenresheight == 2160) {
    //4k Vertical
    Context.PatchFile(
      System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
      System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
      [0x00, 0x80, 0x07, 0x00, 0x00, 0x38, 0x04],
      [0x00, 0x80, 0x07, 0x00, 0x00, 0x70, 0x08]
    );
  }

  if (screenreswidth == 1720 && screenresheight == 1440) {
    //ultrwide Vertical
    Context.PatchFile(
      System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
      System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
      [0x00, 0x80, 0x07, 0x00, 0x00, 0x38, 0x04],
      [0x00, 0x88, 0x06, 0x00, 0x00, 0xa0, 0x05]
    );
  }

  if (screenreswidth == 3440 && screenresheight == 720) {
    //ultrwide Horizontal
    Context.PatchFile(
      System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
      System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
      [0x00, 0x80, 0x07, 0x00, 0x00, 0x38, 0x04],
      [0x00, 0x70, 0x0d, 0x00, 0x00, 0xd0, 0x02]
    );
  }

  if (screenreswidth == 1720 && screenresheight == 720) {
    //ultrwide 1/4
    Context.PatchFile(
      System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
      System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
      [0x00, 0x80, 0x07, 0x00, 0x00, 0x38, 0x04],
      [0x00, 0x88, 0x06, 0x00, 0x00, 0xd0, 0x02]
    );
  }

  if (screenreswidth == 1280 && screenresheight == 1080) {
    //ultrwide2 Vertical
    Context.PatchFile(
      System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
      System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
      [0x00, 0x80, 0x07, 0x00, 0x00, 0x38, 0x04],
      [0x00, 0x00, 0x05, 0x00, 0x00, 0x38, 0x04]
    );
  }

  if (screenreswidth == 2560 && screenresheight == 540) {
    //ultrwide2 Horizontal
    Context.PatchFile(
      System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
      System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
      [0x00, 0x80, 0x07, 0x00, 0x00, 0x38, 0x04],
      [0x00, 0x00, 0x0a, 0x00, 0x00, 0x1c, 0x02]
    );
  }

  if (screenreswidth == 1280 && screenresheight == 540) {
    //ultrwide2 1/4
    Context.PatchFile(
      System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
      System.IO.Path.Combine(Context.RootFolder, "eldenring.exe"),
      [0x00, 0x80, 0x07, 0x00, 0x00, 0x38, 0x04],
      [0x00, 0x00, 0x05, 0x00, 0x00, 0x1c, 0x02]
    );
  }

  var gfx = Context.Options["gfx"];
  if (gfx == "Maximum") {
    var gfxp = "MAX";
  }
  if (gfx == "High") {
    var gfxp = "HIGH";
  }
  if (gfx == "Medium") {
    var gfxp = "MEDIUM";
  }
  if (gfx == "Low") {
    var gfxp = "LOW";
  }

  if (!System.IO.File.Exists(Context.EnvironmentPlayer + Context.UserProfileConfigPath + "\\GraphicsConfig.xml")) {
    if (gfx == "No Change") {
      var path = Context.ScriptFolder + "\\GraphicsConfig.xml";
      var dict = [
        Context.FindLineNumberInTextFile(path, "<Resolution-WindowScreenWidth>", Nucleus.SearchType.StartsWith) + "|<Resolution-WindowScreenWidth>" + Context.Width + "</Resolution-WindowScreenWidth>",
        Context.FindLineNumberInTextFile(path, "<Resolution-WindowScreenHeight>", Nucleus.SearchType.StartsWith) +
          "|<Resolution-WindowScreenHeight>" +
          Context.Height +
          "</Resolution-WindowScreenHeight>"
      ];
      Context.ReplaceLinesInTextFile(path, dict, "UTF-16");
    } else {
      var path = Context.ScriptFolder + "\\GraphicsConfig.xml";
      var dict = [
        Context.FindLineNumberInTextFile(path, "<Resolution-WindowScreenWidth>", Nucleus.SearchType.StartsWith) + "|<Resolution-WindowScreenWidth>" + Context.Width + "</Resolution-WindowScreenWidth>",
        Context.FindLineNumberInTextFile(path, "<Resolution-WindowScreenHeight>", Nucleus.SearchType.StartsWith) +
          "|<Resolution-WindowScreenHeight>" +
          Context.Height +
          "</Resolution-WindowScreenHeight>",
        Context.FindLineNumberInTextFile(path, "<QualitySetting>", Nucleus.SearchType.StartsWith) + "|<QualitySetting>" + gfxp + "</QualitySetting>"
      ];
      Context.ReplaceLinesInTextFile(path, dict, "UTF-16");
    }
    var filePath = (Context.filePath = Context.EnvironmentPlayer + Context.UserProfileConfigPath);
    System.IO.Directory.CreateDirectory(filePath);
    var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "GraphicsConfig.xml");
    var savePath = (Context.SavePath = Context.EnvironmentPlayer + Context.UserProfileConfigPath + "\\GraphicsConfig.xml");
    System.IO.File.Copy(savePkgOrigin, savePath, true);
  } else {
    if (gfx == "No Change") {
      var path = Context.EnvironmentPlayer + Context.UserProfileConfigPath + "\\GraphicsConfig.xml";
      var dict = [
        Context.FindLineNumberInTextFile(path, "<Resolution-WindowScreenWidth>", Nucleus.SearchType.StartsWith) + "|<Resolution-WindowScreenWidth>" + Context.Width + "</Resolution-WindowScreenWidth>",
        Context.FindLineNumberInTextFile(path, "<Resolution-WindowScreenHeight>", Nucleus.SearchType.StartsWith) +
          "|<Resolution-WindowScreenHeight>" +
          Context.Height +
          "</Resolution-WindowScreenHeight>"
      ];
      Context.ReplaceLinesInTextFile(path, dict, "UTF-16");
    } else {
      var path = Context.EnvironmentPlayer + Context.UserProfileConfigPath + "\\GraphicsConfig.xml";
      var dict = [
        Context.FindLineNumberInTextFile(path, "<Resolution-WindowScreenWidth>", Nucleus.SearchType.StartsWith) + "|<Resolution-WindowScreenWidth>" + Context.Width + "</Resolution-WindowScreenWidth>",
        Context.FindLineNumberInTextFile(path, "<Resolution-WindowScreenHeight>", Nucleus.SearchType.StartsWith) +
          "|<Resolution-WindowScreenHeight>" +
          Context.Height +
          "</Resolution-WindowScreenHeight>",
        Context.FindLineNumberInTextFile(path, "<QualitySetting>", Nucleus.SearchType.StartsWith) + "|<QualitySetting>" + gfxp + "</QualitySetting>"
      ];
      Context.ReplaceLinesInTextFile(path, dict, "UTF-16");
    }
  }

  Context.CopyScriptFolder(Context.GetFolder(Nucleus.Folder.InstancedGameFolder));

  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.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.EnableMessageFilter(player.ProtoInputInstanceHandle, ProtoInput.Values.KeyboardButtonFilterID);

      ProtoInput.SetDrawFakeCursor(player.ProtoInputInstanceHandle, true);

      ProtoInput.StopFocusMessageLoop(player.ProtoInputInstanceHandle);
    }
  };

  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.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.DisableMessageFilter(player.ProtoInputInstanceHandle, ProtoInput.Values.KeyboardButtonFilterID);

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