Left 4 Dead

Left 4 Dead

Nicht genug Bewertungen
Left 4 Dead 1 Complete Guide to Splitscreen With Working Controllers [Xbox, Dual Shock 3 / 4, Dual Sense, JoyCons, Switch Pro]
Von xProFlipScarab
A Comprehensive guide on how to get local splitscreen running with all modern Controllers, Including a Fix for controllers not Assigning to player 2 as well as all the useful information and console commands for singleplayer, splitscreen and achievement hunting as i can think of.

This is currently a work in progress, I'm currently working on Console Commands and other helpful information.

I hope this guide helps, I'd appreciate a rating for my efforts so this guide isn't buried for the rest of time.
Thanks for stopping by :)
   
Preis verleihen
Favorisieren
Favorisiert
Entfernen
Step 0 - Foreword: Controller Combinations
Now before I start I just want to clear up some different circumstances that you might find yourself in...
  • Combination 1 - M&K + Xbox Controller [Any Native XInput Controller]
  • Combination 2 - Two XBone Controllers
  • Combination 3 - K&M + DualShock 4 / DualSense Controller
  • Combination 4 - Two DualShock 4 / DualSense Controllers
*Note: Keyboard & Mouse will always be Player 1

For Xbox/XInput Controllers simply continue through the steps in this guide.

DualShock 3/4, DualSense, JoyCons & Switch Pro Controllers:
For all of these controllers it's still relatively simple; you need to use a program called DS4Windows[ds4-windows.com] which i presume most PlayStation controller users already have.

For those who do not have it, I'm not going to go through it here as it's documented enough already, That being said i will leave a few notes to make sure it's configured correctly.

*Note: I do not know how DirectInput Controllers are handled and i have none to test.
DS4Windows Configuration Notes:
  • Make sure to use the optional driver: "HidHide" as this game does not play well with the double input issue
  • Once DS4Win and HidHide is set up go to your "Output Slots" Tab and "Plug" Two "Permanent" "X360's" (This should make sense once you have figured DS4Win out)
  • MAKE SURE THESE 2 SLOTS ARE XINPUT # 1 & 2 !!
If the XInput Slots are incorrect then press the DS4Win "Stop" Button, Close anything that might be hooking Xinput INCLUDING STEAM, GAMES, ETC. Then Press the DS4Win "Start" Button,
If the slots are fixed then continue with the guide, If the slots are still wrong give your PC a Reboot [Signing out might work too?].
Step 1 - Initial Setup / Configuration
*Note: Refer to This Document for all L4D Console Commands and CVars along with their descriptions...
Config Files are located within the following Directory:
*L4D Root Directory*\left4dead\cfg

First off we need to be on the same page configuration-wise, our first config file will be our initial setup for our splitscreen bindings and should only need to be run once, We will save it as a cfg file just in-case.

