nulltermnullterm icon

...a space-faring indie gamedev team

Lift-Off!

Junkyard Space Agency alpha launches on itch.io!

By Ivan and Marta

A picture from ComicCon Baltics
Showcasing the game at ComicCon Baltics. Yes, those custom-made spacesuits are really hot inside.

The countdown to the launch

"T-minus fifteen seconds, guidance is internal... Twelve, eleven, ten, nine, ignition sequence start... Six, five, four, three, two, one, zero! All engines running. Lift-off! We have a lift-off!"đź”—

Damn, goosebumps every time.

So here we are, almost two years since the very first commit in the git repository, showcasing “Junkyard Space Agency” at ComicCon Baltics.

And we are very proud to give you the first alpha of “Junkyard Space Agency” on itch.io!

Codenamed "Lift-off", this release marks the beginning of our game's journey towards the stars — you, the players.

JSA first prototype
First prototype of “Junkyard Space Agency”, July 2023

We won't write many words on how difficult it was to get here, how many sleepless nights, worries, sacrifices, and conflicts we went through on our way to this release. Also because there are many more ahead. It's the first project of ours that gets so far, and for sure, the first that gets so much of our time, effort and money invested in. And it is also the most taxing on our families.

A big and warm "Thank you!" goes to them for all the patience and support.

We are a little tired, true, but also supercharged by the first impressions and feedback we got in the closed and public playtests that preceded the release. But if anything, they only solidified our beliefs that this project is worthwhile.

Watching people play our game at the conference was as exciting as it was frightening. Like hey, what, we just created something that people genuinely enjoy? Are we now bound by our promises to get all those features in, half of which we have only a vague idea how to implement?

Yes, we are.

One does not simply make a space sim

Small team, big dream

We started the development with the two hardest features head first - realistic spaceflight and multiplayer. The years in AAA gamedev taught us that such features are so pervasive and impactful to the whole game architecture, that you can't just bring them late in development. At least, not without massive code rewrites, costing thousands of hours. We are an indie team of two, working on this project during evenings and weekends. Better not waste those precious hours.

Multiplayer gameplay

First, we wanted to figure out what the gameplay would be like in a realistic, multiplayer space simulator. Is it doable at all, and most importantly, is it fun? With Newtonian physics, realistic orbital mechanics, limited thrust and fuel. We all know that it's very fun in KSP, JNO and other games. But those are single-player. You have time warp, saves, rewinds to earlier moments. You can sit comfortably in the VAB for hours and try out part combinations, while watching Scott Manley on YouTube and take coffee breaks.

But how it would play on Internet? How and where do players spawn? How do they launch, rendezvous and dock? Can I just dock to anyone who has a free docking port or I need to be authorized somehow? Can I crash into someone? And if yes, can someone camp behind the station's solar panels and crash into my ship when I’m docking? Do I have my own base, and is it somehow protected? What happens to my ship when I go offline? PvP, PvE, or Co-Op? And what about time warp?

A scrappy space sim

Second, we wanted a realistic space sim, but with a setting that would resonate with us.

Like probably any wannabe-engineer, when he was a kid Ivan liked to make all sorts of toys from scrap found in the shed or on the nearby junkyard. Occasionally, it was pretty dangerous stuff. But let's be honest, who didn't pay in leaves-cash from the nearby tree for a flight on a plane made from cardboard? Problem was, kids usually stop there, and don't go with the plane to the roof... The haystack mostly worked, but the kid didn't grow up, apparently. That's how the idea of building spacecraft from scrap metal, beer kegs and BBQ gas tanks made it into the game. Oh, and Ryan from the KegRocket project approved, and he is a real engineer!

But will this setting also resonate with others? Are all the grown-ups into serious futuristic space sims, or a little less serious one can also appeal to them? Will our weird sense of humor doom the game sales to only those from our friends, who would buy it just to end the cringe quickly?

What's in this version

