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

Resident Evil 5 · handler “Resident Evil 5”

Version 14

Release notes

patch steam stub

Released
Size
2.1 MB
Downloads
28,179
Check
Verified
SHA-256
591fbfc929eb95e9380dbb48873038f34557f002de07476394d44a9bd6fca049
Download v14 (.nc)All versions

Files 151

PathSize
handler.js14 KB
ResidentEvil5/SmartSteamEmu.ini2.2 KB
ResidentEvil5/SmartSteamLoader.exe227 KB
ResidentEvil5/steamclient.dll2.3 MB
ResidentEvil5/steam_api.dll1.4 MB
ResidentEvil5/steam_settings/achievements.json129 KB
ResidentEvil5/steam_settings/achievement_images/003bad82559a9ffdf61c610ff33f8c26a467e47c.jpg2.0 KB
ResidentEvil5/steam_settings/achievement_images/022805a281c9b979d1e0bd8095c633550f1a71c3.jpg1.8 KB
ResidentEvil5/steam_settings/achievement_images/02b39f1b75955d969e9928b8940606873c49d917.jpg3.0 KB
ResidentEvil5/steam_settings/achievement_images/02dbe004df99393bccb8d2b22bd24b8e71fc3276.jpg2.6 KB
ResidentEvil5/steam_settings/achievement_images/03f4d2ad93782a7eeee5b68d946e614c1c1e21ea.jpg3.1 KB
ResidentEvil5/steam_settings/achievement_images/06148b2ff33f1ad22c5102c6c8bffc2792f388be.jpg1.4 KB
ResidentEvil5/steam_settings/achievement_images/0959f0e6cac3ac2ab06abf955d78c4f95c628ad1.jpg2.9 KB
ResidentEvil5/steam_settings/achievement_images/0ac64da83741fad1bf3c0791e101e969722a4bed.jpg2.2 KB
ResidentEvil5/steam_settings/achievement_images/0bc250635300ba6ad03114b41847101b11ff37b6.jpg3.3 KB
ResidentEvil5/steam_settings/achievement_images/0c0fbb8eb1e74e9b5b96013bbe798b8d559e8399.jpg2.6 KB
ResidentEvil5/steam_settings/achievement_images/0c9d374e9f36e884d7a8fe99d63ebaf673dc94fc.jpg2.9 KB
ResidentEvil5/steam_settings/achievement_images/0cf9a3201b3d7c35b0f706e2b1c65d11425a5d87.jpg2.1 KB
ResidentEvil5/steam_settings/achievement_images/0e7d2ee370a2093f4fde89df14a1ecc6a790ddd2.jpg3.2 KB
ResidentEvil5/steam_settings/achievement_images/0f8a3eb39d68f56fa1d36ad0bca207fb94deea6b.jpg2.4 KB
ResidentEvil5/steam_settings/achievement_images/106ed60e58489ce1bb44fe9d2c1dc6aa377a28ba.jpg3.1 KB
ResidentEvil5/steam_settings/achievement_images/10bcf05a56f1f808dce26ab4fc182d75c5433379.jpg2.5 KB
ResidentEvil5/steam_settings/achievement_images/11d7264ca8919ab009cdf5455e49cc1cb4e2583e.jpg2.0 KB
ResidentEvil5/steam_settings/achievement_images/11ea976097ed8c50cb074ac48a9e4a66e921f843.jpg3.0 KB
ResidentEvil5/steam_settings/achievement_images/12051888e0efa349f945956c2aac5bdb1d229d06.jpg2.0 KB
ResidentEvil5/steam_settings/achievement_images/12faf468f7021d6a0d4b3f55c6d4995ead19cf3f.jpg2.0 KB
ResidentEvil5/steam_settings/achievement_images/152c7a65b45be0c0d0653ecedf24169aecf00626.jpg2.0 KB
ResidentEvil5/steam_settings/achievement_images/16b60806fee8e17cd4e655d439ceb188ea5749a0.jpg2.2 KB
ResidentEvil5/steam_settings/achievement_images/1871d853b0df2a18cf9d1d7ebf4f703b35a6dee4.jpg2.2 KB
ResidentEvil5/steam_settings/achievement_images/19b0f8e2ea61f79199ead6c60dd4bbdd5057de88.jpg2.1 KB
ResidentEvil5/steam_settings/achievement_images/202fd09c7dbffc308c7c3f3a12476e98a4d12eea.jpg3.2 KB
ResidentEvil5/steam_settings/achievement_images/20edf0794a5741c20d952855411e4b81a5371662.jpg2.0 KB
ResidentEvil5/steam_settings/achievement_images/22cba1d8403c07e9fc218a733dc11b3d34982ae3.jpg3.1 KB
ResidentEvil5/steam_settings/achievement_images/26cb8a06adb9ade02c00a8af879144ecbf48d0a9.jpg3.2 KB
ResidentEvil5/steam_settings/achievement_images/297186e3845a46aedaf5e40b527536e1ff634e6d.jpg2.1 KB
ResidentEvil5/steam_settings/achievement_images/29e605b108cfe7fde51bc3d2d9b4737220caffd9.jpg3.0 KB
ResidentEvil5/steam_settings/achievement_images/2a1c46cc0f264b9346262272841bc1957cd2ba1e.jpg3.3 KB
ResidentEvil5/steam_settings/achievement_images/2ae537e1c57c03f51289e70461d11e526361c7ee.jpg2.6 KB
ResidentEvil5/steam_settings/achievement_images/2b7741471e030ea5274a2d214c4e22ba5ea2ae39.jpg2.0 KB
ResidentEvil5/steam_settings/achievement_images/2cecd43f02d663fd749532265c8219703775cbfb.jpg1.7 KB
ResidentEvil5/steam_settings/achievement_images/2df473e0731750d5d1182b50ce8828f66668ac9e.jpg2.0 KB
ResidentEvil5/steam_settings/achievement_images/308ec207c0cfcc7773e8d8fdfc71f30f3486b0ca.jpg3.1 KB
ResidentEvil5/steam_settings/achievement_images/32cacb1b117e08da7446ae5a4603c95f070c23d2.jpg2.7 KB
ResidentEvil5/steam_settings/achievement_images/34a490e7c735eef1036ea3e3f4a410be212c58b4.jpg2.1 KB
ResidentEvil5/steam_settings/achievement_images/359d471e354421b60b1da8a0006a0159df7a4c0d.jpg2.9 KB
ResidentEvil5/steam_settings/achievement_images/365626bfec41af41bc100e8b22a759c1794f5fc2.jpg2.7 KB
ResidentEvil5/steam_settings/achievement_images/36ed9d0c5069068c21a6c725c179ac32a9fd8b26.jpg2.9 KB
ResidentEvil5/steam_settings/achievement_images/3721b85770eee329e1bb1170238bd88b8103d859.jpg1.9 KB
ResidentEvil5/steam_settings/achievement_images/3afd1747f4acc27129fe1b09344ff0c176aa8830.jpg3.0 KB
ResidentEvil5/steam_settings/achievement_images/3c65d5e092473ab1a45342dcca6dc866117b546f.jpg1.9 KB
ResidentEvil5/steam_settings/achievement_images/412653a9adab105a9a0d16d3e273891c20728d64.jpg3.2 KB
ResidentEvil5/steam_settings/achievement_images/43702cc91ae7dfeb0c6fffba4ab18a0ac49b3c00.jpg2.2 KB
ResidentEvil5/steam_settings/achievement_images/43af2a7ff6ae974745a3dcd31b8017bfb6a53f26.jpg3.6 KB
ResidentEvil5/steam_settings/achievement_images/43e5e33b6837a9c54aa2b30956289e3ccad68cff.jpg2.7 KB
ResidentEvil5/steam_settings/achievement_images/4713337de96618efddbef9b4970f4f071c047f04.jpg2.9 KB
ResidentEvil5/steam_settings/achievement_images/4997c02faea5017deb69cf5d6ecd1a73abef666e.jpg2.6 KB
ResidentEvil5/steam_settings/achievement_images/4da4b21fe4c7404aa87d5ed3c812201e772a00ac.jpg3.2 KB
ResidentEvil5/steam_settings/achievement_images/4dd7b14c4013607b328197b1ebb53cb245f7f0a9.jpg2.5 KB
ResidentEvil5/steam_settings/achievement_images/515109a3fdb7cc3b67e9e3c5835406550d9f968d.jpg3.0 KB
ResidentEvil5/steam_settings/achievement_images/57258b577c488ce1088cda8fe3f5b8dd8fbc88e0.jpg3.0 KB
ResidentEvil5/steam_settings/achievement_images/5c8c9656a1ba3a57a5ac01af137960c5d510b340.jpg1.9 KB
ResidentEvil5/steam_settings/achievement_images/5f57360f21c0bd72ba3c30207eb86e6269f57046.jpg1.9 KB
ResidentEvil5/steam_settings/achievement_images/60348d49eb3ecacd1b06b4b160869e19d84361f8.jpg2.6 KB
ResidentEvil5/steam_settings/achievement_images/6117c6e7841490f64f0515547ac1f1fef6a428b1.jpg1.7 KB
ResidentEvil5/steam_settings/achievement_images/66bc1a73384a357b0d1dc08fa27ca18e3a9692ff.jpg2.8 KB
ResidentEvil5/steam_settings/achievement_images/68e1ee5bbd8911ea11d5a28830c7606c1ddef66c.jpg2.1 KB
ResidentEvil5/steam_settings/achievement_images/68fcd40c128b4649154cba192bdb19605f48c7c1.jpg2.1 KB
ResidentEvil5/steam_settings/achievement_images/69fed5093ddc6606d31eefe3e85520eac3b956a9.jpg2.1 KB
ResidentEvil5/steam_settings/achievement_images/6d2797dd09c78e54d1a651c88fa63c421761e23f.jpg3.0 KB
ResidentEvil5/steam_settings/achievement_images/6e05cd72b7f63abd44bb0ccb83b39c66feb0d02b.jpg2.1 KB
ResidentEvil5/steam_settings/achievement_images/72bd9eea67e041026c9718f7f2f0e5fe2c3642ab.jpg2.2 KB
ResidentEvil5/steam_settings/achievement_images/7673463472b8f75d01b4604a0efa779e3f5fcbf6.jpg2.9 KB
ResidentEvil5/steam_settings/achievement_images/7752585bbe6aa271d0f06ee723df15f97f225ece.jpg3.2 KB
ResidentEvil5/steam_settings/achievement_images/79ce99afccac1493831155051a517b80f634ee42.jpg2.1 KB
ResidentEvil5/steam_settings/achievement_images/7ef7f7438b645e02bf40b35069a5acc0acff4230.jpg1.7 KB
ResidentEvil5/steam_settings/achievement_images/80a9e9f75bb5164197260674baa7622ee163b692.jpg3.2 KB
ResidentEvil5/steam_settings/achievement_images/80df4c7c23a80192f60279944f1b48175aa2246d.jpg1.7 KB
ResidentEvil5/steam_settings/achievement_images/85188ec809632612207757a67e0554f4b2018f03.jpg2.7 KB
ResidentEvil5/steam_settings/achievement_images/8634b9406e942c5d714747b3df89f98dd94b6301.jpg1.8 KB
ResidentEvil5/steam_settings/achievement_images/86e424bed2286704169bca62d4c6aff9f952b590.jpg2.0 KB
ResidentEvil5/steam_settings/achievement_images/88d393ba7594c02f59f0308b011309830a60b2af.jpg3.0 KB
ResidentEvil5/steam_settings/achievement_images/8af44553fcc3ce664e2ac3acce19632afcdd51df.jpg1.9 KB
ResidentEvil5/steam_settings/achievement_images/8e09041598911b6e1322775c88e395b0aa0ad52f.jpg1.9 KB
ResidentEvil5/steam_settings/achievement_images/91cc51fbc75ab322c0b3747fff538444f9d7db9a.jpg2.6 KB
ResidentEvil5/steam_settings/achievement_images/9345f49bee665000146ac3b7aa5d00613a114ebe.jpg2.0 KB
ResidentEvil5/steam_settings/achievement_images/974b4dd243a27aaa8aa9e04f9094d51db97e5891.jpg2.0 KB
ResidentEvil5/steam_settings/achievement_images/996a5e64480f0617168973684e35288fb81f8784.jpg1.8 KB
ResidentEvil5/steam_settings/achievement_images/9a39712d3da4ed0c06d59a2044ddcd84de377fda.jpg2.0 KB
ResidentEvil5/steam_settings/achievement_images/9a66ecaa6b3c4cdbcdb027dd535fb72650ff2d7a.jpg2.1 KB
ResidentEvil5/steam_settings/achievement_images/9c49ecc827d974c7007c5ceb7e5ea4024a65afbf.jpg3.1 KB
ResidentEvil5/steam_settings/achievement_images/9e4240801c6ce06d5bd0eee8832467139212a5e2.jpg3.3 KB
ResidentEvil5/steam_settings/achievement_images/9f7256b7f364d33d3168d18d6a0b99e18ab6a560.jpg2.0 KB
ResidentEvil5/steam_settings/achievement_images/a27d55d6e1308aaccffc34871fd683c32e0b1906.jpg2.9 KB
ResidentEvil5/steam_settings/achievement_images/a4192bd8571cb914eb0ac696f327d82613ceee9b.jpg1.5 KB
ResidentEvil5/steam_settings/achievement_images/a5189a3f01fb9438f9a796b32182f82c3ac4cab4.jpg3.0 KB
ResidentEvil5/steam_settings/achievement_images/a843ce9a03dcf2480a10513dba4f77b14e78a80c.jpg1.9 KB
ResidentEvil5/steam_settings/achievement_images/aa5a90a34b75bc0c77690d56433b6cd5ef5a0f86.jpg2.9 KB
ResidentEvil5/steam_settings/achievement_images/ac7d25a499efbd008d2556b0461e4bb2594a939c.jpg1.9 KB
ResidentEvil5/steam_settings/achievement_images/af4ef58200ef516f9c7b046e924f2771c880eb22.jpg1.7 KB
ResidentEvil5/steam_settings/achievement_images/b33505136085f1c683a9c3dec328b477786e89d7.jpg2.0 KB
ResidentEvil5/steam_settings/achievement_images/b91f8e995f9d25d9b0f5df2ff8591a3e3f783597.jpg3.0 KB
ResidentEvil5/steam_settings/achievement_images/bb54d49afb1c4ddd18ef6e80e51b7c8b9e80f57d.jpg2.0 KB
ResidentEvil5/steam_settings/achievement_images/bcb0cf15ee47ccfb27b307914faf971cecafe7ae.jpg2.0 KB
ResidentEvil5/steam_settings/achievement_images/bcf27fe90cb96afb8caea2f0971d6222e79f6e31.jpg2.0 KB
ResidentEvil5/steam_settings/achievement_images/bcf4ad27a5551ffd3014f8f9de26d61cbdb179e5.jpg2.3 KB
ResidentEvil5/steam_settings/achievement_images/bd6f4b5e5e8c8626ee5c6015db1c8d074b1bd5d8.jpg1.5 KB
ResidentEvil5/steam_settings/achievement_images/bda8d75229c16be3361f61572daa7a87c4c4fede.jpg3.1 KB
ResidentEvil5/steam_settings/achievement_images/bee2d9ae8f21dbee1763d843fdc4498c1b61c99e.jpg1.7 KB
ResidentEvil5/steam_settings/achievement_images/bfd565e4c2267fed36cfd968d5eff29aab480327.jpg2.9 KB
ResidentEvil5/steam_settings/achievement_images/c18be8c42aaa7f01ec77e5b25762ea6546ea907f.jpg1.7 KB
ResidentEvil5/steam_settings/achievement_images/c4f1984f1afc915c9adaac96cc4be4e8d7f5b9ba.jpg2.1 KB
ResidentEvil5/steam_settings/achievement_images/c74a3655cee04f24e0d14469a8e77e7dcc094127.jpg2.4 KB
ResidentEvil5/steam_settings/achievement_images/c997a4ce618a7516917cd299ca0a7c76a0fa6740.jpg2.7 KB
ResidentEvil5/steam_settings/achievement_images/cc69fe51fd42e3b6d73adb304faab9924c44dd4d.jpg2.0 KB
ResidentEvil5/steam_settings/achievement_images/cd675e1009779d5a1f1f3f6761439b8b168b0134.jpg1.9 KB
ResidentEvil5/steam_settings/achievement_images/ced66c0cca57ade3278fe1f69960bee72548546e.jpg2.2 KB
ResidentEvil5/steam_settings/achievement_images/cf013c80f67c54a71b89ea054fb0ae10602297ef.jpg1.9 KB
ResidentEvil5/steam_settings/achievement_images/d13a215523a07f018730daa0ffd6b5736873fc0f.jpg2.1 KB
ResidentEvil5/steam_settings/achievement_images/d149dd5c123e83a32adb9bdc56dfe666c9fcdcb5.jpg3.1 KB
ResidentEvil5/steam_settings/achievement_images/d32536cb19fb5ea6b13b1107a8dd30f462c51333.jpg2.3 KB
ResidentEvil5/steam_settings/achievement_images/d3f53dd8100a4d7b3ee4bd5e1c48a2674b59c23b.jpg1.9 KB
ResidentEvil5/steam_settings/achievement_images/d606e5eea803e58a3190c0d513c5493455974f35.jpg2.7 KB
ResidentEvil5/steam_settings/achievement_images/d786fd1164df4e3268f3ae1b2658e27add03a9ea.jpg2.0 KB
ResidentEvil5/steam_settings/achievement_images/d8f980c16a04199be916490d55a498c18943f982.jpg2.2 KB
ResidentEvil5/steam_settings/achievement_images/da1aa9019e496ce3ea417be06faa09c72a92acfe.jpg2.7 KB
ResidentEvil5/steam_settings/achievement_images/da3535e389b04c10f1245f5a558e36348e3e2034.jpg2.0 KB
ResidentEvil5/steam_settings/achievement_images/dfa2664ce5b759bb35e77d4b470fc499e88e1f9d.jpg2.2 KB
ResidentEvil5/steam_settings/achievement_images/e1f5328f0536e5a7fbb026f03a211d073b08b99e.jpg2.0 KB
ResidentEvil5/steam_settings/achievement_images/e4028ad81f7fb02f46db732acd6f3cd08898c6bc.jpg2.1 KB
ResidentEvil5/steam_settings/achievement_images/e5d1e3f273f2090b4e365e74c7277c7d36368c54.jpg2.9 KB
ResidentEvil5/steam_settings/achievement_images/e681c7f82424a5e2812bdf370b3b174a89a75744.jpg1.6 KB
ResidentEvil5/steam_settings/achievement_images/e80595db5d890d2ac95bd008e171186a2ea89bb7.jpg2.7 KB
ResidentEvil5/steam_settings/achievement_images/ea29704e0535e788df51c42dcba8c5c41bc306b9.jpg2.9 KB
ResidentEvil5/steam_settings/achievement_images/ebdc2812ff2e0f1ce263ab4551e7396f54d296df.jpg1.9 KB
ResidentEvil5/steam_settings/achievement_images/ec04a518dfcb8f6d926454baa61d46353a320d11.jpg2.4 KB
ResidentEvil5/steam_settings/achievement_images/ec9c40c941ac407bf892528879935b875ec234a3.jpg2.1 KB
ResidentEvil5/steam_settings/achievement_images/f2707252f409470471d56f879244c6b6c01c3f58.jpg2.8 KB
ResidentEvil5/steam_settings/achievement_images/f34f0440a715824bab92d50ddf678888ce65a9d6.jpg1.7 KB
ResidentEvil5/steam_settings/achievement_images/f3f2fd65281a739295ca78ffb8778dfdffee9527.jpg2.6 KB
ResidentEvil5/steam_settings/achievement_images/f6716e56e6bb11e2c8b4d92f1b982274c0379448.jpg2.1 KB
ResidentEvil5/steam_settings/achievement_images/f6c30decc96a4c28e2de23e12c3e6884c4f7e5b6.jpg2.9 KB
ResidentEvil5/steam_settings/achievement_images/f91d128f3a525b72c8cc08cf36cc760476ea5e39.jpg2.5 KB
ResidentEvil5/steam_settings/achievement_images/fa67ce7357af4b5e2dee4d0fb8171387cd5dc8bf.jpg2.8 KB
ResidentEvil5/steam_settings/achievement_images/ffad920e4864e3bc222df444ab143d4a4de1cd42.jpg2.1 KB
ResidentEvil5/steam_settings/achievement_images/ffc04b68b43d665721349e4a0e5f5d22010b8eb7.jpg3.1 KB
ResidentEvil5/steam_settings/disable_overlay.txt0 B
ResidentEvil5/steam_settings/DLC.txt48 B
ResidentEvil5/steam_settings/stats.txt18 B
ResidentEvil5/steam_settings/steam_appid.txt5 B
ResidentEvil5/steam_settings/steam_interfaces.txt573 B
ResidentEvil5/steam_settings/supported_languages.txt75 B

