66 comments

[ 0.22 ms ] story [ 130 ms ] thread
The described way of increasing maximum velocity does not look realistic, it is not based in any kind of physics or bio-mechanics.

So, is it a suggestion to implement a broken game mechanic.. so that experienced players can transfer their skill to other FPS games? Nice..

If memory serves me right, this mechanic was in fact initially unintentional. It turned out to be pretty fun, however, and raised the skill ceiling of the game quite a bit. As such, implementing it yourself really doesn't seem like such a bad idea ;)
> broken game mechanic

Who said games have to be realistic? is it a "broken game mechanic" that you can take a shot to the heart and continue living in counter strike?

There's a place for realism in video games, but there's a place where you have to let go of it as well.

Well, lots of people have said that. Used to hear that kind of argument all the time back in the day.

But I've heard even crazier things. I remember a friend's older brother complaining about tournaments NOT forcing everyone to use the same gear and same CFG files. This ~21 years ago. Still have no idea what was this guy's thought process. I guess it was just a non-gamer's expert opinion on gaming.

Dan you imagine not being able to bind keys and/or adjust mouse speed because it's not realistic and unfair?

> so that experienced players can transfer their skill

Sure that's part of the motivation, but more importantly it's a fun, satisfying mechanic that adds a great deal of skill-based dynamism to these games.

Getting to play again after being shot in the face is not realistic either, yet pretty much all FPS games implement this feature. I wonder why?
Ever play Rainbow 6 games? That's why most games don't have realistic damage.
There are tons of mechanics that don’t make sense from a simulation perspective but are fun and add mechanical depth to a game. A very common one is the ability to carry multiple rifles in-combat. But generally the movement in-combat is accelerated and allows for higher control, while the penalty of getting hit is much lower.
A game mechanic is only broken if it isn't fun. Otherwise, the issue is with the player.
I don't understand the second diagram. Is it supposed to be a top down view of the game? There's a line labeled "view direction" that's perpendicular to the desired direction of travel, and the velocity arrow is going in a totally different direction.
If you strafe, you move perpendicular to view direction. If you combine strafe and jumps (the idea is this: jump, change view direction to perpendicular to jump direction and then strafe => jump+strafe => you'd move faster in the original direction).
I admit I'm still getting my head around the diagram, but it is top-down and I'm pretty sure the 'wish direction' is perpendicular to the 'view direction' because the player is holding down the strafe-left key.
I thought this article was going to be about how to "bunnyhop" in your programming job. Some tips/tricks that you can leverage to give you the same advantage in your job as bunnyhop does in-game.
(comment deleted)
For those interested the link below does a great job of demonstrating strafe jumping, which is similar to bunnyhopping.

https://www.youtube.com/watch?v=sXat1AEtuT8

This is great example of how an accident can contribute towards such a fun mechanic into a game. This ultimately ended up spawning new game types where a mastery of movement was a key skill.

I spent hundreds of hours over a decade ago playing jump challenges in Q2 mods that were just there to hone movement skills and help experts keep an eye out for errant pixels in the map that could be used to help you get to amazing places on the maps.

Jumps like these on action quake: https://youtu.be/8Za4g8mKBcA

Took dozens of hours of practice to accomplish without taking fall damage (which was crippling in this mod).

The thing I don't understand is why you would limit velocity in such a strange way to begin with.
accelerations map directly to actions of the user (forces). It seems fairly natural, not strange, to control velocities and positions in terms of accelerations. The same thing happens in real life.
That's not the strange thing. The strange thing is limiting it on a projection rather than the magnitude of the velocity vector.
If you're already calculating the projection, it's cheaper.
applying a force perpendicular to the velocity does not change the speed, only the direction. Only the component of the force tangent to the velocity vector (the projection) is relevant for controlling the max speed
They're not measuring the projection of the acceleration vector on the velocity vector, they're measuring the projection of the velocity vector on the acceleration vector and limiting that. Which makes no sense for a speed limiting method as evidenced by the fact that strafejumping exists. What you said is true and also irrelevant.

To get a true speed limit you would compute the new velocity vector, compute its magnitude and rescale the components by the ratio under the limit. Which is slightly more computationally expensive I suppose.

It's an artifact of the projection also being used to slide off walls smoothly, and then just reusing that idea - which could be a accident, or an "accident" (choosing by what feels better).

Goldsrc surfing was most exploitable in the form of "wall-running" by strafing against rounded surfaces(e.g. the cylindrical sewer pipe interiors in cs_siege and cs_militia, I think, both did this). Same bug, different mechanism, easier to control.

Bunnyhopping has spawned different game modes in counter-strike aswell, separate from competitive play, including mainly kreedz's kz [0] and bhop[1], which are really really very hard by themselves and a lot of fun. I really like bhop in particular because there's a meditative thing to it.

Surfing [2] was another kind of emergent behavior in counter-strike, I believe, where players can slide through slopes in a certain way and also gain speed plus air strafing.

0: https://www.youtube.com/watch?v=wMIbJbQ2iHc 1: https://www.youtube.com/watch?v=BXs0rFitP54 2: https://www.youtube.com/watch?v=BXs0rFitP54

When original Quake code became available I spent a bunch of time analyzing the movement code to help my QW clan improve agility during matches.

> As a decidedly skill-based mechanic, competitive players love bhopping because it is so hard to master.

I have been part of QW clan somewhere between 1998 and 2002.

People learned hopping not because it was hard to master but because without it you would be at an extreme disadvantage on some maps (especially DM3 and DM6). Additionally to being able to move faster around map hopping has some other advantages: being able to jump some distances that normally would not be possible to jump (like rotundas on DM3 and DM6, over lava on DM2, etc.), being further from ground makes you get less damage from rockets striking ground and also because when you run fast constantly jumping and bobbing right and left you are harder to target directly.

Also, hopping feels good:)