We decided to cut the scope down to the very bare minimum, that would allow us to test out these ideas. Here’s what we’ve got for you in this first alpha version.

An asteroid with super-gravity

Screenshot of the "Junkyard" asteroid, seen in the Map View
The “Junkyard”. An asteroid, long ago used as a waste processing facility.

Let's be honest, the decision to start on a body without atmosphere was made solely because we didn't know how to code the physics of atmospheric flight. Also, we didn't want to fight floating point krakens right now. So we decided to have an asteroid, 2 km in diameter, as the only celestial body to begin with.

The gravity on real asteroids is so weak that it's harder to stay on their surface than to get into space. To make the game more interesting to play, the gravitational constant was bumped up a few orders of magnitude. This way the math stays all the same and we can give back normal gravity later, by a simple change of one setting.

These limitations turned out to have some interesting gameplay implications though:

First, no atmosphere and low gravity means that it's much easier to reach orbit, lowering the barrier for players who have never played realistic space sims.

Second, beginner ships can be SSTOs, without compromising on realism, but avoiding having to code staging and fuel transfer mechanics in the first version.

In games like Elite or NMS ships are equipped with “magic” engines that technically make them SSTOs - a type of spacecraft much better known to the average space sim player (even if they may not know what Single-Stage-To-Orbit means). This, again, makes the game easier to grasp for those who are new to the genre of hard-realistic space sims.

Obviously, more celestial bodies and a real-scale Solar system will come later, what a space sim this would be without?

First steps into procedural generation

Back in the summer of 2023, we started experimenting with procedural generation with the goal to use it for making asteroids, and later expand it maybe to planets too. Neither of us had any experience in this, but thankfully, we found Sebastian Lague’s channel. We used his solutions as a starting point and adapted them to Godot, the game engine we’re working with.

Screenshot of early procedurally-generated celestial body
An early shot of a procedurally-generated asteroid and a planet.

The first iteration of the pro-gen system gave us two types of celestial bodies: an asteroid and a planet with water and landmasses. Eventually, we decided to focus on the asteroid and refine its generation. We added features like depressions and terrain leveling for where player bases would be spawned. At some point Marta even implemented craters, but we scrapped those for realism reasons — asteroids don't usually feature impact craters.

Procedural generation helped us save time by not having to remodel the bodies manually every time we wanted to experiment with shapes and sizes. Still, this is just an early version. We already have some workable ideas on how to make the results better looking and more interesting.

Realistic spaceflight

Newton gave us, game developers, “Principia”, together with a very compact and easy to implement formula of gravity. Sure, ain’t good for simulating black holes’ event horizons and other extreme phenomena, but quite accurate for realistic spaceflight simulations.

Since we have only one celestial body, and it is much more massive than any of the spacecraft orbiting it, the simulation is reduced to the limited two-body problem and is as realistic and performant as it gets.

The Rocket Equation is also in: spacecraft propel themselves using reaction mass engines that consume propellants, the rockets' total mass changes over time, and all your delta-V math works as expected.

The actual fuel and engine specs, their specific impulse and thrust, are also pretty close to their real-world pressure-fed counterparts.

Rasmus, a player from the community who happens also to be the CEO of North Propulsion, even helped us calculate the accurate mass of the spacecraft using real-world references of the parts and materials used.

All this means that liftoff, ascent, Hohmann transfers, R-bar and V-bar approaches work as you would expect them to work.

The orbit rendering is buggy on large eccentricities though. This will be addressed in the upcoming patch.

Scrappy spaceships

Design considerations

A collage of early spaceship concepts
The evolution of our spaceship concepts… and modeling skills.

A sketch of a spaceship
An early sketch of an asteroid hopper.

We tried a lot of design variations for our spaceships. And, as you may have guessed, we do not have artists. But we have an engineer! Ivan is also running a startup that makes hydroponic systems for indoor farming, and that involves a lot of CAD design and 3D printing of parts, while also repurposing off-the-shelf hardware from the nearby store.

