New techniques? Quick gauss and movement stalling


Not sure if anyone is aware of these two techniques. Perhaps some of you have discovered them long ago.

Quick gauss

Quick gauss is not the same as the gauss fastfire used by quadrazid for nihilanth. The method is similar, except with very different results. At the time of writing, it doesn’t work Bunnymod Pro, HLSP Bunny or rofi’s DLL, but it does work with the original WON WON version and unmodded steam version. Of course, those mods can be easily modified to make this technique work again.


[ol][li]initiate 0.5s secondary charge (e.g. by a tap on the right mouse button)[/li]
[li]save the game while charging[/li]
[li]reload the game[/li]

The “profit” part is where the gauss finishes its 0.5 seconds charge and then shoots. The resulting shot is phenomenal. It gives 1000 ups boost and 200 damage. But because the charging time is only 0.5 seconds, only 1 cell is used.

Obviously, the acceleration and damage provided by a quick gauss shot completely dwarf those of the usual gauss shot. It consumes very little resource and it doesn’t have side effects or cooldown time or whatever.

We haven’t fully explored the applications of this technique. What we do know is we can take out the blast door in the airstrike map in 1 seconds by two quick gauss shots. We can also destroy the door in the crossfire.bsp-like place in 0.5 seconds. The floor at the end of Gonarch’s lair can be destroyed using 4 quick gauss shots (though coupling with some explosives should be even faster). In addition, we no longer need any explosives for Gonarch (we can save them for extreme boosts later). Just one quick gauss deals enough damage to Gonarch at each node to get her arse moving.

We can fire the gauss crazily without giving much shit about the ammo consumption. We can boost ourselves inside narrow pipes and tunnels rapidly, especially when making sharp turns. Very quickly an obsession with speed develops – anxiety will kick in whenever it isn’t at maximum.

In general, pretty much all normal gauss boosts can be replaced by quick gauss shots. However, in sv_airaccelerate 10 it can get incredibly tricky to control the movement thanks to the high acceleration.

Actually, coolkid implemented a similar technique in his single segment run. Instead of saving the game, he used level transition.

Movement stalling

Edit: This trick is deemed illegal by most people.

This is a TAS-only technique, and it’s more useful for sv_airaccelerate 100 runs. Basically, we want to set host_framerate to something less than 0.001. For example, host_framerate 0.00099. By doing so, the movement completely halts. Yes, we’ll just stay at the same spot until Poincaré recurrence, regardless of velocity. However, NPCs and objects will continue to move. The AI continues to run and we can still use buttons, duck, fire weapons, reload weapons, change viewangles, spray logos, talk to scientists, pretty much everything except translational motion. Meantime, the velocity is preserved.

It took us quite a while to realise the potential of this technique. One application of this technique would be to skip the electricity in office complex without object boosting, thus saving a bit of time bringing the box. But this is doable only with sv_airaccelerate 100. We want to stall in front of the elevator door while the next level is loading. We have tried this and it worked very well.

Refer to the two doors at the end of c1a0d. When we enter the first door our speed is potentially very high, but then we can stall our movement while the second door is opening, instead of colliding with it thereby cancelling all the speed. Once the second door opens, we rush out with terrific speed and hit the elevator button as soon as possible. We then stall our movement in front of the elevator door. Then do a jumpbug and stall our movement again to wait for the lower elevator door to open. Then stall again at the door near the two scientists. And again at the door with a guard. As a result, we can maintain nearly 2000 ups after suit grab all the way to the room with 3 scientists.

There are also quite a number of doors in Lambda Core. In general, we can stall in front of a door while it is opening, meanwhile firing quick gauss shots to max out our speed. Even if these don’t save time compared to HL21, they should reduce the need for explosives. Similarly, when we’re inside a teleporter in Xen we can stall our movement, then do quick gauss to quickly max out our speed. Then when the next level loads, we can fly out of the teleporter. In Hazard Course, there are also a number of doors. You get the idea. Although this technique isn’t really “revolutionary”, it surely saves quite a bit of time here and there.

Possible (some of them save time, others save explosives):

