Game Design, Programming and running a one-man games business…

Auto-balancing and load-testing Ridiculous Space Battles

Its been a while since I blogged… Anyway I have not been completely idle. As well as booking a long-desired holiday to CHINA (oh yes!) I have still been working on this weird project that I cannot decide if its a retirement hobby or a proper serious game launch, and that would be my pretentious re-imagining of Gratuitous Space Battles, which I am appropriately calling ‘Ridiculous Space Battles’.

The game is very playable right now. It has a ton of content, and it runs great, and it looks fab. But it does not have data for the campaign games, and does not have the challenge system coded into it yet. I might at some point decide to put the challenge system off for a bit, and release it with skirmish and campaign games into Early Access. I really do keep changing my mind on that. This game has been very cheap to make, and I am under no pressure to release, so to be honest it feels kinda weird being able to do anything I like with it!

Anyway, something I have always wanted for my games was a pre-release debug build functionality to have them run hundreds or thousands of games and automatically provide data that would let me balance the initial stats before actual humans start to play it. Now if you are a relatively new developer, its easy to just sling out lines like “Yeah just code a headless mode that randomly designs ships and fleets and have them fight each other a million times to collect stats”. This is the sort of thing swaggering indie devs throw out in a reddit thread as advice, as though that single sentence contains all the required skill, code and effort.

Its not that simple.

Now if you have a much simpler ‘problem-space’, then it gets massively easier, but just the process of coding random ship designs and random fleet deployments is a major engineering effort in itself. Getting the game to be able to put together a ‘legal’ in game-terms design isn’t too tricky, but ensuring it produces sensible designs is another things entirely. There is nothing to stop the entire deployed fleet consisting of a hundred ships that only have anti missile defence weapons and zero offensive capability, for example. That would be a valid fleet design, but useless for auto-balancing. Worse, it would imply in the stats that missiles are useless, without the caveat of ‘yup but that strategy can never win a battle’.

Its a massive minefield of issues like this, an frankly I have not addressed any of them yet. My current code designs each ship in a fleet individually right now, so the chances are such anomalies would be highly unlikely. However, the point stands that a ‘random’ fleet design is not ideal. And thats before we start placing those ships in formations, and assigning orders to them based on their designs. I’ve done a bunch of wok on that, but its still not ideal.

The actual easy bit was the stats collection and amalgamation into a nice spreadsheet at the end. My game is very stats-based (its an auto-battler after all), so the code to track all those stats was already in game. What took a bit longer was the wrapper code to run through a battle with a random fleet, record stats, and then do the next battle. This *sounds* easy, but when a game has been designed on the basis of the user clicking buttons, circumventing that without errors can be buggy. I didn’t just simulate mouse clicks because I needed to totally skip the deployment UI for each battle. Otherwise I am flushing a ton of textures and loading a whole pointless UI between every battle, slowing down the auto-run process.

The real delay in this stuff has been two-fold. I need to code some sort of basic genetic algorithm for ship design, and I also encountered loads of bugs. Lets do the bugs first. Its easy to think ‘dude, you shouldn’t have bugs in your code’, but harder to make that a reality when you have a game as complex as RSB. There are over 720 source files for the game and the same amount again for the engine, and the code is fiendishly complex. Plus the actual GAME is fiendishly complex. For example, I encountered a crash bug while typing this (The game was churning auto-balance in the background). It was a crash bug where the game lost focus, then recovered focus (I had moved to another window), and it crashed in the shader for Target Painter weapons.

You might think ‘what a noob, you obviously dont re-init your shaders’, but nope, I do. This is obviously something specific to THAT shader. I have tested the game a lot, but apparently never alt-tabbed away exactly when the game was drawing a target-painting effect. Given how many different systems and visual effects the game has, its no wonder I have not churned through all the possibilities yet. This is one of the major benefits of writing this autobalance code. I am soak-testing my game, running thousands of battles and trying every permutation possible, and it throws up a ton of asserts and warnings and crashes, all in obscure and exciting places. I DO test new features when they are added, but testing them in every permutation of battle is impossible. I’d need 50 people working in QA.

