<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://resinhead.au/feed.xml" rel="self" type="application/atom+xml" /><link href="https://resinhead.au/" rel="alternate" type="text/html" hreflang="en" /><updated>2026-05-05T04:12:19+10:00</updated><id>https://resinhead.au/feed.xml</id><title type="html">Resinhead Games</title><subtitle>A small Australian games studio. Stories you can play.</subtitle><author><name>Resinhead Games</name><email>games@resinhead.au</email></author><entry><title type="html">Mobile Blight Lifted, Again</title><link href="https://resinhead.au/blight/devlog/blight-1-4-2/" rel="alternate" type="text/html" title="Mobile Blight Lifted, Again" /><published>2026-05-04T20:51:57+10:00</published><updated>2026-05-04T20:51:57+10:00</updated><id>https://resinhead.au/blight/devlog/blight-1-4-2</id><content type="html" xml:base="https://resinhead.au/blight/devlog/blight-1-4-2/"><![CDATA[<p>Turns out the phone version had been shipping without any of its fonts, splash, or banner art. Without fonts there are no words, and without words there is no game; just a polite crash on the doorstep before the tavern even opened. Bug had been quietly riding along since 1.4.0. The chickens deny all knowledge.</p>

<ul>
  <li>Fix Android crash on launch by having <code class="language-plaintext highlighter-rouge">Client.Android</code> drive its own MGCB pipeline (<code class="language-plaintext highlighter-rouge">MonoGameContentReference</code>) instead of leaning on a stale <code class="language-plaintext highlighter-rouge">Client.Desktop</code> bin folder; the old setup silently shipped APKs with zero XNBs whenever CI built Android on a clean checkout, blowing up on the first <code class="language-plaintext highlighter-rouge">Content.Load</code>. Also add a smoke test in <code class="language-plaintext highlighter-rouge">build-android</code> that fails the release if any of the four required XNBs (DefaultFont, MenuFont, Banner, Splash) are missing from the signed APK, so this regression class can’t sneak through again.</li>
  <li>GHA release: install <code class="language-plaintext highlighter-rouge">ttf-mscorefonts-installer</code> on the <code class="language-plaintext highlighter-rouge">ubuntu-latest</code> Android runner so MGCB’s <code class="language-plaintext highlighter-rouge">FontDescriptionProcessor</code> can find Arial; the first 1.4.2 dispatch failed at the font-build step because the runner ships fontless by default.</li>
</ul>]]></content><author><name>Resinhead Games</name><email>games@resinhead.au</email></author><category term="blight" /><summary type="html"><![CDATA[Turns out the phone version had been shipping without any of its fonts, splash, or banner art. Without fonts there are no words, and without words there is no game; just a polite crash on the doorstep before the tavern even opened. Bug had been quietly riding along since 1.4.0...]]></summary></entry><entry><title type="html">Deliveries All Round</title><link href="https://resinhead.au/blight/devlog/blight-1-4-1/" rel="alternate" type="text/html" title="Deliveries All Round" /><published>2026-04-25T06:32:17+10:00</published><updated>2026-04-25T06:32:17+10:00</updated><id>https://resinhead.au/blight/devlog/blight-1-4-1</id><content type="html" xml:base="https://resinhead.au/blight/devlog/blight-1-4-1/"><![CDATA[<p>Mac folk finally get their own proper crate delivered to the tavern door, one for Apple Silicon and one for Intel, each stamped so no one picks up the wrong one. First time you open yours, right-click -&gt; Open to get past macOS’s “who sent this?” speech; Apple’s own wax costs coin we don’t yet have. The chickens remain furious.</p>

