Taking Halo 2 to Xbox Live
An anonymous reader writes "In this new interview, Bungie Studios engineering lead Chris Butcher explains how his team took Halo 2 multiplayer battles to Xbox Live, with minimal glitches. Turns out there are a lot of clever tricks involved." From the article: "It's actually the same network model we used in Marathon back in the day, although Marathon had some bugs in it. The thing with this networking model is if there's a bug in the computer code where two machines could provide the same inputs but get different outputs, there can be problems. There are lots of different ways that could happen."
... Here ;-)
I still reckon the best game networking in the world is that in Quake and its successors, such as Half-Life and its sequel. Unlike Halo and Halo 2, where co-operative play online was apparently an insurmountable technical challenge, in Quake-based stuff even single-player games are inherently client-server anyway.
From the article, it sounds like Halo 2 multiplayer has moved in that direction away from the all-clients-equal approach of Marathon and Doom, with a single server accepting or denying player-damaging events. Although each client apparently still has a full version of the game world at hand, unlike Quake-style games where a client is only sent relevant stuff - might this allow for some audacious, map-spanning ultra-vision hacks and so on?
Still, that's how they do the recovery thing if the server gets unexpectedly removed from play...
Tedious Bloggy Stuff - hooray?
I actually read it through, yes yes pat on the back. And it was very interesting I don't really know much about networking but he explains how the networking model for at least Halo2 works, the part on how the master priortize certain events was neat...
I fought the corporate America, and the corporate America bought the law.
...because every client is being sent the persistent state of the entities in the world (the entities are what we call the persistent objects in the world), that means that any client has all the information about the world. Because the client knows everything about the world, we can support making them be a new server, if the server machine was to turn off, get disconnected from Xbox Live or the player just wants to leave the game...
Interestingly enough, Bungie's master server and client model is the same model humans use for perceiving the world. For example, right now, Milton Flapdoodle in New Jersey is responsible for perceiving the world, authorizing adjustments to humanity's world view, and beaming the changes to each of us telepathically. Should something happen to Milton, a new server can be chosen because we each carry a copy of the complete world state inside us.
Unfortunately, the technique isn't foolproof and due to the high density of telepathic messages required there is some unexpected bleed-through amongst the clients. You can tell this happens when you witness a profoundly anomalous event like Britney Spears sudden rise in popularity or Brussel Sprouts that inexplicably taste good.
The Marathon quote is referring to Halo 1. Halo 2 is nothing like this, as the article explains.
It doesn't necessarily suck, per se. I've played the game, and had the same problems, due mostly to flooding the connection on the end I was on with two Xboxs having four players apiece. Generally, this model would work extremely well, and is basically the same as the old model but with a priority queue (as I understand it), and would decrease bandwidth usage and increase framerate. However, the main problem is that if you flood a connection, without a proper judge of speed, then you create an alternate world in your client a few seconds behind the actual occurence. Eventually this is solved by resetting everyone back to where the slowest player is. However, with those network engines (once again, as I understand it), they still use the "transmit everything model," which doesn't lag much, but if it does stops everything in its tracks. Long story short, it's just a tradeoff for bandwidth v. client consistency v. playability
Being able to drop a server, and continue with another is pretty cool, but I think the increased trafic for keeping all systems syced is not worth it. I thought XBox live servers were supposed to host games anyways to stop cheaters?
Running out of thigns to say about it? How about: "Halo 2 is best sequel" or "Halo 2 saves white mice from experiments" seeing as Slashdot has ran just about every other Halo 2 related story for no good reason.
Acting stupid isn't much fun when there's someone around who knows better
The thing with this networking model is if there's a bug in the computer code where two machines could provide the same inputs but get different outputs, there can be problems.
I'll say. Every time two machines provide the same inputs but get different outputs, Schrödinger half-kills another cat.
Oh, say does that Star-Spangled Banner entwine / The myrtle of Venus with Bacchus's vine?
I mean, this is an excellent piece on understanding how a client/server model works in an FPS game over the internet. But he's describing an authoritative server with client side lag prediction. You've been seeing this kind of stuff since like Quake II in one form or another, it's just that it's gotten better prediction over time.
Don't get me wrong - he clearly knows his stuff, and knows it well enough to explain it detail using plain words - no easy task. When my girlfriend once asked me why one of my mods wasn't working, I told her that network replication was a bit like trying to get two men in a completely dark room to solve a jigsaw puzzle. I'd say he's putting it more eloquently than I could.
Running a deterministic model based on peer input, dead-reckoning locally if you haven't received the current input frame from the server, correcting the simulation later on once you've received the missing information from the server (with the server always being authorative).
And he mentions some typical (but not all) caveats:
- uninitialized variables that end up having a different value on the different hosts (since, if they're not initialized, their value is whatever was at their location in memory/on the stack)
- making sure that the simulation is perfectly deterministic (very hard!)
- calling repeatable random streams in deterministic code, but _not_ doing so in the non deterministic parts of the code otherwise this desyncs the streams
- and many more!!
Basically, all this stuff has been done in games for a while now. Of course, these guys had it figured out since marathon (not sure that they were doing dead-reckoning at the time since marathon was LAN only... was it?).
For sure, their implementation is solid.
Here are some of my thoughts on this matter:
(1) Anyone who has been playing a lot of Halo 2 on Xbox Live (and that describes me bigtime) will know about the "standby Glitch" that is being used to "cheat" in matchmade games. Essentially people are putting there DSL/Cable modems into standby, then taking them out of standby, and while in standby, they can actually run in and take the flag while no one else can even see them, then when they go out of standby, poof! Your flag is gone. This seems like a huge blunder in the netcode.
(3) This whole business of choosing the server for you sucks too. I guess it works for the most part, and it maybe removes a little of host advantage, and for people who don't know better overall they probably get less lag in their games. BUT, I have a GREAT upstream connection at home, and if were the host in the games I play in, there'd be no lag and the host wouldn't quit, but with this system sometimes Bungie picks a worse server, plus then they quit and you get the dredded blue screen of server-switching death.
(3) On a final note, there are no server lists and no real way to find the map/gametype of your choice in Halo 2's live implementation (you have to use "matchmaking" which gives you some control, but not enough in my view). This sucks if you like custom games because it can be really hard to find one. Basically, you have to rely on your friends list and your clan list to build up a party to play custom games. They bascially went against the way every FPS online game works with some of these decisions -- some worked out, others didn't.
I'll end with saying, that I still LOVE THIS GAME, and I actually like the ranking and matchmade games, and the whole party system thing is totally freakin' awesome, but there are problems, and it isn't perfect...
Being a bungie fan from way back (Myth series especially) I was disgusted with them for switching from RTS to FPS and selling out the micro$oft.
Myth 2 is still one of the best PC games evah, too bad they're wasting their talent on consoles.
Well sure. Nothing new here. In case you hadn't noticed, this is not an article on something new. The article is not headlined "Dramatically new multiplayer approach!"
The subject of the article is how they implemented Halo 2's network code. That's it. That's all. In fact, the summary says right in it that they did many of the same things more than a decade ago in Marathon, and you acknowledged you read that part.
The slashdot "This isn't new" weenies get more annoying with every article. Why in the name of all things fluffy are you telling us it isn't new? Why do we need a dozen posts on every story explaining every part of the story that isn't new?
"Halo 2 may be nifty, but video games are nothing new."
"This new telescope may be cool, but of course the blueprints were drawn up ten years ago when they started constructing it."
What in hell is wrong with you? How often do you think every single thing mentioned in a story will be completely novel? Let's put it in programming terms. What does the new operator do in C++ and many other object-oriented languages? It creates a new instance of an already defined type. That's what's happening here.
Question: Are the tricks "clever" as the summary claims? If they are not clever, feel free to explain why. Otherwise shut the fuck up.