Funender.com Quake FPS Calculator

FPS calculator Welcome | Servers | Maps | Movies | Info | Downloads | Links Quake 3 Physics
Home
DefragMaps.com
Chatroom
FPS Calculator
funender.com quake fps calculator
"Strafing Theory" by injx
This article will attempt to explain why certain angles have to be used when strafe jumping, and why strafe jumping is necessary in the first place.

Firstly, you should know that there is only one main difference between standing and being airborne, and that is the friction of the surface. Therefore if you are in contact with a surface and you stop providing movement (i.e. release all keys) then the frictional force will decelerate your movement to zero. In the air there is no friction, and so as long as you are not in contact with another object, when you release all keys your speed will remain constant.

I have made these cool diagrams to further patronise you:


Blue arrow line = direction of player
Red arrow line = resultant acceleration vector
Black arrow outline = direction key pressed
Dashed black line = direction of (existing) travel







Now if you are holding two keys simultaneously, the acceleration vectors will add together and produce a resultant like so:




However, the quake 3 engine limits your 'speed' to 320ups by the server variable g_speed. Therefore holding two movement keys simultaneously will not result in an increased speed, you will still get 320ups but in the resultant direction.

So what happens if you are travelling through the air at 320ups (or greater) and you hold the Forwards key (while facing the direction of travel)? Nothing. Absolutely nothing. Why? Because the engine limits the speed you can gain in each direction from using the movement keys to 320ups, whether you are running or flying. So you have to use strafe jumping to accelerate past 320ups.


Before I go any further, I will remind you of the following definitions to avoid confusion:

Vector = A quantity which has both a size and direction.
Velocity = A vector consisting of speed and direction of speed.
Acceleration = Rate of change of velocity with time. Therefore is a vector also.



OK, let's look at what happens when you are strafe jumping.

The first example is of standard single-beat strafing.

There are two air "modes" involved in single-beat strafing, one being a mirror image of the other. In the left mode, the player is orientated at an angle to the left of the direction of travel. We shall call this angle theta (θ). At the same time, the player is holding Forwards and Left Strafe movement keys. This results in the following situation:





