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

Halo 2 · handler “Halo 2 Project Cartographer”

Version 9

Release notes

updated to work with latest Project Cartographer and updated XLiveLessNess.

Released
Size
512 KB
Downloads
491
Check
Verified
SHA-256
bb030ba31a3464fae72303812373a5af1ca3fc420ff0d5b089e6bcd50a0e6f03
Download v9 (.nc)All versions

Files 5

PathSize
Halo2PC/halo2config1.ini4.6 KB
Halo2PC/xlive.dll908 KB
Halo2PC/xlln-halo-2-cartographer.dll137 KB
Halo2PC/xlln-halo-2.dll22 KB
handler.js7.8 KB

handler.js

Plain text
Hub.Handler.Version = 9; // Released at https://hub.splitscreen.me/ on Tue Nov 19 2024 10:04:02 GMT+0000 (Coordinated Universal Time).
Hub.Handler.Id = "x6CA522XrR74myDzx";
Hub.Maintainer.Name = "Talos91";
Hub.Maintainer.Id = "eeL7HAz8zJovChWw4";

var answers1 = ["No", "Yes"];
Game.AddOption(
  "Use XLiveLessNess LAN connection method?",
  "ONLY use if you have issues with the Project Cartographer LAN, gamepads only. When launching quickly write a name in the XLiveLessNess window that will open, click on login and minimize the XLLN window, use a different name per instance.",
  "XLLN",
  answers1
);

Game.KillMutex = ["Halo2AlreadyRunning"];
Game.DirSymlinkExclusions = ["xlln\\modules", "xinput\\p02", "xinput\\p03", "xinput\\p04"];
Game.FileSymlinkExclusions = [
  "Durazno.ini",
  "Duraz02.ini",
  "Duraz03.ini",
  "Duraz04.ini",
  "halo2config1.ini",
  "halo2config2.ini",
  "halo2config3.ini",
  "halo2config4.ini",
  "halo2config5.ini",
  "xinput9_1_0.dll"
];
Game.FileSymlinkCopyInstead = ["gungame.ini", "h2customlanguage.ini", "halo2.exe.cfg", "loading.bin", "mssdsp.flt", "xlive.dll", "cartographer.dll"];
Game.NeedsSteamEmulation = false;
Game.HandlerInterval = 100;
Game.SymlinkExe = false;
Game.SymlinkGame = true;
Game.SymlinkFolders = true;
Game.ExecutableName = "halo2.exe";
Game.GUID = "Halo 2 Project Cartographer";
Game.GameName = "Halo 2: Project Cartographer";
Game.MaxPlayers = 16;
Game.MaxPlayersOneMonitor = 16;
Game.LauncherTitle = "XLLN #1 v1.5.0.1";
Game.HideTaskbar = false;
Game.StartArguments = "-hiresfix -windowed";
Game.SetTopMostAtEnd = true;
Game.Hook.ForceFocus = false;
Game.Hook.ForceFocusWindowName = "Halo 2"; //Halo 2 - Project Cartographer
Game.Hook.DInputEnabled = false;
Game.Hook.XInputEnabled = true;
Game.Hook.XInputReroute = false;
Game.Hook.CustomDllEnabled = false;
Game.SupportsKeyboard = true;
Game.UserProfileSavePath = "AppData\\Local\\Microsoft\\Halo 2\\Saved Games";
Game.UserProfileConfigPath = "AppData\\Local\\Microsoft\\Halo 2";
Game.Description = "For Halo 2 Project Cartographer: https://www.halo2.online/home/";
Game.PauseBetweenStarts = 30;
Game.GamePlayBeforeGameSetup = true;

