<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>gamedevelopment &amp;mdash; Lucas Haley</title>
    <link>https://www.lucashaley.com/tag:gamedevelopment</link>
    <description>Just a personal website.</description>
    <pubDate>Wed, 06 May 2026 12:25:27 +0000</pubDate>
    <image>
      <url>https://i.snap.as/ZE2GBGXr.ico</url>
      <title>gamedevelopment &amp;mdash; Lucas Haley</title>
      <link>https://www.lucashaley.com/tag:gamedevelopment</link>
    </image>
    <item>
      <title>Turf, Redux 2</title>
      <link>https://www.lucashaley.com/turf-redux-2?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[Not a great situation&#xA;&#xA;In which things are not optimal&#xA;###### #gamedevelopment #marketing&#xA;&#xA;Now that I have a working prototype, perhaps I should consider an audience.&#xA;&#xA;!--more--&#xA;&#xA;I started this project because it was something I thought I would really enjoy playing. Running around, figuring out strategies on the fly, hanging around outside with friends.&#xA;&#xA;However, the more I think about it, the smaller my target audience becomes.&#xA;&#xA;An impossible condition&#xA;&#xA;I have no idea how to go about getting an audience for this game.]]&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://i.snap.as/7N7YyQzZ.png" alt="Not a great situation"/></p>

<h5 id="in-which-things-are-not-optimal" id="in-which-things-are-not-optimal">In which things are not optimal</h5>

<h6 id="gamedevelopment-marketing" id="gamedevelopment-marketing"><a href="https://www.lucashaley.com/tag:gamedevelopment" class="hashtag"><span>#</span><span class="p-category">gamedevelopment</span></a> <a href="https://www.lucashaley.com/tag:marketing" class="hashtag"><span>#</span><span class="p-category">marketing</span></a></h6>

<p>Now that I have a working prototype, perhaps I should consider an audience.</p>



<p>I started this project because it was something I thought I would really enjoy playing. Running around, figuring out strategies on the fly, hanging around outside with friends.</p>

<p>However, the more I think about it, the smaller my target audience becomes.</p>

<p><img src="https://i.snap.as/RcVA7zOV.png" alt="An impossible condition"/></p>

<p>I have no idea how to go about getting an audience for this game.</p>
]]></content:encoded>
      <guid>https://www.lucashaley.com/turf-redux-2</guid>
      <pubDate>Tue, 03 Feb 2026 02:03:48 +0000</pubDate>
    </item>
    <item>
      <title>Turf, Redux 1</title>
      <link>https://www.lucashaley.com/turf-redux-1?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[Turf splash&#xA;&#xA;Revisiting old ideas with new tech&#xA;###### #programming #gamedevelopment #ai&#xA;&#xA;In which we breathe new life into old ideas, with some friendly help.&#xA;&#xA;!--more--&#xA;&#xA;I had an idea.&#xA;&#xA;You can read about it here and here and here.&#xA;&#xA;The tech stack I was working with had some limitations. I started with RubyMotion (because I :heart: Ruby, and it compiles cross-platform) with a Firebase realtime backend (because I wanted pubsub stuff in a database). The problems were that:&#xA;&#xA;any system-based stuff (location, etc.) had to be plugged into RubyMotion, which had mixed success&#xA;the data had to be no-sql, and I was getting the heebies from that&#xA;any server-side logic (for gameplay, and especially for Voronoi calculations) had to be in Javascript, which was a major let-down&#xA;&#xA;So, while I got a working prototype from it, I was reaching the limit of my patience working with that stack.&#xA;&#xA;The first weak point I wanted to eliminate was Firebase. While it&#39;s still a pretty cool tool, the second I poked around in Supabase I was sold. We&#39;re talking:&#xA;&#xA;normalized SQL, ahhhh relief&#xA;really solid pubsub&#xA;and the most best discovery, PostGIS with built-in Voronoi.&#xA;&#xA;As a service, I couldn&#39;t really ask for more for this project.&#xA;&#xA;However, recently at work we&#39;ve been doing a lot of research into AI tools. Claude proved itself quite useful, and in my efforts to understand it&#39;s limitations better, I thought I would put it through a personal project in the holiday off-time.&#xA;&#xA;Well, color me impressed.&#xA;&#xA;After an initial stumbling period (the XCode project still isn&#39;t set up properly, but heck if I&#39;m touching it now), things came together quite quickly. It knows how to make iOS apps. It knows Supabase (at least the 2024 version of Supabase, which is close enough). I was able to recreate the months of work using the original stack in about 20 hours.&#xA;&#xA;So now I&#39;ve had some opportunities to playtest, but really need more. But that&#39;s an issue for another post.&#xA;&#xA;Screenshots&#xA;&#xA;Turf main menu&#xA;Turf game options&#xA;Turf waiting room&#xA;Turf class selection&#xA;Turf class definitions&#xA;Turf in-game]]&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://i.snap.as/zBM0SBA0.png" alt="Turf splash"/></p>

