Spacewar - Networking Game Jam

Spacewar

In the last Networking for Games class we spent two and half hours doing game jam with a networked game. The goal of the game jam was to build Spacewar! in XNA. With the challenge in hand, Alex Tardif and I joined forces, and recreated the nostalgic game.

Given the challenge of making Spacewar! in a limited time frame, we chose to use my code base which was already oriented for a networked top-down shooter. While far from perfect, the codebase was sufficient for the needs of the game. At this point we began hacking in the necessary changes to create Spacewar!.

Our task list consisted of the following:

  • Ship Movement
  • Ship Health
  • Star Gravity
  • Visuals

Before the game jam, I had already built in the necessary systems to pass data with headers. Anything new that we needed to send between clients, like health, could be painlessly added:

declare new packet header type

sender:
    send packet header type
    send packet data

receiver:
    read packet header type
    read packet data, and take appropriate action

We were able to achieve the desired handling of the ship after making a few changes to the way acceleration was applied. Health was a simply a matter of adding and syncing a damage value for each ship. And the stars gravitational pull was achieved using the following calculation:

float pullPercentage = (currentDistanceFromCenter/maxDistanceDistanceFromCenter)
Vector2 pullDirection = centerPosition - currentPosition
Vector2 pullVelocity = pullPercentage *  pullDirection * 0.8 * time

When the ships or projectiles fell under a certain distance from the star they would be destroyed.

After getting the desired functionality into the game and testing it over the network, we improved the artistic direction. The art assets used were from the following sources: background and ship.

At this point a working version of Spacewar! in XNA. The video below shows two ships battling it out in a networked session (currently supports up to 8 players).

The following video shows a single ship orbiting the center of the screen. Once the ship was maneuvered into the desired position it successfully orbited the star without user input.

The game jam was fun session for rapidly developing a networked game. It demonstrated the additional challenges that arise when trying to network games in a limited time frame. Overall we were pretty successful in replicating Spacewar!. There were only couple of known bugs at the end: a projectile destruction issue (fixed) and player spawn inconsistency between clients. This definitely reinforced my desire for improving the architecture (as I have time, I've been refactoring my code in a separate branch of my git repository).

October 26, 2012 | post

Hi, I am Chris Brough. I am a twenty-one year old senior studying Game Programming at Champlain College in Burlington, Vermont.

I've had an immense interest in technology and video games for as long as I can remember. When I'm not developing my knowledge in programming, I enjoy drawing and playing video games.

Among the many interests I have in programming, I'm currently focused on data-oriented design, networking, and 3D graphics.

Contact info: chris@chrisbrough.com