Weta Workshop, the studio that brought you Dr. Grordbort’s Invaders, presents Boosters: an intergalactic spatial computing experience where you steer a rocket around your living room, collecting asteroid “gubbins” on the way. Born out of an internal game jam hosted at the Weta studio in Wellington, New Zealand, Boosters is now available for download on Magic Leap World. Here’s the story of how the rocket game was launched.
Meet Weta Workshop
Weta Workshop's team have worked on everything from Lord of the Rings for the big screen, to Dr. Grordbort’s Invaders for Magic Leap One. Having spent the last few years developing Dr. Grordborts, the team decided they needed a change of pace. They’d seen what Magic Leap One could do and loved the potential of spatial computing. So what better way to explore Magic Leap One’s ever evolving SDK than with a game jam?
What’s a game jam?
The name says it all. Designers and developers get together and jam on a game for fast, creativity. For Weta Workshop’s internal game jam, the brief was simple: In one sentence, tell us an idea that’s only possible with spatial computing and that can be made in a month. Oh, and it needs to make a player go ‘Wow!’ No pressure.
Concept art from the game jam pitch involved exploring handtracking to control the rocket
Ideas were pitched to a committee led by Weta Workhop’s founder, Sir Richard Taylor, and nine teams, comprising programmers, artists, audio experts, and designers, worked together to build a prototype. Boosters emerged as the most viable product and Weta Workshop decided to ship it to the world.
It’s all in the details
From a technical and design standpoint, Boosters is a masterclass in re-purposing familiar game mechanics, often seen in games like Lunar Lander for something unique to spatial computing. Players apply steady pressure to a booster to keep an object afloat while they steer a rocket and collect targets. The concept meshes your room in real time, so if you steer the rocket too close to your walls—or the cat!—the rocket explodes. Fly into the couch and BOOM!, the couch catches fire and you’ve lost your high score.
Working within the design and time constraints of the game jam, the team took a simple idea and found innovative ways to wow players with it. Here’s how.
Starting the game and guiding the player
One of the objectives of the game is to get the player started quickly and to minimize the setup time needed to understand how to fly a rocket around the room.
Boosters begins by cycling quickly through flash logos. The Boosters logo then zooms into place, accompanied by a musical sting. To direct the player’s attention downward, the Boosters title moves in front of the player’s Control. The title uses the same shader used for the tractor beam gubbins asteroids. *Pro-tip: by reusing shaders, you can simplify your development.
The team paid special attention to showing how things worked. As the player looks down, tool-tips are placed on the Control to show that the player can choose to pull the trigger to place the launchpad.
Although the game constantly scans the room in order to give players the freedom to move anywhere they want, the mesh scan effect shows prior to placing the launchpad. This gives the player a sense of what the game already knows about the space they are playing in. Once the launchpad has been placed, the scanning effect is blown away and the launchpad is ready to go.
The core design of controlling the rocketship was quick to implement, and once established, the team was free to iterate and layer on additional features to support the core design. The additional features were, in a way, their own feature-jam. Everyone had lots of great ideas to explore. Some didn't work. Some worked, but were too complex. And then some worked without adding too much complexity—these were the gems the team were looking for.
Making the rocketship feel “real”
One of the joys of developing for spatial computing is that you get to make a digital object look like it exists in physical space. And you can add details that make it seem real. For example, the rocket has lots of small animated parts that respond to how the ship is being flown. If the rocket’s in an upright position and it approaches the ground, its landing gear extends. When the rocket lands, the top of the rocketship raises up, a small mechanical arm extends to plant a flag and a victory horn plays. The flag flaps in the wind when the rocket takes off and stays in place when the rocket is landed successfully. This lets players know they can look around the room without losing their score.
If the rocketship is on the launchpad and a player moves within the clipping plane, they see a blueprint cutout of the ship with Lord Cockswain (an infamous Dr. Grordbort’s character) sitting in the pilot’s seat. A collider then appears around the player’s head, so if the rocket bumps into you while you’re flying, it makes an amusing *thonk*sound. The rocket’s engines illuminate the mesh as it flies by, and if the flames get too close to the world, they leave visible scorch marks. One of the most satisfying parts of the experience is making scorch marks on furniture!
It’s always good to end on a good old fashioned explosion, so if a player crashes the rocket into the world at a steep angle or with sufficient speed, it blows up. While it’s extremely satisfying to see, the explosion also serves an important purpose: The flame particles and rocket debris let you know your turn is up. And when the flames go out, the rocketship debris shows the player where they’ve been, which gives the experience a sense of permanence.
While testing the game we found that once players were comfortable with the controls, some wanted the rocketship to go faster. This led to the addition of the Basic (blue) and Advanced (red) rockets. Given the high ceilings and open spaces of the Weta Studio, the players had a lot of fun flying the Advanced rocket around. With smaller spaces, the Basic rocket is easier to control.
A cheeky last minute addition was the Experimental Giant Rocket. Make sure you have lots of space for that one!
6DOF control with analog trigger for thrust
The player directs the rocketship using the Control, and the angle that the Control is twisted and flexed to changes the orientation of the rocket. Pulling the trigger increases the thrust from 0% to 100% along a curve. A small flattening of the curve near the midpoint creates a neutral buoyancy zone where the player can find a spot to hover the rocketship.
The thrust always comes from the rocket’s main engines, but small maneuvering thruster jets appear at the nose of the ship when the player twists the Control. When a player looks at the Control, a simple outline of the Control appears which is paired with text tooltips that clearly explain what the inputs do. A subtle LED halo detail was added to the Control which points to the position of the rocket, so if you lose track of it, you can follow the Control like a compass and reorient.
Gubbins asteroid collectables
To give players a reason to test their flying skills, gubbins asteroids dynamically spawn around them. The developers added rich feedback, like satisfying collection sounds and a stretchy shader that appears when the gubbins are tractored into the rocketship. The stretchy shader also helps players to know how far they are from an asteroid.
Game mode - time attack
Initially, Boosters was meant to be a toy with the added goal of collecting gubbins. But as soon as groups of people started playing, they naturally wanted to beat each other’s scores, so a simple time attack mode was added: “How fast can you get 10 gubbins?”
The developers also considered adding an additional challenge of returning to the launch pad, but ultimately it just slowed the experience down. What to do? Blow up the rocket, naturally! The player is then given their score and their personal best for the session. With a game jam, you have to make sacrifices like this because of time constraints, but in the end, it’s very effective.
Balancing the rocket in front of you as you walk around an environment turned out to be a fun challenge, but it meant the meshing was continually updating around you. To resolve this, the team added a meshing volume, scaled it up to a reasonable enough size, and added a script to follow the player. And it worked. The experience continually updates to the world around you, so you can go anywhere. You could, for example, fly a rocket from one end of a mall and still be flying at the other end. We’re excited to see how this interaction plays out in future Magic Leap experiences.
Coding in a game jam
Game jam code is very different from production code. The tight timeframe and drive for quick iteration forces developers to favor the easiest path to a testable solution. All thoughts of architecture and cleanliness are gone. The Boosters team didn’t have to think about creating readable and understandable code for future developers. Once the game jam prototype was approved, the architecture grew organically from the use case.
Share your concepts with the world
Magic Leap World concepts gives quick prototypes like Boosters from Weta a home so that other developers can see and learn from them. If you’ve got an idea for a spatial computing experience, share it with our worldwide community of developers at our Creator Portal. And to get inspired, make sure to check out the Boosters experience on Magic Leap World.
Want to connect with fellow devs and jam on your own projects, with the creative freedom to experiment and play? Join us at our next Magic Leap Dev Jam. See you there.