I'm compiling a list of the differences in physics between NetQuake and QuakeWorld. This is what has come to my mind so far.
You're welcome to ask for clarification, corrections, and add what I might have missed. But keep in mind that I am the QW physics guru so what I say is pretty much definitive and it's probably no use arguing
Bunny hopping
This is what first comes to mind when one thinks of what makes QW physics different.
Bunny hopping in QW is a consequence of two things
1. No mandatory friction frame. Can land and jump again without losing any speed.
2. Client fps are independent from server fps. Higher fps = more speed gained when turning. NQ servers typically run at 20fps, hence very little speed is gained, and a large part of it is then lost upon contact with the ground.
But when you start a local server in NQ (with the map command), the server runs at the same fps as the client (up to 72 fps in unmodified Quake). So you can do some impressive bunny runs in NQ, see Quake Done Quick demos.
Traversing teleports
After you exit a teleport in NQ, your +back button is disabled for 0.7 seconds, "// hack to not let you back into teleporter" as the code says. So you if you're exiting a two-way teleport and want to go back quickly, you have to turn around.
In QW, you can just press +back.
"Newmis" code
QW: When a rocket/gren/nail is fired, it is immediately moved vel*50ms from the point of launch. A rocket fired under oneâs feet will hit the ground and explode immediately.
QW: For successful rocket jumping, +attack must be pressed no sooner than +jump
NQ: +attack can be pressed sooner than +jump. With careful timing and a bit of forward movement, rjs can be achieved higher than what is possible in QW
Edge friction
In NQ, starts when you touch the edge; in QW, when youâre already halfway past the edge.
For successful trick jumps in NQ, must take off early. Same principle may apply in QW? Need clarification from trickers.
In NQ, can be controlled by âedgefrictionâ cvar. Is a multiplier to standard sv_friction. 2 = default (hardwired in QW). 1 = no extra friction. (try 0 for fun; try a > 2 value to better feel how edgefriction works)
Sliding down ramps
QW resets vertical velocity to 0 when onground. So in QW you donât slide, but rather experience a series of small falls. No change for > 45 degree slopes on âslideâ maps (onground flag is not set on such slopes; hence no friction, and can accelerate indefinitely).
NQ behavior can be emulated in some QW engines with pm_slidefix 1.
Wall friction
Utterly stupid, but still used in NQ for some reason. Friction is applied when youâre facing a wall and touching it. Quite a bit of friction so you're almost stopped.
dm6 lg+rj trick
Here's a funny piece of code from LightningDamage in weapons.qc:
This code appears to have been there for a long, long time. It was there in Quake 1.06 Shareware release, and it may have been there before that. Someone must have been experimenting with something and forgot it there, but no one noticed because in that function, the 'other' entity is not usually set to anything in particular, and the code never worked.
But then QW came along, and in the QW engine it turns out that 'other' will be set to 'self' if the player is touching a platform. And so the dormant code stared working! It was discovered by players, and players started using it to their advantage. Now it's an integral part of dm6 gameplay.
The code was apparently discovered and removed when Quake QC code was cleaned up before being released to public, so you won't normally see it in NQ mods. But it is there in the progs.dat in pak0.pak; and it will work in QuakeWorld engines supporting progs.dat (currently FTE and ZQuake).
dm4 fake teleporting
The ra-to-ng and quad-to-ya teleports on dm4 have their targets set carelessly (so that a player who teleports is touching the ceiling?). This situation is handled differently by the engines. In NQ, if you approach the teleporter a certain way, a teleportation can be triggered (the sound, the flash and even the telefrag), but the player entity will immediately return to the spot where it was before teleportation.
(TODO: figure out exactly how this works. It seems to have to do with the 'return to original position if stuck' code in NQ engine code.)
Water movement
The way water movement handled in the two engines is totally different, although the end result feels mostly the same. One difference can be easily demonstrated, though: jump into the water from a height, say, from the bridge on dm3. In QW, you're slowed down almost immediately, but in NQ, you will travel halfway to the bottom before slowing down.
Max speed is the same? QW: 320*0.7 = 224. NQ = ?
Waterjump
NQ: the waterjump will be triggered even if you're moving down, with the result that you can keep hopping endlessly up and down.
NQ: the engine attempts to push you forward a bit but that doesn't usually work out and you have to keep +forward pressed until you get out. In QW you just face an edge and voila, you're on the ground.
NQ bug: waterlevel value is taken from previous frame. Can get out of lava on dm2 near ya-tele if fps is low.
Jump bug
This one is now history. âMagicâ fps (~30, ~50) to prevent bunny jumps from failing (sound is heard, but no actual jump). First fixed in Kombat Teams (kt jump as a consequence). Now fixed engine-side.
Russian TF community resisted fixing the bug for years (jump bug inhibits bunny hopping and helps preserve class balance somewhat)
KT jump
Not part of vanilla QW. Consequence of Kombat Teamsâ fix to the jump bug.
With KT jump enabled, your vertical speed upon jumping off a downwards slope is forced to 270 whereas in NQ and vQW, the formula is "the velocity after hitting the ground plus 270". This means that jumps off slopes are a lot higher in QW. Makes the rj fro tunnel to gl on dm6 possible.
Now standard everywhere except Team Fortress. Can be controlled with pm_ktjump in modern engines (0 = vanilla QW, 1 = KT; fractional values are possible)
Broken ankle
Not part of vanilla QW. Introduced in Kombat Teams, now a standard setting in QW TDM/Duel, although recently âfallbunnyâ (absence of broken ankle) has been getting more acceptance.
'Broken ankle' prevents jumping immediately after a hard landing (z speed < -650).
serverinfo maxfps 77
Not part of vanilla QW. Vanilla NQ and QW both limit fps to 72 (on dedicated NQ servers the limit is even lower, usually 20 fps / sys_ticrate 0.05)
Sometime around 2001, after the âserverinfo maxfpsâ setting was introduced and obeyed by mqwcl and then other clients, someone decided it was good idea to up the limit to 77 fps.
Consequence: bunny hopping is made even more effective (although by a very small amount). Just how much? Need input from trickers. Can ztricks be completed at 72 fps?
TF still uses 72 fps.
With independent physics in ezq, higher renderer fps are possible, but physics/network still obey the limit.
Some really misc differences
Vertical velocity in NQ is not reset on upward ground movement either. So you get airborne at the end of a ramp for a very short while. (Less control => bad).
NQ: Canât move right on SOLID_SLIDEBOX (e.g. other players). Clearly a bug, now fixed in NQ engines (?)
Vanilla QW movement bugs? Waterjump for non-world.
You're welcome to ask for clarification, corrections, and add what I might have missed. But keep in mind that I am the QW physics guru so what I say is pretty much definitive and it's probably no use arguing
Bunny hopping
This is what first comes to mind when one thinks of what makes QW physics different.
Bunny hopping in QW is a consequence of two things
1. No mandatory friction frame. Can land and jump again without losing any speed.
2. Client fps are independent from server fps. Higher fps = more speed gained when turning. NQ servers typically run at 20fps, hence very little speed is gained, and a large part of it is then lost upon contact with the ground.
But when you start a local server in NQ (with the map command), the server runs at the same fps as the client (up to 72 fps in unmodified Quake). So you can do some impressive bunny runs in NQ, see Quake Done Quick demos.
Traversing teleports
After you exit a teleport in NQ, your +back button is disabled for 0.7 seconds, "// hack to not let you back into teleporter" as the code says. So you if you're exiting a two-way teleport and want to go back quickly, you have to turn around.
In QW, you can just press +back.
"Newmis" code
QW: When a rocket/gren/nail is fired, it is immediately moved vel*50ms from the point of launch. A rocket fired under oneâs feet will hit the ground and explode immediately.
QW: For successful rocket jumping, +attack must be pressed no sooner than +jump
NQ: +attack can be pressed sooner than +jump. With careful timing and a bit of forward movement, rjs can be achieved higher than what is possible in QW
Edge friction
In NQ, starts when you touch the edge; in QW, when youâre already halfway past the edge.
For successful trick jumps in NQ, must take off early. Same principle may apply in QW? Need clarification from trickers.
In NQ, can be controlled by âedgefrictionâ cvar. Is a multiplier to standard sv_friction. 2 = default (hardwired in QW). 1 = no extra friction. (try 0 for fun; try a > 2 value to better feel how edgefriction works)
Sliding down ramps
QW resets vertical velocity to 0 when onground. So in QW you donât slide, but rather experience a series of small falls. No change for > 45 degree slopes on âslideâ maps (onground flag is not set on such slopes; hence no friction, and can accelerate indefinitely).
NQ behavior can be emulated in some QW engines with pm_slidefix 1.
Wall friction
Utterly stupid, but still used in NQ for some reason. Friction is applied when youâre facing a wall and touching it. Quite a bit of friction so you're almost stopped.
dm6 lg+rj trick
Here's a funny piece of code from LightningDamage in weapons.qc:
if (self.classname == "player"
{
if (other.classname == "player"
trace_ent.velocity_z = trace_ent.velocity_z + 400;
}
{
if (other.classname == "player"
trace_ent.velocity_z = trace_ent.velocity_z + 400;
}
This code appears to have been there for a long, long time. It was there in Quake 1.06 Shareware release, and it may have been there before that. Someone must have been experimenting with something and forgot it there, but no one noticed because in that function, the 'other' entity is not usually set to anything in particular, and the code never worked.
But then QW came along, and in the QW engine it turns out that 'other' will be set to 'self' if the player is touching a platform. And so the dormant code stared working! It was discovered by players, and players started using it to their advantage. Now it's an integral part of dm6 gameplay.
The code was apparently discovered and removed when Quake QC code was cleaned up before being released to public, so you won't normally see it in NQ mods. But it is there in the progs.dat in pak0.pak; and it will work in QuakeWorld engines supporting progs.dat (currently FTE and ZQuake).
dm4 fake teleporting
The ra-to-ng and quad-to-ya teleports on dm4 have their targets set carelessly (so that a player who teleports is touching the ceiling?). This situation is handled differently by the engines. In NQ, if you approach the teleporter a certain way, a teleportation can be triggered (the sound, the flash and even the telefrag), but the player entity will immediately return to the spot where it was before teleportation.
(TODO: figure out exactly how this works. It seems to have to do with the 'return to original position if stuck' code in NQ engine code.)
Water movement
The way water movement handled in the two engines is totally different, although the end result feels mostly the same. One difference can be easily demonstrated, though: jump into the water from a height, say, from the bridge on dm3. In QW, you're slowed down almost immediately, but in NQ, you will travel halfway to the bottom before slowing down.
Max speed is the same? QW: 320*0.7 = 224. NQ = ?
Waterjump
NQ: the waterjump will be triggered even if you're moving down, with the result that you can keep hopping endlessly up and down.
NQ: the engine attempts to push you forward a bit but that doesn't usually work out and you have to keep +forward pressed until you get out. In QW you just face an edge and voila, you're on the ground.
NQ bug: waterlevel value is taken from previous frame. Can get out of lava on dm2 near ya-tele if fps is low.
Jump bug
This one is now history. âMagicâ fps (~30, ~50) to prevent bunny jumps from failing (sound is heard, but no actual jump). First fixed in Kombat Teams (kt jump as a consequence). Now fixed engine-side.
Russian TF community resisted fixing the bug for years (jump bug inhibits bunny hopping and helps preserve class balance somewhat)
KT jump
Not part of vanilla QW. Consequence of Kombat Teamsâ fix to the jump bug.
With KT jump enabled, your vertical speed upon jumping off a downwards slope is forced to 270 whereas in NQ and vQW, the formula is "the velocity after hitting the ground plus 270". This means that jumps off slopes are a lot higher in QW. Makes the rj fro tunnel to gl on dm6 possible.
Now standard everywhere except Team Fortress. Can be controlled with pm_ktjump in modern engines (0 = vanilla QW, 1 = KT; fractional values are possible)
Broken ankle
Not part of vanilla QW. Introduced in Kombat Teams, now a standard setting in QW TDM/Duel, although recently âfallbunnyâ (absence of broken ankle) has been getting more acceptance.
'Broken ankle' prevents jumping immediately after a hard landing (z speed < -650).
serverinfo maxfps 77
Not part of vanilla QW. Vanilla NQ and QW both limit fps to 72 (on dedicated NQ servers the limit is even lower, usually 20 fps / sys_ticrate 0.05)
Sometime around 2001, after the âserverinfo maxfpsâ setting was introduced and obeyed by mqwcl and then other clients, someone decided it was good idea to up the limit to 77 fps.
Consequence: bunny hopping is made even more effective (although by a very small amount). Just how much? Need input from trickers. Can ztricks be completed at 72 fps?
TF still uses 72 fps.
With independent physics in ezq, higher renderer fps are possible, but physics/network still obey the limit.
Some really misc differences
Vertical velocity in NQ is not reset on upward ground movement either. So you get airborne at the end of a ramp for a very short while. (Less control => bad).
NQ: Canât move right on SOLID_SLIDEBOX (e.g. other players). Clearly a bug, now fixed in NQ engines (?)
Vanilla QW movement bugs? Waterjump for non-world.