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

Dark Souls III · handler “Dark Souls 3 Seamless Co-op”

Version 5

Release notes

auto connect after invite and overlay in all instances.

Released
Size
2.1 MB
Downloads
1,388
Check
Verified
SHA-256
77ebafd470cf83deca569a6bc0a3650f9188c10dcffbfacef7f731bcef104ab1
Download v5 (.nc)All versions

Files 4

PathSize
DarkSouls3/steamclient.dll2.1 MB
DarkSouls3/steamclient64.dll2.5 MB
DarkSouls3/steamclient_loader.exe107 KB
handler.js7.3 KB

handler.js

Plain text
Hub.Handler.Version = 5; // Released at https://hub.splitscreen.me/ on Tue Apr 11 2023 01:34:45 GMT+0000 (Coordinated Universal Time).
Hub.Handler.Id = "8ToryPKXFmff7D8h7";
Hub.Maintainer.Name = "Talos91";
Hub.Maintainer.Id = "eeL7HAz8zJovChWw4";

var answers1 = ["Yes", "No"];
Game.AddOption("Letterboxing/Pillarboxing fix?", "Removes the black bars in split-screen.", "Pillar", answers1);

Game.ExecutableContext = ["binkw64.dll"];
Game.KillMutex = ["DarkSoulsIIIMutex"];
Game.DirSymlinkExclusions = ["dllMods", "settings", "steam_settings"];
Game.FileSymlinkExclusions = ["steam_appid.txt", "steam_interfaces.txt", "steamclient64.dll", "steamclient.dll", "steamclient_loader.exe", "dxgi.dll", "xinput1_3.dll"];
Game.FileSymlinkCopyInstead = ["steam_api64.dll", "PaintedWorlds.dll", "dinput8.dll", "discord_game_sdk.dll", "lazyLoad.ini", "SoulsUnsqueezed.ini", "dxgi.ini"];
Game.NeedsSteamEmulation = false;
Game.UseGoldberg = true;
Game.GoldbergExperimentalSteamClient = true;
Game.HandlerInterval = 100;
Game.SymlinkExe = false;
Game.SymlinkGame = true;
Game.SymlinkFolders = true;
Game.ExecutableName = "DarkSoulsIII.exe";
Game.SteamID = "374320";
Game.GUID = "DARK SOULS III";
Game.GameName = "DARK SOULS III";
Game.MaxPlayers = 6;
Game.MaxPlayersOneMonitor = 6;
Game.LauncherTitle = "";
Game.StartArguments = "";
Game.HideTaskbar = false;
Game.SetTopMostAtEnd = true;
Game.Hook.ForceFocus = false;
Game.Hook.ForceFocusWindowName = "DARK SOULS III";
Game.HookFocus = true;
Game.Hook.DInputEnabled = false;
Game.Hook.XInputEnabled = true;
Game.Hook.XInputReroute = false;
Game.XInputPlusDll = ["xinput1_3.dll"];
Game.Hook.CustomDllEnabled = false;
Game.UserProfileSavePath = "AppData\\Roaming\\DarkSoulsIII";
Game.Description =
  "IMPORTANT: Close Steam completely before running this. Requires the Painted Worlds Co-op mod to be installed in your main game files: https://www.nexusmods.com/darksouls3/mods/1477/. To connect the instances start a game in all instances and press left shift+tab to open the goldberg invite overlay (alt-tab to or click on an instance to do this), use the overlay to invite the other players, right click on a name and select invite, once you send the invite you can open the overlay in the other instances, right click the host player and select join, you can do this in almost every area of the game to summon other players. Disable any external overlays if the goldberg invite overlay is not showing or restart the handler, the connection via the overlay should work even if you do not see the Painted Worlds splashscreen and version number.";
Game.KeepSymLinkOnExit = false;
Game.PromptBetweenInstances = false;
Game.PauseBetweenContextAndLaunch = 12;
Game.PauseBetweenProcessGrab = 7;
Game.PauseBetweenStarts = 35;

