Source Speedrun ToolsBETA!

SST is a sorta-still-in-de­vel­op­ment gen­er­al-pur­pose speedrun­ning plu­gin for Source En­gine games. Cur­rently it mainly sup­ports Left 4 Dead 1 and 2 along with Portal 1, with plans to ex­pand sup­port for oth­er games over time.

It’s primar­ily been de­veloped by my­self, with a lot of help from bill, and oth­er code con­tri­bu­tions and help­ful test­ing done by aciidz and wozniak. Ad­di­tion­ally, it builds on count­less hours of re­verse en­gin­eer­ing work done by many oth­er smart people who hang out in vari­ous com­munit­ies:

We’re a few beta ver­sions in and still want to add some stuff be­fore call­ing it a full re­lease, but SST is already very stable and packed with many use­ful fea­tures for speedrun­ners.

Copyright and disclaimer

SST was made by sev­er­al people, all of whom de­serve cred­it for their work. If you want to send cop­ies of SST to oth­ers or re­use any of its code, please refer to the LICENCE file in­cluded in the down­load to know what you can and can­not do, leg­ally speak­ing.

Also, keep in mind that this soft­ware has ab­so­lutely NO WAR­RANTY! There’s no reas­on it should break any­thing, but that’s not a leg­al guar­an­tee. De­tails of that are also writ­ten out in ex­cru­ci­at­ing le­galese in the in­cluded LICENCE file. You’re as­sumed to have read that le­galese be­fore at­tempt­ing to use SST for any pur­pose!

Gimme the plugin already!

The cur­rent BETA ver­sion of SST is 0.6, a.k.a. Scar­lett Sues Tech­bros. The in­struc­tions be­low cov­er set­ting it up with auto-up­dates on Win­dows. SST doesn’t cur­rently sup­port Linux, but hope­fully will some day.

You can find the list of changes made in v0.6 here.

For Left 4 Dead series: The old game ver­sions provided with­in the com­munity have SST already bundled in, so you’ll al­ways have the latest up­dated ver­sion of SST. If, for some reas­on, you need to run the new­est Steam ver­sion of the game, you can fol­low the manu­al auto-up­date in­struc­tions be­low.

For Portal 1: The cur­rent Source Un­pack (build 5135) down­load used by the speedrun­ning com­munity has SST bundled in, so you don't need to do any­thing un­less you have a dif­fer­ent copy of the game (such as 3420), or want to run on the Steam ver­sion for some reas­on. In those cases, see the manu­al in­struc­tions be­low.

For oth­er games (manu­al setup): For now, you need to set up the up­date script your­self. Down­load that here, and then ex­tract it into an empty dir­ect­ory (it will splat a couple of oth­er files next to it­self when run).

Once that is set up, you can either run it manu­ally to bring SST up-to-date, or hook it into the launch script for your game. How ex­actly to do that de­pends on the game; you will be best ask­ing my­self or an­oth­er tech­nic­al per­son for help. That is the best way to set it up though be­cause it en­sures you al­ways have the latest ver­sion of SST, and shows a changelog in con­sole whenev­er an up­date is down­loaded so you won't miss out on new stuff.

Release archives and sources

A dir­ect link to SST v0.6 is here (note that this is ac­tu­ally a hot­fix build as the ini­tial 0.6 re­lease briefly broke something in Portal 5135). Keep in mind that it is strongly re­com­men­ded to use the auto-up­date script above for nor­mal use of the plu­gin.

Older builds are plonked on the download site for now. Note that the old ver­sions have nu­mer­ous bugs so you really shouldn’t be us­ing these un­less you have a very spe­cif­ic reas­on. They’re mostly kept around as a mat­ter of his­tor­ic­al re­cord.

For techie people:If you want to build SST from source code, or fiddle with the code your­self, the de­vel­op­ment re­pos­it­ory is pub­lished here. You can git clone it from that URL too. If you want to clone over oth­er pro­to­cols or get a slightly fan­ci­er browser, it’s also mirrored on both GitLab and GitHub. This re­lease is built from Git tag v0.6-HOTFIX (which points at com­mit 604dbdc53b34c25e53b19e37ab33fc09cef9111e). Important: you must be sure to set up Git cor­rectly with git config --global core.eol lf and git config --global core.autocrlf false pri­or to clon­ing on Win­dows, or stuff will break. The de­fault Win­dows Git con­fig­ur­a­tion is simply com­pletely broken. Once you have the code on your ma­chine, in theory you should be able to pro­duce a bit-for-bit identic­al copy of the DLL us­ing Clang from LLVM 16.0.5 and ver­sion 10.0.22000.0 of the Win­dows 10 SDK. Good luck!

Adding the plugin to your game

Be­fore you do any­thing else, add -insecure to your game launch op­tions, and make sure that when you open a map, it says “VAC se­cure mode dis­abled” some­where in the de­veloper con­sole. WARN­ING: if you skip this step, you may run the risk of get­ting VAC-banned! Don’t skip this step! Most single play­er games like Portal are fine, but if you don’t know for sure wheth­er a game is VAC-en­abled then please err on the side of cau­tion.

De­pend­ing on the game en­gine ver­sion, your game may load plu­gins from either the mod dir­ect­ory (e.g. hl2, portal, or left4dead2) or the bin dir­ect­ory that ex­ists along­side the game ex­ecut­able.

To keep things reas­on­ably simple, you can keep SST in a folder out­side of both of those, and then the same re­l­at­ive path will just hap­pen to work either way. For ex­ample, if you have cre­ated a folder named SST next to your game ex­ecut­able, and set up and run the up­date script in there, you should then be able to type plugin_load ../SST/sst in the de­veloper con­sole to load up the plu­gin.

