Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Solstice Submarine: Capture the Fork is a multiplayer, simultaneous-turn-based CTF (capture the flag) game. It was made in the month of November for the 2012 Github Game-off.
JavaScript
branch: master

This branch is 50 commits ahead, 3 commits behind github:master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
lib
static
.gitignore
COMIC-LICENSE.md
GAME-LICENSE.md
README.md
grunt.js
package.json
solstice-submarine-3-digital-comic.pdf

README.md

Solstice Submarine: Capture the Fork

Solstice Submarine: Capture the Fork is a simultaneous-turn-based CTF (capture the flag) game. You will play as one of the characters from the Solstice Submarine universe in a thrilling competition of strategy and guile. Make your best attempt to steal the fork of the other team while defending your fork from being stolen by your opponent and his clone!

Live Gameplay

Game Design Notes

When I started putting together Solstice Sub: CTF, I had a few design goals in mind. I wanted to make a game that was:

  • Playable in a web browser on any device, whether it be desktop, tablet or phone.
  • Multiplayer across any permutation of devices.
  • Architected to share as much code across singleplayer and multiplayer as possible.
  • Part of the Solstice Submarine universe, which I contribute to with Donna Almendrala every holiday season.

I quickly settled on the idea of a turn-based game, as that seemed to lend itself to the simplest multiplayer architecture. After spending some time thinking about turn-based multiplayer games that I admire, I decided that the experience should be similar to the multiplayer of one of my favorite games, "Legend of Zelda: Phantom Hourglass." I figured that gameplay would be symmetrical for the first playable version. I had a mind to add random powerups, but felt that it would be best to stick to shooting for a basic game first.

Technical Highlights

Solstice Submarine: CTF is nearing completion of basic game play. Here are some technical achievements that I am proud of:

  • Viewport scales responsively to accomodate for both pixel density and screen size.
  • Renderer only redraws regions of the scene graph that have actually changed.
  • Singleplayer is structured identically to multiplayer, thanks to a client class stubbed out with AI logic.
  • Picking, pathing, fog of war, sprite animation, scene graph and other engine features all written from scratch.
  • Game maps are generated from an interpreted JSON configuration.

Art Direction

The Solstice Submarine is a yearly comic / digital experience that Donna Almendrala and I work on together, but Donna is the true artist between the two of us. She draws and screen prints the entire comic herself, and is also responsible for the amazing artistic panels on the left, right and bottom sides of the game viewport. A digital copy of this year's Soltice Submarine mini-comic has been included in this repository courtesy of Donna.

All of the sprites used in the game are original artwork by both Donna and me:

Solstice Submarine Sprite Sheet

Running Locally

Currently the only server dependency is Node.js. After you have installed Node.js, clone this repository and run the following command in the repository root:

npm install

If you are hacking on the code, you might also want to install grunt.js and run:

grunt watch

Which will automatically handle compiling JavaScript and templates. To start the server, run:

node ./lib/server.js

Supporting Technologies

This project wouldn't be possible without the following supporting code, assets, tools and frameworks:

I would like to make a special call out to Three.js. I ended up not using Three.js for this game, but I spent a while trying to come up with a good approach to a 2D / 3D hybrid engine. Three.js is a really cool library, and even though I ended up not using it, I adapted the vector, rectangle and clock classes for use in my own code base.

Something went wrong with that request. Please try again.