handler.js

Plain text
Hub.Handler.Version = 14; // Released at https://hub.splitscreen.me/ on Thu Aug 10 2023 00:44:16 GMT+0000 (Coordinated Universal Time).
Hub.Handler.Id = "q926yWzpZZNiv7Cck";
Hub.Maintainer.Name = "Talos91";
Hub.Maintainer.Id = "eeL7HAz8zJovChWw4";

Game.ExecutableContext = ["nativePC_MT"];
Game.KillMutex = ["sBioMain"];
Game.DirSymlinkExclusions = ["plugins"];
Game.FileSymlinkExclusions = ["steam_api.dll", "steam_appid.txt", "steam_interfaces.txt", "local_save.txt", "xinput1_3.dll", "RE5Fix.dll", "RE5Fix.ini"];
Game.UseNucleusEnvironment = true;
Game.NeedsSteamEmulation = false;
Game.UseGoldberg = true;
Game.GoldbergNoLocalSave = true;
Game.HandlerInterval = 100;
Game.SymlinkExe = false;
Game.SymlinkGame = true;
Game.SymlinkFolders = true;
Game.ExecutableName = "re5dx9.exe";
Game.SteamID = "21690";
Game.GUID = "Resident Evil 5";
Game.GameName = "Resident Evil 5";
Game.MaxPlayers = 4;
Game.MaxPlayersOneMonitor = 4;
Game.LauncherTitle = "";
Game.LauncherExe = "SmartSteamLoader.exe";
Game.LauncherExeIgnoreFileCheck = true;
Game.HideTaskbar = false;
Game.Hook.ForceFocus = true;
Game.Hook.ForceFocusWindowName = "RESIDENT EVIL 5";
Game.Hook.DInputEnabled = false;
Game.Hook.XInputEnabled = true;
Game.Hook.XInputReroute = false;
Game.XInputPlusNoIni = true;
Game.XInputPlusDll = ["xinput1_3.dll"];
Game.Hook.CustomDllEnabled = false;
Game.UserProfileConfigPath = "Documents\\CAPCOM\\RESIDENT EVIL 5";
Game.UserProfileSavePath = "AppData\\Roaming\\Goldberg SteamEmu Saves\\21690\\remote";
//Game.PlayerSteamIDs = ["76561198134585131","76561198131394153","76561198011792067","76561198043762785"];
Game.Description =
  "Latest Steam version now has native splitscreen for 2 players max but with this handler you can play modes like versus up to 4 players, use vertical splitscreen, use multiple kb/m and monitors etc. If you use keyboards and mice after all the instances have launched, resized and positioned correctly, press the END key once to lock the input for all instances to have their own cursor. You need to left click each mouse to make the emulated cursors appear after locking the input. Press the END key again to unlock the input whe you finish playing. You can also use CTRL+Q to close Nucleus and all its instances when the input is unlocked. If you want the instances to resize correctly and fix stretching you need to create custom resolutions in your AMD/Nvidia/Intel panel (For example for a 1920x1080 monitor add: 960x1080, 960x540, 1920x540 etc.) so the game can see and use them.";
