Well, I have reached a “milestone” with the game dev project, folks. No one is more pleased than I am (I mean that quite literally).
I took a hiatus for a few days on account of Reasons(tm), but mainly because I had been plowing head at full speed for days. Good days, mind you, as much was learned and much was accomplished, but I had heard a recognized yet far away voice, like a distant gull bitching out loud over the sound of crashing waves, that maybe you don’t really want to be doing this. Whenever I’m about to abandon something, I find that I start asking myself if this project/game/research into multidimensional soapbox racing is really what I want to be doing with my time. If I ignore the voice and keep working, it gets louder until it hits me over the head with a vase that I know for a fact I don’t own, and I wake up the next morning with absolutely zero drive to maintain the status quo. So yeah. Time off.
Good thing, too, because I picked up with a brainstorm about how to deal with jump gates. Gates (as we all ’em ’round here) are a massive P.I.T.A. because they need to be present in every system, and they need to have analogues within the systems to which they link for two-way travel (so far). My original practice was to add 3, 5, or 8 gates to every system, one for every cardinal direction that was accessible on the game board, and then to start removing gates to leave what I’d hoped would look like a haphazard collection of random exits and entrances that would force the player to write shit down on how to get from point A to point B. When timing the Big Bang, this step took the longest, and while it did work, it didn’t actually provide me with a key factor that I would eventually need: seamless transition.
Despite Space not having actual cardinal directions, it should make sense from a player perspective that if they leave a system “from the left”, they should enter the next system “from the right”. Of course, this is completely unnecessary as a westerly exit could very well lead to a southern entrance, or something to that effect. Thing is, I need the placement of gates to be reliable. The Big Bang merely generates and catalogs them; it doesn’t dictate where they live in a given star system. So, for that, I “dumbed down” the gate generation a bit.
Now, every system starts with 3 (for corner systems which only touch three other systems) or 4 (for everyone else) guaranteed gates. Yes, in my Grid of the Universe, [0,0] will lead to [0,1] and [1,0]; I just obfuscate the names of the systems so players don’t know they’re “walking a grid”. In fact, in writing this, I realize that my early Bang steps, creating the solar systems, doesn’t require me to shuffle them at all. I’ll have to look into that. This guaranteed layout allows me to ensure that every single system is connected to its viable neighbors. Note that the game no longer provides access at angles. That turned out to be too much of a headache to deal with.
Once each system has its gates, I start removing them. 20% of the gates in the universe will lose 2 of their 3 or 4 total gates. In the process, I check to see which gate is removed. Was it the one to the “west” of [0,0]? Was it to the one to the “north”? Upon removal of a gate, I have to use the coordinate system to pull the reciprocal (there’s that word again) gate from the system on the other side. If I remove the “eastern” gate in System [5,4], then I need to remove the “western” gate in System [6,4]. While I start by affecting 20% of the systems, I end up removing gates from many more. Now my universe has some systems with 4 gates, some with 3, some with 2 and, if I’m lucky, some corner systems which might have only 1…the coveted “dead end systems”.
Were this to be a hand-crafted game, I could spend time naming my solar systems in meaningful ways, like after my family, my favorite places to visit, or foods that I hate. Since the goal is to construct a new universe with every new game, I needed a way to assign names to solar systems, at a bare minimum.
Using the infinite resources of the Internet, I pulled together a list of about 2,500 names. I pulled from Greek, Roman, and Hindu mythology, as well as the top 1000 boy and 1000 girl names of 2022 as compiled by People Who Suck at Naming Children. Now, when the universe is constructed, my systems get friendly names like “Angerona”, “Ranganatha”, or…”Charleigh”.
The good news is that this bleeds over nicely to planets. As we all know from Star Trek, planets are often named based on the name of the star, and then the orbit of the planet. This allows me to generate planets named “Angerona II”, “Ranganatha V”, and…seriously?…“Charleigh VI”.
Later on, I decided to give stations a more technical-sounding designation by randomly generating a 4-character prefix to stick on the system name. Now I have “JHWY-Angerona”, “QI87-Ranganatha” and I swear I need to filter some of these “8OQM-Charleigh”.
Last but not least, now that I have jump gates in place, I worked on getting the player to move between solar systems. After a bit of headache trying to nail down some weird bugs that I could never have anticipated, it works!
Here we have an example — severely foreshortened so I didn’t have to fly to the edge of the solar system — of my current universe’s starting system, #84, “Wylder” (still better than “Charleigh”). Wylder is a “hub system” which means there’s a guaranteed temperate planet and station in orbit. This system seemed to have survived the jump gate purge and only lost a single gate, meaning that the neighbor to the north should have lost 2.
Each gate is labeled with the from value (the system ID they currently occupy) and a to value (where they lead). Only when the player flies in close proximity to the gate does the “Jump to System_x” button show up. Eventually this will be a panel which lists the fees and fuel associated with the transit, as well as the faction which controls the gate and/or the expected conditions on the other side.
Notice that the gate above is placed to the left of the star. When we enter the gate to travel to “system_64” — “Maxine” for those who care — we end up exactly where we might expect to.
The “Maxine” gate that leads to “Wylder” is situated to the east of [0,0]. Again, while this isn’t strictly necessary, it at least provides a way for me to tell that the gates are, in fact, connected, and would help players decide which direction they want to move in.
At the end of the day, I might see about scrambling the connections, so it’s not so obvious that a straight east-to-west journey will take the player from one side of the universe to the other, but considering that stations — where trading happens — and planets — where other undetermined stuff happens, maybe — are randomized, it’ll still be on the player to keep track of which systems offer what, how much, and at what price. Figuring how to get from “Micah VI” to “HYQH-Sharada” is part of the game; Trade Wars 2002 relied only on numbered star systems, and it was up to the player to remember routes between points of interest. In the end, it didn’t matter if the systems were right next to one another, or on the other side of the universe.
With this all set at “tier 0” — it’s working, but probably not well, and certainly not attractively — I think I’ll be looking at figuring out the marketplace next. As this game is all about trading and building a financial empire, moving about the universe is fine and all, but it’s going to mean absolutely nothing if there’s no reason to do it. I don’t have any data on commodities, or production, and that’s the easiest part of the system, as I’ll have to really start digging into Godot’s UI system. I hate UI.
In testing, I did implement a new game system which I have to institutionalize at some point: afterburners. The placement of the jump gates will be out on the fringes of the solar system, so if you blow past them, you’ll know that there’s absolutely nothing left for you in the Great Beyond. For testing, though, they were too far, so if I hold down the Shift key, I will get a speed boost. I want to keep this system, but I’ll need another component (maybe), and I am sure I’ll have to limit afterburners by some kind of fuel or energy which automatically replenishes over time or becomes a money-sink at a local station or planet.
Finally, I realized that all of my graphics are placeholders, gleaned from OpenGameArt.org. This is a fantastic resource, but I don’t know if this is what I want my game to look like — no offense to the artists, who are being credited in the game code as I go. At some point, way in the future, I’ll probably have to pound the pavement in search of folks I can compensate for some custom art. I know I’ll need ships, planets, and stars, as well as player and NPC portraits, asteroids, backgrounds, and other things I haven’t thought of yet. I don’t yet have an actual aesthetic, though, but I am one of those people who needs to see progress, both functionally and visually, so having these free assets has really helped me keep plugging away at this project.