Hopping isn't hard. I have been teaching people hopping by explaining how it works and giving step by step exercises. I have never had any difficulty teaching people to do this.

> This means that the player has a single frame to input the jump command without losing speed - another reason why bunnyhopping is so hard!

I don't know Quake 3 code, but at least for QW this is not true.

You can schedule the jump before you hit the ground.

What you do is the following sequence:

1. Hit the jump 2. While you in air, release the jump and press it again. Keep the jump key pressed as you are heading you are falling to the ground. 3. When you hit the ground the game engine will immediately execute the jump without applying friction penalty (provided you don't get damaged due to fall, I don't remember that part too well).

When I was teaching people to bunny hop one of foundational exercises was to learn to release and press jump again mid-flight, before you even start to learn the bunny hopping movement. You learn this standing in place before you add rotation (keep hopping while you rotate) and then add movement (start using w to move around). Only once you are comfortably timing your "reverse" jump mid flight you add strafing to the mix.

I have played FPS games for as long as they have existed, competitively in the early days of CS. I don’t see why adding this feature deliberately would be appealing. It makes the game look unnatural for what? There are tons of hard to use glitches in every FPS game and the policy on any enjoyable server is “no glitching”, that is - play the game as the developer intended or be kicked. This bug was just too widely used to be considered unfair but thankfully games these days use movement code without obvious bugs like this.
Cause its really fun to play using it. There are tons of community servers with autohop mods enabled.
At least in Quake this was not deliberate choice. It was fortunate accident. It took some time for people to discover bunny hopping and once somebody figured it out it took like a storm.

Hopping wasn't discovered immediately. I remember we were doing things like strafing into walls to speed up movement before we knew bunny hops are possible.

I don't think idSoftware predicted how the game would be used when they were working on it. I believe the movement mechanics is just a byproduct of simplistic movement calculations.

I also think most people discovered trimping before bunnyhopping, which is kinda surprising given how dependent it is on acceleration.
I think it took couple (2?) years before bunnyhopping was discovered. We knew there is a lot of funny things happening with physics in the game but nobody put them together.

We knew, that there is maximum forward and sidespeed but they way they add together is simple vector addition, so you could actually get higher maximum forward speed if you could point that vector forward.

We knew it is possible to preserve momentum when turning in air. We abused this jumping outside of ledges and then turning and going back to where you came from. This was very useful on dm2 where there is a ledge, a pool of laval and a wall that divides the ledge. You are supposed to press a button to actuate a ramp on which you could cross the lava but you could also just jump and turn in air violating any physical intuition. The jump can be seen here https://youtu.be/VT-johLi75w?t=128. This jump has a bunny hop component to it but it is not necessary.

it's not really surprising a bug like bunny hopping would exist, either. You have to realize at the time that everyone was coming from Doom and was still using keyboard movement. I was using keyboard movement in Quake. It wasn't until I joined in with a few friends in QuakeWorld that someone said "hey, you really need to start using a mouse to play." You could get away with keyboard in single player, but even back then you would get stomped by the mouselook players.

