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

MotoGP '07 · handler “MotoGP 07”

Version 1

Release notes

Handler for MotoGP 07

Released
Size
609 KB
Downloads
113
Check
Verified
SHA-256
b7d89b6311e0a868a6d9553df60ef89b9cd274b03e009bed49286b08dd8c4f4b
Download v1 (.nc)All versions

Files 11

PathSize
handler/D3D9.dll405 KB
handler/dgVoodoo.conf16 KB
handler/dgVoodooCpl.exe362 KB
handler/dgVoodoo_fullscreen.conf16 KB
handler/motogp_High.cfg3.2 KB
handler/motogp_Low.cfg3.2 KB
handler/motogp_Med.cfg3.2 KB
handler/profile178 KB
handler/settings_audio90 KB
handler/settings_noaudio90 KB
handler.js10 KB

handler.js

Plain text
Hub.Handler.Version = 1; // Released at https://hub.splitscreen.me/ on Sun Aug 20 2023 15:29:31 GMT+0000 (Coordinated Universal Time).
Hub.Handler.Id = "pSLtMZ8s6D8xhyiEC";
Hub.Maintainer.Name = "Perserveruz";
Hub.Maintainer.Id = "nFAYvHKj75jAFRAgt";

var answers = ["No", "Yes"];
var answers1 = ["No", "720p", "1080p"];
var answers2 = ["Default", "Low", "Med", "High"];
Game.AddOption("Select preferred graphic settings", "Select Default to load default or previously selected setting", "Graphics", answers2);
Game.AddOption("Apply 720p or 1080p resolution and fullscreen for low-end PC (only native splitscreen)", "", "fullscreen", answers1);
Game.AddOption("Are you launching more than one instance?", "Select yes only for 5 or more players", "BigParty", answers);
Game.FileSymlinkExclusions = ["D3D9.dll", "dgVoodoo.conf", "motogp.cfg", "settings", "profile"];
Game.FileSymlinkCopyInstead = ["launcher.exe"];
Game.DirSymlinkExclusions = ["save"];
Game.KillMutex = ["Type:Mutant|motogp2007ownz", "Type:Mutant|motogp2007launch"];
Game.RenameNotKillMutex = false;
Game.HandlerInterval = 100;
Game.NeedsSteamEmulation = false;
Game.UseGoldberg = false;
Game.GoldbergLanguage = "english";
Game.GoldbergNoLocalSave = true;
Game.UseNucleusEnvironment = true;
Game.SymlinkExe = false;
Game.SymlinkGame = true;
Game.KeepSymLinkOnExit = true;
Game.SymlinkFolders = false;
Game.SupportsKeyboard = false;
Game.ExecutableName = "motogp.exe";
Game.SteamID = "";
Game.GUID = "MotoGP 07";
Game.GameName = "MotoGP 07";
Game.MaxPlayers = 8;
Game.MaxPlayersOneMonitor = 8;
Game.HideTaskbar = false;
Game.Hook.ForceFocus = true;
Game.Hook.ForceFocusWindowName = "MotoGP2007";
Game.HasDynamicWindowTitle = false;
Game.HookFocus = true;
Game.FakeFocus = true;
Game.FakeFocusSendActivate = false;
Game.PreventWindowDeactivation = false;
Game.Hook.DInputEnabled = false;
Game.Hook.DInputEnabled = false;
Game.Hook.XInputEnabled = false;
Game.Hook.XInputReroute = false;
Game.Hook.CustomDllEnabled = false;
Game.ProtoInput.XinputHook = true;
Game.ProtoInput.UseOpenXinput = true;
Game.PauseBetweenProcessGrab = 10;
Game.PauseBetweenProcessStarts = 10;
Game.SetForegroundWindowElsewhere = true;
Game.UseForceBindIP = true;
Game.Description =
  "MotoGP 07 already has native 4 player split screen and LAN. The purpose of this handler is to fix some graphical issues, to unlock all bikes and tracks, and to increase split screen up to 8 players. Enjoy!";

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

  var filePath = (Context.filePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\save\\Player " + Context.Nickname + "");
  System.IO.Directory.CreateDirectory(filePath);

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

  if (Context.PlayerID == 0) {
    if (!System.IO.File.Exists((Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\save\\settings"))) {
      var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\save\\settings");
      var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "settings_audio");
      System.IO.File.Copy(savePkgOrigin, savePath, true);
    }
  } else {
    if (!System.IO.File.Exists((Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\save\\settings"))) {
      var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\save\\settings");
      var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "settings_noaudio");
      System.IO.File.Copy(savePkgOrigin, savePath, true);
    }
  }

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

  if (!System.IO.File.Exists((Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\motogp.cfg"))) {
    var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\motogp.cfg");
    var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "motogp_Med.cfg");
    System.IO.File.Copy(savePkgOrigin, savePath, true);
  }

  var Graphics = Context.Options["Graphics"];
  if (Graphics == "Default") {
  }
  if (Graphics == "Low") {
    var savePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\motogp.cfg";
    var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "motogp_Low.cfg");
    System.IO.File.Copy(savePkgOrigin, savePath, true);
  }
  if (Graphics == "Med") {
    var savePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\motogp.cfg";
    var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "motogp_Med.cfg");
    System.IO.File.Copy(savePkgOrigin, savePath, true);
  }
  if (Graphics == "High") {
    var savePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\motogp.cfg";
    var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "motogp_High.cfg");
    System.IO.File.Copy(savePkgOrigin, savePath, true);
  }

  var txtPath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\motogp.cfg";
  var dict = [
    Context.FindLineNumberInTextFile(txtPath, "vmode/width", Nucleus.SearchType.StartsWith) + "|vmode/width = " + Context.Width + "",
    Context.FindLineNumberInTextFile(txtPath, "vmode/height", Nucleus.SearchType.StartsWith) + "|vmode/height = " + Context.Height + "",
    Context.FindLineNumberInTextFile(txtPath, "vmode/windowed", Nucleus.SearchType.StartsWith) + "|vmode/windowed = 1"
  ];
  Context.ReplaceLinesInTextFile(txtPath, dict);

  var fullscreen = Context.Options["fullscreen"];
  if (fullscreen == "No") {
    var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\dgVoodoo.conf");
    var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "dgVoodoo.conf");
    System.IO.File.Copy(savePkgOrigin, savePath, true);
  }

  if (fullscreen == "720p") {
    var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\dgVoodoo.conf");
    var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "dgVoodoo_fullscreen.conf");
    System.IO.File.Copy(savePkgOrigin, savePath, true);
    Game.DontResize = true;
    Game.DontReposition = true;
    Game.DontRemoveBorders = true;
    var txtPath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\motogp.cfg";
    var dict = [
      Context.FindLineNumberInTextFile(txtPath, "vmode/width", Nucleus.SearchType.StartsWith) + "|vmode/width = 1280",
      Context.FindLineNumberInTextFile(txtPath, "vmode/height", Nucleus.SearchType.StartsWith) + "|vmode/height = 720",
      Context.FindLineNumberInTextFile(txtPath, "vmode/windowed", Nucleus.SearchType.StartsWith) + "|vmode/windowed = 0"
    ];
    Context.ReplaceLinesInTextFile(txtPath, dict);
  }
  if (fullscreen == "1080p") {
    var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\dgVoodoo.conf");
    var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "dgVoodoo_fullscreen.conf");
    System.IO.File.Copy(savePkgOrigin, savePath, true);
    Game.DontResize = true;
    Game.DontReposition = true;
    Game.DontRemoveBorders = true;
    var txtPath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\motogp.cfg";
    var dict = [
      Context.FindLineNumberInTextFile(txtPath, "vmode/width", Nucleus.SearchType.StartsWith) + "|vmode/width = 1920",
      Context.FindLineNumberInTextFile(txtPath, "vmode/height", Nucleus.SearchType.StartsWith) + "|vmode/height = 1080",
      Context.FindLineNumberInTextFile(txtPath, "vmode/windowed", Nucleus.SearchType.StartsWith) + "|vmode/windowed = 0"
    ];
    Context.ReplaceLinesInTextFile(txtPath, dict);
  }

  if (Context.Options["BigParty"] == "No") {
    Game.ProtoInput.MultipleProtoControllers = true;

    ProtoController1 = 1;
    ProtoController2 = 2;
    ProtoController3 = 3;
    ProtoController4 = 4;
  }
  if (Context.Options["BigParty"] == "Yes") {
    Game.ProtoInput.InjectStartup = false;
    Game.ProtoInput.InjectRuntime_RemoteLoadMethod = false;
    Game.ProtoInput.InjectRuntime_EasyHookMethod = true;
    Game.ProtoInput.InjectRuntime_EasyHookStealthMethod = false;
    Game.ProtoInput.GetRawInputDataHook = true;

    if (Context.PlayerID == 0) {
      // So the code only runs once
      Game.ProtoInput.MultipleProtoControllers = true;

      // The number of controller icons dragged onto the screens
      var numPlayers = 0;

      for (var i = 0; i < PlayerList.Count; i++) {
        var player = PlayerList[i];

        if (player.IsXInput && player.ScreenIndex !== -1) {
          numPlayers++;
        }

        // These might not be reset between runs, so let's reset them here
        // 0 means no controller, 1 means controller 1, etc
        player.ProtoController1 = 0;
        player.ProtoController2 = 0;
        player.ProtoController3 = 0;
        player.ProtoController4 = 0;
      }

      var controllerCounter = 1;
      while (controllerCounter < numPlayers * 4) {
        for (var i = 0; i < PlayerList.Count; i++) {
          var player = PlayerList[i];

          if (player.IsXInput && player.ScreenIndex !== -1) {
            if (player.ProtoController1 == 0) {
              player.ProtoController1 = controllerCounter;
              controllerCounter++;
            } else if (player.ProtoController2 == 0) {
              player.ProtoController2 = controllerCounter;
              controllerCounter++;
            } else if (player.ProtoController3 == 0) {
              player.ProtoController3 = controllerCounter;
              controllerCounter++;
            } else if (player.ProtoController4 == 0) {
              player.ProtoController4 = controllerCounter;
              controllerCounter++;
            } else {
              // This instance has all its controllers set already
            }
          }
        }
      }
    }
  }
};