A screenshot from the Catfish's Maw dungeon in Link's Awakening. The text "Ssso...you are the outsssider, come to wake the Wind Fisssh..." is visible.

I didn't grow up playing Legend of Zelda games. I was strictly about Mario and Pokemon games. I don't even think I knew Zelda was a Nintendo franchise, as a kid. It seemed so much darker and edgier than the games I was used to playing.

Because of this, it wasn't until 2018 that I actually played a Zelda game. I can't remember what I played first; it was either the original Legend of Zelda, or it was Breath of the Wild, which is funny because that's literally the widest possible range of Zelda games that existed at the time. I didn't really like either of them. The original Legend of Zelda is very obtuse and difficult. You basically have to look stuff up in order to know where to go, and the difficulty is very punishing. Breath of the Wild has a similar directionless feeling, and I really couldn't stand the fact that weapons would break on you. They're both excellent, critically acclaimed games; they're just not for me, per se.

The next Zelda games I tried playing are probably not ones most people would automatically think of: Oracle of Ages, and Oracle of Seasons. They're a paired set of games for the Gameboy Color, intended to be completed in either order, and playing one gives you a password for the other game that allows it to act as a sort of continuation of the other. Playing both games gives you access to the true final boss, and ties the story together. I'd read online that Ages focuses on puzzles while Seasons focuses on battles, so I decided to play Ages first, as I like puzzles more. And I loved it.

Hatkirby on February 9th, 2024 at 2:50:20pm
👍 3 👎

Back in 2009, I made a little game called Maze Of Life. In each level, you are placed into a randomly generated maze, and you have to make your way to the centre. The goal is to complete as many levels as possible without getting stuck.

The natural question here would be -- how do you get stuck in a maze? Therein lies the twist with this game. The mazes are generated using a cellular automata similar to Conway's Game of Life, and the rules of the automata continue to apply while you are playing the level. This means that the walls of the maze can shift around you when you walk by them. Every level begins in a completable state, but you can make it incompletable based on your actions. You can get pretty far using skill -- there are patterns to the shifts in the maze that you can pick up on -- but sometimes? Sometimes your luck just runs out.

To make a long story short, despite this game being written in C++, it is now available to play within your browser:

And now I'm going to talk about it, because I have a tooth infection and I'm too dizzy to play video games.

Hatkirby on November 4th, 2023 at 4:03:03pm
👍 1 👎

Hey all, I'm here to talk about The Witness again. When it comes to speedrunning video games, it's uncommon for players to play the game just as the developers intended. Speedruns usually incorporate tricks that allow you to do things faster than you're supposed to or that allow you to entirely skip doing something ordinarily required. And very often, these tricks take advantage of glitches in the game, to achieve something that goes past the boundary of the laws of the game.

The Witness, for a very long time, was almost entirely glitchless. The only real exception was Windmill Cycle Skip, which was discovered within the first couple of weeks of the game's release, and saved some time in 100% and 99.8%. I'll talk about it more when I talk about Windmill. But other than that, we were really just playing the game as intended, as quickly as possible.

There were a few tricks we used that seemed like glitches, like Jungle Wall Skip and panel sniping. Even Latch Skip is arguably not a glitch, and rather just an exploit of the game's error correcting functionality, although people will argue you on this one. People had definitely discovered things that were glitches, some of which would become very important later on (e.g. the Theatre Pause Glitch), but at the time they just seemed like random bugs with no real use.

And then everything changed when we found out that walls aren't real.

Hatkirby on October 29th, 2023 at 12:36:03pm
👍 2 👎

It keeps happening. The Four Island Quotes Database is back.

I'm always excited about memorializing stuff. The interactions I have with my friends are a treasure, and I want to remember them and get to enjoy them again and again. I don't really trust third-party services like Discord to stay up forever, or continue to allow me easy access to old conversations. I prefer to own my data whenever possible.

And that's why I semi-rewrote the Quotes DB again (well, I took the standalone Quotes DB I implemented in Rails for Four Island 3 and integrated it into my current website). That's why I made sure to preserve all of the old quotes, even if they involve people I no longer talk to -- my past self considered them important enough to memorialize, so I'll respect that. That's also why I spent hours going through Discord, finding conversations to archive. And when I say that, I mean that there are over a hundred new quotes in the Quotes DB.

It's actually kind of wild -- the last quote from the FI3 era was submitted in January of 2014. Then, almost ten full years pass, and 100 quotes get posted within the span of two days. The first new quote even mentions being raised from the dead. Classic.

Hatkirby on October 22nd, 2023 at 8:17:50pm
👍 1 👎

How many of you here have personally witnessed a total eclipse of the sun? To stand, one day, in the shadow of the moon is one of my humble goals in life.

(Spoiler warning for The Witness)

Most of the people reading this blog probably know that I am fond of a video game called The Witness. "Fond" may not be a strong enough word -- it's my favourite game I've ever played, and I've been speedrunning it for over three years at this point. If you don't know what it is, it's a puzzle game set in a 3D environment, where you solve grid puzzles on screens scattered across a deserted island. It's all about epiphany-driven gameplay; the game doesn't tell you anything about how the puzzles work. You have to figure it out yourself, and when you do it's usually a really satisfying moment.

Now, I've been playing this game for a long time, and I've memorised the solutions to every single puzzle. Most of the time, speedruns of this game are pretty straightforward. You have to solve certain sets of puzzles in order to get to a specific goal, be it the main end of the game, or the secret end, or the post-game level, etc. And in order to be fast at that, you have to 1) know the solutions to the puzzles, and 2) be skilled at inputting them. Both of these requirements allow for you to get gradual improvement the more you play, while allowing for a high skill ceiling. And that's it!