[ul][li]door leading to suit room (we should have 2000 ups at this point)[/li]
[li]glass near crowbar[/li]
[li]subsequent glass at the top part of elevator door[/li]
[li]two doors at the start of c1a1b[/li]
[li]door before barney skip in office complex[/li]
[li]some doors at blast pit[/li]
[li]doors before freezer room in apprehension[/li]
[li]elevator leading to assassins (the elevator will push you up while stalling)[/li]
[li]doors associated with the room with a trapped alien grunt in QE[/li]
[li]inside the revolving door at the end of QE[/li]
[li]subsequent door leading to hydroelectric dam[/li]
[li]doors at the start of c2a5d[/li]
[li]doors and elevator in c3a2e[/li]
[li]maybe doors and elevator in c3a2[/li]
[li]door with electricity in c3a2b[/li][/ul]

We’re tired of typing “door” already, so we’ll stop now.

Brute launching achieves the same effect, except it requires additional materials and it’s amazingly inflexible.

By the way

If you set host_framerate to a very low value, you can gain health much more quickly from the health door. For example, instead of 1,000 HP/sec we have 10,000 HP/sec. This alone saves a few seconds.

These two techniques are what convinced us to shift focus to sv_airaccelerate 100 as far as TAS is concerned. In fact we haven’t been working with sv_airaccelerate 10 until YaTLeR YaLTeR released his TAS mod. Of course there is a place for sv_airaccelerate 10 TASes, but they just don’t seem to be that exciting to us anymore.


Oh my! Amazing post and the quick gauss sounds like a really cool trick, I would love to see all this info on our Wiki! :slight_smile:

If you set host_framerate to a very low value, you can gain health much more quickly from the health door. For example, instead of 1,000 HP/sec we have 10,000 HP/sec. This alone saves a few seconds.
host_framerate is considered a cheat, so sadly, this is only for TAS runs.

Also, I’d like to know who’s behind your team (just curious) :slight_smile:

Thank you very much.


Very cool! Although I have some doubts about host_framerate, it is a server cvar and stuff, even for TASes. I am not completely sure about that one.

Apart from that,

Eh, second time already


We were going to write all these in the wiki instead, but we don’t want to mess things up as we’re not really familiar with SourceRuns wiki.

Sadly, we have unpronounceable names. :slight_smile:

We don’t really think that’s a problem. Isn’t it one of the main ways to achieve slow motion in widely accepted TASes like quadrazid’s Hazard Course TAS? We’d argue that host_framerate isn’t really a “cheat” in the same sense as noclip, god, impulse 101, stuffs like that. People call it a “cheat” only because it allows slow motion, thereby giving human players an advantage. For TASes, if we script everything then we don’t need slow motion. We’re not even using host_framerate for that purpose. It just happens that host_framerate modifies pmove->frametime and gpGlobals->frametime directly, pretty much the same way as how fps_max prevents gpGlobals->frametime and pmove->frametime go beyond some value. Both of them do something to the server.

If you’re really, really upset about host_framerate, then just think of our TASes as being in a “category of TAS that allows host_framerate”.

Oh man really sorry about that. When was the first time? :smiley: In fact we always tease each other for not remember your name in our internal discussions.


He (as well as me in my bhop map TASes) used the pause alias slowmo - basically an alias that pauses the game every now and then.

The thing is - you can change your fps_max value if you’re playing on a public server, yet you can’t change host_framerate. That’s why I have some doubts.

No, not at all, just my thoughts.

Haha, it’s all right. :stuck_out_tongue: Your Bhop.bsp video desc :smiley:


Well if host_framerate is used in a TAS its no problem at all, I was talking about normal runs :stuck_out_tongue:

About the Wiki, don’t worry, if there are any formatting errors I will fix them (and I doubt there will be any). If you have any questions about the wikicode or other stuff, just ask me.


I remember talking with coolkid about the quick gauss. Maybe even in the audio commentary? He even said that it didn’t work in hlspbunny. Yet I never got around to investigate it any further…
This completely changes the game. So I’m almost happy it didn’t make it into HL21. It would also ridicule the segment count even further.
HL21 did 56 gaussboosts in total. With this trick you can make 60 GBs only with the cells you get in Questionable Ethics already.
Well it would mostly change the part from the point you get gauss gun to the health door. After that it will mostly just remove the limited amount explosives for damage boosts. But in a 100aa run it could be used to extreme extent as you said.

Though I’m well aware about the “Movement stalling” using HFR. Which I think is outright cheating even in a TAS. A is TAS supposed to be possible in realtime as well? That is definitely not the case with altered HFR. In realtime you can’t pause player velocity nor raise your fps above 1000 (in current steam I think the limit is higher?)
However I used similar trick to slow down player time by using fps_max 501 in HL21 a few times. HFR was used with very low value only for completely pausing the game.