(in case you weren't paying attention earlier, the dashed black line is the direction of travel, the blue arrow is the orientation of the player, and the red arrow is the acceleration vector)



And similarly, the right mode is just the same, but the player faces to the right at angle theta and holds Forwards and Right Strafe movement keys. Notice the positions of the two acceleration vectors (red arrows).






To perform the strafe, the player quickly switches between modes (called an "airchange") and continues alternating in this fashion by airchanging at (usually) regular intervals, usually in time with a jump (called a "bunnyhop").


Now keeping this in mind, let's look at the other distinctive strafing technique: half-beat strafing. You will see that half-beat strafing is actually the same thing as single-beat strafing, it's just another way to perform it.

Like single-beat, there are two air modes in half-beat. For lack of better terms, I shall name them "first mode" and "second mode".


The first mode is exactly the same as the "left mode" from single-beat:



The player is orientated at angle theta to the left of the direction of travel and is holding Forwards and Left Strafe keys.


The second mode appears a little strange at first. In this mode, the player is orientated to the left of the direction of travel, but only by a very small angle, which I have named angle lambda (λ). At the same time, the player is holding Right Strafe only.




Now look back at the single-beat diagrams and compare them with these half-beat diagrams. Look at the acceleration vectors (red arrows). What do you notice? They are exactly the same! There is a red arrow to the left in both the strafing techniques followed by one to the right. Plus, these acceleration vectors are all at the same angle to the direction of travel (use your imagination if necessary), almost at 90º, but not quite.


Now lets look at why this angle of "almost 90º" is significant for our acceleration vector.

We already know that the engine won't allow a player to gain speed in the direction of travel using the movement keys. However, we CAN gain speed in another direction.

Let's break this acceleration into its components (using the "left mode" as an example). There is a forward component in the same direction as travel, plus one at 90º to the direction of travel:

Green arrow line = component of acceleration vector





We already know that the forward component is of no use to the player, as it will be ignored, just as holding the Forwards key (while facing the direction of travel) achieves nothing. The rest of the acceleration is in the direction of the second component. As the current speed in the direction of the second component is exactly 0ups, the engine will allow the player to accelerate in that direction, until the speed in that direction equals 320ups. The amount of acceleration is dependent on the angle between the direction of travel and the acceleration vector, which I have dubbed angle delta (δ).

The acceleration "a0" is defined by the engine (in the same way that jump velocity and friction (etc.) are defined) and so is a constant. As the value of the second component is given by (a0 * sin δ), the larger the angle delta, the greater the acceleration, up until 90º.





This acceleration causes the current velocity to change and produces a resultant velocity. Pythagoras' Theorem will show that the resultant velocity is greater in magnitude than the current velocity, and as speed is the magnitude of velocity, this means an increase in speed. The change in direction also illustrates why strafe jumping can cause the player to 'drift' to one side if the strafing is not consistent.

Therefore for theoretical maximum acceleration, angle delta should equal 90º. Therefore to achieve this, angle theta should equal 45º and angle lambda should equal 0º.

Realistically angle delta should be very close to 90º, but not quite 90º. This will help to avoid accidentally going over 90º. So the angle theta should be close to, but less than, 45º, and angle lambda should be small, but greater than 0º.

If angle delta exceeds 90º then the player will start to decelerate as there will be acceleration in the direction opposite the direction of travel.


But this can be a little misleading, and I'll explain why.

When strafing, your 'direction of travel' is constantly changing. Each implementation of an air mode causes a change in direction, as shown above. The path change looks something like this:



And so by combining several strafe jumps, the overall situation looks like this, with the player following the dashed lines:

Orange arrow = direction of overall motion



The angle phi (φ) is the overall change in direction between two successive air modes. The orange arrow represents the overall direction that the player will move in, over a longer-term consisting of several bunnyhops.



As you can see, the angle phi is dependent on the current velocity. Angle phi is accurately given by the equation:

φ = arctan (320/v)

where v is the current velocity

We can graph this angle to illustrate how it changes with velocity.




As you can see, at lower velocities, there is a greater change in direction than at higher velocities.

Now when strafing, the player is often not aware of the zig-zag path of alternating direcion of travel lines, and so it is difficult to implement angles theta and lambda. It is more useful to a player to know the angle they must use relative to the direction of overall motion.

Therefore I have introduced two new angles. These are similar to the angles theta and lambda, but have been corrected so they are relative to the direction of overall motion.


The first angle I shall call angle epsilon (ε). This is the angle that the player must use in order to implement angle theta:



ε = θ - φ/2

If the optimal value of theta is 45º then the optimal value of epsilon is 45 - φ/2



For example, at 800ups, the value of angle epsilon is 34.1º


The second angle I shall call kappa (κ). This is the angle that the player must use in order to implement angle lambda:



κ = λ + φ/2

If the optimal value of lambda is 0º then the optimal value of kappa is φ/2



For example, at 800ups, the value of angle kappa is 10.9º


All this means that when you are strafing, as your speed increases, angle epsilon should increase and angle kappa should decrease on successive jumps.

In short, for single-beat strafing you should use an angle of about 29º initially, and increase this angle as you gain speed. The angle is about 36º at 1000ups.

For half-beat, you should use the same angle as single-beat for the first mode. For the second mode, use an angle of 16º initially, decreasing with speed. It is about 9º at 1000ups.



FAQs

Q. What about circle jumps?
A. Same concept, only while in contact with the floor, rather than in the air. You will get the highest running speed by moving in a perfect circle. To achieve circular motion, at every point in time you must have acceleration at 90º to the direction of travel. This requires a smooth movement of the mouse to continually adjust to the changing direction of travel.

Q. These Greek letters scare me.
A. Greek letters own you.