So the last aspect of all this is genetic algorithms. I intend to try a bit of this but no go mad. Right now, I can only tell if ‘fast missiles’ are overpowered by looking at the amount of damage they do, over 100 battles, compared to their cost and weapon module size. If they DO look a bit overpowered, then maybe they should be selected more, to assess whether they are clearly a super-weapon, or if thy just happened to always get matched against fleets that had poor missile defence. Perhaps I need a system that takes the top ten weapons from the previous 100 games and biases towards them so I can concentrate on collecting data for them. Perhaps also do the same with the BOTTOM ten weapons so I can see if they were just badly represented due to random match-up.

And of course all of this is ignoring non-weapon modules. I should probably test the ‘survival rate’ or ‘survival time’ of ships with each armour and shield module or other defensive module like a decoy projector or cloaking device. Maybe these are hugely overpowered? I have not even begun to look at that yet.

One piece of excellent news though. My game is VERY good at pruning its memory usage and definitely has no leaks. I’m watching the area chart in the visual studio debug view as I type and its currently using 234MB (lolz) and rarely goes above 400MB in big battles. This is a vast improvement on my other games, or early builds of RSB that were leaky.

So there you go, I AM still coding, but not in a hurry, and I hope the end result is worth it :D. Don’t forget to add RSB to your steam wishlist if the game sounds interesting to you!

Is AI capable of reversing social media’s attention destruction?

This evening I spent some time talking to the latest version of Claude about investment decisions, and the rationale behind various stock price movements. I also spent a bit of time browsing a bunch of of discord channels on servers I sometimes hang out on. I found the difference in information delivery to be extremely jarring.

I also, for some reason, occasionally spend time on the reddit ‘wallstbets’. It’s 95% bullshit, and 5% actual insight and analysis. As a result, I’m used to seeing a lot of typical 2026 one-liners, memes, in-jokes and random emojis and pop culture references, inter-spaersed with the odd bit of insightful financial analysis and modelling.

I do generally find most internet forums, reddits, social media threads and discords to be… kinda dumb and juvenile. Sometimes its what I want. An endless stream of star trek memes is exactly what I need sometimes, but in general I am more interested in in-depth analysis, and specifically, for analysis that presumes I am a) an adult and b) have an attention span. Any website that ‘warns’ me how many minutes it takes to read an article is an instant red flag for me. I am not a child, and am capable of sometimes reading entire books! Your article can be multiple pages. I will not expire out of frustration.

Enter AI

AI is perfect for me. I can ask claude a question about cocoa prices and it will respond with analysis. There will be no jokes, zingers, one-liners, memes or attempts to entertain me. If I then want information about the Strait of Hormuz and its impact on Korean financial firms, then it will provide me with detailed analysis of that too. If I want to dig deeper on the valuation model for specific Korean firms, it will do so. If I have supplementary questions about the leadership structure of that firm, it will research I and answer. If I ask for a comparison table of that firm with western firms in the same industry, or historical comparisons, it can do that too. In fact, if I want to spend the next 48 hours doing nothing but detailed research into the Korean banking industry, then Claude will provide, in as much depth as I can possibly stand.

The contrast with social media is staggering. On social media, you have maybe 128 characters to provide content. Thats trivial. On video sharing sites, you basically have a few seconds. It’s entertainment for the chronically distracted. A constant stream of unrelated trivial bullshit for people who have regressed to the point where even this paragraph would be considered an essay.

Until AI came along, I found the web just frustrating, distressing, pointless and deteriorating. It does not matter how many times you click on ‘show less of this’ on youtube shorts or facebook reels. Your opinion is not important. The social media giants have decreed that all media is SHORT, and if your attention span is longer than ‘BLAM’, then you are obviously a freak and your opinion does not count.

But now, people who actually want to read, or research have a new best friend. LLMs have no adverts (yet), no distractions, no memes, no emojis, no jokes, no one-liners, no clickbait headlines, no bullshit. It’s like wikipedia in human form. You can become as informed as you like, on any topic, in huge depth, any time, for a trivial subscription cost.