What's amusing is you could always tell the keyboard players back then, by the way they slowly turned around.

Anyway, playing with the mouse was a new thing. Mouse acceleration, dpi, etc. were all just experiments. Introducing a new way to move would surely uncover bugs hidden in the physics code that simply weren't possible to hit with keyboard movement.

> It took some time for people to discover bunny hopping

IMO back then you discovered it either by just playing, or by reading a game magazine. Back then (when Quake II was released), internet guides for games were less streamlined and available. Which was fun for gaming, as you could discover things on your own. It also meant things had to be less min-maxed. Think of a game like World of Warcraft or Diablo when it was just released, they have the very same problem.

It looks unnatural when you put it in a game like CS, yes. But remember where CS came from, Action Quake.

Then you have games that put this front and center, and it looks completely natural, such as Warsow.

Action Quake II was the pinnacle of these for me. Such a fun game.
There are plenty of games that have no intention of looking natural. I haven't played an FPS in ~20 years, but I distinctly recall bunny hopping being fun, all by itself.
Something might start out as a glitch, but then be embraced by the playerbase and become a really interesting and beautiful mechanic.

Rocket jumping could be considered a glitch. It was never really designed, it was just an outcome of the physics system in quake. But it stuck, and later on it was added to TF2 (built on a distant descendant of the quake engine) as a central mechanic. Without it, you wouldn't have cool stuff like

https://www.youtube.com/watch?v=kUQJVhfEe_Y

(comment deleted)
Glitches can really broaden the skill-gap:

Halo CE: backpack reload, double melee, quick camo, etc.

Halo 2: BXR, BXB, RRX, etc.

Halo 5: slide jump, bum jump, boost jump, etc.

Warzone: slide cancel.

But then again, some glitches don’t. Like super-jumping in H2.

As someone who played a lot of quake in the day, I'll be the first to admit that bunny-hopping is an absurd-looking mechanic. However, a lot of people talk about movement mechanics in video games today, because movement should be one of the most dependable and flexible tools at your disposal in an FPS. Bunnyhopping added the extra nuance of being able to maintain speed, accelerate and strafe all at at the same time. If you mastered Quake's movement (namely bhopping and rocket jumping), you had an objective advantage over your opponent. Even if the other person had better aim, you still had the opportunity to out-maneuver them, which is something I seldom see inside modern video games.
Huh, and here I was thinking competitive FPS was a thing way before CS was even a mod, let alone mature and popular for tournaments
I think you misinterpreted a timeline here.
Really? Cause I remember attending Quake tournaments before CS was a thing. Things didn't even start with Quake, as there was also Doom. I understand if such games are not to your liking but they did exist
I mean I think you misinterpreted my post.

But instead of going back to read it again you misinterpreted my reply too (thinking I somehow was insisting on the thing you misinterpreted the first time!)

To be clear: all I said was 1) I played FPS’es for as long as they have existed (early 90s) 2) I played CS competitively. These two things are of course separate things and happened about a decade apart.

You are completely right. Sorry about that.

Guess I got too excited there for a second

(comment deleted)
As others have pointed out, a lot of these become important game mechanics and fully incorporated into the game, you can think of it as a kind of serendipitous or accidental design. An example of roughly Quake-vintage is 'skiing' in Tribes, fully incorporated into the game in later versions:

https://tribes.fandom.com/wiki/Skiing

It may be similar to fighting game motion inputs. They seem archaic and pointless when the same moveset can be expressed with just direction + button or something less complicated, but there are lots of analysis videos on why they have stuck around and the subtle differences in gameplay from them.

https://www.youtube.com/watch?v=2WhbSNP_zF4

I'm a speedrunner. I understand the desire to make some glitches into ascended bits of functionality, but bunny-hopping is usually frame-perfect and that's not a good choice for a feature.

That said, walljumps in Mario games started as frame-perfect buggy jumps and later became much easier and reliable.

> bunny-hopping is usually frame-perfect

If you mean the timing of the jump, that's not the case in Quake and its (spiritual and official) successors. You can press the jump key early and hold it until after you land.

