Jump to content

fatheroftheyear

Members
  • Posts

    75
  • Joined

Everything posted by fatheroftheyear

  1. This is not an assumption. I played the game while monitoring its active connections and there was only TCP. This is also how I discovered the rate that packets were being sent by the server. This in turn indicates what the tickrate is. If the game uses UDP at all, it's not for position updates.
  2. As I mentioned in the OP, this is based on my best guess of what is going on. If you could elaborate on what you think isn't correct and why it would be very helpful.
  3. It makes sense that activating abilities also forces a position update. I did mention that jumping was just one of the ways to do this. Almost all of the instances where the cross on underlurker screws up for me have been fairly obvious as position update problems. Particularly when you're standing next to him and get "out of range" when you try to activate a 10M ability. I know there are ways for tanks to make this less likely, but you don't usually see that in PUGs. Revanite commanders has a similar bug where the commanders don't appear to jump back up after being pushed, but at least that one doesn't cause wipes.
  4. Networking: The problems If you have ever seen any of the following bugs, then you have seen the effects of poor networking: 1. Mobs that "survive" a fall from a high edge, and then continue shooting from the ground at crazy range. 2. Being hit by a ground target AOE that you moved far outside of. 3. Being killed by the "cross" mechanic of Underlurker when positioned correctly. 4. Activating phase walk from a distance you know to be within 60m, but it doesn't work. There are many more examples of the effects of poor networking, but these are some of the more obvious ones. So what's wrong? Can it be fixed? And if so, how? The fundamental problems with SWTOR's networking can be narrowed down to a few points: 1. Using TCP connections for latency-sensitive position data. 2. Not updating the positions of objects unless they are moving. 3. The game client not sending your character's position often enough. Let's break it down one at a time. First of all, why is TCP bad for latency-sensitive objects? TCP is a connection protocol that makes 3 guarantees: 1. That all packets sent will arrive. 2. That packets will arrive in the order they were sent. 3. That all packets will be error-free. That sounds great! Making sure everything you send always arrives, and in the right order makes things easy! Not so fast, the problem is what must be done to achieve this: any packets that are lost in transit must be re-sent. Compounding this, you can't use any of the newer packets coming in until the lost one is resent because everything must stay in order. For some systems, this is perfectly fine. (chat, inventory, group invites, ect) However, this is VERY bad for latency sensitive data such as the position of objects in the world. So how do you fix this? Use UDP for latency sensitive data. UDP doesn't guarantee anything, it just sends data blindly. On a stable connection, the VAST majority of these packets will arrive intact. But what happens if you have packet loss? As it turns out, asking the server to re-send position data isn't worth it. By the time the server could re-send the missing data it's already out of date and no longer matters! So you just skip the missing update and continue to use the newer data as it comes in. The gaps can be filled in by interpolating between the positions in the packets that arrived just before and after the one that was lost. It's not perfect, but it's a lot better than re-sending the old data. The main benefit of this change would be a general reduction in the amount of lag with the positions of objects. Especially on connections with some packet loss. Next up, why is it a bad idea to stop updating the position of objects that are not moving? At first this looks like a fantastic way to save some bandwidth, but in reality this can cause some very big problems. In order for this technique to be effective, you must be certain that the position of the object is exactly the same on the client and server. The reason is that any differences will not be resolved until the object moves again. In most cases, these differences are tiny and won't be noticed. However, when you do notice, it tends to be very bad. Most of the problems with the "cross" mechanic on Underlurker can be blamed on this "optimization". Underlurker does not move while he is channeling the cross, so his position stops being updated the instant he starts casting. If there are any differences in the position on the client and server, you are going to end up standing in the wrong place and wiping. How can this be fixed? This one is actually very simple at a high level. Important objects like players and bosses should be exempted from this optimization and continue to update at the rate they would while moving. The bandwidth required to do this isn't a problem. It takes on the order of 1 Kbit/sec per object to update its position 10 times per second. Additionally, any NPCs in combat with the player should maintain a non-zero update rate even when stationary. This would correct the problem with mobs appearing to have survived being knocked off a high ledge. That happens because on the server the mob didn't fall - he's still standing on the edge shooting you, but you can't see this because the position is never updated. And finally, what is wrong with the client sending character position updates? What appears to be happening is that the game only sends your position to the server infrequently unless certain events happen. Jumping is one of the special cases that forces an immediate update. This is why you need to jump as you are moving out of ground target AOE in order to not be hit. If you waited for the next regular update, it would be too late and you would be hit by the AOE by the time the server sees that you have moved out of it. How do we fix this one? Simple: the game should always send the current position of your character to the server 10 times per second. The QoL gained from this is well worth the ~1 Kbit/sec of upload bandwidth it requires. Why 10 times per second? That appears to be the tickrate of the servers in SWTOR. The server only updates the state of the game world 10 times per second so sending your position more often doesn't make sense. This would completely eliminate the requirement to jump when moving out of AOE. Expecting players to understand this flaw in the networking and manually work around it is unreasonable. What's the point of all this? I'm making this post to raise awareness of these issue and what causes them. Hopefully understanding what's happening will help some players work around the problems. Ideally, BioWare will address these issues and end up with a much better game. TL;DR Position lag and problems caused by incorrect positions such as underlurker are due to the game's networking code. The problems are fixable, but the difficulty of implementing those fixes can't be accurately estimated by anyone without access to the code. Disclaimer: I do not work for BioWare, nor do I have access to the game's source code/internal documentation. All this information is a "best-guess" for how the game works based on observations and an understanding of game networking. For anyone who wants more in depth information about how to do game networking well, I would suggest this presentation: http://www.gdcvault.com/play/1014345/I-Shot-You-First-Networking - Video http://downloads.bungie.net/presentations/David_Aldridge_Programming_Gameplay_Networking_Halo_final_pub_without_video.pptx - Powerpoint
  5. The sandstorm boss only stuns you at 2 times: when he leaps to you and when he uses rampage. If you avoid running too far away the stun should never be a problem.
  6. Yes, we are still doing this. The OP is currently taking a break from the game so recent PMs or mail were probably not received. You can contact Tenebras (vVvCheese) or me if you have questions or would like to set something up. You can PM me here on the forums, or send and in-game mail to Auldria if you're on POT5.
  7. He NEVER respawns on a running instance. The only chance you have to kill him is on newly opened instance or after a server restart. There are a number of champion mobs that have this same problem.
  8. It's the percentage of the hook limit used. This includes hooks in rooms that you have not yet unlocked, so you will need to have all the rooms unlocked to reach 100%. All types of hooks and decorations count as 1.
  9. Like the title says, most of Oricon is now considered Republic territory, allowing Republic players to move around the entire daily area without being flagged for PVP. (I'm on POT5, PVP server) This includes the area just outside the Dread Executioners Camp. (Empire base) Screenshot
  10. I absolutely agree, autocrit on both of these abilities is FAR too much. Also, that is an underestimate of the DPS increase because it doesn't account for the fact that Exploitative Strikes will have better uptime as a result of the Discharge crits. If Maul is going to be an autocrit, it is probably a good idea to combine it with an increase in Duplicity consistency. The best way to do this, in my opinion, is to make Duplicity have a 100% proc chance and a 12s ICD. This Duplicity change alone mostly affects consistency, and isn't a significant buff. Below is a 250,000 parse simulation result demonstrating this, and combining it with the Maul autocrit. Live: 100% DPS: Min = 3000.35 Avg = 3349.12 Max = 3771.49 99% DPS: Min = 3151.98 Avg = 3349.12 Max = 3570.92 95% DPS: Min = 3205.26 Avg = 3349.12 Max = 3505.25 90% DPS: Min = 3236.25 Avg = 3349.12 Max = 3469.58 Duplicity change only: 100% DPS: Min = 3025.60 Avg = 3366.94 Max = 3828.26 99% DPS: Min = 3170.44 Avg = 3366.94 Max = 3587.96 95% DPS: Min = 3221.48 Avg = 3366.94 Max = 3524.47 90% DPS: Min = 3254.74 Avg = 3366.94 Max = 3486.34 Duplicity change + Maul autocrit: 100% DPS: Min = 3327.20 Avg = 3656.31 Max = 4041.16 99% DPS: Min = 3473.36 Avg = 3656.31 Max = 3858.49 95% DPS: Min = 3532.04 Avg = 3656.31 Max = 3788.87 90% DPS: Min = 3561.08 Avg = 3656.31 Max = 3762.19 http://jedi95.com/images/dps_distribution6.png http://jedi95.com/images/dps_scaling6.png http://jedi95.com/images/dps_scaling_percent6.png Notes: The charts above are comparing live against Duplicity+Maul changes. The results were obtained using my Deception simulator. Code can be found here The gear used in these examples is BiS Dread Forged.
×
×
  • Create New...