The HZC TAS used loop alises with the standard “pause” cmd to create slowmotion as YaLTeR said.
For 100aa runs, can’t you just trigger doors ect. and then quickly strafe away and keep velocity in a small circle til the door opens? Thus no need to use the HFR stalling. I’m not sure how sharp you can strafe at 2k ups with 100aa though.
If you would use HFR for these purposes, it would be separate category in my mind.

That said I’m very impressed by your scripting and looking forward to future TASes : >


The Quickgauss’ trick is very interesting indeed, however for it to work one has to make a small change in the HLSP Bunnymod’s source code: Revert the Gauss’ behaviour back to normal. MrBozo modified it so Gauss charges are kept during segment/map transitions.

I wonder if Spider-Waffle knew about this, but maybe he didn’t use it because it was rather extreme? (like the healthdoor glitch).

I agree with you in this one, the modification of server-side variables is a bad idea and the TAS is technically made with “cheating.”

Nope, the Super Mario 64 TASes make testament of the tricks that are completely impossible for humans to perform. Such as the backwards long-jumping, specially the Infinite Staircase skip.

You’re right, but >1000FPS in Steam makes the physics go completely nuts last time I checked.


To me, this sort of thing would be in a different category to a regular TAS. Changing sv_airacceleration is as much as changing the gravity. It completely changes how the game works. The same goes for host_framerate. I’m not going to say it is cheating, but its like the difference between using the NGHL client and the Steam client.

Just make a note in the video description that you change both these variables and I think it’d be really interesting to watch. Really, really interesting to watch actually. I look forward to seeing the movement stalling in action!


Movement stalling is used at places where strafing around is not possible. For example, before entering the HEV suit room we can stall at the door while it is opening. The spaces around there are too narrow for us to strafe around.

Well if the community consensus is that movement stalling is cheating, then that’s the way to go. To us, not seeing movement stalling being used does take away some excitement – we all enjoy watching Gordon flying around at max speed, don’t we? :wink:

The diameter of the circle traced out by a player strafing at 2000 ups, 100 AA, 1000 fps is approximately 250 units. In 10 AA, it’s about 2500 units. This means with 10 AA we need a lot more space to strafe around without speed loss.

We’re well aware of that. It’d be in a separate catagory. Perfect strafing in 100AA is crazy! Imagine going from 0 ups to 1000 ups in about 1 second by strafing alone.

Thanks for all the comments, guys!

We still think setting host_framerate to values greater or equal to 0.001 should be allowed. We need to explain what host_framerate really does.

The standard way of changing frame rate is by means of fps_max. But we all know that it’s very difficult to maintain a stable 1000 fps, unless your parents are rich and can afford expensive hardware. Even our own computers couldn’t do that. If you set host_framerate 0.001, then it makes the game think that it’s running at constant 1000 fps (1÷0.001 = 1000), even though the pixels aren’t rendered at that frame rate onto the computer screen. Similarly, host_framerate 0.004 makes the game “think” that the frame rate is constant 250 fps, even though vsync might very well have been enabled.

Many of you should be aware of YaLTeR’s old bhop.bsp run and our bhop.bsp run. Do you know why we beat YaLTeR’s time? That’s not because we have rich parents who can buy good computers to achieve stable 1000 fps, but rather, we used host_framerate 0.001. Later when YaLTeR released an improved run, he also made use of host_framerate 0.001. In other words, it’s now fairer for both of us because we no longer need to compete for rendering speed, which isn’t the spirit of TAS. We no longer need to compete for silly things like who’s computer is better at maintaining 1000 fps. Yay you won the first prize for running Half-Life at stable 1000 fps!

Of course you could still argue that host_framerate is a server setting and thus it’s fundamentally different from fps_max. What’s important though is that in principle and in theory fps_max 1000 should produce the exact same run as host_framerate 0.001. Except in practice, that’s difficult to realise due to non-TAS-related stuffs like crappy graphics card etc. If host_framerate 0.001 is disallowed, then someone who’s really interested in TAS but with a slow laptop cannot compete with others simply because he doesn’t have a good computer.

Originally, we thought movement stalling is allowed because if you allow host_framerate, then why not allow any value of host_framerate? But yeah we now agree that there is no way, even in principle, to produce the same effect in non-TAS where host_framerate is disallowed altogether.


Unless it messes up something, host_framerate >= 0.001 is fine in my opinion.


