<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>stafford williams</title>
    <description>garage dev</description>
    <link>https://staffordwilliams.com/dev/</link>
    <pubDate>Sun, 01 Nov 2026 10:13:19 GMT</pubDate>
    <lastBuildDate>Sun, 01 Nov 2026 10:13:19 GMT</lastBuildDate>
    <generator>Astro</generator>
    <item>
      <title>garage: Buttons and Hotkeys</title>
      <description>&lt;p&gt;&amp;lt;h2 id=&amp;quot;v0-8&amp;quot;&amp;gt;&amp;lt;time datetime=&amp;quot;2021-02-18&amp;quot;&amp;gt;Feb 18&amp;lt;/time&amp;gt; Buttons and Hotkeys &amp;lt;span&amp;gt;v0.8&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;/p&gt;&lt;p&gt;I &lt;a href=&quot;https://github.com/staff0rd/garage/commit/7188414b21dbc2a2f39ef19d5f1b96eb5c35045d&quot;&gt;deleted&lt;/a&gt; a lot of code that was used for features from the earlier version as it was hurting my brain understanding what was currently needed to run the game. I also switched out the &lt;a href=&quot;https://github.com/staff0rd/garage/commit/7188414b21dbc2a2f39ef19d5f1b96eb5c35045d&quot;&gt;Speed Dial&lt;/a&gt; for normal buttons as it was annoying to have to constantly open it.&lt;/p&gt;&lt;p&gt;I implemented &lt;a href=&quot;https://dev.to/chadsteele/how-to-add-hotkeys-in-react-4610&quot;&gt;Chad Steele&apos;s Hotkey&lt;/a&gt; approach and the three buttons can be used to add commands to the players command queue. _&lt;strong&gt;Edit&lt;/strong&gt;: I use a different approach for key presses in &lt;a href=&quot;/devlog/bookmarklet-builder/v1.0/&quot;&gt;another post&lt;/a&gt;_.&lt;/p&gt;&lt;p&gt;With that, the first section of the roadmap is complete, the game is nowhere near fun, however some ideas have arisen and &lt;a href=&quot;https://github.com/staff0rd/garage/issues/1&quot;&gt;part 2 of the roadmap is now up&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;- &lt;a href=&quot;https://atqu.in/games/dev/garage/v0.8.0/&quot;&gt;garage v0.8&lt;/a&gt; - &lt;a href=&quot;https://github.com/staff0rd/garage&quot;&gt;Source&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Thu, 18 Feb 2021 00:00:00 GMT</pubDate>
      <link>https://staffordwilliams.com/dev/garage/2021-w07/</link>
      <guid isPermaLink="true">https://staffordwilliams.com/dev/garage/2021-w07/</guid>
      <category>garage</category>
    </item>
    <item>
      <title>garage: Pivot &amp; Go Anywhere</title>
      <description>&lt;p&gt;&amp;lt;h2 id=&amp;quot;v0-7&amp;quot;&amp;gt;&amp;lt;time datetime=&amp;quot;2021-01-12&amp;quot;&amp;gt;Jan 12&amp;lt;/time&amp;gt; Pivot &amp;amp;amp; Go Anywhere &amp;lt;span&amp;gt;v0.7&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;/p&gt;&lt;p&gt;I decided to thin the project down and focus more on earlier game mechanics. I&apos;ve raised the most &lt;a href=&quot;https://github.com/staff0rd/garage/issues/1&quot;&gt;basic of roadmaps&lt;/a&gt; and begun implementation. After cleaning up a little of the existing codebase and removing &lt;a href=&quot;https://github.com/staff0rd/garage/blob/d0784dbcb3dc95be2fd6b2f7f2a0795e1045c09e/src/App.tsx#L55-L57&quot;&gt;features I don&apos;t want to focus on now&lt;/a&gt;, I feel like I have something I can iterate on.&lt;/p&gt;&lt;p&gt;The canvas represents now only a player-influenced unit, and the means to direct it via commands. Only one command exists for the moment: Go Anywhere - and it does precisely that.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://atqu.in/games/dev/garage/v0.7.0/&quot;&gt;Play garage v0.7&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Tue, 12 Jan 2021 00:00:00 GMT</pubDate>
      <link>https://staffordwilliams.com/dev/garage/2021-w02/</link>
      <guid isPermaLink="true">https://staffordwilliams.com/dev/garage/2021-w02/</guid>
      <category>garage</category>
    </item>
    <item>
      <title>garage: Graph visualisation</title>
      <description>&lt;p&gt;&amp;lt;h2 id=&amp;quot;v0-6&amp;quot;&amp;gt;&amp;lt;time datetime=&amp;quot;2020-08-31&amp;quot;&amp;gt;Aug 31&amp;lt;/time&amp;gt; Graph visualisation &amp;lt;span&amp;gt;v0.6&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;/p&gt;&lt;p&gt;I need to build out some supporting mechanics, like a tech tree. I want to procedurally generate it, but it&apos;s difficult with no visualisation. Instead rolling my own, I found one &lt;a href=&quot;https://github.com/anvaka/ngraph.pixi&quot;&gt;already existed&lt;/a&gt; for the graph library I&apos;ve integrated. A &lt;a href=&quot;https://github.com/anvaka/ngraph.pixi/pulls?q=is%3Apr+author%3Astaff0rd&quot;&gt;couple of PRs&lt;/a&gt; later and I can pass my own instance of PIXI to the visualiser.&lt;/p&gt;&lt;p&gt;To demonstrate this I&apos;ve passed the underlying graph that represents the garage&apos;s floor plan to the visualiser. It also supports zooming &amp;amp; dragging.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://atqu.in/games/dev/garage/v0.6.1/&quot;&gt;Play garage v0.6&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Mon, 31 Aug 2020 00:00:00 GMT</pubDate>
      <link>https://staffordwilliams.com/dev/garage/2020-w36/</link>
      <guid isPermaLink="true">https://staffordwilliams.com/dev/garage/2020-w36/</guid>
      <category>garage</category>
    </item>
    <item>
      <title>garage: Ordering parts, Notifications</title>
      <description>&lt;p&gt;&amp;lt;h2 id=&amp;quot;v0-4&amp;quot;&amp;gt;&amp;lt;time datetime=&amp;quot;2020-08-25&amp;quot;&amp;gt;Aug 25&amp;lt;/time&amp;gt; Ordering parts &amp;lt;span&amp;gt;v0.4&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;/p&gt;&lt;p&gt;I want to have people walking around the garage performing tasks, like collecting resources and building things. The player won&apos;t have direct control of these people, but will be able to influence their priorities. I&apos;ll need &lt;a href=&quot;https://en.wikipedia.org/wiki/Pathfinding&quot;&gt;pathfinding&lt;/a&gt; and way to manage where things are on the screen. I&apos;ve added &lt;a href=&quot;https://github.com/anvaka/ngraph&quot;&gt;nGraph&lt;/a&gt; to solve this which I find has a simple API that Just Works™. This also required a refactor to the drawing system so nodes could be drawn indepently from one another.&lt;/p&gt;&lt;p&gt;I implemented buying _parts_ and, upon purchasing, the Orders screen is populated with the expected delivery and it&apos;s arrival time. When the arrival time reaches zero, the parts ordered appear in the drop-off zone. The first idea of currency is implemented and the buy button is disabled when funds are not sufficient. Additionally, should a player cancel an incoming delivery, they&apos;ll be refunded only 75% of it&apos;s original cost.&lt;/p&gt;&lt;p&gt;I hit an issue in pixi.js where a single &lt;code&gt;PIXI.Graphics&lt;/code&gt; I was drawing to was displaying the wrong color after a call to &lt;code&gt;beginFill&lt;/code&gt;. The issue was sporadic and I was unable to isolate it outside of my code in an &lt;a href=&quot;https://en.wikipedia.org/wiki/Minimal_working_example&quot;&gt;Minimum Working Example&lt;/a&gt;. The workaround was to split the draws up between &lt;code&gt;PIXI.Graphics&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://atqu.in/games/dev/garage/v0.4.0/&quot;&gt;Play garage v0.4&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;lt;h2 id=&amp;quot;v0-5&amp;quot;&amp;gt;&amp;lt;time datetime=&amp;quot;2020-08-30&amp;quot;&amp;gt;Aug 30&amp;lt;/time&amp;gt; Notifications &amp;lt;span&amp;gt;v0.5&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;/p&gt;&lt;p&gt;I needed stacking toasts/snackbars for a bit more interaction so I turned to &lt;a href=&quot;https://github.com/iamhosseindhv/notistack&quot;&gt;notistack&lt;/a&gt; and orders enroute are now displayed with a progress bar - they disappear when the order arrives. Visibility of the cash a player has to spend is now visible via &lt;a href=&quot;https://material-ui.com/components/app-bar/&quot;&gt;App Bar&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://atqu.in/games/dev/garage/v0.5.1/&quot;&gt;Play garage v0.5&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Sun, 30 Aug 2020 00:00:00 GMT</pubDate>
      <link>https://staffordwilliams.com/dev/garage/2020-w35/</link>
      <guid isPermaLink="true">https://staffordwilliams.com/dev/garage/2020-w35/</guid>
      <category>garage</category>
    </item>
    <item>
      <title>garage: Create React App, Pixi floor plan, Material-UI</title>
      <description>&lt;p&gt;&amp;lt;h2 id=&amp;quot;v0-1&amp;quot;&amp;gt;&amp;lt;time datetime=&amp;quot;2020-08-20&amp;quot;&amp;gt;Aug 20&amp;lt;/time&amp;gt; Create React App &amp;amp;amp; Github Actions &amp;lt;span&amp;gt;v0.1&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;/p&gt;&lt;p&gt;It&apos;s come around to that time where I feel I need to invest countless hours in writing a game again. I&apos;m going to micro blog it as I go. It starts with &lt;a href=&quot;https://github.com/facebook/create-react-app&quot;&gt;create-react-app&lt;/a&gt; and a github workflow that will build it and push updates to S3. Here it is, it&apos;s not much, but it had to start somewhere.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://atqu.in/games/dev/garage/v0.1.5/&quot;&gt;Play garage v0.1&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;lt;h2 id=&amp;quot;v0-2&amp;quot;&amp;gt;&amp;lt;time datetime=&amp;quot;2020-08-22&amp;quot;&amp;gt;Aug 22&amp;lt;/time&amp;gt; Pixi floor plan &amp;lt;span&amp;gt;v0.2&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;/p&gt;&lt;p&gt;If you didn&apos;t guess by the url already, the game (for now) is called garage. In this game, you&apos;ll have a garage/shed, and you&apos;re going to make stuff in it. For a while, you&apos;re going to need your imagination. I&apos;ve added &lt;a href=&quot;https://www.pixijs.com/&quot;&gt;pixi.js&lt;/a&gt; to the project and rendered our first garage. You can render a new one by refreshing the page. And look what happens to the cursor when you move it over the garage...&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://atqu.in/games/dev/garage/v0.2.3/&quot;&gt;Play garage v0.2&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;lt;h2 id=&amp;quot;v0-3&amp;quot;&amp;gt;&amp;lt;time datetime=&amp;quot;2020-08-23&amp;quot;&amp;gt;Aug 23&amp;lt;/time&amp;gt; Refactoring &amp;amp;amp; Material-UI &amp;lt;span&amp;gt;v0.3&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;/p&gt;&lt;p&gt;A number of changes over the last couple of days increased the complexity of the project a bit. For one I hugely refactored an old shared library and converted it to a private npm package - this had no noticeable effect on the game but will either save me time in the future for this game or others. To hasten UI development I ninja&apos;d &lt;a href=&quot;https://material-ui.com/&quot;&gt;Material-UI&lt;/a&gt; into the mix with a &lt;a href=&quot;https://material-ui.com/components/speed-dial/&quot;&gt;Speed Dial&lt;/a&gt; and animated &lt;a href=&quot;https://material-ui.com/components/dialogs/&quot;&gt;Dialog&lt;/a&gt; offering the first real bit of user-interaction. I have fond memories of &lt;a href=&quot;&amp;lt;https://en.wikipedia.org/wiki/Street_Rod_(video_game&quot;&gt;Street Rod&lt;/a&gt;&amp;gt;) and searching the local paper in that game for parts. Likewise, in _garage_, the player will be able to buy and sell in a similar fashion. Parts to purchase will refresh periodically and currently do so every 10 seconds for demonstration purposes. Even at this early stage, state became difficult to manage, so integrated &lt;a href=&quot;https://redux-toolkit.js.org/&quot;&gt;redux&lt;/a&gt;, tho I&apos;m not sure how suited it is to games.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://atqu.in/games/dev/garage/v0.3.3/&quot;&gt;Play garage v0.3&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Sun, 23 Aug 2020 00:00:00 GMT</pubDate>
      <link>https://staffordwilliams.com/dev/garage/2020-w34/</link>
      <guid isPermaLink="true">https://staffordwilliams.com/dev/garage/2020-w34/</guid>
      <category>garage</category>
    </item>
  </channel>
</rss>
