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

Quake · handler “Quake (Quakespasm-Spiked)”

Version 1

Release notes

Quake

Released
Size
12 KB
Downloads
3
Check
Verified
SHA-256
d3149050872965803544c8db365baae48c9632a96558b86cbb30b712cb891991
Download v1 (.nc)All versions

Files 4

PathSize
handler.js15 KB
quake/checknucleus.bat1.0 KB
quake/hidemouse.bat25 B
quake/nomousy.exe13 KB

handler.js

Plain text
Hub.Handler.Version = 1; // Released at https://hub.splitscreen.me/ on Wed Jul 28 2021 12:43:00 GMT+0000 (UTC).
Hub.Handler.Id = "uir6tptWirXfg6Z87";
Hub.Maintainer.Name = "Genjuro_Kibagami";
Hub.Maintainer.Id = "6s2Fuz9unXTtH453m";

var answers = ["None", "Scourge of Armagon", "Dissolution of Eternity", "Malice", "Aliens", "Dimension of the Past", "Insomnia", "Zerstörer", "Reaper Bots", "Arcane Dimensions"];
Game.AddOption("Select a Mod", "", "mod", answers);

Game.ExecutableContext = ["libFLAC-8.dll"];
Game.DirSymlinkCopyInstead = ["id1", "hipnotic", "rogue", "rpbot", "malice", "zer", "dopa", "insomnia", "aliens", "ad"];
Game.FileSymlinkExclusions = ["xinput1_4.dll"];
Game.NeedsSteamEmulation = false;
Game.HandlerInterval = 100;
Game.SymlinkExe = false;
Game.SymlinkGame = true;
Game.SymlinkFolders = true;
Game.ExecutableName = "quakespasm-spiked-win64.exe";
Game.SteamID = "2310";
Game.GUID = "Quake";
Game.GameName = "Quake (Quakespasm-Spiked)";
Game.MaxPlayers = 8;
Game.MaxPlayersOneMonitor = 8;
Game.LauncherTitle = "";
Game.HideTaskbar = false;
Game.Hook.ForceFocus = true;
Game.Hook.ForceFocusWindowName = "QSS 2021-07-08";
Game.HasDynamicWindowTitle = true;
Game.FakeFocus = true;
Game.HookFocus = false;
Game.SupportsKeyboard = false;
Game.Hook.DInputEnabled = false;
Game.Hook.XInputEnabled = true;
Game.Hook.CustomDllEnabled = false;
Game.XInputPlusDll = ["xinput1_4.dll"];
Game.Description =
  "This script requires Quakespasm-Spiked to be installed in your clean Quake files. Run quakespasm-spiked-win64.exe in your main game files first and change/save any graphics setting and all mission packs before launching via Nucleus. Start a multiplayer game in the first instance then press ok on the prompt to open the next instances when the server is ready, the other instances will connect automatically.";
Game.KeepSymLinkOnExit = true;
Game.PromptAfterFirstInstance = true;
Game.PauseBetweenProcessGrab = 5;
Game.PauseBetweenStarts = 15;