Well... Sort of. If we don't think about 100%.

Hatkirby on October 17th, 2023 at 4:48:02pm
👍 9 👎

TLDR: Going forward, I will be hosting most of my code on code.fourisland.com instead of Github.

At some point in the last decade, Github took over the world of open source development.

I can't really remember when it happened. Before then, I would maintain my source repositories on my own server. I used CVS at first, before switching to Subversion, then Git, and then Mercurial. I stuck with Mercurial through most of high school, if I recall correctly, although now that I've become an avid Git user (perhaps something forced onto me in college?), I'm not sure what it was that I liked about Mercurial over Git. The point is that throughout that time, I just had source repos on my server, and I'd clone them on whatever computer I was doing development on. It was fine.

One of the earliest times I can remember using Github was to host the code for Rawr eBooks. It was adapted from a class assignment in my second year of college, so that timeline seems to fit the narrative that school got me into using Git. It was around that time that I also moved away from maintaining my own infrastructure as much. I was no longer using my personal website, Four Island (yes, the one you're on right now! it's complicated). I also was not working on the kind of projects I had worked on in high school anymore.

Hatkirby on October 13th, 2023 at 3:12:57pm
👍 1 👎

I've been talking on Twitter a good amount about the fact that I'm making a Mother 3 fangame. I get a lot of questions about it, so I figured it was time to make an FAQ!

Hatkirby on March 12th, 2021 at 12:57:50pm
👍 2 👎

I've made some changes to my Twitter bots recently regarding how they choose the words that they post. This was in response to a situation wherein a follower notified me that @blessthisdoobie posted a tweet containing the n word. In this post, I'd like to discuss 1) how this happened, and 2) what I've done to prevent it from happening again. However, I first and foremost want to apologize to the followers of the bot. I take it very seriously when my bots post offensive content, and I want to do what I can to ensure that my bots remain safe and fun for all.

Now, I'd like to explain how this happened in the first place. A large number of my bots use a library I created called verbly for natural language processing. This includes @blessthisdoobie, which uses verbly to find nouns and verbs that rhyme. verbly is a complex library, and the reason behind this issue requires some knowledge of how verbly works. I will provide a brief description of the relevant parts of the library, and if it sounds interesting, I wrote a motivating example for the data model that you can read later.

Hatkirby on August 14th, 2018 at 9:23:16pm
👍 2 👎

I love top 10 lists, and I love Super Mario Sunshine, so I've been watching a lot of people's top 10 hardest Shine Sprite videos recently. While they were enjoyable, I found myself disagreeing with some of their choices. So, I decided to do my own! This is really just a top 5 list, though, because while I could find 5 other Shines that I found difficult to do, I didn't have as much to say about them as these 5. So, without further ado, here are the five Shine Sprites that I considered to be the hardest to get in my playthrough:

5. The Runaway Ferris Wheel

There's some difficult platforming to be done here, but you won't be seeing much of it.
There's some difficult platforming to be done here, but you won't be seeing much of it.

I don't usually get angry at video games, but this level made me angry. Not because the platforming was too difficult -- it wasn't easy, but had I been unencumbered I'm sure I would have found it a welcome challenge. No, the problem is that the camera refuses to allow you to play this level. No matter what you do, no matter how high up the back of the Ferris wheel you get, the camera will be fighting you the entire time, trying to rotate around to the front of the structure. The problem with this is that you are then completely blocked from view. This can happen at any moment, and falling all the way back down to the beginning of the section just because the camera randomly swiveled away is completely infuriating. Regardless of how difficult or easy the actual level is ignoring the camera, the camera is part of gameplay and here is treating itself as a game mechanic.

Hatkirby on June 15th, 2018 at 7:56:57pm
👍 1 👎

I recently spent some time coming up with and then executing an overly convoluted plan for catching Raikou in Pokémon FireRed. It was a lot of fun, and I wanted to see what I could come up with next. However, I've already caught all three of the legendary birds, and to catch Entei and Suicune I can use the same method I used to catch Raikou. So what's left? Only the "final boss" (so to say) of the Kanto based games: Mewtwo.

A challenge it is! Mewtwo is one of the hardest Pokémon to catch in FireRed (depending on how you feel about the roaming legendaries), and since I don't want to use my Master Ball, I tried to figure out what I could do to make the encounter easier. To formalize things a bit, I came up with some rules reminiscent of what I did last time:

  1. Don't use a Master Ball. No exceptions!
  2. Avoid trading with a Hoenn game; that is, if possible, only use Pokémon and items obtainable in Pokémon FireRed and LeafGreen. This rule is breakable on the condition that there doesn't end up being a satisfying solution that doesn't require a Hoenn game. However, in the event that I had to break this rule, I also came up with another cute little twist to make the challenge more interesting, which I'll talk about at another time.
  3. Avoid using a Smeargle (which is only obtainable in Pokémon Emerald anyway). The reason for this is that it's often not difficult to configure a Smeargle to have whatever moveset you want, and that can make the challenge less fun. It's not a hard and fast rule, but if there's a way I can get a Pokémon other than Smeargle to know the moves I need, I'd rather do that.

I ended up coming up with 4 different strategies, of which there were two standouts. Unfortunately, all of these strategies involved trading with a Hoenn game, and one of the standouts even involved a Smeargle. I was almost resigned to breaking the Hoenn rule, but I'm happy I didn't give up, because I eventually figured out a way to modify the Smeargle method such that it no longer required Smeargle or even Hoenn! This plan is possibly (probably) even more complicated than the method I used to catch Raikou, and I had a lot of fun with it. I present to you: The Imprison Method.

Hatkirby on July 2nd, 2017 at 10:48:02pm
👍 2 👎