The version available here was displayed at PAX Aus 2014 in Melbourne. This is only a demonstration build of the game so it is not a finished product.
Utilizing Unity's built in multi-platform capabilities, you can play Junkernauts in your HTML5-compliant browser. A keyboard and mouse is required to play the game, however I recommend that you use a controller to fly around in zero-gravity. The controls are listed in the table below.
Unfortunately, some versions of Chrome are incompatible with Unity Web, so it is recommended that users trying Firefox if you encounter any errors.
The idea of the game is to salvage items from wrecked space stations and ships that spawn randomly in the local solar system. When you see a [?] icon appear, a new wreck awaits you! Fly towards it and click on it once it is within scanner range to find out more about the salvage mission. To salvage a wreck play the mission, fly right up to it and press the engage button. Don't wait too long though, as ships will fall towards the nearest planet and burn up in with the atmosphere!
Once you are in a mission, find a way in by scanning for an airlock to enter door to destroy (doors appear as yellow when scanned). Complete the objectives in each mission, such as disable the rogue turret AI core, or retrieve a cargo manifest. Grab some of the loot floating throughout the hulk along the way with the tether and drag it to your ship. Once you are satisfied with your haul, you can exit the level by pulling the lever on the back wall inside the cargo hold of the ship. Having exited the mission, you can sell your loot to traders in the star system, or engage in another mission.
|Action||KB & Mouse||XBox 360|
|Move ship||Mouse 2||-|
|Move camera||WSAD / Mouse 3||-|
|Zoom camera||Mouse Wheel||-|
|Inspect Mission [?]||Mouse 1 when nearby||-|
|Play Mission [?]||Approach wreckage, click 'engage'||-|
|Action||KB & Mouse||XBox 360|
|Thrust foward / back||W/S||Left Stick up / down|
|Thrust left / right||A/D||Left Stick left / right|
|Thrust up / down||Space / Left Control||L1 / R1 or A / B|
|Thrust turn left / right||Mouse left / right||Right Stick left / right|
|Thrust pitch up / down||Mouse up / down||Right Stick up / down|
|Thrust roll left / right||Q / E||L Trigger / R Trigger|
|Toggle Inertial Dampener||Left Shift||Y|
|Toggle Free-look||Tab||Click Right Stick|
Junkernauts was developed over the course of one year for Dime Studios, as part of an industry project with the Swinburne University of Technology. The project’s initial goal was to produce a prototype of a player-controllable astronaut in space, manipulated by thrusters. This goal was achieved very early in development, and it was decided to expand the scope of the project. The new aim was to create an alpha-version of the game, implementing the vast majority of the planned functionality.
I held two positions on the project, project manager and lead developer.
As the project manager I was tasked with guiding the progress of development, administering the task allocation system, and organising meetings between Dime Studios and Swinburne University of Technology.
As the lead developer, I focussed on developing the space hulk salvaging aspect of the game. Of particular note are several systems that I created; namely the procedural level generation system, the randomised item placement system, the player and player-ship placement system, the '6 degrees of freedom' player movement model, and the digital breadcrumb system.
These changes allowed the project to change from a simple space-walk game, to a procedurally generated exploration game.
Junkernauts' levels are generated procedurally the moment the player selects to play them.
The level creation algorithm builds outwards from a starting room, connecting a series of prefabricated rooms to this origin room based on the size, and number of the prefab room's doorways. This second layer of rooms then received the same treatment, as more rooms were added to their doorways. This process is repeated until a maximum number of rooms is reached, or if there are no open doorways remaining to connect any more rooms to.
The system was customisable in many ways to allow for different scenarios to have suitable layouts for their content. To do so, the probability of each prefabricated room used in the creation of the level biased the system towards a desired shape e.g. a space station. For instance, longer hallways could be given a higher probability to make a space station resembling the International Space Station.
The rooms available to the system was easily curated on a per-level per-scenario basis, so that the generated level, though random, would still cater to the level's design requirements.
Once the space station had been built through procedural generation , it was populated with collectible items, floating debris to impede the player, and other objects such as rotating lights or particle emitting objects. The prefabricated rooms were designed with a range of spawn points for items.
Once the game had created the level, it populated the rooms with collectable loot objects. Spawn points are collated by the placement system, picking as many as desired at random, after which it would spawn items at those points. The items on spawn were given a randomised velocity to make them shift slight further away from the spawn points, to change their placement, thus making a more realistic derelict ship.
The idea behind each level was that the player automatically flies their spaceship to the station, then hops out and begins their salvaging mission. However, Spaceships meeting in space seldom ever meet each other on the same orientational plane. To emulate this effect, a methodology was created to spawn the player and their space ship as if they had just approached the hulk from a random direction. This was more difficult than anticipated due to the hulks more often than not being complex, asymmetrical shapes.
How the system accomplished this was to measure how big the station was overall as a sum of all of its rooms. Then chose a random position a little beyond the edge of the space station's estimated size and fired a detection ray back at the station's origin. If the ray hit something before it hit the origin, then we can presume that this point is one of the edges of the space station. The game then tries to spawn the player and the ship, all the while testing for any collisions that may happen with the other rooms of the ship. If a collision is detected then there is not enough room to spawn, the process repeats. Eventually a suitable spawn point is found and the spawn is completed successfully, and the player can begin their salvage mission.
As the player is tasked with exploring maze-like space stations, the player character's movement was designed such that they have complete control over their position and rotation in 3D space. I designed and implemented a control schematic, known as '6 Degrees of Freedom', which allowed the player to manipulate their character in six different axes (x, y, z, x-rotation, y-rotation, z-rotation). This allowed players to guide their character through zero-gravity space, controlling their velocity in many different axes all at once by activating different thrusters to apply a force on that axis.
A dampening system was developed to give the player the opportunity to limit their momentum. By activating dampeners, the player can naturally come to rest by not thrusting in any direction. Without this system, they would continue onwards at their current velocity until they hit something. Through using both dampened, and non-dampened zero-gravity movement, players have absolute control over their character as they traverse through space hulks for their scrap.
When exploring the space hulks, players easily became disoriented and lost. As hard enough as it was to get to the objective, it became equally as hard to find your way back out to your ship without any prominent markers. To assist the player’s navigation, a digital trail is left that records the path that the player has taken. When scanned the line reveals itself to the player drawing a holographic line of their journey through the station. . Using this players could easily go back to where they entered the station.
How this system worked is linked to the procedural generation system. Since every doorway served as a node to attach a room to when the player passed through them, the game could keep track of which node they had passed, thus acting as a breadcrumb trail back to the ship.