<ul>
  <li>GHA release: add gated Azure Trusted Signing for <code class="language-plaintext highlighter-rouge">Client.Desktop.exe</code> and the Windows Velopack <code class="language-plaintext highlighter-rouge">Setup.exe</code>; inert until the Resinhead identity validation lands (see <code class="language-plaintext highlighter-rouge">docs/azure.md</code> for the full setup walkthrough)</li>
  <li>GHA release: add <code class="language-plaintext highlighter-rouge">signtool verify /pa</code> steps after each Windows sign so timestamp flakes and cert chain issues blow up in the build job instead of the user’s SmartScreen dialog</li>
  <li>Bailed on Azure Trusted signing, it won’t work for Australians.</li>
  <li>GHA release: extend Velopack packaging to macOS; both <code class="language-plaintext highlighter-rouge">osx-x64</code> and <code class="language-plaintext highlighter-rouge">osx-arm64</code> pack on <code class="language-plaintext highlighter-rouge">macos-latest</code> (Apple Silicon handles Intel packaging fine and dodges the shrinking macos-13 runner pool), installers sync to S3 so Mac clients get auto-updates end-to-end, and the artifacts land on the GitHub Release alongside the existing tar.gz downloads. Apple signing/notarisation stays deferred, so first launch still needs right-click -&gt; Open.</li>
  <li>GHA release: push the macOS Velopack <code class="language-plaintext highlighter-rouge">Blight-osx-Portable.zip</code> to itch.io’s <code class="language-plaintext highlighter-rouge">osx-intel</code> and <code class="language-plaintext highlighter-rouge">osx-apple-silicon</code> channels in place of the plain tar.gz; brings Mac itch users in line with Windows and Linux itch users on Velopack installs + in-game auto-updates. 1.4.1 shipped the mac Velopack stack to S3 and the GitHub Release but missed this one channel pair.</li>
</ul>]]></content><author><name>Resinhead Games</name><email>games@resinhead.au</email></author><category term="blight" /><summary type="html"><![CDATA[Mac folk finally get their own proper crate delivered to the tavern door, one for Apple Silicon and one for Intel, each stamped so no one picks up the wrong one. First time you open yours, right-click -> Open to get past macOS's "who sent this?" speech; Apple's own wax costs c...]]></summary></entry><entry><title type="html">Mobile Blight Lifted</title><link href="https://resinhead.au/blight/devlog/blight-1-3-9/" rel="alternate" type="text/html" title="Mobile Blight Lifted" /><published>2026-04-19T08:02:52+10:00</published><updated>2026-04-19T08:02:52+10:00</updated><id>https://resinhead.au/blight/devlog/blight-1-3-9</id><content type="html" xml:base="https://resinhead.au/blight/devlog/blight-1-3-9/"><![CDATA[<p>Something nasty had crept into the mobile version. Players launching Blight on Android got a crash instead of a pub, which is arguably the wrong kind of suffering.</p>

<p>We tracked the gremlin down, drove it out, and the phone version walks again. If you’ve tried Blight on Android before and bounced off the doorstep, now’s the time to come back in.</p>

<p>Desktop is unchanged. Windows, Linux, and itch.io builds all still play nice. Mac should be fine too but we’ve not found a Mac to prove it.</p>

<p>A few quiet improvements have happened under the floorboards as well; nothing you’d notice unless you’re running your own server.</p>

<p>Come adventuring. The chickens are still furious.</p>

