<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.3.2">Jekyll</generator><link href="/feed.xml" rel="self" type="application/atom+xml" /><link href="/" rel="alternate" type="text/html" /><updated>2025-07-22T21:45:26+01:00</updated><id>/feed.xml</id><title type="html">biggles.games</title><entry><title type="html">Drift Vector Playtest &amp;amp; High Score Competition!</title><link href="/blog/2023/09/30/drift-vector-playtest-and-high-score-contest.html" rel="alternate" type="text/html" title="Drift Vector Playtest &amp;amp; High Score Competition!" /><published>2023-09-30T00:00:00+01:00</published><updated>2023-09-30T00:00:00+01:00</updated><id>/blog/2023/09/30/drift-vector-playtest-and-high-score-contest</id><content type="html" xml:base="/blog/2023/09/30/drift-vector-playtest-and-high-score-contest.html"><![CDATA[<p>Aaaaagghhh! In the manic rush to get a demo build out in time for the Steam SHMUP-Fest <em>and</em> edit a trailer <em>and</em> do various other bits of social media promotion &amp; so forth I totally neglected this blog or let my dear readers know that I’m currently running a playtest &amp; high-score contest for Drift Vector &amp; throwing in a little $50 Steam credit for the winner:</p>

<div style="display:block; margin:auto; width:100%; padding-bottom:20px; padding-tops:25px;">
<a href="/drift-vector">
	<img src="/assets/img/DriftVectorHighScoreContestBanner-1920x622.png" class="game-banner" />
</a>
</div>

<p>Well, it’s not <em>toooo</em> late! By my calculation, at the time of writing there’s still a little over 52 hours left to participate!</p>

<!--more-->

<p>To enter, go to <a href="https://app.playcocola.com/i/2fe7e113-cbcb-44fb-b554-ac4b0ba93fdd">this Playcocola link</a>, read the instructions &amp; you should be able to record a playtest session. I’d suggest around 20 minutes will be enough &amp; then there’ll be a short survey at the end. If you get the highest score during a recorded playtest session before midnight (GMT) on Monday will receive $50 Steam Credit to spend on whatever game strikes your fancy.</p>

<p>As an added incentive to spread the word, if you have a friend who you know loves retro games, indie games &amp; score-chasing in general, tag them in reply to <a href="https://x.com/Biggles/status/1707456439520788786?s=20">this tweet</a> &amp; you’ll <em>also</em> get $50 steam credit if they go on to win!</p>

<p>Lastly, if you’d like to be notified about future playtest sessions, you can <a href="https://biggles.games/playtest/">sign up here</a> &amp; I’ll email you when the next one comes around.</p>

<p>Thanks again &amp; looking forward to getting your feedback. It’s still very early days for Drift Vector but with your help I think it could end up being something rather special!</p>

