Game Pitch: AstroRush

Good Morning from my Robotics Lab! This is Shadow_8472, and today I have a game I’ve started making with a side of working on my homelab. Let’s get started.

The Pitch

AstroRush

A re-imagining of the classic asteroid-blasting arcade staple, this simple 3D space shooter puts you in the cockpit of a nimble spacecraft pulverizing asteroids in search of their mineral wealth. But is humanity alone in its interest in the Alpha Centauri system?

Styled to resemble vector graphics of the inspirational Atari title, Asteroids, AstroRush is my first game in my lineup to build my skills toward expressing my Container Analogy in an interactive format.

Progress so far

First off, I’m building this game on Redot 26.1, a free and open source game engine forked from Godot to provide a more stable base. The project recently moved from a “soft fork” to a “hard fork” – meaning that backwards compatibility with Godot is no longer a concern. The word I heard is that Godot introduced breaking changes in a minor update, which generally is a big no-no.

Moving on to AstroRush. It’s a working title I came up with to replace “Asteroids 3D” for this post – a pun off of “asteroid” and “gold rush.” The story I have in the back of my mind is that humanity is building its first inter-stellar colony, and all precious minerals are required.

Development proper started by grabbing my free flight controller and a picture of the sky from NASA for my background. I got the composite of the starry sky to feel like it could be drawn by an arcade game by turning down the saturation and maxing out contrast in the environment node.

And then most of my time was spent on dead ends trying to get the look just right. This category is split into two sections: first is shaping the asteroids, the second is outlining models with all-black albedo. To shape the asteroids, I first made a vertex shader to nudge around the points of an Ico Sphere out of Blender. The naive approach of displacing each vertex gave me a “nacho explosion” where each triangle goes off on its own. The trick was using the values at a 3D noise texture as a seed. But I found I could only make one unique asteroid using this method.

My second approach was to build the same logic in code. It took a bit longer, but again found that the last mesh defined was being used for everything. This is particularly problematic, as I need meshes to scale for larger/smaller asteroids. I ran my code past the Redot community and learned the engine was working as intended; I had made erroneous assumptions from the documentation. At this point, I’m likely to just “bake” a series of meshes that can be assigned randomly as needed.

Extrapolating the visual style of Asteroids to 3D was probably where I wasted most of my time. After trying and failing to write an outline shader for myself, trying to work with the stencil buffer (turns out it’s listed as experimental, and subject to change), and searching for a pre-made outline, I circled around to one that worked sort of OK, but didn’t particularly like low-polygon games as I was working with.

I wanted to understand the structure of the shader I was working with, so I spent a day re-building it as a visual shader – translating each line of shader code into a form resembling a flow chart. For some reason, I was never able to get it to behave the same as the original, even when I rigged the relevant parts into an “expression” node made for handling code. Yeah… those appear a little buggy at the moment.

Around this time, I was playing with a widgit in the Redot interface when I noticed a pattern in the misbehavior with the outlining. All I had to do was vertex deform the outline mesh as well.

Working on the free flight controller, I found speed caps and drag for both rotation and lateral movement helped with the feeling of a responsive space ship. Without them, turns are a fight against velocity. Think: Kerbal Space Program. I’m also working on making the script more friendly towards using it in other games. That means extending it using a second file.

Takeaway

It will take time, and progress will be incremental as I learn the basics. I still don’t have a playable prototype. Is the game fun? I don’t know. I sure hope so. But as the code base grows, I’m going to want a local Git server in my homelab.

I am thankful for the Redot community being so chill because the Godot Discord has reportedly gone on a witch hunt – banning people over common opinions the moderation team considers hateful – be they expressed openly, in a profile you have to hunt for, or in a leaked DM. No mercy, no notification – just a ban, according to some Redot users I met. Assuming it’s all true, I have to say it’s sad. On the one hand, I believe they hurting themselves. On the other, Freedom of speech is not freedom of platform. They have every legal right to build an echo chamber, but I find it morality dubious at best to eject people for wrongthink when they are otherwise behaving.

Final Question

What would you call this game?

Space Engineers: Gravity is Stronger Than Thrust

Good Morning from my Robotics Lab! This is Shadow_8472, and today, I’m changing my goalposts and slapping a finished sticker on last week’s project. Let’s get started!

The Design

Where to start now that I’ve “finished” this project? The hull is defined by ship’s systems, but ship’s systems have to fit inside the hull. The whole point of this craft was to make a craft that could bore in its own silhouette without as much overhead, and the simplest way to do that is some take on the cylinder.

In the interest of added visual appeal, I played around with different angles all along the length of my design. The cockpit is as close to a sphere as I can get and still have major flat regions. I added a skinny neck just because, then a larger habitation section with two decks: a multipurpose room and fuel storage/airlock. My cargo hold also houses most of the ship’s batteries, and engineering has a bunch of engines I’m basically lugging around and a tiny secondary cockpit in the very back. Each section listed above — aside from engineering and auxiliary control — is individually pressurized using doors.

When I went to start adding thrusters, I found all my fancy angled hull sections lacked adequate mount points. I adjusted my spreadsheet to find I could boost my effective thruster power by adding nine small thrusters to each big one, at the cost of an extra couple blocks footprint. I sent my new number through my spreadsheet again, and found I’d only need about ten “super thrusters” to hover.

Oversight

I totally forgot about the weight of the ship. In fact, I couldn’t figure it in because of the way the game reported my mass including the ground-based station I was attached to, as well as any ships docked to it. As a result, when I went for my first nose down test, I wasn’t able to back out of my hole, even though it was a third full, tops.

And with the power of extra thrusters comes greater draw on the power grid. I totally neglected to run the numbers before taking off, and found my batteries maxing out while accelerating upwards. I can probably hover under max load, but I’m also looking at the overall battery life. There’s also the fact that I’d like to relocate my base to a nearby mountain top for a bit more light. The air up there is thin enough to where the thrusters I’m using are not as effective.

Game Boundaries

Many games hint at their boundaries before you run into them. They may take the form of an invisible wall marking the edge of a level or a second stack of objects denoting a limited size inventory.

Space engineers has a feature that lists every intractable part of a ship or base your interfacing with. User-defined groups let you manage several parts at once so you can do turn on all the drills or toggle the lights. Maybe all the batteries need to recharge. What this feature lacks is a means to select a range of parts. (Edit in post: Feature does exist, it’s just my right shift key closes the window.) When I found myself with 300+ small engines, I had to click on every last one of them, and it wasn’t fun.

Another lacking feature as I’m finding is the inability to manually move items around. After a marginal amount of research on the official Discord server, someone introduced me to sorter blocks’ unadvertised function of pumping ships’ inventories dry of all matching items.

Takeaway

Game developers will generally have an idea of the scope of the stuff their target audience of players will be doing. Wandering off the intended set of use cases can lead to frustration, but every so often, it can lead to art.

My ship isn’t the easiest thing to look at. It’s covered in way too many engines for its own good, and it still accomplish its mission of hovering while pointed straight down under full load. It’s still more capable than my first ship, which I’m thinking will make for a nice shuttle pod later on.

Final Question

Have you ever set expectations high for a project, only to settle with something that’s still better than you presently need?