<ul>
  <li>Facilitator: add <code class="language-plaintext highlighter-rouge">--version</code>, <code class="language-plaintext highlighter-rouge">-v</code>, <code class="language-plaintext highlighter-rouge">--help</code>, <code class="language-plaintext highlighter-rouge">-h</code> flags; reject unknown arguments with a clean error + exit 1; wrap <code class="language-plaintext highlighter-rouge">server.Start</code> so port-in-use prints a friendly message instead of a core dump</li>
  <li>GHA release: opt Node-based actions into Node 24 ahead of the June 2026 default switch, silencing the Node 20 deprecation warning on <code class="language-plaintext highlighter-rouge">aws-actions/configure-aws-credentials@v5</code></li>
  <li>Retire <code class="language-plaintext highlighter-rouge">ship.ps1</code>; releases now dispatch via <code class="language-plaintext highlighter-rouge">gh workflow run release.yml</code> (README, CLAUDE.md, and docs updated to match)</li>
  <li>Fix Android crash on launch with AOT enabled; disable <code class="language-plaintext highlighter-rouge">AndroidEnableMarshalMethods</code> so the rewriter doesn’t mutate assemblies after AOT has seen them (dotnet/android#7389 class-init.c:2474 <code class="language-plaintext highlighter-rouge">instance_size</code> assertion)</li>
</ul>]]></content><author><name>Resinhead Games</name><email>games@resinhead.au</email></author><category term="blight" /><summary type="html"><![CDATA[Something nasty had crept into the mobile version. Players launching Blight on Android got a crash instead of a pub, which is arguably the wrong kind of suffering.]]></summary></entry><entry><title type="html">Quests first</title><link href="https://resinhead.au/blight/devlog/blight-1-3-8/" rel="alternate" type="text/html" title="Quests first" /><published>2026-04-19T06:28:40+10:00</published><updated>2026-04-19T06:28:40+10:00</updated><id>https://resinhead.au/blight/devlog/blight-1-3-8</id><content type="html" xml:base="https://resinhead.au/blight/devlog/blight-1-3-8/"><![CDATA[<p>​The Create Game screen now leads with Quest mode, and new games default to Quest. Horde’s still there, just in the second slot.</p>

<p>Behind the scenes this is also the first release built and shipped entirely from GitHub Actions instead of my laptop. No user-visible difference, but it means patches can go out faster and from anywhere.</p>

<ul>
  <li>Move Android keystore passwords out of <code class="language-plaintext highlighter-rouge">Client.Android.csproj</code>; <code class="language-plaintext highlighter-rouge">build.ps1</code> now reads <code class="language-plaintext highlighter-rouge">ANDROID_KEYSTORE_PASS</code> from the environment</li>
  <li>Start of GitHub Actions release workflow; <code class="language-plaintext highlighter-rouge">release.yml</code> now publishes Client.Desktop for all four RIDs (win-x64, linux-x64, osx-x64, osx-arm64) plus the Facilitator (linux-x64) on <code class="language-plaintext highlighter-rouge">workflow_dispatch</code></li>
  <li>GHA release: add <code class="language-plaintext highlighter-rouge">package-archives</code> job that produces per-RID <code class="language-plaintext highlighter-rouge">blight-&lt;rid&gt;.tar.gz</code> / <code class="language-plaintext highlighter-rouge">.zip</code> from the shared publish artifact; archives are Client.Desktop only (Facilitator is a server binary, deployed separately to Lightsail)</li>
  <li>GHA release: add <code class="language-plaintext highlighter-rouge">package-velopack</code> matrix job (win-x64 on windows-latest, linux-x64 on ubuntu-latest) that runs <code class="language-plaintext highlighter-rouge">vpk pack</code> against the shared publish artifact and uploads <code class="language-plaintext highlighter-rouge">blight-velopack-&lt;rid&gt;</code> artifacts</li>
  <li>GHA release: add <code class="language-plaintext highlighter-rouge">build-android</code> job (ubuntu-latest) that decodes <code class="language-plaintext highlighter-rouge">ANDROID_KEYSTORE_B64</code>, installs the Android workload, and publishes both signed AAB and APK as <code class="language-plaintext highlighter-rouge">blight-android</code> artifact</li>
  <li>Fix Android build on a clean checkout: lift <code class="language-plaintext highlighter-rouge">GenerateScriptManifests</code> to <code class="language-plaintext highlighter-rouge">InitialTargets</code> on the <code class="language-plaintext highlighter-rouge">Client.Android</code> project so the Lua manifest files exist before AndroidAsset resolution (previously <code class="language-plaintext highlighter-rouge">BeforeTargets="Build"</code> ran too late and only succeeded locally because stale manifest files were left over from a prior build)</li>
  <li>GHA release: add Phase 3 distribution jobs; <code class="language-plaintext highlighter-rouge">distribute-s3</code> (OIDC role, no long-lived AWS keys), <code class="language-plaintext highlighter-rouge">distribute-itch</code> (butler push to all five itch.io channels), <code class="language-plaintext highlighter-rouge">distribute-googleplay</code> (curl-based Edits API upload + commit + verify, mirrors <code class="language-plaintext highlighter-rouge">ship.ps1</code>)</li>
  <li>GHA release: add <code class="language-plaintext highlighter-rouge">deploy-facilitator</code> job (SSH to Lightsail with <code class="language-plaintext highlighter-rouge">LIGHTSAIL_SSH_KEY</code> secret, scp + systemd restart) and <code class="language-plaintext highlighter-rouge">release</code> job (auto-tag <code class="language-plaintext highlighter-rouge">v$VERSION</code>, create GitHub Release, attach archives + Velopack installers + AAB/APK)</li>
  <li>GHA release: add <code class="language-plaintext highlighter-rouge">dry_run</code> workflow input (default true) gating all distribute/deploy/release jobs so initial dispatches validate build + package without touching live channels</li>
  <li>Reorder Create Game mode toggle so Quest comes before Horde, and default new games to Quest mode</li>
