User panel stuff on forum
  31 posts on 2 pages  First page12Last page
General Discussion
2007-10-06, 12:43
Member
364 posts

Registered:
Oct 2006
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:
if (self.classname == "player"
{
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.
2007-10-06, 13:35
Member
232 posts

Registered:
Feb 2006
77FPS was the max allowed by KTeams' anti-FPS cheating code.
vb.drok-radnik.com
2007-10-06, 13:53
Member
364 posts

Registered:
Oct 2006
It should follow from this code in KTeams' PlayerPreThink then?
// ILLEGALFPS[

self.fAverageFrameTime = self.fAverageFrameTime + frametime;
self.fFrameCount = self.fFrameCount + 1;

if( frametime < self.fLowestFrameTime )
self.fLowestFrameTime = frametime;

if( self.fDisplayIllegalFPS < time && framechecks)
{

// client uptime check
// code by Zibbo
r = self.fAverageFrameTime * 100 / (time - self.real_time);
tmp = ftos(r);
self.real_time = time;
if(r > 103 && !match_in_progress) {
sprint(self, 2, "WARNING: QW clients up to 2.30 have a timer related bug which is caused by too long uptime. Either reboot your machine or upgrade to QWCL 2.33.\n";
dprint4(self.netname, "%speed%", tmp, "\n";
if(r > 105)
self.uptimebugpolicy = self.uptimebugpolicy + 1;
}
if(self.uptimebugpolicy > 3) {
bprint3(2, "\n", self.netname, " gets kicked for too long uptime\n";
sprint(self, 2, "Reboot your machine to get rid of this bug\n";
self.classname = "";
stuffcmd(self, "disconnect\n";
}
// ends here

// delay on checking/displaying illegal FPS.
// s: changed to 15 for more accurate calculation (lag screws it up)
self.fDisplayIllegalFPS = time + 15;

local float fps;

fps = floor( 72 * 13 / ( self.fAverageFrameTime / self.fFrameCount * 1000 ) );

if( fps > 74 )
{
bprint3( 2, "\nWARNING: ", self.netname, " is using the timedemo bug and has abnormally high frame rates, " );

local float peak;
local string str;

peak = floor( 72 * 13 / ( self.fLowestFrameTime * 1000 ) );
str = ftos( peak );

bprint3( 2, "highest FPS = ", str, " (frametime was ";

str = ftos( self.fLowestFrameTime * 1000 );

bprint2( 2, str, ", " );

str = ftos( fps );

bprint3( 2, "average FPS = ", str, "!\n";

self.fIllegalFPSWarnings = self.fIllegalFPSWarnings + 1;

if( self.fIllegalFPSWarnings > 3 )
{
// kick the player from server!
bprint2(2, self.netname, " gets kicked for timedemo cheating\n";
self.classname = "";
stuffcmd(self, "disconnect\n";
}
}

// zero these so the average/highest FPS is calculated for each delay period.
self.fAverageFrameTime = 0;
self.fFrameCount = 0;
self.fLowestFrameTime = 0.013;
}
// ILLEGALFPS]

Mmm, that's complicated. Gotta test it
EDIT: ok, in ezquake it appears I can go as high as maxfps 80 before kteams start to worry. That may translate to cl_maxfps 77 for qw2.3x with the msec rounding bug (although it's not quite clear to me how that would work, but I'm too lazy to think about that right now).

So it appears it's another one of the 'accepted cheats' that are standard in QW now? Did the events proceed like this: players used the timedemo bug to disable the fps check in the client and set cl_maxfps 77 to avoid getting kicked, then when the bug was fixed they demanded their high fps back?
2007-10-06, 16:06
Member
232 posts

Registered:
Feb 2006
IIRC the only way to control FPS with the timedemo hack was vsync? If so, it was probably early MQWCL and it's 85FPS upper limit of cl_maxfps that made 77 so accessible.
vb.drok-radnik.com
2007-10-06, 17:01
Member
364 posts

Registered:
Oct 2006
vb- wrote:
IIRC the only way to control FPS with the timedemo hack was vsync?

Hmm, yeah, you must be right

vb- wrote:
If so, it was probably early MQWCL and it's 85FPS upper limit of cl_maxfps that made 77 so accessible.

Oh, I see. At the time I was totally pissed off at the community for using the GPL-violating mqwcl so I missed some events I guess.
2007-10-06, 19:13
Member
950 posts

Registered:
Apr 2006
Great topic idea Tonik.
2007-10-08, 06:17
Member
55 posts

Registered:
May 2007
Thank you for the info!
http://lcd.satgnu.net/images/pictures/black_hearted_small.png
Help me understand the little that I know.
2007-10-08, 07:31
Member
344 posts

Registered:
Nov 2006
Great topic Tonik! This should definately find its way into the quakeworld wiki!
2007-10-09, 03:15
Member
151 posts

Registered:
Feb 2006
The "newmis" code was a new one for me. Had no idea it was different in NQ
2007-10-13, 04:51
Member
357 posts

Registered:
Mar 2006
I agree with much of what you have said though, I prefer a 35 NQ ping over a 35 ping quakeworld (old id original), if i lower my NQ server's ticrate to 1/77 feels like semi qw-ish yet no one has said anything. Its more noticable in CTF than CA.
The thing about netquake protocol to me, only affects your movement, sure your saying ONLY?! Though the thing about basic qw is HIGHping players kinda skip around,.. rockets are visible barely in flight, nails grenades (all projectiles ) show up like a strobe light.. sure the physics are exploited, but for me visibility is half the fight, yet ezQuake has focused on these issues and I am eager to see how it results.



on another for Tonik. How can cl_independent_physics benefit a netquake client??

peace,
keep up the good work...
2007-10-14, 02:07
Member
75 posts

Registered:
May 2006
This reminds me of a bug I found relating to trigger_hurt. A pretty complex bug....

Found it when making my own map, and wanted slime that didn't take as much damage as normal slime, so I made my own water texture that looks like slime, and then use a trigger_hurt to make the actual damage...

Anyway, it seems that when being inside of a trigger_hurt and teleporting out of it, then going back into the trigger_hurt and teleporting again makes it so that the trigger_hurt won't hurt you anymore! Next time you go into the trigger_hurt, no damage is taken... until you teleport again.... As I said, pretty complex, I made a demo of it => http://uttergrottan.localghost.net/ezquake/misc/trigger_hurt-bug.zip
2007-10-14, 08:18
Member
1100 posts

Registered:
Jan 2006
trigger_hurt are funny all the time, thus why one layers a few of them (~3) for those player-kill-floors to make sure one kills him.
2007-10-14, 08:39
Member
1011 posts

Registered:
Feb 2006
Cokeman wrote:
Anyway, it seems that when being inside of a trigger_hurt and teleporting out of it, then going back into the trigger_hurt and teleporting again makes it so that the trigger_hurt won't hurt you anymore! Next time you go into the trigger_hurt, no damage is taken... until you teleport again.... As I said, pretty complex, I made a demo of it => http://uttergrottan.localghost.net/ezquake/misc/trigger_hurt-bug.zip

what mod code were you running, vanilla qwprogs.dat ?
2007-10-14, 10:18
Member
75 posts

Registered:
May 2006
oldman wrote:
Cokeman wrote:
Anyway, it seems that when being inside of a trigger_hurt and teleporting out of it, then going back into the trigger_hurt and teleporting again makes it so that the trigger_hurt won't hurt you anymore! Next time you go into the trigger_hurt, no damage is taken... until you teleport again.... As I said, pretty complex, I made a demo of it => http://uttergrottan.localghost.net/ezquake/misc/trigger_hurt-bug.zip

what mod code were you running, vanilla qwprogs.dat ?

Yea
2007-10-14, 19:21
Member
364 posts

Registered:
Oct 2006
SputnikUtah wrote:
on another for Tonik. How can cl_independent_physics benefit a netquake client??

NetQuake's fps capping policy should be more relaxed because the rate at which client physics is calculated is determined by the server and not the client. The rate at which the server sends update packets is independent of client fps, too; and since client-to-server packets are relatively small, it should be ok to play on the internet with 100 or 200 fps: it won't give you unfair advantage physics wise, and it shouldn't overflow your connection.

So as you can see, independent physics in QW doesn't have nearly as much impact as it had in QW; but on the other hand, it's a lot easier to implement it in NQ, so it's probably worth having the capability just in case. DarkPlaces seems to have it.
2007-10-14, 19:26
Member
364 posts

Registered:
Oct 2006
Cokeman wrote:
This reminds me of a bug I found relating to trigger_hurt. A pretty complex bug....

It's the same bug you have on end map where the trigger_hurt fails to hurt you, right? I think I remember seeing an entry in Quake Info Pool's bug list and there may even be a fix available.
2007-10-14, 19:54
News Writer
493 posts

Registered:
Jan 2006
what explains it when you can jump inside tele at dm2 ra-mega?
2007-10-14, 20:45
Member
715 posts

Registered:
May 2006
The dm2 ra-mega tele bug isn't FPS-based is it? I always thought it was because the trigger field is too low so you can jump over it when the conditions are just right.
---Where can you see lions? Only in kenya! Come to kenya we've got lions.
2007-10-14, 22:02
Member
202 posts

Registered:
Dec 2006
dm2 ra-mega tele is very easy to do consistently. It's what molgrum says, the trigger is too small/low. picture
2007-10-14, 22:40
Member
1011 posts

Registered:
Feb 2006
a good fix for dm2gpl.bsp :-)
2007-10-15, 01:47
Member
202 posts

Registered:
Dec 2006
I sometimes use it in duels. If i know someone is coming to ra/mh, i can jump in there, wait, and fire rockets out. It's not a very serious tactic, but great for the "WTF!" factor.

Drowning in it can also be funny, to see the opponents response to a drowning death on dm2.
2007-10-15, 05:30
Member
357 posts

Registered:
Mar 2006
Tonik wrote:
Cokeman wrote:
This reminds me of a bug I found relating to trigger_hurt. A pretty complex bug....

It's the same bug you have on end map where the trigger_hurt fails to hurt you, right? I think I remember seeing an entry in Quake Info Pool's bug list and there may even be a fix available.

void() hurt_touch =
{
if (other.takedamage)
{
// 1998-07-03 hurt_touch fix by Robert Field start
// self.solid = SOLID_NOT;
if (time != self.hurt_together_time)
if (time < self.hurt_nextthink)
return;
// 1998-07-03 hurt_touch fix by Robert Field end
T_Damage (other, self, self, self.dmg);
// 1998-07-03 hurt_touch fix by Robert Field start
// self.think = hurt_on;
// self.nextthink = time + 1;
self.hurt_together_time = time;
self.hurt_nextthink = time + 1;
// 1998-07-03 hurt_touch fix by Robert Field end
}

return;
};
2007-10-16, 22:18
Administrator
384 posts

Registered:
Dec 2006
Yeah, I used to use qwcl timedemo to unlock fps, then vsync with 77hz so as to remain legal in kteams. In hindsight I probably suffered more from vsync mouse lag than I gained from those extra 5fps, but there you go

One thing I didn't know was that NQ was limited to 72fps, I always figured it was unlimited (on localhost).

One important note about broken ankle - if memory serves, for a short period (one kteams revision maybe) bunnyhopping was fixed but broken ankle wasn't yet implemented, i.e. they didn't come at the same time. Anyway sometime around 2001-2 when ktpro still hadn't quite gone mainstream I asked rxr to look at removing broken ankle because it slows down the game and was just an arbitrary change made by Cenobite. Of course rxr liked to please everyone so made it toggleable, he needed a name for the impulse alias so I came up with "fallbunny"

Regarding the "newmis" thing, that's good to hear. I remember back in '99 reading an interview with Thresh talking about his opinions on Quake3. One of things mentioned in that article was QW RL feeling betting than Q2 RL. There was a quote from Carmack talking about this extra '50ms prediction' on rockets and I always wondered if that was a myth or not.
2007-10-20, 01:23
Member
405 posts

Registered:
Jan 2006
About "hurt trigger bug".
Seems, when u change ent.solid field, u need issue setorigin(ent, origin) after that for such enitity. At least I fixed(hope so) hurt trigger this way in ktx (week or so ago).
<3
2008-11-15, 12:24
Member
9 posts

Registered:
Nov 2008
Tonik wrote:
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;
}

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).

What does this actually do in the game? From the code I see it's adding velocity of 400 to something. Sorry not too familiar with Quake's C source.

How can I reproduce it in the game?
2008-11-15, 19:41
Member
386 posts

Registered:
Apr 2006
Stand on the dm6 lg hatch and fire the lightning gun straight down.
2008-11-15, 19:58
Administrator
2059 posts

Registered:
Jan 2006
jeffreysobell wrote:
How can I reproduce it in the game?

Demo of LG hatch trick @ dm6
www.facebook.com/QuakeWorld
2008-11-28, 18:44
Member
14 posts

Registered:
Jul 2007
that's a pretty evil bug I think.

Tonik, how well does ezq support NQ progs atm?
2008-11-28, 20:19
Member
364 posts

Registered:
Oct 2006
How well do you want it?
2009-04-15, 17:51
Member
21 posts

Registered:
Mar 2009
Is it possible to get Ezquake to Work with NQ .... cause it will be easier for me and i like ez client
+++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++ http://euroquake.webs.com/ ++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++
  31 posts on 2 pages  First page12Last page