dabble deepDon't know, don't care, doing it anyway.

Throwing It All Away

Sometimes, throwing it all away to make room for a fresh canvas or two is the best thing you can do to a project.

Fractures in the Foundation

You might have an architecture problem if either of these things is happening to you:

  1. Foundational project ideas have sprung into existence long after the project was started, making it difficult to figure out what to work on next.
  2. AI programming agents get lost in rabbit holes and tangents even when you clearly define the scope of the current task.

Software engineers are rarely ever allowed to throw things away at work, but we don’t have that same problem with our own personal projects. If you refuse to throw away your own work, you might be keeping the result of your hard work in hand, but you’re also keeping all the baggage that not knowing what you know now won you. You know those things now though, and by throwing things away, you can build something new that has a much better architecture that is flexible enough to handle your planned direction for the project as well as bend to unexpected changes. As a result, the engineer who is willing and allowed to throw things away is freed up to apply their learnings to a fresh canvas.

Product managers might protest by saying that that’s expensive, distracting, or doesn’t contribute to current business needs, and when working within the context of a company, they’re usually correct in all of that. However, that also means that companies rarely take full advantage of the learnings their employees gain from working on their projects, and they often doom themselves to fighting against sub-par architectures in perpetuity. Why would we ever want to doom our own personal projects to that same fate?

My “SBS” Game

Two games inspire this project:

  • Artemis Starship Bridge Simulator (where you work with a crew of other players to control a ship through roughly 30-minute battles and scenarios)
  • Ur-Quan Masters, previously known as Star Control II (an old game I played as a kid where you fight aliens and engage in diplomacy through scripted menu chats)

I’ve had a ton of fun playing both, but I also have long-standing complaints about both. For Artemis, my complaint is mainly two things: space is not realistically sized or accurately represented with planets, stars, moons, asteroids, etc., because the game is largely 2.5D, more like a submarine sim than a space sim. For UQM, my complaint is that the diplomacy takes place entirely through interaction with scripted chat menus. To be fair, at the time the game was made, that was literally the only choice available, and both of these games have their limits for good reasons.

…I just don’t accept those reasons! Not anymore at least. Computers are powerful enough to simulate realistic sizes in space, science fiction ideas can hand-wave their way around the means of navigating the vast expanse of space, and large language models, even locally-running ones, have the capacity to drive NPC chats that actually impact in-game behaviors and events. While it can be nice to have a game master in Artemis, I think it could be even more fun to have a persistent AI agent that pulls the levers of the game to drive narrative dynamically.

So, I started building. Fable 5’s trial period starting at its release was fantastic, and I used it to start assembling this Frankenstein’s monster of an idea. I have a navigable star system with planets, moons, orbits, and rotation, I have several modes of navigation like warp, impulse, etc. that get you around the star systems in a reasonable amount of time for a game, and I have a lot of the mechanics of space combat worked out. I’ve got a system in place that, in theory, lets an LLM control NPCs and change their stance towards the player’s ship. I have, in theory, an AI “game master” agent built, but the breakdown of my design started to show its face here more obviously, and the game doesn’t have a decent or cohesive set of levers for that agent to pull on.

My game is kind of almost playable, but I’m hitting a wall. Every time AI gets working on it, it gets distracted by all of the random bugs and structural contradictions that tie things up in knots. Some of the underlying assumptions are broken. Somewhere in the middle, I decided to never have scripted missions at all because the AI game master should be able to handle everything. That’s cool and all, but it’s also a HUGE update to the direction of this project, and not having that in place from the start damaged architecture. The AI problems have become my own problems, and I’m not sure what to work on next to get to the next step, because everything I could work on would only serve to tie the project in even crazier knots.

I’m at an architectural deadlock, and it’s time to throw this thing away so I can start fresh!

Learnings

This project is not going to waste. I’ve already learned a lot, and to be honest, I’m not actually throwing away the whole thing, because some of those learnings are only expressed in code and I need to keep them around to inform the next iteration. However, I do need to start over “from scratch” in order to truly nail the game’s architecture.

A few things I’ve learned this time around:

  • In space, long-distance combat has some surprising limiting factors. For the best gameplay, I need to selectively lean into these.
  • It is useful to support multiple modes of travel. These should be balanced so that responsibilities of crew members are better distributed.
  • Modern computers can absolutely handle realistically-sized planets, stars, and other planetary bodies.
  • Don’t aim for realism, aim for excellent. Realism is pretentious and in danger of the uncanny valley, while excellent gets you everything you need, no more, and no less.
  • AI-driven NPCs and game masters are difficult to get just right.

That last point is particularly important, because going there at all will either make or break this project, no matter what other achievements it reaches. That makes it more of a stand-alone idea, something that doesn’t just go away if this project fails, because the potential for that idea is so huge.

Imagine: every time you start a new game, the entire storyline shifts and the game’s narrative becomes new. When you talk to your friends about it, there are common elements (like certain artifacts, races, places, and the initial storyline of the game), but those elements shift entirely with each playthrough, and may even change in significant ways within a playthrough from one session to the next. Not that the game rewrites history each time, but that the direction of events changes to create an all-new narrative and to maximize the entertainment value of that narrative.

That might even be worthy of splitting out into its own research project that builds up to this starship bridge simulator idea once the underlying assumptions are verified and once we learn what it takes to actually build an effective character agent and game master/narrative agent.

Keep Moving Forward

Like Lewis, I need to keep moving forward here. Why, you say? This is, after all, only a personal project. I’m not aiming to build a business around this yet (though that could change depending on the nature of the project). What could I possibly gain from persisting in pulling this thread?

My first reason is not that I want to learn, though that IS one of my biggest motivations here. To be honest, my first reason is that I have an itch in this space and I want to SCRATCH IT HARD! I’m a nerd, I love Star Wars, Star Trek, and everything in between. I’ll read absolute garbage sci-fi novels if there are lasers in them, and then I’ll pick up their sequels. I want a computer-aided LARPing system that I can play with friends for a few hours on a Saturday in a garage that I set up to look like the bridge of a space ship.

Normally, wanting that kind of thing means waiting for someone else to build it or deciding that this one idea is the only idea I’ll be working on for the next decade. We don’t live in normal times anymore though: we have AI, and AI makes code MUCH cheaper.

Still, I probably do need some help with this project, preferably from experienced game devs or creative types, so here’s my plan: I’ll keep chugging away at this from time to time as one of my many passion projects, and once I get far enough along, I’ll open-source what I’ve got, keep blogging about my work on it, and hopefully get a partner or two to push this thing along to the next level.

Who knows what could happen? I’m nerdy enough that: I don’t know, I don’t care, and I’m doing it anyway!