Spilt Milk Studios are currently working with Improbable’s SpatialOS to create Lazarus, a top-down multiplayer shooter set in a universe that develops, builds up, and resets every week. Andrew Smith, Spilt Milk’s Creative Director, is back with a new developer diary.
We’ve often mentioned just how big the game world in Lazarus is. In fact, we recently spoke about some of the interesting game design challenges that it brings up. The game world’s size is quite impressive, and big numbers always make good headlines. To remind you, it is 160,000 km² – or twice the size of Austria – but honestly that size is arbitrary thanks to the SpatialOS tech. We can literally make it bigger or smaller with little to no implementation time (though we’ll be balancing it for optimal player population, of course).
What does that actually mean, given the diversity of scale of video game worlds? Well, it takes about 40 minutes to traverse from one corner to the other, even with the incredibly fast, super sci-fi engines that power your little fighter craft. Also, it can and will host thousands of players at once, along with thousands of asteroids and enemies all at once – all simulated, all persistent. As you can imagine, this presents a problem: how do you pack it full of fun with just six developers?
Perhaps an obvious choice is to make it smaller – but we want the scale to be exciting and full of potential, to be part of the draw of the game. So no, we won’t be making it smaller! Instead, we’ve got to tell the player how big it is, then give them some way of processing that info. Then they need a method of managing and planning their time in it. And of course the most obvious way to do all that at once is with a snazzy world map, something that every gamer understands both in terms of presentation and intended function.
Lazarus has a ton of info that we could present to the player on a map, but we’ve been carefully narrowing it down in an attempt to keep the important things clear and everything else in the background – available but not competing for attention.
First up, when you look at the fullscreen map, you’re shown a visual representation of the entire world (which can be a lot to take in, including your position), as well as a sidebar which displays more specific details of the world’s state. You also get an overview of the world’s population. Separating some of the information off into a sidebar make it easier for players to choose what to focus on.
On a more detailed look, the player will also see that the map displays territories through denoting their borders, the location of Xenotaphs (more on these later), and any large factional attack vectors, via icons. This means that there’s less text to confuse the presentation of information. This all helps the player to see a rough balance of power in the world, all with one quick glance at lines, colours and rough ratios of claimed territory.
But why is territory important? Well, there will be several factions in any one version of the Lazarus universe – three of them alien and one of them human (the player’s faction). They compete for territory because it gives them more power and more gameplay options. So on the map we show the borders of that territory, and colour each based on ownership status. There is a different colour for the four factions, plus one to represent territories that are not currently ‘owned’.
A main reason for all this is that the player will want to know how to capture more territory. This is achieved by taking control of the Xenotaphs, whose locations are also denoted with an icon. Xenotaphs double up as shops, and triple up as warp points too.
When the player clicks on or rolls over a territory, it is selected and we can then show more textual information on the sidebar. This includes the population of each of the four factions within it, plus the ownership status, the stock of the shop, and the cost of a teleport. Finally, the player can elect to drop a way point which is added to their in-game radar. This is shown with a route line and a destination icon.
Therefore, we essentially have two states for the full map – an overview which gives general information about the world, and then a territory-specific, more granular view which will help the player to make short and medium term decisions about what to do next. Do I try to find a shop that has the specific weapon I want? Do I explore new territory because no shops I know are selling anything I want? Do I need to save up resources to equip my ship with the system I want and what route do I take to the Xenotaph in question? Shall I take a risk and carve my way through a densely populated hostile area and pick up enough resources on the way, or should I just farm a surplus in a safer zone, then teleport right to where I want to go once I’ve saved up enough for both the new weapon and the cost of the warp jump?
How do we go about creating points of interest that players can orient themselves by, in a system that’s built procedurally?
With all of these questions, we’re giving the player the opportunity to choose between a LOT of gameplay options, a lot of fun as they traverse the world, plus myriad reasons why they should set out across the stars in the first place.
Now that we’ve addressed how to give the player useful information about the enormous world and how to have fun in it, there are still some additional elements of scale that we need to figure out. Let’s reduce it down – zoom in if you will – on the player-sized issue of moving. When we’re building an enormous world, set in the depths of infinite space, how on earth are we going to sell fast movement? Space is a vacuum, right? Even when you come across enemies they’re moving with almost no context – the player processing their movement against only their own means no-one’s able to tell quite what’s happening or how quickly.
On a basic level we have the minimap – literally a zoomed in view that, in the context of the bigger fullscreen world map, should communicate the player’s progress if they’re paying attention. However, if they’re not, we need to use particles and the depth of the visual world to sell speed and motion. As such, we’re introducing a ‘faked’ parallax scroll with one layer between the camera and the player, plus at least 3 ‘behind’ or under the player. These will exaggerate the movement of the player to the degree that they will feel as fast as they are moving (if not faster) but will also add a greater sense of scale to the world.
The possibilities that the scale and persistence that SpatialOS brings to the table really are incredibly exciting, and right now are within reach.
We already create this impression of speed ‘realistically’ with a volume of particles spawned in the world. But we need to really hammer it home to sell the idea of a fast action game, so we’re reworking it to make it more apparent. Combined with particles around the players’ themselves (which morph into speed lines when boosting) we should have a solution that keeps the moment-to-moment traversal feeling good.
The enormous Xenotaphs offer obvious, periodic static points in the game world. We sell their size with shaders and lighting, to exaggerate their sense of presence. But we need to go one step farther – we can’t have empty space in between them. Asteroids are constantly moving too, even though they’re everywhere. So what can we add to the game that equates to static geometry? Is there something that not only adds a bit of level and world design from a navigational sense, but that is built out of the world rather than hand placed and sculpted?
Yes! We’ve built procedurally generated ‘wall’ creatures. Spawning around Xenotaphs, they start in their ‘soft’ form, where they can be moved by impacts, and will drift. Over time they grow, expanding outwards according to various growth models. For example, they could vary across different instances of the creature to keep things feeling new around the world. Once they’ve reached their maximum size, they harden into static, indestructible structures. In the soft state, their individual sections can be destroyed by AI, asteroids and players. Like a branch, any growths beyond that point will also die, so they can be trimmed and shaped but not precisely sculptured. Once the “walls” become ‘hard’ they are a permanent fixture of the world.
They can be used in defence too, to troll, block movement, divert things, act as a barrier, or just to mark space with interesting shapes. Left to their own devices, they will achieve these effects too, just in a much less predictable and structured way. In the depths of space, in territories that are late to be uncovered, there will be an element of discovery. That adds another aspect to exploration of the game world.
Of course, one of the biggest advantages of using procedural generation to ‘drive’ the placement of the “walls” is that we don’t have to do it by hand. Similarly the placement of the Xenotaphs is driven by the layout of the world, the spread of other elements, so we don’t have to structure things ourselves. This is absolutely a loss of a sense of authorship on our part, but we are working on the systems that drive these placements, and trying to emphasise their causes and effects to the players. Doing so should replace that lack with the addition of something far more exciting to players – a sense of ownership themselves and lasting impact on the world.
We’re also working on developing a closed ecology that drives all of this – in fact we have made a first pass and are currently considering how far to pursue it. The plan is at least to spawn all of the base resources into the world, and then move them about according to very simple rules. We’d then use the clumping of them in high density to drive the creation of asteroids and Xenotaphs. Finally, we add the AI factions, who will harvest the resources to supply the creation of armies. Essentially if the player builds up their own ship and systems, the AI buys new drones that behave in more complex and varied ways as they collect resources. It’s two methods of realising the same core drive into the game world.
As players learn about the world, eventually they should be able to direct the birth of Xenotaphs in specific areas, or prevent it entirely, and use that back-and-forth to impact the world of Lazarus in truly meaningful ways. If there is no Xenotaph, there is no shop, no gravity well to influence the movements of asteroids, no base for AI to be deployed from, and no territory to control. As such we’ve got tons more to do with the game and the tech. How do we go about creating points of interest that players can orient themselves by, in a system that’s built procedurally? We’ve got planets, a giant black hole and various nebulae, but there needs to be structure for these things to feel ‘good’. Doing it all by hand is expensive (too expensive for us) so building effective systems to support this work will be key. Not to mention tying them into the lore of the game in a meaningful way.
Then, once the world is navigable and interesting to be in, how should we make that part of the gameplay? A certain type of player loves exploration and navigation. If we can make it meaningful to the core loop and also fun to just move around in the game, we’ll know that we’re onto something special with the world changing every week. We have plans to add a form of fog of war to the world map, so that as you uncover areas, the map fills in.
This will of course underline how big the world is as you’ll start by only being able to move around in real space – no fast travel! But should we consider making the sharing of map data between players a manual transaction, rather than an automatic one? With persistent simulation, we could also add a whole subset of “systems” for the player to equip to their ship, effectively to roleplay as a pathfinder. Maybe a “limpet” variant that attaches a sensor to an AI, which uncovers the world for you? And then why not attach those to some friends to speed things up and uncover the world cooperatively?
Finally, how do we sell the scale of enemy drone fleets, their actions and interactions? The world map does show movement of fleets, but there is a lot of subtlety in what’s going on that we should consider emphasising and explaining to the player. This could be in the form of recon missions that are generated based on fights kicking off, or troop movements leaving a certain territory defenceless. The possibilities that the scale and persistence that SpatialOS brings to the table really are incredibly exciting, and right now are within reach.
Like what you’ve read? Join our community forums and discuss this article.
Get SpatialOS and begin developing your game for free with our SDK.