When I talk to Claude about investing, it’s MASSIVELY better than reading ANY financial news or analysis sites. Even the premium ones you pay subscriptions for. I ignore absolutely all ‘news’ articles about stocks, and go straight to Claude. I can actually ask questions and seek clarifications, and I get them, without a shit-ton of ‘editorial opinion’ or sponsored links. Its amazing. And as a result, my effectiveness as an investor is way higher.

Duplicate this to absolutely any field. You have people who it seems to me have just frankly ‘given up’ and regressed into the child-like dopamine hits of nothing but social media doom-scrolling (or happy-scrolling, just ingesting a thousand feel-good videos of cute animals is equally brain-rotting), and you have other people who are able to reject that and dig deep into whatever it is they want to know about.

We seem to be becoming a society straight out of science fiction, split into factions. Some people are leveraging AI to become hyper-informed and hyper-aware. Others are stuck on social media become hyper-desensitized and hyper-distracted. Essentially we have one technology that makes people super productive, and another making them super-useless. In some cases, the same companies provide both services.

Social Media, in it’s currently ‘blipvert’ form, feels to me like a damaging disease. It’s handing out tiny droplets of dopamine in return for selling us stuff and pretending its free. But the side-effect of this is an entire generation of people with a crumbling attention span, and frankly what also appears to be crumbling IQs. I firmly believe we need hard limits on social media. The ‘endless scrolling’ mechanic is like a marketing nuclear weapon, and the privacy destroying algorithms happy to feed us endless bullshit as long as we just click-click-click until we pass out make it worse. It’s insane we let this happen. There is an alternate universe where we went direct from wikipedia to modern LLMs, without all the hate-speech-disinformation-timewasting-bullshit that is twitter and instagram. A direct line from widespread information availability to a supercharged interactive teacher.

Granted, AI can make mistakes. Hallucinations are a thing (although in my experience, way less common in premium models), but anybody who thinks the content available in general on social media and the many news websites can be entirely relied upon is deluding themselves. I personally find AI to provide way more accurate information than reddit, social media, or any news site.

I massively support efforts in the EU to force social media algorithms to change. We have an opportunity here to ‘reset’ online life so it makes us smarter, not more stupid. Lets seize it. And lets also be more willing to embrace the positives of AI. All I ever hear is the negatives, but for people who are genuinely curious about the world, AI has the potential to be an expert teacher and research team on every topic, for everyone. That sounds awesome to me.

Unexpected Solar-Powered Borehole Update!

I did not expect to be typing this so soon, but pretty soon after we agreed to fund a solar-powered borehole for fresh clean water in Cameroon… I got an update on construction with pictures today! Very welcome as I expected this to take many more months. Here is what I received today:

“Anyway, the situation in Bagham was pretty desperate because it is currently the height of the dry season in that part of the West region and SHUMAS staff reported that there wasn’t a drop of water in the village. Fortunately, the drilling rig was available and was located quite close by so work could start straight away. I am attaching a photo of the drilling rig in place and others of the work which has been started on the construction of the tower for the tank. I am sure that this project will progress quickly”

How cool is that? Here are the pics:

Digging foundations for the water tower
Making the reinforced framework for the tower
Drilling Rig
Making framework for the tower

Its very uplifting for me to see progress on stuff like this! And if you buy any of my games, you are helping me fund stuff like this, which means you are awesome :D. Especially excited to see the eventual solar panels go in etc :D.

Ridiculous Space Battles Progress

Ok so, I know this is probably not a big deal, or a new thing… but I have spent so long with this blog casually embedding youtube video links, that it took until today in 2026, and my desire to do what I can to de-couple my life as much as possible from US tech companies for me to discover that you can just natively embed an mp4 in wordpress! So anyway… I present the new race-selection screen animation effect in Ridiculous Space Battles!