He went for ship designs that resemble scrappy assemblies of real-world parts, but at the same time tried to stay plausible from an engineering point of view:

Screenshot from Blender showing how spacecraft are made
For now we build the spacecraft in Blender, but soon players will be able to build their own.

Beer kegs, press-formed sheet metal panels, ladders and landing legs are also pretty simple to model and texture. Make a cylinder, extrude the handles, give it a few bumps with a virtual hammer, add a metallic material, paint some dirt and few scratches, and here you go - your space-grade scrappy fuel tank is ready. We liked it, and the first community response was also positive. Imagine how the game will look after a real artist joins the team!

Modular hulls

We wanted the players to be able to build their own ships (this comes in the next feature release), and the design of parts and ships needed to support this.
Currently, there are two mainstream building mechanics in the space sim genre. You either stack parts vertically and horizontally, like in KSP — dooming all your spacecraft to look like sausages or donuts — or you use some kind of voxel-based block-building system, which inevitably results in a Minecraft-like aesthetic that didn’t appeal to us either.

Once again, we got inspired by real-world engineering. If you need a lightweight craft for non-atmospheric flight, generally you go for thin walls, mounted on a rigid frame. Take a look at the Apollo Lunar Module, for example. We really liked the idea of allowing players to build something alike, but not by limiting them to just sticking landing legs to a premade command pod.

Ladies and gentlemen, please welcome the platonic solids! Known since antiquity and widely used in engineering, these solids, together with a lot of other polyhedra, can be constructed from just a few simple polygonal faces.

We further reduced the subset of solids to those that can be constructed from only four regular polygons: triangles, squares, pentagons and hexagons; and fixed all the edges to have the same length. Turns out there are many solids that satisfy these criteria, and by combining them, the possibilities become infinite!

The hulls of all of the spacecraft currently present in the game are made from combinations of such primitive shapes.

For instance, the hull of the “Venture” spacecraft from the image above, is a combination of a truncated octahedron for the cabin, and a hexagonal prism for the cargo bay:

Primitive solids forming the Venture's hull
The solid that forms the frame of the “Venture”, onto which panels and parts are then attached.

And check out the “Hub” space station:

A scrappy space station, orbiting the asteroid
The “Hub” space station in orbit. Assembled by docking multiple sections built from combinations of various solids.

There are rhombicuboctahedrons, icosahedrons, prisms, cubes, cupolas, and more! Definitely departs from the sausage-and-donut aesthetics, and even gets some retro-futuristic vibes!

IVA

An animated GIF showing the Venture's interior
The interior of the “Venture”. A little cramped, but everything is in there. Except the space toilet.

Looking for immersion

What we often did miss in space sims is the connection to the spacecraft, the feeling of the machine. Sure, there are plenty of games that offer very detailed and interactive cockpits, especially in the aircraft simulation genre.

But in “traditional” space sims more often than not the problem is not the lack of detail or interactivity, but the overly simplified onboard systems. Considering also that the vast majority of them focus on dogfight and other combat mechanics, usually the only controls of interest are the ones related to weaponry, while the rest of the cockpit is mostly decorative or “read-only”, reporting fuel status and showing some sort of map at most.

Diegetic interface

Realistic space sims go much deeper in the simulation of the spacecraft systems by definition. Even in this first version of our game there are already the propulsion, orientation, navigation, communication and docking systems, and being able to interact directly with all of them is already a lot of fun!

In the Berlin edition of GodotCon we were amazed by the diegetic interface we saw in PVKK, whose booth was never empty. We instantly felt like that’s what could make the difference for our game and add a lot of immersiveness into it. All those interactive retro-futuristic knobs, buttons and dials felt like a perfect match for our junky-scrappy spaceships, so we decided to try to stick to diegetic UI and avoid HUDs and overlays whenever possible.

Complete awareness

