Metroid 2 Hacking Retrospective (feat. Maps)

A room from an unfinished hack of mine from 2015.

A room from an unfinished hack of mine from 2015.

Metroid 2 hacking has a long and storied history --- mostly a history of nobody caring about it, except to colorize it. Depending on what you consider a kosher colorization, there have been at least 3 attempts to colorize the game (see RHDN), and 2 separate projects to take an existing colorization and make it hardware compatible. (Clearly, the masses demand their space genocide to be in technicolor.)

On the other hand, there has been very little interest in, like, making actually full-meat hacks of the thing --- you know, the kind of thing where an amateur takes a chisel to a game and either creates the most beautiful or the most grotesque thing you've ever seen. This was mostly likely the result of a vicious cycle of nobody being interested in making an high quality editor because nobody was interested in hacking the game in the first place because there was an already existing editor that was Bad (Zelda 3 hacking was reportedly stuck in this same purgatory for ages, by my recollection).

The capital-B Bad editor in question was M2Edit. Here's what its FAQ has to say:

This page will cover most of the commonly asked questions relating to M2Edit and using it.

  1. Why aren't there any questions here yet? That's because nobody has asked any yet

Last Modified: 3-10-04

Not promising.

To be fair though, calling the editor Bad is a bit uncharitable. Sure, the interface has a slight bit of jank, but when it comes to actually doing the things the editor is capable of doing, it's perfectly stable and capable. What makes it Bad is what it can't do: namely, edit door transitions or enemies. Even just being able to edit one or the other would have allowed people to make "half-hacks"[1] and get the ball rolling for more ambitious things, but without either of those features it was functionally just a very fancy paint program.[2]

Metroid 2 hacking would continue in this state for a decade with no interest, until I decided to roll up my sleeves and make a joke:

Metroid 2 :Challenge (2015)

Metroid 2: Challenge

A year prior to making this hack, I started looking into M2 hacking myself, using a debugger and hex editor to try to figure out some of the persistent mysteries. I was able to figure out where the enemy data was stored (in another bank), how doors worked (a little bytecode interpreter), how to edit the starting location (same format as a save file), and even how to edit sprite data. I wasn't a particularly skilled hacker by any means, but it was more effort than anybody had put into hacking the game in a solid decade.

Sometime after posting this information on the Metroid Construction forums and talking about it on IRC, I got the brainworms to make this hack. The main thrust of the joke was that this was a pretending to be a sequel to an awful, unfinished M1 hack called Metroid Challenge. About as many people as I expected found the thing funny, but nobody actually got the joke. It turns out Metroid Challenge hadn't been preserved on the site quite yet, and basically nobody there remembered the era of the old Challenge Games romhacking group.[3]

Regardless of all that history, there is slightly more to this hack of mine than meets the eye. Besides making that small alteration to the landing site (with M2Edit), I also managed to edit the starting loadout/savefile (with a hex editor), move the position of two (2!) enemies (with a hex editor), and edit two sprite-maps because it was funny (with a hex-editor). It's a stupid hack, that's for certain, but it wouldn't have been possible with the knowledge available a year prior.

After making this hack, I had ambitions of making a slightly larger hack. I made the starting room (see the top of the post), which won the community's Room of the Week contest. I thought I'd be able to complete the project in a couple months, but I quickly fizzled out after the prospect of manually hex-editing the enemy positions and door transitions (and their respective pointers) hit my brain like a bag of bricks.

That's not to say there weren't attempts at improving the status quo of the editors. A few of us set up out own little hidden IRC channel for talking about M2 hacking, and the guy who made Editroid even made a prototype level viewer for us. We had ambitions of creating a new editor in C#, which we tentatively called ROSE (Return Of Samus Editor), but over time our ambitions fizzled, partly due to the general inexperience of the group, partly due to my personal burnout (and dislike of IRC), and partly due to a lack of broader interest. We also made an abortive attempt at making a disassembly of the game, but without anything buildable (and due to extenuating life circumstances on my part) I hit burnout there as well.

Metroid Purge (2018)

Metroid Purge

Due to my burnout I took an extended hiatus from MetConst community for a few years (roughly between 2017 and 2020), but things did improve slightly in the meantime. The venerable high priest and wisest sage of Super Metroid hacking, PJBoy,[4] started making a disassembly based off of our prior efforts. Meanwhile, the hacker Liam Najor took up the torch and claimed the name ROSE for their web-based editor. Unlike M2Edit, this editor could modify enemy positions. Unfortunately, the bewildering interface and questionable stability (at the time) put some people off, so I never got around to using it.[5] Still, more than one person has made a hack using it, so it was clearly better than the alternative.