General features and usage

Auto­load setup: After load­ing the plu­gin once, type sst_autoload_enable in the con­sole to quickly re­gister the plu­gin to start along with the game. Do­ing this en­sures that saved set­tings for the plu­gin don’t get lost when the game is next launched, and that cer­tain fixes for game bugs are cor­rectly and re­li­ably ap­plied. If you ever need to re­vert this, though, typ­ing sst_autoload_disable will put everything back to nor­mal.

Bet­ter demo re­cord­ing: Once the plu­gin: Once the plu­gin is loaded, it be­comes pos­sible by de­fault to re­cord a demo (record basefilename in con­sole) and then have the game keep re­cord­ing demos un­til the heat death of the uni­verse (or un­til you type stop). This can be turned off with sst_autorecord 0.

Auto­jump: Set sst_autojump 1 to get smooth, per­fect bunny hops by simply hold­ing down your jump but­ton. Very use­ful for fig­ur­ing out new routes that would oth­er­wise be dif­fi­cult to fig­ure out due to lack of skill (but ob­vi­ously should not be used for nor­mal speedruns).

Uni­ver­sal raw mouse in­put: Mod­ern Source games have m_rawinput 1 for prop­er raw mouse in­put, but many of the older ver­sions used by speedrun­ners don’t. SST re­im­ple­ments this op­tion if re­quired for con­sist­ent mouse in­put across the board. Since it uses the same con­sole vari­able, your con­fig­ur­a­tion will seam­lessly carry over between old and new ver­sions as well.

Raw mouse in­put scal­ing: When raw in­put is en­abled, it is pos­sible to use sst_mouse_factor to in­crease the num­ber of in­cre­ments from the hard­ware mouse sensor ne­ces­sary to move by one angle step in-game. This is use­ful for view-snap tricks which re­quire set­ting a very high in-game sens­it­iv­ity but mov­ing the ac­tu­al mouse by a very small amount.

Ali­as man­age­ment: Nor­mally com­mand ali­ases can­not be re­moved un­til the game is re­star­ted. SST adds sst_alias_remove and sst_alias_clear in or­der to make ali­as man­age­ment more con­veni­ent.

Cus­tom crosshair over­lay: It is pos­sible in sev­er­al sup­por­ted games, in­clud­ing mos­tuse­fully the Left 4 Dead series, to set sst_xhair 1 (and most likely crosshair 0) and get a cus­tom crosshair which is much more con­fig­ur­able in ap­pear­ance than the stand­ard one. Use sst_xhair_colour RRGGBB[AA] to set any hex col­our code you want, and sst_xhair_size, sst_xhair_thickness, sst_xhair_gap, sst_xhair_dot, and sst_xhair_outline to con­trol its di­men­sions, sim­il­ar to CS:GO and CS2.

Re­in­stated miss­ing con­sole com­mands: A bunch of oth­er handy things have been ad­ded back in as well, either by ex­pos­ing them when hid­den or by totally re­im­ple­ment­ing things that are miss­ing:

Game-specific features

Left 4 Dead 1 & 2

Cheats in L4D2 lob­bies: Nor­mally, for whatever reas­on, Left 4 Dead 2 doesn’t let people use sv_cheats in a self-hos­ted mul­ti­play­er lobby (or a single-play­er game star­ted from the menu). SST en­ables this, mak­ing it much more con­veni­ent to prac­tice in between run at­tempts, without hav­ing to port-for­ward and send IPs to people.

Warp test­ing: Type (or bind) sst_l4d_testwarp to sim­u­late an idle warp to your­self. This al­lows co-op routes to be found much more quickly.

Fast run re­set­ting: Type (or bind) sst_l4d_quickreset to im­me­di­ately re­turn to the start of the cur­rent cam­paign. Op­tion­ally, this com­mand can take a cam­paign ID such as L4D2C2 in or­der to start the run at that cam­paign, re­gard­less of which map is cur­rently loaded. This fea­ture will also fast-for­ward past cutscenes by de­fault; this is con­figured us­ing sst_l4d_quickreset_fastfwd . On cam­paigns with item spawns vis­ible dur­ing cutscenes, such as Swamp Fever, the fast-for­ward will briefly slow down to show those spots. The dur­a­tion of this slow­down can be con­figured us­ing sst_l4d_quickreset_peektime. It is also pos­sible to skip the re­mainder of a cutscene without stop­ping by bind­ing a key to the sst_l4d_quickreset_continuecom­mand.

Graph­ics bug fixes: SST pre­vents mul­ticore ren­der­ing from get­ting re­set in cer­tain situ­ations in older ver­sions of L4D2, as well as fixes the bright­ness set­ting not get­ting saved in L4D1. Also, those play­ing older builds of L4D2 on In­tel graph­ics hard­ware will no longer ex­per­i­ence the ren­der­ing is­sue where everything ap­pears too dark.

Nag dia­log re­mov­al: Later ver­sions of Left 4 Dead 2 pop up an an­noy­ing mes­sage whenev­er a plu­gin is loaded. SST does some trick­ery to avoid this.


Gun/crosshair col­our cus­tom­isa­tion: Use the sst_portal_colourN cvars to change the col­ours of the crosshair and the little tube thingy in the front part of the gun when grabbing items and shoot­ing the two dif­fer­ent portals. Cur­rently only works in 3420, 5135, and some older Steam ver­sion — the cur­rent Steam ver­sion is on the to-do list.

En­hanced FOV set­tings: The play­er’s FOV can be set any­where in the range of 75–120 with fov_desired in any ver­sion of the game. Even though that’s dumb. It’s What The People Want!

Thanks, and have fun!