Fortress Forever

Go Back   Fortress Forever > Community > General Discussion

Reply
 
Thread Tools Display Modes
Old 05-29-2013, 01:00 AM   #41
talcum
 
Join Date: Nov 2010
Gametype: Capture the Flag
Posts Rated Helpful 0 Times
The amount of labor theoretically required to port FF from Source to a Quake engine seems enormous. Suggesting a port right now seems totally unrealistic. However:

Quote:
Originally Posted by squeek. View Post
Quake engines scare and confuse me. I tried a few times to set up a development environment to mess around with for Quake 4 or Doom 3 or w/e and failed each time. Also, I believe the licensing requires that any derivative mods of the open-sourced Quake engines open-source their code as well. Not sure if that'd be a good or bad thing (maybe good?).
As cake mentioned, if a mod interacts only with the Q3/Q4 virtual machine, then it is not considered derivative. Changes to the engine (e.g. ioquake3) are derivative and GPL'ed.

Quote:
Originally Posted by the_cake View Post
Certain engines do a better job than others. Source is around the very bottom of the list. goldsrc, every quake engine, warsow, and CoD are examples of good ones.
Vanilla Quake engines have never had server-side lag compensation. They typically had good hit registration under imperceptible LAN latencies, though they included kludges like cl_timenudge, and though their model animations sometimes fell badly out of alignment with their hitboxes. But perceptible latency was always the player's problem. I think Quake Live is in a different category from Q1 through Q4 since, to date, nobody can mod QL or see the source.

Modders and engine maintainers have written lag compensation after id's releases. For instance, Quakeworld's maintainers added a lag compensation system that they call "anti lag", and Neil Toronto wrote a mod called Unlagged for Quake 3.

Even Quake 4 base does not have server-side lag compensation. If you are playing Q4 with 150 ping, you have to lead rails on a moving target by about 150 ms. I put thousands of hours into Quake, but I would trade vanilla Quake netcode on WAN for Source's or GoldSrc's netcode in an instant.

I used the phrase "server-side lag compensation" above. Based on what I've read by Yahn Bernier (Valve, GoldSrc and Source?) and Neil Toronto (Unlagged for Quake 3), here's what I think that phrase means. I first read about this around a decade ago and have only lazily followed new developments, so I may be out of date.

Recall that the server operates in discrete time. Consider tickrate in Source or sv_fps in recent Quake engines: these variables specify how many times per second the server will update the gamestate. As the server advances the gamestate in discrete time, it stores the last roughly 500 ms of gamestate snapshots. This is like the server remembering the exact state of play for the last half second. Whenever a client sends a shoot command, the server checks the client command timestamp, loads the gamestate reflecting that moment in time, and traces the shot against the state of the world as the client observed it. This is sometimes called backwards reconciliation.

Ideally, the server should then fast-forward to the current time to check whether the shot is still legal. This last step prevents the sensation of being "shot around a corner" by a high pinger, or even worse, being shot by a high ping enemy that you have already killed. This is still a real problem in modern games: see PlanetSide 2.

Note that this technique only covers hitscan weapons. There have been attempts to extend the technique to projectiles, but these approaches tend to result in projectiles effectively springing into existence at varying distances out of the barrel, often unacceptably altering game balance. Furthermore, every modern FPS game client does some form of interpolation and/or extrapolation between gamestate snapshots received from the server; fancy lag compensation implementations could potentially simulate the client's interp/extrapolation behavior.
talcum is offline   Reply With Quote


Old 05-29-2013, 02:01 AM   #42
the_cake
Beta Tester
 
Join Date: Jul 2008
Posts Rated Helpful 144 Times
My opinions were based mostly what would work best for a fortress game in general; I realize it's completely unrealistic to port FF to quake at this point. Ideally you'd start fresh at that point anyway.