With this editor in hand, Liam was able to make the hack Metroid Purge for a community contest. It's a small hack, with relatively simple rooms, lots of repetition, and some visual errors bugs, but it's still the first Metroid 2 hack to be released that was not a joke or a graphical edit, so it deserves credit for that. While I'm not sure if it qualifies as capital-G Good by some arbitrary Redditor's design metrics, I'm willing to forgive most of its flaws on account of it being a contest hack. The end result may be short, bewildering, and disorienting, but if you're a fan of games that are short, bewildering, and disorienting then I recommend giving it a spin.

Samus Goes to the Fridge to Get a Glass of Milk II (2020)

Samus Goes to the Fridge to Get a Glass of Milk... TWO!!!

Eventually, thanks to pandemic-induced boredom, I came around back to the Metroid Construction community and found myself joining the MetConst Discord server.[6] They had a public #metroid-ii channel, but at the time it was regarded mostly as a meme, because the rare discussions that happened there typically had nothing to do with Metroid 2.

In July of that year the community hosted the "One Week Hacking Contest." I was waist-deep in Metroid 1 hacking (drawing tilesets, failing to make a better disassembly, and generally hack-ideating), so I just made a Metroid 1 hack called Samus vs. Karid-X.[7] Nevertheless, somebody else decided to take up the torch and submit an M2 hack:[8] @kkzero

kkzero's hacking record is odder than most on MetConst. You may know him best from his colorization of Kirby's Dream Land 2,[9] but on MetConst he is known for two things: extracting/reinserting the scripts of various metroid games to filter them through dozens of layers of Google Translate, and venerable Samus Goes To The Fridge To Get A Glass Of Milk hacks, which are somewhere between a jokes and a proofs of concept. As a whole, the series has achieved a sort of elevated meme status in the community.

As for the hack itself, it happens to be the second hack developed with ROSE (proving that editor is at least twice as capable as M2Edit). The design itself isn't particularly complex, just being a rudimentary item sequence up to the end boss, but the game finds a tone and sticks to it. The faces in the environment are silly, and the ending is even sillier. It's not much, but I highly recommend it. (Ethical Disclosure: my name appears in the credits to this, I have made my own riff on this series in ZZT, and the two of us are close enough to being online friends (by my standards, at least).)

The Disassembly and the LAMP

While kkzero's hack didn't spark an immediate Metroid 2 hacking revolution, it left a lingering thought in our head that greatness was still possible. These lingering thoughts eventually bore fruit in 2022 in the form of 2 separate projects.

LAMP The first is yet another Metroid 2 editor, this time made by fellow romhacker ConConner in C#. It was initially called YAM2E (Yet Another Metroid 2 Editor), though after some discussion we settled on the less cheeky name of LAMP[10] (Level Arranging Metroid (2) Program). ConConner is from the GBA Metroid hacking community, so he decided to model the program's interface after MAGE, the preferred editor for Fusion and Zero Mission hackers. As such, it has a relatively pleasant and easy to use interface. While the editor is still in its early stages, it can already move enemies around and edit door transitions, already making it the most fully-featured editor the game has ever had.

The other project is a complete disassembly of the game. I started working on it towards the beginning of last May, and over the course of the next 5 months I was in some sort of hyper-focused fugue state where I managed to avoid burning out before crossing the finish line. I learned from my previous failed attempts that I needed to get a buildable disassembly out as quickly as possible, and then worry about cleaning it up as I went along. mgbdis proved perfectly sufficient for this need. From there, it was just a matter of pushing commits to a repository and cataloguing the number of remaining functions in a spreadsheet before I lost my sanity.

While I could take all of the credit for the disassembly, that would be factually incorrect. For one, I constantly referenced PJBoy's prior disassembly (especially early on in the project). While it wasn't buildable, PJ had managed to figure out how a lot of the game's core systems worked, which provided a substantial headstart. Additionally, PJ also volunteered to work on the music engine and song data (which were essentially self-contained). Both these things saved me a substantial amount of effort, and I would like to thank him publicly (he deserves it).

So yeah, after about 5 months of concerted effort the disassembly was essentially "complete." Every function was named and commented. While there are always more improvements possible with regards to code clarity, documentation, renaming things, interoperability with tooling, et cetera, the current codebase is more than sufficient for anybody to just go ahead and make as many deep and invasive changes as they want.

Distress Call (2023)

The first person to take the bite and use these new tools to make something is an experienced Super Metroid hacker by the name of moehr. By my reckoning the hack in question he, named Distress Call,[11] is perhaps the finest distillation of his personal style:

Part of the first room of Metroid 2: Distress Call

moehr's hacking record with Super Metroid is quite interesting. While the division of labor with his collaborators varies from hack-to-hack and they all have wildly different visual aesthetics,[12] they still share a unifying "moehr flavor." He thrives on adding bizarre, new, chocolatey mechanics, and reskinning and recombining vanilla things until they are barely recognizable. Moehrover, regardless of their particular aesthetic, they share a certain visual maximalism that requires a careful eye to parse. The best and worst thing I can say about Distress Call is "It's a moehr hack."

Prior to starting work on the hack proper, moehr got his feet wet in the disassembly by making a patch that added a pause-screen map to the game. While we both agreed that the inclusion of a detailed in-game map ultimately detracts from the original game, he opted to still use the patch for his hack because of the wide, non-linear structure he gave his adventure.

Besides the addition of a map, moehr has made many more changes to the design and code of the game. In a DM with me he said that (compared to the ersatz in-place patching that Super Metroid hackers have to deal with) "Working with the source ASM almost feels like cheating it's that good." With not too much help from me, he was able to add new upgrades, modify existing upgrades, tweak enemy behaviors, add a tile animation system, and even add in brand new block types. While this all sounds like a lot on paper, moehr humbly claims that the hack is just a "state of the state" sort of thing --- in other words, these are all things that hackers can reasonably accomplish with the current tools and a smidge of elbow grease.

If nothing else, I feel immensely vindicated and quite chuffed to see that a hacker's authorial style can survive the jump from a 16-bit favorite to an oft-maligned 8-bit entry. Even if this ends up being the only project that is completed after the disassembly, I will feel satisfied that a near-decade's worth of fitful efforts by several people to hack this game has finally resulted in something cool.

The Future

With new tools and a shiny new just released, interest in Metroid 2 hacking finally seems to be picking up. Recently, the hacker LOO-E released the graphical hack Marimus Returns --- the kind of unpolished crossover hack that you'd expect a teenager to make in the late 90s on Nesticle, and proof that there is still beauty in the world. Another hacker is in the process of collating a bunch of graphical and code tweaks to make one of those obsessive "special edition" type hacks that you normally only see games like FF1 or SMB1 get.

As for the more distant future, will the venerable Junkoid receive a pocket-sized Game Boy sequel? Will Digital Mantra go on a psychoactive rampage and give us the most exquisite tiling the Game Boy has ever seen? Will someone end up making yet Another Metroid 2 Colorization? Will ROSE end up overtaking LAMP in the editor wars? Will I ever get around to making a hack? Will there ever be true peace in space? Perhaps only the laser cannon on your arm knows for sure...


Notes[13]

  1. In the Super Metroid community, the term "half-hack" referred to a subgenre of early hacks that refrained from making certain edits to the game due to the technical skill required. Usually, things like doors, room sizes, and items counts per room would remain unchanged, forcing the creators to make something on top of the original game's skeleton. After playing enough half-hacks, one would develop a firm intuition of what room from the original game you were in, regardless of how thorough the attempted edits were. Some still get made these days, and some are tolerable or even good, but in general the genre is not looked back on very fondly. ^

  1. Going back to the Zelda 3 example, the editor "Hyrule Magic" was much the opposite. It could do anything and everything you wanted it to, up to and including corrupting your entire project on the drop of a hat. ^

  1. Deep Lore: Challenge Games' Super Metroid Challenge would eventually turn into a little hack called Super Metroid Redesign. ^

  1. This title was previously held by Kejardon (if you're reading this: Hi!), though he hasn't really been active in the community in the past decade. ^

  1. I don't want to sound like I'm harshing on ROSE too hard. It has received various updates over the years to make it better than it was initially, and currently has unique features such as a built-in editor for testing. ^

  1. This is also the same time I joined the Discord of ZZT (Hi ZZT friends!). ^

  1. Explaining the community lore behind Karid-X (along with how I've followed up on this hack over the past couple years) would be a whole 'nother post on its own. ^

  1. Entirely by coincidence someone else decided to submit a hack that used Metroid 2's tiles for the contest. Even if it was made in Zero Mission, it is clear evidence that children yearn for the depths of SR-388. ^

  1. How does this have over 140000 downloads!?!?!? ^

  1. Because the save points look like lamps. ^

  1. Also known as distressCall. ^

  1. Seriously, just look at the screenshots of Clocktoberfest vs. Temple of the Winds. ^

  1. I just wanted to post these maps to Cohost, but then I nerdsniped myself into providing this history in the process of providing context. Thanks to moehr, PJBoy, and others for looking over the drafts of this to confirm its accuracy. ^