Star Journey

Lead the fleet home, Commander!

The vestiges of the defense fleet are stranded at the edge of the solar system. Players fly star fighters through warp gates while dodging and blast asteroids, trying to return to their home planet before time and fuel run out.

Star Journey is a cooperative space game for two players, or for one player cooperating with him- or herself. The control scheme supports game pads, touch screens, and keyboards. It plays best in the Chrome browser using Xbox360 game controllers. Morgan McGuire created the game as a hobby project for One Game A Month and it is free on the web. The game is appropriate for players of all ages.

Play Star Journey

Behind the Scenes

Star Journey was born of three whims:

The project was about 72 hours of work spread over more than a year, mostly as short sessions on Saturday nights. I used Emacs and Chrome (with the Tattiebogle Xbox360 controller driver) on OS X as my primary development environment. I made about 250 commits to Subversion over the course of the project. I used Chrome because it has game controller support and better performance than Firefox. The game runs about as well on Safari as Chrome, but without controllers.

I released Star Journey as my January 2015 game for the One Game A Month game jam challenge. My young children helped with asset creation and provided essential feedback as playtesters and designers, driving both the visuals and the difficulty curve.

I wanted the gameplay to emphasize cooperation. This led to the gate system (which requires player coordination) and the shared resource of remaining ships (which create interdependence and support varying player abilities). The star fighters are color coded to help players distinguish them, and the on-screen controller and background nebula have matching hues. To further reduce confusion, the green player is restricted primarily to the left side of the screen and the purple player to the right.

After playing Brothers: A Tale of Two Sons, I realised that the relatively straightforward gameplay in Star Journey enables a single-player cooperative game. So, I added control schemes for a single dual-stick game controller and for a single player holding a tablet.

The theme of a journey home explores the idea of what happens after the epic battle at the end of most video games—having spent all resources to beat the challenge, how do the characters get home?

It is hard to avoid objects in third-person 3D space game because perspective is confusing without shadows or real-world objects for size reference. StarFox and other games have this problem as well, and I looked to such games for inspiration. I added the reticles to help players see what is in line with their ships and judge distance. I give thematic justification for the reticles and create a second depth cue by introducing continuously-firing lasers. These line up points in 3D and show the perspective convergence of straight lines. The lasers are intentionally too intermittent and small to clear all asteroids in front of the ships, although they do reduce them somewhat.

The game begins with a compressed tutorial sequence: learn to fly in empty space, then learn to dodge and shoot (dense) asteroids, and finally learn to fly through gates (in empty space). It then ramps up speed and mixes these elements.

Below a certain age, children don't want games with winning and losing—they just want toys. I added "Practice" mode that has no score, winning condition, or destruction to enable this kind of play.

I intentionally released the game in a form that allows others to see the source code and learn from it. Because of the constraints of the game jam, the code isn't as clear as what I would write as sample code for a course, but it is pretty good for a rapid prototype.

The game is written in JavaScript using my open source codeheart.js framework. During production, I improved the cross-browser game controller support and added a few new graphics calls to codeheart.js. Firefox's JavaScript and graphics are so slow that I wasn't able to make the game run as well there as on Chrome, Safari, and IE. So I drop resolution (codeheart.js is resolution-independent, so this takes a single line of code!) and reduce the starfield effect on Firefox.

The source files for the game are: HUD.js, asteroid.js, explosion.js, game.js, gate.js, laser.js, menu.js, paused.js, planet.js, player.js, playing.js, reticle.js, sounds.js, starfield.js, utils.js, and win.js. I hold copyright on the game source and it is not open source, however you're welcome to look at the code and learn about game programming from it.

I built the asteroids and star fighters from real-world plastic bricks. The kids and I photographed the models against a blue screen and pulled the matte. We repeated this for twelve orientations. I cleaned up the images in Photoshop and flipped it to produce a total of 25 images of each ship and five of each asteroid. I then painted the engine flares and colored the ships.

I drew most of the HUD icons in Photoshop. The HUD hexagons and progress indicator are Unicode characters that are rendered as text at runtime. I did this to save time. I painted the outer planets in Photoshop using the Clouds, Pixelate, and Spherize tools. The pixelization is intended to evoke the bricks of the space ships.

I wrote a small C++ program using the G3D Innovation Engine to generate and render the home planet, using LDraw brick models and a manually-textured sphere map.

The theme music and all sound effects are from and I modified some of the effects using Audacity (all of these files and many more are included with G3D). The exact files are credited with license in sound.js. The list of audio creators, linked to their files and license agreements is:

The stylized font used in the game is Quadrangle by Typodermic Fonts Inc., which is free for commercial use.

Game and website
Copyright 2015 Morgan McGuire
All rights reserved