<h5 id="revisiting-old-ideas-with-new-tech" id="revisiting-old-ideas-with-new-tech">Revisiting old ideas with new tech</h5>

<h6 id="programming-gamedevelopment-ai" id="programming-gamedevelopment-ai"><a href="https://www.lucashaley.com/tag:programming" class="hashtag"><span>#</span><span class="p-category">programming</span></a> <a href="https://www.lucashaley.com/tag:gamedevelopment" class="hashtag"><span>#</span><span class="p-category">gamedevelopment</span></a> <a href="https://www.lucashaley.com/tag:ai" class="hashtag"><span>#</span><span class="p-category">ai</span></a></h6>

<p>In which we breathe new life into old ideas, with some friendly help.</p>



<p>I had an idea.</p>

<p>You can read about it <a href="https://write.as/lucas-haley/turf-moving-around">here</a> and <a href="https://write.as/lucas-haley/turf-classes-and-accessibility">here</a> and <a href="https://write.as/lucas-haley/turf">here</a>.</p>

<p>The tech stack I was working with had some limitations. I started with <a href="http://www.rubymotion.com/">RubyMotion</a> (because I :heart: Ruby, and it compiles cross-platform) with a Firebase realtime backend (because I wanted pubsub stuff in a database). The problems were that:</p>
<ul><li>any system-based stuff (location, etc.) had to be plugged into RubyMotion, which had mixed success</li>
<li>the data had to be no-sql, and I was getting the heebies from that</li>
<li>any server-side logic (for gameplay, and especially for Voronoi calculations) had to be in Javascript, which was a major let-down</li></ul>

<p>So, while I got a working prototype from it, I was reaching the limit of my patience working with that stack.</p>

<p>The first weak point I wanted to eliminate was Firebase. While it&#39;s still a pretty cool tool, the second I poked around in <a href="www.supabase.com">Supabase</a> I was sold. We&#39;re talking:</p>
<ul><li>normalized SQL, ahhhh relief</li>
<li>really solid pubsub</li>
<li>and the most best discovery, PostGIS with built-in Voronoi.</li></ul>

<p>As a service, I couldn&#39;t really ask for more for this project.</p>

<p>However, recently at work we&#39;ve been doing a lot of research into AI tools. Claude proved itself quite useful, and in my efforts to understand it&#39;s limitations better, I thought I would put it through a personal project in the holiday off-time.</p>

<p>Well, color me impressed.</p>

