Portal 2 Rules
This document aims to provide an overview of rules for speedrunning Portal 2 and its mods. Most rules are universally applicable, however, every category will have exceptions and/or additional rules. Every rule detailed in the "General Rules" section below may be overruled within a category - for this reason, you should make sure to read all rules relevant to the category you are running.
Also note that this set of rules is not exhaustive on lists of commands or more generally on banned actions. If anything seems at all ambiguous to you or you're not sure if something is allowed, please consult a board moderator for the category in question. Lists of moderators can be found in the category's section below.
Definitions
Commands
In the game's console, you can execute commands, as well as bind keys to execute commands. We define several classes of command.
"Functional Commands" are commands which have some effect on the run or the runner's
ability to perform it. The vast majority of commands fit into this category -
effectively the only ones that don't are ones which impact timing, such as
sar_speedrun_result
, and purely cosmetic ones, such as sar_hud_set_text
.
"Action Commands" are a subset of functional commands defined as any command which has
a direct effect on the game world. This includes all player movement commands
(+forward
, -forward
, +duck
, etc), as well as commands such as load
.
Pause Abuse
Pause Abuse is defined as using game pauses (via the ESC key, gameui
commands, or
opening the developer console) to affect the chance of some event occurring, make an
event possible, or otherwise contribute to the run. For instance, the Betsrighter jump
in sp_a1_wakeup
can be done far more consistently by console pausing as you land -
as such, pausing at this moment in the run is considered pause abuse, as it affects
your chances of getting the jump. More subtly, pausing while lining up a precise shot
is also pause abuse, since the time you are paused can allow you time to read your
coordinates and prepare to move your mouse correctly.
Save/Load Abuse (SLA)
Save/Load Abuse (SLA) is defined as using any unnatural load or level transition (i.e.
anything other than touching a changelevel trigger in the map) in order to affect the
chance of some event occurring or make an event possible. For instance, saveload
clipping is considered SLA, since it achieves an effect which would otherwise be
impossible. Similarly, loading saves to retry lucky door skip in
sp_a2_bridge_the_gap
is SLA, as it affects the overall chance of successfully
getting through the door. Exceptions are made to this rule for physics RNG
specifically, so that loading saves and getting different physics RNG is not
considered SLA, since this RNG is prevalent to the point of being unavoidable.
Out of Bounds (OOB)
The Source Engine has a strict technical definition of whether a point is "out of
bounds" based on its BSP world system (a point is out of bounds if it is in a
CONTENTS_SOLID
leaf and not within a brush). We define the player themselves as being
out of bounds if a) the player's eye position goes out of bounds or b) all 8 vertices
of the player's bounding box go out of bounds.
General Rules
Commands
IF YOU ARE UNSURE WHETHER A COMMAND IS ALLOWED, CHECK WITH A MODERATOR FOR YOUR CATEGORY BEFORE USING IT.
The game contains a wide array of commands and variables (cvars) which can be used to achieve various effects. Commands are banned or allowed considering several criteria. All commands accessible in normal gameplay (e.g. common movement commands, save/load) are allowed. Other commands receive rulings based on their interaction with the rest of the game, their similarity to other commands, and how they fit in with other rules. If you're not sure whether a command is allowed, you should speak to a moderator for the category you are running.
Allowed commands can be categorised as "action commands", "functional commands", and
"non-functional commands" (note that all action commands are also functional
commands). Any allowed command may be manually executed by typing it into the console
at any point, including executing such commands indirectly through exec
or aliases.
HUDs
SAR and the game itself provide various HUDs to the user, accessible through console commands. In general, a HUD provided by SAR is allowed only if there is an equivalent HUD allowed which the base game provides. The command list below exhaustively lists all known allowed HUDs.
HUDs containing unchanging, predetermined user-provided text or content - such as
through sar_hud_set_text
or sar_toast_create
- are always allowed, even if they
are giving information about the run, such as dialogue fades or lineups.
Graphics
Most commands affecting the game's graphics are allowed to be used, and are not
classed as functional commands. This is because using these commands is sometimes
required for good performance on lower-end hardware. This includes most commands
starting r_
provided they do not make parts of the world invisible or cause other
major differences to default behaviour.
Crosshairs
The game's default crosshair size (including quickhud) has a fixed pixel size.
Custom crosshairs via sar_crosshair
and sar_quickhud
are permitted only with
specific assets and parameters, to get a crosshair equivalent to the default on
a different resolution. The crosshair used must may change throughout the run.
If you wish to use a custom crosshair, ask a moderator for your category for an
allowed configuration.
Command List
This list details the allowed values for every SAR command as well as a lot of base
game commands. Please note that any category can override any of these rulings.
An allowed value of -
means that any value is permitted.
Command | Type | Allowed Values |
---|---|---|
+attack / -attack | Action | - |
+attack2 / -attack2 | Action | - |
+back / -back | Action | - |
+coop_ping | Action | - |
-coop_ping | Functional | - |
+duck / -duck | Action | - |
+forward / -forward | Action | - |
+left / -left | Action | - |
+mouse_menu | Functional | - |
-mouse_menu | Action | - |
+movedown / -movedown | Action | - |
+moveleft / -moveleft | Action | - |
+moveright / -moveright | Action | - |
+quick_ping | Action | - |
-quick_ping | Functional | - |
+remote_view / -remote_view | Functional | - |
+right / -right | Action | - |
+use / -use | Action | - |
+zoom / -zoom | Functional | - |
autosave | Functional | - |
cc_lang | Non-functional | - |
cc_subtitles | Non-functional | - |
cl_backspeed | Functional | 0 .. 175 |
cl_forwardspeed | Functional | 0 .. 175 |
cl_fov | Functional | 45 .. 140 |
cl_showpos | Functional | 0, 1 |
cl_sidespeed | Functional | 0 .. 175 |
con_drawnotify | Functional | - |
con_filter_enable | Functional | - |
con_filter_text_out | Functional | - |
cond | Inherited | - |
conds | Inherited | - |
contimes | Functional | - |
developer | Functional | 0, 1 |
fps_max | Functional | 30 .. 999 |
ghost_* | Non-functional | - |
ghost_prop_model | Banned | - |
ghost_type | Non-functional | 0, 1, 4 |
hwait | Non-functional | Non-functional commands only |
load | Action | - |
m_rawinput | Functional | - |
m_yaw | Functional | - |
mat_ambient_light_b | Non-functional | - |
mat_ambient_light_g | Non-functional | - |
mat_ambient_light_r | Non-functional | - |
mat_fullbright | Non-functional | 0, 1 |
mat_motion_blur_enabled | Non-functional | - |
mat_specular | Non-functional | - |
mat_vsync | Non-functional | - |
net_graph | Non-functional | - |
nop | Non-functional | - |
r_PortalTestEnts | Non-functional | - |
r_portal_fastpath | Non-functional | - |
r_portal_use_pvs_optimization | Non-functional | - |
sar_about | Non-functional | - |
sar_achievement_tracker_* | Non-functional | - |
sar_aim_point_* | Banned | - |
sar_aircontrol | Banned | - |
sar_alias | Non-functional | - |
sar_alias_run | Inherited | - |
sar_allow_resizing_window | Non-functional | - |
sar_always_transmit_heavy_ents | Non-functional | - |
sar_autojump | Banned | - |
sar_autorecord | Non-functional | - |
sar_avg_* | Non-functional | - |
sar_bink_respect_host_time | Non-functional | - |
sar_cam_* | Banned | - |
sar_challenge_autostop | Non-functional | - |
sar_challenge_autosubmit_reload_api_key | Non-functional | - |
sar_chat | Non-functional | - |
sar_cheat_hud_* | Non-functional | - |
sar_check_update | Non-functional | - |
sar_clear_lines | Non-functional | - |
sar_cm_rightwarp | Non-functional | - |
sar_con_filter_* | Non-functional | - |
sar_coop_reset_progress | Banned | - |
sar_cps_* | Non-functional | - |
sar_crosshair_* | Non-functional | Pre-defined allowed values, see above |
sar_cvarlist | Non-functional | - |
sar_cvars_* | Banned | - |
sar_debug_listener | Banned | - |
sar_delete_alias_cmds | Non-functional | - |
sar_demo_blacklist_* | Non-functional | - |
sar_demo_overwrite_bak | Non-functional | - |
sar_demo_portal_interp_fix | Non-functional | - |
sar_demo_remove_broken | Non-functional | - |
sar_demo_replay | Banned | - |
sar_disable_challenge_stats_hud | Non-functional | - |
sar_disable_coop_score_hud | Non-functional | - |
sar_disable_no_focus_sleep | Non-functional | - |
sar_disable_progress_bar_update | Non-functional | - |
sar_disable_save_status_hud | Non-functional | - |
sar_disable_steam_pause | Non-functional | - |
sar_disable_weapon_sway | Non-functional | - |
sar_dpi_scale | Functional | - |
sar_drawline_* | Banned | - |
sar_duckjump | Banned | - |
sar_dump_* | Banned | - |
sar_echo | Non-functional | - |
sar_echo_nolf | Non-functional | - |
sar_ei_* | Banned | - |
sar_ent_info | Banned | - |
sar_ent_slot_serial | Banned | - |
sar_exit | Functional | - |
sar_expand | Inherited | - |
sar_export_stats | Non-functional | - |
sar_fast_load_preset | Non-functional | - |
sar_fcps_* | Banned | - |
sar_find_client_class | Banned | - |
sar_find_ent | Banned | - |
sar_find_ents | Banned | - |
sar_find_server_class | Banned | - |
sar_fix_reloaded_cheats | Non-functional | - |
sar_font_* | Non-functional | - |
sar_force_fov | Functional | 45 .. 140 |
sar_force_qc | Banned | - |
sar_force_viewmodel_fov | Functional | - |
sar_function | Non-functional | - |
sar_function_run | Inherited | - |
sar_geteyepos | Banned | - |
sar_getpos | Banned | - |
sar_give_betsrighter | Banned | - |
sar_give_fly | Banned | - |
sar_groundframes_* | Non-functional | - |
sar_hud_* | Functional | - |
sar_hud_ent_slot_serial | Banned | - |
sar_hud_eyeoffset | Banned | - |
sar_hud_inspection | Banned | - |
sar_hud_precision | Functional | 0 .. 6 |
sar_hud_tbeam | Banned | - |
sar_hud_tbeam_count | Banned | - |
sar_hud_trace | Banned | - |
sar_hud_velocity_precision | Functional | 0 .. 2 |
sar_ihud_* | Non-functional | - |
sar_import_stats | Non-functional | - |
sar_inspection_* | Banned | - |
sar_jumpboost | Banned | - |
sar_list_client_classes | Banned | - |
sar_list_ents | Banned | - |
sar_list_server_classes | Banned | - |
sar_load_delay | Non-functional | - |
sar_loads_norender | Non-functional | - |
sar_loads_uncap | Non-functional | - |
sar_lphud_* | Non-functional | - |
sar_minimap_* | Non-functional | - |
sar_mtrigger_legacy_* | Non-functional | - |
sar_nextdemo | Banned | - |
sar_on_* | Non-functional | Non-functional commands only |
sar_paint_reseed | Banned | - |
sar_patch_bhop | Banned | - |
sar_patch_cfg | Banned | - |
sar_pause_at | Banned | - |
sar_pause_for | Banned | - |
sar_pip_align | Non-functional | - |
sar_portalgun_hud_* | Banned | - |
sar_portals_thru_portals | Banned | - |
sar_pp_hud_* | Banned | - |
sar_prevent_ehm | Non-functional | - |
sar_prevent_mat_snapshot_recompute | Non-functional | - |
sar_print_stats | Non-functional | - |
sar_quickhud_* | Non-functional | Pre-defined allowed values, see above |
sar_record_at_* | Non-functional | - |
sar_record_mkdir | Non-functional | - |
sar_record_prefix | Non-functional | - |
sar_rename | Non-functional | - |
sar_render_* | Banned | - |
sar_rng_* | Banned | - |
sar_ruler_* | Banned | - |
sar_scrollspeed | Non-functional | - |
sar_seamshot_finder | Banned | - |
sar_session | Non-functional | - |
sar_show_entinp | Banned | - |
sar_skiptodemo | Banned | - |
sar_speedrun_* | Non-functional | - |
sar_sr_hud_* | Non-functional | - |
sar_startdemos | Banned | - |
sar_startdemosfolder | Banned | - |
sar_statcounter_filepath | Non-functional | - |
sar_stats_* | Non-functional | - |
sar_stitcher_* | Banned | - |
sar_stop | Functional | - |
sar_strafe_quality_* | Non-functional | - |
sar_strafesync_* | Non-functional | - |
sar_sum_* | Non-functional | - |
sar_tas_* | Banned | - |
sar_teleport | Banned | - |
sar_teleport_setpos | Non-functional | - |
sar_tick_debug | Banned | - |
sar_time_demo | Banned | - |
sar_time_demo_dev | Banned | - |
sar_time_demos | Banned | - |
sar_timer_* | Non-functional | - |
sar_toast_* | Non-functional | - |
sar_toast_create | Non-functional | - |
sar_togglewait | Banned | - |
sar_trace_* | Banned | - |
sar_update | Non-functional | - |
sar_velocitygraph_* | Non-functional | - |
sar_vphys_hud_* | Banned | - |
sar_vphys_setangle | Banned | - |
sar_vphys_setasleep | Banned | - |
sar_vphys_setgravity | Banned | - |
sar_vphys_setspin | Banned | - |
sar_workshop_* | Banned | - |
save | Functional | - |
save_history_count | Non-functional | - |
save_screenshot | Non-functional | - |
say | Non-functional | - |
sensitivity | Functional | - |
seq | Non-functional | Non-functional commands only |
stopvideos (in a cutscene video) | Action | - |
stopvideos (in coop level transition) | Non-functional | - |
sv_zoom_stop_movement_threashold | Functional | - |
sv_zoom_stop_time_threashold | Functional | - |
svar_* | Non-functional | - |
ui_loadingscreen_fadein_time | Non-functional | - |
ui_loadingscreen_mintransition_time | Non-functional | - |
ui_loadingscreen_transition_time | Non-functional | - |
ui_transition_effect | Non-functional | - |
viewmodel_offset_x | Non-functional | - |
viewmodel_offset_y | Non-functional | - |
viewmodel_offset_z | Non-functional | - |
vm_debug | Functional | - |
wait | Non-functional | Non-functional commands only |
wait_for | Non-functional | Non-functional commands only |
wait_mode | Non-functional | - |
wait_persist_across_loads | Non-functional | - |
wait_to | Non-functional | Non-functional commands only |
zoom_sensitivity_ratio | Functional | - |
Scripting
Any time a key is pressed or released, an arbitrary amount of allowed commands may be
executed. These may include up to one action command. Any functional commands in the
sequence must be executed without delay. For other commands, delay is permitted, e.g.
through SAR's hwait
command. Note that scrolling the mouse wheel a single tick
counts as pressing and immediately releasing the "key" of the mouse wheel.
Automation of commands may be achieved through mechanisms like the sar_on_load
command. This is limited to non-functional commands during the run; however, note
that in Challenge Mode, automatically running functional commands is allowed provided
the command could have been performed manually prior to the run with the same effect.
Examples of this include changing sensitivity
or mat_fullbright
.
Pre-Run Setup
It is not allowed to perform any setup for a glitch or exploit before the run. For
instance, you cannot use map logic or otherwise to modify the value of
sv_allow_mobile_portals
before the run, nor can you load into maps so as to set up
EHM, nor prepare CM Wrong Warp.
External Modifications
Currently, the only permitted external modification for use in runs is SourceAutoRecord (SAR) on the latest full release or a later pre-release.
Custom builds of SAR are not allowed - only the releases from the official GitHub repository may be used. Other external modifications, such as game plugins or code injectors, are not allowed. Runs performed with SAR pre-releases may be retroactively banned if a pre-release is found to provide some advantage. While unlikely, you acknowledge that by using a SAR pre-release you are putting your runs at risk. When a new full release of SAR is made available, there is a grace period of 1 week in which the previous full release is still allowed.
Exceptions may be made on a case-by-case basis: if you think you have a legitimate case for using an external modification which isn't listed here, consult a moderator for the category you're running.
Asset Modifications
We have strict rules regarding which assets are allowed to be changed from their defaults during runs, which (unless otherwise specified) are shared across all games and categories. These rules vary depending on the kind of asset being modified.
General Rules
Any asset modifications are subject to being grounds for the rejection or removal of any run on speedrun.com or the cm boards.
When assets are required to be submitted alongside a run, these assets must adhere to the TOS of all platforms involved in your submission, including both the site the run is submitted to and any sites linked from the submission.
Editing binary files (including .DLL, .EXE, .SO, A.OUT, .DYLIB, or .APP) files which are present in the game or Steam directory to modify an asset is not allowed.
Modpacks, which are curated by the moderators, are allowed to be used in runs without restrictions. These modpacks can be found in the #resources channel of the P2SR discord. Other than modpacks, you can only modify the assets listed on this Google Doc.
OOB
Some categories are marked as "inbounds", which essentially means the player and all portals and props must stay inbounds at all times. More precisely, we say that the player, all portal origins, and all prop origins must remain inbounds at all times, except where the game requires otherwise (e.g. certain level transitions place the player temporarily OOB).
Exceptions can be made to this rule in accidental cases where the rule is briefly broken. In particular, if an extreme eye offset from a portal transition causes the player's eye to momentarily peek OOB, but this is not abused, it would not be grounds for even a high-level run to be rejected.
Cooperative Play
In any online cooperative run, both players (not just the host) must provide appropriate proof for the run. The proof requirements are unaffected for local splitscreen runs.
The network conditions used in online coop are regulated. Any use of packet loss which
benefits the player is banned. Ping-based advantages, however, are allowed - you may
artificially increase ping through external means, such as a VPN, but not through
the net_fakelag
command. Similarly, net_fakenoise
, net_fakejitter
, and
net_fakeloss
are not allowed under any circumstances.
Miscellaneous
- You cannot modify the game's tickrate, or any other part of the game unless explicitly allowed.
- You cannot play on alt accounts unless given permission by a category moderator.
- You cannot allow your FPS to increase over 1000 (
fps_max
can be used to limit it) or have it consistently fall under 30. - Entity Handle Misinterpretation is banned, even if performed accidentally.
sar_prevent_ehm
is recommended. - Custom vscripts may not be present in the game's directory, even if not advantageous or not used during the run. Base game vscripts may not be modified.
Timing
Most runs use demo time for timing (the main notable exception is Challenge Mode, which
uses its integrated timer). Even when not recording demos, SAR's timer perfectly
emulates demo timing (except in CM where it emulates the integrated timer), so is
recommended for use most of the time. For video submissions, which are required to have
a timer visible on-screen, the timer HUD from sar_sr_hud
may be used. Alternatively,
SAR's integrated timer may be linked to external speedrun timers such as LiveSplit or
adrift, and these may be overlaid on the video.
If using pause abuse (in a category where it is allowed), the pauses in question must be
timed. This can be done using sar_speedrun_time_pauses 1
, or manually with video
evidence.
To ensure the run is not affected by network conditions, cooperative runs are timed differently. The inter-level timing standard for coop is defined per-game.
Proof Standards
Unless otherwise noted in category rules, all runs most have some form of proof associated with them, which could be in the form of a video or of demo(s). Most categories will require demo proof for runs above a certain rank. Demos are generally encouraged over videos as they have several tangible advantages.
Videos submitted as proof must have an accepted timer visible on the screen. They must always be submitted as a single continuous video, and must not have any severe quality or framerate issues which impact viewability.
Demos must be submitted for every segment of the run, in the correct order, with none
missing. You must start recording demos before the run begins where possible, or
otherwise as soon as you can - it is recommended to use sar_record_at
to achieve this.
On runs with multiple segments, demos must be recorded across loads - this is normally
expected to be achieved via the sar_autorecord
command, but categories may define
different methods.
For any category other than Challenge Mode, any custom .vpk
files active
during the run must be included in the run submission. They can be uploaded to a
site such as Google Drive along with the demo files.
Games
Portal 2
General
When running a non-splitscreen cooperative category, progress must be entirely reset
before every run. It is recommended to do this using sar_coop_reset_progress
.
Alternatively, it can be achieved by running mp_coop_mark_all_maps_incomplete
and
mp_coop_lock_all_taunts
, followed by returning to the main menu and re-inviting
your partner.
Timing
The singleplayer campaign is timed as follows:
- Timing begins on the tick the player gains control at the start of Container Ride,
on the
camera_intro.TeleportToView
entity input. - Alternatively, Vault Save may be used. In this case, timing starts on the
@glados.RunScriptCode(GladosRelaxationVaultPowerUp())
entity input with an offset of 18980 ticks. - Alternatively, Container Ride Save may be used. In this case, timing starts on the
camera_1.TeleportPlayerToProxy
entity input with an offset of 16868 ticks. - Timing ends on the tick the player shoots the moon in Finale 4, on the
@glados.RunScriptCode(BBPortalPlaced())
entity input. - Dying during the end cutscene is allowed since the run is over.
The cooperative campaign is timed as follows:
- Each level begins timing when the
ss_force_primary_fullscreen
command is first executed afterstop_transition_videos_fadeout
. - Each level ends timing when the
playvideo_end_level_transition
command is executed. - Timing for the run begins when the players are teleported to the droppers, on the
teleport_start.Enable
entity input. - Timing for runs ending in Course 5 ends when the cutscene starts playing, on
the
vault-movie_outro.PlayMovieForAllPlayers
entity input. - Timing for runs ending in Course 6 ends when the cutscene starts playing, on
the
movie_outro.PlayMovieForAllPlayers
entity input.
Unless otherwise specified, partial campaign runs (e.g. chapter runs) are timed as a subset of the relevant campaign, so e.g. Chapter 9 runs begin timing as soon as the player loads into Finale 1 and end timing when the player shoots the moon.
Challenge Mode
Complete individual maps from the singleplayer or coop campaign in Challenge Mode.OOB: YesSLA: NoPause Abuse: NoDemo Requirement: 200thLeaderboardModerators: Betsruner, Bexc, Daniel, Rex, Xinera
Ranks above 200 do not require proof.
sv_player_funnel_into_portals 0
is allowed. sar_pause_at
may be set at 0 with any value of sar_pause_for
.Inbounds No SLA
Complete the entire singleplayer campaign.OOB: NoSLA: NoPause Abuse: YesDemo Requirement: 200thLeaderboardModerators: Betsruner, BiSaXa, cosine, RealCreative
any% (Singleplayer)
Complete the entire singleplayer campaign.OOB: YesSLA: YesPause Abuse: YesDemo Requirement: 200thLeaderboardModerators: Betsruner, BiSaXa, cosine, RealCreative
sar_cm_rightwarp
is not allowed.All Main Courses
Complete courses 1-5 of the cooperative campaign, without skipping any.OOB: YesSLA: YesPause Abuse: NoDemo Requirement: 200th (Both partners submit for top 50)LeaderboardModerators: Betsruner, BiSaXa, cosine, RealCreative
All Courses
Complete all courses (1-6) of the cooperative campaign, without skipping any.OOB: YesSLA: YesPause Abuse: NoDemo Requirement: 200thLeaderboardModerators: Betsruner, BiSaXa, cosine, RealCreative
Course 6 may be completed at any point in the run.
any% (Cooperative)
Complete up to the end of course 5 of the cooperative campaign.OOB: YesSLA: YesPause Abuse: NoDemo Requirement: 200thLeaderboardModerators: Betsruner, BiSaXa, cosine, RealCreative
You may use glitches to skip courses and maps.
Solo Co-op
Complete courses 1-5 of the cooperative campaign, without skipping any, alone in splitscreen.OOB: YesSLA: YesPause Abuse: NoDemo Requirement: 200thLeaderboardModerators: Betsruner, BiSaXa, cosine, RealCreative
in_forceuser
may be changed, for which sv_cheats 1
is required. All other command restrictions remain unchanged.Most Recent Community Chambers
Complete the specified amount of community maps from the Most Recent option.OOB: NoSLA: NoPause Abuse: NoDemo Requirement: N/ALeaderboardModerators: Betsruner, BiSaXa, phunkpai
Video proof is required. You can skip levels. You cannot play your own maps or maps you have previously seen.
Co-op any% EHM
Complete up to the end of course 5 of the cooperative campaign.OOB: YesSLA: YesPause Abuse: NoDemo Requirement: 200thLeaderboardModerators: Betsruner, BiSaXa, phunkpai
You may use glitches to skip courses and maps. EHM is allowed.
Portal Placement Never Fail
Complete the specified campaign according to the standard ruleset for the underlying category.OOB: -SLA: -Pause Abuse: YesDemo Requirement: All runsLeaderboardModerators: Betsruner, BiSaXa, phunkpai
You may use
sv_portal_placement_never_fail 1
(which requires sv_cheats 1
). All other rules come from the underlying category (Inbounds No SLA, AMC, Co-op any%, or Solo Co-op).Singleplayer 100 Portals
Complete the entire singleplayer campaign within 100 portals.OOB: NoSLA: NoPause Abuse: YesDemo Requirement: 200thLeaderboardModerators: Betsruner, BiSaXa, phunkpai
You must place no more than 100 portals during the run.
sar_lphud
can be used to track portal shots.Co-op 69 Portals
Complete all courses (1-6) of the cooperative campaign within 69 portals.OOB: YesSLA: YesPause Abuse: NoDemo Requirement: 200thLeaderboardModerators: Betsruner, BiSaXa, phunkpai
You must place no more than 69 portals during the run.
sar_lphud
can be used to track portal shots.No Major Glitches
Complete the entire singleplayer campaign.OOB: NoSLA: NoPause Abuse: NoDemo Requirement: 5thLeaderboardModerators: Betsruner, BiSaXa, phunkpai
You must complete the game without the use of a major glitch. A list of major glitches can be found here
Portal 2 Speedrun Mod
Timing
Most categories are timed as follows:
- Timing begins on the tick the player gains control in Container Ride, on the
camera_intro.TeleportToView
entity input. - Timing ends on the tick the player shoots the moon in Finale 4, on the
@glados.RunScriptMode(BBPortalPlaced())
entity input.
Reverse Mod is timed as follows:
- Timing begins on the tick the player gains control in Finale 4, on the
ending_vehicle.ExitVehicle
entity input. - Timing ends on the tick the player activates the bed in Container Ride, on the
rev_sleep_button.Use
entity input.
Normal Mode
Complete the game in Normal Mode.OOB: NoSLA: NoPause Abuse: YesDemo Requirement: 200thLeaderboardModerators: Betsruner, BiSaXa, cosine, RealCreative
Celeste Mode
Complete the game in Celeste Mode.OOB: NoSLA: NoPause Abuse: YesDemo Requirement: 10thLeaderboardModerators: Betsruner, BiSaXa, cosine, RealCreative
Fog%
Complete the game in Fog%.OOB: NoSLA: NoPause Abuse: YesDemo Requirement: 200thLeaderboardModerators: Betsruner, BiSaXa, cosine, RealCreative
mat_ambient_light_r/g/b
and mat_fullbright
are banned. On top of the demo requirement, video evidence is required for all runs.Reverse%
Complete the game in Reverse Mod.OOB: NoSLA: NoPause Abuse: YesDemo Requirement: 200thLeaderboardModerators: Betsruner, BiSaXa, cosine, RealCreative
Floor Is Lava
Complete the game in the Floor is Lava ModeOOB: NoSLA: NoPause Abuse: YesDemo Requirement: All runsLeaderboardModerators: Betsruner, BiSaXa, cosine, RealCreative
The Ultimate Speedrun
Complete the game using extra commands to emulate CS:S styled movementOOB: NoSLA: NoPause Abuse: YesDemo Requirement: All runsLeaderboardModerators: Betsruner, BiSaXa, phunkpai
Runs must be done with
sv_cheats 1
, sv_airaccelerate 1000
, sar_aircontrol 2
, sar_autojump 1
, portalgun_fire_delay 0
. Runs can also use portalgun_held_button_fire_fire_delay 0 or 0.50
.Portal Stories: Mel
General
Demos are not recorded in any Mel category, since they cause some maps to break. SAR or SourceSplit must be used for accurate timing.
Timing
- Timing begins on the tick the player gains control in the tram, on the
tramstart_relay.EnableRefire
entity input. - Timing ends on the tick the ending cutscene is activated in Finale, on the
soundscape.Kill
entity input.
Story Mode - Inbounds
Complete the whole campaign in story mode.OOB: NoSLA: YesPause Abuse: YesDemo Requirement: N/ALeaderboardModerators: Betsruner, Nidboj132
Story Mode - OOB
Complete the whole campaign in story mode.OOB: YesSLA: YesPause Abuse: YesDemo Requirement: N/ALeaderboardModerators: Betsruner, Nidboj132
Advanced Mode - Inbounds
Complete the whole campaign in advanced mode.OOB: NoSLA: YesPause Abuse: YesDemo Requirement: N/ALeaderboardModerators: Betsruner, Nidboj132
Advanced Mode - OOB
Complete the whole campaign in advanced mode.OOB: YesSLA: YesPause Abuse: YesDemo Requirement: N/ALeaderboardModerators: Betsruner, Nidboj132
Challenge Mode
Complete individual maps from the singleplayer or coop campaign in Challenge Mode.OOB: YesSLA: NoPause Abuse: NoDemo Requirement: 200thLeaderboardModerators: Betsruner, Bexc, Daniel, Rex, Xinera
sar_pause_at
may be set at 0 with any value of sar_pause_for
.Portal Reloaded
General
All Portal Reloaded categories ban the developer 1
command due to an unnatural
advantage it provides on some maps.
Timing
- Timing begins on the tick the player gains control in the second map, on the
announcer1.Trigger
entity input. - Alternatively, the Tube Ride Save can be used. In this case, timing starts on
the
@wportal1.Open
entity input with an offset of 2394 ticks. - Timing ends on the tick the player loses control when being sucked into the
tube, on the
finale-finale_vc.Trigger
entity input. - Alternatively, for the escape ending, timing ends on the tick when the
elevator doors close, on the
finale-escape_ending.EnableRefire
entity input.
No SLA
Complete the entire campaign with either ending.OOB: NoSLA: NoPause Abuse: YesDemo Requirement: 25thLeaderboardModerators: Betsruner, BiSaXa, cosine
developer 1
is banned.SLA
Complete the entire campaign with either ending.OOB: YesSLA: YesPause Abuse: YesDemo Requirement: 25thLeaderboardModerators: Betsruner, BiSaXa, cosine
developer 1
is banned.Coop
Complete the entire coop campaign.OOB: YesSLA: YesPause Abuse: NoDemo Requirement: All runsLeaderboardModerators: Betsruner, BiSaXa, cosine
developer 1
is banned.Aperture Tag
Timing
- Timing begins on the tick the crosshair appears, on the
tele_out_shower.Enable
entity input. - Timing ends on the tick the credits appear, on the
credits_video.PlayMovie
entity input. - Alternatively, for the good ending, timing ends on the tick the elevator door
closes, on the
ele_exit_door.Close
entity input.
Inbounds No SLA
Complete the entire campaign.OOB: NoSLA: NoPause Abuse: YesDemo Requirement: 10thLeaderboardModerators: Betsruner, Fridge
Speedrun Mod
Complete the entire campaign using the speedrun mod maps."OOB: NoSLA: NoPause Abuse: YesDemo Requirement: All runsLeaderboardModerators: Betsruner, Fridge
This category adopts the Inbounds No SLA ruleset
Portal Revolution
General
Portal Revolution does not support SAR. Video recording is the main method
for submitting runs. Demos can be recorded with demo_autorecord 1
and
record demoname
at the start of the run and stop
at the end of the run,
however they are not necessary.
Timing
- Timing begins when the crosshair appears.
- Timing ends when the screen fades to white.
Inbounds SLA - No CFG
Complete the entire campaign.OOB: NoSLA: YesPause Abuse: YesDemo Requirement: NoLeaderboardModerators: Betsruner, cosine, RealCreative
Crouch Fly Glitch is not allowed.
Inbounds SLA - CFG
Complete the entire campaign.OOB: NoSLA: YesPause Abuse: YesDemo Requirement: NoLeaderboardModerators: Betsruner, cosine, RealCreative
Any%
Complete the entire campaignOOB: YesSLA: YesPause Abuse: YesDemo Requirement: NoLeaderboardModerators: Betsruner, cosine, RealCreative
Sourcemods
Timing
- Timing begins when you have gained control of the player.
- The ending timing will be listed with the category.
- Exceptions will be listed if there are any.
General Rules
Developer 1
cannot be used to make the player move early.
Whichever categories are present will adopt their respective rulesets from the basegame categories.
Aperture Ireland - Any%
Complete the single player campaignOOB: YesSLA: YesPause Abuse: YesDemo Requirement: All runsLeaderboardModerators: Fridge, Dreadnox
Run ends on the final cutscene starting
Aperture Ireland - Inbounds SLA
Complete the single player campaignOOB: NoSLA: YesPause Abuse: YesDemo Requirement: All runsLeaderboardModerators: Fridge, Dreadnox
Run ends on the final cutscene starting
Designed For Danger - Inbounds No SLA
Complete the single player campaignOOB: NoSLA: NoPause Abuse: YesDemo Requirement: All runsLeaderboardModerators: Fridge, Betsruner, Infrabread, Msushi
Run ends on the final cutscene starting
Designed For Danger - Any%
Complete the single player campaignOOB: YesSLA: YesPause Abuse: YesDemo Requirement: All runsLeaderboardModerators: Fridge, Betsruner, Infrabread, Msushi
Run ends on the final cutscene starting
Welcome Back - Inbounds No SLA
Complete the single player campaignOOB: NoSLA: NoPause Abuse: YesDemo Requirement: All runsLeaderboardModerators: Betsruner, Fridge, Dreadnox
Runs ends on the fadeout of the final level
Memories - Any%
Complete the single player campaignOOB: YesSLA: YesPause Abuse: YesDemo Requirement: All runsLeaderboardModerators: limga, Minecraft, Spidda
Runs ends on the fadeout of the final level
Memories - 100%
Complete the single player campaign while collecting all secretsOOB: YesSLA: YesPause Abuse: YesDemo Requirement: All runsLeaderboardModerators: limga, Minecraft, Spidda
Runs ends on the fadeout of the final level
Dilapidation - Beat the Game
Complete the single player campaignOOB: YesSLA: YesPause Abuse: YesDemo Requirement: All runsLeaderboardModerators: Betsruner, NeKz, Zypeh
Runs ends on the fadeout of the final level
Dilapidation - Inbounds No SLA
Complete the single player campaignOOB: NoSLA: NoPause Abuse: YesDemo Requirement: All runsLeaderboardModerators: Betsruner, NeKz, Zypeh
Runs ends on the fadeout of the final level
Thinking With Time Machine - Inbounds SLA
Complete the single player campaignOOB: NoSLA: YesPause Abuse: YesDemo Requirement: All runsLeaderboardModerators: Betsruner, PerOculos, TheSwagatron, Znernicus, BiiWiX, Mikael_, Fridge, Zypeh
Run ends on the final cutscene starting
Thinking With Time Machine - Any%
Complete the single player campaignOOB: YesSLA: YesPause Abuse: YesDemo Requirement: All runsLeaderboardModerators: Betsruner, PerOculos, TheSwagatron, Znernicus, BiiWiX, Mikael_, Fridge, Zypeh
Run ends on the final cutscene starting
P1 Done P2 - Inbounds No SLA
Complete the single player campaignOOB: NoSLA: NoPause Abuse: YesDemo Requirement: All runsLeaderboardModerators: Betsruner, PerOculos, PistonMiner, Znernicus, Jaio, PsYcHo962, Fridge
Timing ends on the last core being destroyed.
P1 Done P2 - Any%
Complete the single player campaignOOB: YesSLA: YesPause Abuse: YesDemo Requirement: All runsLeaderboardModerators: Betsruner, PerOculos, PistonMiner, Znernicus, Jaio, PsYcHo962, Fridge
Timing ends on the last core being destroyed.
Portal: After Hours - Inbounds No SLA
Complete the single player campaignOOB: NoSLA: NoPause Abuse: YesDemo Requirement: All runsLeaderboardModerators: Betsruner, Fridge
Timing ends on the final cutscene starting
Mind Escape - Inbounds SLA
Complete the single player campaignOOB: NoSLA: YesPause Abuse: YesDemo Requirement: All runsLeaderboardModerators: Betsruner, Infrabread, KiloOnline, Fridge
Timing ends on interacting the door to the van, starting the final cutscene.
Mind Escape - Any%
Complete the single player campaignOOB: YesSLA: YesPause Abuse: YesDemo Requirement: All runsLeaderboardModerators: Betsruner, Infrabread, KiloOnline, Fridge
Timing ends on interacting the door to the van, starting the final cutscene.
Portal: Unity Reboot - Inbounds No SLA
Complete the single player campaignOOB: NoSLA: NoPause Abuse: YesDemo Requirement: All runsLeaderboardModerators: Infrabread, Msushi, Fridge
Timing ends on the fadeout of the final level
Portal: Unity Reboot - Any%
Complete the single player campaignOOB: YesSLA: YesPause Abuse: YesDemo Requirement: All runsLeaderboardModerators: Infrabread, Msushi, Fridge
Timing ends on the fadeout of the final level