Your interpretation of lag compensation is pretty much correct. The interpolation latencies are included in the calculation. Quake never came stock with lag compensation (other than ql), but most servers since q3 ran unlagged. It worked pretty well. Also, if you have a really consistent connection, fixed time nudging actually works great (it's still present in quake 1/2).

Where server side lag comp tends to break down is when player latencies and update rates are inconsistent (ping jumping). Like you said the server tries to "rewind" the game state by whatever the player's latency is from the mouse click to the server message (ping + interp + whatever other internal latencies). The latency is where the guess work is. If everyone's ping was perfectly stable all the time this system would be perfect. Even with a good connection this isn't true; the server has no way to guess when player latency will change, instead it just makes the assumption that it never does. If the server can't get an accurate idea of where the player is aiming and where the target is located, the system breaks down. The negative impact of guess work is proportional to the target speed, hitbox size, and bullet size; which is why fast pace games have a harder time. This is why I support a system using client side in some way; the client doesn't need to guess. It knows where the player is aiming because the player is sitting right there, not 800 miles away.

In terms of what source does, no one really knows except the source devs as no one has access to the code. Almost everyone agrees something is broken though. This was one of the motivations for making the head hitbox massive in CSS; headshots were mostly random. Now they're consistent but tack on a million accidental headshots that shouldn't be headshots; this is why spray works so well.

Last edited by the_cake; 05-29-2013 at 02:10 AM.
the_cake is offline   Reply With Quote


Old 05-29-2013, 02:17 AM   #43
Dexter
internet user
Fortress Forever Staff
 
Dexter's Avatar
 
Join Date: Jun 2007
Posts Rated Helpful 42 Times
what do you mean no one knows what it does? it interps the best it can
__________________
9:17 PM - DEXTER: can you teach me how to play o
9:17 PM - squeek.: you jump a lot
9:18 PM - squeek.: and do sweet moves

8:55 PM - FDA: fart in you fridge and blame it on wild animals
Dexter is offline   Reply With Quote


Old 05-29-2013, 02:32 AM   #44
talcum
 
Join Date: Nov 2010
Gametype: Capture the Flag
Posts Rated Helpful 0 Times
Quote:
Originally Posted by the_cake View Post
Quake never came stock with lag compensation (other than ql), but most servers since q3 ran unlagged.
Most Q3 servers when I played ran OSP, CPMA, or RA3. Each of these had their own weird netcode-related tweaks, though CPMA's were probably the most mature of the three. No league or pickup channel I ever found used Unlagged, though there were such communities for CPMA and OSP.

Quote:
Originally Posted by the_cake View Post
Where server side lag comp tends to break down is when player latencies and update rates are inconsistent (ping jumping). Like you said the server tries to "rewind" the game state by whatever the player's latency is from the mouse click to the server message (ping + interp + whatever other internal latencies). The latency is where the guess work is.
I think this is true of GoldSrc since the client commands didn't include timestamps. Unlagged didn't need to estimate client latency because Q3 client commands included usable timestamps.
talcum is offline   Reply With Quote


Old 05-29-2013, 02:43 AM   #45
the_cake
Beta Tester
 
Join Date: Jul 2008
Posts Rated Helpful 144 Times
All I did was pub q3, and most had unlagged. As far as OSP/CPMA goes, those had full on lag compensation right?

Timestamps don't help anyone much as the server still has to determine where in time your game state is relative to the servers. This changes every time your ping changes, even if only by a couple ms and even if interp is hiding most of it. If everyone's ping was perfectly consistent this wouldn't be an issue. Aside from seeing into the future there really isn't any way to know when someone's ping will change.

Last edited by the_cake; 05-29-2013 at 02:45 AM.
the_cake is offline   Reply With Quote


Old 05-29-2013, 03:39 AM   #46
Sabbath
 
Join Date: Mar 2009
Gametype: Capture the Flag
Posts Rated Helpful 7 Times
cakefixyourffthanks
Sabbath is offline   Reply With Quote


Old 05-29-2013, 03:44 AM   #47
FDA_Approved
Beta Tester
 
FDA_Approved's Avatar
 
Join Date: Nov 2011
Gametype: Capture the Flag
Posts Rated Helpful 293 Times
ya
__________________
Currently equipped: Rad Scarf of liberating happiness.
FDA_Approved is offline   Reply With Quote


Old 05-29-2013, 04:54 AM   #48
talcum
 
Join Date: Nov 2010
Gametype: Capture the Flag
Posts Rated Helpful 0 Times
Quote:
Originally Posted by the_cake View Post
All I did was pub q3, and most had unlagged. As far as OSP/CPMA goes, those had full on lag compensation right?
None of OSP, CPMA, or RA3 used Unlagged. OSP and CPMA had some hacks related to client-side interpolation (sometimes called the "50 ms lag").

Quote:
Originally Posted by the_cake View Post
Timestamps don't help anyone much as the server still has to determine where in time your game state is relative to the servers. This changes every time your ping changes, even if only by a couple ms and even if interp is hiding most of it. If everyone's ping was perfectly consistent this wouldn't be an issue. Aside from seeing into the future there really isn't any way to know when someone's ping will change.
Not true. Q3 client command timestamps are synchronized to the server. Furthermore, they contain sufficient information for the server to tell how far the client had interpolated between two gamestate snapshots, regardless of the client's cl_timenudge value. If I recall correctly, these timestamps have 1 ms resolution. Unlagged's implementation actually copies the client-side interpolation code exactly so that the server can figure out just what the client saw when it generated the command. This approach is not affected by ping fluctuation. The only condition is that client ping stay within the bounds of history kept by the server (like 500 ms or 1 s or whatever). Client ping is free to vary under that limit without damaging Unlagged's fidelity.

With GoldSrc, I think timestamps were missing from the protocol. So I think GoldSrc used latency estimation instead.
talcum is offline   Reply With Quote


Old 05-29-2013, 07:02 AM   #49
the_cake
Beta Tester
 
Join Date: Jul 2008
Posts Rated Helpful 144 Times
So lets say this happens:

1. Server updates me, everything is in sync
2. my ping jumps by 50
3. Server updates me again, but it arrives 50 ms late. I'm now 50 ms out of sync with the server time. Since there are no latency based calculations in this scheme, neither the server or client have any idea I've gone out of sync until the next client message.
4. I shoot something, sending a time stamped message, but message is 50ms late because of lag spike
5. Client updates server, back in sync, hit gets calculated. But now server has to interpolate between my gametime at 1 and my gametime at 4; in other words guess. We're just using gametime instead of ms; and now the server has to wait for a client update to have any idea what's going on.

This gets more complicated during short spikes where latency changes more than once between client and server updates. A 66 tick server updates once every 15ms. It's very realistic to have a 50 ms spike in there that disappears between client updates. So the server will basically have no idea. I know some engines can log updates between ticks which helps, no idea which game engines can; though I'm pretty sure goldsrc does as high fps servers seem to make a difference.
the_cake is offline   Reply With Quote


Old 05-29-2013, 09:53 AM   #50
talcum
 
Join Date: Nov 2010
Gametype: Capture the Flag
Posts Rated Helpful 0 Times
Quote:
Originally Posted by the_cake View Post
So lets say this happens:

1. Server updates me, everything is in sync
2. my ping jumps by 50
3. Server updates me again, but it arrives 50 ms late. I'm now 50 ms out of sync with the server time. Since there are no latency based calculations in this scheme, neither the server or client have any idea I've gone out of sync until the next client message.
4. I shoot something, sending a time stamped message, but message is 50ms late because of lag spike
5. Client updates server, back in sync, hit gets calculated. But now server has to interpolate between my gametime at 1 and my gametime at 4; in other words guess. We're just using gametime instead of ms; and now the server has to wait for a client update to have any idea what's going on.

This gets more complicated during short spikes where latency changes more than once between client and server updates. A 66 tick server updates once every 15ms. It's very realistic to have a 50 ms spike in there that disappears between client updates. So the server will basically have no idea. I know some engines can log updates between ticks which helps, no idea which game engines can; though I'm pretty sure goldsrc does as high fps servers seem to make a difference.
Your timeline is ambiguous and seems slightly confused. It starts with an impossible premise in #1: the client and server are never "in sync" in scenarios where Unlagged matters. In #3, you write that "neither the client or server have any idea I've gone out of sync". This is untrue. A Q3 client knows exactly how often to expect snapshots from the server, how long ago it last received one, and therefore how "early" or "late" an incoming gamestate snap is. The Q3 server also tracks, for each client, the last acknowledged snapshot from that client. Unlagged goes a step further to track the last frame during which a command was received from any given client (for skip correction).

You also seem to be writing about having a 50 ms "spike in there", where "in there" is a 15 ms interval. I think? It's not exactly clear how you want this to be interpreted. I think you're talking about a client receiving snapshots out of order. It's either that or the "spike" would be unobservable. Keep in mind that the Q3 server delta-compresses client snapshots versus the last snapshot acknowledged by each client. Out-of-order receipt of gamestate snapshots is handled on the client in much the same way as a dropped gamestate snapshot.

Unlagged's timestamping approach really does work. You may want a look at a mirror of Neil Toronto's documentation at www.ra.is/unlagged/ (the "Code Walkthroughs" and FAQ are particularly good). There is also a nice commentary on the Q3 network code at http://fabiensanglard.net/quake3/network.php, but it is not exhaustive and doesn't cover Unlagged. The best way to investigate this is through the Unlagged code at http://games.mirrors.tds.net/pub/pla...%5d.01-src.zip and a copy of ioquake3's source; if you are determined to see how this works, you can do so with those two source trees.
talcum is offline   Reply With Quote


Old 05-29-2013, 09:44 PM   #51
XPelargos
I like to spam binds
Beta Tester
 
XPelargos's Avatar
 
Join Date: May 2009
Class/Position: Scoooooot
Gametype: Capture the Flag
Posts Rated Helpful 73 Times
slow clap for talcum. Dayummm son!
XPelargos is offline   Reply With Quote


Old 05-30-2013, 12:32 AM   #52
Dexter
internet user
Fortress Forever Staff
 
Dexter's Avatar
 
Join Date: Jun 2007
Posts Rated Helpful 42 Times
lame pissing contest about unrelated games netcode here
__________________
9:17 PM - DEXTER: can you teach me how to play o
9:17 PM - squeek.: you jump a lot
9:18 PM - squeek.: and do sweet moves

8:55 PM - FDA: fart in you fridge and blame it on wild animals
Dexter is offline   Reply With Quote


Old 05-30-2013, 12:48 AM   #53
the_cake
Beta Tester
 
Join Date: Jul 2008
Posts Rated Helpful 144 Times
Didn't mean for it to seem like a pissing contest and I don't think talcum did either, we were just discussing netcode in general as these principals apply to almost all engines. Unlagged is one of the better lag comp systems but my only point was it has it's flaws and could be better. Though this is obviously starting to head south so I'll let it be and you guys can have your thread back.

Last edited by the_cake; 05-30-2013 at 01:12 AM.
the_cake is offline   Reply With Quote


Old 05-30-2013, 12:56 AM   #54
KubeDawg
Nade Whore
Server Owner
Beta Tester
 
KubeDawg's Avatar
 
Join Date: Sep 2007
Location: Oklahoma
Class/Position: Scout/Soldier
Gametype: CTF/TDM
Affiliations: blunt. Moto
Posts Rated Helpful 128 Times
It would be kinda cool to see a Quake style Fortress Forever as long as it's not super fucking fast gameplay like some of today's quake games. I certainly wouldn't mind seeing the Medic with a fucking battle axe, that's for sure.
__________________
Moto's Funhouse | Dallas, TX - 74.91.114.247:27015

ff_plunder - Complete
KubeDawg is offline   Reply With Quote


Old 05-30-2013, 01:13 AM   #55
squeek.
Stuff Do-er
Lua Team
Wiki Team
Fortress Forever Staff
 
squeek.'s Avatar
 
Join Date: Mar 2007
Location: Northern California
Class/Position: Rallygun Shooter
Gametype: Conc tag (you just wait)
Affiliations: Mustache Brigade
Posts Rated Helpful 352 Times
Send a message via AIM to squeek.
There are plenty of Quake Fortress mods.

Quake 3 Fortress (apparently died after beta2)
Enemy Territory Fortress (port/improvement of q3f on a different engine but still extremely Quake-ish; I know there's an active community for this as NeoNL plays it)
Quake 4 Fortress (never got totally finished?)
__________________
#FF.Pickup Fortress-Forever pickups

My Non-official Maps
Released FF_DM_Squeek - FF_2Mesa3_Classic - FF_Siege_Classic
Beta FF_Myth - FF_Redlight_Greenlight

Sick of the people on the internet, always moanin'. They just moan.
- Karl Pilkington

Last edited by squeek.; 05-30-2013 at 01:14 AM.
squeek. is offline   Reply With Quote


Old 05-30-2013, 01:33 AM   #56
KubeDawg
Nade Whore
Server Owner
Beta Tester
 
KubeDawg's Avatar
 
Join Date: Sep 2007
Location: Oklahoma
Class/Position: Scout/Soldier
Gametype: CTF/TDM
Affiliations: blunt. Moto
Posts Rated Helpful 128 Times
Sorry, I mean a new game with amazing gfx and gameplay.
__________________
Moto's Funhouse | Dallas, TX - 74.91.114.247:27015

ff_plunder - Complete
KubeDawg is offline   Reply With Quote


Old 05-30-2013, 01:42 AM   #57
FDA_Approved
Beta Tester
 
FDA_Approved's Avatar
 
Join Date: Nov 2011
Gametype: Capture the Flag
Posts Rated Helpful 293 Times
Quote:
Originally Posted by KubeDawg View Post
It would be kinda cool to see a Quake style Fortress Forever as long as it's not super fucking fast gameplay like some of today's quake games. I certainly wouldn't mind seeing the Medic with a fucking battle axe, that's for sure.
I mean FF is kind of already a healthy tfc/quake combo. And in terms of "todays quake" FF is already just as fast. Compared to stock q4 and ql anyways. In cpma at least the DM can get very fast with fast weapon switch, but that also has a lot to do with weapon/armor balance as well as map control. I believe movement is uncapped in cpma (no idea really, just assuming) But even then, with the way some maps are it's not very likely for you to be faster than FF standards

Tbh ETF is slow as piss nuggets. The acceleration at least. You can get up to a good pace, but quick acceleration via bhoping alone isn't viable. You need to rocket jump or nade boost. Or drop conc, because there's no HH.

I hate to say it but I don't really like "quake" styled fortress. It usually implies no HH concing, and that old QWTF style reload, where you have to reload every shot fired from a clip before being able to shoot OR switch weapons. (aka 1 rocket in rpg, can't just reload 2 and shoot 1, reload 2 and switch to shotty)

I've played around on listen servers with Q4F and it's certainly interesting. But it has the above mechanics, and there's no ramp sliding which is odd. But on the other hand you don't loose speed trimping, so you can bhop any ramp without loosing speed. It has the potential to play out fairly close to FF, but that reload style and no HH concs really turns me off.
__________________
Currently equipped: Rad Scarf of liberating happiness.
FDA_Approved is offline   Reply With Quote


Old 05-30-2013, 01:53 AM   #58
KubeDawg
Nade Whore
Server Owner
Beta Tester
 
KubeDawg's Avatar
 
Join Date: Sep 2007
Location: Oklahoma
Class/Position: Scout/Soldier
Gametype: CTF/TDM
Affiliations: blunt. Moto
Posts Rated Helpful 128 Times
So going forward, what do you think would be a good new fortress game for the future, assuming it would be on the new SDK that is being developed right now?
__________________
Moto's Funhouse | Dallas, TX - 74.91.114.247:27015

ff_plunder - Complete
KubeDawg is offline   Reply With Quote


Old 05-30-2013, 02:05 AM   #59
FDA_Approved
Beta Tester
 
FDA_Approved's Avatar
 
Join Date: Nov 2011
Gametype: Capture the Flag
Posts Rated Helpful 293 Times
FF with a few adjustments here and there. FF is close to my idea of a perfect fortress game. At least in terms of physics and some of the mechanics. Could maybe use some rebalancing of weapons, I certainly wouldn't be sad to see over pressure go. And while I like jump pads, I wouldn't mind nixing those if it was generally agreed for a better fortress. Maybe the spy could have a new toy, maybe...something based around movement. Something fun and different that plenty of new players could enjoy.

I would certainly love to see the sniper and pyro reworked. After burn as a mechanic needs to be dropped completely and forgoten about for ever. And the sniper needs to be reworked into a class that doesn't sit in spot away from the action. Because lets face it, sniping is the entire fucking problem with the sniper.

And yes I really do like FF. But I still strongly feel that the next logical step that has any hope of attracting any kind of crowd is a new game.
__________________
Currently equipped: Rad Scarf of liberating happiness.
FDA_Approved is offline   Reply With Quote


Old 05-30-2013, 02:10 AM   #60
Dexter
internet user
Fortress Forever Staff
 
Dexter's Avatar
 
Join Date: Jun 2007
Posts Rated Helpful 42 Times
Quote:
Originally Posted by the_cake View Post
Didn't mean for it to seem like a pissing contest and I don't think talcum did either, we were just discussing netcode in general as these principals apply to almost all engines. Unlagged is one of the better lag comp systems but my only point was it has it's flaws and could be better. Though this is obviously starting to head south so I'll let it be and you guys can have your thread back.
no worries, just poking fun and came off a little too serious..


anyway, with the way SDK updates are a ghost town, I hope valve pulls something outta their but for source 2 but am certainly not betting the house on it
__________________
9:17 PM - DEXTER: can you teach me how to play o
9:17 PM - squeek.: you jump a lot
9:18 PM - squeek.: and do sweet moves

8:55 PM - FDA: fart in you fridge and blame it on wild animals
Dexter is offline   Reply With Quote


Reply


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 07:26 PM.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2019, vBulletin Solutions, Inc.