engine/specs/splitscreen.txt

69 lines
4.5 KiB
Plaintext
Raw Permalink Normal View History

mvd: cl_autotrack_team cvar locks autotrack to a specific team. getting the team name to match can still be problematic when it contains non-ascii chars however. qw: fix recording mid-map. q2: add support for recording demos on q2 servers. q: fix setattachment not using the correct orientations. q2: now supports splitscreen, as well as increased model and sound limits. cl: fix crosshair not appearing in splitscreen. cl: splitscreen clients now get their own colour tints (like the bf command) snd: tweak audio to be a bit more usable in splitscreen by default. cl: added con_logcenterprint cvar, for shoving a copy of centerprints onto the console. by default only appears in single player. qc: add checkbuiltin builtin. for all those #0 builtins without their own extension name. gl: fix r_dynamic -1 bug that was painfully visible in AD. mdl: validate per-frame bounds of mdl files (stuff that would crash software renderers). sv: fix -port or +sv_port commandline args to override the port correctly. win: attempt to cope with windows symlinks enumerating with the wrong filesizes. gl: fix skyboxes not appearing properly. gl: fix sprite alpha/edge issue resulting in some invisible sprites in AD. gl: fix screenshot_mega, in combination with r_projection. yay for HUGE panoramic screenshots. q2: fix replacement textures issue. qw: fix download demonum/X issue, both in client and server. qw: fix multicast dimensions not always being honoured properly. nq: fix starting angles sometimes being wrong. menusys: I'm finally uploading my menusys library, plus example mod, which I'll now be providing like csaddon is. git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4997 fc73d0e0-1445-4013-8a0c-d673dee63da5
2016-01-17 21:22:07 -08:00
FTE's splitscreen is supported for Quake, Hexen2, or Quake2. It is not supported in Quake3.
Usage:
Set cl_splitscreen to the number of additional clients you wish to use. This can be changed mid-game, thereby adding or removing clients as needed.
0: disabled
1: 2-way
2: 3-way
4: 4-way
other values: not supported.
For convenience, if cl_splitscreen is enabled then servers will enable coop instead of running singleplayer.
Also note the input support section.
To enable splitscreen on a server, you need to set allow_splitscreen 1 on that public server. Note that this is not normally needed unless you're using a separate/dedicated server.
Additionally, protocol extensions must be enabled. cl_nopext 0 will reenable them (this is the default setting, so you won't need to worry too much).
Mod support:
Not all mods will work perfectly with it, an example being (especially q2) gamecode that handles the 'say' command which is not splitscreen-aware will end up sending multiple prints for each other player. This is not too much of an issue in private games, but can be annoying on public servers.
Other mods that specially craft sound events or other such things for clients may similarly have issues.
The QC features viewmodelforclient and exteriormodelforclient are not supported in conjunction with splitscreen. These will be be checked against only the first player, but will apply to all players.
Mods that use CSQC will typically only see the first player unless the csqc code explicitly supports splitscreen.
UserInfo and Names:
You can change the second / 3rd / 4th player's name or other settings with:
p2 setinfo name Foo
Input support:
There are multiple ways to deal with input, and multiple gotchas.
The engine generates a device-id per input device of each type. This device id is used to decide which player (aka seat) that input device controls.
These device ids typically depend upon the order that they are enumerated in, and can thus be renumbered between restarts or reboots, depending upon the operating system and device types.
in_xinput cvar:
on windows, the xinput api provides support for up to 4 game controllers (so long as they're just clones of microsoft's console controllers...). Windows is responsible for deciding which controller is assigned to each seat, so don't blame me if they get reassigned randomly.
These controllers may optionally have headsets attached to them. If they do, each headset will automatically receive its own player-specific audio stream.
If this cvar is changed, you will need to use in_restart in order to apply that change.
in_rawinput cvar:
Rawinput provides a way to determine which mouse generated which input events. It also disables mouse acceleration, which is generally a good thing.
If this cvar is changed, you will need to use in_restart in order to apply that change.
in_rawinput_keyboard:
Rawinput also supports keyboards, along with actual device ids, thereby allowing each player to have their own keyboard, if your computer is set up weirdly like that.
If this cvar is changed, you will need to use in_restart in order to apply that change.
in_dinput cvar:
DirectInput supports reporting device ids, however microsoft broke this with Vista where mice are concerned. Use rawinput instead. FTE only supports directinput for mice anyway.
in_deviceids command:
in_deviceids with no arguments can be used to list the device types, mappings, and names.
You can reassign device ids with eg: in_deviceids mouse 1 "whateverwaslistedhere"
Note that device ids themselves are 0-based, so the previous line will remap the named mouse to player 1.
in_forceseat cvar:
if set, the device id mechanism is ignored, and all input explicitly controls the specified seat. This is primarily only useful to developers that want to test multiplayer mods. However, it can also be set from the binds menu (where it configures which player's keys are being explicitly controlled).
p2 / +p2 / p3 / etc commands:
When playing with only a single keyboard, individual keys can be bound to eg 'p2 impulse 4' or '+p2 attack'. By doing so, those keys will select player 2's nailgun, or move player 2 forward despite other keys controlling player 1 by default.
This can be configured via the binds menu (when splitscreen is enabled), but be sure to turn 'force client' back off.
csqc:
csqc receives all input events before any in_forceseat modifiers or binds etc. This includes which device generated the event. This allows csqc mods to provide their own interpretation of any key events etc that it wants.