<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.3.4">Jekyll</generator><link href="https://rae.wtf/feed.xml" rel="self" type="application/atom+xml" /><link href="https://rae.wtf/" rel="alternate" type="text/html" /><updated>2026-10-10T01:43:23+00:00</updated><id>https://rae.wtf/feed.xml</id><title type="html">rae.wtf</title><entry><title type="html">Project Pesto…is RowBot Rally 2!</title><link href="https://rae.wtf/blog/project-pesto-is-rowbot-rally-2" rel="alternate" type="text/html" title="Project Pesto…is RowBot Rally 2!" /><published>2026-09-09T00:00:00+00:00</published><updated>2026-09-09T00:00:00+00:00</updated><id>https://rae.wtf/blog/project-pesto-is-rowbot-rally-2</id><content type="html" xml:base="https://rae.wtf/blog/project-pesto-is-rowbot-rally-2"><![CDATA[<p>Um. Hi! What’s up?</p>

<p>OK maybe I should just get right to it.</p>

<h1 id="rowbot-rally-2"><em>RowBot Rally 2</em>!!</h1>

<p>AAAAAAHH CAN YOU BELIEVE IT?!?</p>

<p>It’s a sequel to my award-winning Playdate game — the really big one, about rabbits, and robots, and racing boats. Except this time, the stakes are higher, the boats are flyer, and the bunnies are…skyward?</p>

<p>OK, first off, first off. Watch the trailer:</p>

<center>
	<iframe class="image" style="width: 100%; aspect-ratio: 16 / 9;" src="https://www.youtube.com/embed/NG569tlnZbo" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>
</center>

<p>…then go wishlist it, in Playdate Catalog:</p>

<p><a href="https://play.date/games/rowbot-rally-2" class="button">Wishlist <em>RowBot Rally 2</em> in Catalog</a></p>

<p>…and um, I can’t blame you if you’re a bit confused. Let’s break the topic down a bit.</p>

<h1 id="whats-rowbot-rally">What’s <em>RowBot Rally</em>?</h1>

<p><em>RowBot Rally</em> is a big game I made for the Playdate. In it, you play as a bunny, eager to anticipate in the Fish Bowl; a yearly boating competition that sparks excitement through the town. However, the nefarious Robo-X has been manufacturing so-called “RowBots”, which have been progressively taking over the entire competition.</p>

<p>Armed with an abandoned scrapyard RowBot of your own, you set out to prove that organic beings can still win the Fish Bowl! …After you get a little sidetracked, though, the goal changes. Have you got what it takes to track down the Shark Boss, stop Robo-X’s plans, and give the Fish Bowl back to the people?! …Well, you’ve gotta play the game to find out! ;P</p>

<p><img src="/blog/images/2026-09-09-1.png" alt="Key art for RowBot Rally — the bunny/RowBot duo are tandem-rowing a boat down a river, back to back. Behind them as they exit the jungle are a bunch of robots who don't seem as kind-natured. In the far background, a very tall tower looms ominously against a red sky, with robot drones patrolling its perimeter." /></p>

<p>I started working on the game in April of 2023, and (finally) launched it in December of 2024. Since then, a lot of people have loved it, a lot of people have…less than loved it; it’s won two Playdate Community Awards (and got nominated for a couple more!), and has sold nearly 1,400 copies to date. Thank you to everybody who’s supported the game so far!</p>

<p>Hey, if the game sounds appealing to you (and you’ve got a Playdate of your own), you can buy the game in Catalog right now!:</p>

<p><a href="https://play.date/games/rowbot-rally" class="button">Buy <em>RowBot Rally</em> in Catalog</a></p>

<p><em>(In fact, to celebrate the big announcement today, the game’s currently having its biggest sale yet at the time of writing! Down from an MSRP of $15, you can pick it up for just $8(!) until 09.16.2026. It’s a perfect time to get into the game, ahead of the sequel!)</em></p>

<h1 id="oknow-the-sequel">OK…now, the sequel?</h1>

<p>RIGHT! The sequel.</p>

<p>…The sequel!!!</p>

<p>I don’t wanna get into too many specifics right now. But it plays a lot alike, except it feels muuuch nicer. It’s got a brand-new story, which — just like the first game — is told through exceedingly-cute, hand-animated cutscenes. There might also be a few fun surprises and extras sprinkled in along the way?</p>

<p>It’s definitely my biggest game project yet, by far. It’s a story that I’ve been itching to tell from the moment I finished off the first game, and I’m super excited to be able to tell it. This game, just like everything else I do, is 100% human-made (or, moth-made, at least) — there isn’t a single shred of AI in the art, the code, the ideation, or anything else.<sup id="fnref:1"><a href="#fn:1" class="footnote" rel="footnote" role="doc-noteref">1</a></sup></p>

<h1 id="what-of-project-pesto">What of “Project Pesto”?</h1>

<p>You might have heard one of my many teasings about a “Project Pesto”<sup id="fnref:2"><a href="#fn:2" class="footnote" rel="footnote" role="doc-noteref">2</a></sup> in the last year or so. That’s this! I started working on it in an official capacity last June — and frankly, I’m surprised I was able to keep a secret that long…well, an open secret, at least.</p>

<p>With thanks to everybody reporting from Team PESTO, who I was able to confide in while I had to keep this thing a big surprise. Double-triple-quadruple thanks to everybody at Panic, who’s already been providing immeasurable support to help the game out, and has been doing so since the beginning. The original game, nor this one, would be where it is today without them.</p>

<h1 id="alright-got-any-release-info">Alright! Got any release info?</h1>

<p>I hope — <em>hope!</em> — to release the game some time next year. I’ve been absolutely eviscerating myself with prototypes lately — and MAGFest planning’s probably gonna make a mess of this final quarter LOL — but I’d love to make this game the best that it can possibly be.</p>

<p>It is, of course, planned for release on Playdate. Again, you can wishlist the game in Playdate Catalog, to be notified via e-mail if anything cool happens with it:</p>

<p><a href="https://play.date/games/rowbot-rally-2" class="button">Wishlist <em>RowBot Rally 2</em> in Catalog</a></p>

<p>I also plan to launch the game on personal computers as well! Full-color, native builds; for your Windows, macOS, or Linux computer. I’ve been slowly perfecting my Playdate/LÖVE2D cross-compilation bindings, and it’s shaping up to be something absolutely magical.</p>

<p>The itch.io page is live right now, and the game will be released over there day-and-date with the Playdate version:</p>

<p><a href="https://raewtf.itch.io/rowbot-rally-2" class="button"><em>RowBot Rally 2</em> on Itch.io</a></p>

<p>…you devoted blog readers will also be the first to know: I plan to put up a Steam page for the game, too, as soon as I can. I hope you look forward to wishlisting it there, as well!</p>

<h1 id="ok">OK!</h1>

<p>Whew! That’s all I’ve got to talk about right now. I should do some more call-to-action, huh? Buy <em>RowBot Rally</em> on sale! Wishlist <em>RowBot Rally 2</em> wherever you get your games! Wish me luck as I enter this death spiral of public development! AAAAHH!!</p>

<p>Seriously! Thank you all so much for stickin’ with me. It’s so surreal for me to be writing all this, publicly showing off this really cool thing that I’ve been keeping a secret for so long, atop all the other stuff I’ve been busy with in the last year. I really appreciate all of you folks who are absolutely amped for every new thing I release, and I don’t plan to stop making cool stuff any time soon.</p>

<p><img src="/blog/images/2026-09-09-2.png" alt="Key art for RowBot Rally 2 — the bunny/RowBot duo are at the helm of a large spaceship, with two rowing oars sticking out the sides. It's blasting away from the planet they once called home — as they pummel through outer space, they're staring off into the distance. In the reflection of the rocket's windshield, you can make out the moon, eclipsing the sun, with an ominous structure atop it." /></p>

<p>Bye now! 🌿</p>

<hr />

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1">
      <p>SORRY I KNOW PUTTING A FOOTNOTE THERE IS SCARY. I just wanted to mention, if you hadn’t already noticed; that <em>RowBot</em> itself is a pretty huge allegory for the idea that robots participating in recreational activities is pretty damn stupid. Art is inherently human! (And code is art.) Regardless, I love every part of the creative process — so long as I’m still living and breathing, I’m gonna be creating; and I’m gonna be using my own two paws to do it. <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:2">
      <p>…Okay, real quick: you’re probably also wondering what the codename even means. “Project Pesto”. Pesto. Commonly made in (and named from the same Latin root as!) the mortar and pestle. Who’s got one of those? The moon rabbit. And I’m Putting This Fuckin’ Rabbit On The Moon. Thanks for stopping by. <a href="#fnref:2" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name></name></author><category term="rowbot rally 2" /><summary type="html"><![CDATA[Um. Hi! What’s up?]]></summary></entry><entry><title type="html">HEXA — Too Much News!</title><link href="https://rae.wtf/blog/hexa-too-much-news" rel="alternate" type="text/html" title="HEXA — Too Much News!" /><published>2026-05-13T00:00:00+00:00</published><updated>2026-05-13T00:00:00+00:00</updated><id>https://rae.wtf/blog/hexa-too-much-news</id><content type="html" xml:base="https://rae.wtf/blog/hexa-too-much-news"><![CDATA[<p>Long time no…blog! I’m writing in today because I wanna have a single space to yell about all the cool stuff that’s happening with my really good logic-puzzle game, HEXA, today. There are two major things, so let’s start with the biggest…</p>

<h1 id="hexanow-available-on-steam"><em>HEXA</em>…now available on Steam!</h1>

<p>I know, right?! My first release for personal computers, now on the leading platform for personal computer games. It’s kind of a trip! I even got to make a schmancy trailer for the occasion. You can watch that here:</p>

<center>
	<iframe class="image" style="width: 100%; aspect-ratio: 16 / 9;" src="https://www.youtube.com/embed/fVHMQl7Jqqw" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>
</center>

<p>…and if you haven’t yet, you should pick the game up on Steam as well! It’s a pretty good game, or so I’ve heard. (If you wanna wait for a sale or something, putting the game on your wish list helps a bunch too!)</p>

<p><a href="https://store.steampowered.com/app/4581230/HEXA" class="button">Buy <em>HEXA</em> on Steam</a></p>

<p>The game is $8 USD — same as Itch.io, same as in Playdate Catalog; same as same as same. It’s gonna be really interesting seeing how things do on Steam as compared to Playdate; the original PC release of HEXA happened last October, but being on the new storefront’s honestly giving me a wicked little sense of “we made it”. Look ma, I’m on the computer! No hands!!<sup id="fnref:1"><a href="#fn:1" class="footnote" rel="footnote" role="doc-noteref">1</a></sup></p>

<p>As always, it works natively on Windows, macOS, and Linux. I even have a nicer Linux-specific build that plays really nice with Steam Deck! (The game itself has been enhanced in a bunch of ways to make it run <em>great</em> on Deck, as well. No more clunky keyboard-typing in Mission Command, for example. Now, if anyone could help me figure out how to get my game Deck Verified…? 😅)</p>

<h1 id="whats-new-with-hexa-like-the-game-itself">What’s new with <em>HEXA</em> (like, the game itself)?</h1>

<p>Oh, yeah, there’s a new version of the game available today as well!</p>

