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?

The Importance of Team Communication

Good Morning from my Robotics Lab! This is Shadow_8472 and this month, I participated in the 2026 Redot Winter Game Jam. I have a story out of it, but it didn’t go the best. Let’s get started!

Disclaimer

I do not wish to defame anyone – only warn about the importance of communication. I am therefore substituting the names of my teammates for Stardew Valley characters based loosely on roll in the project while ignoring other characteristics, such as age or gender.

People have bad days, and I am only one witness of a narrow window of time. So please: unless you are a moderator, leave idle curiosity here. Fellow participants, do not allow anything you read here to affect how you rate the entries.

Out the Door Studios

One of my longer-term goals has been to code a big idea I’ve had as a video game, but I need to build skills to that end first. I entered the Redot Winter Game Jam last year to do just that. Redot is a fork of Godot – itself a free and open source game engine. Godot made a comment I found unwelcoming on their socials, and Redot prioritizes making games over witch hunting wrongthinkers. Under that context, I built what became Out the Door Studios. Going into the Redot Winter 2026 jam, I have two jams worth of experience plus a little from personal projects.

A Group Founded in Poor Communication

The official theme for this jam is officially “Slippery when…”. For me, it is miscommunication – not all of it mine, not all of it bad. The first miscommunication involved meeting Sebastian, a programmer with a little 3D experience. He mistook our 2025 entry for 2026, but I invited him to Out the Door nonetheless. Nobody I’ve previously jammed with was both available and interested. Within a few minutes of my pre-jam pitch, he had delivered a visual matching my inspiration perfectly.

And then I spotted an ad by Lewis. He wanted a programmer and a 3D artist to round out his jam team for a more ambitious 3D project. I applied, offering Sebastian’s and my talents. It went back and forth between Sebastian, myself, and Lewis for quite a while, with me making Lewis out to be “middle-to-top of the little leagues.” Somewhere in there, I listed my years of experience with Linux intending that as an ability to solve problems.

Unbeknownst to me at the time, Lewis was more “bottom of the big leagues” and took my experience maintaining a homelab to mean I was programming the entire time. When I arrived in Lewis’ Discord, it had about 10x the members I expected. It is set up more like an office than an informal development environment. Impostor syndrome set in, but I pushed it aside. Their rules weren’t copy-pasted –usually a good sign– but the casual coarse language made me uncomfortable from the start.

Already on the team were people to whom I will refer as Leah, a concept artist I didn’t interact with much, and Maru, another programmer. Yellow flag out the gate: time zones – the five of us were spread roughly equally around the globe. Most pointedly: our programmers shared little in the way of sleep schedule, severely hampering collaboration.

The Jam Begins

Now, I never signed any NDA’s (Non-Disclosure Agreements), but as of publication, the jam is ongoing; I will avoid mentioning specifics unless they’re vague or important. We got a relatively good jam theme, “Slippery when…”, lending itself as easily to ice/slipping as stealth/evasion/pursuit. Four of us hopped in voice (Maru was asleep).

In that first meeting, I immediately got cussed at to turn my mic down (apparently, my mic settings were out of whack from fiddling last month). I proposed using Codeberg – having to explain the difference between GitHub (code-hosting website) and Git (version control software at GitHub’s heart), but Lewis about insisted on using GitHub, “let’s just stick with what’s familiar.” ‘But, GitHub is not familiar to me,’ I thought. His house, his rules.

Alone, that wouldn’t mean much, but every design decision followed suit. At one point, we were split 3:2 over what to call a gameplay element. Despite Lewis landing in the minority, it shifted from “we’ll just agree to know what we mean when either term comes up” to an unspoken, ‘just use Lewis’ term in-code.’ Yellow flag.

My main contribution to the game was locating a system important to the main gameplay gimmick. I found something on the in-engine asset store and had it half-way working, but after a day it proved buggy and inherently didn’t support browsers. I spent another day studying how similar effects were accomplished in familiar titles. One lonely video demonstrated everything we needed running in Godot (which Redot is compatible with), but without code or contact info.

