Jekyll2023-10-29T16:47:49+00:00/feed.xmlYour awesome titleWrite an awesome description for your new site here. You can edit this line in _config.yml. It will appear in your document head meta (for Google search results) and in your feed.xml site description.Words with Joe (Preview) Released2023-09-24T00:00:00+00:002023-09-24T00:00:00+00:00/gamedev/2023/09/24/words-with-joe-preview-is-live<p><a href="https://games.joehall.net/wordswithjoe/">Words with Joe (Preview)</a> has been released.</p>
<h3 id="version-010-24sep2023">Version 0.1.0, 24Sep2023</h3>
<ul>
<li>feature complete (minus AI)</li>
</ul>
<p><strong>Known Issues</strong></p>
<ul>
<li>missing CPU opponent</li>
<li>missing final polish (menus, analytics, settings, …)</li>
</ul>
<p>Words with Joe was designed mobile-first, so it should work well on phone and desktop. There are even desktop applications for Windows and MacOS (not yet released).</p>
<blockquote>
<p><strong>NOTE:</strong> Touch is not enabled in this release, so mobile isn’t playable just yet. It just renders as expected.</p>
</blockquote>
<p><img src="/assets/images/signature-joe.png" alt="Joe's Signature" /></p>groundh0gWords with Joe (Preview) has been released.Word Nerd v1.4.3 Released2023-04-08T00:00:00+00:002023-04-08T00:00:00+00:00/gamedev/2023/04/08/word-nerd-version-1.4-is-live<p><a href="https://games.joehall.net/wordnerd/">Word Nerd!</a> has been updated to reflect the great input that I’ve received from the early adopters. And it has been moved to it’s new “forever” home.</p>
<h3 id="version-143-12apr2023">Version 1.4.3, 12Apr2023</h3>
<ul>
<li>adds fixes for highlighting yellow/green tiles</li>
<li>adds word definiton to game over screen</li>
<li>adds analytics reset to menu</li>
<li>adds fixes for heat map on analytics screen</li>
<li>adds several bug fixes</li>
<li>adds logic to mimic Wordle’s tile indicators for duplicate letters</li>
<li>adds two new lifelines
<ol>
<li>undo last guess (single-use per game)</li>
<li>reveal letter (single-use per game)</li>
</ol>
</li>
</ul>
<p><strong>Known Issues</strong></p>
<ul>
<li>easy, easier, easiest dictionaries need curating</li>
<li>no real intro / tutorial process for new players</li>
</ul>
<p>Word Nerd was designed mobile-first, so it should work well on phone and desktop. There are even desktop applications for Windows and MacOS (not yet released).</p>
<p><img src="/assets/images/signature-joe.png" alt="Joe's Signature" /></p>groundh0gWord Nerd! has been updated to reflect the great input that I’ve received from the early adopters. And it has been moved to it’s new “forever” home.Word Nerd v1.3.0 Released2023-04-04T00:00:00+00:002023-04-04T00:00:00+00:00/gamedev/2023/04/04/word-nerd-version-1.3-is-live<p><a href="https://games.joehall.net/wordnerd">Word Nerd!</a> has been updated to reflect the great input that I’ve received from the early adopters.</p>
<h3 id="version-130-04apr2023">Version 1.3.0, 04Apr2023</h3>
<ul>
<li>adds save settings</li>
<li>adds save analytics on game over</li>
<li>adds analytics review screen</li>
<li>adds button to reset statistics</li>
<li>adds tweaks to mobile styling to support more phones</li>
<li>adds game code validation, when code is provided</li>
<li>adds easier sharing of game code via web link</li>
<li>menu item to reset settings to defaults</li>
<li>adds tweaks to mobile styling to support more phones</li>
<li>adds player rankings from ‘Newbie’ to ‘Word Nerd’</li>
<li>adds lots of visual bells and whistles</li>
</ul>
<p><strong>Known Issues</strong></p>
<ul>
<li>easy, easier, easiest dictionaries need curating</li>
<li>dates on heat map aren’t synced with today</li>
<li>not all menu items are implemented</li>
</ul>
<p>Word Nerd was designed mobile-first, so it should work well on phone and desktop. There are even desktop applications for Windows and MacOS (not yet released).</p>
<p><img src="/assets/images/signature-joe.png" alt="Joe's Signature" /></p>groundh0gWord Nerd! has been updated to reflect the great input that I’ve received from the early adopters.Word Nerd v1.2.0 Released2023-03-28T00:00:00+00:002023-03-28T00:00:00+00:00/gamedev/2023/03/28/word-nerd-version-1.2-is-live<p><a href="https://games.joehall.net/wordnerd">Word Nerd!</a> has been updated to reflect the great input that I’ve received from the early adopters.</p>
<p><strong>Version 1.2.0, 28Mar2023</strong></p>
<ul>
<li>adds game menu [draft]</li>
<li>adds toaster notification for share button</li>
<li>adds tile animations</li>
<li>adds colors for special keyboard keys</li>
<li>adds 4-state keyboard highlighting</li>
<li>adds nerd glasses to avatars</li>
<li>adds minor content updates</li>
</ul>
<p>Word Nerd was designed mobile-first, so it should work well on phone and desktop. There are even desktop applications for Windows and MacOS (not yet released).</p>
<p><img src="/assets/images/signature-joe.png" alt="Joe's Signature" /></p>groundh0gWord Nerd! has been updated to reflect the great input that I’ve received from the early adopters.Word Nerd v1.1.0 Released2023-03-26T00:00:00+00:002023-03-26T00:00:00+00:00/gamedev/2023/03/26/word-nerd-version-1.1-is-live<p>I don’t know about you, but I love the game, Wordle, hosted by the NY Times. Maybe “obsessed” is a better word. It’s so dang addicting. And it’s equally as frustrating since you can only play once a day. So, I decided to make a clone of it, with a few new features.</p>
<p>Enter “<a href="https://games.joehall.net/wordnerd">Word Nerd!</a>”, stage left. It has configurable levels of difficulty. It supports themeing and high-contrast modes (like Wordle). And it allows you to use the scrabble-like word lists for validation (limited to 5-letter words, minus a simple naughty word filter).</p>
<p><img src="/assets/images/blog/word-nerd-themes.png" style="width:512px;" /></p>
<p>Wordle’s method of playing against your friends is that you and your friends have to play the same word on the same day. With Word Nerd, you can play as many words per day as you’d like, so there needs to be some other method of pitting your friends against you. Word Nerd generates a unique token for each word, so you can give that token to your opponent (via the “Share” button) at any time to challenge them.</p>
<p><img src="/assets/images/blog/word-nerd-shared-games.png" style="width:512px;" /></p>
<p>Word Nerd was designed mobile-first, so it should work well on phone and desktop. There are even desktop applications for Windows and MacOS (not yet released).</p>
<p><img src="/assets/images/signature-joe.png" alt="Joe's Signature" /></p>groundh0gI don’t know about you, but I love the game, Wordle, hosted by the NY Times. Maybe “obsessed” is a better word. It’s so dang addicting. And it’s equally as frustrating since you can only play once a day. So, I decided to make a clone of it, with a few new features.TDD and Code Coverage2022-12-26T00:00:00+00:002022-12-26T00:00:00+00:00/code/2022/12/26/code-coverage<p>I’ve always had a bad taste in my mouth for code coverage tools. It just feels like it encourages developers to write tests solely to trigger code paths in an effort to reach 100% coverage. Even if those are low-quality, do nothing tests.</p>
<p>I’ve seen the value on my current project, though. I’m taking the opposite stance now. When the coverage shows that a given path isn’t executed, I reevaluate the need for that code. I tend to write very defensive code. My philosophy has always been, “If it can happen, the code should account for it.”</p>
<p>Using a strongly-typed language like TypeScript makes a lot of that code unnecessary, though. If designed properly, the compiler will ensure that a parameter for your method isn’t null, or empty, or undefined, or of the wrong type.</p>
<p>If a library you use catches exceptions and only returns valid values (some of which indicate failure), then trying to catch errors that will never occur is just adding more unreferenced code. There are other examples, but the basic idea is that I’m using code coverage to keep myself from writing dead code. 100% coverage would be ideal, but I don’t want to satisfy a test without evaluating why it was failing in the first place.</p>
<p>Of course, if I were truly following TDD principles, I’d never write dead, defensive code paths in the first place. I’ve been coding for 30+ years, but I still have a lot of growing to do as a developer. That’s part of what draws me to the craft. You’re always learning.</p>
<p><img src="/assets/images/signature-joe.png" alt="Joe's Signature" /></p>groundh0gI’ve always had a bad taste in my mouth for code coverage tools. It just feels like it encourages developers to write tests solely to trigger code paths in an effort to reach 100% coverage. Even if those are low-quality, do nothing tests.Upcoming Changes for GameDevUtils.com, 2023/Q12022-12-26T00:00:00+00:002022-12-26T00:00:00+00:00/gamedev/2022/12/26/upcoming-changes-for-gamedevutils-com-2023-q1<p>I’ve been working on my 2016 sprite packing tool (again) recently. The current version is web-only, static HTML so that your assets stay on your machine. I don’t need to see them, or pay for the server resources to process them. It’s cross-browser and cross-platform, so you can work on whatever platform suits your project best. To see a list of the current features, click the link to <a href="http://gamedevutils.com/">the current version</a>, then click the “Show Features” button, next to the “Sprite Sheets” tool.</p>
<p><img src="/assets/images/blog/2016-gamedevutils-sheets.png" style="width:512px;" /></p>
<p>One cool feature of the existing tool is that the project file contains everything you need to build your sprite sheet. This includes project options and all project assets. Sharing the project is as easy as handing the (single) file to a teammate. This is a goal shared by all future releases.</p>
<p>The project files support both compressed and uncompressed modes. The uncompressed project file is a standard JSON object - human-readable and easily analyzed or modified when scripting your build pipeline. The compressed project file is a standard ZIP file containing the same JSON when uncompressed.</p>
<h2 id="the-new-version-coming-soon">The New Version (Coming Soon)</h2>
<p>The new version of the sprite packer still supports a web-based application that’s cross-browser and cross-platform, but it also adds desktop applications for Windows, MacOS, and Linux (<a href="https://www.electronjs.org/">using ElectronJS</a>), and command-line applications for the same (<a href="https://nodejs.org/">using NodeJS</a>). The command-line apps allow for build pipelines, and it’s something I’ve wanted to add for some time now.</p>
<h2 id="the-new-features">The New Features</h2>
<p>The original version was written in vanilla Javascript, using <a href="https://getbootstrap.com/">Bootstrap</a> and <a href="https://jquery.com/">jQuery</a>. The new version is written in <a href="https://www.typescriptlang.org/">Typescript</a>, <a href="https://reactjs.org/">using ReactJS</a> for the GUI, and is <a href="https://jestjs.io/">backed by tests</a>. Some new features include:</p>
<ul>
<li>attempts to be 100% backwards compatible when opening old projects</li>
<li>improves performance when packing sprites</li>
<li>improves logging; adds several new logging levels</li>
<li>validates selected options, rather than handling conflicts silently</li>
<li>adds the Guillotine sprite packing algorithm</li>
<li>adds Shelf and Skyline sprite packing algorithms</li>
<li>adds several new sorting algorithms</li>
<li>infers which heuristic (packer options) to use, based on the selected sort method</li>
<li>allows for selecting packing heuristic to be used (overrides inferred heuristic)</li>
<li>adds improved / intelligent trimming for animated GIF frames</li>
<li>adds documentation, supports selecting docs version, defaults to latest</li>
<li>adds a desktop application for Windows, MacOS, and Linux</li>
<li>adds a command-line tool for Windows, MacOS, and Linux</li>
<li>still deciding, but will likely support options that the current version ignores:
<ul>
<li>rotated sprites</li>
<li>sprite aliasing (duplicate sprite detection)</li>
<li>include @2x sprites</li>
</ul>
</li>
</ul>
<blockquote>
<p><strong>NOTE:</strong> This is my first implementation of the Guillotine packing algorithm. I always use JoeRects (my implementation of MaxRects) for my projects, but Guillotine is supposed to be a superior packing method. I’ll be kicking the tires on it as you are doing the same. The Shelf and Skyline algorithmms are provided for completeness. I don’t use them, but you may have a scenario where they’re useful in your workflow.</p>
<p><strong>NOTE:</strong> The “Include @2x” option expects the full size sprites, then produces a sheet with @2x sprites, plus a second sheet with sprites at 1/2 their original dimensions.</p>
</blockquote>
<h2 id="the-node-module">The Node Module</h2>
<p>The core functionality of these applications is encapsulated as a Node module. It’s not yet published, but it will be shortly after the release of the next version of the tool. Packaging the core lib as a Node module allows me to include the same code in the web, desktop, and command-line applications. But you may find it useful too.</p>
<h2 id="the-documentation">The Documentation</h2>
<p>The new release of the <a href="http://gamedevutils.com/webapps/sheets/">GameDevUtils.com sprite packer</a> will provide detailed documentation. Future releases of the tool will be versioned along with the docs. While the next release will be English-only, I intend to support localization in a future release.</p>
<h2 id="how-you-can-help">How You Can Help</h2>
<p>If you would like to report an issue or request a new feature, click one of the following links.</p>
<ul>
<li><a href="https://github.com/GameDevUtils/support/issues/new?template=feature_request.md">request a new feature</a></li>
<li><a href="https://github.com/GameDevUtils/support/issues/new?template=bug_report.md">report a bug in the tool</a></li>
<li><a href="https://github.com/GameDevUtils/support/issues/new?template=doc_report.md">report an issue with the documentation</a></li>
</ul>
<p>If you’re looking to contribute in a more technical capacity, clone the repo, create a branch for your changes, and open a pull request against <a href="https://github.com/GameDevUtils/gdu-sheets">this repository</a>.</p>
<p>Thanks for reading this far!</p>
<p><img src="/assets/images/signature-joe.png" alt="Joe's Signature" /></p>groundh0gI’ve been working on my 2016 sprite packing tool (again) recently. The current version is web-only, static HTML so that your assets stay on your machine. I don’t need to see them, or pay for the server resources to process them. It’s cross-browser and cross-platform, so you can work on whatever platform suits your project best. To see a list of the current features, click the link to the current version, then click the “Show Features” button, next to the “Sprite Sheets” tool.New Logo; New Status Update2022-10-31T00:00:00+00:002022-10-31T00:00:00+00:00/news/2022/10/31/halloween-update-to-site<p>I didn’t realize how long it had been since my last post to this site. I’ve had some health issues, but I’ve been plugging away at my hobby code the whole time. I need to get some of that work wrapped up so I can show it off here.</p>
<p>This morning, I made a personal logo for myself. I’ve designed plenty of logos for my sites and projects, but I’ve only ever done avatars for my social media presence, family, and friends. I hope you like it. The idea was loosely inspired by the macOS icon, and spurred on by an interaction with a waiter at the local Thai restaurant.</p>
<p><img src="/assets/images/logo-256x256.png" alt="joe-hall-personal-icon" /></p>
<p>I have 4 or 5 active projects I’m juggling now, but when I’m done pushing this post to the blog, I’ll be returning to my work on <a href="http://gamedevutils.com/">http://gamedevutils.com/</a>. It’s a massive rewrite, but I’ve made some good progress.</p>
<p><img src="/assets/images/signature-joe.png" alt="Joe's Signature" /></p>groundh0gI didn’t realize how long it had been since my last post to this site. I’ve had some health issues, but I’ve been plugging away at my hobby code the whole time. I need to get some of that work wrapped up so I can show it off here.Abby’s 2nd Missions Trip2018-07-10T00:00:00+00:002018-07-10T00:00:00+00:00/family/2018/07/10/abby-2nd-mission-trip<p>My middle kid, Abigail, just wrapped up her second missions trip to Honduras. Her grandparents were there for the first trip, so I didn’t worry nearly as much as I did this time around. She’s safely back home now, and I couldn’t be more proud.</p>
<p><img src="/assets/images/signature-joe.png" alt="Joe's Signature" /></p>
<p><img src="/assets/images/blog/abby-honduras-2018.jpg" style="width:512px;" /></p>groundh0gMy middle kid, Abigail, just wrapped up her second missions trip to Honduras. Her grandparents were there for the first trip, so I didn’t worry nearly as much as I did this time around. She’s safely back home now, and I couldn’t be more proud.2018 #gamedev Camp2018-07-08T00:00:00+00:002018-07-08T00:00:00+00:00/gamedev/2018/07/08/gamedev-camp-2018<p>Since 2011, I’ve taught a game programming camp for high school kids every summer. You can see the previous students and their projects at <a href="http://moreoncode.com/camps/">http://moreoncode.com/camps/</a>.</p>
<p>The 2018 camp was a lot of fun. I never know what the game will be ahead of time. That’s driven completely by the students. This go around, they made a variation of the classic Connect Four game, complete with exploding pieces (and several other power-ups).</p>
<p>I’ll post more details (and the gameplay video) on the <code class="language-plaintext highlighter-rouge">moreoncode.com</code> site sometime soon.</p>
<p><img src="/assets/images/signature-joe.png" alt="Joe's Signature" /></p>
<p><img src="/assets/images/blog/gamedev-camp-students-2018.jpg" style="width:512px;" /></p>
<p>(I’m the tall, handsome devil in the middle.)</p>groundh0gSince 2011, I’ve taught a game programming camp for high school kids every summer. You can see the previous students and their projects at http://moreoncode.com/camps/.