Game.PauseBetweenContextAndLaunch = 3;
Game.PauseBetweenProcessGrab = 2;
Game.PauseBetweenStarts = 25;

//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.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 = false;
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.AllowFakeCursorOutOfBounds = false;
Game.ProtoInput.ExtendFakeCursorBounds = false;

Game.ProtoInput.RawInputFilter = false;
Game.ProtoInput.MouseMoveFilter = false;
Game.ProtoInput.MouseActivateFilter = false;
Game.ProtoInput.WindowActivateFilter = false;
Game.ProtoInput.WindowActvateAppFilter = false;
Game.ProtoInput.MouseWheelFilter = false;
Game.ProtoInput.MouseButtonFilter = false;
Game.ProtoInput.KeyboardButtonFilter = false;

Game.ProtoInput.SendMouseWheelMessages = true;
Game.ProtoInput.SendMouseButtonMessages = true;
Game.ProtoInput.SendMouseMovementMessages = true;
Game.ProtoInput.SendKeyboardButtonMessages = true;
Game.ProtoInput.XinputHook = false;
Game.ProtoInput.UseOpenXinput = false;
Game.ProtoInput.UseDinputRedirection = false;
Game.ProtoInput.DinputDeviceHook = false;
Game.ProtoInput.DinputHookAlsoHooksGetDeviceState = false;

