Dunvi wrote...
.458 wrote...
Dunvi wrote...
...but it's not solvable at this late point in the game's lifespan to any reasonable degree (in fact, it would have been nearly unsolvable even before release. Damn architectural issues...), and chances are I know more about that than you do...
Without the weaknesses in how the UDP network was used, with a failed "reliability" layer to mimic TCP but without the latency, there would be no issues. This particular issue is not solvable in the near future, and is an issue faced since the beginning of the internet.
There are, however, a few smaller changes that could be made which would dramatically improve the game. Unlikely BW will fix this without a financial reason. Sweeping improvements could be made with some small changes in how events are sent over the network. Some very simple changes could eliminate missile glitching, could eliminate volus shields locking other players' weapons, etc. BW probably doesn't even realize they have most of the code already, they just haven't used it in the right place.
I'm not sure though, that you can say that changing how events are sent would be small changes. You're talking about changing both the sender and the receiver for most? or even all? network communicated actions, and then deploying this in a patch. That's more programming energy than BW is going to expend at this point in the game's lifetime, not to mention whether it's possible to fit that much change into a patch (I believe the consoles have very limited patch size allotments). What I meant by unsolvable isn't "impossible" or "too hard", just simply "not gonna happen".
Magnum, we might also be agreeing with each other. If we are, I apologize. I blame my exhaustion - I keep on forgetting to sleep at night.
ETA: ... incidentally, dat patch...
The indirect changes which would help a lot are small, but I don't think they know that. Fixing networking itself would be a very big fix. I do this for a living, and looking at how they are using events among components, I believe they already have the pieces and would simply rearrange it slightly. Not a major change.
The reason why events are so important is because they are going across a network which was intended to be completely reliable. It isn't TCP. Everything a player does looks like a single event, but is actually a series of smaller events where the state of something changes each sub-event. If the sequence gets interrupted or corrupted, nasty things can happen. Sometimes those things are unintentional because of something like a network dropping data, at other times it is intentional by means of a player taking advantange of the timing of his/her own actions versus the round trip time from off-host to host. Suppose you change weapons...a number of things happen, including an animation, change of amount of ammo, change of damage type, change of damage amount, change of related audio, notifications of changes to other players so they also see this, so on. While using a striker certain characteristics come out, e.g., fire rate, magazine size. While using a cobra missile, other characteristics come out. It isn't that two don't mix, because they are both a series of separate characteristics told what to set up as by messages from smaller sub-events. There is a control system though, which knows that if you are switching to a striker to send out the sub-events which match that weapon; or the sub-events of a cobra if switching to that. The set of events will not mix in most cases. In single player the messages occur so quickly that a human couldn't interrupt it by mashing buttons down on the keyboard or controller. In multiplayer though, some of those messages go across the network; in the case of an off-host, they go to the host to validate, then the host sends a response back...not instantly. Missile glitching is a case of starting a series of sub-events which will get a reply with noticable latency, and then intentionally hitting a different set of sub-events such that the delayed network reply for a different weapon will intercept in the middle. All of a sudden the sub-events of changing to a cobra missile are injected in the series of sub-events that make up a striker. One of the components (or more) of the striker do just as they are told and set up as a cobra, while the rest of the sub-events set up as a striker (like magazine size).
The network and its UDP is functioning 100% correctly by dropping some packets without notice. This is the intended purpose of UDP. Unlike TCP, when data is dropped, there is no buffer and no re-send. Knowledge of being dropped is typically also missing. UDP is a known protocol, and every internet device at every hop on the route will summarily drop a packet if the IP stack is full. TCP would remember and retry, UDP will not. So you have to build your own system of reliability to deal with it. Gets worse when you realize that instead of just dropping packets in UDP, that packets can also be truncated without notice. Perhaps the receiving end gets part of the data and doesn't realize part of it is missing. What happens to the truncated portion? Undefined. Some devices will continue sending the truncated data, others will discard it. So if it does send it, a real world network does not define which fraction will arrive first. Entire UDP packets can arrive out of order; fragments can arrive out of order; pieces can go missing; entire packets can go missing. All on a network which is 100% lossless and perfect. Networking can easily cause issues where a sub-event is dropped or sent out of order.
So you just got to your match, and your weapon is using the wrong sound. Sub-event corrupted. Sound is entirely missing for you and only you. Probably lost data to do the proper initializing, else it would go bad in single player. Your weapon jams when the volus uses shield boost...we all know they are completely unrelated, but being in the middle of a series of sub-events for one main event and suddenly having sub-events of something else shoved in the middle can do unexpected things. Enemies are invisible for just you? Maybe visibility is broken, but why does it work most of the time? More likely visibility code works, and something forgot to tell your client that the enemies are visible...visibility is a sub-component someone didn't turn on.
I'm reminded of threaded programming, and how deceptively simple it seems. You can make a call to a function or method and it looks like you're safe to do so, but that single call really consists of multiple assembler calls...which CAN be corrupted by a second thread. Network events using the UDP setup this game uses need to be treated similar to a data object which is protected by a mutex or other scheme. Only there is no mutex, what you have instead is the idea that a single event ID, if it traverses, really is atomic. Multiple sub-events for one major event are very dangerous, there is no UDP guarantee that they will all traverse, that they will traverse in order, that they will not be truncated, that they will not be broken up in pieces with time delays. There is no guarantee that data from another packet won't hit right in the middle.
The game HAS code on every client designed to traverse through a series of sub-events (provided it is set up correctly and not interrupted) to do the right thing for changing to a cobra, to do the right thing for changing to a striker. The sender of that data could send the major event instead of the sub-events, and that one event would be atomic, and non-divisible. Network fragments of one could not inject into the middle of another. The code for doing this is already in every game...it just isn't used correctly. All those sub-events should be coalesced into a single major event before going across the network, and then the guy at the other end could re-expand that back to sub-events. A benefit to this would be that instead of sending half a dozen events a single event could be sent...essentially compressing the data going across the network and reducing traffic while guaranteeing pieces of one event won't inject into another, and guaranteeing that when something happens (like throwing a grenade), that it will always complete (if you threw that grenade and only a single event went over the network, it would always explode too...same for OPS packs...wouldn't it be nice if every time you heard the sound and used an ops pack that you actually were guaranteed it would work?).
Modifié par .458, 31 janvier 2013 - 02:15 .