(If you mean optimal bunnyhopping is frame-perfect, maybe so, but it's not the kind of mechanic you're expected to master in the sense of performing it optimally; it's more like aiming in FPS games, or most skills in real sports, in that top-level players still vary in their proficiency and even the best are imperfect.)

Any game where you shoot rockets out of a rocket launcher to land and explode near your feet has long abandoned "unnatural".
> for what

It's fun and it adds depth! Bunnyhopping is easy to learn but hard to master, and (together with related movement mechanics) adds a lot of freedom and dynamism to the game.

Of course, simply adding bunnyhopping to a game built around more realistic movement will drastically change how it plays -- probably for the worse, if the original was well designed. But in the case of Quake it turned out to open up the game in a way that is both superficially fun and competitively interesting. Nowadays the games in the Quake lineage are built around the existence of bunnyhopping and/or strafejumping, and their maps are designed accordingly.

I much preferred Q2 bunnyhopping to Q3 bunnyhopping, which felt to soft/squishy.

Has anyone figured out why the Q2 era bunnyhopping has not been replicated (or has it?)?

Q2 movement is similar but different enough to Q3, that's for sure. But... soft/squishy? I am not sure what you're getting at. Q2 seem to care a bit more about jump timing though. It just never felt right after the first Quake 3 betas hit.

Warsow/Warfork used to be largely Quake 2 based but never felt anything like it. Maybe Nexuis/Xonotic still do?

Now we just need a nice breakdown of how to implement the skiing from Tribes.
Skiing is the best happy accident in FPS gameplay, in my opinion. While Tribes: Ascend was still a thing, the competitive scene was intensely charged around high-velocity damage-boosting optimal flag capture ski routes. It was nuts. The skill ceiling was practically unlimited and the competition was fierce.

Combined with projectiles with velocity ("inheritance") it made for some of the most exciting, tangible gameplay I've ever participated in and I miss I dearly.

All I want to do is ski.

Back in high school, a friend and I wrote a 3D platformer akin to Mario 64[1], including writing the engine from scratch. No surprise, the physics was by far the hardest part and we never got it quite right. There was one build of the game where I screwed up the jump button function such that if you held the button down while going up a slope, you would repeatedly make contact with the slope and perform another "jump", infinitely increasing your velocity until you hit the top of the slope. Then you'd go rocketing across the map until you slammed into a wall or something. Much like Tribes skiing. It was great fun and I kept a special build of that around for a long time until it sadly broke because we changed the level data format. This was before I understood source control so I was never able to get that feature back. Anyway good times. Great educational project, but that happy accidental jump feature was probably the most actual fun in the game.

My friend later went on to commercially release a 3D platformer, Poi. http://www.poi-game.com/

[1] Enjoy some high-school-student-in-2005 web design and writing, https://www.brightnightgames.com/games.php?game=sa&sec=devel...

> No surprise, the physics was by far the hardest part and we never got it quite right.

Don't feel bad, neither did Nintendo! The Backwards Long Jump, or BLJ, is kinda similar to your slope-launch, where you accrue velocity, and is a core part of SM64 speed running techniques.

I wonder if, in the modern world of Unity and drag-and-drop physics, we're missing out on strange, emergent gameplay due to programmer error-- and to what degree. Some true magic was born out of weird and/or bad physics in games.

I'm happy that bunnyhopping has died and doesn't show up in games anymore. You can bunnyhop in Dusk, but it's a single-player game and it's perfectly playable without it.
Bunny hopping is still alive and well in games like Titanfall and Apex, though the mechanics are a bit different. Those engines are built on the Source engine, so likely use a modified version of the OG movement code. Similar movement glitches are also alive in games like Warzone, with slide canceling.
I've been playing Quake for so long, I literally always, and I mean always, circle and strafe jump. Can't imagine doing things any other way.

Of course, we kind of went beckwards for the last 15 years but skilled games are making a comeback. Speaking as a PC/arcades gamer,though.

this inspires me to write an article about the practical issues of finding good game developers.

the value of the frame delay in physics simulations is completely overlooked, something the current generation of popular game engines seem unaware of... it means values for positions remain consistent during a frame.

with or without that insight it is eminently possible to work out how something like this works on inspection.

the article is thorough, but the stuff it explains is much more fundamental... the detail about projection is good, but the explanation for why it is there is also absent, and the variable naming in the code example is relatively bad for such a short snippet. (a float called 'vel' which once assumes is 'velocity')

... anyway, i should stop complaining and try and explain this stuff better somewhere :)