and yes… before you comment, I know there is a bug with a texture changing wrongly when I scroll to the left. I’ll fix that tomorrow! I am however, pretty happy with this code, and this look. Coding stuff like this is harder than it looks, because to have everything seem smooth and crisp, you have to basically render all of those windows to an offscreen copy (with alpha) and then copy them as scaled sprites to the screen. That sounds simple, but its a lot of management, as you keep swapping render targets, and have to very smoothly transition from ‘offscreen pre-rendered sprite’ to proper rendered and full featured window.

Trust me, its a pain. It took a whole weekend. Well… it took all the hours I worked this weekend (which was not a lot TBH…). Anyway, that is one new thing that is in Ridiculous Space Battles. Another change was the re-colouring and some adjusting of the deployment screen to make it more user-friendly and less BRIGHT COLORS:

This definitely looks better. You can also see that the range indicators from my last blog post are in there with less angry colors too. The next big thing on my list is to balance the various weapons, and in fact before that, I need to code systems that really quickly run a lot of battles super-fast for me to gather stats. That will be a whole rabbit hole of code, but should be fun.

So to recap, the things left to do before early access or alpha-testing are to balance the modules, to put together the campaign fleets, to test the campaign, and to implement and test online challenges. No doubt lots of bug fixes and optimisation to do too, but I love the optimisation bit :D.

Deployment Range UI for Ridiculous Space Battles

I have been a bit quiet on the blog front, but in case you were wondering, yes I am definitely still working on Ridiculous Space Battles! Right now I am thinking about the ship and fleet design for the campaign game, and this is forcing me to think more about the usability of the deployment screen.

For a bit of a history lesson, here is the deployment screen from the original Gratuitous Space Battles:

There are so many things wrong with both the style and the layout I do not know where to begin, but given GSB was the first auto-battler, there was both no competition, and no other examples to be inspired by. Anyway, one of the many bad things about this UI is those circles around every turret on every ship that were supposed to show the player the weapon ranges, but in fact just look like a confused mess. Here is my current version of the same screen in Ridiculous Space Battles:

I think its so much better… but specifically I am working on the range and fire arc overlays. They only show for ship(s) that you have selected, and one of the changes I have made is to color code them as red for short range weapons, white for mid range, and green for long range. Like *anything* in game UI design, there is no perfect answer here. Red for short and green for long feels right, as long range is generally good (assuming everything else is equal). Making mid-range yellow might be a step too far in mirroring those order strips to the right, so I decided to go with white…argghh…who knows!

The problems arise a bit once you have a bigger battle and with multiple ships selected:

Now the red is showing the combined overlay of the short range fire arcs for all selected ship weapons. Be aware a ship might have 7 different weapons, and could be in a 4-ship or 25-ship squad… Its a complex thing to visualise, but its getting better!

In addition to fiddling with this overlay UI, I have also been improving the ‘ship role descriptions’ that are shown as tooltips for a ship design. I’m basically approaching the problem in 3 different directions. Select a ship…and the overlay should show you its weapon ranges on the map. Select a ship-type at the top-left, and then hover over a weapon name, and you get that big tooltip (see the one for ‘Plasma Stream’ above), which lists everything, including range. If the range is especially low or high, it gets a colour (red/green) highlight. Thats true for shield and armour penetration too…

The thirds method is the mouse-over tooltip for the ship types in the top left ‘ship-picker’. The game analyses all ship types and gives them various descriptive tags (I call them Roles in code). Those might be ‘Mixed Range Weapons’ or ‘Anti-Armor’ or ‘SuperWeapon’, or a bunch more.

My goal is to be able to help the player remember which ship design is which, so they are not just blindly spamming down a bunch of ships and hoping for the best. Ideally you have some short range ships serving as tanks at the front, absorbing enemy fire and shooting down incoming projectiles, then deeper ranks are mid-range and long range, or ships with shield support beams. Choosing the right formation and deployment should be a big part of the game.

Anyway, thats what I’m working on right now. The list of stuff to do before Early Access release does keep getting shorter (I think). Anyway, don’t forget you can wish-list the game at https://store.steampowered.com/app/3607230/Ridiculous_Space_Battles/