4/21/99
What is the most challenging part of coding a multiplayer game? Why?
Traditionally, this has been fitting in the limited bandwidth available over a modem. A 28.8 modem (box specs) peaks out at about 2K/sec. While processors have tripled in speed (or more) since 28.8 modems came out, modem technology has been stuck in the stone ages mostly trying to get around the limitations of the telcom systems.
BZ1 was a peer to peer system where computers were implicitly trusted to report local events correctly, and that model broke down in heavy firefights with lots of ammo in the air, and was subject to a whole lot of cheating attacks. However, on BZ2, it was decided before I was hired onto the project that the BZ1 network code would be scrapped. It was my job to implement a new design, one where only the user's inputs are passed around-- their mouse movements, keys, and the like.
The BZ2 model has the advantage of starting off with far less data to communicate, and a far more constant stream of data-- you have the same amounts of human input (before compression) while sitting around admiring the scenery and the middle of a firefight. It is also a client-server based model, which concentrates most of the network load on the server, but clients have far less bandwidth concerns. With the inputs only being passed around, all AI units are simulated on all sides to do exactly the same thing, so 1 or 400 AI units in the game don't add network traffic at all.
I have a background working on 8/16 bit computers, as well as consoles, so I'm naturally very frugal with bytes used. I've optimized down the average move packet down to a very nice and small amount-- while I can't say what things have averaged, that number did impress the other programmers on the project.
The most difficult part of making this multiplayer model has not been in the packet optimization (which is fun, at least to me) but the part of simulating all users and AI units precisely identically on all machines. As BZ1 didn't do that, there've been a number of places in the code that was too random, inconsistent, or caused sync bugs. Thus, I've had to work with and debug chunks of code "unrelated" to the network, such as terrain code, physics, and the like.
What will be the biggest technological advancement BZII will bring to multiplayer gaming?
Most games that deal only with inputs tend to run in lockstep at the speed of the slowest machine or connection. However, we've got a neat technology, proposed and mainly implemented by Brad Pickering that allows the user to smoothly interact with the game world, even in the temporary absence of packets from other machines, and yet stay in sync after those packets arrive.
For advancements whose gory details aren't as interesting tonon-techies as the above, we've got several new modes of play like true teamplay strategy.
Philisophically, how do you feel about the multiplayer save game?
In the abstract, game design sense, I feel they make sense only if you can't complete a "game" in one sitting. Most deathmatches last at most an hour, so there's no real need that I see for in-game saves of such things. In addition, as the number of players gets large, a reload later faces several design issues, such as players who are temporarily not around, or the like. On the other hand, games that can't be completed in one sitting (_Baldur's Gate_ comes to mind, with its multiplayer aspects) demand a savegame just so that people can continue later.
One of the biggest issues being talked about on the discussion board has been cheating. For those not 'in the know', what do people do to cheat in games like Battlezone? Will it be easy to cheat in BZII? Is there such a thing as an absolutely cheat-proof system?
To answer in reverse, the cheat-proof game is the one that's installed on the totally secure and hack-proof computer: unplugged from anything, locked in a bank vault and dropped off in the ocean somewhere. [Or sitting at ground zero of a nuke about to go off.] What we program can be disassembled and understood by others, and given enough eyeballs staring, there's likely to be cheats after some time.
In the past, I've found and programmed cheats for 40+ games on my systems at home, but now that I'm gainfully employed making games, and no longer certified arcade incompetent, I've not needed cheats anymore. Cheating is only the refuge of the incompetent, the lazy, or the scum of the earth, and none of those are excuses for cheating in a multiplayer game. [You wanna shaft yourself in a single player game, then go ahead, but your "right" to cheat stops when you play against another human. Period.]
However, our model of network communication above makes it far harder to pull off any of the cheats popular for BZ1. As each computer only transmits their own inputs, and no game state, if they modify gamestate locally, they'll desynchronize their machine from the game quite quickly. For example, consider someone who has done a BZ1-style cheat of to infinite ammo. In BZ1, that player's machine would generate packets saying "I've just put a rocket in the air aimed at you," and the remote machines would go "Uh, ok" and let them do that.
Now in BZ2, if other machine simulates them, and say it sees them as having 10 shots left when they start cheating. On the cheater's machine, they could fire all day long, but the other machines in the game, once the 10 shots are fired, don't see that cheater firing when the inputs come in because they calculated he's out of ammo. Thus, cheaters will shaft themselves in a real hurry. [Cue sound efx: violins wailing or something like that :]
There are some other cheats potentially possible not involving gamestate, but I'd prefer not to mention them at this time to delay potential cheaters somewhat after the game's out, and also, some of them may be plugged before release.
...And a word about lag. Some kinds of lag are almost impossible to prevent: if you're playing with others on different continents and have insane ping times (say over 500-800ms), or all packets going down a link are dropped for 5 seconds or so, there's nothing that can be reasonably done about that. I've yanked out the ethernet cables from the hub on my desk to simulate such packet lossage storms, and other abusive tests. The smoothing technology I mentioned above does certainly help with that. Starting off with far less data to transmit means that the catchup can go faster.
What in your considered opinion is the second best multiplayer game ever (after Battlezone) ?
I've had an absolute blast with Starsiege: Tribes in the last few months, and that game was the reason for upgrading my system at home. It's got a really well done multiplayer environment, and all sorts of roles one can play. [I usually took medic/repairman duty, because it's much easier to aim that repairgun :] Worms 2 was also great, but didn't offer quite the diversity and adrenaline-pumping action that a FPS like Tribes does.
Unfortunately, work's gotten more busy, and I've started doing other things at home after work (poke around my website and you might see what's up), and that's nearly zeroed my game-playing time at home for now.
Do think it's likely that your .plan file is monitered by the CIA?
Of course. After being personally responsible for recent caffeine shortages on the west coast, the CIA was forced to take me seriously. Unfortunately for them, the one-time pads used for encrypting things as "normal" English haven't been broken yet. I hear they're buying a few more Crays this weekend to try and do better and crack the codes of the true meanings of what I'm saying. As they haven't bothered to ask politely what I'm really saying, they'll have to suffer the consequences. :)