<p>For one thing, the randomization engine for both platforms has now been fully SYNCHRONIZED! That means that things like Daily Run, and Missions (custom or stock) are now guaranteed to be the same between Playdate and personal computers. Existing owners may notice a little bumpiness in the Daily Runs today (as of writing), but it should all mellow out by tomorrow, so just ride the wave.</p>

<p>On top of that, there are a bunch of Steam-exclusive features made to bring it up to parity with the Playdate version. The Steam version supports official integration with Steam’s achievements system, on-line leaderboards for the Arcade Mode and Daily Run, and as a little bonus, it even supports rich presence! So your friends can see what you’re doing, and even a real-time score read-out when you’re in the middle of a heated round.</p>

<p>There are a whooole bunch more bug-fixes and tweaks that have been made in the latest version, v3.1.0. The update is available now on all platforms (Playdate Catalog, Itch.io, and Steam), so make sure you’re up-to-date for the latest in HEXA-matching technology! You can read more about the new update here:</p>

<p><a href="../blog/hexa-manual#changelog"><em>HEXA</em> Changelog</a></p>

<p>I might do another hot patch in a couple days, depending on how many new bugs people report. Honestly, I’ve already got a new little list of ones I’ve found since sending the build off, but there’s no way I’m rushing out another patch right now LOL.</p>

<p>This update’s got one more trick up its sleeve, though; and it’s a pretty big new feature for all owners<sup id="fnref:2"><a href="#fn:2" class="footnote" rel="footnote" role="doc-noteref">2</a></sup>…</p>

<h1 id="hexanow-fully-playable-in-japanese"><em>HEXA</em>…now fully playable in Japanese!</h1>

<p>Yeah! On top of English (my native tongue), and French (thanks again, Voxy), <em>HEXA</em> is now fully localized into Japanese! That’s the other big thing. Thanks to the efforts of the lovely Philemax, the game is now much more accessible to people who speak Japanese.</p>

<p>The translation was wonderfully done, and (of course) all handled by human hands; no machine junk here. I even hand-drew all the 2.3 metric tons of Kanji! Translating it to a pixel font that small was…woof. Thanks as well to the lovely proofreaders who helped me double-check, because I’d definitely not be able to myself haha.</p>

<p>I decided to rock ‘n’ roll with this because Playdate as a platform has a tentative priority to support Japanese as its second system language, and I figured it would be fun to have at least one game on the platform that supports it. Also, with the Steam release impending, it felt like a good idea to make the game just a bit more accessible to people outside the English sphere.</p>

<h1 id="hey-i-already-own-the-game-somewhere-else-what-if-i-want-it-on-steam-now">Hey, I already own the game somewhere else. What if I want it on Steam now?</h1>

<p>I’ll always keep every platform up-to-date with the latest patches and tweaks, so don’t worry about missing out on anything like that! If you’re eyeing those Steam-exclusive features, however, you may be in luck…</p>

<p>If you’ve purchased the game <em>on Itch.io</em>, then check your Download page for the game! On that page, there’ll be a button for you to claim a Steam key, which will let you redeem a version of the game on Steam for no extra cost. This works for any Itch.io owners—past present or future—so feel free to snag a DRM-free copy of the game and still reap the benefits of steamy goodness! (It is worth noting that you need to have <em>purchased</em> the game to qualify. If you’ve received a free-game in the past, it won’t count. Sorry!)</p>

<p>If you’ve purchased the game <em>in Playdate Catalog</em>… unfortunately, there’s no way to claim a Steam key via ownership of that version. Itch.io has tools that let me offer up keys to owners on that marketplace automatically, but Catalog doesn’t have anything of the sort. Feel free to purchase the PC version on your platform of choice, and score it on Steam either way!</p>

<h1 id="anyhoo">Anyhoo!</h1>

<p>That’s all I’ve got to share. Thanks for listening, and for enjoying <em>HEXA</em>! I’m still surprised this game’s come so far, and that people who are into the same kind of freaky puzzle games that I am seem to really like it.</p>

<p>Bye now!<sup id="fnref:3"><a href="#fn:3" class="footnote" rel="footnote" role="doc-noteref">3</a></sup></p>

<hr />

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1">
      <p>I don’t know how to fit this into the main body, so I’m putting it into a footnote: I think the dual-platform approach is really good for me. I don’t plan to stop making new games for Playdate <em>or</em> the computer any time soon — I’d love to get a Steam listing for <em>Project Pesto</em> as well, and maybe use the opportunity to give <em>Labsylle</em> some TLC if <em>HEXA</em>’s run proves successful enough to justify it. <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:2">
      <p>Well, all owners who can read Japanese, at least. I just mean, like, all platforms. <a href="#fnref:2" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:3">
      <p>While I’m still talking… Here’s my ham-fisted retroactive justification for the Steam release date, 05.13.2026: 0 + 5 + 1 + 3 + 2 + 0 + 2 + 6 = 19…and there are 19 triangles on the HEXAPLEX. Duuude. …In reality, I just thought the middle of May would give me enough time between the start of April and then to make all the changes I wanted to, and it wound up being a pretty bang-on timeframe. The specific day was arbitrary. OK, goodbye for real! <a href="#fnref:3" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name></name></author><category term="hexa" /><summary type="html"><![CDATA[Long time no…blog! I’m writing in today because I wanna have a single space to yell about all the cool stuff that’s happening with my really good logic-puzzle game, HEXA, today. There are two major things, so let’s start with the biggest…]]></summary></entry><entry><title type="html">Double Cheez-It Review</title><link href="https://rae.wtf/blog/double-cheez-it-review" rel="alternate" type="text/html" title="Double Cheez-It Review" /><published>2026-05-01T00:00:00+00:00</published><updated>2026-05-01T00:00:00+00:00</updated><id>https://rae.wtf/blog/double-cheez-it-review</id><content type="html" xml:base="https://rae.wtf/blog/double-cheez-it-review"><![CDATA[<p>I was at the mini-mart earlier today, and I was sat stunned in the chips aisle trying to pick something to get. Usually I’ll spring for a thing of Combos<sup id="fnref:1"><a href="#fn:1" class="footnote" rel="footnote" role="doc-noteref">1</a></sup> or whatever; and my eyes sort of glaze straight over any other participants in the aisle. But this time, I decided to grab a couple random chippy snacks that I’ve never had before, just to try something new and see how they stack up.</p>

<h1 id="cheez-it-crunch-kickn-nacho-cheese">Cheez-It Crunch: Kick’n Nacho Cheese</h1>
<h2 id="first-impression-oh-come-on">First impression: “oh come on”</h2>
<h2 id="id-give-it-a-2-outta-5">I’d give it a: 2 outta 5</h2>

<p><img src="/blog/images/2026-05-01-1.png" alt="File photo of Cheez-It Crunch: Kick'n Nacho Cheese flavor. I got a much smaller bag than this." /></p>

<p>These ones looked interesting! The shape on ‘em reminds me of like a pretzel in a Chex Mix or something; a weird “crunch matrix” that sorta looks like the Windows logo. Or an actual window, I guess. I wonder if the shape of the chip actually does anything to improve crunch factor, or if it’s all about the texture of the chip itself.</p>

<p>On the topic of texture: it sure is crunchy, kinda like a Cheeto, but I wouldn’t even say they’re <em>as</em> crunchy as a stock Cheez-It, and it quickly turns into this indescribable mass that gets stuck to your teeth. The “Kick’n” nacho flavor is incredibly jarring. The best description I could find for it was like…if a team of scientists got locked in a room, and they wouldn’t be let out until they engineered a nacho cheese flavor that a dog could enjoy. Like, nacho cheese-flavored dog treats?</p>

<p>I got about two deep and am now wondering what to do with the rest of these. Maybe I’ll get used to ‘em over time? Maybe a different flavor would have fared better for me? I dunno! I guess we’ll have to see.</p>

<h1 id="cheez-it-puffd-white-cheddar">Cheez-it Puff’d: White Cheddar</h1>
<h2 id="first-impression-oh-reaches-for-a-couple-more">First impression: “oh!” <em>[reaches for a couple more]</em></h2>
<h2 id="id-give-it-like-a-3-outta-5-35">I’d give it like a: 3 outta 5? 3.5?</h2>

<p><img src="/blog/images/2026-05-01-2.png" alt="File photo of Cheez-It Puff'd: White Cheddar flavor. Again, much larger bag than what I got." /></p>

<p>If the Crunch were the analog for classic Cheetos, then this is obviously trying to contend with the Cheeto Puff. It’s pretty nice! Definitely much nicer than the crunch-ed version. They’re very small—about the same 2D area as a typical Cheez-It—but are eponymously puffy and like…weirdly solid? I mean, they’re air-y, but I expected some kind of huge air pocket inside as if they just pumped some air into a stock one. Instead it maintains its texture the entire way through, which is kinda crazy.</p>

<p>The white cheddar flavor is nice, pretty strong for what it is; kinda reminds me of a Pirate’s Booty or whatever. I don’t know if I’d consider these absolute tops, but I can’t lie I’ve been munching on ‘em as I write this post, so, they’ve got at least some staying power. Maybe I’d get ‘em again if I’m in the mood for something white cheddar-y.</p>

<h1 id="what">What?</h1>

<p>I feel like if you threw a Cheeto Puff into some kind of discombobulator that separated out its best and worst qualities, you’d get these two snacks. The puff being the kind of starting line of having an actual puffed affect, and the crunch being the bit towards the end when it becomes all condensed and weird. Unfortunately, even a Cheeto Puff at its best still doesn’t quite stack up to something like a cheesy Puffcorn.</p>

<p>I didn’t have a blog post in mind when I picked up these snacks, but I figured my blog’s been doing a good job lately, it deserves a little post. As a treat! Maybe I’ll pick up some other new snacks or foods or whatever and give my thoroughly-amateur thoughts on them at some point. Let me know if you wanna see that? Actually, I guess opting-out is the hip thing to do these days; let me know if you <em>don’t</em> wanna see that. Otherwise, I’ll just go ahead and assume everyone loves it.</p>