The Tutorial

Then someone –Sebastian, I believe– located the tutorial. How to do <our gimmick> in Godot 4. Code was published, but lacked a visible license. I spent a day tracking one down. Let’s call the tutorial author Mr. G4 for Godot 4. His project built off someone’s Godot 3 code. Mr. G3 was following up on a fourth party’s Godot 2 demo. Between them, I only found an eMail for Mr. G3. Mr. G2’s digital footprints ended in 2021, one post after retweeting an incitement to violence against police in 2020, which I reported. Mr. G3 got back to me with an MIT License, and I was able to share my Container Analogy post.

Mr. G4 was tricky. I asked Lewis, citing enough context between the video and comments section to treat it as MIT, and he said his personal philosophy is that if there’s no license, just do whatever; it’s just a game jam. Yellow flag: one might get away with CC0 (public domain, even without public domain), but that’s not how copyright usually works.

I showed the tutorial to Muggyfox1, a colleague from my second jam, who figured it was fine. The code had been online for years, I made an effort to reach out, and the author clearly intended to be copy-pasted.

In either Mr. G4’s implementation or the asset library’s, the mechanic relies on a shader (GPU code usually used for graphics). Maru was wary of using shaders, but I figured it was within reach, given ready code and my success reading data back out of the graphics card.

Meeting

Sunday came around, and the jam team was invited to a meeting. Sebastian had a previous engagement, and I woke up early. Did I say the jam team? No, it was server-wide! I caught the tail end of a foul mouthed, pre-meeting goof off session. They deliberated content creator sponsorship programs to apply for as a server while alluding to male reproductive organs at the pair they eventually got.

I abstained from deliberation and voting, as I was planning to peace out after the jam at least until another jam – besides, none of the potential sponsors interested me anyway. When pressed for comment on something, I noted for the record that I considered myself as “on probation” for the time being.

Flashpoint and Aftermath

A week into the two-week jam, Lewis was feeling the time crunch. He was using all-caps in chat, demanding that someone start the 3D environment. We programmers were presumably all waiting on each other for things. Lacking a good 3D environment, I had been asking for help all day to add a slightly less important feature to the shader. Eventually, I entered a voice call with Lewis.

Lewis tried the demo I had on GitHub, but it was from a weird development point where something wasn’t working right. I offered to share directly from my screen, but Lewis wasn’t as impressed as I would have hoped. He was quite miffed to hear I was working on a shader and simultaneously told me to “SCRAP IT!!” and, “See it through!” If you’ve ever read about the development of Sonic X-treme, that’s what it felt like.

“Tell me ONE good reason I should not kick you out right now!” he said.

I had already committed to forgiving him after He apologized, otherwise it might have turned into a shouting match. I prayed to Jesus for the situation as I actively ignored any rash words of passion that lent themselves to being hurled back. “I’m the only one who knows how the <REDACTED> system works,” I said as calmly as I could.

I tried not to flake afterwords, but the damage had already been done when Lewis yelled at me. It came into focus the next day after two unproductive hours without positive directions and a reality check with my sister and mother. I was easily spending 10+ hours a day focused on this project, trying to keep things moving when Lewis was offline and people (mostly Sebastian) were at a loss as to what was currently needed. When I DM’ed Maru, she shared her doubts from the start and said, “learning while trying to deliver a complete game in 1 week [sic] is nuts.” (The jam is two weeks.) I had tried to be clear to Lewis, “I am here to learn and have fun with the goal of getting something out the door that is a bit more complex than my previous work.” Neither of those bolded conditions were true anymore.

Sebastian had been more optimistic the night before. I had taught him the system I’d assembled and documented it with plenty of screenshots. He commented on a couple missing features on the shader, and let no one truthfully say I didn’t give it my all to add them until I was burned out.