The config file name I chose and will be using is "splitscreen.cfg" and has the following contents:
// Player 2's User-Defined Display Name cmd2 name LordGaben // Controller Settings *Not sure if this is Configurable Per Player joy_variable_frametime 1; joy_autoaimdampenrange 0.85; joy_autoaimdampen 0.5; joy_lowend 0.65; joy_lowmap 0.15; joy_accelscale 3.0; joy_accelmax 4.0; joy_response_move 5; joy_response_look 1; joy_autoaimdampen 0.3; joy_autoaimdampenrange 0.85; joyadvancedupdate; // advanced joystick update allows for analog control of move and look unbindall // My personal two extra binds that you may want to keep... cmd1 bind "g" "sv_cheats 1; warp_all_survivors_here; sv_cheats 0" cmd1 bind "n" "sv_cheats 1; noclip; sv_cheats 0" // These 2 binds are achievement safe :) cmd1 bind "0" "slot10" cmd1 bind "1" "slot1" cmd1 bind "2" "slot2" cmd1 bind "3" "slot3" cmd1 bind "4" "slot4" cmd1 bind "5" "slot5" cmd1 bind "6" "slot6" cmd1 bind "7" "slot7" cmd1 bind "8" "slot8" cmd1 bind "9" "slot9" cmd1 bind "a" "+moveleft" cmd1 bind "d" "+moveright" cmd1 bind "e" "+use" cmd1 bind "f" "impulse 100" cmd1 bind "h" "motd" cmd1 bind "m" "chooseteam" cmd1 bind "q" "lastinv" cmd1 bind "r" "+reload" cmd1 bind "s" "+back" cmd1 bind "t" "impulse 201" cmd1 bind "u" "messagemode2" cmd1 bind "w" "+forward" cmd1 bind "x" "+mouse_menu QA" cmd1 bind "y" "messagemode" cmd1 bind "z" "+mouse_menu Orders" cmd1 bind "`" "toggleconsole" cmd1 bind "SPACE" "+jump" cmd1 bind "TAB" "+showscores" cmd1 bind "ESCAPE" "cancelselect" cmd1 bind "SHIFT" "+duck" cmd1 bind "ALT" "+speed" cmd1 bind "F1" "Vote Yes" cmd1 bind "F2" "Vote No" cmd1 bind "F3" "askconnect_accept" cmd1 bind "F5" "jpeg" cmd1 bind "F12" "jpeg" cmd1 bind "MOUSE1" "+attack" cmd1 bind "MOUSE2" "+attack2" cmd1 bind "MOUSE3" "+zoom" cmd1 bind "MOUSE4" "+voicerecord" cmd1 bind "MOUSE5" "impulse 100" cmd1 bind "MWHEELUP" "invprev" cmd1 bind "MWHEELDOWN" "invnext" // Player 2 Controller Binds cmd2 +jlook; cmd2 joy_pitchsensitivity "2.0"; cmd2 joy_yawsensitivity "-3.0"; cmd2 bind "A_BUTTON" "+jump;+menuAccept"; cmd2 bind "B_BUTTON" "+reload"; cmd2 bind "X_BUTTON" "+use"; cmd2 bind "Y_BUTTON" "lastinv"; cmd2 bind "R_TRIGGER" "+attack"; cmd2 bind "L_TRIGGER" "+attack2"; cmd2 bind "R_SHOULDER" "+lookspin"; cmd2 bind "L_SHOULDER" "toggle_duck"; cmd2 bind "STICK1" "vocalize smartlook"; cmd2 bind "STICK2" "+zoom"; cmd2 bind "BACK" "togglescores"; cmd2 bind "START" "pause"; cmd2 bind "S1_UP" "+menuUp"; cmd2 bind "S1_DOWN" "+menuDown"; cmd2 bind "UP" "impulse 100"; cmd2 bind "LEFT" "slot3"; cmd2 bind "RIGHT" "slot4"; cmd2 bind "DOWN" "slot5"; // This Allows Controllers to work for Player 1 and doesn't seem to break anything cmd1 bind "A_BUTTON" "+jump;+menuAccept"; cmd1 bind "B_BUTTON" "+reload"; cmd1 bind "X_BUTTON" "+use"; cmd1 bind "Y_BUTTON" "lastinv"; cmd1 bind "R_TRIGGER" "+attack"; cmd1 bind "L_TRIGGER" "+attack2"; cmd1 bind "R_SHOULDER" "+lookspin"; cmd1 bind "L_SHOULDER" "toggle_duck"; cmd1 bind "STICK1" "vocalize smartlook"; cmd1 bind "STICK2" "+zoom"; cmd1 bind "BACK" "togglescores"; cmd1 bind "START" "pause"; cmd1 bind "S1_UP" "+menuUp"; cmd1 bind "S1_DOWN" "+menuDown"; cmd1 bind "UP" "impulse 100"; cmd1 bind "LEFT" "slot3"; cmd1 bind "RIGHT" "slot4"; cmd1 bind "DOWN" "slot5";
Step 2 - Clean Slate and In-Game Setup
!! CONTROLLERS NEED TO BE CONNECTED BEFORE STARTING THE GAME !!

Now we have our configs setup we're going to want to make sure "gamepad" is enabled in "Mouse & Keyboard" Settings and we are ready to start a new game...

For Coop Games, Run the command:
ss_map *MAPNAME HERE*
For Versus/Survival Games, Run the command:
ss_map *MAPNAME HERE* *versus/survival HERE*

*Note: The 4 Main Campaigns all have Vs variants to load, for example: "l4d_hospital01_apartment" = "l4d_vs_hospital01_apartment"...
Survival technically works on all maps but unsupported chapters require commands and cheats to play