Game.Play = function() {
  var xlln = Context.Options["XLLN"];

  if (xlln == "Yes") {
    Game.FakeFocus = false;
    Game.HookFocus = true;
    Game.XInputPlusDll = ["xinput9_1_0.dll"];
    Game.PauseBetweenProcessGrab = 20;

    var filePath = (Context.filePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\xlln\\modules");
    System.IO.Directory.CreateDirectory(filePath);

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

    var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\xlln\\modules\\xlln-halo-2-cartographer.dll");
    var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "xlln-halo-2-cartographer.dll");
    System.IO.File.Copy(savePkgOrigin, savePath, true);

    var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\xlln\\modules\\xlln-halo-2.dll");
    var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "xlln-halo-2.dll");
    System.IO.File.Copy(savePkgOrigin, savePath, true);
  }

  if (xlln == "No") {
    Game.HasDynamicWindowTitle = true;
    Game.PauseBetweenProcessGrab = 10;
    Game.FakeFocus = false;
    Game.HookFocus = false;

    var filePath = (Context.filePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\xinput\\p02");
    System.IO.Directory.CreateDirectory(filePath);

    var filePath = (Context.filePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\xinput\\p03");
    System.IO.Directory.CreateDirectory(filePath);

    var filePath = (Context.filePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\xinput\\p04");
    System.IO.Directory.CreateDirectory(filePath);

    System.IO.File.Copy(System.IO.Path.Combine(Context.RootInstallFolder, "xinput9_1_0.dll"), System.IO.Path.Combine(Context.RootFolder, "xinput9_1_0.dll"), true);

    System.IO.File.Copy(System.IO.Path.Combine(Context.RootInstallFolder, "Durazno.ini"), System.IO.Path.Combine(Context.RootFolder, "Durazno.ini"), true);

    System.IO.File.Copy(System.IO.Path.Combine(Context.RootInstallFolder, "Durazno.ini"), System.IO.Path.Combine(Context.RootFolder, "Duraz02.ini"), true);

    System.IO.File.Copy(System.IO.Path.Combine(Context.RootInstallFolder, "Durazno.ini"), System.IO.Path.Combine(Context.RootFolder, "Duraz03.ini"), true);

    System.IO.File.Copy(System.IO.Path.Combine(Context.RootInstallFolder, "Durazno.ini"), System.IO.Path.Combine(Context.RootFolder, "Duraz04.ini"), true);

    var savePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\Durazno.ini";
    Context.ModifySaveFile(savePath, savePath, Nucleus.SaveType.INI, [
      new Nucleus.IniSaveInfo("Controller0", "Port", 0),
      new Nucleus.IniSaveInfo("Controller0", "Disable", 0),
      new Nucleus.IniSaveInfo("Controller1", "Disable", 1),
      new Nucleus.IniSaveInfo("Controller2", "Disable", 1),
      new Nucleus.IniSaveInfo("Controller3", "Disable", 1)
    ]);

    var savePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\Duraz02.ini";
    Context.ModifySaveFile(savePath, savePath, Nucleus.SaveType.INI, [
      new Nucleus.IniSaveInfo("Controller0", "Port", 1),
      new Nucleus.IniSaveInfo("Controller0", "Disable", 0),
      new Nucleus.IniSaveInfo("Controller1", "Disable", 1),
      new Nucleus.IniSaveInfo("Controller2", "Disable", 1),
      new Nucleus.IniSaveInfo("Controller3", "Disable", 1)
    ]);

    var savePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\Duraz03.ini";
    Context.ModifySaveFile(savePath, savePath, Nucleus.SaveType.INI, [
      new Nucleus.IniSaveInfo("Controller0", "Port", 2),
      new Nucleus.IniSaveInfo("Controller0", "Disable", 0),
      new Nucleus.IniSaveInfo("Controller1", "Disable", 1),
      new Nucleus.IniSaveInfo("Controller2", "Disable", 1),
      new Nucleus.IniSaveInfo("Controller3", "Disable", 1)
    ]);

    var savePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\Duraz04.ini";
    Context.ModifySaveFile(savePath, savePath, Nucleus.SaveType.INI, [
      new Nucleus.IniSaveInfo("Controller0", "Port", 3),
      new Nucleus.IniSaveInfo("Controller0", "Disable", 0),
      new Nucleus.IniSaveInfo("Controller1", "Disable", 1),
      new Nucleus.IniSaveInfo("Controller2", "Disable", 1),
      new Nucleus.IniSaveInfo("Controller3", "Disable", 1)
    ]);

    var number = Context.PlayerID + 1;
    var port = Context.PlayerID + 2;

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

    var savePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\halo2config" + number + ".ini";
    Context.ModifySaveFile(savePath, savePath, Nucleus.SaveType.INI, [
      new Nucleus.IniSaveInfo("H2ConfigurationVersion:1", "base_port", port + "000"),
      new Nucleus.IniSaveInfo("H2ConfigurationVersion:1", "lan_ip", "127.0.0.1"),
      new Nucleus.IniSaveInfo("H2ConfigurationVersion:1", "disable_ingame_keyboard", 1)
    ]);

    if (Context.IsKeyboardPlayer) {
      var savePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\halo2config" + number + ".ini";
      Context.ModifySaveFile(savePath, savePath, Nucleus.SaveType.INI, [new Nucleus.IniSaveInfo("H2ConfigurationVersion:1", "disable_ingame_keyboard", 0)]);
    }
  }
};