But when I did burn out, I tried to leave with as much class as possible while still saying things I felt needed to be said. I put my code in order, leaving a new comment or two, then organized the shader with frames around nodes meant to function together. When I told Sebastian about my plans to leave and Maru’s pessimism, he replied, “I might be the only [guy] who can stitch everything together.” Maru expressed disappointment upon hearing we wouldn’t get to work together on something more serious. In the end, I wrote a 500 word letter of resignation telling this story and dropped it in his server, CC’ing everyone in the jam’s section, including what looked like a server admin.

As a last order of business, I licensed my contributions under GPL to Lewis and his team, then ensured its admittance into the main branch (I don’t know that Lewis knows how to use ‘git checkout’ to cleanly remove my contributions). Since I’m not trying to sabotage the jam, I wrote in an exemption until the submission deadline. After that GPL applies, meaning if Lewis wants to continue development, he will have to either publish his entire project’s source as GPL or contact me through a 3rd party for negotiations, but only in the presence of a chaperon approved by me and who has authority to end the conversation at any time for any reason.

Takeaway

I am proud of the work I did complete, and I really hope the team can publish a fun game on time. But at no point did I ever sign any NDA (Non-Disclosure Agreements) nor did I sign away any rights to code I wrote/modified. I hope Lewis grows as an individual from losing me like this. When you work with volunteers, you’re working with volunteers.

I had fun with the mechanic I did get working, and I think I want to do something with it in the future.

Final Question

Have you ever had to walk out on a bad team situation?

A Pair of Programming Projects

Good Morning from my Robotics Lab! This is Shadow_8472 and today I am covering my programming work this past month. Let’s get started!

I am finding that even on the monthly cycle, I don’t always finish the projects I intend to. This month, I was intending to work on my phone, but that project hit some tough truth and the story isn’t ready yet.

HyperTrace

I might as well introduce my newest long-term project, HyperTrace. It started out in October as a spectator camera for a larger Redot community project. I studied up on using quaternions to rotate a camera node to avoid gimble lock, but just as I was starting to get it under control after I was bored stiff of them, I realized I could just attach a camera to a physics object.

But once I had a camera with 6 degrees of freedom (three positional and three rotational), I started thinking about how I could make a game out of it. I figured a space piloting game was in order. I got into studying up on using Perlin noise and similar methods of making structured noise to generate a shifting cave structure to represent a hyperspace mesh for the player to navigate – preferably at high speed.

The idea is that an unnamed pilot is tracing out a route through a shifting hyperspace (preferably at high speed), and if he collides with a wall, he is thrown out of hyperspace, where it isn’t safe to re-enter, so he must return to port under conventional physics. If he succeeds, his fleet can instantly jump across his route. This FTL system sets the stage for a future where humanity has colonized the solar system, but is hesitant to venture out to other stars. Think Star Wars meets Space Engineers meets Monkey Ball.

So far, my best tech demo is a blue fog you can navigate at slow, careful speeds. It takes an unacceptably long

Shell Scripting

My services were called upon for a “computer project.” My mother had some PDF files of recipes to separate. Over the course of an afternoon, I wrote a BASH script to separate out each page in each PDF. At its heart was the program qpdf. Along the way, I tried to keep good practices like leaving comments and having checks to prevent accidental overwriting.

Now, I only know a modest bit of BASH (popular Linux command line interface aimed at users), but I know enough about basic programming it was just a matter of syntax for me. But I figured I could do one better in around the same amount of time. I saved a copy of the script and its output, and I set about naming files after their contents, identifying+recombining second pages, and sorting out charts, and numbering repeats (some duplicate recipes had changes).

But for every hour I spent working out a feature, I figured I spent another debugging edge cases. Several recipes had BASH control characters in their titles like *, &, and /. I preferred to use special handling of strings, but in the end I sanitized / as ÷ and * was removed entirely. This additional work extended the project to a total of three days.

Closing thoughts

My goal with Hypertrace is to publish it to Itch.io or similar platform on a donation basis. And before I get past more than a couple tech demos, I’m going to want a version control server in my homelab just in case something happens to my laptop. While I really want to think ahead in terms of security, I know I don’t know enough to make an informed decision about the utility I need now.

Final Question

What Git setup do you recommend for a homelab?