<p>After an initial stumbling period (the XCode project still isn&#39;t set up properly, but heck if I&#39;m touching it now), things came together quite quickly. It knows how to make iOS apps. It knows Supabase (at least the 2024 version of Supabase, which is close enough). I was able to recreate the months of work using the original stack in about 20 hours.</p>

<p>So now I&#39;ve had some opportunities to playtest, but really need more. But that&#39;s an issue for another post.</p>

<h3 id="screenshots" id="screenshots">Screenshots</h3>

<p><img src="https://i.snap.as/w91pv96U.png" alt="Turf main menu"/>
<img src="https://i.snap.as/oVSu2MD8.png" alt="Turf game options"/>
<img src="https://i.snap.as/buocDVib.png" alt="Turf waiting room"/>
<img src="https://i.snap.as/QQPTmFhV.png" alt="Turf class selection"/>
<img src="https://i.snap.as/4hn8SmVe.png" alt="Turf class definitions"/>
<img src="https://i.snap.as/h8tp2Uj3.png" alt="Turf in-game"/></p>
]]></content:encoded>
      <guid>https://www.lucashaley.com/turf-redux-1</guid>
      <pubDate>Thu, 29 Jan 2026 22:34:49 +0000</pubDate>
    </item>
    <item>
      <title>Husk, part 1</title>
      <link>https://www.lucashaley.com/husk-part-1?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[Husk splash&#xA;&#xA;Starting another project during underwork downtime&#xA;###### #gamedevelopment #programming&#xA;&#xA;When underemployment provides new challenges.&#xA;&#xA;!--more--&#xA;&#xA;I&#39;ve been underemployed for the last couple of months. It&#39;s been a challenging time -- over the summer I was able to shuttle the kiddos around where they needed to go, and I&#39;ve been able to take my father to his Parkinson&#39;s physical therapy appointments, and I&#39;ve been able to do some database and pipeline work for my brother&#39;s rowing club; but we&#39;re also tucking pretty hard into savings, and in general it&#39;s been eroding my confidence.&#xA;&#xA;So I&#39;ve been poking away at putting together a tiny little game. A return to the basics of what I love about game development. Just coding and doodling in spare time, slowly building it up, without big expectations.&#xA;&#xA;Methodology&#xA;&#xA;In setting out, I wanted to approach it with some guidelines:&#xA;&#xA;Development as rapid as possible. Tackle small problems, none larger than a couple of hours. Have it working at all stages.&#xA;    &#xA;No shooting. I&#39;m just not into it right now.&#xA;    &#xA;Mobile-first design. Most games I play these days are on mobile, so why not make something I would want to play? Further mobile considerations:&#xA;    &#xA;    Portrait orientation. I know it&#39;s generally easier to play in landscape, but sometimes I hate having to shift my grip. I know, I know.&#xA;        &#xA;    Short game loop. Success should be relatively achievable in under two minutes.&#xA;        &#xA;As few magic things as possible. Magic as in things I don&#39;t understand, or rely upon blindly. I&#39;d like to be able to do as much myself as possible, instead of grabbing questionable stuff from asset stores that aren&#39;t quite what I want.&#xA;    &#xA;&#xA;Dragonruby&#xA;&#xA;My first decision was pretty simple: to use Dragonruby game tool kit. I love working in Ruby, and the tool kit gives a real bare-bones set of tools -- basically blitting to the screen, and some rect overlap checks. The simplicity is really refreshing, and quite liberating. But one of the huge things it offers is a crazy strong development ethic -- not only from how it works, but also in the community that surrounds it. The Discord server is super friendly, and rewards small victories and stresses shipping games. And (for now) it&#39;s still small enough that it still feels like a community.&#xA;&#xA;Game Design&#xA;&#xA;In starting, I wasn&#39;t sure what game I wanted to make. I tend to default to top-down games, so I started there. Just getting a square moving around. Done! Okay, what about collisions? Cool -- done. What if we were to bounce off collisions? Or have doors that open to other spaces? Or powerups that change player behaviour?These small, basic steps afforded me quick successes, and allowed my subconscious to poke at gameplay loops. If we&#39;re not shooting things, how about collecting things? What are the potential obstacles to collecting things?&#xA;&#xA;What&#39;d going on with the weird tunneling?&#xA;&#xA;Husk, Part I&#xA;&#xA;The thing that kept coming up in my mind was the ancient game of Crystal Quest. I grew up on a Mac Plus, and there were few games to play -- but Crystal Quest was always a favourite with my brothers and me.&#xA;&#xA;Crystal Quest&#xA;&#xA;Okay, so let&#39;s riff off that game. Some elements I focused on:&#xA;&#xA;Moving around is simple but challenging. The thing is a little slippery.&#xA;    &#xA;There are static and motile obstacles.&#xA;    &#xA;Time is an issue.&#xA;    &#xA;&#xA;So now the game design is looking at having a time limit (which factors nicely into my guidelines), and a little top-down thingie floating around. But it&#39;s also pretty basic. In trying to assemble some sort of &#34;room&#34;, I settled on a simple 640p square shape -- which, for some reason or another, reminded me of the tabletop board game Escape: The Curse of the Temple, an Indiana Jones pastiche, in which you have to explore tiled square rooms and get out before the time runs out. It&#39;s a fun game of rolling a bunch of dice and yelling at each other. Let&#39;s steal from be inspired by it!&#xA;&#xA;One compelling emergent gameplay that came about in stringing rooms together is that all the rooms started to feel the same. Like twisty corridors, all alike. So now there&#39;s a memory factor -- what sequence of doors did I go through to get here? How do I get back in time? With things chasing me? I really_ like this aspect.&#xA;&#xA;Anyways, I&#39;ve been poking away at it. You can check out progress more at the Husk itch.io page.&#xA;&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://i.snap.as/x6fTceG5.png" alt="Husk splash"/></p>