We also wanted the spacecraft to be flyable entirely from within the cockpit, and limit as much as possible the necessity to switch between internal and external views, or open the celestial map overlay. The youtuber Kurgut has made awesome tutorials on landing on the Mun entirely from the cockpit in KSP, using mods. We wanted that in our stock game.

Engine and fuel status, altitude, orientation, velocity, position in orbit and the orbital parameters themselves - all are instantly available to the pilot, right there, in the cockpit.

Even complex rendezvous and docking maneuvers can already be executed without calling the map overlay for orbital alignment and phasing, nor do they require switching to external view during close approach and docking.

Modular cockpits

We felt like the last missing ingredient for making a true bond between pilot and machine was the personalization of the ship’s interior. People add various gadgets to their car dashboards, WWII fighter pilots snapped photos of their fiancees in the cockpits. Why a space pilot, who’s going to spend quite some time alone flying in a cramped metal can, shouldn’t be able to give some personality to its interior?

We wanted to incorporate into the design a mechanic that would allow players to not only build their own spacecrafts’ hulls, but fill the interiors and instrumentation panels as they wish.

Large assemblies, such as the pilot’s seat, the CO2 scrubber, storage boxes, and so on, will be standalone parts, installable on attachment points on the frame and the walls, similarly to how building mechanics work in Rust and KSP.

Smaller parts, like control panels, displays, switches and knobs are instead going to be installed into grid-like mounting slots that some of the parts will provide.

Currently, only the cockpit’s instrumentation panel offers such slots, but in the future other parts will have them too, allowing players to install all sorts of controls, indicators, or just fancy cosmetics.

A view on the cockpit, featuring modular control panels
The basic grid size is 5 cm. The docking port controls are two 5x5 cm panels. The on-board computer’s display is a single 25x25 panel.

The actual interior (and exterior) building mechanics are coming in the next version, but the parts and the actual controls are already designed and implemented with this mechanic in mind.

Tutorial mode

One of the biggest problems during development was lack of playtesters. There are a couple of friends who are into “traditional” space sims, but it seems like the best way to scare them away from our game was to say aloud “realistic orbital mechanics”.

We decided that we needed some kind of very simple tutorial, one that would capture the attention of wannabe pilots and guide them step-by-step from lift-off into orbit.

Turns out, this little maneuver would cost us more than 200 hours of development, with some quite mixed results. Probably, that time was much better spent on fixing the orbit propagation code…

Anyway, after hundreds of rewritings of the objectives’ texts and steps, plus a couple of refactorings of the whole mission system, we managed to deliver into this build three playable tutorial missions:

A screenshot of the tutorial missions selector
Every mission teaches a different aspect of the game.

Try them out, even if you’re a seasoned KSP or JNO player! They’ll teach you some important controls specific to the game, and you’ll also get some neat lore drops!

The tutorial is incomplete at the moment, feels like at least missions on rendezvous and docking might be helpful. But keep in mind that tutorials on YouTube on orbital mechanics are perfectly valid for our game too.

Multiplayer


“Venture” attempting to dock with a cargo ship

At last, multiplayer. Not least by any means, and in all honesty, a huge pain in the ass to implement properly. But we saw it coming. And this feature is the whole point of why we started making this game.

In this version players can just spawn for free as many times they want and fly wherever they want. When fuel finishes, their ships just become derelicts. There’s no PvE or meaningful Co-Op yet, although players can rendezvous and dock with each other or with NPC ships.

Player-owned bases

An animated GIF showing an overview of the player's base
An overview of the player's base from the assembly pad.

There are currently four bases on the surface of the asteroid, assigned to players upon connection. No authorization or anything is implemented - first in, first served, until all the bases are taken.

After pressing “Fly” players spawn on their assembly pads in a fully fueled “Venture” ship. Any previously controlled vehicle is destroyed.

The bases’ facilities are indestructible and currently there’s nothing preventing one landing on other's base, on the contrary - try paying a visit to your neighbors!

