We’re excited to share an update on what we’ve been working on as we wrap up our latest milestone, Milestone 2! For players who are excited about the story of our game, this update is guaranteed to be mostly spoiler free. As we have more milestones, with even more exciting names like Milestone 3 and Milestone 4, we’ll be sharing these updates so we can show our progress.
Sometimes it might not look like much, but the achievements are in securing technical, design, or creative goals. We usually want to prove anything we’re doing is really worth our while before investing in it, and a critical step which won’t be obvious until the very end is actually polishing what we have. Until we make a lot more stuff, actually play it all together, and evaluate it against every part, we won’t know exactly what parts are fine as-is and what parts need extra love to shine.
Get ready for some things in various states of completion!
That’s a Lot of Stars!
Our game currently has 718 stars. I actually hadn’t counted in a while and tallied them just for this blog post! The stars in HyperSpace are laid out in a program called Tiled, and Simple uses a bespoke plugin to ingest the Tiled data and create the actual, playable map of HyperSpace. All of this was already working, but there were a few things left to do to finalize our vision.
First was enhancing our procedural generation. Our game is built out of two distinct parts: Simple, which handles our physics-based gameplay and multiplayer needs, and Godot, which we use to do audiovisual representations of the gameplay. Godot observes what’s going on in Simple but otherwise has limited awareness of what might show up and executes no gameplay code. Many months ago, we started to do procedural generation of solar systems, where we create a collection of planets and position them around a star programmatically, as well as override certain things when we want to place special things like Rainbow Worlds. All of that work was done within Simple, since it’s important to gameplay.
The problem is, Godot doesn’t run Simple logic, so it couldn’t do the same procedural generation. It only knew how to visualize planets, minerals, and so on when the player was actually there and they had been generated.
This created a challenge for how we would go about tracking progress or guiding players to things. It would be difficult to know what, exactly, a player would find or had done in a star system if we didn’t know what was happening there except when a player was in that star system (say that 10 times fast)! Beyond that, we have a design for an interactive Starmap which helps a player take notes about what they’ve discovered.
We needed a way for Godot to be able to get the same information about procedural generation that Simple was using, but at different times, like from the Starmap menu. We now do our procedural generation in a C++ plugin. Godot and Simple both run the same, shared code to generate a star, even though they will each do wildly different things with the information. Simple will actually make a solar system, planets, and minerals when the player enters the appropriate game space, while Godot will get the same information about what will be made as a JSON response.
Second was authoring some of what we call our “HyperSpace topography.” We were currently using Tiled only to generate stars, which are always the same shape and were always the same kind of thing (a star). For Children of Infinity, rather than a straight shot through space on manual or auto-pilot, we wanted the player to actually experience some texture in HyperSpace. We’ve talked about it forever and did some prototypes, but it wasn’t clear how we’d handle it at a large scale. Using nautical metaphors, what if there were currents, shallow areas, deep areas, treacherous rapids, and other navigational hazards in HyperSpace? What if there were many things in HyperSpace besides just gravity wells?
We now support a bevy of features that let us make unique shapes and gameplay. Using Tiled and Simple together, we’ve been able to demonstrate fun gameplay with 2D shapes and actually make the Starmap much more of a game map, with tools the player will gain to help them traverse new challenges. More on that shortly!
Lastly, we wanted the ability to create dynamic experiences in HyperSpace. Luckily, stars don’t need to move around, but we were starting to place things that would appear or disappear based on different rules. We had mechanisms for placing all kinds of things, but what about deciding if they should be there at all? What if those rules would change over the course of play? Spheres of influence are a good example, but we’ve got a lot of new things cooking beyond just spheres of influence. Here’s a proof of concept showing the player using their metaphorical metal detector to find some similarly metaphorical buried treasure beneath the metaphorical waves of HyperSpace:
We still have a lot more work to do in HyperSpace, especially in deciding how we want to visualize some things, but we can now build all of our prototypes at scale and see how the whole map plays. And it is a big map!
Introducing the Introduction
We have sliced our game’s story up into different playable segments which usually revolve around the subplot of an alien or two, and we have been designing and building each piece one at a time. Last milestone, we got our first of these playable segments put together. This milestone, we tackled one that is very likely to change before we finish, but is a critical part of seeing how the game plays: the start of the game!
The beginning of the game has a lot of heavy lifting to do beyond the story elements. We want players to be able to pick up and play the game well enough to be motivated and feel capable. For that to succeed, we don’t want to introduce players to too much overwhelming complexity too quickly while they might just be coming to terms with the very long mastery curve of the unique physics of Melee combat.
We now have a start of the game, including a story, where the player is introduced to ship controls and Melee, then to the notion of scanning and landing on planets, and then finally to exploring HyperSpace. They’ll meet different characters who will be part of the player’s story and can help guide them. We’ve built what we lovingly call ‘the kiddie pool’ where the player can safely learn the core concepts of the game before they’re unleashed on the entire galaxy. We’re still playing with how much we want the player to be forced vs. encouraged to stay in the shallow part of the pool until they have complete freedom, and this is something we’ll know how to tune when we have more playable story segments and player growth.
Last but not least, the beginning demonstrates a starting point for the player’s capabilities. We want players to feel encouraged to grow in strength. Whether it’s getting new ships, practicing Melee, or acquiring some of our many upgrades which will help them progress through the game, we’ve created the floor from which all those things will rise.
Want Success? You Planet!
If you were to identify places where the player was more likely to lose crew, Melee might be the worst thing in space—but being planetside is dangerous. We put special attention into actually creating a spectrum of planets, from peaceful to absolutely deadly. We had proven the bottom and the middle, but what about planets where you absolutely do not want to go without being properly equipped and skilled? We’re very satisfied to finally have planets where you’re likely to die before you can even finish uttering your shocked expletives.
Planetside work also hit some asset goals. As of our milestone, we have finished creating our entire creature roster, only needing the ones our backers will be helping us design (more on that shortly). We might choose to create more creatures later, but since we only have one artist working on these, it’s great to unleash him on some of our other art needs.
Planetside has proven to be the most challenging art space to nail down because of the mixture of very different types of art: a procedurally generated texture, modeled objects like the lander and critters, and VFX for hazards. The player needs to understand what all of these things mean for gameplay, and from an artistic standpoint, we are trying to strike the right balance between artistic interpretation and abstraction and “what it really would look like.” For this milestone, we created a new workflow for generating planet textures that an artist can interact with. The artist can now actually spend some more time polishing and tuning that texture in an environment with our other Planetside objects to balance that push and pull between reality and computer-generated artistic abstraction.
Speaking of plans, we had long had a plan for how we wanted to handle our camera in Interplanetary view once players are in a star system. This was a bit of a polish task, but because it was never really proven and remained quite unknown, I spent a little time verifying it was going to work. There’s still more polish to do, but here you can see our Interplanetary camera capturing some of the vibes from The Ur-Quan Masters as it provides different zoom levels depending on how close you get to the sun. Elements like battlegroups and other players at different zoom levels all move at different speeds, and we’ll indicate to the player what might be close or far away with some size changes. The idea is that the player’s ship size stays constant even though the size of the world around them changes. Everything’s still subject to change, but we think it feels pretty unique and will encourage players to want to get closer to things to learn more about them–the core exploration principle of Children of Infinity!
Last but not least, we continued to work through our alien conversation portraits. We finished three more of them this milestone and started working on our next two. We’ve also created what we call our mini-comms screen, which we will use in special situations where characters might want to talk without pulling you into the main fully interactive comms screen–-like for tutorials, cutscenes, and stuff like that.
Let’s Split
We made a number of technical achievements that will unlock further design work. We finally completed the technical heavy lifting which would allow us to prove local co-op play. We now allow the Godot viewer to request an additional viewport for a local player, and our user interface plumbing is set up to support the notion that multiple players might be playing. If you are familiar with programming concepts, this is very much the equivalent of undoing a lot of assumptions, removing singletons, and inventing objects which can come and go as players come or go. This coming milestone, we’ll actually be doing some of the real work for co-op play in general, but this was an exciting technical piece to have under our belt.
We started work on our Switch port this milestone, and as of now, the whole game is playable there! (Well, as much as it’s playable anywhere, at least.) We have a long way to go to accommodate the Switch’s more limited technical requirements, but just getting it running was no small task. We are excited to work with W4 Games to make Godot go-go, but because we have some unique engine components like Simple, we need to do a lot of our own work as well. We’ll be determining strategies to optimize for memory and performance now that we are actually running.
We have a lot of other technical odds and ends we were able to do this milestone which are far from flashy but will make our game so much better. We implemented threaded loading of game scenes so players can play the game seamlessly without loading screens. We have a lot of progression systems functioning, so we can trigger events based on interesting, secret bits of data like how many star systems the player has visited, who you’ve talked to, and other bits of knowledge the game accumulates. We have rudimentary controller support for playing without a keyboard. We made some very cool music mixing tests with multi-tracked music to go beyond simple musical loops for our gameplay. Like we mentioned last milestone, a lot of our technical work is in tackling the biggest unknowns—and there are lots of little ones like this that help us shape our work.
The Big Production
During this last milestone, I also finished a massive spreadsheet which represented the entire itemized list of every asset, task, design, and feature required for us to finish the game. While we had started working in our milestone chunks already with a roadmap toward completing the game, we couldn’t actually finalize everything until our Kickstarter wound down and we actually learned a bit more from our first milestone about how the work was going to, well, work.
The last time we had such a complete summary of tasks to complete was actually in the lead up to our Kickstarter, where we detailed every single asset, plan, and goal we’d need to do before we could activate the Kickstarter.
With our entire game roadmap, now we can actually say with complete confidence that we’re done with all of our creature assets. We also have it mapped against time and effort, so we know when we need to be done with all of our ship art, for example. We can guarantee all of our contributors will have clear deadlines and we can scope all of our work and make sure they really will have time for what we’re planning. It is also easy to distribute the work so we aren’t trying to do too much all at once.
It might sound a little weird to say I’m excited about a spreadsheet, but it’s a really empowering spreadsheet. We’re working with a team of people and we’re serious about delivering on time, so it’s critical that we can all look down the same runway together and see the steps we need to take to prepare for takeoff. From a personal, creative standpoint, it’s honestly thrilling to see every single part just described and accounted for. The vision we want to achieve is accounted for, and I personally am excited to actually have an accurate plan for how to get there.
This also helped us make decisions on when we might look to do things like playtesting. We know we’ll have a few willing victims, er… participants. In addition to our supporters who are participating in a private playtest, we planned out when and how we’ll be taking in designs for creatures, lander skins, ships, and the Precursor Legacy. We know the last two months of the year are typically busy times for people, but if you backed at one of those tiers, look out for an email in the next month with some fun “homework” to do. We’ll establish some deadlines (don’t worry, you’ll have time!), but we’d love to start working on your creatures at the start of next year, with your ships and lander skins following.
For everyone else who has already been submitting text in our surveys for the Lost Crew Log and Messages from Earth, we’ll be starting to slot them in this milestone. We’re excited to finally start putting your contributions in the game!
What’s in Milestone 3
We have a few big goals for our next milestone. Of course we’ll be continuing to make things like our playable story slices and alien comms portraits, but we’re going to finalize some big parts. In short:
- Complete design for co-op play in Adventure (the story mode) with all parts working. Start preparing our UI and game to handle the user experience for local multiplayer, split-screen co-op and single-screen Super Melee (the player versus player mode).
- Finalize the requirements for every playable story slice, even the ones we aren’t building yet. This will help us ensure we’re not over-scoping anything and can stitch multiple story segments together.
- Implement our Trading and Alien Auction House systems.
- Finish our gameplay experiences for Gas Giant Gameplay and how the player is using the Mark II (!).
- Implement player ship and lander upgrade mechanisms so they can actually grow beyond the starting point we made this milestone.
- Finish all of our new ship designs and art (besides the ones we’ll be making with backers).
- Start finalizing our Interior experiences with Floyd, including building art assets.
- Start supporting more fully-featured and platform-specific network play, like making use of Steam’s “invite to game” feature for playing with your friends.
Definition of Done
One of the unique parts of game development is identifying what is or isn’t easy to change, and then navigating with that knowledge. To use a metaphor, if you’re building with Lego and you’re making something that’s only two bricks high, you can swap and rearrange different parts quite easily without destroying the entire piece you’re working on. Once you start building a dozen bricks high and start making more interesting shapes like towers or bridges, taking things apart becomes a lot trickier. You might wish you had more blue bricks, but they’re all stuck in that massive sculpture you built. The problem is, maybe you didn’t know how cool blue bricks were until you put many structures together.
Part of creation is letting your creations speak to you. Games are meant to be played! That metaphor really feels apt for how games shape up. Assuming our finished game is a swath of dozen-brick-tall features, it would be a huge mistake to try to stack everything up that high right now and commit that deeply into ensuring every structure is a dozen bricks tall. With a finite amount of time and a broad collection of experiences we’re making for players to enjoy, the challenge is that we don’t know exactly which experiences are going to be best yet. They aren’t all sitting together, and some are only five high while others are just getting their second brick added.
In describing the big spreadsheet above, one of the critical allocations of time is for polish. What are we going to polish? We don’t know! For all we know, many things will be great being only five high, while others will be so much fun that we want to make them the full dozen. That’s why we reserve time to polish the whole product and experience, since we’ll know what isn’t working only when we compare it to all the other parts. You could call it triage, but it’s more like a positive version of triage. What aspects of the game will benefit the most from additional investment? It’s too early to tell.
Finish Now, Polish Later
I am continually learning on this project. I learn about new technologies, new game design ideas, and how to work with other people on a team. If there’s one thing I hope everyone on the team embraces, it is that we are all here to learn together. One of my biggest lessons I’ve been learning on this project is how to teach and even enforce that notion of leaving polish for later.
We are fortunate to work with so many creative individuals who are filling our game with their dreams. We want their contributions because they have those talents and capabilities! How can something be visualized? How can a story be told? How could a strange alien sound? It’s wonderful what we can come up with.
I’m used to seeing a lot of games in progress, and it’s honestly a joy to share all of the incomplete work with the team and everyone following our development. For our creatives who dream and are unfamiliar with the process, it can seem confusing or outright mortifying! Maybe even for you, reading this update right now, you are wondering or anxious about certain things which don’t seem finished. You are right—they are not finished. As Fred likes to say, nothing is ever finished.
This is true for our game too. We live in a world of constraints, and we will call it finished when we get there. I’m looking forward to actually having players play the game! We still have time to polish, fix bugs, and do playtests, and it is critical that we reserve that time for later instead of trying to achieve perfection before we know if it’s even worth perfecting. You might never know what we didn’t do, what we decided to leave behind at any stage, and what actually got the most polish put into it.
A cake has both cake and icing, and we’re still making layers of cake. It’s not ready to taste, and it’s our job to imagine the icing long before it’s there, not rush to put the icing in before we have our cake layers baked and ready to stack up.
We will have what we think is a pretty great game, and we’re encouraged by the incremental improvements we’ve made to our work so far. We’re so excited to have your support and involvement along the way! Join us on Discord, Twitter, and Reddit to be a part of the community. Our BackerKit page is still available for late pledges and you can still support us on Patreon as well.