<hr />

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1">
      <p>Sorry in advance about all the brand name drops, I don’t know how else I’m supposed to do this. Anyway, combos fucking rip dude i love pretzel/cracker and vague flavor goo <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name></name></author><category term="snacks" /><summary type="html"><![CDATA[I was at the mini-mart earlier today, and I was sat stunned in the chips aisle trying to pick something to get. Usually I’ll spring for a thing of Combos1 or whatever; and my eyes sort of glaze straight over any other participants in the aisle. But this time, I decided to grab a couple random chippy snacks that I’ve never had before, just to try something new and see how they stack up. Sorry in advance about all the brand name drops, I don’t know how else I’m supposed to do this. Anyway, combos fucking rip dude i love pretzel/cracker and vague flavor goo &#8617;]]></summary></entry><entry><title type="html">There But For The Hex of Gon Go I</title><link href="https://rae.wtf/blog/there-but-for-the-hex-of-gon-go-i" rel="alternate" type="text/html" title="There But For The Hex of Gon Go I" /><published>2025-10-05T00:00:00+00:00</published><updated>2025-10-05T00:00:00+00:00</updated><id>https://rae.wtf/blog/there-but-for-the-hex-of-gon-go-i</id><content type="html" xml:base="https://rae.wtf/blog/there-but-for-the-hex-of-gon-go-i"><![CDATA[<p>Hello! As I write this, it’s been just a couple of days since I launched HEXA on itch.io, for personal computers. If you’re reading this article, you’d probably like it!:</p>

<p><a href="https://raewtf.itch.io/hexa" class="button">PLUG PLUG PLUG (Buy HEXA for personal computers)</a></p>

<p>…Or if you hate clicking links, I’ll sum it up: it’s a puzzle game, with triangles. You make hexagons, and try to conquer the universe. Simple!</p>

<p><img src="/blog/images/2025-10-05-1.png" alt="Screenshot of HEXA running on a computer. In the center of the screen, there's a black, yellow, and white grid comprised of 19 individual triangles." /></p>

<p>I launched the original game in late July of 2024, exclusively on the Playdate console. This was my second release for the platform, and above all else a real testament to the idea of the game jam: come up with a good idea, iterate ‘till you find something that’s “fun”, and polish it ‘till you can see your own reflection. I gave a whole talk about this!<sup id="fnref:1"><a href="#fn:1" class="footnote" rel="footnote" role="doc-noteref">1</a></sup></p>

<p><a href="https://play.date/games/hexa" class="button">The original Playdate version of HEXA, in Catalog</a></p>

<p>The initial game came together over the course of July — development started on the 4th, and it was released by the 30th. This was due in part to how fast I was able to iterate on the game and come up with something that I thought was really special, but also due to a lot of happenstance things that I just happened to get really lucky about. One could very convincingly argue that HEXA has been more trouble <em>after</em> it released than it ever was before! Hahaha, haha, haaa, ha.</p>

<p>But one thing has been on my mind for a while: this game would ROCK on computers. I don’t think it uses the crank in an imperative way (sorry hekhound), and it feels like it’s got better “legs” than a lot of other titles I’ve made for Playdate. I could technically have ported Cloudburst or something, but people aren’t really clamoring for a weather app on…their computers.</p>

<p>I actually went back through some DM history, and apparently the idea of porting HEXA over using LÖVE2D was in my head since…before HEXA even launched! Peep this:</p>

<p><img src="/blog/images/2025-10-05-2.png" alt="DM message from user 'rae'. Attached is a screenshot of the HEXA game board grid running in a macOS window. It's captioned &quot;STAND BACK IM GONNA BLOW THIS WHOLE THING WIDE OPEN&quot;" /></p>

<p>Crazy, right?! Since then I’ve talked with a couple people and formatted the idea a couple different ways (shoutouts to the incredible <a href="https://github.com/GamesRightMeow/playbit">Playbit</a> library from Alex over at <a href="https://gamesrightmeow.com">Games Right Meow</a>, which aims to make this Playdate &lt;=&gt; LÖVE pipeline way easier with a single-repository approach!), but I figure I should talk a bit about the process of this final incarnation of the port, the one that you can pick up today.</p>

<p>I kinda just…started! I downloaded the LÖVE tools, fired open a new Nova project, and just…started running full-force into this new brick wall that’s been placed in front of me. It took me a solid hour to even figure out how to format a window, but by the end I had…something I wound up replacing with a better system that allowed for fullscreen/free resizing. Wooooo…!</p>

<p>Anyway, I started knowing that I was going to have a few hurdles going in. For one, a lot of my projects rely on specific aspects of the Playdate SDK that aren’t necessarily directly portable to LÖVE. Namely, things like OOP (object-oriented programming), game state-switching (which relies on the OOP itself), timers (in the animation sense, to allow for nice easings and delayed reactions), and sprites (Playdate has these as an easier way to manage compartmentalized logic, drawing order, etc. Plus, they also rely on the OOP library, within my workflow).</p>

<p>I soon found out that I was talking to the right people though, because legend icon superfunc basically immediately pointed me towards a library called <a href="https://hump.readthedocs.io/en/latest/">HUMP</a><sup id="fnref:2"><a href="#fn:2" class="footnote" rel="footnote" role="doc-noteref">2</a></sup>. And this got me like… most of the way there! OOP, game states, timers; the only thing it didn’t really have a <em>direct</em> analog for was sprites, but I worked around that by…not using any sprites. Sustainable? Nope! But it works for now. 😁</p>

<p>The timers were also a bit of a kerfuffle to get working, as well — the HUMP library gave me a pretty close approximation, but I definitely had to rework some of my internal logic about how timers need to work. You can’t, for example, create an independent timer object and call for its standalone value. With HUMP, you need to have a pre-existing value, and pass it into the newly-created timer which it will then interpolate based on its settings. So instead of calling timers directly on the field, I’d have individual variables, and then the timers call the shots from the sidelines.</p>

<p>HUMP’s timers also lack functions like repeating, or reversing; so I bodged my way around that by creating more timers that, after a delay, would influence the initial timer performing the animation. So for example, you’d have a “tween” timer that moves a value from 0 to 1 over a second. Then, I’d set up a “every” timer that, every 1 second, would reset the “tween” timer — if the value it was editing was above 0.5, though, it would instead tween from 1 down to 0. Voila; looping, reversing timer! It’s an incredible hack, but it seems to work great.</p>

<p>From there, a lot of the hard work boiled down to three things: trying to jump the mental hurdle of having to crawl through my old code again; getting used to the idiosyncrasies of the LÖVE2D engine (specifically with reference to porting over <em>other</em> idiosyncrasies from the <em>Playdate</em> engine); and also creating a game in a PC environment (instead of one guaranteed platform, there’s an untold number of display resolutions, control methods, etc etc etc).</p>

<p>One simple thing that really screwed me over was losing Playdate’s arithmetic shorthands. For example, in Playdate’s version of Lua, you can do something like <span class="code-span">foo += 1</span> to increment a variable. Stock Lua, however, does not allow for this, and will get SUPREMELY mad at you if you try. So I had to do it the “long” way; for example <span class="code-span">foo = foo + 1</span>. Not a bad change overall, but I definitely accidentally crashed the game quite a few times by just not remembering that I had to switch these over.</p>

<p>Two other big pain points were window resolutions (which I talked about a tiny bit before), and gamepad support. For the windows, I ended up landing on a solution where the game canvas is technically drawn in “the top left corner”, but is moved using translations and the “scissor” tool into the center of the window. The game will only ever scale on an integer level, because I A. did not want to implement a responsive design, and B. wanted to stay as true as I could to the look of the original game. You can even toggle off the color entirely, and play it near-exactly how it would look running on a Playdate!</p>

<p>The gamepad support is also really funny: I had already hooked up key bindings for each scene, and I didn’t feel like duplicating all of that function logic for the gamepads. So instead, I have a single global “gamepad pressed” function that interprets the button you’re pressing, spoofs a key on the keyboard, and tells the LÖVE engine that you “pressed” that “key”. So far, I haven’t heard about any bugs stemming from it!! 😬 (I also made it so that the on-screen button prompts react appropriately to the given control method you’re using. It’s a small touch, but I feel like it greatly improves the perceived polish level of the game!)</p>

<p>I also had the opportunity to add controller rumble, entirely on a whim — I was looking into adding support for the analog sticks on the controller (which I wound up not even supporting); and only in fumbling around through the LÖVE documentation was where I noticed the rumble function on supported controllers. I literally dropped everything to add that in in around ten minutes or so, and I’m really glad I did, because it adds so much in a way that I’ve never been able to toy around with before on Playdate. It’s so cool to experiment with even the subtle things like that which I just had no outlet for before now, and it makes me really stoked to keep working on stuff for the PC platform! If you haven’t already, try the game on a controller. It’s NICE.</p>

<p>On the topic of bespoke additions to the version for personal computers: obviously, color is a huge one. Here’s a fun fact: the game uses the Pico-8 stock color palette! Not for any particular reason, other than that I needed a palette, and it was the first one that I could think of with relative limitations. It was fun having the freedom of a full color suite, while still being limited in a way that necessitated the use of dithers for more advanced hues. I feel like it keeps the spirit of the Playdate original nicely despite much (read: infinitely) greater color fidelity.</p>

<p>At first, I was planning for a only single set of colors to the HEXAPLEX; the default set you see in the game today. After some tester feedback where players were mentioning that they weren’t sure if some of the tri colors were a bespoke value or just negative space on the game grid, I decided that I needed to change the colors. Problem was, I couldn’t decide which palette looked best…sooooo, I decided to add them all! In the final version, you unlock a new set of colors for your HEXAPLEX for every 1,000 on your top high score (up to 25,000). It’s a small bonus, but I really feel like it was a cool addition that helped underscore the insanity of getting to re-interpret a game that I’ve only ever envisioned in 1-bit, in color.</p>

<p>There were also some things that I added to the PC version, that I then <em>backported</em> into the Playdate original! So, this port was an entirely manual effort. I’m sure someone other than me would have written a batch script to convert function names, or asked one of their silly robots to do the job for them, or smartest of all designed the game to support both platforms in the first place. But for me, the only way I’d have been satisfied with the product was to manually vet all the code myself; staring at the Playdate script side-by-side with the new LÖVE code, and manually roping over logic and making engine conversions on the fly.</p>

<p>This process, start to finish, took about a week or two, but that’s also considering the time it took me to learn the fundamentals of LÖVE and figure out the transpositions for the Playdate-specific functions in the first place. One benefit(?) of doing the port this way, is that when you’re taking a very in-depth look through an entire codebase with a required focus on what it’s doing…you spot a lot of bugs you just kinda never noticed before! It’ll be hard to find the time to dive into a codebase that deep again (especially for a larger game), but it meant that I was also revising the Playdate version as I came across quirks and things I figured should be tweaked.</p>

<p>I did also tweak a couple of things just so that I could make things slightly easier on myself in the porting job, while keeping the visual parity up to code. (Nothing structural to the gameplay or logic, mainly just how a couple small things look). I also added a couple bonus features to the Playdate version; things that I was recommended to add to the PC version, but weren’t necessarily <em>impossible</em> to backport to the Playdate hardware. So, both versions now enjoy the benefits of a full Statistics menu, and granular volume controls rather than a static on/off toggle.</p>

<p>The final leap for me came in actually releasing the game. Bundling the versions for different platforms was and continues to be a pain — you can’t really <em>edit</em> a Windows executable without a Windows machine, so I’ve been unable to add fun metadata like icons (if anyone knows a way to do that from a Mac, get in touch!); and of course when creating an app that runs on computers, they are very very vigilant about virus protection. For extremely good reason, let’s face it!, but as someone who’s used to the ease of having someone sideload a Playdate title, the trust barrier of the computer actively being super reluctant to run some code I’ve compiled was a pretty crazy culture shock.</p>

<p>I released the game on itch.io on October 3rd, 2025; not knowing a single thing about the PC gaming market, or how a title like this would sell — I do have experience with itch’s backend (publishing jam titles for example), but am not too well-versed with maintaining a paid title on the platform. I decided to launch at $8 — the same current price as the Playdate version in Catalog — because I figured this would keep things simple. A couple of things are surprising me as someone who has majority experience selling in Playdate’s Catalog — namely, the lower default revenue share taken by itch.io (10%, compared to 25% in Playdate Catalog), and the addition of the ability to ‘tip’ above MSRP.</p>

<p>Catalog has no tips function, so as a developer I’ve subconsciously written it off in my mind just because I don’t have any experience with it; but I’m surprised that multiple people so far have opted to pay above my suggested price for the game! It’s super nice to see; of course if you’re out there, thank you to bits for your support.</p>

<p>And I think that brings us to…now! It was a super fun experience, and I’m definitely encouraged to make more games for personal computers. Just personally (ha), it was really fun being able to involve my friends who don’t own Playdates — I’ve been making games for a while, but seeing my friends testing and having fun with the things I can make is a magical feeling I didn’t realize I was missing. Once I get more time, I’d absolutely love to continue pursuits in LÖVE2D, and maybe even port some of my other Playdate titles with the same method. (I’ve been <em>racking</em> my brain trying to figure out how <a href="https://play.date/g/rbr">RowBot Rally</a> could work without the crank…) If you’ve read this far, thanks! I hope this interested you. And, if you haven’t picked up the game, I hope you consider it! I know I didn’t talk much about what it’s actually like, but believe me: it’s heaps of fun.</p>

<hr />

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1">
      <p>I really should consider recording a cut of that for YouTube sometime — heaven knows I’ve already forgotten all my lines, and that it wasn’t that good of a talk anyway. <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:2">
      <p>I know, I know. Apparently a lot of LÖVE libraries are named like this. I don’t know why. <a href="#fnref:2" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name></name></author><category term="hexa" /><summary type="html"><![CDATA[Hello! As I write this, it’s been just a couple of days since I launched HEXA on itch.io, for personal computers. If you’re reading this article, you’d probably like it!:]]></summary></entry><entry><title type="html">The Crankyboard Saga</title><link href="https://rae.wtf/blog/the-crankyboard-saga" rel="alternate" type="text/html" title="The Crankyboard Saga" /><published>2025-05-17T00:00:00+00:00</published><updated>2025-05-17T00:00:00+00:00</updated><id>https://rae.wtf/blog/the-crankyboard-saga</id><content type="html" xml:base="https://rae.wtf/blog/the-crankyboard-saga"><![CDATA[<p>So, the Playdate — I’ve never talked about this thing before! Anyway, two important things you need to know heading into this post: the Playdate has games, and the games have scoreboards. …I should probably elaborate.</p>

<p>So certain Playdate games<sup id="fnref:1"><a href="#fn:1" class="footnote" rel="footnote" role="doc-noteref">1</a></sup> have access to on-line scoreboards, giving players some nice global competition. At the time this story is set though (around April 2023), the only way to view a game’s leaderboard — assuming it had one — was to actually buy, download, and launch the game itself, and find where it holds ‘em (assuming it displays ‘em at all). So I figured…why doesn’t somebody make a web viewer for these things?</p>

<p>…Turns out, because nobody reasonably could in a sustainable way. But that wasn’t gonna stop me; so I got to work.</p>

<p><img src="/blog/images/2025-05-17-1.png" alt="WIP first iteration of the Crankyboard." /></p>

<p>Looks pretty good, right? …Eh? Well, I was still working on it at this point. Both in terms of visuals, as well as pretty much all of the underlying code — turns out, the Playdate API is handled in a reasonable manner. CURSES!!</p>

<p>APIs, put very very (overwhelmingly) simply: you yell at a specific endpoint, and it returns data. If you don’t want just anyone accessing that data, though, you can limit it — in Playdate’s case, any request to the leaderboard API, that isn’t coming from either the play.date domain or a physical Playdate console with its unique access token, would just not return anything useful. At this point, all hope seemed lost — how were we gonna be able to read from the API without that access key? Luckily, we have Scratchminer.</p>

<p>This is where the process gets super jank: Scratch helped me set up a dummy Playdate, on a second account. He scrubbed through all the Playdate serial numbers until he found one that wasn’t registered, and then told the Playdate servers “I’d like to register this console!” …In reality, it wasn’t a console at all, but just a very funny server request. And as part of the registration process, the handshaking and back-and-forth; the server provides you with…an access token! Bingo.</p>

<p>So, with this access key, we could now access the scoreboard API. Nice! Some more work later, and in just a weekend…I released the first iteration of the Crankyboard, on April 15th:</p>

<p><img src="/blog/images/2025-05-17-2.png" alt="First iteration of the Crankyboard, displaying Playdate game titles and associated scores." /></p>

<p>On the site end, this was just HTML and CSS, with some light Javascript set up to read from and display stuff in a data file. On my local end, however, I had also crafted the worst Python script of all time to help me maintain the site. Here’s the rundown of that script:</p>

<ul>
  <li>Take this access token, and combine it with a huge hard-coded list of all the Playdate scoreboards we knew existed.</li>
  <li>Scream at every single endpoint, one after another — yes this is as wasteful and silly as it sounds.</li>
  <li>Take all that nice JSON data, and format it into a horrible JS file containing a whole meaty bag of pre-baked HTML elements.</li>
  <li>Take this new JS file, drop it into the Crankyboard source directory, and push a patch — and now, the site has up-to-date info!</li>
</ul>

<p>This is the worst thing ever, and for quite a few reasons: for one, it was supremely hard-coded. If a new game came out that had added new scoreboards, I’d need to update both the website and the Python script to add that in. And to make things worse, the scoreboard API endpoints relied on knowing both the game’s bundle ID as well as the specific board IDs the developer had used to set up their boards. (I think more than a couple times this resulted in me just asking the developers directly what their info was, because guessing didn’t work LOL).</p>

<p>Also, it meant that updates to the boards were completely manual. I mean, not “I’m writing in all the values by hand” manual, but still pretty manual — if someone just posted a new score and they wanted to see it go up, I’d need to be awake and able to update that script, and push the thing through. If I was smarter I probably could have set up a cron job or something to do this automatically at certain periods, but I wasn’t, so this was how we rolled.</p>

<p>One nice thing about doing things manually for the most part, though, is that I could make it very bespoke. An important thing to note about the scoreboard API, is that it only handles a limited amount of data — for each entry you typically only get a username, a timestamp of when it was submitted, their current rank, and an integer number for their actual score. Even by the time I set up the Crankyboard (just a month-ish after the Catalog launched), games were kind of exploiting the integer numbers to allow for more data to be shared. Since the raw scores were never sent anywhere but to the games themselves (where the developers had control over how they were displayed), they could format these scores to their liking — something I had to learn first-hand when building this site.</p>

<p>For example, in <i>Grand Tour Legends</i> — this game’s leaderboards were three of the only to use a feature where the ordering of scores could be <i>flipped</i>, so that a lower number resulted in a higher rank. This makes sense, since being a racing game, having a lower time will naturally be better. But I had never paid any mind to this sort of thing before I had to add the game in, so I had done some pretty awful formatting to flip the scores “back” around, and display them properly.</p>

<p>Another more custom example can be found in <i>Swap Machina</i> — this puzzle game keeps track of both your score and the level you were at when you reached game over, and it does this by attaching the level (which is always a two-digit number) to the very end of the score before submitting. When displaying these scores, it simply has to detach the last two digits of the returned score number, display that as the “level”, and show the remainder as the “score”. I implemented that into Crankyboard too, and felt very smart about it.</p>

<p>Anyhoo, my constant hubris led me to wanna clean up the code and looks pretty much immediately after launch, and so just a day later, I pushed a new site design that made things look a lot cleaner, and added some nice perks like animated graphics and a dark mode.</p>

<p><img src="/blog/images/2025-05-17-3.png" alt="Second iteration of the Crankyboard." /></p>

<p><img src="/blog/images/2025-05-17-4.gif" alt="A gif showing some nice shine effects on the top three scores." /></p>

<p>I was honestly going ham adding way more stuff than this thing needed — toggles for relative and absolute time, special badges hard-coded to be assigned to different usernames (like ones for game developers, leaderboard winners, and people from Panic), showing all available scores for a given board (whereas the games themselves could only ever grab the top ten alongside the player’s own personal best), and a whole bunch more neat stuff like that.</p>

<p>And then, something really funny happened:</p>

<p><img src="/blog/images/2025-05-17-5.png" alt="Discord screenshot — rae saying &quot;IVE BEEN PUT OUT OF BUSINESS?!?!?!&quot;, and a screenshot of a Playdate game page showing leaderboards." /></p>

<p>Panic added scoreboards to the Playdate site! I got run out of business.<sup id="fnref:2"><a href="#fn:2" class="footnote" rel="footnote" role="doc-noteref">2</a></sup></p>

<p>They were actually super apologetic about the situation — turns out the feature’s been around on their end from day 1, and in the time between them implementing it and actually making it live, I just so happened to try the same thing. Theirs ran way more efficiently, though — since it was actually sanctioned, it could yell for the API in a way more responsible way, and crucially update in <i>real-time</i> without manual intervention. This, combined with being displayed on the game pages themselves, definitely made it much more convenient to check.</p>

<p>I kept updating the Crankyboard for a while, but at some point the dummy Playdate had disappeared, and I figured that was as good a sign as any to leave it be. The last update was on July 7th, 2023, so it lasted for a fun few months! And the archive is still around if you just wanna take a peek at the site design (I’m still really happy with how it turned out):</p>

<p><a href="https://rae.wtf/crankyboard" class="button">Visit the Crankyboard archive</a></p>

<p>Crankyboard was a super cool project to make, and it was really fun being a direct through-line to some fun competition like that, but in the end it would never have lasted forever anyway. Manual maintenance relying on one person just isn’t that smart, and it’s low-key nice to not have a weight like that on my shoulders LOL. In the modern day, Playdate scoreboard info is very readily accessible, which is the problem this site was trying to address in the first place; and I feel like it was nice to have in the time it was needed.</p>

<hr />

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1">
      <p>Games in Catalog or a Season — basically, stuff Panic can actually reasonably vet. <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:2">
      <p>Don’t take that as a genuine complaint LOL, I genuinely do not mind; I just think it’s really funny to word it like that. <a href="#fnref:2" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name></name></author><category term="blog" /><summary type="html"><![CDATA[So, the Playdate — I’ve never talked about this thing before! Anyway, two important things you need to know heading into this post: the Playdate has games, and the games have scoreboards. …I should probably elaborate.]]></summary></entry><entry><title type="html">The Lone Pirate</title><link href="https://rae.wtf/blog/the-lone-pirate" rel="alternate" type="text/html" title="The Lone Pirate" /><published>2024-09-08T00:00:00+00:00</published><updated>2024-09-08T00:00:00+00:00</updated><id>https://rae.wtf/blog/the-lone-pirate</id><content type="html" xml:base="https://rae.wtf/blog/the-lone-pirate"><![CDATA[<p>Now, if you’ve read my blog, or checked my website…or checked my socials…or know anything about me as a person, you probably know about the <a href="https://play.date">Playdate</a>, that quirky little game console with a crank, built-in games, and a black-and-white screen. There’s one thing that people might be at least a little surprised to hear, though:</p>

<p><em>There’s not really a piracy scene!</em></p>

<p>…Now I realize by saying that in such a public space that I’m kinda jinxing it, but like—! For a console with completely open game sideloading, and pretty much no copy protection<sup id="fnref:1"><a href="#fn:1" class="footnote" rel="footnote" role="doc-noteref">1</a></sup> besides the honor system…it’s kinda super commendable! Now, that can be attributed to a lot of things — the games are made by small, often just one-or-two-person teams instead of massive evil blood-sucking corporations; that’s a huge part; but still! You’d expect someone to have at least <em>tried</em>, right?</p>

<p>…This blog post chronicles the story of the first (and only) act of Playdate “piracy” I’d ever encountered, how it got shuttered nigh-immediately due to pure happenstance, and some hilarious surrounding bits.</p>

<p>To set the scene: imagine in your head that it’s May 2023. The official Catalog had just launched about a month prior, and games were starting to regularly fill the scene every couple of weeks. It was a nice time! Imagine the collective surprise when someone pops into the Discord, and posts…a link to an unreleased game. (Here’s where I would have put an engaging image or something, but I think they got banned from the Playdate Discord at some point as all of their messages are completely gone. Oh well!)</p>

<p>Anyway, it was a link to the Playdate backend purchase screen for a game called “The Barkless Doctrine”. If you dunno about it, go play it! <a href="https://play.date/g/tbd">It’s really good.</a> Anyhoo, this whole thing happened about a month before the game was actually, like… supposed to be out! A few important things to know about the Playdate API’s inner workings, at this time:</p>

<ul>
  <li>Unpublished games were not accessible from the front-end (the pages are deliberately set up to 404), but they would still be fully accessible if you went through the proverbial back door of the API.</li>
  <li>Games uploaded to Panic’s storage network were <em>sequential</em> — it included all sideload, Catalog, and Season One titles, but a new game addition would come immediately after the last.</li>
  <li>If a game is unpublished, there’s no immediate urgency to fill in finalized details such as…the finished game bundle, or…price.</li>
</ul>

<p>The first point would importantly be fixed very soon after this all went down, but having games available sequentially via the backend means that someone with a keen eye and a Python script could go a-scrubbin’ for unreleased titles! Imagine their face when they stumble upon a completely unheard-of game while poking around back there. What do you do but post about it? And since it wasn’t meant to be, y’know, out yet, the price was tentatively labeled as $0. Or, in other words, …free.</p>

<p>Anyway, of course Neven Mrgan (of Panic; creator of Barkless in the first place) had to step in, and advise against playing this broken early build of the game. If you wanna know how this leak wraps up: the game released for real about a month later, the few people who had installed it illegitimately beforehand had access revoked, the early copy was preserved (privately!) as a neat piece of Playdate history (remember this part!), and all was right with the world once more. Yippee!</p>

<p>And all that brings us to…the conclusion of my wild pre-amble, and onto the beginning of the story of the lone pirate. Man, they should really put a character limit on this thing.</p>

<p>ANYHOO, cue a couple weeks after all this went down, when the person who had initially found the copy of Barkless had texted me over Discord DM. I’m not gonna reveal any of their identifying information, on account of A. I don’t wanna be that kinda person, and B. I don’t even remember it anyway. They got in touch with me asking if I still had a copy of the leaked version of Barkless.</p>

<p>We<sup id="fnref:2"><a href="#fn:2" class="footnote" rel="footnote" role="doc-noteref">2</a></sup>, of course, had saved a copy for preservation reasons.</p>

<p>…We, of course, told this guy we didn’t have any copy.</p>

<p>He then proceeds to lay down the deets of why he was asking: he had created an entire website to congregate and distribute free Playdate titles. Not free as in “these games were made free by the developer”, however — free as in “UH OH. UH OH. UH OH. UH OH. UH OH.”</p>

<p>Some highlights of what was featured (or at least, attempting to be) on this website at the time:</p>

<ul>
  <li>Various games which were listed, but had no download links attributed on account of them not even existing.</li>
  <li>CSS code directly stolen from the official Playdate Catalog! <a href="https://panic.com/extras/ripoff/">Someone phone the Rip-Off Express.</a></li>
  <li>An ‘early build’ of Hidey Spot, sneakily snagged from a Playdate developer forum where it was originally posted.</li>
  <li>A (non-functioning) download for the paid demo to Daily Driver, which this person has notoriously begged for a free copy of publicly in the past.</li>
</ul>

<p>There’s probably some philisophical implications to whether it can be considered a true attempt at piracy if they weren’t actually offering anything you couldn’t get for free elsewhere at the time, but regardless it was really strange. I say a lot of words pretty much amounting to “That’s Not Cool Dude”, and he, in response…immediately deletes every message he sent me. GREAT STRAT™!</p>

<p>Critically, he told exactly one other person about this thing though, and that was… scratchminer.</p>

<p>You may remember scratchminer from Index OS, Scrapbook, or even that footnote from earlier<sup id="fnref:3"><a href="#fn:3" class="footnote" rel="footnote" role="doc-noteref">3</a></sup>. In between all that, he’s been busting open the Playdate pretty much every other way he knew how — importantly, in a responsible way. That means he had methods of contacting people at Panic about weird stuff like this, which he promptly does. They respond with something along the lines of “oh my god ok thanks”, and file a DMCA takedown request.</p>

<p>And that’s… not <em>quite</em> the end of the story! I mean, the site <em>did</em> get taken down, but here’s a funny thing: it was hosted on GitHub. Funnily enough, free hosting — that’ll be hilarious later! — but also, GitHub has a keen eye for transparency, and as such will publicly post any DMCA takedown requests filed at somebody using their service. We checked in on this repository after the site went down out of curiosity, and here’s the hilarious part:</p>

<p>There was nothin’ from Panic.</p>

<p>I mean, there was <em>somethin’</em> from Panic — some unrelated source code leak from 2017 — but there was nothing pertaining to the “free Catalog” website at all. So the only reasonable outcome I can imagine is that someone from Panic reached out to the person, said “please take this down or we’re going to pursue proper legal action”, and then they promptly screamed, ran and destroyed all the evidence.</p>

<p>Anyway, I think that’s about the end of it! The site where the games were originally hosted wound up having some cryptic password entry for a little while, but never came back, was never shared anywhere beyond scratch and I, and is now completely down.</p>

<p>That was over a year ago by now — I’ve never seen anyone try to host Playdate piracy before nor since, and I sure hope it stays that way for a while to come. This place is pretty cool! Let’s keep it that way.</p>

<hr />

<hr />

<p>…While you’re still here, how about a funny button to cap off this story?</p>

<p>For all the “doesn’t wanna pay for things” talk going around, they actually <em>did</em> go through the effort of registering a custom domain for this site! Now, you gotta provide some info to ICANN when you register a domain, so they know Who It’s Going To — this information is typically publicly accessible with a WHOIS lookup, but domain registrars often provide WHOIS protection to shield it from public databases like that — either for free, or for a small fee.</p>

<p>Now, the domain registrar <em>he</em> used provided it for a small (iirc, ~$5 USD) fee alongside the domain, and…would you believe the guy who wasn’t willing to pay for a $5 Playdate game would also not pay the $5 for WHOIS protection?</p>

<p>We, of course, did absolutely <em>nothing</em> with this data. Never saved it anywhere, never shared it beyond us or tried to pursue them in any way, nothing. I just wanna make that very clear. But we both had a really hearty chuckle at the sheer irony of it, and I think it’s a very funny way to end this tale.</p>
<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1">
      <p>For sideloaded titles. Catalog games are encrypted with custom DRM, just for the record. <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:2">
      <p>“We” being myself and scratchminer — he’ll appear in the story later, but just for clarification. <a href="#fnref:2" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:3">
      <p>Footnote number 2. <a href="#fnref:3" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name></name></author><category term="blog" /><summary type="html"><![CDATA[Now, if you’ve read my blog, or checked my website…or checked my socials…or know anything about me as a person, you probably know about the Playdate, that quirky little game console with a crank, built-in games, and a black-and-white screen. There’s one thing that people might be at least a little surprised to hear, though:]]></summary></entry><entry><title type="html">Playdate Exit Animations</title><link href="https://rae.wtf/blog/playdate-exit-animations" rel="alternate" type="text/html" title="Playdate Exit Animations" /><published>2024-06-16T00:00:00+00:00</published><updated>2024-06-16T00:00:00+00:00</updated><id>https://rae.wtf/blog/playdate-exit-animations</id><content type="html" xml:base="https://rae.wtf/blog/playdate-exit-animations"><![CDATA[<p>Hello!</p>

<p>If you’ve come across this blog post, you’re likely a Playdate dev who’s just seen something like this —</p>

<p><img src="/blog/images/2024-06-16-1.gif" alt="Exit animation for Playdate game Reel-istic Fishing. When the player closes the game, a harpoon flies in from the left side of the screen, stabbing into the right; which causes a flood of water that fills up the screen." /></p>

<p>— a cool animation that happens <em>after</em> the player exits back to the Launcher, providing a nice smooth transition. And you may be wondering how to do that for yourself! Luckily, this is the authoritative guide on <em>Making a Cool Exit Animation for your Playdate Game</em>. Let’s go!</p>

<p>The base of this trick is in the <a href="https://sdk.play.date/2.5.0/Inside%20Playdate.html#c-gameWillTerminate"><span class="code-span">playdate.gameWillTerminate()</span></a> function. This allows you to run code after the player exits the game to go home.<sup id="fnref:1"><a href="#fn:1" class="footnote" rel="footnote" role="doc-noteref">1</a></sup> Ordinarily, this function is used for reasonable things, like saving the game’s state. However, with some funny little trickery, we can use this for whatever we want before the game closes.</p>

<p>There are two more special things that make this trick possible: <span class="code-span">while</span> loops, and <a href="https://sdk.play.date/2.5.0/Inside%20Playdate.html#f-display.flush"><span class="code-span">playdate.display.flush()</span></a>.</p>

<p>If you know Lua code already, you should be familiar with <span class="code-span">while</span> loops — they catch the code and keep it running a specific loop until its condition is not met anymore. For example, something like this…</p>

<figure class="highlight"><pre><code class="language-lua" data-lang="lua"><span class="kd">local</span> <span class="n">foo</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="n">foo</span> <span class="o">~=</span> <span class="mi">10</span> <span class="k">do</span>
	<span class="n">foo</span> <span class="o">=</span> <span class="n">foo</span> <span class="o">+</span> <span class="mi">1</span>
<span class="k">end</span></code></pre></figure>

<p>…will loop through 10 times, incrementing <span class="code-span">foo</span> by 1 each time. When it reaches 10, the <span class="code-span">while</span> loop’s condition stops being met, and so it stops iterating.</p>

<p><span class="code-span">playdate.display.flush()</span> is responsible for manually updating the Playdate screen. When you’re running functions such as <span class="code-span">playdate.gameWillTerminate()</span>, your game’s usual update code is not being run. On one hand, this is nice because it means you don’t have to worry about your game’s code continuing to update and possibly messing stuff up while your game is paused or closing. On the other hand, it means <span class="code-span">playdate.update()</span>, which is responsible for updating the screen normally, isn’t running at all. So this function’s important to make sure things are displaying.</p>

<p>We can combine all these components to make something graphical happen over a period of time, upon the <span class="code-span">playdate.gameWillTerminate()</span> function being called. Here is an example code snippet demonstrating a basic use case:</p>

<figure class="highlight"><pre><code class="language-lua" data-lang="lua"><span class="k">function</span> <span class="nc">playdate</span><span class="p">.</span><span class="nf">gameWillTerminate</span><span class="p">()</span>
	<span class="kd">local</span> <span class="n">img</span> <span class="o">=</span> <span class="n">playdate</span><span class="p">.</span><span class="n">graphics</span><span class="p">.</span><span class="n">getDisplayImage</span><span class="p">()</span>
	<span class="kd">local</span> <span class="n">byebye</span> <span class="o">=</span> <span class="n">playdate</span><span class="p">.</span><span class="n">graphics</span><span class="p">.</span><span class="n">imagetable</span><span class="p">.</span><span class="n">new</span><span class="p">(</span><span class="s1">'byebye'</span><span class="p">)</span>
	<span class="kd">local</span> <span class="n">byebyeanim</span> <span class="o">=</span> <span class="n">playdate</span><span class="p">.</span><span class="n">graphics</span><span class="p">.</span><span class="n">animator</span><span class="p">.</span><span class="n">new</span><span class="p">(</span><span class="mi">1500</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="o">#</span><span class="n">byebye</span><span class="p">)</span>
	<span class="n">playdate</span><span class="p">.</span><span class="n">graphics</span><span class="p">.</span><span class="n">setDrawOffset</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
	<span class="k">while</span> <span class="ow">not</span> <span class="n">byebyeanim</span><span class="p">:</span><span class="n">ended</span><span class="p">()</span> <span class="k">do</span>
		<span class="n">img</span><span class="p">:</span><span class="n">draw</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
		<span class="n">byebye</span><span class="p">:</span><span class="n">drawImage</span><span class="p">(</span><span class="nb">math.floor</span><span class="p">(</span><span class="n">byebyeanim</span><span class="p">:</span><span class="n">currentValue</span><span class="p">()),</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
		<span class="n">playdate</span><span class="p">.</span><span class="n">display</span><span class="p">.</span><span class="n">flush</span><span class="p">()</span>
	<span class="k">end</span>
<span class="k">end</span></code></pre></figure>

<p>Let’s break this down quickly.</p>

<p>When the <span class="code-span">playdate.gameWillTerminate()</span> function is called:</p>

<ul>
  <li><span class="code-span">img</span> is created, which essentially takes a picture of the last thing your game was showing before you ran the close function. We gotta make sure to save this, or else it wouldn’t display otherwise.</li>
  <li><span class="code-span">byebye</span> is created; an imagetable depicting some kind of closing animation. 400x240 resolution is recommended, but transparency is OK (the game’s snapshot will be drawn under this!)</li>
  <li>A Playdate animator is created, to travel from 1 to the length of the imagetable over the course of a second and a half (this can be adjusted to whatever length you like<sup id="fnref:2"><a href="#fn:2" class="footnote" rel="footnote" role="doc-noteref">2</a></sup>)</li>
  <li>Also, the graphics’ draw-offset is reset back to the origin point. Depending on what happens in your game, this might not be necessary, but if you do use draw-offset in your game code make sure to reset this, or else any graphics you have won’t be drawn on-screen.</li>
  <li>Now, the <span class="code-span">while</span> loop — this essentially is running through repeatedly, checking if the animator has ended yet. If not, it proceeds to draw to the display; first laying down the game snapshot, then drawing the current frame of the imagetable (this value is floored since it only accepts integers), and then the all-important <span class="code-span">playdate.display.flush()</span> is called to make it appear on-screen.</li>
</ul>

<p>After the animation has ended, the <span class="code-span">while</span> loop will stop iterating, and the OS will close your game as normal.</p>

<p>A couple more notes about usage:</p>

<ul>
  <li>Since <span class="code-span">playdate.update()</span> isn’t around to manage the FPS, This <span class="code-span">while</span> + <span class="code-span">playdate.display.flush()</span> combo will refresh the screen as fast as it possibly can. Make sure nothing inside your loop relies on frame-based timing, as it will run <em>way</em> faster than expected.</li>
  <li>You can absolutely run other code alongside this – just make sure that any additional code you add is <em>not</em> placed inside the <span class="code-span">while</span> loop! Otherwise, it will run hundreds and hundreds of times every time your game closes; and that’s not too great.</li>
  <li>If created inside the <span class="code-span">playdate.gameWillTerminate()</span> loop, you can use the Playdate’s <a href="https://sdk.play.date/2.5.0/#C-sound.sampleplayer">sampleplayer</a> function to play sound effects as part of your exit animation as well!<sup id="fnref:3"><a href="#fn:3" class="footnote" rel="footnote" role="doc-noteref">3</a></sup></li>
</ul>

<p><a href="https://play.date/games/swap-machina">Swap Machina</a> was the first game to apply this tactic, adding it in a post-launch update. This game’s dev, <a href="https://nstbayless.github.io">NaOH</a>, gets all the credit for discovering how to put all this together and make a super cool effect! I just like spreading the word about how to use it because it’s a really neat trick and every dev I’ve seen put it in a game seems to use it in a super unique way. You can see the original source code<sup id="fnref:4"><a href="#fn:4" class="footnote" rel="footnote" role="doc-noteref">4</a></sup> for the effect in Swap Machina <a href="https://discord.com/channels/675983554655551509/675983555209330691/1131269469902217327">here</a> (link to within the Playdate Squad Discord server). You should also check out Swap Machina on Catalog — it’s pretty great!</p>

<p>Here are a few more examples of games with cool-as-heck exit animations:</p>

<ul>
  <li>Reel-istic Fishing, from Toad (pictured at the start of this article)</li>
  <li>Platform 10 &amp; Diction, from Dr. Gabe</li>
  <li>Diora, from The3DPrintist</li>
  <li>Shift II, from Scenic Route Software, uses it as a funny easter egg</li>
  <li>Blippo+, from YACHT/Telefantasy/Dustin Mierau</li>
</ul>

<p>Anyway, that should be all you need to know to get started! If you make a rad exit animation for your game, feel free to let me know! I’d love to see it.</p>

<hr />

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1">
      <p>It should be noted that there are similar functions for things such as locking &amp; unlocking the device, opening and closing the system menu, and letting the device go to sleep as it runs out of battery. This tactic could work with these as well, but just keep in mind the player’s patience level as these can be more repetitive actions (for example, a player wouldn’t wanna see a 10-second animation play out every time they open the menu). Also, when it comes to device unlocking, your regular update code starts running just before the function is called. <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:2">
      <p>When using this technique, make sure that your code doesn’t run for over 10 seconds consecutively. Playdate has a “watchdog” that constantly checks the last time <span class="code-span">playdate.update()</span> has been called. If it hasn’t run in over 10 seconds, it will assume your game is stuck in an endless loop or otherwise frozen (because it, technically, is); and crash the whole system to bail the user out of it. <a href="#fnref:2" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:3">
      <p>Combine this with the points brought up in footnote 1, and you can do hilarious stuff like <a href="https://youtu.be/D5gCeK8DPRY">this</a>. <a href="#fnref:3" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:4">
      <p>Swap Machina was created with Pulp, and then converted to Lua to add extra juice using their <a href="https://github.com/nstbayless/pulp-to-lua">Pulp Mill</a> tool. Unfortunately, I don’t think it’s possible to implement such an effect in a Pulp game without first converting it to Lua. Sorry! <a href="#fnref:4" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name></name></author><category term="blog" /><summary type="html"><![CDATA[Hello!]]></summary></entry><entry><title type="html">RowBot Rally Playdate Update Showcase, &amp;amp;.. More!!</title><link href="https://rae.wtf/blog/playdate-update-showcase-more" rel="alternate" type="text/html" title="RowBot Rally Playdate Update Showcase, &amp;amp;.. More!!" /><published>2024-02-28T00:00:00+00:00</published><updated>2024-02-28T00:00:00+00:00</updated><id>https://rae.wtf/blog/playdate-update-showcase-more</id><content type="html" xml:base="https://rae.wtf/blog/playdate-update-showcase-more"><![CDATA[<h1 id="hey-folks">Hey folks!!</h1>

<p>It’s rae again! How’ve y’all been so far this year? I’ve been working pretty hard on RowBot these last few months in between college and … life, stuff; and I’ve been getting quite a bit done in the way of refactoring and getting things looking and feeling nicer to play. Personally, I think things are looking AWESOME. Like. more awesome than ever.</p>

<p>Anyway, I’m writing in because…there was a Playdate Update today! If you don’t know what that is, it’s a showcase from Panic themselves, in which they highlight some radical upcoming games for Playdate, and also some neat hardware news and stuff like that. <em>“But what does that have to do with RowBot?”</em>, you might ask? First off, ouch, and second of all, I’m happy to break the news to you…</p>

<h1 id="woah-i-was-in-there">Woah, I was in there!</h1>

<p>That’s right! Me and my game both had the immense honor of being featured in the latest Playdate Update video. If you haven’t seen the full presentation, by the way, you should go check it out! There was a ton of other cool stuff featured, and it’s a must-watch for any Playdate fans looking to stay in the loop about some rad upcoming games.</p>

<center>
	<iframe class="image" style="width: 100%; aspect-ratio: 16 / 9;" src="https://www.youtube.com/embed/1I9mO4pYBPI" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>
</center>

<p>It was super fun putting everything here together, and it’s a pretty awesome (and anxiety-inducing!) feeling seeing my game go out in front of an untold number of new faces. If you’re one of those new faces who managed to find me over here: Hello! I hope you like the game! Try out the early demo, maybe! :D</p>

<p>I wanna give my biggest heartiest thank you to everyone over at <a href="https://panic.com/">Panic</a> for giving me the incredible opportunity to be featured here. They reached out to me about it back in December, and since then I had a wonderful time working with <a href="https://voxy.space/">Voxy</a> on making the showcase video stand out among the rest, and also getting the Catalog page lookin’ ship-shape for its premiere.</p>

<p>…Oh yeah, that too!</p>

<h1 id="rowbot-rally-coming-to-catalog">RowBot Rally: Coming to Catalog<em>!!</em></h1>

<p><em>YEA LIKE HOLY SHIT RIGHT??</em></p>

<p>It’s official, it’s real, it’s <em>HAPPENING</em>. As of today, RowBot Rally is <a href="https://play.date/games/rowbot-rally">officially listed on the Playdate Catalog</a>!!!</p>

<p><img src="/blog/images/2024-02-28-1.png" alt="Picture of RowBot Rally's Playdate Catalog store page, marked as &quot;Currently unavailable&quot;." /></p>

<p>It’s not available for purchase just yet of course, because the game’s not…done; but you can <a href="https://play.date/games/rowbot-rally">hop on over to the game’s page</a> to give it a Wishlist! (You can also find it in the Coming Soon section of the main Catalog page, holy fuuuuuuuuuck.) By wishlisting it, you’ll get notified over email the moment it comes out for realzies. That’s pretty awesome!</p>

<p>Real talk: getting something of mine onto the Catalog has pretty much been my dream goal since I first knew about the store back in early 2023. It really felt like a place where some of the best Playdate games were allowed to shine as bright as possible, and I’m seriously so stoked that my stuff’s got the chops to be up there with ‘em. Thank you once again to Panic, and thanks to everybody reading this as well!! I don’t think my game would be anywhere near the level it is today without y’alls’ support and feedback. And bug reports — yuck.</p>

<p>I def plan to make the most of this spot in the Catalog — I’ve already put in support for on-line Leaderboards within the Time Trials mode, that way you can duke it out worldwide and compete for the top score against everybody else! This is honestly one of my favorite parts; I’m so excited to see all the competition up close and personal as soon as the game comes out later this year.</p>

<p><img src="/blog/images/2024-02-28-2.png" alt="Screenshot of RowBot Rally, showing the on-line leaderboards screen. The only entrant is &quot;rae&quot;, at rank number 1 with a time of 9 minutes, 58 seconds, and 33 milliseconds." /></p>

<h1 id="the-process">The Process™</h1>

<p>So to have a showcase spot in a Playdate Update, you need a showcase video. <em>(what a surprising fact!)</em> This means that, well…I had to make one! A minute-ish-long segment talking about who I am, what my game is, when it’s coming out and why it’s rad as hell. Usually these videos have the developer on-screen talkin’ up their game…but I hate my face, so I needed a backup plan. After a brief thought about animating the whole thing in the style of the in-game cutscenes (which would have taken me like five months, and that’s pretty unfortunate considering I only had around a month to get the whole thing done), I had an epiphany:</p>

<p>puppets;;</p>

<p><img src="/blog/images/2024-02-28-3.jpg" alt="A hand in a black glove holds up a paper puppet of a moth, hands clasped; taped to a popsicle stick. In the background is a big green posterboard and a cutting mat." /></p>

<p>Paper puppets, specifically. It was fool-proof — I could be deliberately kinda lo-fi and crafty with it, so all my mistakes look intentional, I wouldn’t have to show my face (only my voice, which was at least more easy to come to terms with), and also I figured it was a really unique way to stand out amongst everything else in the prezzie. Everyone would be all like: <em>“Did you see that idiot with the paper puppets?”</em> or whatever people say in response to things.</p>

<p>So, after one very panicked trip to the arts &amp; crafts store, I got back with some hearty cardstock, a bunch of popsicle sticks, an X-acto knife and some green posterboard. Then, it was time to get to work.</p>

<p><img src="/blog/images/2024-02-28-4.jpg" alt="An assortment of paper moth puppets on popsicle sticks. Paper scraps litter the area around." /></p>

<p>I had a real fun time working on all the assets needed for recording this project. It’s been quite a long while since I had the opportunity to get knee-deep in some proper physical material crafts like that, and it was super fun to just go nuts with an X-acto knife and experiment to see what looked good. And I didn’t injure myself once! The mark of a good quality product.</p>

<p><img src="/blog/images/2024-02-28-5.jpg" alt="Image of a paper moth puppet, observing a paper script with intent." /></p>

<p>The Catalog book-throw scene was one of the earliest scenes I shot, and also probably my favorite part of the video. Ruining the movie magic: my brother helped me by throwing the book in from off-screen, since unfortunately I don’t have more than two arms (yet). The confetti was a last-minute move by me, and I think it really sold the shot — the sound effect should have been a sneeze or something though.</p>

<p><img src="/blog/images/2024-02-28-6.jpg" alt="An open book rests on a table, with the word &quot;catalog&quot; written in big white letters, and some decorations surrounding it." /></p>

<p>It’s at this point that I wanna give major MAJOR (like, the majorest) shouts to <a href="https://voxy.space">Voxy</a>, who got me through…pretty much this entire process. He helped me clean up my super-rough script and get it fitting nicely within the timeframe we had, spruced up my voiceover to get it to acceptable levels (since I know nothing about audio editing), AND he edited the whole final cut of the video (since I also don’t know anything about video editing) — he’s responsible for all of the super tight pacing and the snazzy, appropriately-themed transitions and graphics. The final product turned out so unbelievably super good, and I really have him to thank for it turning out the way it did.</p>

<p><img src="/blog/images/2024-02-28-7.png" alt="Editing timeline for the showcase video, courtesy of Voxy." /></p>

<p>After a hectic weekend-ish of editing and last-minute nitpicky changes (sorry!), we got the video turned in around a week before it was due (hooray for being on time!), and then it was just a long long … seemingly-forever wait until the Update video premiered on their page. And that day happens to be today! I mean, I’m writing this in advance, but I can guarantee you I’m <em>absolutely reeling</em> over it. (Update from the night before the premiere: <em>yeah i was pretty on the ball i am so reeling over it.</em>) If you wanna check out just the RowBot segment, by the way; I’ve mirrored it on my personal YouTube page here:</p>

<center>
	<iframe class="image" style="width: 100%; aspect-ratio: 16 / 9;" src="https://www.youtube.com/embed/MNpX_rV_ItU" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>
</center>

<h1 id="okay-and-what-aboutthe-game">Okay and what about…the game?</h1>

<p>It’s been coming along really nicely, actually! So far this year, my efforts have been focused on refactoring all the existing code, and redrawing a lot of the graphics; getting everything all nice and squeaky clean both under and over the hood. I realize to some this may sound like I’m just running around in circles instead of progressing on the stuff that’s been waiting to get done for months now…and I’m not saying that <em>isn’t</em> what’s happening,</p>

<p>…that’s the end of that sentence.</p>

<p>Things have been coming along super nicely though! All the newly-freshened up stuff runs a lot better than it used to. I have some things that were previously set up <em>suuuuuuuper</em> poorly (even for my standards!) running a LOT nicer now (global functions, dynamic text strings, etc. so good), and I hope that doing this work helps me finish the remaining stuff even faster and more easily.</p>

<p>There’s also some new changes that I’ve been making that I hope will make the gameplay experience even better when the final game drops:</p>

<ul>
  <li>On-line leaderboard support for Time Trials (but you’ve already heard about this one), complete with a custom page to view all the leaderboard score (but you’ve already seen that one).</li>
  <li>Polygonizing the boat! That’s been a HUGE one. Thank you to TheMediocritist and gang for helping me set up shop with this change, as it’s been a serious game changer. It looks nicer, runs faster, and I can squash and stretch and scale and rotate it without much drawback at all. SOOOOO good.</li>
  <li>Support for three separate story save slots (so a friend or family can pop in and try out a story run without affecting your save…or you can just beat the game three times in a row. Up to you! (This was a big aspect of me deciding to start from scratch code-wise, so I could finagle the save code in here without it being even messier than it already was.))</li>
  <li>A new stats screen, so you can see global funny stats such as total time played, your favorite (most-played) and least favorite (least-played) stages, and Distance Cranked (with support for both imperial and metric)! The most important screen of all time.</li>
</ul>

<p><img src="/blog/images/2024-02-28-8.png" alt="RowBot Rally stats screen, showing off statistics such as &quot;Total play time&quot;, &quot;Races completed&quot;, and &quot;Favourite Stage&quot;." /></p>

<p>If I can keep up the pace that I’ve been having so far, then I hope to get a new version of DEMO out sometime in mid-to-late March perhaps? School’s still happening, and I’m going off for a trip some weekend in the middle there, but things have definitely been moving along quickly, and there’s only a few more big things to touch up before this build is DEMO-ready.</p>

<p>Of course, I’m once again plugging <a href="https://mastodon.gamedev.place/@rae">my Mastodon page</a>, and the <a href="https://discord.com/channels/675983554655551509/1095159609620185240">Devlog thread</a> on the Playdate Squad Discord server. And, if you like a less wordy flavor… I’m now on <a href="https://bsky.app/profile/rae.wtf">Bluesky</a> as well! Usually just mirroring my Masto posts in shorter form. More frequent updates are always posted in those spots, and I’m on Discord pretty much every day so it’s the easiest way to funnel feedback my way. (I also take email, and check it regularly — there’s a link <a href="https://play.date/games/rowbot-rally">on the Catalog page</a> you can use! <em>I can’t believe I can say that now.</em>)</p>

<h1 id="one-more-thing">One More Thing…</h1>

<p>Hello!! I’m amending this post from the FUTURE…but also the past. (Like a month after I first drafted this thing up.) Today (as of writing), I just found out that RowBot Rally was also nominated for <em>Most Anticipated Game</em> in this year’s Playdate Community Awards! That’s, frankly, nuts. I believe it’s one of the only awards in the show to be entirely community-voted, so it’s especially flooring to see my game up next to one by Lucas God-Damn Pope™ in the running for things people are most excited to play this year.</p>

<p>The awards are coming around later on, so let’s see if we can snag that ultimate W…that’d be pretty cool! Regardless, though, I’m super duper excited about the nomination, and it’s really inspiring and crazy to see so many people who are this excited for my silly little boat game. From the bottom of my heart, thank YOU! 💖</p>

<h1 id="thats-it">That’s it!</h1>

<p><img src="/blog/images/2024-02-28-9.png" alt="RowBot Rally in the Playdate Catalog, as seen from an actual Playdate device. The game's in a category labeled &quot;COMING SOON&quot;." /></p>

<p>Alright, I <em>think</em> that’s all the updates I’ve got in my back pocket for now. Back to work on the game! I’ll hopefully see y’all soon with some more things to share, but ‘till then… Sea ya later!</p>]]></content><author><name></name></author><category term="rowbot rally" /><summary type="html"><![CDATA[Hey folks!!]]></summary></entry><entry><title type="html">2023 Awards Show - Consider a Nomination!</title><link href="https://rae.wtf/blog/2023-awards-show-consider-a-nomination" rel="alternate" type="text/html" title="2023 Awards Show - Consider a Nomination!" /><published>2023-12-04T00:00:00+00:00</published><updated>2023-12-04T00:00:00+00:00</updated><id>https://rae.wtf/blog/2023-awards-show-consider-a-nomination</id><content type="html" xml:base="https://rae.wtf/blog/2023-awards-show-consider-a-nomination"><![CDATA[<h1 id="howdy">Howdy!</h1>
<p>Hey folks, rae here. It’s December! (my <em>godddddd!</em>)</p>

<p>So, if you’ve been in the Playdate-verse for a while, you know that last year TYM hosted a community awards ceremony, handing badges and bragging rights to some of the primo games released throughout 2022 in Playdate history. This year, they’re doing it again! And unlike last year…i’m here. :3</p>

<p>I’ve got a…few things in the pipeline lately, but my big project is clearly RowBot. So, I’m officially putting the call out there for folks that are hyped about the game: make your voice heard, and <a href="https://docs.google.com/forms/d/e/1FAIpQLSfqM3AZnv3F8Vi-_jT_sUtretB10yW3RRo4LT1Inw0DTYf3ag/viewform?usp=sf_link">nominate RowBot Rally for Most Anticipated Game</a> at this year’s awards show!</p>

<p><img src="/blog/images/2023-12-04-1.png" alt="Doodle of a bunny proudly wearing a badge, and holding a thumbs up. &quot;Why not nominate RowBot Rally for 'Most Anticipated Game' at the 2023 awards show?&quot;" /></p>

<p>It’d mean a lot to me if you did. This year has been amazing for me, thanks in absolutely no small part to Playdate, this community, and everything people have put out and been working on through this year and beyond. It’s been so fun seeing both others working on insane games and apps, and people being excited for the stuff I’m making as well (like, what???). Whether you wanna nominate my game or not, get in there and vote for your favorites! (trust me, there’s a <em>bunch</em> of categories.)</p>

<h1 id="anything-else">Anything else?</h1>

<p>Well, on the RowBot side of things, at least…not much LOL! This whole fall has been very hectic, with classes and lots of pet projects taking up a hefty chunk of time that would have been otherwise available to me. I’ve got this whole of December off, and I wanna focus that time into finishing up and releasing a smaller game of mine, and then cracking back down on RowBot after that’s squared away.</p>

<p>There has been one big breakthrough recently…and that’s Procreate Dreams. As you may or may not know, the current cutscenes in the DEMO version of the game were animated using Procreate. Procreate is an amazing drawing and painting tool for iPads! Procreate is also a really not-great animation tool. It’s serviceable, it works, but there’s no support for motion tweens, in-depth editing or audio of any kind, and it’s kinda grafted onto the existing layer system which makes handling a longer-form project like this really…messy. But!! Dreams seems like it has INCREDIBLE potential for the future of these animated cutscenes, to the point where I may try my hand at redoing the existing ones as well. (Cue the eye roll from the people who’ve already seen like three different versions of that first cutscene :woozy_face:)</p>

<p>There’s definitely a…steep learning curve to the app. Even as a self-considered Procreate expert (not a euphemism), there’s a lot of…weird stuff? Like, why is the onion skin hiding in the timecode bar. Why. BUT I hope to have some more RowBot updates coming around Soon™™™™™ enough!! I definitely can’t really promise anything in the near-term, which SUCKS because I hate leaving projects on the back-burner, but life’s just been really swiping my attention away from most-any gamedev lately. You know how it is.</p>

<p>Anyway! That’s the gist of it! Why not <a href="https://docs.google.com/forms/d/e/1FAIpQLSfqM3AZnv3F8Vi-_jT_sUtretB10yW3RRo4LT1Inw0DTYf3ag/viewform?usp=sf_link">get out there and gimme a nommy</a> if you’re feeling so inclined, but otherwise… Sea ya later!</p>]]></content><author><name></name></author><category term="rowbot rally" /><summary type="html"><![CDATA[Howdy! Hey folks, rae here. It’s December! (my godddddd!)]]></summary></entry><entry><title type="html">RowBot Rally Demo Update, and Recent Happenings!</title><link href="https://rae.wtf/blog/demo-update-and-recent-happenings" rel="alternate" type="text/html" title="RowBot Rally Demo Update, and Recent Happenings!" /><published>2023-10-10T00:00:00+00:00</published><updated>2023-10-10T00:00:00+00:00</updated><id>https://rae.wtf/blog/demo-update-and-recent-happenings</id><content type="html" xml:base="https://rae.wtf/blog/demo-update-and-recent-happenings"><![CDATA[<h1 id="howdy">Howdy!</h1>

