Labyrinthine · handler “Labyrinthine”
Version 4 (current)
Release notes
Fixed GBE steamInputs, and add unityFixes for prevent windows to resetting the internal window/resolution.
- Released
- Size
- 8.8 MB
- Downloads
- 40
- Check
- Verified
- SHA-256
- c0e1b135d6ca8070fff0b2290679ce84ac95cb4255e67164aa66ad92164c5fec
Files 35
| Path | Size |
|---|---|
| Labyrinthine/steam_api64.dll | 21.5 MB |
| Labyrinthine/steam_settings/account_avatar.jpg | 29 KB |
| Labyrinthine/steam_settings/configs.app.ini | 111 B |
| Labyrinthine/steam_settings/configs.main.ini | 333 B |
| Labyrinthine/steam_settings/controller/game.txt | 260 B |
| Labyrinthine/steam_settings/controller/glyphs/button_a.png | 9.2 KB |
| Labyrinthine/steam_settings/controller/glyphs/button_b.png | 8.4 KB |
| Labyrinthine/steam_settings/controller/glyphs/button_x.png | 10 KB |
| Labyrinthine/steam_settings/controller/glyphs/button_y.png | 9.0 KB |
| Labyrinthine/steam_settings/controller/glyphs/shoulder_l.png | 2.6 KB |
| Labyrinthine/steam_settings/controller/glyphs/shoulder_r.png | 3.0 KB |
| Labyrinthine/steam_settings/controller/glyphs/stick_dpad_e.png | 5.9 KB |
| Labyrinthine/steam_settings/controller/glyphs/stick_dpad_n.png | 5.9 KB |
| Labyrinthine/steam_settings/controller/glyphs/stick_dpad_s.png | 5.8 KB |
| Labyrinthine/steam_settings/controller/glyphs/stick_dpad_w.png | 5.9 KB |
| Labyrinthine/steam_settings/controller/glyphs/stick_l_click.png | 6.2 KB |
| Labyrinthine/steam_settings/controller/glyphs/stick_l_move.png | 5.0 KB |
| Labyrinthine/steam_settings/controller/glyphs/stick_r_click.png | 6.9 KB |
| Labyrinthine/steam_settings/controller/glyphs/stick_r_move.png | 5.7 KB |
| Labyrinthine/steam_settings/controller/glyphs/trigger_l_click.png | 1.8 KB |
| Labyrinthine/steam_settings/controller/glyphs/trigger_l_pull.png | 1.8 KB |
| Labyrinthine/steam_settings/controller/glyphs/trigger_r_click.png | 2.3 KB |
| Labyrinthine/steam_settings/controller/glyphs/trigger_r_pull.png | 2.3 KB |
| Labyrinthine/steam_settings/controller/glyphs/xbox_button_dpad_e.png | 5.9 KB |
| Labyrinthine/steam_settings/controller/glyphs/xbox_button_dpad_move.png | 4.9 KB |
| Labyrinthine/steam_settings/controller/glyphs/xbox_button_dpad_n.png | 5.7 KB |
| Labyrinthine/steam_settings/controller/glyphs/xbox_button_dpad_s.png | 5.8 KB |
| Labyrinthine/steam_settings/controller/glyphs/xbox_button_dpad_w.png | 5.8 KB |
| Labyrinthine/steam_settings/controller/glyphs/xbox_button_select.png | 3.8 KB |
| Labyrinthine/steam_settings/controller/glyphs/xbox_button_start.png | 3.8 KB |
| Labyrinthine/steam_settings/controller/Menu.txt | 194 B |
| Labyrinthine/steam_settings/load_dlls/NucleusUnityFixesNative.dll | 1.3 MB |
| Labyrinthine/steam_settings/stats.json | 398 B |
| Labyrinthine/steam_settings/steam_appid.txt | 7 B |
| handler.js | 15 KB |
handler.js
Plain textHub.Handler.Version = 4; // Released at https://hub.splitscreen.me/ on Fri Oct 02 2026 03:32:21 GMT+0000 (Coordinated Universal Time).
Hub.Handler.Id = "C28GmHa3d2tRBNCRS";
Hub.Maintainer.Name = "Vlxst";
Hub.Maintainer.Id = "wZTsDsXZnJhD4fwfz";
Game.ExecutableContext = ["Labyrinthine_Data"];
Game.DirSymlinkExclusions = ["Labyrinthine_Data\\Plugins\\x86_64", "Labyrinthine_Data"];
Game.FileSymlinkExclusions = ["steam_api64.dll", "steam_appid.txt"];
Game.FileSymlinkCopyInstead = ["globalgamemanagers", "UnityCrashHandler64.exe", "UnityPlayer.dll", "settings.cfg", "keybinds.cfg", "app.info"];
Game.BackupFiles = ["Labyrinthine_Data\\settings.cfg", "Labyrinthine_Data\\keybinds.cfg"];
Game.SteamID = "1302240";
Game.GUID = "Labyrinthine";
Game.GameName = "Labyrinthine";
Game.HandlerInterval = 100;
Game.UseGoldberg = false;
Game.SymlinkExe = false;
Game.SymlinkGame = true;
Game.SymlinkFolders = false;
Game.SupportsKeyboard = false;
Game.ExecutableName = "Labyrinthine.exe";
Game.MaxPlayersOneMonitor = 8;
Game.MaxPlayers = 8;
Game.Hook.ForceFocus = false;
Game.Hook.ForceFocusWindowName = "Labyrinthine";
Game.HasDynamicWindowTitle = true;
// Game.HideTaskbar = true;
Game.ResetWindows = true;
Game.RefreshWindowAfterStart = true;
Game.SetForegroundWindowElsewhere = true;
Game.IgnoreWindowBorderCheck = true;
Game.SetWindowHook = true;
Game.Hook.DInputEnabled = false;
Game.Hook.XInputEnabled = false;
Game.Hook.XInputReroute = false;
Game.Hook.CustomDllEnabled = false;
Game.UserProfileSavePath = "AppData\\LocalLow\\Valko Game Studios";
Game.UserProfileSavePathNoCopy = true;
Game.Description =
"If have Keyboard players:\n" +
"Block/Unlock the inputs when all instances are open and resized, by pressing the END key." +
"\n" +
"If the fps is bad, unlock the inputs with the END key and with Ctrl+H to unfocus the instances.";
Game.PauseBetweenContextAndLaunch = 5;
Game.PauseBetweenProcessGrab = 5;
Game.PauseBetweenStarts = 20;
//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.InjectHookXinput = 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.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 = false;
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 = true;
Game.ProtoInput.WindowActivateFilter = false;
Game.ProtoInput.WindowActvateAppFilter = false;
Game.ProtoInput.MouseWheelFilter = false;
Game.ProtoInput.MouseButtonFilter = false;
Game.ProtoInput.KeyboardButtonFilter = true;
Game.ProtoInput.SendMouseWheelMessages = true;
Game.ProtoInput.SendMouseButtonMessages = true;
Game.ProtoInput.SendMouseMovementMessages = true;
Game.ProtoInput.SendKeyboardButtonMessages = true;
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, 0x02a3, 0x02a1]; // Blocks WM_KILLFOCUS, WM_MOUSEHOVER and WM_MOUSELEAVE
//// for work gamepads
Game.ProtoInput.XinputHook = true;
Game.ProtoInput.UseOpenXinput = true;
Game.ProtoInput.UseDinputRedirection = false;
Game.ProtoInput.DinputDeviceHook = false;
Game.ProtoInput.DinputHookAlsoHooksGetDeviceState = false;
Game.ProtoInput.MultipleProtoControllers = true;
Game.Play = function() {
var Args = (Context.Args = " -screen-fullscreen 0 -popupwindow" + " -screen-width " + Context.Width + " -screen-height " + Context.Height);
Context.StartArguments = Args;
//function to edit path os saves/registry of the instances
var fillPath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\Labyrinthine_Data\\globalgamemanagers";
var base = Context.Nickname;
var og_Path = "Labyrinthine";
//Create newPath by rearranging characters from base
var newPath = og_Path.substring(0, og_Path.length - 3) + base.charAt(0) + base.charAt(base.length - 1) + base.length;
//Ensure newPath is at least as long as og_Path
if (newPath.length < og_Path.length) {
while (newPath.length < og_Path.length) {
newPath += base.charAt(base.length - 1);
}
} else if (og_Path.length < newPath.length) {
//Ensure og_Path is at least 3 characters long
newPath = newPath.substring(0, og_Path.length);
}
Context.PatchFile(fillPath, fillPath, og_Path, newPath);
var appInfoPath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\Labyrinthine_Data\\app.info";
Context.PatchFile(appInfoPath, appInfoPath, og_Path, newPath);
////////////////////////////
///////////// Registry edit
Context.EditRegKey("HKEY_CURRENT_USER", "SOFTWARE\\Valko Game Studios\\" + newPath + "", "Screenmanager Fullscreen mode_h3630240806", 3, Nucleus.RegType.DWord);
Context.EditRegKey("HKEY_CURRENT_USER", "SOFTWARE\\Valko Game Studios\\" + newPath + "", "Screenmanager Resolution Height_h2627697771", Context.Height, Nucleus.RegType.DWord);
Context.EditRegKey("HKEY_CURRENT_USER", "SOFTWARE\\Valko Game Studios\\" + newPath + "", "Screenmanager Resolution Window Height_h1684712807", Context.Height, Nucleus.RegType.DWord);
Context.EditRegKey("HKEY_CURRENT_USER", "SOFTWARE\\Valko Game Studios\\" + newPath + "", "Screenmanager Resolution Width_h182942802", Context.Width, Nucleus.RegType.DWord);
Context.EditRegKey("HKEY_CURRENT_USER", "SOFTWARE\\Valko Game Studios\\" + newPath + "", "Screenmanager Resolution Window Width_h2524650974", Context.Width, Nucleus.RegType.DWord);
Context.EditRegKey("HKEY_CURRENT_USER", "SOFTWARE\\Valko Game Studios\\" + newPath + "", "Screenmanager Resolution Use Native_h1405027254", 0, Nucleus.RegType.DWord);
Context.EditRegKey("HKEY_CURRENT_USER", "SOFTWARE\\Valko Game Studios\\" + newPath + "", "s_VSync_h867998072", 2, Nucleus.RegType.DWord);
Context.EditRegKey("HKEY_CURRENT_USER", "SOFTWARE\\Valko Game Studios\\" + newPath + "", "first_launch_0_h42645426", 1, Nucleus.RegType.DWord);
Context.EditRegKey("HKEY_CURRENT_USER", "SOFTWARE\\Valko Game Studios\\" + newPath + "", "Screenmanager Window Position X_h4088080503", Context.PosX, Nucleus.RegType.DWord);
Context.EditRegKey("HKEY_CURRENT_USER", "SOFTWARE\\Valko Game Studios\\" + newPath + "", "Screenmanager Window Position Y_h4088080502", Context.PosY, Nucleus.RegType.DWord);
//Window
if (!System.IO.File.Exists(Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\Labyrinthine_Data\\settings.cfg")) {
var cfg = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\Labyrinthine_Data\\settings.cfg";
var lines = ["screenMode=1", "vsync=1"];
Context.WriteTextFile(cfg, lines);
} else {
//reapplying Vsync/window
var txtPath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\Labyrinthine_Data\\settings.cfg";
var dict = [Context.FindLineNumberInTextFile(txtPath, "screenMode=", Nucleus.SearchType.StartsWith) + "|screenMode=1"];
Context.ReplaceLinesInTextFile(txtPath, dict);
var txtPath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\Labyrinthine_Data\\settings.cfg";
var dict = [Context.FindLineNumberInTextFile(txtPath, "vsync=", Nucleus.SearchType.StartsWith) + "|vsync=1"];
Context.ReplaceLinesInTextFile(txtPath, dict);
}
/////////////////////////////////
//Copy all necessary files
Context.CopyFolder(Game.Folder, Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\Labyrinthine_Data\\Plugins\\x86_64");
//set GBE config
var savePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\Labyrinthine_Data\\Plugins\\x86_64\\steam_settings\\configs.user.ini";
Context.ModifySaveFile(savePath, savePath, Nucleus.SaveType.INI, [
new Nucleus.IniSaveInfo("user::general", "account_name", Context.Nickname),
new Nucleus.IniSaveInfo("user::general", "account_steamid", Context.PlayerSteamID),
new Nucleus.IniSaveInfo("user::general", "language", Context.SteamLang)
]);
//// for xinput work
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;
}
//Proto Context Setup
if (Context.IsKeyboardPlayer) {
Game.ProtoInput.KeyboardButtonFilter = true;
Game.ProtoInput.DrawFakeCursor = true;
} else {
Game.ProtoInput.KeyboardButtonFilter = false;
Game.ProtoInput.DrawFakeCursor = false;
}
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.InstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.RegisterRawInputHookID);
//ProtoInput.InstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.MessageFilterHookID);
//ProtoInput.InstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.FocusHooksHookID);
//Avoid the mouse move filter unless absolutely necessary as it can massively affect performance if the game gets primary input from mouse move messages
//ProtoInput.EnableMessageFilter(player.ProtoInputInstanceHandle, ProtoInput.Values.MouseMoveFilterID);
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.SetDrawFakeCursor(player.ProtoInputInstanceHandle, true);
}
};
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.UninstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.RegisterRawInputHookID);
//ProtoInput.UninstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.MessageFilterHookID);
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.StartFocusMessageLoop(player.ProtoInputInstanceHandle, 10000, true, true, false, false, false);
ProtoInput.SetDrawFakeCursor(player.ProtoInputInstanceHandle, false);
}
};
};