Differences between Q1, Quake World and Net codebases (qc)

Discuss programming topics for any language, any source base. If it is programming related but doesn't fit in one of the below categories, it goes here.
JasonX
Posts: 422
Joined: Tue Apr 21, 2009 2:08 pm

Differences between Q1, Quake World and Net codebases (qc)

Post by JasonX »

edit by Spirit: This thread was taken over by offtopic arguing, please see the forked new thread at http://forums.inside3d.com/viewtopic.php?f=9&t=4850
-----


What is the difference between the QuakeC codebase of Quake, Quake World and NetQuake?
leileilol
Posts: 2783
Joined: Fri Oct 15, 2004 3:23 am

Re: Differences between Q1, Quake World and Net codebases (q

Post by leileilol »

Quake's a dumb client.
Quakeworld is not. It tries to extrapolate from what it recieves instead and relies more on broadcast messages.

Also Quakeworld generally strips a lot of things, so if you love particle() and punchangles, you're going to have to adjust.
i should not be here
Dirge Inferno
Posts: 34
Joined: Sat Feb 25, 2012 6:44 am
Location: Adelaide, South Australia
Contact:

Re: Differences between Q1, Quake World and Net codebases (q

Post by Dirge Inferno »

leileilol wrote:Quake's a dumb client.
...
r00k
Posts: 1111
Joined: Sat Nov 13, 2004 10:39 pm

Re: Differences between Q1, Quake World and Net codebases (q

Post by r00k »

Dumb meaning its not intelligent in terms of latency prediction. Though, it's all i've used for quake1. Since movement/shots fired are sync'd u dont seem to notice much sub 50 ping. In QW u can run around like a freakin hippy at a nudist colony but have to wait for latency to get your shots out, which seem to come late but hit direct, something odd about that gameplay. QW mods though are WAY behind the times. CTF is not active and CA uses 1997 code :( bluh plain f'ugly.

EDIT: KTX is not a QuakeC mod, so this is the exception!
Last edited by r00k on Sat Apr 14, 2012 8:05 am, edited 2 times in total.
Spike
Posts: 2914
Joined: Fri Nov 05, 2004 3:12 am
Location: UK
Contact:

Re: Differences between Q1, Quake World and Net codebases (q

Post by Spike »

the differences between the qc code is that qw mods are not generally allowed to affect the player's movement (jump heights, swim speed, etc) without asking the engine to do it for it (ie: .gravity and .maxspeed instead of dumping code in playerpostthink). This is because the client needs to match, and if it doesn't then you get juddery movement/jumps.
qw qc code avoids the use of MSG_BROADCAST. Its available, but its better to use MSG_MULTICAST (really though, you're better off using the proper extension builtin instead of directly using WriteByte).
qw qc code doesn't support particle(). there are some replacement TE_foo effects for commonly used effects, but that's pretty much just blood.
qw's te_gunshot has a count argument, resulting in a single te_foo in quakeworld where you'd have 12 separate bandwidth suckers in nq.
qw qc code permits multiple thinks on a single entity in a single frame, keeping timing more correct even with an overburdened server (other programs stealing cpu etc).
qw qc code runs players out of order (when handling packets received from the client) instead of all ents thinking in entnum order. Note that DP defaults to be more like QW here, its just a sideeffect of prediction.
svc_setview does not exist in quakeworld. spectators are an engine feature and mods do not need to do anything for them.
vanilla quakeworld does not support .spawnflags based spawn filters - it'll always act as if deathmatch 1 is set. custom qw engines have reverted to nq behaviour here.
quakeworld has userinfo stuff, which permits per-user settings and options which are readable by the gamecode. nq depends fully upon settings stored on the server.

most qw mods do not support single player (see .spawnflags comment). the server still supports all the builtins the ai uses, just that most mods lack monsters and thus lack ai too. quakeworld's traditional only-dedicated-servers stance kinda removes the need for single player support in mods.

for a full list of the differences between nq and qw (and h2) gamecode, see FTE's progstype variable. :P

in general the changes required to convert a mod from nq to qw equate to: replacing defs.qc for the qw systemdefs/systemfields/builtins, removing the .velocity changes in client.qc, particle() -> te_[lightning]blood, .punchangles->svc_big/smallkick, EF_MUZZLEFLASH->svc_muzzleflash, te_gunshot -> te_gunshot+writebyte(count), bprint(msg)->bprint(PRINT_HIGH,msg), svc_cdtrack changes, svc_intermission changes.
certain mods have additional dependancies (eg: svc_setview), but the above should cover vanilla qc.
for much of it you can use #ifdefs with fteqcc or frikqcc and write a mod that directly supports either.
Dirge Inferno
Posts: 34
Joined: Sat Feb 25, 2012 6:44 am
Location: Adelaide, South Australia
Contact:

Re: Differences between Q1, Quake World and Net codebases (q

Post by Dirge Inferno »

r00k wrote:Dumb meaning its not intelligent in terms of latency prediction. Though, it's all i've used for quake1. Since movement/shots fired are sync'd u dont seem to notice much sub 50 ping. In QW u can run around like a freakin hippy at a nudist colony but have to wait for latency to get your shots out, which seem to come late but hit direct, something odd about that gameplay. QW mods though are WAY behind the times. CTF is not active and CA uses 1997 code :( bluh plain f'ugly.

EDIT: KTX is not a QuakeC mod, so this is the exception!
I think the word your looking for is inferior, it's inferior compared to today. That doesn't mean it's dumb, at the time it was way ahead and made what multiplayer is today. And hate me, but I prefer the grainy/dirty look of Quake over the smoothed out and clean clients.
leileilol
Posts: 2783
Joined: Fri Oct 15, 2004 3:23 am

Re: Differences between Q1, Quake World and Net codebases (q

Post by leileilol »

Dirge Inferno wrote: I think the word your looking for is inferior,
No it isn't, and he isn't looking for "superior" either. We aren't little children.

You misunderstood the term "dumb". Even Carmack has described Quake being a dumb client.
i should not be here
Spike
Posts: 2914
Joined: Fri Nov 05, 2004 3:12 am
Location: UK
Contact:

Re: Differences between Q1, Quake World and Net codebases (q

Post by Spike »

'dumb client' is a perfectly correct term to describe NQ. google for 'dumb terminal' and other 'dumb' things in computing.
the vanilla doom engine is not a dumb client, but quake is. the difference is that doom and other games of its era were peer-to-peer engines and all run the gamecode individually as a way to keep sync, where quake merely displays what its told to display. The only thing that quake displays that its not told to display is the console, the view angles, and the particles, and I suppose some flickering lights. Everything else is positioned exactly as the server tells it (give or take a little interpolation).
compared to any other game ever, quake really is a dumb client. its like playing web-based games using only html and no javascript.
basically its the difference between sending images from the server, and having code running on the client generating the image locally. just that the 'image' in this case is the gamestate snapshot.
Dirge Inferno
Posts: 34
Joined: Sat Feb 25, 2012 6:44 am
Location: Adelaide, South Australia
Contact:

Re: Differences between Q1, Quake World and Net codebases (q

Post by Dirge Inferno »

leileilol wrote:
Dirge Inferno wrote: I think the word your looking for is inferior,
No it isn't, and he isn't looking for "superior" either. We aren't little children.

You misunderstood the term "dumb". Even Carmack has described Quake being a dumb client.
Dumb; simplify or reduce the intellectual content of something so as to make it accessible to a larger number of people.

If John called Quake a dumb client then it's obvious he doesn't care about making games anymore and only cares about the $$. Anyway it's not, it's a great game.
mh
Posts: 2292
Joined: Sat Jan 12, 2008 1:38 am

Re: Differences between Q1, Quake World and Net codebases (q

Post by mh »

Nope, "dumb client" is used in the very same context as "dumb terminal", and no amount of trying to ascribe other motivations will prove otherwise.

The slashdot post linked dates from 1999 so any attempt to use it as evidence for JC's attitude today is completely invalid - I'd suggest actually reading it next time. Further proof? Here's one from 1996 - http://www.team5150.com/~andrew/carmack ... #d19960802
I am sad to see the elegent client-as-terminal setup go away
Definition of "dumb terminal" - http://www.computer-dictionary-online.o ... 20terminal
A type of terminal that consists of a keyboard and a display screen that can be used to enter and transmit data to, or display data from, a computer to which it is connected. A dumb terminal, in contrast to an intelligent terminal, has no independent processing capability or auxiliary storage and thus cannot function as a stand-alone device.
Which quite accurately mirrors the NetQuake client, just handling output and input but with all significant processing happening on the server.

People here aren't stupid. People here have been part of the Quake community since the 90s and know this stuff already. That kind of talk ain't gonna wash.
We had the power, we had the space, we had a sense of time and place
We knew the words, we knew the score, we knew what we were fighting for
Dirge Inferno
Posts: 34
Joined: Sat Feb 25, 2012 6:44 am
Location: Adelaide, South Australia
Contact:

Re: Differences between Q1, Quake World and Net codebases (q

Post by Dirge Inferno »

I never said people here were stupid, and dumb client isn't exactly an official definition it's slang talk. And I did read it, sorry. "That kind of talk", what?
mh
Posts: 2292
Joined: Sat Jan 12, 2008 1:38 am

Re: Differences between Q1, Quake World and Net codebases (q

Post by mh »

Dirge Inferno wrote:I never said people here were stupid, and dumb client isn't exactly an official definition it's slang talk. And I did read it, sorry. "That kind of talk", what?
You didn't say people are stupid, but you're sure treating us as if we were.

This kind of talk, by the way:
Dirge Inferno wrote:If John called Quake a dumb client then it's obvious he doesn't care about making games anymore and only cares about the $$. Anyway it's not, it's a great game.
If you read the slashdot post, you would have known that it dates from 1999 and therefore has no bearing whatsoever on JC's attitude today.

A quick google for "dumb client" would have also helped with explaining what is meant. And regarding slang talk, a whole lot of computing terms originated as slang talk too. Where do you think "bug", for example, came from? "dumb terminal" is a phrase that has been in use for a long long time, it's reasonable to expect that when someone mentions "dumb terminal" the intended meaning is clear to the audience, particularly when the audience has the required background and knowledge. Any attempt to try prove otherwise (e.g. "If John called Quake a dumb client then it's obvious he doesn't care about making games anymore and only cares about the $$") is a waste of your own time. Don't even go there. Or do, if you want "Death Metal 2000" all over again. :wink:
We had the power, we had the space, we had a sense of time and place
We knew the words, we knew the score, we knew what we were fighting for
Dirge Inferno
Posts: 34
Joined: Sat Feb 25, 2012 6:44 am
Location: Adelaide, South Australia
Contact:

Re: Differences between Q1, Quake World and Net codebases (q

Post by Dirge Inferno »

mh wrote:You didn't say people are stupid, but you're sure treating us as if we were.
How so?
mh wrote:This kind of talk, by the way:
If you read the slashdot post, you would have known that it dates from 1999 and therefore has no bearing whatsoever on JC's attitude today.
The desire to make money will always overthrow the desire to make magic.
mh wrote:A quick google for "dumb client" would have also helped with explaining what is meant. And regarding slang talk, a whole lot of computing terms originated as slang talk too. Where do you think "bug", for example, came from? "dumb terminal" is a phrase that has been in use for a long long time, it's reasonable to expect that when someone mentions "dumb terminal" the intended meaning is clear to the audience, particularly when the audience has the required background and knowledge.
Sorry I use a real dictionary for words, not the internet.
mh wrote:Any attempt to try prove otherwise (e.g. "If John called Quake a dumb client then it's obvious he doesn't care about making games anymore and only cares about the $$") is a waste of your own time. Don't even go there. Or do, if you want "Death Metal 2000" all over again. :wink:
What?
Spirit
Posts: 1065
Joined: Sat Nov 20, 2004 9:00 pm
Contact:

Re: Differences between Q1, Quake World and Net codebases (q

Post by Spirit »

Don't feed this troll please.
Improve Quaddicted, send me a pull request: https://github.com/SpiritQuaddicted/Quaddicted-reviews
Dirge Inferno
Posts: 34
Joined: Sat Feb 25, 2012 6:44 am
Location: Adelaide, South Australia
Contact:

Re: Differences between Q1, Quake World and Net codebases (q

Post by Dirge Inferno »

I'm not a troll.
Locked