<p>It’s rae again! Happy Monday! Before I get into the meat of this post, I just wanna talk about how much I appreciate all of the support that this game’s been getting, both in general and especially since the launch of the demo! I’ve gotten so much good feedback, bug reports, and all that jazz, and it’s frankly all been really exciting to experience. To think that people are actually as pumped to see my game come to fruition as I am to make it is pretty radical. Thank you all so much!!</p>

<p><img src="/blog/images/2023-10-10-1.png" alt="A bunny and a robot are excitedly holding up a banner that reads &quot;THANK YOU!!&quot;" /></p>

<p>Anyway, I’m here because I’ve got a couple of pieces of news to share; a new update as well as some recent developments from the past month or so! Let’s start with the thing that affects you right now…</p>

<h1 id="new-demo-update">New Demo Update!</h1>

<p>Yup, as of TODAY there’s a new version of the demo build available to download! While there’s no new <em>content</em> available here (naturally), there’s a whole slew of bug fixes and updates and little tweaks to hopefully make your experience that much better, both right now as well as after the game comes out. What kind of stuff, you ask? Well, here’s a handy change log!</p>

<h2 id="demo-v020">Demo v0.2.0</h2>

<h3 id="added">Added</h3>

<ul>
  <li>Accessibility Settings! — New gameplay tweaks and toggle-able options to hopefully make this game more playable by everybody. These can be found in Options &gt; Accessibility.
    <ul>
      <li>D-pad Controls — Play the game using controls adapted for buttons only, instead of the crank. Pressing d-pad up will increase your rowing power, and holding d-pad Down will decrease it.</li>
      <li>Auto-Skip — This option skips any non-essential parts of the game, such as the tutorial, any cutscenes, and later on, the credits.</li>
      <li>Row Sensitivity — This adjusts how hard you need to row to match pace with, or overtake, your RowBot. This affects the standard crank controls, as well as the d-pad controls, if enabled.</li>
      <li>Power Flip — A simple cosmetic change that flips the Power Meter, if you prefer it that way. This has no effect if Pro UI is enabled.</li>
    </ul>
  </li>
