Team Fortress 2 · handler “TeamFortress2”
Version 4
Release notes
Multiple Keyboards/Mice support, FPS limiter and graphics options.
- Released
- Size
- 1.8 MB
- Downloads
- 140
- Check
- Verified
- SHA-256
- 310fd043734f656bcfb51d13181604629343f8d08cfba75d589f0308d4e9b311
Files 109
| Path | Size |
|---|---|
| handler.js | 24 KB |
| Team Fortress 2/2Fort.png | 29 KB |
| Team Fortress 2/2fortinvasion.png | 29 KB |
| Team Fortress 2/5gorge.png | 27 KB |
| Team Fortress 2/badlands.png | 27 KB |
| Team Fortress 2/badwater.jpg | 8.1 KB |
| Team Fortress 2/bananabay.png | 28 KB |
| Team Fortress 2/barnblitz.PNG | 29 KB |
| Team Fortress 2/bigrock.png | 18 KB |
| Team Fortress 2/borneo.jpg | 4.7 KB |
| Team Fortress 2/brazil.jpg | 3.6 KB |
| Team Fortress 2/brickyard.png | 32 KB |
| Team Fortress 2/byre.jpg | 4.4 KB |
| Team Fortress 2/cactuscanyon.jpg | 3.8 KB |
| Team Fortress 2/coaltown.png | 34 KB |
| Team Fortress 2/coldfront.png | 25 KB |
| Team Fortress 2/cp_mountainlab.jpg | 7.4 KB |
| Team Fortress 2/custom_gen_values.txt | 2 B |
| Team Fortress 2/Decoy.png | 32 KB |
| Team Fortress 2/degrootkeep.png | 35 KB |
| Team Fortress 2/district.jpg | 4.1 KB |
| Team Fortress 2/doomsday.jpg | 4.4 KB |
| Team Fortress 2/doomsdayevent.png | 32 KB |
| Team Fortress 2/doublecross.png | 22 KB |
| Team Fortress 2/dustbowl.jpg | 10 KB |
| Team Fortress 2/Egypt.jpg | 9.5 KB |
| Team Fortress 2/enclosurefinal.jpg | 4.2 KB |
| Team Fortress 2/Eyeaduct.png | 23 KB |
| Team Fortress 2/fastlane.png | 27 KB |
| Team Fortress 2/fifthcurveevent.png | 27 KB |
| Team Fortress 2/foundry.png | 32 KB |
| Team Fortress 2/freightfinal.png | 31 KB |
| Team Fortress 2/frontierfinal.jpg | 7.4 KB |
| Team Fortress 2/GhostFortIsland.jpg | 3.0 KB |
| Team Fortress 2/ghosttown.jpg | 3.1 KB |
| Team Fortress 2/goldrush.jpg | 7.5 KB |
| Team Fortress 2/gorge.jpg | 8.8 KB |
| Team Fortress 2/gorgeevent.png | 25 KB |
| Team Fortress 2/granary.jpg | 9.0 KB |
| Team Fortress 2/gravelpit.jpg | 10 KB |
| Team Fortress 2/gullywashfinal.png | 28 KB |
| Team Fortress 2/harvestfinal.PNG | 33 KB |
| Team Fortress 2/hellfire.png | 26 KB |
| Team Fortress 2/highpass.jpg | 4.4 KB |
| Team Fortress 2/hightower.png | 53 KB |
| Team Fortress 2/hightowerevent.jpg | 7.2 KB |
| Team Fortress 2/hoodoofinal.jpg | 8.7 KB |
| Team Fortress 2/hydro.jpg | 8.3 KB |
| Team Fortress 2/junctionfinal.jpg | 7.7 KB |
| Team Fortress 2/kothbagelevent.png | 28 KB |
| Team Fortress 2/kothharvestevent.jpg | 5.3 KB |
| Team Fortress 2/kothking.png | 29 KB |
| Team Fortress 2/kothmapleridgeevent.png | 28 KB |
| Team Fortress 2/kothslaughterevent.png | 29 KB |
| Team Fortress 2/koth_lazarus.jpg | 4.0 KB |
| Team Fortress 2/Lakeside.jpg | 8.7 KB |
| Team Fortress 2/landfall.jpg | 4.5 KB |
| Team Fortress 2/lumberyard.jpg | 9.5 KB |
| Team Fortress 2/mannhattan.png | 31 KB |
| Team Fortress 2/mannworks.png | 33 KB |
| Team Fortress 2/manorevent.png | 28 KB |
| Team Fortress 2/mapcycle.txt | 781 B |
| Team Fortress 2/mastercomfig-disable-pyroland-addon.vpk | 142 B |
| Team Fortress 2/mastercomfig-low-preset.vpk | 93 KB |
| Team Fortress 2/mastercomfig-no-soundscapes-addon.vpk | 183 B |
| Team Fortress 2/mercenarypark.png | 36 KB |
| Team Fortress 2/metalworks.jpg | 3.6 KB |
| Team Fortress 2/millstoneevent.jpg | 3.9 KB |
| Team Fortress 2/monsterbash.png | 28 KB |
| Team Fortress 2/moonshineevent.png | 24 KB |
| Team Fortress 2/mossrock.jpg | 3.9 KB |
| Team Fortress 2/motd_default.txt | 896 B |
| Team Fortress 2/motd_text_default.txt | 896 B |
| Team Fortress 2/nightfallfinal.png | 30 KB |
| Team Fortress 2/nucleus.jpg | 7.1 KB |
| Team Fortress 2/offblastfinal.jpg | 7.7 KB |
| Team Fortress 2/pdcursedcoveevent.png | 25 KB |
| Team Fortress 2/pitofdeathevent.png | 26 KB |
| Team Fortress 2/plrpipeline.jpg | 8.4 KB |
| Team Fortress 2/powerhouse.png | 34 KB |
| Team Fortress 2/precipiceeventfinall.png | 27 KB |
| Team Fortress 2/probed.jpg | 3.8 KB |
| Team Fortress 2/processfinal.jpeg | 5.0 KB |
| Team Fortress 2/ravine.jpg | 9.6 KB |
| Team Fortress 2/Rdasteroid.jpg | 5.5 KB |
| Team Fortress 2/Rottenburg.png | 31 KB |
| Team Fortress 2/rumbleevent.png | 29 KB |
| Team Fortress 2/sawmill.png | 23 KB |
| Team Fortress 2/sinshine.jpg | 3.3 KB |
| Team Fortress 2/slasher.png | 28 KB |
| Team Fortress 2/snakewaterfinal.png | 29 KB |
| Team Fortress 2/snowplow.jpg | 4.2 KB |
| Team Fortress 2/snowycoast.png | 28 KB |
| Team Fortress 2/standinfinal.jpg | 3.1 KB |
| Team Fortress 2/steel.png | 26 KB |
| Team Fortress 2/suijin.jpg | 5.3 KB |
| Team Fortress 2/sunshine.jpg | 5.0 KB |
| Team Fortress 2/swiftwater.jpg | 4.4 KB |
| Team Fortress 2/thundermountain.png | 28 KB |
| Team Fortress 2/timbertown.jpeg | 3.6 KB |
| Team Fortress 2/turbine.png | 22 KB |
| Team Fortress 2/upward.png | 32 KB |
| Team Fortress 2/vanguard.png | 29 KB |
| Team Fortress 2/viaduct.jpg | 8.5 KB |
| Team Fortress 2/watchtower.jpg | 8.7 KB |
| Team Fortress 2/watergate.jpg | 4.2 KB |
| Team Fortress 2/well.jpg | 11 KB |
| Team Fortress 2/well.png | 23 KB |
| Team Fortress 2/yukonfinal.png | 29 KB |
handler.js
Plain textHub.Handler.Version = 4; // Released at https://hub.splitscreen.me/ on Sat Nov 28 2020 00:15:09 GMT+0000 (UTC).
Hub.Handler.Id = "mJKwas3uZAnbZ8uJn";
Hub.Maintainer.Name = "Bizzo";
Hub.Maintainer.Id = "HEgozNi3MNvhAmWfi";
/*Nucleus R4 make the mouse pointer lag when using DInput. This should be used only with controllers:
With more than 4 controllers, you can use only ONE XboxOne controller and you can't use at the same time the keyboard.
You must click/alt+tab on the corresponding instance to make it work.
In alternative you can try fix the problem by doing this http://www.snes9x.com/phpbb3/viewtopic.php?t=27510 or try Xoutput.
For enable the support add two slashes // before this line:
- Game.XInputPlusDll = [ "xinput1_4.dll" ];
and set on true or remove slashes from these ones:
- Game.Hook.XInputReroute
- Game.Hook.CustomDllEnabled
- Game.Hook.XInputNames = [ "xinput1_4.dll" ];
*/
var listMaps = [
{ Name: "No Map", Details: "Start the game normally", Console: "", ImageUrl: "" },
// Capture the Flag
{ Name: "2Fort", Details: "Capture the Flag", Console: "ctf_2fort", ImageUrl: "2Fort.png" },
{ Name: "2Fort Invasion", Details: "Capture the Flag", Console: "ctf_2fort_invasion", ImageUrl: "2fortinvasion.png" },
{ Name: "Double Cross", Details: "Capture the Flag", Console: "ctf_doublecross", ImageUrl: "doublecross.png" },
{ Name: "Landfall", Details: "Capture the Flag", Console: "ctf_landfall", ImageUrl: "landfall.jpg" },
{ Name: "Sawmill", Details: "Capture the Flag", Console: "ctf_sawmill", ImageUrl: "sawmill.png" },
{ Name: "Turbine", Details: "Capture the Flag", Console: "ctf_turbine", ImageUrl: "turbine.png" },
{ Name: "Well", Details: "Capture the Flag", Console: "ctf_well", ImageUrl: "well.png" },
// Control Point
{ Name: "5Gorge", Details: "Control Point", Console: "cp_5gorge", ImageUrl: "5gorge.png" },
{ Name: "Badlands", Details: "Control Point", Console: "cp_badlands", ImageUrl: "badlands.png" },
{ Name: "Coldfront", Details: "Control Point", Console: "cp_coldfront", ImageUrl: "coldfront.png" },
{ Name: "Fastlane", Details: "Control Point", Console: "cp_fastlane", ImageUrl: "fastlane.png" },
{ Name: "Foundry", Details: "Control Point", Console: "cp_foundry", ImageUrl: "foundry.png" },
{ Name: "Freight", Details: "Control Point", Console: "cp_freight_final1", ImageUrl: "freightfinal.png" },
{ Name: "Granary", Details: "Control Point", Console: "cp_granary", ImageUrl: "granary.jpg" },
{ Name: "Gullywash", Details: "Control Point", Console: "cp_gullywash_final1", ImageUrl: "gullywashfinal.png" },
{ Name: "Metalworks", Details: "Control Point", Console: "cp_metalworks", ImageUrl: "metalworks.jpg" },
{ Name: "Powerhouse", Details: "Control Point", Console: "cp_powerhouse", ImageUrl: "powerhouse.png" },
{ Name: "Process", Details: "Control Point", Console: "cp_process_final", ImageUrl: "processfinal.jpeg" },
{ Name: "Sinshine", Details: "Control Point", Console: "cp_sunshine_event", ImageUrl: "sinshine.jpg" },
{ Name: "Sunshine", Details: "Control Point", Console: "cp_sunshine", ImageUrl: "sunshine.jpg" },
{ Name: "Snakewater", Details: "Control Point", Console: "cp_snakewater_final1", ImageUrl: "snakewaterfinal.png" },
{ Name: "Standin", Details: "Control Point", Console: "cp_standin_final", ImageUrl: "standinfinal.jpg" },
{ Name: "Vanguard", Details: "Control Point", Console: "cp_vanguard", ImageUrl: "vanguard.png" },
{ Name: "Well", Details: "Control Point", Console: "cp_well", ImageUrl: "well.png" },
{ Name: "Yukon", Details: "Control Point", Console: "cp_yukon_final", ImageUrl: "yukonfinal.png" },
// Attack/Defend
{ Name: "DeGroot Keep", Details: "Attack/Defend", Console: "cp_degrootkeep", ImageUrl: "degrootkeep.png" },
{ Name: "Dustbowl", Details: "Attack/Defend", Console: "cp_dustbowl", ImageUrl: "dustbowl.jpg" },
{ Name: "Egypt", Details: "Attack/Defend", Console: "cp_egypt_final", ImageUrl: "Egypt.jpg" },
{ Name: "Gorge", Details: "Attack/Defend", Console: "cp_gorge", ImageUrl: "gorge.jpg" },
{ Name: "Gorge Event", Details: "Attack/Defend", Console: "cp_gorge_event", ImageUrl: "gorgeevent.png" },
{ Name: "Gravel Pit", Details: "Attack/Defend", Console: "cp_gravelpit", ImageUrl: "gravelpit.jpg" },
{ Name: "Junction", Details: "Attack/Defend", Console: "cp_junction_final", ImageUrl: "junctionfinal.jpg" },
{ Name: "Mann Manor", Details: "Attack/Defend", Console: "cp_manor_event", ImageUrl: "manorevent.png" },
{ Name: "Mercenary Park", Details: "Attack/Defend", Console: "cp_mercenarypark", ImageUrl: "mercenarypark.png" },
{ Name: "Mossrock", Details: "Attack/Defend", Console: "cp_mossrock", ImageUrl: "mossrock.jpg" },
{ Name: "Mountain Lab", Details: "Attack/Defend", Console: "cp_mountainlab", ImageUrl: "cp_mountainlab.jpg" },
{ Name: "Snowplow", Details: "Attack/Defend", Console: "cp_snowplow", ImageUrl: "snowplow.jpg" },
{ Name: "Steel", Details: "Attack/Defend", Console: "cp_steel", ImageUrl: "steel.png" },
// Territorial Control
{ Name: "Hydro", Details: "Attack/Defend", Console: "tc_hydro", ImageUrl: "hydro.jpg" },
// Payload
{ Name: "Badwater Basin", Details: "Payload", Console: "pl_badwater", ImageUrl: "badwater.jpg" },
{ Name: "Barnblitz", Details: "Payload", Console: "pl_barnblitz", ImageUrl: "barnblitz.PNG" },
{ Name: "Borneo", Details: "Payload", Console: "pl_borneo", ImageUrl: "borneo.jpg" },
{ Name: "Brimstone", Details: "Payload", Console: "pl_fifthcurve_event", ImageUrl: "fifthcurveevent.png" },
{ Name: "Cactus Canyon", Details: "Payload", Console: "pl_cactuscanyon", ImageUrl: "cactuscanyon.jpg" },
{ Name: "Enclosure", Details: "Payload", Console: "pl_enclosure_final", ImageUrl: "enclosurefinal.jpg" },
{ Name: "Frontier", Details: "Payload", Console: "pl_frontier_final", ImageUrl: "frontierfinal.jpg" },
{ Name: "Gold Rush", Details: "Payload", Console: "pl_goldrush", ImageUrl: "goldrush.jpg" },
{ Name: "Gravestone", Details: "Payload", Console: "pl_rumble_event", ImageUrl: "rumbleevent.png" },
{ Name: "Hellstone", Details: "Payload", Console: "pl_millstone_event", ImageUrl: "millstoneevent.jpg" },
{ Name: "Hoodoo", Details: "Payload", Console: "pl_hoodoo_final", ImageUrl: "hoodoofinal.jpg" },
{ Name: "Precipice", Details: "Payload", Console: "pl_precipice_event_final", ImageUrl: "precipiceeventfinall.png" },
{ Name: "Snowycoast", Details: "Payload", Console: "pl_snowycoast", ImageUrl: "snowycoast.png" },
{ Name: "Thunder Mountain", Details: "Payload", Console: "pl_thundermountain", ImageUrl: "thundermountain.png" },
{ Name: "Upward", Details: "Payload", Console: "pl_upward", ImageUrl: "upward.png" },
//Payload Race
{ Name: "Banana Bay", Details: "Payload Race", Console: "plr_bananabay", ImageUrl: "bananabay.png" },
{ Name: "Helltower", Details: "Payload Race", Console: "plr_hightower_event", ImageUrl: "hightowerevent.jpg" },
{ Name: "Hightower", Details: "Payload Race", Console: "plr_hightower", ImageUrl: "hightower.png" },
{ Name: "Nightfall", Details: "Payload Race", Console: "plr_nightfall_final", ImageUrl: "nightfallfinal.png" },
{ Name: "Pipeline", Details: "Payload Race", Console: "plr_pipeline", ImageUrl: "plrpipeline.jpg" },
//Arena
{ Name: "Badlands Arena", Details: "Arena", Console: "arena_badlands", ImageUrl: "badlands.png" },
{ Name: "Byre", Details: "Arena", Console: "arena_byre", ImageUrl: "byre.jpg" },
{ Name: "Granary Arena", Details: "Arena", Console: "arena_granary", ImageUrl: "granary.jpg" },
{ Name: "Lumberyard", Details: "Arena", Console: "arena_lumberyard", ImageUrl: "lumberyard.jpg" },
{ Name: "Nucleus Arena ", Details: "Arena", Console: "arena_nucleus", ImageUrl: "nucleus.jpg" },
{ Name: "Offblast", Details: "Arena", Console: "arena_offblast_final", ImageUrl: "offblastfinal.jpg" },
{ Name: "Ravine", Details: "Arena", Console: "arena_ravine", ImageUrl: "ravine.jpg" },
{ Name: "Sawmill Arena", Details: "Arena", Console: "arena_sawmill", ImageUrl: "sawmill.png" },
{ Name: "Watchtower", Details: "Arena", Console: "arena_watchtower", ImageUrl: "watchtower.jpg" },
{ Name: "Well Arena", Details: "Arena", Console: "arena_well", ImageUrl: "well.png" },
//King of the Hill
{ Name: "Badlands KotH", Details: "King of the Hill", Console: "koth_badlands", ImageUrl: "badlands.png" },
{ Name: "Brazil", Details: "King of the Hill", Console: "koth_brazil", ImageUrl: "brazil.jpg" },
{ Name: "Cauldron", Details: "King of the Hill", Console: "koth_bagel_event", ImageUrl: "kothbagelevent.png" },
{ Name: "Eyeaduct", Details: "King of the Hill", Console: "koth_viaduct_event", ImageUrl: "Eyeaduct.png" },
{ Name: "Ghost Fort", Details: "King of the Hill", Console: "koth_lakeside_event", ImageUrl: "GhostFortIsland.jpg" },
{ Name: "Harvest", Details: "King of the Hill", Console: "koth_harvest_final", ImageUrl: "harvestfinal.PNG" },
{ Name: "Harvest Event", Details: "King of the Hill", Console: "kkoth_harvest_event", ImageUrl: "kothharvestevent.jpg" },
{ Name: "Highpass", Details: "King of the Hill", Console: "koth_highpass", ImageUrl: "highpass.jpg" },
{ Name: "Kong King", Details: "King of the Hill", Console: "koth_king", ImageUrl: "kothking.png" },
{ Name: "Lakeside", Details: "King of the Hill", Console: "koth_lakeside_final", ImageUrl: "Lakeside.jpg" },
{ Name: "Laughter", Details: "King of the Hill", Console: "koth_slaughter_event", ImageUrl: "kothslaughterevent.png" },
{ Name: "Lazarus", Details: "King of the Hill", Console: "koth_lazarus", ImageUrl: "koth_lazarus.jpg" },
{ Name: "Maple Ridge Event", Details: "King of the Hill", Console: "koth_maple_ridge_event", ImageUrl: "kothmapleridgeevent.png" },
{ Name: "Moonshine Event", Details: "King of the Hill", Console: "koth_moonshine_event", ImageUrl: "moonshineevent.png" },
{ Name: "Nucleus KotH", Details: "King of the Hill", Console: "koth_nucleus", ImageUrl: "nucleus.jpg" },
{ Name: "Probed", Details: "King of the Hill", Console: "koth_probed", ImageUrl: "probed.jpg" },
{ Name: "Sawmill KotH", Details: "King of the Hill", Console: "koth_sawmill", ImageUrl: "sawmill.png" },
{ Name: "Slasher", Details: "King of the Hill", Console: "koth_slasher", ImageUrl: "slasher.png" },
{ Name: "Suijin", Details: "King of the Hill", Console: "koth_suijin", ImageUrl: "suijin.jpg" },
{ Name: "Viaduct", Details: "King of the Hill", Console: "koth_viaduct", ImageUrl: "viaduct.jpg" },
//Special Delivery
{ Name: "Doomsday", Details: "Special Delivery", Console: "sd_doomsday", ImageUrl: "doomsday.jpg" },
{ Name: "Carnival of Carnage", Details: "Special Delivery", Console: "sd_doomsday_event", ImageUrl: "doomsdayevent.png" },
//Mann vs. Machine
{ Name: "Big Rock", Details: "Mann vs. Machine", Console: "mvm_bigrock", ImageUrl: "bigrock.png" },
{ Name: "Coal Town", Details: "Mann vs. Machine", Console: "mvm_coaltown", ImageUrl: "coaltown.png" },
{ Name: "Decoy", Details: "Mann vs. Machine", Console: "mvm_decoy", ImageUrl: "Decoy.png" },
{ Name: "Ghost Town", Details: "Mann vs. Machine", Console: "mvm_ghost_town", ImageUrl: "ghosttown.jpg" },
{ Name: "Mannhattan", Details: "Mann vs. Machine", Console: "mvm_mannhattan", ImageUrl: "mannhattan.png" },
{ Name: "Mannworks", Details: "Mann vs. Machine", Console: "mvm_mannworks", ImageUrl: "mannworks.png" },
{ Name: "Rottenburg", Details: "Mann vs. Machine", Console: "mvm_rottenburg", ImageUrl: "Rottenburg.png" },
//Robot Destruction
{ Name: "Asteroid", Details: "Robot Destruction", Console: "rd_asteroid", ImageUrl: "Rdasteroid.jpg" },
//Mannpower
{ Name: "Foundry Capture the Flag", Details: "Mannpower", Console: "ctf_foundry", ImageUrl: "foundry.png" },
{ Name: "Gorge Capture the Flag", Details: "Mannpower", Console: "ctf_gorge", ImageUrl: "gorge.jpg" },
{ Name: "Hellfire", Details: "Mannpower", Console: "ctf_hellfire", ImageUrl: "hellfire.png" },
{ Name: "Thunder Mountain Capture the Flag", Details: "Mannpower", Console: "ctf_thundermountain", ImageUrl: "thundermountain.png" },
//PASS Time
{ Name: "Brickyard", Details: "PASS Time", Console: "pass_brickyard", ImageUrl: "brickyard.png" },
{ Name: "District", Details: "PASS Time", Console: "pass_district", ImageUrl: "district.jpg" },
{ Name: "Timbertown", Details: "PASS Time", Console: "pass_timbertown", ImageUrl: "timbertown.jpeg" },
//Player Destruction
{ Name: "Cursed Cove", Details: "Player Destruction", Console: "pd_cursed_cove_event", ImageUrl: "pdcursedcoveevent.png" },
{ Name: "Monster Bash", Details: "Player Destruction", Console: "pd_monster_bash", ImageUrl: "monsterbash.png" },
{ Name: "Pit of Death", Details: "Player Destruction", Console: "pd_pit_of_death_event", ImageUrl: "pitofdeathevent.png" },
{ Name: "Watergate", Details: "Player Destruction", Console: "pd_watergate", ImageUrl: "watergate.jpg" }
//
//{ Name: "Map Name", Details: "Description. Type of gamemode?", Console: "name of the file map", ImageUrl: "image of the map" }, //use this format for add customs maps. Maps image must be placed in Nucelus\scripts\TeamFortress2 folder
];
Game.AddOption("Map", "The map the game will use", "MapID", listMaps);
var MapStep = Game.ShowOptionAsStep("MapID", true, "Select a Map");
var answers = ["No", "Yes"];
var answers2 = ["60", "45", "30", "120", "144", "240", "300"];
var answers3 = ["Manual", "Low", "Medium", "High"];
Game.AddOption("Which FPS Cap the game will use?", "", "Fps", answers2);
Game.AddOption("Which graphic settings the game will use?", "This will not affect the low graphic mod.", "Gra", answers3);
Game.AddOption("Use low graphic mod?", 'This will use mastercomfig "low" configuration for help with performance.', "Low", answers);
Game.KillMutex = ["hl2_singleton_mutex"]; //what mutex must be close for run the game multiple times
Game.RenameNotKillMutex = true;
Game.DirSymlinkExclusions = ["bin", "tf", "tf\\cfg"];
Game.FileSymlinkExclusions = ["autoexec.cfg", "config.cfg", "listenserver.cfg", "mapcycle.txt", "motd_default.txt", "motd_text_default.txt", "xinput1_4.dll"];
Game.HandlerInterval = 100;
Game.SymlinkExe = false;
Game.SymlinkGame = true;
Game.SupportsKeyboard = false;
Game.KeyboardPlayerFirst = true;
Game.HideTaskbar = true;
Game.ExecutableName = "hl2.exe";
Game.ExecutableContext = ["tf"];
Game.SteamID = "440";
Game.GUID = "TeamFortress2";
Game.GameName = "Team Fortress 2";
Game.NeedsSteamEmulation = false;
Game.LauncherTitle = "";
Game.SaveType = Nucleus.SaveType.CFG;
Game.WorkingFolder = "bin";
Game.SupportsPositioning = false;
Game.MaxPlayersOneMonitor = 4;
Game.MaxPlayers = 32;
Game.ProcessorPriorityClass = "High"; ////Sets the overall priority category for the associated process. Can be "AboveNormal", "High" or "RealTime" | default: "Normal"
Game.Hook.ForceFocus = false;
Game.Hook.ForceFocusWindowName = "Team Fortress 2";
Game.Hook.DInputEnabled = false;
Game.Hook.DInputForceDisable = true;
Game.Hook.XInputEnabled = true;
Game.Hook.XInputReroute = false; //set true for more than 4 controllers. You can use only ONE XboxOne controller and you can't use at the same time the keyboard. You must click/alt+tab on the corrisponding instance for make it work.
Game.Hook.BlockMouseEvents = false;
Game.Hook.BlockInputEvents = false;
Game.Hook.BlockKeyboardEvents = false;
Game.PauseBetweenStarts = 30;
Game.SetWindowHookStart = true;
Game.DontResize = true;
Game.PromptBetweenInstances = true;
Game.Hook.CustomDllEnabled = false; //set true for more than 4 controllers.
Game.HookFocus = true;
Game.HookInit = true;
Game.XInputPlusDll = ["xinput1_4.dll"]; // add the // before the line for more than 4 controllers.
//Game.Hook.XInputNames = ["xinput1_4.dll"]; // remove the "//" for more than 4 controllers.
Game.SupportsMultipleKeyboardsAndMice = true; //If enable, it will allow multiple Keyboards and Mice to be used as a device input in Nucleus. Before enable it by default, be sure that all works without problems.
Game.HookSetCursorPos = true;
Game.HookGetCursorPos = true;
Game.HookGetKeyState = true;
Game.HookGetAsyncKeyState = true;
Game.HookGetKeyboardState = false;
Game.HookFilterRawInput = true;
Game.HookFilterMouseMessages = false;
Game.HookUseLegacyInput = false;
Game.HookDontUpdateLegacyInMouseMsg = false;
Game.SendNormalMouseInput = true;
Game.SendNormalKeyboardInput = true;
Game.SendScrollWheel = true;
Game.ForwardRawMouseInput = false;
Game.ForwardRawKeyboardInput = false;
Game.HookReRegisterRawInput = false;
Game.HookReRegisterRawInputMouse = false;
Game.HookReRegisterRawInputKeyboard = false;
Game.DrawFakeMouseCursor = true;
Game.LockInputAtStart = false;
Game.LockInputToggleKey = 0x23;
Game.Description =
'The first time, instances could crash or take a long time to load the map. Enter in a team and start the next player (do not choose the role, wait for other players). When all instances are set, press "ok" on the last Nucleus prompt (hook/sends fake messages) and press "END" for restrict keyboards players to their instance (press it again for unlock the input). "Y" is used as "change status to Ready". For change map use map MAPNAME console command or if you want press F8 for a random map from the mapcycle.txt file inside you TeamFortress2 scripts folder. Open the script for see how to play with more than 4 controllers (Only one XboxOne controller, open the script for more info) or for change server configuration by editing the autoexec lines.';
Game.Play = function() {
var gra = Context.Options["Gra"];
var fps = Context.Options["Fps"];
var low = Context.Options["Low"];
var Args = (Context.Args = " -game tf -novid -windowed -noborder" + " -AlwaysFocus " + " -insecure " + " -w " + Context.Width + " -h " + Context.Height + " +sv_cheats 1 +fps_max " + fps);
Context.StartArguments = Args;
//The configuration of multi keyboards/mice must have FakeFocus turned on.
if (Player.IsKeyboardPlayer) {
Game.FakeFocus = true;
Game.HookMouseVisibility = true;
}
//The problem it seems that it make crash the game if used with customdll (only controllers will use them)
else {
Game.FakeFocus = false;
Game.HookMouseVisibility = false;
}
var filePath = (Context.filePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\tf\\cfg\\user");
System.IO.Directory.CreateDirectory(filePath);
var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\tf\\cfg\\motd_default.txt");
var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "motd_default.txt");
System.IO.File.Copy(savePkgOrigin, savePath, true);
var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\tf\\cfg\\motd_text_default.txt");
var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "motd_text_default.txt");
System.IO.File.Copy(savePkgOrigin, savePath, true);
var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\tf\\cfg\\mapcycle.txt");
var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "mapcycle.txt");
System.IO.File.Copy(savePkgOrigin, savePath, true);
//copy config.cfg
System.IO.File.Copy(System.IO.Path.Combine(Context.RootInstallFolder, "tf\\cfg\\config.cfg"), System.IO.Path.Combine(Context.RootFolder, "tf\\cfg\\config.cfg"), true);
if (low == "No") {
var autoExec = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\tf\\cfg\\autoexec.cfg"; //create an autoexec.cfg file
var lines = [
"sv_lan 1", //LAN server (!!don't edit!!) // <------------------------------------------- ADD HERE AUTOEXEC COMMANDS OR SERVER SETTINGS
"sv_pausable 1",
"tf_mvm_min_players_to_start 2", //minimun players for start MvsM
"maxplayers 32",
"cl_hud_minmode 1", //minimal hud
"bind F7 pause",
"bind F8 randommap", //bind F8 as key for randommap command
"engine_no_focus_sleep 0", // game will not limit fps when is not focused (!!don't edit!!)
"sv_cheats 1", //enable cheats
"mp_idledealmethod 0", //afk mode kick (0=disabled)
"mp_idlemaxtime 0", //max time that you can stay afk (0=disabled)
"mp_showrespawntimes 5", //set the respawn wave time (default is 10)
//"mp_disable_respawn_times", //instant respawn
"mapcyclefile mapcycle.txt"
];
Context.WriteTextFile(autoExec, lines); //creating the file
}
//if the user will choose to use low graphic mode, Nucleus will copy the mod files
if (low == "Yes") {
var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\tf\\custom\\mastercomfig-disable-pyroland-addon.vpk");
var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "mastercomfig-disable-pyroland-addon.vpk");
System.IO.File.Copy(savePkgOrigin, savePath, true);
var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\tf\\custom\\mastercomfig-low-preset.vpk");
var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "mastercomfig-low-preset.vpk");
System.IO.File.Copy(savePkgOrigin, savePath, true);
var savePath = (Context.SavePath = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\tf\\custom\\mastercomfig-no-soundscapes-addon.vpk");
var savePkgOrigin = System.IO.Path.Combine(Game.Folder, "mastercomfig-no-soundscapes-addon.vpk");
System.IO.File.Copy(savePkgOrigin, savePath, true);
//mastercomfig mod use exec files that are inside the user folder (while the game, without mod, use the cfg one).
var autoExec = Context.GetFolder(Nucleus.Folder.InstancedGameFolder) + "\\tf\\cfg\\user\\autoexec.cfg"; //create an autoexec.cfg file
var lines = [
"sv_lan 1", //LAN server (!!don't edit!!) // <------------------------------------------- ADD HERE AUTOEXEC COMMANDS OR SERVER SETTINGS
"sv_pausable 1",
"tf_mvm_min_players_to_start 2", //minimun players for start MvsM
"maxplayers 32",
"cl_hud_minmode 1", //minimal hud
"bind F7 pause",
"bind F8 randommap", //bind F8 as key for randommap command
"engine_no_focus_sleep 0", // unlimited FPS on all screens (!!don't edit!!)
"sv_cheats 1", //enable cheats
"mp_idledealmethod 0", //afk mode kick (0=disabled)
"mp_idlemaxtime 0", //max time that you can stay afk (0=disabled)
"mp_showrespawntimes 5", //set the respawn wave time (default is 10)
//"mp_disable_respawn_times", //instant respawn
"mapcyclefile mapcycle.txt"
];
Context.WriteTextFile(autoExec, lines);
}
if (gra == "Low" && low == "No") {
//the line "r_rootlod 2" will be written inside the autoexec.cfg file created with the var autoExec.
lines.push("r_rootlod 2");
lines.push("r_waterforceexpensive 0");
lines.push("r_shadowrendertotexture 0");
lines.push("mat_picmip 2");
lines.push("mat_reducefillrate 1");
lines.push("mat_antialias 1/0");
lines.push("mat_aaquality 0");
lines.push("mat_forceaniso 0");
lines.push("mat_trilinear 0");
lines.push("mat_hdr_level 0");
}
if (gra == "Medium" && low == "No") {
lines.push("r_rootlod 1");
lines.push("r_waterforceexpensive 1");
lines.push("r_shadowrendertotexture 0");
lines.push("mat_picmip 1");
lines.push("mat_reducefillrate 1");
lines.push("mat_antialias 4");
lines.push("mat_aaquality 0");
lines.push("mat_forceaniso 4");
lines.push("mat_trilinear 0");
lines.push("mat_hdr_level 1");
}
if (gra == "High" && low == "No") {
lines.push("r_rootlod 0");
lines.push("r_waterforceexpensive 1");
lines.push("r_flashlightdepthtexture 1");
lines.push("mat_picmip 0");
lines.push("mat_reducefillrate 1");
lines.push("mat_antialias 4");
lines.push("mat_aaquality 2");
lines.push("mat_forceaniso 16");
lines.push("mat_trilinear 1");
lines.push("mat_hdr_level 2");
}
if (gra == "Manual" && low == "No") {
}
if (Player.IsKeyboardPlayer) {
lines.push("m_rawinput 1");
lines.push("joystick 0");
lines.push("exec undo360controller.cfg");
lines.push("host_writeconfig");
} else {
lines.push("m_rawinput 0");
lines.push("exec 360controller.cfg");
lines.push("bind p player_ready_toggle");
lines.push('alias "togglescores" "player_ready_toggle"');
lines.push('bind "JOY4" "togglescores"');
lines.push('bind "JOY9" "toggle_duck"');
lines.push("host_writeconfig");
}
if (Context.PlayerID == 0) {
var map = Context.Options["MapID"].Console;
if (map != "") {
lines.push("map " + map);
}
} else {
lines.push("connect " + Context.User.GetLocalIP());
}
Context.WriteTextFile(autoExec, lines);
};