<p><img src="/assets/gifs/Collect-Dodge-Dance-Fire.gif" alt="Looping gif" style="display:block; margin-left:auto; margin-right:auto" /></p>]]></content><author><name></name></author><summary type="html"><![CDATA[Aaaaagghhh! In the manic rush to get a demo build out in time for the Steam SHMUP-Fest and edit a trailer and do various other bits of social media promotion &amp; so forth I totally neglected this blog or let my dear readers know that I’m currently running a playtest &amp; high-score contest for Drift Vector &amp; throwing in a little $50 Steam credit for the winner: Well, it’s not toooo late! By my calculation, at the time of writing there’s still a little over 52 hours left to participate!]]></summary></entry><entry><title type="html">Announcing Drift Vector!</title><link href="/blog/2023/09/13/announcing-drift-vector.html" rel="alternate" type="text/html" title="Announcing Drift Vector!" /><published>2023-09-13T00:00:00+01:00</published><updated>2023-09-13T00:00:00+01:00</updated><id>/blog/2023/09/13/announcing-drift-vector</id><content type="html" xml:base="/blog/2023/09/13/announcing-drift-vector.html"><![CDATA[<p>If you’ve run into me in the past month or so, there’s a good chance I may have mentioned that I’ve been working on a new project. That project is… (drumroll)…</p>

<div style="display:block; margin:auto; width:100%; padding-bottom:20px; padding-tops:25px;">
<a href="/drift-vector">
	<img src="/assets/img/DriftVectorBanner.png" class="game-banner" />
</a>
</div>

<!--more-->

<p>In fact, almost everything relating to the game is <strong>very WIP</strong> at the moment, I’m rushing to get a demo out under a pretty tight deadline (which I’ll say more about veeeerrryy sooooon….) and there are a few other things in the works which I absolutely can’t wait to tell people about!!</p>

<p>Also, don’t worry, <a href="/rockets-and-research">Rockets &amp; Research</a> is still in the works, but in all honesty, development had slowed right down over the summer while I got stuck in the weeds with debugging orbital mechanical mathematics to the point where I needed a bit of a break to work on something a bit more immediately <em>fun</em>.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[If you’ve run into me in the past month or so, there’s a good chance I may have mentioned that I’ve been working on a new project. That project is… (drumroll)…]]></summary></entry><entry><title type="html">Ozymandias is 35% off for Steam Strategy Fest!</title><link href="/blog/2023/08/30/ozymandias-in-steam-strategy-fest.html" rel="alternate" type="text/html" title="Ozymandias is 35% off for Steam Strategy Fest!" /><published>2023-08-30T00:00:00+01:00</published><updated>2023-08-30T00:00:00+01:00</updated><id>/blog/2023/08/30/ozymandias-in-steam-strategy-fest</id><content type="html" xml:base="/blog/2023/08/30/ozymandias-in-steam-strategy-fest.html"><![CDATA[<p>Just a quick one today, but if you weren’t already aware, this week is Steam’s “Strategy Fest” &amp; <a href="/ozymandias">Ozymandias</a> is taking part! To coincide with the fest, we’ve also released the sixth &amp; final season pass update which includes the new “Andes” map, where four ancient Amazonian tribes are pitted in a race to acquire precious food before being cut off by their rivals:</p>

<p><a href="/assets/img/ozymandias-andes-screenshot.png"><img src="/assets/img/ozymandias-andes-screenshot.png" alt="Ozymandias Andes Screensho" /></a></p>

<p>It’s hard to believe that the game has been out for almost a year now, and in all honesty it has performed far better than I’d imagined…</p>

<!--more-->

<p>I’d really love to do a full warts-and-all post-mortem with Jeremy as well as the whole Goblinz team (if I can get them to agree to it!) at some point to share what went well, what didn’t and what we (or other upcoming game devs) can learn from the experience. We’ll see :-)</p>

<p>In the meantime, if you don’t already have a copy, head over to buy <a href="https://store.steampowered.com/app/1768280/Ozymandias_Bronze_Age_Empire_Sim/#app_reviews_hash">Ozymandias on Steam</a> while it’s 35% off (or <em>39% off</em> for the Deluxe Edition!)</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Just a quick one today, but if you weren’t already aware, this week is Steam’s “Strategy Fest” &amp; Ozymandias is taking part! To coincide with the fest, we’ve also released the sixth &amp; final season pass update which includes the new “Andes” map, where four ancient Amazonian tribes are pitted in a race to acquire precious food before being cut off by their rivals: It’s hard to believe that the game has been out for almost a year now, and in all honesty it has performed far better than I’d imagined…]]></summary></entry><entry><title type="html">Test Driven Debugging</title><link href="/blog/2023/07/21/test-driven-debugging.html" rel="alternate" type="text/html" title="Test Driven Debugging" /><published>2023-07-21T00:00:00+01:00</published><updated>2023-07-21T00:00:00+01:00</updated><id>/blog/2023/07/21/test-driven-debugging</id><content type="html" xml:base="/blog/2023/07/21/test-driven-debugging.html"><![CDATA[<p>Development on “new features” this month has honestly been a bit slower than I would have liked. It turns out that the maths underlying a lot of orbital mechanics is really quite complicated! However, something that’s really helped has been having those “automated tests” set up which I mentioned last month…</p>

<!--more-->

<p>I know <a href="https://en.wikipedia.org/wiki/Test-driven_development">Test Driven Development</a> isn’t exactly anything <em>new</em> per se, but it doesn’t seem to be <em>quite</em> as common in game development as in other fields. It’s always been one of those things that I’ve felt I <em>should</em> get into the habit of doing but never quite found the time to prioritise and has also felt a little intimidating. In addition, the few times I’ve <em>tried</em> to do TDD in the past, it’s been a very good way to chew up time and make things <em>more</em> complicated, rather than less. That’s likely mostly a result of my own inexperience, of course…</p>

<p>This month, though, I’ve hit upon a technique that’s worked quite well for me, which I’m dubbing “Test Driven Debugging”: Instead of trying to sit down and write a bunch of tests <em>before</em> doing any coding, I write a bunch of code first (whiteboarding any complex parts as necessary), then run the game to see if that produces the expected output. If <em>not</em> then, I go ahead and create a new test function &amp; use it a bit like I would a REPL environment. <a href="https://github.com/bitwes/Gut">GUT</a> makes it really quick &amp; easy to run a specific test function, so it’s super quick to iterate while slowly stepping through the logic of some system and using asserts (or sometimes just good ol’ fashioned console output…) to confirm that intermediate results are as expected. As soon as I catch something that’s <em>not</em> coming out the way I’m expecting it, then I can go back to the source code for that thing &amp; try to fix it (or my understanding of it!), then re-run the test(s) to check that the fix worked.</p>

<p>To give a more concrete example, I have a <code class="language-plaintext highlighter-rouge">GenericOrbit</code> class which is supposed to be able to handle orbits with any eccentricity, however until recently the game only ever really included circular &amp; elliptic orbits (i.e. eccentricity &lt; 1). So when I started getting super-weird results from hyperbolic orbits, I went through the following process:</p>

<ol>
  <li>Add a <code class="language-plaintext highlighter-rouge">test_hyperbolic_orbits()</code> test function, within which, I:</li>
  <li>Created &amp; initialised the necessary objects</li>
  <li>Started querying the relevant orbital parameters with different initialisation values. These were mostly fine</li>
  <li>Started querying the positions &amp; velocities returned at different timestamps</li>
  <li>Noticed that I was getting <code class="language-plaintext highlighter-rouge">nan</code> values far more quickly than I would have expected</li>
  <li>Went back to the code for the <code class="language-plaintext highlighter-rouge">GenericOrbit</code> class’s various functions, comparing them to the relevant math from the <a href="https://www.amazon.co.uk/Fundamentals-Astrodynamics-Second-Dover-Physics/dp/0486497046/">Fundamentals of Astrodynamics</a> book I’ve been primarily using as reference.</li>
  <li>Adding print statements inside those functions being executed to try &amp; establish the point at which those <code class="language-plaintext highlighter-rouge">nan</code> values might be originating.</li>
  <li>Found &amp; fixed the offending lines in the code for the <a href="https://en.wikipedia.org/wiki/Stumpff_function">Stampff functions</a> which were trying to square root a value which would often be negative for hyperbolic orbits.</li>
  <li>Re-ran the tests, updated some of the assert checks where necessary, added a few more, removed some of those print functions</li>
  <li>Ran the full set of tests to ensure I’d not broken anything else &amp; then committed the change to source control</li>
</ol>

<p>So it’s not <em>that</em> different to how I might normally debug my code, but with the difference that without really spending any <em>extra time</em> writing tests, I’ve got:</p>

<ol>
  <li>A nice, convenient place to do it rather than an ephemeral REPL session.</li>
  <li>A signal to tell me if I break that thing in the future during a refactor or something and</li>
  <li>A sort of accompanying documentation I can re-read in the future to remember some of the quirks in certain systems etc.</li>
</ol>

<p>I’m not sure if others use “TDD” this way and I’m sure that I’d horrify a lot of more experienced devs with my tests, but it’s been pretty helpful so far, especially when trying to get to the bottom of bugs resulting in subtle maths-y errors like this one! Lord knows there are a lot of opportunities for those in a project like this!</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Development on “new features” this month has honestly been a bit slower than I would have liked. It turns out that the maths underlying a lot of orbital mechanics is really quite complicated! However, something that’s really helped has been having those “automated tests” set up which I mentioned last month…]]></summary></entry><entry><title type="html">Ten recent wins</title><link href="/blog/2023/06/21/ten-wins.html" rel="alternate" type="text/html" title="Ten recent wins" /><published>2023-06-21T00:00:00+01:00</published><updated>2023-06-21T00:00:00+01:00</updated><id>/blog/2023/06/21/ten-wins</id><content type="html" xml:base="/blog/2023/06/21/ten-wins.html"><![CDATA[<p>This week it will be technically 3 months since I first officially started working on <a href="/rockets-and-research">Rocket &amp; Research</a>!</p>

<p>However it’s only really been in the last 4 weeks that I’ve finally been able to dedicate myself full time to the project. In that time, I’ve completed two full “sprints”. While it’s still early days yet, I feel that it’s important to celebrate one’s “wins”, however small, so without any futher ado, here are some recent ones I’m quite pleased with…</p>

<!--more-->

<h3 id="1-random-solar-system-generation">1: “Random solar system generation</h3>

<p>This now works pretty well. I’m particularly pleased with the way I’m able to assign different kinds of random distribution to each parameter (e.g. uniform / normal / lognormal etc)</p>

<h3 id="2-automated-tests">2: Automated tests</h3>

<p>These trigger every time I push code to the <code class="language-plaintext highlighter-rouge">main</code> branch in GitHub. Still need to actually <em>write</em> a few more of those tests though…</p>

<h3 id="3-basic-ui-layout">3: Basic “UI layout”</h3>

<p>Including collapsable panels and tabs along with vector-based icons etc. I’m still getting my head around how Godot handles this stuff quite differently to what I’m used to with UE4, but it’s pretty close to the initial design:</p>

<p><a href="/assets/img/RNR-mockup-highres.png"><img src="/assets/img/RNR-mockup.png" alt="Mockup" /></a></p>

<h3 id="4-basic-timeline-widget">4: Basic “timeline widget”</h3>

<p>This shows the current simulation time and has a horizontally scrollable and “zoomable” window with tick marks and the ability to show instruction widgets. This took quite a while to get right tbh!</p>

<h3 id="5-object-selection-system">5: Object selection system</h3>

<p>Including “object list” and “object info” widgets which can be used to select various things in the simulation and view info about them respectively.</p>

<h3 id="6-custom-orbital-zones-material">6: Custom “orbital zones” material</h3>

<p>I’m quite used to doing custom materials in UE4 but I’m pleased to have at least started getting my head around how they work in Godot. Each celestial body now has a visual representation of the “bounds” of its gravitational sphere of influence in terms of a min/max radius around the celestial body that it’s orbiting in a way that I think looks quite pleasing.</p>

<p><img src="/assets/gifs/2023-06-07-simple-zoom.gif" alt="Looping gif" style="display:block; margin-left:auto; margin-right:auto" /></p>

<p>This takes into account the eccentricity of the celestial body’s orbit was actually predominantly for testing purposes for the system generation stuff. To simplify the maths I’m going to need for working out <em>which</em> gravity well should be used as the reference point at any particular moment, I’ve instigated a rule that these “orbital zones” cannot overlap each other unless there is a direct parent/child (aka orbital center/satellite) relationship between the two orbital bodies.</p>

<h3 id="7-basic-save--load-functionality">7: Basic save / load functionality</h3>

<p>This was <em>kind of</em> working before but I managed to track down and fixed a bunch of memory leak issues with my first implementation. At the moment it only saves/loads the “generated system”, but in time I’ll get it to save other stuff as well</p>

<h3 id="8-started-adding-the-player-actions-and-timeline-instructions-systems">8: Started adding the “player actions” and “timeline instructions” systems</h3>

<p>It’s important to do this in a way that clearly separates the two and also allows for undo/redo on a per-player-action basis. This is something that I really regret not having added to Ozymandias right from the start, since I was later unable to add it in after the fact without creating a whole bunch of edge cases and UI bugs etc.</p>

<p>While I’ve got a “version 1” of this working, I’ve quickly realised that I need to refactor it a fair bit to ensure I don’t end up having to write <em>tons</em> of boiler-plate code covering every single combination of the two, which is going ok so far, I believe!</p>

<h3 id="9-fixed-a-bug-in-godot-itself-relating-to-sampling-baked-curves">9: Fixed a bug in Godot itself relating to sampling baked curves.</h3>

<p>This was <a href="https://github.com/godotengine/godot/pull/76617">my first ever contribution</a> to a major open source project, so I’m particularly proud of getting that merged!</p>

<h3 id="10-got-automated-web-builds-working--uploaded-to-flyio-with-a-single-script">10: Got automated web builds working &amp; uploaded to fly.io with a single script.</h3>

<p>This involved a fair bit of getting my head around Godot4’s issues with “cross origin policy” headers (which I still only <em>partially</em> understand tbh). It’s not perfect yet, there are definitely some performance issues (my Mac sounded like it was about to take off when I tested it in Chrome!) and there are a whole bunch of console error messages I should try to fix. Plus I can’t seem to get it to load <em>at all</em> in Safari on my phone or Mac, though I <em>was</em> able to get it running on one of the new “Mac Studios” running in the new local Battersea Power Station Apple Store…</p>

<p><a href="/assets/img/RNR-in-apple-store.jpeg"><img src="/assets/img/RNR-in-apple-store.jpeg" alt="R&amp;R running in the local Apple Store" /></a></p>

<p>If you’ve read this far and are feeling particularly brave, you can even go ahead and see if it works in <a href="https://rnr-host.fly.dev/RNR.html"><em>your</em> browser</a> but be warned that there isn’t really much of a “game” there just yet!</p>

<h2 id="conclusion">Conclusion</h2>

<p>There’s still a little ways to go before there’s enough of a “game” to ask people to test, but that’s ok, game development takes time! Especially when working alone from home, it can be all to easy to feel like one is way behind so I feel it’s particularly important to celebrate these kinds of little victories along the way :-)</p>]]></content><author><name></name></author><summary type="html"><![CDATA[This week it will be technically 3 months since I first officially started working on Rocket &amp; Research! However it’s only really been in the last 4 weeks that I’ve finally been able to dedicate myself full time to the project. In that time, I’ve completed two full “sprints”. While it’s still early days yet, I feel that it’s important to celebrate one’s “wins”, however small, so without any futher ado, here are some recent ones I’m quite pleased with…]]></summary></entry><entry><title type="html">Welcome!</title><link href="/blog/2023/04/22/about.html" rel="alternate" type="text/html" title="Welcome!" /><published>2023-04-22T00:00:00+01:00</published><updated>2023-04-22T00:00:00+01:00</updated><id>/blog/2023/04/22/about</id><content type="html" xml:base="/blog/2023/04/22/about.html"><![CDATA[<p>Hi, I’m Biggles &amp; this is my new homepage &amp; blog.</p>

<p>Here you’ll be able to follow my indie game dev journey &amp; read <a href="/about">about me</a> or the indie games I’ve worked on, like <a href="/ozymandias">Ozymandias: Bronze Age Empire Sim</a> and <a href="/harvest-hunt">Horror Stories: Harvest Hunt</a> as well as upcoming projects, <a href="/drift-vector">Drift Vector</a> and <a href="/rockets-and-research">Rockets &amp; Research</a>.</p>

<!--more-->

<p>Please bear with me while I’m still getting everything set up, but in the mean time, let me show you around…</p>

<p>In the top right there should be a handy menu to navigate the site &amp; at the bottom you should find links to my <a href="https://twitter.com/biggles">Twitter</a> &amp; <a href="https://linkedi.com/bigglesb">LinkedIn</a> as well as the site’s <a href="https://biggles.games/feed.xml">rss feed</a>.</p>

<p>For those who are interested in such things, the site is built using <a href="https://jekyllrb.com">jekyll</a> and served on <a href="https://fly.io">fly.io</a> via PierreZ’s <a href="https://github.com/PierreZ/goStatic">gostatic</a>. The theme is based on “minima”, though I’ve been butchering it a fair bit to try &amp; make it a bit more “me”.</p>

<p>The site doesn’t currently use any kind of cookies, though I would quite like to set up <em>some</em> kind of basic analytics to better understand what kinds of things people enjoy reading about etc. Hopefully I’ll be able to find a way to do that without using cookies as well since no one likes those annoying pop-ups. I’ll try to set up some kind of commenting system as well, or maybe set up a Discord server. In the mean time, feel free to ping me on <a href="https://twitter.com/biggles">Twitter</a> if you have any questions!</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Hi, I’m Biggles &amp; this is my new homepage &amp; blog. Here you’ll be able to follow my indie game dev journey &amp; read about me or the indie games I’ve worked on, like Ozymandias: Bronze Age Empire Sim and Horror Stories: Harvest Hunt as well as upcoming projects, Drift Vector and Rockets &amp; Research.]]></summary></entry></feed>