</ul>

<h3 id="changed">Changed</h3>

<ul>
  <li>Options Rebuild! — The Options menu has been rebuilt from the ground up. This makes it waaay more cromulent both under and over the hood, and also suits the new Accessibility menu quite well.</li>
  <li>Pro UI Move — The “Pro UI” toggle has been moved into the Accessibility sub-menu of the Options. You can still change it quickly mid-race, through the slide menu!</li>
  <li>On-again, Off-again — There’s now some new better-looking graphics for on/off toggles in the Options. Instead of just text, now there’s a neat animated little graphic. Hooray!</li>
  <li>Race Tweak — Adjusted the default rowing speeds just a touch, in order to suit the new Accessibility options like the Row Sensitivity.</li>
  <li>Dizzied Out — Removed a slightly-secret thing where steering really fast would make the reaction images go dizzy. This was causing some unintended problems (see Fixed no. 1), though I’d like to re-add this a bit later on if I can figure out a better way to pull it off.</li>
  <li>Title Tweaks — Adjusted how the “Start!” screen works a tad. Now, hitting A before the logo fully finishes animating in won’t cause a harsh jump up. Polish, polish, polish!</li>
  <li>Crash, Dummy! — Crashing sounds now play at a slightly-variable rate, instead of the same one all the time.</li>