host_framerate is alright but only for TASes, as I said earlier.


Now that I think I actually know what host_framerate does on a technical level, it seems perfectly fair for a TAS. Good write ups.

Just saw your agtricks in 23.83s video. Wow. Look forward to seeing more from you guys.


I understand your point there, might be useful, but what about during a HEV quickgrab? you’d need extremely sharp strafing to keep the massive speed, grabbing the suit while barely touching the pod to lose the least amount of speed possible.

I thought about it, and certainly it would be really awesome to see a TAS where Gordon is always at >2000ups.

But what if one used sv_airaccelerate 1000? It might allow some extremely sharp circle-strafing, but honestly, that would look really jaggy.

But anyway, your agtricks video is bloody jaggy anyway, so it wouldn’t make much of a difference in the final video.

Now I understand… and I take back what I said before, manipulating host_framerate for easier TAS recording and rendering is actually a great idea, since you can reproduce that with fps_max 1000 and an extreme Quad-SLI GTX Titans set up (jk).

alias pause1 "host_framerate 0.000000001;sensitivity 0;bind mouse2 pause0"
alias pause0 "host_framerate 0;sensitivity 3.5;bind mouse2 +attack2" //SENS&BINDs
alias stopp "pausable 1;sensitivity 0;pause;w4;stop;pause1;bind mouse2 pause0"

This pause script makes use of host_framerate to keep the game paused even during normal game pauses to use console calmly to change binds, make scripts on-the-fly and (In Bunnymod Pro) activate HUD information useful for a certain segment, and unpause at will.

Also when a demo is recording during a host_framerate pause, it only records a few microseconds, unlike regular pausing where the demo still records the game, and recording works normally when host_framerate is set to default again.

Manipulating host_framerate to obtain 1000fps in a TAS without needing extreme graphical power is, like I said before, an excellent idea.

But, I still believe that manipulating host_framerate to change the physics of the game is a bit extreme, however I will gladly watch a TAS that utilizes movement stalling because the trick sounds incredibly awesome.

However, a question remains, what about fps_max 1000 and r_norefresh 1? I thought that it kept 1000fps stable since the game graphics is not rendered at all, but the game continues like normal, this is why it’s the core of this classic auto-jumpbug script.

//Jumpbug alias +jumpbug "fps_max 1000;r_norefresh 1;alias _special jumpbug;jumpbug" alias -jumpbug "alias _special;-duck;-jump;fps_max 250;r_norefresh 0" alias jumpbug "-duck;+jump;wait;+duck;-jump;wait;special"

Is the combination not stable enough then? What’s its flaw?


Well, firstly, you can’t see anything happening on the screen. And secondly, it doesn’t give a stable 1k fps. The reason to that being that your computer still has to do a lot of calculations, which will produce lag spikes. And even one lost frame can result in a different outcome.


And I’d especially like to see this one. Because I don’t think that it’s possible in 100aa.


Indeed, in sv_airaccelerate 1000 the diameter is approximately 130 units. This is the sharpest you can strafe in 1000AA without speed loss. One cannot alter sv_airaccelerate in the middle of a run though.

Yeah we’ll continue to use host_framerate 0.000000001 to pause the entire game to type commands in the console, define aliases and do stuffs like that. You can’t do movement stalling with such a low value of host_framerate.

If you want to be pedantic, the more precise time is 1.11 seconds. Demo here. We’re sorry that we couldn’t remember the exact figure at that time. This is a bit off-topic for this thread, but did you use the correct formula for the optimal angle? The last we checked, TAS mod didn’t strafe optimally in 100AA.


I’m trying to make it compatible with high AAs, so I made some assumptions and wanted to make sure that they are correct. Apparently, something is wrong. Thanks :stuck_out_tongue:


The wrong thing was that I was testing @ 250 fps. Ugh.

+j;+ml;+tas_perfectstrafe w1000 w100 w10 w;w -j;-ml;-tas_perfectstrafe;pause1

That, with some subtle changes to the HL TAS Mod code, gives me 1000,054780 ups in the end. +j is +jump; +ml is +moveleft; w’s are self-explanatory.

Edit: even more when tas_autostrafing instead for some reason, depending on the direction I’m facing.


That’s mainly because of anglemod() from pm_math.c, plus some very minor floating point errors. One can’t really avoid them and we hate anglemod() with a passion since months ago. But its effect on the final speed is small anyway.