Once we have loaded the game we are going to clear all our current bindings with the following command:
"unbindall; cmd1 unbindall; cmd2 unbindall"
Now all keyboard input should be dead and your controller(s) may or may not do something

Finally run the command: *Execute our previously defined .cfg script
exec splitscreen
Now your Mouse & Keyboard should be fully functional again[probably]

For M&K + One Controller - Goto Step 3
For Two Controllers:
If you are using 2 Native XInput controllers or another combination of controllers with DS4Windows then at this point you should be up and running just fine... Skip ahead for more information or go off and shoot some zombies, Drop a rating before you go :)
Step 3 - Fix for a Single Controller Stuck as Player 1
Now for those of you using One Controller with a Mouse & Keyboard as Player 1 we're almost there, To fix this incorrect player assignment issue we need to open up our steam overlay and navigate to "Controller Settings".

Now enable Steam Input and back out to the game [See Note], At this point our controller should now control both players at once...

All we need to do now is go back to our Steam Controller Settings and Disable Steam Input, Finally back out to the game and we should have a fully functional controller for Player 2 and Keyboard & Mouse working as normal for Player 1.

*Note: Make sure you wiggle the stick or press a button each time you return to the game, Simply Cycling Steam Input doesn't seem to work on it's own, [At least during my testing].
Also if Steam Input was already enabled simply disable it...
If that doesn't fix the issue then cycling Steam Input once more should fix it
Console Commands & Useful Information [WIP]
This is the "Map" command but with splitscreen enabled, Can be used with gamemodes.
ss_map l4d_vs_hospital01_apartment versus
*Tip: Use the following command to list all map console names:
maps *

To switch the players team use the following command prefixed with "CMD1" or "CMD2" for Player 1/2:
CMD1 jointeam 2 Bill CMD2 jointeam 3
*Note: Team Values:
Survivors: 2 *With Survivor Name* Infected: 3

Bot Slot Commands:
kick *bot_name* // Use the bots name to kick that AI character e.g: "Bill" "Hunter" // For multiple infected of the same type "(1)Hunter" "(2)Hunter" Etc... sb_add // Fills an open survivor slot after you kick one [They will join dead]

The following command will spawn infected when executed by a survivor or "Spawned In" Infected, However if you use the command when you are in the Infected Spawn Mode you will spawn as that Infected Type: (boomer, smoker, hunter, tank)
z_spawn hunter // Requires sv_cheats

To be continued...
*and polished...
Useful Config Files [WIP]
This is a list of useful scripts that we can save as config files and use with the "exec" command.

Quick Kick ALL Bot Script - kickbots.cfg:
kick bill kick zoey kick louis kick francis kick hunter kick (1)hunter kick (2)hunter kick smoker kick (1)smoker kick (2)smoker kick boomer kick (1)boomer kick (2)boomer kick tank kick (1)tank kick (2)tank

Leave any suggestions in the comments, I'll add useful ones here.
Notes
I have no clue whatsoever what Config, Command or CVar is responsible for assigning which Xinput Slot to which player in this version of the source engine so this is more of a "see what sticks" type of scenario rather than absolute instructions.

The fact that having Two active Xinput slots works perfectly out the gate suggests the only issue here is that when we only have a single Xinput slot active it's assigned to Player 1 [CMD1] by the engine automatically at launch and Steam-Input Seems to override slot 1 and push "The Real Controller" to Slot 2 which apparently sticks even after Steam-Input is disabled
*Note: This seemingly only happens at the software level too as XInput Slot 2 Remains disconnected when analysed with 3rd party software [In my case: XInputChecker - Bundled with DS4Win]


Figuring out how This version of Source actually Assigns XInput Slots to Player Slots would simplify this process a great deal... So please if anyone has any bright ideas, Shoot.

Closing Note:
I hope this guide at least helped someone out, this was really annoying to figure out. Left 4 Dead 2 seems to have taken away almost all of the community's attention so the tech support scene for L4D1 is a little sparse.
The fact that all this information is out there but scattered around motivated me to give back to the community for once... Anyway thanks for reading :)
I'd appreciate a rating so this guide isn't buried for the rest of time, Now go enjoy the game!