Game.Play = function() {
  var filePath = (Context.filePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\steam_settings");
  System.IO.Directory.CreateDirectory(filePath);

  var autoacc = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\steam_settings\\auto_accept_invite.txt";
  var lines = [""];
  Context.WriteTextFile(autoacc, lines);

  var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\steamclient_loader.exe");
  var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "steamclient_loader.exe");
  System.IO.File.Copy(savePkgOrigin, savePath, true);

  var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\steamclient64.dll");
  var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "steamclient64.dll");
  System.IO.File.Copy(savePkgOrigin, savePath, true);

  var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\steamclient.dll");
  var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "steamclient.dll");
  System.IO.File.Copy(savePkgOrigin, savePath, true);

  var interfaces = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\steam_interfaces.txt";
  var lines = [
    "SteamClient012",
    "SteamGameServer011",
    "SteamGameServerStats001",
    "SteamUser016",
    "SteamFriends013",
    "SteamUtils005",
    "SteamMatchMaking009",
    "SteamMatchMakingServers002",
    "STEAMUSERSTATS_INTERFACE_VERSION011",
    "STEAMAPPS_INTERFACE_VERSION005",
    "SteamNetworking005",
    "STEAMREMOTESTORAGE_INTERFACE_VERSION010",
    "STEAMSCREENSHOTS_INTERFACE_VERSION002",
    "STEAMHTTP_INTERFACE_VERSION002",
    "STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001"
  ];
  Context.WriteTextFile(interfaces, lines);

  var xml = Context.NucleusUserRoot + "\\AppData\\Roaming\\DarkSoulsIII\\GraphicsConfig.xml";

  if (System.IO.File.Exists(xml)) {
    System.IO.File.SetAttributes(xml, System.IO.File.GetAttributes(xml) & ~System.IO.FileAttributes.ReadOnly);
  }

  var pillar = Context.Options["Pillar"];

  if (pillar == "Yes") {
    var Bat = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\steamless.bat";
    var lines = [
      '"' + Context.NucleusFolder + '\\utils\\Steamless\\Steamless.CLI.exe" --quiet --keepbind ' + '"' + Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + '\\DarkSoulsIII.exe"',
      'move /y "DarkSoulsIII.exe.unpacked.exe" "DarkSoulsIII.exe"'
    ];
    Context.WriteTextFile(Bat, lines);

    Context.RunAdditionalFiles(["all|" + Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\steamless.bat"], false, 1);

    Context.Wait(10000);

    Context.PatchFileFindPattern(
      System.IO.Path.Combine(Context.GetFolder(Nucleus.Folder.InstancedGameFolder), "DarkSoulsIII.exe"),
      System.IO.Path.Combine(Context.GetFolder(Nucleus.Folder.InstancedGameFolder), "DarkSoulsIII.exe"),
      "03 00 00 80 07",
      Context.Width,
      4,
      true
    );

    Context.PatchFileFindPattern(
      System.IO.Path.Combine(Context.GetFolder(Nucleus.Folder.InstancedGameFolder), "DarkSoulsIII.exe"),
      System.IO.Path.Combine(Context.GetFolder(Nucleus.Folder.InstancedGameFolder), "DarkSoulsIII.exe"),
      "38 04 00 00 00 08",
      Context.Height,
      1,
      true
    );

    var path = Context.NucleusUserRoot + "\\AppData\\Roaming\\DarkSoulsIII\\GraphicsConfig.xml";
    Context.ChangeXmlNodeInnerTextValue(path, "//ScreenMode", "WINDOW");
    //Context.ChangeXmlNodeInnerTextValue(path, "//Resolution-WindowScreenWidth", "1920");
    //Context.ChangeXmlNodeInnerTextValue(path, "//Resolution-WindowScreenHeight", "1080");
    Context.ChangeXmlNodeInnerTextValue(path, "//Resolution-WindowScreenWidth", Context.Width);
    Context.ChangeXmlNodeInnerTextValue(path, "//Resolution-WindowScreenHeight", Context.Height);
  }

  if (pillar == "No") {
    var Bat = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\steamless.bat";
    var lines = [
      '"' + Context.NucleusFolder + '\\utils\\Steamless\\Steamless.CLI.exe" --quiet --keepbind ' + '"' + Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + '\\DarkSoulsIII.exe"',
      'move /y "DarkSoulsIII.exe.unpacked.exe" "DarkSoulsIII.exe"'
    ];
    Context.WriteTextFile(Bat, lines);

    Context.RunAdditionalFiles(["all|" + Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\steamless.bat"], false, 1);

    var path = Context.NucleusUserRoot + "\\AppData\\Roaming\\DarkSoulsIII\\GraphicsConfig.xml";
    Context.ChangeXmlNodeInnerTextValue(path, "//ScreenMode", "WINDOW");
  }
};