Game.Play = function() {
  var txtPath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\id1\\config.cfg";
  var dict = [
    Context.FindLineNumberInTextFile(txtPath, "joy_enable ", Nucleus.SearchType.StartsWith) + '|joy_enable "1"',
    Context.FindLineNumberInTextFile(txtPath, "m_pitch ", Nucleus.SearchType.StartsWith) + '|m_pitch "0"',
    Context.FindLineNumberInTextFile(txtPath, "m_yaw ", Nucleus.SearchType.StartsWith) + '|m_yaw "0"',
    Context.FindLineNumberInTextFile(txtPath, "name ", Nucleus.SearchType.StartsWith) + '|name "' + Context.Nickname + '"',
    Context.FindLineNumberInTextFile(txtPath, "vid_borderless ", Nucleus.SearchType.StartsWith) + '|vid_borderless "1"',
    Context.FindLineNumberInTextFile(txtPath, "vid_desktopfullscreen ", Nucleus.SearchType.StartsWith) + '|vid_desktopfullscreen "0"',
    Context.FindLineNumberInTextFile(txtPath, "vid_fullscreen ", Nucleus.SearchType.StartsWith) + '|vid_fullscreen "0"',
    Context.FindLineNumberInTextFile(txtPath, "vid_height ", Nucleus.SearchType.StartsWith) + '|vid_height  "' + Context.Height + '"',
    Context.FindLineNumberInTextFile(txtPath, "vid_width ", Nucleus.SearchType.StartsWith) + '|vid_width  "' + Context.Width + '"'
  ];
  Context.ReplaceLinesInTextFile(txtPath, dict);

  if (System.IO.File.Exists(Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\hipnotic\\CONFIG.CFG")) {
    var txtPath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\hipnotic\\CONFIG.CFG";
    var dict = [
      Context.FindLineNumberInTextFile(txtPath, "joy_enable ", Nucleus.SearchType.StartsWith) + '|joy_enable "1"',
      Context.FindLineNumberInTextFile(txtPath, "m_pitch ", Nucleus.SearchType.StartsWith) + '|m_pitch "0"',
      Context.FindLineNumberInTextFile(txtPath, "m_yaw ", Nucleus.SearchType.StartsWith) + '|m_yaw "0"',
      Context.FindLineNumberInTextFile(txtPath, "name ", Nucleus.SearchType.StartsWith) + '|name "' + Context.Nickname + '"',
      Context.FindLineNumberInTextFile(txtPath, "vid_borderless ", Nucleus.SearchType.StartsWith) + '|vid_borderless "1"',
      Context.FindLineNumberInTextFile(txtPath, "vid_desktopfullscreen ", Nucleus.SearchType.StartsWith) + '|vid_desktopfullscreen "0"',
      Context.FindLineNumberInTextFile(txtPath, "vid_fullscreen ", Nucleus.SearchType.StartsWith) + '|vid_fullscreen "0"',
      Context.FindLineNumberInTextFile(txtPath, "vid_height ", Nucleus.SearchType.StartsWith) + '|vid_height  "' + Context.Height + '"',
      Context.FindLineNumberInTextFile(txtPath, "vid_width ", Nucleus.SearchType.StartsWith) + '|vid_width  "' + Context.Width + '"'
    ];
    Context.ReplaceLinesInTextFile(txtPath, dict);
  }

  if (System.IO.File.Exists(Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\rogue\\config.cfg")) {
    var txtPath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\rogue\\config.cfg";
    var dict = [
      Context.FindLineNumberInTextFile(txtPath, "joy_enable ", Nucleus.SearchType.StartsWith) + '|joy_enable "1"',
      Context.FindLineNumberInTextFile(txtPath, "m_pitch ", Nucleus.SearchType.StartsWith) + '|m_pitch "0"',
      Context.FindLineNumberInTextFile(txtPath, "m_yaw ", Nucleus.SearchType.StartsWith) + '|m_yaw "0"',
      Context.FindLineNumberInTextFile(txtPath, "name ", Nucleus.SearchType.StartsWith) + '|name "' + Context.Nickname + '"',
      Context.FindLineNumberInTextFile(txtPath, "vid_borderless ", Nucleus.SearchType.StartsWith) + '|vid_borderless "1"',
      Context.FindLineNumberInTextFile(txtPath, "vid_desktopfullscreen ", Nucleus.SearchType.StartsWith) + '|vid_desktopfullscreen "0"',
      Context.FindLineNumberInTextFile(txtPath, "vid_fullscreen ", Nucleus.SearchType.StartsWith) + '|vid_fullscreen "0"',
      Context.FindLineNumberInTextFile(txtPath, "vid_height ", Nucleus.SearchType.StartsWith) + '|vid_height  "' + Context.Height + '"',
      Context.FindLineNumberInTextFile(txtPath, "vid_width ", Nucleus.SearchType.StartsWith) + '|vid_width  "' + Context.Width + '"'
    ];
    Context.ReplaceLinesInTextFile(txtPath, dict);
  }

  if (System.IO.File.Exists(Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\aliens\\config.cfg")) {
    var txtPath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\aliens\\config.cfg";
    var dict = [
      Context.FindLineNumberInTextFile(txtPath, "joy_enable ", Nucleus.SearchType.StartsWith) + '|joy_enable "1"',
      Context.FindLineNumberInTextFile(txtPath, "m_pitch ", Nucleus.SearchType.StartsWith) + '|m_pitch "0"',
      Context.FindLineNumberInTextFile(txtPath, "m_yaw ", Nucleus.SearchType.StartsWith) + '|m_yaw "0"',
      Context.FindLineNumberInTextFile(txtPath, "name ", Nucleus.SearchType.StartsWith) + '|name "' + Context.Nickname + '"',
      Context.FindLineNumberInTextFile(txtPath, "vid_borderless ", Nucleus.SearchType.StartsWith) + '|vid_borderless "1"',
      Context.FindLineNumberInTextFile(txtPath, "vid_desktopfullscreen ", Nucleus.SearchType.StartsWith) + '|vid_desktopfullscreen "0"',
      Context.FindLineNumberInTextFile(txtPath, "vid_fullscreen ", Nucleus.SearchType.StartsWith) + '|vid_fullscreen "0"',
      Context.FindLineNumberInTextFile(txtPath, "vid_height ", Nucleus.SearchType.StartsWith) + '|vid_height  "' + Context.Height + '"',
      Context.FindLineNumberInTextFile(txtPath, "vid_width ", Nucleus.SearchType.StartsWith) + '|vid_width  "' + Context.Width + '"'
    ];
    Context.ReplaceLinesInTextFile(txtPath, dict);
  }

  if (System.IO.File.Exists(Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\dopa\\config.cfg")) {
    var txtPath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\dopa\\config.cfg";
    var dict = [
      Context.FindLineNumberInTextFile(txtPath, "joy_enable ", Nucleus.SearchType.StartsWith) + '|joy_enable "1"',
      Context.FindLineNumberInTextFile(txtPath, "m_pitch ", Nucleus.SearchType.StartsWith) + '|m_pitch "0"',
      Context.FindLineNumberInTextFile(txtPath, "m_yaw ", Nucleus.SearchType.StartsWith) + '|m_yaw "0"',
      Context.FindLineNumberInTextFile(txtPath, "name ", Nucleus.SearchType.StartsWith) + '|name "' + Context.Nickname + '"',
      Context.FindLineNumberInTextFile(txtPath, "vid_borderless ", Nucleus.SearchType.StartsWith) + '|vid_borderless "1"',
      Context.FindLineNumberInTextFile(txtPath, "vid_desktopfullscreen ", Nucleus.SearchType.StartsWith) + '|vid_desktopfullscreen "0"',
      Context.FindLineNumberInTextFile(txtPath, "vid_fullscreen ", Nucleus.SearchType.StartsWith) + '|vid_fullscreen "0"',
      Context.FindLineNumberInTextFile(txtPath, "vid_height ", Nucleus.SearchType.StartsWith) + '|vid_height  "' + Context.Height + '"',
      Context.FindLineNumberInTextFile(txtPath, "vid_width ", Nucleus.SearchType.StartsWith) + '|vid_width  "' + Context.Width + '"'
    ];
    Context.ReplaceLinesInTextFile(txtPath, dict);
  }

  if (System.IO.File.Exists(Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\insomnia\\config.cfg")) {
    var txtPath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\insomnia\\config.cfg";
    var dict = [
      Context.FindLineNumberInTextFile(txtPath, "joy_enable ", Nucleus.SearchType.StartsWith) + '|joy_enable "1"',
      Context.FindLineNumberInTextFile(txtPath, "m_pitch ", Nucleus.SearchType.StartsWith) + '|m_pitch "0"',
      Context.FindLineNumberInTextFile(txtPath, "m_yaw ", Nucleus.SearchType.StartsWith) + '|m_yaw "0"',
      Context.FindLineNumberInTextFile(txtPath, "name ", Nucleus.SearchType.StartsWith) + '|name "' + Context.Nickname + '"',
      Context.FindLineNumberInTextFile(txtPath, "vid_borderless ", Nucleus.SearchType.StartsWith) + '|vid_borderless "1"',
      Context.FindLineNumberInTextFile(txtPath, "vid_desktopfullscreen ", Nucleus.SearchType.StartsWith) + '|vid_desktopfullscreen "0"',
      Context.FindLineNumberInTextFile(txtPath, "vid_fullscreen ", Nucleus.SearchType.StartsWith) + '|vid_fullscreen "0"',
      Context.FindLineNumberInTextFile(txtPath, "vid_height ", Nucleus.SearchType.StartsWith) + '|vid_height  "' + Context.Height + '"',
      Context.FindLineNumberInTextFile(txtPath, "vid_width ", Nucleus.SearchType.StartsWith) + '|vid_width  "' + Context.Width + '"'
    ];
    Context.ReplaceLinesInTextFile(txtPath, dict);
  }

  if (System.IO.File.Exists(Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\malice\\config.cfg")) {
    var txtPath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\malice\\config.cfg";
    var dict = [
      Context.FindLineNumberInTextFile(txtPath, "joy_enable ", Nucleus.SearchType.StartsWith) + '|joy_enable "1"',
      Context.FindLineNumberInTextFile(txtPath, "m_pitch ", Nucleus.SearchType.StartsWith) + '|m_pitch "0"',
      Context.FindLineNumberInTextFile(txtPath, "m_yaw ", Nucleus.SearchType.StartsWith) + '|m_yaw "0"',
      Context.FindLineNumberInTextFile(txtPath, "name ", Nucleus.SearchType.StartsWith) + '|name "' + Context.Nickname + '"',
      Context.FindLineNumberInTextFile(txtPath, "vid_borderless ", Nucleus.SearchType.StartsWith) + '|vid_borderless "1"',
      Context.FindLineNumberInTextFile(txtPath, "vid_desktopfullscreen ", Nucleus.SearchType.StartsWith) + '|vid_desktopfullscreen "0"',
      Context.FindLineNumberInTextFile(txtPath, "vid_fullscreen ", Nucleus.SearchType.StartsWith) + '|vid_fullscreen "0"',
      Context.FindLineNumberInTextFile(txtPath, "vid_height ", Nucleus.SearchType.StartsWith) + '|vid_height  "' + Context.Height + '"',
      Context.FindLineNumberInTextFile(txtPath, "vid_width ", Nucleus.SearchType.StartsWith) + '|vid_width  "' + Context.Width + '"'
    ];
    Context.ReplaceLinesInTextFile(txtPath, dict);
  }

  if (System.IO.File.Exists(Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\ad\\config.cfg")) {
    var txtPath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\ad\\config.cfg";
    var dict = [
      Context.FindLineNumberInTextFile(txtPath, "joy_enable ", Nucleus.SearchType.StartsWith) + '|joy_enable "1"',
      Context.FindLineNumberInTextFile(txtPath, "m_pitch ", Nucleus.SearchType.StartsWith) + '|m_pitch "0"',
      Context.FindLineNumberInTextFile(txtPath, "m_yaw ", Nucleus.SearchType.StartsWith) + '|m_yaw "0"',
      Context.FindLineNumberInTextFile(txtPath, "name ", Nucleus.SearchType.StartsWith) + '|name "' + Context.Nickname + '"',
      Context.FindLineNumberInTextFile(txtPath, "vid_borderless ", Nucleus.SearchType.StartsWith) + '|vid_borderless "1"',
      Context.FindLineNumberInTextFile(txtPath, "vid_desktopfullscreen ", Nucleus.SearchType.StartsWith) + '|vid_desktopfullscreen "0"',
      Context.FindLineNumberInTextFile(txtPath, "vid_fullscreen ", Nucleus.SearchType.StartsWith) + '|vid_fullscreen "0"',
      Context.FindLineNumberInTextFile(txtPath, "vid_height ", Nucleus.SearchType.StartsWith) + '|vid_height  "' + Context.Height + '"',
      Context.FindLineNumberInTextFile(txtPath, "vid_width ", Nucleus.SearchType.StartsWith) + '|vid_width  "' + Context.Width + '"'
    ];
    Context.ReplaceLinesInTextFile(txtPath, dict);
  }

  if (System.IO.File.Exists(Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\zer\\config.cfg")) {
    var txtPath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\zer\\config.cfg";
    var dict = [
      Context.FindLineNumberInTextFile(txtPath, "joy_enable ", Nucleus.SearchType.StartsWith) + '|joy_enable "1"',
      Context.FindLineNumberInTextFile(txtPath, "m_pitch ", Nucleus.SearchType.StartsWith) + '|m_pitch "0"',
      Context.FindLineNumberInTextFile(txtPath, "m_yaw ", Nucleus.SearchType.StartsWith) + '|m_yaw "0"',
      Context.FindLineNumberInTextFile(txtPath, "name ", Nucleus.SearchType.StartsWith) + '|name "' + Context.Nickname + '"',
      Context.FindLineNumberInTextFile(txtPath, "vid_borderless ", Nucleus.SearchType.StartsWith) + '|vid_borderless "1"',
      Context.FindLineNumberInTextFile(txtPath, "vid_desktopfullscreen ", Nucleus.SearchType.StartsWith) + '|vid_desktopfullscreen "0"',
      Context.FindLineNumberInTextFile(txtPath, "vid_fullscreen ", Nucleus.SearchType.StartsWith) + '|vid_fullscreen "0"',
      Context.FindLineNumberInTextFile(txtPath, "vid_height ", Nucleus.SearchType.StartsWith) + '|vid_height  "' + Context.Height + '"',
      Context.FindLineNumberInTextFile(txtPath, "vid_width ", Nucleus.SearchType.StartsWith) + '|vid_width  "' + Context.Width + '"'
    ];
    Context.ReplaceLinesInTextFile(txtPath, dict);
  }

  var mod = Context.Options["mod"];
  if (mod == "None") {
    var modarg = "";
  }
  if (mod == "Scourge of Armagon") {
    var modarg = "-game hipnotic";
  }
  if (mod == "Dissolution of Eternity") {
    var modarg = "-game rogue";
  }
  if (mod == "Malice") {
    var modarg = "-game malice";
  }
  if (mod == "Aliens") {
    var modarg = "-game aliens";
  }
  if (mod == "Dimension of the Past") {
    var modarg = "-game dopa";
  }
  if (mod == "Insomnia") {
    var modarg = "-game insomnia";
  }
  if (mod == "Zerstörer") {
    var modarg = "-game zer";
  }
  if (mod == "Reaper Bots") {
    var modarg = "-game RPBOT";
  }
  if (mod == "Arcane Dimensions") {
    var modarg = "-game ad";
  }

  if (Context.PlayerID == 0) {
    Context.StartArguments = modarg;
  } else {
    Context.StartArguments = modarg + " +connect 127.0.0.1";
  }
  Context.RunAdditionalFiles([System.IO.Path.Combine(Game.Folder) + "\\hidemouse.bat"], false, 0, true, false);
  Context.RunAdditionalFiles([System.IO.Path.Combine(Game.Folder) + "\\checknucleus.bat"], false, 0, true, false);
};