<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Cliffski&#039;s Blog</title>
	<atom:link href="https://www.positech.co.uk/cliffsblog/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.positech.co.uk/cliffsblog</link>
	<description>Game Design, Programming and running a one-man games business...</description>
	<lastBuildDate>Tue, 13 Oct 2026 20:05:10 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>Ridiculous Space Battles demo released!</title>
		<link>https://www.positech.co.uk/cliffsblog/2026/10/13/ridiculous-space-battles-demo-released/</link>
					<comments>https://www.positech.co.uk/cliffsblog/2026/10/13/ridiculous-space-battles-demo-released/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 13 Oct 2026 20:05:10 +0000</pubDate>
				<category><![CDATA[gratuitous space battles]]></category>
		<category><![CDATA[ridiculousspacebattles]]></category>
		<guid isPermaLink="false">https://www.positech.co.uk/cliffsblog/?p=7119</guid>

					<description><![CDATA[It has taken SO LONG to get to this point, and to be honest I am just very very tired, physically and emotionally. I recently went to some event ion my village where I started to worry if I had the energy to walk home. I have no idea if its just a lot of<p class="text-right"><span class="screen-reader-text">Continue Reading... Ridiculous Space Battles demo released!</span><a class="btn btn-secondary continue-reading" href="https://www.positech.co.uk/cliffsblog/2026/10/13/ridiculous-space-battles-demo-released/">Continue Reading...</a></p>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">It has taken SO LONG to get to this point, and to be honest I am just very very tired, physically and emotionally. I recently went to some event ion my village where I started to worry if I had the energy to walk home. I have no idea if its just a lot of stuff going on at once or age, or the stress of following world events way too much&#8230; but anyway, regardless whether people love or hate it, there is now a playable demo of my latest game: Ridiculous Space Battles. Enjoy this big clickable button:</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><a href="https://store.steampowered.com/app/3607230/Ridiculous_Space_Battles/"><img fetchpriority="high" decoding="async" width="780" height="108" src="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/10/image-2.png" alt="" class="wp-image-7120" srcset="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/10/image-2.png 780w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/10/image-2-766x106.png 766w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/10/image-2-680x94.png 680w" sizes="(max-width: 780px) 100vw, 780px" /></a></figure>
</div>


<p class="wp-block-paragraph">I actually had trouble finding the &#8216;demo&#8217; button on the steam store page, which just goes to show how often I try new demos I guess&#8230; Anyway, its out and its hopefully playable. I have done 2 patches in the last few hours to fix a thing, and then the thing that was caused by the fix to the first thing&#8230;and ultimately it was all because my build script had not noticed some files had been updated and needed adding to the build&#8230;grrrr&#8230;.all my own fault.</p>



<p class="wp-block-paragraph">Anyway&#8230; its done! and I have about a month now until the release of the main game into Early Access. This is by far the weirdest game release of my career, because I STILL do not know if its just a hobby, or a proper game, or how to feel about it. The games industry is super-weird right now, and frankly I do not know how ANYONE is making any money from games&#8230;</p>



<p class="wp-block-paragraph">But the main thing is I REALLY enjoyed making this game so far, and I think its pretty good. I just re-watched the final &#8216;Battle Of Cardassia&#8217; episode of star trek:DS9 tonight, and I am definitely someone who enjoys a good space battle, so this game just had to be made didn&#8217;t it :D. Hopefully some of you like it.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.positech.co.uk/cliffsblog/2026/10/13/ridiculous-space-battles-demo-released/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Approaching Ridiculous Space Battles demo release!</title>
		<link>https://www.positech.co.uk/cliffsblog/2026/10/03/approaching-ridiculous-space-battles-demo-release/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sat, 03 Oct 2026 14:43:57 +0000</pubDate>
				<category><![CDATA[game design]]></category>
		<category><![CDATA[gratuitous space battles]]></category>
		<category><![CDATA[ridiculousspacebattles]]></category>
		<guid isPermaLink="false">https://www.positech.co.uk/cliffsblog/?p=7110</guid>

					<description><![CDATA[Oh my god, the release of this game has always seemed to be some far off nebulous thing in the future and now I go into Early access with Ridiculous Space Battles NEXT MONTH. Argghhh. To put that into perspective, the last time I released a &#8216;new&#8217; game was Democracy 4 and that was (checks<p class="text-right"><span class="screen-reader-text">Continue Reading... Approaching Ridiculous Space Battles demo release!</span><a class="btn btn-secondary continue-reading" href="https://www.positech.co.uk/cliffsblog/2026/10/03/approaching-ridiculous-space-battles-demo-release/">Continue Reading...</a></p>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Oh my god, the release of this game has always seemed to be some far off nebulous thing in the future and now I go into Early access with <a href="https://store.steampowered.com/app/3607230/Ridiculous_Space_Battles/">Ridiculous Space Battles</a> NEXT MONTH. Argghhh. To put that into perspective, the last time I released a &#8216;new&#8217; game was <a href="https://store.steampowered.com/app/1410710/Democracy_4/">Democracy 4</a> and that was  (checks steam&#8230;) January 2022. OVER FOUR YEARS. Oh my god what happened? Well the short answer is that this happened:</p>



<figure class="wp-block-image size-full"><img decoding="async" width="1024" height="473" src="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/10/image-1.png" alt="" class="wp-image-7115" srcset="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/10/image-1.png 1024w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/10/image-1-680x314.png 680w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/10/image-1-766x354.png 766w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"><a href="https://positechenergy.com/">I built a solar farm</a>, and it took forever, and it was stressful, but its mine and I love it :D. But also, Democracy 4 was a huge project, and also frankly a very successful one, and there was absolutely no urgent need for me to release another game any time soon. Also&#8230;I am 56, which sounds insane to me, but I am 11 years from retirement&#8230;and if I smugly retired properly at 60, I am only FOUR years from retirement. In other words, I am able, very fortunately to be slowly winding down the rate at which I make games, or at least commercial ones.</p>



<p class="wp-block-paragraph">But anyway, after I finished the solar farm, I decided to mess around making a little simple game as a way to get back into game dev, and I made this:</p>



<figure class="wp-block-image size-full"><img decoding="async" width="1914" height="1051" src="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/10/image.png" alt="" class="wp-image-7113" srcset="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/10/image.png 1914w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/10/image-680x373.png 680w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/10/image-767x421.png 767w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/10/image-1536x843.png 1536w" sizes="(max-width: 1914px) 100vw, 1914px" /></figure>



<p class="wp-block-paragraph">Which is on steam as &#8216;<a href="https://store.steampowered.com/app/2763030/Gratuitous_Space_Shooty_Game/">Gratuitous Space Shooty Game</a>&#8216;. It was a piece of fun, its sold a trivial number of copies (211) and was made mostly because its something I could make in a few months. But that got me back into thinking about Gratuitous Space Battles, and how much BETTER a game I could make now, 16 years after the original. And although that started as just me messing around, I got more an more into it. Initially I was re-using GSB art, but then I decided to buy some stock models from CGITrader, re-combine them, render them, edit them and make all new fleets. Then generative AI became a thing and meant that creating the race images and module graphics could all be done as a solo developer, and then I took it way too seriously :D.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1904" height="1041" src="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/10/screenshot_03-10-2026_12-32-13.png" alt="" class="wp-image-7111" srcset="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/10/screenshot_03-10-2026_12-32-13.png 1904w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/10/screenshot_03-10-2026_12-32-13-680x372.png 680w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/10/screenshot_03-10-2026_12-32-13-766x419.png 766w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/10/screenshot_03-10-2026_12-32-13-1536x840.png 1536w" sizes="auto, (max-width: 1904px) 100vw, 1904px" /></figure>



<p class="wp-block-paragraph">Because RSB is a passion-project, and not a big commercial endeavour, I decided to use AI where it made sense, and not where it didn&#8217;t, but not give in to the anti-AI crowd. I am FINE with people refusing to buy RSB because they have some political or aesthetic objection to AI. Not every game is for everyone. I hate the look of Terraria and Balatro, but millions of people like it, thats cool. I am absolutely not even vaguely even slightly even a little bit trying to sell this game to people who hate generative AI.</p>



<p class="wp-block-paragraph"><strong>Christ I hate having to include that disclaimer every time I even mention my game</strong>&#8230;and before anyone says &#8216;Just hire an artist&#8217;, I do NOT WANT to hire anyone. I HATE working with people, and this is supposed to be a stress free relaxing development for me, not people management. So anyway&#8230; I am now at the point, after actual years of coding and testing and optimizing and balancing&#8230; where I have a playable demo for my game. Oh my god, its submitted to steam and everything&#8230;</p>



<p class="wp-block-paragraph">Its been 16 years since I made a demo for one of my games. Demo&#8217;s used to be the default, then everyone realised they were a bad idea, as they actually cost you sales, then weirdly about 12 years later everyone decided demos were needed again, despite valve&#8217;s refund policy. Anyway&#8230;there will be a demo for RSB. Two skirmish missions, no challenges or campaign. I think its enough for people to say &#8216;I like this&#8217; or &#8216;I hate this&#8217; which is the main point right? Anyway&#8230;its done, complete with upsell on the main menu and from the exit screen:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1904" height="1041" src="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/10/screenshot_03-10-2026_12-32-28.png" alt="" class="wp-image-7112" srcset="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/10/screenshot_03-10-2026_12-32-28.png 1904w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/10/screenshot_03-10-2026_12-32-28-680x372.png 680w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/10/screenshot_03-10-2026_12-32-28-766x419.png 766w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/10/screenshot_03-10-2026_12-32-28-1536x840.png 1536w" sizes="auto, (max-width: 1904px) 100vw, 1904px" /></figure>



<p class="wp-block-paragraph">I am no longer a member of many of game dev communities. Frankly I find online communities very hard to navigate. I am autistic as fuck, and that means I need a LOT of social-cue information to relate to people. Pure text is hard, and I am too quick to take offense, and also I can be too blunt, and lack a lot of the emotional skills required to converse with people purely by text. Especially anybody I do not know well. Combine that with the fact that my goals and my situation are different from most indies (I&#8217;m not new, I do not desperately need sales, I am not making a roguelike deckbuilder), and I find its just not worth me staying in those communities any more&#8230; So I am kind of releasing a new game a bit blind, without a big social group of game devs to ask opinions of, or beg for retweets etc. And to be frank, I think &#8216;fellow devs retweeting your launch&#8217; has a trivial actual impact, and something I&#8217;d hate to have to do anyway&#8230;</p>



<p class="wp-block-paragraph">So anyway, thats a lot of text to say Yes, I DO have a new game coming out very soon, November 16th! and I have put a LOT of work into it <em>(longest dev cycle in my career) </em>and I am VERY proud of it, but I absolutely do not care if some people hate it. Thats fine. I hate Broccoli, but I don&#8217;t knock on the doors of farmers to tell them. I think some people will love this game. If 1,000 people buy it in its lifetime, I will be very happy (and probably break even!).</p>



<p class="wp-block-paragraph">So hey, add the game to your wishlist I guess? I DO have an ad budget, I&#8217;ve spent a few thousand dollars on it I thinks, but it doesn&#8217;t hurt to beg at the end of a blog post right? :D.</p>



<div align="center">
<iframe loading="lazy" src="https://store.steampowered.com/widget/3607230/" frameborder="0" width="646" height="190"></iframe>
</div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Challenge code and UI almost done!</title>
		<link>https://www.positech.co.uk/cliffsblog/2026/08/26/challenge-code-and-ui-almost-done/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 26 Aug 2026 14:52:50 +0000</pubDate>
				<category><![CDATA[gratuitous space battles]]></category>
		<category><![CDATA[ridiculousspacebattles]]></category>
		<guid isPermaLink="false">https://www.positech.co.uk/cliffsblog/?p=7098</guid>

					<description><![CDATA[So&#8230;I am still working on the online multiplayer(asynch) code and UI and UX for Ridiculous Space Battles, but progress has been pretty good, and certainly way quicker than the first time I attempted to do all this sixteen(!) years ago&#8230; So I am happy to say that apart from a few small things I need<p class="text-right"><span class="screen-reader-text">Continue Reading... Challenge code and UI almost done!</span><a class="btn btn-secondary continue-reading" href="https://www.positech.co.uk/cliffsblog/2026/08/26/challenge-code-and-ui-almost-done/">Continue Reading...</a></p>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">So&#8230;I am still working on the online multiplayer(asynch) code and UI and UX for <a href="https://store.steampowered.com/app/3607230/Ridiculous_Space_Battles/">Ridiculous Space Battles</a>, but progress has been pretty good, and certainly way quicker than the first time I attempted to do all this sixteen(!) years ago&#8230; So I am happy to say that apart from a few small things I need to fix, and a few minor things to add (like rankings and victory counts), the online challenge portion of everything is kinda in and done! Here is the current challenge list screen:</p>



<figure class="wp-block-image size-full"><a href="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/screenshot_26-08-2026_14-58-31.png"><img loading="lazy" decoding="async" width="1904" height="1041" src="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/screenshot_26-08-2026_14-58-31.png" alt="" class="wp-image-7100" srcset="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/screenshot_26-08-2026_14-58-31.png 1904w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/screenshot_26-08-2026_14-58-31-680x372.png 680w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/screenshot_26-08-2026_14-58-31-1536x840.png 1536w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/screenshot_26-08-2026_14-58-31-766x419.png 766w" sizes="auto, (max-width: 1904px) 100vw, 1904px" /></a></figure>



<p class="wp-block-paragraph">UI code is fiddly and takes ages, but what really took a while on that screen was the filtering and order sorting. You can sort by any column, which is pretty cool, and all the filters at the bottom work correctly now! There is a manual &#8216;refresh list&#8217; button which grabs a new dump of all the challenge data from the server. Right now its super-dumb and just grabs the first 1,000 challenges from the server. The original game (<a href="https://www.positech.co.uk/gratuitousspacebattles/">Gratuitous Space Battles</a>) was so popular that this would have been useless, and in an ideal world, where I get a lot of players, I maybe need to redo that so it multi-threads, and gets the ones that have changed only, and so on&#8230;but that is probably something worth saving for refinement during early access&#8230; Anyway here is a totally NEW screen:</p>



<figure class="wp-block-image size-full"><a href="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/screenshot_26-08-2026_14-59-09.png"><img loading="lazy" decoding="async" width="1904" height="1041" src="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/screenshot_26-08-2026_14-59-09.png" alt="" class="wp-image-7101" srcset="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/screenshot_26-08-2026_14-59-09.png 1904w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/screenshot_26-08-2026_14-59-09-680x372.png 680w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/screenshot_26-08-2026_14-59-09-766x419.png 766w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/screenshot_26-08-2026_14-59-09-1536x840.png 1536w" sizes="auto, (max-width: 1904px) 100vw, 1904px" /></a></figure>



<p class="wp-block-paragraph">This is what you get when you click on a challenge. It shows you the enemy deployment thumbnail (although their ship positions obviously get inverted when you hit play and fight against it), some data about it, the description and name entered by the challenge author&#8230;and today&#8217;s mornings work, which is the list of challenges that were issued as a &#8216;retaliation&#8217; to that challenge.</p>



<p class="wp-block-paragraph">So a &#8216;challenge; is basically a player designed fleet, formation and orders that is designed to beat all opponents. It gets uploaded to my server (its only a 10kish text file) along with a small jpg of what the deployment screen looks like. Anyone and everyone (including the challenge author) can then design a fleet and fight against that challenge. If you WIN against it&#8230;you see an extra button on the game-over screen that lets you submit your victorious fleet as a &#8216;retaliation&#8217;. Here is what that currently looks like (It might be easily missed I think&#8230;)</p>



<figure class="wp-block-image size-full"><a href="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/screenshot_26-08-2026_15-43-59.png"><img loading="lazy" decoding="async" width="1904" height="1041" src="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/screenshot_26-08-2026_15-43-59.png" alt="" class="wp-image-7103" srcset="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/screenshot_26-08-2026_15-43-59.png 1904w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/screenshot_26-08-2026_15-43-59-680x372.png 680w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/screenshot_26-08-2026_15-43-59-766x419.png 766w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/screenshot_26-08-2026_15-43-59-1536x840.png 1536w" sizes="auto, (max-width: 1904px) 100vw, 1904px" /></a></figure>



<p class="wp-block-paragraph">That gets attached to the existing challenge, with that challenge as its parent. These are the challenges you can see in the &#8216;retaliations&#8217; list above, which are normally filtered out. You will be able to hit &#8216;replay&#8217; to watch the two fleets fight, and the idea is that you get to see how an enemy managed to beat you.</p>



<p class="wp-block-paragraph">Now this is just my first go at the UX and gameplay for this, so it will likely evolve. Right now if you win against a challenge with an amazing victory, there is no way to break that challenge out into its own fresh challenge, and maybe I do need that. And I definitely need to put in a voting for difficulty and fun system like I had with the original game. But its progress! and eventually I&#8217;ll get back to working on less UI code and more awesome battle stuff like this screenshot:</p>



<figure class="wp-block-image size-full"><a href="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/screenshot_27-07-2026_16-34-23.png"><img loading="lazy" decoding="async" width="1920" height="1080" src="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/screenshot_27-07-2026_16-34-23.png" alt="" class="wp-image-7102" srcset="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/screenshot_27-07-2026_16-34-23.png 1920w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/screenshot_27-07-2026_16-34-23-680x383.png 680w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/screenshot_27-07-2026_16-34-23-768x432.png 768w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/screenshot_27-07-2026_16-34-23-1536x864.png 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></figure>



<p class="wp-block-paragraph">Anyway&#8230; I signed up the game to be in the next NextFest with a demo, so I have a hard deadline at last. Kinda scary. But if this sort of game appeals to you, please add it to your steam wish list using the widget below:</p>



<iframe loading="lazy" src="https://store.steampowered.com/widget/3607230/" frameborder="0" width="646" height="190"></iframe>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>I did a LONG interview about EVERYTHING :D</title>
		<link>https://www.positech.co.uk/cliffsblog/2026/08/20/i-did-a-long-interview-about-everything-d/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 20 Aug 2026 19:56:27 +0000</pubDate>
				<category><![CDATA[business]]></category>
		<category><![CDATA[game design]]></category>
		<category><![CDATA[programming]]></category>
		<guid isPermaLink="false">https://www.positech.co.uk/cliffsblog/?p=7095</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="How Peter Molyneux Gave Him A Cheat Code To Marketing Games - About Game Dev - Episode #03" width="640" height="360" src="https://www.youtube.com/embed/9xd3HWpKtRE?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Challenge UI for Ridiculous Space Battles</title>
		<link>https://www.positech.co.uk/cliffsblog/2026/08/19/challenge-ui-for-ridiculous-space-battles/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 19 Aug 2026 10:14:11 +0000</pubDate>
				<category><![CDATA[game design]]></category>
		<category><![CDATA[gratuitous space battles]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[ridiculousspacebattles]]></category>
		<guid isPermaLink="false">https://www.positech.co.uk/cliffsblog/?p=7089</guid>

					<description><![CDATA[If you played the original Gratuitous Space Battles game about 500 years ago, you will recall that the online challenges were a very popular part of the game. If not, let me explain: GSB was the first autobattler, so its a game where you set up a fleet of space ships (that you designed), give<p class="text-right"><span class="screen-reader-text">Continue Reading... Challenge UI for Ridiculous Space Battles</span><a class="btn btn-secondary continue-reading" href="https://www.positech.co.uk/cliffsblog/2026/08/19/challenge-ui-for-ridiculous-space-battles/">Continue Reading...</a></p>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">If you played the original <a href="https://www.positech.co.uk/gratuitousspacebattles/">Gratuitous Space Battles</a> game about 500 years ago, you will recall that the online challenges were a very popular part of the game. If not, let me explain: GSB was the first autobattler, so its a game where you set up a fleet of space ships (that you designed), give them orders, and then use that fleet to defeat the enemy in a mission (which I called a skirmish) that was designed by me (the developer). HOWEVER, there was also the option to just design a fleet that you thought was a good all-rounder against all foes, and submit a &#8216;challenge&#8217; to another player (or everyone) and let them fight against your fleet.</p>



<p class="wp-block-paragraph">To do this, there was an online system where you logged in, and designed the fleet, typed a &#8216;taunt&#8217; for your enemies, and submitted that challenge. It got stored on my server as a small text file, along with a small thumbnail preview image showing the fleet formation. Other players could browse available challenges, download them, and enjoy designing fleets to beat them. There were ratings system, message systems, and ability to view all of the fleets that were sent to battle against your fleet. It was so cool, and so popular, it crashed the server. The challenges were stored as individual files, and there was something silly like 500,000 of them (or more), and the whole back-end basically collapsed eventually!</p>



<p class="wp-block-paragraph">So lets not let that happen this time eh? (hardly a risk, as I doubt this game will be as popular).</p>



<p class="wp-block-paragraph">Anyway, I am re-coding the whole thing from scratch, like I have done for the whole of <a href="https://www.positech.co.uk/ridiculousspacebattles/">Ridiculous Space Battles</a>, so it means completely re-thinking the UI, the UX, and the back-end code. The previous layout of the challenge browser looked like this:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1200" height="768" src="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/image.png" alt="" class="wp-image-7090" srcset="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/image.png 1200w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/image-680x435.png 680w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/image-768x492.png 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /></figure>



<p class="wp-block-paragraph">Which has not aged THAT badly, although it certainly does not fit the more clean and white-space loving UI of the new game. The original game went with an &#8216;industrial physical&#8217; theme for the UI, and that feels very 1990s to me now. The new design currently looks like this:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1904" height="1041" src="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/screenshot_19-08-2026_11-08-23.png" alt="" class="wp-image-7092" srcset="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/screenshot_19-08-2026_11-08-23.png 1904w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/screenshot_19-08-2026_11-08-23-680x372.png 680w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/screenshot_19-08-2026_11-08-23-768x420.png 768w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/screenshot_19-08-2026_11-08-23-1536x840.png 1536w" sizes="auto, (max-width: 1904px) 100vw, 1904px" /></figure>



<p class="wp-block-paragraph">A bunch of stuff has changed. I am now listing the challenge ID, and also a title as well as a description. I do not have difficulties in there yet, or ratings for fun, but I might include that again. The big problem is getting the balance right between &#8216;I have a lot of information to display here&#8217; and &#8216;do not look too cluttered&#8217;. This is something I struggle with a lot in design, because I feel like my tastes are the opposite of most web designers and game designers these days.</p>



<p class="wp-block-paragraph">I am an autistic, numbers-obsessed data-loving geek who loves nothing more than a super-complicated dashboard of data. (<em>Its a miracle I only worked on the software on trading floors and did not become a trader myself</em>) This means I am pre-disposed to a data-rich UI layout. But these days its apparently ILLEGAL to update any software without saying its a &#8216;cleaner&#8217; look, which means that the whitespace has gone from 90% of the layout to 95% of the layout. Absolutely every &#8216;designer&#8217; seems to assume the only UI in the universe is a mobile phone, and the only customer is someone who is mentally incapable of seeing two pieces of information on a single screen. By <a href="https://memory-alpha.fandom.com/wiki/Kahless_the_Unforgettable">Kahless</a> I hate this trend&#8230; but anyway, nobody gets to tell me how to design my own game, so why do I care :D.</p>



<p class="wp-block-paragraph">Anyway, there is a lot more to do. I have a different UI almost complete for actually submitting a challenge:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1904" height="1041" src="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/screenshot_19-08-2026_11-09-37.png" alt="" class="wp-image-7093" srcset="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/screenshot_19-08-2026_11-09-37.png 1904w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/screenshot_19-08-2026_11-09-37-680x372.png 680w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/screenshot_19-08-2026_11-09-37-768x420.png 768w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/08/screenshot_19-08-2026_11-09-37-1536x840.png 1536w" sizes="auto, (max-width: 1904px) 100vw, 1904px" /></figure>



<p class="wp-block-paragraph">&#8230;but I still need to do the code that downloads the challenge from the browser, and then launches the deployment screen with it as a battle to be fought, and resolve all that at the end (Telling the challenge there was an attempt, and if it was a victory&#8230; logging what the attempting fleet was, etc). I also need to stress test everything, and set things up so you cannot create multiple users etc etc.</p>



<p class="wp-block-paragraph">Doing all of that means writing a bunch of web client code (I use the WinInet win32 API) and also server code in PHP and SQL. This is where I have found working alongside Claude (Anthropic&#8217;s AI) has been great. I do NOT (yet) use &#8216;Claude Code&#8217;, but what I am doing (with a £15/month sub) is occasionally asking for Claude to write some php, or some SQL or an WinInet function for me, that I then read through and check. This, in my opinion is a great way to use AI to make you a more productive coder, without worrying that its doing random stuff. I use Claude very sparingly to write general C++, but for this part of the game, I&#8217;m using it a lot.</p>



<p class="wp-block-paragraph">Why? Because frankly I do not enjoy SQL or PHP and am not an expert. I can code in C++ with my eyes closed (you would expect that after 29 years right?), but I have written very little php or SQL, and this stuff is web server stuff so its DANGEROUS. If I screw up the .exe, the game might crash, but screwing up database code and php could let someone hack the server and wipe things. I REALLY need expert help on the php/sql stuff, and Claude certainly seems to be amazing at this. FWIW I use Opus 4.8 (High) right now. Anyone who has used SQL will appreciate being able to say &#8220;Write me the correct SQL to do this&#8230;&#8221;.</p>



<p class="wp-block-paragraph">Anyway&#8230; things are progressing! And I hope to actually have the game in a shippable (to Early Access) state around October at the latest. All I have left to do is this challenge stuff, then a bunch of ship designing and fleet designing for the levels and campaign (already done, but definitely need another pass), and a tutorial, and then its basically very playable. Early access will hopefully be a period of optimisation, any bug fixes, and responding to player suggestions about balance, gameplay tweaks and new features. I think I *am* just going to re-use the GSB2 music for this game, and all of the art is done, so I am not waiting for anybody else (and this is proudly a solo project anyway).</p>



<p class="wp-block-paragraph">If you want to be notified when the game is finally released, you can add it to your steam wish-list using the widget below, or maybe bookmark (and share!) the games <a href="https://www.positech.co.uk/ridiculousspacebattles/">website link</a>. Thanks :D.</p>



<iframe loading="lazy" src="https://store.steampowered.com/widget/3607230/" frameborder="0" width="760" height="190"></iframe>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Financial research and AI</title>
		<link>https://www.positech.co.uk/cliffsblog/2026/07/28/financial-research-and-ai/</link>
					<comments>https://www.positech.co.uk/cliffsblog/2026/07/28/financial-research-and-ai/#comments</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 28 Jul 2026 10:37:12 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[investing]]></category>
		<category><![CDATA[shares]]></category>
		<guid isPermaLink="false">https://www.positech.co.uk/cliffsblog/?p=7086</guid>

					<description><![CDATA[Yup, I&#8217;m still doing a lot of work on Ridiculous Space Battles, and recently did a new trailer and took new screenshots, and may even start running ads again&#8230; but in the meantime I do a lot of fussing about investments and finance&#8230;because I weirdly enjoy that sort of thing. Somehow, I have ended up<p class="text-right"><span class="screen-reader-text">Continue Reading... Financial research and AI</span><a class="btn btn-secondary continue-reading" href="https://www.positech.co.uk/cliffsblog/2026/07/28/financial-research-and-ai/">Continue Reading...</a></p>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Yup, I&#8217;m still doing a lot of work on <strong><a href="https://www.positech.co.uk/ridiculousspacebattles/">Ridiculous Space Battles</a></strong>, and recently did a new trailer and took new screenshots, and may even start running ads again&#8230; but in the meantime I do a lot of fussing about investments and finance&#8230;because I weirdly enjoy that sort of thing.</p>



<p class="wp-block-paragraph">Somehow, I have ended up a sort of small hedge-fund manager. Its a very small hedge, but its my hedge, and I get to do what I want with it. I know a lot of people who did well from video games who then naturally use that money to make more games, or bigger games, or who publish a bunch of games by other developers. Actually for a while I did that, and published four games by other devs. Its a totally reasonably strategy. The video games business is so hit focused that to be honest the only approach that makes any sort of strategic financial sense is to go for the portfolio model, where you publish ten games and hope that the one hit pays for the nine flops (and this does seem to be the case). However, for me this approach has one huge enormous weakness (in fact two&#8230; but I&#8217;ll come back to that) &#8211; Its a lot of people management,.</p>



<p class="wp-block-paragraph">I am terrible at dealing with people.</p>



<p class="wp-block-paragraph">I am not whining about it. Everyone gets a random character-sheet at the start of life, and the attributes that got maxxed out for me have enabled  very cool and lucrative career in IT and then video games. The flipside is that some of my attributes are very low and in need of buffs. But given we do not get to re-roll our dice on this, I am just trying to deal with the fact that I will never be someone with a big long list of employees or business partners. Thats never going to work out for me, or for them. I am not easy to deal with.</p>



<p class="wp-block-paragraph">So here we are, with me managing investments in things instead of a larger games business. I still *make* games, but its just me, using stock bought art, or AI generated art, and even re-using music from a previous game. Its what maximises the fun for me, and minimises the stress. It does mean however, that I have a side-line in fussing with investing the money that my company made. And I did *try* to invest in in tangible things. I built a solar farm! (and may build another), but in the meantime I am invested in about 50 different companies/bonds/funds/trusts, and that takes a lot of time to manage.</p>



<p class="wp-block-paragraph">I&#8217;ve made money, I&#8217;ve lost money, and everything inbetween. I made a killing on Tesla stock before he went mad, then a similar killing on Nvidia before Jensen started talking about spaceborne data-centers and financing their customers. I&#8217;ve had some big misses too. My bets on Chinese EV manufacturers ran into issues with a china price-war. I am still trying to wait that one out&#8230; But the reason I thought I would write about it is that I have used LLMs a LOT in deciding where and how to invest and it is AMAZING.</p>



<p class="wp-block-paragraph">In a prior life, I worked for a company called Datastream/ICV, which was a stock market data IT company that provided research material and real time market information via satelite to stockbrokers and banks. It was really interesting. Because I tended to support the legacy datastream stuff, I went to a lot of the research offices for the big banks. These were not &#8216;wolf of wall street&#8217; offices, but more boring, muc quieter rooms full of dozens of serious looking people reading financial reports, reading the news, reading in depth technical analysis&#8230; and then eventually preparing reports and summaries so that the actual traders could have some insight into if a company was over/under valued.</p>



<p class="wp-block-paragraph">It was a lot of work, and clearly very important, and clearly had a good ROI.</p>



<p class="wp-block-paragraph">And now its almost all irrelevant.</p>



<p class="wp-block-paragraph">Talking to Claude/Mythos about financial stuff is a revelation. Its SO GOOD at this stuff. All the headlines focus on its unusually good cybersecurity capabilities, but I think thats just because it makes a scary headline. Hearing that 50,000 financial analysts may lose their jobs over the next year isn&#8217;t as sexy as Chinese Hackers blowing up the pentagon using their keyboards. I think anybody who has sat and had a long conversation with Claude about whether investment A is better than B, (<em>and why, and what the potential risks were, and what dates to watch, and if your personal investment thesis on that stock holds up to scrutiny</em>) will come away thinking &#8216;holy fuck this is good stuff&#8217;.</p>



<p class="wp-block-paragraph">I know a TON of really skeptical people who think AI is useless. Almost always they have tried ChatGPT3 a few times, or read a free Gemini summary and think &#8216;they know all about it&#8217;. But a decent LLM is NOT a search engine. Its a research assistant. And when you treat it like that, its incredible. And sure, hallucinations are not solved, and AI can make mistakes. And Claude will make mistakes, but its still, in my experience, an order of magnitude better than any financial website / forum / discord that you can find.</p>



<p class="wp-block-paragraph">Have you ever actually tried READING an article on Seeking Alpha or TipRanks? The web is not exactly filled with well argued deep impartial analysis on investment topics. Its a trainwreck of hype, clickbait and poorly-informed bullshit. And sure, if you read 25 articles about lithium prices, you *will* at the end of it have some proper understanding of whats going on, but you will wade trough so much nonsense to get there, that it makes perfect sense why the traders farmed all that out to the people in the research room.</p>



<p class="wp-block-paragraph">Claude will do the same job, reading those 25 articles, searching for deeper context where those articles micht give conflicting data, search further on any topics raised by those articles, then compile it into a concise but pretty accurate report on the topic you asked about. Its especially good at answering the question &#8220;If I invest in this specific stock/fund, what am I really betting on here?&#8221;. Claude has convinced me to sell a bunch of investments I thought I understood well, but did not. Its recommendation have been extremely extremely good .</p>



<p class="wp-block-paragraph">I am not a financial advisor, but I&#8217;m also not a guy trying to sell you anything. I&#8217;m just writing this to share my experience. If you have a pension, or savings and investments and feel unsure if you are invested in the right thing, then I strongly recommend just talking to a PAID premium SOTA LLM and asking it to push back on your choices. And yes, you can just say &#8220;DO not patronize me or tell me I am clever, give it to me straight&#8221; and they do. In fact I may have gone overboard with these instructions to Claude, which often says things like &#8220;Cliff, you are making the same strategic mistake here we have discussed many times before&#8221;. I find it kinda funny.</p>



<p class="wp-block-paragraph">Anyway, give it a go. Its great at this stuff, and WAY better than that bloke in the pub who thinks he knows all about the markets. Even if that bloke is me :D.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.positech.co.uk/cliffsblog/2026/07/28/financial-research-and-ai/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>New Ridiculous Space Battles Trailer</title>
		<link>https://www.positech.co.uk/cliffsblog/2026/07/23/new-ridiculous-space-battles-trailer/</link>
					<comments>https://www.positech.co.uk/cliffsblog/2026/07/23/new-ridiculous-space-battles-trailer/#comments</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 23 Jul 2026 13:29:49 +0000</pubDate>
				<category><![CDATA[gratuitous space battles]]></category>
		<category><![CDATA[ridiculousspacebattles]]></category>
		<guid isPermaLink="false">https://www.positech.co.uk/cliffsblog/?p=7084</guid>

					<description><![CDATA[Well its been a while since I did one. Here is the latest one. let me know what you think. Is it too slow? is it too long? Does it look ok? YouTube compression sucks, even after uploading an 800MB files for a 2.5minute video, it still mangles it. FFS.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Well its been a while since I did one. Here is the latest one. let me know what you think. Is it too slow? is it too long? Does it look ok? YouTube compression sucks, even after uploading an 800MB files for a 2.5minute video, it still mangles it. FFS.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Ridiculous Space Battles 2026 Trailer" width="640" height="360" src="https://www.youtube.com/embed/x8LVD5PytOo?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://www.positech.co.uk/cliffsblog/2026/07/23/new-ridiculous-space-battles-trailer/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>New battle video from Ridiculous Space Battles</title>
		<link>https://www.positech.co.uk/cliffsblog/2026/07/05/new-battle-video-from-ridiculous-space-battles/</link>
					<comments>https://www.positech.co.uk/cliffsblog/2026/07/05/new-battle-video-from-ridiculous-space-battles/#comments</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sun, 05 Jul 2026 11:37:02 +0000</pubDate>
				<category><![CDATA[gratuitous space battles]]></category>
		<category><![CDATA[ridiculousspacebattles]]></category>
		<guid isPermaLink="false">https://www.positech.co.uk/cliffsblog/?p=7081</guid>

					<description><![CDATA[I have actually still been working on my game all this time, but have been a bit distracted with some technical stuff, and life diversions, and also not feeling there was much of a visual change to show off, but enough is enough, and I thought I&#8217;d just quickly throw together a short 2 minute<p class="text-right"><span class="screen-reader-text">Continue Reading... New battle video from Ridiculous Space Battles</span><a class="btn btn-secondary continue-reading" href="https://www.positech.co.uk/cliffsblog/2026/07/05/new-battle-video-from-ridiculous-space-battles/">Continue Reading...</a></p>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">I have actually still been working on my game all this time, but have been a bit distracted with some technical stuff, and life diversions, and also not feeling there was much of a visual change to show off, but enough is enough, and I thought I&#8217;d just quickly throw together a short 2 minute campaign battle video to show you the current state of the game.</p>



<p class="wp-block-paragraph">For those new to this blog, Ridiculous Space Battles is my &#8216;spiritual successor&#8217; to &#8216;Gratuitous Space Battles&#8217; which I made around 2011. I&#8217;ve really enjoyed working on it, and I think its better in every way. Here is the video of a battle I quickly filmed and slung onto youtube:</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Ridiculous Space Battles Campaign Battle" width="640" height="360" src="https://www.youtube.com/embed/zYedFhfA4cc?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p class="wp-block-paragraph">The thing some people do *not* like, is that ships fight in fixed formations, basically in &#8216;lanes&#8217;, and some people who loved GSB dislike this change. Personally I find it to be vastly *better* and makes the battles feel more cinematic and more like an old school naval battle, than the &#8216;random scrum&#8217; that many large-scale battle games descend into.</p>



<p class="wp-block-paragraph">I should point out this is battle #4 in the campaign, using a mixture of ships that survived the previous battles, and some reinforcements. Its a fairly small battle. I am not sure I am happy with the contrast of the background nebula, but obviously this is a work in progress. Anyway, I&#8217;m quite proud of the general space laser mayhem :D. If you are interested in the game, you should add it to your wish-list on steam using the link below. It will also hopefully make it to GoG. But not epic or other stores. And only on PC. Fuck apple :D.</p>



<iframe loading="lazy" src="https://store.steampowered.com/widget/3607230/" frameborder="0" width="646" height="190"></iframe>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.positech.co.uk/cliffsblog/2026/07/05/new-battle-video-from-ridiculous-space-battles/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Another solar farm visit!</title>
		<link>https://www.positech.co.uk/cliffsblog/2026/06/14/another-solar-farm-visit/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sun, 14 Jun 2026 20:57:20 +0000</pubDate>
				<category><![CDATA[solar]]></category>
		<guid isPermaLink="false">https://www.positech.co.uk/cliffsblog/?p=7074</guid>

					<description><![CDATA[So it was an actual predictably dry day today, which is awesome because it means I got to go visit my lovely solar farm in good weather! I also met someone local there and gave them a quick tour, which was cool. Its a LONG day, starting when we leave my house at 8AM, and<p class="text-right"><span class="screen-reader-text">Continue Reading... Another solar farm visit!</span><a class="btn btn-secondary continue-reading" href="https://www.positech.co.uk/cliffsblog/2026/06/14/another-solar-farm-visit/">Continue Reading...</a></p>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">So it was an actual predictably dry day today, which is awesome because it means I got to go visit my lovely solar farm in good weather! I also met someone local there and gave them a quick tour, which was cool. Its a LONG day, starting when we leave my house at 8AM, and getting home about 7.30PM, with the majority of it being driving (in an EV obviously :)). We also stopped off briefly for coffee and cake at a nice English Heritage house we had never been to before, which made the day a bit more varied.</p>



<p class="wp-block-paragraph">I especially like this picture:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1920" height="766" src="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/06/cropped20260614_131145-1920x766.jpg" alt="" class="wp-image-7075" srcset="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/06/cropped20260614_131145-1920x766.jpg 1920w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/06/cropped20260614_131145-680x271.jpg 680w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/06/cropped20260614_131145-768x306.jpg 768w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/06/cropped20260614_131145-1536x613.jpg 1536w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/06/cropped20260614_131145-2048x817.jpg 2048w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></figure>



<p class="wp-block-paragraph">You cannot see the whole farm without a drone, but that gives you a rough idea. One very cool thing in this photo is the grass. Its really low, because until very recently it was full of sheep! I&#8217;ve blogged about how this is a win-win before. The sheep were very present today, but not actually in the field this time, which means less treacherous walking for us. It was also a super sunny day. I also spotted this:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1353" height="1080" src="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/06/cropped20260614_130255-1353x1080.jpg" alt="" class="wp-image-7077" srcset="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/06/cropped20260614_130255-1353x1080.jpg 1353w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/06/cropped20260614_130255-680x543.jpg 680w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/06/cropped20260614_130255-768x613.jpg 768w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/06/cropped20260614_130255-1536x1226.jpg 1536w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/06/cropped20260614_130255.jpg 1848w" sizes="auto, (max-width: 1353px) 100vw, 1353px" /></figure>



<p class="wp-block-paragraph">I am not even sure what is going on there, I shall enquire, but this is just one panel out of 3,024 that is&#8230;discoloured? Its almost like a manufacturing error where a coating got missed, or something weird has happened. Certainly not something I have ever noticed before. Unlike a home setup with optimisers, we do not have panel-level data, because 3,024 optimisers plus cabling really adds up, and new panels are only like £80 anyway (and we have some spares). For all I know this panel is fine, or maybe its a total dud, we just do not know, but worth keeping an eye on.</p>



<p class="wp-block-paragraph">It was quite pleasing to spot this:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1920" height="588" src="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/06/cropped20260614_130151-1920x588.jpg" alt="" class="wp-image-7078" srcset="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/06/cropped20260614_130151-1920x588.jpg 1920w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/06/cropped20260614_130151-680x208.jpg 680w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/06/cropped20260614_130151-768x235.jpg 768w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/06/cropped20260614_130151-1536x470.jpg 1536w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/06/cropped20260614_130151-2048x627.jpg 2048w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></figure>



<p class="wp-block-paragraph">Its not massively visible in a photo but this is basically a line of tiny trees / hedge that was required as part of our planning permission. This was apparently super justified to shield the horrors of our renewable energy project from the vast mass of people living in housing on that hill who might otherwise have their lives ruined by seeing it.</p>



<p class="wp-block-paragraph">That was a joke. There are no houses, try zooming in. Yes its ludicrous, yes they made it a requirement anyway, yes it cost money, yes that eventually ends up on your energy bills. Angry yet? Anyway, I am trying not to rant too much as I love my solar farm and its really good to go see it. The thing I was worried about, and actually didn&#8217;t need to was the cleanliness of the panels. They are yet to be cleaned and they look PERFECT. So the self-cleaning nature of British rain really does work in this location. Excellent. I am now sure even bi-annual cleaning is not required. Even if its every 3 years, that&#8217;s not too bad. The profitability of the site is very low, so any cost that crops up each year really hurts it. Its not a financially-motivated project, but I would prefer not to LOSE money!</p>



<p class="wp-block-paragraph">Also I should point out that the stats on the solis (inverter manufacturer) website now show my site as having been the equivalent of planting 1,000 trees and has saved 1,820 tons of CO2. In other terms that avoided 782 tons of coal being burned. Pretty cool. All of this will seem even cooler when the current BROKEN inverter gets replaced (Not impressed by solis TBH), and we are at 100% capacity and not stuck at 90%. Grrrr,</p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Building a deterministic space auto-battler</title>
		<link>https://www.positech.co.uk/cliffsblog/2026/06/07/building-a-deterministic-space-auto-battler/</link>
					<comments>https://www.positech.co.uk/cliffsblog/2026/06/07/building-a-deterministic-space-auto-battler/#comments</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sun, 07 Jun 2026 22:20:16 +0000</pubDate>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[ridiculousspacebattles]]></category>
		<guid isPermaLink="false">https://www.positech.co.uk/cliffsblog/?p=7069</guid>

					<description><![CDATA[This was not part of the plan. When I made Gratuitous Space Battles, it was not a deterministic sim. Multiple runs of a battle could lead to slightly different results. It was not ideal. And I was not even thinking about it with Ridiculous Space Battles, until I started to do balance testing and started<p class="text-right"><span class="screen-reader-text">Continue Reading... Building a deterministic space auto-battler</span><a class="btn btn-secondary continue-reading" href="https://www.positech.co.uk/cliffsblog/2026/06/07/building-a-deterministic-space-auto-battler/">Continue Reading...</a></p>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">This was not part of the plan. When I made <a href="https://www.positech.co.uk/gratuitousspacebattles/">Gratuitous Space Battles</a>, it was not a deterministic sim. Multiple runs of a battle could lead to slightly different results. It was not ideal. And I was not even thinking about it with <a href="https://www.positech.co.uk/ridiculousspacebattles/">Ridiculous Space Battles</a>, until I started to do balance testing and started designing campaign levels. And in that testing I started to really appreciate how infuriating a lack of determinism was. That was more than a week ago. Maybe two weeks&#8230;</p>



<p class="wp-block-paragraph">To explain: Ideally if you do two battles in RSB with the exact same deployments, you should get the same result. Not just victory or defeat, but the exact same score. This is is the whole core of the game. The smaller the fleet you win with, the more points you score. So running the whole battle again with just ONE less squadron, is definitely worth it for the meta-game (and bragging rights). But that might mean fielding 99 squads instead of 100. In other words, the game has to be accurate down to that 1%, and actually that means 100% deterministic.</p>



<p class="wp-block-paragraph">Here is the problem. A missile fired from a frigate drifts 0.0001 units to the left compared to the previous run-through. That means it actually hits its target VERY slightly later, but that &#8216;later&#8217; means just *after* its target fires its massive mega-gun that takes out a crucial enemy cruiser. Without that cruiser, the fleet will narrowly lose. With it, the fleet will narrowly win. So that missile MUST hit its target in the exact same frame, every time&#8230;</p>



<p class="wp-block-paragraph">&#8230;and its worse. That missile might even be a dummy missile. It might even miss! it does not matter. Because in theory that 0.0001 units means its the nearest target for a point defense laser, or not. That could still lead to a chain of events that results in the whole outcome of the battle being changed. In practice, if you want the outcome of a big battle to be predictable, and repeatable you need a 100% deterministic simulation. Thats not 99.99999% deterministic. Its absolutely 100%. And that is&#8230; hard.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1920" height="1080" src="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/06/image.png" alt="" class="wp-image-7070" srcset="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/06/image.png 1920w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/06/image-680x383.png 680w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/06/image-768x432.png 768w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/06/image-1536x864.png 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></figure>



<p class="wp-block-paragraph">I&#8217;m not a n00b coder. I know this problem is hard, AND I know in theory how to avoid it. Have a constant simulation rate, and detach the frame rate from the sim rate. Do not use any truly random numbers, but precalculated ones based on a fixed random seed. You can use true randoms for UI, but never for the sim. The sim is the sim. The UI is the UI. They never get confused. Simple right? And I am sure coders who haven&#8217;t worked on it before already think its an afternoon&#8217;s work. It is not!</p>



<p class="wp-block-paragraph">It would have been WAY easier if I had worried about this right at the start of coding the game, but I did not, and so I had to take a huge existing game and MAKE it deterministic, and its taken weeks and I&#8217;m not yet 100% sure I&#8217;ve cracked it. I have definitely made it much better, but am I at 99.99999% or 100%? Lots of testing tomorrow will answer that for me. But briefly, this is what was involved:</p>



<p class="wp-block-paragraph">Step 1 was to move from a variable frame rate (capped at 60 fps) to a dual system where the sim runs at a constant interval, but the frame rate is independent. This is complicated by the fact that the game has 5 speeds, from 1/4 speed to 4x speed. Actually to be fair this part of the work was quick and easy. I still have a ton of macros in the code referring to SIMTIME that actually should now just be &#8216;4.0f&#8217;, but thats the beauty of macros. There was a fair bit of find/replace to change a lot of calls in the code to either use SIMTIME or FRAMETIME, but that was simple. Now every tick assumes 4ms has passed, and the ratio of ticks to frames simply depends on the current game speed. This does mean I have kind of lost the &#8216;frame-smoothing&#8217; for when the GPU is under more or less strain, but TBH the game runs so fast its ludicrous anyway, and for super low spec GPUs the game has a ton of graphics detail settings.</p>



<p class="wp-block-paragraph">So that sim/graphics decouple was a big step, and an easy step, but after that the real problems began. Basically there were mistakes somewhere in the code. There were circumstances where things drifted out of synch, and it took a ton of detective work to find them all. Things went much quicker when I realised there was no escaping just writing a big &#8216;Determinism&#8217; class that analysed data across two runs. I made a ton of mistakes here, and they are stupid, but thats coding for you :D. The most embarrassing one was this: I collected a TON of information for every tick, in huge arrays, and then on the second playthrough, I built a second bunch of arrays and kept cross checking them to spot errors. Sounds reasonable right?</p>



<p class="wp-block-paragraph">Firstly like a muppet, I was checking for &#8216;drift&#8217; of values every frame, but storing all this data a second time. Stupid. I only need the PREVIOUS playthrough&#8217;s data. I just need to collect *this* frames data, and compare against the past. But thats a &#8216;current-frame&#8217; snapshot. I don&#8217;t need to store that! Secondly I was stupidly searching for a matching tick&#8217;s data in the previous playthrough. Madness. I KNOW what tick we are on. I can just index it, and do a super quick compare ffs&#8230;</p>



<p class="wp-block-paragraph">You might think thats stupid worrying about optimisation in pure-debug code&#8230;but this is a 32 bit app, so limited to 2GB (or maybe 4GB depending on settings), and although my game stays nicely at about 6-700MB, storing 80,000 frames of simulation data for every ship, missile, drone, mine and bullet very rapidly hits that limit. I needed super comprehensive simulation snapshots, but memory-efficient ones. This proved tricky. You might think &#8216;store everything&#8217; but trust me, its just NOT an option for a long, large battle with this level of complexity and 240 ticks a second (60fps but possibly 1/4 speed so 240 sim ticks per second).</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1920" height="1080" src="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/06/image-1.png" alt="" class="wp-image-7071" srcset="https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/06/image-1.png 1920w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/06/image-1-680x383.png 680w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/06/image-1-768x432.png 768w, https://www.positech.co.uk/cliffsblog/wp-content/uploads/2026/06/image-1-1536x864.png 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></figure>



<p class="wp-block-paragraph">Oh BTW if you think &#8216;cliff that&#8217;s dumb. At 4x speed you still only need 1 tick, just make it a tick thats 4x as long&#8217;. NO. This is because in code, a missile moves every tick. If it hits the target, stuff happens then, and in the following ticks. If you bundle 4 ticks into 1, then the missile &#8216;hits&#8217;, but nothing else, whereas it may hit in tick 1, and then ticks 2,3,4 the affected shield slowly regenerates. In other words my sim is discrete tick based, not variable time equation based. Its just simpler this way :D.</p>



<p class="wp-block-paragraph">So what other really stupid mistakes took me days to sort out? Well they are all kinda dumb, but in a code-base this big, I think I should cut myself some slack. And actually in TWO of the big cases, in the back of my mind I knew as I coded them that they were flaky as hell. Normally my code is VERY cleanly split between simulation and graphics. In fact all my classes are called SIM_Thing or GUI_Thing, to make that super clear, and make sure I don&#8217;t do anything dumb like change the sim from the GUI, which would be really bad software engineering that obviously I shouldn&#8217;t do and obviously I did in two places :D.</p>



<p class="wp-block-paragraph">The first one was a bit obscure. When ships &#8216;escape&#8217; the battle, they quickly zap off the screen like they are entering hyperspace. To make it seem cool, every ship zaps-away at a slightly different speed, because then it looks like the rebel fleet going into hyperspace in return of the jedi&#8230; And thats all well and cool, but it used a proper random number in the GUI code, and at the end of the warp-jump, it then told the SIM the ship had escaped at last&#8230; What terrible code. This was the GUI setting times for the SIM. Madness. And a determinism destroying bug. Very rarely that extra 50ms was long enough for an enemy ship to get just one extra enemy-destroying shot off&#8230;</p>



<p class="wp-block-paragraph">The second one is even more obscure. I have classic graphics-distorting shockwaves when big ships explode. They look cool, AND they also move debris, hulks, escapepods and (it turns out) missiles, slightly in space as the &#8216;wave front&#8217; hits them. I coded this with the GUI determining what SIM objects to move when&#8230; because it was way easier. I know in the GUI code the radius of the shockwave, so I can detect anything I need to move in the GUI code, and apply a physics force to them. The trouble is&#8230;thats the GUI lecturing the sim again, and because speeds can vary we cannot ensure the sim tick / frame rate ratio, which means in one playthrough a shockwave moves a missile maybe 4ms before another playthrough, and that tiny difference is determinism-destroying. For now, I just stopped missiles reacting to shockwaves. The rest is just UI and doesn&#8217;t matter.</p>



<p class="wp-block-paragraph">So thats where I am now. I have run 6 consecutive tests on 2 different (smallish) levels, and its 100% deterministic. It was HARD. All the mistakes were dumb ones by me, which is basically the definition of coding alone. It took a lot of detective work, and really focusing on the very first deviation from known values to track it all down. (There were many other minor causes). One of the side effects of working so hard on all this is that it really has reminded me how much I love the TV show devs. Which if you have never watched&#8230; why the hell not?</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Devs (Hulu) Trailer HD - Nick Offerman, Sonoya Mizuno series" width="640" height="360" src="https://www.youtube.com/embed/Fp9LMsI6uJ8?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://www.positech.co.uk/cliffsblog/2026/06/07/building-a-deterministic-space-auto-battler/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
	</channel>
</rss>