<h5 id="starting-another-project-during-underwork-downtime" id="starting-another-project-during-underwork-downtime">Starting another project during underwork downtime</h5>

<h6 id="gamedevelopment-programming" id="gamedevelopment-programming"><a href="https://www.lucashaley.com/tag:gamedevelopment" class="hashtag"><span>#</span><span class="p-category">gamedevelopment</span></a> <a href="https://www.lucashaley.com/tag:programming" class="hashtag"><span>#</span><span class="p-category">programming</span></a></h6>

<p>When underemployment provides new challenges.</p>



<p>I&#39;ve been underemployed for the last couple of months. It&#39;s been a challenging time — over the summer I was able to shuttle the kiddos around where they needed to go, and I&#39;ve been able to take my father to his Parkinson&#39;s physical therapy appointments, and I&#39;ve been able to do some database and pipeline work for my brother&#39;s <a href="https://rosecityrowing.org">rowing club</a>; but we&#39;re also tucking pretty hard into savings, and in general it&#39;s been eroding my confidence.</p>

<p>So I&#39;ve been poking away at putting together a tiny little game. A return to the basics of what I love about game development. Just coding and doodling in spare time, slowly building it up, without big expectations.</p>

<h2 id="methodology" id="methodology">Methodology</h2>

<p>In setting out, I wanted to approach it with some guidelines:</p>
<ul><li><p>Development as rapid as possible. Tackle small problems, none larger than a couple of hours. Have it working at all stages.</p></li>

<li><p>No shooting. I&#39;m just not into it right now.</p></li>

<li><p>Mobile-first design. Most games I play these days are on mobile, so why not make something I would want to play? Further mobile considerations:</p>
<ul><li><p>Portrait orientation. I know it&#39;s generally easier to play in landscape, but sometimes I hate having to shift my grip. I know, I know.</p></li>

<li><p>Short game loop. Success should be relatively achievable in under two minutes.</p></li></ul></li>

<li><p>As few magic things as possible. Magic as in things I don&#39;t understand, or rely upon blindly. I&#39;d like to be able to do as much myself as possible, instead of grabbing questionable stuff from asset stores that aren&#39;t quite what I want.</p></li></ul>

<h3 id="dragonruby" id="dragonruby">Dragonruby</h3>

<p>My first decision was pretty simple: to use <a href="https://dragonruby.org">Dragonruby</a> game tool kit. I love working in Ruby, and the tool kit gives a real bare-bones set of tools — basically blitting to the screen, and some rect overlap checks. The simplicity is really refreshing, and quite liberating. But one of the huge things it offers is a crazy strong development ethic — not only from how it works, but also in the community that surrounds it. The Discord server is super friendly, and rewards small victories and stresses shipping games. And (for now) it&#39;s still small enough that it still feels like a community.</p>

<h2 id="game-design" id="game-design">Game Design</h2>

<p>In starting, I wasn&#39;t sure what game I wanted to make. I tend to default to top-down games, so I started there. Just getting a square moving around. Done! Okay, what about collisions? Cool — done. What if we were to bounce off collisions? Or have doors that open to other spaces? Or powerups that change player behaviour?These small, basic steps afforded me quick successes, and allowed my subconscious to poke at gameplay loops. If we&#39;re not shooting things, how about collecting things? What are the potential obstacles to collecting things?</p>

<p>What&#39;d going on with the weird tunneling?</p>