</ul>

<h3 id="fixed">Fixed</h3>

<ul>
  <li>Reactions React — The reaction images in the Power Meter now properly react when crashing into a wall.</li>
  <li>Collision Course — Retooled the collision system during a race, which should hopefully quell some rare-ish issues where sometimes you’d be sent into a wall, instead of out of it. Thanks to scratchminer and Toad for helping me out with this, as always. Collisions suuuck, and I vow never to collide with anything again.</li>
  <li>The Most Important White Chunk In The World — The little description blockquote-block thing in the race intro now appears as it’s supposed to. I was just forgetting to set the color to white properly, my bad.</li>
  <li>Point and Click — The guiding arrows in the Tutorial will now disappear when you crash for the first time. Before, the arrows would cover up the A button prompt on the guide UI, which is what we in the industry call a Big Whoopsie™.</li>
  <li>Wake for it… — Fixed a small visual bug which was preventing the “full left-turn” wake image from appearing properly. It was just some totally stupid elseif troubles, and a thing was triggering before another thing causing the thing that I wanted to happen to not happen. GREAT STUFF ALL AROUND! Thanks Voxy for helping me snipe that one.</li>
</ul>

<h3 id="changed-not-that-youd-know">Changed, not that you’d know…</h3>

<ul>
  <li>Save Indicator! — A little indicator appears in the top-left corner any time the game’s writing data to disk. This has no bearing in the demo, where there’s not really any data to save. Before, I was editing saves during the middle of gameplay, and only committing them to disk when the user closed the game. This wasn’t really effective in the event of, say, a crash, where the game wouldn’t have a chance to save while bailing out. Oops, lost progress! That should hopefully be quelled now.</li>
  <li>Delete, Deleted — The “Reset Data” setting in the Options menu has been removed. Doesn’t matter in the demo for obvious reasons, but I realized that this button was probably a little redundant/confusing in the end. In the future, if you’d like to clear all data in the final game, you can do so from Playdate’s system Settings. You can also start a new game without clearing all of your other progress such as best times or unlocks.</li>
  <li>Splash Text — The title screen now has splash texts at the top, after your first time logging in. Well, not in the demo — I dunno whether it’s your first time playing or your hundredth. (Why would you play one demo that much?!) So, this is a final-game-only thing, at least for now…but they’ll be arguably funny, I promise.</li>