</ul>]]></content><author><name>Resinhead Games</name><email>games@resinhead.au</email></author><category term="blight" /><summary type="html"><![CDATA[​The Create Game screen now leads with Quest mode, and new games default to Quest. Horde's still there, just in the second slot.]]></summary></entry><entry><title type="html">Broken song</title><link href="https://resinhead.au/blight/devlog/blight-1-3-7/" rel="alternate" type="text/html" title="Broken song" /><published>2026-04-19T03:26:42+10:00</published><updated>2026-04-19T03:26:42+10:00</updated><id>https://resinhead.au/blight/devlog/blight-1-3-7</id><content type="html" xml:base="https://resinhead.au/blight/devlog/blight-1-3-7/"><![CDATA[<p>The song ‘Pixel Quest’ was broken, but we fixed it with some glue.</p>

<ul>
  <li>Fix pixel_quest.lua failing to load; <code class="language-plaintext highlighter-rouge">rep()</code> now accepts strings as well as tables, so drum grid patterns can be repeated</li>
</ul>]]></content><author><name>Resinhead Games</name><email>games@resinhead.au</email></author><category term="blight" /><summary type="html"><![CDATA[The song 'Pixel Quest' was broken, but we fixed it with some glue.]]></summary></entry><entry><title type="html">Respecting the Stones</title><link href="https://resinhead.au/blight/devlog/blight-1-3-6/" rel="alternate" type="text/html" title="Respecting the Stones" /><published>2026-04-18T20:02:14+10:00</published><updated>2026-04-18T20:02:14+10:00</updated><id>https://resinhead.au/blight/devlog/blight-1-3-6</id><content type="html" xml:base="https://resinhead.au/blight/devlog/blight-1-3-6/"><![CDATA[<p>Adventurers have sworn off drifting through castle walls like ghosts; from now on, they walk around them like the rest of us.</p>

<p>Mac and Linux now get a tarball, so we can set the binary as executable.</p>

<ul>
  <li>Fix A* pathfinding issues, go around things not through them.</li>
  <li>Mac and Linux archives switched to tar.gz so the executable bit on the binary survives unpacking</li>