<p><img src="https://i.snap.as/78mW20I4.gif" alt="Husk, Part I"/></p>

<p>The thing that kept coming up in my mind was the ancient game of <a href="https://en.wikipedia.org/wiki/Crystal_Quest">Crystal Quest</a>. I grew up on a Mac Plus, and there were few games to play — but Crystal Quest[^1] was always a favourite with my brothers and me.</p>

<p><img src="https://i.snap.as/G0sgDvi5.jpg" alt="Crystal Quest"/></p>

<p>Okay, so let&#39;s riff off that game. Some elements I focused on:</p>
<ul><li><p>Moving around is simple but challenging. The thing is a little slippery.</p></li>

<li><p>There are static and motile obstacles.</p></li>

<li><p>Time is an issue.</p></li></ul>

<p>So now the game design is looking at having a time limit (which factors nicely into my guidelines), and a little top-down thingie floating around. But it&#39;s also pretty basic. In trying to assemble some sort of “room”, I settled on a simple 640p square shape — which, for some reason or another, reminded me of the tabletop board game <a href="https://boardgamegeek.com/boardgame/113294/escape-the-curse-of-the-temple">Escape: The Curse of the Temple</a>, an Indiana Jones pastiche, in which you have to explore tiled square rooms and get out before the time runs out. It&#39;s a fun game of rolling a bunch of dice and yelling at each other. Let&#39;s steal from be inspired by it!</p>

<p>One compelling emergent gameplay that came about in stringing rooms together is that all the rooms started to feel the same. Like twisty corridors, all alike. So now there&#39;s a <em>memory</em> factor — what sequence of doors did I go through to get here? How do I get back in time? With things chasing me? I <em>really</em> like this aspect.</p>

<p>Anyways, I&#39;ve been poking away at it. You can check out progress more at the <a href="https://lucashaley.itch.io/husk">Husk</a> itch.io page.</p>

<p>[^1]: By Patrick Buckland. Who, as I discovered in doing this project, also made another one of my favourites: Carmageddon. What a champion.</p>
]]></content:encoded>
      <guid>https://www.lucashaley.com/husk-part-1</guid>
      <pubDate>Wed, 09 Oct 2024 03:00:00 +0000</pubDate>
    </item>
    <item>
      <title>Turf: Moving Around</title>
      <link>https://www.lucashaley.com/turf-moving-around?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[&#xA;&#xA;Getting closer to the play loop&#xA;###### #gamedevelopment&#xA;&#xA;Another quick test of the game. This time in the city — and I managed to find the bot spawn!&#xA;&#xA;!--more--&#xA;&#xA;div style=&#34;padding:177.87% 0 0 0;position:relative;&#34;iframe src=&#34;https://player.vimeo.com/video/798935707?badge=0&amp;amp;autopause=0&amp;amp;qualityselector=1&amp;amp;playerid=0&amp;amp;app_id=58479&#34; frameborder=&#34;0&#34; allow=&#34;autoplay; fullscreen; picture-in-picture&#34; style=&#34;position:absolute;top:0;left:0;width:100%;height:100%;&#34; title=&#34;Turf moving around&#34;/iframe/divscript src=&#34;https://player.vimeo.com/api/player.js&#34;/script]]&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://i.snap.as/D1zf64Zv.png" alt=""/></p>

<h5 id="getting-closer-to-the-play-loop" id="getting-closer-to-the-play-loop">Getting closer to the play loop</h5>

<h6 id="gamedevelopment" id="gamedevelopment"><a href="https://www.lucashaley.com/tag:gamedevelopment" class="hashtag"><span>#</span><span class="p-category">gamedevelopment</span></a></h6>

<p>Another quick test of the game. This time in the city — and I managed to find the bot spawn!</p>



<p><div style="padding:177.87% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/798935707?badge=0&amp;autopause=0&amp;quality_selector=1&amp;player_id=0&amp;app_id=58479" frameborder="0" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="Turf moving around"></iframe></div></p>
]]></content:encoded>
      <guid>https://www.lucashaley.com/turf-moving-around</guid>
      <pubDate>Wed, 17 May 2023 03:00:00 +0000</pubDate>
    </item>
  </channel>
</rss>