</ul>

<p>That all being said…if you find a bug, or you have a piece of feedback, please let me know! There are email links on the main page of this game, but you can also contact me over Mastodon or my Discord, if you’ve got it. Anyway, with the change log out of the way, let’s see what else has been going on in the world of RowBot!</p>

<h1 id="igda-twin-cities">IGDA Twin Cities!</h1>

<p>Towards the end of September, the game demo was featured in the IGDA Twin Cities Playtest stream! I’d like to thank Mark LaCroix, and everybody at <a href="https://noblerobot.com/">Noble Robot</a> and the <a href="https://igdatc.org/">IGDA Twin Cities chapter</a> for letting me join, it was an absolute blast seeing people try my game live, the whole way through, for the first time. If you wanna check out the stream, there’s a replay here on YouTube (originally aired September 20th, 2023):</p>

<center>
	<iframe class="image" style="width: 100%; aspect-ratio: 16 / 9;" src="https://www.youtube.com/embed/_XBWTnATILI?start=3046" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>
</center>

<p>One thing about the playtesters’ experiences that really surprised me…this game was HARD. Like, <em>pretty dang hard</em>. I learned that I’ve succumbed to a type of “developer bias” — I’ve (of course) been with my game, hand in hand, over the entire course of its development. So, since I know all the bits and bobs, I think it’s pretty easy to control. I’ve gotten used to it! The folks who have never tried or even seen this game before, respectfully…were crashin’ into walls a LOT more than I’d expected hahaha. It definitely makes me think I’ll need to tweak some stuff and see if i can make the control scheme any easier to get a crank on, since the difficulty level from the perspective of a new player really blew me away frankly.</p>