But there’s a caveat - when spawning on the assembly pad, all nearby vehicles are literally kicked out of the pad, just to make sure there’s no debris or obstacles. Most of the time, a rapid unscheduled disassembly of the unfortunate campers follows.

Limited PvP

From the very beginning, we ruled out violent PvP as a core gameplay mechanic, one in which players fight with weapons, raid bases, loot each other, etc. For three reasons:

First and most important - because we wanted the game to be a low-pace, chill space to which players come to relax, explore with calm, and learn the art and science of realistic spaceflight cooperatively. Sure, there will be competition for parts and resources, once the building and resource management mechanics are delivered, but a non-violent one.

Second, the nature of realistic spaceflight itself, where ships can collide with each other, deorbit and fall down, accidentally or intentionally, already provides means to do PvP. Not all rockets are missiles, but all missiles are rockets. Nothing now prevents players from setting their spaceship on collision course toward others, and it won’t be that hard even to do a precise surface strike from orbit, in absence of atmosphere and with the map view rendering the exact place where the ship will impact the ground.

We decided to leave it that way for the moment. Less restrictions, more fun, and let’s deal with the problem when the game becomes popular enough. The simplest solution, implementable in one day - allow collisions only with authorized ships, and make NPC ships and bases invulnerable. Let’s just keep it on the scratchpad for now.

And the third reason is cheaters. We don’t have neither the resources to deal with them, nor the will to code in anti-cheat systems - a battle lost from the beginning, especially with an open-source codebase.

Still, nothing will prevent modders to mod in their own PvP mechanics and host community servers with such mods enabled.

We’re actually working now on a simple PvP mod which will act both as an usage example of the upcoming modding system, and just for having some fun together in Discord.

Time warp

Currently there’s none. We made the asteroid small enough, so that orbiting it takes just a few minutes of real time.

We considered a lot of possibilities for the multiplayer time warp implementation. Slot-based, consensus-based, and all the variations in-between. But all those eventually implied that either the game becomes a constant voting for warping, with a natural cap to 4-6 players, or requires people setting up alarms in the middle of the night to not miss the next time warp slot.

Enter the Parallel Universes (Ivan probably read too much Hawking). For now this is just a hypothetical solution, but since it’s a frequently asked question, we’ll share it in this post.

The idea is that there’s a “main” universe, in which time always flows normally - one second matches a real second.

When a player decides to warp, a “parallel” universe is created just for them, an identical clone of the main one. The player’s ship is transferred into this new universe, and time in it can be accelerated at will. As in single-player KSP, the ship moves faster, and the celestial bodies also rotate and orbit the Sun faster. The astronauts on board and the spacecraft systems also consume resources at a faster rate. The player can even decide to return to normal time, and still remain in this parallel universe, all good, they’ll be just alone there, in their ship, loneliest masters of time ever. No other players, no bases, no dinosaurs on Earth yet and never will be in this is sterile, temporary universe.

At some point, the player decides to exit the parallel universe. Their ship will be then reconciled back to the main universe, but in the same position relative to the orbited body as in the parallel one. From other players’ point of view, the warping player just popped out from one place, and reappeared mere seconds later in a completely different, on the other side of the Solar system. With dry tanks and quite aged astronauts, probably depressed, home-sick, and questioning the mission’s objectives.

What comes next

A bit of rest for sure - the last three months were quite crunchy.

Meanwhile, collecting feedback and bug reports, and prioritizing them. A patch for the most annoying ones comes in the next weeks.

There's already ongoing work on picking an appropriate FOSS-approved license for the codebase and sorting out the proprietary licensing of the assets.

With the legal questions settled, the codebase will be released on GitHub! And with it comes also the mod support. We want modders to join as soon as possible, and having the full sources at hand should make things for them much easier.

And then begins the work on the next big update, which will bring spaceship building and EVA into the game.

Stay tuned!