Forums | Chat | News | Contact Us | Register | PSU Social |
PSU: Houston, we have lunch break.
Forums | Chat | News | Contact Us | Register | PSU Social |
Home | Forum | Chat | Wiki | Social | AGN | PS2 Stats |
|
|
|
Thread Tools | Search this Thread | Display Modes |
2011-10-06, 09:25 PM | [Ignore Me] #31 | |||
Colonel
|
In a completely server-side system you don't experience the same problems at all. If you have a low latency you'll play the game perfectly. The people with higher latency will aim at old state and shoot and the server will get the player's direction and calculate the CoF and other offsets and send the bullet states to all the clients which will then create them and extrapolate to the current server state. (Not the only synchronization method. Running behind time is another option). So a server-side only system is really nice for low latency players. A client-side system with server-side checks are good for high latency players. Actually it'll only be fine if the latency between the server and you and the server and the person that is firing at you is good. You see that as "the server is good" which is only halfway right. If you join a server where you have 30 ms ping and everyone else has 150 ms pings it's going to feel like you're dying randomly before you can react. In this way the client-side system is often viewed as giving advantage to players that lag. However, without it players with high latency would get very mad that they have problems shooting. So the developers usually feel it's a good compromise so everyone hits when they shoot at which generally makes players feel better about the game even if it skews with the fairness.
__________________
[Thoughts and Ideas on the Direction of Planetside 2] Last edited by Sirisian; 2011-10-06 at 09:30 PM. |
|||
|
2011-10-06, 09:39 PM | [Ignore Me] #32 | |||
Major General
|
is it a FACT BF3's hit detection is CS or are people simply presuming because they're dying around corners? |
|||
|
2011-10-07, 02:56 AM | [Ignore Me] #34 | ||||
Colonel
|
This is more of a pen and paper problem. You can imagine a player being a little outside a corner. He presses strafe and sends a packet to the server with his input. Depending on the game, but usually, the client-side will begin simulating the change immediately even as the packet propagates to the server which takes round trip time (RTT) aka Latency / 2. On the server even when it gets the packet it doesn't immediately act on it. It must wait until the next server update. At that point it processes the input packets and performs and update then builds packets for each player and sends them. However during the update it has a few choices. It can assume the action just happened at this update. Or it can assume the action occurred Latency / 2 time in the past relative to when the packet was received. This gives us a time dilation of -((ServerTimeNow - PacketReceivedServerTime) + ClientLatency / 2). There's a whole level of statistics for this, but we'll keep it simple. We'll say the server updates 20 times per seconds and sends packets at that rate which is pretty good. That gives us an update frequency every 50 ms. We'll assume on average the arrival of a packet is between updates so the wait time for a packet before it's processed is 25 ms. We'll make another assumption. The user has a horrible latency of 150 ms. (Anything below 70 ms is generally considered okay). So when a person presses a key assuming they send the packet immediately asynchronous of any game loop on the client-side (big assumption) it would take 150 / 2 + 25 ms until the packet is processed. That is 100 ms delay. Okay before I continue I want to point out that multiplayer games generally add momentum to characters so they feel sluggish. This is not a realism/gameplay thing so much as it's a way to soften lag usually. If it takes you a while to change direction then players won't see a sudden jump when extrapolating. Okay anyway so extrapolating. On the client-side lets assume there is no inertia so the player instantly starts moving with a velocity of 1.5 m/s. Now by the time the server has gotten the packet to even consider allowing the movement the player has moved 1.5 m/s * 100 ms = 15 cm. However, no one else knows that yet! So the server updates which we'll assume to take < 1 ms so it's negligible to our calculations. During this update it sees the player's input packet and goes "this player requested to strafe 100 ms ago. Okay we'll allow that and assume that action started 100 ms ago and move their position 15 cm and also set their velocity to 1.5 m/s in a direction." So this information is sent out to the clients. Each client has it's own latency so when it gets the packet and sees the position update. (Again this timing can get complicated since the client usually processes packet synchronously before updating and not asynchronous, but we'll ignore that since the update could be 60 ms making the delay negligible). Okay so the clients see the position data for the player and its new velocity. However that data is old. It's their latency / 2 old. If their latency is 30 ms then it's 15 ms old information. If their latency is 150 ms also then it's 75 ms old. So when it gets the data it must extrapolate using the velocity to an estimated server position. So lets go with 150 ms and assume everyone is far from the server. That means the player is no offset 1.5 m/s * 75 ms = 11 cm. So on total the player has "jumped" 11 cm + 15 cm 26 cm since the last update. That's essentially 0.3 meters or 1 foot. The same effect happens to projectiles when the user is firing. So the projectiles might be created That's pretty bad. So you might be thinking "okay if everyone has 150 ms" then you'd expect a lot of corner kills as players quickly jump back since there's a possible 75 + 25 + 75 = 175 ms delay between when an enemy actually shoots and you see the update and you could already be taking damage. You'll also notice that this system rewards players with a high latency since it's essentially rewinding the simulation on the server to create bullets in the past and firing them. So is this system flawed? Not really. There's a number of tricks. One of the biggest is assumed latency. If you know all your players are generally playing with over 50 ms latency you can play the simulation on the server in the past. Another thing is to perform the input updates at the server-time without going back in time using the client's latency. This is nice because there's less perceived lag; however this hurts players with latency issues since they'll perform an action like "fire weapon" then it would occur in our problem 175 ms later and other players would only see a delay of their own latency / 2. This can be annoying for players that lag since it feels like their lagging. Players that don't lag wouldn't even notice if other players lag and would gain a slight advantage since their actions would be performed faster. (If that doesn't make sense. Imagine a user with 30 ms latency. It takes 15 ms to get to the server so they have a higher chance of inserting their packet and getting it processed in the newest server update while a player with 150 ms latency might see their input processed on the next update). Someone else can do some other calculations, but that's one general approach. There are a lot of trade-offs which give either players with a high latency an advantage or players with a low latency an advantage. Ideally you want a system that is "fair". Like I said the "assumed latency" system does that by assuming a given latency for all players even if they don't have latency issues. It's generally the best system and doesn't have to use any client-side hit detection information. However it does make it slightly harder to get headshots when a player is quickly changing directions constantly unless there is inertia to smooth out the extrapolation. You see with client-side the idea is to make everyone happy and hope that no one with a high latency exploits their advantage. That's a big assumption. One I don't feel SOE should make. I just hope they have skilled network programmers.
__________________
[Thoughts and Ideas on the Direction of Planetside 2] |
||||
|
2011-10-07, 06:36 AM | [Ignore Me] #35 | |||
Major General
|
lol they made it clinetside with 64? players...*facepalm*. they need some SOE programmers. |
|||
|
2011-10-07, 10:21 AM | [Ignore Me] #36 | ||
PSU Admin
|
BF3's hit detection is atrocious. I constantly die and warp back 20 ft to where someone killed me. Not to mention taking cover and being killed well after I am behind it.
I am guessing (hoping) this has been fixed up in the final version we will play on the 25th. |
||
|
2011-10-07, 12:59 PM | [Ignore Me] #40 | ||
I don't experience that either. I will occasionally get pegged right when I think I've gotten to cover, but never have I had a big warp.
Part of the issue is that you think you're behind a rock and you can still get hit...because you can shoot through rocks right now.
__________________
All opinions are not equal. Some are a very great deal more robust, sophisticated and well supported in logic and argument than others. |
|||
|
2011-10-08, 02:25 AM | [Ignore Me] #43 | ||
Colonel
|
I would have to play the game to know all the references, but I'm guessing, you can see above your actual height, your weapon doesn't have to seem to be pointing at the enemy to kill him.
Due to coding fractures and/or cheats. Or could you explain it to me? Never played the game, but it was funny to watch. |
||
|
|
Bookmarks |
|
|