</ul>]]></content><author><name>Resinhead Games</name><email>games@resinhead.au</email></author><category term="blight" /><summary type="html"><![CDATA[Adventurers have sworn off drifting through castle walls like ghosts; from now on, they walk around them like the rest of us.]]></summary></entry><entry><title type="html">Android MIDI fix</title><link href="https://resinhead.au/blight/devlog/blight-1-3-5/" rel="alternate" type="text/html" title="Android MIDI fix" /><published>2026-04-18T09:51:59+10:00</published><updated>2026-04-18T09:51:59+10:00</updated><id>https://resinhead.au/blight/devlog/blight-1-3-5</id><content type="html" xml:base="https://resinhead.au/blight/devlog/blight-1-3-5/"><![CDATA[<ul>
  <li>Fix missing music on Android by buffering SoundFont stream (InputStreamInvoker isn’t seekable)</li>
  <li>Bump to .NET 10</li>
  <li>Bump LiteNetLib to 2.1.2</li>
</ul>]]></content><author><name>Resinhead Games</name><email>games@resinhead.au</email></author><category term="blight" /><summary type="html"><![CDATA[Android MIDI fix]]></summary></entry><entry><title type="html">Bugs and missing files</title><link href="https://resinhead.au/blight/devlog/blight-1-3-4/" rel="alternate" type="text/html" title="Bugs and missing files" /><published>2026-04-16T21:02:30+10:00</published><updated>2026-04-16T21:02:30+10:00</updated><id>https://resinhead.au/blight/devlog/blight-1-3-4</id><content type="html" xml:base="https://resinhead.au/blight/devlog/blight-1-3-4/"><![CDATA[<p>Missing quest files for desktop build, also Linux wasn’t getting the .NET versus 9 upgrade yet, it was still building on 8.</p>

<ul>
  <li>Try to fix ship.ps1 because claude keeps breaking it</li>
  <li>Use .Net 9 for Linux</li>
  <li>Missing quest files for desktop build</li>
</ul>]]></content><author><name>Resinhead Games</name><email>games@resinhead.au</email></author><category term="blight" /><summary type="html"><![CDATA[Missing quest files for desktop build, also Linux wasn't getting the .NET versus 9 upgrade yet, it was still building on 8.]]></summary></entry><entry><title type="html">Under the Hood</title><link href="https://resinhead.au/blight/devlog/blight-1-3-3/" rel="alternate" type="text/html" title="Under the Hood" /><published>2026-04-16T08:20:21+10:00</published><updated>2026-04-16T08:20:21+10:00</updated><id>https://resinhead.au/blight/devlog/blight-1-3-3</id><content type="html" xml:base="https://resinhead.au/blight/devlog/blight-1-3-3/"><![CDATA[<p>Upgraded the entire project from .NET 8 to .NET 9 to meet Google Play’s new 16KB page alignment requirement for Android 15+ devices. No gameplay changes; just making sure the game keeps running on modern hardware.</p>

<ul>
  <li>Migrated all projects to .NET 9 (Shared, Simulation, BotClient, Facilitator, Desktop, Android)</li>
  <li>Enabled 16KB page alignment for all native libraries in the Android build</li>
  <li>Added Google Play upload verification step to ship script</li>
</ul>]]></content><author><name>Resinhead Games</name><email>games@resinhead.au</email></author><category term="blight" /><summary type="html"><![CDATA[Upgraded the entire project from .NET 8 to .NET 9 to meet Google Play's new 16KB page alignment requirement for Android 15+ devices. No gameplay changes; just making sure the game keeps running on modern hardware.]]></summary></entry><entry><title type="html">Re-upload for mobile</title><link href="https://resinhead.au/blight/devlog/blight-1-3-2/" rel="alternate" type="text/html" title="Re-upload for mobile" /><published>2026-04-16T06:46:59+10:00</published><updated>2026-04-16T06:46:59+10:00</updated><id>https://resinhead.au/blight/devlog/blight-1-3-2</id><content type="html" xml:base="https://resinhead.au/blight/devlog/blight-1-3-2/"><![CDATA[<p>Re-upload for mobile.</p>

<ul>
  <li>Re-up for mobile</li>
</ul>]]></content><author><name>Resinhead Games</name><email>games@resinhead.au</email></author><category term="blight" /><summary type="html"><![CDATA[Re-upload for mobile.]]></summary></entry></feed>