Game.ProtoInput.EnableFocusMessageLoop = false;
//Game.ProtoInput.FocusLoopIntervalMilliseconds = 40000;
//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]; // Blocks WM_KILLFOCUS
Game.GamePlayBeforeGameSetup = true;
Game.DeleteOnClose = ["steam_api.dll"];

Game.Play = function() {
  Context.CopyScriptFolder(Context.GetFolder(Nucleus.Folder.InstancedGameFolder));

  if (!System.IO.File.Exists(Context.OrigRootFolder + "\\steam_api.dll")) {
    var savePath = Context.OrigRootFolder + "\\steam_api.dll";
    var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "steam_api.dll");
    System.IO.File.Copy(savePkgOrigin, savePath, true);
  }

  var VideoConfig = Context.EnvironmentPlayer + Context.UserProfileConfigPath + "\\config.ini";
  Context.ModifySaveFile(VideoConfig, VideoConfig, Nucleus.SaveType.INI, [
    new Nucleus.IniSaveInfo("DISPLAY", "Resolution", Context.Width + "x" + Context.Height),
    new Nucleus.IniSaveInfo("DISPLAY", "FullScreen", "OFF"),
    new Nucleus.IniSaveInfo("DISPLAY", "AdjustAspect", "ON")
  ]);

  var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\XInputPlus.ini");
  var savePkgOrigin = System.IO.Path.Combine(Context.NucleusFolder, "utils\\XInputPlus\\XInputPlus.ini");
  System.IO.File.Copy(savePkgOrigin, savePath, true);

  var savePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\XInputPlus.ini";
  Context.ModifySaveFile(savePath, savePath, Nucleus.SaveType.INI, [new Nucleus.IniSaveInfo("KeyAssign", "RSB", "LSB|RSB")]);

  if (Context.IsKeyboardPlayer) {
    var savePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\XinputPlus.ini";
    Context.ModifySaveFile(savePath, savePath, Nucleus.SaveType.INI, [
      new Nucleus.IniSaveInfo("ControllerNumber", "Controller1", "0"),
      new Nucleus.IniSaveInfo("ControllerNumber", "Controller2", "0"),
      new Nucleus.IniSaveInfo("ControllerNumber", "Controller3", "0"),
      new Nucleus.IniSaveInfo("ControllerNumber", "Controller4", "0")
    ]);
  } else {
    var savePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\XInputPlus.ini";
    Context.ModifySaveFile(savePath, savePath, Nucleus.SaveType.INI, [
      new Nucleus.IniSaveInfo("ControllerNumber", "Controller1", Context.GamepadId),
      new Nucleus.IniSaveInfo("ControllerNumber", "Controller2", Context.GamepadId),
      new Nucleus.IniSaveInfo("ControllerNumber", "Controller3", Context.GamepadId),
      new Nucleus.IniSaveInfo("ControllerNumber", "Controller4", Context.GamepadId)
    ]);
  }

  var interfaces = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\steam_interfaces.txt";
  var lines = [
    "SteamClient015",
    "SteamGameServer012",
    "SteamGameServerStats001",
    "SteamUser017",
    "SteamFriends014",
    "SteamUtils007",
    "SteamMatchMaking009",
    "SteamMatchMakingServers002",
    "STEAMUSERSTATS_INTERFACE_VERSION011",
    "STEAMAPPS_INTERFACE_VERSION006",
    "SteamNetworking005",
    "STEAMREMOTESTORAGE_INTERFACE_VERSION012",
    "STEAMSCREENSHOTS_INTERFACE_VERSION002",
    "STEAMHTTP_INTERFACE_VERSION002",
    "STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001",
    "STEAMUGC_INTERFACE_VERSION002",
    "STEAMAPPLIST_INTERFACE_VERSION001",
    "STEAMMUSIC_INTERFACE_VERSION001",
    "STEAMMUSICREMOTE_INTERFACE_VERSION001",
    "STEAMCONTROLLER_INTERFACE_VERSION"
  ];
  Context.WriteTextFile(interfaces, lines);

  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) + '\\re5dx9.exe"',
    'move /y "re5dx9.exe.unpacked.exe" "re5dx9.exe"'
  ];
  Context.WriteTextFile(Bat, lines);

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

  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.EnableMessageFilter(player.ProtoInputInstanceHandle, ProtoInput.Values.RawInputFilterID);

      //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.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.EnableMessageFilter(player.ProtoInputInstanceHandle, ProtoInput.Values.KeyboardButtonFilterID);

      ProtoInput.SetDrawFakeCursor(player.ProtoInputInstanceHandle, true);

      ProtoInput.StopFocusMessageLoop(player.ProtoInputInstanceHandle);
    }
  };

  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.InstallHook(player.ProtoInputInstanceHandle, ProtoInput.Values.FocusHooksHookID);

      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.DisableMessageFilter(player.ProtoInputInstanceHandle, ProtoInput.Values.KeyboardButtonFilterID);

      ProtoInput.SetDrawFakeCursor(player.ProtoInputInstanceHandle, false);

      ProtoInput.StartFocusMessageLoop(player.ProtoInputInstanceHandle, 5000, true, true, false, false, false);
    }
  };
};