# Rules

## For any questions please ask in the [Discord server](https://discord.gg/JAUCEJmm2H)

## [Click here for the Game Version Glossary](https://www.speedrun.com/l4d2/guides/up099)

## Submission/Proof Requirements

### ALL RUNS require proof in the form of demo files AND suitable video with game audio

- Proof must remain publicly available for at least 6 months in order for runs to remain on the leaderboard.

### VIDEO PROOF

- Video must be recorded as you play (not demo playback).
- Video must be uncut for the entire run.
- Game audio must be clear enough to confirm that no addons or mods were used.
- Video must be hosted on a permanent platform, such as YouTube or as a Twitch highlight.
- A Twitch VOD is not acceptable as it will expire.
- For co-op runs, only video from the host is required.
- Video must contain mostly the speedrun itself (some extra footage is fine).

### DEMO PROOF

- Click [HERE](https://l4dsr.github.io/l4dsr-wiki/docs/tutorials/welcome/demos) for a guide on recording demos.
- It is highly advised that you install [SST](https://mikes.software/sst/) to make demo recording easier.
- **ALL PC RUNS must have demo proof in addition to video proof.**
- As of 7/17/23, **demo recording must contain the entirety of the intro cutscene** on the first level of the run (pausing and recording immediately after the loading into the first level is **NOT** enough to comply with the rule. Check the [guide](https://l4dsr.github.io/l4dsr-wiki/docs/tutorials/welcome/demos#demo-recording-basics) for recommendations).
- Demos must be recording at all times for the entire duration of the run.
- For co-op runs, all players in the run must record and link their demos in the submission.
- If you need to go to the main menu or run the `map` command at any point during a multi-campaign run, you need SST in order for the run to be valid.

### ADDONS AND MODS ARE BANNED

- This DOES INCLUDE **ANY** kind of textures, reskins, changes to audio, **autojump (autobhop) scripts**, null movement/null cancelling scripts, macros, etc. 
- This DOES NOT INCLUDE configs, or external custom crosshairs (RTSS, HudSight, mike's xhair program, etc.). 
- **Some keybinds and commands are banned, see below for more info.**

## General Rules

- The red "4" loading icon in the top right must be unobstructed during loading screens.
- You cannot change game versions mid-run.
- HUD elements must fully disappear when entering the escape vehicle in a finale in order for a campaign to be considered completed.
- During a run, you may only play campaigns that are a part of the category. For example, if you are running Main Campaigns, you are not allowed to enter The Passing at any point in the run.
- Campaigns can be played in any order in multi-campaign runs, but each campaign must be played in a single, unbroken instance from its first map to the last map.
- During a multi-campaign run, if you accidentally do something that breaks a rule (such as voting to Easy in Expert Realism), you may continue the run if you restart the current campaign.
- Playing on Realism is allowed.
- Playing on or using a dedicated server is not allowed. All runs must be played on a local server (using singleplayer, or a lobby, or the `map` command).
- It is highly recommended (but not required) for runners on PC to use LiveSplit and the included autosplitter.
- It can be enabled by right-clicking in Livesplit, clicking "Edit Splits", and clicking "Activate".

### CO-OP RUNS

- The submitted perspective must be of the host, or whoever loads first.
- Can be completed with 2 to 4 players.
- Players cannot be swapped mid-run.
- All players in the run must record and link their demos in the submission.

## Keybinds/Commands

Though custom keybinds are allowed for convenience, **any route, trick or in-game action which relies on behaviour that is only achievable through the use of the developer console is banned**. Examples of said behaviour include pausing/unpausing the game in ways that are not otherwise possible, using aliases to send different commands when pressing and unpressing a key, and/or to override existing commands by using their names as alias names. This rule doesn't concern which commands are allowed to be used, but how the developer console itself impacts the speedrun. That being said, a full list of allowed commands and their allowed usages is as follows:

### Whitelisted Commands

**These commands may be bound to any number of keys, but must be bound directly, not as part of an alias or with other commands on the same key:**

- `+attack`
- `+attack2`
- `+back`
- `+duck`
- `+forward`
- `+jump`
- `+mouse_menu Orders`
- `+mouse_menu QA`
- `+moveleft`
- `+moveright`
- `+reload`
- `+showscores`
- `+speed`
- `+use`
- `+voicerecord`
- `+zoom`
- `chooseteam`
- `go_away_from_keyboard`
- `impulse 100` (flashlight)
- `impulse 201` (spray)
- `invnext`
- `invprev`
- `lastinv`
- `slot{1-10}`
- `toggle_duck`

**These commands can be used, and may be bound to keys and combined in aliases, including key-toggling and cycling scripts:**

- `bind`
- `callvote [ChangeDifficulty/ChangeMission/RestartGame]`
- `disconnect`
- `host_writeconfig`
- `jpeg`
- `map <map name> <difficulty> <mode>`
- `messagemode`
- `messagemode2`
- `motd`
- `r_cleardecals`
- `rate`
- `say`
- `say_team`
- `screenshot`
- `setinfo name <name>`
- `Vote [Yes/No]`

Specifically in Death Toll 3, for historical reasons, the following command can also be used with the same restrictions as the list above:
- vocalize [ConceptBlock015/ConceptBlock023/ConceptBlock025/ConceptBlock032]

**These cvars can be modified, and may be bound to keys and combined in aliases, including key-toggling and cycling scripts:**

- `cc_linger_time`
- `cc_predisplay_time`
- `cl_cmdrate`
- `cl_colorblind`
- `cl_crosshair_*`
- `cl_glow_*`
- `cl_interp_ratio`
- `cl_interp`
- `cl_showdemooverlay`
- `cl_showfps`
- `cl_showpos`
- `cl_updaterate`
- `cl_viewmodelfovsurvivor` (on game versions that support it)
- `closecaption`
- `con_fiter_*`
- `demo_*`
- `engine_no_focus_sleep`
- `fov_desired` (on game versions that support it)
- `fps_max`
- `m_pitch [0.022/-0.022]`
- `m_filter`
- `m_rawinput`
- `m_customaccel`
- `m_customaccel_exponent`
- `m_customaccel_max`
- `m_customaccel_scale`
- `mat_monitorgamma`
- `mat_monitorgamma_tv_enabled`
- `name`
- `net_graph`
- `net_splitpacket_maxrate [15000/30000]`
- `sensitivity`
- `snd_mixahead`
- `snd_musicvolume`
- `sv_lan`
- `volume`

**These cvars can be modified, but their value must not change for the entire duration of the speedrun:**

- `snd_mute_losefocus`

### Blacklisted Commands

While only the *whitelisted* commands above are allowed to be used, for clarity, the following list contains common commands that are **NOT** allowed to be used. This list is not exhaustive.

**Using these commands, or changing them from default/game-controlled values WILL RESULT IN YOUR RUN BEING REJECTED:**

- `sv_cheats`, or any command/variable/game state requiring `sv_cheats`
- `developer`
- `z_difficulty`
- `kick`
- `kill`
- `wait`
- `thirdpersonshoulder`
- `changelevel`
- `jointeam`
- `snd_restart`
- `mp_*`
- `status`
- All `sv_*` commands not mentioned in the whitelist

**If you feel something is missing from the whitelist or blacklist, or wish to seek clarification, please contact a moderator through the [Discord server](https://discord.gg/JAUCEJmm2H).**

**Attempts to abuse any potential loopholes in this white/blacklist (or the rest of the rules in general) will be dealt with at the discretion of the mod team.**