<p>The good news, is that (at least from what they were saying), it seems like a <em>good</em> kind of hard. Like, that specific point of difficulty where you feel like it’s not the fault of the game for controlling poorly but instead the fault of you for not having a good enough grip on the controls — I think in the industry, this is called ‘The Foddy Zone’. I hope I can play into that kind of difficulty for the later parts of the game, but for the first course it definitely might be way too much. IT’S A LEARNING EXPERIENCE FOR THE AGES!!</p>

<h1 id="playdate-community-direct">Playdate Community Direct!</h1>

<p>Oh yeah, last week(!) my game was also featured in <a href="https://youtube.com/@tinyyellowmachine">Tiny Yellow Machine</a>’s Playdate Community Direct!! The trailer featured is up on this game’s main page, but I highly encourage you to check out the full direct replay on YouTube, featuring a TON of really really rad Playdate games in-development! (originally aired October 5th, 2023):</p>

<center>
	&lt;iframe class="image"style="width: 100%; aspect-ratio: 16 / 9;" src="https://www.youtube.com/embed/xoV-zXigJtg" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen&gt;&lt;/iframe&gt;
</center>

<p>Thank you to Gant for hosting this entire thing! Myself and many others are very happy to come together and see what the Playdate community is up to lately. I’d also like to thank <a href="https://toadleyundercontrol.itch.io/">Toad</a> for helping me out with editing together the trailer! I was really toeing the deadline and frankly dreading having to fire open the video editing software, so you really saved my tail here. Also, shoutouts to everybody in the direct’s live chat who almost-immediately started hyping my game up as soon as it came on screen!! That was REALLY awesome to see, and it frankly put quite into perspective the amount of excitement that my silly little boat game is stirring up.</p>

<h1 id="thats-all-for-now">That’s all for now!</h1>

<p>Okay, back to work for me! I’ve been busy with a LOT of other stuff lately (quite a few things of mine were shown off in that very same community Direct, actually!), so I dunno exactly when I’ll be back with more RowBot news to share. Make sure to keep tabs on my <a href="https://mastodon.gamedev.place/@rae">Mastodon</a> page, as well as <a href="https://discord.com/channels/675983554655551509/1095159609620185240">the devlog thread in the Playdate Squad Discord server</a> for more frequent (if small and oft-off-topic) updates on the game if you’re interested! Until next time, though: Sea ya later!</p>]]></content><author><name></name></author><category term="rowbot rally" /><summary type="html"><![CDATA[Howdy!]]></summary></entry></feed>